Невозможно иметь pbcopy -clipboard внутри экрана - PullRequest
3 голосов
/ 03 мая 2009

Проблема не решена, хотя был принят один ответ: Мы работаем над тем, чтобы код Ионы заработал.

Проблема: изменить код (1) на (2)

Я знаю тему . Я хочу иметь возможность запустить следующий код внутри экрана

Код (1)

cat ~/.vimrc | pbcopy                   (1)

Код (2)

cat ~/.vimrc > /tmp/pbcopy.pipe         (2)

Моя попытка решить проблему: поместить следующий код в .zshrc

function pbcopy() { "(cat \"$1\")"  > /tmp/pbcopy.pipe } 

Я получаю

cat masi | pbcopy          
pbcopy: command not found: (cat "")
cat: masi: No such file or directory

Как вы можете использовать pbcopy внутри Screen?

Ответы [ 4 ]

6 голосов
/ 03 мая 2009

Хорошо, это неправильный ответ, но это также странный вопрос, так что, по крайней мере, они совпадают. Вы можете создать именованный канал с помощью mkfifo, а затем настроить бесконечный цикл, который считывает файлы из именованного канала и направляет их в pbcopy (или xsel, xclip и т. Д.) .

1. В терминале, который НЕ участвует в сеансе экрана (выполните это только один раз):

/usr/bin/mkfifo /tmp/pbcopy.pipe
while true; do /bin/cat /tmp/pbcopy.pipe | /usr/bin/pbcopy; done

Возможно, вы захотите превратить это в сценарий оболочки (это, вероятно, должно быть более надежным)

#!/bin/bash

if [[ -e /tmp/pbcopy.pipe ]]; then
    echo "it looks like I am already running"
    echo "remove /tmp/pbcopy.pipe if you are certain I am not"
    exit 1
fi

while true; do
    /bin/cat /tmp/pbcopy.pipe | /usr/bin/pbcopy
done

, который вы можете назвать pbcopy_server.sh, создать исполняемый файл (chmod a+x pbcopy_server.sh) и поместить куда-нибудь на своем пути, чтобы вы могли сказать nohup pbcopy_server.sh & при первом запуске компьютера.

2. В любом другом терминале (в том числе в сеансах экрана) теперь вы можете загружать файлы (или перенаправлять вывод программ в /tmp/pbcopy.pipe, и текст появится в буфере обмена.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Чтобы выглядело так, будто вы называете реальным pbcopy, вы можете использовать что-нибудь, чтобы сделать кошку на /tmp/pbcopy.pipe для вас.

3a. Использование функции zsh:

function pbcopy() { cat > /tmp/pbcopy.pipe }

3b. Или создайте сценарий Perl с именем pbcopy и поместите его в каталог ранее в PATH, чем /usr/bin:

#!/usr/bin/perl

use strict;
use warnings;

open my $out, ">", "/tmp/pbcopy.pipe"
   or die "could not open pipe to pbcopy: $!\n";

print $out $_ while <>;
1 голос
/ 29 мая 2009

Существует гораздо более простое решение - просто использовать osascript, как указано в http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/

В комментариях Эндрю Уэйсон предлагает это решение для копирования буфера экрана:

Код в вашем .screenrc

# binds C-a b to copy the contents of your last screen copy to the MacOSX pasteboard
bind b eval "writebuf /tmp/screen-pbcopy" "exec /usr/bin/osascript -e 'tell application \"System Events\"' -e 'set the clipboard to (read posix file \"/tmp/screen-pbcopy\" as text)' -e 'end tell'"

Также используя osascript, вот скрипт bash, который имитирует поведение pbcopy на экране. Улучшения этого скрипта приветствуются:

Сохраните этот код как скрипт bash где-нибудь на вашем пути, например: ~ / bin / pbcopyScreen.bash

#!/bin/bash

# saves all standard input to a file
cat > /tmp/screen_pbcopy_kludge_buffer

# uses osascript to set the MacOSX pastebaord to the contents of the file
/usr/bin/osascript -e 'tell application "System Events"' -e 'set the clipboard to (read posix file "/tmp/screen_pbcopy_kludge_buffer" as text)' -e 'end tell'

rm /tmp/screen_pbcopy_kludge_buffer
0 голосов
/ 16 января 2011

Это, по-видимому, исправлено в версии GNU Screen Snow Leopard, даже несмотря на то, что он сохраняет тот же номер версии 4.00.03 (FAU) 23 октября 2006 года.

В качестве альтернативы вы можете обновить до версии экрана 4.01:

git clone git://git.savannah.gnu.org/screen.git
0 голосов
/ 15 мая 2009

Вы можете установить более старую версию экрана Macport, которая, кажется, решает эту проблему, как указано в комментариях к этой статье:
ссылка на последний комментарий, объясняющий, как это сделать

Я попробовал себя, и теперь с pbcopy экран работает очень хорошо! : -)

Проверьте этот шаг:

  1. Установите Macport, используя его файл DMG. DMG леопарда

  2. Запуск нового терминала и
    $ sudo vi /opt/local/etc/macports/sources.conf
    наконец, эти 2 строки остаются только в sources.conf, не более:

    Файл: /// Пользователи / ххххх / порты
    rsync: //rsync.macports.org/release/ports/ [по умолчанию]

  3. $ cd<br> $ mkdir -p ports/sysutils/ (не создавайте "экранную" директорию, svn будет)

  4. $ cd ports/sysutils/<br> $ svn co -r 45745 http://svn.macports.org/repository/macports/trunk/dports/sysutils/screen

  5. После выезда:

    $ cd $ HOME / ports
    $ portindex
    Создание индекса программного обеспечения в / Users / keugaerg / ports Добавление порта sysutils / screen

    Total number of ports parsed:   1 
    Ports successfully parsed:  1    
    Ports failed:           0
    
  6. $ sudo port install screen (может потребоваться некоторое время для загрузки экрана и его установки)

Тогда все готово, просто нужно запустить / opt / local / bin / screen.

...