Jawaban:
Mari berhati-hati dengan definisi kami di sini
kill-ring-save
(biasanya terikatM-w ).yank
(biasanya terikatC-y ).Dalam kasus saya (di GNOME):
Agar penyalinan sistem berfungsi dengan tempel Emacs dan penyalinan Emacs dengan tempel sistem, Anda perlu menambahkannya (setq x-select-enable-clipboard t)
ke .emacs
. 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 benar-benar terpisah dari sistem dan papan klip X: potong dan tempel dalam hal ini dimediasi oleh terminal . Misalnya, "Edit-> Tempel" di jendela terminal Anda harus bertindak persis seperti jika Anda mengetik teks dari papan klip ke buffer Emacs.
META-X set-variable RET select-enable-clipboard RET t
atau(setq select-enable-clipboard t)
Sisipkan berikut ini ke dalam .emacs
file Anda :
(setq x-select-enable-clipboard t)
emacs -nw
, saya menggunakan pintasan terminal itu sendiri; Shift-Ctrl-X untuk memotong (mematikan) teks, dan Shift-Ctrl-C untuk menyalin.
emacs -nw
di dalam jendela tmux yang terbelah secara horizontal.
Saya tempelkan ini di .emacs saya:
(setq x-select-enable-clipboard t)
(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
Saya kemudian pada dasarnya tidak memiliki masalah dalam memotong dan menempelkan bolak-balik dari apa pun di Emacs ke aplikasi X11 atau Gnome lainnya.
Bonus: agar hal-hal ini terjadi di Emacs tanpa harus memuat ulang seluruh .emacs Anda, lakukan Cx Ce dengan kursor tepat setelah tanda kurung tutup dari setiap ekspresi tersebut di buffer .emacs.
Semoga berhasil!
Symbol’s function definition is void: x-cut-buffer-or-selection-value
Kesulitan dengan salin dan tempel di Emacs adalah Anda ingin itu bekerja secara independen dari internal kill / yank, dan Anda ingin itu bekerja 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 salin dan tempel 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)
Saya berasumsi dengan emacs yang Anda maksud adalah Emacs di bawah X (bukan di dalam jendela terminal).
Ada dua cara:
Operasi clipboard tersedia:
Ada artikel EmacsWiki yang menjelaskan beberapa masalah dengan salin & tempel di bawah X dan cara mengkonfigurasinya agar berfungsi.
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)
Kode di bawah, terinspirasi oleh jawaban @ RussellStewart di atas, menambahkan dukungan untuk x-PRIMARY dan x-SECONDARY, menggantikan region-active-p
dengan use-region-p
untuk menutupi kasus wilayah kosong, tidak kembali diam-diam jika xsel belum diinstal (mengembalikan pesan kesalahan), dan menyertakan fungsi "potong" (emacs Cy, windows Cx).
(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)
Saya menggunakan yang berikut ini, berdasarkan jawaban lain di sini, untuk membuat C-x C-w
dan C-x C-y
menyalin dan menempel pada Mac dan Linux (jika seseorang mengetahui versi untuk Windows, silakan 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)))
xclip
untuk menempelkan konten papan klip dengan menggunakan xclip -o
. Ini dapat bermanfaat bagi orang yang sudah memiliki xclip
dan tidak ingin menginstal program lain untuk melakukan penyalinan dan penempelan.
Hmm, platform apa dan emacs versi apa yang Anda gunakan? Dengan GNU Emacs 22.1.1 di Windows Vista, ini berfungsi dengan baik untuk saya.
Jika, kebetulan, Anda melakukan ini dari windows ke linux melalui penampil RealVNC, pastikan Anda menjalankan "vncconfig -iconic" di kotak linux terlebih dahulu .....
Anda mungkin ingin menentukan platform apa yang Anda gunakan. Apakah di linux, unix, macosx, windows, ms-dos?
Saya percaya bahwa untuk windows itu harus berfungsi. Untuk MacOSX, ini akan ditambahkan ke papan klip x-windows, yang tidak sama dengan papan klip macosx. Untuk Linux, itu tergantung pada selera pengelola jendela Anda, tetapi saya percaya bahwa x-windows menanganinya dengan cara yang baik pada kebanyakan dari mereka.
Jadi, sebutkan.
Yang saya lakukan adalah menggunakan alat terminal yang bagus (PuTTY di Windows, Konsole atau Terminal di Linux) yang memiliki fasilitas penyalinan built-in.
Di PuTTY, Anda menyorot teks yang Anda inginkan dengan mouse, lalu menempelkannya di tempat lain. Mengklik kanan di jendela PuTTY akan menyisipkan konten buffer salin / tempel Windows.
Di Konsole atau Terminal di Linux, Anda menyorot apa yang Anda inginkan lalu tekan Shift + Ctrl + C untuk menyalin dan Shift + Ctrl + V untuk menempel.
Dalam kompilasi win32 emacs, teks yanking meletakkannya di buffer salin / tempel .. sebagian besar waktu.
Di Mac OS X, pintasan tombol Apple berfungsi dengan baik, karena Terminal menjebaknya.
Tidak ada cara langsung untuk melakukannya di baris perintah karena shell tidak memelihara buffer salin / tempel untuk setiap aplikasi. pesta melakukan mempertahankan copy / paste penyangga untuk dirinya sendiri, dan, secara default, emacs ^ k / ^ y pintas kerja.