Emacs 中给文本加引号的插件

简介: 前几天 @刘鑫-MarchLiu 在微博上发布了一个给给文本加引号的插件:http://weibo.com/1729408273/eDcC8e8w6aD。不过用起来有点小问题:两头都只能插入一个字符,因此不能用于添加 XML 标签;光标控制上有个 bug,每次执行后光标会往左移动一个字符。我自己刚刚也实现了一下,不过我的实现灵活性比较差(前后的符号必须由用户手工输入,不能以参数形式传

前几天 @刘鑫-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

目录
相关文章
|
编解码 监控 网络协议
Android平台音视频推送选RTMP还是GB28181?
早在2015年,我们发布了RTMP直播推送模块,那时候音视频直播这块场景需求,还不像现在这么普遍,我们做这块的初衷,主要是为了实现移动单兵应急指挥系统的低延迟音视频数据传输。好多开发者可能会疑惑,走RTMP怎么可能低延迟?网上看到的RTMP推拉流延迟,总归要2-3秒起,如果是自己实现框架,RTMP推拉流逻辑自己实现的话,延迟确实可以控制在毫秒级,这个已无需赘述。
254 0
|
安全 Windows
服务器中如何检查端口是否开放
服务器中如何检查端口是否开放
|
前端开发 JavaScript
除了 jsPDF,还有哪些前端库可以用于生成 PDF?
【10月更文挑战第21天】这些前端库都有各自的特点和优势,你可以根据具体的项目需求、技术栈以及对功能的要求来选择合适的库。不同的库在使用方法、性能表现以及功能支持上可能会有所差异,需要根据实际情况进行评估和选择。
|
机器学习/深度学习 自然语言处理 算法
数据准备指南:10种基础特征工程方法的实战教程
在数据分析和机器学习中,从原始数据中提取有价值的信息至关重要。本文详细介绍了十种基础特征工程技术,包括数据插补、数据分箱、对数变换、数据缩放、One-Hot编码、目标编码、主成分分析(PCA)、特征聚合、TF-IDF 和文本嵌入。每种技术都有具体应用场景和实现示例,帮助读者更好地理解和应用这些方法。通过合理的特征工程,可以显著提升模型的性能和预测能力。
704 3
数据准备指南:10种基础特征工程方法的实战教程
|
Web App开发 缓存 安全
WIN11 Chrome 双击打不开闪退及Chrome浏览器不能拖拽文件crx
【11月更文挑战第6天】本文介绍了 WIN11 系统中 Chrome 浏览器双击打不开闪退及不能拖拽文件 crx 的原因和解决方法。包括浏览器版本过旧、扩展程序冲突、硬件加速问题、缓存过多、安全软件冲突、系统文件损坏、用户配置文件损坏等问题的解决方案,以及 crx 文件的屏蔽、权限问题和文件格式问题的处理方法。
3809 2
|
SQL 关系型数据库 MySQL
DataX - 全量数据同步工具(1)
DataX - 全量数据同步工具
|
机器学习/深度学习 运维 算法
从K-means到高斯混合模型:常用聚类算法的优缺点和使用范围?
从K-means到高斯混合模型:常用聚类算法的优缺点和使用范围?
2296 0
|
前端开发 JavaScript
.net core 前端传递参数有值 后端接收到的数据却是null
1、问题分析 在做接口测试时,偶然出现了前端输出有值,但是后端断点调试时却出现接收参数总是为null的情况 2、解决办法 前端打印log,看前端的每一个传值的数据类型,与后端请求参数类进行认真的一一比对 小技巧: ① 直接打印调用接口的传参值的数据类型,例如 console.log(type of this.form.name) --string console.log(type of this.form.age) --number 打印的数据类型与后端接口的参数类比对,查出不对应的类型 ② 关于非必填的值,默认传值可能出现空字符串(' ')、NaN值(Not a Number
651 0
|
Java
Java的UUID简单生成方法
java的uuid简单生成
425 0