mirror of https://github.com/xzeldon/htop.git
Added Ctrl+A and Ctrl+E to go to beginning and end of line.
(Also, '^' and '$') Closes #508.
This commit is contained in:
parent
1a13b4d0f4
commit
0128d222b9
|
@ -82,9 +82,9 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
|
||||||
result = HANDLED;
|
result = HANDLED;
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
case KEY_CTRLP:
|
case KEY_CTRL('P'):
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
case KEY_CTRLN:
|
case KEY_CTRL('N'):
|
||||||
case KEY_NPAGE:
|
case KEY_NPAGE:
|
||||||
case KEY_PPAGE:
|
case KEY_PPAGE:
|
||||||
case KEY_HOME:
|
case KEY_HOME:
|
||||||
|
|
14
MainPanel.c
14
MainPanel.c
|
@ -105,20 +105,6 @@ static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
|
||||||
} else {
|
} else {
|
||||||
reaction |= HTOP_KEEP_FOLLOWING;
|
reaction |= HTOP_KEEP_FOLLOWING;
|
||||||
}
|
}
|
||||||
switch (ch) {
|
|
||||||
case KEY_LEFT:
|
|
||||||
case KEY_CTRLB:
|
|
||||||
if (super->scrollH > 0) {
|
|
||||||
super->scrollH -= CRT_scrollHAmount;
|
|
||||||
super->needsRedraw = true;
|
|
||||||
}
|
|
||||||
return HANDLED;
|
|
||||||
case KEY_RIGHT:
|
|
||||||
case KEY_CTRLF:
|
|
||||||
super->scrollH += CRT_scrollHAmount;
|
|
||||||
super->needsRedraw = true;
|
|
||||||
return HANDLED;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reaction & HTOP_REDRAW_BAR) {
|
if (reaction & HTOP_REDRAW_BAR) {
|
||||||
|
|
26
Panel.c
26
Panel.c
|
@ -61,6 +61,7 @@ struct Panel_ {
|
||||||
Vector* items;
|
Vector* items;
|
||||||
int selected;
|
int selected;
|
||||||
int oldSelected;
|
int oldSelected;
|
||||||
|
int selectedLen;
|
||||||
void* eventHandlerState;
|
void* eventHandlerState;
|
||||||
int scrollV;
|
int scrollV;
|
||||||
short scrollH;
|
short scrollH;
|
||||||
|
@ -82,10 +83,7 @@ struct Panel_ {
|
||||||
#define MAX(a,b) ((a)>(b)?(a):(b))
|
#define MAX(a,b) ((a)>(b)?(a):(b))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KEY_CTRLN 0016 /* control-n key */
|
#define KEY_CTRL(l) ((l)-'A'+1)
|
||||||
#define KEY_CTRLP 0020 /* control-p key */
|
|
||||||
#define KEY_CTRLF 0006 /* control-f key */
|
|
||||||
#define KEY_CTRLB 0002 /* control-b key */
|
|
||||||
|
|
||||||
PanelClass Panel_class = {
|
PanelClass Panel_class = {
|
||||||
.super = {
|
.super = {
|
||||||
|
@ -327,6 +325,7 @@ void Panel_draw(Panel* this, bool focus) {
|
||||||
if (selected) {
|
if (selected) {
|
||||||
attrset(selectionColor);
|
attrset(selectionColor);
|
||||||
RichString_setAttr(&item, selectionColor);
|
RichString_setAttr(&item, selectionColor);
|
||||||
|
this->selectedLen = itemLen;
|
||||||
}
|
}
|
||||||
mvhline(y + line, x, ' ', this->w);
|
mvhline(y + line, x, ' ', this->w);
|
||||||
if (amt > 0)
|
if (amt > 0)
|
||||||
|
@ -352,6 +351,7 @@ void Panel_draw(Panel* this, bool focus) {
|
||||||
RichString_begin(new);
|
RichString_begin(new);
|
||||||
Object_display(newObj, &new);
|
Object_display(newObj, &new);
|
||||||
int newLen = RichString_sizeVal(new);
|
int newLen = RichString_sizeVal(new);
|
||||||
|
this->selectedLen = newLen;
|
||||||
mvhline(y+ this->oldSelected - first, x+0, ' ', this->w);
|
mvhline(y+ this->oldSelected - first, x+0, ' ', this->w);
|
||||||
if (scrollH < oldLen)
|
if (scrollH < oldLen)
|
||||||
RichString_printoffnVal(old, y+this->oldSelected - first, x,
|
RichString_printoffnVal(old, y+this->oldSelected - first, x,
|
||||||
|
@ -376,11 +376,11 @@ bool Panel_onKey(Panel* this, int key) {
|
||||||
int size = Vector_size(this->items);
|
int size = Vector_size(this->items);
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case KEY_DOWN:
|
case KEY_DOWN:
|
||||||
case KEY_CTRLN:
|
case KEY_CTRL('N'):
|
||||||
this->selected++;
|
this->selected++;
|
||||||
break;
|
break;
|
||||||
case KEY_UP:
|
case KEY_UP:
|
||||||
case KEY_CTRLP:
|
case KEY_CTRL('P'):
|
||||||
this->selected--;
|
this->selected--;
|
||||||
break;
|
break;
|
||||||
#ifdef KEY_C_DOWN
|
#ifdef KEY_C_DOWN
|
||||||
|
@ -394,14 +394,14 @@ bool Panel_onKey(Panel* this, int key) {
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
case KEY_CTRLB:
|
case KEY_CTRL('B'):
|
||||||
if (this->scrollH > 0) {
|
if (this->scrollH > 0) {
|
||||||
this->scrollH -= CRT_scrollHAmount;
|
this->scrollH -= MAX(CRT_scrollHAmount, 0);
|
||||||
this->needsRedraw = true;
|
this->needsRedraw = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
case KEY_CTRLF:
|
case KEY_CTRL('F'):
|
||||||
this->scrollH += CRT_scrollHAmount;
|
this->scrollH += CRT_scrollHAmount;
|
||||||
this->needsRedraw = true;
|
this->needsRedraw = true;
|
||||||
break;
|
break;
|
||||||
|
@ -436,6 +436,14 @@ bool Panel_onKey(Panel* this, int key) {
|
||||||
case KEY_END:
|
case KEY_END:
|
||||||
this->selected = size - 1;
|
this->selected = size - 1;
|
||||||
break;
|
break;
|
||||||
|
case KEY_CTRL('A'):
|
||||||
|
case '^':
|
||||||
|
this->scrollH = 0;
|
||||||
|
break;
|
||||||
|
case KEY_CTRL('E'):
|
||||||
|
case '$':
|
||||||
|
this->scrollH = MAX(this->selectedLen - this->w, 0);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
6
Panel.h
6
Panel.h
|
@ -50,6 +50,7 @@ struct Panel_ {
|
||||||
Vector* items;
|
Vector* items;
|
||||||
int selected;
|
int selected;
|
||||||
int oldSelected;
|
int oldSelected;
|
||||||
|
int selectedLen;
|
||||||
void* eventHandlerState;
|
void* eventHandlerState;
|
||||||
int scrollV;
|
int scrollV;
|
||||||
short scrollH;
|
short scrollH;
|
||||||
|
@ -70,10 +71,7 @@ struct Panel_ {
|
||||||
#define MAX(a,b) ((a)>(b)?(a):(b))
|
#define MAX(a,b) ((a)>(b)?(a):(b))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KEY_CTRLN 0016 /* control-n key */
|
#define KEY_CTRL(l) ((l)-'A'+1)
|
||||||
#define KEY_CTRLP 0020 /* control-p key */
|
|
||||||
#define KEY_CTRLF 0006 /* control-f key */
|
|
||||||
#define KEY_CTRLB 0002 /* control-b key */
|
|
||||||
|
|
||||||
extern PanelClass Panel_class;
|
extern PanelClass Panel_class;
|
||||||
|
|
||||||
|
|
|
@ -279,7 +279,10 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
case KEY_CTRLB:
|
case KEY_CTRL('B'):
|
||||||
|
if (this->panelCount < 2) {
|
||||||
|
goto defaultHandler;
|
||||||
|
}
|
||||||
if (!this->allowFocusChange)
|
if (!this->allowFocusChange)
|
||||||
break;
|
break;
|
||||||
tryLeft:
|
tryLeft:
|
||||||
|
@ -290,8 +293,11 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
|
||||||
goto tryLeft;
|
goto tryLeft;
|
||||||
break;
|
break;
|
||||||
case KEY_RIGHT:
|
case KEY_RIGHT:
|
||||||
case KEY_CTRLF:
|
case KEY_CTRL('F'):
|
||||||
case 9:
|
case 9:
|
||||||
|
if (this->panelCount < 2) {
|
||||||
|
goto defaultHandler;
|
||||||
|
}
|
||||||
if (!this->allowFocusChange)
|
if (!this->allowFocusChange)
|
||||||
break;
|
break;
|
||||||
tryRight:
|
tryRight:
|
||||||
|
@ -307,6 +313,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
|
||||||
quit = true;
|
quit = true;
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
|
defaultHandler:
|
||||||
sortTimeout = resetSortTimeout;
|
sortTimeout = resetSortTimeout;
|
||||||
Panel_onKey(panelFocus, ch);
|
Panel_onKey(panelFocus, ch);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue