2015-01-04 11 views
10

Ich habe eine harte Zeit, diese Emacs-nw effektiv unter dem Terminal-Modus (Emacs-Nw) zu arbeiten. Einige Setup-Informationen: Der funktionierende Server ist über SSH verbunden, und Emacs läuft auf dem Server. Normalerweise verbinde ich mich mit SSH und "emacs -nw", um an meinen Dateien zu arbeiten.Emacs Terminal-Modus: wie man effizient kopieren und einfügen

Die Emacs-Config wird aufgenommen von: 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 
)) 

Der Grund zu haben:

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

ist Mausauswahl über den Text zu ermöglichen, so dass der Textbereich nur als „Cx hervorgehoben SPC "Kennzeichnung der Region. Dann kann ich "M-x w" zum Kopieren und "C-x y" verwenden, um Text in Emacs und zwischen Emacs und anderen Apps einzufügen.

Alles sieht perfekt aus, außer dass alle mit X verbundenen Operationen wirklich LANGSAM sind! Meine Verbindung zum Remote-Server ist flüssig - die Latenz liegt normalerweise unter 100ms. Aber um eine Textzeile mit "C-x k" zu löschen, dauert es ~ 5 Sekunden! Um es einzufügen, dauert es weitere 5 Sekunden!

Wenn Copy/Paste manchmal häufig ist, wird dies wirklich ärgerlich. Ich denke, das hängt mit dem X-Server-Messaging zusammen, aber ich bin mir nicht sicher, ob es einen guten Weg gibt, das zu beheben.

Irgendwelche Ideen? Danke!

+1

Haben Sie versucht, emacs lokal und mit tramp-Modus ausgeführt werden – Squidly

+0

dass der erste Versuch war ich gemacht -.!? jedes Mal, wenn ich irgendwelche Änderungen speichern Es synchronisiert sich mit der Datei auf dem Remote-Server, die nicht glatt ist. Außerdem möchte ich Emacs nicht oft starten (lokaler Computer ist ein Notebook). – galactica

+0

Haben Sie aus Neugierde Probleme mit der (setq interprogram-paste ...) Zeile, die nicht läuft? Ich muss sie manuell ausführen. –

Antwort

3

Dies ist nicht eine ideale Lösung per se, aber ich habe einen Weg gefunden, dass ich mich besser fühle als der vorherige.

Die Idee ist von X, um loszuwerden, die schwere Latenzprobleme verursacht, dh halten nur die folgenden:

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

Die Ergebnisse sind:

  1. Kopieren/Einfügen in Emacs ist einfach und schnell.

  2. Kopie von anderen Anwendungen zu Emacs: Strg + Umschalt + v

  3. Kopie von Emacs zu anderen Apps: Maus-Auswahl ist jetzt auf X Auswahl, so die rechte Maustaste und kopieren Sie müssen den Text in die Auswahl kopieren . Beachten Sie, dass ‚Mw“ jetzt nicht alles in eine Auswahl oder System-Zwischenablage kopieren.

Dies ist wieder ein Kompromiss eher als eine Lösung, aber in Anbetracht der Tatsache, dass ich Kopieren/Einfügen häufiger als inter-App, dies ist im Moment akzeptabel

noch freuen uns auf eine gute Lösung