5

私はデーモンモードでemacsを使用しており、initial-buffer-choice 変数セットも持っています。に使用するファイルを編集しているときに、emacs がクラッシュすることがありますinitial-buffer-choice。この場合、--daemon を指定して emacs を起動すると、次のメッセージが表示されてハングします。

"todo.org has auto save data; consider M-x recover-this-file"

ほとんどの場合、init スクリプトからデーモンを起動するため、このダイアログを確認または拒否することはできず、デーモンは永久にハングします。この場合、自動保存データの通知をバイパスするにはどうすればよいですか? 必要に応じてオートセーブデータが失われてもかまいません。

これが私の試みでした:

(defadvice command-line
  (around my-command-line-advice)
  "Be non-interactive while starting a daemon."
  (if (and (daemonp)
           (not server-process))
      (let ((noninteractive t))
        ad-do-it)
    ad-do-it))
 (ad-activate 'command-line)

ただし、これは機能しません。私はまだ同じハング動作を取得します。実際、アドバイス内に「メッセージ」呼び出しを入れると、アドバイスがまったく呼び出されないことがわかります。

同様の質問:ファイルに自動保存データがある場合、emacs-daemon の起動がフリーズします。ただし、このソリューションは では機能しませんinitial-buffer-choice。受け入れられた回答は、私が試みたようにアドバイスを正常に定義した可能性のある以前のバージョンから編集されたcommand-lineようですが、残念ながらこのバージョンはなくなり、desktop.el 固有のバージョンに置き換えられました。

4

3 に答える 3

1

このスレッドへの質問で元の投稿者によって報告された動作の説明に基づいて、Emacs が でアクティブ化されると--daemoninitial-buffer-choice(つまり、to find-file-noselect "~/.../todo.org"[参照]) がデフォルトの... lisp/startup.elの起動シーケンスでアクティブ化されているように見えます。自動保存の設定は で無効にできます。順序を変更しても効果がない場合 [つまり、初期化ファイルの優先順位を高くして. 、)。これは、またはにandを配置することで実現できます。(setq auto-save-default nil)(setq auto-save-default nil)initial-buffer-choicetodo.org(setq initial-buffer-choice t)(setq auto-save-default nil)init.el.emacsファイル (フックなし) -- 次に、他のすべての設定が最初にロードされていることを確認するには、emacs-startup-hookto(kill-buffer "*scratch*")および-- これにより、が呼び出される前に(find-file "~/.../todo.org")自動保存が無効になります ( [参照] を使用)。 find-filefind-file-noselect... lisp/files.el

于 2013-10-25T22:47:02.660 に答える
1

1 つの可能性は、これを .emacs に入れることです:

(setq auto-save-default nil)

別の (おそらくより良い解決策) は、代わりにこれを使用してファイルを検索することにより、警告メッセージを抑制することです。

(find-file-noselect FILENAME &optional NOWARN RAWFILE WILDCARDS)

ここでわかるように、オプションの NOWARN 引数を使用して警告メッセージを抑制することができます (それが問題の原因であるため)。

出典:この EmacsWiki ページ

私が自分でこれを解決する場合に行うことができる変更を次に示します。.emacs セットアップで定義します。

(defun find-file (filename &optional wildcards)
  (interactive
   (find-file-read-args "Find file: "
                        (confirm-nonexistent-file-or-buffer)))

  ; the "t" here is normally set to "nil", this should solve the problem
  (let ((value (find-file-noselect filename t nil wildcards)))  
    (if (listp value)
    (mapcar 'switch-to-buffer (nreverse value))
      (switch-to-buffer value))))

編集:これはこれまでのところ誰にも役立ちませんでしたが、完全を期すために、いくつかの助けになるかもしれません.

質問者が確認した現在の方法は、 を使用し、とemacs-startup-hookを組み合わせることです。(kill-buffer "*scratch*")(find-file "~/.../todo.org")

于 2013-03-23T20:03:56.930 に答える
0

" ...has auto save data; consider Mx recover-this-file " は単なるメッセージであるため、問題が本当に自動保存ファイルに関連しているかどうかはわかりません。しかし、この場合、emacs の自動保存ディレクトリが空 ( directory-files) であるかどうかのテストをサーバーの初期化ファイルに組み込むことができます。自動保存ディレクトリが空でない場合は、すべてのファイルを別の場所に移動してから ( rename-file) に進みます。

これが問題を解決するかどうか、私は本当に興味があります。

本当の問題は、emacs でサーバーの問題をデバッグする方法です。デバッグと edebug は、サーバー モードではまったく意味がありません。すべてをファイルにトレースする方がよいでしょう (ロギングなど)。

于 2013-10-24T07:03:01.533 に答える