Re: ctrl+tab switching
After having used it for a couple of days, I'm happy to report that it works well. (binds in ui/notebook.py & unbinds in resources/meld.css) Thank you! These shortcuts are mightily useful IMO... any chances an MR with these changes would get accepted? cheers Donjan On 29.08.20 01:41, Kai wrote: On Fri, 28 Aug 2020 at 19:40, Donjan Rodic <mailto:dro...@phys.ethz.ch>> wrote: Now I'm not sure if the "next pane" concept refers to just that, switching between left and right. Or if it actually should cycle through the tabs that appear in the top row, which is what I want, as outlined in the original post. That would be "notebook page" concept relevant to the "notebook.set_current_page()" code, e.g. tabbing through 20 comparisons opened from a directory diff view. Sorry, I misread the original post. You're right, and pane switching is not what you want. I'm simply searching for a way to bind the Ctrl+Tab accelerator to something like this pseudocode: notebook.set_current_page(get_current_page()+1) # respectively -1 If you add bind "Tab" { "change-current-page" (1) }; bind "Tab" { "change-current-page" (-1) }; to the CSS in notebook.py, the accelerators will mostly work, provided that focus is on a child of the notebook. You'll also need the CSS unbind. For me there appears to still be something catching Ctrl+Tab when the notebook isn't in the focus chain. cheers, Kai ___ meld-list mailing list meld-list@gnome.org https://mail.gnome.org/mailman/listinfo/meld-list
Re: ctrl+tab switching
Using Meld 3.21.0 from https://download.gnome.org/sources/meld/3.21/meld-3.21.0.tar.xz on Ubuntu 20.04 (Ubuntu 18.04 doesn't have gtksourceview4) with gnome-shell 3.36.4 in the local directory without installing. Firstly some more exposure: changes in meld/resources/meld.css show an effect, for example increasing the status bar border width is reflected upon relaunching the application. Also, changes in meld/accelerators.py work, e.g. rebinding 'view.go-to-line' to any other non-reserved key. I applied the patch to these two files and double checked manually, but without success: Ctrl+Tab and Ctrl+Shift+Tab just cycle through the UI elements, i.e. top bar, left half of the source view, right half of the source view. Now I'm not sure if the "next pane" concept refers to just that, switching between left and right. Or if it actually should cycle through the tabs that appear in the top row, which is what I want, as outlined in the original post. That would be "notebook page" concept relevant to the "notebook.set_current_page()" code, e.g. tabbing through 20 comparisons opened from a directory diff view. I tried 'view.next-pane': ('Page_Down', 'Tab', 'J'), which adds Ctrl+J to the - to me useless - left/right switching behaviour. So independently from the unbinding, 'view.next-pane' appears to be the wrong functionality. I'm simply searching for a way to bind the Ctrl+Tab accelerator to something like this pseudocode: notebook.set_current_page(get_current_page()+1) # respectively -1 Am I understanding this correctly? Best Donjan On 23.08.2020 23:37, Kai via meld-list wrote: I believe that the reason none of your options have worked is that you need to unbind the Ctrl+Tab and Ctrl+Shift+Tab accelerators as well as adding their use. I think if you adapted your (B) attempt and added unbinding of the default handling, it may well work. I've attached something that I tried on current master that appeared to work, but this *will not* work on 3.18.x. cheers, Kai On Sat, 22 Aug 2020 at 19:01, Donjan Rodic wrote: I'm using Meld a lot recently and my productivity would be increased if Ctrl+Tab and Ctrl+Shift+Tab were available for switching to the next, respectively previous, tab (notebook page). I'm aware that GNOME doesn't like this particular shortcut, but I've set it up in every other GNOME application I use (Gedit, gnome-terminal, Nautilus) and find it to be highly efficient. I've tried to hack it unsuccessfully and would like to request some help. This was done on Meld 3.18.0 (default Ubuntu 18.04 repo version). If newer versions help with this particular issue, I'll sideload... updates will eventually catch up. Attempt A) In meldwindow.py:MeldWindow:__init__() write these built-in Gtk methods: from meld.meldapp import app app.set_accels_for_action("win.tab-previous", ["Tab", "Page_Up"]) app.set_accels_for_action("win.tab-next", ["Tab", "Page_Down"]) print(app.get_accels_for_action("win.tab-next")) The keybindings get stored (printed) correctly, but apparently Meld ignores this feature. Attempt B) In meldwindow.py:MeldWindow:__init__(), there is a block "# Add alternate keybindings ..." setting F5 etc. Just below, write: (keyval, mask) = Gtk.accelerator_parse("J") accels.connect(keyval, mask, 0, lambda *_: self.notebook.set_current_page(1)) (keyval, mask) = Gtk.accelerator_parse("Tab") accels.connect(keyval, mask, 0, lambda *_: self.notebook.set_current_page(1)) (keyval, mask) = Gtk.accelerator_parse("KP_Tab") accels.connect(keyval, mask, 0, lambda *_: print("foo")) (keyval, mask) = Gtk.accelerator_parse("ISO_Left_Tab") accels.connect(keyval, mask, 0, lambda *_: print("bar")) Now Ctrl+J correctly switches to the second tab from the left, but Ctrl+Tab and Ctrl+Shift+Tab get ignored (no terminal output either). They do iterate through Meld's icon list at the top, for what that's worth. Attempt C) In filediff.py:FileDiff:on_key_event(), write: if event.state & Gdk.ModifierType.CONTROL_MASK and Gdk.keyval_name(event.keyval) == 'Tab': print("switch to tab right") This correctly prints to the terminal when Ctrl+Tab is pressed. But I'm at a loss on how to hook it up to notebook.set_current_page() here. app = Gtk.Application.get_default() is empty and I can't get a higher parent than self.widget. Attempt D) In meldwindow.py:MeldWindow:__init__(), register the signal: self.connect("key-press-event",self.on_key_press_event) #... def on_key_press_event(self, windo
ctrl+tab switching
I'm using Meld a lot recently and my productivity would be increased if Ctrl+Tab and Ctrl+Shift+Tab were available for switching to the next, respectively previous, tab (notebook page). I'm aware that GNOME doesn't like this particular shortcut, but I've set it up in every other GNOME application I use (Gedit, gnome-terminal, Nautilus) and find it to be highly efficient. I've tried to hack it unsuccessfully and would like to request some help. This was done on Meld 3.18.0 (default Ubuntu 18.04 repo version). If newer versions help with this particular issue, I'll sideload... updates will eventually catch up. Attempt A) In meldwindow.py:MeldWindow:__init__() write these built-in Gtk methods: from meld.meldapp import app app.set_accels_for_action("win.tab-previous", ["Tab", "Page_Up"]) app.set_accels_for_action("win.tab-next", ["Tab", "Page_Down"]) print(app.get_accels_for_action("win.tab-next")) The keybindings get stored (printed) correctly, but apparently Meld ignores this feature. Attempt B) In meldwindow.py:MeldWindow:__init__(), there is a block "# Add alternate keybindings ..." setting F5 etc. Just below, write: (keyval, mask) = Gtk.accelerator_parse("J") accels.connect(keyval, mask, 0, lambda *_: self.notebook.set_current_page(1)) (keyval, mask) = Gtk.accelerator_parse("Tab") accels.connect(keyval, mask, 0, lambda *_: self.notebook.set_current_page(1)) (keyval, mask) = Gtk.accelerator_parse("KP_Tab") accels.connect(keyval, mask, 0, lambda *_: print("foo")) (keyval, mask) = Gtk.accelerator_parse("ISO_Left_Tab") accels.connect(keyval, mask, 0, lambda *_: print("bar")) Now Ctrl+J correctly switches to the second tab from the left, but Ctrl+Tab and Ctrl+Shift+Tab get ignored (no terminal output either). They do iterate through Meld's icon list at the top, for what that's worth. Attempt C) In filediff.py:FileDiff:on_key_event(), write: if event.state & Gdk.ModifierType.CONTROL_MASK and Gdk.keyval_name(event.keyval) == 'Tab': print("switch to tab right") This correctly prints to the terminal when Ctrl+Tab is pressed. But I'm at a loss on how to hook it up to notebook.set_current_page() here. app = Gtk.Application.get_default() is empty and I can't get a higher parent than self.widget. Attempt D) In meldwindow.py:MeldWindow:__init__(), register the signal: self.connect("key-press-event",self.on_key_press_event) #... def on_key_press_event(self, window, event): print("key press event") crashes with "AttributeError: connect", unless I let MeldWindow additionally inherit from melddoc.MeldDoc or GObject.GObject and call melddoc.MeldDoc.__init__(self) respectively GObject.Object.__init__(self) , in which case it simply doesn't know the signal name. Also, inheriting from Gtk.Window yields File "/usr/lib/python3/dist-packages/meld/ui/gnomeglade.py", line 47, in __init__ self.widget = getattr(self, root) RuntimeError: field is not writable Attempt E) Using an external library pretty much anywhere: from pynput.keyboard import Listener with Listener(on_press=self.my_press, on_release=self.my_release) as listener: listener.join() def my_press(key, *_): print("Key pressed: {0}".format(key)) def my_release(key, *_): print("Key released: {0}".format(key)) Works in principle by printing any pressed keys. But it's blocking w.r.t. Meld's loops, so the GUI doesn't show. Help? Best Donjan ___ meld-list mailing list meld-list@gnome.org https://mail.gnome.org/mailman/listinfo/meld-list