Como copiar texto do Emacs para outro aplicativo no Linux
-
09-06-2019 - |
Pergunta
Quando corto (mato) texto no Emacs 22.1.1 (em sua própria janela no X, no KDE, no Kubuntu), não consigo colá-lo (arrancá-lo) em nenhum outro aplicativo.
Solução 2
Insira o seguinte em seu .emacs
arquivo:
(setq x-select-enable-clipboard t)
Outras dicas
Vamos ter cuidado com nossas definições aqui
- Um Cópia do Emacs é o comando
kill-ring-save
(geralmente vinculado a M-w). - A cópia do sistema é o que você normalmente obtém ao pressionar C-c (ou escolhendo "Editar->Copiar" na janela do aplicativo).
- Um X cópia é destacar "fisicamente" o texto com o cursor do mouse.
- Um Pasta Emacs é o comando
yank
(geralmente vinculado a C-y). - A pasta do sistema é o que você normalmente obtém ao pressionar Cv (ou escolhendo "Editar-Colar" em uma janela do aplicativo).
- Um X colar está pressionando o "botão central do mouse" (simulado pressionando os botões esquerdo e direito do mouse juntos).
No meu caso (no GNOME):
- Tanto o Emacs quanto a cópia do sistema geralmente funcionam com X paste.
- A cópia X geralmente funciona com a pasta Emacs.
Para fazer com que a cópia do sistema funcione com a colagem do Emacs e a cópia do Emacs funcione com a colagem do sistema, você precisa adicionar
(setq x-select-enable-clipboard t)
para o seu.emacs
.Ou tenteMETA-X set-variable RET x-select-enable-clipboard RET t
Eu acho que esse é um comportamento bastante padrão do Unix moderno.
Também é importante observar (embora você diga que está usando o Emacs em uma janela separada) que quando o Emacs está sendo executado em um console, ele é completamente divorciado do sistema e das pranchetas do X:recortar e colar, nesse caso, é mediado pelo terminal.Por exemplo, "Editar-> Colar" na janela do seu terminal deve agir exatamente como se você tivesse digitado o texto da área de transferência no buffer do Emacs.
A dificuldade de copiar e colar no Emacs é que você deseja que ele funcione independentemente do kill/yank interno e que funcione tanto no terminal quanto na GUI.Existem soluções robustas para terminal ou GUI, mas não para ambos.Depois de instalar o xsel (por exemplo, sudo apt-get install xsel
), aqui está o que faço para copiar e colar para combiná-los:
(defun copy-to-clipboard ()
(interactive)
(if (display-graphic-p)
(progn
(message "Yanked region to x-clipboard!")
(call-interactively 'clipboard-kill-ring-save)
)
(if (region-active-p)
(progn
(shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
(message "Yanked region to clipboard!")
(deactivate-mark))
(message "No region active; can't yank to clipboard!")))
)
(defun paste-from-clipboard ()
(interactive)
(if (display-graphic-p)
(progn
(clipboard-yank)
(message "graphics active")
)
(insert (shell-command-to-string "xsel -o -b"))
)
)
(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)
Eu coloco isso no meu .emacs:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Posteriormente, basicamente não tenho problemas para cortar e colar de qualquer coisa no Emacs para qualquer outro aplicativo X11 ou Gnome.
Bônus:para que essas coisas aconteçam no Emacs sem ter que recarregar todo o seu .emacs, faça C-x C-e com o cursor logo após o parêntese próximo de cada uma dessas expressões no buffer .emacs.
Boa sorte!
Presumo que por emacs você esteja se referindo ao Emacs no X (ou seja, não dentro de uma janela de terminal).
Existem duas maneiras:
- (Aplica -se apenas ao UNIX OS's's) destacar o texto desejado com o mouse (isso copia -o para a área de transferência X) e depois clique no meio para colar.
- Destaque o texto desejado e, em seguida, "MX Clipboard-Kill-Ring-Save" (observe que você pode vinculá-lo a uma chave mais fácil).Depois é só "Editar->Colar" em seu aplicativo favorito.
Operações da área de transferência disponíveis:
- Armador-a-ringue-Seleção de cópias de EMACS para a área de transferência
- CLIPboard-Kill-Region-Corte a seleção de EMACS para a área de transferência
- CLIPboard-Yank-Cole da área de transferência para EMACS
Há um artigo do EmacsWiki isso explica alguns problemas com copiar e colar no X e como configurá-lo para funcionar.
Isso funciona com M-w
no Mac OSX.Basta adicionar ao seu .emacs arquivo.
(defun copy-from-osx ()
(shell-command-to-string "pbpaste"))
(defun paste-to-osx (text &optional push)
(let ((process-connection-type nil))
(let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
(process-send-string proc text)
(process-send-eof proc))))
(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)
O código abaixo, inspirado na resposta de @RussellStewart acima, adiciona suporte para x-PRIMARY e x-SECONDARY, substitui region-active-p
com use-region-p
para cobrir o caso de uma região vazia, não retorna silenciosamente se o xsel não tiver sido instalado (retorna uma mensagem de erro) e inclui uma função "cut" (emacs C-y, windows C-x).
(defun my-copy-to-xclipboard(arg)
(interactive "P")
(cond
((not (use-region-p))
(message "Nothing to yank to X-clipboard"))
((and (not (display-graphic-p))
(/= 0 (shell-command-on-region
(region-beginning) (region-end) "xsel -i -b")))
(error "Is program `xsel' installed?"))
(t
(when (display-graphic-p)
(call-interactively 'clipboard-kill-ring-save))
(message "Yanked region to X-clipboard")
(when arg
(kill-region (region-beginning) (region-end)))
(deactivate-mark))))
(defun my-cut-to-xclipboard()
(interactive)
(my-copy-to-xclipboard t))
(defun my-paste-from-xclipboard()
"Uses shell command `xsel -o' to paste from x-clipboard. With
one prefix arg, pastes from X-PRIMARY, and with two prefix args,
pastes from X-SECONDARY."
(interactive)
(if (display-graphic-p)
(clipboard-yank)
(let*
((opt (prefix-numeric-value current-prefix-arg))
(opt (cond
((= 1 opt) "b")
((= 4 opt) "p")
((= 16 opt) "s"))))
(insert (shell-command-to-string (concat "xsel -o -" opt))))))
(global-set-key (kbd "C-c C-w") 'my-cut-to-xclipboard)
(global-set-key (kbd "C-c M-w") 'my-copy-to-xclipboard)
(global-set-key (kbd "C-c C-y") 'my-paste-from-xclipboard)
Hmm, qual plataforma e qual versão do emacs você está usando?Com o GNU Emacs 22.1.1 no Windows Vista, funciona bem para mim.
Se, por acaso, você estiver fazendo isso do Windows para o Linux através de um visualizador RealVNC, certifique-se de estar executando "vncconfig -iconic" na caixa do Linux primeiro.....
Eu sempre uso a colagem rápida - arraste a seleção no emacs, aperte o botão do meio do mouse na janela de destino.
(A partir da referência ao Kate, presumo que você esteja no Linux ou similar e provavelmente use o emacs no X de uma forma ou de outra.)
Você pode querer especificar qual plataforma está usando.Está no Linux, Unix, MacOSX, Windows, MS-DOS?
Acredito que para windows deve funcionar.Para MacOSX, ele será adicionado à área de transferência do x-windows, que não é a mesma coisa que a área de transferência do macosx.Para Linux, depende do seu tipo de gerenciador de janelas, mas acredito que o x-windows lida com isso de uma maneira agradável na maioria deles.
Então, por favor especifique.
O que faço é usar uma boa ferramenta de terminal (PuTTY no Windows, Konsole ou Terminal no Linux) que possua recursos de cópia integrados.
No PuTTY, você destaca o texto desejado com o mouse e depois cola em outro lugar.Clicar com o botão direito em uma janela do PuTTY cola o conteúdo do buffer de copiar/colar do Windows.
No Konsole ou Terminal no Linux, você destaca o que deseja e pressiona Shift+Ctrl+C para copiar e Shift+Ctrl+V para colar.
Na compilação win32 do emacs, arrancar o texto o coloca no buffer de copiar/colar.a maior parte do tempo.
No Mac OS X, os cortes de teclas da Apple funcionam bem, porque o Terminal os captura.
Não há uma maneira direta de fazer isso na linha de comando porque o shell não mantém um buffer de copiar/colar para cada aplicativo.festa faz mantém um buffer de copiar/colar para si mesmo e, por padrão, os atalhos do emacs ^k/^y funcionam.