LINUX.ORG.RU

пакет для emacs для автоинкремента полей

 ,


0

1

Подскажите, нет ли готового ...-mode для emacs для генерации такого рода бойлерплейта:

  -- set(cnt, 0)
  constant SYS_APBS_IRQCTRL0  : integer := 0; -- auto(cnt)
  constant SYS_APBS_TIMER0    : integer := 1; -- auto(cnt)
  constant SYS_APBS_AHBRAM0   : integer := 2; -- auto(cnt)
  constant SYS_APBS_FIREWALL0 : integer := 3; -- auto(cnt)

Т.е. если я сделаю так (добавлю новую строку)

  -- set(cnt, 0)
  constant SYS_APBS_IRQCTRL0  : integer := 0; -- auto(cnt)
  constant SYS_APBS_TIMER0    : integer := 1; -- auto(cnt)
  constant SYS_APBS_TIMER1    : integer := 1; -- auto(cnt)
  constant SYS_APBS_AHBRAM0   : integer := 2; -- auto(cnt)
  constant SYS_APBS_FIREWALL0 : integer := 3; -- auto(cnt)

и ткну какой-нибудь M-x ...-update-autos, то получу

  -- set(cnt, 0)
  constant SYS_APBS_IRQCTRL0  : integer := 0; -- auto(cnt)
  constant SYS_APBS_TIMER0    : integer := 1; -- auto(cnt)
  constant SYS_APBS_TIMER1    : integer := 2; -- auto(cnt)
  constant SYS_APBS_AHBRAM0   : integer := 3; -- auto(cnt)
  constant SYS_APBS_FIREWALL0 : integer := 4; -- auto(cnt)
★★★★★

Ну, если вот сходу что-то припомнить, то можно выделить область цифр, если они друг под другом и нажать C-x r d (удалить все), а потом C-x r N (rectangle-number-lines). Он прямо рядом создаст нумерованный список. Ну это так - быстрорешение.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

спасибо, можно и так. Но все-таки хочется чего-то типа тех же verilog-mode auto, когда ты тыкаешь C-c C-a – и всякие AUTOINST, AUTOWIRE и прочая лабуда магически превращается в валидный код (бойлерплейт для установки компонентов что в VHDL, что в Verilog уж очень нудный и требует огромного внимания, если это делать вручную).

demidrol ★★★★★ ()
Ответ на: комментарий от demidrol

Я понимаю, что ты хочешь. Не могу припомнить ничего такого универсального, какого-нибудь minor-mode, который прямо шаблоны позволял задавать и делать по ним автонумерацию. Возможно, есть такой, но мне не нужен был. Можно еще вот так. Выделяешь область, в которой надо перенумеровать, и вызываешь функцию, которую я тут по-быстрому наколбасил:

(defun renumber-integer-field (beg end)
  (interactive "r")
  (let ((i 0))
    (save-excursion
      (save-restriction
	(goto-char beg)
	(while (re-search-forward
		"\\(integer[[:space:]]*:=[[:space:]]*\\)\\([0-9]+\\)" end t)
	  (replace-match (number-to-string i) t t nil 2)
	  (setq i (1+ i)))))))

Можно и с шаблончиком тут поиграть. Сейчас тут шаблон - наличие после := какого-то числа.

Zubok ★★★★★ ()

Я в подобных случаях шлепаю на коленке keyboard macro, потому что для каждого специфичного случая модов не напишешься. Попользовался и выкинул.

Nervous ★★★★★ ()
Последнее исправление: Nervous (всего исправлений: 2)