LINUX.ORG.RU

Нужна помощь в настройке Emacs и flycheck.

 , ,


0

1

Пытаюсь освоить emacs, начинал с видео этого автора. Решил добавить подсветку ошибок, поискав нашёл flycheck. Столкнулся с тем что не может найти <gtk/gtk.h>, пошёл искать где указать папки с заголовками, нашёл переменную flycheck-gcc-include-path, посмотрел как в elisp изменять значение переменных, в итоге всё равно не заработало. Вот мой .emacs файл. Помогите разобраться что к чему.

P.S. советы по замене инструментов перечисленных в моём .emacs файле на более совершенные также приветствуются.

Функция add-to-list добавляет к списку один элемент, это раз. Список строк в Lisp выглядит так: (list "one" "two" "three"), что эквивалентно '("one" "two" "three"), это два.

Строка

"/usr/include/gtk-3.0
/usr/include/at-spi2-atk/2.0
/usr/include/at-spi-2.0
...
/usr/include/glib-2.0
/usr/lib/glib-2.0/include"

-- это не список строк, это всего лишь строка с символами перевода строки (пардон за тавтологию) внутри.

Сделай так:

(setf flycheck-gcc-include-path
      (append flycheck-gcc-include-path
              '("/usr/include/gtk-3.0"
                "/usr/include/at-spi2-atk/2.0"
                ;; snip...
                "/usr/lib/glib-2.0/include")))

Или так:

(add-to-list 'flycheck-gcc-include-path "/usr/include/gtk-3.0")
(add-to-list 'flycheck-gcc-include-path "/usr/include/at-spi2-atk/2.0")
;; snip...
(add-to-list 'flycheck-gcc-include-path "/usr/lib/glib-2.0/include")
theNamelessOne ★★★★★
()

P.S. советы по замене инструментов перечисленных в моём .emacs файле на более совершенные также приветствуются.

Попробуй company-mode (+ irony-mode для C/C++) вместо auto-complete.

theNamelessOne ★★★★★
()

Забей такое в .emacs пихать. Сделай в корне проекта файл .dir-locals.el и засунь туда примерно такое:

((c-mode . (
            (flycheck-gcc-include-path . ("/usr/src/linux/include"))
            ))
 )

Переменные сам подставишь.

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

(+ irony-mode для C/C++)

зачем? у company есть бэкенд для шланга

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

Опробовал оба Ваших варианта, плюс один ещё нашёл здесь, все варианты срабатывают (в смысле изменяют нужную переменную), но flycheck всё равно пишет «gtk/gtk.h file not found»

flyshoot
() автор топика
Ответ на: комментарий от hateyoufeel

Сделал так:

((c-mode 
       (flycheck-gcc-include-path "/usr/include/gtk-3.0" "ещё много строк")))

Переменная изменилась, но всё равно подчёркивает(

flyshoot
() автор топика
Ответ на: комментарий от hateyoufeel

Сделал как у Вас, работает также как и то что было у меня, переменную задаёт, её значение я посмотрел, но flycheck всё равно подчёркивает <gtk/gtk.h>, в минибуфере пишет что file not found.

flyshoot
() автор топика
Ответ на: комментарий от flyshoot

Сделал (add-to-list 'flycheck-gcc-include-path "/usr/include/gtk-3.0"), УМВР.

Набери C-h v + flycheck-gcc-include-path, покажи что у тебя в «Its value is …» после того, как ты внёс изменения.

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

Убрал пока .dir файл и скопировал Ваш код. Всё также не работает. Вот переменная: Its value is («/usr/include/gtk-3.0»).

А вот полный список с использование .dir файла: Its value is («/usr/include/gtk-3.0» «/usr/include/at-spi2-atk/2.0» «/usr/include/at-spi-2.0» «/usr/include/dbus-1.0» «/usr/lib/dbus-1.0/include» «/usr/include/gtk-3.0» «/usr/include/gio-unix-2.0/» «/usr/include/cairo» «/usr/include/pango-1.0» «/usr/include/atk-1.0» «/usr/include/cairo» «/usr/include/pixman-1» «/usr/include/freetype2» «/usr/include/libpng16» «/usr/include/harfbuzz» «/usr/include/freetype2» «/usr/include/harfbuzz» «/usr/include/libdrm» «/usr/include/libpng16» «/usr/include/gdk-pixbuf-2.0» «/usr/include/libpng16» «/usr/include/glib-2.0» «/usr/lib/glib-2.0/include»)

И результат тот же. Версия emacs 24.5.1

flyshoot
() автор топика
Ответ на: комментарий от theNamelessOne

Опробовал на другой машине, там заработало, <gtk/gtk.h> нашёлся, видимо на этой машине какие-то глюки. Однако в остальном как-то плохо flycheck срабатывает, я специально «забывал» проставить скобки или точку с запятой, он ничего не подчёркивал. В любом случае, спасибо за помощь.

flyshoot
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.