当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-02 12:36 

注册: 2011-10-11 10:16
帖子: 237
送出感谢: 2
接收感谢: 3
发现一个CSS文件编辑利器-rainbow-mode 。这个el可以使得css文件,在颜色代码显示颜色。非常直观
不过,每次启动emacs后手动m-x rainbow-mode才能打开此模式。又什么方法,可以每次启动emacs后,自动打开改模式?

我参考了http://ar.newsmth.net/thread-4c0e86d44f946a.html 这个帖子的方法,进行配置。

如下是帖子内容:
看了一下rainbow-mode.el
我觉得应该是autoload搞的,你看看下面这段话,
是GNU Emacs Lisp Reference Manual(GELRM)里关于autoload的一段叙述:

The autoload facility allows you to make a function or macro
known in Lisp, but put off loading the file that defines it. The
first call to the function automatically reads the proper file to
install the real definition and other associated code, then runs
the real definition as if it had been loaded all along.

我在rainbow-mode的基础上,定义了一个global-rainbow-mode,
然后直接打开这个global-rainbow-mode就可以在每个buffer都自动打开
rainbow-mode,你把下面这段话放到.emacs里去吧

;; -------------------------------------------------------------------
;; 配置 rainbow-mode
;; -------------------------------------------------------------------
(require 'rainbow-mode)

;; -------------------------------------------------------------------
;; 定义一个全局的 rainbow-mode
;; -------------------------------------------------------------------
(define-globalized-minor-mode global-rainbow-mode
rainbow-mode rainbow-turn-on
:initialize 'custom-initialize-delay
:init-value (not (or noninteractive emacs-basic-display))
:group 'rainbow
:version "24")

;; -------------------------------------------------------------------
;; 打开 global-rainbow-mode
;; -------------------------------------------------------------------
(global-rainbow-mode)


可是贴上以上文件,放到emacs配置文件中,提示如下错误:
Warning (initialization): An error occurred while loading `/home/xxxx/.emacs':

Symbol's value as variable is void: global-rainbow-mode

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the `--debug-init' option to view a complete error backtrace.


这个问题,有那个知道怎么解决吗?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-03 17:34 

注册: 2006-03-19 11:39
帖子: 750
送出感谢: 0 次
接收感谢: 7
试试
[lisp]
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))
[/lisp]


_________________
https://github.com/ran9er



_________________
评价: 3.7% gy619
 
页首
 用户资料  
 
3 楼 
 文章标题 : Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-04 11:45 

注册: 2011-10-11 10:16
帖子: 237
送出感谢: 2
接收感谢: 3
kardinal 写道:
试试
[lisp]
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))
[/lisp]



非常感谢,,你的代码可用,解决我一个很长时间没有解决的问题。
用emacs 写php和html,太方便了。。。。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-20 6:15 

注册: 2011-10-11 10:16
帖子: 237
送出感谢: 2
接收感谢: 3
(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))-------------后来才知道,这种方法不是最好的,有时失效,需要手动,用autoload才是最完美的。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-21 12:14 

注册: 2006-03-19 11:39
帖子: 750
送出感谢: 0 次
接收感谢: 7
alist 中有相同的键时要注意顺序问题
autoload 实际上属于惰性加载的范畴,它是一种特殊对象,类似函数、列表之类,和你要解决的问题应该没有关系
我觉得你需要的是 find-file-hook,尽管从字面上,autoload 似乎意思也差不多
实际上 'auto-mode-alist 应该和某个 hook 有关,比如 find-file-hook(应该是这个名字,我很挺长时间没用 emacs 了,你可以自己研究一下),如果 'auto-mode-alist 的行为不符合预期或者你不能控制,你可以试试修改 find-file-hook


_________________
https://github.com/ran9er


页首
 用户资料  
 
6 楼 
 文章标题 : Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-21 15:00 

注册: 2011-10-11 10:16
帖子: 237
送出感谢: 2
接收感谢: 3
kardinal 写道:
alist 中有相同的键时要注意顺序问题
autoload 实际上属于惰性加载的范畴,它是一种特殊对象,类似函数、列表之类,和你要解决的问题应该没有关系
我觉得你需要的是 find-file-hook,尽管从字面上,autoload 似乎意思也差不多
实际上 'auto-mode-alist 应该和某个 hook 有关,比如 find-file-hook(应该是这个名字,我很挺长时间没用 emacs 了,你可以自己研究一下),如果 'auto-mode-alist 的行为不符合预期或者你不能控制,你可以试试修改 find-file-hook


谢谢回复。。你对emacs理解得很深刻。

(add-to-list 'auto-mode-alist '("\\.css\\'" . rainbow-mode))----其实是可以解决的,不过在css-mode下面,我试过有点问题,有时总不能自动加载。
应该就是你所说的“注意顺序问题”。

“我觉得你需要的是 find-file-hook,尽管从字面上,autoload 似乎意思也差不多”-----你提供的方法,也是正常的。

我发现用如下代码,就非常完美。css 可以自动加载,即使html 里面含有css的代码,也可以自动加载。
(dolist (hook '(css-mode-hook html-mode-hook sass-mode-hook))
(add-hook hook 'rainbow-turn-on))

这应该也是和你的方法差不多。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-23 10:36 

注册: 2006-03-19 11:39
帖子: 750
送出感谢: 0 次
接收感谢: 7
你提到的这些,涉及到主模式和辅模式的问题
find-file-hook 通过 auto-mode-alist 确定打开文件后使用的主模式
而你后面贴的是在确定并开启 html sass 等主模式后使用的辅模式
其实类似代码是比较常用的,推荐一个实用函数
[lisp]
(defun concat-symbol (&rest lst)
(intern (apply 'concat (mapcar (lambda(x)(if (symbolp x) (symbol-name x) x)) lst))))
[/lisp]
你的代码可以写成这样
[lisp]
(dolist (hook
'(css
html
sass
......))
(add-hook
(concat-symbol hook '-mode-hook)
'rainbow-turn-on))
[/lisp]


_________________
https://github.com/ran9er


页首
 用户资料  
 
8 楼 
 文章标题 : Re: emacs CSS文件编辑利器-rainbow-mode(直观显示css颜色)
帖子发表于 : 2012-06-23 22:17 
头像

注册: 2007-04-28 15:14
帖子: 1167
系统: NixOS+虚拟机各种系统
送出感谢: 0 次
接收感谢: 4
我以前都是自己手写实现这个功能,这个不错,比较全面

另外,有人把中文的颜色名也这么处理么?比如白=white=#ffffff

我是这么配置的:
代码:
(require 'rainbow-mode)
(dolist (hook '(css-mode-hook
             html-mode-hook
             python-mode-hook
             c++-mode-hook
             lisp-mode-hook))
  (add-hook hook (lambda () (rainbow-mode 1))))



_________________
黑色的不是眼睛,而是眼圈
关注和实现科技领域未来3年内有大规模普及潜力、能改善穷人生活品质的技术/应用。
双路 + NixOS + openbox + qemu/spice + 智能生产线研发


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译