51

Ubuntuにログインすると、Ubuntuのスタートアッププログラムを使用してEmacs(バージョン23)デーモンを起動します。その後、何かを編集する必要があるときはいつでも、Emacsクライアントを起動します。もちろん、Ubuntuからログオフすると、Emacsはまだ実行されていると表示されます。ログオフ/シャットダウン時にemacsをシャットダウンするようにGnomeに指示するスクリプトをどこかに添付する必要があります。

1)スクリプトはどのようになりますか?「kill-emacs」は機能していないようです。

2)このスクリプトはどこに置くべきですか?スタートアッププログラム([システム]-> [セッション]メニュー)パネルには、便利に見えるものは何もありません。PostSessionスクリプトや、rootアクセス権を持つ他の何かをハッキングするよりも、ユーザーのアカウントで機能するものを好みます。

4

9 に答える 9

35

ShreevatsaR は正しいです。答えはkill-emacsまたはsave-buffers-kill-emacsです。どちらもインタラクティブなので、Emacs 内から で実行できますM-x save-buffers-kill-emacs。変更したファイルを保存できるため、これがおそらく最善の方法です。

もう 1 つの方法は、次のようなシェル ファイルを作成することです。

#!/bin/bash
emacsclient -e "(kill-emacs)"

好きな場所 (メニュー アイコン、パネルなど) から実行できます。

于 2009-07-22T21:38:31.943 に答える
20

この linuxquestions.org ページには、ログイン中に実行できる Python スクリプトがあり、シャットダウン中に Gnome が発行する「自分を保存」イベントをリッスンします。これを変更して、次のことを行うことができます。

emacsclient -e '(save-buffers-kill-emacs)'

公式ドキュメント: https://www.emacswiki.org/emacs/EmacsAsDaemon#toc8

于 2009-08-02T22:43:46.150 に答える
9

ShreevatsaR の別の補遺: python スクリプトは魅力的に機能しますが、使用することをお勧めします

emacsclient -e '(let ((last-nonmenu-event nil))(save-buffers-kill-emacs))'
コマンドとして。last-nonmenu-event を nil に設定すると、emacs が強制的にマウス モードになるため、ミニバッファーのプロンプトではなく、「適切な」ダイアログ ボックスが表示されます。

またはさらに派手な(emacs構成のどこかに):

(defun shutdown-emacs-server () (interactive)
  (when (not (eq window-system 'x))
    (message "Initializing x windows system.")
    (x-initialize-window-system)
    (when (not x-display-name) (setq x-display-name (getenv "DISPLAY")))
    (select-frame (make-frame-on-display display '((window-system . x))))
  )
  (let ((last-nonmenu-event nil)(window-system "x"))(save-buffers-kill-emacs)))

その後:

emacsclient -e '(shutdown-emacs-server)'
于 2010-02-16T04:20:34.093 に答える
7

systemdを使用している場合は、コンソール/リモート システム内から Emacs サーバーを適切に管理できるようにするこのユニット ファイルに興味があるかもしれません。

[Unit]
Description=Emacs: the extensible, self-documenting text editor

[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Restart=always

# Remove the limit in startup timeout, since emacs
# cloning and building all packages can take time
TimeoutStartSec=0

[Install]
WantedBy=default.target

(上記ですでに提案されているのと同じ方法でデーモンを殺します。)

ユニットファイルを ~/.config/systemd/user/emacs.service のように配置して名前を付けると、ルートとして実行する代わりにユーザーにバインドできます。それを管理するには:

$ systemctl --user {enable,disable,start,restart,stop} emacs.service

注: このメモは別の場所から取ったものですが、場所を思い出せません。

于 2015-02-24T19:28:53.440 に答える
4

/etc/init.dでスクリプトを使用する方が、よりクリーンなソリューションだと思います。詳細については、こちらを確認してください http://www.emacswiki.org/emacs/EmacsAsDaemon

于 2009-12-16T18:16:25.220 に答える
2

willert からの回答には小さなバグが含まれています。それは次のように見える必要があります


(defun shutdown-emacs-server () (interactive)
  (when (not (eq window-system 'x))
    (message "Initializing x windows system.")
    (x-initialize-window-system)
    (when (not x-display-name) (setq x-display-name (getenv "DISPLAY")))
    (select-frame (make-frame-on-display x-display-name '((window-system . x))))
  )
  (let ((last-nonmenu-event nil)(window-system "x"))(save-buffers-kill-emacs)))
于 2010-11-29T12:18:29.430 に答える
1

おそらく最も一般的な解決策は、スクリプトをシステムの PostSession ディレクトリに配置して、~/.logout-d 内のすべての実行可能スクリプトを実行するか、または同様の方法で実行することです。次に、好きなスクリプトを ~/.logout-d に入れると、ログアウト時に実行されます。

スクリプトはrun-parts ~/.logout.d.

注: 未テストですがrun-parts ~/.autostart.d、.

編集:もちろん、上記の python スクリプトを変更して同じコマンドを実行するのも同じくらい簡単ですが、個人的には、ログアウト時にコマンドを実行するためだけにセッション全体のスクリプトをロードするという考えは好きではありません。

于 2009-11-02T04:31:41.330 に答える
1

emacsclient -e "(kill-emacs)"GDM の PostSession ディレクトリに配置するか、デフォルト スクリプトに直接配置できます。

/etc/gdm/PostSession/Default

GDM のドキュメントも参照してください。

于 2009-07-23T06:12:42.270 に答える
-2

ターミナルを開いて、pkill -TERM emacs

于 2012-07-29T04:16:44.950 に答える