My開発メモ

xfce4のメニューを編集してEmacsを起動する(Ubuntu 24.04)

Emacs-clientの起動の問題点

いつのまにか Emacsがクライアント・サーバー型になっていて、
Ubuntuを起動したら勝手にEmacsサーバーが起動していて、
Emacs-client を使うことになっていた。

それに気づかずに 今まで Emacs-GUI を起動していたのだったが、
起動に時間がかかっていたのは、Emacsサーバーと衝突していたからか。

Emacs-client を使うと起動も速いし、いいのだけれど、
ファイルを右クリックして起動したとき、そのファイルが開かずに
以前開いていたファイルが開くので、それを修正するために、
xfce4のメニューを編集した。

xfce4のメニューを編集する

xfce4は、右クリックメニューも、メインメニューも、
次のようにすれば修正できる。

スタートメニューを開いて、”設定マネージャー(Settings Manager)”
を起動する。

その中に “メニューエディター” があり、それで編集できる。

今回は Emacs なので、”開発” の中の “Emacs(Client)” を選択する。

開いたペインで、”アプリケーションの詳細” の “コマンド” を編集する。

コマンドには、Emacsを起動するためのスクリプトが記述されている。

右の鉛筆マークをクリックすると、そのスクリプトを編集できる。

起動スクリプトを編集する

起動スクリプトは、次のようになっていた。

sh -c "if [ -n \\" \\$*\\" ]; then exec /usr/bin/emacsclient --alternate-editor= --reuse-frame \\"\\$@\\"; else exec emacsclient --alternate-editor= --create-frame; fi" sh %F

これは、次のような意味である。

sh -c "…" sh %F

sh -c で、 “…” の文字列をコマンドとして読み取る。
sh %F で、引数として指定されたファイル名を取得する。

コマンドの文字列は次のようになる。

if [ -n "$*" ];
then
  exec /usr/bin/emacsclient --alternate-editor= --reuse-frame "$@";
else
  exec emacsclient --alternate-editor= --create-frame;
fi

“$*” はコマンドライン引数。
-n は「文字列が空でないか」を判定する。

つまり、引数があれば then以下を実行し、なければ else以下を実行する。

–alternate-editor= は、Emacsサーバが起動していない場合、空の文字列を指定することで、新しい emacsプロセスを起動する。
–reuse-frame 既存のEmacsフレームを再利用してファイルを開く。
–create-frame 新しいフレームを作成してEmacsを起動する。

今回の場合、ファイルを指定してemacs-client を起動したら、以前のファイルを開いて起動したので、次のようにする。

--reuse-frame ==> --create-frame

全体を次のようにして、設定エディターの記述を修正する。

sh -c "if [ -n \" \$*\" ]; then exec /usr/bin/emacsclient --alternate-editor= --create-frame \"\$@\"; else exec emacsclient --alternate-editor= --create-frame; fi" sh %F

設定エディターを保存すると、自動で、バックスラッシュが \ から \ になる。

起動した

これで、Emacs-client が起動できた。

任意のファイルを右クリックすると、そのファイルが編集できるようになる。

カテゴリー: Emacs, memo, Ubuntu

タグ: emacs-client, emacs-server, xfce4, スクリプト

カウント: 17