]> git.scottworley.com Git - vopamoi/blobdiff - vopamoi.ts
h/l to move between task nesting levels
[vopamoi] / vopamoi.ts
index f13e5790b9cef86c431f780e4d3103f2e682d71c..695ddefa7361e560f244597a76cd73cf0f08f30e 100644 (file)
@@ -441,7 +441,19 @@ function BrowserUI() {
       task instanceof HTMLElement && task.focus();
     },
 
-    moveCursor: function (offset: number): boolean {
+    moveCursorLeft: function () {
+      const active = this.currentTask();
+      if (!active) return false;
+      if (active.parentElement!.classList.contains("task")) {
+        active.parentElement!.focus();
+      }
+    },
+
+    moveCursorRight: function () {
+      (this.currentTask()?.getElementsByClassName("task")[0] as HTMLElement)?.focus();
+    },
+
+    moveCursorVertically: function (offset: number): boolean {
       const active = this.currentTask();
       if (!active) return false;
       const dest = this.visibleTaskAtOffset(active, offset);
@@ -517,7 +529,7 @@ function BrowserUI() {
       if (newState === oldState) return;
       const createTimestamp = task.getAttribute("data-created")!;
       if (currentViewState !== "all" || newState == "deleted") {
-        this.moveCursor(1) || this.moveCursor(-1);
+        this.moveCursorVertically(1) || this.moveCursorVertically(-1);
       }
       return ui.setState(createTimestamp, newState, oldState);
     },
@@ -643,8 +655,10 @@ function handleKey(event: any) {
           if (event.key == "e") return window.scrollBy(0, (inputCount ?? 1) * scrollIncrement);
           if (event.key == "y") return window.scrollBy(0, (inputCount ?? 1) * -scrollIncrement);
         } else {
-          if (event.key == "j") return browserUI.moveCursor(inputCount ?? 1);
-          if (event.key == "k") return browserUI.moveCursor(-(inputCount ?? 1));
+          if (event.key == "h") return browserUI.moveCursorLeft();
+          if (event.key == "l") return browserUI.moveCursorRight();
+          if (event.key == "j") return browserUI.moveCursorVertically(inputCount ?? 1);
+          if (event.key == "k") return browserUI.moveCursorVertically(-(inputCount ?? 1));
           if (event.key == "J") return browserUI.moveTask(inputCount ?? 1);
           if (event.key == "K") return browserUI.moveTask(-(inputCount ?? 1));
           if (event.key == "G") return browserUI.jumpCursor(inputCount ?? MAX_SAFE_INTEGER);