请问怎么样依据 cc-mode 配置新的文件类型

Vim、Emacs配置和使用
回复
头像
matliu
帖子: 38
注册时间: 2008-11-01 16:17

请问怎么样依据 cc-mode 配置新的文件类型

#1

帖子 matliu » 2011-12-02 15:54

请问:我想在c++的基础上建立一个eamcs的编辑环境,文件扩展名是.cu,我想打开.cu文件之后就进入c++的环境,然后我可以为这个环境加入一些自定义的关键字,那么我该怎么做呢?
babysoul
帖子: 75
注册时间: 2008-10-31 16:22
系统: Ubuntu 12.10

Re: 请问怎么样依据 cc-mode 配置新的文件类型

#2

帖子 babysoul » 2011-12-04 6:58

如果单纯想让.cu以c++模式显示,而不考虑CUDA关键字的话
直接在.emacs下加入

代码: 全选

(add-to-list 'auto-mode-alist '("[.]cu$" . c++-mode))
如果还想显示关键字,可参考
http://forums.nvidia.com/index.php?showtopic=151356

首先配置cc-mode
http://cc-mode.sourceforge.net/

然后下载cuda-mode:
https://github.com/Schnouki/dotfiles/bl ... da-mode.el
假设放到~/.config/emacs文件夹下

在.emacs中加上下面配置:

代码: 全选

(add-to-list 'load-path "~/.config/emacs")
(add-to-list 'load-path "~/.config/emacs/cc-mode")
(autoload 'cuda-mode "cuda-mode.el" "Cuda mode." t)

(add-to-list 'auto-mode-alist '("[.]cu$" . cuda-mode))
(add-to-list 'auto-mode-alist '("[.]h$" . cuda-mode))
Hasee F545T: Core2 Duo T5450, 2G RAM, 320G HD, ATI HD2400 14.4, Archlinux
Lenovo ideapad Y580: i7 3630M, 8G RAM, 1T HD, nVidia GTX660M, Ubuntu 13.04
头像
matliu
帖子: 38
注册时间: 2008-11-01 16:17

Re: 请问怎么样依据 cc-mode 配置新的文件类型

#3

帖子 matliu » 2011-12-04 11:07

好的,谢谢,我先研究一下:) :em05
头像
matliu
帖子: 38
注册时间: 2008-11-01 16:17

Re: 请问怎么样依据 cc-mode 配置新的文件类型

#4

帖子 matliu » 2011-12-05 15:01

可能我是除学吧,感觉emacs比cuda还难 :em20
自己写了两行配置文件,请教能否继续完成关键字?该怎么写?

.emacs文件为:

代码: 全选

(load-file "/home/matliu/cuda/cudamode/cuda-mode.el") ; 我的 cuda 配置
cuda-mode.el文件为:

代码: 全选

;;; this is my cuda-mode

;将 cuda 模式加入到 c++-mode 中
(add-to-list 'auto-mode-alist '("[.]cu$" . c++-mode)) 
;(setq auto-mode-alist (append '(("\\.cu$" . c++-mode)) auto-mode-alist))

;加入cuda变量关键字高亮
; 我想自己加入关键字,例如__global__用一些暗红色,不知道一下该怎么写了?
babysoul
帖子: 75
注册时间: 2008-10-31 16:22
系统: Ubuntu 12.10

Re: 请问怎么样依据 cc-mode 配置新的文件类型

#5

帖子 babysoul » 2011-12-06 5:51

代码: 全选

(setq cudaKeywords
 '(("__global__\\|__device__\\|__host__" . font-lock-constant-face)
   )
)

(define-derived-mode cuda-mode c++-mode
  (setq font-lock-defaults '(cudaKeywords))
  (setq mode-name "cuda-mode")
  )
Hasee F545T: Core2 Duo T5450, 2G RAM, 320G HD, ATI HD2400 14.4, Archlinux
Lenovo ideapad Y580: i7 3630M, 8G RAM, 1T HD, nVidia GTX660M, Ubuntu 13.04
babysoul
帖子: 75
注册时间: 2008-10-31 16:22
系统: Ubuntu 12.10

Re: 请问怎么样依据 cc-mode 配置新的文件类型

#6

帖子 babysoul » 2011-12-06 17:42

总结一下,简化版本:

代码: 全选

;; Keywords for generalized c++ mode, which can be applied to derived modes
(add-hook 'c++-mode-hook
	  (lambda ()
	    (font-lock-add-keywords 
	     nil
	     '(("\\<\\(FIXME\\|TODO\\|NOTE\\):" 
		1 font-lock-warning-face prepend)
	       ))))

;; user-defined mode - CUDA
(define-derived-mode cuda-mode 
  c++-mode "cuda-mode"
  "Major mode for CUDA"
  ;; (setq font-lock-defaults '(cudaKeywords))
  ;; (setq mode-name "cuda-mode")
  )

;; Keywords applied to only the CUDA modes
(font-lock-add-keywords 'cuda-mode
			'(("\\<\\(__global__\\|__host__\\|__device__\\)\\>" . font-lock-keyword-face) 
			  ("\\<\\(blockDim\\|blockIdx\\|threadIdx\\)\\>" . font-lock-constant-face)
			  ("\\<\\(cudaMalloc\\|cudaMemcpy\\|cudaFree\\)\\>" . font-lock-builtin-face)
			  ))

;; Add extra file extensions according to the suffix
(add-to-list 'auto-mode-alist '("[.]cu$" . cuda-mode))
(add-to-list 'auto-mode-alist '("[.]h$" . cuda-mode))
Hasee F545T: Core2 Duo T5450, 2G RAM, 320G HD, ATI HD2400 14.4, Archlinux
Lenovo ideapad Y580: i7 3630M, 8G RAM, 1T HD, nVidia GTX660M, Ubuntu 13.04
babysoul
帖子: 75
注册时间: 2008-10-31 16:22
系统: Ubuntu 12.10

Re: 请问怎么样依据 cc-mode 配置新的文件类型

#7

帖子 babysoul » 2011-12-06 17:46

字体颜色可以如下设置

代码: 全选

;(set-face-foreground 'font-lock-comment-face "cadetblue")
;(set-face-foreground 'font-lock-keyword-face "darkred")
;(set-face-foreground 'font-lock-string-face "blue")
;(set-face-foreground 'font-lock-type-face "forestgreen")
;(set-face-foreground 'font-lock-variable-name-face "purple")
;(set-face-foreground 'font-lock-function-name-face "red")
;(set-face-foreground 'font-lock-warning-face "yellow")
;(set-face-foreground 'font-lock-constant-face "darkyellow")
;(set-face-foreground 'font-lock-builtin-face "firebrick")
Hasee F545T: Core2 Duo T5450, 2G RAM, 320G HD, ATI HD2400 14.4, Archlinux
Lenovo ideapad Y580: i7 3630M, 8G RAM, 1T HD, nVidia GTX660M, Ubuntu 13.04
回复