emacs上的自定义评论框

时间:2011-04-05 21:39:45

标签: emacs macros

Emacs宏看起来会变成以下几行:

# abc def

进入:

#   +-------------+
#   |   abc def   |
#   +-------------+

?宏根本不需要是通用的:它可以硬编码框规格(即评论前后的3个空格,框架字符(|+-),以及假设评论是单行的。但是,它应该使用为当前模式设置的任何评论字符,并使框长度正确。

如果您知道现有的包裹可以做到这一点,我也很感激。

谢谢!

5 个答案:

答案 0 :(得分:4)

这就是我想你想要的:

(defun box-comment-region (beg end)
  "do some fancy commenting"
  (interactive "r")
  (save-restriction
    (narrow-to-region beg end)
    (comment-region beg end -1)         ; first, uncomment
    (string-rectangle (point-min)
                      (progn (goto-char (point-max)) (line-beginning-position))
                      "  | ")
    (goto-char (point-min))
    (let ((max-len 0))
      (while (< (point) (point-max))
        (end-of-line)
        (setq max-len (max max-len (current-column)))
        (forward-line 1))
      (previous-line)
      (end-of-line)
      (insert (make-string (- max-len (current-column)) ?\ ))
      (goto-char (point-min))
      (end-of-line)
      (insert (make-string (- max-len (current-column)) ?\ ))
      (end-of-line)
      (let ((top (point)))
        (goto-char (point-max))
        (previous-line)
        (end-of-line)
        (string-rectangle top (point) " | "))
      (let ((line-seg (concat "  +" (make-string (- max-len 2) ?-) "+ \n")))
        (goto-char (point-max))
        (insert line-seg)
        (goto-char (point-min))
        (insert line-seg)))
    (comment-region (point-min) (point-max))))

答案 1 :(得分:2)

newcomment有一个名为comment-box的函数,它生成一个由注释字符组成的框注释,即:

###########
# abc def #
###########

/***********/
/* abc def */
/***********/

取决于模式。它唯一的可配置性是用于盒子的字符数;例如,在Lisp模式中,您最终得到:

;;;;;;;;;;;;;
;; abc def ;;
;;;;;;;;;;;;;

comment-region-default函数可以让您了解如何进行注释。 newcomment的评论样式不够灵活,无法实现您想要的内容,因此我认为最简单的方法是简单地绘制框,然后添加常规(单行或多行,在有差异的语言中)注释使用现有的newcomment机器到该地区。

答案 2 :(得分:1)

有一种称为图片模式的功能,它可能会做类似的事情。

M-x图片模式

答案 3 :(得分:1)

rebox2是最全面的emacs框图绘制扩展程序。

答案 4 :(得分:0)

功能

M-x comment-box
从Emacs 24.4开始,

使用点和标记来做到这一点。