Emuluj przewijanie w poziomie za pomocą klawisza Shift

13

Chcę emulować przewijanie w poziomie, gdy używam (pionowego) kółka do przewijania i naciskania Shift.

W niektórych aplikacjach (Chrom {e, ium}) to już działa, ale szukam ogólnego rozwiązania dla aplikacji X.

Jak dotąd mam najbliższe xbindkeys+ xdotool.

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

"xdotool click 7"
  shift + b:5

Problem polega na tym, że xbindkeyswydaje się , że brakuje niektórych wydarzeń, a czasami przewija się pionowy zwój. To bardzo denerwujące. Wygląda na xbindkeysto, że używasz jakiegoś odpytywania?

Nie lubię też odradzania setek poleceń powłoki na sekundę.

Mam mały ekran i muszę dużo przewijać w poziomie.

Jak mogę uzyskać ogólne przewijanie w poziomie?

AKTUALIZACJA:

Jest inny sposób, który robi głównie to, czego chcę z xbindkeysi xmodmap.

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

Po Shiftprzytrzymaniu przyciski 4 i 5 wskaźnika są odwzorowane na 6 i 7. (Przyciski 4/5 służą do przewijania w pionie, a 6/7 do przewijania w poziomie). c:50jest lewym Shiftklawiszem. Po zwolnieniu klucza przywracane jest domyślne mapowanie wskaźnika.

To ładnie rozwiązuje problem „zbyt wielu zdarzeń”. Jednak klawisz Shift nie działa już jako zwykły modyfikator. Próbowałem ponownie wydać informacje Shiftprasowe / prasowe w xdotoolnastępujący sposób:

"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

Zgodnie xevz Shiftwydarzeniami, ale myślę, że nie jest już rozpoznawany jako modyfikator. Na przykład naciśnięcie Shift+ Anie spowoduje wygenerowania wielkiej litery A.

Paul Schyska
źródło
1
Możesz także przewijać w poziomie za pomocą Ctrl + Strzałki dla wielu programów.
terdon
1
Dzięki, ale to nie działa dla mnie w przeglądarce Firefox. Szukam „ogólnego” rozwiązania, które działa wszędzie.
Paul Schyska
Czy byłoby problem z uruchomieniem czegoś jako root, np. Przy użyciu sudo?
brm
Sudo nie jest optymalne. Zakładam, że masz na myśli sudoing przy każdym naciśnięciu Shift? Czy mógłbyś rozwinąć to, co masz na myśli?
Paul Schyska
Może to być bezcelowe, ale kiedyś to mi się przydało ~/.xbindkeysrc.scm. W pewnym momencie zawiodło, ale może działać w twoim systemie.
Sparhawk,

Odpowiedzi:

2

Znalazłem dla siebie akceptowalne rozwiązanie.

Nie znalazłem sposobu użycia Shiftani żadnego innego klawisza jako mojego modyfikatora do obracania osi koła, dopóki jest on wciśnięty.

Teraz używam prostego .xbindkeysrcz przyciskiem przełączającym:

"~/toggle.sh"
  alt + x

Skrypt toggle.sh wygląda następująco:

#!/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

To pozwala mi zmienić zachowanie. Kiedy naciskam Alt+ X, moja oś kółka myszy jest obracana, a kiedy naciskam ją ponownie, zostaje ustawiona na wartość domyślną.

To na razie powinno działać.

Jeśli ktoś znajdzie sposób, aby to zrobić Shiftjako „modyfikator” (oś myszy obraca się tak długo, jak jest wciśnięta), daj mi znać.

EDYCJA: Ponieważ Alt+ xjest często używanym skrótem, zmieniłem go na:

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

(Przełączyłem się na konfigurację Guile, więc powyższe powinno znajdować się w pliku o nazwie .xbindkeysrc.scm)

Spowoduje to przełączenie kierunku kółka przewijania za pomocą Ctrl+ prawego przycisku myszy.

Paul Schyska
źródło
0

Możesz użyć btnx i jego narzędzia do konfiguracji GUI .

Nowsza pakiet Ubuntu i tutaj

Po wykryciu przycisku myszy za pomocą btnx-config wystarczy zmapować „Przewiń w górę” wraz z modyfikatorem przycisku Shift do dowolnego naciśnięcia przycisku x, który chcesz.

RedMage
źródło
Dziękuję, mam problem z uzyskaniem go na Fedorze.
Paul Schyska
1
Znalazłem teraz pakiet rpm dla btnx. Nie znajduję sposobu na mapowanie modyfikatora jako zdarzenia źródłowego (tj. Shift + WheelUp). Mogę tylko zmapować z WheelUp do Shift + jakiś inny klucz. Czy coś brakuje? Próbowałem też przede wszystkim „wykryć” Shift + WheelUp, ale było napisane „Przycisk już zmapowany”. Surowy kod to 0x02010008 dla obu przypadków (Shift wciśnięty i nie wciśnięty). Nie sądzę, że btnx może w ogóle obsługiwać wiele urządzeń wejściowych (mysz + klawiatura)
Paul Schyska
0

Jak tu wskazano , zainstalowałem koło zębate , a następnie utworzyłem ~/.imwheelrcz następującą zawartością.

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

Potem pobiegłem imwheel -b 45w terminalu. Testowałem i nie zauważyłem problemów po przekątnej związanych z wysokim przewijaniem i klawiszami xbindkeys.

NB -b 45ogranicza imwheelprzechwytywanie tylko przewijania w górę i w dół, zapobiegając blokowaniu (np.) xbindkeysPowiązań przycisków kciuka.

Problemy

Istnieje jednak kilka problemów z tym związanych.

  • To niespójne. Mogłem zmusić go do pracy z Firefox i Gwenview po wyjęciu z pudełka, ale Inkscape i GIMP nie działały. Mógłbym użyć dopasowywania okien, aby nie pasować do Inkscape / GIMP, ale powinien istnieć sposób, aby działał uniwersalnie.
  • Co gorsza, zapobiega niektórym innym domyślnym zdarzeniom, takim jak Ctrl+ Scroll wheel, który zwykle służy do powiększania. Próbowałem oddanie rzeczy jak Control_L, Up, Control_L|Upw ~/.imwheelrc, ale to nie działa.
  • imwheelwysyła zdarzenia poziomego kółka przewijania do aktywnego okna, a nie do okna pod kursorem myszy. Jest to sprzeczne z domyślnym zachowaniem kółka przewijania. Sugeruje to również, że Ctrlobejście w powyższym punkcie byłoby również nieoptymalne.
  • imwheelwydaje się, że nie jest już w fazie rozwoju. Utknął w wersji przedpremierowej przez ostatnie 10 lat (od 2004).
Krogulec
źródło