0

それで、私はついに思い切って、viとvimからemacsに切り替えてとても幸せな状態になりました...私は.emacsファイルに何かを入れて、評価する方法を学びました物事(移動コマンドに精通することは言うまでもありません)などなど。

そして今、.emacsファイルのrequire行(requireステートメント*)に問題があります。これは、emacsを起動すると爆破します(通常は機能しません)。

だから、これは私を次の状況に導きます:

C-M-f上記の状況をデバッグしようとするプロセスで、私が行った手順の1つは、必要なファイルを開き、 and C-x C-e(および後で)を使用して少しずつ評価することM-x eval-bufferでした。これらはすべて正常に機能しました。しかし、セクションごとの途中で、それらすべてを入力するのに飽きてしまったので、キーボードマクロを記録しました...C-x ( C-M-f C-x C-e C-x )そしてC-x e...ミニバッファーにメッセージが表示されました(私は使用していると思います)正しい名前)、と言って(Type e to repeat macro)います。つまり、コードの各セクションの評価の結果の値を見ることができなくなったということです...この場合は重要ではありませんが、私はそれが好きでした。

それは私を実際の質問に導きます:

そのメッセージを無効にしたり、ミニバッファに一度に複数の行を表示させたりする方法はありますか?

私はバッファについて知っています*Messages*、そしてそれは助けになったかもしれません、私はそのメッセージを無効にするか、さもなければそれを他のメッセージと共存させる方法があるかどうか疑問に思っています。助言がありますか?

ありがとう!

  • リンデス

*-目前の問題は、実際には私の質問ではありませんが、(require 'ruby-mode/ruby-mode)emacsが(システムコールトレースごとに)ruby-mode.elファイルを開いて正常に開いていても、失敗することです。これは、provide行がちょうどと言っているからだと思い'ruby-modeます。私はこれに対する解決策を見つけましたが、誰かが私に「ベストプラクティス」を教えてくれるなら、それをいただければ幸いです。

4

5 に答える 5

3

(私が最初に言うかもしれません:これは私が長い間ここで読んだ中で最も明確な質問です!よくやった)。

F4キーを押してマクロを実行できます。メッセージが含まれていないことを除けば、Cxeとほぼ同じです。

于 2010-05-25T15:55:46.623 に答える
1

あなたの「メッセージを隠す」質問についてはわかりません。

機能とrequire/provide関数に関しては、「最高」とは言いませんが、「提供する」機能と同じ名前を.elファイルに付けるのが一般的です。

すべてのモジュールがそれを行うわけではありません。そのような場合は、ELファイルを調べて、.elファイルが提供している機能の名前を把握する必要があります。または、ドキュメントが存在するまれなケースでは、ドキュメントを確認してください。次に、呼び出しでオプションの引数を使用しrequireます。

(require 'feature-name  "name-of-el-file-that-provides-feature.el")

.elファイルはロードパス上にある必要があります。

于 2010-05-25T11:10:37.127 に答える
1

リンデスの答えを洗練するために、私はそれをこのように実装します:

(require 'cl) ; for flet
(add-to-list 'minor-mode-alist '(kmacro-repeat-mode " MACRO-REPEAT!"))
(defadvice kmacro-call-macro (around kmacro-call-macro-without-message activate)
  "run kmacro-call-macro without any messages"
  (flet ((message (&rest args)))
    (let ((kmacro-repeat-mode t))
      ad-do-it)))

minor-mode-alist何度もやる理由がないので、の修正を抜いてみました。残りは、letとを使用して一時的なバインディングを実行します。これは、非ローカル出口がflet存在する場合でも、よりクリーンで安全です。

個人的には、このアドバイスはマクロの実行中は機能を無効にするため、使用しません。つまり、実際に使用messageするすべてのマクロが同じように機能しなくなります。kmacro-call-macroの編集バージョンを使用するだけです。もちろん、代わりに選択的にメッセージを送信できる変数を使用して、メッセージの呼び出しをラップすることもできます。 message

于 2010-05-28T16:00:45.360 に答える
1

この機能を完全に無効にするには、これを.emacsに追加します。

(setq kmacro-call-repeat-key nil)

(現在)機能を有効にしておく方法はありませんが、メッセージは表示されません。

于 2010-05-25T16:41:10.617 に答える
0

さて、「それをする方法はない」という答えに挑戦して(私は感謝しています、言わせてください)、私はこれを行う方法を見つけようと試みました。

メッセージとしてではなく、モードラインに何かが表示されたらいいなと思っていたので...

kmacro-call-macroのソースコード(一部のWebアクセス可能なバージョン)、elispマイナーモード規則、およびその他のさまざまなWebページを読みました。私はいくつかのことを試みました。デバッグを行いました。そして最後に、私はこの(不完全な-以下で詳しく説明します)ビットのelispを思いつきました:

;;;;; change kmacro-call-macro (C-x e) to not generate any messages,
;;;;; and instead add a minor mode to the modeline
(defadvice kmacro-call-macro (around kmacro-call-macro-without-message activate)
  "run kmacro-call-macro without any messages"
  (fset 'saved-message (symbol-function 'message))
  (unless (assq 'kmacro-repeat-mode minor-mode-alist)
    (setq minor-mode-alist
          (cons '(kmacro-repeat-mode " MACRO-REPEAT!") minor-mode-alist)))
  (setq kmacro-repeat-mode t)
  (defun message (format-string &rest args))
  ad-do-it
  (fset 'message (symbol-function 'saved-message))
  (setq kmacro-repeat-mode nil))

これがこれを行うための最もクリーンな方法ではないことは確かです-実際、実際には多少バグがあるようです-必要なときにモードラインメッセージを常にオンまたはオフにするわけではありません。しかし、それはほとんど機能し、これは私を幸せにします。

誰かがそれをさらに改善する方法について何かヒントがあれば、私は彼らに感謝します。

別の解決策は、kmacro-call-macroを書き直して、基本的にこの機能を含めることです。おそらく、それを制御するための別のカスタマイズ変数を使用します。そうすることで、メッセージに含まれる追加情報(繰り返すキー、繰り返し回数の情報)も表示されるようになると思います。おそらくそれはdefadviceを使用してさえ可能ですか?再定義されたメッセージ関数などを介して、ad-return-valueの値に影響を与える可能性がありますか?

とにかく、上記のコードは私の.emacsファイルに追加されており、elispとそのベストプラクティスを少しよく知ったときに、いつか洗練されることを願っています。

他の誰かがこれが役に立つと思うことを願っています。

繰り返しになりますが、これに対する改善は大歓迎です。

編集:

私はもともと持っていました:

  (defun message (s &optional rest stuff))

これは本当にあるべきでした(そして今は上にあります):

  (defun message (format-string &rest args))

それが問題を解決することを願っています!それは私が言うには早すぎると思うほど断続的です...

于 2010-05-27T06:01:13.657 に答える