Эмулировать горизонтальную прокрутку с помощью клавиши Shift

13

Я хочу имитировать горизонтальную прокрутку, когда использую свое (вертикальное) колесо прокрутки и нажимаю Shift.

В некоторых приложениях (Chrom {e, ium}) это уже работает, но я ищу общее решение для приложений X.

Ближайшее, что я получил, это xbindkeys+ xdotool.

# ~/.xbindkeysrc
"xdotool click 6"
  shift + b:4

"xdotool click 7"
  shift + b:5

Проблема в том, что xbindkeysкажется, что пропускаются некоторые события, и иногда вертикальная прокрутка «проходит». Это очень раздражает. Похоже, xbindkeysиспользует какой-то опрос?

Также я не люблю порождать сотни команд оболочки в секунду.

У меня маленький экран, и мне приходится много прокручивать по горизонтали.

Как мне добиться обычной горизонтальной прокрутки?

ОБНОВИТЬ:

Есть другой способ, который делает в основном то, что я хочу, xbindkeysи xmodmap.

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10'"
  c:50
"xmodmap -e 'pointer = default'"
  release + shift + c:50

Когда Shiftудерживается, кнопки указателя 4 и 5 отображаются на 6 и 7. (Кнопки 4/5 предназначены для вертикальной прокрутки и 6/7 для горизонтальной прокрутки). c:50это левый Shiftключ. При отпускании ключа отображение указателя по умолчанию восстанавливается.

Это хорошо решает проблему «слишком много событий». Однако клавиша Shift больше не работает как обычный модификатор. Я попытался переиздать Shiftсобытия пресс-релиза xdotoolтак:

"xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10';  xdotool keydown Shift_L"
  c:50
"xmodmap -e 'pointer = default';  xdotool keyup Shift_L"
  release + shift + c:50

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

Павел Щиска
источник
1
Вы также можете сделать горизонтальную прокрутку с помощью Ctrl + Arrows для многих программ.
Terdon
1
Спасибо, но это не работает для меня в Firefox. Я ищу "универсальное" решение, которое работает везде.
Павел Щиска
Будет ли проблемой запускать что-либо от имени пользователя root, например, используя sudo?
BRM
Это не оптимально иметь судо. Я полагаю, вы имеете в виду sudo-ing каждый раз, когда нажимается Shift? Не могли бы вы уточнить, что вы имеете в виду?
Павел Щиска
Это может быть бессмысленно, но однажды это сработало для меня ~/.xbindkeysrc.scm. В какой-то момент это не удалось, но он может работать в вашей системе.
Sparhawk

Ответы:

2

Я нашел приемлемое для меня решение.

Я не нашел способа использовать Shiftлюбую другую клавишу в качестве моего модификатора, чтобы вращать ось колеса, пока она нажата.

Я сейчас использую простую .xbindkeysrcс кнопкой переключения:

"~/toggle.sh"
  alt + x

Сценарий toggle.sh выглядит так:

#!/bin/sh
on()
{
  xmodmap -e 'pointer = 1 2 3 6 7 4 5 8 9 10'
}

off()
{
  xmodmap -e 'pointer = default'
}

if xmodmap -pp | grep -q '4.*6'; then
  off
else
  on
fi

Это позволяет мне переключать поведение. Когда я нажимаю Alt+ X, моя ось колеса мыши поворачивается, и когда я нажимаю ее снова, она устанавливается по умолчанию.

Это должно работать на данный момент.

Если кто-то найдет способ сделать это Shiftкак «модификатор» (ось мыши вращается, пока она нажата), пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ: так как Alt+ xэто часто используемая горячая клавиша, я изменил его на:

(xbindkey '(control "b:3") "toggle-wheel.sh")

(Я перешел на настройку guile, так что выше должно быть в файле с именем .xbindkeysrc.scm)

Это переключит направление колеса прокрутки с помощью Ctrl+ правой кнопки мыши.

Павел Щиска
источник
0

Вы могли бы использовать btnx, и это инструмент настройки GUI .

Более свежий пакет Ubuntu и здесь

После того, как вы выполните обнаружение кнопок на вашей мыши с помощью btnx-config, просто сопоставьте «Scroll Up» вместе с модификатором кнопки Shift для любого нажатия кнопки x, которое вы хотите.

RedMage
источник
Спасибо, у меня проблема с тем, чтобы заставить его работать на Fedora.
Павел Щиска
1
Я нашел пакет rpm для btnx сейчас. Я не нахожу способ отобразить модификатор как исходное событие (т.е. Shift + WheelUp). Я могу только карту от WheelUp до Shift + какой-то другой ключ. Я что-то пропустил? Я также пытался «обнаружить» Shift + WheelUp, но он сказал: «Кнопка уже сопоставлена». Исходный код был 0x02010008 для обоих случаев (Shift нажал и не нажал). Я не думаю, что btnx может обрабатывать несколько устройств ввода вообще (мышь + клавиатура)
Paul Schyska
0

Как подсказано здесь , я установил imwheel , затем создал ~/.imwheelrcсо следующим контентом.

".*"
Shift_L, Up, Left
Shift_L, Down, Right

Я тогда побежал imwheel -b 45в терминал. Я проверил, и я не заметил диагональных проблем, связанных с высокой прокруткой и xbindkeys.

NB -b 45ограничивает imwheelзахват только прокрутки вверх и вниз, предотвращая блокирование (например) xbindkeysпривязок для кнопок большого пальца.

Проблемы

Однако с этим связано несколько проблем.

  • Это противоречиво. Я мог заставить его работать с Firefox и Gwenview из коробки, но Inkscape и GIMP не работали. Я мог бы использовать сопоставление окон, чтобы не совпадать с Inkscape / GIMP, но должен быть какой-то способ заставить его работать универсально.
  • Хуже того, он предотвращает некоторые другие события по умолчанию, такие как Ctrl+ Scroll wheel, который обычно используется для увеличения. Я пытался ставить такие вещи , как Control_L, Up, Control_L|Upв ~/.imwheelrc, но это не работа.
  • imwheelотправляет события колеса горизонтальной прокрутки в активное окно, а не в окно под курсором мыши. Это противоречит стандартному поведению колеса прокрутки. Это также предполагает, что Ctrlобходной путь в вышеприведенном пункте также будет неоптимальным.
  • imwheelкажется, больше не в разработке. Он был добавлен в предварительную версию за последние 10 лет (с 2004 года).
Sparhawk
источник