Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Script Content Plugin
Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 14, 15, 16  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Thu Nov 07, 2013 12:29    Post subject: Reply with quote

Вот, решил проблему с критерием "юникодности" имени файла:
Code:
var   // проверяем на юникодность имена файлов, переданных короткими (8.3) именами
 a=new ActiveXObject('Shell.Application'),
 c=new ActiveXObject('MSScriptControl.ScriptControl'),
 f=new ActiveXObject('Scripting.FileSystemObject'),
 n=a.NameSpace(f.getParentFolderName(filename));

c.language='VBScript';
c.allowUI=false;
c.addCode(
'Function FC(E)\n'+
'  FC = ""\n'+
'  For i = 1 to Len(E)\n'+
'    FC = FC & Chr(Asc(mid(E,i,1)))\n'+
'  Next\n'+
'End Function\n'
);

Content=fb(fa(filename));

function fa(e){return(n.ParseName(f.getFileName(e)).path);}
function fb(e){var u=c.run('fc',e);return(f.fileExists(u)||f.folderExists(u));}
Asc, похоже, использует "общевиндовский" механизм замены символов Unicode, а видно файл после преобразования имени, или нет - пусть сама винда и разбирается. Попутно обнаружилось ещё одно воплощение проблемы с именами в плагине: папка с именем "Õ" не обрабатывается вообще, даже скриптом
Code:
Content=1;


Добавлено спустя 10 минут:

На VBS, пожалуй, покороче будет, но сейчас не до этого. Кстати, нет ли в VBS команды, преобразующей строку Unicode в строку ANSI целиком, не по одному символу в цикле?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 09, 2013 15:22    Post subject: Reply with quote

Serge Yolkin wrote:
короткого (8.3), которое плагин радостно передаёт скрипту
Забыл спросить, это тоже только на 8-ке? На семёрке имя полностью передаётся.

И я правильно понимаю, что ты вернулся к варианту проверки по знакам вопроса? Если да, то по логике должно было бы хватить этого:
Code:
Content = "Нет"
For i = 1 to Len(FileName)
  If Chr(Asc(Mid(FileName, i, 1))) = "?" Then
    Content = "Да" : Exit For
  End If
Next
Хотя вместо Да плагин возвращает почему-то пустое значение. Confused
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Nov 09, 2013 18:18    Post subject: Reply with quote

Flasher
Имя, например, "ЯÕ" у меня на всём коротким (точнее, более длинным, но валидным) передаётся, а "нормальные" - да, на семёрке нормально, на восьмёрке - коротким. Спасибо, что обратил внимание.

А проверка - нет, не по "?". Полное имя преобразуется с помощью Asc, результат скармливается fso.fileExists()|folderExists(). Если винда (точнее, её fileSystemObject) объект нашла - считаем имячко "ансишным", поскольку старые программы его тоже найдут. Если не нашла - что-то здесь не так...

Добавлено спустя 4 минуты:

Сейчас я конвертирую полное имя в цикле посимвольно, потому и спрашиваю:
Quote:
Кстати, нет ли в VBS команды, преобразующей строку Unicode в строку ANSI целиком, не по одному символу в цикле?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 09, 2013 18:24    Post subject: Reply with quote

Serge Yolkin
Wait a second. Но ведь по логике винда найдёт все имена, где нет знаков вопроса? Или нет?

Вопрос видел. Стандартных методов преобразования нет.

Боюсь, что у плагина проблемы с возвратом юникодных имён. К примеру àéÿüĄŀĦĤŕž.ext +
Code:
Content = CreateObject("Shell.Application").NameSpace(CreateObject("WScript.Shell").CurrentDirectory).ParseName(filename).Name
даёт пустое значение.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Nov 09, 2013 18:44    Post subject: Reply with quote

Flasher wrote:
винда найдёт все имена, где нет знаков вопроса
Не скажи... Пока я со всякими смайликами-солнышками игрался, на какие только варианты не насмотрелся. Да и цель - определить валидность имён для старых программ - так достигается более точно, чем построение собственных предпроложений.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sat Nov 09, 2013 18:53    Post subject: Reply with quote

Serge Yolkin
См. дописку. У тебя есть с этим проблемы?
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sat Nov 09, 2013 18:57    Post subject: Reply with quote

Да, и это не единственный вариант имени, которое не обрабатывается плагином совсем. Даже, если скрипт не трогает имена, а делает что-нибудь другое. Придётся подождать юникодной версии плагина.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sun Nov 10, 2013 20:35    Post subject: Reply with quote

Ай нид хелп: в инишнике к старой версии был ключик, позволяющий обрабатывать и папки тоже, инишник в ходе экспериментов сильно пострадал, а в инишнике к последней версии этого ключа нет. Может кто-нибудь напомнить?
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10268
Location: Россия, Саратов

Post (Separately) Posted: Sun Nov 10, 2013 21:20    Post subject: Reply with quote

Serge Yolkin
Все ключи, содержащиеся в старом инишнике, есть и в новом, хотя и с некоторыми вариациями, включая упоминание ParseDirs=0 в комментарии.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Sun Nov 10, 2013 21:24    Post subject: Reply with quote

Avada
Точно. Спасибо.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Thu Nov 14, 2013 15:41    Post subject: Reply with quote

Маленькое резюме моих "открытий":
- ключ LongName=0/1 переключает не длинные/короткие имена, как я думал, а длинные/полные имена, т.е. при 0 в filename только имя объекта, при 1 - имя с путём;
- ParseDirs=0 отключает не только обработку папок, но и некоторых файлов, таких как hiberfil.sys, pagefile.sys;
- плагином очень удобно пользоваться для подсветки определённых файлов/папок, если она нужна не часто, или, по крайней мере, не всегда: имя плагина и поля всегда одни и те же, настраиваем шаблон поиска и цвет для него, а в зависимости от подключенного скрипта подсвечиваться будет то что нужно;
- для отключения плагина можно создать пустой скрипт (нулевого размера) и переключаться на его секцию в инишнике;
- чтобы не захламлять папку плагина скрипты можно сложить в подпапку, или разложить по нескольким подпапкам, относительные пути вида Script=".\Scripts\test.js" в инишнике поддерживаются;
- если плагин заинтересовал не только меня, могу поделиться HTA утилиткой, которая навешивается на хоткей и позволяет менять активную секцию в инишнике;

прошу прощения, если это мой очередной велосипед, и всем нормальным людям всё это давно известно.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Nov 14, 2013 17:02    Post subject: Reply with quote

Serge Yolkin
Про hiberfil.sys, pagefile.sys не знал, да и не требовалось.
Serge Yolkin wrote:
- плагином очень удобно пользоваться для подсветки определённых файлов/папок, если она нужна не часто, или, по крайней мере, не всегда: имя плагина и поля всегда одни и те же, настраиваем шаблон поиска и цвет для него, а в зависимости от подключенного скрипта подсвечиваться будет то что нужно;
Не понял, пример приведи, пож-та.
Serge Yolkin wrote:
для отключения плагина можно создать пустой скрипт (нулевого размера) и переключаться на его секцию в инишнике;
Прямо таки отключения? Да и зачем?
Serge Yolkin wrote:
могу поделиться HTA утилиткой
На код глянуть можно. Хотя менять секцию можно и обычным путём.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Thu Nov 14, 2013 17:44    Post subject: Reply with quote

Flasher
Просто другая логика работы с плагином:
Плагин подключен, в тотале настроен шаблон поиска (у меня - highlight_plugin=script.Result = "!", но это на вкус), в [colors] настроена подсветка ColorFilter1=>highlight. В подпапке Scripts папки плагина - несколько скриптов, детектирующих определённые файлы/папки, в script.ini для каждого создана секция, в Section= та самая заглушка, которая "зачем". Ничего не подсвечивается. При необходимости, или остром желании, по хоткею вызываем утилитку, выбираем интересующий скрипт - в тотале подсвечены желаемые элементы. Через так же выбираем заглушку - всё как было. Чтобы в утилитке отображалось что-то более вменяемое, чем имена секций, в инишнике, в следующей после названия каждой секции строчке пишем комментарий (начинается с точки_с_запятой). Вот утиль:
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html>
<head>
  <title>Переключатель Script.wdx</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=8" />
  <script type="text/jscript" language="JScript">
    self.resizeTo(400,200);
    self.moveTo(200,100);
  </script>
  <hta:application
   applicationName="WDXScriptSwitcher-II"
   border="thin"
   icon="%SystemRoot%/system32/scrobj.dll"
   id="HTApp"
   innerBorder="no"
   maximizeButton="no"
   minimizeButton="no"
   selection="no"
   singleInstance="yes"
   version="0.2"
   />
  <style type="text/css">
   *{color:navy;font:normal 14px/16px Arial;margin:0;padding:0;}
   p{cursor:hand;padding:5px 10px;}
   p:hover{background-color:yellow;}

  </style>
</head>
<script type="text/jscript" language="JScript">
  var
   a=[],
   f=new ActiveXObject('Scripting.FileSystemObject'),
   o=HTApp.commandLine.replace(/^"|[^\\]+$/g,'')+'script.ini',p,q,r,s,t;

  s=f.openTextFile(o);
  t=s.readAll();
  s.close();
  q=t.match(/Section\=[^\n\r]+/)[0].split('=')[1];
  a=t.match(/\[\w+\](\s*;\s*[^\n\r]*)?/g);
  for(var i=0;i<a.length;i++){
    r=a[i].split(/\s*;\s*/);
    if(r[0]!='[Script]'){
      p=document.createElement('P');
      p.comment=r[0].replace(/^\[|\]$/g,'');
      p.innerHTML='•&emsp;'+(r.length>1?r[1]:r[0]);
      p.attachEvent('onclick',fa);
      if(p.comment==q)p.style.fontWeight='bold';
      document.documentElement.appendChild(p);
    }
  }

  function fa(e){
    self.resizeTo(0,0);
    self.moveTo(-100,-100);
    var u,v;
    t=t.replace(/Section\=[^\n\r]+/,'Section='+f.getFileName(e.srcElement.comment));
    s=f.openTextFile('script.ini',2);
    s.write(t);
    s.close();
    try{
      with(new ActiveXObject('WScript.Shell'))
       run(
        expandEnvironmentStrings('%COMMANDER_PATH%\\PlugIns\\util\\tccp.exe')+' 540',
        0,
        true
       );
    }catch(e){}
    window.close();
  }
</script>
</html>
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Fri Nov 15, 2013 18:37    Post subject: Reply with quote

Как вариант можно наделать ini файлов и копировать утилиткой нужный поверх script.ini, т.е. перезаписывать весь, вместо редактирования строк.
-----
Еще можно заводить отдельный script.lng для именования колонок.
Code:
[eng]
Result=ColumnName

[rus]
Result=ИмяКолонки
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Fri Nov 15, 2013 19:31    Post subject: Reply with quote

Lev
Можно и скрипты хранить в архиве, вместе с инишниками, а распаковывать скриптом парами, поверх имеющихся, но это хорошо для готовой сборки, в прцессе написания отлаживать лучше ничего не удаляя, а то я тут выше уже жаловался, что инишник потерял совсем. Перезаписал, блин... Зато, обжогшись, научил утилитку генерить инишник при его отсутствии (болванка, конечно, но для всех имеющихся скриптов, включая подпапки).
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... 8, 9, 10 ... 14, 15, 16  Next
Page 9 of 16

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group