คำถามติดแท็ก emacsclient

emacsclient เป็นโปรแกรมที่อนุญาตให้ผู้ใช้เชื่อมต่อกับ Emacs Server สิ่งนี้มีประโยชน์เมื่อใช้ Emacs เป็นตัวแก้ไขเริ่มต้นบนระบบที่เหมือน Unix เนื่องจากอนุญาตให้เรียกใช้ Emacs โดยไม่ต้องสร้างกระบวนการใหม่ทำให้สามารถใช้บัฟเฟอร์ที่แชร์และประวัติคำสั่งซ้ำได้

4
ฉันจะใช้ emacsclient เพื่อเชื่อมต่อกับอินสแตนซ์ emacs ระยะไกลได้อย่างไร
ฉันต้องการที่จะสามารถเรียกใช้ emacs บนคอมพิวเตอร์เครื่องเดียว: server $ emacs --daemon และเชื่อมต่อกับมันจากที่อื่น: local $ emacsclient -c server เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร

7
ฉันจะใช้ไคลเอ็นต์ Emacs ในพื้นที่เป็น $ EDITOR สำหรับเครื่องระยะไกลที่ฉันเข้าถึงผ่าน TRAMP ได้อย่างไร
ฉันมักจะใช้ TRAMP shell-modeในการจัดการเซิร์ฟเวอร์ระยะไกลหลายทั้งสำหรับการแก้ไขไฟล์และทำงานเปลือกหอยระยะไกลใน อย่างไรก็ตามสิ่งนี้ไม่ทำงานเมื่อคำสั่งใช้EDITORตัวแปรเพื่อแก้ไขไฟล์เช่นcrontab -eโดยเฉพาะอย่างยิ่งเพราะshell-modeเป็นเทอร์มินัล "dumb" ที่ไม่สนับสนุนการเรียกใช้ตัวแก้ไขอื่นภายใน ในพื้นที่ฉันทำสิ่งนี้ด้วยการเรียกที่เหมาะสมemacsclientซึ่งเปิดบัฟเฟอร์ใหม่และทำให้ชีวิตง่ายขึ้น น่าเสียดายที่นี่ไม่สามารถใช้งานได้จากเครื่องระยะไกล edผมคิดว่าผมสามารถใช้ (ฮะ!) ฉันจะตั้งค่ารีโมตEDITORที่ให้ฉันแก้ไขไฟล์ด้วยอินสแตนซ์ Emacs ในพื้นที่ได้อย่างไร

5
Emacsdaemon และ Emacsclient บน Mac
ระบบปฏิบัติการ: OS X 10.9.5, Mavericks GNU Emacs 24.3.1 (x86_64-apple-darwin13.1.0, Carbon เวอร์ชั่น 1.6.0 AppKit 1265.19) ปี 2014-04-03 บน Rainers-MacBook-Pro-3.local ฉันติดตั้ง emacs ผ่านhomebrewจากrailwaycatและใช้งานได้ดี - ไม่มีการร้องเรียน ฉันไม่ได้ใช้ emacs ใน termoinal และฉันมักจะเริ่มใช้งานผ่านแอปพลิเคชัน อย่างที่ฉันพูด - ฉันมีความสุขจนถึงตอนนี้ ฉันมีสิ่งหนึ่งที่ฉันไม่สามารถจัดการให้ถูกต้อง (ซึ่งทำงานได้ดีกับ linux มาก่อน) ซึ่งก็คือ: รับ emacs daemon เริ่มต้นเมื่อเข้าสู่ระบบ ใช้ emacsclient เพื่อเปิด ปิด emacsdaemon และบันทึกไฟล์ al เมื่อออกจากระบบ สูตรการทำงานใดบ้างที่สามารถช่วยฉันตั้งค่านี้ เพิ่มข้อมูลแล้ว …

3
จะยุบประวัติเลิกทำอย่างไร
ฉันกำลังทำงานในโหมด Emacs ที่ให้คุณควบคุม Emacs ด้วยการรู้จำเสียง หนึ่งในปัญหาที่ฉันพบคือวิธีที่ Emacs จัดการเลิกทำไม่ตรงกับที่คุณคาดหวังว่ามันจะทำงานเมื่อควบคุมด้วยเสียง เมื่อผู้ใช้พูดหลาย ๆ คำและหยุดชั่วคราวนั่นเรียกว่า 'คำพูด' คำพูดอาจประกอบด้วยหลายคำสั่งเพื่อให้ Emacs ดำเนินการ บ่อยครั้งที่ตัวจำแนกลายมือรู้จักหนึ่งคำสั่งหรือมากกว่านั้นภายในคำพูดที่ไม่ถูกต้อง ณ จุดนั้นฉันต้องการที่จะพูดว่า "เลิกทำ" และให้ Emacs เลิกทำการกระทำทั้งหมดด้วยคำพูดไม่ใช่แค่การกระทำสุดท้ายภายในคำพูด กล่าวอีกนัยหนึ่งฉันต้องการให้ Emacs ใช้คำพูดเดียวกับคำสั่งที่เกี่ยวข้องกับการเลิกทำแม้ว่าคำพูดนั้นจะประกอบด้วยหลายคำสั่งก็ตาม ฉันต้องการที่จะกลับไปที่เดิมก่อนคำพูดฉันสังเกตเห็นว่า Emacs การเลิกทำตามปกติไม่ได้ทำเช่นนี้ ฉันมีการตั้งค่า Emacs เพื่อรับการเรียกกลับที่จุดเริ่มต้นและจุดสิ้นสุดของคำพูดแต่ละคำเพื่อให้ฉันสามารถตรวจสอบสถานการณ์ได้ฉันต้องคิดว่าจะให้ Emacs ทำอะไร เป็นการดีที่ฉันจะเรียกสิ่งที่ชอบ(undo-start-collapsing)แล้ว(undo-stop-collapsing)และสิ่งที่ทำในระหว่างนั้นจะถูกยุบลงอย่างน่าอัศจรรย์เป็นหนึ่งระเบียน ฉันทำการสืบค้นผ่านเอกสารและพบundo-boundaryแต่มันตรงกันข้ามกับสิ่งที่ฉันต้องการ - ฉันต้องยุบการกระทำทั้งหมดภายในคำพูดเป็นหนึ่งในการยกเลิกการบันทึกไม่ใช่การแยกพวกเขาออก ฉันสามารถใช้undo-boundaryระหว่างคำพูดเพื่อให้แน่ใจว่าการแทรกได้รับการพิจารณาแยกต่างหาก (โดยค่าเริ่มต้นจะพิจารณาการแทรกที่ต่อเนื่องกันเป็นหนึ่งการกระทำจนถึงขีด จำกัด ) แต่นั่นก็คือ ภาวะแทรกซ้อนอื่น ๆ : daemon การจดจำเสียงของฉันส่งคำสั่งไปยัง Emacs โดยการจำลองปุ่มกด X11 …

3
โหมด Daemon: เลื่อนการโต้ตอบให้แจ้งเมื่อเริ่มต้น
(โปรดทราบว่าชื่อตรงข้ามคำถามนี้ไม่เหมือนกับวิธีเริ่มต้นในโหมด daemon และระงับการโต้ตอบโต้ตอบ?เนื่องจากคำถามดังกล่าวถูก "ตอบ" โดยผู้ส่งกำจัดสิ่งที่ทำให้พรอมต์ปรากฏขึ้นโดยเฉพาะ) ฉันต้องการทราบว่ามีวิธีทั่วไปในการหลีกเลี่ยงการemacs --daemonแขวนตลอดไปรอคำตอบสำหรับการแจ้งให้แสดงใน minibuffer ที่ยังไม่มี เป็นไปไม่ได้ที่จะเชื่อมต่อกับ emacsclient เพื่อตอบคำถามเหล่านี้เนื่องจากเซิร์ฟเวอร์ไม่เริ่มทำงานจนกว่า Emacs จะเสร็จสิ้นการเริ่มต้นตามลำดับ (ซึ่งหมายความว่าหากคุณตั้งค่า ALTERNATE_EDITOR เป็นสตริงว่างซึ่งทำให้emacsclientไม่สามารถหาเซิร์ฟเวอร์เริ่มต้นภูตใหม่คุณสามารถจบลงด้วย Emacs daemons หลายตัวที่ติดอยู่และรอ) ฉันต้องkillall emacsแก้ไขปัญหา ก่อนดำเนินการต่อ ฉันสามารถเล่น whack-a-mole กับแต่ละสิ่งที่ก่อให้เกิดพรอมต์เมื่อเริ่มต้นเมื่อฉันระบุมัน (โดยการเริ่มต้น Emacs ในโหมดที่ไม่ใช่ daemon และเห็นสิ่งที่มันขอ) แต่มันไม่ใช่วิธีแก้ปัญหาเพราะมันไม่สามารถหยุด daemon ถัดไปได้ จากการหยุดทำงานเมื่อเริ่มต้นด้วยเหตุผลใหม่ เพื่อยกตัวอย่าง: เหตุผลทั่วไปที่มันจะหยุดทำงานหลังจากรีบูตระบบหรือ Emacs หยุดทำงานเมื่อ Emacs ที่ทำการบู๊ตครั้งแรกต้องการทราบว่าการขโมยล็อคไฟล์จาก Emacs ที่หมดอายุแล้วนั้นเป็นอย่างไร ฉันสามารถแก้ไขได้โดยสร้างคำแนะนำเพื่อให้พร้อมท์นั้นตอบ "ใช่" โดยไม่มีการโต้ตอบ แต่แล้วหนึ่งในไฟล์ที่ถูกเปิดในการบันทึกเซสชั่นก่อนหน้าคือไฟล์ TRAMP ที่ต้องใช้รหัสผ่าน sudo …

3
มีวิธีใดบ้างที่จะเรียกใช้ฟังก์ชั่น hook ได้เพียงครั้งเดียว?
บริบท ฉันใช้after-make-frame-functionsเบ็ดโหลดอย่างถูกต้องในรูปแบบนั้นกำหนดค่าไคลเอ็นต์ emacs / เซิร์ฟเวอร์ โดยเฉพาะนี่คือข้อมูลโค้ดที่ฉันใช้ในการสร้าง (ตามคำตอบ SOนี้): (if (daemonp) (add-hook 'after-make-frame-functions (lambda (frame) (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup))) (progn (load-theme 'monokai t) (sml/setup))) ปัญหา เมื่อมีemacsclient -c/tเซสชั่นจะเริ่มต้นเบ็ดจะถูกดำเนินการไม่เพียง แต่ในกรอบใหม่ แต่ในทุกกรอบที่มีอยู่ก่อนหน้า (อื่น ๆemacsclientครั้ง) และมันทำให้ผลภาพที่น่ารำคาญมาก (รูปแบบที่มีการโหลดอีกครั้งในเฟรมทุกคน) ที่แย่ยิ่งกว่านั้นในไคลเอนต์เครื่องเทอร์มินัลได้เปิดสีของชุดรูปแบบเรียบร้อยแล้ว เห็นได้ชัดว่าเกิดขึ้นเฉพาะในไคลเอนต์ emacs ที่เชื่อมต่อกับเซิร์ฟเวอร์ emacs เดียวกัน สาเหตุของพฤติกรรมนี้ชัดเจน hook ถูกเรียกใช้บนเซิร์ฟเวอร์และไคลเอ็นต์ทั้งหมดได้รับผลกระทบ …

2
ใช้โหมด daemon ใน Gnome 3
ฉันได้รับ Emacs daemon เพื่อทำงานผ่านบรรทัดคำสั่งโดยใช้หน้า EmacsWikiแต่ฉันติดอยู่กับวิธีทำให้ไคลเอ็นต์เรียกใช้ผ่านตัวเรียกใช้งาน Gnome 3 ฉันจะตั้งค่าไฟล์เดสก์ท็อป Gnomeที่เปิดหน้าต่าง GUI ที่เชื่อมต่อกับ Emacs daemon ได้อย่างไร

2
ทำให้ emacsclient สร้างเฟรมเฉพาะในกรณีที่ไม่มีอยู่แล้ว
ฉันจะemacsclient -a '' -nสร้างเฟรมใหม่ได้เฉพาะในกรณีที่ยังไม่มีเฟรมอยู่แล้ว? ปัญหาเกี่ยวกับการ-cตั้งค่าสถานะคือมันสร้างเฟรมใหม่ทุกครั้ง ปัญหาที่ไม่มีคือถ้าไม่มีการเปิดเฟรมมันจะเปิดในบรรทัดคำสั่ง หากฉันสามารถตรวจสอบว่ามีเฟรม Emacs ที่เปิดอยู่จากเปลือกหอยฉันสามารถโทรออกด้วยหรือไม่-cขึ้นอยู่กับว่าจะได้รับพฤติกรรมที่ฉันต้องการ ฉันเหนื่อย: $ emacsclient -a '' --eval '(frames-on-display-list)' (#<frame F1 0xba2740>) ฉันได้รับผลลัพธ์เดียวกันเสมอ ฉันสามารถใช้ไฟล์ชั่วคราวหรือ pgrep แต่วิธีการเหล่านั้นมีข้อผิดพลาดมาก นี้จะคล้ายกับคำถามนี้แต่มันไม่ได้เป็นที่ซ้ำกันตั้งแต่ OP emacsclientมีความพึงพอใจกับต้องมีกรอบเปิดก่อนที่จะเรียก

4
เรียกใช้ emacs GUI จาก emacsclient
ฉันกำลังใช้งาน emacs 25.1 ฉันมีเซิร์ฟเวอร์ emacs เริ่มต้นเป็น daemon เมื่อเริ่มต้นและฉันสามารถเปิดเซสชันเทอร์มินัล emacs ด้วยนามแฝงต่อไปนี้: alias em="emacsclient -t" ฉันจะเริ่ม emacs gui ในแบบเดียวกันได้อย่างไร

3
โหลดตัวแปรสภาวะแวดล้อมอีกครั้ง
คำถามนี้ถูกถามที่ superuser มีวิธีโหลดตัวแปรสภาพแวดล้อมใน emacsแต่ไม่มีวิธีแก้ปัญหาที่ดีเลย ฉันใช้ EmacsClient ที่เปิดบัฟเฟอร์มากกว่า 30 ครั้งหากฉันเปลี่ยนตัวแปรสภาพแวดล้อมในเชลล์ฉันต้องออกจาก EmacsClient (และเปิดบัฟเฟอร์ทั้งหมดอีกครั้ง) หรือฉันต้องตั้งค่าตัวแปรสภาพแวดล้อมด้วยตนเองใน Emacs ด้วยตนเอง ฉันพบว่ามันน่ารำคาญที่ฉันไม่สามารถอัพเดตตัวแปรสภาพแวดล้อมได้อย่างง่ายดายใน Emacs ข้อเสนอแนะใด ๆ

3
Emacsclient: emacs เดียวประมวลผลตลอดเวลาตั้งแต่เริ่มต้นและไม่ปิด & ซ่อน GUI ที่ดีขึ้น
เนื่องจาก emacsclient สามารถจัดการเวลาในการโหลดแพ็กเกจที่ยาวกว่าได้ฉันจึงอยากให้กระบวนการ emacs อย่างน้อยหนึ่งกระบวนการและส่วนใหญ่จะมีเพียงกระบวนการเดียว emacsเปิดเป็นกระบวนการพื้นหลังและซ่อน GUI ได้ดีขึ้น ตอนนี้ฉันกำหนดฟังก์ชันต่อไปนี้ใน. bashrc: emc () { if [[ $# -eq 0 ]]; then emacs --eval "(suspend-frame)" & return fi args=($*); setsid emacsclient -c -e "(find-file \"${args[*]}\")" } และยังมีบรรทัดต่อไปนี้ใน. bashrc: emc ดังนั้นทุกครั้งที่ฉันเปิดเชลล์ฉันจะต้องมีกระบวนการ emacs ใหม่ ปัญหาคือฉันจะมีกระบวนการ emac ที่ไม่จำเป็นเพิ่มเติมอีกมากมายหลังจากเปิดเชลล์จำนวนมาก แต่ผมเพียงต้องการที่จะรักษาความเป็นหนึ่งเดียว emacs ประมวลผลตลอดเวลาจากการเริ่มต้นที่ดีกว่าซ่อน GUI

2
โทร emacsclient จากโปรแกรมที่เรียกโดย Emacs
ฉันพบปัญหาในการดูไฟล์เอกสาร PDF ด้วย AucTex ฉันใช้pdf-toolsเพื่อดูไฟล์ PDF จากภายใน Emacs และฉันตั้งemacsclient -nเป็นค่าเริ่มต้น pdf-viewer ของฉัน (ผ่าน xdg-mime บน Debian Linux) สิ่งนี้ใช้ได้ดีในสถานการณ์ส่วนใหญ่ แต่มันก็แบ่งการ(Tex-documentation-texdoc ...)ทำงานของ Auctex ( C-c ?) ฉันได้ทำให้ปัญหาแคบลงเป็นรหัสบรรทัดเดียว เมื่อฉันพยายามที่จะดูเอกสารประกอบของlistingsแพคเกจTeX-documentation-texdocเปลี่ยนสิ่งนี้เป็น sexp ต่อไปนี้: (shell-command-to-string "texdoc --view listings") texdocในทางกลับกันเรียกร้องemacsclientให้เปิดไฟล์ (ขึ้นอยู่กับวิธีที่ฉันกำหนดค่าเดสก์ท็อปของฉันผ่าน xdg) อย่างไรก็ตาม ณ จุดนี้ Emacs แฮงค์และฉันต้องออก ( C-g) เพื่อรับการควบคุมกลับ หลังจากนั้นจะไม่มีการเปิดไฟล์ PDF ใหม่ สิ่งเดียวกันเกิดขึ้นถ้าฉันพยายามโทรหา emacsclient โดยตรง: (shell-command-to-string …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.