-
-
Save Infocatcher/6200149 to your computer and use it in GitHub Desktop.
// https://gist.github.com/Infocatcher/6200149 | |
// Version: 0.1.2 - 2014-07-17 | |
// Author: Infocatcher | |
//// Delete current file | |
// Usage: | |
// Call("Scripts::Main", 1, "deleteCurrentFile.js") | |
var confirm = AkelPad.GetArgValue("confirm", true); | |
var curFile = AkelPad.GetEditFile(0); | |
if(curFile) { | |
var hMainWnd = AkelPad.GetMainWnd(); | |
var oSys = AkelPad.SystemFunction(); | |
if(oSys.Call("kernel32::GetFileAttributes" + _TCHAR, curFile) != -1) { | |
if( | |
!confirm | |
|| AkelPad.MessageBox( | |
hMainWnd, | |
"Delete file?\n" + curFile, | |
WScript.ScriptName, | |
33 /*MB_OKCANCEL|MB_ICONQUESTION*/ | |
) == 1 /*IDOK*/ | |
) { | |
if(oSys.Call("kernel32::DeleteFile" + _TCHAR, curFile)) { | |
var lpFileTime = AkelPad.SendMessage(hMainWnd, 1223 /*AKD_GETFRAMEINFO*/, 133 /*FI_FILETIME*/, 0); | |
AkelPad.MemCopy(lpFileTime + 0 /*offsetof(FILETIME, dwLowDateTime)*/, 0, 3 /*DT_DWORD*/); | |
AkelPad.MemCopy(lpFileTime + 4 /*offsetof(FILETIME, dwHighDateTime)*/, 0, 3 /*DT_DWORD*/); | |
} | |
} | |
} | |
else { | |
AkelPad.MessageBox( | |
hMainWnd, | |
"File already deleted:\n" + curFile, | |
WScript.ScriptName, | |
64 /*MB_OK|MB_ICONINFORMATION*/ | |
); | |
} | |
} |
Если сделать 2 вызова подряд, то второй вызов вешает акелпад, т.к. файл был уже удалён после первого вызова.
У меня скрипт корректно сообщает про «File already deleted», а зависает уже после перехода фокуса на сам редактор, где срабатывает настройка «Следить за изменением файла» в виде сообщения «Невозможно открыть файл "путь/к/файлу".»
Пока вот так: http://akelpad.sourceforge.net/forum/viewtopic.php?p=25100#25100
Потому как я не понимаю, что можно исправить со стороны скрипта. Разве что как-то сообщить AkelPad'у, что файл был удален...
Исправлено в разрабатываемой версии AkelPad'а:
http://akelpad.sourceforge.net/forum/viewtopic.php?p=25248#25248
Также теперь используется код из этого примера, так что редактору теперь сообщается, что файл удален (и дополнительных сообщений больше не будет).
Бесит промпт, но совсем без него - нельзя.
Можно ли приделать ключ для молчаливого удаления файла и приделать оповещение в имя вкладки (и ещё лучше использовать приписку "!" вместо дефолтной приписки "*" для обозначения локальных изменений в открытом файле, если это возможно)?
Ключ уже есть:
Call("Scripts::Main", 1, "deleteCurrentFile.js", "-confirm=false")
Насчет переименования вкладки не уверен, автоматика скорее всего обновит обратно после переключения вкладок.
Но можно пометить документ как измененный.
Если сделать 2 вызова подряд, то второй вызов вешает акелпад, т.к. файл был уже удалён после первого вызова.