2015-01-04 14 views
10

Ho difficoltà a fare in modo che emacs -nw funzioni efficacemente in modalità terminale (emacs -nw). Alcune informazioni di configurazione: Il server di lavoro è connesso tramite SSH ed emacs è in esecuzione sul server. Di solito mi sto connettendo usando SSH e "emacs -nw" per lavorare sui miei file.Modalità terminale emacs: come copiare e incollare in modo efficiente

La configurazione emacs viene prelevato da: https://hugoheden.wordpress.com/2009/03/08/copypaste-with-emacs-in-terminal/

;; make mouse selection to be emacs region marking 
(require 'mouse) 
(xterm-mouse-mode t) 
(defun track-mouse (e)) 
(setq mouse-sel-mode t) 

;; enable clipboard in emacs 
(setq x-select-enable-clipboard t) 

;; enable copy/paste between emacs and other apps (terminal version of emacs) 
(unless window-system 
(when (getenv "DISPLAY") 
    ;; Callback for when user cuts 
    (defun xsel-cut-function (text &optional push) 
    ;; Insert text to temp-buffer, and "send" content to xsel stdin 
    (with-temp-buffer 
     (insert text) 
     ;; I prefer using the "clipboard" selection (the one the 
     ;; typically is used by c-c/c-v) before the primary selection 
     ;; (that uses mouse-select/middle-button-click) 
     (call-process-region (point-min) (point-max) "xsel" nil 0 nil "--clipboard" "--input"))) 
    ;; Call back for when user pastes 
    (defun xsel-paste-function() 
    ;; Find out what is current selection by xsel. If it is different 
    ;; from the top of the kill-ring (car kill-ring), then return 
    ;; it. Else, nil is returned, so whatever is in the top of the 
    ;; kill-ring will be used. 
    (let ((xsel-output (shell-command-to-string "xsel --clipboard --output"))) 
     (unless (string= (car kill-ring) xsel-output) 
     xsel-output))) 
    ;; Attach callbacks to hooks 
    (setq interprogram-cut-function 'xsel-cut-function) 
    (setq interprogram-paste-function 'xsel-paste-function) 
    ;; Idea from 
    ;; http://shreevatsa.wordpress.com/2006/10/22/emacs-copypaste-and-x/ 
    ;; http://www.mail-archive.com/[email protected]/msg03577.html 
)) 

La ragione per avere:

(require 'mouse) 
(xterm-mouse-mode t) 
(defun track-mouse (e)) 
(setq mouse-sel-mode t) 

è quello di consentire la selezione del mouse sul testo tale che la regione testo è evidenziato come "Cx SPC "che segna la regione. Quindi posso usare "M-x w" per copiare e "C-x y" per incollare il testo all'interno di emacs e tra emacs e altre app.

Tutto sembra perfetto tranne che tutte le operazioni relative a X sono DAVVERO LENTAMENTE! La mia connessione al server remoto è fluida: la latenza di solito è inferiore a 100ms. Ma per uccidere una riga di testo usando "C-x k", ci vogliono ~ 5 secondi! Per incollarlo, ci vogliono altri 5 secondi!

Quando la copia/incolla è frequente a volte, questo diventa davvero fastidioso. Penso che questo sia legato alla messaggistica di X sever, ma non sono sicuro che ci sia un buon modo per risolvere questo problema.

Qualche idea? Grazie!

+1

hai provato in esecuzione emacs a livello locale e utilizzando la modalità vagabondo – Squidly

+0

questo è stato il primo tentativo che ho fatto -.!? ogni volta che li risparmio tutte le modifiche , si sta sincronizzando con il file sul server remoto, che non è fluido. Inoltre, preferisco non avviare emacs spesso (la macchina locale è un notebook). – galactica

+0

Per curiosità, hai problemi con la riga (setq interprogram-paste ...) non in esecuzione? Devo eseguirli manualmente. –

risposta

3

Questa non è una soluzione ideale di per sé, ma ho trovato un modo in cui mi sento migliore rispetto al precedente.

L'idea è quella di sbarazzarsi di X che causa problemi di latenza pesanti, vale a dire mantenere solo le seguenti:

;; enable clipboard in emacs 
(setq x-select-enable-clipboard t) 

I risultati sono:

  1. copia/incolla all'interno di Emacs è semplice e veloce.

  2. copia da altre applicazioni a Emacs: Ctrl + Shift + v

  3. copia da Emacs per altre applicazioni: la selezione del mouse è ora su X Selezione, quindi fare clic destro e copia deve copiare il testo nella selezione . Si noti che 'Mw" ora non copiare nulla nella selezione o di un sistema appunti.

Anche questo è un compromesso piuttosto che una soluzione, ma considerando il fatto che io copio/incollo il più delle volte le operazioni inter-app , questo è accettabile in questo momento

ancora in attesa di una buona soluzione