我用这个作为参考: Emacs comment/uncomment current line
我的问题是我是否可以使用defadvice执行相同的任务(这对我来说更合适)?
的内容(defadvice comment-or-uncomment-region (before mark-whole-line (arg beg end) activate)
(unless (region-active-p)
(setq beg (line-beginning-position) end (line-end-position))))
(ad-activate 'comment-or-uncomment-region)
答案 0 :(得分:1)
这个答案是基于我上面的评论。
defadvice
并不比另一种解决方案更合适。它永远不会更多
比另一种解决方案更合适。
defadvice
是的最后手段
方式即可。
<强> PERIOD。强>
请记住,无论何时使用defadvice
,您都会从根本上进行修改
包开发人员依赖的Emacs API。
当您巧妙地改变这些行为时,会给您带来很多问题
当你报告“bug”时,最终会为包开发人员提供帮助
您的Emacs API已被defadvice
打破。
因此,当您想在本地更改功能时, 这样做的方法是使用现有功能和重新映射来定义新命令 它。
即(来自您提到的answer):
(defun comment-or-uncomment-region-or-line ()
"Comments or uncomments the region or the current line if there's no active region."
(interactive)
(let (beg end)
(if (region-active-p)
(setq beg (region-beginning) end (region-end))
(setq beg (line-beginning-position) end (line-end-position)))
(comment-or-uncomment-region beg end)
(next-line)))
(global-set-key [remap comment-dwim] 'comment-or-uncomment-region-or-line)