3

Я использую экран на OS X. У меня есть две команды связывания:

bind ( eval "writebuf" "exec sh -c 'pbcopy < /tmp/screen-exchange'" 
bind ) eval "exec sh -c 'pbpaste > /tmp/screen-exchange'" "readbuf" 

Первый берет то, что находится в буфере копирования, и отправляет его в pbcopy. pbcopy - это программа, которая принимает входные данные и записывает их в системный буфер обмена. Эта команда работает.

Второй вариант - записать pbpaste (из системного буфера обмена) в файл обмена экранами, а затем прочитать его с помощью readbuf. Эта команда не работает. Я должен ввести связанный ключ, ctrl-a), дважды, чтобы он работал. Я предполагаю, что упускаю что-то простое. Любая помощь будет отличной.

Примечание: если я просто делаю pbpaste > /tmp/screen-exchange а затем на экране делаю ctrl-a < , это работает. Так что я думаю, что команда pbpaste верна, в привязке есть что-то, чего мне не хватает. Любая помощь будет отличной.

РЕДАКТИРОВАТЬ: Я все еще ищу полное решение для этого, чтобы быть привязанным к одному ключу. Тем временем я могу использовать следующие привязки и нажатия клавиш:

bind ) eval "exec sh -c 'pbpaste > /tmp/screen-exchange'" 

Тогда используйте

ctrl-a )
ctrl-a <

Происходит следующее: я записываю свою pbpaste в файл обмена экранами, а затем вручную выполняю команду readbuf. Как я уже сказал, я все еще хотел бы сделать это одной командой. Любая помощь будет отличной.

3 ответа3

1

Мое решение состоит в том, чтобы сделать команды командными оболочками и упорядочить их с && вместо того, чтобы делать их экранными командами и упорядочивать с помощью eval . Как указывал Мэнве, eval работает не слишком хорошо, потому что он не ждет, пока одна команда завершит свою работу, прежде чем начинать следующую. Команда экрана readbuf становится командным экраном оболочки screen -X readbuf .

Поэтому для вашей настройки Mac я бы попробовал следующее:

bind ) exec sh -c "pbpaste > /tmp/screen-exchange && screen -X readbuf"

Я не проверял выше, но рабочая версия для xwindows в моем .screenrc следующая:

bind < exec sh -c "xsel -nbo > /tmp/screen-exchange && screen -X readbuf"
0

Эта проблема меня раздражала. Я просто не могу найти реально работающее решение. Итак, вот что происходит для будущих решателей проблем и взлома, чтобы заставить его работать с помощью одной экранной команды.

Проблема заключается в том, что, по-видимому, экран eval не ожидает завершения процесса exec перед запуском остальных параметров eval. То же самое происходит, если вы достаточно быстро используете клавиатуру (например, при использовании регистров).

Так вот мой хак.

setenv varfile "exec sh -c 'pbpaste > /tmp/screen-exchange'"
register r "^a:eval \$varfile^M^a:readbuf"
bind ) process r

Так что он обрабатывает $ varfile env и ждет, когда пользователь нажмет Enter для запуска readbuf. Так что, пока вы "подождите" достаточно долго, чтобы pbpasto завершил работу, прежде чем нажать Enter. Вы получите то, что хотите.

ENV Varfile только для разборчивости.

0

Возможно, вы захотите добавить следующие строки в ваш файл .screenrc. Если у вас нет файла .screenrc, вы можете создать его в своем домашнем каталоге.

Добавьте следующее в ваш .screenrc файл

оболочка - $ SHELL

Это может помочь вам решить проблему У меня была похожая проблема, когда мои псевдонимы из моего .bash_profile не работали на экране, и это исправило это. Надеюсь, поможет!

Также вы можете захотеть добавить startup_message к файлу, пока вы там. :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .