如何藉助Autohotkey使total commander在單雙窗口間切換?
文件名挺長的,這樣總是顯示不全各列。有時候想一鍵將TC切到單窗口,就像用滑鼠把它拖成單窗口一樣,我能想到的是先判斷窗口存在,然後最大化,再往後應該是找到左右分隔那個線,這裡不知怎麼檢測了
問對人了,我也一直用 Total Commander。
F1::
Postmessage, 1075, 910, 0,, ahk_class TTOTAL_CMD
Return
F2::
Postmessage, 1075, 909, 0,, ahk_class TTOTAL_CMD
Return
簡單說明:
這裡 1075 是 TC 定義的消息號,那麼 909、910 哪裡來的?;TC 目錄中的 TOTALCMD.INC 文件
cm_50Percent=909;Window separator at 50%
cm_100Percent=910;Window separator at 100%
此外,先判斷當前是一個文件列表還是兩個,直接用一個熱鍵執行。
多關注我的專欄(對自己有用的內容點個贊,我才知道我寫的是否有人需要,能花點時間評論就更好了),這樣我在專欄發內容時可以有所選擇。胡楊的太簡單,yahuu D的又太複雜,綜合他們兩個的:我一直在用的,目前沒出啥問題,可以一鍵切換代碼如下: ;獲取分割欄的位置 當x&<5是,基本可以確定是處於縱向狀態 ControlGetPos,sp_x,sp_y,,,TPanel1 PostMessage 1075,305,0,,ahk_class TTOTAL_CMD
if sp_x&<10
PostMessage 1075,909,0,,ahk_class TTOTAL_CMD else PostMessage 1075,910,0,,ahk_class TTOTAL_CMD怎麼搞得這麼複雜,tc不是有一個命令就是100%窗口顯示和50%窗口顯示嗎?分別設置一個快捷鍵不就完事了?還搞什麼ahk,寫代碼,感覺好累啊。cm_50Percent 雙窗口模式命令cm_100Percent 單窗口模式命令
2014-11-30優化:之前縱向的時候切換到100%,列寬沒有變化,導致文件名還是不能看全。
現在如果縱向時,先切為100%然後再變為橫向,(所以100%都是橫向)因為TC默認的橫向會自動調整列寬、日期和屬性自動靠右。切50%時判斷是否由縱向切換而來,然後根據原狀態恢復。ttt.txt你可以設置到wincmd.ini,自己修改吧,我是直接集成到vimdesktop了。
F11::ControlGetPos, , , wp,hp, TPanel1, ahk_class TTOTAL_CMDControlGetPos, , , w1, h1, TMyListBox1, ahk_class TTOTAL_CMDControlGetPos, , , w2, h2, TMyListBox2, ahk_class TTOTAL_CMDif ( wp &< hp) ;縱向{if ( w1 &<= 5 or w2 &<= 5 )PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMDelse{
IniWrite,1,d: tt.ini,vimd,IsVertical ;如果兩個順序反的,右欄切100%時會有閃動的感覺PostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMDPostMessage 1075, 305, 0, , AHK_CLASS TTOTAL_CMD}}else ;橫向{if ( h1 = 0 or h2 = 0 ){
IniRead,Vertical,d: tt.ini,vimd,IsVerticalif ( Vertical = 1 ) ;橫向時判斷IsVertical,如果為1的話切回縱向、重置變數,再變為50%{PostMessage 1075, 305, 0, , AHK_CLASS TTOTAL_CMDIniWrite,0,d: tt.ini,vimd,IsVertical} PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMD}elsePostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMD
}==========================================================2014-11-27:添加了橫向和縱向的判斷F11::ControlGetPos, , , wp,hp, TPanel1, ahk_class TTOTAL_CMDControlGetPos, , , w1, h1, TMyListBox1, ahk_class TTOTAL_CMDControlGetPos, , , w2, h2, TMyListBox2, ahk_class TTOTAL_CMDif ( wp &< hp) ;縱向 {if ( w1 &<= 5 or w2 &<= 5 )
PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMD else PostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMD }else ;橫向 { if ( h1 = 0 or h2 = 0 ) PostMessage 1075, 909, 0, , AHK_CLASS TTOTAL_CMD elsePostMessage 1075, 910, 0, , AHK_CLASS TTOTAL_CMD
}這個寬度5是我使用910命令後獲取的,在我這裡沒問題。思路是這樣沒錯;F11單鍵切換「單窗口最大化且列寬自適應」or「縱向平分雙窗口」
#SingleInstance force ;多次運行本AHK時,強制採用新版本
Menu, Tray, Icon, TCPanelSwitch.ico ;自定義不同的圖標
#IfWinActive, ahk_class TTOTAL_CMD ;僅在TC中有效,不影響其他程序
F11::
IfWinActive, ahk_exe TOTALCMD.EXE ;適應TC32位窗口及分隔條的名稱
{
;獲取雙窗口分隔條的寬高
ControlGetPos, , , wp, hp, TPanel1, ahk_class TTOTAL_CMD
;獲取窗口1的寬高
ControlGetPos, , , w1, h1, TMyListBox1, ahk_class TTOTAL_CMD
;獲取窗口2的寬高
ControlGetPos, , , w2, h2, TMyListBox2, ahk_class TTOTAL_CMD
;獲取窗口3的寬高, 適應使用FTP時窗口1變更為窗口3
ControlGetPos, , , w3, h3, TMyListBox3, ahk_class TTOTAL_CMD
if ( w3 or h3)
{
w1 := w3
h1 := h3
}
}
IfWinActive, ahk_exe TOTALCMD64.EXE ;適應TC64位窗口及分隔條的名稱
{
ControlGetPos, , , wp, hp, window1, ahk_class TTOTAL_CMD
ControlGetPos, , , w1, h1, LCLListBox1, ahk_class TTOTAL_CMD
ControlGetPos, , , w2, h2, LCLListBox2, ahk_class TTOTAL_CMD
ControlGetPos, , , w3, h3, LCLListBox3, ahk_class TTOTAL_CMD
if ( w3 or h3)
{
w1 := w3
h1 := h3
}
}
if ( wp &< hp) ;分隔條的寬度小於高度,為縱向
{
if ( w1 &<= 5 or w2 &<= 5 ) ;切換至「縱向平分雙窗口」
Postmessage, 1075, 909, 0,, ahk_class TTOTAL_CMD
else ;切換至「單窗口最大化且列寬自適應」
{
Postmessage, 1075, 910, 0,, ahk_class TTOTAL_CMD
PostMessage, 1075, 305, 0,, ahk_class TTOTAL_CMD
}
}
else ;分隔條的寬度大於高度,為橫向
{
if ( h1 = 0 or h2 = 0 ) ;切換至「縱向平分雙窗口」
{
Postmessage, 1075, 909, 0,, ahk_class TTOTAL_CMD
PostMessage, 1075, 305, 0,, ahk_class TTOTAL_CMD
}
else ;切換至「單窗口最大化且列寬自適應」
Postmessage, 1075, 910, 0,, ahk_class TTOTAL_CMD
}
return
#IfWinActive
歪個題,不用AHK實現,通過TC的插件來實現先佔坑,稍後編輯========2016.3.17更新的分割線========貴乎辣雞排版,連MarkDown都不支持,浪費我一個小時都排不好還是去看簡書上的吧:TC長文件名視圖F11快速切換
- 必備TC插件
- Autorun Autorun 2.0.1 http://www.totalcmd.net/plugring/autorun.html
- TCFS2 TCFS2 2.2.1.476 、TCFS2Tools TCFS2Tools 1.4.4.214
- Autorun:可直接安裝,在zip包上回車即可,之後按如下設置:
- rename autorun.example.cfg file into autorun.cfg ( in %Commander_path%WDXAutorun)
- in order to load plugin at Total Commander start, you should create the fictitious color scheme:
- On the "Color" page press "Define colors by file type..." button.
- In the "Define colors by file type" dialog set cursor in any place in the list, and press "Add..." button.
- Press "Define..." button.
- In the "Define selection" dialog move to "Plugins" tab.
- Select in "Plugin" dropdown list "autorun".
- Select in "Property" dropdown list "Autorun" (there will not be more properties).
- Select in "OP" dropdown list "=" and set in following field any integer, for example 1.
- Press "Save" button, give the template some name , for example "Autorun".
- Next, repeatedly press OK button in all dialogs until options dialog will be closed.
- TCFS2以及TCFS2Tools需要分開安裝:
- 解壓TCFS2.exe、TCFS2.ini,保存在同一目錄下。比如:%Commander_path%ToolsTCFS2
- 將TCFS2Tools.dll置於Autorun插件目錄下的plugins中,在autorun.cfg中添加如下欄位:
LoadLibrary PluginsTCFS2Tools.dll
- 在Configuration--&>Display--&>Tabstops下,勾選Adjust Tabs to window width
- 配置文件TCFS2.ini中,分別在[Items],[Macros],[Actions]這三欄位中添加如下指令:
[Items]
vt0=tcm(305)
sp_sw_50_100=run_item(sp_set_active, sepPos == 50 ? 100 : 50)
lv2=set_tcini(TCFS2, LV2_Running, 1) run_action(lv) set_tcini(TCFS2, LV2_Running, 0), tcini(TCFS2, LV2_Running, 0)
lv=set_tcini(TCFS2, sFNV, 0) run_action(longview), test(shortFileNameView) | set_tcini(TCFS2, sFNV, 1) run_action(longview_undo)
[Macros]
shortFileNameView=tcini(TCFS2, sFNV, 1)
[Actions]
longview=sp_sw_50_100 vt0
longview_undo=vt0 sp_sw_50_100
lv=lv
lv2=lv2
- 配置文件usercmd.ini中添加
[em_TCFS_longview]
cmd=TCFS2 lv2
path=%Commander_path%ToolsTCFS2
- 配置文件wincmd.ini添加
[TCFS2]
sFNV=1
LV2_Running=0
- 在Configuration--&>Misc.下,綁定命令em_TCFS_longview到熱鍵F11上
over.
推薦閱讀:
TAG:AutoHotkey | TotalCommander |