Имеется функция, задача которой производить замены в выделенной области и делать выравнивание области. По сути конвертирует таблицы из csv (сепаратор «;») в latex. Выглядит это так
(defun my/convert-table-to-latex ()
"csv to latex"
(interactive)
(setq beg (region-beginning))
(setq end (region-end))
(perform-replace ";" "&" nil 'regexp nil nil nil beg end nil nil)
(perform-replace "$" "\\\\\\\\ \\\\hline" nil 'regexp nil nil nil beg end nil nil)
(indent-region beg (+ end 1)))
Работает все, кроме выравнивания последней строки. Ее выравнивает, но неправильно, при этом, если нажать после завершения выполнения функции tab, строку выравнивает правильно. Пробовал такой вариант для проверки:
(defun my/convert-table-to-latex ()
"csv to latex"
(interactive)
(setq beg (region-beginning))
(setq end (region-end))
(perform-replace ";" "&" nil 'regexp nil nil nil beg end nil nil)
(perform-replace "$" "\\\\\\\\ \\\\hline" nil 'regexp nil nil nil beg end nil nil)
;; (indent-region beg (+ end 1)))
(set-mark-command beg)
(goto-char end)
(activate-mark)
(indent-for-tab-command)
(goto-char end))
Оказывается, несмотря на то, что я перехожу в конце функции к изначально заданному концу выделенной области, я оказываюсь всегда ровно на строку выше, чем последняя строка в выделенной области. Подозреваю, что из-за этого и выравнивание неправильное. Как такое поведение исправить?