View previous topic :: View next topic |
Author |
Message |
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Tue Jul 03, 2012 02:56 Post subject: Скрипт закладок |
|
|
Нужна возможность возвращаться к запомненному файлу.
Минимум извращений. Один скрипт, одна команда, один хоткей на неё.
Точнее хотелось бы иметь два скрипта - один работает с файлом, второй с буфером.
1. При первом вызове скрипт создаёт временный файл, в который записывает путь и имя файла под курсором (cm_CopyFullNamesToClip). При втором вызове - скрипт переходит по пути из этого временного файла, после чего файл или удаляется полностью или из него удаляется всё содержимое.
2. При вызове - скрипт проверяет содержимое буфера. Если в буфере содержится путь к файлу - то переходит по этому пути. Если в буфере прочая информация - то выполняется команда cm_CopyFullNamesToClip |
|
Back to top |
|
|
mf-zl
Joined: 21 Aug 2005 Posts: 71 Location: BLR
|
(Separately) Posted: Tue Jul 03, 2012 05:20 Post subject: |
|
|
Code: | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Project : Bookmark for Total Commander v0.1 ( bookmark.ahk ) *
* Author : Mad.Forces / ZeLen1y ( zl at mail.by ) *
* Compiler : AutoHotkey_L v1.1.07.03 ( http://l.autohotkey.net/ ) *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
#NoTrayIcon
#SingleInstance force
; bookmark.ahk /clip saves bookmark to clipboard
File := A_Temp "\_tc\bookmark.tmp"
If WinActive("ahk_class TTOTAL_CMD")
{ If 1 = /clip
{ If FileExist(Clipboard)
{ Run, %COMMANDER_EXE% /O /S "%Clipboard%"
Clipboard :=
} Else, PostMessage, 1075, 2018
} Else
{ If FileExist(File)
{ FileRead, Path, % File
Run, %COMMANDER_EXE% /O /S "%Path%"
FileDelete, % File
} Else
{ _Clipboard := ClipboardAll
PostMessage, 1075, 2018
ClipWait
FileAppend, % ClipBoard, % File
ClipBoard := _Clipboard
}}}
|
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jul 03, 2012 13:42 Post subject: |
|
|
LonerD
А зачем тут буфер, если есть параметры? ИМО, давать скрипту самому выбирать что делать - неправильно, это не будет в ряде случаев ссответствовать текущей задаче. Запись же лучше делать в сам скрипт или любой существующий ini-файл. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Tue Jul 03, 2012 17:29 Post subject: |
|
|
Если установлен TWinKey, то там эта функция реализована через закладки (bookmarks). Не один щелчок, а два, зато есть куча дополнительных функций типа сохранения закладок в файл.
Я когда-то тоже написал аналогичный скрипт для PowerPro, но TWinKey мне показался более удобным способом. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Tue Jul 03, 2012 22:37 Post subject: |
|
|
mf-zl
Спасибо, пока что у меня скрипт не работает. (WinXP х32, TC 8.01rc1, AutoHotkey_L v1.1.07.03)
Вызывает крах Тотала если запускать ahk. Если откомпилировать в exe - то ничего не происходит, путь не копируется ни в буфер, ни в файл.
Quote: | там эта функция реализована через закладки (bookmarks) |
Куча закладок. Установить, перейти, очистить их... А если там много закладок...
Пока нужно гораздо проще - запомнить одну позицию, вернуться к ней и забыть её.
Quote: | давать скрипту самому выбирать что делать - неправильно, это не будет в ряде случаев соответствовать текущей задаче. |
Понятное дело, что после запомненного пути в буфер может попасть другой путь, по которому и будет совершён переход не туда, куда ожидает пользователь. Но это уже мелкие недостатки, ложащиеся на пользователя. Потому я и сделал запрос на два скрипта - один копирует имена в файл, второй - в буфер, потому что нет уверенности каким удобней будет пользоваться. mf-zl элегантно объединил оба варианта в одном, но пока скрипт у меня не работает. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jul 03, 2012 22:49 Post subject: |
|
|
LonerD
Мелкие недостатки для кого-то могут стать нестерпимым зудом. Я предпочитаю такие пути обходить стороной. Два скрипта тут совершенно лишни. Я бы уже написал на vbs, если бы ты точно дал понять, что ты хочешь в идеале. И вообще советую всегда ставить конечную цель, а не писать о способах прихода к ней (уже достаточно говорено об этом). Делиться своими мыслями по реализации - это, конечно, интересно, но чаще малопродуктивно. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Tue Jul 03, 2012 23:23 Post subject: |
|
|
Quote: | Я бы уже написал на vbs, если бы ты точно дал понять, что ты хочешь в идеале. |
Простейший скрипт-закладка.
Первый вызов - запоминаем текущее местоположение (на каком файле находится курсор). Второй вызов - возвращаемся к этому местоположению. Третий вызов - запоминаем новое местоположение, четвёртый вызов - возвращаемся к нему.
А теперь немного мыслей. Чем плох вариант с записью в ini или текстовый файл? Тем, что положение запоминается даже после выхода из Тотала (хотя да - при запуске Тотала можно очищать этот файл через плагин Autoruns). mf-zl преложил писать в _tc\bookmark.tmp , и это, наверное, лучший выход. Файл удалится после закрытия Тотала автоматически. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Jul 03, 2012 23:43 Post subject: |
|
|
LonerD wrote: | хотя да - при запуске Тотала можно очищать этот файл через плагин Autoruns | Зачем? Если два состояния флага. Первый и третий вызов - это одно и тоже. Т.е. достаточно проверять, если ли запись или нет. На каждом чётном вызове после перехода флаг очищается. Всё проще пареной. |
|
Back to top |
|
|
mf-zl
Joined: 21 Aug 2005 Posts: 71 Location: BLR
|
(Separately) Posted: Wed Jul 04, 2012 00:59 Post subject: |
|
|
LonerD
Quote: | Спасибо, пока что у меня скрипт не работает. (WinXP х32, TC 8.01rc1, AutoHotkey_L v1.1.07.03)
Вызывает крах Тотала если запускать ahk. Если откомпилировать в exe - то ничего не происходит, путь не копируется ни в буфер, ни в файл. |
Хм, странно. У меня та же конфа, только TC - rc2.
Попробуй чтоли AHK_L Unicode поставить и файл сохранить в UTF-8.
Добавлено спустя 25 минут:
Этого хватает без установки: http://mf.nx0.ru/ahk/bookmark.7z |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Wed Jul 04, 2012 01:57 Post subject: |
|
|
mf-zl
Пока не понял почему (файлы идентичные), но частично заработало.
Переход через буфер - работает. Хотя не очень удобно получается, что на каталогах и архивах осуществляется переход не к ним, происходит вход в них. И на строке перехода в корневой каталог скрипт не срабатывает (не копирует путь).
Переход через файл - не работает. Во-первых, если нет каталога _tc, то временный файл не создаётся. Если каталог есть (создан вручную), то во временный файл записывается не текущее местоположение курсора, а содержимое буфера.
PS. Понял почему. У меня ahk-файлы ассоциированы в Тотале с AutoHotkey, и я пытался просто кинуть на панель ahk-файл, не прописывая запуск AutoHotkey.exe |
|
Back to top |
|
|
mf-zl
Joined: 21 Aug 2005 Posts: 71 Location: BLR
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 04, 2012 11:31 Post subject: |
|
|
LonerD
Я себе это так представляю:
Code: | FN = ""
'================================================================
' Переход к файлу-закладке / запомнить путь к файлу под курсором
' Параметр: %V
'==========================Путь к TCMC===========================
TCMC = """%COMMANDER_PATH%\Utils\TCMC\TCMC.exe"""
'================================================================
FPath = WScript.Arguments(0) : L = Chr(13)
With CreateObject("Scripting.FileSystemObject")
Set Script = .OpenTextFile(WScript.ScriptFullName, 1)
Line = Script.ReadLine : Text = Line & L & Script.ReadAll
Set ScriptW = .OpenTextFile(WScript.ScriptFullName, 2)
If FN = "" Then
ScriptW.Write Replace(Text, "FN = """"" & L, "FN = """ & FPath & """" & L)
Else
If .FileExists(FN) Then
CreateObject("WScript.Shell").Run TCMC & " cds """ & FN & "\'"" """""
ScriptW.Write Replace(Text, Line, "FN = """"" & L)
Else WSCript.Echo "Файла " & FN & " не существует!"
End If
End If : Script.Close : ScriptW.Close
End With |
|
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Fri Jul 06, 2012 20:22 Post subject: |
|
|
mf-zl
Спасибо.
В идеале хотелось бы вариант перехода к файлу или каталогу, чтобы курсор возвращался в то же положение, в котором он и был запомнен (то есть на запомненный файл или каталог, а не просто в каталог, из которого происходило запоминание). Но не знаю, возможно ли такое реализовать.
Может, опционально (с другими ключами) оставить тот вариант перехода, который был изначально в скрипте - чтобы к файлу переход происходил непосредственно, а в каталог происходило вхождение.
Закладки на файлы внутри архивов не поддерживаются - возврат не происходит никуда. Если возможно реализовать - то стоит возвращаться хотя бы к файлу архива (для меня это не принципиально, но для большей гибкости скрипта не помешало бы).
Ещё в последнем варианте есть такой баг. Скрипт неравнодушен к букве V. В каталоге имеется файл, имя которого начинается на V, делаем закладку на любом файле в этом каталоге. При возврате курсор перескакивает именно на первый файл, начинающийся на букву V. (если нету таковых файлов, то при переходе курсор просто устанавливается на строке перехода в корневой каталог).
И чистый скрипт, разумеется, тоже хотелось бы увидеть, потому как он весит меньше, а файл Autohotkey.exe всё-равно имеется, так как нужен и для других скриптов.
Flasher
Спасибо. Из недочётов:
- скрипт постоянно елозит сам себя, из-за чего его не получается добавить в доверительные к Касперскому (про другие не знаю), который видит, что файл изменился и начинает снова спрашивать разрешение на его запуск. Мелочь, не зависящая от скрипта, но не очень удобно. Наверное, проще писать закладки в сторонний файл.
- если запомнить каталог (или переход на каталог выше) - то скрипт не может вернуться к запомненному каталогу. Более того - он полностью обнуляет сам себя. Обнуление происходит также если запомненный файл удалён или переименован или же находится внутри архива. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jul 07, 2012 13:30 Post subject: |
|
|
LonerD wrote: | Наверное, проще писать закладки в сторонний файл | Не хотелось плодить файлы. Так-то по сложности одинаково:
Code: | '================================================================================
' Переход к файлу-закладке / запомнить путь к файлу под курсором
' Параметр: %V%Z
'================================= Путь к TCMC ==================================
TCMC = """%COMMANDER_PATH%\Utils\TCMC\TCMC.exe"""
'================================================================================
Dim WSH : Set WSH = CreateObject("WScript.Shell")
'=========================== Путь к файлу с записью =============================
File = WSH.ExpandEnvironmentStrings("%COMMANDER_PATH%") & "\Scripts\Bookmark.txt"
'================================================================================
With CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Line = Trim(.OpenTextFile(File, 1).ReadLine)
Error = Err.Number : On Error GoTo 0
Set FW = .OpenTextFile(File, 2, True)
If Error > 0 Or Line = "" Or InStr(Line, ":\") = 0 Then
FW.Write WScript.Arguments(0)
Else
WSH.Run TCMC & " cds """ & Line & "\'"" """""
FW.Write " "
End If : FW.Close : Set WSH = Nothing
End With |
LonerD wrote: | если запомнить каталог (или переход на каталог выше) - то скрипт не может вернуться к запомненному каталогу | Ты сам поставил задачу только по файлам. А к каталогу можно вернуться только с его открытием, если, конечно, не эмулировать нажатие Enter после захода, но без блокировки с хелпера будет моргать, что не есть гуд. |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Thu Jul 12, 2012 20:00 Post subject: |
|
|
Quote: | Ты сам поставил задачу только по файлам. |
Я имел в виду файлы в широком смысле слова - как непосредственно файлы, так и каталоги.
Последний вариант отлично работает, включая возврат к архивам и к строке перехода в корневой каталог. |
|
Back to top |
|
|
|
|
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
|