Страница 119 из 243

Добавлено: Пн сен 26, 2022 15:47
Loopback
yozhik писал(а):Назрела хотелка.
Она, похоже, уже раньше когда-то назревала, поскольку есть в моем списке с приоритетом "подумать когда-нибудь" :) Но пока не чувствую, что время уже пришло...

Добавлено: Пн сен 26, 2022 15:59
sa
yozhik писал(а):на функциональные кнопки (клавиши) теперь можно навесить много всего полезного
А можно как-нибудь навесить установку языка (русского или английского), например, после Ctrl+D - для удобства перехода по горячим клавишам в меню избранных каталогов?

Добавлено: Пн сен 26, 2022 16:26
yozhik
sa писал(а):навесить установку языка
Речь про установку языка в TC, если я правильно понял. Ну, при поверхностном взгляде мне кажется можно при помощи новых SetHotkeyAction и SetMessageAction в субплагине Tweaks. На некий хоткей повесить перезапись в wincmd.ini значения ключа LanguageIni и отправку TC команды перечитать wincmd.ini. Но это теоретичсссски, надо разбираться, я пока туда не лез. А в моей фразе «функциональные кнопки (клавиши)» ключевое слово всё же «кнопки», а «клавиши» только постольку, поскольку на них отображается F3/F4/F5 и т.д.

Добавлено: Пн сен 26, 2022 16:35
sa
yozhik писал(а):Речь про установку языка в TC
Нет, языка в системе. Если установлен русский язык, а символы перехода по пунктам меню на английском, то приходится менять язык.

Добавлено: Пн сен 26, 2022 18:31
Loopback
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
Скрипт (переключает на английский, для русского строка "0419"):

Код: Выделить всё

_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

Добавлено: Пн сен 26, 2022 19:42
sa
Loopback писал(а):Язык-то всё равно меняется на уровне приложения.
Понятно, просто у yozhik речь велась про ключ LanguageIni (отвечающий за используемый языковой файл), который мне не нужно менять.
Loopback писал(а):С помощью вспомогательного скрипта можно сделать.
Спасибо, сработало!
Можно теперь обойтись без внешней утилиты (для автоматического переключения языка после Ctrl+D).

Добавлено: Пн сен 26, 2022 21:11
Loopback
Версия 2.2.7 beta

+ добавлена обновленная английская справка
- функции реестра не работали с именами параметров, содержащими "\"
+ Runtime: добавлена функция IsPressed
- опять исправлена директива LegacyExpression
- исправлена проверка переменной для цикла For
+ добавлена функция RunThread

Добавлено: Пн сен 26, 2022 21:56
jentoso
Loopback писал(а): - функции реестра не работали с именами параметров, содержащими ""
Теперь отрабатывает без ошибки.

Добавлено: Вт сен 27, 2022 01:58
yozhik
Loopback
Вот диалог 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
EndIf
В 32бит всё чётко работает, а в 64бит ModifyDialogs не может поменять ширину LCLComboBox. А у MVV его Autorun_FixWindows.dll меняет ширину этого комбобокса! Может можно что-нибудь «подкрутить»? Или смириться с тем что под 64бит сей комбобокс несгибаем?

Добавлено: Вт сен 27, 2022 13:46
Loopback
yozhik писал(а): Или смириться с тем что под 64бит сей комбобокс несгибаем?
Увы, в данной реализации да. В том плагине в целом используется другой метод и, скорее всего, дополнительная поддержка именно этого контрола, позволяющая снять ограничения на изменение ширины.

Добавлено: Вт сен 27, 2022 14:18
sa
Команда SetHotkeyAction: у меня комбинации с модификатором Alt почему-то не работают. Пробовал и левую, и правую клавишу.

Добавлено: Вт сен 27, 2022 20:30
Loopback
sa
Да, что-то упустил, похоже альт вообще забыл проверить.

Добавлено: Ср сен 28, 2022 07:22
yozhik
Loopback
Пара замеченных очепяток в справке:

глава RegDelete

Код: Выделить всё

RegDelete [\K] <ключ> [<параметр>]
слэш в переключателе надо бы перевернуть

глава While...Wend

Код: Выделить всё

While var > 0
  MsgBox(var) # --> 3 --> 2 --> 1
  var = var - 1
Next
вместо Next надо бы WEnd

Добавлено: Ср сен 28, 2022 19:21
Loopback
yozhik
Спасибо, поправлю.

Добавлено: Чт сен 29, 2022 23:47
yozhik
Loopback
Вы AkelPad пользуетесь? Я сделал для него подсветку синтаксиса autorun.cfg.

------

Партия замеченных опечаток и недоумений:

В описании CommandExec
Описание гласит:
CommandExec писал(а):Выполнить пользовательскую команду em_* или установить в панелях заданные пути.
При этом в примерах видим выполнение не только пользовательских команд:

Код: Выделить всё

# открывает диалог настроек
CommandExec cm_Config
и это работает. Хорошо, но чем тогда CommandExec отличается от SendCommand? Только тем, что во 2й внутренние команды TC можно передавать числами? А литерально в обеих — не создаст ли это путаницы? Далее читаем:
CommandExec писал(а):Параметры отправки внутренней команды
и при этом в последующей таблице сведения только о пользовательских em_ командах TC. В русской справке TC эти термины не пересекаются: внутренняя/встроенная — только о cm_, а пользовательская — только о em_.

В описании RunThread

Код: Выделить всё

RunThread <funcname> [<param1> [.. <paramN>]
RunThread(<funcname> [, <param1> [, .. <paramN>]]
В 1й строке не хватает закрывающей ], во 2й закрывающей )

В описаниях строчных ф-ций намёк на то, что вместо casesense требуется подставлять boolean есть только в StrReplace. Может в др., там где casesense используется, тоже стоит добавить?

В описании StrPart

Код: Выделить всё

StrPart(<str>, <delim>, <index> [, <casesense>]
Не хватает закрывающей ).

Код: Выделить всё

sDay = StrPart("Понедельник|Вторник|Среда|Четверг|Пятница|Суббота|Воскресенье" "|", nDay)
Не хватает запятой перед delim.

------

Теперь внимание: очень сильная хотелка. Я давно уже её вынашиваю, и вот настало исполнение времён. Пожалуйста!
Дело в том, что у известного хорошего плагина TWinKey есть два существенных недостатка:
  1. он заброшенный, и с новыми версиями TC всё больше и больше подглючивает;
  2. если TC видит, что он подключен, то блокирует собственную раскраску табов, даже если в TWinKey она не используется.
Поэтому, без лишних слов, вот бы часть самых полезных избранных ф-ций из TWinKey реализовать в субплагинах Autorun. И самой первой сделать эту:
[cut="Специальная обработка клавиши Esc"]Включение этой опции позволяет, максимально сохраняя обычную функциональность клавиши Esc, использовать её также как простой и удобный способ снять и/или восстановить выделение в активной файловой панели.
В Total Commander полное снятие выделения (как с папок, так и с файлов независимо от настроек) выполняется командой cm_ClearAll (клавиатурный стандарт Ctrl+Num-), а восстановление выделения, снятого, например, после выполнения файловой операции — командой cm_RestoreSelection (клавиатурный стандарт Num/). Клавиша же Esc обычно применяется в главном окне TC в совершенно иных целях:
  • для очистки командной строки без перехода в неё (с сохранением фокуса в файловой панели);
  • для скрытия диалога быстрой фильтрации (при этом фильтр останется активным), а при повторном нажатии — для сброса фильтрации;
  • для закрытия диалога быстрого поиска (пустого или с отключённой быстрой фильтрацией).
После включения опции алгоритм применения клавиши Esc будет следующим:
  • Если фокус находится не в файловой панели, то Esc работает обычным образом (закрывает диалоги, очищает командную строку и пр.).
  • Если в текущей файловой панели есть выделенные папки/файлы (в том числе и при включённом быстром фильтре), то нажатие Esc вызывает команду cm_ClearAll, снимающую всё выделение.
  • Если в текущей файловой панели нет выделения, а Esc нажимается в таком состоянии первый раз, то клавиша работает обычным образом (в зависимости от ситуации может, например, сбросить быстрый фильтр или очистить командную строку).
  • Если при отсутствии выделения в файловой панели Esc нажимается второй раз, то вызывается команда cm_RestoreSelection и восстанавливается последнее снятое выделение, если таковое имелось в данном каталоге.
  • Далее и вплоть до использования любой другой клавиши Esc будет циклически снимать/восстанавливать в данном каталоге сохранённое выделение.
[/cut]
Она могла бы хорошо поместиться среди ф-ций Tweaks. Мне кажется, что Вам на то, чтобы её сделать, всего несколько минут понадобится. А я бы тогда отключил TWinkey, из-за этой ф-ции его держу преимущественно. Там, конечно, много ещё других хороших, но без них прожить можно, а эту я по нескольку раз на дню использую, привык-с даже.