問題タブ [defadvice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
emacs - Emacs でプリミティブにアドバイスする方法
非常に奇妙な行動に出くわしたとき、私は別のSOの質問に答えようとしていました。ここに私の小さなテストケースがあります:
どこ:
/tmp/foofoo
私がアクセスして実行my-override-toggle-read-only
した読み取り専用ファイルです。/tmp/fooxxfoo
存在しません。/tmp
ログインしているユーザーが書き込み可能です。
が に設定されtester-fn
ているバッファで実行すると、予期しない結果が得られます: . 他のバッファー (例: scratch ) で実行すると、期待される応答がミニバッファーで得られます。デバッガーを介してアドバイスを追跡すると、デバッガーが本来あるべきだと思うことを正確に実行し、期待する部分を実行し、期待する部分をスキップし、期待する値を返していることがわかります。ただし、デバッガーをトレースすると、非常に異なる値が返されることが示されます (変数が nil として評価される場合は& 、変数が非 nil として評価される場合は &) 。&リターンは、私が奇妙だと思うものです。my-override-mode-on-save
t
XXX: no - YYY: no
tester-fn
XXX: no - YYY: yes
tester-fn
nil
t
nil
nil
nil
nil
ここで何が起こっているのかわかりません。期待した結果が得られない理由を知っている人はいますか?
emacs - Emacs/Emacs Lisp: 対話型フォームの前にアドバイスを挿入できますか? または、コンパイルコマンドをインテリジェントに事前設定する方法は?
私がやりたいことは、compile
関数への文字列引数のバッファローカルデフォルト値をインテリジェントに事前設定することです。
現在、compile.el はデフォルトでコマンドとして「make」を使用しています。これは、設定で設定できますcompile-command
。その変数をバッファローカルにすることもできます。これは、常に同じ静的値が必要な場合に機能します。
compile-command
しかし、バッファの内容、バッファの名前、ファイルを含むディレクトリの内容 (存在する場合)、および月の満ち欠けに応じて、インテリジェントに選択したいと思います。基本的に、デフォルト値を制御してから、インタラクティブなユーザーがその事前設定値をオーバーライドできるようにします。
私は事前のアドバイスでこれを行うことを望んでいました。しかし、これは私が期待したように機能していません。
advice.el ファイルを読むと、なるほど
function/macro/subr/special-form に N 個の before アドバイス、M 個の around アドバイス、K 個の after アドバイスがあるとします。どのアドバイスも保護されていないと仮定すると、アドバイスされた定義は次のようになります (body-form インデックスは、そのアドバイス クラス内のそれぞれのアドバイスの位置に対応します)。
これが私に言っていることは、アドバイスされた関数がインタラクティブな場合、「call-interactively」はビフォア アドバイスまたはその他のアドバイスを呼び出す前にインタラクティブ フォームを呼び出すということです。
そして、アドバイスを に追加するとcompile
、私が観察した動作がこれを確認します。アドバイスは、インタラクティブ フォームが処理された後に呼び出されます。インタラクティブなフォームは、コンパイルに使用する文字列を提案してから、私のアドバイスがそれを推測して事前に設定する機会を得る.
そう...
- インタラクティブフォームの前にコードを実行するにはどうすればよいですか? アドバイスはこれを行うことができますか?アドバイスではない場合、何か他のものはありますか?また
compile-command
任意のバッファを動的に事前設定するにはどうすればよいですか?
アイデアを歓迎します。
emacs - 1 つで Python ファイルを編集し、もう 1 つで IPython シェルで実行するために、emacs で 2 つの並列バッファーを設定するにはどうすればよいですか?
ipython.el
emacs23でセットアップしようとしています。私はそれを正常にインストールしました(emacsにプリインストールされている代替品を入れた後)python-mode.el
。などを介して実行することもできます。load-path
python.el
M-x py-shell
インターフェースの設定がかなりお粗末なようで、やり方が間違っているのか、それとも思いどおりに動作させるためにカスタマイズする必要があるのか 疑問に思っていました.
要するに、私が望むワークフローは次のとおりです。
- 1 つ以上のバッファーで、Python コードを編集します
- そのバッファーにヒット
C-c C-c
したら、開いている IPython シェル バッファー (存在する場合) でそのバッファーの Python コードを実行するか、別のバッファーを開いて実行します。
しかし、今起こっていることは次のとおりです。
- 一方のバッファーに IPython シェルがあり、もう一方のバッファーに Python ファイルがある場合
C-c C-c
、Python ファイル バッファーをヒットすると、ファイル バッファーが IPython バッファーに切り替わり (つまり、2 つの複製された iPython バッファーがあることを意味します)、ファイルが実行されます。 - これは面倒です。
私は elisp にはかなり慣れていませんが、回避策として、既存のファイル バッファーに注意して を実行し、元のファイル バッファーに戻すdefadvice
ようアドバイスできることを理解しています。python-execute-buffer
python-execute-buffer
これはかなりばかげているようです。これを達成するためのより良い方法についての提案をいただければ幸いです。
問題がある場合: 私は OS X 10.6.8 を使用しており、IPython 0.10.1 で Emacs 24.0.50 を実行しています。
前もって感謝します!
emacs - 関数の前にpy-shellを実行するようにemacsのpy-execute-bufferにアドバイスするにはどうすればよいですか?
C-c C-c
バッファまたはファイルを編集し、ヒットしてファイルをIPythonセッションに送信したいと思います。を介して実行するM-x py-shell
前に最初に実行すれば、これを達成できます。しかし、私が経由して機能をアドバイスしようとするとpy-execute-buffer
C-c C-c
エラーが発生します:
作成された一時ファイルがIPythonに表示されていないように見えますか?Pythonファイルに戻って再実行するpy-execute-buffer
と、すべて問題ありません。
どんな考えでもありがたいです-ありがとう!
emacs - デスクトップ セッションから戻るときに警告が表示されます。Emacs
昨日、EmacsWiki からデスクトップ モードを見つけたので、Emacs 24 用に構成しました。
しかし、 Emacs を再起動すると、 *Compile-Log*バッファーに警告が表示されました。
デスクトップを使用しているときにこの警告に遭遇した人はいますか? または、デスクトップ モードより優れたアドオンはありますか?
emacs - ad-activateは何をしますか?
答えの中で、私は気づきました:
これは有望に聞こえますが...それは何をしますか?!
eval-region
コードのブロックを試してみました。しかし、私にとっては、align-regexp
ドキュメントに以下を追加するだけです。
この機能をお勧めします。
アラウンドアドバイス`align-regexp-with-spaces':
位置合わせにタブを使用しないでください。
私は実際に使うことができないようですalign-regexp-with-spaces
、それが効果であるはずであるならば...私は何が欠けていますか?
GNU Emacsバージョン24.0.96.1(i386-mingw-nt6.1.7601)を使用しました。
emacs - Emacsでアドバイスされた関数のdefadviceを見つけるにはどうすればよいですか?
のドキュメントを表示するbeginning-of-defun
と、次のような注意があります。
ただし、どの.elファイルでdefadviceが呼び出されているかがわかりません。アドバイスが定義されている元のファイルに移動する方法はありますか?
編集: .elファイルをrgrepするという正しいPhilsの提案をマークしましたが、それでも、defadviceにさかのぼるよりエレガントな方法があることを願っています。
emacs - Emacs Lisp、マクロをマッピングして引数の 1 つを評価する方法
Bob Glickstein は、"Writing GNU Emacs Extensions" の第 3 章で、スクロール機能をアドバイスする方法について説明しています。(彼はそれらを可逆にすることを提案しているので、スクロールする前に状態を保存する必要があります。)
たとえば、スクロールアップコマンドの場合、このアドバイスは次のように行われます
良い。もちろん、すべてのスクロール コマンドに対してこれを行う必要があります。では、それらを順番に並べて、まとめてアドバイスしていきたいと思います。
(ベクトルを使用して 5 つの引用符を保存します。)
しかし今、私は立ち往生しています。
defadvice はマクロであり、fun-name を評価しないため、(存在しない) 関数 fun-name を 4 回アドバイスします。
それを行う方法はありますか?
(私は Emacs 24 を使用しています)
emacs - emacs: マークリングの使い方は?
を実行するC-u C-SPC
と、emacs は「前にいた場所」に移動します。その後C-u C-SPC
押すと前の場所に戻ります。それはとても素晴らしいです、そして私はそれをたくさん使います。
しかし、何かがいつも私を悩ませていました: マークリングから欠落している唯一のマークはwhere-I-invoked-this-in-the-placeです! パンくずを置いてきて、「おっと、道に迷ったかもしれないから戻って確認してみよう」と言って、パンくずを残さずに今いる場所に戻るようなものです。
私は関数をアドバイスしようとしましたが、私の人生では、プログラムで をシミュレートすることはできませんC-SPC C-SPC
。
- 「Ch k」のように、キーの組み合わせが何をするかを「見る」(エコー、メッセージ、トレースなど) 方法を教えてください
C-SPC C-SPC
。後者についてのマニュアルの内容は次のとおりです(強調は私のものです)
C-SPC は、コマンド set-mark-command を実行します。これは、`simple.el' 内のインタラクティブにコンパイルされた Lisp 関数です。
C-@、C-SPC にバインドされます。
(set-mark-command ARG)
ポイントがある場所にマークを設定するか、マークにジャンプします。マークを設定すると、ポイントとマークの間のテキストであるリージョンも変更されます。これは、一部のエディターが「選択」と呼ぶものに Emacs で最も近いものです。
前置引数なしで、ポイントにマークを設定し、古いマーク位置をローカル マーク リングにプッシュします。また、以前のマークが別のバッファに設定されている場合は、グローバル マーク リングに古いマークをプッシュします。
しかし、「ポイントにマークを設定する」ために「前置引数なし」で(非対話的に)使用しようとすると、「引数の数が間違っています」というデバッガエラーが発生します..?(引数と前置引数の違いを認識しています)。
哲学的で非現実的な答えでも構いません。ここでのアイデアが何であるかを理解したいだけです。