2015-04-22 2 views
0

Я ищу решение для применения форматирования кода и анализа статического кода для содержимого текущего буфера в режиме C++. Я планирую использовать AStyle и CppCheck. Оба инструмента необходимо выполнить в текущем коде. Например, если я редактирую foo.cpp функция должна работатьЗапуск AStyle в текущем буфере, сохранение и восстановление положения курсора

astyle --arg1 --argn foo.cpp 

И

cppcheck --arg1 --arg2 foo.cpp 

То, что я уже пытался это простая функция от here, которая не работает:

(defun astyle-this-buffer (pmin pmax) 
    (interactive "r") 
    (shell-command-on-region pmin pmax 
          "astyle" ;; add options here... 
          (current-buffer) t 
          (get-buffer-create "*Astyle Errors*") t)) 

Обновление:

я обнаружил, что приведенный выше код совместим с Emacs23 в то время как я использую 24. Таким образом, я использовал вместо этого:

(defun reformat-code() 
    (interactive) 
    (shell-command-on-region (point-min) (point-max) 
          "astyle --options=~/.astylerc" t t)) 

(global-set-key (kbd "C-x C-a") 'reformat-code) 

Теперь он работает и форматирует код, хотя я не могу узнать, как сэкономить курсора и скажите emacs, чтобы переместить эту линию.

+2

Можете ли вы уточнить, как функция не работает? Что он делает? –

ответ

1

Мне кажется, что инструменты переформатирования, такие как astyle, изменят пробелы, но, по-видимому, ничего больше. (Возможно, это неверно, как если бы они переформатировали макрос C, то они также должны изменить обратную косую черту, но это также можно принять во внимание.)

Итак, способ, которым я хотел бы приблизиться к этому, состоял бы в подсчете сколько небелых символов появляется перед (point), вызывают astyle, возвращают буфер (или что-то еще) и, наконец, начиная с начала буфера, переместите вперед много небелых символов.

Это не всегда будет «одно и то же», например, если точка была в некоторых пробелах, которые были изменены, но я думаю, что она должна быть достаточно близкой.

Если вы действительно хотите, чтобы просто записать номер текущей строки и вернуться к этому, вы можете использовать line-number-at-pos, чтобы получить номер текущей строки, а затем (goto-char (point-min)) и использовать forward-line, чтобы вернуться к линии.

+0

Я должен научиться lisp, чтобы сделать это ... –

Смежные вопросы