Aiur

zellux 的博客

为 Emacs cscope 加入 Java 支持

Emacs 的 xcscope 插件默认不会扫描 Java 文件,另外 Android 源码里有不少 .aidl 的文件,默认也不包含在 xcscope 的扫描范围里。解决这个问题的一个方法是在项目根目录下手动创建 cscope 索引:

$ find . -name "*.java" -or -name "*.aidl" -or -name "*.cpp" > cscope.files

$ cscope -b

阅读全文 →

让 Emacs 支持 Lion 的全屏模式

前几天给我的 MacBook Pro 装上了 Lion,不过原来的 Emacs 并不支持在 Lion 下全屏运行。github 上搜了下发现已经有让 Emacs 支持全屏模式的补丁了,Homebrew 中这个补丁也已经被吸收。 直接用 brew install emacs –cocoa –srgb 似乎会碰到编译错误: Finding pointers to doc strings... Finding pointers to doc strings...done Dumping under the name emacs unexec: cannot write section __data --- List of All Regions --- address size prot maxp --- List of Regions to be Dumped --- address size prot maxp --- Header Information --- Magic = 0xfeedfacf CPUType = 16777223 CPUSubType = -2147483645 FileType = 0x2 NCmds = 20 SizeOfCmds = 3464 Flags = 0x00200085 Highest address of load commands in input file: 0x5dd000 Lowest offset of all sections in __TEXT segment: 0x22f0 --- List of Load Commands in Input File --- github issues 上已经有人报告这个问题了,解决方法也很简单,运行 brew edit emacs 打开 emacs 的安装脚本,在 def install 的后面加上两行: 阅读全文 →

ecb 和 cscope 的结合使用

前几天试用了下ECB,非常喜欢它的定义列表和文件浏览历史的功能。但是却发现了另外一个问题:使用ECB之前我把整个窗口分成左右两块,左边是代码,右边是cscope的查找结果,现在开启ECB之后就不能再切一块窗口给cscope用了。 感谢stackoverflow上的sanitynic,给出了自定义ECB窗口的参考。现在俺终于能把cscope窗口绑定到屏幕左下角啦。 自定义ECB layout其实也挺方便的,上图对应的配置为 (ecb-layout-define "my-cscope-layout" left nil (ecb-set-methods-buffer) (ecb-split-ver 0.5 t) (other-window 1) (ecb-set-history-buffer) (ecb-split-ver 0.25 t) (other-window 1) (ecb-set-cscope-buffer)) (defecb-window-dedicator ecb-set-cscope-buffer " *ECB cscope-buf*" (switch-to-buffer "*cscope*")) (setq ecb-layout-name "my-cscope-layout") ;; Disable buckets so that history buffer can display more entries (setq ecb-history-make-buckets 'never) my-cscope-layout这个layout左边窗口分为三部分,最上面的函数列表占一半高度,中间为历史文件列表,下面为cscope的查找结果,它们各占四分之一的高度。 另外再简单提下cscope插件的安装和配置,使用前需确认当前系统已经安装了cscope,另外要有cscope-indexer这个脚本。在cscope/contrib目录下找到一个xcscope.el,复制到Emacs的插件目录中,并在Emacs初始化文件中加入 (require 'xcscope) 即可。某些发行版的包里面似乎没有cscope-indexer和xcscope.el,直接从网上下一个好了。 几个常用的快捷键: C-c s I 建立cscope索引 C-c s a 设置搜索目录 C-c s d 查找定义 C-c s s 查找字符串 C-c s c 查找调用者 C-c s n 下一个查找结果 C-c s p 上一个查找结果 更多的快捷键可以在 C-h b 跳转的帮助页面的 cscope-minor-mode 区找到。 阅读全文 →

为特定的项目配置 semantic

semantic是cedet的组件之一,它可以对程序做语义分析,结合company等其他插件,可以实现自动补全菜单等功能。 之前用semantic+company写MIT 6.828的lab时几乎不需要什么特殊的设置就能直接用,这次拿来改Xen的代码的时候却出现了semantic无法找到符号定义的问题,究其原因在于MIT 6.828的目录结构相对简单,头文件都在inc/目录下,而Xen的头文件在多个目录下,而且做预处理时还要加上Makefile里定义的一些预定义宏。今天参考了Alex Ott的这篇文章终于成功地让semantic支持Xen的代码分析了: 这里分享一下和项目相关的一些设置,semantic安装等问题请参考网上的其他文章。也可以参考我的配置文件http://code.google.com/p/zellux-emacs-conf/source/browse/my-cc-mode.el,cscope ecb semantic和company等配置都在这个文件里了,不过有点混乱。 ;; Danimoth-specified configurations (add-to-list 'semanticdb-project-roots "~/danimoth/xen") (setq semanticdb-project-roots (list (expand-file-name "/"))) (setq danimoth-base-dir "/home/wyx/danimoth") (add-to-list 'auto-mode-alist (cons danimoth-base-dir 'c++-mode)) (add-to-list 'auto-mode-alist (cons danimoth-base-dir 'c-mode)) (add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat danimoth-base-dir "/xen/include/config.h")) (add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat danimoth-base-dir "/xen/include/asm-x86/config.h")) (ede-cpp-root-project "Danimoth" :name "Danimoth" ;; Any file at root directory of the project :file "~/danimoth/xen/Makefile" ;; Relative to the project's root directory :include-path '("/" "/include/asm-x86" "/include/xen" "/include/public" "/include/acpi" "/arch/x86/cpu/" ) ;; Pre-definds macro for preprocessing :spp-table '(("__XEN__" . 阅读全文 →

ecb 的简单配置和使用

终端下的效果图(Windows 7下使用pietty远登) 下载 http://ecb.sourceforge.net/downloads.html CVS或者压缩包都可以,当然也可以通过各发行版的包管理器安装。 安装 在.emacs中加入 ;; ECB configurations (add-to-list 'load-path "~/emacs/ecb-2.40") (add-to-list 'load-path "~/emacs/cedet-1.0pre6/eieio") (add-to-list 'load-path "~/emacs/cedet-1.0pre6/semantic") (add-to-list 'load-path "~/emacs/cedet-1.0pre6/speedbar") (setq semantic-load-turn-everything-on t) (require 'semantic-load) (require 'ecb-autoloads) 运行Emacs后执行ecb-byte-compile,并重启Emacs(我这里不重启的话执行ecb-active后会报错)。 使用 第一次使用时先要设置项目目录,M-x customize-variable ecb-source-path ,在这里加上你的项目根目录。 接下来使用M-x ecb-active就能激活ECB了,成功激活后Emacs窗口会被切成左右两半。左边的几个窗口依次显示:目录,当前目录下的文件,当前文件中的函数/全局变量等定义,文件浏览历史。如果打开了一个源文件后函数定义窗口里面是空的,有可能是因为这个项目过大cedet尚未完成对它的分析,闲置一段时间后就能看到文件里的定义。 ECB提供了方便在这些窗口间切换的快捷键: 切换到目录窗口 Ctrl-c . g d 切换到函数/方法窗口 Ctrl-c . g m 切换到文件窗口 Ctrl-c . g s 切换到历史窗口 Ctrl-c . g h 切换到上一个编辑窗口 Ctrl-c . g l 最基本的使用就是这样,Ctrl-C . h可以看到更详细的帮助信息。 阅读全文 →

Emacs 中对不同项目指定不同的风格

我的Emacs配置里C语言默认的缩进风格是用4个空格,最近要修改Chromium的代码,而Google的C/C++风格统一为2个空格缩进,所以改代码的时候要把c-basic-offset设置为2。这样在不同项目间切换的时候很不方便。 在stackoverflow上发帖求助后发现了Emacs 23.1一个很好用的新功能,Per-Directory Local Variables,只需要在项目主目录下放一个.dir-locals.el文件,里面设置该项目特有的变量值,就能应用到整个项目了。 以我的Chromium为例,Google已经提供了一份C/C++风格的配置,只需要在~/chromius/src/.dir-locals.el里把google-c-style常量粘贴进去即可。另外我不知道为啥加上c-offsets-alist那段后Emacs缩进会变得很奇怪,所以我把它删了。附修改后的.dir-locals.el ((c++-mode . ((c-recognize-knr-p . nil) (c-enable-xemacs-performance-kludge-p . t) ; speed up indentation in XEmacs (c-basic-offset . 2) (indent-tabs-mode . nil) (c-comment-only-line-offset . 0) (c-hanging-braces-alist . ((defun-open after) (defun-close before after) (class-open after) (class-close before after) (namespace-open after) (inline-open after) (inline-close before after) (block-open after) (block-close . c-snug-do-while) (extern-lang-open after) (extern-lang-close after) (statement-case-open after) (substatement-open after))) (c-hanging-colons-alist . ((case-label) (label after) (access-label after) (member-init-intro before) (inher-intro))) (c-hanging-semi&comma-criteria . 阅读全文 →