True Template — использование текстовых шаблонов при написании кода

Здесь можно обсудить ваш любимый плагин.
User avatar
Raistlin
Posts: 750
Joined: Wed 16 Mar, 2005 16:01
Has thanked: 3 times
Been thanked: 1 time

True Template

Post by Raistlin »

Latest post of the previous page:

Можно ли сделать так, чтобы паттерн разворачивался в значение, только если строка не начинается с rem, возможно с ведущими пробелами? Пробовал так:

Code: Select all

<Expand Pattern="_GetL|en"       At="(?! *rem).*\b\p" To="..."/>
- вообще не разворачивает никогда.
Magically yours
Raistlin
pankaj_m05
Posts: 1
Joined: Fri 18 Dec, 2020 05:29

True Template

Post by pankaj_m05 »

Hello, I have been searching for months but can't seem to figure out how to use code snippets in Far using TrueTemplate. I saw Gennady (tourist) doing it in his streams where he would type a particular word in a CPP file (say Mint) and his template would get pasted there. Please help me.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

True Template

Post by citRiks »

Может странно работать при сохранении символа Tab, а не пробелов вместо него.
вот это бы подлечили, если можна?
Лублу я табы очинь ..
Orfa
Posts: 14
Joined: Sun 21 Jun, 2015 08:04
Location: Spain
Has thanked: 1 time
Been thanked: 1 time

True Template

Post by Orfa »

Есть очень нехороший баг в паре мест с использованием неинициализированной памяти при матчинге макроподстановок. Конечный эффект зависит от того, у кого что в этой неинициализированной памяти было (на стеке), но в общем случае это рэндомная макроподстановка на случайные нажатия клавиш типа Ctrl.

Проявляется в разных местах, например, если при создании нового .txt нажать первой клавишей Ctrl или любой другой модификатор. Другое проявление бага - повтор предыдущего нажатия Enter на клавиши типа Ctrl и тп.

Суть бага в том, что FSF.FarInputRecordToName не изменяет результирующий буфер, если не может определить имя клавиши (как то происходит на пресловутый Ctrl). В итоге FindMacroKey постоянно сравнивает неинициализированную память с именем хоткея макросов.

Место бага 1 (рэндомный матчинг макро):

Code: Select all

static const TMacro *FindMacroKey (const TLang *lng, const INPUT_RECORD *Rec)
{
	wchar_t rKeyp[MAX_STR_LEN];
	FSF.FarInputRecordToName (Rec, rKeyp, MAX_STR_LEN);
	for (size_t i = 0; i < lng->macroColl.getCount(); i++)
	{
		const TMacro	*mm = lng->macroColl[i];
		if (wcscmp(mm->FARKey, rKeyp) == 0) return (mm);
	}

return (nullptr);
}
место бага 2 (повтор предыдущего нажатия клавиши):

Code: Select all

			wchar_t fKey[256];
			FSF.FarInputRecordToName (&Info->Rec, fKey, _countof(fKey));
			vState &= (SHIFT_PRESSED | RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED | RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED);

		bool spORret = ((wcscmp(fKey, L"Enter") == 0) || (wcscmp(fKey, defExpandFKey) == 0));

Пофиксить можно так:
(macro.cpp)

Code: Select all

static const TMacro *FindMacroKey (const TLang *lng, const INPUT_RECORD *Rec)
{
    wchar_t rKeyp[MAX_STR_LEN];
    rKeyp[0] = 0;
    if (!FSF.FarInputRecordToName (Rec, rKeyp, MAX_STR_LEN))
        return nullptr;

for (size_t i = 0; i < lng->macroColl.getCount(); i++)
{
    const TMacro    *mm = lng->macroColl[i];
    if (mm->FARKey.empty())
        continue;

    if (wcscmp(mm->FARKey, rKeyp) == 0)
        return (mm);
}

return (nullptr);
}
и в editorinput.cpp:

Code: Select all

            fKey[0] = 0;
            FSF.FarInputRecordToName (&Info->Rec, fKey, _countof(fKey));
Last edited by Orfa on Sun 16 Oct, 2022 14:59, edited 2 times in total.
Orfa
Posts: 14
Joined: Sun 21 Jun, 2015 08:04
Location: Spain
Has thanked: 1 time
Been thanked: 1 time

True Template

Post by Orfa »

Пересобранная версия 3.0.2 с фиксом и бэкдором
TrueTemplate_3.0.2_fixed.7z
(189.44 KiB) Downloaded 91 times
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

True Template

Post by Tim Sobolev »

tt_macro_fix.patch
Для ленивых diff вышеупомянутого с git
(1.19 KiB) Downloaded 54 times
Post Reply

Return to “Обсуждение плагинов”