Emacs поставляется с командой comment-box
для этой цели. Он создает центральные поля комментариев, хотя ширина окна зависит от содержимого. Например, с областью расположены вокруг следующей строки:
This is a comment
при вызове M-x comment-box
текст преобразуется в:
;;;;;;;;;;;;;;;;;;;;;;;
;; This is a comment ;;
;;;;;;;;;;;;;;;;;;;;;;;
Я использую доработанную версию, которая помещает коробку комментария вокруг текущей строки, если регион не активен, а затем после этого выходит из комментария. Кроме того, временно уменьшает заполняющую колонну, поэтому поле комментария не шире, чем ваша длинная строка:
(defun ty-box-comment (beg end &optional arg)
(interactive "*r\np")
(when (not (region-active-p))
(setq beg (point-at-bol))
(setq end (point-at-eol)))
(let ((fill-column (- fill-column 6)))
(fill-region beg end))
(comment-box beg end arg)
(ty-move-point-forward-out-of-comment))
(defun ty-point-is-in-comment-p()
"t if point is in comment or at the beginning of a commented line, otherwise nil"
(or (nth 4 (syntax-ppss))
(looking-at "^\\s *\\s<")))
(defun ty-move-point-forward-out-of-comment()
"Move point forward until it's no longer in a comment"
(while (ty-point-is-in-comment-p)
(forward-char)))
Ради completenes, может быть, вы должны включать в себя определение 'ты- шаг трехточечный вперед-аута -of-comment' или заменить его на стандартную команду ('forward-paragraph'?), чтобы не-lispers могли использовать ее сразу ... – Francesco
Упс, не заметил, что у меня были некоторые личные функции. Исправлена! – Tyler