mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-05-18 00:31:15 -03:00
webconfig: remove legacy and raw key name parser for now
This parser was pretty nice but it has some issues with the new syntax. It's not really needed when most bindings use the new syntax. Let's remove it altogether.
This commit is contained in:
@@ -780,169 +780,6 @@ class FishBinding:
|
||||
}
|
||||
|
||||
|
||||
class BindingParser:
|
||||
"""Class to parse codes for bind command"""
|
||||
|
||||
# TODO: What does snext and sprevious mean ?
|
||||
readable_keys = {
|
||||
"dc": "Delete",
|
||||
"npage": "Page Up",
|
||||
"ppage": "Page Down",
|
||||
"sdc": "Shift Delete",
|
||||
"shome": "Shift Home",
|
||||
"left": "Left Arrow",
|
||||
"right": "Right Arrow",
|
||||
"up": "Up Arrow",
|
||||
"down": "Down Arrow",
|
||||
"sleft": "Shift Left",
|
||||
"sright": "Shift Right",
|
||||
"btab": "Shift Tab",
|
||||
}
|
||||
|
||||
def set_buffer(self, buffer):
|
||||
"""Sets code to parse"""
|
||||
|
||||
self.buffer = buffer or b""
|
||||
self.index = 0
|
||||
|
||||
def get_char(self):
|
||||
"""Gets next character from buffer"""
|
||||
if self.index >= len(self.buffer):
|
||||
return "\0"
|
||||
c = self.buffer[self.index]
|
||||
self.index += 1
|
||||
return c
|
||||
|
||||
def unget_char(self):
|
||||
"""Goes back by one character for parsing"""
|
||||
|
||||
self.index -= 1
|
||||
|
||||
def end(self):
|
||||
"""Returns true if reached end of buffer"""
|
||||
|
||||
return self.index >= len(self.buffer)
|
||||
|
||||
def parse_control_sequence(self):
|
||||
"""Parses terminal specifiec control sequences"""
|
||||
|
||||
result = ""
|
||||
c = self.get_char()
|
||||
|
||||
# \e0 is used to denote start of control sequence
|
||||
if c == "O":
|
||||
c = self.get_char()
|
||||
|
||||
# \[1\; is start of control sequence
|
||||
if c == "1":
|
||||
b = self.get_char()
|
||||
c = self.get_char()
|
||||
if b == "\\" and c == "~":
|
||||
result += "Home"
|
||||
elif c == ";":
|
||||
c = self.get_char()
|
||||
|
||||
# 3 is Alt
|
||||
if c == "3":
|
||||
result += "ALT - "
|
||||
c = self.get_char()
|
||||
|
||||
# \[4\~ is End
|
||||
if c == "4":
|
||||
b = self.get_char()
|
||||
c = self.get_char()
|
||||
if b == "\\" and c == "~":
|
||||
result += "End"
|
||||
|
||||
# 5 is Ctrl
|
||||
if c == "5":
|
||||
result += "CTRL - "
|
||||
c = self.get_char()
|
||||
|
||||
# 9 is Alt
|
||||
if c == "9":
|
||||
result += "ALT - "
|
||||
c = self.get_char()
|
||||
|
||||
if c == "A":
|
||||
result += "Up Arrow"
|
||||
elif c == "B":
|
||||
result += "Down Arrow"
|
||||
elif c == "C":
|
||||
result += "Right Arrow"
|
||||
elif c == "D":
|
||||
result += "Left Arrow"
|
||||
elif c == "F":
|
||||
result += "End"
|
||||
elif c == "H":
|
||||
result += "Home"
|
||||
|
||||
return result
|
||||
|
||||
def get_readable_binding(self):
|
||||
"""Gets a readable representation of binding"""
|
||||
|
||||
try:
|
||||
result = BindingParser.readable_keys[self.buffer.lower()]
|
||||
except KeyError:
|
||||
result = self.parse_binding()
|
||||
|
||||
return result
|
||||
|
||||
def parse_binding(self):
|
||||
readable_command = ""
|
||||
result = ""
|
||||
alt = ctrl = False
|
||||
|
||||
while not self.end():
|
||||
c = self.get_char()
|
||||
|
||||
if c == "\\":
|
||||
c = self.get_char()
|
||||
if c == "e":
|
||||
d = self.get_char()
|
||||
if d == "O":
|
||||
self.unget_char()
|
||||
result += self.parse_control_sequence()
|
||||
elif d == "\\":
|
||||
if self.get_char() == "[":
|
||||
result += self.parse_control_sequence()
|
||||
else:
|
||||
self.unget_char()
|
||||
self.unget_char()
|
||||
alt = True
|
||||
elif d == "\0":
|
||||
result += "ESC"
|
||||
else:
|
||||
alt = True
|
||||
self.unget_char()
|
||||
elif c == "c":
|
||||
ctrl = True
|
||||
elif c == "n":
|
||||
result += "Enter"
|
||||
elif c == "t":
|
||||
result += "Tab"
|
||||
elif c == "b":
|
||||
result += "Backspace"
|
||||
elif c.isalpha():
|
||||
result += "\\" + c
|
||||
else:
|
||||
result += c
|
||||
elif c == "\x7f":
|
||||
result += "Backspace"
|
||||
else:
|
||||
result += c
|
||||
if ctrl:
|
||||
readable_command += "CTRL - "
|
||||
if alt:
|
||||
readable_command += "ALT - "
|
||||
|
||||
if result == "":
|
||||
return "unknown-control-sequence"
|
||||
|
||||
return readable_command + result
|
||||
|
||||
|
||||
class FishConfigTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
|
||||
"""TCPServer that only accepts connections from localhost (IPv4/IPv6)."""
|
||||
|
||||
@@ -1120,7 +957,6 @@ class FishConfigHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
||||
# Put all the bindings into a list
|
||||
bindings = []
|
||||
command_to_binding = {}
|
||||
binding_parser = BindingParser()
|
||||
|
||||
for line in out.split("\n"):
|
||||
comps = line.split(" ", 2)
|
||||
@@ -1142,23 +978,17 @@ class FishConfigHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
||||
if len(comps) != 3:
|
||||
continue
|
||||
|
||||
if comps[1] == "-k":
|
||||
key_name, command = comps[2].split(" ", 1)
|
||||
binding_parser.set_buffer(key_name.capitalize())
|
||||
else:
|
||||
key_name = None
|
||||
command = comps[2]
|
||||
binding_parser.set_buffer(comps[1])
|
||||
key = comps[1]
|
||||
command = comps[2]
|
||||
|
||||
if command in bindings_blacklist:
|
||||
continue
|
||||
|
||||
readable_binding = binding_parser.get_readable_binding()
|
||||
if command in command_to_binding:
|
||||
fish_binding = command_to_binding[command]
|
||||
fish_binding.add_binding(line, readable_binding)
|
||||
fish_binding.add_binding(line, key)
|
||||
else:
|
||||
fish_binding = FishBinding(command, line, readable_binding)
|
||||
fish_binding = FishBinding(command, line, key)
|
||||
bindings.append(fish_binding)
|
||||
command_to_binding[command] = fish_binding
|
||||
|
||||
|
||||
Reference in New Issue
Block a user