Some improvements

This commit is contained in:
Jacob 2023-08-28 12:25:41 +02:00
parent af90e49c55
commit 4aa4831586
2 changed files with 333 additions and 9 deletions

View file

@ -0,0 +1,318 @@
diff --git a/Action.c b/Action.c
index 81432f5..c2b3d70 100644
--- a/Action.c
+++ b/Action.c
@@ -531,7 +531,7 @@ static const struct {
} helpLeft[] = {
{ .key = " #: ", .roInactive = false, .info = "hide/show header meters" },
{ .key = " Tab: ", .roInactive = false, .info = "switch to next screen tab" },
- { .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" },
@@ -559,7 +559,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 = true, .info = "lower priority (+ nice)" },
#if (defined(HAVE_LIBHWLOC) || defined(HAVE_AFFINITY))
@@ -567,12 +567,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 }
};
@@ -772,6 +772,7 @@ 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['O'] = actionToggleRunningInContainer;
@@ -779,6 +780,7 @@ void Action_setBindings(Htop_Action* keys) {
keys['S'] = actionSetup;
keys['T'] = actionSortByTime;
keys['U'] = actionUntagAll;
+ keys['X'] = actionShowLocks;
keys['Z'] = actionTogglePauseProcessUpdate;
keys['['] = actionLowerPriority;
keys['\014'] = actionRedraw; // Ctrl+L
@@ -788,17 +790,15 @@ 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['o'] = actionExpandCollapseOrSortColumn;
keys['p'] = actionToggleProgramPath;
keys['q'] = actionQuit;
keys['s'] = actionStrace;
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;
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index 6e905ce..e7253ac 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -103,6 +103,12 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
HandlerResult result = IGNORED;
int selected = Panel_getSelectedIndex(super);
+ switch (ch) {
+ case 'h': ch = KEY_LEFT; break;
+ case 'j': ch = KEY_DOWN; break;
+ case 'k': ch = KEY_UP; break;
+ case 'l': ch = KEY_RIGHT; break;
+ }
switch (ch) {
case EVENT_SET_SELECTED:
result = HANDLED;
diff --git a/MainPanel.c b/MainPanel.c
index 89b4e7d..fba01fe 100644
--- a/MainPanel.c
+++ b/MainPanel.c
@@ -51,7 +51,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 bd22acd..069d0b3 100644
--- a/MainPanel.h
+++ b/MainPanel.h
@@ -47,4 +47,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 d1bc6a7..da31429 100644
--- a/Panel.c
+++ b/Panel.c
@@ -358,6 +358,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:
@@ -366,6 +367,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:
@@ -374,7 +376,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;
@@ -382,16 +384,28 @@ 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;
@@ -404,10 +418,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/ScreenManager.c b/ScreenManager.c
index 55cacd2..f6b8f50 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -16,6 +16,7 @@ in the source distribution for its full text.
#include "CRT.h"
#include "FunctionBar.h"
+#include "MainPanel.h"
#include "Macros.h"
#include "Object.h"
#include "Platform.h"
@@ -305,14 +306,16 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey, con
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) {
@@ -346,7 +349,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey, con
continue;
}
case KEY_LEFT:
- case KEY_CTRL('B'):
+ case 'h':
if (this->panelCount < 2) {
goto defaultHandler;
}
@@ -367,7 +370,7 @@ tryLeft:
break;
case KEY_RIGHT:
- case KEY_CTRL('F'):
+ case 'l':
case 9:
if (this->panelCount < 2) {
goto defaultHandler;
diff --git a/htop.1.in b/htop.1.in
index eefc37f..aeac630 100644
--- a/htop.1.in
+++ b/htop.1.in
@@ -100,27 +100,30 @@ The following commands are supported while in
Select the next / the previous screen tab to display.
You can enable showing the screen tab names in the Setup screen (F2).
.TP
-.B Up, Alt-k
+.B Up, k (vim patch)
Select (highlight) the previous process in the process list. Scroll the list
if necessary.
.TP
-.B Down, Alt-j
+.B Down, j (vim patch)
Select (highlight) the next process in the process list. Scroll the list if
necessary.
.TP
-.B Left, Alt-h
+.B Left, h (vim patch)
Scroll the process list left.
.TP
-.B Right, Alt-l
+.B Right, l (vim patch)
Scroll the process list right.
.TP
-.B PgUp, PgDn
+.B PgUp, Ctrl-B (vim patch), PgDn, Ctrl-F (vim patch)
Scroll the process list up or down one window.
.TP
-.B Home
+.B Ctrl-U (vim patch), Ctrl-D (vim patch)
+Scroll the process list up or down half a window.
+.TP
+.B Home, g (vim patch)
Scroll to the top of the process list and select the first process.
.TP
-.B End
+.B End, G (vim patch)
Scroll to the bottom of the process list and select the last process.
.TP
.B Ctrl-A, ^
@@ -155,7 +158,7 @@ will display the list of file descriptors opened by the process.
Display the command line of the selected process in a separate screen, wrapped
onto multiple lines as needed.
.TP
-.B x
+.B X
Display the active file locks of the selected process in a separate screen.
.TP
.B F1, h, ?
@@ -189,7 +192,7 @@ between them as a tree. Toggling the key will switch between tree and
your previously selected sort view. Selecting a sort view will exit
tree view.
.TP
-.B F6, <, >
+.B F6, <, >, o (vim patch)
Selects a field for sorting, also accessible through < and >.
The current sort field is indicated by a highlight in the header.
.TP
@@ -207,7 +210,7 @@ This can only be done by the superuser.
.B Shift-F8, {
Decrease the selected process's autogroup priority (add to autogroup 'nice' value)
.TP
-.B F9, k
+.B F9, x (vim patch)
"Kill" process: sends a signal which is selected in a menu, to one or a group
of processes. If processes were tagged, sends the signal to all tagged processes.
If none is tagged, sends to the currently selected process.
@@ -219,7 +222,7 @@ Quit
Invert the sort order: if sort order is increasing, switch to decreasing, and
vice-versa.
.TP
-.B +, \-, *
+.B +, \-, *, o (vim patch)
When in tree view mode, expand or collapse subtree. When a subtree is collapsed
a "+" sign shows to the left of the process name.
Pressing "*" will expand or collapse all children of PIDs without parents, so

View file

@ -14,7 +14,7 @@ function getShellString($file, $string) {
return $output[0];
}
function printHead($pTitle, $title, $desc) {
function printHead($self, $pTitle, $title, $desc) {
print "<!DOCTYPE html>\n";
print "<head>\n";
print "\t<meta name=\"description\" content=\"$desc\">\n";
@ -88,7 +88,7 @@ function main() {
$validPkgs++;
}
printHead("speedie-aur", "Found $validPkgs packages matching '$query' in speedie-aur", "Found $validPkgs packages matching search query '$query' in speedie-aur");
printHead($self, "speedie-aur", "Found $validPkgs packages matching '$query' in speedie-aur", "Found $validPkgs packages matching search query '$query' in speedie-aur");
print "\t\t\t<p class=\"matches\">$validPkgs packages found matching '$query'..</p>\n";
print "\t\t\t\t<ul class=\"pkglist\">\n";
@ -99,18 +99,25 @@ function main() {
print "\t\t\t\t</ul>\n";
} else if ($request == "all") {
printHead("speedie-aur", "All packages in speedie-aur", "There are $packageCount packages in speedie-aur");
printHead($self, "speedie-aur", "All packages in speedie-aur", "There are $packageCount packages in speedie-aur");
print "\t\t\t<p>Total number of packages: $packageCount</p>\n";
print "\t\t\t\t<ul class=\"pkglist\">\n";
print "\t\t\t<table>\n";
print "\t\t\t\t<tr>\n";
print "\t\t\t\t\t<td><strong>Package</strong></td>\n";
print "\t\t\t\t\t<td><strong>Description</strong></td>\n";
print "\t\t\t\t</tr>\n";
for ($i = 1; $i < $packageCount+1; ++$i) {
print "\t\t\t\t\t<li class=\"pkg\"><a href=\"$self?action=view&q=$packageNames[$i]\">$packageNames[$i] - $packageDescs[$i]</li>\n";
print "\t\t\t\t\t<tr>\n";
print "\t\t\t\t\t\t<td><a href=\"$self?action=view&q=$packageNames[$i]\">$packageNames[$i]</a></td>\n";
print "\t\t\t\t\t\t<td>$packageDescs[$i]</td>\n";
print "\t\t\t\t</tr>\n";
}
print "\t\t\t\t</ul>\n";
print "\t\t\t</table>\n";
} else if ($request == "view" && $query == '') {
printHead("speedie-aur", "speedie-aur", "My unofficial Arch Linux repository containing many useful packages");
printHead($self, "speedie-aur", "speedie-aur", "My unofficial Arch Linux repository containing many useful packages");
print "\t\t<h1>speedie-aur</h1>\n";
print "\t\t\t<p>Welcome to aur.speedie.site. This is just my Arch Linux repository.</p>\n";
@ -173,12 +180,11 @@ function main() {
$pkgSource = $packageSources[$i];
$pkgLicense = $packageLicenses[$i];
printHead("speedie-aur", "Viewing package '$pkgName'", "$pkgName from the speedie-aur Arch Linux repository.");
printHead($self, "speedie-aur", "Viewing package '$pkgName'", "$pkgName from the speedie-aur Arch Linux repository.");
print "\t\t<h1>$pkgName</h1>\n";
print "\t\t\t<table>\n";
print "\t\t\t\t<tr>\n";
print "\t\t\t\t\t<tr>\n";
print "\t\t\t\t\t<th>Description</th>\n";