(私はDebian 7で emacs2 ;を使用しています; Xfce。)
試してみたい Emacsで簡単にメモを取るためのGillesの推奨ソリューション 。
emacsclient -a "" -e "(remember-other-frame)"
を実行しようとすると、次のエラーが発生します。
*エラー*:不明な端末タイプ
何が問題なのですか?
(私が何をしているのかよくわかりません)Emacs内からサーバーを起動しようとしました: Ctrl+x と入る server-start。それからそれは言う:
警告(サーバー):Emacsサーバーを起動できません。
「server」という名前の既存のEmacsサーバーがあります。
このEmacsプロセスでサーバーを起動するには、既存のサーバーを停止します
サーバーまたは `M-x server-force-delete 'を呼び出して、サーバーを強制的に切断します。
押すと Ctrl+x と入る server-force-delete、それは言う:
接続ファイル「/ tmp/emacs1000/server」を削除しました
別のターミナルウィンドウからemacsclient -a "" -e "(remember-other-frame)"
を実行すると(最初のウィンドウではemacs -nw
がまだ実行されています)、次のようになります。
emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".
Warning: due to a long standing Gtk+ bug
http://bugzilla.gnome.org/show_bug.cgi?id=85715
Emacs might crash when run in daemon mode and the X11 connection is unexpectedly lost.
Using an Emacs configured with --with-x-toolkit=lucid does not have this problem.
("emacs")
Loading 00debian-vars...
Loading 00debian-vars...done
Loading /etc/emacs/site-start.d/50a2ps.el (source)...
Loading /etc/emacs/site-start.d/50a2ps.el (source)...done
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...done
Loading debian-ispell...done
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...done
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...done
Starting Emacs daemon.
Emacs daemon should have started, trying to connect again
*ERROR*: Unknown terminal type
echo $TERM; echo $DISPLAY
の出力:
xterm
:0.0
これをターミナルエミュレータから実行していますか?実行している場合は、どこで実行していませんか?
「ターミナルエミュレータ」が何であるかはわかりませんが、使用しているターミナルのものは、([情報]メニューで)自分自身を次のように識別します:Xfceターミナルエミュレータ(ターミナル0.4.8)。これは、Debian 7 + Xfceのインストールに付属しているデフォルトのものです。
~/.emacs
と~/.emacs.d
には何がありますか?
~/.emacs
は存在しません。~/.emacs.d
にはサブフォルダauto-save-list
のみが含まれます(名前が.saves
で始まる空のファイルが含まれます)。remember-other-frame
呼び出し switch-to-buffer-other-frame
呼び出し display-buffer
変数 pop-up-frames
をt
に設定。これにより、引数 make-frame
を指定して pop-up-frame-alist
が呼び出されます。関数make-frame
は、現在選択されているフレームと同じディスプレイデバイス上にフレームを作成します。 (Emacsがフレームと呼ぶのはGUIがウィンドウと呼ぶものですが、フレームはテキスト端末にもある可能性があります。)この時点では、Emacsはまだデーモンモードで実行されているため、選択されたフレームはありません。したがって、make-frame
はGUI環境を認識せず、端末フレームを作成する必要があると考えますが、テキスト端末も存在しないため、「不明な端末タイプ」という紛らわしいエラーメッセージが表示されます。
remember-other-frame
は、既存のEmacsウィンドウ内から呼び出すのに適切な関数ですが、emacsclientからは技術的に間違っています。そこでは、-c
オプションを使用してEmacsに新しいフレームを作成させ、プレーンなremember
関数を使用する必要があります。
emacsclient -a "" -c -e "(remember)"
ただし、これはあまり良いことではありません。remember
は、C-c C-c
(これはメモを保存するものでもあります)で閉じる必要があるウィンドウを作成し、フレームはC-x 5 0
で閉じる必要があるためです。 C-c C-c
を忘れた場合(エコー領域でC-x 5 0
と入力したメッセージがC-c C-c
と入力したメッセージを上書きする可能性が高いため)、メモは保存されません。
現在のXディスプレイにフレームを作成するようにmake-frame
に明示的に指示します。
emacsclient -a "" -e "
(let ((pop-up-frame-alist \`((window-system . x)
(display . \"$DISPLAY\")
,@pop-up-frame-alist)))
(remember-other-frame))"
これをすべて1行にまとめることができますが、句読点を変更しないように注意してください。
emacsclient -a "" -e "(let ((pop-up-frame-alist \`((window-system . x) (display . \"$DISPLAY\") ,@pop-up-frame-alist))) (remember-other-frame))"
代わりに(make-frame)
を直接呼び出すことができる場合は、常にXフレームを作成するように指示できます。これにより、このエラーを回避できます。例:
(select-frame
(make-frame
'((window-system . x))))