Philipp Hörist pushed to branch master at gajim / gajim


Commits:
c6561cec by lovetox at 2021-12-10T22:46:48+01:00
Add possibility to set custom shortcuts

- - - - -


4 changed files:

- gajim/application.py
- gajim/common/configpaths.py
- gajim/common/helpers.py
- + gajim/data/other/shortcuts.json


Changes:

=====================================
gajim/application.py
=====================================
@@ -55,6 +55,7 @@
 from gajim.common.storage.archive import MessageArchiveStorage
 from gajim.common.settings import Settings
 from gajim.common.settings import LegacyConfig
+from gajim.common.helpers import load_json
 
 
 class GajimApplication(Gtk.Application):
@@ -209,7 +210,7 @@ def _startup(self, _application):
         self.interface = Interface()
         self.interface.run(self)
         self.add_actions()
-        self._set_shortcuts()
+        self._load_shortcuts()
         from gajim import gui_menu_builder
         gui_menu_builder.build_accounts_menu()
         self.update_app_actions_state()
@@ -470,41 +471,18 @@ def update_app_actions_state(self):
         enabled_accounts = app.settings.get_active_accounts()
         self.lookup_action('start-chat').set_enabled(enabled_accounts)
 
-    def _set_shortcuts(self):
-        shortcuts = {
-            'app.quit': ['<Primary>Q'],
-            'app.shortcuts': ['<Primary>question'],
-            'app.preferences': ['<Primary>P'],
-            'app.plugins': ['<Primary>E'],
-            'app.xml-console': ['<Primary><Shift>X'],
-            'app.file-transfer': ['<Primary>T'],
-            'app.ipython': ['<Primary><Alt>I'],
-            'app.start-chat::': ['<Primary>N'],
-            'app.create-groupchat::': ['<Primary>G'],
-            'win.change-nickname': ['<Primary><Shift>N'],
-            'win.change-subject': ['<Primary><Shift>S'],
-            'win.escape': ['Escape'],
-            'win.send-file': ['<Primary>F'],
-            'win.show-contact-info': ['<Primary>I'],
-            'win.show-emoji-chooser': ['<Primary><Shift>M'],
-            'win.clear-chat': ['<Primary>L'],
-            'win.delete-line': ['<Primary>U'],
-            'win.close-tab': ['<Primary>W'],
-            'win.switch-next-tab': ['<Primary>Page_Down'],
-            'win.switch-prev-tab': ['<Primary>Page_Up'],
-            'win.switch-next-unread-tab': ['<Primary>Tab'],
-            'win.switch-prev-unread-tab': ['<Primary>ISO_Left_Tab'],
-            'win.switch-tab-1': ['<Alt>1', '<Alt>KP_1'],
-            'win.switch-tab-2': ['<Alt>2', '<Alt>KP_2'],
-            'win.switch-tab-3': ['<Alt>3', '<Alt>KP_3'],
-            'win.switch-tab-4': ['<Alt>4', '<Alt>KP_4'],
-            'win.switch-tab-5': ['<Alt>5', '<Alt>KP_5'],
-            'win.switch-tab-6': ['<Alt>6', '<Alt>KP_6'],
-            'win.switch-tab-7': ['<Alt>7', '<Alt>KP_7'],
-            'win.switch-tab-8': ['<Alt>8', '<Alt>KP_8'],
-            'win.switch-tab-9': ['<Alt>9', '<Alt>KP_9'],
-            'win.search-history': ['<Primary>H'],
-        }
+    def _load_shortcuts(self):
+        default_path = configpaths.get('DATA') / 'other' / 'shortcuts.json'
+        shortcuts = load_json(default_path)
+        assert shortcuts is not None
+
+        user_path = configpaths.get('MY_SHORTCUTS')
+        user_shortcuts = {}
+        if user_path.exists():
+            app.log('app').info('Load user shortcuts')
+            user_shortcuts = load_json(user_path, default={})
+
+        shortcuts.update(user_shortcuts)
 
         for action, accels in shortcuts.items():
             self.set_accels_for_action(action, accels)


=====================================
gajim/common/configpaths.py
=====================================
@@ -200,6 +200,7 @@ def init(self):
             ('PLUGINS_CONFIG_DIR',
              'pluginsconfig', PathLocation.CONFIG, PathType.FOLDER),
             ('MY_CERT', 'localcerts', PathLocation.CONFIG, PathType.FOLDER),
+            ('MY_SHORTCUTS', 'shortcuts.json', PathLocation.CONFIG, 
PathType.FILE),
         ]
 
         for path in unique_profile_paths:


=====================================
gajim/common/helpers.py
=====================================
@@ -812,7 +812,9 @@ def helper(self, restart=False):
         return func(self)
     return helper
 
-def load_json(path, key=None, default=None):
+def load_json(path: Path,
+              key: Optional[str] = None,
+              default: Optional[Any] = None) -> Any:
     try:
         with path.open('r') as file:
             json_dict = json.loads(file.read())


=====================================
gajim/data/other/shortcuts.json
=====================================
@@ -0,0 +1,34 @@
+{
+    "app.quit": ["<Primary>Q"],
+    "app.shortcuts": ["<Primary>question"],
+    "app.preferences": ["<Primary>P"],
+    "app.plugins": ["<Primary>E"],
+    "app.xml-console": ["<Primary><Shift>X"],
+    "app.file-transfer": ["<Primary>T"],
+    "app.ipython": ["<Primary><Alt>I"],
+    "app.start-chat::": ["<Primary>N"],
+    "app.create-groupchat::": ["<Primary>G"],
+    "win.change-nickname": ["<Primary><Shift>N"],
+    "win.change-subject": ["<Primary><Shift>S"],
+    "win.escape": ["Escape"],
+    "win.send-file": ["<Primary>F"],
+    "win.show-contact-info": ["<Primary>I"],
+    "win.show-emoji-chooser": ["<Primary><Shift>M"],
+    "win.clear-chat": ["<Primary>L"],
+    "win.delete-line": ["<Primary>U"],
+    "win.close-tab": ["<Primary>W"],
+    "win.switch-next-tab": ["<Primary>Page_Down"],
+    "win.switch-prev-tab": ["<Primary>Page_Up"],
+    "win.switch-next-unread-tab": ["<Primary>Tab"],
+    "win.switch-prev-unread-tab": ["<Primary>ISO_Left_Tab"],
+    "win.switch-tab-1": ["<Alt>1", "<Alt>KP_1"],
+    "win.switch-tab-2": ["<Alt>2", "<Alt>KP_2"],
+    "win.switch-tab-3": ["<Alt>3", "<Alt>KP_3"],
+    "win.switch-tab-4": ["<Alt>4", "<Alt>KP_4"],
+    "win.switch-tab-5": ["<Alt>5", "<Alt>KP_5"],
+    "win.switch-tab-6": ["<Alt>6", "<Alt>KP_6"],
+    "win.switch-tab-7": ["<Alt>7", "<Alt>KP_7"],
+    "win.switch-tab-8": ["<Alt>8", "<Alt>KP_8"],
+    "win.switch-tab-9": ["<Alt>9", "<Alt>KP_9"],
+    "win.search-history": ["<Primary>H"]
+}



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/c6561cecf7f84a9c16b0966ad7cf1696b5d67ae0

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/c6561cecf7f84a9c16b0966ad7cf1696b5d67ae0
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to