summarylogtreecommitdiffstats
path: root/vim-keybindings.patch
diff options
context:
space:
mode:
Diffstat (limited to 'vim-keybindings.patch')
-rw-r--r--vim-keybindings.patch203
1 files changed, 203 insertions, 0 deletions
diff --git a/vim-keybindings.patch b/vim-keybindings.patch
new file mode 100644
index 000000000000..e8d6bfa5b4ff
--- /dev/null
+++ b/vim-keybindings.patch
@@ -0,0 +1,203 @@
+diff --git a/Action.c b/Action.c
+index a6394ac..089ee27 100644
+--- a/Action.c
++++ b/Action.c
+@@ -382,7 +382,7 @@ static Htop_Reaction actionRedraw() {
+ }
+
+ static const struct { const char* key; const char* info; } helpLeft[] = {
+- { .key = " Arrows: ", .info = "scroll process list" },
++ { .key = " hjkl: ", .info = "scroll process list" },
+ { .key = " Digits: ", .info = "incremental PID search" },
+ { .key = " F3 /: ", .info = "incremental name search" },
+ { .key = " F4 \\: ",.info = "incremental name filtering" },
+@@ -403,7 +403,7 @@ static const struct { const char* key; const char* info; } helpRight[] = {
+ { .key = " Space: ", .info = "tag process" },
+ { .key = " c: ", .info = "tag process and its children" },
+ { .key = " U: ", .info = "untag all processes" },
+- { .key = " F9 k: ", .info = "kill process/tagged processes" },
++ { .key = " F9 x: ", .info = "kill process/tagged processes" },
+ { .key = " F7 ]: ", .info = "higher priority (root only)" },
+ { .key = " F8 [: ", .info = "lower priority (+ nice)" },
+ #if (HAVE_LIBHWLOC || HAVE_LINUX_AFFINITY)
+@@ -411,7 +411,7 @@ static const struct { const char* key; const char* info; } helpRight[] = {
+ #endif
+ { .key = " e: ", .info = "show process environment" },
+ { .key = " i: ", .info = "set IO priority" },
+- { .key = " l: ", .info = "list open files with lsof" },
++ { .key = " L: ", .info = "list open files with lsof" },
+ { .key = " s: ", .info = "trace syscalls with strace" },
+ { .key = " ", .info = "" },
+ { .key = " F2 C S: ", .info = "setup" },
+@@ -543,6 +543,7 @@ void Action_setBindings(Htop_Action* keys) {
+ keys['I'] = actionInvertSortOrder;
+ keys[KEY_F(6)] = actionExpandCollapseOrSortColumn;
+ keys[KEY_F(18)] = actionExpandCollapseOrSortColumn;
++ keys['o'] = actionExpandCollapseOrSortColumn;
+ keys['<'] = actionSetSortColumn;
+ keys[','] = actionSetSortColumn;
+ keys['>'] = actionSetSortColumn;
+@@ -551,7 +552,7 @@ void Action_setBindings(Htop_Action* keys) {
+ keys['q'] = actionQuit;
+ keys['a'] = actionSetAffinity;
+ keys[KEY_F(9)] = actionKill;
+- keys['k'] = actionKill;
++ keys['x'] = actionKill;
+ keys[KEY_RECLICK] = actionExpandOrCollapse;
+ keys['+'] = actionExpandOrCollapse;
+ keys['='] = actionExpandOrCollapse;
+@@ -561,12 +562,11 @@ void Action_setBindings(Htop_Action* keys) {
+ keys['S'] = actionSetup;
+ keys['C'] = actionSetup;
+ keys[KEY_F(2)] = actionSetup;
+- keys['l'] = actionLsof;
++ keys['L'] = actionLsof;
+ keys['s'] = actionStrace;
+ keys[' '] = actionTag;
+ keys['\014'] = actionRedraw; // Ctrl+L
+ keys[KEY_F(1)] = actionHelp;
+- keys['h'] = actionHelp;
+ keys['?'] = actionHelp;
+ keys['U'] = actionUntagAll;
+ keys['c'] = actionTagAllChildren;
+diff --git a/Panel.c b/Panel.c
+index 1e53b4a..7f6580b 100644
+--- a/Panel.c
++++ b/Panel.c
+@@ -372,14 +372,16 @@ void Panel_draw(Panel* this, bool focus) {
+
+ bool Panel_onKey(Panel* this, int key) {
+ assert (this != NULL);
+-
++
+ int size = Vector_size(this->items);
+ switch (key) {
+ case KEY_DOWN:
++ case 'j':
+ case KEY_CTRL('N'):
+ this->selected++;
+ break;
+ case KEY_UP:
++ case 'k':
+ case KEY_CTRL('P'):
+ this->selected--;
+ break;
+@@ -394,23 +396,33 @@ bool Panel_onKey(Panel* this, int key) {
+ break;
+ #endif
+ case KEY_LEFT:
+- case KEY_CTRL('B'):
++ case 'h':
+ if (this->scrollH > 0) {
+ this->scrollH -= MAX(CRT_scrollHAmount, 0);
+ this->needsRedraw = true;
+ }
+ break;
+ case KEY_RIGHT:
+- case KEY_CTRL('F'):
++ case 'l':
+ this->scrollH += CRT_scrollHAmount;
+ this->needsRedraw = true;
+ break;
++ case KEY_CTRL('U'):
++ this->selected -= (this->h - 1) / 2;
++ this->needsRedraw = true;
++ break;
++ case KEY_CTRL('D'):
++ this->selected += (this->h - 1) / 2;
++ this->needsRedraw = true;
++ break;
+ case KEY_PPAGE:
++ case KEY_CTRL('B'):
+ this->selected -= (this->h - 1);
+ this->scrollV = MAX(0, this->scrollV - this->h + 1);
+ this->needsRedraw = true;
+ break;
+ case KEY_NPAGE:
++ case KEY_CTRL('F'):
+ this->selected += (this->h - 1);
+ this->scrollV = MAX(0, MIN(Vector_size(this->items) - this->h,
+ this->scrollV + this->h - 1));
+@@ -432,9 +444,11 @@ bool Panel_onKey(Panel* this, int key) {
+ break;
+ }
+ case KEY_HOME:
++ case 'g':
+ this->selected = 0;
+ break;
+ case KEY_END:
++ case 'G':
+ this->selected = size - 1;
+ break;
+ case KEY_CTRL('A'):
+diff --git a/README b/README
+index 33a8739..d0b00ae 100644
+--- a/README
++++ b/README
+@@ -17,6 +17,44 @@ but we also have code for running under FreeBSD and Mac OS X
+ This software has evolved considerably over the years,
+ and is reasonably complete, but there is always room for improvement.
+
++Vim keybindings
++----------------
++
++These are the keybindings added in this fork of htop:
++
++```
++ g to the top (gg in vim)
++
++ <C-b> up 1 page
++
++ <C-u> up 1/2 page
++
++ k
++
++h l one character
++
++ j
++
++ <C-d> down 1/2 page
++
++ <C-f> down 1 page
++
++ G to the end
++
++--------------------------------------------------
++
++ o Expand/collapse (like in NERDTree)
++```
++
++In order to accomodate these keybindings, the following changes
++were made to the original keybindings:
++
++* Ctrl+F and Ctrt+B can no longer be used to navigate horizontally
++* 'h' can no longer be used to access the help, leaving Ctrl+F1 & '?'
++* 'k' can no longer be used to kill processes, being replaced with 'x'
++* 'l' can no longer be used to list open files, being replaced with 'L'
++
++
+ Comparison between `htop` and classic `top`
+ -------------------------------------------
+
+diff --git a/ScreenManager.c b/ScreenManager.c
+index 05e1c02..df2ac4a 100644
+--- a/ScreenManager.c
++++ b/ScreenManager.c
+@@ -279,7 +279,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
+ continue;
+ }
+ case KEY_LEFT:
+- case KEY_CTRL('B'):
++ case 'h':
+ if (this->panelCount < 2) {
+ goto defaultHandler;
+ }
+@@ -293,7 +293,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
+ goto tryLeft;
+ break;
+ case KEY_RIGHT:
+- case KEY_CTRL('F'):
++ case 'l':
+ case 9:
+ if (this->panelCount < 2) {
+ goto defaultHandler;