問題タブ [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.

0 投票する
3 に答える
417 参照

emacs - Emacs - 空白のキルをスキップ

キルリングが本質的に空白のみのエントリ (タブ、改行、スペースのみなど) を無視するようにしようとしています。いくつかの質問。

  • そもそも空白のエントリがキルリングに入らないようにするか、ヤンクでスキップする方がよいでしょうか? 私は後者を想定しました。

その場合、現在のキル、ヤンク、およびヤンクの挿入の間で、どの関数にアドバイスする必要があるかについて完全に迷っています-しかし、キルリングから空白をヤンクしないように操作する必要があるかどうかは完全にはわかりません。

ありがとう!

編集:これを行う方法は、「c​​urrent-kill」を操作して、空白以外のエントリに到達するまで自分自身を呼び出し続けることだと確信していますか? (またはリングの終わりのいずれか早い方)

0 投票する
2 に答える
577 参照

emacs - 特定の基本モード バッファーの変数を変更する方法

show-trailing-whitespace目標:いくつかを除いて、すべてのバッファーを有効にしたいと考えています。問題を引き起こす例外は*Shell Command Output*、 とその従兄弟*Async Shell Command*です。

通常は にshow-trailing-whitespaceカスタマイズしていtます。したがって、すべての新しいバッファでアクティブになります。

また、特定のバッファーに対してオフにしたいと思います*Shell Command Output*。これは私にとって問題を引き起こします:

  • 出力バッファは特別なモードを使用しません。それはまだですfundamental-modefundamental-mode-hookこの設定をフックできるものはありません。
  • after-major-mode-change-hookメジャー モードが に変更されたときに実行される がありますfundamental-modeが、バッファはそのモードで開始されるため、このフックは実行されません。
  • にフックする方法はないようですget-buffer-create

この特定の例ではいつadviseでも関数を実行できることはわかっていますget-buffer-createが、できるだけ回避するようにしています。

ヒントはありますか?

0 投票する
5 に答える
252 参照

emacs - 特定の他の関数から呼び出された場合にのみ、関数に関するアドバイスをトリガーします

現在のディレクトリと親ディレクトリでdired-do-shell-command(にバインドされている)を呼び出せないという制限を回避しようとしています。スタックトレースは下部に貼り付けられます。!...

このエラーを回避するために、以下のようにアドバイスを定義できます。

ただし、これはへのすべての呼び出しに影響しますdired-get-filenameスタックが。の場合にのみトリガーしたいdired-do-shell-command -> dired-get-marked-files -> dired-get-filename

私が考えることができる唯一のアプローチは次のとおりです

  • (with-output-to-string (backtrace))アドバイス定義で一致するものを検索します
  • 他のメソッドにアドバイスを追加して、アドバイス定義でテストできる変数を設定します。

それを行うためのより良い方法はありますか?からの文字列ではなく、データ構造として現在のスタックトレースへのアクセスを探していると思います(backtrace)

なぜdired-do-shell-commandが'。'で動作しないのですか?また '..'?

0 投票する
2 に答える
163 参照

emacs - 書き込み専用バッファ?

ほとんどのコンソールがバッファーでどのように機能するかを模倣したいのですが、それを行う方法はありますか?つまり、バッファへのテキストの追加のみを許可し、削除は許可しませんか?

おそらく、文字を削除するいくつかの組み込み関数を無効にするかアドバイスすることができますが、これはあまりスケーラブルなソリューションではないのではないかと思います...いくつかを見逃す可能性があります。

0 投票する
2 に答える
94 参照

emacs - 失敗したスニペット補完を適切に処理する

私は yasnippet からスニペットを展開するために TAB を使用します。スニペットを展開しない場合、通常はインデント (TAB にバインドされたデフォルトのコマンド) に戻りyas-fallback-behaviorます。call-other-commandreturn-nil

私が望む望ましい機能は、TABを押すことです:

  1. スニペットの完成を試み、成功または失敗します。
  2. PHP モードであるかどうかを確認し、php-complete-functionサイレント モードで を呼び出し、成功、または失敗します。
  3. デフォルトは現在のインデント コマンド ( indent-for-tab-command) です。

現在、1 つ、次に 3 つと完全に実行されます。yas--fallbackただし、次のコードを使用してアドバイスすることで、ほとんどの場合機能させることができました。

残っている唯一の主な問題は、TAB を使用して何かをインデントしようとすると、暗黙のうちに失敗するのでphp-complete-functionなく、代わりに、PHP 完了の複数のチェックからのメッセージでミニバッファーをスパムすることです。

したがって、この場合、その機能からのメッセージングを禁止する方法はありますか?同じチェックをすべて実行せずに、基本的に私のアドバイスで機能を再プログラミングしますか? あるいは、yasnippet でこれを行うより良い方法はありますか?

0 投票する
2 に答える
511 参照

emacs - defadvice は元の関数で変数を使用できますか?

Emacs Lispから修正した例を取り上げましょう: ad-get-arg と ad-get-args の使用方法?

(my-add 1 2 3)出力でうまく動作します:

元の関数から値を(my-add 1 2)取得できません:c

私の質問は、本体で提供されていないオプションの引数 (または、より一般的には、元の関数の変数) をどのように使用できますdefadviceか?

0 投票する
1 に答える
315 参照

emacs - emacs 関数へのアドバイス; 反論

emacs で関数をアドバイスしようとしていますが、何も起こりません。

つまり、再センタリングは起こりません。代わりにa がある場合、(message "foo")実際に foo が表示されます。デフアドバイスについて私が知らないことは何ですか?

0 投票する
5 に答える
3546 参照

emacs - emacsインタラクティブ機能のアドバイス:前

私は前にしたい-インタラクティブな引数を使用するいくつかの関数をアドバイスします、例えばfind-dired

find-diredしかし、emacsはインタラクティブセッションの後でのみこのアドバイスを実行し、私はfind-args前にセットアップすることができません。矛盾を解決する方法は?

更新 defadviceマクロは非推奨であることに注意してください。

0 投票する
1 に答える
147 参照

emacs - 条件が満たされたときに機能を実行しないようにアドバイスを得るにはどうすればよいですか?

アドバイスがnilを返したときに、アドバイスされた関数が実行されないようにするにはどうすればよいですか?

->beginning-of-lineまったく実行されていません。

編集:あなたの心配を取り除くためだけに、私はそれをで使うつもりはありませんbeginning-of-line

0 投票する
1 に答える
434 参照

emacs - Emacsのカーソル移動のアドバイス

カーソルがバッファ内を移動するときにバッファのさまざまな部分を強調表示するマイナーモードを作成しました。私はこのような動きの機能をアドバイスすることによってこれを行います。

しかし、これはこれを行うための間違った方法のようです。カーソル移動用のフックを探しましたが、フックがないようです。

たくさんの動きの機能をアドバイスする代わりに使用できるフックがありませんか、それともこれにアプローチするためのより良い方法がありますか?