command_prompt: ignore numlock and such
This commit is contained in:
parent
b8390bfac8
commit
1a816166b6
@ -29,6 +29,7 @@ class Command_prompt(Label):
|
||||
|
||||
self.draw()
|
||||
|
||||
|
||||
def draw(self):
|
||||
with self.canvas.before:
|
||||
# background
|
||||
@ -44,9 +45,13 @@ class Command_prompt(Label):
|
||||
else:
|
||||
self.text=self.raw_text
|
||||
|
||||
|
||||
def on_key_down(self, keyboard, keycode, text, modifiers):
|
||||
print(keycode,text,modifiers)
|
||||
if self.insert:
|
||||
# process modifiers
|
||||
mods=self.process_modifiers(modifiers)
|
||||
|
||||
# process command
|
||||
if keycode[1]=="enter":
|
||||
self.insert=False
|
||||
@ -58,9 +63,9 @@ class Command_prompt(Label):
|
||||
self.move_cursor_relative(-1)
|
||||
elif keycode[1]=="right":
|
||||
self.move_cursor_relative(1)
|
||||
elif len(modifiers)==1 and modifiers[0]=="ctrl" and text=="a":
|
||||
elif mods==['c'] and text=="a":
|
||||
self.move_cursor(1)
|
||||
elif len(modifiers)==1 and modifiers[0]=="ctrl" and text=="e":
|
||||
elif mods==['c'] and text=="e":
|
||||
self.move_cursor(len(self.raw_text))
|
||||
|
||||
# delete
|
||||
@ -68,7 +73,7 @@ class Command_prompt(Label):
|
||||
self.backspace()
|
||||
elif keycode[1]=="delete":
|
||||
self.delete_forward()
|
||||
elif len(modifiers)==1 and modifiers[0]=="ctrl" and text=="k":
|
||||
elif mods==['c'] and text=="k":
|
||||
self.delete_all_forward()
|
||||
|
||||
def on_textinput(self,window,text):
|
||||
@ -79,6 +84,30 @@ class Command_prompt(Label):
|
||||
self.append_text_at_cursor(text)
|
||||
self.insert=True
|
||||
|
||||
|
||||
# get modifiers from list
|
||||
# returns an alphabetically ordered array of characters
|
||||
# 'a' is alt
|
||||
# 'c' is ctrl
|
||||
# 'm' is meta
|
||||
# 's' is shift
|
||||
# ignore all others
|
||||
def process_modifiers(self,modifiers):
|
||||
out=[]
|
||||
for mod in modifiers:
|
||||
if mod=="alt":
|
||||
out.append('a')
|
||||
elif mod=="ctrl":
|
||||
out.append('c')
|
||||
elif mod=="meta":
|
||||
out.append('m')
|
||||
elif mod=="shift":
|
||||
out.append('s')
|
||||
out.sort()
|
||||
return out
|
||||
|
||||
|
||||
|
||||
# append to text at position of cursor
|
||||
def append_text_at_cursor(self,text):
|
||||
if self.cursor==len(self.raw_text):
|
||||
@ -121,6 +150,7 @@ class Command_prompt(Label):
|
||||
self.cursor=len(text)
|
||||
self.draw()
|
||||
|
||||
|
||||
# move cursor n steps to right (left if negative)
|
||||
def move_cursor_relative(self,n):
|
||||
if n==0 or (n>0 and self.cursor==len(self.raw_text)) or (n<0 and self.cursor==0):
|
||||
@ -133,6 +163,7 @@ class Command_prompt(Label):
|
||||
self.cursor=max(1,min(len(self.raw_text),n))
|
||||
self.draw()
|
||||
|
||||
|
||||
# parse text as argv
|
||||
def parse_command(self):
|
||||
# init
|
||||
|
Loading…
Reference in New Issue
Block a user