Используя screenrc, как я могу заставить `Ca c` открывать новое окно в рабочем каталоге текущего окна?

Используя screenrc, как я могу сделать C-a c открыть новое окно в рабочем каталоге текущего окна? По умолчанию создается впечатление, что оно открывает новое окно в рабочем каталоге во время вызова исходного сеанса экрана.

3 ответа

Решение

Исходя из этого ответа SO, я думаю, что это должно работать:

bind c stuff "screen -X chdir \$PWD; screen^M"

Я попробую это сделать на своей удаленной оболочке и сообщу, работает ли она для меня.

редактировать: Да, это работает. Первая команда "связать" на самом деле не нужна.

По умолчанию, screen также связывает C-a C-c чтобы создать новое окно, так что вы можете добавить еще одну строку к вашему .screenrc чтобы справиться с этим делом:

bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"

Разъяснение о том, как работает эта команда:

  1. stuff помещает строку аргумента прямо в текущее окно:

    Команда: stuff string

    Набить струну string во входном буфере текущего окна.

  2. screen -X chdir \$PWD говорит экрану выполнить команду chdir, который изменяет свой рабочий каталог (где будут открываться новые окна экрана) на переменную среды $PWD, который содержит текущий рабочий каталог. Это невозможно сделать в течение .screenrc в одиночестве; следовательно, манипулируя входным буфером с stuff является необходимым.

  3. screen команда в уже запущенном screen создает новое окно так же, как C-a C-c,

  4. ^M генерирует возврат каретки, который говорит оболочке выполнить команду, которая сейчас находится в буфере. Без этого вам пришлось бы нажимать enter (или же C-m, конечно).

Следовательно, эта привязка оставит такую ​​ерунду в окне, в котором вы ее выполняете:

user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$

Вот копия моего собственного ответа на аналогичный вопрос на stackoverflow.com:

Чтобы на экране открылась новая вкладка / окно в текущем каталоге, вы можете добавить следующий код к вашему .screenrc файл:

bind c stuff "screen bash^M"

Это приведет к тому, что команда Ctrl + a c откроет новые вкладки / окна в каталоге текущего окна / вкладки.

Примечание: вы должны убедиться, что screen не запускает оболочку входа по умолчанию, потому что это приведет к запуску оболочки в каталоге по умолчанию для оболочки входа в систему, а не в текущем каталоге. Это означает, что в вашем .screenrc файл, ваш shell Команда не может содержать тире ('-').

Например, это неправильно (то есть запускается оболочка входа):

shell -$SHELL

Но это правильно (то есть он не запустит оболочку входа):

shell $SHELL

Примечание 2: К сожалению, этот метод не работает точно так же, как команда по умолчанию для нового окна / вкладки в screen, Вместо этого он записывает команду в текущее окно и выполняет ее для создания нового окна / вкладки, поэтому она не будет работать во время какого-то длительного процесса оболочки. Другими словами, это сочетание клавиш может быть выполнено только тогда, когда могут выполняться обычные команды оболочки.

Примечание 3: если вы хотите screen чтобы открыть новые окна / вкладки в текущем каталоге и открыть оболочку входа, вы можете добавить следующий код в .screenrc файл:

bind c stuff "screen bash -l^M"
Другие вопросы по тегам