vimamsa 0.1.13 → 0.1.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/custom_example.rb +12 -0
  3. data/lib/vimamsa/ack.rb +3 -4
  4. data/lib/vimamsa/actions.rb +1 -2
  5. data/lib/vimamsa/audio.rb +25 -1
  6. data/lib/vimamsa/buffer.rb +116 -591
  7. data/lib/vimamsa/buffer_changetext.rb +272 -0
  8. data/lib/vimamsa/buffer_cursor.rb +303 -0
  9. data/lib/vimamsa/buffer_list.rb +137 -133
  10. data/lib/vimamsa/buffer_manager.rb +15 -15
  11. data/lib/vimamsa/clipboard.rb +36 -0
  12. data/lib/vimamsa/conf.rb +136 -5
  13. data/lib/vimamsa/constants.rb +0 -10
  14. data/lib/vimamsa/debug.rb +9 -8
  15. data/lib/vimamsa/editor.rb +57 -84
  16. data/lib/vimamsa/encrypt.rb +6 -11
  17. data/lib/vimamsa/file_history.rb +0 -8
  18. data/lib/vimamsa/file_manager.rb +142 -10
  19. data/lib/vimamsa/gui.rb +106 -85
  20. data/lib/vimamsa/gui_dialog.rb +113 -0
  21. data/lib/vimamsa/gui_menu.rb +5 -1
  22. data/lib/vimamsa/gui_sourceview.rb +46 -29
  23. data/lib/vimamsa/gui_sourceview_autocomplete.rb +141 -0
  24. data/lib/vimamsa/gui_text.rb +49 -0
  25. data/lib/vimamsa/hyper_plain_text.rb +19 -5
  26. data/lib/vimamsa/key_actions.rb +41 -202
  27. data/lib/vimamsa/key_binding_tree.rb +129 -41
  28. data/lib/vimamsa/key_bindings_vimlike.rb +58 -48
  29. data/lib/vimamsa/langservp.rb +23 -3
  30. data/lib/vimamsa/macro.rb +35 -25
  31. data/lib/vimamsa/main.rb +7 -10
  32. data/lib/vimamsa/rbvma.rb +13 -11
  33. data/lib/vimamsa/search.rb +1 -1
  34. data/lib/vimamsa/search_replace.rb +106 -160
  35. data/lib/vimamsa/terminal.rb +34 -0
  36. data/lib/vimamsa/tests.rb +122 -0
  37. data/lib/vimamsa/util.rb +43 -4
  38. data/lib/vimamsa/version.rb +1 -1
  39. data/vimamsa.gemspec +5 -2
  40. metadata +59 -9
  41. /data/lib/vimamsa/{form_generator.rb → gui_form_generator.rb} +0 -0
data/lib/vimamsa/debug.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "fileutils"
2
2
 
3
3
  def debug(message, severity = 1)
4
- if $debug
4
+ if cnf.debug?
5
5
  if severity > 1
6
6
  # Add red colour and bold for attention
7
7
  # https://en.wikipedia.org/wiki/ANSI_escape_code
@@ -18,7 +18,7 @@ def debug_print_buffer(c)
18
18
  end
19
19
 
20
20
  def debug_dump_clipboard()
21
- puts $clipboard.inspect
21
+ puts vma.clipboard.inspect
22
22
  end
23
23
 
24
24
  def debug_dump_deltas()
@@ -41,6 +41,11 @@ def log_error(message)
41
41
  #TODO
42
42
  end
43
43
 
44
+ def show_caller
45
+ puts caller().join("\n")
46
+ end
47
+
48
+
44
49
  def crash(message, e = nil)
45
50
  puts "FATAL ERROR:#{message}"
46
51
  puts caller().join("\n")
@@ -59,8 +64,8 @@ def savedebug(message, e)
59
64
  dbginfo["trace_str"] = dbginfo["trace"].join("\n")
60
65
  dbginfo["edit_history"] = buf.edit_history
61
66
  dbginfo["cnf"] = $cnf
62
- dbginfo["register"] = $register
63
- dbginfo["clipboard"] = $clipboard
67
+ dbginfo["register"] = vma.register
68
+ dbginfo["clipboard"] = vma.clipboard
64
69
  # dbginfo["last_event"] = $last_event
65
70
  dbginfo["buffer"] = {}
66
71
  dbginfo["buffer"]["str"] = buf.to_s
@@ -79,10 +84,6 @@ def savedebug(message, e)
79
84
  puts save_fn_json
80
85
  end
81
86
 
82
- def run_tests()
83
- run_test("01")
84
- run_test("02")
85
- end
86
87
 
87
88
  def run_test(test_id)
88
89
  target_results = read_file("", "tests/test_#{test_id}_output.txt")
@@ -1,26 +1,5 @@
1
1
  require "pty"
2
2
 
3
- def exec_in_terminal(cmd, autoclose = false)
4
- # debug "CMD:#{cmd}"
5
-
6
- # global to prevent garbage collect unlink
7
- $initf = Tempfile.new("bashinit")
8
- # debug $initf.path
9
- $initf.write(cmd)
10
- if autoclose
11
- $initf.write("\nsleep 10; exit;\n")
12
- $initf.write("rm #{$initf.path}\n")
13
- else
14
- $initf.write("rm #{$initf.path}\n")
15
- $initf.write("\nexec bash\n")
16
- end
17
- $initf.close
18
- # PTY.spawn("gnome-terminal", "--tab", "--", "bash", "-i", $initf.path, "-c", "exec bash")
19
- # fork { exec "gnome-terminal", "--tab", "--", "bash", "-i", $initf.path, "-c", "exec bash" }
20
- # Just another execution
21
- fork { exec "gnome-terminal", "--tab", "--", "bash", "-i", $initf.path, "-c", "exec bash" }
22
- end
23
-
24
3
  def handle_drag_and_drop(fname)
25
4
  debug "EDITOR:handle_drag_and_drop"
26
5
  buf.handle_drag_and_drop(fname)
@@ -29,7 +8,7 @@ end
29
8
 
30
9
  class Editor
31
10
  attr_reader :file_content_search_paths, :file_name_search_paths, :gui, :hook, :macro
32
- attr_accessor :converters, :fh, :paint_stack, :kbd, :langsrv
11
+ attr_accessor :converters, :fh, :paint_stack, :kbd, :langsrv, :register, :cur_register, :clipboard
33
12
  #attr_writer :call_func, :update_highlight
34
13
 
35
14
  def initialize()
@@ -46,6 +25,19 @@ class Editor
46
25
  @paint_stack = []
47
26
  @_plugins = {}
48
27
  @errors
28
+ @register = Hash.new("")
29
+ @cur_register = "a"
30
+ @clipboard = Clipboard.new
31
+ end
32
+
33
+ def set_register(char)
34
+ @cur_register = char
35
+ message("Set register #{char}")
36
+ end
37
+
38
+ def paste_register(char)
39
+ $c = @cur_register #TODO:??
40
+ message("Paste: #{$c}")
49
41
  end
50
42
 
51
43
  def open_file_listener(added)
@@ -73,11 +65,15 @@ class Editor
73
65
  @hook = $hook
74
66
  register_plugin(:Hook, @hook)
75
67
  @macro = Macro.new
76
- $macro = @macro
77
- register_plugin(:Macro, $macro)
68
+ register_plugin(:Macro, @macro)
78
69
  $search = Search.new
79
70
  register_plugin(:Search, $search)
80
71
 
72
+ # build_key_bindings_tree
73
+ @kbd = KeyBindingTree.new()
74
+ $kbd = @kbd
75
+ require "vimamsa/key_bindings_vimlike"
76
+
81
77
  $buffers = BufferList.new
82
78
  $minibuffer = Buffer.new(">", "")
83
79
  @langsrv = {}
@@ -85,13 +81,9 @@ class Editor
85
81
  require "vimamsa/text_transforms"
86
82
 
87
83
  debug "ARGV: " + ARGV.inspect
88
- # build_key_bindings_tree
89
- @kbd = KeyBindingTree.new()
90
- $kbd = @kbd
91
- require "vimamsa/key_bindings_vimlike"
84
+
92
85
  sleep(0.03)
93
86
 
94
- FileManager.init
95
87
  BufferManager.init
96
88
 
97
89
  @gui.init_menu
@@ -130,13 +122,17 @@ class Editor
130
122
  custom_script = read_file("", custom_fn)
131
123
  eval(custom_script) if custom_script
132
124
 
133
- if conf(:enable_lsp)
125
+ Grep.init
126
+ FileManager.init
127
+ Autocomplete.init
128
+
129
+ if cnf.lsp.enabled?
134
130
  require "vimamsa/langservp"
135
131
  require "vimamsa/audio" # TODO:config
136
132
  @langsrv["ruby"] = LangSrv.new("ruby")
137
133
  @langsrv["cpp"] = LangSrv.new("cpp")
138
134
  end
139
-
135
+
140
136
  # build_options
141
137
 
142
138
  fname = nil
@@ -306,35 +302,28 @@ def open_file_dialog()
306
302
  gui_open_file_dialog(File.dirname(path))
307
303
  end
308
304
 
309
- #TODO:delete?
310
- def system_clipboard_changed(clipboard_contents)
311
- max_clipboard_items = 100
312
- if clipboard_contents != $clipboard[-1]
313
- #TODO: HACK
314
- $paste_lines = false
305
+ class Clipboard
306
+ def initialize
307
+ @clipboard = []
315
308
  end
316
- $clipboard << clipboard_contents
317
- # debug $clipboard[-1]
318
- $clipboard = $clipboard[-([$clipboard.size, max_clipboard_items].min)..-1]
319
- end
320
309
 
321
- def get_clipboard()
322
- return $clipboard[-1]
323
- end
310
+ def set(s)
311
+ if !(s.class <= String) or s.size == 0
312
+ debug s.inspect
313
+ debug [s, s.class, s.size]
314
+ log_error("s.class != String or s.size == 0")
315
+ return
316
+ end
317
+ @clipboard << s
318
+ set_system_clipboard(s)
319
+ vma.register[vma.cur_register] = s
320
+ debug "SET CLIPBOARD: [#{s}]"
321
+ debug "REGISTER: #{vma.cur_register}:#{vma.register[vma.cur_register]}"
322
+ end
324
323
 
325
- def set_clipboard(s)
326
- if !(s.class <= String) or s.size == 0
327
- debug s.inspect
328
- debug [s, s.class, s.size]
329
- log_error("s.class != String or s.size == 0")
330
- # Ripl.start :binding => binding
331
- return
324
+ def get()
325
+ return @clipboard[-1]
332
326
  end
333
- $clipboard << s
334
- set_system_clipboard(s)
335
- $register[$cur_register] = s
336
- debug "SET CLIPBOARD: [#{s}]"
337
- debug "REGISTER: #{$cur_register}:#{$register[$cur_register]}"
338
327
  end
339
328
 
340
329
  def set_cursor_pos(new_pos)
@@ -459,7 +448,7 @@ def minibuffer_delete()
459
448
  end
460
449
 
461
450
  def error(str)
462
- puts caller[0]
451
+ show_caller
463
452
  debug "#{caller[0]} ERROR: #{str}", 2
464
453
  end
465
454
 
@@ -502,7 +491,7 @@ GUESS_ENCODING_ORDER = [
502
491
  ]
503
492
 
504
493
  def create_new_file(filename = nil, file_contents = "\n")
505
- buffer = Buffer.new(file_contents)
494
+ buffer = Buffer.new(file_contents, filename)
506
495
 
507
496
  debug "NEW FILE CREATED: #{buffer.id}"
508
497
  vma.buffers.add(buffer)
@@ -558,21 +547,21 @@ def load_buffer(fname)
558
547
  return buffer
559
548
  end
560
549
 
561
- def jump_to_file(filename, linenum = nil, charn = nil)
550
+ def jump_to_file(filename, tnum = nil, charn = nil)
562
551
  open_new_file(filename)
563
552
 
564
553
  # Link to character position
565
554
  if !charn.nil?
566
555
  if charn == "c"
567
- buf.jump_to_pos(linenum)
556
+ buf.jump_to_pos(tnum) # tnum=character position
568
557
  center_on_current_line
569
558
  return
570
559
  end
571
560
  end
572
561
 
573
562
  # Link to line
574
- if !linenum.nil?
575
- buf.jump_to_line(linenum)
563
+ if !tnum.nil?
564
+ buf.jump_to_line(tnum) # tnum=line position
576
565
  center_on_current_line
577
566
  return
578
567
  end
@@ -595,6 +584,12 @@ def open_new_file(filename, file_contents = "")
595
584
  if !is_path_writable(filename)
596
585
  message("Path #{filename} cannot be written to")
597
586
  return false
587
+ elsif !File.exist?(filename)
588
+ message("File #{filename} does not exist")
589
+ return false
590
+ elsif !file_is_text_file(filename)
591
+ message("File #{filename} does not contain text")
592
+ return false
598
593
  end
599
594
  message "New file opened: #{filename}"
600
595
  fname = filename
@@ -633,28 +628,6 @@ def get_file_line_pointer(s)
633
628
  return nil
634
629
  end
635
630
 
636
- # TODO: Implement using https://github.com/blackwinter/ruby-filemagic
637
- def file_is_text_file(fpath)
638
- debug "file_is_text_file(#{fpath})"
639
- fpath = File.expand_path(fpath)
640
- return false if !File.exist?(fpath)
641
- r = exec_cmd("file", fpath)
642
- debug "DEBUG:#{r}"
643
- return true if r.match(/UTF-8.*text/)
644
- return true if r.match(/ASCII.*text/)
645
- return false
646
- end
647
-
648
- def set_register(char)
649
- $cur_register = char
650
- message("Set register #{char}")
651
- end
652
-
653
- def paste_register(char)
654
- $c = $register[char]
655
- message("Paste: #{$c}")
656
- end
657
-
658
631
  def find_project_dir_of_fn(fn)
659
632
  pcomp = Pathname.new(fn).each_filename.to_a
660
633
  parent_dirs = (0..(pcomp.size - 2)).collect { |x| "/" + pcomp[0..x].join("/") }.reverse
@@ -1,4 +1,3 @@
1
-
2
1
  require "openssl"
3
2
 
4
3
  class Encrypt
@@ -13,16 +12,16 @@ class Encrypt
13
12
  end
14
13
 
15
14
  def encrypt(text)
16
- cipher=@enc
15
+ cipher = @enc
17
16
  encrypted = cipher.update text
18
17
  encrypted << cipher.final
19
- encrypted = encrypted.unpack('H*')[0].upcase
18
+ encrypted = encrypted.unpack("H*")[0].upcase
20
19
  @enc.reset
21
20
  return encrypted
22
21
  end
23
22
 
24
23
  def decrypt(encrypted)
25
- cipher=@dec
24
+ cipher = @dec
26
25
  encrypted = [encrypted].pack("H*").unpack("C*").pack("c*")
27
26
  plain = cipher.update encrypted
28
27
  plain << cipher.final
@@ -32,16 +31,12 @@ class Encrypt
32
31
  end
33
32
  end
34
33
 
35
- def decrypt_cur_buffer(password, b = nil)
36
- vma.buf.decrypt(password)
37
- end
38
34
 
39
35
  def encrypt_cur_buffer()
40
- callback = proc{|x|encrypt_cur_buffer_callback(x)}
41
- gui_one_input_action("Encrypt", "Password:", "Encrypt", callback,{:hide=>true})
36
+ callback = proc { |x| encrypt_cur_buffer_callback(x) }
37
+ gui_one_input_action("Encrypt", "Password:", "Encrypt", callback, { :hide => true })
42
38
  end
43
39
 
44
- def encrypt_cur_buffer_callback(password,b=nil)
40
+ def encrypt_cur_buffer_callback(password, b = nil)
45
41
  vma.buf.set_encrypted(password)
46
42
  end
47
-
@@ -4,9 +4,6 @@ class FileHistory
4
4
  attr_accessor :history
5
5
 
6
6
  def initialize()
7
- # puts self.method("update")
8
- # x = self.method("update")
9
- # x.call("ASFASF")
10
7
 
11
8
  vma.hook.register(:change_buffer, self.method("update"))
12
9
  vma.hook.register(:shutdown, self.method("save"))
@@ -17,9 +14,6 @@ class FileHistory
17
14
  $search_list = []
18
15
  end
19
16
 
20
- # def self.init()
21
- # end
22
-
23
17
  def update(buf)
24
18
  debug "FileHistory.update(buf=#{buf.fname})"
25
19
  return if !buf.fname
@@ -30,8 +24,6 @@ class FileHistory
30
24
  @history[buf.fname] += 1
31
25
  end
32
26
  debug @history
33
-
34
- # puts "FileHistory.update(buf=#{buf})"
35
27
  end
36
28
 
37
29
  def save()
@@ -1,8 +1,12 @@
1
+ require "fileutils"
2
+
1
3
  class FileManager
2
4
  @@cur
3
5
 
4
6
  def initialize()
5
7
  @buf = nil
8
+ @cut_files = []
9
+ @copied_files = []
6
10
  end
7
11
 
8
12
  def self.chdir_parent()
@@ -14,7 +18,7 @@ class FileManager
14
18
  end
15
19
 
16
20
  def self.init()
17
- reg_act(:start_file_selector, proc { FileManager.new.run; $kbd.set_mode(:file_exp) }, "File selector")
21
+ reg_act(:start_file_selector, proc { FileManager.new.run; vma.kbd.set_mode(:file_exp); }, "File selector")
18
22
 
19
23
  reg_act(:fexp_chdir_parent, proc { FileManager.chdir_parent }, "File selector")
20
24
  reg_act(:fexp_select, proc { buf.module.select_line }, "")
@@ -32,6 +36,19 @@ class FileManager
32
36
  bindkey "fexp o m", :fexp_sort_mtime
33
37
  bindkey "fexp o f", :fexp_sort_fname
34
38
 
39
+ # These are not yet safe to use
40
+ if cnf.fexp.experimental?
41
+ reg_act(:fexp_cut_file, proc { FileManager.cur.cut_file }, "Cut file (to paste elsewhere)")
42
+ reg_act(:fexp_copy_file, proc { FileManager.cur.copy_file }, "Copy file (to paste elsewhere)")
43
+ reg_act(:fexp_delete_file, proc { FileManager.cur.delete_file }, "Delete current file")
44
+ reg_act(:fexp_paste_files, proc { FileManager.cur.paste_files }, "Move previously cut files here")
45
+
46
+ bindkey "fexp d d", :fexp_cut_file
47
+ bindkey "fexp y y", :fexp_copy_file
48
+ bindkey "fexp d D", :fexp_delete_file
49
+ bindkey "fexp p p", :fexp_paste_files
50
+ end
51
+
35
52
  # bindkey "fexp l", [:fexp_right, proc { debug "==fexp_right==" }, ""]
36
53
  bindkey "fexp h", :fexp_chdir_parent
37
54
  bindkey "fexp esc", [:fexp_quit, proc { FileManager.cur.quit }, ""]
@@ -63,18 +80,106 @@ class FileManager
63
80
  dir_to_buf(@ld)
64
81
  end
65
82
 
83
+ def paste_files
84
+ if !@cut_files.empty?
85
+ message "MOVE FILES #{@cut_files.join(",")} TO #{@ld} "
86
+ # Thread.new {
87
+ for fn in @cut_files
88
+ FileUtils.move(fn, @ld)
89
+ debug "FileUtils.move(#{fn}, #{@ld})"
90
+ end
91
+ elsif !@copied_files.empty?
92
+ for fn in @copied_files
93
+ bn = File.basename(fn)
94
+ bnwe = File.basename(fn, ".*")
95
+ ext = File.extname(fn)
96
+ dst = "#{@ld}/#{bn}"
97
+ break if !File.exist?(fn)
98
+ if dst == fn #or File.exist?(dst)
99
+ i = 1
100
+ exists = true
101
+ while File.exist?(dst)
102
+ dst = "#{@ld}/#{bnwe}_copy#{i}#{ext}"
103
+ i += 1
104
+ end
105
+ elsif File.exist?(dst)
106
+ message("File #{dst} already exists")
107
+ break
108
+ #TODO: confirm if user wants to replace existing file
109
+ end
110
+ message "FileUtils.copy_entry(#{fn}, #{dst})"
111
+ FileUtils.copy_entry(fn, dst, preserve = false, dereference_root = false, remove_destination = false)
112
+ end
113
+ else
114
+ message "Nothing to paste, cut/copy some files first!"
115
+ return
116
+ end
117
+ # }
118
+ @cut_files = []
119
+ @copied_files = []
120
+ refresh
121
+ end
122
+
123
+ def cut_file
124
+ fn = cur_file
125
+ debug "CUT FILE #{fn}", 2
126
+ @cut_files << fn
127
+ @copied_files = []
128
+ end
129
+
130
+ def copy_file
131
+ fn = cur_file
132
+ debug "COPY FILE #{fn}", 2
133
+ @copied_files << fn
134
+ @cut_files = []
135
+ end
136
+
137
+ def delete_file_confirmed(*args)
138
+ debug args, 2
139
+ fn = @file_to_delete
140
+ message "Deleting file #{fn}"
141
+ # FileUtils.remove_file(fn)
142
+ FileUtils.remove_entry_secure(fn, force = false)
143
+ refresh
144
+ end
145
+
146
+ def delete_file
147
+ fn = cur_file
148
+ if File.file?(fn)
149
+ @file_to_delete = fn #TODO: set as parameter to confirm_box
150
+ Gui.confirm("Delete the file? \r #{fn}",
151
+ self.method("delete_file_confirmed"))
152
+ elsif File.directory?(fn)
153
+ @file_to_delete = fn #TODO: set as parameter to confirm_box
154
+ Gui.confirm("Delete the directory? \r #{fn}",
155
+ self.method("delete_file_confirmed"))
156
+ else
157
+ message "Can't delete #{fn}"
158
+ end
159
+
160
+ # TODO: FileUtils.remove_dir
161
+
162
+ #TODO:
163
+ end
164
+
66
165
  def dir_to_buf(dirpath, b = nil)
67
166
  # File.stat("testfile").mtime
68
167
 
168
+ debug "last file: #{vma.buffers.last_file}", 2
169
+ lastf = vma.buffers.last_file
170
+ jumpto = nil
171
+ if File.dirname(lastf) == dirpath
172
+ jumpto = File.basename(lastf)
173
+ end
69
174
  vma.buffers.last_dir = dirpath
70
175
  dirpath = File.expand_path(dirpath)
71
176
  @header = []
72
177
  @header << "#{dirpath}"
73
178
  @header << "=" * 40
74
- @ld = dirpath
179
+ @ld = dirpath # Path to current directory
75
180
  @dlist = Dir.children(@ld).sort
76
- @cdirs = []
77
- @cfiles = []
181
+ @cdirs = [] # Dirs in current directory
182
+ @cfiles = [] # Files in current directory
78
183
  for x in @dlist
79
184
  fpath = fullp(x)
80
185
 
@@ -93,7 +198,6 @@ class FileManager
93
198
  end
94
199
  end
95
200
 
96
-
97
201
  @cfiles.sort_by! { |x| x[1].mtime }.reverse! if @sort_by == :mtime
98
202
  @cfiles.sort_by! { |x| x[1].size }.reverse! if @sort_by == :size
99
203
  @cfiles.sort_by! { |x| x[0] } if @sort_by == :name
@@ -105,37 +209,65 @@ class FileManager
105
209
  s << @cdirs.join("\n")
106
210
  s << "\n"
107
211
  s << "\n"
212
+ jumppos = nil
108
213
  for f in @cfiles
214
+ if f[0] == jumpto
215
+ jumppos = s.size
216
+ end
109
217
  s << "#{f[0]}\n"
110
218
  # s << @cfiles.join("\n")
111
219
  end
112
220
 
113
221
  if @buf.nil?
114
- @buf = create_new_buffer(s,"filemgr")
222
+ @buf = create_new_buffer(s, "filemgr")
223
+ @buf.default_mode = :file_exp
115
224
  @buf.module = self
116
225
  @buf.active_kbd_mode = :file_exp
117
226
  else
118
227
  @buf.set_content(s)
119
228
  end
120
- @buf.set_line_and_column_pos(@header.size, 0)
229
+ if jumppos
230
+ @buf.set_pos(jumppos)
231
+ else
232
+ @buf.set_line_and_column_pos(@header.size, 0)
233
+ end
121
234
  end
122
235
 
123
236
  def fullp(fn)
124
237
  "#{@ld}/#{fn}"
125
238
  end
126
239
 
240
+ def refresh
241
+ # TODO: only apply diff
242
+ lpos = @buf.lpos
243
+ # cpos = @buf.cpos
244
+ dir_to_buf(@ld)
245
+ @buf.set_line_and_column_pos(lpos, 0)
246
+ end
247
+
248
+ def cur_file
249
+ return nil if @buf.lpos < @header.size
250
+ fn = fullp(@buf.get_current_line[0..-2])
251
+ return fn
252
+ end
253
+
127
254
  def select_line
128
- return if @buf.lpos < @header.size
255
+ # return if @buf.lpos < @header.size
129
256
  # debug "def select_line"
130
- fn = fullp(@buf.get_current_line[0..-2])
257
+ # fn = fullp(@buf.get_current_line[0..-2])
258
+ fn = cur_file
259
+ return if fn.nil?
131
260
  if File.directory?(fn)
132
261
  debug "CHDIR: #{fn}"
133
262
  dir_to_buf(fn)
134
263
  # elsif vma.can_open_extension?(fn)
135
264
  # jump_to_file(fn)
136
265
  elsif file_is_text_file(fn)
137
- bufs.close_current_buffer
266
+ # bufs.close_current_buffer
138
267
  jump_to_file(fn)
268
+ # vma.buffers.set_current_buffer(idx)
269
+ vma.buffers.close_other_buffer(@buf.id)
270
+
139
271
  else
140
272
  open_with_default_program(fn)
141
273
  end