คัดลอกข้อความจาก Emacs ไปยังคลิปบอร์ด OS X


25

เมื่อฉันเรียก Emacs ใน terminal ข้อความแทนของโหมด GUI ปกติผมสามารถคัดลอก Emacs โดยเปิดใช้งานเริ่มต้นของภูมิภาคที่มีแล้วเลือกสิ่งที่ฉันต้องการแล้วทำC-SPCM-w

มีวิธีใดที่จะทำให้ภูมิภาคคัดลอกวิธีนี้มีอยู่ในคลิปบอร์ด OSX เพื่อวางไว้ในหน้าเว็บ (นอกเหนือจากการใช้ Emacs ในโหมด GUI อย่างชัดเจน)

ฉันไม่สนใจที่จะสร้างทางลัดที่แตกต่างในการทำเช่นนั้นและโดยพื้นฐานแล้วมันไม่จำเป็นต้องติดตั้งโมดูลใด ๆ

ฉันเคยเห็นโพสต์นี้และลองคำตอบที่ได้รับการยอมรับ แต่มันใช้งานไม่ได้ตามที่คาดหวังไว้ข้างต้น

ความคิดอื่น ๆ ?


เพื่อนคำถามนี้เกือบ 3 ปีแล้วและได้รับคำตอบแล้ว
Galder Zamarreño

คำตอบ:


33

คัดลอกจาก Emacs ไปยังคลิปบอร์ด OS X:

เลือกภูมิภาคจากนั้น M-| pbcopy RET

วางจากคลิปบอร์ด OS X ไปยัง Emacs:

C-u M-| pbpaste RET (แทนที่ภูมิภาคปัจจุบันหากมีอยู่)


คำอธิบาย:

M-|วิ่งshell-command-on-regionซึ่งเป็นชื่อที่แสดงถึงไพพ์ขอบเขตปัจจุบันกับคำสั่งเชลล์ C-u M-|ทำสิ่งเดียวกัน แต่แทนที่ขอบเขตปัจจุบันด้วยstdoutคำสั่งที่กำลังเรียกใช้

pbcopyและpbpasteเป็นยูทิลิตี้ OS X สำหรับการเข้าถึงคลิปบอร์ดของระบบ


1
นอกจากการตอบคำถามแล้วคำตอบของคุณยังสอนให้ฉันรู้วิธีเรียกใช้คำสั่งเชลล์จาก emacs, Amazing
andreskwan

20

งานต่อไปนี้คัดลอกมาจากที่นี่

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

การใช้คำฟุ่มเฟือยที่นี่ดูเหมือนย้อนหลัง
Jordon Biondo

1
ด้วยโหมดความชั่วร้ายสิ่งนี้จะทำลายพฤติกรรมการวางที่น่ากลัว
เฟลิกซ์ดี.

@ FelixD .: xclip-modeประสบปัญหาเดียวกันหรือไม่
Stefan

ดูเหมือนว่าจะใช้งานไม่ได้ใน Emacs26 เมื่อทำการคัดลอกและวางอักขระหลายไบต์ตามที่อธิบายไว้ในemacs.stackexchange.com/questions/50485/…
silencej

9

หากคุณใช้ Emacs "วิธีปกติ" (เช่นแอปพลิเคชัน GUI) คุณควรทำตามค่าเริ่มต้นแล้ว หากคุณใช้ Emacs ภายในเทอร์มินัลอีมูเลเตอร์คุณจะไม่สามารถรู้ได้ว่าจะทำอย่างไรโดยค่าเริ่มต้น แต่คุณสามารถติดตั้งxclipแพ็กเกจจาก GNU ELPA แล้วเปิดใช้งานสิ่งxclip-modeที่สอน Emacs ได้ทั้ง GNU / Linux และ OSX


ไม่xclipทำงานร่วมกับ OSX? ดูเหมือนสิ่งที่ฉันได้เห็นจากที่นั่นมันถูกออกแบบมาให้ทำงานกับ X11 ดูโพสต์
Galder Zamarreño

1
แพคเกจได้รับการขยายการใช้งานxclip.el pbpaste
สเตฟาน

เทอร์มินัล emacs ในโหมดเซิร์ฟเวอร์ (ไม่ใช่อินสแตนซ์ปกติ) ค้างเมื่อฉันใช้ xclip ภายใต้ macOS ด้วยเหตุผลบางอย่าง
rien333

คุณสามารถรายงานว่าเป็นข้อผิดพลาด (อย่างใดอย่างหนึ่งถึงฉันโดยตรงหรือผ่านM-x report-emacs-bug?
สเตฟาน

3

ดังที่ Stefan กล่าวว่าแอปพลิเคชั่น Emacs แบบกราฟิกควรทำเช่นนั้นตามค่าเริ่มต้น

ในเทอร์มินัลข้อความตัวเลือกอื่นคือการใช้ฟังก์ชันดังนี้:

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

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

ยกเว้นเมื่อมันไม่ได้ 20 ปีต่อมา pb เดียวกันใน emacs .... ฉันหวังว่าจะมีพื้นดินธรรมดาและมีสติตั้งอยู่ในหินที่ไหนสักแห่ง
ลัส

1

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

(defun xclip ()
(interactive)
(shell-command (concat "cat " (buffer-file-name (window-buffer (minibuffer-selected-window))) " | pbcopy")))

หลังจากคุณโหลดหรือโหลด emacs ใหม่จะเรียกมันด้วย Mx xclip
jumar

OP ไม่ได้ขอให้คัดลอกบัฟเฟอร์ทั้งหมดไปยังคลิปบอร์ดดังนั้นสิ่งนี้จะไม่ทำตามที่ขอ ส่วนที่เหลือดูเหมือนจะเลียนแบบสิ่งที่คนอื่นพูดไปแล้ว
Stefan

ฉันขอโทษถ้าสิ่งนี้ดูเหมือนจะปิดหัวข้อ ฉันไปที่หน้านี้จาก Google ซึ่งเป็นผลลัพธ์แรกของ "คัดลอกข้อความไปยังคลิปบอร์ด emacs" คำถามนี้มีชื่อว่า "คัดลอกข้อความจาก Emacs ไปยังคลิปบอร์ด OS X" ดังนั้นจึงเป็นเรื่องง่ายที่จะดูว่าคุณจะจบลงที่นี่สำหรับผลการค้นหาได้อย่างไร ฉันคิดว่ามันใช้ได้กับวิธีการโพสต์คำถามของพวกเขาซึ่งเป็นส่วนเสริมของมัน ฉันเคยเยี่ยมชมคำตอบของ StackExchange มาก่อนและรู้สึกผิดหวังเมื่อไม่มีคำตอบง่ายๆโดยเฉพาะเมื่อฉันรู้ว่ามีคนหลายพันคนถามคำถามดังนั้นฉันคิดว่าฉันจะเพิ่มความรู้ให้กับผู้ที่ได้รับประโยชน์
jumar

0

ตรวจสอบและclipboard-kill-region เหล่านี้มาจากclipboard-yankmenu-bar.el

เมื่อไฮไลต์ภูมิภาคแล้วคุณสามารถใช้คลิปบอร์ด - คิล - ภูมิภาคเพื่อฆ่าภูมิภาคเพื่อวางบัฟเฟอร์ของคุณและคลิปบอร์ดของระบบ คลิปบอร์ดดึง "วาง" สิ่งที่อยู่ในคลิปบอร์ดของระบบในปัจจุบัน


โปรดขยายคำตอบของคุณ
แดน

ฉันพยายามคัดลอกบางอย่างจาก emacs โดยใช้คำสั่งเหล่านั้นและไม่สามารถใช้ภายนอกเพื่อคัดลอกที่อื่นนอกเหนือจาก Emacs
Galder Zamarreño

@ GalderZamarreñoใช้ได้กับฉันใน Emacs และฉันใช้ OSX
bitops

0

คำตอบของ Galder Zamarreñoนั้นยอดเยี่ยม แต่มันทำลายputพฤติกรรมที่เหมือนความชั่วร้ายในโหมดความชั่วร้าย ฉันจึงปรับมันด้านล่างนิดหน่อย - ฉันแน่ใจว่ามันจะดีขึ้น แต่ก็ใช้งานได้สำหรับฉัน อย่าลังเลที่จะแนะนำการปรับปรุง:

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

----> รหัสใหม่

  (defun clipboard-on ()
    (interactive)
    (setq interprogram-cut-function 'paste-to-osx)
    (setq interprogram-paste-function 'copy-from-osx))
  (defun clipboard-off ()
    (interactive)
    (setq interprogram-cut-function 'gui-select-text)
    (setq interprogram-paste-function 'gui-selection-value))
  (global-set-key (kbd "C-c C-p") 'clipboard-on)
  (global-set-key (kbd "C-c C-y") 'clipboard-off))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.