2021-11-27 21:53:05 +00:00
|
|
|
# Python imports
|
2021-12-07 07:48:52 +00:00
|
|
|
import re
|
2021-11-27 21:53:05 +00:00
|
|
|
|
2021-12-07 04:44:39 +00:00
|
|
|
# Lib imports
|
2021-11-27 21:53:05 +00:00
|
|
|
import gi
|
|
|
|
gi.require_version('Gtk', '3.0')
|
|
|
|
gi.require_version('Gdk', '3.0')
|
2021-12-02 01:22:03 +00:00
|
|
|
from gi.repository import Gtk, Gdk
|
2021-11-27 21:53:05 +00:00
|
|
|
|
|
|
|
# Application imports
|
|
|
|
|
|
|
|
|
2021-12-11 03:05:38 +00:00
|
|
|
valid_keyvalue_pat = re.compile(r"[a-z0-9A-Z-_\[\]\(\)\| ]")
|
2021-12-07 04:44:39 +00:00
|
|
|
|
|
|
|
|
2021-11-27 21:53:05 +00:00
|
|
|
class KeyboardSignalsMixin:
|
2021-12-26 06:32:45 +00:00
|
|
|
def unset_keys_and_data(self, widget=None, eve=None):
|
|
|
|
self.ctrlDown = False
|
|
|
|
self.shiftDown = False
|
|
|
|
self.altDown = False
|
|
|
|
self.is_searching = False
|
|
|
|
|
2021-11-27 21:53:05 +00:00
|
|
|
def global_key_press_controller(self, eve, user_data):
|
|
|
|
keyname = Gdk.keyval_name(user_data.keyval).lower()
|
|
|
|
if "control" in keyname or "alt" in keyname or "shift" in keyname:
|
|
|
|
if "control" in keyname:
|
|
|
|
self.ctrlDown = True
|
|
|
|
if "shift" in keyname:
|
|
|
|
self.shiftDown = True
|
|
|
|
if "alt" in keyname:
|
2021-11-28 02:01:20 +00:00
|
|
|
self.altDown = True
|
2021-11-27 21:53:05 +00:00
|
|
|
|
|
|
|
# NOTE: Yes, this should actually be mapped to some key controller setting
|
|
|
|
# file or something. Sue me.
|
|
|
|
def global_key_release_controller(self, eve, user_data):
|
|
|
|
keyname = Gdk.keyval_name(user_data.keyval).lower()
|
|
|
|
if debug:
|
|
|
|
print(f"global_key_release_controller > key > {keyname}")
|
|
|
|
|
|
|
|
if "control" in keyname or "alt" in keyname or "shift" in keyname:
|
|
|
|
if "control" in keyname:
|
|
|
|
self.ctrlDown = False
|
|
|
|
if "shift" in keyname:
|
|
|
|
self.shiftDown = False
|
|
|
|
if "alt" in keyname:
|
|
|
|
self.altDown = False
|
|
|
|
|
2021-12-07 07:48:52 +00:00
|
|
|
|
2021-12-02 03:20:31 +00:00
|
|
|
if self.ctrlDown and self.shiftDown and keyname == "t":
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2021-12-02 03:20:31 +00:00
|
|
|
self.trash_files()
|
|
|
|
|
2021-12-11 01:06:07 +00:00
|
|
|
|
2021-12-11 03:05:38 +00:00
|
|
|
if re.fullmatch(valid_keyvalue_pat, keyname):
|
|
|
|
if not self.is_searching and not self.ctrlDown \
|
|
|
|
and not self.shiftDown and not self.altDown:
|
|
|
|
focused_obj = self.window.get_focus()
|
|
|
|
if isinstance(focused_obj, Gtk.IconView):
|
2021-12-11 01:06:07 +00:00
|
|
|
self.is_searching = True
|
|
|
|
wid, tid, self.search_view, self.search_iconview, store = self.get_current_state()
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2021-12-11 01:06:07 +00:00
|
|
|
self.popup_search_files(wid, keyname)
|
|
|
|
return
|
|
|
|
|
2021-12-17 00:57:24 +00:00
|
|
|
|
|
|
|
if (self.ctrlDown and keyname in ["1", "kp_1"]):
|
|
|
|
self.builder.get_object("tggl_notebook_1").released()
|
|
|
|
if (self.ctrlDown and keyname in ["2", "kp_2"]):
|
|
|
|
self.builder.get_object("tggl_notebook_2").released()
|
|
|
|
if (self.ctrlDown and keyname in ["3", "kp_3"]):
|
|
|
|
self.builder.get_object("tggl_notebook_3").released()
|
|
|
|
if (self.ctrlDown and keyname in ["4", "kp_4"]):
|
|
|
|
self.builder.get_object("tggl_notebook_4").released()
|
|
|
|
|
2021-11-27 21:53:05 +00:00
|
|
|
if self.ctrlDown and keyname == "q":
|
|
|
|
self.tear_down()
|
|
|
|
if (self.ctrlDown and keyname == "slash") or keyname == "home":
|
|
|
|
self.builder.get_object("go_home").released()
|
2021-11-28 22:01:29 +00:00
|
|
|
if (self.ctrlDown and keyname == "r") or keyname == "f5":
|
2021-11-27 21:53:05 +00:00
|
|
|
self.builder.get_object("refresh_view").released()
|
|
|
|
if (self.ctrlDown and keyname == "up") or (self.ctrlDown and keyname == "u"):
|
|
|
|
self.builder.get_object("go_up").released()
|
|
|
|
if self.ctrlDown and keyname == "l":
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2021-11-27 21:53:05 +00:00
|
|
|
self.builder.get_object("path_entry").grab_focus()
|
|
|
|
if self.ctrlDown and keyname == "t":
|
|
|
|
self.builder.get_object("create_tab").released()
|
|
|
|
if self.ctrlDown and keyname == "o":
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2021-11-27 21:53:05 +00:00
|
|
|
self.open_files()
|
|
|
|
if self.ctrlDown and keyname == "w":
|
|
|
|
self.keyboard_close_tab()
|
|
|
|
if self.ctrlDown and keyname == "h":
|
|
|
|
self.show_hide_hidden_files()
|
|
|
|
if (self.ctrlDown and keyname == "e"):
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2022-02-05 00:25:41 +00:00
|
|
|
self.rename_files()
|
2021-11-27 21:53:05 +00:00
|
|
|
if self.ctrlDown and keyname == "c":
|
|
|
|
self.copy_files()
|
2022-02-15 03:12:07 +00:00
|
|
|
self.to_cut_files.clear()
|
2021-11-27 21:53:05 +00:00
|
|
|
if self.ctrlDown and keyname == "x":
|
|
|
|
self.to_copy_files.clear()
|
|
|
|
self.cut_files()
|
|
|
|
if self.ctrlDown and keyname == "v":
|
|
|
|
self.paste_files()
|
|
|
|
if self.ctrlDown and keyname == "n":
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2021-11-27 21:53:05 +00:00
|
|
|
self.show_new_file_menu()
|
|
|
|
|
2021-12-02 03:20:31 +00:00
|
|
|
|
2021-12-17 00:57:24 +00:00
|
|
|
|
|
|
|
if keyname in ["alt_l", "alt_r"]:
|
|
|
|
top_main_menubar = self.builder.get_object("top_main_menubar")
|
|
|
|
if top_main_menubar.is_visible():
|
|
|
|
top_main_menubar.hide()
|
|
|
|
else:
|
|
|
|
top_main_menubar.show()
|
2021-12-02 01:22:03 +00:00
|
|
|
if keyname == "delete":
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2021-12-02 01:22:03 +00:00
|
|
|
self.delete_files()
|
2021-11-27 21:53:05 +00:00
|
|
|
if keyname == "f2":
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
2021-12-06 03:18:39 +00:00
|
|
|
self.rename_files()
|
2021-11-27 21:53:05 +00:00
|
|
|
if keyname == "f4":
|
2022-02-15 03:12:07 +00:00
|
|
|
self.unset_keys_and_data()
|
|
|
|
self.open_terminal()
|