Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Autorun
Goto page Previous  1, 2, 3 ... , 215, 216, 217  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
FallenAngel



Joined: 30 Dec 2025
Posts: 6

Post (Separately) Posted: Tue Dec 30, 2025 21:04    Post subject: Reply with quote

Orion9
Нужна помощь с такой конструкцией.

Code:

ControlSetMouseAction /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /M 2 OpenDirInNewTabElseEnter

Func OpenDirInNewTabElseEnter
   I = ItemAtCursor('index')
   If I >= 0 Then
      F = RequestInfo(1010 + ItemAtCursor('panel'))
      If ItemAtCursor('panel') <> RequestInfo(1000) Or Not ItemAtCursor('focused') Then MouseClick
      If ItemAtCursor('focused') Then
         If F > I Or F = -1 Then
            SendCommand 3003
         Else
            Switch StrLower(StrRight(StrPart(ItemAtCursor('text'), auTAB, 1), 4))
            Case '.exe', '.bat', '.cmd', '.lnk'
               CommandExec em_startelevated
               Case '.ps1'
                  ShowPopupMenu /I:16 '%commander_path%\PS.BAR'
            Else
               SendCommand cm_SrcQuickView
            EndSwitch
         EndIf
      EndIf
   Else
      SendCommand cm_SrcHideQuickView
   EndIf
EndFunc


Идея состоит в том, чтобы унифицировать подход. По СКМ должен всегда открываться Быстрый просмотр. А вот все частные случаи (новая вкладка, '.exe', '.bat', '.cmd', '.lnk' и '.ps1') только с удержание Shift.
Заранее спасибо.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 977

Post (Separately) Posted: Tue Dec 30, 2025 23:54    Post subject: Reply with quote

FallenAngel
Если требуется сохранить старый код, т.е. обойтись минимальным вмешательством, то можно "перевесить" ControlSetMouseAction на Shift, добавив ключ /K:S, а просто СКМ оставить под новую ControlSetMouseAction с командой быстрого просмотра:
Code:
ControlSetMouseAction /M 1 SendCommand cm_SrcQuickView
ControlSetMouseAction /M 2 SendCommand cm_SrcQuickView

ControlSetMouseAction /K:S /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /K:S /M 2 OpenDirInNewTabElseEnter

Func OpenDirInNewTabElseEnter
   I = ItemAtCursor('index')
   If I >= 0 Then
      F = RequestInfo(1010 + ItemAtCursor('panel'))
      If ItemAtCursor('panel') <> RequestInfo(1000) Or Not ItemAtCursor('focused') Then MouseClick
      If ItemAtCursor('focused') Then
         If F > I Or F = -1 Then
            SendCommand 3003
         Else
            Switch StrLower(StrRight(StrPart(ItemAtCursor('text'), auTAB, 1), 4))
            Case '.exe', '.bat', '.cmd', '.lnk'
               CommandExec em_startelevated
               Case '.ps1'
                  ShowPopupMenu /I:16 '%commander_path%\PS.BAR'
            Else
               SendCommand cm_SrcQuickView
            EndSwitch
         EndIf
      EndIf
   Else
      SendCommand cm_SrcHideQuickView
   EndIf
EndFunc

Подойдет вам такой вариант?
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 6

Post (Separately) Posted: Wed Dec 31, 2025 11:52    Post subject: Reply with quote

Orion9 wrote:

Если требуется сохранить старый код, т.е. обойтись минимальным вмешательством,

Это не обязательно.

Orion9 wrote:

Подойдет вам такой вариант?

Нет, т.к. поведение было лучше - клик по пустому пространству всегда делал cm_SrcHideQuickView
+ клик по файлу сразу выводил его содержимое в Быстром просмотре, а не просто переключал этот самый просмотр.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 977

Post (Separately) Posted: Wed Dec 31, 2025 12:42    Post subject: Reply with quote

FallenAngel
У меня вчера не было возможности проверить, но я догадался, что вас вряд ли устроит такой вариант.

А если так попробовать?
Code:
ControlSetMouseAction /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /M 2 OpenDirInNewTabElseEnter
ControlSetMouseAction /K:S /M 1 OpenDirInNewTabElseEnter
ControlSetMouseAction /K:S /M 2 OpenDirInNewTabElseEnter

Func OpenDirInNewTabElseEnter
   Local bShift = IsPressed(0x10)
   I = ItemAtCursor('index')
   If I >= 0 Then
      F = RequestInfo(1010 + ItemAtCursor('panel'))
      If ItemAtCursor('panel') <> RequestInfo(1000) Or Not ItemAtCursor('focused') Then MouseClick
      If ItemAtCursor('focused') Then
         # проверка Shift
         If Not bShift Then
            SendCommand cm_SrcQuickView
            Return
         EndIf
         If F > I Or F = -1 Then
            SendCommand 3003
         Else
            Switch StrLower(StrRight(StrPart(ItemAtCursor('text'), auTAB, 1), 4))
            Case '.exe', '.bat', '.cmd', '.lnk'
               CommandExec em_startelevated
               Case '.ps1'
                  ShowPopupMenu /I:16 '%commander_path%\PS.BAR'
            Else
               SendCommand cm_SrcQuickView
            EndSwitch
         EndIf
      EndIf
   Else
      SendCommand cm_SrcHideQuickView
   EndIf
EndFunc
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 6

Post (Separately) Posted: Wed Dec 31, 2025 13:16    Post subject: Reply with quote

Orion9
Да, спасибо. Это уже почти то, что я хотел. Правда, по ходу обнаружилось что с shift\ctrl заодно проходит выделение, а с alt - закрывается вызванное меню. Буду думать, по поводу модификатора еще.
Может Вы можете подсказать что? пкм+скм?

Если можно, еще пара вопросов.

В справке, в разделе Разное есть пример "Сохранение исходного заголовка". Это как я понял, нужно для правильного вывода строки WinSetText(g_sTitle & " | CPU: " & GetCPUUsage()) в заголовке ТС.
Вопрос в следующем - нужно чтобы по shift+клик по заголовку эта самая строка WinSetText... скрывалась и отображалась соотв. А самое главное, это состояние нужно сохранять после перезапука ТС. В идеале в wincmd.ini - вроде:
Code:
[Configuration]
ClockTC=1


И у меня предложение по поводу "на чём тогда 11,000 строк написано" и Вашей сборки с примерами.
Я честно её скачал и постарался разобраться в примерах, но выглядело это как тот мем про опоссума.
Можем Вам оформлять все отдельными .aucfg файлами? Тогда всем будет ясно, что это и зачем. Можно будет быстро подключить готовое решение и использовать у себя.
Яркий пример в справке - есть "Добавление каталога в PATH". Просто и понятно. Сохранил в AddToUserPath.aucfg и спокойно себе юзаешь 65001. Ну или "Сворачивание в область уведомлений". Т.е. это все готовые законченные решения.
А прям в идеале - выгружать на github. Тогда можно и по взрослому открывать issues по каждому решению. Так же, это еще один способ коммуникации. Для понимания, я зарегистрировался на форуме исключительно чтобы пообщаться с Вами Embarassed
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 977

Post (Separately) Posted: Wed Dec 31, 2025 13:55    Post subject: Reply with quote

FallenAngel wrote:
нужно чтобы по shift+клик по заголовку эта самая строка WinSetText... скрывалась и отображалась соотв. А самое главное, это состояние нужно сохранять после перезапука ТС

Кажется, что-то подобное есть в сборке AkulaBig, он немного по-другому делал, по-своему. Можете глянуть, вруг это больше вам подойдет или вдруг проще станет разобраться.
FallenAngel wrote:
Можем Вам оформлять все отдельными .aucfg файлами? Тогда всем будет ясно, что это и зачем. Можно будет быстро подключить готовое решение и использовать у себя.

Я так и старался в последнее время делать, помодульно. То есть чтобы можно было просто модуль взять и подключить инструкцией Pragma и не сильно заморачиваться со всем остальным.

Но такой подход требует переработки кода, причем тщательной, а самое главное — написание хорошей документации, которая будет раскрывать функции модуля. И вот это как раз самое сложное.

Написание документации — совершенно не моё. Если бы вы знали сколько у меня времени ушло на написание readme к заголовку, то долго бы смеялись, да я и сам смеюсь, когда вспоминаю Laughing Чтобы делать это легко и непринужденно, нужны специальные таланты и умения, и это факт. Почему, вы думаете, справка к Autorun так легко читается? Благодаря Flasher и его умениям, прежде всего. Ну и Loopback, разумеется. К сожалению, у меня таких талантов нет, поэтому и времени на написание даже простых и небольших инструкций (к тому же корявых как правило) отъедается изрядно.

И всё же я посмотрю, что можно сделать. Пока не знаю, как у меня будет со временем в новом году, но несколько самых нужных и интересных фич действительно нужно документировать и вынести в отдельные модули для более простого и широкого использования.

Кстати, всех с наступающими! Very Happy Будем надеятся Loopback появится в новом году, и не с пустыми руками, а с большими подарками )
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 466

Post (Separately) Posted: Wed Dec 31, 2025 14:53    Post subject: Reply with quote

Orion9 wrote:
Написание документации — совершенно не моё.

И вот этот человек можно сказать заставил меня написать комменты ко всем моим функциям. Это подстава Twisted Evil

Orion9 wrote:
Кстати, всех с наступающими!

И вас с наступающим!!!
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 977

Post (Separately) Posted: Thu Jan 01, 2026 13:47    Post subject: Reply with quote

FallenAngel
А что из функционала собранных скриптов вас заинтересовало больше всего, на что стоит обратить внимание в первую очередь?

Там ведь половина - это чисто "проба пера", которая представляет ценность разве что с технической точки зрения. Я имею в виду, простому пользователю разобраться с этим будет непросто, да и вряд ли вообще будет интересно без соответсвующих знаний в области программирования и скриптинга.

Какие-то фичи взять, конечно, можно, и даже практически безболезненно, т.е. простым копированием кнопок и кода, но далеко не все. Многое уж слишком завязано и переплетено с другими частями и модулями, и это, конечно, мешает.

Например, одной из таких фич является кнопка разворачивания и сворачивания панели. Я настолько к ней привык, что даже не могу сейчас представить себе работу в ТС без нее.
Code:
В скрипте Title.aucfg реализован код кнопки, переключающей количество строк на главной панели инструментов (кнопка меняет значение BarLimitLines в Wincmd.ini).

Первое нажатие на кнопку разворачивает панель (BarLimitLines=0). Через 10 секунд панель снова свернется (BarLimitLines=1). Чтобы панель оставалась в развернутом виде, необходимо повторно нажать на кнопку в течении 10 секунд. Развернутая панель возвращается в исходное состояние нажатием на кнопку в третий раз.

Однако код кнопки сильно завязан на основной цикл заголовка. Выдернуть его оттуда непросто. Я давно хотел сделать отдельную функцию на эту кнопку, но все забывал. Однако вы мне напомнили.
 Hidden text

Количество секунд можно поменять (сейчас nSeconds = 5), а вызов повесить на другую комбинацию (сейчас CTRL+F12). Или прописать отдельную горячую клавишу через стандартную секцию [Shortcuts].

В целом, как уже писал выше, попробую пересмотреть весь код и адаптировать самые нужные функции для более простого использования. Думаю, начну где-то после всех праздников, если ничего экстренного не навалится.

AkulaBig wrote:
И вот этот человек можно сказать заставил меня написать комменты ко всем моим функциям. Это подстава

Вы хотите как в лучших коммандерах лондОна и парижа, или не хотите? Laughing
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 6

Post (Separately) Posted: Thu Jan 01, 2026 21:22    Post subject: Reply with quote

Orion9 wrote:
FallenAngel
на что стоит обратить внимание в первую очередь?


Как я уже говорил, мне сейчас интересная тема настройки заголовка.
Такое чувство, что каждый "строит" что-то сам себе. Нужен универсальный .aucfg.
Кроме стандартных RAM\CPU нужна и погода, возможно задействовав https://github.com/chubin/wttr.in

И у всего этого должно быть юзер-френдли настройки. Т.е. прям в начале .aucfg глобальными переменными указываем хотим ли сохранять в ini, что хотим видеть и как.
Все. Юзер подключает модуль, настраивает как душе угодно и не вникает в детали. Так должно быть.
Back to top
View user's profile Send private message
AkulaBig



Joined: 03 Dec 2008
Posts: 466

Post (Separately) Posted: Fri Jan 02, 2026 14:03    Post subject: Reply with quote

Orion9 wrote:
Вы хотите как в лучших коммандерах лондОна и парижа, или не хотите?

Ай, хитрец.
FallenAngel wrote:
Так должно быть.

Если напишите, будет.

FallenAngel wrote:
Нужен универсальный .aucfg.

Можете в моей сборке посмотреть. aucfg отдельно. К нему инишник, в котром можно кое-что настраивать.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 977

Post (Separately) Posted: Fri Jan 02, 2026 14:10    Post subject: Reply with quote

FallenAngel wrote:
Юзер подключает модуль, настраивает как душе угодно и не вникает в детали. Так должно быть.

Я согласен, что так должно быть. Но сделать универсальный модуль для работы с заголовком — задача весьма амбициозная. Боюсь, что на такое я уже не решусь.

Дело даже не в объеме кода и времени, которое на это уйдет (оставлю за рамками жизненные обстоятельства, которые тоже изменились не в лучшую в этом плане сторону), а в банальной потере интереса. Увы, это горякая правда.

Представьте альпиниста, который взбирается на гору: пока он движется, у него есть цель, стремление и задача, и он достигает этой цели. Но за красивой вывеской "покорил вершину" стоит лишь снег, пот и кислородное голодание Laughing Никакой романтики )

Более того, взойдя на вершину его начинает мучать другой вопрос: "а на кой оно мне вообще было надо?" Laughing

Возможно, это пример не отображет всей полноты смысла, поэтому могу привести другой пример.

У султана может быть много жен, много одежд, много золотых чаш и кубков, много красивых лошадей. Но не смотря на такое обилие выбора и роскошь, он проводит время с одной женой — своей любимой женой, носит одну одежду — свою любимую одежду, ест с одной чаши — своей любимой чаши, ездит верхом на одной лошади — своей любимой лошади.

К чему это я? Laughing

К тому, что за 1,5 года пользования заголовком я осознал, что большая часть фич там просто не требуется. Заголовок, которым я обычно пользуюсь, выглядит вот так:
Code:
Total Commander 11.55 - Orion 8   Fri 2   Dune   Offline   128 byte   0 byte   Memory: 15%   CPU: 3%

Плюс погода по настроению. Но на этом все )

И сделать такой легковесный, ничем не перегруженный заголовок, который будет учитывать только собственные нужды, будет не так сложно, при условии, что есть навыки программирования и скриптописания. В последних версиях Autorun Loopback максимально облегчил для этого жизнь. Поэтому да, каждый строит, и самое главное — может построить что-то себе, как вы выразились.

Ссылка на погоду, которую вы дали, действительно крутая. Извлечь из нее данные будет совсем просто. Вот небольшой пример:
Code:
RegisterCommand 60041 "WttrDownloadTest"

Func WttrDownloadTest()
    Local url = "https://wttr.in/Moscow?format=3"
    If WinInetDownloadFile(url, TEMP & "\wttr.txt") = 0 Then
       Local txt = FileRead(TEMP & "\wttr.txt")
       tip(StrTrim(txt), 1, "Weather")
    Else
       tip("Не удалось получить данные " & url, 3, "Error")   
    EndIf
EndFunc

Добавить полученные данные в заголовок тоже будет несложно. Сделать включение и выключение по Shift+Click тоже вроде не сложно. У вас есть какой-то код? Не видя кода сложно что-то конкретное предложить.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 6

Post (Separately) Posted: Fri Jan 02, 2026 16:31    Post subject: Reply with quote

Orion9 wrote:

У вас есть какой-то код? Не видя кода сложно что-то конкретное предложить.


Code:
Title = WinGetText()
RunThread InfoHeader
 
Func InfoHeader
   Local nRecvSpeed, nSendSpeed
   While 1
      Sleep 1000
      GetNetSpeed(nRecvSpeed, nSendSpeed)
      WinSetText(Title & '        ' & Date("d MMMM, ddd") & '.    CPU: ' & StrFormat("%02d", GetCPUUsage()) & '%    RAM: ' & GetMemStats() & '%    NET: ↓ ' & Round(nRecvSpeed / 1000, 1) & '  ↑ ' & Round(nSendSpeed / 1000, 1) & ' mb/s')
   Wend
EndFunc


Добавлено спустя 28 минут:

Orion9
да, еще если можно, у менять есть такое:

Code:
If IniRead("~/R", COMMANDER_INI, "Lister", "Maximized", 0) = 0 Then
    WinGetPos("x", "y", "w", "h")
    IniWrite("~/R", COMMANDER_INI, "Lister", "x", x)
    IniWrite("~/R", COMMANDER_INI, "Lister", "y", y)
    IniWrite("~/R", COMMANDER_INI, "Lister", "dx", w)
    IniWrite("~/R", COMMANDER_INI, "Lister", "dy", h)
EndIf


И я добавляю это через Pragma Include.
Можно ли сделать тоже самое, только через shift+клик по заголовку Lister (ну и понятно сразу с применением)? Т.е. листер становится в размер TC и записывает это в ini.
Back to top
View user's profile Send private message
Orion9



Joined: 01 Jan 2024
Posts: 977

Post (Separately) Posted: Fri Jan 02, 2026 20:42    Post subject: Reply with quote

FallenAngel
Если я понял, функция GetNetSpeed была взята из справки. Я ее приложил в модуль, т.ч. можете удалить ее у себя, чтобы не было конфликта имен. Просто подключите новый модуль к конфигурации.

 InfoHeader.aucfg

Работает?

Надеюсь, что да. А то меня не будет пару дней. Но вы не спешите, подумайте, что еще будет нужно. Когда вернусь, попробуем погоду вставить. Возможно обойдемся простым вызовом URLDownloadToFileW, т.к. он работает, я проверил:

 WttrDownloadTest

Запуск с CTRL.

На счет листера, пока не знаю. Надо будет у Loopback спросить. Подручными средствами вряд ли получится (т.е. нет готовой команды типа ControlSetMouseAction /L /K:S для окна листера), но он может что-нибудь посоветует. Я тоже потом подумаю.
Back to top
View user's profile Send private message
FallenAngel



Joined: 30 Dec 2025
Posts: 6

Post (Separately) Posted: Fri Jan 02, 2026 21:25    Post subject: Reply with quote

Orion9
Да, похоже работает, спасибо. Буду тестировать - отпишу подробнее.



UPD. Потестил, все ок. Можно смело оформлять готовым решением. В начале файла только указать что это, зачем и как использовать. По правилам хорошего тона, на три строчки кода полагается 1 комментарий, ну то такое, хотя бы инфо вначале.

По погоде. Заголовок обновляется каждую секунду. Нужно придумать как его не перегружать. К примеру, раз в час (не более) данные обновляются в файл\переменную.... а заголовок только подтягивает сталое значение. Плюс нужно пояснить как юзеру правильно указать свой город. Мини мануал.
Back to top
View user's profile Send private message
ZiabrevLV



Joined: 15 Sep 2022
Posts: 4

Post (Separately) Posted: Sat Jan 03, 2026 15:36    Post subject: Reply with quote

Нужна помощь.
Есть две команды - включают и отключают сведения о дисковом пространстве

Code:

RegisterCommand 63001 "SwitchHide"
Func SwitchHide(lParam)
            IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" ""
  CommandExec cm_VisTwoDriveButtons 2
  CommandExec cm_VisTwoDriveButtons 1
EndFunc

 RegisterCommand 63002 "SwitchShow"
Func SwitchShow(lParam)
            IniWrite %COMMANDER_INI% "Configuration" "DriveBarHide" "-"
  CommandExec cm_VisTwoDriveButtons 2
  CommandExec cm_VisTwoDriveButtons 1
EndFunc


Наддо объединить в одну команду:

RegisterCommand 63003 "SwitchShowHide"
Func SwitchShowHide(lParam)

Code:

If <выражение 1> Then
    ...
ElseIf <выражение 2> Then
    ...
Else
    ...
EndIf

Чтобы одна команда выполняла отключение \ включение сведения о дисковом пространстве
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3 ... , 215, 216, 217  Next
Page 216 of 217

 
Jump to:  
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