Она, похоже, уже раньше когда-то назревала, поскольку есть в моем списке с приоритетом "подумать когда-нибудь"yozhik писал(а):Назрела хотелка.
Autorun
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Речь про установку языка в TC, если я правильно понял. Ну, при поверхностном взгляде мне кажется можно при помощи новых SetHotkeyAction и SetMessageAction в субплагине Tweaks. На некий хоткей повесить перезапись в wincmd.ini значения ключа LanguageIni и отправку TC команды перечитать wincmd.ini. Но это теоретичсссски, надо разбираться, я пока туда не лез. А в моей фразе «функциональные кнопки (клавиши)» ключевое слово всё же «кнопки», а «клавиши» только постольку, поскольку на них отображается F3/F4/F5 и т.д.sa писал(а):навесить установку языка
Язык-то всё равно меняется на уровне приложения.sa писал(а):Нет, языка в системе.
С помощью вспомогательного скрипта можно сделать. В конфиге Autorun переопределить Ctrl+D:
Код: Выделить всё
SetHotkeyAction /K:C /H:D SetLangAndOpen
Func SetLangAndOpen()
ShellExec /WAIT "<path_to_Autoit>\AutoIt3.exe" "<path_to_Script>\setlang.au3"
SendCommand "cm_DirectoryHotlist"
EndFunc
Код: Выделить всё
_TCHSetKeyboardLayout("0409", __TCHGetActiveInstance())
Func _TCHSetKeyboardLayout($sLayoutID, $hWnd)
Local $WM_INPUTLANGCHANGEREQUEST = 0x50
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, _
"int", $WM_INPUTLANGCHANGEREQUEST, _
"int", 1, _
"int", $ret[0])
EndFunc
Func __TCHGetActiveInstance()
Local $sInst = EnvGet("COMMANDER_HWND") ; if set by Autorun, preferable
If ($sInst <> "") And StringIsDigit($sInst) Then Return Hwnd($sInst)
; Fallback to "active" window method
Local $aList = WinList("[CLASS:TTOTAL_CMD]")
For $i = 1 To $aList[0][0]
If WinActive($aList[$i][1]) Then Return $aList[$i][1]
Next
Return 0
EndFunc
Понятно, просто у yozhik речь велась про ключ LanguageIni (отвечающий за используемый языковой файл), который мне не нужно менять.Loopback писал(а):Язык-то всё равно меняется на уровне приложения.
Спасибо, сработало!Loopback писал(а):С помощью вспомогательного скрипта можно сделать.
Можно теперь обойтись без внешней утилиты (для автоматического переключения языка после Ctrl+D).
Версия 2.2.7 beta
+ добавлена обновленная английская справка
- функции реестра не работали с именами параметров, содержащими "\"
+ Runtime: добавлена функция IsPressed
- опять исправлена директива LegacyExpression
- исправлена проверка переменной для цикла For
+ добавлена функция RunThread
+ добавлена обновленная английская справка
- функции реестра не работали с именами параметров, содержащими "\"
+ Runtime: добавлена функция IsPressed
- опять исправлена директива LegacyExpression
- исправлена проверка переменной для цикла For
+ добавлена функция RunThread
Loopback
Вот диалог cm_CopySamePanel (Shift+F5/F6):
В 32бит всё чётко работает, а в 64бит ModifyDialogs не может поменять ширину LCLComboBox. А у MVV его Autorun_FixWindows.dll меняет ширину этого комбобокса! Может можно что-нибудь «подкрутить»? Или смириться с тем что под 64бит сей комбобокс несгибаем?
Вот диалог cm_CopySamePanel (Shift+F5/F6):
Код: Выделить всё
IniRead CRNTLNG "%COMMANDER_INI%" "Configuration" "LanguageIni"
LngRead TREEBTN 5002 "%COMMANDER_PATH%\LANGUAGE\%CRNTLNG%"
If %AUTORUN_TCARCH% = 32 Then
AddDialog /W:105 /CENTER:1 "TCheckComboBox"
AddCondition /TEXT "TButton" 1 "%TREEBTN%"
AddControl /X:106 "TButton" 1
AddControl /X:106 "TButton" 2
AddControl /X:106 "TButton" 3
AddControl /W:109 "TMyComboBox" 1
Else
AddDialog /W:105 /CENTER:1 "TCheckComboBox"
AddCondition /TEXT "Button" 3 "%TREEBTN%"
AddControl /X:106 "Button" 3
AddControl /X:106 "Button" 4
AddControl /X:106 "Button" 5
AddControl /W:108 "LCLComboBox" 1
EndIfLoopback
Пара замеченных очепяток в справке:
глава RegDelete
слэш в переключателе надо бы перевернуть
глава While...Wend
вместо Next надо бы WEnd
Пара замеченных очепяток в справке:
глава RegDelete
Код: Выделить всё
RegDelete [\K] <ключ> [<параметр>]глава While...Wend
Код: Выделить всё
While var > 0
MsgBox(var) # --> 3 --> 2 --> 1
var = var - 1
NextLoopback
Вы AkelPad пользуетесь? Я сделал для него подсветку синтаксиса autorun.cfg.
------
Партия замеченных опечаток и недоумений:
В описании CommandExec
Описание гласит:
и это работает. Хорошо, но чем тогда CommandExec отличается от SendCommand? Только тем, что во 2й внутренние команды TC можно передавать числами? А литерально в обеих — не создаст ли это путаницы? Далее читаем:
В описании RunThread
В 1й строке не хватает закрывающей ], во 2й закрывающей )
В описаниях строчных ф-ций намёк на то, что вместо casesense требуется подставлять boolean есть только в StrReplace. Может в др., там где casesense используется, тоже стоит добавить?
В описании StrPart
Не хватает закрывающей ).
Не хватает запятой перед delim.
------
Теперь внимание: очень сильная хотелка. Я давно уже её вынашиваю, и вот настало исполнение времён. Пожалуйста!
Дело в том, что у известного хорошего плагина TWinKey есть два существенных недостатка:
[cut="Специальная обработка клавиши Esc"]Включение этой опции позволяет, максимально сохраняя обычную функциональность клавиши Esc, использовать её также как простой и удобный способ снять и/или восстановить выделение в активной файловой панели.
В Total Commander полное снятие выделения (как с папок, так и с файлов независимо от настроек) выполняется командой cm_ClearAll (клавиатурный стандарт Ctrl+Num-), а восстановление выделения, снятого, например, после выполнения файловой операции — командой cm_RestoreSelection (клавиатурный стандарт Num/). Клавиша же Esc обычно применяется в главном окне TC в совершенно иных целях:
Она могла бы хорошо поместиться среди ф-ций Tweaks. Мне кажется, что Вам на то, чтобы её сделать, всего несколько минут понадобится. А я бы тогда отключил TWinkey, из-за этой ф-ции его держу преимущественно. Там, конечно, много ещё других хороших, но без них прожить можно, а эту я по нескольку раз на дню использую, привык-с даже.
Вы AkelPad пользуетесь? Я сделал для него подсветку синтаксиса autorun.cfg.
------
Партия замеченных опечаток и недоумений:
В описании CommandExec
Описание гласит:
При этом в примерах видим выполнение не только пользовательских команд:CommandExec писал(а):Выполнить пользовательскую команду em_* или установить в панелях заданные пути.
Код: Выделить всё
# открывает диалог настроек
CommandExec cm_Configи при этом в последующей таблице сведения только о пользовательских em_ командах TC. В русской справке TC эти термины не пересекаются: внутренняя/встроенная — только о cm_, а пользовательская — только о em_.CommandExec писал(а):Параметры отправки внутренней команды
В описании RunThread
Код: Выделить всё
RunThread <funcname> [<param1> [.. <paramN>]
RunThread(<funcname> [, <param1> [, .. <paramN>]]В описаниях строчных ф-ций намёк на то, что вместо casesense требуется подставлять boolean есть только в StrReplace. Может в др., там где casesense используется, тоже стоит добавить?
В описании StrPart
Код: Выделить всё
StrPart(<str>, <delim>, <index> [, <casesense>]Код: Выделить всё
sDay = StrPart("Понедельник|Вторник|Среда|Четверг|Пятница|Суббота|Воскресенье" "|", nDay)------
Теперь внимание: очень сильная хотелка. Я давно уже её вынашиваю, и вот настало исполнение времён. Пожалуйста!
Дело в том, что у известного хорошего плагина TWinKey есть два существенных недостатка:
- он заброшенный, и с новыми версиями TC всё больше и больше подглючивает;
- если TC видит, что он подключен, то блокирует собственную раскраску табов, даже если в TWinKey она не используется.
[cut="Специальная обработка клавиши Esc"]Включение этой опции позволяет, максимально сохраняя обычную функциональность клавиши Esc, использовать её также как простой и удобный способ снять и/или восстановить выделение в активной файловой панели.
В Total Commander полное снятие выделения (как с папок, так и с файлов независимо от настроек) выполняется командой cm_ClearAll (клавиатурный стандарт Ctrl+Num-), а восстановление выделения, снятого, например, после выполнения файловой операции — командой cm_RestoreSelection (клавиатурный стандарт Num/). Клавиша же Esc обычно применяется в главном окне TC в совершенно иных целях:
- для очистки командной строки без перехода в неё (с сохранением фокуса в файловой панели);
- для скрытия диалога быстрой фильтрации (при этом фильтр останется активным), а при повторном нажатии — для сброса фильтрации;
- для закрытия диалога быстрого поиска (пустого или с отключённой быстрой фильтрацией).
- Если фокус находится не в файловой панели, то Esc работает обычным образом (закрывает диалоги, очищает командную строку и пр.).
- Если в текущей файловой панели есть выделенные папки/файлы (в том числе и при включённом быстром фильтре), то нажатие Esc вызывает команду cm_ClearAll, снимающую всё выделение.
- Если в текущей файловой панели нет выделения, а Esc нажимается в таком состоянии первый раз, то клавиша работает обычным образом (в зависимости от ситуации может, например, сбросить быстрый фильтр или очистить командную строку).
- Если при отсутствии выделения в файловой панели Esc нажимается второй раз, то вызывается команда cm_RestoreSelection и восстанавливается последнее снятое выделение, если таковое имелось в данном каталоге.
- Далее и вплоть до использования любой другой клавиши Esc будет циклически снимать/восстанавливать в данном каталоге сохранённое выделение.
Она могла бы хорошо поместиться среди ф-ций Tweaks. Мне кажется, что Вам на то, чтобы её сделать, всего несколько минут понадобится. А я бы тогда отключил TWinkey, из-за этой ф-ции его держу преимущественно. Там, конечно, много ещё других хороших, но без них прожить можно, а эту я по нескольку раз на дню использую, привык-с даже.