Как сделать ^ и `не мертвые клавиши на Windows 7 с немецкой раскладкой клавиатуры

В раскладке немецкой клавиатуры по умолчанию ^ и backtick/forwardtick - это тупики.

Однако, как программист, мне обычно не нужно писать символы, а сами символы. Необходимость дважды нажать клавишу и клавишу возврата или клавишу и пробел в этом случае довольно раздражает.

Поэтому я хотел бы знать, можно ли (и как) изменить эти клавиши, чтобы они сразу же создавали символ, а не ждали второго символа.

1 ответ

Решение

Вы можете использовать Microsoft Keyboard Layout Creator для изменения макета. После того, как вы загрузили и установили, сделайте это:

  1. Нажмите "Файл" и "Загрузить существующую клавиатуру".
  2. Мертвые клавиши отображаются серым цветом - щелкнув правой кнопкой мыши любую клавишу, вы можете назначить или отменить поведение мертвых клавиш:

введите описание здесь

  1. Когда вы закончите назначать и отменять назначение, перейдите в "Проект" -> "Свойства" и отредактируйте описание. "Имя" имеет ограничение в 8 символов (по любым причинам), поэтому просто установите для него значение "Deutsch", а для описания - что-то вроде "Deutsch - No Dead Keys" или что угодно.

  2. Когда вы закончите, перейдите в "Проект" и выберите "Построить DLL и установочный пакет". При создании будет указано, что в файле журнала есть некоторые предупреждения, но они, вероятно, могут быть проигнорированы. В следующем запросе вас спросят, хотите ли вы открыть каталог, в который были записаны файлы - если вы это сделаете, вы можете просто установить макет одним щелчком мыши.

  3. Откройте Настройки клавиатуры в 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": "^" },
    ...
]
Другие вопросы по тегам