mirror of
https://github.com/XuehaiPan/nvitop.git
synced 2026-05-21 06:45:24 -06:00
refactor(gui): refactor keymaps
Signed-off-by: Xuehai Pan <XuehaiPan@pku.edu.cn>
This commit is contained in:
parent
bc34725e06
commit
671033fce8
5 changed files with 118 additions and 90 deletions
|
|
@ -14,6 +14,7 @@ from nvitop.gui.library.keybinding import (
|
|||
SPECIAL_KEYS,
|
||||
KeyBuffer,
|
||||
KeyMaps,
|
||||
normalize_keybinding,
|
||||
)
|
||||
from nvitop.gui.library.libcurses import libcurses, setlocale_utf8
|
||||
from nvitop.gui.library.mouse import MouseEvent
|
||||
|
|
|
|||
|
|
@ -212,6 +212,21 @@ def construct_keybinding(keys):
|
|||
return ''.join(strings)
|
||||
|
||||
|
||||
def normalize_keybinding(keybinding):
|
||||
"""Normalize a keybinding to a string
|
||||
|
||||
>>> normalize_keybinding('lol<CR>')
|
||||
'lol<Enter>'
|
||||
|
||||
>>> normalize_keybinding('x<A-Left>')
|
||||
'x<A-Left>'
|
||||
|
||||
>>> normalize_keybinding('x<Alt><Left>')
|
||||
'x<A-Left>'
|
||||
"""
|
||||
return construct_keybinding(parse_keybinding(keybinding))
|
||||
|
||||
|
||||
class KeyMaps(dict):
|
||||
def __init__(self, keybuffer=None):
|
||||
super().__init__()
|
||||
|
|
@ -224,6 +239,12 @@ class KeyMaps(dict):
|
|||
self.used_keymap = keymap_name
|
||||
self.keybuffer.clear()
|
||||
|
||||
def clear_keymap(self, keymap_name):
|
||||
self[keymap_name] = {}
|
||||
if self.used_keymap == keymap_name:
|
||||
self.keybuffer.keymap = {}
|
||||
self.keybuffer.clear()
|
||||
|
||||
def _clean_input(self, context, keys):
|
||||
try:
|
||||
pointer = self[context]
|
||||
|
|
|
|||
|
|
@ -221,25 +221,27 @@ class EnvironScreen(Displayable): # pylint: disable=too-many-instance-attribute
|
|||
def environ_move(direction):
|
||||
self.move(direction=direction)
|
||||
|
||||
self.root.keymaps.bind('environ', 'r', refresh_environ)
|
||||
self.root.keymaps.copy('environ', 'r', 'R')
|
||||
self.root.keymaps.copy('environ', 'r', '<C-r>')
|
||||
self.root.keymaps.copy('environ', 'r', '<F5>')
|
||||
self.root.keymaps.bind('environ', '<Left>', environ_left)
|
||||
self.root.keymaps.copy('environ', '<Left>', '<A-h>')
|
||||
self.root.keymaps.bind('environ', '<Right>', environ_right)
|
||||
self.root.keymaps.copy('environ', '<Right>', '<A-l>')
|
||||
self.root.keymaps.bind('environ', '<C-a>', environ_begin)
|
||||
self.root.keymaps.copy('environ', '<C-a>', '^')
|
||||
self.root.keymaps.bind('environ', '<Up>', partial(environ_move, direction=-1))
|
||||
self.root.keymaps.copy('environ', '<Up>', '<S-Tab>')
|
||||
self.root.keymaps.copy('environ', '<Up>', '<A-k>')
|
||||
self.root.keymaps.copy('environ', '<Up>', '<PageUp>')
|
||||
self.root.keymaps.copy('environ', '<Up>', '[')
|
||||
self.root.keymaps.bind('environ', '<Down>', partial(environ_move, direction=+1))
|
||||
self.root.keymaps.copy('environ', '<Down>', '<Tab>')
|
||||
self.root.keymaps.copy('environ', '<Down>', '<A-j>')
|
||||
self.root.keymaps.copy('environ', '<Down>', '<PageDown>')
|
||||
self.root.keymaps.copy('environ', '<Down>', ']')
|
||||
self.root.keymaps.bind('environ', '<Home>', partial(environ_move, direction=-(1 << 20)))
|
||||
self.root.keymaps.bind('environ', '<End>', partial(environ_move, direction=+(1 << 20)))
|
||||
keymaps = self.root.keymaps
|
||||
|
||||
keymaps.bind('environ', 'r', refresh_environ)
|
||||
keymaps.copy('environ', 'r', 'R')
|
||||
keymaps.copy('environ', 'r', '<C-r>')
|
||||
keymaps.copy('environ', 'r', '<F5>')
|
||||
keymaps.bind('environ', '<Left>', environ_left)
|
||||
keymaps.copy('environ', '<Left>', '<A-h>')
|
||||
keymaps.bind('environ', '<Right>', environ_right)
|
||||
keymaps.copy('environ', '<Right>', '<A-l>')
|
||||
keymaps.bind('environ', '<C-a>', environ_begin)
|
||||
keymaps.copy('environ', '<C-a>', '^')
|
||||
keymaps.bind('environ', '<Up>', partial(environ_move, direction=-1))
|
||||
keymaps.copy('environ', '<Up>', '<S-Tab>')
|
||||
keymaps.copy('environ', '<Up>', '<A-k>')
|
||||
keymaps.copy('environ', '<Up>', '<PageUp>')
|
||||
keymaps.copy('environ', '<Up>', '[')
|
||||
keymaps.bind('environ', '<Down>', partial(environ_move, direction=+1))
|
||||
keymaps.copy('environ', '<Down>', '<Tab>')
|
||||
keymaps.copy('environ', '<Down>', '<A-j>')
|
||||
keymaps.copy('environ', '<Down>', '<PageDown>')
|
||||
keymaps.copy('environ', '<Down>', ']')
|
||||
keymaps.bind('environ', '<Home>', partial(environ_move, direction=-(1 << 20)))
|
||||
keymaps.bind('environ', '<End>', partial(environ_move, direction=+(1 << 20)))
|
||||
|
|
|
|||
|
|
@ -223,56 +223,58 @@ class MainScreen(DisplayableContainer): # pylint: disable=too-many-instance-att
|
|||
def order_reverse():
|
||||
sort_by(order=self.process_panel.order, reverse=(not self.process_panel.reverse))
|
||||
|
||||
self.root.keymaps.bind('main', 'q', quit)
|
||||
self.root.keymaps.copy('main', 'q', 'Q')
|
||||
self.root.keymaps.bind('main', 'a', partial(change_mode, mode='auto'))
|
||||
self.root.keymaps.bind('main', 'f', partial(change_mode, mode='full'))
|
||||
self.root.keymaps.bind('main', 'c', partial(change_mode, mode='compact'))
|
||||
self.root.keymaps.bind('main', 'r', force_refresh)
|
||||
self.root.keymaps.copy('main', 'r', 'R')
|
||||
self.root.keymaps.copy('main', 'r', '<C-r>')
|
||||
self.root.keymaps.copy('main', 'r', '<F5>')
|
||||
keymaps = self.root.keymaps
|
||||
|
||||
self.root.keymaps.bind('main', '<PageUp>', partial(screen_move, direction=-1))
|
||||
self.root.keymaps.copy('main', '<PageUp>', '[')
|
||||
self.root.keymaps.copy('main', '<PageUp>', '<A-K>')
|
||||
self.root.keymaps.bind('main', '<PageDown>', partial(screen_move, direction=+1))
|
||||
self.root.keymaps.copy('main', '<PageDown>', ']')
|
||||
self.root.keymaps.copy('main', '<PageDown>', '<A-J>')
|
||||
keymaps.bind('main', 'q', quit)
|
||||
keymaps.copy('main', 'q', 'Q')
|
||||
keymaps.bind('main', 'a', partial(change_mode, mode='auto'))
|
||||
keymaps.bind('main', 'f', partial(change_mode, mode='full'))
|
||||
keymaps.bind('main', 'c', partial(change_mode, mode='compact'))
|
||||
keymaps.bind('main', 'r', force_refresh)
|
||||
keymaps.copy('main', 'r', 'R')
|
||||
keymaps.copy('main', 'r', '<C-r>')
|
||||
keymaps.copy('main', 'r', '<F5>')
|
||||
|
||||
self.root.keymaps.bind('main', '<Left>', host_left)
|
||||
self.root.keymaps.copy('main', '<Left>', '<A-h>')
|
||||
self.root.keymaps.bind('main', '<Right>', host_right)
|
||||
self.root.keymaps.copy('main', '<Right>', '<A-l>')
|
||||
self.root.keymaps.bind('main', '<C-a>', host_begin)
|
||||
self.root.keymaps.copy('main', '<C-a>', '^')
|
||||
self.root.keymaps.bind('main', '<C-e>', host_end)
|
||||
self.root.keymaps.copy('main', '<C-e>', '$')
|
||||
self.root.keymaps.bind('main', '<Up>', partial(select_move, direction=-1))
|
||||
self.root.keymaps.copy('main', '<Up>', '<S-Tab>')
|
||||
self.root.keymaps.copy('main', '<Up>', '<A-k>')
|
||||
self.root.keymaps.bind('main', '<Down>', partial(select_move, direction=+1))
|
||||
self.root.keymaps.copy('main', '<Down>', '<Tab>')
|
||||
self.root.keymaps.copy('main', '<Down>', '<A-j>')
|
||||
self.root.keymaps.bind('main', '<Home>', partial(select_move, direction=-(1 << 20)))
|
||||
self.root.keymaps.bind('main', '<End>', partial(select_move, direction=+(1 << 20)))
|
||||
self.root.keymaps.bind('main', '<Esc>', select_clear)
|
||||
self.root.keymaps.bind('main', '<Space>', tag)
|
||||
keymaps.bind('main', '<PageUp>', partial(screen_move, direction=-1))
|
||||
keymaps.copy('main', '<PageUp>', '[')
|
||||
keymaps.copy('main', '<PageUp>', '<A-K>')
|
||||
keymaps.bind('main', '<PageDown>', partial(screen_move, direction=+1))
|
||||
keymaps.copy('main', '<PageDown>', ']')
|
||||
keymaps.copy('main', '<PageDown>', '<A-J>')
|
||||
|
||||
self.root.keymaps.bind('main', 'T', terminate)
|
||||
self.root.keymaps.bind('main', 'K', kill)
|
||||
self.root.keymaps.bind('main', '<C-c>', interrupt)
|
||||
self.root.keymaps.copy('main', '<C-c>', 'I')
|
||||
keymaps.bind('main', '<Left>', host_left)
|
||||
keymaps.copy('main', '<Left>', '<A-h>')
|
||||
keymaps.bind('main', '<Right>', host_right)
|
||||
keymaps.copy('main', '<Right>', '<A-l>')
|
||||
keymaps.bind('main', '<C-a>', host_begin)
|
||||
keymaps.copy('main', '<C-a>', '^')
|
||||
keymaps.bind('main', '<C-e>', host_end)
|
||||
keymaps.copy('main', '<C-e>', '$')
|
||||
keymaps.bind('main', '<Up>', partial(select_move, direction=-1))
|
||||
keymaps.copy('main', '<Up>', '<S-Tab>')
|
||||
keymaps.copy('main', '<Up>', '<A-k>')
|
||||
keymaps.bind('main', '<Down>', partial(select_move, direction=+1))
|
||||
keymaps.copy('main', '<Down>', '<Tab>')
|
||||
keymaps.copy('main', '<Down>', '<A-j>')
|
||||
keymaps.bind('main', '<Home>', partial(select_move, direction=-(1 << 20)))
|
||||
keymaps.bind('main', '<End>', partial(select_move, direction=+(1 << 20)))
|
||||
keymaps.bind('main', '<Esc>', select_clear)
|
||||
keymaps.bind('main', '<Space>', tag)
|
||||
|
||||
self.root.keymaps.bind('main', ',', order_previous)
|
||||
self.root.keymaps.copy('main', ',', '<')
|
||||
self.root.keymaps.bind('main', '.', order_next)
|
||||
self.root.keymaps.copy('main', '.', '>')
|
||||
self.root.keymaps.bind('main', '/', order_reverse)
|
||||
keymaps.bind('main', 'T', terminate)
|
||||
keymaps.bind('main', 'K', kill)
|
||||
keymaps.bind('main', '<C-c>', interrupt)
|
||||
keymaps.copy('main', '<C-c>', 'I')
|
||||
|
||||
keymaps.bind('main', ',', order_previous)
|
||||
keymaps.copy('main', ',', '<')
|
||||
keymaps.bind('main', '.', order_next)
|
||||
keymaps.copy('main', '.', '>')
|
||||
keymaps.bind('main', '/', order_reverse)
|
||||
for order in ProcessPanel.ORDERS:
|
||||
self.root.keymaps.bind(
|
||||
keymaps.bind(
|
||||
'main', 'o' + order[:1].lower(), partial(sort_by, order=order, reverse=False)
|
||||
)
|
||||
self.root.keymaps.bind(
|
||||
keymaps.bind(
|
||||
'main', 'o' + order[:1].upper(), partial(sort_by, order=order, reverse=True)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -558,28 +558,30 @@ class TreeViewScreen(Displayable): # pylint: disable=too-many-instance-attribut
|
|||
def interrupt():
|
||||
self.selection.interrupt()
|
||||
|
||||
self.root.keymaps.bind('treeview', '<Left>', tree_left)
|
||||
self.root.keymaps.copy('treeview', '<Left>', '<A-h>')
|
||||
self.root.keymaps.bind('treeview', '<Right>', tree_right)
|
||||
self.root.keymaps.copy('treeview', '<Right>', '<A-l>')
|
||||
self.root.keymaps.bind('treeview', '<C-a>', tree_begin)
|
||||
self.root.keymaps.copy('treeview', '<C-a>', '^')
|
||||
self.root.keymaps.bind('treeview', '<Up>', partial(select_move, direction=-1))
|
||||
self.root.keymaps.copy('treeview', '<Up>', '<S-Tab>')
|
||||
self.root.keymaps.copy('treeview', '<Up>', '<A-k>')
|
||||
self.root.keymaps.copy('treeview', '<Up>', '<PageUp>')
|
||||
self.root.keymaps.copy('treeview', '<Up>', '[')
|
||||
self.root.keymaps.bind('treeview', '<Down>', partial(select_move, direction=+1))
|
||||
self.root.keymaps.copy('treeview', '<Down>', '<Tab>')
|
||||
self.root.keymaps.copy('treeview', '<Down>', '<A-j>')
|
||||
self.root.keymaps.copy('treeview', '<Down>', '<PageDown>')
|
||||
self.root.keymaps.copy('treeview', '<Down>', ']')
|
||||
self.root.keymaps.bind('treeview', '<Home>', partial(select_move, direction=-(1 << 20)))
|
||||
self.root.keymaps.bind('treeview', '<End>', partial(select_move, direction=+(1 << 20)))
|
||||
self.root.keymaps.bind('treeview', '<Esc>', select_clear)
|
||||
self.root.keymaps.bind('treeview', '<Space>', tag)
|
||||
keymaps = self.root.keymaps
|
||||
|
||||
self.root.keymaps.bind('treeview', 'T', terminate)
|
||||
self.root.keymaps.bind('treeview', 'K', kill)
|
||||
self.root.keymaps.bind('treeview', '<C-c>', interrupt)
|
||||
self.root.keymaps.copy('treeview', '<C-c>', 'I')
|
||||
keymaps.bind('treeview', '<Left>', tree_left)
|
||||
keymaps.copy('treeview', '<Left>', '<A-h>')
|
||||
keymaps.bind('treeview', '<Right>', tree_right)
|
||||
keymaps.copy('treeview', '<Right>', '<A-l>')
|
||||
keymaps.bind('treeview', '<C-a>', tree_begin)
|
||||
keymaps.copy('treeview', '<C-a>', '^')
|
||||
keymaps.bind('treeview', '<Up>', partial(select_move, direction=-1))
|
||||
keymaps.copy('treeview', '<Up>', '<S-Tab>')
|
||||
keymaps.copy('treeview', '<Up>', '<A-k>')
|
||||
keymaps.copy('treeview', '<Up>', '<PageUp>')
|
||||
keymaps.copy('treeview', '<Up>', '[')
|
||||
keymaps.bind('treeview', '<Down>', partial(select_move, direction=+1))
|
||||
keymaps.copy('treeview', '<Down>', '<Tab>')
|
||||
keymaps.copy('treeview', '<Down>', '<A-j>')
|
||||
keymaps.copy('treeview', '<Down>', '<PageDown>')
|
||||
keymaps.copy('treeview', '<Down>', ']')
|
||||
keymaps.bind('treeview', '<Home>', partial(select_move, direction=-(1 << 20)))
|
||||
keymaps.bind('treeview', '<End>', partial(select_move, direction=+(1 << 20)))
|
||||
keymaps.bind('treeview', '<Esc>', select_clear)
|
||||
keymaps.bind('treeview', '<Space>', tag)
|
||||
|
||||
keymaps.bind('treeview', 'T', terminate)
|
||||
keymaps.bind('treeview', 'K', kill)
|
||||
keymaps.bind('treeview', '<C-c>', interrupt)
|
||||
keymaps.copy('treeview', '<C-c>', 'I')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue