Як зіставити CTRL + A, CTRL + E, щоб функціонувати як Домашній, Закінчити загальносистемний?


4

Чи є спосіб відобразити CTRL + A і CTRL + E для роботи загальносистемний як перейти до початку рядка і перейти до кінця рядка відповідно?

Тобто. Я хотів би, щоб ці комбінації клавіш легко працювали в будь-якій програмі, а не тільки в терміналі (наприклад, у OSX).

Моя основна система - Ubuntu з робочим столом Unity, але було б добре мати універсальне рішення, яке було б агностиком для настільних комп'ютерів або, принаймні, підтримувалося в Gnome, XFCE і LXDE.


Ctrl-A також використовується screen, яким я користуюся (хіба що tmux доступний). Таким чином, ви повинні ввести Ctrl-A двічі, щоб отримати його. Чи не швидше клацніть мишею, щоб дістатися до потрібної позиції.
ott--

xmodmap не буде робити те, що було запропоновано (а запропонована посилання не відповідає на це запитання).
Thomas Dickey

@MariusMatutiae: xmodmap не може виконувати комбінації клавіш, вона може використовуватися лише для відображення одиночних ключів. @ott: ні, миша вимагає перегляду екрану і вказування в потрібному місці, яке є додатковим навантаженням для очей і пальців.
ccpizza

Припускаючи, що ви використовуєте вікно терміналу, подивіться на утиліту stty.
fpmurphy

@ fpmurphy1: у терміналі CTRL + A і CTRL + E вже працюють як Home / End, припускаючи, що використовується типова оболонка (bash).
ccpizza

Відповіді:


3

xmodmap може здатися, щоб дати відповідь, але це не так, тому що коди клавіш це маніпулює наявними клавішами на клавіатурі, а не змінено клавіші. A контроль A є модифікованим ключем.

xmodmap можна лише перепризначити існуючі коди клавіш або (їх імена) ключі ключів, як зазначено у

keycode NUMBER = KEYSYMNAME ...
keycode any = KEYSYMNAME ...
keysym KEYSYMNAME = KEYSYMNAME ...

Щоб переглянути коди клавіш xmodmap знає, біжить

xmodmap -pk

який показує щось подібне (скорочено для ясності):

There are 4 KeySyms per KeyCode; KeyCodes range from 8 to 255.

    KeyCode Keysym (Keysym) ...
    Value   Value   (Name)  ...

      8     0x0061 (a)      0x0041 (A)      0x00e5 (aring)  0x00c5 (Aring)  
      9     0x0073 (s)      0x0053 (S)      0x00df (ssharp) 0x00cd (Iacute) 
     10     0x0064 (d)      0x0044 (D)      0x08ef (partialderivative)      0x00ce (Icircumflex)    
     11     0x0066 (f)      0x0046 (F)      0x08f6 (function)       0x00cf (Idiaeresis)     
     12     0x0068 (h)      0x0048 (H)      0x01ff (abovedot)       0x00d3 (Oacute) 
     13     0x0067 (g)      0x0047 (G)      0x00a9 (copyright)      0x01bd (doubleacute)    
     14     0x007a (z)      0x005a (Z)      0x07d9 (Greek_OMEGA)    0x00b8 (cedilla)
     ...

xev показує, що насправді відбувається:

KeyPress event, serial 34, synthetic NO, window 0xc00001,
    root 0x111, subw 0xc00002, time 2209364614, (27,43), root:(47,86),
    state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) "^A"
    XmbLookupString gives 1 bytes: (01) "^A"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0xc00001,
    root 0x111, subw 0xc00002, time 2209364773, (27,43), root:(47,86),
    state 0x4, keycode 8 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (01) "^A"
    XFilterEvent returns: False

Модифікатор управління - це 0x4 в державі; XLookupString (одна з кількох пов'язаних функцій для об'єднання ключових подій) перетворює keysym для "a" в ^A (контроль / А).

Тому що для будь-якої з клавіш керування немає ключа ключів, перепризначення кодів клавіш xmodmap не буде можливим для проблеми ОП.

До вирішити Проблема ОП, треба було б мати спосіб сказати операційній системі (по суті) відмовитися від доставки окремих подій для контроль і A - але Linux і X не працюють так. Обмежуючи область застосування до певної програми (xterm) або набору додатків (програми на основі Gtk), можна звертатися до них окремо. Але рішення, яке застосовується для всієї системи, здається нездійсненним.


Користувач може використовувати xev, щоб визначити, які події викликаються натисканням клавіш
steve

Я приймаю це як відповідь, яка в основному говорить, що це неможливо, що ІМО є правильною відповіддю.
ccpizza

Це розчаровує :(
forgetso
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.