Mevcut bir emacs penceresini yeniden kullanmak için birlik başlatıcıdan çalışan emacsclient'i nasıl yapabilirim?


12

Bir .desktop dosyasını (örn. Emacs olanı) kopyalayarak emacsclient başlatıcısı oluşturursanız, standart Unity başlatıcısı biçiminde davranmaz. Her zaman yeni bir pencere açar; mevcut Emacsclient pencerelerinin onlara atlamak için var olduğunu kabul etmez. Nasıl davranmasını sağlayabilirim?

Arka plan olarak, bu bir daemon olarak çalıştırdığınız Emacs için çok kullanışlı bir kullanım modudur: emacs --daemonve sonra bir emacs penceresi çağırırsınız emacsclient. Alışılmış emacs kullanıcıları için bunu yapmanın iyi bir yolu emacs --daemonBaşlangıç ​​Uygulamalarınıza koymaktır .

Yanıtlar:


16

Çözüm, emacsclient.desktopStartupWMClass ayarlarını kullanarak pencerenin sınıfına bir yönerge içeren bir dosya oluşturmaktır . Onsuz, Unity bu pencerenin Emacsclient'ten geldiğini söyleyemez. Bu Emacs one'ın içeriğine dayalı bir tane oluşturacaktır (/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'i başlatıcıya yerleştirin (örn. Süper'ye dokunun, "emacsclient" yazın, sürükleyin) ve oturumu kapatın / oturum açın.


.Bashrc dosyamda TMPDIR = $ {HOME} / tmp tanımladım, böylece geçici dosyalar şifreli $ HOME'umun altında olacak. başlatıcıdan çağrılan emacs bu tanımı görmez, ancak bir kabuktan çağrılan emacsclient yapar. emacs (sunucu başladıktan sonra) / tmp içinde bir soket açar, emacsclient emacs ile $ {HOME} / tmp içinde bir soket üzerinden iletişim kurmaya çalışır ve çok kötü çalışır. TMPDIR için doğru değeri iletmek üzere emacsclient.desktop kullanabilir miyim?
waltinator

Sorumu kendi başlığına taşıdım ve cevaplandım. Bkz. Askubuntu.com/questions/64005/launcher-doesnt-respect-tmpdir/…
waltinator

Birlik bir emacsclient.desktopsebepten ötürü tamamen görmezden geldi . Sonunda alacartebunun yerine başlatıcıyı ("Ana Menü" GUI) içinde oluşturarak çözdüm.
Brian Z

2

James.ferguson çözümü iyi çalışıyor. Ne istediğim kadar emacsclient "tercih edilen uygulama" olarak bazı dosya türlerini bağlamak oldu. Bunun için James'in senaryosunu yeni bir "Exec" satırı ile buldum

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

benim için daha iyi çalışır: hiçbiri çalışmıyorsa yeni bir emacs çalıştırır, yeni bir pencere açmaz ve emacs'ın hala bir şeyler olmasını bekleyen müşterilerden şikayet etmesini sağlamaz.

Şimdi dosyaları tıklayabilirim ve varsa çalışan bir emacs içinde açılırlar, aksi takdirde emacs başlar.


1

Başka bir yol bir komut dosyası kullanmaktır :

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

Böylece her zaman aynı komutu çağırırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.