Latest post of the previous page:
Хотелось бы иметь в To код \u для вставки имени текущего пользователя (аналог @@USER_NAME@@).True Template — использование текстовых шаблонов при написании кода
- Tim Sobolev
- Posts: 729
- Joined: Fri 01 Apr, 2005 14:46
- Location: Украина
- Has thanked: 1 time
- Been thanked: 7 times
Помогите, плиз.
Хочу запользовать этот плагин для индентации и кое-какого форматирования (идентация по 4 пробела при длине таба в 8 пробелов), чистка концов строк (пробелы в конце) и т.д.
Задачка: когда нажимаешь два ентера при включеной автоиндентации получаются две пустые строки из одних пробелов (или табуляций), которые были вставлены автоматически для индентации (это фар так себя сам ведет, независимо от плугина). Хочется, чтобы при нажатии Энтера в строке, состоящей только из пробелов, курсор переходил на следующуюю строчку с сохранением индентации, но предыдуцая сторочка становилась пустой (только перевод строки, без лишних пробелов).
Беру файлик "true-source-c++-base.xml" и вставляю туда строчку:
При срабатывании фар падает. Видимо, хвостовая рекурсия переполнила стек. Хотя ее быть не должно, т.к. согласно документации:
Если меняю строчку на :
Оно нифига не удаляет и оставляет мне выделенный блок.
Помогло вот это:
Работает как надо.
Но появилась другая проблема. Перестала работать хитрая индентация. Точнее, те ее действия, которые должны происходить по нажатию "Enter". Скажем, Enter после "{" делает обычную индентацию, без дополнительного отступа (я вырубил "автораскрывание" скобок, и вообще все автораскрывание, оставил только индентацию).
Как заставить работать этот макрос с сохранением Smart Indent?
Хочу запользовать этот плагин для индентации и кое-какого форматирования (идентация по 4 пробела при длине таба в 8 пробелов), чистка концов строк (пробелы в конце) и т.д.
Задачка: когда нажимаешь два ентера при включеной автоиндентации получаются две пустые строки из одних пробелов (или табуляций), которые были вставлены автоматически для индентации (это фар так себя сам ведет, независимо от плугина). Хочется, чтобы при нажатии Энтера в строке, состоящей только из пробелов, курсор переходил на следующуюю строчку с сохранением индентации, но предыдуцая сторочка становилась пустой (только перевод строки, без лишних пробелов).
Беру файлик "true-source-c++-base.xml" и вставляю туда строчку:
Code: Select all
<Expand Pattern="[\t ]+" Key="Enter" At="[\t ]+\p" To="\{ShiftHome}\{CtrlDel}\r" />
\r исполняет только правила индентации, к которым Expand по идее не относится.\n - Enter
\r - Enter (с учетом Smart Indent)
Если меняю строчку на :
Code: Select all
<Expand Pattern="[\t ]+" Key="Enter" At="[\t ]+\p" To="\{ShiftHome}\{CtrlDel}\n" />
Помогло вот это:
Code: Select all
<Expand Pattern="[\t ]+" Key="Enter" At="[\t ]+\p" To="\{ShiftHome}\{CtrlDel}\{Enter}" />
Но появилась другая проблема. Перестала работать хитрая индентация. Точнее, те ее действия, которые должны происходить по нажатию "Enter". Скажем, Enter после "{" делает обычную индентацию, без дополнительного отступа (я вырубил "автораскрывание" скобок, и вообще все автораскрывание, оставил только индентацию).
Как заставить работать этот макрос с сохранением Smart Indent?
Не работают два привила Expand назначенные на одну кнопку:
Работает только первое.
Не работает Expand по вводу табуляции:
Code: Select all
<Expand Key="Tab" At="[\t]* \p" To="\b\b\t" />
<Expand Key="Tab" At="[\t]*\p" To=" " />
Не работает Expand по вводу табуляции:
Code: Select all
<Expand Pattern="\t" Imm="\t" At=".*\p" To="zzz" />
(Тихо сам с собой)
Залез в исходники, сделал поддержку нескольких правил на одной кнопке. Наконец-то получил "Fake half tabs" из Midnignt Commander'а (индентация в 4 пробела с сохранением стандартной табуляции). Плюс автоиндентация и уменьшение индентации по BackSpace.
Не понятно только где откопали такую кривую библиотечку regexp'ов. Неужели в Colorer'e? Он, вроде не страдал особыми странностями.
1. Дебаг версия падает по переполнению стека при попытке сравнить строку "// <4093 пробела> " с регэкспом /\/\/.*/. Т.к. строка расширяется до 4096 символов автоматически, не приходится надеяться на то, что у пользователя такого не произойдет если в его файлах строки будут короче. Для релиз версии стека еще хватает.
Собственно, глюк заключается в том, что размер стека не должен зависеть от длины строки (стек допуксается использовать только для возвратов на применение правила, а не на входной символ). А тут операция ".*" реализована хвостовой рекурсией а не итерацией. Т.е. стек жрется по уровню на каждый входной символ, а не на два уровня (на выражение "((.)*)" и на подвыражение "(.)"), как положено.
2. При попытке решить проблему 1.) изменил
#define MAX_STR_LEN 4096
на
#define MAX_STR_LEN 1024
После чего плугин начал падать из-за повреждение стека (запись за границу массива. Воистину magic number...
Залез в исходники, сделал поддержку нескольких правил на одной кнопке. Наконец-то получил "Fake half tabs" из Midnignt Commander'а (индентация в 4 пробела с сохранением стандартной табуляции). Плюс автоиндентация и уменьшение индентации по BackSpace.
Не понятно только где откопали такую кривую библиотечку regexp'ов. Неужели в Colorer'e? Он, вроде не страдал особыми странностями.
1. Дебаг версия падает по переполнению стека при попытке сравнить строку "// <4093 пробела> " с регэкспом /\/\/.*/. Т.к. строка расширяется до 4096 символов автоматически, не приходится надеяться на то, что у пользователя такого не произойдет если в его файлах строки будут короче. Для релиз версии стека еще хватает.
Собственно, глюк заключается в том, что размер стека не должен зависеть от длины строки (стек допуксается использовать только для возвратов на применение правила, а не на входной символ). А тут операция ".*" реализована хвостовой рекурсией а не итерацией. Т.е. стек жрется по уровню на каждый входной символ, а не на два уровня (на выражение "((.)*)" и на подвыражение "(.)"), как положено.
2. При попытке решить проблему 1.) изменил
#define MAX_STR_LEN 4096
на
#define MAX_STR_LEN 1024
После чего плугин начал падать из-за повреждение стека (запись за границу массива. Воистину magic number...
Re: True Template
TrueTemplate 2.09
не работает:
работает:
не работает:
Code: Select all
<Navigation Mask="\\include\{(.+)\}" Pos="1" Path="." Suffixes=".tex" Rect="0%,0%,100%,100%" Viewer="0"/>
Code: Select all
<Navigation Mask="\\include\{(.+)\}" Pos="1" Path="." Rect="0%,0%,100%,100%" Viewer="0"/>
Re: True Template
А возможно ли
1. штатными средствами плагина натравить например на текущее выделение замену по регэкспам
2. передать \ч параметры в вызове внешней команды через \o
1. штатными средствами плагина натравить например на текущее выделение замену по регэкспам
2. передать \ч параметры в вызове внешней команды через \o
вопрос новичка по truetemplate
Добрый день
пара вопросов:
1. в выпадающем списке походящих под введенную последовательность вариантов (в моем случае - список функций) есть возможность прирутить (или это уже есть и просто неумею пользоваться) быстрый выбор по первым набранным буквам (в некоторых случаях список велик и прокручивать разыскивая "на глаз" долго)?
2. может кто то пробовал написать обработку для *.h файлов для генерации xml с правилами?
Заранее спасибо
пара вопросов:
1. в выпадающем списке походящих под введенную последовательность вариантов (в моем случае - список функций) есть возможность прирутить (или это уже есть и просто неумею пользоваться) быстрый выбор по первым набранным буквам (в некоторых случаях список велик и прокручивать разыскивая "на глаз" долго)?
2. может кто то пробовал написать обработку для *.h файлов для генерации xml с правилами?
Заранее спасибо
Re: True Template
такой вот баг (заметил случайно):
берем голый фар (Far171.b2449.x86.rar)
устанавливаем TrueTemplate_2_09.7z
создаем файл test.sql
и с самого начала строки вводим знак '-' (минус) 4194 раза
при вводе 4195-го минуса - плагин падает
При дальнейшем вводе минусов падает Colorer (если он установлен)
берем голый фар (Far171.b2449.x86.rar)
устанавливаем TrueTemplate_2_09.7z
создаем файл test.sql
и с самого начала строки вводим знак '-' (минус) 4194 раза
при вводе 4195-го минуса - плагин падает
Code: Select all
╔════════════ Ошибка вызова плагина ════════════╗
║ Исключительная ситуация: ║
║ "Нарушение доступа (запись в 0x2D3FB8DD)" ║
║ Адрес исключения - 0x1001EA0F, модуль: ║
║ C:\Far-Test\Plugins\TrueTemplate\true-tpl.dll ║
╟───────────────────────────────────────────────╢
║ Плагин будет выгружен! ║
║ Продолжить ║
╚═══════════════════════════════════════════════╝
- WARP ItSelf
- Самый умный
- Posts: 1011
- Joined: Tue 15 Mar, 2005 23:19
- Contact:
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: True Template
да с тру темлейт — боян вообще-то, там где-то статические буфера под строки, раньше меньше были, сейчас видимо увеличили.WARP ItSelf wrote:d.k.Brazz
Re: True Template
Та как-то и не напрягает вовсеzg wrote:да с тру темлейт — боян вообще-то, там где-то статические буфера под строки, раньше меньше были, сейчас видимо увеличили.WARP ItSelf wrote:d.k.Brazz
наткнулся когда пытался локализовать аналогичный баг в колорере из-за которого падает фар
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: True Template
ну меня не то чтобы напрягает, но неприятно.d.k.Brazz wrote:Та как-то и не напрягает вовсе
Re: True Template
по любезному совету CrOm'а из соседней ветки проверил с точками - фар молча захлопывается после ввода 4099й точки в строке в файле с расширением txt
причем аналогично ведет себя и с минусами в sql если вводить минусы не копипастом поблочно а после 4098го ввести еще один минус - точно так же тихо падает фар
причем аналогично ведет себя и с минусами в sql если вводить минусы не копипастом поблочно а после 4098го ввести еще один минус - точно так же тихо падает фар
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: True Template
ну я ж сказал, буфер:d.k.Brazz wrote:по любезному совету CrOm'а из соседней ветки проверил с точками - фар молча захлопывается после ввода 4099й точки в строке в файле с расширением txt
причем аналогично ведет себя и с минусами в sql если вводить минусы не копипастом поблочно а после 4098го ввести еще один минус - точно так же тихо падает фар
Code: Select all
#define MAX_STR_LEN 4096
char s[MAX_STR_LEN];
lstrcpyn(s, gs.StringText, gs.StringLength+1);
- Andrey Budko
- Posts: 1203
- Joined: Fri 01 Apr, 2005 14:03
- Contact:
Re: True Template
автор этих строк забыл как работает lstrcpyn?zg wrote:Code: Select all
char s[MAX_STR_LEN]; lstrcpyn(s, gs.StringText, gs.StringLength+1)