How can you make an emacs macro wait for cscope query results?

Posted by Sudhanshu on Stack Overflow See other posts from Stack Overflow or by Sudhanshu
Published on 2010-05-31T21:28:07Z Indexed on 2010/05/31 21:33 UTC
Read the original article Hit count: 277

Filed under:
|
|
|
|

I am trying to write a macro which calls cscope-find-functions-calling-this-function on each and every tag in a file displayed in the *Tags List* buffer (created by list-tags command). This should create a buffer which contains list of all functions calling a set of functions defined in a certain file.

This is the sequence of keystrokes:

1.  <f11>              ;; cscope-find-functions-calling-this-function                                                                                                           
2.  RET                ;; newline      [shows results of cscope in a split window]
3.  C-x C-p            ;; mark-page
4.  C-x C-x            ;; icicle-exchange-point-and-mark
5.  <up>               ;; previous-line
6.  <end>              ;; end-of-line             [region to copy has been marked]
7.  <f7>               ;; append-results-to-buffer
8.  C-x ESC O          ;;                 [move back to split window on the right]
9.  C-x b              ;; icicle-buffer       [Switch back to *Tags List* buffer]
10. *Tags              ;; self-insert-command * 5
11. SPC                ;; self-insert-command
12. List*              ;; self-insert-command * 5
13. RET                ;; newline
14 . <down>            ;; next-line       [Position point on next tag in the list]

Problem: I get no results in the buffer, and I found out that's because Step 3-7 execute even before cscope prints the results of query made on Steps 1-2.

I can insert a pause in the macro by using C-x q, but I'd rather like the macro to wait after Step 2, until cscope has returned with the results and only then continue further. I suspect this is not possible through a macro, maybe a LISP function... I'm not a lisp expert myself. Can someone please help? Thanks!


Details:

  • I have Icicles installed so by default I get word at point in current buffer as input in minibuffer.
  • F11 is bound to cscope-find-functions-calling-this-function
  • windmove is installed and C-x (C-x ESC o - as shown below) takes you to the right window.
  • F7 is bound to append-results-to-buffer which is defined as:
(defun append-results-to-buffer ()
  (interactive)
  (append-to-buffer (get-buffer-create "c1") (point) (mark)))

This function just appends the currently marked region to a buffer named "c1".

© Stack Overflow or respective owner

Related posts about emacs

Related posts about macros