問題タブ [advising-functions]
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.
regex - emacs の正規表現構文を変更することは可能ですか?
私はemacsが大好きです。私は正規表現が大好きです。私は emacs の正規表現構文が嫌いです - グループ化括弧と中括弧をエスケープする必要があること、リテラル括弧をエスケープしないこと、事前定義された文字クラスの欠如など.
Query-replace-regexp (または他の多くの機能の 1 つ) 機能を使用するときに、java/js/perl/ruby/etc でプログラムした構文を使用できるように、emacs の正規表現エンジンを置き換えるか、設定を微調整できますか? ...?
編集: 件名はもともと「emacsの正規表現エンジンを変更する方法」でした。これは、エスケープルールを変更して文字クラスを追加するだけでなく、(投稿では言及されていませんが)さまざまな一般的な拡張機能のサポートを追加します(?...)。キャプチャしない括弧: (?:...)、if/if-not の後にのみ一致: (?=...)/(?!...) など。私は(修正されることを嬉しく思いますが)これらがemacsの現在の正規表現エンジンで可能であるとは信じていません。
以下の解決策は、emacs が理解する構文に置き換えることにより、エスケープと追加の char クラスの元の問題に対処します。2番目の回答(現在は削除されています)は、すべての正規表現処理を置き換えるためにemacsの正規表現関数をアドバイスする(別の開始時に実行する関数を追加する)ことを提案しました。著者は、既存の emacs コードの多くを破壊する可能性があることに気づき、すぐに自分自身を検閲し、最終的に投稿は削除されました。
正規表現エンジンを拡張機能をサポートするものに変更したいのですが、エスケープ動作を普遍的に変更すると混乱が生じることに同意します。追跡するつもりはありません。したがって、質問に合わせて件名を変更し、回答を受け入れています。
共通構文と拡張機能をサポートするようにエンジンを変更し、正規表現関数に emacs-internal コードを共通構文に変換するようにアドバイスし、インタラクティブ関数に私の共通構文を emacs-syntax に変換するようにアドバイスすることが頭をよぎりました。共通に戻されます)...しかし、RMSでさえその前にフォークを推奨すると思います。
emacs - Emacsに特定のウィンドウにバッファを表示させないようにするにはどうすればよいですか?
私のWindows構成は次のようになります。
そして、私は右下のウィンドウを特別な表示(ヘルプ、完了など)に使用しますが、emacsは、を使用するコマンド(find-file-other-window
など)を呼び出しdisplay-buffer
、そのウィンドウのサイズも変更するときに、そのウィンドウを使用することを主張します。迷惑です...emacsにそのウィンドウを使用しないように強制する方法はありますか?アドバイスを考えdisplay-buffer
ていたのですが、cの機能です。これについて何か考えはありますか?
編集:
Treyの答えに大きく基づいて、これは私にとってこれまでのところうまくいくものです:
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にさかのぼるよりエレガントな方法があることを願っています。