是否可以在Emacs中显示当前的#ifdef块(例如在模式行中)?
例如:
#ifdef A
... | #cursor position num. 1
#ifdef !B & C
...
#else /* !B & C */
foo(); | #cursor position num. 2
#endif /* !B & C */
#endif /* A */
如果我将光标放在位置1,它应该在模式行中显示A
并在位置2显示A & !(!B & C)
。
我已经在使用hide-if-def模式了。但有时我需要使用所有#ifdef块。
答案 0 :(得分: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))