Używanie klawiszy funkcyjnych jako „lepkich” klawiszy modyfikujących

10

Czy istnieje sposób użycia klawisza funkcyjnego (jak <f8>) jako pewnego rodzaju zdarzenia polegającego na zwolnieniu klawisza, a następnie wywołania kolejnego naciśnięcia klawisza (np. S) s-s? Innymi słowy, będzie to podobne do lepkich klawiszy modyfikujących, ale tylko dla emacsa, a nie samego systemu operacyjnego.

Wiem o trybie akordów klawiszowych oraz o tym, że możesz używać takich kombinacji klawiszy (global-set-key (kbd "<f8> b t") 'undo)do zapisywania skrótów klawiaturowych. Ale chciałbym coś, co działa z moimi istniejącymi powiązaniami z superkluczem i nie wymaga ode mnie wiązania wszystkiego dwa razy w przyszłości (tj. Jedno powiązanie dla superklucza i jedno dla klawisza funkcyjnego).

Var87
źródło

Odpowiedzi:

14

Jeśli Twój przepływ pracy to:

  1. Naciśnij i zwolnij F8
  2. Naciśnij i puść s, spodziewaj się, że wyzwoli to wiązanies-s
  3. Jakikolwiek klawisz, który naciśniesz później, nie ma smodyfikatora, chyba że naciśniesz F8ponownie

wtedy ta funkcja istnieje w samym Emacsie . Jest to C-x @ sdomyślnie związane (wyraźnie przeznaczone tylko do sporadycznego użytku). Polecenie jest event-apply-super-modifier(podobne funkcje istnieją control, shift, meta, alti hyper). Domyślne powiązania są w function-key-map, które są zastępowane przez powiązania w globalnych lub lokalnych mapach klawiszy. Możesz użyć key-translation-mapzamiast tego, jeśli chcesz, aby znaczenie modyfikatora zastosowania miało pierwszeństwo.

(define-key function-key-map [f8] 'event-apply-super-modifier)
Gilles „SO- przestań być zły”
źródło
Więcej powodów, by kochać Emacsa!
A. Blizzard