My old but still actual Autohotkey script.
No flickering, forward and backward navigation, circle navigation (if it's last directory, then go to first).
Code: Select all
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
; 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) ; get active panel: 1=left, 2=right
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) ; active panel: 1=left, 2=right
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) ;index of first file in list
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
}
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;