nnn/nnn.h

179 lines
5.4 KiB
C
Raw Normal View History

2015-11-20 14:36:40 +00:00
/* See LICENSE file for copyright and license details. */
2017-06-20 04:56:31 +00:00
#define CONTROL(c) ((c) ^ 0x40)
2017-06-20 04:56:31 +00:00
/* Supported actions */
enum action {
2017-12-12 20:16:50 +00:00
SEL_BACK = 1,
2017-06-20 04:56:31 +00:00
SEL_GOIN,
SEL_NEXT,
SEL_PREV,
SEL_PGDN,
SEL_PGUP,
SEL_HOME,
SEL_END,
SEL_CD,
SEL_CDHOME,
SEL_CDBEGIN,
SEL_CDLAST,
SEL_CDBM,
2017-09-01 14:27:36 +00:00
SEL_PIN,
SEL_VISIT,
2017-12-12 20:16:50 +00:00
SEL_FLTR,
SEL_MFLTR,
SEL_SEARCH,
2017-06-20 04:56:31 +00:00
SEL_TOGGLEDOT,
SEL_DETAIL,
SEL_STATS,
SEL_MEDIA,
SEL_FMEDIA,
SEL_DFB,
2017-09-27 14:49:42 +00:00
SEL_LIST,
SEL_EXTRACT,
2017-06-20 04:56:31 +00:00
SEL_FSIZE,
SEL_BSIZE,
SEL_MTIME,
SEL_REDRAW,
SEL_COPY,
SEL_COPYMUL,
2018-01-28 06:03:12 +00:00
SEL_QUOTE,
2017-12-25 10:25:53 +00:00
SEL_OPEN,
2017-09-10 07:35:25 +00:00
SEL_NEW,
2017-08-22 19:16:58 +00:00
SEL_RENAME,
2018-02-24 14:16:58 +00:00
SEL_RENAMEALL,
2017-06-20 04:56:31 +00:00
SEL_HELP,
SEL_RUN,
SEL_RUNARG,
2017-12-12 20:16:50 +00:00
SEL_CDQUIT,
SEL_QUIT,
2017-06-20 04:56:31 +00:00
};
/* Associate a pressed key to an action */
struct key {
int sym; /* Key pressed */
enum action act; /* Action */
2017-09-27 14:49:42 +00:00
char *run; /* Program to run or program option */
2017-06-20 04:56:31 +00:00
char *env; /* Environment variable to run */
};
/* Extension pattern and mime combination */
struct assoc {
char *regex; /* Regex to match on filename */
char *mime; /* File type */
};
2015-02-04 12:32:16 +00:00
static struct assoc assocs[] = {
2018-03-03 04:00:03 +00:00
{ "\\.(c|cpp|h|log|md|py|rb|sh|txt)$", "text" },
2014-10-21 10:15:27 +00:00
};
static struct key bindings[] = {
/* Back */
2017-04-03 17:03:46 +00:00
{ KEY_BACKSPACE, SEL_BACK, "", "" },
{ KEY_LEFT, SEL_BACK, "", "" },
{ 'h', SEL_BACK, "", "" },
{ CONTROL('H'), SEL_BACK, "", "" },
/* Inside */
2017-04-03 17:03:46 +00:00
{ KEY_ENTER, SEL_GOIN, "", "" },
{ '\r', SEL_GOIN, "", "" },
{ KEY_RIGHT, SEL_GOIN, "", "" },
{ 'l', SEL_GOIN, "", "" },
/* Next */
2017-04-03 17:03:46 +00:00
{ 'j', SEL_NEXT, "", "" },
{ KEY_DOWN, SEL_NEXT, "", "" },
{ CONTROL('N'), SEL_NEXT, "", "" },
/* Previous */
2017-04-03 17:03:46 +00:00
{ 'k', SEL_PREV, "", "" },
{ KEY_UP, SEL_PREV, "", "" },
{ CONTROL('P'), SEL_PREV, "", "" },
/* Page down */
2017-04-03 17:03:46 +00:00
{ KEY_NPAGE, SEL_PGDN, "", "" },
{ CONTROL('D'), SEL_PGDN, "", "" },
/* Page up */
2017-04-03 17:03:46 +00:00
{ KEY_PPAGE, SEL_PGUP, "", "" },
{ CONTROL('U'), SEL_PGUP, "", "" },
/* First entry */
2017-04-03 17:03:46 +00:00
{ KEY_HOME, SEL_HOME, "", "" },
{ 'g', SEL_HOME, "", "" },
2017-04-03 17:03:46 +00:00
{ CONTROL('A'), SEL_HOME, "", "" },
{ '^', SEL_HOME, "", "" },
/* Last entry */
2017-04-03 17:03:46 +00:00
{ KEY_END, SEL_END, "", "" },
{ 'G', SEL_END, "", "" },
2017-04-03 17:03:46 +00:00
{ CONTROL('E'), SEL_END, "", "" },
{ '$', SEL_END, "", "" },
/* Change dir */
2017-04-03 17:03:46 +00:00
{ 'c', SEL_CD, "", "" },
/* HOME */
2017-04-03 17:03:46 +00:00
{ '~', SEL_CDHOME, "", "" },
/* Initial directory */
{ '&', SEL_CDBEGIN, "", "" },
/* Last visited dir */
{ '-', SEL_CDLAST, "", "" },
2017-06-11 04:15:50 +00:00
/* Change dir using bookmark */
{ CONTROL('B'), SEL_CDBM, "", "" },
/* Mark a path to visit later */
2018-01-17 14:02:22 +00:00
{ 'b', SEL_PIN, "", "" },
/* Visit marked directory */
{ CONTROL('V'), SEL_VISIT, "", "" },
2017-12-12 20:16:50 +00:00
/* Filter */
{ '/', SEL_FLTR, "", "" },
/* Toggle filter mode */
{ KEY_IC, SEL_MFLTR, "", "" },
{ CONTROL('I'), SEL_MFLTR, "", "" },
2017-12-12 20:16:50 +00:00
/* Desktop search */
{ CONTROL('_'), SEL_SEARCH, "", "" },
/* Toggle hide .dot files */
2017-04-03 17:03:46 +00:00
{ '.', SEL_TOGGLEDOT, "", "" },
/* Detailed listing */
2017-04-03 17:03:46 +00:00
{ 'd', SEL_DETAIL, "", "" },
/* File details */
2017-04-03 17:03:46 +00:00
{ 'D', SEL_STATS, "", "" },
2017-07-02 18:27:41 +00:00
/* Show media info short, run is hacked */
{ 'm', SEL_MEDIA, NULL, "" },
/* Show media info full, run is hacked */
{ 'M', SEL_FMEDIA, "-f", "" },
/* Open dir in desktop file manager */
{ 'o', SEL_DFB, "", "" },
2017-09-27 14:49:42 +00:00
/* List archive */
2017-09-30 22:58:48 +00:00
{ 'F', SEL_LIST, "-l", "" },
2017-09-27 14:49:42 +00:00
/* Extract archive */
{ CONTROL('F'), SEL_EXTRACT, "-x", "" },
/* Toggle sort by size */
2017-04-03 17:03:46 +00:00
{ 's', SEL_FSIZE, "", "" },
2017-06-22 04:09:17 +00:00
/* Sort by total block count including dir contents */
2017-07-02 18:27:41 +00:00
{ 'S', SEL_BSIZE, "", "" },
{ CONTROL('J'), SEL_BSIZE, "", "" },
2015-02-05 15:53:50 +00:00
/* Toggle sort by time */
2017-04-03 17:03:46 +00:00
{ 't', SEL_MTIME, "", "" },
/* Redraw window */
2017-04-03 17:03:46 +00:00
{ CONTROL('L'), SEL_REDRAW, "", "" },
2017-09-10 07:35:25 +00:00
{ KEY_F(5), SEL_REDRAW, "", "" }, /* Undocumented */
/* Copy currently selected file path */
2017-04-03 17:03:46 +00:00
{ CONTROL('K'), SEL_COPY, "", "" },
/* Toggle copy multiple file paths */
{ CONTROL('Y'), SEL_COPYMUL, "", "" },
2018-01-28 06:03:12 +00:00
/* Toggle quote on while copy */
{ CONTROL('T'), SEL_QUOTE, "", "" },
2017-12-25 10:25:53 +00:00
/* Open in a custom application */
{ CONTROL('O'), SEL_OPEN, "", "" },
2017-09-10 07:35:25 +00:00
/* Create a new file */
{ 'n', SEL_NEW, "", "" },
2017-08-22 19:16:58 +00:00
/* Show rename prompt */
{ CONTROL('R'), SEL_RENAME, "", "" },
2017-09-10 07:35:25 +00:00
{ KEY_F(2), SEL_RENAME, "", "" }, /* Undocumented */
2018-02-24 14:16:58 +00:00
/* Rename contents of current dir */
{ 'R', SEL_RENAMEALL, "", "" },
2017-04-03 17:03:46 +00:00
/* Show help */
{ '?', SEL_HELP, "", "" },
/* Run command */
2017-04-01 09:11:07 +00:00
{ '!', SEL_RUN, "sh", "SHELL" },
/* Run command with argument */
2017-04-01 09:11:07 +00:00
{ 'e', SEL_RUNARG, "vi", "EDITOR" },
{ 'p', SEL_RUNARG, "less", "PAGER" },
2017-12-12 20:16:50 +00:00
/* Change dir on quit */
{ 'Q', SEL_CDQUIT, "", "" },
2018-02-24 16:13:41 +00:00
{ CONTROL('G'), SEL_CDQUIT, "", "" },
2017-12-12 20:16:50 +00:00
/* Quit */
{ 'q', SEL_QUIT, "", "" },
{ CONTROL('X'), SEL_QUIT, "", "" },
};