13

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

Идея

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

Эта проблема

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

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

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

3 ответа3

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 за оригинальный ответ.)

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 или чего-либо, что вы хотели бы использовать или написать свой собственный.

инструменты для изменения раскладок клавиш https://stackoverflow.com/questions/6812/mapping-my-custom-keys-in-debian

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

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

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