From 60dac09dc609bd691548561a7579be20c47f8d25 Mon Sep 17 00:00:00 2001 From: phucisstupid <125681538+phucisstupid@users.noreply.github.com> Date: Fri, 29 Aug 2025 00:31:15 +0700 Subject: [PATCH 1/3] feat(keyboard shortcut): add more Vim-Style Keybind --- Extensions/keyboardShortcut.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/Extensions/keyboardShortcut.js b/Extensions/keyboardShortcut.js index fe9bb4948f..8d8b5a1ce9 100644 --- a/Extensions/keyboardShortcut.js +++ b/Extensions/keyboardShortcut.js @@ -32,6 +32,10 @@ "ctrl+tab": { callback: () => rotateSidebar(1) }, "ctrl+shift+tab": { callback: () => rotateSidebar(-1) }, + // Rotate through sidebar items using Shift+J/Shift+K (Vim-style). + "shift+j": { callback: () => rotateSidebar(1) }, + "shift+k": { callback: () => rotateSidebar(-1) }, + // Focus on the app content before scrolling using Shift+PageUp and Shift+PageDown "shift+pageup": { callback: () => focusOnApp() }, "shift+pagedown": { callback: () => focusOnApp() }, @@ -40,6 +44,10 @@ j: { callback: () => createScrollCallback(SCROLL_STEP) }, k: { callback: () => createScrollCallback(-SCROLL_STEP) }, + // Scroll half-page using 'u' and 'd' keys + d: { callback: () => scrollHalfPage(1) }, + u: { callback: () => scrollHalfPage(-1) }, + // Scroll to the top ('gg') or bottom ('Shift+g') of the page "g g": { callback: () => scrollToPosition(0) }, "shift+g": { callback: () => scrollToPosition(1) }, @@ -117,9 +125,8 @@ const scrollInterval = setInterval(() => { app.scrollTop += step; }, 10); - document.addEventListener("keyup", () => { - clearInterval(scrollInterval); - }); + const clear = () => clearInterval(scrollInterval); + document.addEventListener("keyup", clear, { once: true }); } } @@ -128,6 +135,15 @@ app.scroll(0, position === 0 ? 0 : app.scrollHeight); } + function scrollHalfPage(direction /* 1 | -1 */) { + const app = focusOnApp(); + if (!app) return; + const delta = Math.floor(app.clientHeight / 2) * direction; + const maxTop = Math.max(0, app.scrollHeight - app.clientHeight); + const nextTop = Math.max(0, Math.min(app.scrollTop + delta, maxTop)); + app.scroll(0, nextTop); + } + /** * @returns {number | undefined} * @param {NodeListOf} allItems From ea64a9c8bcd0cf75247f92847c3f4d7d41e7d61e Mon Sep 17 00:00:00 2001 From: phucisstupid <125681538+phucisstupid@users.noreply.github.com> Date: Fri, 29 Aug 2025 00:34:02 +0700 Subject: [PATCH 2/3] Update keyboardShortcut.js --- Extensions/keyboardShortcut.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Extensions/keyboardShortcut.js b/Extensions/keyboardShortcut.js index 8d8b5a1ce9..b280f0f24d 100644 --- a/Extensions/keyboardShortcut.js +++ b/Extensions/keyboardShortcut.js @@ -125,8 +125,8 @@ const scrollInterval = setInterval(() => { app.scrollTop += step; }, 10); - const clear = () => clearInterval(scrollInterval); - document.addEventListener("keyup", clear, { once: true }); + const clear = () => clearInterval(scrollInterval); + document.addEventListener("keyup", clear, { once: true }); } } @@ -135,14 +135,14 @@ app.scroll(0, position === 0 ? 0 : app.scrollHeight); } - function scrollHalfPage(direction /* 1 | -1 */) { - const app = focusOnApp(); - if (!app) return; - const delta = Math.floor(app.clientHeight / 2) * direction; - const maxTop = Math.max(0, app.scrollHeight - app.clientHeight); - const nextTop = Math.max(0, Math.min(app.scrollTop + delta, maxTop)); - app.scroll(0, nextTop); - } + function scrollHalfPage(direction /* 1 | -1 */) { + const app = focusOnApp(); + if (!app) return; + const delta = Math.floor(app.clientHeight / 2) * direction; + const maxTop = Math.max(0, app.scrollHeight - app.clientHeight); + const nextTop = Math.max(0, Math.min(app.scrollTop + delta, maxTop)); + app.scroll(0, nextTop); + } /** * @returns {number | undefined} From 1dd4f079575c23922b2b94025232ac4b72c71529 Mon Sep 17 00:00:00 2001 From: phucisstupid <125681538+phucisstupid@users.noreply.github.com> Date: Fri, 29 Aug 2025 00:35:31 +0700 Subject: [PATCH 3/3] Update keyboardShortcut.js --- Extensions/keyboardShortcut.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Extensions/keyboardShortcut.js b/Extensions/keyboardShortcut.js index b280f0f24d..d31ce2f975 100644 --- a/Extensions/keyboardShortcut.js +++ b/Extensions/keyboardShortcut.js @@ -125,8 +125,8 @@ const scrollInterval = setInterval(() => { app.scrollTop += step; }, 10); - const clear = () => clearInterval(scrollInterval); - document.addEventListener("keyup", clear, { once: true }); + const clear = () => clearInterval(scrollInterval); + document.addEventListener("keyup", clear, { once: true }); } }