it-swarm-eu.dev

So kopieren Sie Text von Emacs in eine andere Anwendung unter Linux

Wenn ich Text in Emacs 22.1.1 ausschneide (in einem eigenen Fenster auf X, in KDE, auf Kubuntu), kann ich ihn in keiner anderen Anwendung einfügen (ziehen).

105
memius

Fügen Sie folgendes in Ihr .emacs Datei:

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

Lassen Sie uns mit unseren Definitionen hier vorsichtig sein

  • Ein Emacs-Kopie ist der Befehl kill-ring-save (Normalerweise gebunden an M-w).
  • Ein Systemkopie ist das, was Sie normalerweise durch Drücken von erhalten C-c (oder wählen Sie "Bearbeiten-> Kopieren" in einem Anwendungsfenster).
  • Ein X-Kopie hebt Text "physisch" mit dem Mauszeiger hervor.
  • Ein Emacs Paste ist der Befehl yank (normalerweise gebunden an C-y).
  • A System Paste ist das, was Sie normalerweise durch Drücken von erhalten C-v (oder wählen Sie "Bearbeiten-Einfügen" in einem Anwendungsfenster).
  • Ein X einfügen drückt die "mittlere Maustaste" (simuliert durch gleichzeitiges Drücken der linken und rechten Maustaste).

In meinem Fall (unter GNOME):

  • Sowohl Emacs als auch Systemkopien funktionieren normalerweise mit X-Paste.
  • X copy funktioniert normalerweise mit Emacs paste.
  • Damit Systemkopien mit Emacs Paste und Emacs Copy mit System Paste funktionieren, müssen Sie (setq x-select-enable-clipboard t) Zu Ihrem .emacs Hinzufügen. Oder Versuche

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

Ich denke, das ist ziemlich normales modernes Unix-Verhalten.

Es ist auch wichtig zu beachten (obwohl Sie sagen, dass Sie Emacs in einem separaten Fenster verwenden), dass Emacs, wenn es in einer Konsole ausgeführt wird, vollständig vom System und den X-Zwischenablagen getrennt ist: Ausschneiden und Einfügen wird in diesem Fall vom Terminal vermittelt . Beispiel: "Bearbeiten-> Einfügen" in Ihrem Terminalfenster sollte genau so funktionieren, als hätten Sie den Text aus der Zwischenablage in den Emacs-Puffer eingegeben.

118
Chris Conway

Ich schreibe das in meine .emacs:

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

Anschließend habe ich im Grunde keine Probleme, von Emacs-Objekten zu anderen X11- oder Gnome-Anwendungen hin und her zu schneiden und einzufügen.

Bonus: Um diese Dinge in Emacs zu erreichen, ohne Ihren gesamten .emacs neu laden zu müssen, führen Sie C-x C-e mit dem Cursor direkt nach der schließenden Paren jedes dieser Ausdrücke im .emacs-Puffer aus.

Viel Glück!

10
jfm3

Die Schwierigkeit beim Kopieren und Einfügen in Emacs besteht darin, dass Sie möchten, dass es unabhängig vom internen Kill/Yank funktioniert, und dass es sowohl im Terminal als auch in der GUI funktioniert. Es gibt robuste Lösungen für Terminal oder GUI, aber nicht für beide. Nach der Installation von xsel (z. B. Sudo apt-get install xsel), hier ist, was ich mache, um sie zu kopieren und einzufügen:

(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

Ich gehe davon aus, dass Sie mit Emacs Emacs unter X meinen (dh nicht innerhalb eines Terminalfensters).

Es gibt zwei Möglichkeiten:

  1. (Gilt nur für Unix-Betriebssysteme.) Markieren Sie den gewünschten Text mit der Maus (dies kopiert ihn in die X-Zwischenablage) und klicken Sie mit der mittleren Maustaste, um ihn einzufügen.
  2. Markieren Sie den gewünschten Text und dann "M-x Zwischenablage-Kill-Ring-Save" (beachten Sie, dass Sie dies an einen einfacheren Schlüssel binden können). Dann einfach "Bearbeiten-> Einfügen" in deine Lieblings-App.

Zwischenablage-Operationen verfügbar:

  • clipboard-kill-ring-save - Auswahl von Emacs in die Zwischenablage kopieren
  • clipboard-Kill-Region - Auswahl von Emacs in die Zwischenablage schneiden
  • clipboard-yank - Einfügen aus der Zwischenablage in Emacs
7
pdq

Es gibt einen EmacsWiki-Artikel , der einige Probleme beim Kopieren und Einfügen unter X erklärt und erklärt, wie man es so konfiguriert, dass es funktioniert.

6
cschol

Dies funktioniert mit M-w unter Mac OSX. Fügen Sie einfach Ihre .emacs -Datei hinzu.

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

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

4
cevaris

Der folgende Code, inspiriert von der obigen Antwort von @ RussellStewart, fügt Unterstützung für x-PRIMARY und x-SECONDARY hinzu und ersetzt region-active-p mit use-region-p, um den Fall eines leeren Bereichs abzudecken, wird nicht unbemerkt zurückgegeben, wenn xsel nicht installiert wurde (gibt eine Fehlermeldung zurück), und enthält eine "Ausschneiden" -Funktion (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

Ich benutze das Folgende, basierend auf den anderen Antworten hier, um C-x C-w und C-x C-y Kopieren und Einfügen auf Mac und Linux (wenn jemand die Version für Windows kennt, kann er sie gerne hinzufügen). Beachten Sie, dass Sie unter Linux xsel und xclip mit Ihrem Paketmanager installieren müssen.

;; 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, welche Plattform und welche Version von Emacs benutzt du? Mit GNU Emacs 22.1.1 unter Windows Vista funktioniert es einwandfrei für mich.

Wenn Sie dies zufällig von Windows zu Linux über einen RealVNC-Viewer tun, stellen Sie sicher, dass Sie zuerst "vncconfig -iconic" auf der Linux-Box ausführen.

0
kfh

Ich benutze immer schnelles Einfügen - Auswahl ziehen in Emacs, drücke die mittlere Maustaste im Zielfenster.

(Von der Referenz zu Kate gehe ich davon aus, dass Sie unter Linux oder ähnlichem arbeiten und wahrscheinlich Emacs in X auf die eine oder andere Weise verwenden.)

0
cannam

Möglicherweise möchten Sie angeben, welche Plattform Sie verwenden. Ist es unter Linux, Unix, MacOSX, Windows, MS-DOS?

Ich glaube, dass es für Windows funktionieren sollte. Für MacOSX wird es zur x-windows Zwischenablage hinzugefügt, was nicht mit der macosx Zwischenablage identisch ist. Für Linux hängt es von Ihrem Window-Manager-Geschmack ab, aber ich glaube, dass x-windows es auf die meisten von ihnen auf eine nette Art und Weise handhabt.

Also bitte spezifizieren.

0