summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham <hisham@gobolinux.org>2016-06-15 12:45:23 -0300
committerHisham <hisham@gobolinux.org>2016-06-15 12:45:23 -0300
commit0128d222b94adab6b258f417722f298013a33327 (patch)
tree83f7fff3eaa158b246af2a22ca55598d7cff6abb
parent1a13b4d0f4c02f13ec8a06f7bee9b1dc028434d5 (diff)
Added Ctrl+A and Ctrl+E to go to beginning and end of line.
(Also, '^' and '$') Closes #508.
-rw-r--r--CategoriesPanel.c4
-rw-r--r--MainPanel.c14
-rw-r--r--Panel.c26
-rw-r--r--Panel.h6
-rw-r--r--ScreenManager.c11
5 files changed, 30 insertions, 31 deletions
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index d67be86a..afc32305 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -82,9 +82,9 @@ static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
result = HANDLED;
break;
case KEY_UP:
- case KEY_CTRLP:
+ case KEY_CTRL('P'):
case KEY_DOWN:
- case KEY_CTRLN:
+ case KEY_CTRL('N'):
case KEY_NPAGE:
case KEY_PPAGE:
case KEY_HOME:
diff --git a/MainPanel.c b/MainPanel.c
index 708a0775..7aca7ed0 100644
--- a/MainPanel.c
+++ b/MainPanel.c
@@ -105,20 +105,6 @@ static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
} else {
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) {
diff --git a/Panel.c b/Panel.c
index 65d13423..a22b36f0 100644
--- a/Panel.c
+++ b/Panel.c
@@ -61,6 +61,7 @@ struct Panel_ {
Vector* items;
int selected;
int oldSelected;
+ int selectedLen;
void* eventHandlerState;
int scrollV;
short scrollH;
@@ -82,10 +83,7 @@ struct Panel_ {
#define MAX(a,b) ((a)>(b)?(a):(b))
#endif
-#define KEY_CTRLN 0016 /* control-n key */
-#define KEY_CTRLP 0020 /* control-p key */
-#define KEY_CTRLF 0006 /* control-f key */
-#define KEY_CTRLB 0002 /* control-b key */
+#define KEY_CTRL(l) ((l)-'A'+1)
PanelClass Panel_class = {
.super = {
@@ -327,6 +325,7 @@ void Panel_draw(Panel* this, bool focus) {
if (selected) {
attrset(selectionColor);
RichString_setAttr(&item, selectionColor);
+ this->selectedLen = itemLen;
}
mvhline(y + line, x, ' ', this->w);
if (amt > 0)
@@ -352,6 +351,7 @@ void Panel_draw(Panel* this, bool focus) {
RichString_begin(new);
Object_display(newObj, &new);
int newLen = RichString_sizeVal(new);
+ this->selectedLen = newLen;
mvhline(y+ this->oldSelected - first, x+0, ' ', this->w);
if (scrollH < oldLen)
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);
switch (key) {
case KEY_DOWN:
- case KEY_CTRLN:
+ case KEY_CTRL('N'):
this->selected++;
break;
case KEY_UP:
- case KEY_CTRLP:
+ case KEY_CTRL('P'):
this->selected--;
break;
#ifdef KEY_C_DOWN
@@ -394,14 +394,14 @@ bool Panel_onKey(Panel* this, int key) {
break;
#endif
case KEY_LEFT:
- case KEY_CTRLB:
+ case KEY_CTRL('B'):
if (this->scrollH > 0) {
- this->scrollH -= CRT_scrollHAmount;
+ this->scrollH -= MAX(CRT_scrollHAmount, 0);
this->needsRedraw = true;
}
break;
case KEY_RIGHT:
- case KEY_CTRLF:
+ case KEY_CTRL('F'):
this->scrollH += CRT_scrollHAmount;
this->needsRedraw = true;
break;
@@ -436,6 +436,14 @@ bool Panel_onKey(Panel* this, int key) {
case KEY_END:
this->selected = size - 1;
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:
return false;
}
diff --git a/Panel.h b/Panel.h
index 67897706..5253fc2e 100644
--- a/Panel.h
+++ b/Panel.h
@@ -50,6 +50,7 @@ struct Panel_ {
Vector* items;
int selected;
int oldSelected;
+ int selectedLen;
void* eventHandlerState;
int scrollV;
short scrollH;
@@ -70,10 +71,7 @@ struct Panel_ {
#define MAX(a,b) ((a)>(b)?(a):(b))
#endif
-#define KEY_CTRLN 0016 /* control-n key */
-#define KEY_CTRLP 0020 /* control-p key */
-#define KEY_CTRLF 0006 /* control-f key */
-#define KEY_CTRLB 0002 /* control-b key */
+#define KEY_CTRL(l) ((l)-'A'+1)
extern PanelClass Panel_class;
diff --git a/ScreenManager.c b/ScreenManager.c
index 44e74e05..05e1c024 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -279,7 +279,10 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
continue;
}
case KEY_LEFT:
- case KEY_CTRLB:
+ case KEY_CTRL('B'):
+ if (this->panelCount < 2) {
+ goto defaultHandler;
+ }
if (!this->allowFocusChange)
break;
tryLeft:
@@ -290,8 +293,11 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
goto tryLeft;
break;
case KEY_RIGHT:
- case KEY_CTRLF:
+ case KEY_CTRL('F'):
case 9:
+ if (this->panelCount < 2) {
+ goto defaultHandler;
+ }
if (!this->allowFocusChange)
break;
tryRight:
@@ -307,6 +313,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
quit = true;
continue;
default:
+ defaultHandler:
sortTimeout = resetSortTimeout;
Panel_onKey(panelFocus, ch);
break;

© 2014-2024 Faster IT GmbH | imprint | privacy policy