it-swarm-id.com

Cara menyalin teks dari Emacs ke aplikasi lain di Linux

Ketika saya memotong (membunuh) teks di Emacs 22.1.1 (di jendelanya sendiri di X, di KDE, di Kubuntu), saya tidak bisa menempel (menarik) di aplikasi lain.

105
memius

Masukkan yang berikut ini ke file .emacs Anda:

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

Mari kita berhati-hati dengan definisi kita di sini

  • Salinan Emacs adalah perintah kill-ring-save (Biasanya terikat M-w).
  • A salinan sistem adalah apa yang biasanya Anda dapatkan dari menekan C-c (atau memilih "Edit-> Salin" di jendela aplikasi).
  • X copy "secara fisik" menyorot teks dengan kursor mouse.
  • --- Tempel Emacs adalah perintah yank (biasanya terikat C-y).
  • A paste sistem adalah apa yang biasanya Anda dapatkan dari menekan C-v (atau memilih "Edit-Tempel" di jendela aplikasi).
  • X paste menekan tombol "mouse tengah" (disimulasikan dengan menekan tombol kiri dan kanan mouse bersamaan).

Dalam kasus saya (di GNOME):

  • Baik Emacs dan salinan sistem biasanya bekerja dengan X paste.
  • Salinan X biasanya berfungsi dengan pasta Emacs.
  • Agar copy sistem berfungsi dengan paste Emacs dan copy Emacs bekerja dengan paste sistem, Anda perlu menambahkan (setq x-select-enable-clipboard t) Ke .emacs Anda. Atau coba

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

Saya pikir ini adalah perilaku Unix modern yang cukup standar.

Penting juga untuk dicatat (meskipun Anda mengatakan Anda menggunakan Emacs di jendela terpisah) bahwa ketika Emacs berjalan di konsol, itu sepenuhnya terpisah dari sistem dan X clipboard: cut and paste dalam kasus yang dimediasi oleh terminal . Misalnya, "Edit-> Tempel" di jendela terminal Anda harus bertindak persis seperti jika Anda mengetik teks dari clipboard ke dalam buffer Emacs.

118
Chris Conway

Saya menempelkan ini di .emacs saya:

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

Saya pada dasarnya tidak punya masalah memotong dan menempel bolak-balik dari apa pun di Emacs ke aplikasi X11 atau Gnome lainnya.

Bonus: untuk membuat hal-hal ini terjadi di Emacs tanpa harus memuat ulang seluruh .emacs Anda, lakukan C-x C-e dengan kursor tepat setelah paren dekat dari masing-masing ekspresi di buffer .emacs.

Semoga berhasil!

10
jfm3

Kesulitan dengan salin dan rekatkan di Emacs adalah Anda ingin itu bekerja secara independen dari internal kill/yank, dan Anda ingin itu berfungsi baik di terminal dan gui. Ada solusi kuat yang ada untuk terminal atau gui, tetapi tidak keduanya. Setelah menginstal xsel (mis. Sudo apt-get install xsel), inilah yang saya lakukan untuk menyalin dan menempelkan untuk menggabungkannya:

(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

Saya berasumsi oleh emacs yang Anda maksud Emacs di bawah X (yaitu tidak di dalam jendela terminal).

Ada dua cara:

  1. (Berlaku hanya unix OS) Sorot teks yang diinginkan dengan mouse Anda (ini menyalinnya ke clipboard X) dan kemudian klik tengah untuk menempel.
  2. Sorot teks yang diinginkan dan kemudian "M-x clipboard-kill-ring-save" (perhatikan Anda dapat mengikat ini ke tombol yang lebih mudah). Kemudian cukup "Edit-> Tempel" di aplikasi favorit Anda.

Operasi Clipboard tersedia:

  • clipboard-kill-ring-save - salin pilihan dari Emacs ke clipboard
  • clipboard-kill-region - memotong pilihan dari Emacs ke clipboard
  • clipboard-yank - tempel dari clipboard ke Emacs
7
pdq

Ada artikel EmacsWiki yang menjelaskan beberapa masalah dengan copy & paste di bawah X dan bagaimana mengkonfigurasinya agar berfungsi.

6
cschol

Ini bekerja dengan M-w di Mac OSX. Cukup tambahkan ke file . Emacs Anda.

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

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

4
cevaris

Kode di bawah ini, terinspirasi oleh jawaban @ RussellStewart di atas, menambahkan dukungan untuk x-PRIMARY dan x-SECONDARY, menggantikan region-active-p dengan use-region-p untuk membahas kasus wilayah kosong, tidak kembali diam-diam jika xsel belum diinstal (mengembalikan pesan kesalahan), dan termasuk fungsi "potong" (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

Saya menggunakan yang berikut, berdasarkan jawaban lain di sini, untuk membuat C-x C-w dan C-x C-y menjadi salin dan tempel pada Mac dan Linux (jika seseorang tahu versi untuk Windows jangan ragu untuk menambahkannya). Perhatikan bahwa di Linux Anda harus menginstal xsel dan xclip dengan manajer paket Anda.

;; 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, platform apa dan versi emac apa yang Anda gunakan? Dengan GNU Emacs 22.1.1 pada Windows Vista, itu berfungsi dengan baik untuk saya.

Jika, kebetulan, Anda melakukan ini dari windows ke linux melalui penampil RealVNC, pastikan Anda menjalankan "vncconfig -iconic" pada kotak linux terlebih dahulu .....

0
kfh

Saya selalu menggunakan tempel cepat - seret pilihan di emacs, tekan tombol tengah mouse di jendela target.

(Dari referensi ke Kate, saya bawa Anda di linux atau serupa dan mungkin menggunakan emacs dalam X satu atau lain cara.)

0
cannam

Anda mungkin ingin menentukan platform apa yang Anda gunakan. Apakah itu di linux, unix, macosx, windows, ms-dos?

Saya percaya bahwa untuk windows itu harus berfungsi. Untuk MacOSX itu akan ditambahkan ke clipboard x-windows, yang tidak sama dengan clipboard macosx. Untuk Linux, itu tergantung pada selera Anda dari window manager, tapi saya percaya bahwa x-windows menanganinya dengan cara yang baik pada kebanyakan dari mereka.

Jadi, mohon jelaskan.

0
Mats Fredriksson