Configure o emacs para cortar e copiar texto na área de transferência do Mac OS X


16

Posso configurar emacspara copiar / recortar o texto do emacs (versão padrão do Terminal) e colá-lo em outro lugar (no programa X Window)?


Nitpick: você diz "versão padrão do Terminal", mas o modo padrão de funcionamento do Emacs é usar a GUI em vez do terminal de texto. Talvez você esteja se referindo ao antigo /usr/bin/emacsexecutável fornecido pela Apple com o OSX e que é arbitrariamente limitado ao terminal de texto?
Stefan

Respostas:


4

Para copiar a região atual para a área de transferência do OS X, você pode usar

(shell-command-on-region (region-beginning) (region-end) "pbcopy")

A inversa, copiar o buffer de colagem do OS X para o Emacs kill ring, não é recomendada. Anéis de matança e pranchetas são estruturas muito diferentes e não há uma boa resposta para o que, exatamente, empurrar uma prancheta para um anel de matança deve fazer. Ainda assim, você pode executar pbpastemanualmente para obter o conteúdo atual da área de transferência.


Isso não funcionou para mim. A solução marcada neste post do Emacs funciona no entanto.
Galder Zamarreño

8

Adicione isto a ~/.emacs:

(defun pbcopy ()
  (interactive)
  (call-process-region (point) (mark) "pbcopy")
  (setq deactivate-mark t))

(defun pbpaste ()
  (interactive)
  (call-process-region (point) (if mark-active (mark) (point)) "pbpaste" t t))

(defun pbcut ()
  (interactive)
  (pbcopy)
  (delete-region (region-beginning) (region-end)))

(global-set-key (kbd "C-c c") 'pbcopy)
(global-set-key (kbd "C-c v") 'pbpaste)
(global-set-key (kbd "C-c x") 'pbcut)

Se você usa o Emacs no iTerm 2, também pode remapear as combinações de teclas nas preferências:

Em seguida, adicione algo como isto para ~/.emacs:

(global-set-key (kbd "<f13> c") 'pbcopy)
(global-set-key (kbd "<f13> v") 'pbpaste)
(global-set-key (kbd "<f13> x") 'pbcut)

Ainda é a melhor resposta. Obrigado! Nota para o iterm, para criar essas "Ações", escolha "Enviar código de escape" e você omita o "^ [." (não funcionou com o tipo de ação "Enviar texto")
Jay

3

Aqui está uma solução para integrar o OS X Clipboard ao ring kill do Emacs de Daniel Nelson: https://github.com/wesen/emacs/blob/master/pbcopy.el

Comentários do autor:

Permite que o kill-ring interaja com a área de transferência ao executar o Emacs a partir de um terminal Mac OSX (sem perder a funcionalidade completa do kill-ring). Tudo o que fiz foi modificar xclip.elpara trabalhar com pbcopye pbpaste. Os verdadeiros agradecimentos a Leo Shidai Liu, autor do xclip.el.


1

O seguinte simplesmente funciona, entendi daqui :)

(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))

Você poderia adicionar um link à postagem original?
Vincent

0

A versão do emacs incluída no OS X é muito antiga para fornecer essa funcionalidade.

Felizmente, você pode atualizar o emacs para uma versão integrada à sua área de transferência aqui: http://emacsformacosx.com

Acredito que você use Ctrl+ Ypara colar no emacs, após a atualização.


Ah - esqueci de dizer - a versão do emacs que você baixará desse site é gráfica (ou seja, não é executada no Terminal). É impossível para aplicativos no Terminal acessar a área de transferência sem hack, o que não consigo mais encontrar. : /
Faiz Saleem

2
pbcopye pbpasteainda existem e não são hacks.

Isso é possível, no entanto, assumi que o OP deseja usar comandos do teclado para copiar e colar. O que eu quis dizer foi que os aplicativos Terminal não podem usar atalhos de teclado para copiar e colar junto com a área de transferência do OS X sem hacks.
precisa

"Os aplicativos de terminal não podem usar atalhos de teclado para copiar e colar junto com a área de transferência do OS X sem hacks". Obviamente, isso não é verdade, pois são pbcopye pbpasteambos aplicativos de terminal; qualquer outro aplicativo de terminal pode fazer o que eles fazem, ou simplesmente chamá-los diretamente.

O que eu estava procurando era se conectar pbcopyao Emacs cut & copy. É possível?
Syntagma

0

Achei este post realmente útil (definindo 2 funções e atribuindo atalhos para elas no seu arquivo ~ / .emacs).

Depois de adicionar essas linhas ao seu arquivo .emacs, você não terá acesso a esses atalhos até abrir uma nova sessão de shell (guia / janela). Permita que as alterações sejam aplicadas.


0

Você pode obter essa interação com a área de transferência de forma transparente enquanto executa o Emacs no terminal de texto ativando o xclip-modefornecido pelo xclippacote que você pode instalar no GNU ELPA (ou seja, via M-x package-list-packages RET).

Consulte também /emacs/10900/ para obter uma pergunta e respostas semelhantes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.