View previous topic :: View next topic |
Author |
Message |
lopotun74
Joined: 08 Apr 2013 Posts: 9 Location: Jerusalem
|
Posted: Mon Apr 08, 2013 9:47 am Post subject: Можно ли по-своему показать non-prinatable символ? |
|
|
Есть файл, в котором в качестве разделителя используется SOH символ (hex код 0001). Сейчас этот символ показывается как пробел, т.е. как пустое место.
Можно ли заменить презентацию такого символа? Желательно, на перевод стоки. Хотелось бы именно изменить то как он виден на экране, не делая "Replace All" (потому как нужно просматривать очень много таких файлов и закрывать их без сохранения). |
|
Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
|
Back to top |
|
 |
lopotun74
Joined: 08 Apr 2013 Posts: 9 Location: Jerusalem
|
Posted: Mon Apr 08, 2013 12:45 pm Post subject: |
|
|
Спасибо. Идея понятна: надо создать свой фонт, в котором символ с кодом 1 представлен в виде перевода строки. Пошёл искать как это делается. |
|
Back to top |
|
 |
lopotun74
Joined: 08 Apr 2013 Posts: 9 Location: Jerusalem
|
Posted: Tue Apr 09, 2013 7:24 am Post subject: |
|
|
Не так-то это просто оказалось. Я могу изменить внешний вид символа, но не его значение. То есть, а не могу сделать в моём фонте, чтобы, например, символ "М" превращался в перевод строки.
А есть ли в AP что-то вроде фильтра, через который проходит файл при его открытии? В таком фильтре можно было бы сделать все нужные замены. |
|
Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
Posted: Wed Apr 10, 2013 4:44 pm Post subject: |
|
|
lopotun74
После открытия файла можно применять, например, такой скрипт:
ViewWithFilter.js Code: | 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: | CmdLineEnd=/Call("Scripts::Main", 1, "ViewWithFilter.js") |
|
|
Back to top |
|
 |
lopotun74
Joined: 08 Apr 2013 Posts: 9 Location: Jerusalem
|
Posted: Thu Apr 11, 2013 7:30 am Post subject: |
|
|
Спасибо! Заработало!
А у AkelPad API открытый? Это чтобы проверку на расширение файла прикрутить. А то ведь сейчас он все файлы в readonly открывает. |
|
Back to top |
|
 |
lopotun74
Joined: 08 Apr 2013 Posts: 9 Location: Jerusalem
|
Posted: Thu Apr 11, 2013 8:29 am Post subject: |
|
|
А можно вообще привязать скрипт и к закрытию файла?
Тогда бы при открытии я делал
Code: | AkelPad.TextReplace(0, "\x01", "\n\x01", 0x200001 /*FRF_DOWN|FRF_BEGINNING*/, true); | , а при закрытии обратно возвращал
Code: | AkelPad.TextReplace(0, "\n\x01", "\x01", 0x200001 /*FRF_DOWN|FRF_BEGINNING*/, true); | Тогда не надо было бы делать файл readonly. |
|
Back to top |
|
 |
Instructor Site Admin
Joined: 06 Jul 2006 Posts: 6250
|
Posted: Sun Apr 14, 2013 10:30 am Post subject: |
|
|
lopotun74 wrote: | А у AkelPad API открытый? | - Scripts-Rus.txt - описание методов Scripts плагина.
- AkelDLL.h - описание сообщений, структур, команд, констант программы.
- AkelEdit.h - описание сообщений, структур, констант для работы с окном редактирования напрямую.
lopotun74 wrote: | А можно вообще привязать скрипт и к закрытию файла?. | Скрипт необходимо сделать резидентным. Можно взять за основу - AutoScript-Sample2.js. |
|
Back to top |
|
 |
|