комментарии в виде блока с yasnippet

Я хочу написать шаблон yasnippet , который позволил бы мне добавить заголовок лицензии в буфер сценария в Emacs. который может быть получен с помощью встроенного расширения elisp из yasnippet.

  • Заголовок необходимо прокомментировать с синтаксисом, зависящим от режима программирования, в котором в данный момент находится файл. Уже есть суть фрагмента что и делает . В основном это означает встраивание (comment-region (point-min) (point)) в конец вашего фрагмента.
  • Теперь, я хочу изменить стиль комментария на поле . См. Документацию emacs для переменной в стиле комментария или, если вы хотите увидеть, как выглядит комментарий в виде прямоугольника, просто вызовите Mx comment-box в активной области: Он вызывает comment-region с правильными параметрами.
  • Первый способ сделать это - настроить стиль, изменив конец предыдущего фрагмента на:

    (let ((comment-style 'box))
                (comment-region (point-min) (point)))
    

    К сожалению, отступы нечеткие, и мой ящик не прямоугольный . Если я начну с фрагмента:

    Copyright (c) ${1:`(nth 5 (decode-time))`}
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or
    without modification, are permitted`
          (let ((comment-style 'box))
                (comment-region (point-min) (point)))`
    

    Расширение этого фрагмента «ломает рамку» (я отлаживаю этот фрагмент с помощью синтаксиса комментариев ocaml, но это не должно иметь значения):

    (**************************************************************)
    (* Copyright (c) 2010                                    *)
    (* All rights reserved.                                       *)
    (*                                                            *)
    (* Redistribution and use in source and binary forms, with or *)
    (* without modification, are permitted     *)
    (**************************************************************)
    
    • Сначала я подумал, что вторая строка была с отступом в зависимости от размера встроенного кода до расширения, но в этом случае он должен сделать финальную *) этой строки на 25 пробелов раньше, чем на 4.
    • Если он имеет отступ на основе нет текст присутствует в точке встраивания, окончательный *) должен появиться на 4 пробела тоже поздно , не слишком скоро .
    • Наконец, я не понимаю, что происходит с последней строкой, в которой нет расширения встроенного кода : Есть идеи, как получить прямоугольную коробку?

      Изменить: У нас есть очень хороший ответ, а также предлагаемое исправление, (привет и спасибо, Сейджи! ), но остается вопрос, как адаптировать его к случаю, когда нужно повторно использовать поле, например, как повторное использование $ 1 в:

      Copyright (c) ${1:`(nth 5 (decode-time))`}
      All rights reserved.
      
      Redistribution and use in $1, in source and binary forms
      `(let ((comment-style 'box))
              (comment-region (point-min) (point-at-eol 0)))`
      

      В этом случае механизм шаблонов копирует (переменную -length) значение, полученное для поля $ 1 , а именно 2011 , до последней строки при расширении шаблона (после отступа), давая строку комментария на 2 символа больше. При написании шаблона становится трудно предсказать, что нужно удалить 4 символа в этой строке. Возможно, повторное использование полей и правильного отступа - это слишком много, чтобы требовать одновременного выполнения. Кто-нибудь видит способ сделать это, хотя?

    6
    задан Community 23 May 2017 в 12:26
    поделиться