it-swarm-pt.tech

Como copiar texto do Emacs para outro aplicativo no Linux

Quando corto (mata) o texto no Emacs 22.1.1 (em sua própria janela no X, no KDE, no Kubuntu), não consigo colar (puxar) em nenhum outro aplicativo.

105
memius

Insira o seguinte no seu .emacs Arquivo:

(setq x-select-enable-clipboard t)
88
memius

Vamos tomar 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 escolha "Editar-> Copiar" em uma janela do aplicativo).
  • Um cópia X está destacando "fisicamente" o texto com o cursor do mouse.
  • Um colar Emacs é o comando yank (geralmente vinculado a C-y).
  • A pasta do sistema é o que você normalmente obtém ao pressionar C-v (ou escolhendo "Editar e colar" em uma janela do aplicativo).
  • Um colar X está pressionando o "botão central do mouse" (simulado pressionando os botões esquerdo e direito do mouse juntos).

No meu caso (no GNOME):

  • O Emacs e a cópia do sistema geralmente funcionam com a pasta X.
  • A cópia X geralmente funciona com a pasta Emacs.
  • Para fazer a cópia do sistema funcionar com a pasta Emacs e a cópia do Emacs funcionar com a pasta do sistema, você precisa adicionar (setq x-select-enable-clipboard t) para o seu .emacs. Ou tente

    META-X set-variable RET x-select-enable-clipboard RET t
    

Eu acho que esse é um comportamento moderno padrão do Unix.

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 separado do sistema e da área de transferência do X: recortar e colar nesse caso é mediado pelo terminal . Por exemplo, "Editar-> Colar" na janela do terminal deve agir exatamente como se você digitasse o texto da área de transferência no buffer do Emacs.

118
Chris Conway

Eu colo 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 em 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 precisar recarregar todo o seu .emacs, faça C-x C-e com o cursor logo após o ponto final de cada uma dessas expressões no buffer .emacs.

Boa sorte!

10
jfm3

A dificuldade com copiar e colar no Emacs é que você deseja que ele funcione independentemente do kill/yank interno e que ele funcione tanto no terminal quanto na GUI. Existem soluções robustas existentes para terminal ou GUI, mas não para ambas. Depois de instalar o xsel (por exemplo, Sudo apt-get install xsel), eis 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)
10
RussellStewart

Presumo que pelo emacs você está significando o Emacs no X (ou seja, não dentro de uma janela do terminal).

Existem duas maneiras:

  1. (Aplica-se apenas aos sistemas operacionais unix) Destaque o texto desejado com o mouse (ele copia para a área de transferência do X) e clique com o botão do meio para colar.
  2. Destaque o texto desejado e, em seguida, "M-x clipboard-kill-ring-save" (observe que você pode vincular isso a uma tecla mais fácil). Em seguida, basta "Editar-> Colar" no seu aplicativo favorito.

Operações da área de transferência disponíveis:

  • clipboard-kill-ring-save - copia a seleção do Emacs para a área de transferência
  • clipboard-kill-region - corta a seleção do Emacs para a área de transferência
  • clipboard-yank - cole da área de transferência para o Emacs
7
pdq

m artigo do EmacsWiki que explica alguns problemas com copiar e colar no X e como configurá-lo para funcionar.

6
cschol

Isso funciona com M-w no Mac OSX. Basta adicionar ao seu arquivo . Emacs .

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

Fonte https://Gist.github.com/the-kenny/267162

4
cevaris

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)
1
user1404316

Eu uso o seguinte, com base nas outras respostas aqui, para fazer C-x C-w e C-x C-y copie e cole no Mac e no Linux (se alguém souber a versão para Windows, fique à vontade para adicioná-la). Observe que no Linux você terá que instalar o xsel e o xclip com o seu gerenciador de pacotes.

;; Commands to interact with the clipboard

(defun osx-copy (beg end)
  (interactive "r")
  (call-process-region beg end  "pbcopy"))

(defun osx-paste ()
  (interactive)
  (if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
  (call-process "pbpaste" nil t nil))

(defun linux-copy (beg end)
  (interactive "r")
  (call-process-region beg end  "xclip" nil nil nil "-selection" "c"))

(defun linux-paste ()
  (interactive)
  (if (region-active-p) (delete-region (region-beginning) (region-end)) nil)
  (call-process "xsel" nil t nil "-b"))

(cond
 ((string-equal system-type "darwin") ; Mac OS X
  (define-key global-map (kbd "C-x C-w") 'osx-copy)
  (define-key global-map (kbd "C-x C-y") 'osx-paste))
 ((string-equal system-type "gnu/linux") ; linux
  (define-key global-map (kbd "C-x C-w") 'linux-copy)
  (define-key global-map (kbd "C-x C-y") 'linux-paste)))
0
asmeurer

Hmm, qual plataforma e qual versão do emacs você está usando? Com o GNU Emacs 22.1.1 no Windows Vista, ele funciona bem para mim.

Se, por acaso, você estiver fazendo isso do Windows para o Linux através de um visualizador RealVNC, verifique se está executando o "vncconfig -iconic" na caixa do linux primeiro ...

0
kfh

Eu sempre uso colagem rápida - arraste a seleção no emacs, aperte o botão do meio do mouse na janela de destino.

(Pela referência a kate, acho que você está no linux ou similar e provavelmente está usando o emacs no X de uma maneira ou de outra.)

0
cannam

Você pode especificar qual plataforma está usando. É no linux, unix, macosx, windows, ms-dos?

Eu acredito que para o Windows deve funcionar. Para o 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 o Linux, isso depende do seu sabor do gerenciador de janelas, mas acredito que o x-windows lide com isso de uma maneira agradável na maioria deles.

Então, por favor especifique.

0
Mats Fredriksson