View previous topic :: View next topic |
Author |
Message |
vik313
Joined: 07 Apr 2019 Posts: 8
|
(Separately) Posted: Sun Apr 07, 2019 13:36 Post subject: Переход в папку следом за текущей в родительском каталоге |
|
|
Здравствуйте!
Можно ли реализовать переход по папкам при помощи кнопки в Тотал коммандере?
У меня есть папки называются они по-другому. 1,2,3,n
Как находясь в папке 1, нажатием на кнопку перейти в папку ниже уровнем - 2, потом нажатием в папку 3 и так далее??
Название папок разное, файлов разное.
Спасибо! |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sun Apr 07, 2019 14:15 Post subject: |
|
|
AutoHotkey cкрипт.
Навигация круговая. Если каталог последний - то происходит переход в первый каталог в той же панели (и в обратную сторону - из первого в последний)
Code: | ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander DreamLair ;
; Script: Go to parallel directory ;
; Скрипт: Переход в параллельный каталог ;
; Script version: 1.0 (2018.09.30) ;
; Required: Total Commander 9.0+ ;
; Script author: LonerD ;
; Site: https://dreamlair.net ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Parameter: ;
; 1 - backward navigation ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
#NoEnv
#NoTrayIcon
#SingleInstance force
SetBatchLines, -1
SendMode Input
If not ( WinExist("ahk_class TTOTAL_CMD") || WinActive("ahk_class TTOTAL_CMD") )
ExitApp
WinGet, hw_TTOTAL_CMD, ID, A
global hw_TTOTAL_CMD
NavMode = %1%
if ( NavMode != 1 )
NavMode = 0
DllCall("LockWindowUpdate", "uint", hw_TTOTAL_CMD)
TCPanelA := SendMessageTC(1074, 1000, 0, A)
hw_TCPathA := SendMessageTC(1074, 8+TCPanelA, 0, A)
ControlGetText, PathA,, % "ahk_id " hw_TCPathA
SendMessage, 1075, 2002,,, % "ahk_id " hw_TTOTAL_CMD
TCPanelA := SendMessageTC(1074, 1000, 0, A)
TCItemsA := SendMessageTC(1074, 1002+TCPanelA, 0, A)
TCCaretA := SendMessageTC(1074, 1006+TCPanelA, 0, A)
TCUpDirA := SendMessageTC(1074, 1008+TCPanelA, 0, A)
TCFileA := SendMessageTC(1074, 1010+TCPanelA, 0, A)
if ( TCFileA = 4294967295 )
TCFileA := TCItemsA
ControlGetText, PathA2,, % "ahk_id " hw_TCPathA
if ( PathA = PathA2 )
Goto, Exit
if ( NavMode = 1 )
NextDir := TCCaretA = TCUpDirA ? TCFileA - TCUpDirA - 1 : TCCaretA - TCUpDirA - 1
else
NextDir := TCFileA - TCCaretA > 1 ? TCCaretA + 1 - TCUpDirA : 0
SendMessage, 1075, 2049, % NextDir,, % "ahk_id " hw_TTOTAL_CMD
SendMessage, 1075, 1001,,, % "ahk_id " hw_TTOTAL_CMD
Exit:
DllCall("LockWindowUpdate", "uint", 0)
ExitApp
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; Total Commander Send Message function ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
SendMessageTC(TCMsg, wParam, lParam, aControl)
{
SendMessage, % TCMsg, % wParam, % lParam, % aControl, % "ahk_id " hw_TTOTAL_CMD
return ErrorLevel
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~; |
_________________ Win11 x64 Eng | TC DreamLair eternal pre-α
Last edited by LonerD on Sun Apr 07, 2019 19:40; edited 1 time in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 07, 2019 14:21 Post subject: |
|
|
LonerD
Серьёзно? o_0 _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
vik313
Joined: 07 Apr 2019 Posts: 8
|
(Separately) Posted: Sun Apr 07, 2019 14:36 Post subject: |
|
|
Можно по-подробнее как настроить, что бы процесс запустить с кнопки? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 07, 2019 14:57 Post subject: |
|
|
Любой вариант из первых 1) и 2) вставляете в поле Команда:. В случае вторых дописываете путь к TCFS2 (последняя), размещённой в подкаталоге ТС. Примеры кодов:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef msg($0B,0) tcm(2002) tcm(3303) tcm(2054) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,334
Перейти к предыдущей папке в родительском каталоге |
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef msg($0B,0) tcm(2002) tcm(3303) tcm(2053) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,333
Перейти к следующей папке в родительском каталоге | Иконки сами подберёте. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
vik313
Joined: 07 Apr 2019 Posts: 8
|
(Separately) Posted: Sun Apr 07, 2019 15:30 Post subject: |
|
|
Супер! То, что нужно! |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10263 Location: Россия, Саратов
|
(Separately) Posted: Sun Apr 07, 2019 17:52 Post subject: |
|
|
По очевидным причинам тема переносится из "Общих вопросов" в "Автоматизацию". _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Sun Apr 07, 2019 19:06 Post subject: |
|
|
А чт делает (и что должен делать) скрипт, если при попытке перехода в предыдущую директорию текущей является первая? Или, то же - следующую из последней?
В свое время я много сил потратил на скрипты, предусматривающие эти случаи. И время многократно окупилось! _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
LonerD
Joined: 04 Jan 2011 Posts: 1168 Location: Донецк
|
(Separately) Posted: Sun Apr 07, 2019 19:39 Post subject: |
|
|
У меня круговая навигация предусмотрена
(а ещё был скрипт на vbs с использованием TCFS2, датированный маем 2013, но он сейчас у меня не работает на Win10) _________________ Win11 x64 Eng | TC DreamLair eternal pre-α
Last edited by LonerD on Mon Apr 08, 2019 02:20; edited 1 time in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 07, 2019 20:18 Post subject: |
|
|
Вахмурка
Мы это где-то уже обсуждали. И там я объяснял, что — ничего. Должно быть именно текущее поведение, когда ты понимаешь, где конец, а где начало.
LonerD
Аналогично. Я давно пытался себе представить ситуацию, в которой мне понадобился бы реверс, так и не смог (при своей-то фантазии)...
P.S.: Ты когда прекратишь в 100500 раз цитировать свой ник? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Sun Apr 07, 2019 20:24 Post subject: |
|
|
Flasher wrote: | Должно быть именно текущее поведение, когда ты понимаешь, где конец, а где начало | Правильно. Зачем заставлять машину делать то, что можно сделать самому? _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 07, 2019 20:28 Post subject: |
|
|
Вахмурка
Раз правильно, то какие проблемы?
Или ты всплывающих окон захотел? Мне они точно ни к чему.
LonerD wrote: | а ещё был скрипт на vbs с использованием TCFS2 | Сейчас можно и без скрипта это проделывать:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef msg($0B,0) tcm(2002) tcm(3303)
if(msg(1074,1006+msg(1074,1000))-msg(1074,1008+msg(1074,1000)),tcm(2054),tcm(2023)+send({END})) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,334
Циклический переход к предыдущей папке в родительском каталоге |
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef msg($0B,0) tcm(2002) tcm(3303)
if(msg(1074,1004+msg(1074,1000))==msg(1074,1006+msg(1074,1000))+1-msg(1074,1008+msg(1074,1000)),tcm(2049),tcm(2053)) tcm(2003) tcm(2918) msg($0B,1) redraw()
wciconex.dll,333
Циклический переход к следующей папке в родительском каталоге |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Fri Apr 12, 2019 23:19 Post subject: |
|
|
Однокнопочный вариант:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "if(pressedShift, varset(4,1), varset(4,0)) if(pressedCtrl, varset(3,1), varset(3,0))
run_item(locktc,1) tcm(2002) tcm(524) tcm(3303) varset(2,msg($432,1004+msg($432,1000))) tcm(524) if(varget(2)>0, varset(1,msg($432,1006+msg($432,1000))-msg($432,1008+msg($432,1000)))+if(varget(4), varset(1,varget(1)-1)+if(varget(1)>=varget(2)||(varget(1)<0&&varget(3)), varset(1,varget(2)-1)), varset(1,varget(1)+1)+if(varget(3), if(varget(1)>=varget(2), varset(1,0)), if(varget(1)>varget(2), varset(1,0), if(varget(1)==varget(2), varset(1,varget(2)-1)))))+msg($433,2049,varget(1))) tcm(2003) run_item(locktc,0) redraw"
WCMICONS.DLL,80
Перейти к следующей или предыдущей (Shift+) папке в родительском каталоге |Ctrl+ разрешает переход от последней к первой и наоборот
| Для отслеживания нажатия клавиш Shift и Ctrl кроме утилиты TCFS2 потребуется модуль TCFS2Tools.
Если TCFS2Tools не установлен в TC (или просто нет желания использовать совместно мышь и клавиатуру), то на основе предложенного варианта можно сделать отдельные кнопки (или назначить отдельные клавиши), в которых, для задания направления перехода к следующей/предыдущей папке, pressedShift заменить на 0/1, а для задания запрета/разрешения перехода от последней к первой и наоборот, pressedCtrl заменить на 0/1. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Apr 12, 2019 23:41 Post subject: |
|
|
Вот это дичьизврат.
sa wrote: | можно сделать отдельные кнопки (или назначить отдельные клавиши) | Уж лучше взять мои примеры и при желании назначить юзеркомандам по хоткею, чем делать два/четыре о-хо-хо-дубликата с правкой пары цифр.
Я ещё понимаю макрос в ini или скрипт, где нужно пару цифровых параметров прописать, но дублировать...
Интересно, как такое число varget-ов и if-ов на скорости сказывается. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
sa
Joined: 29 Apr 2009 Posts: 2571
|
(Separately) Posted: Mon Apr 15, 2019 10:12 Post subject: |
|
|
Если одной кнопки с командой, имеющей кучу модификаторов (Shift, Ctrl, Alt) окажется недостаточно, а создание двух команд-дублей покажется нерациональным, то, разумеется, желающие могут оформить команду в секции [Items] файла TCFS2.ini, например, так:
Code: | NextPrevParentDir = if(1, run_item(locktc,1)+tcm(2002)+tcm(524)+tcm(3303)+varset(2,msg($432,1004+msg($432,1000)))+tcm(524)+ if(varget(2)>0, varset(1,msg($432,1006+msg($432,1000))-msg($432,1008+msg($432,1000)))+if(#1, varset(1,varget(1)-1)+if(varget(1)>=varget(2)||(varget(1)<0&), varset(1,varget(2)-1)), varset(1,varget(1)+1)+if(#2, if(varget(1)>=varget(2), varset(1,0)), if(varget(1)>varget(2), varset(1,0), if(varget(1)==varget(2), varset(1,varget(2)-1)))))+msg($433,2049,varget(1)))+tcm(2003)+run_item(locktc,0)+redraw)
| и вызывать её кнопками/клавишами с параметрами вида:
Code: | TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ei "NextPrevParentDir ( pressedAlt ,1 )"
WCMICONS.DLL,80
Перейти к следующей или предыдущей (Alt+) папке в родительском каталоге,|с закольцовыванием | Примеры параметров:
0 , 0 перейти к следующей, без закольцовывания;
1 , 1 перейти к предыдущей, с закольцовыванием;
pressedShift|pressedAlt , pressedCtrl перейти к следующей, а при дополнительном нажатии Shift или Alt - к предыдущей, закольцовывать при дополнительном нажатии Ctrl
и т.п. |
|
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
|