1

Я пытаюсь использовать некоторые из французско-канадских сочетаний клавиш, к которым я привык, на английской клавиатуре. Я хотел бы изменить поведение некоторых клавиш. Мне удалось реализовать эти изменения в Vim, но я бы хотел, чтобы они применялись в масштабе всей системы (для Windows и Ubuntu).

Вот что я хочу реализовать:

  • Если я нажму [ a, напечатанный символ будет â .

  • Когда я нажимаю [ r, то, что должно оставаться нормальным, печатаются символы [r .

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

  • Я хочу отобразить < на ' а символы ' е на è .

    Сложная проблема здесь в том, что я хочу только « рядом с ; ключ для создания символа è , НЕ когда я нажимаю < (переназначен на '), затем e .

Я покажу вам файл .vimrc, который реализует это, теперь я хочу, чтобы это поведение было общесистемным:

set timeout timeoutlen=3000 ttimeoutlen=100
inoremap [a â
inoremap [A Â
inoremap [e ê
inoremap [E Ê
inoremap [i î
inoremap [I Î
inoremap [o ô
inoremap [O Ô
inoremap [u û
inoremap [U Û

inoremap 'a à
inoremap 'A À
inoremap 'e è
inoremap 'E È
inoremap 'u ù
inoremap 'U Ù

inoremap }e ë
inoremap }E Ë
inoremap }i ï
inoremap }I Ï
inoremap }u ü
inoremap }U Ü

inoremap ]c ç
inoremap ]C Ç
inoremap / é
inoremap < '

2 ответа2

3

AutoHotKey, упомянутый harrymc, был решением.

Вот часть кода AutoHotKey, которая решает мою конкретную проблему. Недостающие буквы могут быть легко добавлены.

StringCaseSense On

; circumflex accents
$[::
Send [
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = a
{
    Send {backspace}â
    return
}
Send %Char%
return

; grave accents
$'::
Send '
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = a
{
    Send {backspace}à
    return
}
Send %Char%
return

; trema
+]::
Send {}}
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = e
{
    Send {backspace}ë
    return
}
Send %Char%
return

; cedilla
$]::
Send ]
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = c
{
    Send {backspace}ç
    return
}
Send %Char%
return

; other fixes
$<::
Send '
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char =
{
    Send {backspace}<
    return
}
Send %Char%
return

$/::
Send é
Input, Char, T2 L1, {delete}{esc}{home}{end}
if (Char = "")
{
    Send {backspace}/
    return
}
Send %Char%
return

$?::
Send É
Input, Char, T2 L1, {delete}{esc}{home}{end}
if (Char = "")
{
    Send {backspace}?
    return
}
Send %Char%
return
3

AutoHotkey (AHK) может делать все это и многое другое, но доступно только для Windows, где у меня есть опыт работы с этим замечательным макро-рекордером, который вырос в полноценную среду программирования.

Для Linux существует кроссплатформенная версия, которая запускает AHK в Linux под .NET или MONO: IronAHK, но у меня нет опыта работы с ней.

Статья Установка IronAHK на Linux может быть полезной.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .