Проблема со списком функций (Navigation Bar) в C++

Started by megadrive, April 07, 2014, 08:19:32 AM

Previous topic - Next topic

megadrive

alex
С закладками проблема.
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("Hello, world\n");

return 0;
}


На второй строке ctrl-f2 жмем-устанавливается. А вот стереть уже не получается эту закладку. Версия: 1.51.18 x64.
И неплохо бы было иметь возможность в порядке добавления сортировать закладки.
Удобно бы было при разборе кода, так же, если к закладкам можно было свои комментарии добавлять.

Еще в конце функции после } не везде срабатывают добавления типа << void func() >>.

Еще в "List of labels in current file" хорошо бы прокрутку мышью по элементам сделать (ну или с shift или ctrl + мышь). А то крутит код на заднем плане сейчас. И хорошо бы переходить в этом списке на то место при его открытии, где сейчас курсор (ну или с shift или ctrl, например, переходить а если не нажато, то как сейчас).

alex

Привет,

QuoteС закладками проблема.
Поправил.

QuoteИ неплохо бы было иметь возможность в порядке добавления сортировать закладки.
Не знаю насколько это затребованный сценарий, но я гляну. Если будет не сложно добавлю.

QuoteУдобно бы было при разборе кода, так же, если к закладкам можно было свои комментарии добавлять.
Да, удобно :)

QuoteЕще в конце функции после } не везде срабатывают добавления типа << void func() >>.
Я думаю там все нормально. Если расстояние между началом/окончанием блока меньше чем 20 линий (в области видимости) то End Annotation не показывается.
http://wiki.hippoedit.com/options/xml/end-annotation-minimum

QuoteЕще в "List of labels in current file" хорошо бы прокрутку мышью по элементам сделать (ну или с shift или ctrl + мышь)
Оно и так есть, если не открывать Dropdown (просто скроллить над окошком с метками). А изменения выделения а выпадающем списке по скроллу, не совпадает со стандартным поведением для этого элемента (активен элемент под курсором и меняется  при движении). Или я чето не понял.

QuoteА то крутит код на заднем плане сейчас.
Это поправил - теперь не крутит.

QuoteИ хорошо бы переходить в этом списке на то место при его открытии, где сейчас курсор (ну или с shift или ctrl, например, переходить а если не нажато, то как сейчас).
Не понял.
HippoEDIT team
[url="http://www.hippoedit.com/"]http://www.hippoedit.com/[/url]

megadrive

Привет.
QuoteНе понял.
Ну находится курсор в какой то функции, вызвал я выпадающий список List of labels in current file. Предлагал что б, например, с нажатым ctrl при вызове, список сам проскроллился до функции где курсор. Типа показал где я смотрю сейчас.
QuoteА изменения выделения а выпадающем списке по скроллу, не совпадает со стандартным поведением для этого элемента (активен элемент под курсором и меняется  при движении)
Вот не понял зачем отличается. Вызвал список и скроль бы себе мышой его пока не ткнешь либо в код, либо в список и он не пропадёт. Ан нет-заноси мышь над бегунком, нажимай кнопку, тяни... Сколько лишних действий!

Ну и с большими файлами по другому бы как то работать... Программеры они логи многогиговые тоже могут смотреть ;) Загружать бы большие файлы блоками как то (как lister в тотал коммандере)-огромный файл весь сразу грузить долго и озу не резиновое.

alex

QuoteНу находится курсор в какой то функции, вызвал я выпадающий список List of labels in current file. Предлагал что б, например, с нажатым ctrl при вызове, список сам проскроллился до функции где курсор. Типа показал где я смотрю сейчас.
Ок. Понятно.

QuoteВот не понял зачем отличается. Вызвал список и скроль бы себе мышой его пока не ткнешь либо в код, либо в список и он не пропадёт. Ан нет-заноси мышь над бегунком, нажимай кнопку, тяни... Сколько лишних действий!
А Вы не отрывайте список, а скрольте над закрытым - действий меньше а работает как хочется ;)
Выделение активного элемента в выпадающем списке, зависит от положения курсора (находится под курсором). Соответственно скролл списка, должен в том числе двигать выделенный элемент, что не является естественным. Я посмотрю, если какое то вариант мне понравиться - то сделаю, если же нет то не обессудьте.

QuoteНу и с большими файлами по другому бы как то работать... Программеры они логи многогиговые тоже могут смотреть ;) Загружать бы большие файлы блоками как то (как lister в тотал коммандере)-огромный файл весь сразу грузить долго и озу не резиновое.
Оно все понятно и нужно, но внутренние структуры и алгоритмы не заточены для загрузки файлов порционно. Простейший пример не закрытый многострочный комментарий в начале файла, прокрученного в конец. Конечно все сделать можно, но работы очень много. Пока я не планирую.
HippoEDIT team
[url="http://www.hippoedit.com/"]http://www.hippoedit.com/[/url]

megadrive

Не показывает функции в "List of labels of cuurent file" дальше той, в которой есть комментарий // и /* */ следом.
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("Hello, world\n");
//1
/* 2 */
return 0;
}

bool test1()
{

}

alex

Последняя версия HE 1.51.33, последняя версия схеми:
[attachimg=1]
Не воспроизводится. Попробуйте с последней версией редактора и схеми.
forum.hippoedit.com/beta-version-test/beta-1-51/
HippoEDIT team
[url="http://www.hippoedit.com/"]http://www.hippoedit.com/[/url]

megadrive

Да, как то нестабильно воспроизводится. Создал новый, первый коммент добавил, второй, функцию.. Всё последнее по версиям. Есть файл, на котором воспроизводится стабильно и пропадает эффект после удаления // перед /* */
Но я его не могу послать :(
[attachimg=1]

megadrive

Очень странное поведение :(
Даже на том файле где повторяется отсечка функций, стоит изменить хоть как то файл и снова посмотреть список функций-уже все функции видны становятся.
Установлен НЕ как портабл на win7 x64 если что.

alex

я по моему воспроизвел.
там никак с комментариями не связано - можно воспроизвести просто на новом документе, если добавить функцию test в конце - он на появляется, пока до нее что-нибудь не поменяешь.

поправлю. думаю дело не в схеме, а в оптимизации пересчета меток.

P.S. блин, ну сколько раз я просил - начинайте новую тему для новой проблемы! не пост, а мусорка.
HippoEDIT team
[url="http://www.hippoedit.com/"]http://www.hippoedit.com/[/url]

megadrive

Вобщем, не показывает в конце находящиеся функции в некоторых исходниках на С++(MS) до первой правки файла. Пробел вставишь в любое место-сразу все отображаться начинает. Версия 1.60.18 х64.

alex

Если в некоторых - надо пример.
Может дело в размере файлов?
HippoEDIT team
[url="http://www.hippoedit.com/"]http://www.hippoedit.com/[/url]

megadrive


alex

Да, я знаю - размер не главное :)
Посмотрю -> воспроизвел, довольно странно.
HippoEDIT team
[url="http://www.hippoedit.com/"]http://www.hippoedit.com/[/url]

alex

Надо добавить ")" после "type_extDevTrouble" в первом комментарии.
Вылетает regexp поиск из-за переполнения стека. Только в x64.

Другой вариант, упростить регулярное выражение для функций в C++.
Замените следующее определение метки в cbase_spec.xml:
Code (xml) Select

      <Label group="Function" match="(?:^|[\s;}])([A-Za-z_][\w*&amp;]*)\s+([~\w]+)\s*\(((?:[^\(\)]|\\r|\\n|\((?-1)\))*+)\)(\s+\w+)?\s*\{" name="\2" descr="\1 \2(\3)\4" scope="1" image="18" style="function">
        <Skip if="\2" equal="if"/>
        <Skip if="\2" equal="while"/>
        <Skip if="\2" equal="switch"/>
        <Skip if="\2" equal="do"/>
      </Label>

На это (убрана рекурсия "\((?-1)\)" ):
Code (xml) Select

      <Label group="Function" match="(?:^|[\s;}])([A-Za-z_][\w*&amp;]*)\s+([~\w]+)\s*\(((?:[^\(\)]|\\r|\\n)*+)\)(\s+\w+)?\s*\{" name="\2" descr="\1 \2(\3)\4" scope="1" image="18" style="function">
        <Skip if="\2" equal="if"/>
        <Skip if="\2" equal="while"/>
        <Skip if="\2" equal="switch"/>
        <Skip if="\2" equal="do"/>
      </Label>

Но это определение не будет ловить функции с вложенными скобками. Например:
Code (cpp) Select

bool coreSonar( a = fun())
{
...
}
HippoEDIT team
[url="http://www.hippoedit.com/"]http://www.hippoedit.com/[/url]