Pergunta

Problema não resolvido, embora uma resposta foi aceite:. Estamos trabalhando para obter o código de Jonas ao trabalho

Problema: para alterar o código de (1) a (2)

Eu sei que a fio . Eu quero ser capaz de executar a tela seguinte dentro do código

Código (1)

cat ~/.vimrc | pbcopy                   (1)

Código (2)

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

Minha tentativa de resolver o problema: para colocar o seguinte código ao .zshrc

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

I get

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

Como você pode usar a tela dentro pbcopy?

Foi útil?

Solução

Tudo bem, isso é uma resposta maluco, mas é também uma questão maluco, então pelo menos eles combinam. Você pode criar um pipe nomeado com mkfifo e configuração, em seguida, um loop infinito que lê arquivos do pipe nomeado e tubulações-los para pbcopy (ou xsel, xclip, etc.).

1 Em um terminal que não está em uma sessão de tela (executar este apenas uma vez):.

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

Você pode querer transformar isso em um script shell como (isso provavelmente deve ser mais robusto)

#!/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

que você pode nomear pbcopy_server.sh, faça algum lugar executável (chmod a+x pbcopy_server.sh) e colocar em seu caminho, para que possa dizer nohup pbcopy_server.sh & quando você começa a sua máquina.

2. Em qualquer outro terminal (incluindo aqueles em sessões de tela), você pode agora arquivos gato (ou saída de redirecionamento dos programas em /tmp/pbcopy.pipe eo texto aparecerá na área de transferência.

cat file > /tmp/pbcopy.pipe

df -h > /tmp/pbcopy.pipe

3. Para fazer parecer que você está chamando o pbcopy real, você pode usar algo para fazer o cat'ing para /tmp/pbcopy.pipe para você.

3a Use uma função zsh:.

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

3b Ou criar um script chamado pbcopy Perl e colocá-lo em um diretório anterior no seu PATH que /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 <>;

Outras dicas

Há uma solução muito mais fácil osascript uso apenas como encontrado em http://www.samsarin.com/blog/2008/10/18/copying-gnu-screen-buffer-to-leopard-clipboard/

Nos comentários, Andrew Wason oferece esta solução para copiar o buffer de tela:

Código em sua .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'"

Também usando osascript, aqui está um script que simula o comportamento de pbcopy dentro da tela. Melhorias para este script é bem-vindo:

Salvar este código como um lugar script bash em seu caminho, por exemplo: ~ / 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

Você pode instalar uma versão mais antiga da tela do MacPort que parece resolver este problema, como indicado nos comentários deste artigo:
ligação para o último comentário explicando como fazer

Eu tentei me ea tela funciona muito bem agora com pbcopy! : -)

Verifique se passo:

  1. Instale MacPort usando seu arquivo DMG. Leopard é DMG

  2. Lançamento de um novo Terminal e
    $ sudo vi /opt/local/etc/macports/sources.conf
    finalmente, essas 2 linhas permanece apenas em sources.conf, não mais:

    file: /// Users / xxxxx / ports
    rsync: //rsync.macports.org/release/ports/ [default]

  3. $ cd
    $ mkdir -p ports/sysutils/
    (não criar um diretório "tela", SVN vai)

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

  5. Uma vez que confira:

    $ cd $ HOME / portas
    $ PortIndex
    Criando índice de software na / Users / keugaerg / ports Adicionando sysutils porta / tela

    Total number of ports parsed:   1 
    Ports successfully parsed:  1    
    Ports failed:           0
    
  6. $ sudo port install screen (Pode demorar um pouco como o download de tela e buidling-lo)

Em seguida, ele é feito, apenas tem que lançamento / opt / / bin / tela local.

Esta parece ser corrigido na versão do Snow Leopard da tela GNU mesmo que ele mantém o mesmo número de versão 4.00.03 (FAU) 23-Out-06.

Como alternativa, você pode atualizar a tela versão 4.01:

git clone git://git.savannah.gnu.org/screen.git
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top