ฉันจะทำให้การเรียกใช้ emacsclient จากตัวเรียกใช้ความสามัคคีใช้หน้าต่าง emacs ที่มีอยู่อีกครั้งได้อย่างไร


12

หากคุณสร้าง emacsclient launcher โดยการคัดลอกไฟล์ .desktop (เช่น Emacs one) มันจะไม่ทำงานในลักษณะของ Unity launcher มาตรฐาน มันจะเปิดหน้าต่างใหม่เสมอ ไม่ทราบว่ามีหน้าต่าง Emacsclient อยู่แล้วเพื่อข้ามไปยังหน้าต่างเหล่านั้น ฉันจะทำให้มันทำงานได้อย่างไร

เป็นพื้นหลังนี้เป็นโหมดการใช้งานที่มีประโยชน์มากสำหรับ Emacs ที่คุณใช้มันเป็น daemon: emacs --daemonและจากนั้นคุณเรียกหน้าต่าง emacs emacsclientกับ วิธีที่ดีในการทำเช่นนี้กับผู้ใช้ emacs ที่เป็นประจำคือการใส่emacs --daemonแอปพลิเคชันเริ่มต้นของคุณ

คำตอบ:


16

ทางออกคือการสร้างemacsclient.desktopไฟล์รวมถึงคำสั่งไปที่ชั้นของหน้าต่างโดยใช้การตั้งค่า StartupWMClass หากไม่มีความเป็นเอกภาพก็ไม่สามารถบอกได้ว่าหน้าต่างนั้นมาจาก Emacsclient สิ่งนี้จะสร้างขึ้นมาตามเนื้อหาของ Emacs one (/usr/share/applications/emacs23.desktop):

mkdir -p ~/.local/share/applications
cat > !$/emacsclient.desktop <<EOF
[Desktop Entry]
Version=1.0
Name=Emacsclient
GenericName=Text Editor
Comment=View and edit files
MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;
Exec=/usr/bin/emacsclient -c %F
Icon=/usr/share/icons/hicolor/scalable/apps/emacs23.svg
Type=Application
Terminal=false
Categories=Utility;Development;TextEditor;
StartupWMClass=Emacs
EOF

วาง emacsclient ในตัวเรียกใช้งาน (เช่นแตะที่ Super พิมพ์ "emacsclient" แล้วลากลงบน) และออกจากระบบ


ใน. bashrc ของฉันฉันกำหนด TMPDIR = $ {HOME} / tmp ดังนั้นไฟล์ชั่วคราวจะอยู่ภายใต้ $ HOME ที่เข้ารหัสของฉัน emacs ที่เรียกใช้จากตัวเรียกใช้งานไม่เห็นคำจำกัดความนี้ แต่ emacsclient ที่เรียกใช้จากเชลล์ทำ emacs (หลังจากเซิร์ฟเวอร์เริ่มทำงาน) เปิดซ็อกเก็ตใน / tmp emacsclient พยายามสื่อสารกับ emacs ผ่านซ็อกเก็ตใน $ {HOME} / tmp และทำได้ไม่ดีนัก ฉันสามารถใช้ emacsclient.desktop เพื่อส่งผ่านค่าที่ถูกต้องสำหรับ TMPDIR ได้หรือไม่
waltinator

ฉันย้ายคำถามของฉันไปที่หัวข้อของตนเองและได้รับคำตอบ ดูaskubuntu.com/questions/64005/launcher-doesnt-respect-tmpdir/…
waltinator

ความสามัคคีล้วนเพิกเฉยต่อฉันemacsclient.desktopด้วยเหตุผลบางอย่าง ในที่สุดฉันก็ได้รับสิ่งนี้โดยสร้างตัวเรียกใช้งานในalacarte(เมนู "เมนูหลัก") แทน
Brian Z

2

โซลูชันโดย james.ferguson ทำงานได้ดี สิ่งที่ฉันต้องการคือการเชื่อม emacsclient ไปยังไฟล์บางประเภทในฐานะ "แอพพลิเคชั่นที่ต้องการ" สำหรับสิ่งนี้ฉันพบสคริปต์ของ james ที่มีบรรทัด "Exec" ใหม่

Exec=/usr/bin/emacsclient --alternate-editor emacs24 --no-wait %F

ทำงานได้ดีขึ้นสำหรับฉัน: มันทำงาน emacs ใหม่หากไม่มีใครทำงานอยู่ไม่เปิดหน้าต่างใหม่และไม่ทำให้ emacs บ่นเกี่ยวกับลูกค้าที่ยังรอให้สิ่งต่าง ๆ เกิดขึ้น

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


1

อีกวิธีคือใช้สคริปต์ :

if [ "$(pidof emacs)" ] ; then
    emacsclient "$@" &
else
    emacs -mm "$@" &
fi

ดังนั้นคุณเรียกใช้คำสั่งเดียวกันเสมอ

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