最鄙视一天到晚潜水,浮上来又一句有品位的话都不讲的人。。。。
----------------M哥
没有想到过自己第一次在老外的技术Wiki上Edit竟然是改两个符号而已:
http://www.wxwidgets.org/wiki/index.php/Emacs
(require 'cc-mode)
(add-to-list 'c++-font-lock-extra-types
"//bwx[A-Z][a-z][a-zA-Z]*?//b")
(defun c-wx-lineup-topmost-intro-cont (langelem)
(save-excursion
(beginning-of-line)
(if (re-search-forward "EVT_" (line-end-position) t)
'c-basic-offset
(c-lineup-topmost-intro-cont langelem))))
(setq c++-mode-hook
(lambda ()
(c-set-offset 'topmost-intro-cont 'c-wx-lineup-topmost-intro-cont)))
区区只有把原来的'/'改成了'//',这样子在 emacs 中才能正确识别wxXXXX的类型名。
(说起来emacs真是老当益壮的编辑器之王,最近的22.1也还是相当好用,用win的可到 这里下一个)
对于emacs用户来说,这段代码绝对值得收藏喔,因为通过它我们可以得知几件事:
其一,我们天天使用的cc-mode(c/c++/awk/java-mode)是相当有内涵的,可定制性相当的高,只不过你必须自己翻看文档来找出c++-font-lock-eXXXX这类的东东的实际意义(放心吧,真正的emacs用户都很喜欢自虐似地在info文档树中淘金的)
其二,使用emacs开发复杂项目时,对各个mode进行定制是必然的,别以为就wxWidgets有"EVT_"开头的映射列表宏,这种龌龊中带点优雅的事情,微软的MFC小组早就做过了。所以这段emacs-lisp代码得再改改,指不定哪天你也要编辑MFC代码的
(defun c-wx-lineup-topmost-intro-cont (langelem)
(save-excursion
(beginning-of-line)
(if (or (re-search-forward "EVT_" (line-end-position) t)
(re-search-forward "ON_" (line-end-position) t)) ;用or操作符可以一直一直地加~~
'c-basic-offset
(c-lineup-topmost-intro-cont langelem))))
其三,看到这个没?
"//bwx[A-Z][a-z][a-zA-Z]*?//b"
没错,就是这个
"//bwx[A-Z][a-z][a-zA-Z]*?//b"
如果不是emacs老用户,谁记得住这么多backslash来又slash去的。。
还好,还好,从 EmacsWiki得知,emacs都自带两个command:re-builder和regexp-builder
用好这两个东东会让我们少一些自虐,多一点自在。。。。。。