look-at — менеджер фокуса

    Что такое look-at?


    Это утилита, которая переключает фокус между окнами приложений из командной строки.

    Зачем?


    При работе с большим количеством открытых окон часто возникает проблема с тем, чтобы быстро переключиться в окно нужного приложения. Можно, конечно, применять сочетание клавиш Alt+Tab, но Ктулху вызвать проще. Гораздо удобнее использовать шоткаты. Например, Super+1 — и вы уже работаете с терминалом, Super+2 — и перед вами Firefox. Предлагаю вашему вниманию утилиту look-at, которая даёт возможность делать это (фанаты Unity — молчать!) практически в любом десктопе, где есть X.Org.

    Как работает?


    Известно, что практически в любом десктопе, где есть X.Org, содержится программа для настройки шоткатов, которая умеет запускать приложения. (Если вы думаете, что ваш – исключение, то читайте man xbindkeys). Проблема в том, что запускаемые приложения сами не всегда понимают, что делать с открытыми окнами и по команде то создают новый экземпляр (например, gnome-terminal), то не реагируют вообще, потому что, по их мнению, все, что можно, уже давно запущено (thunderbird). В общем, ведут себя совсем не так, как вы ожидаете.

    Fork me on GitHubУтилита look-at создана для того, чтобы управлять окнами приложений быстро, точно и правильно, не прибегая к методу мышиного тыка. Она написана на популярном языке python (2.5-2.7, 3.2, pypy), и это открывает практически безграничные возможности для настройки, а также исправления багов.

    Как установить?


    Пакеты для пользователей Ubuntu 12.04 живут здесь:
    sudo apt-add-repository ppa:e15/ppa
    sudo apt-get update
    sudo apt-get install look-at
    

    Предпочитаете другие дистрибутивы? Установите wmctrl, setuptools для python и выполните команду:
    sudo easy_install look-at
    

    Пользуйтесь!


    Всё просто. Команда look-at принимает единственный аргумент — название приложения. Если оно уже запущено, то утилита переключит в окно, которое использовалось последним (если еще нет — запустит). Повторный запуск с тем же аргументом переключит в следующее окно приложения:


    Теперь можете писать хитроумные скрипты, например, в поддержку техники pomodoro:
    #!/bin/sh
    WORK="gvim"
    RELAX="firefox"
    ( while true; do look-at $WORK; sleep 25m; look-at $RELAX; sleep 5m; done ) & # =)
    

    А как же быстрый доступ, спросите вы? Давайте разберёмся, как им пользоваться, на примере сompiz. Комбинации клавиш для быстрого доступа можно задать с помощью плагина «Команды», в менеджере настроек:
    sudo apt-get install compizconfig-settings-manager
    ccsm
    

    Откройте вкладку «Команды» и добавьте нужные приложения:


    На вкладке «Комбинации клавиш» назначьте удобные сочетания:

    … и так для каждой команды.

    Полезные ссылки:


    GitHub: github.com/generalov/look-at
    PyPI: pypi.python.org/pypi/look-at
    wmctrl: tomas.styblo.name/wmctrl

    Вопросы


    * Можно-ли работать с окнами быстрее, нежели запуская wmctrl?
    * Почему на скриншотах многие видят ШГ, хотя у меня всё в порядке?
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 31

      +3
      Лично мне очень не хватало подобного функционала ещё в KDE 3. Решил проблему кардинально — перешёл на WMII…
        +1
        Кстати, да, WMII офигенно крут.
        +3
        Почему на скриншотах многие видят ШГ, хотя у меня всё в порядке?

        У всех разные мониторы. Я вон не только ШГ вижу, но и опечатку в настройках компиза.
          0
          А чем такой подход лучше, чем рабочие столы?
            0
            рабочие столы то же самое при условии что у вас приложения развернуты на весь экран.

            На больших мониторах удобно иметь множество мелких окон, скажем, с открытыми ssh сессиями к разным серверам, в которых бегут логи.
            Что б не хватать каждый раз мышку способ может быть полезен
              0
              У меня стандартные 24 дюйма — всегда все на весь экран развернуто. Может просто не сталкивался с необходимостью кучи мелких окон.
                0
                Тут дело не столько в дюймах сколько в разрешении.
                мне, например, очень удобно иметь рядом два окна: ИДЕ (так что б код на экране был) и браузер в 1024х768, так что б видеть сразу результат. Иногда рядом же вешаю маленькое окно с консолью, что б что-то быстрое проверить: запрос, права файла и т.п.
                Это ОЧЕНЬ (правда очень) ускоряет работу: когда не надо альттабом искать окно, все перед глазами.

                Даже ставил программу xrefresh, она обнавляла браузер при сохранении файла в ИДЕ. Концентрируешься на задаче, пишешь — видишь результат в процессе!
                  0
                  Слабо себе представляю, как 2 окна IDE впринципе могут нормально влезть на один экран. А если еще и браузер и консоль… Можете скриншот примерно показать?

                  Лично у меня IDE на 2м рабочем столе, браузер на 3м, консоль на F12. С ситуацией, когда надо что-то править так, что бы сразу видеть изменения в браузере ни разу не сталкивался (верстка может быть?).
                    0
                    произошло недопонимание. Не два окна ИДЕ, а всего два окна — одно браузера, другое ИДЕ.
                    Это вполне ложится в 1920 пикселейй ширины. 1024 на браузер и ~900 на ИДЕ.

                    Удобно делать верстку, работать с UI, делать быстрые правки по коду
              0
              Особо остро начинаешь ощущать чем этот подход лучше при использовании >1 монитора.
                +1
                Ну в том же awessome можно разные «столы» иметь на разных мониторах и по разному их переключать.
                  0
                  В гном-шелле у меня к разным воркспэйсам «приклеены» переменные окружения, что когда я запускаю емакс, потом терминал в одном воркспэйсе и из терминала пытаюсь что-то отредактировать, то емаксклиент коннектится к правильному емакс приложению. Так же и хоткеи для переключения на нужное приложение работают только внутри одного воркспэйса, а не пытаются прыгнуть на какое-то окно из другого воркспэйса.
                  Всё тоже самое скорее всего можно и в awesome сделать, но и в гном-шелле так же всё это делается без особых проблем.
              +8
              Всё гораздо проще:

              wmctrl -a firefox
              

              Что касается активации следующего окна при повторном запуске с теми же аргументами, не могу представить, зачем это может быть нужно.
                0
                разницу можно увидеть, когда открыто несколько окон firefox. wmctrl -a firefox кидает в первое попавшееся окно, а look-at firefox, должен циклить между ними, давая шанс добраться до нужного. по идее. :)
                  0
                  Как насчет активации окна приложения, свернутого в трей? Например, pidgin. Который, между прочим, на свое имя не отзовется, а только на «Buddy List».
                  Ответ интересует, потому как еще с месяц назад захотел себе накалякать на коленке аналогичный скрипт на bash, но стало лень разбираться с такими подробностями.
                    0
                    Если вам нужно назначить на это действие хоткей, вам должен помочь плагин pidgin-hotkeys. Если вам надо именно в скрипте это сделать, то я вижу только один способ — написать свой плагин.
                  0
                  Кстати, как можно избежать того, что некоторые программы в Ubuntu (Unity+Compiz) перехватывают фокус (окно логина Skype, менеджер обновлений)? Я хочу продолжать работать в том окне где я работаю, а не сворачивать вышеуказанные программы.
                    0
                    Недавно задавался тем же вопросом.
                    Знающие откликнитесь.
                    +2
                    В Unity такое работает из коробки, как раз по Super+1..9
                      +2
                      именно так. :)
                      вообще, скрипт появился тогда, когда этой фичи в юнити ещё не было, а у меня уже был gnome2. т.е. давно. и по правде говоря, от перехода на 12.04 и юнити, я ждал именного этого самого коробочного счастья. буквально — до прошлой недели когда обновил убунту.
                      на практике (п)оказалось, что именно этот переключательный механизм в юнити всё ещё не доделан: переключает с заметным лагом, и вместо нужно окна, я часто попадаю в лаунчер (или как эта штука называется, по типу меню «пуск»). в результате, сложилось ощущение, что скрипт всё ещё может кому-то полезным.
                      +3
                      xatk — динамические хоткей для переключения между окнами
                      Очень удачная в нем заложена концепция хоткеев…
                        0
                        А еще есть программа xdotool
                        www.semicomplete.com/projects/xdotool/ — тут и описание и примеры. На мой вкус, сильно мощнее.

                        А вот тут пример www.semicomplete.com/projects/xdotool/#id270183, тоже с firefox.
                          0
                          Подскажите название вашей темы оформления.
                          +1
                          <sarcasm>Чего только не придумают люди, лишь бы не пользоваться тайловыми оконными менеджерами.</sarcasm>

                          До перехода на awesome тоже для этих целей пользовался wmctrl и xdotool.
                            +2
                            Уже лет пять как я использую продвинутый вариант такой программки — в виде bash скрипта на пять строк. А продвинутый, потому что скрипт умеет принимать класс окна в которое надо переключиться (для случаев программ с разными окнами — pidgin, gimp). Но мне никогда не приходило в голову ни выложить такой элементарный скрипт на github, ни переписать на python — то есть притащить ещё кучу зависимостей.

                            Вот видимо чего мне не хватает для написания своих опенсорсных проектов: святой уверенности что то что ты написал не может быть решено другим пользователем за 5 минут.

                            Удивительно… Автору плюс в карму за смелость. Наверное такие программки в репозиториях нужны.
                              0
                              умение программировать тем и замечательно, что дает возможность написать что угодно на чём угодно. я зарабатываю разработкой на python, поэтому такая зависимость совсем не мешает. вполне себе язык, ни чем не хуже bash. =)

                              плюсик в карму, за скромность и минимализм )
                                0
                                А не могли бы вы поделиться данным скриптом?
                                0
                                Спасибо. Еще бы тайлинг к этой штуке… Не планируете?
                                  0
                                  интересная идея. над темой тайлинга, стоит подумать отдельно. unix way. :)

                                Only users with full accounts can post comments. Log in, please.