Page 1 of 1

Можно ли по-своему показать non-prinatable символ?

Posted: Mon Apr 08, 2013 9:47 am
by lopotun74
Есть файл, в котором в качестве разделителя используется SOH символ (hex код 0001). Сейчас этот символ показывается как пробел, т.е. как пустое место.
Можно ли заменить презентацию такого символа? Желательно, на перевод стоки. Хотелось бы именно изменить то как он виден на экране, не делая "Replace All" (потому как нужно просматривать очень много таких файлов и закрывать их без сохранения).

Posted: Mon Apr 08, 2013 11:49 am
by Instructor

Posted: Mon Apr 08, 2013 12:45 pm
by lopotun74
Спасибо. Идея понятна: надо создать свой фонт, в котором символ с кодом 1 представлен в виде перевода строки. Пошёл искать как это делается.

Posted: Tue Apr 09, 2013 7:24 am
by lopotun74
Не так-то это просто оказалось. Я могу изменить внешний вид символа, но не его значение. То есть, а не могу сделать в моём фонте, чтобы, например, символ "М" превращался в перевод строки.

А есть ли в AP что-то вроде фильтра, через который проходит файл при его открытии? В таком фильтре можно было бы сделать все нужные замены.

Posted: Wed Apr 10, 2013 4:44 pm
by Instructor
lopotun74
После открытия файла можно применять, например, такой скрипт:

Code: Select all

var hMainWnd=AkelPad.GetMainWnd();

if (!AkelPad.GetEditModified(0))
{
  AkelPad.TextReplace(0, "\x01", "\n", 0x200001 /*FRF_DOWN|FRF_BEGINNING*/, true);
  if (!AkelPad.GetEditReadOnly(0)) AkelPad.Command(4216 /*IDM_VIEW_READONLY*/);
  AkelPad.SendMessage(hMainWnd, 1229 /*AKD_SETMODIFY*/, 0, false);
}


Можно это автоматизировать, если просматриваемые файлы имеют определенные имена или расширение, то в скрипт дописать проверку на имя/расширение, а сам вызов скрипта прописать в AkelPad.ini

Code: Select all

CmdLineEnd=/Call("Scripts::Main", 1, "ViewWithFilter.js")

Posted: Thu Apr 11, 2013 7:30 am
by lopotun74
Спасибо! Заработало!

А у AkelPad API открытый? Это чтобы проверку на расширение файла прикрутить. А то ведь сейчас он все файлы в readonly открывает.

Posted: Thu Apr 11, 2013 8:29 am
by lopotun74
А можно вообще привязать скрипт и к закрытию файла?
Тогда бы при открытии я делал

Code: Select all

AkelPad.TextReplace(0, "\x01", "\n\x01", 0x200001 /*FRF_DOWN|FRF_BEGINNING*/, true);
, а при закрытии обратно возвращал

Code: Select all

AkelPad.TextReplace(0, "\n\x01", "\x01", 0x200001 /*FRF_DOWN|FRF_BEGINNING*/, true);
Тогда не надо было бы делать файл readonly.

Posted: Sun Apr 14, 2013 10:30 am
by Instructor
lopotun74 wrote:А у AkelPad API открытый?
- Scripts-Rus.txt - описание методов Scripts плагина.
- AkelDLL.h - описание сообщений, структур, команд, констант программы.
- AkelEdit.h - описание сообщений, структур, констант для работы с окном редактирования напрямую.
lopotun74 wrote:А можно вообще привязать скрипт и к закрытию файла?.
Скрипт необходимо сделать резидентным. Можно взять за основу - AutoScript-Sample2.js.