lib/vimgolf/keylog.rb in vimgolf-0.4.6 vs lib/vimgolf/keylog.rb in vimgolf-0.4.7

- old
+ new

@@ -1,5 +1,7 @@ +# encoding: UTF-8 + module VimGolf class Keylog include Enumerable alias_method :convert , :to_s @@ -93,10 +95,31 @@ when "%i"; "<S-Right>" when "kB"; "<S-Tab>" when "\xffX"; "<C-@>" + # This is how you escape literal 0x80 + when "\xfeX"; "<0x80>" + + # These rarely-used modifiers should be combined with the next + # stroke (like <S-Space>), but let's put them here for now + when "\xfc\x02"; "<S->" + when "\xfc\x04"; "<C->" + when "\xfc\x06"; "<C-S->" + when "\xfc\x08"; "<A->" + when "\xfc\x0a"; "<A-S->" + when "\xfc\x0c"; "<C-A>" + when "\xfc\x0e"; "<C-A-S->" + when "\xfc\x10"; "<M->" + when "\xfc\x12"; "<M-S->" + when "\xfc\x14"; "<M-C->" + when "\xfc\x16"; "<M-C-S->" + when "\xfc\x18"; "<M-A->" + when "\xfc\x1a"; "<M-A-S->" + when "\xfc\x1c"; "<M-C-A>" + when "\xfc\x1e"; "<M-C-A-S->" + when "\xfd\x4"; "<S-Up>" when "\xfd\x5"; "<S-Down>" when "\xfd\x6"; "<S-F1>" when "\xfd\x7"; "<S-F2>" when "\xfd\x8"; "<S-F3>" @@ -142,11 +165,11 @@ when "\xfd\x30"; "<MiddleDrag>" when "\xfd\x31"; "<MiddleRelease>" when "\xfd\x32"; "<RightMouse>" when "\xfd\x33"; "<RightDrag>" when "\xfd\x34"; "<RightRelease>" - #when "\xfd\x35"; "KE_IGNORE" + when "\xfd\x35"; nil # KE_IGNORE #when "\xfd\x36"; "KE_TAB" #when "\xfd\x37"; "KE_S_TAB_OLD" #when "\xfd\x38"; "KE_SNIFF" #when "\xfd\x39"; "KE_XF1" #when "\xfd\x3a"; "KE_XF2" @@ -164,54 +187,64 @@ #when "\xfd\x46"; "KE_LEFTRELEASE_NM" #when "\xfd\x47"; "KE_S_XF1" #when "\xfd\x48"; "KE_S_XF2" #when "\xfd\x49"; "KE_S_XF3" #when "\xfd\x4a"; "KE_S_XF4" - when "\xfd\x4b"; "<MouseDown>" - when "\xfd\x4c"; "<MouseUp>" - when "\xfd\x4d"; "<MouseLeft>" - when "\xfd\x4e"; "<MouseRight>" - #when "\xfd\x4f"; "KE_KINS" - #when "\xfd\x50"; "KE_KDEL" - #when "\xfd\x51"; "KE_CSI" + when "\xfd\x4b"; "<ScrollWheelUp>" + when "\xfd\x4c"; "<ScrollWheelDown>" + + # Horizontal scroll wheel support was added in Vim 7.3c. These + # 2 entries shifted the rest of the KS_EXTRA mappings down 2. + # Though Vim 7.2 is rare today, it was common soon after + # vimgolf.com was launched. In cases where the 7.3 code is + # never used but the 7.2 code was common, it makes sense to use + # the 7.2 code. There are conflicts though, so some legacy + # keycodes have to stay wrong. + when "\xfd\x4d"; "<ScrollWheelRight>" + when "\xfd\x4e"; "<ScrollWheelLeft>" + when "\xfd\x4f"; "<kInsert>" + when "\xfd\x50"; "<kDel>" + when "\xfd\x51"; "<0x9b>" # :help <CSI> #when "\xfd\x52"; "KE_SNR" - #when "\xfd\x53"; "KE_PLUG" - #when "\xfd\x54"; "KE_CMDWIN" - when "\xfd\x55"; "<C-Left>" - when "\xfd\x56"; "<C-Right>" + #when "\xfd\x53"; "KE_PLUG" # never used + when "\xfd\x53"; "<C-Left>" # 7.2 compat + #when "\xfd\x54"; "KE_CMDWIN" # never used + when "\xfd\x54"; "<C-Right>" # 7.2 compat + when "\xfd\x55"; "<C-Left>" # 7.2 <C-Home> conflict + when "\xfd\x56"; "<C-Right>" # 7.2 <C-End> conflict when "\xfd\x57"; "<C-Home>" when "\xfd\x58"; "<C-End>" #when "\xfd\x59"; "KE_X1MOUSE" #when "\xfd\x5a"; "KE_X1DRAG" #when "\xfd\x5b"; "KE_X1RELEASE" #when "\xfd\x5c"; "KE_X2MOUSE" #when "\xfd\x5d"; "KE_X2DRAG" #when "\xfd\x5e"; "KE_X2RELEASE" + when "\xfd\x5e"; nil # 7.2 compat (I think?) #when "\xfd\x5f"; "KE_DROP" - #when "\xfd\x5e"; "KE_CURSORHOLD" + #when "\xfd\x60"; "KE_CURSORHOLD" + when "\xfd\x60"; nil # 7.2 Focus Gained compat #when "\xfd\x61"; "KE_NOP" when "\xfd\x62"; nil # Focus Gained (GVIM) when "\xfd\x63"; nil # Focus Lost (GVIM) else #puts "Unknown Vim code: #{code.inspect}" '<%02x-%02x>' % code.unpack('CC') end + # Printable ASCII + when 32..126; c + # Control characters with special names when 0; "<Nul>" when 9; "<Tab>" when 10; "<NL>" when 13; "<CR>" when 27; "<Esc>" - when 127; "<Del>" - - # Otherwise, use <C-x> format - when 0..31; "<C-#{(n + 64).chr}>" - - # The rest of ANSI is printable - when 32..126; c + # Otherwise, use <C-x> format. Flip bit 7 + when 0..127; "<C-#{(n ^ 0x40).chr}>" else #puts "Unexpected extended ASCII: #{'%#04x' % n}" '<%#04x>' % n