Top Level Namespace
Defined Under Namespace
Modules: Differ, Kernel, Vimamsa
Classes: Action, Buffer, BufferList, Converter, EasyJump, Editor, Encrypt, FileFinder, FileHistory, FileManager, FileSelector, Grep, Hook, HookItem, KeyBindingTree, Macro, OneInputAction, PopupFormGenerator, Search, SelectUpdateWindow, State, VMAgui, VSourceView
Constant Summary
collapse
- GUESS_ENCODING_ORDER =
[
Encoding::US_ASCII,
Encoding::UTF_8,
Encoding::Shift_JIS,
Encoding::EUC_JP,
Encoding::EucJP_ms,
Encoding::Big5,
Encoding::UTF_16BE,
Encoding::UTF_16LE,
Encoding::UTF_32BE,
Encoding::UTF_32LE,
Encoding::CP949,
Encoding::Emacs_Mule,
Encoding::EUC_KR,
Encoding::EUC_TW,
Encoding::GB18030,
Encoding::GBK,
Encoding::Stateless_ISO_2022_JP,
Encoding::CP51932,
Encoding::EUC_CN,
Encoding::GB12345,
Encoding::Windows_31J,
Encoding::MacJapanese,
Encoding::UTF8_MAC,
Encoding::BINARY,
]
- NEXT_MARK =
1001
- PREVIOUS_MARK =
1002
- BACKWARD =
2009
- FORWARD =
2010
- BEFORE =
1005
- AFTER =
1006
- SELECTION =
1007
- FORWARD_CHAR =
2001
- BACKWARD_CHAR =
2002
- FORWARD_LINE =
2003
- BACKWARD_LINE =
2004
- CURRENT_CHAR_FORWARD =
2005
- CURRENT_CHAR_BACKWARD =
2006
- START_OF_BUFFER =
2007
- END_OF_BUFFER =
2008
- END_OF_LINE =
2011
- BEGINNING_OF_LINE =
2012
- WORD_START =
2013
- WORD_END =
2014
- FIRST_NON_WHITESPACE =
2014
- INSERT =
2
- DELETE =
3001
- REPLACE =
3002
- KEY_PRESS =
6
- KEY_RELEASE =
7
- ALTMODIFIER =
An Alt key on the keyboard is pressed.
0x08000000
- NOMODIFIER =
No modifier key is pressed.
0x00000000
- SHIFTMODIFIER =
A Shift key on the keyboard is pressed.
0x02000000
- CONTROLMODIFIER =
A Ctrl key on the keyboard is pressed.
0x04000000
- METAMODIFIER =
A Meta key on the keyboard is pressed.
0x10000000
- KEYPADMODIFIER =
A keypad button is pressed.
0x20000000
Instance Method Summary
collapse
-
#_quit ⇒ Object
-
#ack_buffer(instr, b = nil) ⇒ Object
-
#assert_binary_exists(bin) ⇒ Object
-
#backup_all_buffers ⇒ Object
-
#bindkey(key, action) ⇒ Object
-
#buf ⇒ Object
Return currently active buffer.
-
#buf_replace(search_str, replace_str) ⇒ Object
-
#buf_replace_string(instr) ⇒ Object
Requires instr in form “FROM/TO” Replaces all occurences of FROM with TO.
-
#buflist ⇒ Object
-
#bufs ⇒ Object
-
#call(id) ⇒ Object
-
#call_action(id) ⇒ Object
-
#can_save_to_directory?(dpath) ⇒ Boolean
-
#center_on_current_line ⇒ Object
-
#conf(id) ⇒ Object
-
#crash(message, e = nil) ⇒ Object
-
#create_new_file(filename = nil, file_contents = "\n") ⇒ Object
-
#debug(message) ⇒ Object
-
#debug_dump_clipboard ⇒ Object
-
#debug_dump_deltas ⇒ Object
-
#debug_print_buffer(c) ⇒ Object
-
#decrypt_cur_buffer(password, b = nil) ⇒ Object
-
#diff_buffer ⇒ Object
-
#draw_text(str, x, y) ⇒ Object
-
#e_move_backward_char ⇒ Object
-
#e_move_forward_char ⇒ Object
-
#encrypt_cur_buffer ⇒ Object
-
#encrypt_cur_buffer_callback(password, b = nil) ⇒ Object
-
#exec_action(action) ⇒ Object
-
#exec_cmd(bin_name, arg1 = nil, arg2 = nil, arg3 = nil, arg4 = nil, arg5 = nil) ⇒ Object
-
#exec_in_terminal(cmd, autoclose = false) ⇒ Object
-
#execute_command(input_str) ⇒ Object
-
#execute_search(input_str) ⇒ Object
-
#expand_if_existing(fpath) ⇒ Object
-
#fatal_error(msg) ⇒ Object
-
#file_is_text_file(fpath) ⇒ Object
-
#file_saveas(filename) ⇒ Object
-
#filter_buffer(buf) ⇒ Object
-
#filter_files(search_str) ⇒ Object
-
#filter_items(item_list, item_key, search_str) ⇒ Object
-
#find_project_dir_of_cur_buffer ⇒ Object
-
#find_project_dir_of_fn(fn) ⇒ Object
-
#focus_out ⇒ Object
Try to clear modifiers when program loses focus e.g.
-
#fuzzy_filter(search_str, list, maxfinds) ⇒ Object
-
#get_clipboard ⇒ Object
-
#get_dot_path(sfx) ⇒ Object
-
#get_file_line_pointer(s) ⇒ Object
-
#get_visible_area ⇒ Object
-
#grep_cur_buffer(search_str, b = nil) ⇒ Object
-
#gui_ack ⇒ Object
-
#gui_add_image(imgpath, pos) ⇒ Object
-
#gui_create_buffer(id) ⇒ Object
-
#gui_file_finder_handle_char(c) ⇒ Object
-
#gui_file_finder_init ⇒ Object
-
#gui_file_finder_select_callback(search_str, idx) ⇒ Object
-
#gui_file_finder_update_callback(search_str = "") ⇒ Object
-
#gui_file_history_select_callback(search_str, idx) ⇒ Object
-
#gui_file_history_update_callback(search_str = "") ⇒ Object
-
#gui_file_saveas(dirpath) ⇒ Object
-
#gui_find_macro_select_callback(search_str, idx) ⇒ Object
-
#gui_find_macro_update_callback(search_str = "") ⇒ Object
-
#gui_grep ⇒ Object
-
#gui_one_input_action(title, field_label, button_title, callback) ⇒ Object
-
#gui_open_file_dialog(dirpath) ⇒ Object
-
#gui_replace_callback(vals) ⇒ Object
def gui_replace_callback(search_str, replace_str).
-
#gui_search_replace ⇒ Object
Search and replace text via GUI interface.
-
#gui_select_update_window(item_list, jump_keys, select_callback, update_callback, opt = {}) ⇒ Object
-
#gui_select_window_close(arg = nil) ⇒ Object
-
#gui_set_buffer_contents(id, txt) ⇒ Object
def set_window_title(str) unimplemented end.
-
#gui_set_current_buffer(id) ⇒ Object
-
#gui_set_cursor_pos(id, pos) ⇒ Object
-
#gui_set_file_lang(id, lname) ⇒ Object
-
#gui_set_window_title(wtitle, subtitle = "") ⇒ Object
-
#gui_sleep(t2) ⇒ Object
-
#handle_drag_and_drop(fname) ⇒ Object
-
#handle_key_event(event) ⇒ Object
-
#history_switch_backwards ⇒ Object
-
#history_switch_forwards ⇒ Object
-
#hook_draw ⇒ Object
-
#hpt_check_cur_word(w) ⇒ Object
-
#hpt_open_link ⇒ Object
-
#hpt_scan_images ⇒ Object
-
#idle_func ⇒ Object
-
#invoke_command ⇒ Object
-
#invoke_grep_search ⇒ Object
-
#invoke_replace ⇒ Object
-
#invoke_search ⇒ Object
-
#is_command_mode ⇒ Object
-
#is_existing_file(s) ⇒ Object
-
#is_image_file(fpath) ⇒ Object
-
#is_path(s) ⇒ Object
-
#is_path_writable(fpath) ⇒ Object
-
#is_text_file(fpath) ⇒ Object
-
#is_url(s) ⇒ Object
-
#is_visual_mode ⇒ Object
-
#jump_to_file(filename, linenum = 0) ⇒ Object
-
#jump_to_next_edit ⇒ Object
-
#load_buffer(fname) ⇒ Object
-
#load_buffer_list ⇒ Object
-
#log_error(message) ⇒ Object
-
#log_message(message) ⇒ Object
-
#message(s) ⇒ Object
-
#minibuffer_cancel ⇒ Object
-
#minibuffer_delete ⇒ Object
def readchar_new_char© $input_char_call_func.call© end.
-
#minibuffer_end ⇒ Object
-
#minibuffer_new_char(c) ⇒ Object
-
#missing_callfunc ⇒ Object
-
#mkdir_if_not_exists(_dirpath) ⇒ Object
-
#open_existing_file(filename) ⇒ Object
-
#open_file_dialog ⇒ Object
-
#open_new_file(filename, file_contents = "") ⇒ Object
-
#open_url(url) ⇒ Object
-
#open_with_default_program(url) ⇒ Object
-
#page_down ⇒ Object
-
#page_up ⇒ Object
-
#paste_register(char) ⇒ Object
-
#paste_system_clipboard ⇒ Object
-
#ppath(s) ⇒ Object
-
#read_file(text, path) ⇒ Object
-
#recursively_find_files ⇒ Object
-
#reg_act(id, callfunc, name = "", opt = {}) ⇒ Object
-
#render_buffer(buffer = 0, reset = 0) ⇒ Object
-
#repeat_last_action ⇒ Object
-
#repeat_last_find ⇒ Object
-
#run_cmd(cmd) ⇒ Object
-
#run_random_jump_test__tmpl(test_time = 60 * 60 * 10) ⇒ Object
-
#run_test(test_id) ⇒ Object
-
#run_tests ⇒ Object
-
#save_buffer_list ⇒ Object
-
#savedebug(message, e) ⇒ Object
-
#scan_indexes(txt, regex) ⇒ Object
-
#scan_word_start_marks(search_str) ⇒ Object
-
#search_actions ⇒ Object
-
#search_actions_select_callback(search_str, idx) ⇒ Object
-
#search_actions_update_callback(search_str = "") ⇒ Object
-
#set_clipboard(s) ⇒ Object
-
#set_conf(id, val) ⇒ Object
-
#set_cursor_pos(new_pos) ⇒ Object
-
#set_last_command(cmd) ⇒ Object
-
#set_next_command_count(num) ⇒ Object
-
#set_register(char) ⇒ Object
-
#set_system_clipboard(arg) ⇒ Object
-
#setcnf(id, val) ⇒ Object
-
#show_key_bindings ⇒ Object
-
#start_minibuffer_cmd(bufname, bufstr, cmd) ⇒ Object
-
#start_ripl ⇒ Object
-
#system_clipboard_changed(clipboard_contents) ⇒ Object
-
#unimplemented ⇒ Object
-
#update_file_index ⇒ Object
-
#vma ⇒ Object
-
#which(cmd) ⇒ Object
-
#write_to_file(savepath, s) ⇒ Object
Instance Method Details
#_quit ⇒ Object
272
273
274
275
|
# File 'lib/vimamsa/editor.rb', line 272
def _quit()
vma.shutdown
Gtk.main_quit
end
|
#ack_buffer(instr, b = nil) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/vimamsa/ack.rb', line 19
def ack_buffer(instr, b = nil)
instr = instr.gsub("'", ".") bufstr = ""
for path in $vma.get_content_search_paths
bufstr += run_cmd("ack -Q --type-add=gd=.gd -k --nohtml --nojs --nojson '#{instr}' #{path}")
end
if bufstr.size > 5
create_new_file(nil, bufstr)
else
message("No results for input:#{instr}")
end
end
|
#assert_binary_exists(bin) ⇒ Object
17
18
19
20
21
|
# File 'lib/vimamsa/util.rb', line 17
def assert_binary_exists(bin)
if which(bin).nil?
raise "Binary #{bin} doesn't exist"
end
end
|
#backup_all_buffers ⇒ Object
1782
1783
1784
1785
1786
1787
|
# File 'lib/vimamsa/buffer.rb', line 1782
def backup_all_buffers()
for buf in $buffers
buf.backup
end
message("Backup all buffers")
end
|
#bindkey(key, action) ⇒ Object
588
589
590
|
# File 'lib/vimamsa/key_binding_tree.rb', line 588
def bindkey(key, action)
$kbd.bindkey(key, action)
end
|
#buf ⇒ Object
Return currently active buffer
39
40
41
|
# File 'lib/vimamsa/main.rb', line 39
def buf()
return $buffer
end
|
#buf_replace(search_str, replace_str) ⇒ Object
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
# File 'lib/vimamsa/search_replace.rb', line 139
def buf_replace(search_str, replace_str)
if $buffer.visual_mode?
r = $buffer.get_visual_mode_range
txt = $buffer[r]
txt.gsub!(search_str, replace_str)
$buffer.replace_range(r, txt)
$buffer.end_visual_mode
else
repbuf = $buffer.to_s.clone
repbuf.gsub!(search_str, replace_str)
tmppos = $buffer.pos
if repbuf == $buffer.to_s.clone
message("NO CHANGE. Replacing #{search_str} with #{replace_str}.")
else
$buffer.set_content(repbuf)
$buffer.set_pos(tmppos)
message("Replacing #{search_str} with #{replace_str}.")
end
end
end
|
#buf_replace_string(instr) ⇒ Object
Requires instr in form “FROM/TO” Replaces all occurences of FROM with TO
162
163
164
165
166
167
168
169
170
|
# File 'lib/vimamsa/search_replace.rb', line 162
def buf_replace_string(instr)
a = instr.split("/")
if a.size != 2
return
end
buf_replace(a[0], a[1])
end
|
#buflist ⇒ Object
47
48
49
|
# File 'lib/vimamsa/main.rb', line 47
def buflist()
return $buffers
end
|
#bufs ⇒ Object
43
44
45
|
# File 'lib/vimamsa/main.rb', line 43
def bufs()
return $buffers
end
|
#call(id) ⇒ Object
35
36
37
|
# File 'lib/vimamsa/actions.rb', line 35
def call(id)
call_action(id)
end
|
#call_action(id) ⇒ Object
39
40
41
42
43
44
45
46
|
# File 'lib/vimamsa/actions.rb', line 39
def call_action(id)
a = $actions[id]
if a
a.method.call()
else
message("Unknown action: " + id.inspect)
end
end
|
#can_save_to_directory?(dpath) ⇒ Boolean
332
333
334
335
336
337
|
# File 'lib/vimamsa/editor.rb', line 332
def can_save_to_directory?(dpath)
return false if !File.exist?(dpath)
return false if !File.directory?(dpath)
return false if !File.writable?(dpath)
return true
end
|
#center_on_current_line ⇒ Object
64
65
66
67
68
69
70
71
72
|
# File 'lib/vimamsa/gui.rb', line 64
def center_on_current_line()
b = $view.buffer
iter = b.get_iter_at(:offset => b.cursor_position)
within_margin = 0.0 use_align = true
xalign = 0.0 yalign = 0.5
$view.scroll_to_iter(iter, within_margin, use_align, xalign, yalign)
end
|
#conf(id) ⇒ Object
23
24
25
|
# File 'lib/vimamsa/key_binding_tree.rb', line 23
def conf(id)
return $cnf[id]
end
|
#crash(message, e = nil) ⇒ Object
38
39
40
41
42
43
|
# File 'lib/vimamsa/debug.rb', line 38
def crash(message, e = nil)
puts "FATAL ERROR:#{message}"
puts caller().join("\n")
_quit()
end
|
#create_new_file(filename = nil, file_contents = "\n") ⇒ Object
472
473
474
475
476
477
478
|
# File 'lib/vimamsa/editor.rb', line 472
def create_new_file(filename = nil, file_contents = "\n")
debug "NEW FILE CREATED"
buffer = Buffer.new(file_contents)
$buffers << buffer
return buffer
end
|
#debug(message) ⇒ Object
3
4
5
6
7
8
|
# File 'lib/vimamsa/debug.rb', line 3
def debug(message)
if $debug
puts "[#{DateTime.now().strftime("%H:%M:%S")}] #{message}"
$stdout.flush
end
end
|
#debug_dump_clipboard ⇒ Object
15
16
17
|
# File 'lib/vimamsa/debug.rb', line 15
def debug_dump_clipboard()
puts $clipboard.inspect
end
|
#debug_dump_deltas ⇒ Object
19
20
21
|
# File 'lib/vimamsa/debug.rb', line 19
def debug_dump_deltas()
puts buf.edit_history.inspect
end
|
#debug_print_buffer(c) ⇒ Object
10
11
12
13
|
# File 'lib/vimamsa/debug.rb', line 10
def debug_print_buffer(c)
puts buf.inspect
puts buf
end
|
#decrypt_cur_buffer(password, b = nil) ⇒ Object
35
36
37
|
# File 'lib/vimamsa/encrypt.rb', line 35
def decrypt_cur_buffer(password, b = nil)
$buffer.decrypt(password)
end
|
#diff_buffer ⇒ Object
373
374
375
376
377
378
379
380
381
382
383
384
385
386
|
# File 'lib/vimamsa/editor.rb', line 373
def diff_buffer()
bufstr = ""
orig_path = $buffer.fname
infile = Tempfile.new("out")
infile = Tempfile.new("in")
infile.write($buffer.to_s)
infile.flush
cmd = "diff -w '#{orig_path}' #{infile.path}"
bufstr << run_cmd(cmd)
infile.close; infile.unlink
create_new_file(nil, bufstr)
end
|
#draw_text(str, x, y) ⇒ Object
544
545
546
|
# File 'lib/vimamsa/editor.rb', line 544
def draw_text(str, x, y)
vma.paint_stack << [4, x, y, str]
end
|
#e_move_backward_char ⇒ Object
5
6
7
|
# File 'lib/vimamsa/key_actions.rb', line 5
def e_move_backward_char
buf.move(BACKWARD_CHAR)
end
|
#e_move_forward_char ⇒ Object
1
2
3
|
# File 'lib/vimamsa/key_actions.rb', line 1
def e_move_forward_char
buf.move(FORWARD_CHAR)
end
|
#encrypt_cur_buffer ⇒ Object
39
40
41
42
|
# File 'lib/vimamsa/encrypt.rb', line 39
def encrypt_cur_buffer()
callback = proc{|x|encrypt_cur_buffer_callback(x)}
gui_one_input_action("Encrypt", "Password:", "Encrypt", callback)
end
|
#encrypt_cur_buffer_callback(password, b = nil) ⇒ Object
44
45
46
|
# File 'lib/vimamsa/encrypt.rb', line 44
def encrypt_cur_buffer_callback(password,b=nil)
$buffer.set_encrypted(password)
end
|
#exec_action(action) ⇒ Object
594
595
596
597
598
599
600
601
602
603
604
|
# File 'lib/vimamsa/key_binding_tree.rb', line 594
def exec_action(action)
$kbd.last_action = $kbd.cur_action
$kbd.cur_action = action
if action.class == Symbol
return call(action)
elsif action.class == Proc
return action.call
else
return eval(action)
end
end
|
#exec_cmd(bin_name, arg1 = nil, arg2 = nil, arg3 = nil, arg4 = nil, arg5 = nil) ⇒ Object
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
|
# File 'lib/vimamsa/editor.rb', line 615
def exec_cmd(bin_name, arg1 = nil, arg2 = nil, arg3 = nil, arg4 = nil, arg5 = nil)
assert_binary_exists(bin_name)
if !arg5.nil?
p = Open3.popen2(bin_name, arg1, arg2, arg3, arg4, arg5)
elsif !arg4.nil?
p = Open3.popen2(bin_name, arg1, arg2, arg3, arg4)
elsif !arg3.nil?
p = Open3.popen2(bin_name, arg1, arg2, arg3)
elsif !arg2.nil?
p = Open3.popen2(bin_name, arg1, arg2)
elsif !arg1.nil?
p = Open3.popen2(bin_name, arg1)
else
p = Open3.popen2(bin_name)
end
ret_str = p[1].read
return ret_str
end
|
#exec_in_terminal(cmd, autoclose = false) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/vimamsa/editor.rb', line 3
def exec_in_terminal(cmd, autoclose = false)
$initf = Tempfile.new("bashinit")
$initf.write(cmd)
if autoclose
$initf.write("\nsleep 10; exit;\n")
$initf.write("rm #{$initf.path}\n")
else
$initf.write("rm #{$initf.path}\n")
$initf.write("\nexec bash\n")
end
$initf.close
fork { exec "gnome-terminal", "--tab", "--", "bash", "-i", $initf.path, "-c", "exec bash" }
end
|
#execute_command(input_str) ⇒ Object
392
393
394
395
396
397
398
399
400
|
# File 'lib/vimamsa/editor.rb', line 392
def execute_command(input_str)
begin
out_str = eval(input_str, TOPLEVEL_BINDING) $minibuffer.clear
$minibuffer << out_str.to_s rescue SyntaxError
debug("SYNTAX ERROR with eval cmd #{action}: " + $!.to_s)
end
end
|
#execute_search(input_str) ⇒ Object
2
3
4
5
6
7
|
# File 'lib/vimamsa/search.rb', line 2
def execute_search(input_str)
$search = Search.new
eval_str="execute_search(#{input_str.dump})"
$macro.overwrite_current_action(eval_str)
return $search.set(input_str, "simple", $buffer)
end
|
#expand_if_existing(fpath) ⇒ Object
58
59
60
61
62
63
|
# File 'lib/vimamsa/util.rb', line 58
def expand_if_existing(fpath)
return nil if fpath.class != String
fpath = File.expand_path(fpath)
fpath = nil if !File.exist?(fpath)
return fpath
end
|
#fatal_error(msg) ⇒ Object
277
278
279
280
|
# File 'lib/vimamsa/editor.rb', line 277
def fatal_error(msg)
puts msg
exit!
end
|
#file_is_text_file(fpath) ⇒ Object
635
636
637
638
639
640
641
642
643
644
|
# File 'lib/vimamsa/editor.rb', line 635
def file_is_text_file(fpath)
puts "file_is_text_file(#{fpath})"
fpath = File.expand_path(fpath)
return false if !File.exist?(fpath)
r = exec_cmd("file", fpath)
puts "DEBUG:#{r}"
return true if r.match(/UTF-8.*text/)
return true if r.match(/ASCII.*text/)
return false
end
|
#file_saveas(filename) ⇒ Object
282
283
284
|
# File 'lib/vimamsa/editor.rb', line 282
def file_saveas(filename)
buf.save_as_callback(filename)
end
|
#filter_buffer(buf) ⇒ Object
480
481
482
483
484
485
486
487
488
489
490
|
# File 'lib/vimamsa/editor.rb', line 480
def filter_buffer(buf)
i = 0
while i < buf.size
if buf[i].ord == 160
buf[i] = " "
end
i += 1
end
return buf
end
|
#filter_files(search_str) ⇒ Object
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/vimamsa/file_finder.rb', line 54
def filter_files(search_str)
dir_hash = {}
scores = Parallel.map($dir_list, in_threads: 8) do |file|
[file, srn_dst(search_str, file)]
end
for s in scores
dir_hash[s[0]] = s[1] if s[1] > 0
end
dir_hash = dir_hash.sort_by { |k, v| -v }
dir_hash = dir_hash[0..20]
dir_hash.map do |file, d|
puts "D:#{d} #{file}"
end
return dir_hash
end
|
#filter_items(item_list, item_key, search_str) ⇒ Object
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/vimamsa/actions.rb', line 102
def filter_items(item_list, item_key, search_str)
item_hash = {}
scores = Parallel.map(item_list, in_threads: 8) do |item|
[item, srn_dst(search_str, item[:str])]
end
scores.sort_by! { |x| -x[1] }
puts scores.inspect
scores = scores[0..30]
return scores
end
|
#find_project_dir_of_cur_buffer ⇒ Object
670
671
672
673
674
675
676
677
678
|
# File 'lib/vimamsa/editor.rb', line 670
def find_project_dir_of_cur_buffer()
pdir = nil
if $buffer.fname
pdir = find_project_dir_of_fn($buffer.fname)
end
return pdir
end
|
#find_project_dir_of_fn(fn) ⇒ Object
656
657
658
659
660
661
662
663
664
665
666
667
668
|
# File 'lib/vimamsa/editor.rb', line 656
def find_project_dir_of_fn(fn)
pcomp = Pathname.new(fn).each_filename.to_a
parent_dirs = (0..(pcomp.size - 2)).collect { |x| "/" + pcomp[0..x].join("/") }.reverse
projdir = nil
for pdir in parent_dirs
candfn = "#{pdir}/.vma_project"
if File.exist?(candfn)
projdir = pdir
break
end
end
return projdir
end
|
#focus_out ⇒ Object
Try to clear modifiers when program loses focus e.g. after alt-tab
608
609
610
611
|
# File 'lib/vimamsa/key_binding_tree.rb', line 608
def focus_out
debug "RB Clear modifiers"
$kbd.clear_modifiers()
end
|
#fuzzy_filter(search_str, list, maxfinds) ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/vimamsa/file_history.rb', line 69
def fuzzy_filter(search_str, list, maxfinds)
h = {}
scores = Parallel.map(list, in_threads: 8) do |l|
[l, srn_dst(search_str, l)]
end
for s in scores
h[s[0]] = s[1] if s[1] > 0
end
h = h.sort_by { |k, v| -v }
h = h[0..maxfinds]
return h
end
|
#get_clipboard ⇒ Object
303
304
305
|
# File 'lib/vimamsa/editor.rb', line 303
def get_clipboard()
return $clipboard[-1]
end
|
#get_dot_path(sfx) ⇒ Object
577
578
579
580
581
582
|
# File 'lib/vimamsa/editor.rb', line 577
def get_dot_path(sfx)
dot_dir = File.expand_path("~/.vimamsa")
Dir.mkdir(dot_dir) unless File.exist?(dot_dir)
dpath = "#{dot_dir}/#{sfx}"
return dpath
end
|
#get_file_line_pointer(s) ⇒ Object
584
585
586
587
588
589
590
591
592
593
594
|
# File 'lib/vimamsa/editor.rb', line 584
def get_file_line_pointer(s)
m = s.match(/((~[a-z]*)?\/.*\/\S+):(\d+)/)
if m != nil
if File.exist?(File.expand_path(m[1]))
return [m[1], m[3].to_i]
end
end
return nil
end
|
#get_visible_area ⇒ Object
74
75
76
77
78
79
80
|
# File 'lib/vimamsa/gui.rb', line 74
def get_visible_area()
view = $view
vr = view.visible_rect
startpos = view.get_iter_at_position_raw(vr.x, vr.y)[1].offset
endpos = view.get_iter_at_position_raw(vr.x + vr.width, vr.y + vr.height)[1].offset
return [startpos, endpos]
end
|
#grep_cur_buffer(search_str, b = nil) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/vimamsa/search_replace.rb', line 72
def grep_cur_buffer(search_str, b = nil)
debug "grep_cur_buffer(search_str)"
lines = $buffer.split("\n")
r = Regexp.new(Regexp.escape(search_str), Regexp::IGNORECASE)
fpath = ""
fpath = $buffer.pathname.expand_path.to_s + ":" if $buffer.pathname
res_str = ""
$grep_matches = []
lines.each_with_index { |l, i|
if r.match(l)
res_str << "#{i + 1}:#{l}\n"
$grep_matches << i + 1 end
}
$grep_bufid = $buffers.current_buf
b = create_new_file(nil, res_str)
b.line_action_handler = proc { |lineno|
puts "GREP HANDLER:#{lineno}"
jumpto = $grep_matches[lineno]
if jumpto.class == Integer
$buffers.set_current_buffer($grep_bufid, update_history = true)
buf.jump_to_line(jumpto)
end
}
end
|
#gui_ack ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# File 'lib/vimamsa/ack.rb', line 3
def gui_ack()
nfo = "<html><h2>Search contents of all files using ack</h2>
<div style='width:300px'>
<p>Hint: add empty file named .vma_project to dirs you want to search.</p>\n<p>If .vma_project exists in parent dir of current file, searches within that dir</p></div></html>"
nfo = "<span size='x-large'>Search contents of all files using ack</span>
<span>Hint: add empty file named .vma_project to directories you want to search in.
If .vma_project exists in parent directory of current file, searches within that directory.
</span>"
callback = proc{|x| ack_buffer(x)}
gui_one_input_action(nfo, "Search:", "search", callback)
end
|
#gui_add_image(imgpath, pos) ⇒ Object
173
174
|
# File 'lib/vimamsa/gui.rb', line 173
def gui_add_image(imgpath, pos)
end
|
#gui_create_buffer(id) ⇒ Object
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/vimamsa/gui.rb', line 134
def gui_create_buffer(id)
puts "gui_create_buffer(#{id})"
buf1 = GtkSource::Buffer.new()
view = VSourceView.new()
view.set_highlight_current_line(true)
view.set_show_line_numbers(true)
view.set_buffer(buf1)
ssm = GtkSource::StyleSchemeManager.new
ssm.set_search_path(ssm.search_path << ppath("styles/"))
sty = ssm.get_scheme("molokai_edit")
view.buffer.highlight_matching_brackets = true
view.buffer.style_scheme = sty
provider = Gtk::CssProvider.new
provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
view.style_context.add_provider(provider)
view.wrap_mode = :char
view.set_tab_width(4)
$vmag.buffers[id] = view
end
|
#gui_file_finder_handle_char(c) ⇒ Object
90
91
92
93
94
95
96
|
# File 'lib/vimamsa/file_finder.rb', line 90
def gui_file_finder_handle_char(c)
puts "BUFFER SELECTOR INPUT CHAR: #{c}"
buffer_i = $select_keys.index(c)
if buffer_i != nil
gui_file_finder_callback(buffer_i)
end
end
|
#gui_file_finder_init ⇒ Object
99
100
101
102
103
|
# File 'lib/vimamsa/file_finder.rb', line 99
def gui_file_finder_init()
$kbd.add_mode("Z", :filefinder)
bindkey "Z enter", "$kbd.set_mode(:command)"
bindkey "Z return", "$kbd.set_mode(:command)"
end
|
#gui_file_finder_select_callback(search_str, idx) ⇒ Object
83
84
85
86
87
88
|
# File 'lib/vimamsa/file_finder.rb', line 83
def gui_file_finder_select_callback(search_str, idx)
selected_file = $file_search_list[idx][0]
debug "FILE FINDER SELECT CALLBACK: s=#{search_str},i=#{idx}: #{selected_file}"
gui_select_window_close(0)
open_new_file(selected_file)
end
|
#gui_file_finder_update_callback(search_str = "") ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/vimamsa/file_finder.rb', line 71
def gui_file_finder_update_callback(search_str = "")
puts "FILE FINDER UPDATE CALLBACK: #{search_str}"
if (search_str.size > 1)
files = filter_files(search_str)
$file_search_list = files
return files
end
return []
end
|
#gui_file_history_select_callback(search_str, idx) ⇒ Object
100
101
102
103
104
105
106
107
|
# File 'lib/vimamsa/file_history.rb', line 100
def gui_file_history_select_callback(search_str, idx)
selected_file = $search_list[idx][0]
debug "FILE HISTORY SELECT CALLBACK: s=#{search_str},i=#{idx}: #{selected_file}"
gui_select_window_close(0)
open_new_file(selected_file)
end
|
#gui_file_history_update_callback(search_str = "") ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/vimamsa/file_history.rb', line 85
def gui_file_history_update_callback(search_str = "")
puts "gui_file_history_update_callback: #{search_str}"
return [] if $vma.fh.history.empty?
$search_list = []
files = $vma.fh.history.keys.sort.collect { |x| [x, 0] }
if (search_str.size > 1)
files = fuzzy_filter(search_str, $vma.fh.history.keys, 40)
end
$search_list = files
ret = files.collect{|x|[x[0]]}
return ret
end
|
#gui_file_saveas(dirpath) ⇒ Object
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/vimamsa/gui.rb', line 20
def gui_file_saveas(dirpath)
dialog = Gtk::FileChooserDialog.new(:title => "Save as",
:action => :save,
:buttons => [[Gtk::Stock::SAVE, :accept],
[Gtk::Stock::CANCEL, :cancel]])
dialog.set_current_folder(dirpath)
dialog.signal_connect("response") do |dialog, response_id|
if response_id == Gtk::ResponseType::ACCEPT
file_saveas(dialog.filename)
end
dialog.destroy
end
dialog.run
end
|
#gui_find_macro_select_callback(search_str, idx) ⇒ Object
16
17
18
19
20
21
22
23
24
|
# File 'lib/vimamsa/macro.rb', line 16
def gui_find_macro_select_callback(search_str, idx)
puts "gui_find_macro_select_callback"
selected = $macro_search_list[idx]
m = $macro.named_macros[selected[0]].clone
puts "SELECTED MACRO:#{selected}, #{m}"
id = $macro.last_macro
$macro.recorded_macros[id] = m
$macro.run_macro(id)
end
|
#gui_find_macro_update_callback(search_str = "") ⇒ Object
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# File 'lib/vimamsa/macro.rb', line 2
def gui_find_macro_update_callback(search_str = "")
puts "gui_find_macro_update_callback: #{search_str}"
heystack = $macro.named_macros
return [] if heystack.empty?
$macro_search_list = []
files = heystack.keys.sort.collect { |x| [x, 0] }
if (search_str.size > 1)
files = fuzzy_filter(search_str, heystack.keys, 40)
end
$macro_search_list = files
return files
end
|
#gui_grep ⇒ Object
66
67
68
69
70
|
# File 'lib/vimamsa/search_replace.rb', line 66
def gui_grep()
callback = proc { |x| grep_cur_buffer(x) }
gui_one_input_action("Grep", "Search:", "grep", callback)
end
|
107
108
109
110
111
|
# File 'lib/vimamsa/search_replace.rb', line 107
def gui_one_input_action(title, field_label, button_title, callback)
a = OneInputAction.new(nil, title, field_label, button_title, callback)
a.run
return
end
|
#gui_open_file_dialog(dirpath) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# File 'lib/vimamsa/gui.rb', line 3
def gui_open_file_dialog(dirpath)
dialog = Gtk::FileChooserDialog.new(:title => "Open file",
:action => :open,
:buttons => [[Gtk::Stock::OPEN, :accept],
[Gtk::Stock::CANCEL, :cancel]])
dialog.set_current_folder(dirpath)
dialog.signal_connect("response") do |dialog, response_id|
if response_id == Gtk::ResponseType::ACCEPT
open_new_file(dialog.filename)
end
dialog.destroy
end
dialog.run
end
|
#gui_replace_callback(vals) ⇒ Object
def gui_replace_callback(search_str, replace_str)
114
115
116
117
118
119
120
|
# File 'lib/vimamsa/search_replace.rb', line 114
def gui_replace_callback(vals)
search_str = vals["search"]
replace_str = vals["replace"]
puts "gui_replace_callback: #{search_str} => #{replace_str}"
gui_select_window_close(0)
buf_replace(search_str, replace_str)
end
|
#gui_search_replace ⇒ Object
Search and replace text via GUI interface
123
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/vimamsa/search_replace.rb', line 123
def gui_search_replace()
params = {}
params["inputs"] = {}
params["inputs"]["search"] = { :label => "Search", :type => :entry }
params["inputs"]["replace"] = { :label => "Replace", :type => :entry }
params["inputs"]["btn1"] = { :label => "Replace all", :type => :button }
callback = proc { |x| gui_replace_callback(x) }
params[:callback] = callback
PopupFormGenerator.new(params).run
end
|
#gui_select_update_window(item_list, jump_keys, select_callback, update_callback, opt = {}) ⇒ Object
1
2
3
4
|
# File 'lib/vimamsa/gui_select_window.rb', line 1
def gui_select_update_window(item_list, jump_keys, select_callback, update_callback, opt={})
$selup = SelectUpdateWindow.new(nil, item_list, jump_keys, select_callback, update_callback, opt)
$selup.run
end
|
#gui_select_window_close(arg = nil) ⇒ Object
177
178
|
# File 'lib/vimamsa/gui.rb', line 177
def gui_select_window_close(arg = nil)
end
|
#gui_set_buffer_contents(id, txt) ⇒ Object
def set_window_title(str) unimplemented end
184
185
186
187
188
189
|
# File 'lib/vimamsa/gui.rb', line 184
def gui_set_buffer_contents(id, txt)
puts "gui_set_buffer_contents(#{id}, txt)"
$vmag.buffers[id].buffer.set_text(txt)
end
|
#gui_set_current_buffer(id) ⇒ Object
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
# File 'lib/vimamsa/gui.rb', line 196
def gui_set_current_buffer(id)
view = $vmag.buffers[id]
puts "gui_set_current_buffer(#{id}), view=#{view}"
buf1 = view.buffer
$vmag.view = view
$vmag.buf1 = buf1
$view = view
$vbuf = buf1
$vmag.sw.remove($vmag.sw.child) if !$vmag.sw.child.nil?
$vmag.sw.add(view)
view.grab_focus
view.set_cursor_visible(true)
view.place_cursor_onscreen
$vmag.sw.show_all
end
|
#gui_set_cursor_pos(id, pos) ⇒ Object
191
192
193
194
|
# File 'lib/vimamsa/gui.rb', line 191
def gui_set_cursor_pos(id, pos)
$view.set_cursor_pos(pos)
end
|
#gui_set_file_lang(id, lname) ⇒ Object
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/vimamsa/gui.rb', line 162
def gui_set_file_lang(id, lname)
view = $vmag.buffers[id]
lm = GtkSource::LanguageManager.new
lang = nil
lm.set_search_path(lm.search_path << ppath("lang/"))
lang = lm.get_language(lname)
view.buffer.language = lang
view.buffer.highlight_syntax = true
end
|
#gui_set_window_title(wtitle, subtitle = "") ⇒ Object
223
224
225
226
|
# File 'lib/vimamsa/gui.rb', line 223
def gui_set_window_title(wtitle, subtitle = "")
$vmag.window.title = wtitle
$vmag.window.titlebar.subtitle = subtitle
end
|
#gui_sleep(t2) ⇒ Object
99
100
101
102
103
104
|
# File 'lib/vimamsa/debug.rb', line 99
def gui_sleep(t2)
t1 = Time.now()
while Time.now < t1 + t2
sleep(0.02)
end
end
|
#handle_drag_and_drop(fname) ⇒ Object
24
25
26
27
|
# File 'lib/vimamsa/editor.rb', line 24
def handle_drag_and_drop(fname)
debug "EDITOR:handle_drag_and_drop"
buf.handle_drag_and_drop(fname)
end
|
#handle_key_event(event) ⇒ Object
613
614
615
|
# File 'lib/vimamsa/key_binding_tree.rb', line 613
def handle_key_event(event)
$kbd.handle_key_event(event)
end
|
#history_switch_backwards ⇒ Object
9
10
11
|
# File 'lib/vimamsa/key_actions.rb', line 9
def history_switch_backwards
bufs.history_switch_backwards
end
|
#history_switch_forwards ⇒ Object
13
14
15
|
# File 'lib/vimamsa/key_actions.rb', line 13
def history_switch_forwards
bufs.history_switch_forwards
end
|
#hook_draw ⇒ Object
548
549
550
551
|
# File 'lib/vimamsa/editor.rb', line 548
def hook_draw()
end
|
#hpt_check_cur_word(w) ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/vimamsa/hyper_plain_text.rb', line 6
def hpt_check_cur_word(w)
puts "check_cur_word(w)"
m = w.match(/⟦(.*)⟧/)
if m
fpfx = m[1]
if $buffer.fname
dn = File.dirname($buffer.fname)
fcands = []
fcands << "#{dn}/#{fpfx}"
fcands << "#{dn}/#{fpfx}.txt"
fcands << File.expand_path("#{fpfx}")
fcands << File.expand_path("#{fpfx}.txt")
fn = nil
for fc in fcands
if File.exists?(fc)
fn = fc
break
end
end
if fn
message "HPT opening file #{fn}"
return fn
else
message "File not found: #{fpfx}"
end
end
end
return nil
end
|
#hpt_open_link ⇒ Object
3
4
|
# File 'lib/vimamsa/hyper_plain_text.rb', line 3
def hpt_open_link()
end
|
#hpt_scan_images ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/vimamsa/hyper_plain_text.rb', line 41
def hpt_scan_images()
return if !buf.fname
return if !buf.fname.match(/.*txt$/)
imgpos = scan_indexes(buf, /⟦img:.+?⟧/)
imgtags = buf.scan(/(⟦img:(.+?)⟧)/)
c = 0
imgpos.each.with_index { |x, i|
a = imgpos[i]
t = imgtags[i]
insert_pos = a + t[0].size + c
imgfn = File.expand_path(t[1])
next if !File.exist?(imgfn)
if buf[insert_pos..(insert_pos + 2)] != "\n \n"
buf.insert_txt_at("\n \n", insert_pos)
c += 3
end
buf.add_image(imgfn, insert_pos + 1)
}
end
|
#idle_func ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/vimamsa/gui.rb', line 36
def idle_func
if $idle_scroll_to_mark
vr = $view.visible_rect
b = $view.buffer
iter = b.get_iter_at(:offset => b.cursor_position)
iterxy = $view.get_iter_location(iter)
intr = iterxy.intersect(vr)
if intr.nil?
$view.set_cursor_pos($view.buffer.cursor_position)
else
$idle_scroll_to_mark = false
end
sleep(0.1)
end
sleep(0.01)
return true
end
|
#invoke_command ⇒ Object
388
389
390
|
# File 'lib/vimamsa/editor.rb', line 388
def invoke_command()
start_minibuffer_cmd("", "", :execute_command)
end
|
#invoke_grep_search ⇒ Object
103
104
105
|
# File 'lib/vimamsa/search_replace.rb', line 103
def invoke_grep_search()
start_minibuffer_cmd("", "", :grep_cur_buffer)
end
|
#invoke_replace ⇒ Object
135
136
137
|
# File 'lib/vimamsa/search_replace.rb', line 135
def invoke_replace()
start_minibuffer_cmd("", "", :buf_replace_string)
end
|
#invoke_search ⇒ Object
9
10
11
12
13
14
|
# File 'lib/vimamsa/search.rb', line 9
def invoke_search()
nfo = ""
callback = proc{|x| execute_search(x)}
gui_one_input_action(nfo, "Search:", "search", callback)
end
|
#is_command_mode ⇒ Object
21
22
23
24
|
# File 'lib/vimamsa/key_actions.rb', line 21
def is_command_mode()
return true if $kbd.mode_root_state.to_s() == "C"
return false
end
|
#is_existing_file(s) ⇒ Object
73
74
75
76
77
78
79
|
# File 'lib/vimamsa/util.rb', line 73
def is_existing_file(s)
return false if !s
if is_path(s) and File.exist?(File.expand_path(s))
return true
end
return false
end
|
#is_image_file(fpath) ⇒ Object
81
82
83
84
85
86
|
# File 'lib/vimamsa/util.rb', line 81
def is_image_file(fpath)
return false if !File.exist?(fpath)
return false if !fpath.match(/.(jpg|jpeg|png)$/i)
return true
end
|
#is_path(s) ⇒ Object
95
96
97
98
99
100
101
|
# File 'lib/vimamsa/util.rb', line 95
def is_path(s)
m = s.match(/(~[a-z]*)?\/.*\//)
if m != nil
return true
end
return false
end
|
#is_path_writable(fpath) ⇒ Object
1774
1775
1776
1777
1778
1779
1780
|
# File 'lib/vimamsa/buffer.rb', line 1774
def is_path_writable(fpath)
r = false
if fpath.class == String
r = true if File.writable?(Pathname.new(fpath).dirname)
end
return r
end
|
#is_text_file(fpath) ⇒ Object
88
89
90
91
92
93
|
# File 'lib/vimamsa/util.rb', line 88
def is_text_file(fpath)
return false if !File.exist?(fpath)
return false if !fpath.match(/.(txt|cpp|h|rb|c|php|java|py)$/i)
return true
end
|
#is_url(s) ⇒ Object
54
55
56
|
# File 'lib/vimamsa/util.rb', line 54
def is_url(s)
return s.match(/(https?|file):\/\/.*/) != nil
end
|
#is_visual_mode ⇒ Object
26
27
28
29
|
# File 'lib/vimamsa/key_actions.rb', line 26
def is_visual_mode()
return 1 if $kbd.mode_root_state.to_s() == "V"
return 0
end
|
#jump_to_file(filename, linenum = 0) ⇒ Object
510
511
512
513
514
515
516
|
# File 'lib/vimamsa/editor.rb', line 510
def jump_to_file(filename, linenum = 0)
open_new_file(filename)
if linenum > 0
$buffer.jump_to_line(linenum)
center_on_current_line
end
end
|
#jump_to_next_edit ⇒ Object
17
18
19
|
# File 'lib/vimamsa/key_actions.rb', line 17
def jump_to_next_edit
buf.jump_to_next_edit
end
|
#load_buffer(fname) ⇒ Object
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
|
# File 'lib/vimamsa/editor.rb', line 492
def load_buffer(fname)
return if !File.exist?(fname)
existing_buffer = $buffers.get_buffer_by_filename(fname)
if existing_buffer != nil
$buffer_history << existing_buffer
return
end
debug("LOAD BUFFER: #{fname}")
buffer = Buffer.new(read_file("", fname), fname)
buffer.set_active
debug("DONE LOAD: #{fname}")
$buffers << buffer
end
|
#load_buffer_list ⇒ Object
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/vimamsa/buffer_list.rb', line 11
def load_buffer_list()
message("Load buffer list")
buffn = get_dot_path("buffers.txt")
return if !File.exist?(buffn)
bufstr = IO.read(buffn)
bufl = eval(bufstr)
debug bufl
for b in bufl
load_buffer(b) if b != nil and File.file?(b)
end
end
|
#log_error(message) ⇒ Object
29
30
31
32
33
34
35
36
|
# File 'lib/vimamsa/debug.rb', line 29
def log_error(message)
puts "====== ERROR ====="
puts caller[0]
puts message
puts "=================="
$errors << [message, caller]
end
|
#log_message(message) ⇒ Object
24
25
26
27
|
# File 'lib/vimamsa/debug.rb', line 24
def log_message(message)
puts message
$log_messages << message
end
|
#message(s) ⇒ Object
435
436
437
438
439
440
441
442
443
|
# File 'lib/vimamsa/editor.rb', line 435
def message(s)
s = "[#{DateTime.now().strftime("%H:%M")}] #{s}"
puts s
$vmag.add_to_minibuf(s)
end
|
#minibuffer_cancel ⇒ Object
409
410
411
412
413
414
|
# File 'lib/vimamsa/editor.rb', line 409
def minibuffer_cancel()
debug "minibuffer_cancel"
$kbd.set_mode(:command)
minibuffer_input = $minibuffer.to_s[0..-2]
end
|
#minibuffer_delete ⇒ Object
def readchar_new_char© $input_char_call_func.call© end
431
432
433
|
# File 'lib/vimamsa/editor.rb', line 431
def minibuffer_delete()
$minibuffer.delete(BACKWARD_CHAR)
end
|
#minibuffer_end ⇒ Object
402
403
404
405
406
407
|
# File 'lib/vimamsa/editor.rb', line 402
def minibuffer_end()
debug "minibuffer_end"
$kbd.set_mode(:command)
minibuffer_input = $minibuffer.to_s[0..-2]
return $minibuffer.call_func.call(minibuffer_input)
end
|
#minibuffer_new_char(c) ⇒ Object
416
417
418
419
420
421
422
423
424
425
|
# File 'lib/vimamsa/editor.rb', line 416
def minibuffer_new_char(c)
if c == "\r"
raise "Should not come here"
debug "MINIBUFFER END"
else
$minibuffer.insert_txt(c)
debug "MINIBUFFER: #{c}"
end
end
|
#missing_callfunc ⇒ Object
30
31
32
|
# File 'lib/vimamsa/actions.rb', line 30
def missing_callfunc
puts "missing_callfunc"
end
|
#mkdir_if_not_exists(_dirpath) ⇒ Object
29
30
31
32
|
# File 'lib/vimamsa/editor.rb', line 29
def mkdir_if_not_exists(_dirpath)
dirpath = File.expand_path(_dirpath)
Dir.mkdir(dirpath) unless File.exist?(dirpath)
end
|
#open_existing_file(filename) ⇒ Object
519
520
521
|
# File 'lib/vimamsa/editor.rb', line 519
def open_existing_file(filename)
open_new_file(filename)
end
|
#open_file_dialog ⇒ Object
286
287
288
289
290
|
# File 'lib/vimamsa/editor.rb', line 286
def open_file_dialog()
path = ""
path = $buffer.fname if $buffer.fname
gui_open_file_dialog(File.dirname(path))
end
|
#open_new_file(filename, file_contents = "") ⇒ Object
523
524
525
526
527
528
529
530
531
532
533
534
535
536
|
# File 'lib/vimamsa/editor.rb', line 523
def open_new_file(filename, file_contents = "")
filename = File.expand_path(filename)
b = $buffers.get_buffer_by_filename(filename)
if b != nil
message "Switching to: #{filename}"
$buffers.set_current_buffer(b)
else
message "New file opened: #{filename}"
fname = filename
load_buffer(fname)
end
end
|
#open_url(url) ⇒ Object
596
597
598
|
# File 'lib/vimamsa/editor.rb', line 596
def open_url(url)
system("xdg-open", url)
end
|
#open_with_default_program(url) ⇒ Object
600
601
602
|
# File 'lib/vimamsa/editor.rb', line 600
def open_with_default_program(url)
system("xdg-open", url)
end
|
#page_down ⇒ Object
87
88
89
90
|
# File 'lib/vimamsa/gui.rb', line 87
def page_down
$view.signal_emit("move-cursor", Gtk::MovementStep.new(:PAGES), 1, false)
return true
end
|
#page_up ⇒ Object
82
83
84
85
|
# File 'lib/vimamsa/gui.rb', line 82
def page_up
$view.signal_emit("move-cursor", Gtk::MovementStep.new(:PAGES), -1, false)
return true
end
|
#paste_register(char) ⇒ Object
651
652
653
654
|
# File 'lib/vimamsa/editor.rb', line 651
def paste_register(char)
$c = $register[char]
message("Paste: #{$c}")
end
|
#paste_system_clipboard ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/vimamsa/gui.rb', line 92
def paste_system_clipboard()
utf8_string = Gdk::Atom.intern("UTF8_STRING")
widget = Gtk::Invisible.new
clipboard = Gtk::Clipboard.get_default($vmag.window.display)
received_text = ""
target_string = Gdk::Selection::TARGET_STRING
ti = clipboard.request_contents(target_string)
if clipboard.wait_is_text_available?
received_text = clipboard.wait_for_text
end
if received_text != "" and !received_text.nil?
max_clipboard_items = 100
if received_text != $clipboard[-1]
$paste_lines = false
end
$clipboard << received_text
$clipboard = $clipboard[-([$clipboard.size, max_clipboard_items].min)..-1]
end
return received_text
end
|
#ppath(s) ⇒ Object
65
66
67
68
69
70
71
|
# File 'lib/vimamsa/util.rb', line 65
def ppath(s)
selfpath = __FILE__
selfpath = File.readlink(selfpath) if File.lstat(selfpath).symlink?
scriptdir = File.expand_path(File.dirname(selfpath))
p = "#{scriptdir}/../../#{s}"
return File.expand_path(p)
end
|
#read_file(text, path) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/vimamsa/util.rb', line 23
def read_file(text, path)
path = Pathname(path.to_s).expand_path
FileUtils.touch(path) unless File.exist?(path)
if !File.exist?(path)
return
end
encoding = text.encoding
content = path.open("r:#{encoding.name}") { |io| io.read }
debug("GUESS ENCODING")
unless content.valid_encoding? GUESS_ENCODING_ORDER.find { |enc|
content.force_encoding(enc)
content.valid_encoding?
}
content.encode!(Encoding::UTF_8)
end
debug("END GUESS ENCODING")
content.gsub!(/\r\n/, "\n")
content.gsub!(/\b/, "")
debug("END FILTER")
return content
end
|
#recursively_find_files ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/vimamsa/file_finder.rb', line 38
def recursively_find_files()
debug("START find files")
dlist = []
for d in $search_dirs
debug("FIND FILEs IN #{d}")
dlist = dlist + Dir.glob("#{d}/**/*").select { |e| File.file?(e) and $find_extensions.include?(File.extname(e)) }
debug("FIND FILEs IN #{d} END")
end
debug("END find files2")
$dir_list = dlist
debug("END find files")
return $dir_list
end
|
#reg_act(id, callfunc, name = "", opt = {}) ⇒ Object
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/vimamsa/actions.rb', line 16
def reg_act(id, callfunc, name = "", opt = {})
if callfunc.class == Proc
a = Action.new(id, name, callfunc, opt)
else
begin
m = method(callfunc)
rescue NameError
m = method("missing_callfunc")
end
a = Action.new(id, name, m, opt)
end
return a
end
|
#render_buffer(buffer = 0, reset = 0) ⇒ Object
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
|
# File 'lib/vimamsa/editor.rb', line 553
def render_buffer(buffer = 0, reset = 0)
tmpbuf = $buffer.to_s
debug "pos:#{$buffer.pos} L:#{$buffer.lpos} C:#{$buffer.cpos}"
pos = $buffer.pos
selection_start = $buffer.selection_start
if $buffer.need_redraw?
reset = 1
end
t1 = Time.now
hook_draw()
if $buffer.need_redraw?
hpt_scan_images() if $debug end
$buffer.highlight
if Time.now - t1 > 1 / 100.0
debug "SLOW render"
debug "Render time: #{Time.now - t1}"
end
$buffer.set_redrawed if reset == 1
end
|
#repeat_last_action ⇒ Object
339
340
341
342
|
# File 'lib/vimamsa/editor.rb', line 339
def repeat_last_action()
cmd = $command_history.last
cmd[:method].call *cmd[:params] if cmd != nil
end
|
#repeat_last_find ⇒ Object
344
345
346
347
348
|
# File 'lib/vimamsa/editor.rb', line 344
def repeat_last_find()
return if !defined? $last_find_command
$buffer.jump_to_next_instance_of_char($last_find_command[:char],
$last_find_command[:direction])
end
|
#run_cmd(cmd) ⇒ Object
604
605
606
607
608
609
610
611
|
# File 'lib/vimamsa/editor.rb', line 604
def run_cmd(cmd)
tmpf = Tempfile.new("vmarun", "/tmp").path
cmd = "#{cmd} > #{tmpf}"
puts "CMD:\n#{cmd}"
system("bash", "-c", cmd)
res_str = File.read(tmpf)
return res_str
end
|
#run_random_jump_test__tmpl(test_time = 60 * 60 * 10) ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# File 'lib/vimamsa/debug.rb', line 106
def run_random_jump_test__tmpl(test_time = 60 * 60 * 10)
open_new_file("TODO"); gui_sleep(0.1)
ttstart = Time.now
Kernel.srand(1231)
step = 0
while Time.now < ttstart + test_time
debug "step=#{step}"
buf.jump_to_random_pos
buf.insert_txt("Z") if rand() > 0.25
buf.reset_highlight() if rand() > 0.1
gui_trigger_event
render_buffer($buffer)
gui_sleep(rand() / 2)
if rand() < (1 / 40.0)
buf.revert
end
gui_trigger_event
buf.insert_txt("X") if rand() > 0.25
render_buffer($buffer)
$buffers.set_current_buffer(rand($buffers.size)) if rand > 0.25
step += 1
end
end
|
#run_test(test_id) ⇒ Object
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/vimamsa/debug.rb', line 81
def run_test(test_id)
target_results = read_file("", "tests/test_#{test_id}_output.txt")
old_buffer = $buffer
$buffer = Buffer.new("", "")
load "tests/test_#{test_id}.rb"
test_ok = $buffer.to_s.strip == target_results.strip
puts "##################"
puts target_results
puts "##################"
puts $buffer.to_s
puts "##################"
puts "TEST OK" if test_ok
puts "TEST FAILED" if !test_ok
puts "##################"
$buffer = old_buffer
end
|
#run_tests ⇒ Object
76
77
78
79
|
# File 'lib/vimamsa/debug.rb', line 76
def run_tests()
run_test("01")
run_test("02")
end
|
#save_buffer_list ⇒ Object
2
3
4
5
6
7
8
9
|
# File 'lib/vimamsa/buffer_list.rb', line 2
def save_buffer_list()
message("Save buffer list")
buffn = get_dot_path("buffers.txt")
f = File.open(buffn, "w")
bufstr = $buffers.collect { |buf| buf.fname }.inspect
f.write(bufstr)
f.close()
end
|
#savedebug(message, e) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/vimamsa/debug.rb', line 45
def savedebug(message, e)
FileUtils.mkdir_p("debug")
puts "savedebug()"
dbginfo = {}
dbginfo["message"] = message
dbginfo["debuginfo"] = $debuginfo
dbginfo["trace"] = caller()
dbginfo["trace"] = e.backtrace() if e
dbginfo["trace_str"] = dbginfo["trace"].join("\n")
dbginfo["edit_history"] = buf.edit_history
dbginfo["cnf"] = $cnf
dbginfo["register"] = $register
dbginfo["clipboard"] = $clipboard
dbginfo["buffer"] = {}
dbginfo["buffer"]["str"] = buf.to_s
dbginfo["buffer"]["lpos"] = buf.lpos
dbginfo["buffer"]["cpos"] = buf.cpos
dbginfo["buffer"]["pos"] = buf.pos
pfxs = DateTime.now().strftime("%d%m%Y_%H%M%S")
save_fn_dump = sprintf("debug/crash_%s.marshal", pfxs)
save_fn_json = sprintf("debug/crash_%s.json", pfxs)
mdump = Marshal.dump(dbginfo)
IO.binwrite(save_fn_dump, mdump)
IO.write(save_fn_json, dbginfo.to_json)
puts "SAVED CRASH INFO TO:"
puts save_fn_dump
puts save_fn_json
end
|
#scan_indexes(txt, regex) ⇒ Object
57
58
59
60
61
|
# File 'lib/vimamsa/rbvma.rb', line 57
def scan_indexes(txt, regex)
indexes = txt.enum_for(:scan, regex).map { Regexp.last_match.begin(0) }
return indexes
end
|
#scan_word_start_marks(search_str) ⇒ Object
538
539
540
541
542
|
# File 'lib/vimamsa/editor.rb', line 538
def scan_word_start_marks(search_str)
wsmarks = scan_indexes(search_str, /(?<=[^\p{Word}])\p{Word}|\Z/)
return wsmarks
end
|
#search_actions ⇒ Object
48
49
50
51
52
53
54
|
# File 'lib/vimamsa/actions.rb', line 48
def search_actions()
l = []
$select_keys = ["h", "l", "f", "d", "s", "a", "g", "z"]
gui_select_update_window(l, $select_keys.collect { |x| x.upcase },
"search_actions_select_callback",
"search_actions_update_callback")
end
|
#search_actions_select_callback(search_str, idx) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/vimamsa/actions.rb', line 87
def search_actions_select_callback(search_str, idx)
item = $item_list[idx][2]
acc = item[0][:action]
puts "Selected:" + acc.to_s
gui_select_window_close(0)
if acc.class == String
eval(acc)
elsif acc.class == Symbol
puts "Symbol"
call(acc)
end
end
|
#search_actions_update_callback(search_str = "") ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/vimamsa/actions.rb', line 58
def search_actions_update_callback(search_str = "")
return [] if search_str == ""
item_list2 = []
for act_id in $actions.keys
act = $actions[act_id]
item = {}
item[:key] = ""
item[:action] = act_id
item[:str] = act_id.to_s
if $actions[act_id].method_name != ""
item[:str] = $actions[act_id].method_name
end
item_list2 << item
end
item_list = item_list2
a = filter_items(item_list, 0, search_str)
puts a.inspect
r = a.collect { |x| [x[0][0], 0, x] }
puts r.inspect
$item_list = r
r = a.collect { |x| ["[#{x[0][:key]}] #{x[0][:str]}", 0, x] }
return r
end
|
#set_clipboard(s) ⇒ Object
307
308
309
310
311
312
313
314
315
316
317
318
319
320
|
# File 'lib/vimamsa/editor.rb', line 307
def set_clipboard(s)
if !(s.class <= String) or s.size == 0
puts s.inspect
puts [s, s.class, s.size]
log_error("s.class != String or s.size == 0")
Ripl.start :binding => binding
return
end
$clipboard << s
set_system_clipboard(s)
$register[$cur_register] = s
debug "SET CLIPBOARD: [#{s}]"
debug "REGISTER: #{$cur_register}:#{$register[$cur_register]}"
end
|
#set_conf(id, val) ⇒ Object
27
28
29
|
# File 'lib/vimamsa/key_binding_tree.rb', line 27
def set_conf(id, val)
$cnf[id] = val
end
|
#set_cursor_pos(new_pos) ⇒ Object
322
323
324
325
326
|
# File 'lib/vimamsa/editor.rb', line 322
def set_cursor_pos(new_pos)
buf.set_pos(new_pos)
debug "New pos: #{new_pos}lpos:#{$buffer.lpos} cpos:#{$buffer.cpos}"
end
|
#set_last_command(cmd) ⇒ Object
328
329
330
|
# File 'lib/vimamsa/editor.rb', line 328
def set_last_command(cmd)
$command_history << cmd
end
|
#set_next_command_count(num) ⇒ Object
350
351
352
353
354
355
356
357
|
# File 'lib/vimamsa/editor.rb', line 350
def set_next_command_count(num)
if $next_command_count != nil
$next_command_count = $next_command_count * 10 + num.to_i
else
$next_command_count = num.to_i
end
debug("NEXT COMMAND COUNT: #{$next_command_count}")
end
|
#set_register(char) ⇒ Object
646
647
648
649
|
# File 'lib/vimamsa/editor.rb', line 646
def set_register(char)
$cur_register = char
message("Set register #{char}")
end
|
#set_system_clipboard(arg) ⇒ Object
125
126
127
128
129
130
131
132
|
# File 'lib/vimamsa/gui.rb', line 125
def set_system_clipboard(arg)
widget = Gtk::Invisible.new
clipboard = Gtk::Clipboard.get_default($vmag.window.display)
clipboard.text = arg
end
|
#setcnf(id, val) ⇒ Object
31
32
33
|
# File 'lib/vimamsa/key_binding_tree.rb', line 31
def setcnf(id, val)
set_conf(id, val)
end
|
#show_key_bindings ⇒ Object
365
366
367
368
369
370
371
|
# File 'lib/vimamsa/editor.rb', line 365
def show_key_bindings()
kbd_s = "❙Key bindings❙\n"
kbd_s << "=======================================\n"
kbd_s << $kbd.to_s
kbd_s << "\n=======================================\n"
create_new_file(nil, kbd_s)
end
|
#start_minibuffer_cmd(bufname, bufstr, cmd) ⇒ Object
359
360
361
362
363
|
# File 'lib/vimamsa/editor.rb', line 359
def start_minibuffer_cmd(bufname, bufstr, cmd)
$kbd.set_mode(:minibuffer)
$minibuffer = Buffer.new(bufstr, "")
$minibuffer.call_func = method(cmd)
end
|
#start_ripl ⇒ Object
140
141
142
|
# File 'lib/vimamsa/debug.rb', line 140
def start_ripl
Ripl.start :binding => binding
end
|
#system_clipboard_changed(clipboard_contents) ⇒ Object
292
293
294
295
296
297
298
299
300
301
|
# File 'lib/vimamsa/editor.rb', line 292
def system_clipboard_changed(clipboard_contents)
max_clipboard_items = 100
if clipboard_contents != $clipboard[-1]
$paste_lines = false
end
$clipboard << clipboard_contents
$clipboard = $clipboard[-([$clipboard.size, max_clipboard_items].min)..-1]
end
|
#unimplemented ⇒ Object
50
51
52
|
# File 'lib/vimamsa/rbvma.rb', line 50
def unimplemented
puts "unimplemented"
end
|
#update_file_index ⇒ Object
30
31
32
33
34
35
36
|
# File 'lib/vimamsa/file_finder.rb', line 30
def update_file_index()
message("Start updating file index")
Thread.new {
recursively_find_files()
message("Finnish updating file index")
}
end
|
#vma ⇒ Object
56
57
58
|
# File 'lib/vimamsa/main.rb', line 56
def vma()
return $vma
end
|
#which(cmd) ⇒ Object
6
7
8
9
10
11
12
13
14
15
|
# File 'lib/vimamsa/util.rb', line 6
def which(cmd)
exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
exts.each do |ext|
exe = File.join(path, "#{cmd}#{ext}")
return exe if File.executable?(exe) && !File.directory?(exe)
end
end
nil
end
|
#write_to_file(savepath, s) ⇒ Object
1766
1767
1768
1769
1770
1771
1772
|
# File 'lib/vimamsa/buffer.rb', line 1766
def write_to_file(savepath, s)
if is_path_writable(savepath)
IO.write(savepath, $buffer.to_s)
else
message("PATH NOT WRITABLE: #{savepath}")
end
end
|