Editor: Открыть файл с указанием позиции курсора

Хотите предложить идею нового плагина или знаете, что улучшить в существующем? Пишите сюда.
ujos
Posts: 220
Joined: Fri 27 Apr, 2012 15:10
Has thanked: 10 times

Editor: Открыть файл с указанием позиции курсора

Post by ujos »

В Midnight Commander есть удобная незаметная фича - он позволяет открыть файл в редаторе с установкой позиции курсора. Это удобно в случае, когда компилишь код из командной строки и компилятор выдает сообщение об ошибке. Тогда копируешь имя файла с номером строки и вызываешь mcedit. При открытии файла редатор сразу перемещает курсор в нужное место.

Сейчас приходится копировать только имя файла, а номер строки запоминать. Потом жать Alt+F8.

В идеале было бы клево, если бы поддерживалось хотя бы два формата:

VC++

Code: Select all

1.cpp(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1.cpp(3): error C2146: syntax error: missing ';' before identifier 'main'
1.cpp(4): error C2143: syntax error: missing ';' before '{'
1.cpp(4): error C2447: '{': missing function header (old-style formal list?)
G++

Code: Select all

1.cpp:3:1: error: 'ggg' does not name a type
Если такое возможно реализовать, тогда поддержку номера строки было бы хорошо добавить в строку edit:<filename> и в Shift+F4
Last edited by ujos on Sun 04 Sep, 2022 20:58, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Editor: Открыть файл с указанием позиции курсора

Post by buniak_a_h »

Есть пер-анальное решение, которое, однако, легко реализовать макросом, и оно станет не таким противным.
Попробуйте в комстроке набрать:
lua:editor.Editor(<имя_файла>,nil,nil,nil,nil,nil,nil,<строка>,<позиция>)

Лично я сделал несколько компиляторов прямо из редактора ФАРа (для Delphi, Harbour и Go). Скрипт перехватывает вывод компилятора и сам позиционируется на ошибке.
Last edited by buniak_a_h on Mon 05 Sep, 2022 01:09, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 10865
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Editor: Открыть файл с указанием позиции курсора

Post by HaRT »

ujos wrote: Sun 04 Sep, 2022 20:56поддержку номера строки было бы хорошо добавить в строку edit:<filename>
Справку по FarCmds почитайте :rtfm2:

А вот добавить разбор номера строки строки и позиции в ней в диалог по ShiftF4 — да, не помешало бы, притом сразу с поддержкой форматов, выдаваемых популярными компиляторами (или задаваемых в настройках). Только надо продумать, чтобы использование двоеточия не путалось с альтернативными потоками данных NTFS…
Фар есть инструмент, а не нянька. © 2009 DrKnS
ujos
Posts: 220
Joined: Fri 27 Apr, 2012 15:10
Has thanked: 10 times

Editor: Открыть файл с указанием позиции курсора

Post by ujos »

HaRT wrote: Mon 05 Sep, 2022 01:00 Справку по FarCmds почитайте :rtfm2:
Вопрос в том, чтобы команда edit: принимала номер строки из сообщения компилятора как есть. Чтобы не нужно было собирать ком строку для edit:
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Editor: Открыть файл с указанием позиции курсора

Post by buniak_a_h »

ujos wrote: Mon 05 Sep, 2022 09:00 Вопрос в том, чтобы команда edit: принимала номер строки из сообщения компилятора…
Круто! Команда edit: сама должна настроиться на формат сообщения об ошибке, даже не зная, вывод какого компилятора она анализирует? Надеюсь, для Вас не секрет, что сообщения об ошибках у разных компиляторов имеют разный формат?
Я повторюсь. Для двух компиляторов (Харбор и Го) у меня есть вполне рабочий скрипт, умеющий вызывать компилятор прямо из редактора, анализировать вывод и позиционироваться на ошибке (могу дать как пример) - нечто типа простенькой IDE (тут на просторах форума есть и другие IDE). Для Delphi давно не проверял; с тех пор, как написан, ФАР поменялся.
Last edited by buniak_a_h on Mon 05 Sep, 2022 20:49, edited 2 times in total.
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

Editor: Открыть файл с указанием позиции курсора

Post by fps »

buniak_a_h wrote: Mon 05 Sep, 2022 20:48 Для двух компиляторов (Харбор и Го) у меня есть вполне рабочий скрипт, умеющий вызывать компилятор прямо из редактора, анализировать вывод и позиционироваться на ошибке
Я себе для питона такое же намакросил )
User avatar
HaRT
Moderator
Posts: 10865
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Editor: Открыть файл с указанием позиции курсора

Post by HaRT »

fps wrote: Tue 06 Sep, 2022 06:01
buniak_a_h wrote: Mon 05 Sep, 2022 20:48 Для двух компиляторов (Харбор и Го) у меня есть вполне рабочий скрипт, умеющий вызывать компилятор прямо из редактора, анализировать вывод и позиционироваться на ошибке
Я себе для питона такое же намакросил )
А ещё давным-давно то же самое было сделано для C/C++ и PowerShell соответствующими плагинами, а потом, тоже давненько, для Луа (и Мун?) соответствующими скриптами. И наверняка я что-то из этого ряда упустил из виду.
На мой взгляд, просто напрашивается общее решение с гибкой настройкой. Да вот только заинтересован ли хоть кто-то его сделать, непонятно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Editor: Открыть файл с указанием позиции курсора

Post by buniak_a_h »

ujos wrote: Sun 04 Sep, 2022 20:56 В Midnight Commander есть удобная незаметная фича
А можно уточняющий вопрос (из чисто академического интереса) а упомянутая фича в MC настраивается на формат репорта, или в неё заложен некий набор форматов?
User avatar
HaRT
Moderator
Posts: 10865
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Editor: Открыть файл с указанием позиции курсора

Post by HaRT »

buniak_a_h wrote: Tue 06 Sep, 2022 21:00 упомянутая фича в MC настраивается на формат репорта, или в неё заложен некий набор форматов?
Не знаю, как обстоит дело в MC, но если вам интересно, могу найти другую популярную софтину, где подобная настройка есть, а также кое-какую документацию по дополнительным форматам.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Editor: Открыть файл с указанием позиции курсора

Post by buniak_a_h »

HaRT wrote: Tue 06 Sep, 2022 21:09 если вам интересно…
Интересно, конечно, но если «найти» - трудоёмко, то мой интерес того не стоит.
Я, с одной стороны, на пенсии и скучно, так что заняться этим было бы интересно. С другой - т.к. я уже не работаю, то стимула особого нету. Для тех языков, на которых я тогда писал, я сделал. Специализированно, т.к. лениво :wink: .
User avatar
HaRT
Moderator
Posts: 10865
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Editor: Открыть файл с указанием позиции курсора

Post by HaRT »

buniak_a_h wrote: Tue 06 Sep, 2022 21:31 если «найти» - трудоёмко, то мой интерес того не стоит
Не слишком трудоёмко. Например, в SlickEdit есть такая настройка. Наверняка и в более модных редакторах есть, но я ими уже не пользовался (перешёл на IDE). В целом, подход, основанный на регэкспах с именованными группами, кажется мне вполне рабочим.
А вот тут есть описание некоторого пространства вариантов форматирования {сообщений с отсылками к исходному коду} в майкрософтовской экосистеме. Ключевой момент в том, что может указываться начало и конец фрагмента кода (возможно, на разных его строках). Впрочем, и в экосистеме *NIX такое встречается (например, см. -fdiagnostics-print-source-range-info в gcc и clang — там диапазон не вместо, а в дополнение к «якорю» сообщения в коде).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Editor: Открыть файл с указанием позиции курсора

Post by buniak_a_h »

HaRT wrote: Tue 06 Sep, 2022 22:40 подход, основанный на регэкспах с именованными группами, кажется мне вполне рабочим.
Ну, мне на первый взгляд тоже.
Вижу некоторые особенности:
1. Не всегда требуется на компиляцию посылать именно редактируемый файл (иногда есть файл проекта). Т.е. надо настраивать не только формат строки репорта, но и вызываемую (возможно, с параметрами). А если проектов несколько - выбирать из истории довольно гемморойно.
2. У некоторых компиляторов имя файла выводится в отдельной строке, на под ним - список ошибок (уже без имени модуля)
3. В строках репорта часто указывается строгость ошибки. Возможно, имеет смысл фильтровать (info игнорировать, например).

Пожалуй, вспомню молодость, попрограммирую… Не быстро!
User avatar
HaRT
Moderator
Posts: 10865
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

Editor: Открыть файл с указанием позиции курсора

Post by HaRT »

buniak_a_h wrote: Tue 06 Sep, 2022 22:57 Не всегда требуется на компиляцию посылать именно редактируемый файл (иногда есть файл проекта)
Я бы сказал, что в современных условиях редко когда даже при компиляции отдельного исходника обходится без проекта (который тоже не факт, что один файл) и ещё кучи других исходников.
buniak_a_h wrote: Tue 06 Sep, 2022 22:57 если проектов несколько - выбирать из истории довольно гемморойно
Да, по хорошему нужны какие-то пресеты, притом желательно, чтобы с привязкой к (над-)директории в файловой системе (т.е., например, на уровне локального репозитория/ рабочей копии).
buniak_a_h wrote: Tue 06 Sep, 2022 22:57 У некоторых компиляторов имя файла выводится в отдельной строке, на под ним - список ошибок (уже без имени модуля)
А у них есть какая-то спец. строка типа «с этим файлом всё»? Или надо разбирать по увеличению/уменьшению отступа от начала строки (а-ля код на Питоне)?
buniak_a_h wrote: Tue 06 Sep, 2022 22:57 Возможно, имеет смысл фильтровать (info игнорировать, например).
Мне нравится, какой к этому подход в Visual Studio: в панели Output весь вывод без фильтрации (его можно украсить посредством сторонних расширений), а в панели Error List — уже разобранный список с колонками и фильтрами по серьёзности, которые можно включать-выключать, не теряя никакие сообщения насовсем.
buniak_a_h wrote: Tue 06 Sep, 2022 22:57 Пожалуй, вспомню молодость, попрограммирую…
Тогда я в какой-то момент отделю тему в раздел скриптов.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4266
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Editor: Открыть файл с указанием позиции курсора

Post by buniak_a_h »

HaRT wrote: Wed 07 Sep, 2022 00:17 по хорошему нужны какие-то пресеты
Типа меню. Просто даже один и тот же проект можно компилить с отладкой/без; с оптимизацией/без; с варнингами/без, компиляция/только проверка и т.д. Я сделал выбор из МЕНЮ. У меня была привязка к папке, но в одной папке могут быть несколько проектов. Потому и меню (у меня - такой же структуры, как FarMenu.ini)
HaRT wrote: Wed 07 Sep, 2022 00:17 А у них есть какая-то спец. строка типа «с этим файлом всё»? Или надо разбирать по увеличению/уменьшению отступа от начала строки (а-ля код на Питоне)?
Кода на питоне не знаю, может типа как на moon?
Те, что я знаю, имя модуля выводят с начала строки, а все, к нему относящееся - с отступом. Затем 1-2 заключительные строки типа
Warnings - nn; Errors - mm, Total lines - nnn
пропускают строку и либо следующий модуль, либо саммари по всему проекту. Причём, инфо о модуле выводится даже при отсутствии ошибок (что мне серьёзно мешало).
HaRT wrote: Wed 07 Sep, 2022 00:17 Тогда я в какой-то момент отделю тему в раздел скриптов
Будет, что публиковать - я сделаю тему. Пока нечего. Да и здоровье немного подкачало, поэтому я и предупреждал: быстро не получится.
Last edited by buniak_a_h on Wed 07 Sep, 2022 00:42, edited 1 time in total.
ujos
Posts: 220
Joined: Fri 27 Apr, 2012 15:10
Has thanked: 10 times

Editor: Открыть файл с указанием позиции курсора

Post by ujos »

HaRT wrote: Tue 06 Sep, 2022 12:09 На мой взгляд, просто напрашивается общее решение с гибкой настройкой. Да вот только заинтересован ли хоть кто-то его сделать, непонятно.
Мне кажется, что перед открытием файла надо проверить его на regex и "выдрать" из строки имя файла и номер линии.
А чтобы было универсально, можно в настройках редактора дать возможность ввести список regex выражений

Такое решение закроет MSVC, (clan)g++, Python точно
Last edited by ujos on Wed 07 Sep, 2022 13:37, edited 1 time in total.
Post Reply

Return to “Предложения и идеи”