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

Russian main discussion
Post Reply
  • Author
  • Message
Offline
Posts: 17
Joined: Mon Apr 08, 2013 8:46 am
Location: Jerusalem

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

Post by lopotun74 »

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

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »


Offline
Posts: 17
Joined: Mon Apr 08, 2013 8:46 am
Location: Jerusalem

Post by lopotun74 »

Спасибо. Идея понятна: надо создать свой фонт, в котором символ с кодом 1 представлен в виде перевода строки. Пошёл искать как это делается.

Offline
Posts: 17
Joined: Mon Apr 08, 2013 8:46 am
Location: Jerusalem

Post by lopotun74 »

Не так-то это просто оказалось. Я могу изменить внешний вид символа, но не его значение. То есть, а не могу сделать в моём фонте, чтобы, например, символ "М" превращался в перевод строки.

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

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post 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")

Offline
Posts: 17
Joined: Mon Apr 08, 2013 8:46 am
Location: Jerusalem

Post by lopotun74 »

Спасибо! Заработало!

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

Offline
Posts: 17
Joined: Mon Apr 08, 2013 8:46 am
Location: Jerusalem

Post 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.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

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