« get me outta code hell

Jump to top/bottom in context menus - mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorrie <towerofnix@gmail.com>2019-09-15 18:29:17 -0300
committerFlorrie <towerofnix@gmail.com>2019-09-15 18:29:43 -0300
commitacb6e7bd48e11105b8e57ed703fd75782a2933cc (patch)
treed46d61b4cd8ee645b07fb24baf6181beeedfb71c
parentd013ad704f9aea12357690d05e2ced1482e5f903 (diff)
Jump to top/bottom in context menus
Although we don't have any context menu options which start with the
letter G yet, if we did, the keyboard selector would (intentionally)
take priority and focus that element instead of doing jump to start/
bottom behavior. However, pressing Home/End will always work (once it's
implemented).
-rw-r--r--todo.txt1
m---------tui-lib0
-rw-r--r--ui.js14
3 files changed, 12 insertions, 3 deletions
diff --git a/todo.txt b/todo.txt
index 6af1370..2163271 100644
--- a/todo.txt
+++ b/todo.txt
@@ -349,6 +349,7 @@ TODO: If you press any key which should select a particular element of the UI
 TODO: g/G should work for navigation in context menus! And probably all
       ListScrollForms, tbh, but I'm kinda weary of introducing new behavior
       like that to tui-lib.
+      (Done!)
 
 TODO: PageUp/PageDown support is complicated to implement (I've tried) and
       should come eventually, but for now just make Home/End work as aliases
diff --git a/tui-lib b/tui-lib
-Subproject d8943db70aab7e7192040caaf0bbf02d5ddf429
+Subproject f3974627bddb9f62132bf54bde3a66c87dbf7b2
diff --git a/ui.js b/ui.js
index 972e139..bdc4258 100644
--- a/ui.js
+++ b/ui.js
@@ -58,6 +58,8 @@ const keyBindings = [
   ['isBackspace', telc.isBackspace],
   ['isMenu', 'm'],
   ['isMenu', 'f'],
+  ['isScrollToStart', 'g', {caseless: false}],
+  ['isScrollToEnd', 'G', {caseless: false}],
   ['isTogglePause', telc.isSpace],
   ['isToggleLoop', 'l', {caseless: false}],
   ['isStop', telc.isEscape],
@@ -1216,10 +1218,10 @@ class GrouplikeListingElement extends Form {
       this.loadParentGrouplike()
     } else if (telc.isCharacter(keyBuf, '/') || keyBuf[0] === 6) { // '/', ctrl-F
       this.showJumpElement()
-    } else if (telc.isCharacter(keyBuf, 'g')) {
+    } else if (input.isScrollToStart(keyBuf)) {
       this.form.selectAndShow(this.grouplike.items[0])
       this.form.scrollToBeginning()
-    } else if (telc.isCharacter(keyBuf, 'G')) {
+    } else if (input.isScrollToEnd(keyBuf)) {
       this.form.selectAndShow(this.grouplike.items[this.grouplike.items.length - 1])
     } else if (keyBuf[0] === 12) { // ctrl-L
       if (this.grouplike.isTheQueue) {
@@ -3049,8 +3051,14 @@ class ContextMenu extends FocusElement {
       return false
     } else if (this.keyboardSelector.keyPressed(keyBuf)) {
       return false
+    } else if (input.isScrollToStart(keyBuf)) {
+      this.form.firstInput()
+      this.form.scrollToBeginning()
+    } else if (input.isScrollToEnd(keyBuf)) {
+      this.form.lastInput()
+    } else {
+      return super.keyPressed(keyBuf)
     }
-    super.keyPressed(keyBuf)
   }
 
   unselected() {