2010-07-09 21 views
29

Ho (cua-mode t) nel mio .emacs, in modo che Cc sia copia e Cv si incolli come la maggior parte degli altri programmi sul desktop (Ubuntu, Gnome, Linux) . Tuttavia, Emacs non sembra condividere il buffer degli appunti/copia con altri programmi.Integrare Emacs copia/incolla con Sistema copia/incolla

Ad esempio, se I C-c in Firefox posso S-C-v incollare in un terminale o C-v per incollare in gedit. Tuttavia, se I C-v (o C-y) in emacs, non ottengo ciò che ho copiato da Firefox.

C'è un modo per farlo funzionare? C'è un altro comando che posso usare per accedere al buffer copia-incolla del sistema?

+0

Condivide un blocco appunti con il sistema a proposito, ma solo la selezione del mouse (ad esempio, cosa è possibile incollare con un clic centrale altrove). – doublep

+0

Non dovrebbe essere su superuser.com? –

+1

Le domande Vim ed Emacs sono generalmente considerate accettabili per SO in quanto strumenti del programmatore. Guarda le varie discussioni che hanno già avuto luogo su questo argomento. – jamessan

risposta

8

Questo funziona sulla mia macchina:

;; CUA OS copypasta even in ncurses mode 
(case system-type 
    ('darwin (unless window-system 
      (setq interprogram-cut-function 
        (lambda (text &optional push) 
        (let* ((process-connection-type nil) 
          (pbproxy (start-process "pbcopy" "pbcopy" "/usr/bin/pbcopy"))) 
         (process-send-string pbproxy text) 
         (process-send-eof pbproxy)))))) 
    ('gnu/linux (progn 
       (setq x-select-enable-clipboard t) 
       (defun xsel-cut-function (text &optional push) 
        (with-temp-buffer 
        (insert text) 
        (call-process-region (point-min) (point-max) "xsel" nil 0 nil "--clipboard" "--input"))) 
       (defun xsel-paste-function() 

        (let ((xsel-output (shell-command-to-string "xsel --clipboard --output"))) 
        (unless (string= (car kill-ring) xsel-output) 
         xsel-output))) 
       (setq interprogram-cut-function 'xsel-cut-function) 
       (setq interprogram-paste-function 'xsel-paste-function)))) 
+0

Bello! Questo funziona per C-c/C-x/C-v, ma ora il clic centrale non viene più condiviso con il sistema. Il clic centrale funziona ancora per te? – sligocki

+0

funziona solo in modalità finestra emacs piuttosto che in modalità terminale (-nw), giusto? – galactica

+0

su mac questo funziona per me in modalità terminale – mwag

15

Vedere clipboard-yank e clipboard-kill-region nella sezione clipboard del manuale.

+0

+1 per essere stato il primo. – danlei

+1

Ottimo, è esattamente quello che stavo cercando. Ho aggiunto (x-select-enable-clipboard t) al mio file .emacs e tutto funziona come mi aspetterei. Grazie. – sligocki

+0

Hm, in realtà, questo non è esattamente giusto. Questo verrà incollato dalle selezioni X11. Ma è molto meglio di quello che era. – sligocki

4

Forse questa pagina EmacsWiki aiuterà, in particolare la sezione in cui sono menzionati clipboard-kill-region, clipboard-kill-ring-save e clipboard-yank.

+0

Grazie a @danlei, il wiki aveva qualche consiglio utile. – sligocki

+0

Prego. EmacsWiki è una grande fonte per tutto ciò che riguarda Emacs. – danlei

27

Ho avuto lo stesso problema. Ho aggiunto questo al mio file .emacs:

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

Ora Ctrl-C e Ctrl-V tra Emacs e altre applicazioni funzionano bene. Fonte: Ubuntu Forums

+0

Ah, ancora meglio. Ho solo avuto il primo comando. Ma il secondo aiuta un problema che avevo, in cui la selezione di testo e clic centrale in emacs non è stata eseguita correttamente. Grazie! – sligocki

+0

Sono novizio. Ho creato ~/.emacs per la prima volta. Ho aggiunto il tuo codice a ~/.emacs e funziona. Grazie. –

+1

Questo non sembra funzionare per Mac OSX; Ottenere questo errore. 'current-kill: la definizione della funzione del simbolo è void: x-cut-buffer-or-selection-value' – cevaris

0

posso risolvere questo problema con autocutsel, che lavora con emacs e il resto del mio sistema Ubuntu troppo.

autocutsel - keep the X clipboard and the cutbuffer in sync 

Io uso i seguenti comandi (Esegui una volta, di solito invocato da meccanismo di "startup" la mia finestra del gestore, o ~/.xsession):

autocutsel -fork 
autocutsel -fork -selection PRIMARY 

La prima istanza di autocutsel fa il seguente :

modifiche ai brani in autocutsel nel buffer e negli Appunti del server [X11] selezione. Quando gli appunti sono cambiati , aggiorna il cutbuffer. Quando il cutbuffer viene cambiato, possiede la selezione degli appunti. La selezione di CutBuffer e Appunti è sempre sincronizzata.

Tuttavia di solito c'è una terza appunti, chiamato PRIMARY, che la seconda istanza di autocutsel viene utilizzato per la sincronizzazione con gli altri due.

I vantaggi di questo sono che i tre clipboard principali sono unificati, in modo che la selezione corrente di incolla tramite il middle-click o la copia/incolla in stile CUA con CTRL-C e CTRL-V funzionino tutti insieme.

Lo svantaggio principale di questo approccio è che qualsiasi evidenziazione automatica del testo (come il doppio clic per evidenziare una parola in emacs o fare clic sull'icona BlockQuote in un campo di modifica StackOverflow) cancellerà istantaneamente il buffer di copia.Per ovviare a questo problema, utilizzo un registratore cronologico di appunti come glipper, che registra anche comodamente tutti i contenuti degli appunti e mi consente di recuperare i contenuti degli appunti persi in tali circostanze. Può richiedere un po 'di preparazione e funziona bene per me. In alternativa, è possibile sperimentare l'opzione -pause, che attende un certo periodo di tempo prima di effettuare la selezione, che può essere abbastanza lunga da deselezionare o eliminare qualsiasi testo selezionato automaticamente. Tuttavia, non sono riuscito a ottenere risultati che funzionassero abbastanza bene per me.

Si noti che questa soluzione non richiede alcuna configurazione speciale emacs, che utilizzo con cua-mode abilitata.