Top Level Namespace
Defined Under Namespace
Modules: Differ, Gtk, Kernel, Vimamsa
Classes: Action, Buffer, BufferList, BufferManager, Converter, DelayExecutioner, EasyJump, Editor, Encrypt, FileContentSearch, FileFinder, FileHistory, FileManager, FileSelector, Grep, HSafe, Hook, HookItem, KeyBindingTree, LangSrv, Macro, OneInputAction, PopupFormGenerator, ResizableImage, Search, SelectUpdateWindow, State, VMAgui, VSourceView
Constant Summary
collapse
- GUESS_ENCODING_ORDER =
[
Encoding::US_ASCII,
Encoding::UTF_8,
Encoding::ISO_8859_1,
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
- LSP =
LanguageServer::Protocol
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_buffer(file_contents = "\n", prefix = "buf", setcurrent = true) ⇒ Object
-
#create_new_file(filename = nil, file_contents = "\n") ⇒ Object
-
#debug(message, severity = 1) ⇒ Object
-
#debug_dump_clipboard ⇒ Object
-
#debug_dump_deltas ⇒ Object
-
#debug_print_buffer(c) ⇒ Object
-
#decrypt_cur_buffer(password, b = nil) ⇒ Object
-
#diff_buffer ⇒ 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_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, bufo) ⇒ 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, opt = {}) ⇒ Object
def invoke_grep_search() start_minibuffer_cmd(“”, “”, :grep_cur_buffer) end.
-
#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
-
#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_scan_audio(bf = nil) ⇒ Object
Scan audio files inserted with ⟦audio:filepath⟧ syntax TODO: merge code with hpt_scan_images.
-
#hpt_scan_images(bf = nil) ⇒ Object
Scan images inserted with ⟦img:filepath⟧ syntax.
-
#idle_func ⇒ Object
-
#invoke_command ⇒ 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 = nil, charn = nil) ⇒ Object
-
#jump_to_next_edit ⇒ Object
-
#load_buffer(fname) ⇒ Object
-
#load_buffer_list ⇒ Object
-
#log_error(message) ⇒ Object
-
#log_message(message, vlevel = 1) ⇒ 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
-
#reg_act(id, callfunc, name = "", opt = {}) ⇒ Object
-
#repeat_last_action ⇒ Object
-
#repeat_last_find ⇒ Object
-
#run_as_idle(p) ⇒ Object
Run idle proc once Delay execution of proc until Gtk has fully processed the last calls.
-
#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
-
#translate_path(fn, bf) ⇒ Object
-
#unimplemented ⇒ Object
-
#vma ⇒ Object
-
#which(cmd) ⇒ Object
-
#write_to_file(savepath, s) ⇒ Object
Instance Method Details
#_quit ⇒ Object
287
288
289
290
|
# File 'lib/vimamsa/editor.rb', line 287
def _quit()
vma.shutdown
end
|
#ack_buffer(instr, b = nil) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
|
# File 'lib/vimamsa/ack.rb', line 114
def ack_buffer(instr, b = nil)
instr = Shellwords.escape(instr)
bufstr = ""
for path in vma.get_content_search_paths
bufstr += run_cmd("ack -Q --type-add=gd=.gd -ki --nohtml --nojs --nojson #{instr} #{path}")
end
if bufstr.size > 5
create_new_buffer(bufstr,"ack")
else
message("No results for input:#{instr}")
end
end
|
#assert_binary_exists(bin) ⇒ Object
105
106
107
108
109
|
# File 'lib/vimamsa/util.rb', line 105
def assert_binary_exists(bin)
if which(bin).nil?
raise "Binary #{bin} doesn't exist"
end
end
|
#backup_all_buffers ⇒ Object
2045
2046
2047
2048
2049
2050
|
# File 'lib/vimamsa/buffer.rb', line 2045
def backup_all_buffers()
for b in bufs
b.backup
end
message("Backup all buffers")
end
|
#bindkey(key, action) ⇒ Object
524
525
526
|
# File 'lib/vimamsa/key_binding_tree.rb', line 524
def bindkey(key, action)
$kbd.bindkey(key, action)
end
|
#buf ⇒ Object
Return currently active buffer
38
39
40
|
# File 'lib/vimamsa/main.rb', line 38
def buf()
return vma.buf
end
|
#buf_replace(search_str, replace_str) ⇒ Object
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# File 'lib/vimamsa/search_replace.rb', line 138
def buf_replace(search_str, replace_str)
if vma.buf.visual_mode?
r = vma.buf.get_visual_mode_range
txt = vma.buf[r]
txt.gsub!(search_str, replace_str)
vma.buf.replace_range(r, txt)
vma.buf.end_visual_mode
else
repbuf = vma.buf.to_s.clone
repbuf.gsub!(search_str, replace_str)
tmppos = vma.buf.pos
if repbuf == vma.buf.to_s.clone
message("NO CHANGE. Replacing #{search_str} with #{replace_str}.")
else
vma.buf.set_content(repbuf)
vma.buf.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
161
162
163
164
165
166
167
168
169
|
# File 'lib/vimamsa/search_replace.rb', line 161
def buf_replace_string(instr)
a = instr.split("/")
if a.size != 2
return
end
buf_replace(a[0], a[1])
end
|
#buflist ⇒ Object
46
47
48
|
# File 'lib/vimamsa/main.rb', line 46
def buflist()
return vma.buffers
end
|
#bufs ⇒ Object
42
43
44
|
# File 'lib/vimamsa/main.rb', line 42
def bufs()
return vma.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
348
349
350
351
352
353
|
# File 'lib/vimamsa/editor.rb', line 348
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
65
66
67
68
69
70
71
72
73
|
# File 'lib/vimamsa/gui.rb', line 65
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
44
45
46
47
48
49
|
# File 'lib/vimamsa/debug.rb', line 44
def crash(message, e = nil)
puts "FATAL ERROR:#{message}"
puts caller().join("\n")
_quit()
end
|
#create_new_buffer(file_contents = "\n", prefix = "buf", setcurrent = true) ⇒ Object
512
513
514
515
516
517
518
519
520
|
# File 'lib/vimamsa/editor.rb', line 512
def create_new_buffer(file_contents = "\n",prefix="buf", setcurrent=true)
debug "NEW BUFFER CREATED"
buffer = Buffer.new(file_contents,nil,prefix)
vma.buffers.add(buffer)
vma.buffers.set_current_buffer_by_id(buffer.id) if setcurrent
buffer.set_content(file_contents)
return buffer
end
|
#create_new_file(filename = nil, file_contents = "\n") ⇒ Object
497
498
499
500
501
502
503
504
505
506
507
508
509
510
|
# File 'lib/vimamsa/editor.rb', line 497
def create_new_file(filename = nil, file_contents = "\n")
buffer = Buffer.new(file_contents)
debug "NEW FILE CREATED: #{buffer.id}"
vma.buffers.add(buffer)
vma.kbd.set_mode_to_default
vma.buffers.set_current_buffer_by_id(buffer.id)
buffer.set_content(file_contents)
return buffer
end
|
#debug(message, severity = 1) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
|
# File 'lib/vimamsa/debug.rb', line 3
def debug(message, severity = 1)
if $debug
if severity > 1
message = "\033[1;31m!!! \033[0m#{message}"
end
puts "[#{DateTime.now().strftime("%H:%M:%S")}] #{message}"
$stdout.flush
end
end
|
#debug_dump_clipboard ⇒ Object
20
21
22
|
# File 'lib/vimamsa/debug.rb', line 20
def debug_dump_clipboard()
puts $clipboard.inspect
end
|
#debug_dump_deltas ⇒ Object
24
25
26
|
# File 'lib/vimamsa/debug.rb', line 24
def debug_dump_deltas()
puts buf.edit_history.inspect
end
|
#debug_print_buffer(c) ⇒ Object
15
16
17
18
|
# File 'lib/vimamsa/debug.rb', line 15
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)
vma.buf.decrypt(password)
end
|
#diff_buffer ⇒ Object
397
398
399
400
401
402
403
404
405
406
407
408
409
410
|
# File 'lib/vimamsa/editor.rb', line 397
def diff_buffer()
bufstr = ""
orig_path = vma.buf.fname
infile = Tempfile.new("out")
infile = Tempfile.new("in")
infile.write(vma.buf.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
|
#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,{:hide=>true})
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)
vma.buf.set_encrypted(password)
end
|
#exec_action(action) ⇒ Object
530
531
532
533
534
535
536
537
538
539
540
|
# File 'lib/vimamsa/key_binding_tree.rb', line 530
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
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
|
# File 'lib/vimamsa/editor.rb', line 644
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
416
417
418
419
420
421
422
423
424
|
# File 'lib/vimamsa/editor.rb', line 416
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", vma.buf)
end
|
#expand_if_existing(fpath) ⇒ Object
146
147
148
149
150
151
|
# File 'lib/vimamsa/util.rb', line 146
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
292
293
294
295
|
# File 'lib/vimamsa/editor.rb', line 292
def fatal_error(msg)
debug msg
exit!
end
|
#file_is_text_file(fpath) ⇒ Object
664
665
666
667
668
669
670
671
672
673
|
# File 'lib/vimamsa/editor.rb', line 664
def file_is_text_file(fpath)
debug "file_is_text_file(#{fpath})"
fpath = File.expand_path(fpath)
return false if !File.exist?(fpath)
r = exec_cmd("file", fpath)
debug "DEBUG:#{r}"
return true if r.match(/UTF-8.*text/)
return true if r.match(/ASCII.*text/)
return false
end
|
#file_saveas(filename) ⇒ Object
297
298
299
|
# File 'lib/vimamsa/editor.rb', line 297
def file_saveas(filename)
buf.save_as_callback(filename)
end
|
#filter_buffer(buf) ⇒ Object
522
523
524
525
526
527
528
529
530
531
532
|
# File 'lib/vimamsa/editor.rb', line 522
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_items(item_list, item_key, search_str) ⇒ Object
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/vimamsa/actions.rb', line 116
def filter_items(item_list, item_key, search_str)
item_hash = {}
puts item_list.inspect
scores = Parallel.map(item_list, in_threads: 8) do |item|
if item[:str].class != String
puts item.inspect
exit!
end
[item, srn_dst(search_str, item[:str])]
end
scores.sort_by! { |x| -x[1] }
debug scores.inspect
scores = scores[0..30]
return scores
end
|
#find_project_dir_of_cur_buffer ⇒ Object
699
700
701
702
703
704
705
706
707
|
# File 'lib/vimamsa/editor.rb', line 699
def find_project_dir_of_cur_buffer()
pdir = nil
if vma.buf.fname
pdir = find_project_dir_of_fn(vma.buf.fname)
end
return pdir
end
|
#find_project_dir_of_fn(fn) ⇒ Object
685
686
687
688
689
690
691
692
693
694
695
696
697
|
# File 'lib/vimamsa/editor.rb', line 685
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
544
545
546
547
|
# File 'lib/vimamsa/key_binding_tree.rb', line 544
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
319
320
321
|
# File 'lib/vimamsa/editor.rb', line 319
def get_clipboard()
return $clipboard[-1]
end
|
#get_dot_path(sfx) ⇒ Object
606
607
608
609
610
611
|
# File 'lib/vimamsa/editor.rb', line 606
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
613
614
615
616
617
618
619
620
621
622
623
|
# File 'lib/vimamsa/editor.rb', line 613
def get_file_line_pointer(s)
m = s.match(/((~[a-z]*)?\/.*\/\S+):(c?)(\d+)/)
if m != nil
if File.exist?(File.expand_path(m[1]))
return [m[1], m[4].to_i, m[3]]
end
end
return nil
end
|
#get_visible_area ⇒ Object
75
76
77
78
79
80
81
|
# File 'lib/vimamsa/gui.rb', line 75
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
71
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
|
# File 'lib/vimamsa/search_replace.rb', line 71
def grep_cur_buffer(search_str, b = nil)
debug "grep_cur_buffer(search_str)"
lines = vma.buf.split("\n")
r = Regexp.new(Regexp.escape(search_str), Regexp::IGNORECASE)
fpath = ""
fpath = vma.buf.pathname.expand_path.to_s + ":" if vma.buf.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 = vma.buffers.current_buf
b = create_new_file(nil, res_str)
b.line_action_handler = proc { |lineno|
debug "GREP HANDLER:#{lineno}"
jumpto = $grep_matches[lineno]
if jumpto.class == Integer
vma.buffers.set_current_buffer($grep_bufid, update_history = true)
buf.jump_to_line(jumpto)
end
}
end
|
#gui_ack ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/vimamsa/ack.rb', line 95
def gui_ack()
search_paths = vma.get_content_search_paths.join("<br/>")
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>
Will search the following directories:
#{search_paths}
<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
164
165
|
# File 'lib/vimamsa/gui.rb', line 164
def gui_add_image(imgpath, pos)
end
|
#gui_create_buffer(id, bufo) ⇒ Object
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/vimamsa/gui.rb', line 125
def gui_create_buffer(id, bufo)
debug "gui_create_buffer(#{id})"
buf1 = GtkSource::Buffer.new()
view = VSourceView.new(nil, bufo)
view.register_signals()
$debug = true
ssm = GtkSource::StyleSchemeManager.new
ssm.set_search_path(ssm.search_path << ppath("styles/"))
sty = ssm.get_scheme("molokai_edit")
buf1.highlight_matching_brackets = true
buf1.style_scheme = sty
view.set_highlight_current_line(true)
view.set_show_line_numbers(true)
view.set_buffer(buf1)
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(conf(:tab_width))
$vmag.buffers[id] = view
end
|
#gui_file_history_select_callback(search_str, idx) ⇒ Object
100
101
102
103
104
105
106
|
# 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 = "")
debug "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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/vimamsa/gui.rb', line 22
def gui_file_saveas(dirpath)
dialog = Gtk::FileChooserDialog.new(:title => "Save as",
:action => :save,
:buttons => [["Save", :accept],
["Cancel", :cancel]])
dialog.signal_connect("response") do |dialog, response_id|
if response_id == Gtk::ResponseType::ACCEPT
file_saveas(dialog.file.parse_name)
end
dialog.destroy
end
dialog.modal = true
dialog.show
end
|
#gui_find_macro_select_callback(search_str, idx) ⇒ Object
15
16
17
18
19
20
21
22
23
|
# File 'lib/vimamsa/macro.rb', line 15
def gui_find_macro_select_callback(search_str, idx)
debug "gui_find_macro_select_callback"
selected = $macro_search_list[idx]
m = $macro.named_macros[selected[0]].clone
debug "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
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# File 'lib/vimamsa/macro.rb', line 1
def gui_find_macro_update_callback(search_str = "")
debug "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
65
66
67
68
69
|
# File 'lib/vimamsa/search_replace.rb', line 65
def gui_grep()
callback = proc { |x| grep_cur_buffer(x) }
gui_one_input_action("Grep", "Search:", "grep", callback)
end
|
def invoke_grep_search() start_minibuffer_cmd(“”, “”, :grep_cur_buffer) end
106
107
108
109
110
|
# File 'lib/vimamsa/search_replace.rb', line 106
def gui_one_input_action(title, field_label, button_title, callback, opt = {})
a = OneInputAction.new(nil, title, field_label, button_title, callback, opt)
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
19
20
|
# File 'lib/vimamsa/gui.rb', line 3
def gui_open_file_dialog(dirpath)
dialog = Gtk::FileChooserDialog.new(:title => "Open file",
:action => :open,
:buttons => [["Open", :accept],
["Cancel", :cancel]])
dialog.set_current_folder(Gio::File.new_for_path(dirpath))
dialog.signal_connect("response") do |dialog, response_id|
if response_id == Gtk::ResponseType::ACCEPT
open_new_file(dialog.file.parse_name)
end
dialog.destroy
end
dialog.modal = true
dialog.show
end
|
#gui_replace_callback(vals) ⇒ Object
def gui_replace_callback(search_str, replace_str)
113
114
115
116
117
118
119
|
# File 'lib/vimamsa/search_replace.rb', line 113
def gui_replace_callback(vals)
search_str = vals["search"]
replace_str = vals["replace"]
debug "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
122
123
124
125
126
127
128
129
130
131
132
|
# File 'lib/vimamsa/search_replace.rb', line 122
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
5
6
7
|
# 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
168
169
|
# File 'lib/vimamsa/gui.rb', line 168
def gui_select_window_close(arg = nil)
end
|
#gui_set_buffer_contents(id, txt) ⇒ Object
171
172
173
174
|
# File 'lib/vimamsa/gui.rb', line 171
def gui_set_buffer_contents(id, txt)
debug "gui_set_buffer_contents(#{id}, txt)"
vma.gui.buffers[id].buffer.set_text(txt)
end
|
#gui_set_current_buffer(id) ⇒ Object
181
182
183
184
|
# File 'lib/vimamsa/gui.rb', line 181
def gui_set_current_buffer(id)
vma.gui.set_current_buffer(id)
return
end
|
#gui_set_cursor_pos(id, pos) ⇒ Object
177
178
179
|
# File 'lib/vimamsa/gui.rb', line 177
def gui_set_cursor_pos(id, pos)
vma.buf.view.set_cursor_pos(pos)
end
|
#gui_set_file_lang(id, lname) ⇒ Object
153
154
155
156
157
158
159
160
161
162
|
# File 'lib/vimamsa/gui.rb', line 153
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
186
187
188
189
190
191
|
# File 'lib/vimamsa/gui.rb', line 186
def gui_set_window_title(wtitle, subtitle = "")
$vmag.window.title = wtitle
$vmag.subtitle.markup = "<span weight='light' size='small'>#{subtitle}</span>"
end
|
#gui_sleep(t2) ⇒ Object
105
106
107
108
109
110
|
# File 'lib/vimamsa/debug.rb', line 105
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
549
550
551
|
# File 'lib/vimamsa/key_binding_tree.rb', line 549
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
601
602
603
604
|
# File 'lib/vimamsa/editor.rb', line 601
def hook_draw()
end
|
#hpt_check_cur_word(w) ⇒ Object
1
2
3
4
5
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
|
# File 'lib/vimamsa/hyper_plain_text.rb', line 1
def hpt_check_cur_word(w)
debug "check_cur_word(w)"
m = w.match(/⟦(.*)⟧/)
if m
fpfx = m[1]
if vma.buf.fname
dn = File.dirname(vma.buf.fname)
fcands = []
if fpfx[0] != "/"
fcands << "#{dn}/#{fpfx}"
fcands << "#{dn}/#{fpfx}.txt"
end
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_scan_audio(bf = nil) ⇒ Object
Scan audio files inserted with ⟦audio:filepath⟧ syntax TODO: merge code with hpt_scan_images
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/vimamsa/hyper_plain_text.rb', line 56
def hpt_scan_audio(bf = nil)
bf = buf() if bf.nil?
return if bf.nil?
return if !bf.fname
return if !bf.fname.match(/.*txt$/)
imgpos = scan_indexes(bf, /⟦audio:.+?⟧/)
imgtags = bf.scan(/(⟦audio:(.+?)⟧)/)
c = 0
imgpos.each.with_index { |x, i|
a = imgpos[i]
t = imgtags[i]
insert_pos = a + t[0].size + c
fn = t[1]
imgfn = translate_path(fn, bf)
next if !File.exist?(imgfn)
if bf[insert_pos..(insert_pos + 2)] != "\n \n"
bf.insert_txt_at("\n \n", insert_pos)
bf.view.handle_deltas
c += 3
end
bf.add_audio(imgfn, insert_pos + 1)
}
end
|
#hpt_scan_images(bf = nil) ⇒ Object
Scan images inserted with ⟦img:filepath⟧ syntax
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/vimamsa/hyper_plain_text.rb', line 84
def hpt_scan_images(bf = nil)
bf = buf() if bf.nil?
return if bf.nil?
return if !bf.fname
return if !bf.fname.match(/.*txt$/)
imgpos = scan_indexes(bf, /⟦img:.+?⟧/)
imgtags = bf.scan(/(⟦img:(.+?)⟧)/)
c = 0
imgpos.each.with_index { |x, i|
a = imgpos[i]
t = imgtags[i]
insert_pos = a + t[0].size + c
fn = t[1]
imgfn = translate_path(fn, bf)
next if !File.exist?(imgfn)
if bf[insert_pos..(insert_pos + 2)] != "\n \n"
bf.insert_txt_at("\n \n", insert_pos)
bf.view.handle_deltas
c += 3
end
bf.add_image(imgfn, insert_pos + 1)
}
GLib::Idle.add(proc { vma.gui.scale_all_images })
end
|
#idle_func ⇒ Object
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/vimamsa/gui.rb', line 39
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
412
413
414
|
# File 'lib/vimamsa/editor.rb', line 412
def invoke_command()
start_minibuffer_cmd("", "", :execute_command)
end
|
#invoke_replace ⇒ Object
134
135
136
|
# File 'lib/vimamsa/search_replace.rb', line 134
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
161
162
163
164
165
166
167
|
# File 'lib/vimamsa/util.rb', line 161
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
169
170
171
172
173
174
|
# File 'lib/vimamsa/util.rb', line 169
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
183
184
185
186
187
188
189
|
# File 'lib/vimamsa/util.rb', line 183
def is_path(s)
m = s.match(/(~[a-z]*)?\/.*\//)
if m != nil
return true
end
return false
end
|
#is_path_writable(fpath) ⇒ Object
2037
2038
2039
2040
2041
2042
2043
|
# File 'lib/vimamsa/buffer.rb', line 2037
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
176
177
178
179
180
181
|
# File 'lib/vimamsa/util.rb', line 176
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
142
143
144
|
# File 'lib/vimamsa/util.rb', line 142
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 = nil, charn = nil) ⇒ Object
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
|
# File 'lib/vimamsa/editor.rb', line 554
def jump_to_file(filename, linenum = nil, charn = nil)
open_new_file(filename)
if !charn.nil?
if charn == "c"
buf.jump_to_pos(linenum)
center_on_current_line
return
end
end
if !linenum.nil?
buf.jump_to_line(linenum)
center_on_current_line
return
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
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
|
# File 'lib/vimamsa/editor.rb', line 534
def load_buffer(fname)
existing_buffer = vma.buffers.get_buffer_by_filename(fname)
if existing_buffer != nil
vma.buffers.add_buf_to_history(existing_buffer)
return
end
return if !File.exist?(fname)
debug("LOAD BUFFER: #{fname}")
buffer = Buffer.new(read_file("", fname), fname)
buffer.set_active
debug("DONE LOAD: #{fname}")
vma.buffers << buffer
return 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
35
36
37
38
39
40
41
42
|
# File 'lib/vimamsa/debug.rb', line 35
def log_error(message)
puts "====== ERROR ====="
puts caller[0]
puts message
puts "=================="
$errors << [message, caller]
end
|
#log_message(message, vlevel = 1) ⇒ Object
30
31
32
33
|
# File 'lib/vimamsa/debug.rb', line 30
def log_message(message, vlevel = 1)
puts message if conf("log.verbose") >= vlevel
$log_messages << message
end
|
#message(s) ⇒ Object
459
460
461
462
463
464
465
466
467
|
# File 'lib/vimamsa/editor.rb', line 459
def message(s)
s = "[#{DateTime.now().strftime("%H:%M")}] #{s}"
debug s
$vmag.add_to_minibuf(s)
end
|
#minibuffer_cancel ⇒ Object
433
434
435
436
437
438
|
# File 'lib/vimamsa/editor.rb', line 433
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
455
456
457
|
# File 'lib/vimamsa/editor.rb', line 455
def minibuffer_delete()
$minibuffer.delete(BACKWARD_CHAR)
end
|
#minibuffer_end ⇒ Object
426
427
428
429
430
431
|
# File 'lib/vimamsa/editor.rb', line 426
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
440
441
442
443
444
445
446
447
448
449
|
# File 'lib/vimamsa/editor.rb', line 440
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
debug "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
575
576
577
|
# File 'lib/vimamsa/editor.rb', line 575
def open_existing_file(filename)
open_new_file(filename)
end
|
#open_file_dialog ⇒ Object
301
302
303
304
305
|
# File 'lib/vimamsa/editor.rb', line 301
def open_file_dialog()
path = ""
path = vma.buf.fname if vma.buf.fname
gui_open_file_dialog(File.dirname(path))
end
|
#open_new_file(filename, file_contents = "") ⇒ Object
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
|
# File 'lib/vimamsa/editor.rb', line 579
def open_new_file(filename, file_contents = "")
filename = File.expand_path(filename)
b = vma.buffers.get_buffer_by_filename(filename)
if b != nil
message "Switching to: #{filename}"
vma.buffers.set_current_buffer(b)
else
message "New file opened: #{filename}"
fname = filename
bf = load_buffer(fname)
vma.buffers.set_current_buffer_by_id(bf.id)
end
end
|
#open_url(url) ⇒ Object
625
626
627
|
# File 'lib/vimamsa/editor.rb', line 625
def open_url(url)
system("xdg-open", url)
end
|
#open_with_default_program(url) ⇒ Object
629
630
631
|
# File 'lib/vimamsa/editor.rb', line 629
def open_with_default_program(url)
system("xdg-open", url)
end
|
#page_down ⇒ Object
88
89
90
91
|
# File 'lib/vimamsa/gui.rb', line 88
def page_down
$view.signal_emit("move-cursor", Gtk::MovementStep.new(:PAGES), 1, false)
return true
end
|
#page_up ⇒ Object
83
84
85
86
|
# File 'lib/vimamsa/gui.rb', line 83
def page_up
$view.signal_emit("move-cursor", Gtk::MovementStep.new(:PAGES), -1, false)
return true
end
|
#paste_register(char) ⇒ Object
680
681
682
683
|
# File 'lib/vimamsa/editor.rb', line 680
def paste_register(char)
$c = $register[char]
message("Paste: #{$c}")
end
|
#paste_system_clipboard ⇒ Object
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
|
# File 'lib/vimamsa/gui.rb', line 93
def paste_system_clipboard()
utf8_string = Gdk::Atom.intern("UTF8_STRING")
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
153
154
155
156
157
158
159
|
# File 'lib/vimamsa/util.rb', line 153
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
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
138
139
140
|
# File 'lib/vimamsa/util.rb', line 111
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
|
#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
|
#repeat_last_action ⇒ Object
355
356
357
358
|
# File 'lib/vimamsa/editor.rb', line 355
def repeat_last_action()
cmd = $command_history.last
cmd[:method].call *cmd[:params] if cmd != nil
end
|
#repeat_last_find ⇒ Object
360
361
362
363
364
|
# File 'lib/vimamsa/editor.rb', line 360
def repeat_last_find()
return if !defined? $last_find_command
vma.buf.jump_to_next_instance_of_char($last_find_command[:char],
$last_find_command[:direction])
end
|
#run_as_idle(p) ⇒ Object
Run idle proc once Delay execution of proc until Gtk has fully processed the last calls.
3
4
5
6
7
8
9
|
# File 'lib/vimamsa/util.rb', line 3
def run_as_idle(p)
if p.class == Proc
Thread.new {
GLib::Idle.add(proc { p.call; false })
}
end
end
|
#run_cmd(cmd) ⇒ Object
633
634
635
636
637
638
639
640
|
# File 'lib/vimamsa/editor.rb', line 633
def run_cmd(cmd)
tmpf = Tempfile.new("vmarun", "/tmp").path
cmd = "#{cmd} > #{tmpf}"
debug "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
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
138
139
140
141
142
143
|
# File 'lib/vimamsa/debug.rb', line 112
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(vma.buf)
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(vma.buf)
vma.buffers.set_current_buffer(rand(vma.buffers.size)) if rand > 0.25
step += 1
end
end
|
#run_test(test_id) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/vimamsa/debug.rb', line 87
def run_test(test_id)
target_results = read_file("", "tests/test_#{test_id}_output.txt")
old_buffer = vma.buf
vma.buf = Buffer.new("", "")
load "tests/test_#{test_id}.rb"
test_ok = vma.buf.to_s.strip == target_results.strip
puts "##################"
puts target_results
puts "##################"
puts vma.buf.to_s
puts "##################"
puts "TEST OK" if test_ok
puts "TEST FAILED" if !test_ok
puts "##################"
vma.buf = old_buffer
end
|
#run_tests ⇒ Object
82
83
84
85
|
# File 'lib/vimamsa/debug.rb', line 82
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 = vma.buffers.collect { |buf| buf.fname }.inspect
f.write(bufstr)
f.close()
end
|
#savedebug(message, e) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/vimamsa/debug.rb', line 51
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
64
65
66
67
68
|
# File 'lib/vimamsa/rbvma.rb', line 64
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
595
596
597
598
599
|
# File 'lib/vimamsa/editor.rb', line 595
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
55
56
57
|
# File 'lib/vimamsa/actions.rb', line 48
def search_actions()
l = []
opt = { :title => "Search actions.", :desc => "Fuzzy search for actions. <up> or <down> to change selcted. <enter> to select current." }
$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",
opt)
end
|
#search_actions_select_callback(search_str, idx) ⇒ Object
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'lib/vimamsa/actions.rb', line 101
def search_actions_select_callback(search_str, idx)
item = $item_list[idx][2]
acc = item[0][:action]
debug "Selected:" + acc.to_s
gui_select_window_close(0)
if acc.class == String
eval(acc)
elsif acc.class == Symbol
debug "Symbol"
call(acc)
end
end
|
#search_actions_update_callback(search_str = "") ⇒ Object
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/vimamsa/actions.rb', line 61
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] = ""
for mode_str in ["C", "V"]
c_kbd = vma.kbd.act_bindings[mode_str][act_id]
if c_kbd.class == String
item[:key] = "[#{mode_str} #{c_kbd}] "
break
end
end
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)
debug a.inspect
r = a.collect { |x| [x[0][0], 0, x] }
debug r.inspect
$item_list = r
r = a.collect { |x| ["#{x[0][:key]}#{x[0][:str]}", 0, x] }
return r
end
|
#set_clipboard(s) ⇒ Object
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
# File 'lib/vimamsa/editor.rb', line 323
def set_clipboard(s)
if !(s.class <= String) or s.size == 0
debug s.inspect
debug [s, s.class, s.size]
log_error("s.class != String or s.size == 0")
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
7
8
9
|
# File 'lib/vimamsa/conf.rb', line 7
def set_conf(id, val)
$cnf[id] = val
end
|
#set_cursor_pos(new_pos) ⇒ Object
338
339
340
341
342
|
# File 'lib/vimamsa/editor.rb', line 338
def set_cursor_pos(new_pos)
buf.set_pos(new_pos)
debug "New pos: #{new_pos}lpos:#{vma.buf.lpos} cpos:#{vma.buf.cpos}"
end
|
#set_last_command(cmd) ⇒ Object
344
345
346
|
# File 'lib/vimamsa/editor.rb', line 344
def set_last_command(cmd)
$command_history << cmd
end
|
#set_next_command_count(num) ⇒ Object
366
367
368
369
370
371
372
373
|
# File 'lib/vimamsa/editor.rb', line 366
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
675
676
677
678
|
# File 'lib/vimamsa/editor.rb', line 675
def set_register(char)
$cur_register = char
message("Set register #{char}")
end
|
#set_system_clipboard(arg) ⇒ Object
121
122
123
|
# File 'lib/vimamsa/gui.rb', line 121
def set_system_clipboard(arg)
vma.gui.window.display.clipboard.set(arg)
end
|
#setcnf(id, val) ⇒ Object
11
12
13
|
# File 'lib/vimamsa/conf.rb', line 11
def setcnf(id, val)
set_conf(id, val)
end
|
#show_key_bindings ⇒ Object
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
|
# File 'lib/vimamsa/editor.rb', line 381
def show_key_bindings()
kbd_s = "❙Key bindings❙\n"
kbd_s << "\n⦁[Mode] keys : action⦁\n"
kbd_s << "[B]=Browse, [C]=Command, [I]=Insert, [V]=Visual\n"
kbd_s << "key!: Press key once, release before pressing any other keys\n"
kbd_s << "===============================================\n"
kbd_s << vma.kbd.to_s
kbd_s << "\n"
kbd_s << "===============================================\n"
b = create_new_buffer(kbd_s,"key-bindings")
gui_set_file_lang(b.id, "hyperplaintext")
end
|
#start_minibuffer_cmd(bufname, bufstr, cmd) ⇒ Object
375
376
377
378
379
|
# File 'lib/vimamsa/editor.rb', line 375
def start_minibuffer_cmd(bufname, bufstr, cmd)
vma.kbd.set_mode(:minibuffer)
$minibuffer = Buffer.new(bufstr, "")
$minibuffer.call_func = method(cmd)
end
|
#start_ripl ⇒ Object
145
146
147
|
# File 'lib/vimamsa/debug.rb', line 145
def start_ripl
Ripl.start :binding => binding
end
|
#system_clipboard_changed(clipboard_contents) ⇒ Object
308
309
310
311
312
313
314
315
316
317
|
# File 'lib/vimamsa/editor.rb', line 308
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
|
#translate_path(fn, bf) ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/vimamsa/hyper_plain_text.rb', line 38
def translate_path(fn, bf)
if File.exist?(fn)
outfn = fn
elsif fn[0] == "$"
outfn = ppath(fn[1..-1]) elsif fn[0] == "~"
outfn = File.expand_path(fn)
elsif !bf.fname.nil?
pd = File.dirname(bf.fname)
outfn = "#{pd}/#{fn}"
else
outfn = File.expand_path(fn)
end
return outfn
end
|
#unimplemented ⇒ Object
57
58
59
|
# File 'lib/vimamsa/rbvma.rb', line 57
def unimplemented
debug "unimplemented"
end
|
#vma ⇒ Object
55
56
57
|
# File 'lib/vimamsa/main.rb', line 55
def vma()
return $vma
end
|
#which(cmd) ⇒ Object
94
95
96
97
98
99
100
101
102
103
|
# File 'lib/vimamsa/util.rb', line 94
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
2029
2030
2031
2032
2033
2034
2035
|
# File 'lib/vimamsa/buffer.rb', line 2029
def write_to_file(savepath, s)
if is_path_writable(savepath)
IO.write(savepath, self.to_s)
else
message("PATH NOT WRITABLE: #{savepath}")
end
end
|