กำหนดค่า emacs เพื่อตัดและคัดลอกข้อความไปยังคลิปบอร์ดของ Mac OS X


16

ฉันสามารถกำหนดค่าemacsเพื่อให้ฉันสามารถคัดลอก / ตัดข้อความจาก emacs (เวอร์ชัน Terminal เริ่มต้น) และวางไว้ที่อื่น (ลงในโปรแกรม X Window)?


Nitpick: คุณพูดว่า "default terminal version" แต่โหมดเริ่มต้นของการทำงานสำหรับ Emacs คือการใช้ GUI แทนเทอร์มินัลข้อความ บางทีคุณอาจอ้างถึง/usr/bin/emacsไฟล์ปฏิบัติการโบราณที่แอปเปิ้ลรวมมาพร้อมกับ OSX และข้อ จำกัด ใดที่ จำกัด ไว้ที่เทอร์มินัลข้อความ?
Stefan

คำตอบ:


4

หากต้องการคัดลอกภูมิภาคปัจจุบันไปยังคลิปบอร์ด OS X คุณสามารถใช้

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

ไม่แนะนำให้ใช้ผกผันคัดลอกบัฟเฟอร์ OS X ไปยังแหวนสังหาร Emacs วงแหวนฆ่าและคลิปบอร์ดเป็นโครงสร้างที่แตกต่างกันมากและไม่มีคำตอบที่ดีในการผลักคลิปบอร์ดเข้าไปในแหวนฆ่าควรทำอย่างไร ยังคุณสามารถเรียกใช้pbpasteด้วยตนเองเพื่อรับเนื้อหาของคลิปบอร์ดปัจจุบัน


สิ่งนี้ไม่ได้ผลสำหรับฉัน โซลูชันที่ทำเครื่องหมายไว้ในโพสต์ Emacsนี้ใช้งานได้
Galder Zamarreño

8

เพิ่มไปที่~/.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)

หากคุณใช้ Emacs ใน iTerm 2 คุณยังสามารถทำการแมปชุดค่าผสมในการตั้งค่า:

จากนั้นเพิ่มสิ่งนี้ลงใน~/.emacs:

(global-set-key (kbd "<f13> c") 'pbcopy)
(global-set-key (kbd "<f13> v") 'pbpaste)
(global-set-key (kbd "<f13> x") 'pbcut)

ยังเป็นคำตอบที่ดีที่สุด ขอบคุณ! หมายเหตุสำหรับ iterm หากต้องการสร้าง "การทำงาน" เหล่านี้ให้เลือก "ส่งรหัสหลีกเลี่ยง" และคุณจะไม่นำหน้า "^ [." (ไม่ทำงานกับประเภทการทำงาน "ส่งข้อความ")
Jay

3

นี่คือวิธีการรวม OS X Clipboard เข้ากับ Emacs 'kill-ring โดย Daniel Nelson: https://github.com/wesen/emacs/blob/master/pbcopy.el

ความคิดเห็นของผู้เขียน:

เปิดใช้งาน kill-ring เพื่อโต้ตอบกับคลิปบอร์ดเมื่อเรียกใช้ Emacs จากเทอร์มินัล Mac OSX (โดยไม่สูญเสียฟังก์ชั่น kill-ring แบบเต็ม) ทั้งหมดที่ผมทำก็คือการปรับเปลี่ยนxclip.elการทำงานด้วยและpbcopy pbpasteขอบคุณจริง ๆ ไปที่ Leo Shidai Liu ผู้เขียน xclip.el


1

งานต่อไปนี้ได้มาจากที่นี่ :)

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

คุณสามารถเพิ่มลิงค์ไปยังโพสต์ดั้งเดิมได้หรือไม่?
Vincent

0

เวอร์ชั่นของ emacs ที่มาพร้อมกับ OS X นั้นเก่าเกินไปที่จะให้ฟังก์ชั่นนี้

โชคดีที่คุณสามารถอัปเดต emacs เป็นเวอร์ชันที่รวมเข้ากับคลิปบอร์ดของคุณได้ที่นี่: http://emacsformacosx.com

ฉันเชื่อว่าคุณใช้Ctrl+ Yเพื่อวางใน emacs หลังจากการอัปเดต


อ่า - ฉันลืมที่จะพูดว่า - เวอร์ชั่นของ emacs ที่คุณจะดาวน์โหลดจากไซต์นั้นเป็นกราฟิก (นั่นคือมันไม่ได้ทำงานในเทอร์มินัล) เป็นไปไม่ได้ที่แอปพลิเคชั่นใน Terminal จะเข้าถึงคลิปบอร์ดโดยไม่ต้องแฮ็คซึ่งฉันหาไม่ได้อีกต่อไป : /
Faiz Saleem

2
pbcopyและpbpasteยังคงมีอยู่และไม่แฮ็ก

เป็นไปได้ แต่ฉันคิดว่า OP ต้องการใช้คำสั่งแป้นพิมพ์เพื่อคัดลอกและวาง สิ่งที่ฉันหมายถึงคือแอปพลิเคชัน Terminal ไม่สามารถใช้แป้นพิมพ์ลัดเพื่อคัดลอกและวางพร้อมกับคลิปบอร์ด OS X ได้โดยไม่ต้องแฮ็ค
Faiz Saleem

"แอปพลิเคชันเทอร์มินัลไม่สามารถใช้แป้นพิมพ์ลัดเพื่อคัดลอกและวางพร้อมกับคลิปบอร์ด OS X ได้โดยไม่ต้องแฮ็ค" เห็นได้ชัดว่าไม่เป็นความจริงเนื่องจากpbcopyและpbpasteเป็นทั้งแอปพลิเคชันเทอร์มินัล แอปเทอร์มินัลอื่น ๆ สามารถทำสิ่งที่พวกเขาทำหรือเพียงเรียกพวกเขาโดยตรง

สิ่งที่ฉันกำลังมองหาคือขอเกี่ยวpbcopyกับการตัดและลอกเลียนแบบ เป็นไปได้ไหม?
syntagma

0

ฉันพบว่าโพสต์นี้มีประโยชน์มาก (การกำหนด 2 ฟังก์ชันและกำหนดทางลัดให้กับพวกเขาในไฟล์ ~ / .emacs ของคุณ)

หลังจากเพิ่มบรรทัดเหล่านั้นในไฟล์. emacs ของคุณคุณจะไม่สามารถเข้าถึงทางลัดเหล่านั้นได้จนกว่าคุณจะเปิดเชลล์เซสชันใหม่ (แท็บ / หน้าต่าง) ปล่อยให้การเปลี่ยนแปลงถูกนำไปใช้


0

คุณจะได้รับการปฏิสัมพันธ์ดังกล่าวกับคลิปบอร์ดโปร่งใสในขณะที่ทำงาน Emacs ใน terminal ข้อความโดยการเปิดใช้งานxclip-modeให้โดยxclipแพคเกจที่คุณสามารถติดตั้งจาก GNU ELPA (เช่นผ่านทางM-x package-list-packages RET)

ดู/emacs/10900/สำหรับคำถามและคำตอบที่คล้ายกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.