nnn/src/nnn.h

257 lines
6.7 KiB
C
Raw Normal View History

2018-09-07 15:50:10 +00:00
/*
2018-10-04 19:08:57 +00:00
* BSD 2-Clause License
*
2019-02-23 09:25:01 +00:00
* Copyright (C) 2014-2016, Lazaros Koromilas <lostd@2f30.org>
* Copyright (C) 2014-2016, Dimitris Papastamos <sin@2f30.org>
2019-12-31 17:11:25 +00:00
* Copyright (C) 2016-2020, Arun Prakash Jana <engineerarun@gmail.com>
2018-09-07 15:50:10 +00:00
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
2018-10-04 19:08:57 +00:00
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
2018-09-07 15:50:10 +00:00
*
2018-10-04 19:08:57 +00:00
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
2018-09-07 15:50:10 +00:00
*
2018-10-04 19:08:57 +00:00
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2018-09-07 15:50:10 +00:00
*/
2018-11-03 08:20:03 +00:00
#pragma once
#include <curses.h>
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_NAV_IN,
2017-06-20 04:56:31 +00:00
SEL_NEXT,
SEL_PREV,
SEL_PGDN,
SEL_PGUP,
SEL_CTRL_D,
SEL_CTRL_U,
2017-06-20 04:56:31 +00:00
SEL_HOME,
SEL_END,
2019-10-05 01:29:43 +00:00
SEL_FIRST,
2017-06-20 04:56:31 +00:00
SEL_CDHOME,
SEL_CDBEGIN,
SEL_CDLAST,
2019-04-12 14:51:48 +00:00
SEL_CDROOT,
SEL_BOOKMARK,
2018-11-26 21:49:37 +00:00
SEL_CYCLE,
2019-10-05 01:29:43 +00:00
SEL_CYCLER,
2019-01-19 07:39:46 +00:00
SEL_CTX1,
SEL_CTX2,
SEL_CTX3,
SEL_CTX4,
2017-09-01 14:27:36 +00:00
SEL_PIN,
2017-12-12 20:16:50 +00:00
SEL_FLTR,
SEL_MFLTR,
2017-06-20 04:56:31 +00:00
SEL_TOGGLEDOT,
SEL_DETAIL,
SEL_STATS,
2020-01-02 17:43:56 +00:00
SEL_CHMODX,
2018-04-24 23:34:37 +00:00
SEL_ARCHIVE,
2020-01-12 22:19:28 +00:00
SEL_ORDER,
2018-10-04 18:56:31 +00:00
SEL_FSIZE, /* file size */
SEL_ASIZE, /* apparent size */
SEL_BSIZE, /* block size */
2019-08-01 16:50:40 +00:00
SEL_EXTN, /* order by extension */
2017-06-20 04:56:31 +00:00
SEL_MTIME,
2020-01-09 14:11:22 +00:00
SEL_REVERSE,
SEL_VERSION,
2017-06-20 04:56:31 +00:00
SEL_REDRAW,
2019-08-06 20:08:51 +00:00
SEL_SEL,
SEL_SELMUL,
SEL_SELALL,
2019-11-28 17:42:49 +00:00
SEL_SELLIST,
SEL_SELEDIT,
SEL_CP,
SEL_MV,
2019-10-17 18:05:49 +00:00
SEL_CPMVAS,
SEL_RMMUL,
SEL_RM,
2018-12-16 15:00:44 +00:00
SEL_OPENWITH,
2017-09-10 07:35:25 +00:00
SEL_NEW,
2017-08-22 19:16:58 +00:00
SEL_RENAME,
SEL_RENAMEMUL,
2019-11-24 15:52:44 +00:00
SEL_REMOTE,
2019-04-20 18:54:19 +00:00
SEL_UMOUNT,
2017-06-20 04:56:31 +00:00
SEL_HELP,
SEL_PLUGKEY,
2019-04-18 14:57:35 +00:00
SEL_PLUGIN,
2019-12-27 07:49:23 +00:00
SEL_SHELL,
SEL_LAUNCH,
2018-12-09 13:48:00 +00:00
SEL_RUNCMD,
SEL_RUNEDIT,
SEL_RUNPAGE,
2018-03-30 15:53:28 +00:00
SEL_LOCK,
2019-10-20 00:05:41 +00:00
SEL_SESSIONS,
2018-11-08 14:46:08 +00:00
SEL_QUITCTX,
2018-11-25 15:36:47 +00:00
SEL_QUITCD,
2017-12-12 20:16:50 +00:00
SEL_QUIT,
2019-05-08 00:38:07 +00:00
SEL_CLICK,
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 */
2019-03-11 14:38:03 +00:00
};
2017-06-20 04:56:31 +00:00
static struct key bindings[] = {
/* Back */
2018-12-04 22:24:48 +00:00
{ KEY_LEFT, SEL_BACK },
{ 'h', SEL_BACK },
/* Inside or select */
{ KEY_ENTER, SEL_GOIN },
{ '\r', SEL_GOIN },
/* Pure navigate inside */
{ KEY_RIGHT, SEL_NAV_IN },
{ 'l', SEL_NAV_IN },
/* Next */
2018-12-04 22:24:48 +00:00
{ 'j', SEL_NEXT },
{ KEY_DOWN, SEL_NEXT },
/* Previous */
2018-12-04 22:24:48 +00:00
{ 'k', SEL_PREV },
{ KEY_UP, SEL_PREV },
/* Page down */
2018-12-04 22:24:48 +00:00
{ KEY_NPAGE, SEL_PGDN },
/* Page up */
2018-12-04 22:24:48 +00:00
{ KEY_PPAGE, SEL_PGUP },
/* Ctrl+D */
{ CONTROL('D'), SEL_CTRL_D },
/* Ctrl+U */
{ CONTROL('U'), SEL_CTRL_U },
/* First entry */
2018-12-04 22:24:48 +00:00
{ KEY_HOME, SEL_HOME },
{ 'g', SEL_HOME },
{ CONTROL('A'), SEL_HOME },
/* Last entry */
2018-12-04 22:24:48 +00:00
{ KEY_END, SEL_END },
{ 'G', SEL_END },
{ CONTROL('E'), SEL_END },
2019-10-05 01:29:43 +00:00
/* Go to first file */
2020-01-12 21:15:47 +00:00
{ 'f', SEL_FIRST },
/* HOME */
2018-12-04 22:24:48 +00:00
{ '~', SEL_CDHOME },
/* Initial directory */
2019-03-12 11:13:17 +00:00
{ '@', SEL_CDBEGIN },
/* Last visited dir */
2018-12-04 22:24:48 +00:00
{ '-', SEL_CDLAST },
2019-04-12 14:51:48 +00:00
/* Go to / */
{ '`', SEL_CDROOT },
/* Leader key */
{ 'b', SEL_BOOKMARK },
2019-12-29 12:28:48 +00:00
{ CONTROL('_'), SEL_BOOKMARK },
2018-11-26 21:49:37 +00:00
/* Cycle contexts in forward direction */
2019-12-11 14:36:12 +00:00
{ '\t', SEL_CYCLE },
2019-10-05 01:29:43 +00:00
/* Cycle contexts in reverse direction */
{ KEY_BTAB, SEL_CYCLER },
2019-01-19 07:39:46 +00:00
/* Go to/create context N */
{ '1', SEL_CTX1 },
{ '2', SEL_CTX2 },
{ '3', SEL_CTX3 },
{ '4', SEL_CTX4 },
/* Mark a path to visit later */
2019-12-29 12:28:48 +00:00
{ ',', SEL_PIN },
2017-12-12 20:16:50 +00:00
/* Filter */
2018-12-04 22:24:48 +00:00
{ '/', SEL_FLTR },
2017-12-12 20:16:50 +00:00
/* Toggle filter mode */
2019-12-29 12:28:48 +00:00
{ CONTROL('N'), SEL_MFLTR },
/* Toggle hide .dot files */
2018-12-04 22:24:48 +00:00
{ '.', SEL_TOGGLEDOT },
/* Detailed listing */
2018-12-04 22:24:48 +00:00
{ 'd', SEL_DETAIL },
/* File details */
2018-12-04 22:24:48 +00:00
{ 'D', SEL_STATS },
2020-01-02 17:43:56 +00:00
/* Toggle executable status */
{ '*', SEL_CHMODX },
2018-04-24 23:34:37 +00:00
/* Create archive */
2019-12-29 17:51:18 +00:00
{ 'i', SEL_ARCHIVE },
2020-01-12 22:19:28 +00:00
/* Order toggle */
{ 'o', SEL_ORDER },
{ CONTROL('T'), SEL_ORDER },
/* Redraw window */
2018-12-04 22:24:48 +00:00
{ CONTROL('L'), SEL_REDRAW },
2019-08-24 23:55:29 +00:00
{ KEY_F(5), SEL_REDRAW },
2019-09-08 08:53:00 +00:00
/* Select current file path */
{ CONTROL('J'), SEL_SEL },
2019-08-06 20:08:51 +00:00
{ ' ', SEL_SEL },
2019-09-08 08:53:00 +00:00
/* Toggle select multiple files */
{ 'm', SEL_SELMUL },
2019-10-02 06:44:38 +00:00
{ CONTROL('K'), SEL_SELMUL },
2019-01-29 21:28:42 +00:00
/* Select all files in current dir */
2019-09-29 17:29:27 +00:00
{ 'a', SEL_SELALL },
/* Show list of copied files */
2019-12-29 12:28:48 +00:00
{ 'y', SEL_SELLIST },
/* Edit selection buffer */
2019-12-29 12:28:48 +00:00
{ CONTROL('Y'), SEL_SELEDIT },
2019-09-08 08:53:00 +00:00
/* Copy from selection buffer */
2018-12-04 22:24:48 +00:00
{ 'P', SEL_CP },
2019-09-08 08:53:00 +00:00
/* Move from selection buffer */
2018-12-04 22:24:48 +00:00
{ 'V', SEL_MV },
2019-10-17 18:05:49 +00:00
/* Copy/move from selection buffer and rename */
2019-12-29 12:28:48 +00:00
{ CONTROL('V'), SEL_CPMVAS },
2019-09-08 08:53:00 +00:00
/* Delete from selection buffer */
2018-12-04 22:24:48 +00:00
{ 'X', SEL_RMMUL },
/* Delete currently selected */
2018-12-04 22:24:48 +00:00
{ CONTROL('X'), SEL_RM },
2017-12-25 10:25:53 +00:00
/* Open in a custom application */
2018-12-16 15:00:44 +00:00
{ CONTROL('O'), SEL_OPENWITH },
2017-09-10 07:35:25 +00:00
/* Create a new file */
2018-12-04 22:24:48 +00:00
{ 'n', SEL_NEW },
2017-08-22 19:16:58 +00:00
/* Show rename prompt */
2018-12-04 22:24:48 +00:00
{ CONTROL('R'), SEL_RENAME },
2019-08-24 23:55:29 +00:00
{ KEY_F(2), SEL_RENAME },
2018-02-24 14:16:58 +00:00
/* Rename contents of current dir */
{ 'r', SEL_RENAMEMUL },
2019-04-20 18:54:19 +00:00
/* Connect to server over SSHFS */
2019-11-24 15:52:44 +00:00
{ 'c', SEL_REMOTE },
2019-04-20 18:54:19 +00:00
/* Disconnect a SSHFS mount point */
{ 'u', SEL_UMOUNT },
2017-04-03 17:03:46 +00:00
/* Show help */
2018-12-04 22:24:48 +00:00
{ '?', SEL_HELP },
/* Plugin key */
2019-11-17 19:00:00 +00:00
{ ';', SEL_PLUGKEY },
2020-01-11 17:10:26 +00:00
{ CONTROL('F'), SEL_PLUGKEY },
2019-04-18 14:57:35 +00:00
/* Run a plugin */
2019-12-29 12:28:48 +00:00
{ CONTROL('P'), SEL_PLUGIN },
2019-12-27 07:49:23 +00:00
/* Run command */
{ '!', SEL_SHELL },
{ CONTROL(']'), SEL_SHELL },
/* Launcher */
{ '=', SEL_LAUNCH },
2018-12-09 13:48:00 +00:00
/* Run a command */
2019-12-09 19:57:51 +00:00
{ ']', SEL_RUNCMD },
2018-12-09 13:48:00 +00:00
/* Open in EDITOR or PAGER */
2018-12-04 22:24:48 +00:00
{ 'e', SEL_RUNEDIT },
{ 'p', SEL_RUNPAGE },
2018-03-30 15:53:28 +00:00
/* Lock screen */
2018-12-04 22:24:48 +00:00
{ 'L', SEL_LOCK },
2018-11-08 14:46:08 +00:00
/* Quit a context */
2018-12-04 22:24:48 +00:00
{ 'q', SEL_QUITCTX },
2017-12-12 20:16:50 +00:00
/* Change dir on quit */
2018-12-04 22:24:48 +00:00
{ CONTROL('G'), SEL_QUITCD },
2017-12-12 20:16:50 +00:00
/* Quit */
2018-12-04 22:24:48 +00:00
{ 'Q', SEL_QUIT },
{ CONTROL('Q'), SEL_QUIT },
2019-05-08 00:38:07 +00:00
{ KEY_MOUSE, SEL_CLICK },
2019-12-09 19:39:15 +00:00
{ 's', SEL_SESSIONS },
};