LINUX.ORG.RU

emacs под c++

 ,


0

2

Привет. Многого не хочу - лишь перейти к определению + дополнение. Но, к сожаление, у меня впечатление, что все инструменты заточены под сишку. Вот взять Global, отличная штука для Си, но ничего не знает про перегрузку и пространство имён. У кого-нибудь есть успешный опыт? Поделитесь, пожалуйста. Прикручивать Clang? Как-то он мне не нравится, хотелось бы аналог глобал (простой, прозрачный), но адекватно работающий для плюсов.

★★

irony-mode пойдёт?

Hertz ★★★★★
()

Когда я прикрутил и настроил в емакс то что мне казалось необходимо для C++ он стал неюзабельным тормозным и падающим Г. Ушел на qtcreator. За то же самое eclipse ненавижу.

Допускаю, кто-то может накостылять функциональный Имакс для Спп, но это не тривиально

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

Прикручивать Clang? Как-то он мне не нравится, хотелось бы аналог глобал (простой, прозрачный), но адекватно работающий для плюсов.

Ну а кто кроме компилятора способен развернуть код? Это нетривиальная задача.
Для vim я использую youcompleteme. А емаксеры говорили, что у них есть какое-то решение лучше. Получается врут?

andreyu ★★★★★
()

Я не отвечаю, но на ус мотаю. Я пробовал и irony-mode (он и сейчас настроен). Но я до конца в нём так и не разобрался (потому и хотел выкинуть и забыть). Например global - пусть он внутри сколь угодно сложен, но я имею понятный интерфейс, который вызываю хоть с командной строки; и clang based парсинг - какие-то сервера, что-то как-то встраивается в emacs, и как-то дёргается за яйца clang. Имхо, много лучше было бы иметь плюсовый глобал, который не заставлял бы меня глубоко вникать в тему (показывал бы мне лишь интерфейс идентичный сишному глобалу), а что там внутри - мне неинтересно (пусть бы работал на том же clang'е). Я не против clang, хотелось простоты.

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

Я не против clang, хотелось простоты

А тебе не приходит в голову, что синтаксис и семантика с++ настолько сложны, что разобраться с ними может только компилятор?

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

Безусловно, я понимаю, что парсить плюсовый код - нетривиальная задача. Я лишь хочу скрыть всю эту сложность в какой-нибудь глобал подобной утилите. Тут выше говорили про rtags, прошёлся по сети обнаружил вдобавок всякие clang-tags, clang-ctags. Похоже это то, что мне нужно. Пока читаю доки.

pavlick ★★
() автор топика

Смотри либо rtags, либо lsp интеграции с clangd и прочими. Одна фигня отладчик в emacs ниочём в терминальном режиме, так же как и в vim, а значит, все влажные мечты о «иде» идут лесом, ибо в гуи тулзах типо qtc или clion гораздо более имеется ништяков, притом из коробки.

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

Одна фигня отладчик в emacs ниочём в терминальном режиме

Почему? Емаксеры утверждают, что в emacs хорошая интеграция с gdb.

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

Совершенно такая же как в [py]clewn, может быть в паре деталей получше. Вполне юзабельно в гуи моде, но в терминале неудобно даже на 24" монике. А про ноут можно вообще забыть.

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

Совершенно такая же как в [py]clewn, может быть в паре деталей получше.

Я уже не помню, почему я отказался от pyclewn и clewn, но явно на то были причины.

Вполне юзабельно в гуи моде, но в терминале неудобно даже на 24" монике. А про ноут можно вообще забыть.

Так это проблема размещения фреймов. Достаточно держать два-три фрейма - с кодом, с переменными, со стеком. Более того, оба фрейма с переменными и со стеком можно открывать только при необходимости.

Для vim я бы хотел именно такого - возможность настроить лэйаут самому и возможность скрывать/открывать нужные фреймы по хоккею.

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

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

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

Второй тонкий момент - голый отладчик для плюсов так себе годится, нужны pretty printers, и древовидное представление обьектов, т.е. нужно что-то типа nerdtree для представления locals. При этом, в идеале оно должно быть совместимо хотя бы с qtc (я сильно сомневаюсь, что мильёны человек бросятся писать свои обёртки для разных библиотек типа stl и boost с нуля)

Т.е. прыжки идут в принципе вокруг ui, для vim8/nvim нормальный асинхронный rpc сделать можно.

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

Т.е. прыжки идут в принципе вокруг ui, для vim8/nvim нормальный асинхронный rpc сделать можно.

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

andreyu ★★★★★
()

Поставил rtags + company (с одним backend'ом company-rtags), может прикручу ещё какую-нибудь мелочовку. Основной цели добился - вынести из емакса всякие там шланговые сервера. Доволен в общем, всё шустренько, аскетично и без мишуру. Спасибо за советы.

Ещё небольшой вопрос - на какие префиксы назначать пользовательские команды (типа C-c ...)? Хочу привязать go-to-defenition. Когда-то читал про пользовательские префиксы, но помню смутно.

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

Хотя что-то барахлит дополнение

vector<int> myvec{4, 8};
myvec.em
комплит даст правильный список вариантов только если вызывать company-complete сразу после точки, а не после em. Надо чего-нибудь вместо company попробовать, наверное.

pavlick ★★
() автор топика
Последнее исправление: pavlick (всего исправлений: 1)
Ответ на: комментарий от andreyu

Мысль интересная, но без проектирования ui всё что можно придумать это постановка и следование за бряками. И то там есть пара интересных моментов, но они уже десятком товарищей решены.

Допустим прокси будет писаться на питоне(не на плюсах же:), плюс сервер на питоне очень легко встроить в gdb). Вот тут уже начинаются муки выбора пары транспорт/протокол. Пока склоняюсь к Websocket + jsonrpc, за счёт того, что просто подружить с web и отлаживать сравнительно несложно.

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

Мысль интересная, но без проектирования ui всё что можно придумать это постановка и следование за бряками.

Но это уже как минимум половина поставленной задачи. И многим этого + значение переменных было бы достаточно.

Пока склоняюсь к Websocket + jsonrpc, за счёт того, что просто подружить с web и отлаживать сравнительно несложно.

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

andreyu ★★★★★
()

Господа, вопрос:
Поставил ivy, ivy-rtags. Не получается подгрузить ivy-rtags.el (ошибок нет, но функции из него я не вижу)

pavlick@pc ~ $ cat .emacs
(require 'ivy)
(require 'ivy-rtags)
;;(load-library "ivy-rtags")  и так не полчается
;;(load-library "zz")   для теста пробовал подгрузить свой zz.el со своей функцией, функцию в emacs не вижу, хотя файл вроде как подгружается
(ivy-mode 1)

pavlick@pc ~/.emacs.d/elpa/ivy-rtags-20170522.2154 $ cat zz.el 
(defun myefn ()
        (print "fsdfsdf"))

pavlick@pc ~/.emacs.d/elpa/ivy-rtags-20170522.2154 $ cat ivy-rtags.el
(require 'rtags)
(require 'ivy)
(eval-when-compile
  (when (< emacs-major-version 25)
    (defmacro save-mark-and-excursion (&rest body)
      `(save-excursion ,@body))))
(defvar ivy-rtags-tracking-timer nil)
(defun ivy-rtags-collection () ...)
(defun ivy-rtags-select (candidate) ...)
(defun ivy-rtags-update () ...)
(defun ivy-rtags-read () ...)
(provide 'ivy-rtags)
Что я не так делаю? почему не вижу функции из подгружаемых модулей?

ЗЫ: туплю не обращайте внимание. Функции не интерактивные, вот и не вижу.

pavlick ★★
() автор топика
Последнее исправление: pavlick (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.