Emacs 中给文本加引号的插件

来源:互联网 发布:手机绘图软件 戒指 编辑:程序博客网 时间:2024/06/05 12:50

前几天 @刘鑫-MarchLiu 在微博上发布了一个给给文本加引号的插件:http://weibo.com/1729408273/eDcC8e8w6aD。不过用起来有点小问题:

  1. 两头都只能插入一个字符,因此不能用于添加 XML 标签;
  2. 光标控制上有个 bug,每次执行后光标会往左移动一个字符。

我自己刚刚也实现了一下,不过我的实现灵活性比较差(前后的符号必须由用户手工输入,不能以参数形式传递):

(defun wrap-thing (thing)  "Wrap the thing at point.THING is a symbol which specifies the kind of syntactic entity you want.Possibilities include `region', `symbol', `list', `sexp', `defun', `filename',`url', `email', `word', `sentence', `whitespace', `line', `page' and so on."  (interactive)  (let ((range (if (eq thing 'region)                   (cons (region-beginning) (region-end))                 (bounds-of-thing-at-point thing)))        (wrapper (cons (read-string "Left: ")                       (read-string "Right: "))))    (save-excursion      (goto-char (cdr range))      (insert (cdr wrapper))      (goto-char (car range))      (insert (car wrapper)))))(defmacro make-wrap-for (&rest things)  "A tool for define wrap-region, wrap-word etc."  (let ((exp '()))    (dolist (e things)      (push `(defun ,(intern (concat "wrap-" (symbol-name e))) ()               (interactive)               (wrap-thing (quote ,e))) exp))    (push 'progn exp)))(make-wrap-for region symbol list sexp defun               filename url email word sentence               whitespace lint page)(global-set-key (kbd "C-.") 'wrap-region

把上面的代码放到你的 .emacs 文件中,就能用 C-. 来调用了。如果有需要,你还可以再将 wrap-word、wrap-sentence 等绑定到其他键。

2011-08-23

今天重新实现了 make-wrap-for 这个宏,虽然物理行数还多了一行,但我觉得这个实现更优雅:

(defmacro make-wrap-for (&rest things)  "A tool for define wrap-region, wrap-word etc."  `(progn     ,@(mapcar        (lambda (e)          `(defun ,(intern (concat "wrap-" (symbol-name e))) ()             (interactive)             (wrap-thing ',e)))        things)))

为方便其他朋友提问和指正,转载是请保持文章完整性,并以超链接形式注明原始作者“redraiment”和主站点地址,谢谢。

我的邮箱,欢迎来信(redraiment@gmail.com)
我的CSDN博客(梦婷轩):http://blog.csdn.net/redraiment
我的百度空间(梦婷轩):http://hi.baidu.com/redraiment