Я пытаюсь написать макрос, который вызывает cscope-find-functions-calling-this-function
для каждого тега в файле, отображаемом в буфере *Tags List*
(создан командой list-tags
). Это должно создать буфер, который содержит список всех функций, вызывающих набор функций, определенных в определенном файле.
Я просто помещаю точку в начале первого тега в буфере Tags List , а затем запускаю следующий макрос клавиатуры, чтобы сделать это. Это последовательность нажатий клавиш в макросе клавиатуры:
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]
Проблема:
Я не получил результатов в буфере, и я обнаружил, что это потому, что шаги 3-7 выполняются еще до
cscope печатает результаты запроса, выполненного на шагах 1-2.
Я могу вставить паузу в макрос, используя C-x q, но я бы предпочел, чтобы макрос ждал после шага 2, пока cscope не вернулся с результатами, а затем продолжил автоматически. Я подозреваю, что это невозможно с помощью макроса, может быть, функции LISP ... Я сам не эксперт по LISP. Может кто-нибудь, пожалуйста, помогите? Спасибо!
подробности:
- У меня Сосульки установлено так,
по умолчанию я получаю слово в текущем буфере в качестве ввода в минибуфере.
- F11 связан с
cscope-find-functions-calling-this-function
- windmove установлен, и C-x (C-x ESC o - как показано ниже) приведет вас к
правое окно.
- F7 связан с
append-results-to-buffer
что
определяется как:
(defun append-results-to-buffer ()
(interactive)
(append-to-buffer (get-buffer-create "c1") (point) (mark)))
Эта функция просто добавляет текущую отмеченную область в буфер с именем "c1".