ฉันต้องการที่จะสามารถเรียก Emacs จากบรรทัดคำสั่งและเริ่ม Emacs แบบกราฟิกหากไม่ได้ทำงานหรือเยี่ยมชมไฟล์ใน Emacs ที่กำลังทำงานอยู่ ฉันพยายามทำสิ่งนี้emacsclient
ซึ่งฉันรู้ว่าเป็น "วิธีที่ถูกต้อง" ในการทำสิ่งนี้ แต่ฉันมีปัญหามากมายกับมันใน OS X มันจะผิดพลาดแบบสุ่มหรือemacs --daemon
กระบวนการจะหยุดทำงานในระหว่างการปิดหรือรีบูตเครื่อง และความไม่แน่นอนทั่วไป ในขณะที่ฉันต้องการที่จะได้รับการทำงานในขณะนี้open -a
ใช้งานได้จริงดีกว่ามากยกเว้นปัญหานี้ฉันจะอธิบายด้านล่าง:
ใช้open -a
แบบนี้:
$ open -a Emacs file.txt
จะเริ่ม Emacs หากไม่ได้ใช้งานและไปที่ไฟล์ แต่ถ้าฉันทำสิ่งนี้เมื่อบัฟเฟอร์ปัจจุบันไม่ใช่*scratch*
ไฟล์ที่เปิดในเฟรมใหม่ (เช่นหน้าต่างระบบใหม่)
นี่คือตัวอย่างเซสชัน:
$ open -a Emacs file.txt
สิ่งนี้เริ่มต้น Emacs และเปิด file.txt ดังนั้นจึงมีเฟรมเดียวที่มีบัฟเฟอร์นี้อยู่ภายใน ถ้าฉันสลับไปที่*scratch*
บัฟเฟอร์และทำสิ่งนี้:
$ open -a Emacs file1.txt
มันเปิดไฟล์นี้ในเฟรมเดียวกัน ขณะนี้มีเฟรมเดียวที่เปิดไฟล์นี้และถ้าฉันทำสิ่งนี้:
$ open -a Emacs file2.txt
มันเปิดเฟรมใหม่ส่งผลให้เปิดสองเฟรมในครั้งเดียว
ฉันได้ลองเล่นซอกับบรรทัดคำสั่ง args เพื่อ Emacs โดยใช้--args
สวิตช์ไปopen
แต่ดูเหมือนจะไม่ทำงานสำหรับการโทรครั้งต่อไปเช่น:
$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'
นี่พิมพ์เฉพาะ "foo" ในบัฟเฟอร์ข้อความ ... ครั้งที่สองที่ Emacs เพิ่งถูกนำไปที่ส่วนหน้า แต่ไม่มีข้อความที่พิมพ์
ฉันไม่แน่ใจว่าวิธีopen
การสื่อสารกับแอปพลิเคชันที่ทำงานอยู่แล้วไม่มีใครรู้ว่าฉันจะหาได้อย่างไร หรือมีวิธีที่จะได้รับบันทึกรายละเอียดของสิ่งที่เกิดขึ้นมากกว่าMessages
บัฟเฟอร์หรือไม่? ไม่มีอะไรน่าสนใจถูกพิมพ์ไปที่บัฟเฟอร์นั้นในช่วงเซสชั่นด้านบนดังนั้นฉันไม่รู้ว่าฉันจะแฮ็ค Emacs Lisp ได้อย่างไรเพื่อทำสิ่งที่ฉันต้องการ ...
ขอบคุณ!
emacsclient
อีกครั้งและเริ่มต้นด้วย(server-start)
ในของฉันinit.el
ดูเหมือนว่าจะทำงานได้ดีกว่าที่บูตขึ้นซึ่งเป็นสิ่งที่ผมเคยพยายามครั้งแรกที่ฉันพยายามemacs --daemon
emacsclient
find-file
แล้วตั้งค่าdebug-on-error
เป็น t และตรวจสอบการติดตามสแต็กสำหรับเบาะแสบางอย่างว่า Emacs ถูกเรียกใช้อย่างไร การเพิ่มข้อผิดพลาดfind-file
อาจทำได้ง่ายเพียงแค่คัดลอกคำจำกัดความของฟังก์ชั่นไปยังบัฟเฟอร์รอยกระเพื่อมและเพิ่มการเรียกเข้าไปerror
(เช่น(error "cause stack trace")
ไม่เคยเปลี่ยนไฟล์แหล่งที่มาสำหรับfind-file
- ทำสิ่งนี้ในเครื่องขูด!