如果区域未激活,则在线上切换注释

时间:2012-10-27 00:08:08

标签: emacs

我用这个作为参考: 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) 

1 个答案:

答案 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)