2) plugin_util file to assist this and other plugins with key-press Helper function
3) adding Key Binding Help Functions in above (2) to config and preferences->keybinding to have a consistent behavior
Currently, we have a setting for changing the line height (cell height),
but not for changing cell width (both available in VTE).
Depending on the font used, it is useful to have the ability to set a
little more space between characters.
This commit adds a configuration similar to the existing one for line
height, but for character space (cell width scale [1]).
Thanks Matt Rose for helping and encouraging me to implement this.
1. https://lazka.github.io/pgi-docs/Vte-2.91/classes/Terminal.html#Vte.Terminal.set_cell_width_scale
The bug: Gtk.accelerator_parse throws an error if the arg is None.
This means that if one keybinding is set to None, it is impossible to
set any new keybinding.
- Plugins starting with underscore will not be displayed by the
preference/plugins window.
- This allow to add URLhandlers plugins on-the-fly.
- Add the RunCmdOnMatch plugin, which creates URLhandlers plugins
based on a regexp/command pair.
- If an URLhandler plugin returns a prepared URL starting with "terminator://",
then terminator will not try to open it with the URL handler (like xdg-open).
When a key binding is cleared its value is now set to "" (an empty
string) instead of `None` as before.
This change is introduced because `Gtk.accelerator_parse` does not
allow `None` to be used as a value, which in turn breaks
`on_cellrenderer_accel_edited` function in
`terminatorlib/prefseditor.py` by raising a `TypeError` every time a
new key binding is introduced. Note that this only happens if at
least one key binding has been cleared first.
This commit allows to assign the `Shift+Tab` key binding to an action in
`Preferences>Keybindings`.
In GTK the Tab key can be modified by the Shift key. Such a key combination
has a special key value - `Gdk.KEY_ISO_Left_Tab`.
To allow it, `key = key_with_shift.keyval` was added to the code.
However, `Gdk.KEY_ISO_Left_Tab` key value is displayed as `Left Tab` in
`Preferences>Keybindings`, which is confusing as it is not obvious that it
corresponds to the `Shift+Tab` key combination. To make sure that `Shift+Tab`
is displayed as `Shift+Tab`, the `Shift+Tab` case is treated as if no Shift
was pressed at all.
This commit adds tests that check that:
1) Default key binding accelerators are distinct.
2) Message dialog appears when a duplicate key binding accelerator is
attempted to be assigned to a different action.
3) Duplicate key binding accelerator cannot refer to more than one action.
Also, `active_message_dialog` attribute was added to `PrefsEditor`, so
that tests could get a reference to a message dialog window.
This commit forbids setting duplicate key bindings in
`Preferences > Keybindings` tab.
If a duplicate key binding is detected upon editing, such a key binding
is not assigned and instead a message dialog is displayed saying that the
key binding is a duplicate.
This commit allows to set key bindings that contain
a key modified by a Shift key (e.g. `Ctrl + {`).
For example, after pressing `Ctrl + Shift + [`,
a key binding will be set to `Ctrl + {` as opposed
to `Ctrl + Shift + {` as before.
This is achieved by checking whether a key changes its
value when a Shift key is down. If it does, then the
Shift modifier is removed from `mods`. One exception:
if a key binding contains a letter then the Shift
modifier is not removed. This is because, for some
reason, a key value of a letter is never modified by the
Shift modifier and always corresponds to a key value of
a lowercase character. This is already handled in
`terminatorlib/keybindings.py`.
Resolves: #149