Переназначение Caps Lock на Control и Escape (не обычным способом)

28

Я знаю, как использовать xmodmap для переназначения ключа блокировки Caps, чтобы он действовал как ключ управления или как Escape-ключ. Я хотел бы объединить обе функции следующим образом:

Когда я нажимаю, затем отпускаю клавишу Caps Lock, она отправляет Escape. Когда я удерживаю Caps Lock и нажимаю другую клавишу (скажем, A), он отправляет Control-A.

Есть ли какая-то комбинация xkb, xmodmap и чего-то еще, что могло бы заставить Caps Lock вести себя таким образом в X?

Я использую Ubuntu Precise на MacBook Air 3,1.

user372737
источник

Ответы:

-2

Вы можете сделать первый (отображение Caps Lockв Esc) , но вы не можете сделать второй.

Простое объяснение: Caps Lock просто не предназначено для того, чтобы что-то делать при нажатии.

Подробное объяснение: Есть много типов ключей. Двое из них - это клавиши-модификаторы и клавиши-ключи .

Caps Lockявляется Key Lock в то время как клавиши , такие как Ctrl, Altи Shiftявляются клавиши - модификаторы .

Из их названий видно, что клавиши- модификаторы изменяют функцию следующих нажатых клавиш , а клавиши блокировки действуют как тумблер для включения или выключения какой-либо конкретной функции.

Теперь, так Caps Lock как это ключ блокировки , вы не можете заставить его вести себя как ключ модификатора, не сопоставив его с одним. Caps Lockсам по себе не может функционировать в качестве клавиши-модификатора .

зеленый
источник
Спасибо за подтверждение того, что X не предназначен для того, чтобы делать то, что я хочу. Если гуру Х хочет что-то взломать, чтобы это сработало, пожалуйста, свяжитесь со мной.
user372737
4
Как неприемлемый ответ ниже, вы, конечно, можете выполнить вторую часть с многочисленными утилитами, такими как xcape или At-Home-Modifier.
Sparhawk
35

У меня есть эта настройка на моем Mac, и я безуспешно пытался найти путь для Ubuntu.

Ну, теперь это работает. Благодаря tungd для Понтинга меня xcape . То, что я сделал, действительно просто и понятно.

  1. В Системных настройках> Раскладка клавиатуры> Параметры ...> Положение клавиши Ctrl я установил флажок «Caps Lock as Ctrl».

  2. xcape -e 'Control_L = Escape'

Готово, Caps Lock работает как Ctrl, когда используется как модификатор, и как Esc, когда нажата одна (есть небольшая задержка в несколько сотен миллисекунд, как отмечено в файле xcape README, поэтому он все еще не так оптимален, как решение Mac, которое использует KeyRemap4MacBook.)

Вик Голдфельд
источник
4
Я использовал gnome-tweak-toolдля отображения Caps Lockв Ctrlкачестве нет Keyboard layoutв System Settingsна Ubuntu 14.04. Тогда xcape -e 'Control_L=Escape'не работа, но после использования xcape -dя обнаружил , что Caps Lockгенерирует код ключа 66 и переназначен его соответственно: xcape -e '#66=Escape'.
Сергей Белозоров
3
Согласно этому сообщению в блоге , это можно сделать только с помощью xcape: setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape' setxkbmap -option 'caps:ctrl_modifier' xcape -e 'Caps_Lock=Escape;Control_L=Escape;Control_R=Escape'
Луи Симоне
Это действительно должен был быть принятый ответ @ user372737
Ассаф Лави
@LouisSimoneau это это в тысячу раз больше.
Спенсер Баучер
1
Есть ли успехи в проблеме с задержкой?
Toothrot
6

Я тоже это ищу. Неделю назад я нашел частичное решение, используя xmodmap:

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

Это, конечно, не работает идеально, оно эффективно посылает и Escape, и Ctrl одновременно, когда я нажимаю CapsLock, но я некоторое время был доволен этим.

Наконец я нашел эту маленькую утилиту https://github.com/alols/xcape . Так что теперь я могу просто переназначить CapsLock на Ctrl и позволить xcape делать свою работу.

tungd
источник
Другой вариант - At-Home-Modifier. Он не находится в активной разработке и немного отличается от xcape установкой в ​​root. Однако он запускается через xorg.conf и, следовательно, может действовать только на определенных клавиатурах, одновременно используя другие клавиатуры.
Sparhawk
4

РЕДАКТИРОВАТЬ: Исправлено для большинства умных (более новых) дисплеев.

Согласно комментариям Луи и Сергея, я пришел к этому решению, которое работает для меня на Ubuntu 16.04 (Xenial) с LightDM и Unity.

Я поместил следующую строку кода в мой .xprofileфайл в моем домашнем каталоге.

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

Трейлинг & помещает команду xcape в фоновый режим, чтобы она не блокировала ваш сеанс. Setxkbmap вносит свои изменения немедленно.

Сергий:

Я использовал gnome-tweak-tool для привязки Caps Lock к Ctrl, поскольку в Системных настройках Ubuntu 14.04 нет раскладки клавиатуры. Тогда xcape -e 'Control_L = Escape' не работал, но после использования xcape -d я обнаружил, что Caps Lock генерирует код клавиши 66 и переназначает его соответственно: xcape -e '# 66 = Escape'. - Сергей Белозёров 4 сентября '14 в 10:08

Луи:

Согласно этому сообщению в блоге, это можно сделать только с помощью xcape: setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape' setxkbmap -option 'caps: ctrl_modifier' xcape -e 'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape '- Луи Симоно 4 августа '15 в 10:06

dragon788
источник
3

устанавливать xcape

sudo apt-get install xcape

Добавьте две строки в свой ~/.bashrc

/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100

Обратите внимание на часть -t 100, если вы не установите ее, вы можете заметить задержку в Esc, если вы используете vim.

Searene
источник
sudo apt-get install xcape(опечатка)
Дэвид Шакед
1

Специально для этой цели я создал инструмент на C, который позволяет решить многие проблемы, связанные с решением xcape / xmodmap :

pepper_chico
источник
Есть ли способ отключить «обмен» Esc на Caps, я предпочитаю вообще не иметь Caps и сохранять старый и новый Esc, ведущие себя как Escape.
dragon788
Спасибо, мне нужно будет поместить ссылку для автоматической компиляции в мои точечные файлы. Я также могу сделать PR README.md, так как в Ubuntu 16.04 для компиляции требовались libudev-dev и libevdev-dev.
dragon788
@ dragon788 подойди к Арч (ты можешь даже попробовать Antergos). Я переехал из Ubuntu много лет назад и больше никогда не вернусь, просто лучше.
pepper_chico