mirror of https://github.com/mpv-player/mpv
4b5c3ea7a7
This is independent of terminfo/termcap, and supports more keys. Originally, the goal was just extending the set of supported key sequences, but since the terminfo stuff actually makes this much harder, and since it's a big blob of bloated legacy crap, just drop it. Instead, use hardcoded tables. It's pretty easy to get on the same level as the old code (with fewer LOC), and we avoid additional error situations, such as mallocs which could fail (the old code just ignores malloc failures). We also try to support some xterm escape sequences, which are in relatively widespread use. (I'm not sure about the urxvt ones.) Trying to deal with xterm shift/ctrl/alt modifiers is probably a bit overcomplicated, and only deals with prefixes - xterm randomly uses prefix sequences for some keys, and suffixes for others (what the heck). Additionally, try to drop unknown escape codes. This basically relies on a trick: in almost 100% of all situations, a read() call will actually return complete sequences (possibly because of pipe semantics and atomic writes from the terminal emulator?), so it's easy to drop unknown sequences. This prevents that they trigger random key bindings as the code interprets the part after ESC as normal keys. This also drops the use of terminfo for sending smkx/rmkx. It seems even vt100 (to which virtually everything non-legacy is reasonably compatible with) supports the codes we hardcode, so it should be fine. This commit actually changes only the code if terminfo/termcap are not found. The next commit will make this code default. |
||
---|---|---|
.. | ||
ar | ||
endian.h | ||
glob-win.c | ||
io.c | ||
io.h | ||
macosx_application.h | ||
macosx_application.m | ||
macosx_application_objc.h | ||
macosx_compat.h | ||
macosx_events.h | ||
macosx_events.m | ||
macosx_events_objc.h | ||
macosx_versions.h | ||
mpv.exe.manifest | ||
mpv.rc | ||
numcores.c | ||
numcores.h | ||
path-macosx.m | ||
path-win.c | ||
path.h | ||
terminal-unix.c | ||
terminal-win.c | ||
terminal.h | ||
threads.c | ||
threads.h | ||
timer-darwin.c | ||
timer-linux.c | ||
timer-win2.c | ||
timer.c | ||
timer.h | ||
w32_keyboard.c | ||
w32_keyboard.h | ||
win32-console-wrapper.c |