所学即为用

1 需求 

一直在使用 MoinMoin 中保存自己的编程资料。一般就是输入个标题和简单内容,没有用到特别的编辑功能。所以,通常的操作是,在 emacs 中编辑文章的标记,拷贝过去,省去了排版和编辑的过程。爽!

对于这个需求,使用 emacs 中的宏可以解决:录制,保存,并在 emacs 启动的时候自动加载,能够实现3级标题的输出,即: 调用 wtitle 宏,输出如下内容:
 
===  ===

并让光标定位到空白的中间位置。

那么现在有个需求是:支持自定义级别的标题输出。

2 已知 

对于上面提到的需求,用宏自然解决不了了。自然地想到了 emacs 中的脚本语言 elisp。

不知道怎么回事,对于这种语言,我有种很深的敬畏、害怕,认为写这种语言的人非常厉害,而且比较难以学会。断断续续地学习了很长的一段时间(看文档,看书),可始终卡在自己现在的水平还不够,不能实现,却又不知道如何学习的境地。

直到,最近一位朋友告诉我一句话:“把所学的东西转换成生产力,这才有意义,才能让自己持续下去”。

我明白了,不是要等到全部理解了才能开始动手做,我只需要理解所要用到的内容,并实现功能,解决问题即可。

3 实现 

真正动手做起来,查找到 elisp 插入缓冲的函数: insert;交互输入函数: interactive 等,再结合自己的编程基础,真的实现了这个功能,代码如下:
(defun wtitle(n)
  "输出wiki的标题"
  (interactive "NPlease input title level: ")


  (setq text "")
  
  ;; 左半部分标题
  (setq i n)
  (while (> i 0)
    (setq text (concat text "="))
    (setq i (- i 1)))


  ;; 中间空白
  (setq text (concat text "  "))


  ;; 右半部分标题
  (setq i n)
  (while (> i 0)
    (setq text (concat text "="))
    (setq i (- i 1)))


  (insert text)


  ;; 退回中间位置
  (setq back-steps (+ n 1))
  (setq back-steps (* back-steps -1))


  (forward-char back-steps))

4 总结 

当然还可以完善:再考虑,设定参数的默认级别,避免常用参数的多次输入。

还可以将这段代码保存到一个 el 文件,在 .emacs 配置文件中把这个文件给加载进来。

想起了清朝末期的一位皇帝的演讲,之前大臣对西洋武器的看法是“学无用”,当看到西洋武器的厉害后,又说“不可学”。真正有不可学的东西吗? elisp 是强大,可用心学了,坚持下去,还是可以学会的。

当然需要明白:学习是为了使用,不管是用在娱乐,还是解决问题。总之,所学就是为了用!
posted @ 2015-01-19 15:17  lvye1221  阅读(6)  评论(0编辑  收藏  举报