1

バッファに表示されたファイル(コマンドによって作成された)cscope-find-functions-calling-this-functionのすべてのタグを呼び出すマクロを作成しようとしています。これにより、特定のファイルで定義された一連の関数を呼び出すすべての関数のリストを含むバッファーが作成されます。*Tags List*list-tags

タグ リストバッファの最初のタグの先頭にポイントを配置し、次のキーボード マクロを実行してこれを行います。これは、キーボード マクロでのキーストロークのシーケンスです。

1. <f11> ;; cscope-find-functions-calling-this-function                                                                                                           
2.戻る;; 改行 [分割ウィンドウで cscope の結果を表示]
3. Cx Cp ;; マークページ
4. Cx Cx ;; つらら交換ポイントとマーク
5. <アップ> ;; 前の行
6. <終了> ;; 行末 [コピーする領域がマークされている]
7. <f7> ;; 結果をバッファに追加
8. Cx ESC O ;; [右側の分割ウィンドウに戻る]
9. Cx b ;; icicle-buffer [*タグリスト* バッファに戻る]
10. *タグ ;; 自己挿入コマンド * 5
11. SPC ;; 自己挿入コマンド
12. リスト* ;; 自己挿入コマンド * 5
13. 戻る;; 改行
14 . <ダウン> ;; next-line [リスト内の次のタグにポイントを配置]

問題: バッファに結果が得られません。これは、cscope がステップ 1 から 2 で行われたクエリの結果を出力する前に、ステップ 3 から 7 が実行されることが原因であることがわかりました。

Cx q を使用してマクロに一時停止を挿入することはできますが、ステップ 2 の後、cscope が結果を返すまでマクロを待機させてから、さらに自動的に続行したいと考えています。これはマクロ、おそらくLISP関数では不可能だと思います...私自身はLispの専門家ではありません。誰か助けてくれませんか?ありがとう!


詳細:

  • つららがインストールされているので、デフォルトでは、現在のバッファーのポイントにある単語をミニバッファーの入力として取得します。
  • F11はにバインドされています cscope-find-functions-calling-this-function
  • windmoveがインストールされ、Cx <right> (Cx ESC o - 以下に示すように) を実行すると、右側のウィンドウに移動します。
  • F7 は 次のappend-results-to-bufferように定義されています。
(defun append-results-to-buffer ()
  (相互の作用)
  (append-to-buffer (get-buffer-create "c1") (ポイント) (マーク)))

この関数は、現在マークされているリージョンを「c1」という名前のバッファに追加するだけです。

4

1 に答える 1

2

CEDET Suiteは、cscopeを同期的に呼び出すcedet-cscope.elでcscopeをサポートしています。おそらくそこから何かを借りて、キーボードマクロから使用することができます。

または、CEDETのsymrefツール(semantic-symref-symbol)を使用して、CScopeの上で手間のかかる作業を行うこともできます。また、GNUGlobalまたはIDUtilsを使用することもできます。

于 2010-06-01T11:42:28.517 に答える