Как сделать ^ и `не мертвые клавиши на Windows 7 с немецкой раскладкой клавиатуры
В раскладке немецкой клавиатуры по умолчанию ^
и backtick/forwardtick - это тупики.
Однако, как программист, мне обычно не нужно писать символы, а сами символы. Необходимость дважды нажать клавишу и клавишу возврата или клавишу и пробел в этом случае довольно раздражает.
Поэтому я хотел бы знать, можно ли (и как) изменить эти клавиши, чтобы они сразу же создавали символ, а не ждали второго символа.
1 ответ
Вы можете использовать Microsoft Keyboard Layout Creator для изменения макета. После того, как вы загрузили и установили, сделайте это:
- Нажмите "Файл" и "Загрузить существующую клавиатуру".
- Мертвые клавиши отображаются серым цветом - щелкнув правой кнопкой мыши любую клавишу, вы можете назначить или отменить поведение мертвых клавиш:
Когда вы закончите назначать и отменять назначение, перейдите в "Проект" -> "Свойства" и отредактируйте описание. "Имя" имеет ограничение в 8 символов (по любым причинам), поэтому просто установите для него значение "Deutsch", а для описания - что-то вроде "Deutsch - No Dead Keys" или что угодно.
Когда вы закончите, перейдите в "Проект" и выберите "Построить DLL и установочный пакет". При создании будет указано, что в файле журнала есть некоторые предупреждения, но они, вероятно, могут быть проигнорированы. В следующем запросе вас спросят, хотите ли вы открыть каталог, в который были записаны файлы - если вы это сделаете, вы можете просто установить макет одним щелчком мыши.
Откройте Настройки клавиатуры в Windows, чтобы проверить, была ли новая раскладка клавиатуры добавлена в список Windows. я
Готово!
Я не мог заставить работать метод, основанный на создателе клавиатуры. Вместо этого я придумал сценарий AutoHotKey. Метод определения текущей раскладки клавиатуры взят из раздела Как узнать текущую раскладку клавиатуры?.
Идея состоит в том, чтобы автоматизировать отправку последовательности "мертвый ключ + пробел". Поскольку это будет иметь неправильный эффект для макетов без мертвых клавиш, я фильтрую на основе идентификатора языкового стандарта, который для немецкой клавиатуры соответствует шаблону
0x0407????
. Это значение может быть непереносимым, поскольку раскладки клавиатуры не запрограммированы жестко.
Я подумывал об использовании GetKeyboardLayoutNameA
, но значение иногда оказывается устаревшим.
;;;; ------ NO DEAD KEYS ------
GetCurrentLocaleId()
{
;; Source:
;; https://autohotkey.com/board/topic/
;; 22900-how-to-find-out-what-is-the-current-keyboard-layout/
WinGet, WinID,, A
ThreadID := DllCall("GetWindowThreadProcessId", "Int", WinID, "Int", 0)
InputLocaleID := DllCall("GetKeyboardLayout", "Int", ThreadID)
Return InputLocaleID
}
IsGermanKbdLayout()
{
Return GetCurrentLocaleId()//0x10000 == 0x407
}
#If IsGermanKbdLayout()
SC029::SendRaw % "^ "
SC00D::SendRaw % "´ "
+SC00D::SendRaw % "`` "
;; Find scan codes by viewing script's console > view > key history
FTR
Если вы используете новый терминал Microsoft в качестве ежедневного драйвера терминала (если вы не попробуете его, это просто потрясающе), вы можете отключить мертвые ключи с помощью макроса в своих настройках как такового:
"actions":
[
...
{ "command": { "action": "sendInput", "input": "^" }, "keys": "^" },
...
]