vimamsa 0.1.18 → 0.1.20

Sign up to get free protection for your applications and to get access to all the features.
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)