Konfigurasikan emacs untuk memotong dan menyalin teks ke papan klip Mac OS X

16

Bisakah saya mengonfigurasi emacs, sehingga saya dapat menyalin / memotong teks dari emacs (versi Terminal default) dan menempelnya di tempat lain (ke program X Window)?

syntagma
sumber
Nitpick: Anda mengatakan "versi Terminal default", tetapi mode default fungsi untuk Emacs adalah menggunakan GUI daripada terminal teks. Mungkin Anda mengacu pada /usr/bin/emacsexecutable kuno yang dibundel oleh Apple dengan OSX dan mana yang sewenang-wenang terbatas pada terminal teks?
Stefan

Jawaban:

4

Untuk menyalin wilayah saat ini ke papan klip OS X, Anda dapat menggunakan

(shell-command-on-region (region-beginning) (region-end) "pbcopy")

Kebalikannya, menyalin buffer pasta OS X ke cincin bunuh Emacs, tidak disarankan. Cincin bunuh dan papan klip adalah struktur yang sangat berbeda dan tidak ada jawaban yang baik untuk apa, tepatnya, mendorong papan klip ke dalam cincin bunuh. Namun, Anda dapat menjalankannya pbpastesecara manual untuk mendapatkan konten clipboard saat ini.


sumber
Ini tidak berhasil untuk saya. Namun solusi yang ditandai di pos Emacs ini tidak berfungsi.
Galder Zamarreño
8

Tambahkan ini ke ~/.emacs:

(defun pbcopy ()
  (interactive)
  (call-process-region (point) (mark) "pbcopy")
  (setq deactivate-mark t))

(defun pbpaste ()
  (interactive)
  (call-process-region (point) (if mark-active (mark) (point)) "pbpaste" t t))

(defun pbcut ()
  (interactive)
  (pbcopy)
  (delete-region (region-beginning) (region-end)))

(global-set-key (kbd "C-c c") 'pbcopy)
(global-set-key (kbd "C-c v") 'pbpaste)
(global-set-key (kbd "C-c x") 'pbcut)

Jika Anda menggunakan Emacs di iTerm 2, Anda juga dapat memetakan ulang kombinasi kunci dalam preferensi:

Kemudian tambahkan sesuatu seperti ini ke ~/.emacs:

(global-set-key (kbd "<f13> c") 'pbcopy)
(global-set-key (kbd "<f13> v") 'pbpaste)
(global-set-key (kbd "<f13> x") 'pbcut)
Lri
sumber
Masih jawaban terbaik. Terima kasih! Catatan untuk iterm, untuk membuat "Tindakan" ini pilih "Kirim kode pelarian," dan Anda menghilangkan yang memimpin "^ [." (tidak bekerja dengan jenis tindakan "Kirim teks")
Jay
3

Berikut ini solusi untuk mengintegrasikan OS X Clipboard ke cincin bunuh Emacs oleh Daniel Nelson: https://github.com/wesen/emacs/blob/master/pbcopy.el

Komentar penulis:

Memungkinkan kill-ring untuk berinteraksi dengan clipboard saat menjalankan Emacs dari terminal Mac OSX (tanpa kehilangan fungsionalitas kill-ring penuh). Yang saya lakukan hanyalah memodifikasi xclip.eluntuk bekerja dengan pbcopydan pbpaste. Terima kasih yang sebenarnya kepada Leo Shidai Liu, penulis xclip.el.

ristohietal
sumber
1

Berikut ini hanya berfungsi, dapatkan dari sini :)

(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))
Galder Zamarreño
sumber
Bisakah Anda menambahkan tautan ke posting asli?
Vincent
0

Versi emacs yang disertakan dengan OS X terlalu tua untuk menyediakan fungsionalitas ini.

Untungnya Anda dapat memperbarui emacs ke versi yang terintegrasi dengan clipboard Anda di sini: http://emacsformacosx.com

Saya percaya bahwa Anda menggunakan Ctrl+ Yuntuk menempel di emacs, setelah pembaruan.

Faiz Saleem
sumber
Ah - saya lupa mengatakan - versi emacs yang akan Anda unduh dari situs itu adalah grafis (artinya tidak berjalan di Terminal). Tidak mungkin bagi aplikasi di Terminal untuk mengakses clipboard tanpa peretasan, yang tidak dapat saya temukan lagi. : /
Faiz Saleem
2
pbcopydan pbpastemasih ada dan bukan peretasan.
Itu mungkin, namun saya berasumsi bahwa OP ingin menggunakan perintah keyboard untuk menyalin dan menempel. Yang ingin saya katakan adalah bahwa aplikasi Terminal tidak dapat menggunakan pintasan keyboard untuk menyalin dan menempel bersama clipboard OS X tanpa peretasan.
Faiz Saleem
"Aplikasi Terminal tidak dapat menggunakan pintasan keyboard untuk menyalin dan menempel bersama dengan clipboard OS X tanpa peretasan." Ini jelas tidak benar, karena pbcopydan pbpastekeduanya aplikasi terminal; aplikasi terminal lainnya dapat melakukan apa yang mereka lakukan, atau cukup memanggil mereka secara langsung.
Apa yang saya cari adalah mengaitkan pbcopyke Emacs cut & copy. Apa itu mungkin?
syntagma
0

Saya menemukan posting ini sangat berguna (mendefinisikan 2 fungsi dan menetapkan pintasan untuk mereka dalam file ~ / .emacs Anda).

Setelah menambahkan baris-baris itu ke file .emacs Anda, Anda tidak akan memiliki akses ke pintasan tersebut sampai Anda membuka sesi shell baru (tab / jendela). Biarkan perubahan diterapkan.

Javad Sadeqzadeh
sumber
0

Anda bisa mendapatkan interaksi seperti itu dengan clipboard secara transparan saat menjalankan Emacs di terminal teks dengan mengaktifkan yang xclip-modedisediakan oleh xclippaket yang dapat Anda instal dari GNU ELPA (yaitu via M-x package-list-packages RET).

Lihat juga /emacs/10900/ untuk pertanyaan & jawaban yang serupa.

Stefan
sumber