Если вам приходилось открывать более одного терминального окна под Сygwin, то вас возможно посещала мысль о возможности организации табов с терминалами в одном физическом окне. Данная статья рассказывает об инструменте, который позволит вам это сделать.
Screen - одна из программ стандартного *nix набора, которую наконец-то портировали под Сygwin. Это полноэкранный оконный менеджер, который сильно облегчает жизнь, когда необходимо работать с консолью. Хотя он и обладает многими возможностями я рассмотрю здесь лишь две.
Первая - это организация сразу нескольких сеансов работы в одном окне большинства из рассмотренных нами терминалов. Сеансы можно переключать между собой и настроить screen так, что бы он имитировал мультитабовый терминал. Например можно представить себе такой сценарий (под cygwin)
- загрузить screen.exe в терминале
- организовать несколько ssh сессий к удалённым серверам
- ещё в одном окне запустить cmd и в нем доступ к базе данных, а в пятом оставить локальный shell
- и работать со всем этим добром в одном физическом окне переключаясь между 5-ю виртуальными
Вторая возможность - это запустить screen уже на удалённом компьютере (если он там есть конечно же). screen не просто открывает новые терминалы, но и поддерживает сессию, которую он будет сохранять даже если соединение прервётся. Но не обязательно дожидаться этого момента - существует возможность просто отключить screen от вашего териминала, а когда нужно снова возобновить эту сессию (подключиться к ней). Разумеется все запущенные под ней программы будут продолжать работать. К сожалению этот режим под windows (в cygwin) у меня работал не слишком стабильно.
Screen настраивается с помощью редактирования файла .screenrc в вашей home-директории. Например я использую такую конфигурацию:
## Look and Feel ## hardstatus alwayslastline "%{.Wc}%-w%{+u}%n %t%{-}%+w %=%{..b} %c %d/%M/%Y, %D" ## Some general options ## # # Turn off start message: startup_message off # # Set messages timeout to one second: msgwait 1 # # Bell options vbell off # #shell - we need it for properly starting bash under cygwin shell -bash shelltitle bash ## Keybindings ## #under rxvt Shift+->, Shift+<- bindkey "^[[c" next bindkey "^[[d" prev ##under xfce terminal Shift+->, Shift+<- bindkey "^[O2C" next bindkey "^[O2D" prev ##new tab with shell - Alt+n bindkey "^[n" screen
Комментарии:
- Знак "#" как обычно служит для комментариев.
hardstatus
- это срока оформления в которой в данном случае показывает список уже созданных терминалов (текущий выделяется подчёркиванием), а с правой стороны выводится текущая дата и время.- две строки начинающиеся со слова "shell" позволяют мне принудительно запускать bash в режиме логина, что заставляет ее (оболочку) перечитать мои инициализационные файлы (~/.bashrc для примера)
- конструкции bindkey определяют более привычный мне способ переключения между терминалами Shift+<стрелки вправо/влево>. Поскольку я использую два разных терминала, то и в конфиге пришлось определить две пары для каждой из команд. В обычной ситуации этого бы делать не пришлось и хватило бы лишь одной из них. Для организации нового таба я использую Alt+n. В качестве небольшого трюка - для того чтобы вставить нужную Esc-последовательность для желаемой комбинации клавиш нажмите сначала Ctrl+V, а потом саму комбинацию. Если все это проделать в нужном вам терминале, то введётся требуемая строка.
Некоторые клавиатурные команды для screen:
Комбинация | Описание |
Ctrl+a c | Создать новый терминал (в моей конфигурации это ещё и Alt+n) |
Ctrl+a " | Представить список всех окон для выбора. (в моем случае он и так виден внизу терминала) |
Ctrl+a p | Вернуться в предыдущее окно(в моей конфигурации эта и следующая команда могут быть вызваны с помощью ещё и Shift со стрелками) |
Ctrl+a n | Перейти в следующее окно |
Ctrl+a d | отключиться от сеанса (сеанс останется в памяти и к нему можно будет потом опять подключится например с помощью команды screen -DR) |
Ctrl+d | прервать текущий сеанс shell. Это не screen команда, но тоже бывает полезна. закрытие последнего терминала закрывает и сам screen |
Документацию, которая позволит более полно использовать возможности screen и в том числе описывает его настройки можно найти здесь:
Статьи об использовании screen:
Примеры .screenrc:
No comments:
Post a Comment