vimamsa 0.1.18 → 0.1.20

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.
data/lib/vimamsa/gui.rb CHANGED
@@ -142,7 +142,8 @@ def gui_create_buffer(id, bufo)
142
142
  provider.load(data: "textview { font-family: #{cnf.font.family!}; font-size: #{cnf.font.size!}pt; }")
143
143
  view.style_context.add_provider(provider)
144
144
  view.wrap_mode = :char
145
- view.set_tab_width(conf(:tab_width))
145
+
146
+ view.set_tab_width(cnf.tab.width!)
146
147
 
147
148
  $vmag.buffers[id] = view
148
149
  end
@@ -189,8 +190,8 @@ def gui_set_window_title(wtitle, subtitle = "")
189
190
  end
190
191
 
191
192
  class VMAgui
192
- attr_accessor :buffers, :sw, :sw1, :sw2, :view, :buf1, :window, :delex, :statnfo, :overlay, :sws, :two_c
193
- attr_reader :two_column, :windows, :subtitle, :app
193
+ attr_accessor :buffers, :sw1, :sw2, :view, :buf1, :window, :delex, :statnfo, :overlay, :sws, :two_c
194
+ attr_reader :two_column, :windows, :subtitle, :app, :active_window
194
195
 
195
196
  def initialize()
196
197
  @two_column = false
@@ -219,6 +220,7 @@ class VMAgui
219
220
  t.exit
220
221
  end
221
222
  end
223
+ @app.quit
222
224
  end
223
225
 
224
226
  def scale_all_images
@@ -251,7 +253,7 @@ class VMAgui
251
253
 
252
254
  def start_overlay_draw()
253
255
  @da = Gtk::Fixed.new
254
- @overlay.add_overlay(@da)
256
+ @active_window[:overlay].add_overlay(@da)
255
257
 
256
258
  # @overlay.set_overlay_pass_through(@da, true) #TODO:gtk4
257
259
  end
@@ -259,7 +261,7 @@ class VMAgui
259
261
  def clear_overlay()
260
262
  if @da != nil
261
263
  # @overlay.remove(@da)
262
- @overlay.remove_overlay(@da)
264
+ @active_window[:overlay].remove_overlay(@da)
263
265
  end
264
266
  end
265
267
 
@@ -276,20 +278,6 @@ class VMAgui
276
278
  @da.show
277
279
  end
278
280
 
279
- def remove_overlay_cursor()
280
- if !@cursorov.nil?
281
- @overlay.remove_overlay(@cursorov)
282
- @cursorov = nil
283
- end
284
- end
285
-
286
- def overlay_draw_cursor(textpos)
287
- # return
288
- remove_overlay_cursor
289
- GLib::Idle.add(proc { self.overlay_draw_cursor_(textpos) })
290
- # overlay_draw_cursor_(textpos)
291
- end
292
-
293
281
  # Run proc after animated scrolling has stopped (e.g. after page down)
294
282
  def run_after_scrolling(p)
295
283
  Thread.new {
@@ -306,31 +294,6 @@ class VMAgui
306
294
  }
307
295
  end
308
296
 
309
- # To draw on empty lines and line-ends (where select_range doesn't work)
310
- def overlay_draw_cursor_(textpos)
311
- # Thread.new {
312
- # GLib::Idle.add(proc { p.call; false })
313
- # }
314
-
315
- # while Time.now - @last_adj_time < 0.3
316
- # return true
317
- # end
318
-
319
- remove_overlay_cursor
320
- @cursorov = Gtk::Fixed.new
321
- @overlay.add_overlay(@cursorov)
322
-
323
- (x, y) = @view.pos_to_coord(textpos)
324
- pp [x, y]
325
-
326
- # Trying to draw only background of character "I"
327
- label = Gtk::Label.new("<span background='#00ffaaff' foreground='#00ffaaff' weight='ultrabold'>I</span>")
328
- label.use_markup = true
329
- @cursorov.put(label, x, y)
330
- @cursorov.show
331
- return false
332
- end
333
-
334
297
  def handle_deltas()
335
298
  view.delete_cursor_char
336
299
  while d = buf.deltas.shift
@@ -385,6 +348,7 @@ class VMAgui
385
348
  sw.set_child(view)
386
349
  end
387
350
 
351
+ #TODO: implement in gtk4
388
352
  def init_header_bar()
389
353
  header = Gtk::HeaderBar.new
390
354
  @header = header
@@ -407,13 +371,13 @@ class VMAgui
407
371
  # icon = Gio::ThemedIcon.new("open-menu-symbolic")
408
372
  # image = Gtk::Image.new(:icon => icon, :size => :button)
409
373
  # button.add(image)
410
- # header.pack_end(button)
374
+ # header.append(button)
411
375
 
412
376
  button = Gtk::Button.new
413
377
  icon = Gio::ThemedIcon.new("document-open-symbolic")
414
378
  image = Gtk::Image.new(:icon => icon, :size => :button)
415
379
  button.add(image)
416
- header.pack_end(button)
380
+ header.append(button)
417
381
 
418
382
  button.signal_connect "clicked" do |_widget|
419
383
  open_file_dialog
@@ -423,7 +387,7 @@ class VMAgui
423
387
  icon = Gio::ThemedIcon.new("document-save-symbolic")
424
388
  image = Gtk::Image.new(:icon => icon, :size => :button)
425
389
  button.add(image)
426
- header.pack_end(button)
390
+ header.append(button)
427
391
  button.signal_connect "clicked" do |_widget|
428
392
  buf.save
429
393
  end
@@ -432,7 +396,7 @@ class VMAgui
432
396
  icon = Gio::ThemedIcon.new("document-new-symbolic")
433
397
  image = Gtk::Image.new(:icon => icon, :size => :button)
434
398
  button.add(image)
435
- header.pack_end(button)
399
+ header.append(button)
436
400
  button.signal_connect "clicked" do |_widget|
437
401
  create_new_file
438
402
  end
@@ -467,7 +431,6 @@ class VMAgui
467
431
 
468
432
  header.pack_start(box)
469
433
  @window.titlebar = header
470
- # @window.add(Gtk::TextView.new)
471
434
  end
472
435
 
473
436
  def debug_idle_func
@@ -478,7 +441,7 @@ class VMAgui
478
441
  # @view.check_controllers
479
442
  end
480
443
 
481
- ctrl_fn = File.expand_path("~/.vimamsa/ripl_ctrl")
444
+ ctrl_fn = File.expand_path(get_dot_path("ripl_ctrl"))
482
445
  # Allows to debug in case keyboard handling is lost
483
446
  if File.exist?(ctrl_fn)
484
447
  File.delete(ctrl_fn)
@@ -595,6 +558,8 @@ class VMAgui
595
558
 
596
559
  Gtk::Settings.default.gtk_application_prefer_dark_theme = true
597
560
  Gtk::Settings.default.gtk_theme_name = "Adwaita"
561
+ Gtk::Settings.default.gtk_cursor_blink = false
562
+ Gtk::Settings.default.gtk_cursor_blink_time = 4000
598
563
 
599
564
  app.signal_connect "activate" do
600
565
  @window = Gtk::ApplicationWindow.new(app)
@@ -612,29 +577,22 @@ class VMAgui
612
577
 
613
578
  reset_controllers
614
579
 
615
- @sw = Gtk::ScrolledWindow.new
616
- @sw.set_policy(:automatic, :automatic)
580
+ @windows[1] = new_window(1)
617
581
 
618
582
  @last_adj_time = Time.now
619
- @sw.vadjustment.signal_connect("value-changed") { |x|
620
- # pp x.page_increment
621
- # pp x.page_size
622
- # pp x.step_increment
623
- # pp x.upper
624
- # pp x.value
625
- # pp x
626
- @last_adj_time = Time.now
627
- }
628
583
 
629
- @overlay = Gtk::Overlay.new
630
- @overlay.add_overlay(@sw)
631
584
 
585
+ # To show keyboard key binding state
632
586
  @statnfo = Gtk::Label.new
587
+
588
+ # To show e.g. current folder
633
589
  @subtitle = Gtk::Label.new("")
590
+
634
591
  @statbox = Gtk::Box.new(:horizontal, 2)
635
592
  @statnfo.set_size_request(150, 10)
636
- @statbox.pack_end(@subtitle, :expand => true, :fill => true, :padding => 0)
637
- @statbox.pack_end(@statnfo, :expand => false, :fill => false, :padding => 0)
593
+ @statbox.append(@subtitle)
594
+ @subtitle.hexpand = true
595
+ @statbox.append(@statnfo)
638
596
  provider = Gtk::CssProvider.new
639
597
  @statnfo.add_css_class("statnfo")
640
598
  provider.load(data: "label.statnfo { background-color:#353535; font-size: 10pt; margin-top:2px; margin-bottom:2px; align:right;}")
@@ -643,50 +601,19 @@ class VMAgui
643
601
  @statnfo.style_context.add_provider(provider)
644
602
 
645
603
  # numbers: left, top, width, height
646
- @vbox.attach(@overlay, 0, 2, 2, 1)
647
- @sw.vexpand = true
648
- @sw.hexpand = true
604
+ @vbox.attach(@windows[1][:overlay], 0, 2, 2, 1)
649
605
 
650
606
  # column, row, width height
651
607
  @vbox.attach(@statbox, 1, 1, 1, 1)
652
608
 
653
- @overlay.vexpand = true
654
- @overlay.hexpand = true
655
-
656
609
  init_minibuffer
657
610
 
658
- name = "save"
659
- window = @window
660
- action = Gio::SimpleAction.new(name)
661
- action.signal_connect "activate" do |_simple_action, _parameter|
662
- dialog = Gtk::MessageDialog.new(:parent => window,
663
- :flags => :destroy_with_parent,
664
- :buttons => :close,
665
- :message => "Action FOOBAR activated.")
666
- dialog.signal_connect(:response) do
667
- dialog.destroy
668
- end
669
- dialog.show
670
- end
671
-
672
- @window.add_action(action)
673
- doc_actions = Gio::SimpleActionGroup.new
674
- doc_actions.add_action(action)
675
-
676
- act_quit = Gio::SimpleAction.new("quit")
677
- app.add_action(act_quit)
678
- act_quit.signal_connect "activate" do |_simple_action, _parameter|
679
- window.destroy
680
- exit!
681
- end
682
-
683
611
  menubar = Gio::Menu.new
684
612
  app.menubar = menubar
685
613
  @window.show_menubar = true
686
614
 
687
615
  @menubar = menubar
688
616
 
689
- @windows[1] = { :sw => @sw, :overlay => @overlay, :id => 1 }
690
617
  @active_window = @windows[1]
691
618
 
692
619
  @window.show
@@ -727,23 +654,20 @@ class VMAgui
727
654
  vma.start
728
655
  end
729
656
 
730
- # Vimamsa::Menu.new(@menubar) #TODO:gtk4
731
657
  GLib::Idle.add(proc { self.monitor })
732
658
 
733
659
  app.run
734
-
735
- # @window.show_all
736
- # @window.show
737
660
  end
738
661
 
739
662
  def monitor
663
+ swa = @windows[1][:sw]
740
664
  @monitor_time ||= Time.now
741
- @sw_width ||= @sw.width
665
+ @sw_width ||= swa.width
742
666
  return true if Time.now - @monitor_time < 0.2
743
667
  # Detect element resize
744
- if @sw.width != @sw_width
668
+ if swa.width != @sw_width
745
669
  # puts "@sw.width=#{@sw.width}"
746
- @sw_width = @sw.width
670
+ @sw_width = swa.width
747
671
  DelayExecutioner.exec(id: :scale_images, wait: 0.7, callable: proc { vma.gui.scale_all_images })
748
672
  end
749
673
  @monitor_time = Time.now
@@ -764,54 +688,86 @@ class VMAgui
764
688
 
765
689
  def set_one_column
766
690
  return if !@two_column
691
+ #This always closes the leftmost column/window
692
+ #TODO: close rightmost column if left active
693
+ set_active_window(1)
694
+
767
695
  @windows[2][:sw].set_child(nil)
768
696
  @windows.delete(2)
697
+ w1 = @windows[1]
769
698
 
770
699
  @pane.set_start_child(nil)
771
700
  @pane.set_end_child(nil)
772
701
 
773
702
  @vbox.remove(@pane)
774
- @vbox.attach(@overlay, 0, 2, 2, 1)
775
- @vbox.attach(@statbox, 1, 1, 1, 1)
703
+ @vbox.attach(w1[:overlay], 0, 2, 2, 1)
704
+ # @vbox.attach(@statbox, 1, 1, 1, 1)
776
705
  @two_column = false
777
706
  end
778
707
 
779
- def set_two_column
780
- return if @two_column
781
- # @window.set_default_size(800, 600) #TODO:gtk4
782
- # @vpaned = Gtk::Paned.new(:vertical)
783
- # @vbox = Gtk::Grid.new()
784
- # @window.add(@vbox)
785
-
786
- @sw2 = Gtk::ScrolledWindow.new
787
- @sw2.set_policy(:automatic, :automatic)
788
- @overlay2 = Gtk::Overlay.new
789
- @overlay2.add_overlay(@sw2)
790
- @pane = Gtk::Paned.new(:horizontal)
708
+ def new_window(win_id)
709
+ n_sw = Gtk::ScrolledWindow.new
710
+ n_sw.set_policy(:automatic, :automatic)
711
+ n_overlay = Gtk::Overlay.new
712
+ n_overlay.add_overlay(n_sw)
713
+ # @pane = Gtk::Paned.new(:horizontal)
791
714
 
792
- @windows[2] = { :sw => @sw2, :overlay => @overlay2, :id => 2 }
715
+ win = { :sw => n_sw, :overlay => n_overlay, :id => win_id }
716
+ # @windows[2] = { :sw => @sw2, :overlay => @overlay2, :id => 2 }
793
717
 
794
- @vbox.remove(@overlay)
718
+ # @vbox.remove(@overlay)
795
719
 
796
- @pane.set_start_child(@overlay2)
797
- @pane.set_end_child(@overlay)
720
+ # @pane.set_start_child(@overlay2)
721
+ # @pane.set_end_child(@overlay)
798
722
 
799
723
  # numbers: left, top, width, height
800
- @vbox.attach(@pane, 0, 2, 2, 1)
724
+ # @vbox.attach(@pane, 0, 2, 2, 1)
725
+
726
+ n_sw.vexpand = true
727
+ n_sw.hexpand = true
728
+
729
+ n_overlay.vexpand = true
730
+ n_overlay.hexpand = true
731
+
732
+ # TODO: remove??
733
+ n_sw.vadjustment.signal_connect("value-changed") { |x|
734
+ # pp x.page_increment
735
+ # pp x.page_size
736
+ # pp x.step_increment
737
+ # pp x.upper
738
+ # pp x.value
739
+ # pp x
740
+ # @last_adj_time = Time.now
741
+ }
742
+
743
+ # @sw2.show
744
+ return win
745
+ end
746
+
747
+ def set_two_column
748
+ return if @two_column
749
+ @windows[2] = new_window(2)
750
+
751
+ w1 = @windows[1]
752
+ w2 = @windows[2]
801
753
 
802
- @sw2.vexpand = true
803
- @sw2.hexpand = true
754
+ # Remove overlay from @vbox and add the Gtk::Paned instead
755
+ @pane = Gtk::Paned.new(:horizontal)
756
+ @vbox.remove(w1[:overlay])
757
+ @pane.set_start_child(w2[:overlay])
758
+ @pane.set_end_child(w1[:overlay])
804
759
 
805
- @overlay2.vexpand = true
806
- @overlay2.hexpand = true
760
+ # numbers: left, top, width, height
761
+ @vbox.attach(@pane, 0, 2, 2, 1)
807
762
 
808
- @sw2.show
763
+ w2[:sw].show
809
764
  @two_column = true
810
765
 
811
766
  last = vma.buffers.get_last_visited_id
812
767
  if !last.nil?
813
768
  set_buffer_to_window(last, 2)
814
769
  else
770
+ # If there is only one buffer, create a new one and add to the new window/column
815
771
  bf = create_new_buffer "\n\n", "buff", false
816
772
  set_buffer_to_window(bf.id, 2)
817
773
  end
@@ -831,11 +787,17 @@ class VMAgui
831
787
  end
832
788
  end
833
789
 
834
- # activate that window which has the given view
790
+ # Activate that window which has the given view
835
791
  def set_current_view(view)
792
+ # Window of current view:
836
793
  w = @windows.find { |k, v| v[:sw].child == view }
794
+ # All other windows:
795
+ otherw = @windows.find_all { |k, v| v[:sw].child != view }
837
796
  if !w.nil?
838
797
  set_active_window(w[0])
798
+ for k, x in otherw
799
+ x[:sw].child.focus_out()
800
+ end
839
801
  end
840
802
  end
841
803
 
@@ -850,19 +812,21 @@ class VMAgui
850
812
  end
851
813
 
852
814
  @active_window = @windows[id]
853
- @active_column = id #TODO: remove
815
+ @active_column = id
854
816
 
855
- @sw = @windows[id][:sw]
856
- @overlay = @windows[id][:overlay]
857
-
858
- vma.buffers.set_current_buffer_by_id(@sw.child.bufo.id)
859
-
860
- #TODO: set buf & view of active window??
817
+ @active_window[:sw].child.focus_in()
818
+ for k, w in @windows
819
+ if w != @active_window
820
+ fochild = w[:sw].child
821
+ run_as_idle proc { fochild.focus_out() }
822
+ end
823
+ end
861
824
 
825
+ vma.buffers.set_current_buffer_by_id(@active_window[:sw].child.bufo.id)
862
826
  end
863
827
 
864
828
  def current_view
865
- return @sw.child
829
+ return @active_window[:sw].child
866
830
  end
867
831
 
868
832
  def set_buffer_to_window(bufid, winid)
@@ -873,9 +837,6 @@ class VMAgui
873
837
  @windows[winid][:sw].set_child(view)
874
838
  idle_ensure_cursor_drawn
875
839
 
876
- # @overlay = Gtk::Overlay.new
877
- # @overlay.add_overlay(view)
878
-
879
840
  #TODO:???
880
841
  # @view = view
881
842
  # @buf1 = buf1
@@ -885,10 +846,10 @@ class VMAgui
885
846
  end
886
847
 
887
848
  def set_current_buffer(id)
888
- view = @buffers[id]
849
+ view2 = @buffers[id]
889
850
  debug "vma.gui.set_current_buffer(#{id}), view=#{view}"
890
- buf1 = view.buffer
891
- @view = view
851
+ buf1 = view2.buffer
852
+ @view = view2
892
853
  @buf1 = buf1
893
854
  $view = view
894
855
  $vbuf = buf1
@@ -901,14 +862,17 @@ class VMAgui
901
862
  toggle_active_window
902
863
  else
903
864
  #TODO: improve
904
- @overlay.remove_overlay(@sw)
905
- @sw.set_child(nil)
865
+ swa = @active_window[:sw]
866
+ ol = @active_window[:overlay]
867
+ ol.remove_overlay(swa)
868
+ swa.set_child(nil)
906
869
  # Creating a new ScrolledWindow every time to avoid a layout bug
907
870
  # https://gitlab.gnome.org/GNOME/gtk/-/issues/6189
908
- @sw = new_scrolled_window
909
- @sw.set_child(view)
910
- @overlay.add_overlay(@sw)
911
- @active_window[:sw] = @sw
871
+ swb = new_scrolled_window
872
+ swb.set_child(view2)
873
+ ol.add_overlay(swb)
874
+ @active_window[:view] = view
875
+ @active_window[:sw] = swb
912
876
  end
913
877
  view.grab_focus
914
878
 
@@ -927,18 +891,20 @@ class VMAgui
927
891
  end
928
892
 
929
893
  def page_down(multip: 1.0)
930
- va = @sw.vadjustment
894
+ sw = @active_window[:sw]
895
+ va = sw.vadjustment
931
896
  newval = va.value + va.page_increment * multip
932
897
  va.value = newval
933
- @sw.child.set_cursor_to_top
898
+ sw.child.set_cursor_to_top
934
899
  end
935
900
 
936
901
  def page_up(multip: 1.0)
937
- va = @sw.vadjustment
902
+ sw = @active_window[:sw]
903
+ va = sw.vadjustment
938
904
  newval = va.value - va.page_increment * multip
939
905
  newval = 0 if newval < 0
940
906
  va.value = newval
941
- @sw.child.set_cursor_to_top
907
+ sw.child.set_cursor_to_top
942
908
  end
943
909
 
944
910
  def idle_ensure_cursor_drawn
@@ -40,8 +40,9 @@ class OneInputAction
40
40
  def initialize(main_window, title, field_label, button_title, callback, opt = {})
41
41
  @window = Gtk::Window.new()
42
42
  # @window.screen = main_window.screen
43
- # @window.title = title
44
43
  @window.title = ""
44
+ # @window.width_request = 800
45
+ # @window.hexpand = false
45
46
 
46
47
  frame = Gtk::Frame.new()
47
48
  # frame.margin = 20
@@ -49,15 +50,17 @@ class OneInputAction
49
50
 
50
51
  infolabel = Gtk::Label.new
51
52
  infolabel.markup = title
53
+ infolabel.wrap = true
54
+ infolabel.max_width_chars = 80
55
+
52
56
 
53
57
  vbox = Gtk::Box.new(:vertical, 8)
54
58
  vbox.margin = 10
55
59
  frame.set_child(vbox)
56
60
 
57
61
  hbox = Gtk::Box.new(:horizontal, 8)
58
- # @window.add(hbox)
59
- vbox.pack_end(infolabel, :expand => false, :fill => false, :padding => 0)
60
- vbox.pack_end(hbox, :expand => false, :fill => false, :padding => 0)
62
+ vbox.append(infolabel)
63
+ vbox.append(hbox)
61
64
 
62
65
  button = Gtk::Button.new(:label => button_title)
63
66
  cancel_button = Gtk::Button.new(:label => "Cancel")
@@ -95,10 +98,10 @@ class OneInputAction
95
98
  end
96
99
  end
97
100
 
98
- hbox.pack_end(label, :expand => false, :fill => false, :padding => 0)
99
- hbox.pack_end(@entry1, :expand => false, :fill => false, :padding => 0)
100
- hbox.pack_end(button, :expand => false, :fill => false, :padding => 0)
101
- hbox.pack_end(cancel_button, :expand => false, :fill => false, :padding => 0)
101
+ hbox.append(label)
102
+ hbox.append(@entry1)
103
+ hbox.append(button)
104
+ hbox.append(cancel_button)
102
105
  return
103
106
  end
104
107
 
@@ -49,9 +49,7 @@ class PopupFormGenerator
49
49
  if params.has_key?("title")
50
50
  infolabel = Gtk::Label.new
51
51
  infolabel.markup = params["title"]
52
- #TODO:gtk4
53
- # vbox.pack_start(infolabel, :expand => false, :fill => false, :padding => 0)
54
- vbox.pack_end(infolabel, :expand => false, :fill => false, :padding => 0)
52
+ vbox.append(infolabel)
55
53
  end
56
54
 
57
55
  hbox = Gtk::Box.new(:horizontal, 8)
@@ -61,7 +59,7 @@ class PopupFormGenerator
61
59
  for id, elem in params["inputs"]
62
60
  if elem[:type] == :button
63
61
  button = Gtk::Button.new(:label => elem[:label])
64
- hbox.pack_end(button, :expand => false, :fill => false, :padding => 0)
62
+ hbox.append(button)
65
63
  if elem[:default_focus] == true
66
64
  @default_button = button
67
65
  end
@@ -75,8 +73,8 @@ class PopupFormGenerator
75
73
  if elem.has_key?(:initial_text)
76
74
  entry.text = elem[:initial_text]
77
75
  end
78
- hbox.pack_end(label, :expand => false, :fill => false, :padding => 0)
79
- hbox.pack_end(entry, :expand => false, :fill => false, :padding => 0)
76
+ hbox.append(label)
77
+ hbox.append(entry)
80
78
  @vals[id] = entry
81
79
 
82
80
  press = Gtk::EventControllerKey.new
@@ -96,13 +94,13 @@ class PopupFormGenerator
96
94
  end
97
95
  end
98
96
 
99
- vbox.pack_end(hbox, :expand => false, :fill => false, :padding => 0)
97
+ vbox.append(hbox)
100
98
 
101
99
  cancel_button = Gtk::Button.new(:label => "Cancel")
102
100
  cancel_button.signal_connect "clicked" do
103
101
  @window.destroy
104
102
  end
105
- hbox.pack_end(cancel_button, :expand => false, :fill => false, :padding => 0)
103
+ hbox.append(cancel_button)
106
104
  @cancel_button = cancel_button
107
105
  return
108
106
  end
@@ -1,6 +1,11 @@
1
1
  module Vimamsa
2
2
  class Menu
3
3
  def add_to_menu(_mpath, x)
4
+ # If no menu label provided, take from the action definition
5
+ if !x[:action].nil? and x[:label].nil?
6
+ x[:label] = vma.actions[x[:action]].method_name
7
+ end
8
+
4
9
  mpath = _mpath.split(".")
5
10
  curnfo = @nfo
6
11
  for y in mpath
@@ -31,9 +36,10 @@ module Vimamsa
31
36
  add_to_menu "Edit.Redo", { :label => "Redo edit", :action => :edit_redo }
32
37
  add_to_menu "Edit.SearchReplace", { :label => "Search and replace", :action => :gui_search_replace }
33
38
  add_to_menu "Edit.Find", { :label => "Find", :action => :find_in_buffer }
34
-
35
- add_to_menu "Edit.StartCompletion", { :label => "StartCompletion", :action => :start_autocomplete }
36
- add_to_menu "Edit.ShowCompletion", { :label => "ShowCompletion", :action => :show_autocomplete }
39
+
40
+ # add_to_menu "Edit.StartCompletion", { :label => "StartCompletion", :action => :start_autocomplete }
41
+ # add_to_menu "Edit.ShowCompletion", { :label => "ShowCompletion", :action => :show_autocomplete }
42
+ add_to_menu "Edit.CustomRb", { :action => :edit_customrb }
37
43
 
38
44
  add_to_menu "Actions.SearchForActions", { :label => "Search for Actions", :action => :search_actions }
39
45
 
@@ -46,13 +52,11 @@ module Vimamsa
46
52
  add_to_menu "Actions.experimental.EnableDebug", { :label => "Enable debug", :action => :enable_debug }
47
53
  add_to_menu "Actions.experimental.DisableDebug", { :label => "Disable debug", :action => :disable_debug }
48
54
  add_to_menu "Actions.experimental.ShowImages", { :label => "Show images ⟦img:path⟧", :action => :show_images }
49
-
55
+
50
56
  add_to_menu "Actions.debug.dumpkbd", { :label => "Dump kbd state", :action => :kbd_dump_state }
51
-
52
-
57
+
53
58
  add_to_menu "View.BufferManager", { :label => "Show open files", :action => :start_buf_manager }
54
59
  add_to_menu "View.TwoColumn", { :label => "Toggle two column mode", :action => :toggle_two_column }
55
-
56
60
 
57
61
  add_to_menu "Actions.EncryptFile", { :label => "Encrypt file", :action => :encrypt_file }
58
62
  add_to_menu "Help.KeyBindings", { :label => "Show key bindings", :action => :show_key_bindings }
@@ -89,7 +93,7 @@ module Vimamsa
89
93
  label_str = nfo[:label] + kbd_str
90
94
  actkey = nfo[:action].to_s
91
95
  menuitem = Gio::MenuItem.new(label_str, "app.#{actkey}")
92
-
96
+
93
97
  # This worked in GTK3:
94
98
  # But seems there is no way to access the Label object in GTK4
95
99
  # menuitem.children[0].set_markup(label_str)
@@ -110,7 +114,6 @@ module Vimamsa
110
114
  # menuitem.set_attribute_value("use-markup", true)
111
115
  # This might change in the future(?), but the string version still works in gtk-4.13.0 (gtk/gtkmenutrackeritem.c)
112
116
 
113
-
114
117
  if !nfo[:items].nil? and !nfo[:items].empty?
115
118
  for k2, item in nfo[:items]
116
119
  build_menu(item, menu)
@@ -118,7 +121,6 @@ module Vimamsa
118
121
  menuitem.submenu = menu
119
122
  end
120
123
  o = parent.append_item(menuitem)
121
-
122
124
  end
123
125
  end #end class
124
126
  end
@@ -154,7 +154,9 @@ class SelectUpdateWindow
154
154
  sw = Gtk::ScrolledWindow.new(nil, nil)
155
155
  # sw.shadow_type = :etched_in #TODO:gtk4
156
156
  sw.set_policy(:never, :automatic)
157
- vbox.pack_end(sw, :expand => true, :fill => true, :padding => 0)
157
+ vbox.append(sw)
158
+ sw.vexpand = true
159
+ sw.hexpand = true
158
160
 
159
161
  # sw.add(treeview) #TODO:gtk4
160
162
  sw.set_child(treeview)