From a551e911ab54f5b1f56f837c3ebed42ef86fb4a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?=
Date: Tue, 13 Sep 2022 03:18:12 +0200 Subject: [PATCH] xP: adjust buffer list iteration and styling M-a and M-! should iterate, rather than keep jumping back to the same buffers. The current item wasn't visible enough, and it jumped around in my 1.5-scale Firefox. --- xP/public/xP.css | 8 ++------ xP/public/xP.js | 30 +++++++++++++----------------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/xP/public/xP.css b/xP/public/xP.css index 53aa2c2..71422a1 100644 --- a/xP/public/xP.css +++ b/xP/public/xP.css @@ -56,7 +56,7 @@ button { .list { overflow-y: auto; - border-right: 1px solid #ccc; + border-right: 2px solid #ccc; min-width: 10em; flex-shrink: 0; } @@ -72,11 +72,7 @@ button { } .item.current { font-style: italic; - background: #f8f8f8; - border-top: 1px solid #eee; - border-bottom: 1px solid #eee; - margin-top: -1px; - margin-bottom: -1px; + background: #eee; } /* Only Firefox currently supports align-content: safe end, thus this. */ diff --git a/xP/public/xP.js b/xP/public/xP.js index 2c4932b..6672231 100644 --- a/xP/public/xP.js +++ b/xP/public/xP.js @@ -841,21 +841,25 @@ document.addEventListener('keydown', event => { if (rpc.ws == undefined || !hasShortcutModifiers(event)) return - let names = undefined + // Rotate names so that the current buffer comes first. + let names = [...buffers.keys()] + names.push.apply(names, + names.splice(0, names.findIndex(name => name == bufferCurrent))) + switch (event.key) { case 'h': bufferToggleLog() break case 'a': - for (const [name, b] of buffers) - if (name !== bufferCurrent && b.newMessages) { + for (const name of names.slice(1)) + if (buffers.get(name).newMessages) { bufferActivate(name) break } break case '!': - for (const [name, b] of buffers) - if (name !== bufferCurrent && b.highlighted) { + for (const name of names.slice(1)) + if (buffers.get(name).highlighted) { bufferActivate(name) break } @@ -865,20 +869,12 @@ document.addEventListener('keydown', event => { bufferActivate(bufferLast) break case 'PageUp': - names = [...buffers.keys()] - for (let i = 0; i < names.length; i++) - if (names[i] === bufferCurrent) { - bufferActivate(names.at(--i)) - break - } + if (names.length > 1) + bufferActivate(names.at(-1)) break case 'PageDown': - names = [...buffers.keys()] - for (let i = 0; i < names.length; i++) - if (names[i] === bufferCurrent) { - bufferActivate(names.at(++i) || names[0]) - break - } + if (names.length > 1) + bufferActivate(names.at(+1)) break default: return