it-swarm.it

Come copiare il testo da Emacs a un'altra applicazione su Linux

Quando taglio (uccido) il testo in Emacs 22.1.1 (nella sua finestra su X, in KDE, su Kubuntu), non riesco a incollarlo (strapparlo) in nessun'altra applicazione.

105
memius

Inserisci quanto segue nel tuo .emacs file:

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

Facciamo attenzione con le nostre definizioni qui

  • Un Emacs copy è il comando kill-ring-save (generalmente associato a M-w).
  • A copia del sistema è ciò che di solito si ottiene premendo C-c (o scegliendo "Modifica-> Copia" in una finestra dell'applicazione).
  • Un copia X è "fisicamente" evidenziando il testo con il cursore del mouse.
  • Un Emacs paste è il comando yank (solitamente associato a C-y).
  • A incolla del sistema è ciò che di solito si ottiene premendo C-v (o scegliendo "Modifica-Incolla" in una finestra dell'applicazione).
  • Un X paste sta premendo il "pulsante centrale del mouse" (simulato premendo contemporaneamente i pulsanti sinistro e destro del mouse).

Nel mio caso (su GNOME):

  • Sia Emacs che la copia di sistema di solito funzionano con X paste.
  • La copia X di solito funziona con Incolla Emacs.
  • Per far funzionare la copia di sistema con Emacs paste e la copia di Emacs con Paste di sistema, è necessario aggiungere (setq x-select-enable-clipboard t) alla tua .emacs. Oppure prova

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

Penso che questo sia un comportamento Unix moderno piuttosto standard.

È anche importante notare (anche se dici che stai usando Emacs in una finestra separata) che quando Emacs è in esecuzione in una console, è completamente separato dal sistema e dagli Appunti X: in questo caso il metodo di copia e incolla è mediato dal terminale . Ad esempio, "Modifica-> Incolla" nella finestra del terminale dovrebbe funzionare esattamente come se il testo dagli appunti fosse digitato nel buffer di Emacs.

118
Chris Conway

Lo inserisco nel mio .emacs:

(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)

Successivamente non ho praticamente problemi a tagliare e incollare avanti e indietro da qualsiasi cosa in Emacs a qualsiasi altra applicazione X11 o Gnome.

Bonus: per far accadere queste cose in Emacs senza dover ricaricare tutti i tuoi .emacs, esegui C-x C-e con il cursore subito dopo la parentesi chiusa di ciascuna di quelle espressioni nel buffer .emacs.

In bocca al lupo!

10
jfm3

La difficoltà con copia e incolla in Emacs è che vuoi che funzioni indipendentemente dal kill/yank interno, e vuoi che funzioni sia nel terminale che nella GUI. Esistono solide soluzioni esistenti per terminale o interfaccia grafica, ma non entrambe. Dopo aver installato xsel (ad esempio Sudo apt-get install xsel), ecco cosa faccio per copiare e incollare per combinarli:

(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 che con emacs intendi Emacs sotto X (cioè non all'interno di una finestra terminale).

Ci sono due modi:

  1. (Si applica solo al sistema operativo unix) Evidenzia il testo desiderato con il mouse (questo lo copia negli Appunti X) e fai clic con il pulsante centrale per incollare.
  2. Evidenzia il testo desiderato e poi "M-x appunti-kill-ring-save" (nota che puoi associarlo a un tasto più semplice). Quindi basta "Modifica-> Incolla" nella tua app preferita.

Operazioni negli Appunti disponibili:

  • clipboard-kill-ring-save - copia la selezione da Emacs negli appunti
  • clipboard-kill-region - taglia la selezione da Emacs agli appunti
  • clipboard-yank - incolla dagli appunti a Emacs
7
pdq

C'è n articolo di EmacsWiki che spiega alcuni problemi con la copia e incolla sotto X e come configurarlo per funzionare.

6
cschol

Funziona con M-w su Mac OSX. Aggiungi semplicemente al tuo file . 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

Il codice seguente, ispirato alla risposta di @ RussellStewart sopra, aggiunge il supporto per x-PRIMARY e x-SECONDARY, sostituisce region-active-p con use-region-p per coprire il caso di una regione vuota, non restituisce silenziosamente se xsel non è stato installato (restituisce un messaggio di errore) e include una funzione "taglia" (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

Uso quanto segue, in base alle altre risposte qui, per creare C-x C-w e C-x C-y copia e incolla su Mac e Linux (se qualcuno conosce la versione per Windows sentiti libero di aggiungerla). Nota che su Linux dovrai installare xsel e xclip con il tuo gestore pacchetti.

;; 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, quale piattaforma e quale versione di emacs stai usando? Con GNU Emacs 22.1.1 su Windows Vista, funziona bene per me.

Se, per caso, lo stai facendo da Windows a Linux attraverso un visualizzatore RealVNC, assicurati di eseguire prima "vncconfig -iconic" sul box di Linux .....

0
kfh

Uso sempre incolla veloce: trascino la selezione in emacs, premo il pulsante centrale del mouse nella finestra di destinazione.

(Dal riferimento a Kate, suppongo che tu sia su Linux o simili e probabilmente usi Emacs in X in un modo o nell'altro.)

0
cannam

Potresti voler specificare quale piattaforma stai usando. È su linux, unix, macosx, windows, ms-dos?

Credo che per Windows dovrebbe funzionare. Per MacOSX verrà aggiunto agli appunti di x-windows, che non è la stessa cosa degli appunti di macosx. Per Linux, dipende dal tipo di gestore di finestre, ma credo che x-windows lo gestisca in modo piacevole sulla maggior parte di essi.

Quindi, per favore, specifica.

0
Mats Fredriksson