vimamsa 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/exe/vimamsa +4 -2
- data/lib/vimamsa/ack.rb +0 -4
- data/lib/vimamsa/actions.rb +20 -32
- data/lib/vimamsa/buffer.rb +23 -16
- data/lib/vimamsa/buffer_list.rb +3 -3
- data/lib/vimamsa/debug.rb +6 -6
- data/lib/vimamsa/easy_jump.rb +129 -125
- data/lib/vimamsa/editor.rb +29 -28
- data/lib/vimamsa/file_finder.rb +2 -2
- data/lib/vimamsa/file_history.rb +12 -5
- data/lib/vimamsa/gui.rb +561 -0
- data/lib/vimamsa/gui_gtk_sourceview.rb +294 -0
- data/lib/vimamsa/gui_menu.rb +100 -0
- data/lib/vimamsa/gui_select_window.rb +177 -0
- data/lib/vimamsa/gui_sourceview.rb +294 -0
- data/lib/vimamsa/{default_key_bindings.rb → key_actions.rb} +64 -189
- data/lib/vimamsa/key_binding_tree.rb +21 -9
- data/lib/vimamsa/key_bindings_vimlike.rb +259 -0
- data/lib/vimamsa/macro.rb +1 -1
- data/lib/vimamsa/main.rb +1 -2
- data/lib/vimamsa/rbvma.rb +16 -1023
- data/lib/vimamsa/search.rb +0 -4
- data/lib/vimamsa/search_replace.rb +1 -2
- data/lib/vimamsa/version.rb +1 -1
- metadata +9 -3
@@ -0,0 +1,294 @@
|
|
1
|
+
|
2
|
+
class VSourceView < GtkSource::View
|
3
|
+
def initialize(title = nil)
|
4
|
+
# super(:toplevel)
|
5
|
+
super()
|
6
|
+
puts "vsource init"
|
7
|
+
@last_keyval = nil
|
8
|
+
@last_event = [nil, nil]
|
9
|
+
|
10
|
+
signal_connect "button-press-event" do |_widget, event|
|
11
|
+
if event.button == Gdk::BUTTON_PRIMARY
|
12
|
+
# puts "Gdk::BUTTON_PRIMARY"
|
13
|
+
false
|
14
|
+
elsif event.button == Gdk::BUTTON_SECONDARY
|
15
|
+
# puts "Gdk::BUTTON_SECONDARY"
|
16
|
+
true
|
17
|
+
else
|
18
|
+
true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
signal_connect("key_press_event") do |widget, event|
|
23
|
+
handle_key_event(event, :key_press_event)
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
signal_connect("key_release_event") do |widget, event|
|
28
|
+
handle_key_event(event, :key_release_event)
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
signal_connect("move-cursor") do |widget, event|
|
33
|
+
$update_cursor = true
|
34
|
+
false
|
35
|
+
end
|
36
|
+
|
37
|
+
signal_connect "button-release-event" do |widget, event|
|
38
|
+
$buffer.set_pos(buffer.cursor_position)
|
39
|
+
false
|
40
|
+
end
|
41
|
+
@curpos_mark = nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def handle_key_event(event, sig)
|
45
|
+
if $update_cursor
|
46
|
+
curpos = buffer.cursor_position
|
47
|
+
puts "MOVE CURSOR: #{curpos}"
|
48
|
+
buf.set_pos(curpos)
|
49
|
+
$update_cursor = false
|
50
|
+
end
|
51
|
+
puts $view.visible_rect.inspect
|
52
|
+
|
53
|
+
puts "key event"
|
54
|
+
puts event
|
55
|
+
|
56
|
+
key_name = event.string
|
57
|
+
if event.state.control_mask?
|
58
|
+
key_name = Gdk::Keyval.to_name(event.keyval)
|
59
|
+
# Gdk::Keyval.to_name()
|
60
|
+
end
|
61
|
+
|
62
|
+
keyval_trans = {}
|
63
|
+
keyval_trans[Gdk::Keyval::KEY_Control_L] = "ctrl"
|
64
|
+
keyval_trans[Gdk::Keyval::KEY_Control_R] = "ctrl"
|
65
|
+
|
66
|
+
keyval_trans[Gdk::Keyval::KEY_Escape] = "esc"
|
67
|
+
|
68
|
+
keyval_trans[Gdk::Keyval::KEY_Return] = "enter"
|
69
|
+
keyval_trans[Gdk::Keyval::KEY_ISO_Enter] = "enter"
|
70
|
+
keyval_trans[Gdk::Keyval::KEY_KP_Enter] = "enter"
|
71
|
+
keyval_trans[Gdk::Keyval::KEY_Alt_L] = "alt"
|
72
|
+
keyval_trans[Gdk::Keyval::KEY_Alt_R] = "alt"
|
73
|
+
|
74
|
+
keyval_trans[Gdk::Keyval::KEY_BackSpace] = "backspace"
|
75
|
+
keyval_trans[Gdk::Keyval::KEY_KP_Page_Down] = "pagedown"
|
76
|
+
keyval_trans[Gdk::Keyval::KEY_KP_Page_Up] = "pageup"
|
77
|
+
keyval_trans[Gdk::Keyval::KEY_Page_Down] = "pagedown"
|
78
|
+
keyval_trans[Gdk::Keyval::KEY_Page_Up] = "pageup"
|
79
|
+
keyval_trans[Gdk::Keyval::KEY_Left] = "left"
|
80
|
+
keyval_trans[Gdk::Keyval::KEY_Right] = "right"
|
81
|
+
keyval_trans[Gdk::Keyval::KEY_Down] = "down"
|
82
|
+
keyval_trans[Gdk::Keyval::KEY_Up] = "up"
|
83
|
+
keyval_trans[Gdk::Keyval::KEY_space] = "space"
|
84
|
+
|
85
|
+
keyval_trans[Gdk::Keyval::KEY_Shift_L] = "shift"
|
86
|
+
keyval_trans[Gdk::Keyval::KEY_Shift_R] = "shift"
|
87
|
+
keyval_trans[Gdk::Keyval::KEY_Tab] = "tab"
|
88
|
+
|
89
|
+
key_trans = {}
|
90
|
+
key_trans["\e"] = "esc"
|
91
|
+
tk = keyval_trans[event.keyval]
|
92
|
+
key_name = tk if !tk.nil?
|
93
|
+
|
94
|
+
key_str_parts = []
|
95
|
+
key_str_parts << "ctrl" if event.state.control_mask? and key_name != "ctrl"
|
96
|
+
key_str_parts << "alt" if event.state.mod1_mask? and key_name != "alt"
|
97
|
+
|
98
|
+
key_str_parts << key_name
|
99
|
+
key_str = key_str_parts.join("-")
|
100
|
+
keynfo = { :key_str => key_str, :key_name => key_name, :keyval => event.keyval }
|
101
|
+
puts keynfo.inspect
|
102
|
+
# $kbd.match_key_conf(key_str, nil, :key_press)
|
103
|
+
# puts "key_str=#{key_str} key_"
|
104
|
+
|
105
|
+
if key_str != "" # or prefixed_key_str != ""
|
106
|
+
if sig == :key_release_event and event.keyval == @last_keyval
|
107
|
+
$kbd.match_key_conf(key_str + "!", nil, :key_release)
|
108
|
+
@last_event = [event, :key_release]
|
109
|
+
elsif sig == :key_press_event
|
110
|
+
$kbd.match_key_conf(key_str, nil, :key_press)
|
111
|
+
@last_event = [event, key_str, :key_press]
|
112
|
+
end
|
113
|
+
@last_keyval = event.keyval #TODO: outside if?
|
114
|
+
end
|
115
|
+
|
116
|
+
handle_deltas
|
117
|
+
|
118
|
+
# set_focus(5)
|
119
|
+
# false
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
def pos_to_coord(i)
|
124
|
+
b = buffer
|
125
|
+
iter = b.get_iter_at(:offset => i)
|
126
|
+
iterxy = get_iter_location(iter)
|
127
|
+
winw = parent_window.width
|
128
|
+
view_width = visible_rect.width
|
129
|
+
gutter_width = winw - view_width
|
130
|
+
|
131
|
+
x = iterxy.x + gutter_width
|
132
|
+
y = iterxy.y
|
133
|
+
|
134
|
+
# buffer_to_window_coords(Gtk::TextWindowType::TEXT, iterxy.x, iterxy.y).inspect
|
135
|
+
# puts buffer_to_window_coords(Gtk::TextWindowType::TEXT, x, y).inspect
|
136
|
+
(x, y) = buffer_to_window_coords(Gtk::TextWindowType::TEXT, x, y)
|
137
|
+
# Ripl.start :binding => binding
|
138
|
+
|
139
|
+
return [x, y]
|
140
|
+
end
|
141
|
+
|
142
|
+
def handle_deltas()
|
143
|
+
any_change = false
|
144
|
+
while d = buf.deltas.shift
|
145
|
+
any_change = true
|
146
|
+
pos = d[0]
|
147
|
+
op = d[1]
|
148
|
+
num = d[2]
|
149
|
+
txt = d[3]
|
150
|
+
if op == DELETE
|
151
|
+
startiter = buffer.get_iter_at(:offset => pos)
|
152
|
+
enditer = buffer.get_iter_at(:offset => pos + num)
|
153
|
+
buffer.delete(startiter, enditer)
|
154
|
+
elsif op == INSERT
|
155
|
+
startiter = buffer.get_iter_at(:offset => pos)
|
156
|
+
buffer.insert(startiter, txt)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
if any_change
|
160
|
+
gui_set_cursor_pos($buffer.id, $buffer.pos) #TODO: only when necessary
|
161
|
+
end
|
162
|
+
|
163
|
+
# sanity_check #TODO
|
164
|
+
end
|
165
|
+
|
166
|
+
def sanity_check()
|
167
|
+
a = buffer.text
|
168
|
+
b = buf.to_s
|
169
|
+
# puts "===================="
|
170
|
+
# puts a.lines[0..10].join()
|
171
|
+
# puts "===================="
|
172
|
+
# puts b.lines[0..10].join()
|
173
|
+
# puts "===================="
|
174
|
+
if a == b
|
175
|
+
puts "Buffers match"
|
176
|
+
else
|
177
|
+
puts "ERROR: Buffer's don't match."
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def set_cursor_pos(pos)
|
182
|
+
# return
|
183
|
+
itr = buffer.get_iter_at(:offset => pos)
|
184
|
+
itr2 = buffer.get_iter_at(:offset => pos + 1)
|
185
|
+
buffer.place_cursor(itr)
|
186
|
+
|
187
|
+
# $view.signal_emit("extend-selection", Gtk::MovementStep.new(:PAGES), -1, false)
|
188
|
+
|
189
|
+
within_margin = 0.075 #margin as a [0.0,0.5) fraction of screen size
|
190
|
+
use_align = false
|
191
|
+
xalign = 0.5 #0.0=top 1.0=bottom, 0.5=center
|
192
|
+
yalign = 0.5
|
193
|
+
|
194
|
+
if @curpos_mark.nil?
|
195
|
+
@curpos_mark = buffer.create_mark("cursor", itr, false)
|
196
|
+
else
|
197
|
+
buffer.move_mark(@curpos_mark, itr)
|
198
|
+
end
|
199
|
+
scroll_to_mark(@curpos_mark, within_margin, use_align, xalign, yalign)
|
200
|
+
$idle_scroll_to_mark = true
|
201
|
+
ensure_cursor_visible
|
202
|
+
|
203
|
+
# scroll_to_iter(itr, within_margin, use_align, xalign, yalign)
|
204
|
+
|
205
|
+
# $view.signal_emit("extend-selection", Gtk::TextExtendSelection.new, itr,itr,itr2)
|
206
|
+
# Ripl.start :binding => binding
|
207
|
+
draw_cursor
|
208
|
+
|
209
|
+
return true
|
210
|
+
end
|
211
|
+
|
212
|
+
def cursor_visible_idle_func
|
213
|
+
puts "cursor_visible_idle_func"
|
214
|
+
# From https://picheta.me/articles/2013/08/gtk-plus--a-method-to-guarantee-scrolling.html
|
215
|
+
# vr = visible_rect
|
216
|
+
|
217
|
+
# b = $view.buffer
|
218
|
+
# iter = buffer.get_iter_at(:offset => buffer.cursor_position)
|
219
|
+
# iterxy = get_iter_location(iter)
|
220
|
+
|
221
|
+
sleep(0.01)
|
222
|
+
# intr = iterxy.intersect(vr)
|
223
|
+
if is_cursor_visible == false
|
224
|
+
# set_cursor_pos(buffer.cursor_position)
|
225
|
+
|
226
|
+
itr = buffer.get_iter_at(:offset => buffer.cursor_position)
|
227
|
+
|
228
|
+
within_margin = 0.075 #margin as a [0.0,0.5) fraction of screen size
|
229
|
+
use_align = false
|
230
|
+
xalign = 0.5 #0.0=top 1.0=bottom, 0.5=center
|
231
|
+
yalign = 0.5
|
232
|
+
|
233
|
+
scroll_to_iter(itr, within_margin, use_align, xalign, yalign)
|
234
|
+
|
235
|
+
# return true # Call this func again
|
236
|
+
else
|
237
|
+
return false # Don't call this idle func again
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
def is_cursor_visible
|
242
|
+
vr = visible_rect
|
243
|
+
iter = buffer.get_iter_at(:offset => buffer.cursor_position)
|
244
|
+
iterxy = get_iter_location(iter)
|
245
|
+
iterxy.width = 1 if iterxy.width == 0
|
246
|
+
iterxy.height = 1 if iterxy.height == 0
|
247
|
+
|
248
|
+
intr = iterxy.intersect(vr)
|
249
|
+
if intr.nil?
|
250
|
+
puts iterxy.inspect
|
251
|
+
puts vr.inspect
|
252
|
+
# Ripl.start :binding => binding
|
253
|
+
|
254
|
+
# exit!
|
255
|
+
return false
|
256
|
+
else
|
257
|
+
return true
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
def ensure_cursor_visible
|
262
|
+
if is_cursor_visible == false
|
263
|
+
Thread.new {
|
264
|
+
sleep 0.01
|
265
|
+
GLib::Idle.add(proc { cursor_visible_idle_func })
|
266
|
+
}
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
def draw_cursor
|
271
|
+
if is_command_mode
|
272
|
+
itr = buffer.get_iter_at(:offset => buf.pos)
|
273
|
+
itr2 = buffer.get_iter_at(:offset => buf.pos + 1)
|
274
|
+
$view.buffer.select_range(itr, itr2)
|
275
|
+
elsif buf.visual_mode?
|
276
|
+
puts "VISUAL MODE"
|
277
|
+
(_start, _end) = buf.get_visual_mode_range2
|
278
|
+
puts "#{_start}, #{_end}"
|
279
|
+
itr = buffer.get_iter_at(:offset => _start)
|
280
|
+
itr2 = buffer.get_iter_at(:offset => _end + 1)
|
281
|
+
$view.buffer.select_range(itr, itr2)
|
282
|
+
else # Insert mode
|
283
|
+
itr = buffer.get_iter_at(:offset => buf.pos)
|
284
|
+
$view.buffer.select_range(itr, itr)
|
285
|
+
puts "INSERT MODE"
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
# def quit
|
290
|
+
# destroy
|
291
|
+
# true
|
292
|
+
# end
|
293
|
+
end
|
294
|
+
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
def e_move_forward_char
|
3
2
|
buf.move(FORWARD_CHAR)
|
4
3
|
end
|
@@ -29,249 +28,127 @@ def is_visual_mode()
|
|
29
28
|
return 0
|
30
29
|
end
|
31
30
|
|
32
|
-
reg_act(:easy_jump, proc {
|
33
|
-
|
34
|
-
|
35
|
-
reg_act(:
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
reg_act(:
|
40
|
-
reg_act(:
|
41
|
-
reg_act(:
|
42
|
-
reg_act(:
|
43
|
-
reg_act(:e_move_forward_char, "e_move_forward_char", "")
|
44
|
-
reg_act(:e_move_backward_char, "e_move_backward_char", "")
|
45
|
-
reg_act(:history_switch_backwards, "history_switch_backwards", "")
|
46
|
-
reg_act(:history_switch_forwards, "history_switch_forwards", "")
|
47
|
-
|
48
|
-
reg_act(:center_on_current_line, "center_on_current_line", "")
|
49
|
-
|
50
|
-
# a = Action.new(:transform_upcase, "Transform selection upcase", proc{ buf.transform_selection(:upcase) } , [:selection])
|
51
|
-
|
52
|
-
reg_act(:run_last_macro, proc { $macro.run_last_macro }, "Run last recorded or executed macro")
|
53
|
-
bindkey ["VCB M","B m"], :run_last_macro
|
54
|
-
|
55
|
-
bindkey "VC , m f", [:find_macro_gui, proc{$macro.find_macro_gui}, "Find named macro"]
|
56
|
-
bindkey "C , m n", [:gui_name_macro, proc{$macro.gui_name_macro}, "Name last macro"]
|
57
|
-
|
58
|
-
|
31
|
+
reg_act(:easy_jump, proc { EasyJump.start }, "Easy jump")
|
32
|
+
reg_act(:savedebug, "savedebug", "Save debug info", { :group => :debug })
|
33
|
+
reg_act(:open_file_dialog, "open_file_dialog", "Open file", { :group => :file })
|
34
|
+
reg_act(:create_new_file, "create_new_file", "Create new file", { :group => :file })
|
35
|
+
reg_act(:backup_all_buffers, proc{backup_all_buffers}, "Backup all buffers", { :group => :file })
|
36
|
+
reg_act(:e_move_forward_char, "e_move_forward_char", "", { :group => :move })
|
37
|
+
reg_act(:e_move_backward_char, "e_move_backward_char", "", { :group => :move })
|
38
|
+
reg_act(:history_switch_backwards, "history_switch_backwards", "", { :group => :file })
|
39
|
+
reg_act(:history_switch_forwards, "history_switch_forwards", "", { :group => :file })
|
40
|
+
reg_act(:center_on_current_line, "center_on_current_line", "", { :group => :view })
|
41
|
+
reg_act(:run_last_macro, proc { $macro.run_last_macro }, "Run last recorded or executed macro", { :group => :macro })
|
59
42
|
reg_act(:jump_to_next_edit, "jump_to_next_edit", "")
|
60
43
|
reg_act(:jump_to_last_edit, proc { buf.jump_to_last_edit }, "")
|
61
|
-
|
62
|
-
|
63
44
|
reg_act(:jump_to_random, proc { buf.jump_to_random_pos }, "")
|
64
|
-
|
65
|
-
|
66
|
-
reg_act(:insert_new_line, proc { buf.insert_new_line()}, "")
|
67
|
-
bindkey "I enter", :insert_new_line
|
68
|
-
|
45
|
+
reg_act(:insert_new_line, proc { buf.insert_new_line() }, "")
|
69
46
|
reg_act(:show_key_bindings, proc { show_key_bindings }, "Show key bindings")
|
70
|
-
bindkey "C , ; s k", :show_key_bindings #TODO: better binding
|
71
|
-
|
72
47
|
reg_act(:put_file_path_to_clipboard, proc { buf.put_file_path_to_clipboard }, "Put file path of current file to clipboard")
|
73
|
-
bindkey "C , , c b", :put_file_path_to_clipboard #TODO: better binding or remove?
|
74
|
-
|
75
48
|
# reg_act(:encrypt_file, proc{buf.set_encrypted},"Set current file to encrypt on save")
|
76
49
|
reg_act(:encrypt_file, proc { encrypt_cur_buffer }, "Set current file to encrypt on save")
|
77
|
-
bindkey "C , , e", :encrypt_file #TODO: better binding
|
78
|
-
|
79
50
|
reg_act(:set_unencrypted, proc { buf.set_unencrypted }, "Set current file to save unencrypted")
|
80
|
-
|
81
|
-
|
82
|
-
reg_act(:close_all_buffers, proc { bufs.close_all_buffers() }, "Close all buffers")
|
83
|
-
|
51
|
+
reg_act(:close_all_buffers, proc { bufs.close_all_buffers() }, "Close all buffers")
|
84
52
|
reg_act(:close_current_buffer, proc { bufs.close_current_buffer(true) }, "Close current buffer")
|
85
|
-
bindkey "C , c b", :close_current_buffer
|
86
|
-
|
87
53
|
reg_act(:comment_selection, proc { buf.comment_selection }, "")
|
88
|
-
bindkey "V ctrl-c", :comment_selection
|
89
|
-
|
90
54
|
reg_act(:delete_char_forward, proc { buf.delete(CURRENT_CHAR_FORWARD) }, "Delete char forward")
|
91
|
-
bindkey "C x", :delete_char_forward
|
92
|
-
|
93
55
|
reg_act(:load_theme, proc { load_theme }, "Load theme")
|
94
|
-
bindkey "C , , l t", :load_theme
|
95
|
-
|
96
56
|
reg_act(:gui_file_finder, proc { vma.FileFinder.start_gui }, "Fuzzy file finder")
|
97
|
-
bindkey "C , f", :gui_file_finder
|
98
|
-
|
99
|
-
|
100
57
|
reg_act(:gui_file_history_finder, proc { vma.FileHistory.start_gui }, "Fuzzy file history finder")
|
101
|
-
bindkey "C , h", :gui_file_history_finder
|
102
|
-
|
103
|
-
|
104
58
|
reg_act(:gui_search_replace, proc { gui_search_replace }, "Search and replace")
|
105
|
-
bindkey "C , r r", :gui_search_replace
|
106
|
-
bindkey "V , r r", :gui_search_replace
|
107
|
-
|
108
59
|
reg_act(:set_style_bold, proc { buf.style_transform(:bold) }, "Set text weight to bold")
|
109
|
-
bindkey "V , t b", :set_style_bold
|
110
|
-
|
111
60
|
reg_act(:set_style_link, proc { buf.style_transform(:link) }, "Set text as link")
|
112
|
-
bindkey "V , t l", :set_style_link
|
113
|
-
|
114
61
|
reg_act(:V_join_lines, proc { vma.buf.convert_selected_text(:joinlines) }, "Join lines")
|
115
|
-
bindkey "V J", :V_join_lines
|
116
|
-
|
117
|
-
|
118
62
|
reg_act(:clear_formats, proc { buf.style_transform(:clear) }, "Clear style formats")
|
119
|
-
bindkey "V , t c", :clear_formats
|
120
|
-
|
121
63
|
reg_act(:set_line_style_heading, proc { buf.set_line_style(:heading) }, "Set style of current line as heading")
|
122
|
-
bindkey "C , t h", :set_line_style_heading
|
123
|
-
|
124
64
|
reg_act(:set_line_style_h1, proc { buf.set_line_style(:h1) }, "Set cur line as Heading 1")
|
125
|
-
bindkey "C , t 1", :set_line_style_h1
|
126
65
|
reg_act(:set_line_style_h2, proc { buf.set_line_style(:h2) }, "Set cur line as Heading 1")
|
127
|
-
bindkey "C , t 2", :set_line_style_h2
|
128
66
|
reg_act(:set_line_style_h3, proc { buf.set_line_style(:h3) }, "Set cur line as Heading 1")
|
129
|
-
bindkey "C , t 3", :set_line_style_h3
|
130
67
|
reg_act(:set_line_style_h4, proc { buf.set_line_style(:h4) }, "Set cur line as Heading 1")
|
131
|
-
bindkey "C , t 4", :set_line_style_h4
|
132
|
-
|
133
|
-
|
134
68
|
reg_act(:set_line_style_bold, proc { buf.set_line_style(:bold) }, "Set style of current line as bold")
|
135
|
-
bindkey "C , t b", :set_line_style_bold
|
136
|
-
|
137
69
|
reg_act(:set_line_style_title, proc { buf.set_line_style(:title) }, "Set style of current line as title")
|
138
|
-
bindkey "C , t t", :set_line_style_title
|
139
|
-
|
140
70
|
reg_act(:clear_line_styles, proc { buf.set_line_style(:clear) }, "Clear styles of current line")
|
141
|
-
bindkey "C , t c", :clear_line_styles
|
142
|
-
|
143
71
|
reg_act(:gui_select_buffer, proc { $kbd.set_mode("S"); gui_select_buffer }, "Select buffer")
|
144
|
-
bindkey "C , b", :gui_select_buffer
|
145
|
-
|
146
72
|
reg_act :open_file_dialog, "open_file_dialog", "Open file"
|
147
|
-
# bindkey "C , f o", :open_file_dialog
|
148
|
-
bindkey "CI ctrl-o", :open_file_dialog
|
149
|
-
|
150
73
|
reg_act :minibuffer_end, proc { minibuffer_end }
|
151
|
-
bindkey "M enter", :minibuffer_end
|
152
|
-
|
153
74
|
reg_act(:invoke_replace, "invoke_replace", "")
|
154
75
|
reg_act(:diff_buffer, "diff_buffer", "")
|
155
|
-
|
156
76
|
# reg_act(:invoke_grep_search, proc{invoke_grep_search}, "")
|
157
77
|
reg_act(:invoke_grep_search, proc { gui_grep }, "Grep current buffer")
|
158
|
-
|
159
|
-
|
160
78
|
reg_act(:ack_search, proc { gui_ack }, "") #invoke_ack_search
|
161
|
-
bindkey "C , a", :ack_search
|
162
|
-
|
163
79
|
reg_act :update_file_index, proc { update_file_index }, "Update file index"
|
164
|
-
|
165
|
-
|
166
80
|
reg_act :delete_to_word_end, proc { buf.delete2(:to_word_end) }, "Delete to file end"
|
167
|
-
bindkey "C d w", :delete_to_word_end
|
168
|
-
|
169
81
|
reg_act :delete_to_line_start, proc { buf.delete2(:to_line_start) }, "Delete to line start"
|
170
|
-
bindkey "C d 0", :delete_to_line_start
|
171
|
-
|
172
|
-
|
173
|
-
bindkey "C , , f", :file_finder
|
174
|
-
bindkey "VC h", :e_move_backward_char
|
175
|
-
|
176
|
-
bindkey "C , , .", :backup_all_buffers
|
177
|
-
|
178
|
-
|
179
|
-
bindkey "C z ", :start_browse_mode
|
180
|
-
bindkey "B h", :history_switch_backwards
|
181
|
-
bindkey "B l", :history_switch_forwards
|
182
|
-
#bindkey 'B z', :center_on_current_line
|
183
|
-
bindkey "B z", "center_on_current_line();call(:exit_browse_mode)"
|
184
|
-
|
185
82
|
reg_act :start_browse_mode, proc { $kbd.set_mode(:browse); $kbd.set_default_mode(:browse) }, "Start browse mode"
|
186
|
-
|
187
|
-
|
83
|
+
reg_act :exit_browse_mode, proc {
|
84
|
+
bufs.add_current_buf_to_history(); $kbd.set_mode(:command); $kbd.set_default_mode(:command)
|
188
85
|
}, "Exit browse mode"
|
189
|
-
#TODO: Need to deside which of these is best:
|
190
|
-
bindkey "B enter || B return || B esc || B j || B ctrl!", :exit_browse_mode
|
191
|
-
|
192
|
-
reg_act :page_down, proc {page_down}
|
193
|
-
reg_act :page_up, proc {page_up}
|
194
|
-
bindkey "B s", :page_up
|
195
|
-
bindkey "B d", :page_down
|
196
|
-
bindkey "B s", :page_up
|
197
|
-
bindkey "B d", :page_down
|
198
|
-
|
199
|
-
reg_act :jump_to_start_of_buffer, proc{buf.jump(START_OF_BUFFER)}, "Jump to start of buffer"
|
200
|
-
reg_act :jump_to_end_of_buffer, proc{buf.jump(END_OF_BUFFER)}, "Jump to end of buffer"
|
201
|
-
|
202
|
-
bindkey "B i", :jump_to_start_of_buffer
|
203
|
-
bindkey "B o", :jump_to_end_of_buffer
|
204
|
-
|
205
|
-
bindkey "B c", :close_current_buffer
|
206
|
-
bindkey "B ;", "buf.jump_to_last_edit"
|
207
|
-
bindkey "B q", :jump_to_last_edit
|
208
|
-
bindkey "B w", :jump_to_next_edit
|
209
|
-
|
210
|
-
bindkey "C , d", :diff_buffer
|
211
|
-
bindkey "C , g", :invoke_grep_search
|
212
|
-
#bindkey 'C , g', proc{invoke_grep_search}
|
213
86
|
|
87
|
+
reg_act :page_down, proc { page_down }
|
88
|
+
reg_act :page_up, proc { page_up }
|
89
|
+
reg_act :jump_to_start_of_buffer, proc { buf.jump(START_OF_BUFFER) }, "Jump to start of buffer"
|
90
|
+
reg_act :jump_to_end_of_buffer, proc { buf.jump(END_OF_BUFFER) }, "Jump to end of buffer"
|
214
91
|
reg_act(:auto_indent_buffer, proc { buf.indent }, "Auto format buffer")
|
215
|
-
bindkey "C , v", :auto_indent_buffer
|
216
|
-
bindkey "C , , d", :savedebug
|
217
|
-
bindkey "C , , u", :update_file_index
|
218
|
-
|
219
|
-
bindkey "C , s a", "buf.save_as()"
|
220
|
-
|
221
|
-
|
222
|
-
|
223
92
|
reg_act(:execute_current_line_in_terminal, proc { buf.execute_current_line_in_terminal }, "Execute current line in terminal")
|
224
|
-
|
225
93
|
reg_act(:show_images, proc { hpt_scan_images() }, "Show images inserted with ⟦img:file.png⟧ syntax")
|
226
|
-
|
227
94
|
reg_act(:delete_current_file, proc { bufs.delete_current_buffer() }, "Delete current file")
|
228
95
|
|
96
|
+
act_list = {
|
97
|
+
# File handling
|
98
|
+
:buf_save => { :proc => proc { buf.save },
|
99
|
+
:desc => "Save buffer", :group => :file },
|
229
100
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
101
|
+
:buf_save_as => { :proc => proc { buf.save_as },
|
102
|
+
:desc => "Save file as", :group => :file },
|
103
|
+
:buf_new => { :proc => proc { create_new_file() }, :desc => "Create a new file", :group => :file },
|
104
|
+
:buf_revert => { :proc => proc { buf.revert },
|
105
|
+
:desc => "Reload file from disk", :group => :file },
|
106
|
+
:buf_backup => { :proc => proc { buf.backup() }, :desc => "Backup current file", :group => :file },
|
234
107
|
|
108
|
+
:edit_redo => { :proc => proc { buf.redo },
|
109
|
+
:desc => "Redo edit", :group => :edit },
|
235
110
|
|
236
|
-
|
237
|
-
|
238
|
-
# bindkey "C , f", :start_file_selector
|
111
|
+
:edit_undo => { :proc => proc { buf.undo },
|
112
|
+
:desc => "Undo edit", :group => :edit },
|
239
113
|
|
240
|
-
|
114
|
+
:find_in_buffer => { :proc => proc { invoke_search },
|
115
|
+
:desc => "Find", :group => :edit },
|
241
116
|
|
242
|
-
# bindkey "fexp l" , [:fexp_right,proc{puts "==fexp_right=="},""]
|
243
|
-
# bindkey "fexp esc" , [:fexp_quit,proc{$kbd.set_mode(:command)},""]
|
244
|
-
# bindkey "fexp enter" , [:fexp_select,proc{buf.module.select_line},""]
|
245
117
|
|
246
|
-
#
|
118
|
+
# { :proc => proc { },
|
119
|
+
# :desc => "", :group => : },
|
247
120
|
|
248
|
-
|
249
|
-
|
121
|
+
:search_actions => { :proc => proc { search_actions },
|
122
|
+
:desc => "Search actions", :group => :search },
|
250
123
|
|
124
|
+
:quit => { :proc => proc { _quit },
|
125
|
+
:desc => "Quit", :group => :app },
|
251
126
|
|
252
|
-
|
253
|
-
default_keys = {
|
127
|
+
}
|
254
128
|
|
255
|
-
|
256
|
-
|
257
|
-
|
129
|
+
for k, v in act_list
|
130
|
+
reg_act(k, v[:proc], v[:desc])
|
131
|
+
end
|
132
|
+
|
133
|
+
act_list_todo = {
|
258
134
|
|
259
135
|
# Buffer handling
|
260
|
-
|
261
|
-
|
136
|
+
# : => {proc => proc {bufs.switch}, :desc => "", :group => :},
|
137
|
+
:buf_switch_to_last => { :proc => proc { bufs.switch_to_last_buf },
|
138
|
+
:desc => "", :group => :file },
|
262
139
|
# 'C , s'=> 'gui_select_buffer',
|
263
|
-
|
264
|
-
|
140
|
+
:buf_revert => { :proc => proc { buf.revert },
|
141
|
+
:desc => "Reload/revert file from disk", :group => :file },
|
142
|
+
:buf_close => { :proc => proc { bufs.close_current_buffer },
|
143
|
+
:desc => "Close current file", :group => :file },
|
265
144
|
#"C , b" => '$kbd.set_mode("S");gui_select_buffer',
|
266
|
-
"C , n b" => "create_new_file()",
|
267
|
-
"C , ." => "buf.backup()",
|
268
|
-
# "C , , ." => "backup_all_buffers()",
|
269
|
-
"VC , , s" => "search_actions()",
|
270
145
|
|
271
146
|
|
272
147
|
# MOVING
|
273
148
|
# 'VC h' => 'buf.move(BACKWARD_CHAR)',
|
274
|
-
|
149
|
+
:m_forward_char => { :proc => proc { buf.move(FORWARD_CHAR) },
|
150
|
+
:desc => "Move cursor one char forward",
|
151
|
+
:group => :move },
|
275
152
|
"VC j" => "buf.move(FORWARD_LINE)",
|
276
153
|
"VC k" => "buf.move(BACKWARD_LINE)",
|
277
154
|
|
@@ -291,7 +168,7 @@ default_keys = {
|
|
291
168
|
"VC F <char>" => "buf.jump_to_next_instance_of_char(<char>,BACKWARD)",
|
292
169
|
"VC f space" => "buf.jump_to_next_instance_of_char(' ')",
|
293
170
|
"VC F space" => "buf.jump_to_next_instance_of_char(' ',BACKWARD)",
|
294
|
-
|
171
|
+
|
295
172
|
"VC /[1-9]/" => "set_next_command_count(<char>)",
|
296
173
|
# 'VC number=/[0-9]/+ g'=> 'jump_to_line(<number>)',
|
297
174
|
# 'VC X=/[0-9]/+ * Y=/[0-9]/+ '=> 'x_times_y(<X>,<Y>)',
|
@@ -346,7 +223,6 @@ default_keys = {
|
|
346
223
|
"C /[1-9]/" => "set_next_command_count(<char>)",
|
347
224
|
|
348
225
|
# Command mode only:
|
349
|
-
"C ctrl-r" => "buf.redo()", # TODO:???
|
350
226
|
"C R" => "buf.redo()",
|
351
227
|
"C v" => "buf.start_visual_mode",
|
352
228
|
"C P" => "buf.paste(BEFORE)", # TODO: implement as replace for visual mode
|
@@ -405,20 +281,19 @@ default_keys = {
|
|
405
281
|
# Macros
|
406
282
|
# (experimental, may not work correctly)
|
407
283
|
# "C q a" => '$macro.start_recording("a")',
|
408
|
-
"VC q <char>" =>
|
284
|
+
"VC q <char>" => "$macro.start_recording(<char>)",
|
409
285
|
"VC q($macro.is_recording==true) " => "$macro.end_recording", # TODO
|
410
286
|
# 'C q'=> '$macro.end_recording', #TODO
|
411
287
|
"C q v" => "$macro.end_recording",
|
412
288
|
# 'C v'=> '$macro.end_recording',
|
413
289
|
# "C M" => '$macro.run_last_macro',
|
414
|
-
"C @ <char>" =>
|
290
|
+
"C @ <char>" => "$macro.run_macro(<char>)",
|
415
291
|
"C , m S" => '$macro.save_macro("a")',
|
416
|
-
"C , m s" =>
|
292
|
+
"C , m s" => "$macro.save",
|
417
293
|
"C , t r" => "run_tests()",
|
418
294
|
|
419
295
|
"C ." => "repeat_last_action", # TODO
|
420
296
|
"VC ;" => "repeat_last_find",
|
421
|
-
"CV Q" => "_quit",
|
422
297
|
"CV ctrl-q" => "_quit",
|
423
298
|
"CV , R" => "restart_application",
|
424
299
|
"I ctrl!" => "$kbd.set_mode(:command)",
|
@@ -443,6 +318,6 @@ default_keys = {
|
|
443
318
|
# "I return" => 'buf.insert_new_line()',
|
444
319
|
}
|
445
320
|
|
446
|
-
default_keys.each { |key, value|
|
447
|
-
|
448
|
-
}
|
321
|
+
# default_keys.each { |key, value|
|
322
|
+
# bindkey(key, value)
|
323
|
+
# }
|