diff --git a/contrib/kakmap.rb b/contrib/kakmap.rb new file mode 100755 index 00000000..33b61639 --- /dev/null +++ b/contrib/kakmap.rb @@ -0,0 +1,61 @@ +#!/usr/bin/env ruby + +# Generate a reference sheet for Kakoune's normal mode +# Use: ./kakmap.rb ../src/normal.cc + +require 'markaby' + +# Relies on the cmds array assignment ending with }; +raw = ARGF.read.split( /cmds\[\] =\s+{\s*/m ).last.split( /^};$/ ).first + +commands = {} + +# break code into lines +raw.split( /\n+/ ).each{ |line| + line.gsub!( /(^\s*{\s*|\s*},?\*$)/, '' ) # discard wrapping for array elements + + mod = (line.scan( /^alt|^ctrl/ ).first || 'none').to_sym + key = line.scan(/(?:^Key::(\w+)|(?.*?)(?>> }, { 'e', "select to next word end", repeated>> }, - { 'b', "select to prevous word start", repeated>> }, + { 'b', "select to previous word start", repeated>> }, { 'W', "extend to next word start", repeated>> }, { 'E', "extend to next word end", repeated>> }, - { 'B', "extend to prevous word start", repeated>> }, + { 'B', "extend to previous word start", repeated>> }, { alt('w'), "select to next WORD start", repeated>> }, { alt('e'), "select to next WORD end", repeated>> }, - { alt('b'), "select to prevous WORD start", repeated>> }, + { alt('b'), "select to previous WORD start", repeated>> }, { alt('W'), "extend to next WORD start", repeated>> }, { alt('E'), "extend to next WORD end", repeated>> }, - { alt('B'), "extend to prevous WORD start", repeated>> }, + { alt('B'), "extend to previous WORD start", repeated>> }, { alt('l'), "select to line end", repeated>> }, { Key::End, "select to line end", repeated>> },