настраиваемое поле для комментариев на emacs - PullRequest
2 голосов
/ 06 апреля 2011

Как будет выглядеть макрос Emacs, который превращает следующую строку:

# abc def

в:

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

?Макрос вовсе не обязательно должен быть общим: он может жестко задавать спецификации блока (т. Е. 3 пробела до и после комментария, символы кадра (|, +, -) и предполагать, что комментарий являетсяодна строка. Однако он должен использовать любой символ комментария, установленный для текущего режима, и получить правильную длину поля.

Я также был бы признателен, если бы вы знали о существующем пакете, который делает это.

Спасибо!

Ответы [ 5 ]

4 голосов
/ 06 апреля 2011

Это делает то, что я думаю, что вы хотите:

(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))))
2 голосов
/ 06 апреля 2011

newcomment имеет функцию с именем comment-box, которая создает комментарий в виде блока, состоящий из символов комментария, то есть:

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

или

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

в зависимости от режима,Единственная конфигурируемость, которую он имеет, - это количество символов, используемых для поля;например, в режимах Lisp вы получаете:

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

Функция comment-region-default должна дать вам некоторое представление о том, как делать комментарии.Стили комментариев newcomment недостаточно гибки для реализации того, что вы хотите, поэтому я думаю, что было бы проще просто нарисовать рамку, а затем добавить обычный (однострочный или многострочный, в языках, где есть разница) комментарийрегион с использованием существующего newcomment оборудования.

1 голос
/ 13 августа 2013

rebox2 - наиболее полное расширение для рисования в emacs.

1 голос
/ 06 апреля 2011

Существует функция с именем picture-mode, которая может делать что-то подобное.

M-x Picture-Mode

0 голосов
/ 20 января 2017

Функция

M-x comment-box

, доступный с Emacs 24.4, делает это, используя точку и отметку, как и следовало ожидать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...