vimamsa 0.1.7 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,4 @@
1
1
  require "parallel"
2
-
3
2
  class FileFinder
4
3
  def initialize()
5
4
  $hook.register(:shutdown, self.method("save"))
@@ -42,9 +41,7 @@ def recursively_find_files()
42
41
  for d in $search_dirs
43
42
  debug("FIND FILEs IN #{d}")
44
43
  dlist = dlist + Dir.glob("#{d}/**/*").select { |e| File.file?(e) and $find_extensions.include?(File.extname(e)) }
45
- debug("FIND FILEs IN #{d} END")
46
- end
47
- #$dir_list = Dir.glob('./**/*').select { |e| File.file? e }
44
+ debug("FIND FILEs IN #{d} END") end #$dir_list = Dir.glob('./**/*').select { |e| File.file? e }
48
45
  debug("END find files2")
49
46
  $dir_list = dlist
50
47
  debug("END find files")
@@ -59,22 +56,22 @@ def filter_files(search_str)
59
56
  for s in scores
60
57
  dir_hash[s[0]] = s[1] if s[1] > 0
61
58
  end
62
- # puts scores
59
+ # debug scores
63
60
  dir_hash = dir_hash.sort_by { |k, v| -v }
64
61
  dir_hash = dir_hash[0..20]
65
62
  dir_hash.map do |file, d|
66
- puts "D:#{d} #{file}"
63
+ debug "D:#{d} #{file}"
67
64
  end
68
65
  return dir_hash
69
66
  end
70
67
 
71
68
  def gui_file_finder_update_callback(search_str = "")
72
- puts "FILE FINDER UPDATE CALLBACK: #{search_str}"
69
+ debug "FILE FINDER UPDATE CALLBACK: #{search_str}"
73
70
  if (search_str.size > 1)
74
71
  files = filter_files(search_str)
75
72
  $file_search_list = files
76
73
  return files
77
- #puts files.inspect
74
+ #debug files.inspect
78
75
  #return files.values
79
76
  end
80
77
  return []
@@ -88,7 +85,7 @@ def gui_file_finder_select_callback(search_str, idx)
88
85
  end
89
86
 
90
87
  def gui_file_finder_handle_char(c)
91
- puts "BUFFER SELECTOR INPUT CHAR: #{c}"
88
+ debug "BUFFER SELECTOR INPUT CHAR: #{c}"
92
89
  buffer_i = $select_keys.index(c)
93
90
  if buffer_i != nil
94
91
  gui_file_finder_callback(buffer_i)
@@ -21,7 +21,7 @@ class FileHistory
21
21
  # end
22
22
 
23
23
  def update(buf)
24
- puts "FileHistory.update(buf=#{buf.fname})"
24
+ debug "FileHistory.update(buf=#{buf.fname})"
25
25
  return if !buf.fname
26
26
  @history[buf.fname] if !@history[buf.fname]
27
27
  if !@history[buf.fname]
@@ -29,7 +29,7 @@ class FileHistory
29
29
  else
30
30
  @history[buf.fname] += 1
31
31
  end
32
- puts @history
32
+ debug @history
33
33
 
34
34
  # puts "FileHistory.update(buf=#{buf})"
35
35
  end
@@ -83,7 +83,7 @@ def fuzzy_filter(search_str, list, maxfinds)
83
83
  end
84
84
 
85
85
  def gui_file_history_update_callback(search_str = "")
86
- puts "gui_file_history_update_callback: #{search_str}"
86
+ debug "gui_file_history_update_callback: #{search_str}"
87
87
  return [] if $vma.fh.history.empty?
88
88
  $search_list = []
89
89
  files = $vma.fh.history.keys.sort.collect { |x| [x, 0] }
@@ -27,14 +27,14 @@ class FileManager
27
27
 
28
28
  # bindkey "C o", :delete_state
29
29
 
30
- $kbd.add_minor_mode("fexp", :file_exp, :command)
31
-
30
+ vma.kbd.add_minor_mode("fexp", :file_exp, :command)
31
+
32
32
  bindkey "fexp o m", :fexp_sort_mtime
33
- bindkey "fexp o f", :fexp_sort_fname
33
+ bindkey "fexp o f", :fexp_sort_fname
34
34
 
35
- # bindkey "fexp l", [:fexp_right, proc { puts "==fexp_right==" }, ""]
35
+ # bindkey "fexp l", [:fexp_right, proc { debug "==fexp_right==" }, ""]
36
36
  bindkey "fexp h", :fexp_chdir_parent
37
- bindkey "fexp esc", [:fexp_quit, proc { $kbd.set_mode(:command) }, ""]
37
+ bindkey "fexp esc", [:fexp_quit, proc { FileManager.cur.quit }, ""]
38
38
  bindkey "fexp enter", :fexp_select
39
39
  bindkey "fexp l", :fexp_select
40
40
 
@@ -49,7 +49,7 @@ class FileManager
49
49
  @@cur = self
50
50
  ld = buflist.get_last_dir
51
51
  dir_to_buf(ld)
52
- # puts "ld=#{ld}"
52
+ # debug "ld=#{ld}"
53
53
  # dlist = Dir["#{ld}/*"]
54
54
  end
55
55
 
@@ -65,6 +65,8 @@ class FileManager
65
65
 
66
66
  def dir_to_buf(dirpath, b = nil)
67
67
  # File.stat("testfile").mtime
68
+
69
+ vma.buffers.last_dir = dirpath
68
70
  dirpath = File.expand_path(dirpath)
69
71
  @header = []
70
72
  @header << "#{dirpath}"
@@ -83,7 +85,7 @@ class FileManager
83
85
  next
84
86
  end
85
87
  next if x[0] == "."
86
- if File.directory?(fpath)
88
+ if File.directory?(fpath)
87
89
  # if f.directory?(fpath)
88
90
  @cdirs << x
89
91
  else
@@ -91,9 +93,7 @@ class FileManager
91
93
  end
92
94
  end
93
95
 
94
- # sort_by = :mtime
95
- # sort_by = :name
96
- # Ripl.start :binding => binding
96
+
97
97
  @cfiles.sort_by! { |x| x[1].mtime }.reverse! if @sort_by == :mtime
98
98
  @cfiles.sort_by! { |x| x[1].size }.reverse! if @sort_by == :size
99
99
  @cfiles.sort_by! { |x| x[0] } if @sort_by == :name
@@ -126,10 +126,10 @@ class FileManager
126
126
 
127
127
  def select_line
128
128
  return if @buf.lpos < @header.size
129
- # puts "def select_line"
129
+ # debug "def select_line"
130
130
  fn = fullp(@buf.get_current_line[0..-2])
131
131
  if File.directory?(fn)
132
- puts "CHDIR: #{fn}"
132
+ debug "CHDIR: #{fn}"
133
133
  dir_to_buf(fn)
134
134
  # elsif vma.can_open_extension?(fn)
135
135
  # jump_to_file(fn)
@@ -139,6 +139,9 @@ class FileManager
139
139
  else
140
140
  open_with_default_program(fn)
141
141
  end
142
- # puts l.inspect
142
+ end
143
+
144
+ def quit
145
+ @buf.close
143
146
  end
144
147
  end
data/lib/vimamsa/gui.rb CHANGED
@@ -10,7 +10,7 @@ def gui_open_file_dialog(dirpath)
10
10
  dialog.signal_connect("response") do |dialog, response_id|
11
11
  if response_id == Gtk::ResponseType::ACCEPT
12
12
  open_new_file(dialog.filename)
13
- # puts "uri = #{dialog.uri}"
13
+ # debug "uri = #{dialog.uri}"
14
14
  end
15
15
  dialog.destroy
16
16
  end
@@ -34,7 +34,7 @@ def gui_file_saveas(dirpath)
34
34
  end
35
35
 
36
36
  def idle_func
37
- # puts "IDLEFUNC"
37
+ # debug "IDLEFUNC"
38
38
  if $idle_scroll_to_mark
39
39
  # Ripl.start :binding => binding
40
40
  # $view.get_visible_rect
@@ -45,7 +45,7 @@ def idle_func
45
45
  b = $view.buffer
46
46
  iter = b.get_iter_at(:offset => b.cursor_position)
47
47
  iterxy = $view.get_iter_location(iter)
48
- # puts "ITERXY" + iterxy.inspect
48
+ # debug "ITERXY" + iterxy.inspect
49
49
  # Ripl.start :binding => binding
50
50
 
51
51
  intr = iterxy.intersect(vr)
@@ -103,7 +103,7 @@ def paste_system_clipboard()
103
103
 
104
104
  # clipboard.request_contents(target_string) do |_clipboard, selection_data|
105
105
  # received_text = selection_data.text
106
- # puts "received_text=#{received_text}"
106
+ # debug "received_text=#{received_text}"
107
107
  # end
108
108
  if clipboard.wait_is_text_available?
109
109
  received_text = clipboard.wait_for_text
@@ -116,7 +116,7 @@ def paste_system_clipboard()
116
116
  $paste_lines = false
117
117
  end
118
118
  $clipboard << received_text
119
- # puts $clipboard[-1]
119
+ # debug $clipboard[-1]
120
120
  $clipboard = $clipboard[-([$clipboard.size, max_clipboard_items].min)..-1]
121
121
  end
122
122
  return received_text
@@ -131,30 +131,27 @@ def set_system_clipboard(arg)
131
131
  clipboard.text = arg
132
132
  end
133
133
 
134
- def gui_create_buffer(id)
135
- puts "gui_create_buffer(#{id})"
134
+ def gui_create_buffer(id, bufo)
135
+ debug "gui_create_buffer(#{id})"
136
136
  buf1 = GtkSource::Buffer.new()
137
- view = VSourceView.new()
138
-
139
- view.set_highlight_current_line(true)
140
- view.set_show_line_numbers(true)
141
- view.set_buffer(buf1)
137
+ view = VSourceView.new(nil, bufo)
142
138
 
143
139
  ssm = GtkSource::StyleSchemeManager.new
144
140
  ssm.set_search_path(ssm.search_path << ppath("styles/"))
145
- # sty = ssm.get_scheme("dark")
146
141
  sty = ssm.get_scheme("molokai_edit")
147
- # puts ssm.scheme_ids
148
142
 
149
- view.buffer.highlight_matching_brackets = true
150
- view.buffer.style_scheme = sty
143
+ buf1.highlight_matching_brackets = true
144
+ buf1.style_scheme = sty
145
+
146
+ view.set_highlight_current_line(true)
147
+ view.set_show_line_numbers(true)
148
+ view.set_buffer(buf1)
151
149
 
152
150
  provider = Gtk::CssProvider.new
153
151
  provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
154
- # provider.load(data: "textview { font-family: Arial; font-size: 12pt; }")
155
152
  view.style_context.add_provider(provider)
156
153
  view.wrap_mode = :char
157
- view.set_tab_width(4) #TODO:add as setting
154
+ view.set_tab_width(conf(:tab_width))
158
155
 
159
156
  $vmag.buffers[id] = view
160
157
  end
@@ -177,25 +174,18 @@ end
177
174
  def gui_select_window_close(arg = nil)
178
175
  end
179
176
 
180
- # def set_window_title(str)
181
- # unimplemented
182
- # end
183
-
184
177
  def gui_set_buffer_contents(id, txt)
185
- # $vbuf.set_text(txt)
186
- puts "gui_set_buffer_contents(#{id}, txt)"
187
-
188
- $vmag.buffers[id].buffer.set_text(txt)
178
+ debug "gui_set_buffer_contents(#{id}, txt)"
179
+ vma.gui.buffers[id].buffer.set_text(txt)
189
180
  end
190
181
 
191
182
  def gui_set_cursor_pos(id, pos)
192
- $view.set_cursor_pos(pos)
193
- # Ripl.start :binding => binding
183
+ vma.buf.view.set_cursor_pos(pos)
194
184
  end
195
185
 
196
186
  def gui_set_current_buffer(id)
197
187
  view = $vmag.buffers[id]
198
- puts "gui_set_current_buffer(#{id}), view=#{view}"
188
+ debug "gui_set_current_buffer(#{id}), view=#{view}"
199
189
  buf1 = view.buffer
200
190
  $vmag.view = view
201
191
  $vmag.buf1 = buf1
@@ -206,17 +196,9 @@ def gui_set_current_buffer(id)
206
196
  $vmag.sw.add(view)
207
197
 
208
198
  view.grab_focus
209
- #view.set_focus(10)
210
199
  view.set_cursor_visible(true)
211
- #view.move_cursor(1, 1, false)
212
200
  view.place_cursor_onscreen
213
201
 
214
- #TODO:
215
- # itr = view.buffer.get_iter_at(:offset => 0)
216
- # view.buffer.place_cursor(itr)
217
-
218
- # wtitle = ""
219
- # wtitle = buf.fname if !buf.fname.nil?
220
202
  $vmag.sw.show_all
221
203
  end
222
204
 
@@ -226,7 +208,7 @@ def gui_set_window_title(wtitle, subtitle = "")
226
208
  end
227
209
 
228
210
  class VMAgui
229
- attr_accessor :buffers, :sw, :view, :buf1, :window
211
+ attr_accessor :buffers, :sw, :view, :buf1, :window, :delex, :statnfo
230
212
 
231
213
  VERSION = "1.0"
232
214
 
@@ -242,6 +224,22 @@ class VMAgui
242
224
  @buffers = {}
243
225
  @view = nil
244
226
  @buf1 = nil
227
+ @img_resizer_active = false
228
+ imgproc = proc {
229
+ GLib::Idle.add(proc {
230
+ if !buf.images.empty?
231
+ vma.gui.scale_all_images
232
+
233
+ w = Gtk::Window.new(:toplevel)
234
+ w.set_default_size(1, 1)
235
+ w.show_all
236
+ Thread.new { sleep 0.1; w.destroy }
237
+ end
238
+
239
+ false
240
+ })
241
+ }
242
+ @delex = DelayExecutioner.new(1, imgproc)
245
243
  end
246
244
 
247
245
  def run
@@ -250,6 +248,38 @@ class VMAgui
250
248
  Gtk.main
251
249
  end
252
250
 
251
+ def delay_scale()
252
+ if Time.now - @dtime > 2.0
253
+ end
254
+ end
255
+
256
+ def scale_all_images
257
+ # puts "scale all"
258
+ for img in buf.images
259
+ if !img[:obj].destroyed?
260
+ img[:obj].scale_image
261
+ end
262
+ end
263
+ end
264
+
265
+ def handle_image_resize
266
+ return if @img_resizer_active == true
267
+ @dtime = Time.now
268
+
269
+ $gcrw = 0
270
+ vma.gui.window.signal_connect "configure-event" do |widget, cr|
271
+ # Ripl.start :binding => binding
272
+
273
+ if $gcrw != cr.width
274
+ @delex.run
275
+ end
276
+ $gcrw = cr.width
277
+ false
278
+ end
279
+
280
+ @img_resizer_active = true
281
+ end
282
+
253
283
  def start_overlay_draw()
254
284
  @da = Gtk::Fixed.new
255
285
  @overlay.add_overlay(@da)
@@ -263,10 +293,10 @@ class VMAgui
263
293
  end
264
294
 
265
295
  def overlay_draw_text(text, textpos)
266
- # puts "overlay_draw_text #{[x,y]}"
296
+ # debug "overlay_draw_text #{[x,y]}"
267
297
  (x, y) = @view.pos_to_coord(textpos)
268
- # puts "overlay_draw_text #{[x,y]}"
269
- label = Gtk::Label.new("<span background='#00000088' foreground='#ff0000' weight='ultrabold'>#{text}</span>")
298
+ # debug "overlay_draw_text #{[x,y]}"
299
+ label = Gtk::Label.new("<span background='#000000ff' foreground='#ff0000' weight='ultrabold'>#{text}</span>")
270
300
  label.use_markup = true
271
301
  @da.put(label, x, y)
272
302
  end
@@ -301,7 +331,7 @@ class VMAgui
301
331
  # istart = @view.get_iter_at_y(vr.y)
302
332
  # startpos = @view.get_iter_at_position_raw(vr.x,vr.y)[1].offset
303
333
  # endpos = @view.get_iter_at_position_raw(vr.x+vr.width,vr.y+vr.height)[1].offset
304
- # puts "startpos,endpos:#{[startpos, endpos]}"
334
+ # debug "startpos,endpos:#{[startpos, endpos]}"
305
335
 
306
336
  da = @da
307
337
  if false
@@ -335,7 +365,7 @@ class VMAgui
335
365
  da.put(label, x, y)
336
366
  end
337
367
 
338
- # puts @view.pos_to_coord(300).inspect
368
+ # debug @view.pos_to_coord(300).inspect
339
369
 
340
370
  @da.show_all
341
371
  end
@@ -370,21 +400,21 @@ class VMAgui
370
400
  overlay = Gtk::Overlay.new
371
401
  overlay.add(sw)
372
402
  # @vpaned.pack2(overlay, :resize => false)
373
- @vbox.attach(overlay, 0, 2, 1, 1)
403
+ @vbox.attach(overlay, 0, 2, 2, 1)
374
404
  # overlay.set_size_request(-1, 50)
375
405
  # $ovrl = overlay
376
406
  # $ovrl.set_size_request(-1, 30)
377
407
  $sw2 = sw
378
408
  sw.set_size_request(-1, 12)
379
409
 
380
- view = VSourceView.new()
410
+ view = VSourceView.new(nil, nil)
381
411
  view.set_highlight_current_line(false)
382
412
  view.set_show_line_numbers(false)
383
413
  # view.set_buffer(buf1)
384
414
  ssm = GtkSource::StyleSchemeManager.new
385
415
  ssm.set_search_path(ssm.search_path << ppath("styles/"))
386
416
  sty = ssm.get_scheme("molokai_edit")
387
- view.buffer.highlight_matching_brackets = false
417
+ view.buffer.highlight_matching_brackets = false #TODO
388
418
  view.buffer.style_scheme = sty
389
419
  provider = Gtk::CssProvider.new
390
420
  # provider.load(data: "textview { font-family: Monospace; font-size: 11pt; }")
@@ -405,7 +435,6 @@ class VMAgui
405
435
  header.title = ""
406
436
  header.has_subtitle = true
407
437
  header.subtitle = ""
408
- # Ripl.start :binding => binding
409
438
 
410
439
  # icon = Gio::ThemedIcon.new("mail-send-receive-symbolic")
411
440
  # icon = Gio::ThemedIcon.new("document-open-symbolic")
@@ -481,69 +510,46 @@ class VMAgui
481
510
 
482
511
  header.pack_start(box)
483
512
  @window.titlebar = header
484
- @window.add(Gtk::TextView.new)
485
- end
486
-
487
- def create_menu_item(label, depth)
488
- menuitem = Gtk::MenuItem.new(:label => label)
489
- menuitem.submenu = create_menu(depth)
490
- @menubar.append(menuitem)
491
- end
492
-
493
- def create_menu(depth)
494
- return nil if depth < 1
495
-
496
- menu = Gtk::Menu.new
497
- last_item = nil
498
- (0..5).each do |i|
499
- j = i + 1
500
- label = "item #{depth} - #{j}"
501
- menu_item = Gtk::RadioMenuItem.new(nil, label)
502
- menu_item.join_group(last_item) if last_item
503
- last_item = menu_item
504
- menu.append(menu_item)
505
- menu_item.sensitive = false if i == 3
506
- menu_item.submenu = create_menu(depth - 1)
507
- end
508
-
509
- menu
513
+ # @window.add(Gtk::TextView.new)
510
514
  end
511
515
 
512
516
  def init_window
513
517
  @window = Gtk::Window.new(:toplevel)
514
- @window.set_default_size(650, 850)
518
+ sh = @window.screen.height
519
+ sw = @window.screen.width
520
+ # TODO:Maximise vertically
521
+ @window.set_default_size((sw * 0.45).to_i, sh - 20)
522
+
515
523
  @window.title = "Multiple Views"
516
524
  @window.show_all
517
- # vpaned = Gtk::Paned.new(:horizontal)
518
525
  @vpaned = Gtk::Paned.new(:vertical)
519
- #@vpaned = Gtk::Box.new(:vertical, 0)
520
- # @vbox = Gtk::Box.new(:vertical, 0)
526
+
521
527
  @vbox = Gtk::Grid.new()
522
528
  @window.add(@vbox)
523
529
 
524
530
  @menubar = Gtk::MenuBar.new
525
531
  @menubar.expand = false
526
-
527
532
 
528
533
  @sw = Gtk::ScrolledWindow.new
529
534
  @sw.set_policy(:automatic, :automatic)
530
535
  @overlay = Gtk::Overlay.new
531
536
  @overlay.add(@sw)
532
537
 
533
- # @vpaned.pack1(@overlay, :resize => true)
534
- # @vpaned.pack2(@menubar, :resize => false)
535
- # @vbox.add(@menubar, :resize => false)
536
-
537
538
  init_header_bar
538
539
 
539
- # @window.show_all
540
+ @statnfo = Gtk::Label.new
541
+ provider = Gtk::CssProvider.new
542
+ provider.load(data: "textview { background-color:#353535; font-family: Monospace; font-size: 10pt; margin-top:4px;}")
543
+ @statnfo.style_context.add_provider(provider)
544
+
545
+ # Deprecated, but found no other way to do it. css doesn't work.
546
+ # TODO: should select color automatically from theme
547
+ @statnfo.override_background_color(Gtk::StateFlags::NORMAL, "#353535")
540
548
 
541
- # @vbox.pack_start(@menubar, :expand => false, :fill => false, :padding => 0 )
542
- # @vbox.pack_start(@menubar)
543
- # @vbox.pack_start(@overlay, :expand => true, :fill => true, :padding => 0 )
544
- # @vbox.pack_start(@overlay, :expand => true, :fill => true, :padding => 0 )
549
+ # column, row, width height
545
550
  @vbox.attach(@menubar, 0, 0, 1, 1)
546
- @vbox.attach(@overlay, 0, 1, 1, 1)
551
+ @vbox.attach(@statnfo, 1, 0, 1, 1)
552
+ @vbox.attach(@overlay, 0, 1, 2, 1)
547
553
  @overlay.vexpand = true
548
554
  @overlay.hexpand = true
549
555
 
@@ -552,11 +558,10 @@ class VMAgui
552
558
 
553
559
  init_minibuffer
554
560
 
555
-
556
561
  @window.show_all
557
562
  vma.start
558
563
  Vimamsa::Menu.new(@menubar)
564
+
559
565
  @window.show_all
560
-
561
566
  end
562
567
  end
@@ -0,0 +1,43 @@
1
+
2
+ # Following this example:
3
+ # https://gabmus.org/posts/create_an_auto-resizing_image_widget_with_gtk3_and_python/
4
+ class ResizableImage < Gtk::DrawingArea
5
+ attr_accessor :fpath, :pixbuf, :oldimg, :draw_image, :view
6
+
7
+ def initialize(fpath, view)
8
+ @fpath = fpath
9
+ @pixbuf = GdkPixbuf::Pixbuf.new(:file => fpath)
10
+ @oldimg = @pixbuf
11
+ @draw_image = @pixbuf
12
+ @view = view
13
+
14
+ super()
15
+ end
16
+
17
+ # Scale to fit window width
18
+ def scale_image()
19
+ pb = @pixbuf
20
+ view = @view
21
+ imglimit = view.visible_rect.width - 10
22
+
23
+ if @oldimg.width > imglimit or @oldimg.width < imglimit - 10
24
+ nwidth = imglimit
25
+ nwidth = pb.width if pb.width < imglimit
26
+ nheight = (pb.height * (nwidth.to_f / pb.width)).to_i
27
+ pb = pb.scale_simple(nwidth, nheight, GdkPixbuf::InterpType::HYPER)
28
+ else
29
+ pb = @oldimg
30
+ end
31
+ @draw_image = pb
32
+ @oldimg = pb
33
+ self.set_size_request(pb.width, pb.height)
34
+
35
+ end
36
+
37
+ def do_draw(da, cr)
38
+ # puts @fpath
39
+ cr.set_source_pixbuf(@draw_image, 0, 0)
40
+ cr.paint
41
+ end
42
+ end
43
+
@@ -4,7 +4,7 @@ module Vimamsa
4
4
  mpath = _mpath.split(".")
5
5
  curnfo = @nfo
6
6
  for y in mpath
7
- puts curnfo.inspect
7
+ debug(curnfo.inspect)
8
8
  if y.equal?(mpath.last)
9
9
  curnfo[y] = x
10
10
  elsif curnfo[y].nil?
@@ -16,12 +16,15 @@ module Vimamsa
16
16
  end
17
17
 
18
18
  def add_menu_items()
19
+
20
+ add_to_menu "File.Example", { :label => "<span foreground='#888888'>Action, [mode] key binding</span>", :action => nil }
19
21
  add_to_menu "File.Save", { :label => "Save", :action => :buf_save }
20
22
  add_to_menu "File.Save as", { :label => "Save As...", :action => :buf_save_as }
21
23
  add_to_menu "File.Open", { :label => "Open", :action => :open_file_dialog }
22
24
 
23
25
  add_to_menu "File.New", { :label => "New file", :action => :buf_new }
24
26
  add_to_menu "File.Revert", { :label => "Reload file from disk", :action => :buf_revert }
27
+ add_to_menu "File.List", { :label => "List open files", :action => :start_buf_manager }
25
28
 
26
29
  add_to_menu "File.Quit", { :label => "Quit", :action => :quit }
27
30
 
@@ -37,8 +40,14 @@ module Vimamsa
37
40
  add_to_menu "Actions.FileHistoryFinder", { :label => "Search files in history", :action => :gui_file_history_finder }
38
41
 
39
42
  add_to_menu "Actions.experimental.Diff", { :label => "Show Diff of\nunsaved changes", :action => :diff_buffer }
40
-
43
+
44
+ add_to_menu "Actions.experimental.EnableDebug", { :label => "Enable debug", :action => :enable_debug }
45
+ add_to_menu "Actions.experimental.DisableDebug", { :label => "Disable debug", :action => :disable_debug }
46
+ add_to_menu "Actions.experimental.ShowImages", { :label => "Show images ⟦img:path⟧", :action => :show_images }
47
+
41
48
  add_to_menu "Actions.EncryptFile", { :label => "Encrypt file", :action => :encrypt_file }
49
+ add_to_menu "Help.KeyBindings", { :label => "Show key bindings", :action => :show_key_bindings }
50
+
42
51
 
43
52
  #TODO: :auto_indent_buffer
44
53