VladSh wrote:Несколько пожеланий к скрипту backupVersion.js.
1. В известном случае вылетает сообщение "Не удалось определить версию файла!", а после него новое окно, в котором задаётся имя. /Добавлено: Кстати версию можно ещё попробовать определять из такой записи: "v3.9" (доки к плагам идут в таком формате) и в таком: "v.3.9" (я иногда так пишу)/.
Можно ли так сделать, чтобы вылетало одно окно, т.е. вышеуказанный текст из первого сообщения в этом случае вставлялся бы в текст окна? Вроде что-то помнится, что в штатном InputBox'е есть ограничение на то ли количество символов, то ли на одну строку... в таком случае можно ли вообще не выдавать первое сообщение? Если вылетел диалог с предлагаемым именем файла, то это и так понятно, что инфа о версии не найдена.
VladSh wrote:2. Добавить возможность задания в аргументах полного отключения вывода подтверждающего диалога, - выводить только сообщение о сохранении с именем файла (какое и сейчас выводится).
Речь о запросе
Файл «...» уже существует!
Перезаписать?
---------------------------
Да Нет Отмена
?
VladSh wrote:И заметил такую странность: сначала вызывал скрипт для файла в 13:10, затем в 13:14 и в 13:15, но приставка к названию бэкап-файла почему-то отаётся "_13-10".
Хм, это странно, там же или из файла вытаскивается, или текущее время используется. Upd: Ой, я гоню , берется дата модификации файла.
VladSh wrote:2. Добавить возможность задания в аргументах полного отключения вывода подтверждающего диалога, - выводить только сообщение о сохранении с именем файла (какое и сейчас выводится).
Речь о запросе "Файл «...» уже существует! Перезаписать?"
И этот диалог тоже не хотелось бы. Он выдаёт то же имя файла, а лучше бы добавлял минуты что ли...
А вообще я имел в виду диалог, где выдаётся имя файла для сохранения.
Т.е. в идеале хочется полный silent-mode - каждый раз даётся уникальное имя файла (если версия не меняется, то надо просто дату в конце добавлять с минутами), а в конце выводится сообщение, что файл сохранён с таким-то именем и до свидания
Posted: Sun Nov 16, 2014 11:44 pm
by VladSh
Вопрос ко всем не совсем по теме
Есть простенький скрипт:
var pToolFileName = "AkelPad.exe";
var cmdLine = "d:\\Temp\\111.txt";
var AppShell = new ActiveXObject("shell.application");
AppShell.ShellExecute(pToolFileName, cmdLine);
из AkelPad'а он запускается идеально - файл открывается. /Также другие exe'шники, типа WinMerge и др. открываются без проблем./ Но если запустить этот же скрипт просто из файловой системы или из TotalCommander'а, то выдаёт ошибку, что типа "AkelPad не найден"...
Так и должно быть или это баг? И как с этим бороться?
Дополнение. Заметил, что у меня вообще скрипты из файловой системы не запускались, а при запуске открывались прямо в AkelPad'е. Тогда я сделал "открыть с помощью" и выбрал Wscript.exe. Скрипты запускаться стали, но возможно чего-то не доисправилось...
Posted: Mon Nov 17, 2014 5:50 am
by YuS
VladSh wrote:Вопрос ко всем не совсем по теме
Есть простенький скрипт:
var pToolFileName = "AkelPad.exe";
var cmdLine = "d:\\Temp\\111.txt";
var AppShell = new ActiveXObject("shell.application");
AppShell.ShellExecute(pToolFileName, cmdLine);
...
Так и должно быть или это баг? И как с этим бороться?
Хмм... например, прописать папку, где расположен Akelpad.exe, в системную переменную PATH или запускать скрипт рядом с AP, ну или указать абсолютный путь в скрипте к Akelpad.exe...
Заодно, надо бы проверить содержание переменной PATHEXT...
Posted: Mon Nov 17, 2014 10:07 am
by VladSh
YuS
Так и делаю - прописываю пути, но проблема в другом - ShellExecute работает только в AkelPad'е, и хотелось бы именно с этим разобраться...
Posted: Mon Nov 17, 2014 12:45 pm
by opk44
VladSh
Может это банально, но попробуйте тормознуть файервол с антивирусом и посмотреть, что будет.
Posted: Mon Nov 17, 2014 6:54 pm
by YuS
VladSh wrote:ShellExecute работает только в AkelPad'е, и хотелось бы именно с этим разобраться...
Имхо, если я правильно понял, то:
VladSh wrote:Но если запустить этот же скрипт просто из файловой системы или из TotalCommander'а, то выдаёт ошибку, что типа "AkelPad не найден"...
- результат запуска скрипта в системе? Если да, то ShellExecute отрабатывает, но найти не может AP и именно из-за:
т.е. система не знает, что ей надо запустить...
А если же скрипт не отрабатывает совсем, то это уже надо копать систему, но здесь это обсуждать, наверное, всё таки, слишком оффтопично...
///Comparison of current and selected files using WinMerge (http://winmerge.org/)
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=16379#p16379
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=11455#p11455
// Version: 0.5.1 (2014.11.16)
// (с) se7h, VladSh
//
// Usage:
// -"Compare..." Call("Scripts::Main", 1, "WinMerge.js") Icon(pathToAnyIcon) - searching for a path to WinMerge automatically (when WinMerge installed with registration in Windows)
// -"Compare..." Call("Scripts::Main", 1, "WinMerge.js", `-toolDir="d:\Programs\TotalCmd\UTILs\WinMerge\"`) - takes a path from scripts Arguments (when WinMerge installed as portable), else searching a path automatically
//
// Dependencies:
// FileTabs.js you found here: http://akelpad.sourceforge.net/forum/viewtopic.php?p=16297#p16297
// CommonFunctions.js - here: http://akelpad.sourceforge.net/forum/viewtopic.php?p=1582#p1582
if (!AkelPad.GetMainWnd()) WScript.Quit();
if (!AkelPad.Include("FileTabs.js")) WScript.Quit();
if (!AkelPad.Include("CommonFunctions.js")) WScript.Quit();
var pToolFileName = "WinMergeU.exe";
var FILES = {};
var nFileCurIndex = getTabIndexCurrent();
if (nFileCurIndex > 1) nFileCurIndex = 1;
FILES[nFileCurIndex] = getCurrentFileWithSave();
if (!FILES[nFileCurIndex]) WScript.Quit();
var nFileOtherIndex = Number(!nFileCurIndex);
if (AkelPad.SendMessage(hWndMain, 1291 /*AKD_FRAMESTATS*/, 0 /*FWS_COUNTALL*/, 0) == 2) {
//если открыто всего 2 файла, то будем передавать их
// FILES[nFileOtherIndex] = getTabFileByIndex(nFileOtherIndex); //MDI only
FILES[nFileOtherIndex] = getTabFilePrev(); //MDI and PMDI
if (!FILES[nFileOtherIndex]) //если файл новый, переходим на его вкладку чтобы попытаться сохранить
{
// AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
activateTabByIndex(nFileOtherIndex);
FILES[nFileOtherIndex] = getCurrentFileWithSave();
}
}
else {
//если открыто не 2 файла, то в утилиту будем передавать текущий и выбранный в диалоге открытия файла
FILES[nFileOtherIndex] = FILES[nFileCurIndex];
FILES[nFileCurIndex] = FileDialogDefault(true, FILES[nFileCurIndex], GetFileExt(FILES[nFileCurIndex]));
}
if (FILES[nFileOtherIndex]) {
var cmdLine = "\"" + FILES[0] + "\" \"" + FILES[1] + "\"";
var pToolPath = AkelPad.GetArgValue("toolDir", "");
if (pToolPath) {
//сначала пытаемся взять из аргументов (возможно WinMerge был установлен как portable)
pToolPath = getEnvironmentPath(pToolPath + pToolFileName);
if (pToolPath) {
cmdLine = "\"" + pToolPath + "\" " + cmdLine;
var WshShell = new ActiveXObject("WScript.shell");
WshShell.Exec(cmdLine);
WScript.Quit();
}
}
//для нормально инсталлированного WinMerge или когда портативный не был найден
var AppShell = new ActiveXObject("shell.application");
AppShell.ShellExecute(pToolFileName, cmdLine);
}
function getCurrentFileWithSave() {
var pCurrentFile = AkelPad.GetEditFile(0);
if (!pCurrentFile) {
//если файл не сохранён, пытаемся его сохранить
AkelPad.Command(4105);
pCurrentFile = AkelPad.GetEditFile(0);
}
return pCurrentFile;
}
Добавлено:
Ура, победа!
Прописал с помощью reg-файла:
т.к. если WinMerge пишет в реестр, в этом ключе обязательно будет путь к исполняемому файлу. У меня, например, распакованный дистриб и в \Microsoft\Windows\CurrentVersion\App Paths WinMergeU.exe нет.
Ну, да, или так... но кроме того, всё же, ищет и через PATH
Posted: Wed Nov 19, 2014 12:21 pm
by DV
Кстати, насчет TabSwitch.js.
Неужели только я заметил, что с версии v.3.9 окошко TabSwitch по нажатию Ctrl+Tab появляется не посередине окна редактирования, а со сдвигом вправо и вниз?
Я так понимаю, причиной являются строки "rcMain.left+=" и "rcMain.top+=", где раньше стояло "=" вместо "+=".
Posted: Wed Nov 19, 2014 3:26 pm
by Instructor
DV
В TabSwitch.js 4.0 такого не наблюдаю. Возможно последствия перетаскивания кусков кода из новой версии скрипта.