Package Details: htop-vim-git 1:3.1.0.40.gb7248f6c-1

Git Clone URL: https://aur.archlinux.org/htop-vim-git.git (read-only, click to copy)
Package Base: htop-vim-git
Description: Interactive text-mode process viewer. Patched for vim keybindings
Upstream URL: https://github.com/htop-dev/htop
Licenses: GPL
Conflicts: htop, htop-git
Provides: htop
Submitter: KoffeinFlummi
Maintainer: KoffeinFlummi
Last Packager: KoffeinFlummi
Votes: 18
Popularity: 0.83
First Submitted: 2015-08-06 05:38
Last Updated: 2021-10-11 21:57

Dependencies (6)

Required by (5)

Sources (2)

Latest Comments

1 2 3 4 5 6 Next › Last »

KoffeinFlummi commented on 2021-10-11 22:12

Should be fixed.

kronikpillow commented on 2021-10-11 10:20

doesn't build

jfamousket commented on 2021-09-21 10:49

vim-keybindings.patch

diff --git a/Action.c b/Action.c
index d6fd737..a9bd9cf 100644
--- a/Action.c
+++ b/Action.c
@@ -452,7 +452,7 @@ static const struct {
    bool roInactive;
    const char* info;
 } helpLeft[] = {
-   { .key = " Arrows: ",  .roInactive = false, .info = "scroll process list" },
+   { .key = "   hjkl: ",  .roInactive = false, .info = "scroll process list" },
    { .key = " Digits: ",  .roInactive = false, .info = "incremental PID search" },
    { .key = "   F3 /: ",  .roInactive = false, .info = "incremental name search" },
    { .key = "   F4 \\: ", .roInactive = false, .info = "incremental name filtering" },
@@ -479,7 +479,7 @@ static const struct {
    { .key = "  Space: ", .roInactive = false, .info = "tag process" },
    { .key = "      c: ", .roInactive = false, .info = "tag process and its children" },
    { .key = "      U: ", .roInactive = false, .info = "untag all processes" },
-   { .key = "   F9 k: ", .roInactive = true,  .info = "kill process/tagged processes" },
+   { .key = "   F9 x: ", .roInactive = true,  .info = "kill process/tagged processes" },
    { .key = "   F7 ]: ", .roInactive = true,  .info = "higher priority (root only)" },
    { .key = "   F8 [: ", .roInactive = false, .info = "lower priority (+ nice)" },
 #if (defined(HAVE_LIBHWLOC) || defined(HAVE_LINUX_AFFINITY))
@@ -487,12 +487,12 @@ static const struct {
 #endif
    { .key = "      e: ", .roInactive = false, .info = "show process environment" },
    { .key = "      i: ", .roInactive = true,  .info = "set IO priority" },
-   { .key = "      l: ", .roInactive = true,  .info = "list open files with lsof" },
-   { .key = "      x: ", .roInactive = false, .info = "list file locks of process" },
+   { .key = "      L: ", .roInactive = true,  .info = "list open files with lsof" },
+   { .key = "      X: ", .roInactive = false, .info = "list file locks of process" },
    { .key = "      s: ", .roInactive = true,  .info = "trace syscalls with strace" },
    { .key = "      w: ", .roInactive = false, .info = "wrap process command in multiple lines" },
    { .key = " F2 C S: ", .roInactive = false, .info = "setup" },
-   { .key = " F1 h ?: ", .roInactive = false, .info = "show this help screen" },
+   { .key = "   F1 ?: ", .roInactive = false, .info = "show this help screen" },
    { .key = "  F10 q: ", .roInactive = false, .info = "quit" },
    { .key = NULL, .info = NULL }
 };
@@ -666,12 +666,14 @@ void Action_setBindings(Htop_Action* keys) {
    keys['H'] = actionToggleUserlandThreads;
    keys['I'] = actionInvertSortOrder;
    keys['K'] = actionToggleKernelThreads;
+   keys['L'] = actionLsof;
    keys['M'] = actionSortByMemory;
    keys['N'] = actionSortByPID;
    keys['P'] = actionSortByCPU;
    keys['S'] = actionSetup;
    keys['T'] = actionSortByTime;
    keys['U'] = actionUntagAll;
+   keys['X'] = actionShowLocks;
    keys['Z'] = actionTogglePauseProcessUpdate;
    keys['['] = actionLowerPriority;
    keys['\014'] = actionRedraw; // Ctrl+L
@@ -681,9 +683,6 @@ void Action_setBindings(Htop_Action* keys) {
    keys['a'] = actionSetAffinity;
    keys['c'] = actionTagAllChildren;
    keys['e'] = actionShowEnvScreen;
-   keys['h'] = actionHelp;
-   keys['k'] = actionKill;
-   keys['l'] = actionLsof;
    keys['m'] = actionToggleMergedCommand;
    keys['p'] = actionToggleProgramPath;
    keys['q'] = actionQuit;
@@ -691,7 +690,7 @@ void Action_setBindings(Htop_Action* keys) {
    keys['t'] = actionToggleTreeView;
    keys['u'] = actionFilterByUser;
    keys['w'] = actionShowCommandScreen;
-   keys['x'] = actionShowLocks;
+   keys['x'] = actionKill;
    keys[KEY_F(1)] = actionHelp;
    keys[KEY_F(2)] = actionSetup;
    keys[KEY_F(3)] = actionIncSearch;
@@ -703,5 +702,6 @@ void Action_setBindings(Htop_Action* keys) {
    keys[KEY_F(9)] = actionKill;
    keys[KEY_F(10)] = actionQuit;
    keys[KEY_F(18)] = actionExpandCollapseOrSortColumn;
+   keys['o'] = actionExpandCollapseOrSortColumn;
    keys[KEY_RECLICK] = actionExpandOrCollapse;
 }
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index 4ee1ad4..43930da 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -67,6 +67,14 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
    HandlerResult result = IGNORED;

    int selected = Panel_getSelectedIndex(super);
+
+   switch (ch) {
+      case 'k': ch = KEY_UP; break;
+      case 'j': ch = KEY_DOWN; break;
+      case 'h': ch = KEY_LEFT; break;
+      case 'l': ch = KEY_RIGHT; break;
+   }
+
    switch (ch) {
       case EVENT_SET_SELECTED:
          result = HANDLED;
diff --git a/MainPanel.c b/MainPanel.c
index 5a75af3..48e6345 100644
--- a/MainPanel.c
+++ b/MainPanel.c
@@ -50,7 +50,7 @@ static const char* MainPanel_getValue(Panel* this, int i) {
    return Process_getCommand(p);
 }

-static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
+HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
    MainPanel* this = (MainPanel*) super;

    HandlerResult result = IGNORED;
diff --git a/MainPanel.h b/MainPanel.h
index 04f347d..6c8fd32 100644
--- a/MainPanel.h
+++ b/MainPanel.h
@@ -46,4 +46,6 @@ void MainPanel_setState(MainPanel* this, State* state);

 void MainPanel_delete(Object* object);

+HandlerResult MainPanel_eventHandler(Panel* super, int ch);
+
 #endif
diff --git a/Panel.c b/Panel.c
index 69933ae..98eb588 100644
--- a/Panel.c
+++ b/Panel.c
@@ -351,6 +351,7 @@ bool Panel_onKey(Panel* this, int key) {

    switch (key) {
    case KEY_DOWN:
+   case 'j':
    case KEY_CTRL('N'):
    #ifdef KEY_C_DOWN
    case KEY_C_DOWN:
@@ -359,6 +360,7 @@ bool Panel_onKey(Panel* this, int key) {
       break;

    case KEY_UP:
+   case 'k':
    case KEY_CTRL('P'):
    #ifdef KEY_C_UP
    case KEY_C_UP:
@@ -367,7 +369,7 @@ bool Panel_onKey(Panel* this, int key) {
       break;

    case KEY_LEFT:
-   case KEY_CTRL('B'):
+   case 'h':
       if (this->scrollH > 0) {
          this->scrollH -= MAXIMUM(CRT_scrollHAmount, 0);
          this->needsRedraw = true;
@@ -375,16 +377,27 @@ bool Panel_onKey(Panel* this, int key) {
       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'):
       PANEL_SCROLL(-(this->h - Panel_headerHeight(this)));
       break;

    case KEY_NPAGE:
+   case KEY_CTRL('F'):
       PANEL_SCROLL(+(this->h - Panel_headerHeight(this)));
       break;

@@ -397,10 +410,12 @@ 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;

diff --git a/README b/README
index a9cb1df..e8723ec 100644
--- a/README
+++ b/README
@@ -21,6 +21,48 @@

 Tasks related to processes (e.g. killing and renicing) can be done without entering their PIDs.

+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'
+* 'x' can no longer be used to list file locks, being replaced with 'X'
+
+
+Comparison between `htop` and classic `top`
+-------------------------------------------
+
 Running `htop` requires `ncurses` libraries, typically named libncurses(w).

 `htop` is written in C.
diff --git a/ScreenManager.c b/ScreenManager.c
index 6e7551f..27afda3 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -14,6 +14,7 @@ in the source distribution for its full text.

 #include "CRT.h"
 #include "FunctionBar.h"
+#include "MainPanel.h"
 #include "Object.h"
 #include "Platform.h"
 #include "ProcessList.h"
@@ -222,14 +223,16 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
          redraw = false;
          continue;
       }
-      switch (ch) {
-         case KEY_ALT('H'): ch = KEY_LEFT; break;
-         case KEY_ALT('J'): ch = KEY_DOWN; break;
-         case KEY_ALT('K'): ch = KEY_UP; break;
-         case KEY_ALT('L'): ch = KEY_RIGHT; break;
-      }
       redraw = true;
       if (Panel_eventHandlerFn(panelFocus)) {
+         if (Panel_eventHandlerFn(panelFocus) != MainPanel_eventHandler) {
+            switch (ch) {
+               case 'h': case KEY_ALT('H'): ch = KEY_LEFT; break;
+               case 'j': case KEY_ALT('J'): ch = KEY_DOWN; break;
+               case 'k': case KEY_ALT('K'): ch = KEY_UP; break;
+               case 'l': case KEY_ALT('L'): ch = KEY_RIGHT; break;
+            }
+         }
          result = Panel_eventHandler(panelFocus, ch);
       }
       if (result & SYNTH_KEY) {
@@ -259,7 +262,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;
          }
@@ -280,7 +283,7 @@ tryLeft:

          break;
       case KEY_RIGHT:
-      case KEY_CTRL('F'):
+      case 'l':
       case 9:
          if (this->panelCount < 2) {
             goto defaultHandler;

KoffeinFlummi commented on 2021-05-01 12:13

Should be fixed, sorry for the delay.

jemadux commented on 2021-04-25 14:12

problem in prepare()

KoffeinFlummi commented on 2021-01-16 12:27

Patch should be fixed again.

cipher699 commented on 2021-01-09 08:10

vim-keybindings.patch

diff --git a/Action.c b/Action.c
index 88ccf6d..e1e21f1 100644
--- a/Action.c
+++ b/Action.c
@@ -433,7 +433,7 @@ 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" },
@@ -459,7 +459,7 @@ static const struct {
    { .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 (defined(HAVE_LIBHWLOC) || defined(HAVE_LINUX_AFFINITY))
@@ -467,12 +467,12 @@ static const struct {
 #endif
    { .key = "      e: ", .info = "show process environment" },
    { .key = "      i: ", .info = "set IO priority" },
-   { .key = "      l: ", .info = "list open files with lsof" },
-   { .key = "      x: ", .info = "list file locks of process" },
+   { .key = "      L: ", .info = "list open files with lsof" },
+   { .key = "      X: ", .info = "list file locks of process" },
    { .key = "      s: ", .info = "trace syscalls with strace" },
    { .key = "      w: ", .info = "wrap process command in multiple lines" },
    { .key = " F2 C S: ", .info = "setup" },
-   { .key = "   F1 h: ", .info = "show this help screen" },
+   { .key = "   F1 ?: ", .info = "show this help screen" },
    { .key = "  F10 q: ", .info = "quit" },
    { .key = NULL, .info = NULL }
 };
@@ -638,12 +638,14 @@ void Action_setBindings(Htop_Action* keys) {
    keys['H'] = actionToggleUserlandThreads;
    keys['I'] = actionInvertSortOrder;
    keys['K'] = actionToggleKernelThreads;
+   keys['L'] = actionLsof;
    keys['M'] = actionSortByMemory;
    keys['N'] = actionSortByPID;
    keys['P'] = actionSortByCPU;
    keys['S'] = actionSetup;
    keys['T'] = actionSortByTime;
    keys['U'] = actionUntagAll;
+   keys['X'] = actionShowLocks;
    keys['Z'] = actionTogglePauseProcessUpdate;
    keys['['] = actionLowerPriority;
    keys['\014'] = actionRedraw; // Ctrl+L
@@ -653,9 +655,6 @@ void Action_setBindings(Htop_Action* keys) {
    keys['a'] = actionSetAffinity;
    keys['c'] = actionTagAllChildren;
    keys['e'] = actionShowEnvScreen;
-   keys['h'] = actionHelp;
-   keys['k'] = actionKill;
-   keys['l'] = actionLsof;
    keys['m'] = actionToggleMergedCommand;
    keys['p'] = actionToggleProgramPath;
    keys['q'] = actionQuit;
@@ -663,7 +662,7 @@ void Action_setBindings(Htop_Action* keys) {
    keys['t'] = actionToggleTreeView;
    keys['u'] = actionFilterByUser;
    keys['w'] = actionShowCommandScreen;
-   keys['x'] = actionShowLocks;
+   keys['x'] = actionKill;
    keys[KEY_F(1)] = actionHelp;
    keys[KEY_F(2)] = actionSetup;
    keys[KEY_F(3)] = actionIncSearch;
@@ -675,5 +674,6 @@ void Action_setBindings(Htop_Action* keys) {
    keys[KEY_F(9)] = actionKill;
    keys[KEY_F(10)] = actionQuit;
    keys[KEY_F(18)] = actionExpandCollapseOrSortColumn;
+   keys['o'] = actionExpandCollapseOrSortColumn;
    keys[KEY_RECLICK] = actionExpandOrCollapse;
 }
diff --git a/Panel.c b/Panel.c
index 5d10375..76242b3 100644
--- a/Panel.c
+++ b/Panel.c
@@ -351,6 +351,7 @@ bool Panel_onKey(Panel* this, int key) {

    switch (key) {
    case KEY_DOWN:
+   case 'j':
    case KEY_CTRL('N'):
    #ifdef KEY_C_DOWN
    case KEY_C_DOWN:
@@ -359,6 +360,7 @@ bool Panel_onKey(Panel* this, int key) {
       break;

    case KEY_UP:
+   case 'k':
    case KEY_CTRL('P'):
    #ifdef KEY_C_UP
    case KEY_C_UP:
@@ -367,7 +369,7 @@ bool Panel_onKey(Panel* this, int key) {
       break;

    case KEY_LEFT:
-   case KEY_CTRL('B'):
+   case 'h':
       if (this->scrollH > 0) {
          this->scrollH -= MAXIMUM(CRT_scrollHAmount, 0);
          this->needsRedraw = true;
@@ -375,16 +377,27 @@ bool Panel_onKey(Panel* this, int key) {
       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'):
       PANEL_SCROLL(-(this->h - Panel_headerHeight(this)));
       break;

    case KEY_NPAGE:
+   case KEY_CTRL('F'):
       PANEL_SCROLL(+(this->h - Panel_headerHeight(this)));
       break;

@@ -397,10 +410,12 @@ 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;

diff --git a/README b/README
index 880597d..0c44936 100644
--- a/README
+++ b/README
@@ -19,6 +19,48 @@ The information displayed is configurable through a graphical setup and can be s

 Tasks related to processes (e.g. killing and renicing) can be done without entering their PIDs.

+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'
+* 'x' can no longer be used to list file locks, being replaced with 'X'
+
+
+Comparison between `htop` and classic `top`
+-------------------------------------------
+
 Running `htop` requires `ncurses` libraries (typically named libncursesw*).

 For more information and details on how to contribute to `htop` visit [htop.dev](https://htop.dev).
diff --git a/ScreenManager.c b/ScreenManager.c
index 51951a8..8e02dc8 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -251,7 +251,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;
          }
@@ -272,7 +272,7 @@ tryLeft:

          break;
       case KEY_RIGHT:
-      case KEY_CTRL('F'):
+      case 'l':
       case 9:
          if (this->panelCount < 2) {
             goto defaultHandler;

KoffeinFlummi commented on 2020-12-31 01:22

Should be fixed.

Hekuran commented on 2020-12-25 09:45

Here is the update: https://pastebin.tech/raw/401/vim%20htop%20git%20PATCH . They sorted some stuff, thats why i didnt work. (that may actually make it not 'not patch' in the future.)

(use `patch -l' to avoid white space diff)

diff --git a/PKGBUILD b/PKGBUILD
index b5537ef..5079dae 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -19,7 +19,7 @@ options=('!emptydirs')
 source=("git+${url}.git"
         'vim-keybindings.patch')
 sha256sums=('SKIP'
-            'c9e6155d1191448858cf863b628827b21f7ce58b2f3ce62e58fa31de82c63afe')
+            '87d29651a7f92ce78a8c099925fa20ab7df890702d209f50d5a4d9b24342b837')

 pkgver() {
     cd "${srcdir}/${_pkgname}"
diff --git a/vim-keybindings.patch b/vim-keybindings.patch
index e55c2b9..3f8551f 100644
--- a/vim-keybindings.patch
+++ b/vim-keybindings.patch
@@ -1,8 +1,8 @@
 diff --git a/Action.c b/Action.c
-index 66934be..c229584 100644
+index 206eb67..6ef5919 100644
 --- a/Action.c
 +++ b/Action.c
-@@ -448,7 +448,7 @@ static const struct {
+@@ -443,7 +443,7 @@ static const struct {
     const char* key;
     const char* info;
  } helpLeft[] = {
@@ -11,7 +11,7 @@ index 66934be..c229584 100644
     { .key = " Digits: ", .info = "incremental PID search" },
     { .key = "   F3 /: ", .info = "incremental name search" },
     { .key = "   F4 \\: ",.info = "incremental name filtering" },
-@@ -474,7 +474,7 @@ static const struct {
+@@ -469,7 +469,7 @@ static const struct {
     { .key = "  Space: ", .info = "tag process" },
     { .key = "      c: ", .info = "tag process and its children" },
     { .key = "      U: ", .info = "untag all processes" },
@@ -20,7 +20,7 @@ index 66934be..c229584 100644
     { .key = "   F7 ]: ", .info = "higher priority (root only)" },
     { .key = "   F8 [: ", .info = "lower priority (+ nice)" },
  #if (defined(HAVE_LIBHWLOC) || defined(HAVE_LINUX_AFFINITY))
-@@ -482,12 +482,12 @@ static const struct {
+@@ -477,12 +477,12 @@ static const struct {
  #endif
     { .key = "      e: ", .info = "show process environment" },
     { .key = "      i: ", .info = "set IO priority" },
@@ -36,44 +36,41 @@ index 66934be..c229584 100644
     { .key = "  F10 q: ", .info = "quit" },
     { .key = NULL, .info = NULL }
  };
-@@ -662,6 +662,7 @@ void Action_setBindings(Htop_Action* keys) {
-    keys['I'] = actionInvertSortOrder;
-    keys[KEY_F(6)] = actionSetSortColumn;
-    keys[KEY_F(18)] = actionExpandCollapseOrSortColumn;
-+   keys['o'] = actionExpandCollapseOrSortColumn;
-    keys['<'] = actionSetSortColumn;
-    keys[','] = actionSetSortColumn;
-    keys['>'] = actionSetSortColumn;
-@@ -670,7 +671,7 @@ void Action_setBindings(Htop_Action* keys) {
-    keys['q'] = actionQuit;
+@@ -663,9 +663,9 @@ void Action_setBindings(Htop_Action* keys) {
     keys['a'] = actionSetAffinity;
-    keys[KEY_F(9)] = actionKill;
+    keys['c'] = actionTagAllChildren;
+    keys['e'] = actionShowEnvScreen;
+-   keys['h'] = actionHelp;
 -   keys['k'] = actionKill;
+-   keys['l'] = actionLsof;
 +   keys['x'] = actionKill;
-    keys[KEY_RECLICK] = actionExpandOrCollapse;
-    keys['+'] = actionExpandOrCollapse;
-    keys['='] = actionExpandOrCollapse;
-@@ -681,13 +682,12 @@ void Action_setBindings(Htop_Action* keys) {
-    keys['S'] = actionSetup;
-    keys['C'] = actionSetup;
-    keys[KEY_F(2)] = actionSetup;
++   keys['d'] = actionKill;
++   keys['L'] = actionLsof;
+    keys['m'] = actionToggleMergedCommand;
+    keys['p'] = actionToggleProgramPath;
+    keys['q'] = actionQuit;
+@@ -673,7 +673,7 @@ void Action_setBindings(Htop_Action* keys) {
+    keys['t'] = actionToggleTreeView;
+    keys['u'] = actionFilterByUser;
+    keys['w'] = actionShowCommandScreen;
 -   keys['x'] = actionShowLocks;
--   keys['l'] = actionLsof;
 +   keys['X'] = actionShowLocks;
-+   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;
+    keys[KEY_F(2)] = actionSetup;
+    keys[KEY_F(3)] = actionIncSearch;
+@@ -685,6 +685,7 @@ void Action_setBindings(Htop_Action* keys) {
+    keys[KEY_F(9)] = actionKill;
+    keys[KEY_F(10)] = actionQuit;
+    keys[KEY_F(18)] = actionExpandCollapseOrSortColumn;
++   keys['o'] = actionExpandCollapseOrSortColumn;
+    keys[KEY_RECLICK] = actionExpandOrCollapse;
+    keys[KEY_RESIZE] = actionResize;
+ }
 diff --git a/Panel.c b/Panel.c
-index 21dfbe2..e8ba9f9 100644
+index 26a0c0e..2ace36a 100644
 --- a/Panel.c
 +++ b/Panel.c
-@@ -333,6 +333,7 @@ bool Panel_onKey(Panel* this, int key) {
+@@ -343,6 +343,7 @@ bool Panel_onKey(Panel* this, int key) {

     switch (key) {
     case KEY_DOWN:
@@ -81,7 +78,7 @@ index 21dfbe2..e8ba9f9 100644
     case KEY_CTRL('N'):
     #ifdef KEY_C_DOWN
     case KEY_C_DOWN:
-@@ -341,6 +342,7 @@ bool Panel_onKey(Panel* this, int key) {
+@@ -351,6 +352,7 @@ bool Panel_onKey(Panel* this, int key) {
        break;

     case KEY_UP:
@@ -89,7 +86,7 @@ index 21dfbe2..e8ba9f9 100644
     case KEY_CTRL('P'):
     #ifdef KEY_C_UP
     case KEY_C_UP:
-@@ -349,7 +351,7 @@ bool Panel_onKey(Panel* this, int key) {
+@@ -359,7 +361,7 @@ bool Panel_onKey(Panel* this, int key) {
        break;

     case KEY_LEFT:
@@ -98,7 +95,7 @@ index 21dfbe2..e8ba9f9 100644
        if (this->scrollH > 0) {
           this->scrollH -= MAXIMUM(CRT_scrollHAmount, 0);
           this->needsRedraw = true;
-@@ -357,18 +359,29 @@ bool Panel_onKey(Panel* this, int key) {
+@@ -367,18 +369,29 @@ bool Panel_onKey(Panel* this, int key) {
        break;

     case KEY_RIGHT:
@@ -129,7 +126,7 @@ index 21dfbe2..e8ba9f9 100644
        this->selected += (this->h - 1);
        this->scrollV = CLAMP_INDEX(this->scrollV, +(this->h - 1), 0, size - this->h);
        this->needsRedraw = true;
-@@ -387,10 +400,12 @@ bool Panel_onKey(Panel* this, int key) {
+@@ -397,10 +410,12 @@ bool Panel_onKey(Panel* this, int key) {
        break;

     case KEY_HOME:
@@ -196,10 +193,10 @@ index 880597d..0c44936 100644

  For more information and details on how to contribute to `htop` visit [htop.dev](https://htop.dev).
 diff --git a/ScreenManager.c b/ScreenManager.c
-index ac93721..6413bd7 100644
+index 4c74e47..6fce01f 100644
 --- a/ScreenManager.c
 +++ b/ScreenManager.c
-@@ -255,7 +255,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
+@@ -251,7 +251,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
           continue;
        }
        case KEY_LEFT:
@@ -208,7 +205,7 @@ index ac93721..6413bd7 100644
           if (this->panelCount < 2) {
              goto defaultHandler;
           }
-@@ -276,7 +276,7 @@ tryLeft:
+@@ -272,7 +272,7 @@ tryLeft:

           break;
        case KEY_RIGHT:

ashleyr commented on 2020-12-06 01:12

Ah. thanks for clearing that up @Hekuran, sorry for the confusion.