在emacs下一直没有找到合适的工程项目类插件,于是自己写了一个。主要的痛点如下:
- 配置clang补全的时候需要指定搜索头文件的路径,没办法在.emacs文件里把所有的路径都加上,并且每次新创建一个工程项目的时候就要修改一次emacs配置文件实在是太痛苦了
- 由于开发机器不是linux,所以不能在本地编译,需要本地编辑完成后上传到开发机上编译(不想用tramp,因为不知到怎么在远程编辑的时候配置补全,估计就算折腾成功后也会很慢;没法mount远端目录到本地,因为网速太慢;不想在远程shell里面使用emacs,那个神奇的平台没有编译好的emacs包)
插件的主要功能:
- C-x p 打开一个项目,项目的定义文件存放在一个特定目录下,用lisp来描述加载这个项目的时候需要执行的初始化操作。
- 提供函数 proj-save-rsync 用来保存当前所有的 buffer 并调用一个脚本讲本地的源码上传的远程开发机器。
插件安装方法:
- 复制下面的代码到 .emacs 中:
(defun proj-save-rsync ( ) "Save buffers and do a command." (save-some-buffers) (shell-command proj-rsync-script ) (interactive) ) (defun proj-load (arg) (interactive (list (completing-read "Choose one project: " (directory-files "~/.emacs.d/projects" nil "\\.el$") ))) (load (concat "~/.emacs.d/projects/" arg)) ;(insert arg) ) (global-set-key (kbd "C-x p") 'proj-load) (global-set-key [f8] 'proj-save-rsync)
- 创建目录
mkdir ~/.emacs.d/projects
- 创建一个工程
创建一个工程其实就是在 ~/.emacs.d/projects 里面创建一个 projectname.el 文件,里面的内容爱写啥就写啥,使用C-x p打开这个项目的时候会执行这个projectname.el。下面是我的一个项目文件:(setq proj-root "/path/to/the/source/root") ;配置项目root path (setq proj-rsync-script "/rsync/script.exp") ;设置上传代码的脚本 (proj-ac-config proj-root) ;自定义的一个函数,设置clang搜索头文件时候的路径 (find-file proj-root) ;打开project的root path (cscope-set-initial-directory proj-root) ;初始化cscope (cscope-index-files proj-root)