Page 2 of 2
Posted: Wed May 22, 2013 11:34 am
by Instructor
[Yustas.NeO] wrote:...но может у кого есть идеи более элегантного решения?
Можно по аналогии с вариантом от
Andrey_A_A использовать поиск по кругу:
Code: Select all
AkelPad.TextFind(0, pArgLine.substr(5), 0x08000001 /*FRF_DOWN|FRF_CYCLESEARCH*/);
Andrey_A_A wrote:If .IsOldWindows() Then TCHAR = "A" Else TCHAR = "W" End If
Недавно появился vbTCHAR.
FeyFre
В данном случае должен помочь перенос по словам.
Posted: Wed May 22, 2013 12:57 pm
by FeyFre
Instructor, тут вопрос в следующем: почему при обычном запуске АР(восстановление документов из сессии) такого зацикливания не происходит(в т.ч. при стократном переключении на вкладку и обратно), а при запуске с этим файлом в качестве аргумента зацикливается? Вроде бы особо ничего не меняется?
Да, попробовал включил перенос по словам. Перенеслось. Но закрытие AP превращается в ту же самую процедуру ожидания и накаливания CPU. После принудительного убивания процесса, последующий обычный запуск АР(без аргумента, просто загружается сессия) также зацикливается на этом файле(не зацикливался). Да и просто: очистить сессию, открыть пустой АР, открыть файл - висяк(при выключенном переносе открывалось мгновенно). В общем не помогло

А отключать CodeFold из автозапуска не хочется.
Posted: Wed May 22, 2013 1:30 pm
by Instructor
FeyFre
Coder::Settings -> CodeFold1 -> Показывать список -> Авто + Лимит блоков поставить, например, "10000".
Posted: Wed May 22, 2013 2:56 pm
by FeyFre
Instructor, попробовал. Открытие файла тепер шустрое

Но теперь вылезла такая странность:
1. Открыт этот файл. Закрыл его(нет открытых файлов, PMDI). Закрыл АР. Всё норма.
2. Открываю файл по F4. Открылось шустро.

3. Закрываю АР. Т.е. плагин сессий его ещё помнит.
4. Открываю файл по F4 опять. Опять наблюдаю процедуру накала CPU.

Естесвенно лими на кол-во волдов стоит. Похоже палгин сессий тут вмешивается? Что интересно, если в п.4. открывать дургой файл то тоже всё шустро(наверное не обрабатывает тот большой файл). В MDI режиме впринципе та же ситуация.
Posted: Wed May 22, 2013 3:07 pm
by DV
FeyFre,
я бы всё-таки предложил собрать отладочные версии AkelPad, Coder и Sessions и посмотреть под отладкой, что происходит. (хотя сам я часто ленюсь так делать)
Posted: Wed May 22, 2013 4:01 pm
by FeyFre
DV, ну дык АР и собран, и эти плаги тоже перестроил только-что

С отлад. инфой, с символами, и студийный отладичк корректно подхватывает исходники, и даже настроил всасывание отлад.инфы системных библиотек с серверов MS. Вижу что циклится оно в связном списке фолдов, или в списке отслеживаемых точек(AE_StackPointInsert), ну в общем в коде связанном с этими точками. Да и строя с отл. инфой(/ZI компилятору, /DEBUG линкеру) приходится убирать оптимизацию(/O1 не совместим с /ZI, откзывается строится), а это опять таки влияет на результат. В общем как-то я с ходу не соерентируюсь что к чему. Многовато наверное 10000 фолдов. И 1000 много. И 100 много. И 10.
Instructor
Coder::Settings -> CodeFold1 -> Показывать список -> Авто + Лимит блоков поставить, например, "10000".
Я только сообразил что оно у меня стояло None. Да и не долго музыка играла. Зависает при каждом удобном случае.
В общем воздержусь я пока от открытия того файла

Posted: Wed May 22, 2013 8:31 pm
by Andrey_A_A
Недавно появился vbTCHAR.
Спасибо
Instructor, видел, ещё не тестировал, вставлю обязательно...
Posted: Thu May 23, 2013 7:44 pm
by Instructor
Posted: Fri May 24, 2013 11:01 am
by FeyFre
Во, теперь летает, в в числе и при выключенном переносе строк

И замена ">" ">\n" в этом файле не подвешивает

Posted: Sat May 25, 2013 6:19 pm
by DV
Обнаружил некоторую странность при поиске с регулярными выражениями.
Есть текст:
Code: Select all
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
Ищется
std.+f
В зависимости от положения каретки, выделяется либо
#include <
stdio.h>
#include <stdlib.h>
#include <stddef.h>
либо
#include <stdio.h>
#include <
stdlib.h>
#include <stddef.h>
либо
#include <stdio.h>
#include <stdlib.h>
#include <
stddef.h>
При поиске с начала файла выделяется всегда первый вариант.
Поиск
std.+?f приводит к тем же результатам.
А как же добиться более, на мой взгляд, логичного результата поиска, выделяющего всегда только минимальную совпадающую часть -
stddef.h ?
Posted: Sat May 25, 2013 9:02 pm
by opk44
DV
Меня сбивает с толку буква "f" в поисковом шаблоне. Расширение ".h" нужно цеплять или нет?.
Итак, возможно я не вполне вник в суть проблемы, потому начнем с очевидного:
Точка = любой символ (буквально ЛЮБОЙ, т.е. со всеми "чудесами" в виде скобочек, пробелов и переводов строк).
Плюс = один или больше. Поэтому результат поиска совершенно логичен.
Теперь, что мы хотим? Если найти любое слово начинающееся на "std.....", тогда можно просто снабдить Вашу поисковую конструкцию ограничителем границы слова: "\b", т.е. вот так: std.+\b
Если найти любое слово начинающееся на "std" и заканчивающеся на "f" ("std....f"), тогда отказываемся от "любого символа" и переходим к "любым БУКВАМ" вот так: std[a-z]+f
Если нужно цеплять и расширение ("std....f.h"), то наверное так: std[a-z]+f\.h
Если "f" в слове не принципиально, тогда std[a-z]+\.h или так std[a-z\.]+h или даже так std\S+h (последнее весьма не надежно, поскольку "h" может встретиться и в самом слове, а не обязательно в расширении)
UPD.
В случае с использованием в поисковом шаблоне точки (т.е. "любых символов") чтобы решить проблему слишком длинных совпадений, можно еще воспользоваться вместо плюса принудительным ограничением макимального числа "повторов".
Например, "не более восьми любых символов": std.{,8}f
Posted: Sun May 26, 2013 8:55 am
by Instructor
DV
Для конкретного примера можно еще std[^\n]+f