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 

Скрипт закладок
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Tue Jul 03, 2012 02:56    Post subject: Скрипт закладок Reply with quote

Нужна возможность возвращаться к запомненному файлу.
Минимум извращений. Один скрипт, одна команда, один хоткей на неё.

Точнее хотелось бы иметь два скрипта - один работает с файлом, второй с буфером.
1. При первом вызове скрипт создаёт временный файл, в который записывает путь и имя файла под курсором (cm_CopyFullNamesToClip). При втором вызове - скрипт переходит по пути из этого временного файла, после чего файл или удаляется полностью или из него удаляется всё содержимое.

2. При вызове - скрипт проверяет содержимое буфера. Если в буфере содержится путь к файлу - то переходит по этому пути. Если в буфере прочая информация - то выполняется команда cm_CopyFullNamesToClip
Back to top
View user's profile Send private message
mf-zl



Joined: 21 Aug 2005
Posts: 71
Location: BLR

Post (Separately) Posted: Tue Jul 03, 2012 05:20    Post subject: Reply with quote

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
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Jul 03, 2012 13:42    Post subject: Reply with quote

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



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Tue Jul 03, 2012 17:29    Post subject: Reply with quote

Если установлен TWinKey, то там эта функция реализована через закладки (bookmarks). Не один щелчок, а два, зато есть куча дополнительных функций типа сохранения закладок в файл.
Я когда-то тоже написал аналогичный скрипт для PowerPro, но TWinKey мне показался более удобным способом.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Tue Jul 03, 2012 22:37    Post subject: Reply with quote

mf-zl
Спасибо, пока что у меня скрипт не работает. (WinXP х32, TC 8.01rc1, AutoHotkey_L v1.1.07.03)
Вызывает крах Тотала если запускать ahk. Если откомпилировать в exe - то ничего не происходит, путь не копируется ни в буфер, ни в файл.

Quote:
там эта функция реализована через закладки (bookmarks)

Куча закладок. Установить, перейти, очистить их... А если там много закладок...
Пока нужно гораздо проще - запомнить одну позицию, вернуться к ней и забыть её.

Quote:
давать скрипту самому выбирать что делать - неправильно, это не будет в ряде случаев соответствовать текущей задаче.

Понятное дело, что после запомненного пути в буфер может попасть другой путь, по которому и будет совершён переход не туда, куда ожидает пользователь. Но это уже мелкие недостатки, ложащиеся на пользователя. Потому я и сделал запрос на два скрипта - один копирует имена в файл, второй - в буфер, потому что нет уверенности каким удобней будет пользоваться. mf-zl элегантно объединил оба варианта в одном, но пока скрипт у меня не работает.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Jul 03, 2012 22:49    Post subject: Reply with quote

LonerD
Мелкие недостатки для кого-то могут стать нестерпимым зудом. Я предпочитаю такие пути обходить стороной. Два скрипта тут совершенно лишни. Я бы уже написал на vbs, если бы ты точно дал понять, что ты хочешь в идеале. И вообще советую всегда ставить конечную цель, а не писать о способах прихода к ней (уже достаточно говорено об этом). Делиться своими мыслями по реализации - это, конечно, интересно, но чаще малопродуктивно. Wink
Back to top
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Tue Jul 03, 2012 23:23    Post subject: Reply with quote

Quote:
Я бы уже написал на vbs, если бы ты точно дал понять, что ты хочешь в идеале.

Простейший скрипт-закладка.
Первый вызов - запоминаем текущее местоположение (на каком файле находится курсор). Второй вызов - возвращаемся к этому местоположению. Третий вызов - запоминаем новое местоположение, четвёртый вызов - возвращаемся к нему.

А теперь немного мыслей. Чем плох вариант с записью в ini или текстовый файл? Тем, что положение запоминается даже после выхода из Тотала (хотя да - при запуске Тотала можно очищать этот файл через плагин Autoruns). mf-zl преложил писать в _tc\bookmark.tmp , и это, наверное, лучший выход. Файл удалится после закрытия Тотала автоматически.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Jul 03, 2012 23:43    Post subject: Reply with quote

LonerD wrote:
хотя да - при запуске Тотала можно очищать этот файл через плагин Autoruns
Зачем? Если два состояния флага. Первый и третий вызов - это одно и тоже. Т.е. достаточно проверять, если ли запись или нет. На каждом чётном вызове после перехода флаг очищается. Всё проще пареной.
Back to top
View user's profile Send private message
mf-zl



Joined: 21 Aug 2005
Posts: 71
Location: BLR

Post (Separately) Posted: Wed Jul 04, 2012 00:59    Post subject: Reply with quote

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
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Wed Jul 04, 2012 01:57    Post subject: Reply with quote

mf-zl
Пока не понял почему (файлы идентичные), но частично заработало.
Переход через буфер - работает. Хотя не очень удобно получается, что на каталогах и архивах осуществляется переход не к ним, происходит вход в них. И на строке перехода в корневой каталог скрипт не срабатывает (не копирует путь).

Переход через файл - не работает. Во-первых, если нет каталога _tc, то временный файл не создаётся. Если каталог есть (создан вручную), то во временный файл записывается не текущее местоположение курсора, а содержимое буфера.

PS. Понял почему. У меня ahk-файлы ассоциированы в Тотале с AutoHotkey, и я пытался просто кинуть на панель ahk-файл, не прописывая запуск AutoHotkey.exe
Back to top
View user's profile Send private message
mf-zl



Joined: 21 Aug 2005
Posts: 71
Location: BLR

Post (Separately) Posted: Wed Jul 04, 2012 09:44    Post subject: Reply with quote

Готово! Twisted Evil
http://mf.nx0.ru/ahk/bookmark.7z
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Wed Jul 04, 2012 11:31    Post subject: Reply with quote

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
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Fri Jul 06, 2012 20:22    Post subject: Reply with quote

mf-zl
Спасибо.
В идеале хотелось бы вариант перехода к файлу или каталогу, чтобы курсор возвращался в то же положение, в котором он и был запомнен (то есть на запомненный файл или каталог, а не просто в каталог, из которого происходило запоминание). Но не знаю, возможно ли такое реализовать.
Может, опционально (с другими ключами) оставить тот вариант перехода, который был изначально в скрипте - чтобы к файлу переход происходил непосредственно, а в каталог происходило вхождение.

Закладки на файлы внутри архивов не поддерживаются - возврат не происходит никуда. Если возможно реализовать - то стоит возвращаться хотя бы к файлу архива (для меня это не принципиально, но для большей гибкости скрипта не помешало бы).

Ещё в последнем варианте есть такой баг. Скрипт неравнодушен к букве V. В каталоге имеется файл, имя которого начинается на V, делаем закладку на любом файле в этом каталоге. При возврате курсор перескакивает именно на первый файл, начинающийся на букву V. (если нету таковых файлов, то при переходе курсор просто устанавливается на строке перехода в корневой каталог).

И чистый скрипт, разумеется, тоже хотелось бы увидеть, потому как он весит меньше, а файл Autohotkey.exe всё-равно имеется, так как нужен и для других скриптов.

Flasher
Спасибо. Из недочётов:
- скрипт постоянно елозит сам себя, из-за чего его не получается добавить в доверительные к Касперскому (про другие не знаю), который видит, что файл изменился и начинает снова спрашивать разрешение на его запуск. Мелочь, не зависящая от скрипта, но не очень удобно. Наверное, проще писать закладки в сторонний файл.
- если запомнить каталог (или переход на каталог выше) - то скрипт не может вернуться к запомненному каталогу. Более того - он полностью обнуляет сам себя. Обнуление происходит также если запомненный файл удалён или переименован или же находится внутри архива.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Jul 07, 2012 13:30    Post subject: Reply with quote

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
View user's profile Send private message
LonerD



Joined: 04 Jan 2011
Posts: 1168
Location: Донецк

Post (Separately) Posted: Thu Jul 12, 2012 20:00    Post subject: Reply with quote

Quote:
Ты сам поставил задачу только по файлам.

Я имел в виду файлы в широком смысле слова - как непосредственно файлы, так и каталоги. Smile
Последний вариант отлично работает, включая возврат к архивам и к строке перехода в корневой каталог.
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 1, 2, 3  Next
Page 1 of 3

 
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