在Emacs中显示封闭的#ifdef块

fol*_*olq 10 emacs macros elisp

是否可以在Emacs中显示当前的#ifdef块(例如在模式行中)?

例如:

#ifdef A
... | #cursor position num. 1
#ifdef !B & C
...
#else /* !B & C */
foo(); | #cursor position num. 2
#endif /* !B & C */
#endif /* A */
Run Code Online (Sandbox Code Playgroud)

它应该A在模式行中显示,如果我将光标放在位置1并显示A & !(!B & C)在位置2.我已经在使用hide-if-def模式.但有时我需要使用所有#ifdef块.

Tre*_*son 3

我并不总能成功使用WhichFunction,但它应该可以很好地与 C/C++ 代码配合使用。此自定义将为识别方案添加一个新功能,该功能会告诉您何时位于 #ifdef 块内。

(require 'which-func)
(which-function-mode 1)
(defun name-of-current-conditional ()
  "rather inelegant coding, but it works"
  (interactive)
  (let (outer)
    (condition-case nil
        (dotimes (myv 10)
          (save-excursion
            (c-up-conditional (1+ myv))
            (setq outer (buffer-substring-no-properties 
                              (line-beginning-position)
                              (line-end-position)))))
      (error nil))
    outer))
(setq which-func-functions '(name-of-current-conditional))
Run Code Online (Sandbox Code Playgroud)