В Linux, как я могу отобразить SHIFT_L / SHIFT_R при нажатии без дополнительной клавиши?


13

Сегодня я нашел эту очень хорошую статью Стивена Лоша, в которой он представляет пару раскладок клавиатуры для повышения производительности. Среди них динамическое отображение левой и правой клавиш Shift.

Идея

Когда Shift_L или Shift_R нажимаются без дополнительной клавиши, они отображаются на '(' и ')' соответственно, в противном случае они функционируют как обычно.

Проблема

Он делает все это под OSX. Я пытаюсь добиться того же самого под Linux. Для этого нет прямого пути, поскольку, насколько я понимаю, вы не можете использовать xmodmap для настройки одного ключа для Shift_L, а другого - для Shift, когда он используется в качестве клавиши-модификатора.

Я немного погуглил и нашел людей, пытающихся сделать то же самое под Windows, что, по-видимому, возможно с помощью AutoHotKey, но я не смог ничего найти для Linux.

Есть ли способ решить это под Linux?


Я не пробовал, но это может помочь askubuntu.com/q/24916/11352
Mansuro

2
Это почти дублирует этот вопрос . =)
Тейка Казура

Ответы:


4

Вот это да! Комментарий пользователя teika kazura к исходному вопросу является совершенно правильным - он не только фактически является дубликатом этого другого вопроса , но и предоставленный там ответ («используйте xcape ») решает эту проблему!

После клонирования репозитория xcape и его компиляции (сначала мне пришлось установить libXtst-devel на мою коробку Fedora), я смог получить точное поведение, запрошенное с помощью следующей команды:

xcape -e "Shift_L=parenleft;Shift_R=parenright"

После общепризнанного беглого тестирования, это, кажется, работает очень хорошо. Ницца!

Другие опции

Если вы используете клавишу Shift в качестве модификатора мыши (т. Е. Если вы когда-нибудь нажимаете Shift), вы, вероятно, захотите включить опцию тайм-аута xcape и найти удобное значение тайм-аута, чтобы сольные клавиши Shift, используемые в комбинации с мышью, не надевали Сгенерировать ложные скобки. Из xcape README:

-t <timeout ms>

Если вы удерживаете ключ дольше, чем этот тайм-аут, xcape не будет генерировать событие ключа. По умолчанию 500 мс.

Таким образом, если вы включите -tфлаг со значением тайм-аута, который вам подходит, вы все равно сможете щелкать мышью по нажатию клавиши Shift, удерживая клавишу Shift не менее timeout ms миллисекунд.

(Опять же, поблагодарите Тейку Казуру за указание на другой вопрос, а также don_crissti за оригинальный ответ.)


Одна из проблем этого метода заключается в том, что я довольно часто нажимаю [Shift] + [LMouse], чтобы выделить текст в редакторах. Интересно, что Sublime Text также использует [Ctrl] + [LMouse], поэтому вопрос о переназначении [Ctrl] также вызывает проблемы.
AnnanFay

@Annan Вы экспериментировали с настройкой тайм-аута xcape? Из README: « -t <timeout ms>Если вы держите ключ дольше, чем этот тайм-аут, xcape не будет генерировать событие ключа. По умолчанию 500 мс». ... Если xcape не вмешивается в событие нажатия клавиши модификатора (я не могу вспомнить), это должно удерживать его от генерации ложных нажатий клавиш, в то же время позволяя использовать его в качестве модификатора выбора мыши, пока вы удерживаете его достаточно долго. ,
FERD

@Annan Приятно слышать, я обновил свой ответ, чтобы предложить использование -tфлага!
FERD

1

Это интересный вызов, и я согласен с тем, что xinput не совсем подходит. Я потратил некоторое время, разбираясь со способностями xmodmap, и очень разочарованно приблизился к достижению того, что вы хотите сделать ... без реального достижения цели.

Используя xmodmap, можно назначить parenleft как сдвинутый символ клавиши на клавише left-shift:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'

какая сорта работает, по крайней мере, при тестировании на моей коробке Fedora 17, но не в удовлетворительной форме. Я обнаружил, что с этим отображением клавиша Shift все еще функционировала нормально и не создавала никаких поддельных паренов, но (разочаровывающе) также не давала надежных паренотов. По какой-то причине ключ не может надежно изменить себя , что нарушает его смещенное назначение ... изначально. По какой-то причине, несколько раз подряд ударив влево-сдвиг, в конечном итоге он начнет производить левую часть, но только после четвертого или пятого нажатия.

Одно поведение я сделал уведомление, однако, что вы могли бы быть в состоянии работать с как «достаточно близко» аналог: я обнаружил , что после отображения parenleft и parenright на Shift_L и Shift_R, я мог надежно ввести скобки путем «прокатки» по обе клавиши сдвига - другими словами, с этим отображением:

xmodmap -e 'keysym Shift_L = Shift_L parenleft Shift_L parenleft'
xmodmap -e 'keysym Shift_R = Shift_R parenright Shift_R parenright'

нажатие Shift_L, за которым следует Shift_R, а затем отпускание обоих, выведет правую или левую в другом направлении. (Конечно, пареневские сопоставления можно поменять; я не мог точно решить, какой путь будет более «естественным».)

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

Я был наполовину убежден, что это просто невозможно, но потом я понял, что есть по крайней мере один ключ, который функционирует именно так, как вы описываете: ключ Super («Windows»). В Gnome Shell это клавиша-модификатор (mod4), которая производит другой эффект (вызывает обзор), когда нажимается одна. Таким образом, по крайней мере, теоретически, может быть возможно реализовать желаемую перегрузку клавиши Shift таким же образом.

... Но я абсолютно не представляю, как это можно сделать или насколько агрессивно было бы увязать в необходимой обработке каждый раз, когда вы нажимаете клавишу Shift. :-)


0

возможно, посмотрите xbindkeys, чтобы изменить раскладку клавиш, или просто найдите хороший плагин для кодирования vim или gedit, или что угодно, что вы хотите использовать или написать свой собственный.

инструменты для изменения раскладок клавиш /programming/6812/mapping-my-custom-keys-in-debian

может быть http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-14.html

и написать скрипт, чтобы включить его.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.