Wiązanie Super do Ctrl
Co powiesz na związanie lewego Windows/Logo/Super
klawisza, aby działał jak inny Ctrl
klucz?
Możesz to osiągnąć za pomocą następujących poleceń xmodmap:
remove mod4 = Super_L
keysym Super_L = Control_L
add Control = Control_L
Zakładając, że zapisałeś powyższe linie, ponieważ super_as_ctrl.xmodmap
możesz przetestować efekt poprzez wykonanie
xmodmap super_as_ctrl.xmodmap
Aby zmienić na stałe (przetrwanie przy ponownym logowaniu / ponownym uruchomieniu) zmień nazwę pliku na .Xmodmap
w folderze domowym.
(Powyższe zostało przetestowane na systemie Live Ubuntu 11.10, ale powinno być takie samo dla innych dystrybucji Linuksa)
Dostosowywanie skrótów Kopiuj / Wklej dla programu terminalowego
Po związaniu się Super
z Ctrl
tobą możesz teraz używać Super-C
do kopiowania prawie wszędzie. Jedynym częstym wyjątkiem jest twój program terminalowy. Możesz jednak przedefiniować tam skróty.
Dowiedziałem się, że gnome-terminal
do tej pory ma nawet tę opcję (i tak nie miałem, dopóki się nie przyzwyczaiłem Ctrl-Shift-C
). Jeśli go używasz, przejdź do Edit / Keyboard Shortcuts...
menu i przypisz, Ctrl-C
aby skopiować i Ctrl-V
wkleić. Powinny być podobne dla konsole
itp.
I nie martw się, nie stracisz możliwości zakończenia programu za pomocą skrótu. Po ponownym powiązaniu skrótu kopiowania do terminala możesz używać go Ctrl-Shift-C
tak, jak Ctrl-C
wcześniej. Terminal nie rozróżnia tutaj, czy Shift jest wciśnięty, czy nie. Skrót nie jest już przechwytywany dla kopii. Alternatywnie ponownie powiązaj terminate z innym skrótem, jak sugeruje MountainX w swojej odpowiedzi.
XF86Copy itp. Nie działają
Odnośnie kluczowych symboli kopiowania i wklejania: Najwyraźniej nie mają one wpływu. Przetestowałem to szybko, przypisując działanie kopiowania do Shift-ScrollLock (było nieużywane i chciałem przetestować za pomocą klucza niemodyfikującego):
xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'
Naciśnięcie go nie przyniosło żadnego efektu, ani w XF86AudioMute. Jednak zadziałało przy przypisywaniu litery „a”. Sądzę więc, że istnieje szczególny problem z tymi kluczowymi symbolami specjalnymi XF86.
Jeśli chcesz powiązać tylko kilka sekwencji w postaci Super + x, Super + c, Super + v z innymi sekwencjami, takimi jak Ctrl + x, Ctrl + c, Ctrl + v, na przykład, aby (zgodnie z życzeniem OP) te poszczególne sekwencje superkluczy będą na ogół mapowane do wycinania i wklejania bez wpływu na jakiekolwiek inne użycie klawisza Super w twoim systemie, możliwe jest użycie tylko rozszerzenia XKB. Poniższa procedura przedstawia kroki i podaje dwa różne przykłady szczegółów dla dwóch różnych początkowych konfiguracji klawiatury; mam nadzieję, że dostarczy wystarczających informacji, aby dostosować się do twojego systemu. Zakłada, że nie masz problemów z tworzeniem i edycją plików w systemie, w tym plików w lokalizacjach systemowych, takich jak
/usr/share/X11/xkb
.Zdecyduj, gdzie ma się znajdować drzewo konfiguracji XKB. Najpierw znajdź system pierwszy. Zazwyczaj jest w / usr / share / X11 / xkb i nie jestem pewien, jak go znaleźć, jeśli go nie ma; możesz po prostu przeszukać swój system w poszukiwaniu katalogów o nazwie „xkb”. W każdym razie, gdy go znajdziesz, możesz albo zmodyfikować system jeden na miejscu, albo możesz użyć dowolnego wybranego katalogu. Zaletą korzystania z katalogu systemowego jest to, że można łatwiej wywoływać zmiany, ale wadą jest to, że przyszłe aktualizacje systemu mogą zastąpić zmiany (ostrzeżenie). W każdym razie wszystkie nazwy plików wymienione poniżej odnoszą się do tego katalogu, do którego będę się odwoływać w razie potrzeby jako $ XKBLOCAL $, a wszystkie polecenia zakładają, że to twój bieżący katalog.
Określić, jaki „typ” klucza XKB są obecne klucze x, c, v. Najłatwiej to zrobić za pomocą polecenia
xkbcomp -a $DISPLAY - | grep -C 6 c,
(pamiętaj, że przecinek jest celowo zawarty we wzorcu). W mojej pierwszej przykładowej konfiguracji daje to:podczas gdy w moim innym przykładzie konfiguracja ta powoduje
Wynik jest taki, że w pierwszym przykładzie odpowiednie klucze są typu „ALPHABETIC”, podczas gdy w drugim przykładzie są typu „FOUR_LEVEL”. W zależności od konfiguracji klawiatury może się okazać, że są one innego rodzaju. W dalszej części typ będzie nazywany $ TYPE $, który należy zastąpić rzeczywistym łańcuchem ALPHABETIC lub jakimkolwiek innym poleceniem poniżej.
Znajdź definicję $ TYPE $ i skopiuj ją do nowego pliku w katalogu $ XKBLOCAL $ / types. Oto polecenia, które nie tylko, że:
xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste
. Nazwa pliku „wklejanie”, który wybrałem, jest dowolna, użyj dowolnej nazwy, ale pamiętaj, że będziesz musiał odwoływać się do tego pliku konsekwentnie w późniejszych krokach. W pierwszej instalacji ten plik pobiera zawartośćaw innym przykładzie pobiera treść
Przeprowadź edycję typów plików / wklejania, aby zrobić dwie rzeczy: dodaj preambułę i postamble, dzięki czemu będzie to właściwa klauzula XKB, i zmień nazwę typu i definicję typu, aby dodać jeszcze jeden poziom wytwarzany przez modyfikator odpowiadający Super. Powinieneś sprawdzić, jaki modyfikator znajduje się w twoim systemie, prawdopodobnie jest to Mod4, jak zastosowano poniżej. Niezbędne modyfikacje powinny wynikać z dwóch przykładowych ostatecznych wersji typów / pasty, a mianowicie:
i
Skopiuj definicje symboli klucza, które zostały wyprowadzone przez grep w drugim kroku, do drugiego nowego symbolu pliku / wklejania i dodaj podobną preambułę i postamble, a także zmodyfikuj definicje, aby używać nowych typów i dodaj działania do definicji, aby obsłużyć żądany klucz wyprodukowane przez wersje Super. Rezultaty tego w naszych dwóch przykładach są następujące:
i
Zauważ, że w drugim przykładzie wycisnąłem także trochę (nieistotnych) białych znaków, aby zachować nieco kontrolę nad długością linii.
Znajdź nazwę zestawu reguł, z których obecnie korzysta XKB. To proste, widać to w wyniku
setxkbmap -query
. W moim przypadku było to „evdev”.Skopiuj wersję systemową rules / evdev (lub jakąkolwiek inną nazwę zestawu reguł) do $ XKBLOCAL $ / rules / evdev i dodaj reguły wskazujące na opcje, które stworzyliśmy. Masz tutaj dwie możliwości: możesz skopiować wszystkie evdev lub tylko fragmenty wspominające model klawiatury, układ, wariant i opcje, których faktycznie używasz. Oczywiście, jeśli modyfikujesz pliki systemowe na miejscu, nie musisz kopiować, tylko edytować.
W tym przypadku dodawane elementy są identyczne niezależnie od początkowej konfiguracji klawiatury, więc jest tylko jeden przykład. Znajdziesz sekcję pliku reguł, która zaczyna się od,
! option = symbols
i dodajesz linięcutpaste:super = +cutpaste
do tej sekcji, a także sekcję pliku reguł, który zaczyna się od,! option = types
oraz linięcutpaste:super = +cutpaste
do tej sekcji.Skopiuj wersję systemową evdev.lst i dodaj wiersz dla nowej opcji. Zauważ, że nazwa tego pliku po prostu odpowiada nazwie pliku reguł z dołączonym .lst. Podobnie jak w poprzednim kroku, możesz skopiować cały plik lub tylko część, do której odnosi się model, układ, wariant i używane opcje. Musisz tylko znaleźć sekcję tego pliku, która zaczyna się od
! option
i dodać taką linię:cutpaste:super Add super equivalents of cut and paste operations
do tej sekcji.OK, teraz wszystkie pliki konfiguracyjne są na miejscu. Jeśli zmodyfikowałeś pliki systemowe, możesz teraz wywołać nową opcję za pomocą
setxkbmap -option cutpaste:super
. Z drugiej strony, jeśli tego nie zrobiłeś, musisz poinformować setxkbmap, gdzie znajduje się twój katalog $ XKBLOCAL $. Co gorsza, serwer też nie wie, gdzie jest ten katalog, a setxkbmap nie (lub może nie może, ponieważ ostatecznie serwer może działać na innym komputerze) tego nie mówi. Więc musisz przesłać dane wyjściowe setxkbmap do xkbcomp, a także powiedzieć tej komendzie, gdzie jest twój katalog $ XKBLOCAL. Pełna linia poleceń to dlategosetxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY
.Mam nadzieję, że jest to pomocne / interesujące dla kogoś, ponieważ dobra ostateczna dokumentacja / referencje XKB są rzadkie. Jednym z bardzo pomocnych odniesień był http://madduck.net/docs/extending-xkb/ .
źródło
setxkbmap -option
. Moja lokalna konfiguracja była prawie identyczna z przykładem FOUR_LEVEL, z wyjątkiem niektórych symboli Group2, Group3, które pominąłem w pliku symboli częściowych, więc mój plik wyglądał tak samo jak w przykładach.Oto co robię. To nie jest najlepsze rozwiązanie, ale starałem się osiągnąć najlepsze rozwiązanie i nie mogłem się do niego dostać po wielu wysiłkach. Więc zdecydowałem się na coś, co jest proste i które działa na ponad 90% tego, czego potrzebuję. Mogę zaimplementować go na dowolnym komputerze, do którego się udam (lub przy dowolnej nowej instalacji Linuksa) w ciągu kilku minut. To bardzo proste.
W aplikacji terminalu X ustaw preferencje skrótów. Zrobiłem to w Gnome i KDE. Na przykład w Konsole przejdź do Menu> Ustawienia> Konfiguruj skróty. Podobne menu znajduje się w terminalu Gnome X. Wystarczy wybrać skrót (np. „Kopiuj”) i wprowadzić żądaną sekwencję klawiszy.
W przypadku konfliktu skrótów kopiowania i wklejania terminala z poleceniami terminala istnieje również łatwa poprawka. Na przykład, co jeśli ktoś chce użyć CTRL-C do kopiowania (więc terminal X jest zgodny ze standardem CUA)?
W takim przypadku możesz łatwo zmienić powiązania klawiszy stty (w .bashrc). Kontynuując CTRL-C dla przykładu kopiowania, powiedz, że chcesz, aby klucz przerwania był teraz CTRL-b (dla „break”). Dzięki temu:
Następnie źródło .bashrc.
Całe rozwiązanie jest tak proste, jak używanie ustawień terminali X do zmiany skrótów, a następnie, opcjonalnie, rozwiązywanie konfliktów ze stty za pomocą jednowierszowego polecenia echa. Zupełnie prosty i obejmuje prawie wszystko, czego potrzebuję.
źródło
Prawdopodobnie klawisz Windows to klawisz modyfikujący. uruchom to i spróbuj ponownie:
źródło
xmodmap -e 'remove Mod1 = Meta_L'
i wypróbowywanie poleceń później) działał dla mnie dobrze.Wykorzystałem część tego, co powiedział Glen Whitney i udało mi się wykorzystać tę wiedzę do zmapowania gorzejszego słowa lub manipulacji tekstem z macOS na niestandardową mapę klawiszy.
Rozwiązałem już problem kopiowania i wklejania Ctrl vs Super bez angażowania tego konkretnego rozwiązania, ale jak powiedziałem, było to bardzo pomocne w innych sprawach. Unikałem też takich rzeczy jak xmodmap, ponieważ w pewnym momencie zamierzam w pełni wspierać Wayland. Kinto używa natywnego xkb i respektuje oczekiwane zachowanie systemu macOS, takie jak terminal.
https://github.com/rbreaves/kinto
https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0
Oto także Gist, jeśli chcesz po prostu zobaczyć, co jest w centrum tego wszystkiego, nie zmieni naprzemiennie mapy klawiszy, gdy zajdzie taka potrzeba. Gist nie obejmuje również niestandardowych plików map klawiszy xkb, które konfigurują kursory w stylu macOS / manipulacje słowne wykorzystujące Cmd i klawisze strzałek.
https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb
treść merytoryczna
źródło