Используя screenrc, как я могу заставить `Ca c` открывать новое окно в рабочем каталоге текущего окна?
2309
Matt Joiner
Используя screenrc, как я могу C-a cоткрыть новое окно в рабочем каталоге текущего окна? По умолчанию создается впечатление, что оно открывает новое окно в рабочем каталоге во время вызова исходного сеанса экрана.
3 ответа на вопрос
7
Matt Eckert
By default, screen also binds C-a C-c to create a new window, so you might want to add another line to your .screenrc to handle this case:
Stuff the string string in the input buffer of the current window.
screen -X chdir \$PWD tells screen to execute the command chdir, which changes its operational directory (where new screen windows will start) to the environment variable $PWD, which contains the current working directory. This is impossible to do within .screenrc alone; therefore, manipulating the input buffer with stuff is necessary.
The screen command within an already running screen creates a new window just like C-a C-c.
^M generates a carriage return, which tells the shell to execute the command which is now in the buffer. Without it, you would have to press enter (or C-m, of course).
Consequently, this bind will leave cruft like this in the window you execute it in:
Любая идея, почему ^ M не нужен?
Matt Joiner 13 лет назад
0
Это необходимо, чтобы возврат каретки создавался в конце строки `stuff`.
Matt Eckert 13 лет назад
1
Любые идеи о том, как заставить это работать в названном сеансе экрана? http://superuser.com/questions/1038576/gnu-screen-open-new-window-in-working-directory-of-current-window-in-a-named @MattEckert
Paul Caheny 8 лет назад
0
0
jáquer
Исходя из этого ответа SO, я думаю, что это должно работать:
bind c stuff "screen -X chdir \$PWD; screen^M"
Я пойду попробую это на моей удаленной оболочке и сообщу, работает ли она для меня.
редактировать: Да, это работает. Первая команда «связать» на самом деле не нужна.
Я прочитал этот ответ, но думал, что материал был заполнителем для чего-то еще. Что означает ^ M в вашем примере кода выше?
Matt Joiner 13 лет назад
1
Это было сделано, но без лишних ^ M, возможно, это было из-за вставки копий?
Matt Joiner 13 лет назад
0
To make screen open a new tab/window in the current directory, you can add the following code to your .screenrc file:
bind c stuff "screen bash^M"
This will cause the Ctrl + ac command to open new tabs/windows in the directory of the current window/tab.
Note: You must ensure that screen does not start a login shell by default because that will cause the shell start in the default directory for a login shell rather than the current directory. This means that In your .screenrc file, your shell command cannot include a dash ('-') character.
For example, this is wrong (i.e. it will start a login shell):
shell -$SHELL
But this is right (i.e. it will not start a login shell):
shell $SHELL
Note 2: Unfortunately, this method does not behave exactly like the default new window/tab command in screen. Instead, it writes the command to the current window and executes it to create the new window/tab, so it will not work during some long running shell process. In other words, this keyboard shortcut can only be executed whenever normal shell commands can be executed.
Note 3: If you want screen to open new windows/tabs in the current directory and open a login shell, you can add the following code to your .screenrc file: