Odpovedi

Je možné zaměnit Esc a Ё ve Vimu? — Obecné — Fórum

Existuje pohodlná klávesnice s jednou významnou nevýhodou: místo Ё má Esc a pro psaní Ё musíte stisknout Fn+Esc.

Za ty roky dotykového psaní si moje ruce zvykly na automatické klikání na Ё, a proto při psaní ruského textu vždy „vylétnu“ z režimu vkládání. A pak ještě stihnu napsat pár dalších příkazů, než si uvědomím, co se stalo.

Je možné to udělat tak, že když stisknete Esc v režimu vkládání, napíšete ё nebo ` v závislosti na rozložení a když stisknete Fn+Esc, napíšete Esc?

děkuji za pozornost. Mějte dobrou náladu!

NěkteříV
19.02.24. 14. 04 36:XNUMX:XNUMX MSK

  • Odpovězte na tuto zprávu
  • Odkaz

Znovu svažte normální režim na Ctrl+G nebo použijte Ctrl+C. To je mnohem pohodlnější než stisknutí Esc.

anonymní
(19.02.24 14:10:53 MSK)

  • Odpovězte na tuto zprávu
  • Odkaz

Raději bych globálně přeřadil tlačítko v X. Ostatně problém není nejspíš jen ve vim.

firkax ★★★★★
(19.02.24 14:12:06 MSK)

  • Odpovězte na tuto zprávu
  • Ukaž odpověď
  • Odkaz

esc in vim byl náhle nastaven na caps

shTigrity ★★★
(19.02.24 14:26:54 MSK)

  • Odpovězte na tuto zprávu
  • Ukaž odpověď
  • Odkaz

Odpovědět: komentář od firkax 19.02.24/14/12 06:XNUMX:XNUMX MSK

Jen ne v X, ale na nižší úrovni.

t184256 ★★★★★
(19.02.24 14:51:02 MSK)

  • Odpovězte na tuto zprávu
  • Ukaž odpověď
  • Odkaz

Spolehlivější je změnit globálně na nejnižší úrovni přes udev.

písmeno ё je ve skutečnosti klíč s vážným přízvukem – backtick, přízvuk, já nevím. Jak se tomu říká rusky?

Budete potřebovat vstupní kódy klíčů z /linux/include/uapi/linux/input-event-codes.h, kde jsou požadované kódy definovány jako KEY_ESC a KEY_GRAVE. Pro udev to bude velká písmena bez KEY_, tzn. „esc“ a „hrob“. HZ. proč by udev nemohl použít KEY_XXXX jak je napsáno v hlavičce, ale zašroubovat to.

Potřebujeme také hardwarové skenovací kódy nejnižší úrovně pro stisknutí Fn+Esc a Esc, které lze zobrazit například pomocí nástroje evtest.

. нажали Fn+Esc для "ё" или "`" Event: time 1708344434.050540, type 4 (EV_MSC), code 4 (MSC_SCAN), value 29 

Соответственно сейчас KEYBOARD_KEY_29 – «ё» или KEY_GRAVE (grave в udev) и KEYBOARD_KEY_01 – Esc или KEY_ESC (esc в udev)

Надо наоборот, значит в /etc/udev/hwdb.d создаём файлик например yo2esc.hwdb где меняем местами привязку сканкодов и кейкодов input

evdev:input:b0011v0001p0001* KEYBOARD_KEY_29=esc KEYBOARD_KEY_01=grave 

Селектор evdev:input:b0011v0001p0001* делается так

$ grep -E '(^I|^N)' /proc/bus/input/devices . I: Bus=0011 Vendor=0001 Product=0001 Version=ab54 N: Name="AT Translated Set 2 keyboard" . 

Соответственно Bus=0011 -> b0011 , Vendor=0001 -> v0001 , Product=0001 -> p0001 , а дальше пофиг -> * слепляем, получаем искомое b0011v0001p0001*

Потом заставить udev перезагрузить hwdb udevadm hwdb –update и всё. Везде и всегда эта клавиатура будет выдавать нужные эвенты.

Stanson ★★★★★
( 19.02.24 15:12:17 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от t184256 19.02.24 14:51:02 MSK

Přečtěte si více
Zde najdete kompletní pokyny a fotografie pro krok za krokem algoritmus pro výměnu oken s dvojitým zasklením v plastovém okně

Ну или ниже, если можно. А то про иксы я про перебиндивание кнопок слышал какой-то простой командой, а про остальное нет.

firkax ★★★★★
( 19.02.24 15:22:01 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от firkax 19.02.24 15:22:01 MSK

А то про иксы я про перебиндивание кнопок слышал какой-то простой командой

Вероятно, ты слышал про простую команду xmodmap. Это трэш и угар с кучей неочевидных сюрпризов, если используешь setxkbmap, особенно не только для настройки раскладок.

anonymous
( 19.02.24 15:30:54 MSK )

  • Ответить на это сообщение
  • Ссылка

такое нужно делать не на уровне vim, а через keymap/hwdb

mittorn ★★★★★
( 19.02.24 15:38:22 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от shTigrits 19.02.24 14:26:54 MSK

esc в vim, внезапно, был настроен на caps

Caps слишком удобная кнопка чтоб ее тратить на esc. ИМХО, удобнее всего переключать раскладку клавиатуры клавишей caps, а esc в vim забиндить на tab. Если же нужно напечатать символ табуляции то нажимать shift-tab.

Единственное исключение этого подхода – если нужно кодить на языках, где часто приходится печатать символ табуляции.

iron ★★★★★
( 19.02.24 16:08:54 MSK )

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от Stanson 19.02.24 15:12:17 MSK

Предлагаемый метод работает в виртуалке только для её виртуальной клавиатуры, которая определяется как AT Translated Set 2 Keyboard со следующими параметрами: b0011v0001p0001. Однако если в виртуалку пробросить нужную мне клаву, то для неё это не работает. Естественно, все параметры в файле при этом я изменяю на соответствующие этой клавиатуре.

На реальном компьютере этот метод почему-то не работает ни для одной моей клавиатуры.

1-я клавиатура Logitech полноразмерная, подключена через переходник 2шт.PS/2(для клавы и мыши)-to-USB

I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=“Barcode Reader “ I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=«Barcode Reader Mouse» I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=«Barcode Reader System Control» I: Bus=0003 Vendor=13ba Product=0018 Version=0110 N: Name=«Barcode Reader Consumer Control»

evtest для неё выдаёт следующие коды:

^[Event: time 1708362713.459470, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708362713.459470, type 1 (EV_KEY), code 1 (KEY_ESC), value 0

`Event: time 1708362757.851481, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708362757.851481, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 0

И я для неё формирую следующий файл /etc/udev/hwdb.d/yo2esc.hwdb

evdev:input:b0003v13bap0018* KEYBOARD_KEY_70035=esc KEYBOARD_KEY_70029=grave

Далее запускаю udevadm hwdb –update и перезагружаюсь. В виртуалке этого достаточно чтобы начал работать ремап для виртуальной клавиатуры. А на хосте не работает.

2-я клавиатура Redragon 61-клавишная, из-за которой всё и затевается, подключена через USB.

I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic» I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic Keyboard» I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic» I: Bus=0003 Vendor=0c45 Product=5004 Version=0111 N: Name=«SONiX Draconic Mouse»

Přečtěte si více
Rostliny Severní Ameriky: charakteristiky, seznam, popis a fotky

evtest для неё выдаёт те же самые коды коды:

^[Event: time 1708362713.459470, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708362713.459470, type 1 (EV_KEY), code 1 (KEY_ESC), value 0

`Event: time 1708362757.851481, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708362757.851481, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 0

И я для неё формирую следующий файл /etc/udev/hwdb.d/yo2esc.hwdb

evdev:input:b0003v0c45p5004* KEYBOARD_KEY_70035=esc KEYBOARD_KEY_70029=grave

Далее запускаю udevadm hwdb –update и перезагружаюсь. И тоже безрезультатно. Странно, что в виртуалке работает для виртуальной клавиатуры, а для реальной не работает.

Подскажите, что я делаю не так?

SomeV
( 19.02.24 20:21:53 MSK ) автор топика

  • Ответить на это сообщение
  • Показать ответы
  • Ссылка

Ответ на: комментарий от SomeV 19.02.24 20:21:53 MSK

А почему «спойлеры» не сработали? Я помещал вывод между «трёх больше» и «трёх меньше».

SomeV
( 19.02.24 20:24:20 MSK ) автор топика

  • Ответить на это сообщение
  • Ссылка

У меня на прошлой работе был ноутбук с такой инвалидной клавиатурой, страшно мешало.

Mobutu_Sese_Seko ★
( 19.02.24 20:30:03 MSK )

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от SomeV 19.02.24 20:21:53 MSK

Можно попробовать выкинуть 700 из сканкодов. Т.е. KEYBOARD_KEY_35 и KEYBOARD_KEY_29 Вдруг сработает?

Документации к системдешному udev на эту тему я вообще никакой не нашёл сходу, так что по-уму надо лезть в сырцы udev и смотреть, может там тонкости какие-то есть для многобайтовых сканкодов больше 255 (ff).

Для эмулируемой клавиатуры виртуалки работает потому что там сканкоды однобайтные скорее всего.

Ещё можно вот что попробовать – селектор девайса широкий, для любых девайсов – evdev:input:* и evdev:atkbd:* .

Посмотреть на селектор девайса можно втыкая-вытыкая клаву при запущенном udevadm monitor –property | grep MODALIAS

ЗЫ: тут есть разметка, рекомундую почитать описание, чтобы камменты читаемые были.

Stanson ★★★★★
( 19.02.24 22:53:10 MSK )
Последнее исправление: Stanson 19.02.24 23:00:44 MSK (всего исправлений: 1)

  • Ответить на это сообщение
  • Ссылка

Ответ на: комментарий от SomeV 19.02.24 20:21:53 MSK

Отрыл USB клаву, она правда старая и греческая, но сканкоды такие же как у тебя.

. MODALIAS=input:b0003v062Ap0201 . . 

в /etc/udev/hwdb/test.hwdb запихал

evdev:input:b0003v062Ap0201* KEYBOARD_KEY_70035=esc KEYBOARD_KEY_70029=grave 

Переназначение работает без проблем.

Event: time 1708373353.916156, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708373353.916156, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 1 Event: time 1708373353.916156, -------------- SYN_REPORT ------------ `Event: time 1708373354.052083, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029 Event: time 1708373354.052083, type 1 (EV_KEY), code 41 (KEY_GRAVE), value 0 Event: time 1708373354.052083, -------------- SYN_REPORT ------------ Event: time 1708373355.236122, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708373355.236122, type 1 (EV_KEY), code 1 (KEY_ESC), value 1 Event: time 1708373355.236122, -------------- SYN_REPORT ------------ ^[Event: time 1708373355.356182, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70035 Event: time 1708373355.356182, type 1 (EV_KEY), code 1 (KEY_ESC), value 0 Event: time 1708373355.356182, -------------- SYN_REPORT ------------ 

Единственное что – у меня eudev 243.

Přečtěte si více
Cibule zimní cibule Senshui

А, ещё проверь чтобы шестнадцатиричные значения в селекторе evdev:input:… были с заглавными буквами, как udevadm monitor -p выдаёт. У нынешних авторов udev вообще очень странное отношение к этим селекторам и пр. вещам. Как и к документации.

Далее запускаю udevadm hwdb –update и перезагружаюсь. В виртуалке этого достаточно чтобы начал работать ремап для виртуальной клавиатуры. А на хосте не работает.

Ещё, чтобы применилось после udevadm hwdb –update , надо чтобы udev словил ADD, в случае USB клавы достаточно её переподключить.

Stanson ★★★★★
( 19.02.24 23:19:12 MSK )
Последнее исправление: Stanson 19.02.24 23:25:38 MSK (всего исправлений: 2)

  • Ответить на это сообщение
  • Показать ответ
  • Ссылка

Ответ на: комментарий от Stanson 19.02.24 23:19:12 MSK

А, ещё проверь чтобы шестнадцатиричные значения в селекторе evdev:input:… были с заглавными буквами, как udevadm monitor -p выдаёт. У нынешних авторов udev вообще очень странное отношение к этим селекторам и пр. вещам. Как и к документации.

Дело было именно в этом. В поле b0003v0c45p5004* заменил «си» на заглавную, и всё заработало. А ведь можно было догадаться по тому, что в самом начале udev ругнулся следующей фразой: Property expected, ignoring record with no properties , и пришлось отступы табуляцией заменить на отступы пробелами. Это говорит о том, что udev очень «чувствителен» к символам, и ему нужно подавать только пробелы, и только заглавные буквы в данном случае.

udevadm monitor -p действительно выдаёт строку MODALIAS=usb:v0C45p5004. где v0C45 видим с заглавной «С». Хотя в других местах тоже самое приводится со строчной буквой: ID_VENDOR_ID=0c45 , – двойные стандарты в буквальном смысле.

Теперь всё работает как и хотелось – для конкретной клавиатуры выполняется переназначение, а с другими всё по умолчанию.

Stanson , благодарю! Вы мне очень помогли.

И спасибо всем ответившим.

ЗЫ: тут есть разметка, рекомундую почитать описание, чтобы камменты читаемые были.

Да, я сразу попытался скрыть эти большие выводы в спойлеры, но потом увидел, что на форуме спойлеры не работают. А как изменить уже готовый свой ответ не нашёл. Кнопки нет.

SomeV
( 20.02.24 10:27:26 MSK ) автор топика

  • Ответить на это сообщение
  • Ссылка

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button