Комбинация клавиш для переключения между окнами приложения во всех окнах просмотра

11

Alt- `используется для переключения между окнами приложения в текущем окне просмотра в Unity.

Есть ли другая комбинация клавиш для переключения между окнами приложения во всех окнах просмотра?

Я не хочу изменять поведение по умолчанию Alt- `, которое переключается между окнами приложения в текущем окне просмотра.

Я использую Ubuntu 14.04 и Unity.

Кадир
источник
Под точкой зрения вы имеете в виду Workspace?
Тим
2
@Tim смотри askubuntu.com/questions/44102/…
Джейкоб Влийм

Ответы:

7

Вдохновленный ответом Пино, я нашел подвох, чтобы сделать это: keep Alt+ `для переключения между окнами приложения в одном окне просмотра и (например) Alt+ 1для переключения между окнами приложения во всех окнах просмотра.

Небольшой косметический недостаток заключается в том, что отзывчивость немного менее точна, поскольку для изменения настроек требуется доля секунды. Однако на практике вы вряд ли заметите.

  1. установить xdotool:

    sudo apt-get install xdotool
    
  2. Скопируйте следующий фрагмент в пустой файл и сохраните его как switch.sh

    #!/bin/bash
    
    dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false
    sleep 0.2
    xdotool keydown alt key 0x60
    dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport true
    sleep 1
    
  3. установить комбинацию клавиш для запуска скрипта: System Preferences > Keyboard > Shortcuts > Custom Shortcuts. Я выбираю Alt+ 1, так как он близок к другому.

    Теперь вы можете использовать Alt+ 1для переключения между всеми окнами (например) gedit:

    введите описание изображения здесь

    или Alt+ `для переключения между окнами gedit только рабочей области:

    введите описание изображения здесь

нота:

  1. В сценарии ключ выше Tabустановлен в key 0x60. Это может быть иначе на других lauyouts. Если это не сработает, запустите в терминале xev, затем нажмите Return, а затем клавишу над вкладкой. В выводе ищите строку вроде (keysym 0x60, grave). Значение keysym - это значение, которое вам нужно в строке (script-):

    xdotool keydown alt key 0x60
    
  2. Значения sleep 0.2и sleep 1заставить скрипт работать нормально в моей системе, но они могут быть оптимизированы для более быстрых систем (уменьшить).

Больше опций

Кроме того , вы можете установить комбинацию клавиш для переключения между всеми окнами приложений на всех видовых сценарий будет таким:

#!/bin/bash

dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false
sleep 0.2
xdotool keydown alt key 0xff09
dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport true
sleep 1

Если вы установите для этого, например, Alt+ Q, у вас есть хороший набор всех опций:

Alt+ ` Переключение между окнами текущего приложения в текущем окне просмотра

Alt+ 1 Переключение между окнами текущего приложения во всех окнах просмотра

Alt+ Tab Переключение между всеми окнами приложения в текущем окне просмотра

Alt+ Q Переключение между всеми окнами приложения во всех окнах просмотра

введите описание изображения здесь

Alt+ Tab: Переключение между всеми окнами приложения в текущем окне просмотра

введите описание изображения здесь

Alt+ Q: Переключение между всеми окнами приложений во всех окнах просмотра

Якоб Влейм
источник
5

Универсальное решение с использованием wmctrl


обзор

Следующий скрипт должен быть совместим со всеми EWMH-совместимыми оконными менеджерами (например, xfwm4, openbox, kwin, compiz ...). Он использует wmctrlи xprop, который может быть установлен с:

sudo apt-get install x11-utils wmctrl

Установка

Скопируйте и сохраните следующий отрывок как simple-window-switcher:

#!/bin/bash

# based on a script by Robert Steiniger
# (http://lars.st0ne.at/blog/switch%20between%20windows%20within%20the%20same%20application)

Usage="
  Title:        simple-window-switcher 0.1
  Description:  switch between all windows of active application
  Author:       Copyright Glutanimate 2014 (https://github.com/Glutanimate)
  License:      GNU GPLv3
  Usage:        $(basename "$0") [-g|-l|-h]
                -g: global window switching (across all workspaces)
                -l: local window switching (current workspace)
                -h: display this help message

                If no argument is provided window switching will be set to global.
"

while getopts "lgh" OPTIONS; do
  case $OPTIONS in
    l ) Fields="3-4"
        ;;
    g ) Fields="4"
        ;;
    h ) echo "$Usage"
        exit 0
        ;;
   \? ) echo "$Usage"
        exit 1
        ;;
  esac
done

ActiveWinID="$(xprop -root | sed -n 's/_NET_ACTIVE_WINDOW(WINDOW): window id # 0x//p')"
# fields 3-4: <desktop number> <window class>
ActiveWinClass="$(wmctrl -xl | grep "$ActiveWinID" | cut -d" " -f${Fields})"
WindowList="$(wmctrl -xl | grep "$ActiveWinClass" | cut -d" " -f1)"
NextWindow="$(echo "$WindowList" | grep -A1 "$ActiveWinID" | sed -n 2p)"

if [[ -z "$NextWindow" ]]; then
  NextWindow="$(echo $WindowList | head -n 1)"
fi

wmctrl -i -a "$NextWindow"

Пометьте скрипт как исполняемый и сохраните его где угодно (желательно в PATH, например, /usr/local/binили ~/bin).

использование

Используйте меню сочетаний клавиш вашего оконного менеджера, чтобы назначить simple-window-switcherгорячую клавишу по вашему выбору. Вы можете использовать следующие параметры для управления поведением скрипта:

  • -g: глобальное переключение окон (во всех рабочих пространствах)
  • -l: локальное переключение окон (текущее рабочее пространство); может не работать с Unity / Compiz (см. раздел комментариев для получения дополнительной информации)
Glutanimate
источник
Уважаемый @Glutanimate, после -lтакже переключается на окна в других рабочих пространствах.
Кадир
@Kadir Это странно. Это не в моей системе. Если у вас есть время, захотите ли вы опубликовать результаты wmctrl -xlна сайте, например pastebin.com, и связать его здесь?
Glutanimate
Уважаемый @Glutanimate, вот оно: pastebin.com/iJBAZ5a7
Кадир
@Kadir Спасибо! Похоже, что Unity / Compiz неправильно отображает информацию о рабочем пространстве, поэтому wmctrl не может подобрать ее (поэтому во втором столбце вы видите только нули, это должны быть номера рабочего пространства). Не знаю, если это ошибка или она была разработана таким образом. Я не заметил этого, потому что я использовал LXDE. Я добавлю примечание к ответу.
Glutanimate
4

Откройте терминал и введите следующую команду:

dconf write /org/compiz/profiles/unity/plugins/unityshell/alt-tab-bias-viewport false

В качестве альтернативы вы можете установить Unity Tweak Tool:

sudo apt-get install unity-tweak-tool
unity-tweak-tool

Затем включите параметр « Переключение между окнами во всех рабочих пространствах» на вкладке « Переключатель» :

введите описание изображения здесь

Сильвен Пино
источник
Я хочу сохранить свойство Alt-`, которое переключается между окнами приложения в текущем окне просмотра. Мне нужен еще один ярлык, например Ctrl-Alt-`, который будет переключаться между окнами приложения во всех окнах просмотра.
Кадир
1
@Kadir К сожалению, свойство dconf не позволяет обеим конфигурациям сосуществовать. Это одно или другое поведение.
Сильвен Пино,