Страница 1 из 2

Вкл./Выкл. подсвечивания новых файлов

Добавлено: Ср июн 04, 2014 19:27
DoctorIkari
Здравствуйте.
Новые фалы/папки подсвечиваются цветом. Довольно удобная фича. Но если, к примеру, присутствует необходимость определять файлы визуально по их цвету в зависимости от расширения, то подсветка новых файлов перекрывает другие правила. Как это можно обойти без переключения настроек вручную?
Спасибо.

P.S. Есть подозрение, что такую кнопку можно реализовать средствами тотала, но... это только подозрения :)

Добавлено: Ср июн 04, 2014 19:54
Avada
DoctorIkari
Надеюсь, известно, откуда эта подсветка новых объектов берётся и как вообще работает. (Если не очень, рекомендуется поиск по форуму, например, по имени плагина Age, а также вдумчивое чтение справки, особенно в части касательно "выше/ниже в списке".) Да, подсветка новых файлов не будет перекрывать подсветку по другим критериям, если находится ниже в списке. Но много ли от неё тогда будет толку? Либо новые файлы подсвечиваются специфическим цветом, потому что они новые, либо сохраняют цвет для своего типа, заданный в настройках, и ничем по подсветке не отличаются от старых. Или-или. Что предлагается? Какую-то про счёту строку в диалоговом списке вверх/вниз каким-то скриптом таскать, что ли? Теоретически можно придумать всё, но в удобстве и успешности этой затеи не уверен.

Добавлено: Ср июн 04, 2014 20:42
Flasher
Avada писал(а):Какую-то про счёту строку в диалоговом списке вверх/вниз каким-то скриптом таскать, что ли?
Можно и не скриптом, достаточно TCFS2.

Добавлено: Ср июн 04, 2014 21:45
LonerD
Вкл./Выкл. подсвечивания новых файлов
Если не таскать строки, а просто полностью включить/отключить подсветку - то несложно организовать скриптом Autohotkey - сделать одной командой/кнопокой, срабатывать будет без перезапуска Тотала.
Нужно только знать как выглядит соответствующая запись в секции [Colors] и название файла, в котором эта секция расположена.

Добавлено: Ср июн 04, 2014 22:45
DoctorIkari
LonerD, к сожалению, с Autohotkey не работал.
http://forum.wincmd.ru/viewpost.php?p=14123
Тут говорится про то, что ищем Totalcmd.inc команду... но таскать строки - такой команды нет. А без перетаскивания вообще ничего не понятно.
Подскажите, если не сложно :)

Добавлено: Ср июн 04, 2014 23:57
Flasher
LonerD писал(а):то несложно организовать скриптом Autohotkey
Я бы так не сказал, поскольку каждый раз придётся менять порядковый номер у всех последующих ключей. Скорость от такого подхода точно не возрастёт, внутренний инструмент сделает это куда быстрее, поэтому перетаскивание и актуально.

Добавлено: Чт июн 05, 2014 03:29
LonerD
Flasher
Универсальности тут быть не может. Нельзя сделать единый скрипт, который бы работал без модификаций на любых Тоталах, потому как различаются названия ключей (номера ключей) и их значения. Потому можно сделать только варианты для частного случая. Задачи перетаскивания не было поставлено в изначальном вопросе. Нужно просто полностью отключать определённое правило в цветовой схеме, а если оно уже отключено - включить.

DoctorIkari
Набросал вот такой вариант для TC 8.51a.
Работа в старых версиях возможна, но не проверялась (всё зависит ).
Вместо ColorFilterX указать свой ключ с шаблоном поиска (или ключи если таковых несколько, потому и оставил фигурные скобки).
В скрипте предусмотрено определение битности Тотала, определение положения ini-файла настроек (в случае редиректа) скрытие всех операций (чтобы не мельтешили перед глазами). Кратковременное "моргание" окошка настроек и курсора (в некоторых случаях) побороть скорее всего не представляется возможным. За качество кода попрошу не выражаться.
В случае несрабатывания можно попробовать изменить значения команды SetKeyDelay и SetControlDelay.
Сохранить скрипт в текстовый файл с любым именем (например, Script.ahk). Скачать AutoHotkey, распаковать и запустить
Autohotkey.exe Script.ahk
(можно повесить на панель инструментов или сделать пользовательскую ем-комманду).

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

;================================================================
; Вкл/выкл. подсвечивание файлов за датою
; Версия скрипта: 1.2
; Дата створення: 2014.06.05
; Автор скрипта: LonerD
;================================================================
#NoEnv
#NoTrayIcon
#SingleInstance ignore
SetKeyDelay, 50, 50
SetControlDelay, 20

if WinActive( "ahk_class TTOTAL_CMD" )
{
EnvGet, commander_path, commander_path
EnvGet, commander_ini, commander_ini

; Определяем редирект секции цветов
IniRead, RedirectColors, % commander_ini, Colors, RedirectSection, 0 
Transform, ColorsINI, Deref, % (RedirectColors ? RedirectColors : commander_ini) 

; Определяем битность ТС и задаём переменные
WinGet, TCHWND, ID, ahk_class TTOTAL_CMD
WinGet, TCControls, ControlList, ahk_id %TCHWND%
Loop, Parse, TCControls, `n, `r
{
  if ((A_LoopField = "TMyListBox1") || (A_LoopField = "TMyListBox2"))
  {
    TCheckBox2 := "TCheckBox2"
    TButton35 := "TButton35"
    TButton37 := "TButton37"
    break
  }
  else
  {
    TCheckBox2 := "Button5"
    TButton35 := "Button14"
    TButton37 := "Button16"
  }
}

; Блокируем перерисовку окна
DllCall("LockWindowUpdate", "uint", TCHWND)

; Включаем-отключаем подсвечивание
IniRead, DateColor, % ColorsINI, Colors, ColorFilterX
StringReplace, DateColor, DateColor, %A_Space%-Commented-Bebebe, , UseErrorLevel
if ErrorLevel = 0
{
  DateColor := DateColor . " -Commented-Bebebe"
}
IniWrite, % DateColor, % ColorsINI, Colors, ColorFilterX

; Вызываем окно настроек, делаем его прозрачным и нажимаем кнопки
PostMessage, 0x433, 494,,, ahk_class TTOTAL_CMD
WinWait, ahk_class TDLGCONFIGALL
WinSet, Transparent, 0, ahk_class TDLGCONFIGALL
Sleep, 50
ControlFocus, % TCheckBox2, ahk_class TDLGCONFIGALL
ControlSend, % TCheckBox2, {Space}, ahk_class TDLGCONFIGALL
ControlFocus, % TButton35, ahk_class TDLGCONFIGALL
ControlSend, % TButton35, {Space},  ahk_class TDLGCONFIGALL
ControlFocus, % TCheckBox2, ahk_class TDLGCONFIGALL
ControlSend, % TCheckBox2, {Space},  ahk_class TDLGCONFIGALL
ControlFocus, % TButton35, ahk_class TDLGCONFIGALL
ControlSend, % TButton35, {Space},  ahk_class TDLGCONFIGALL
ControlFocus, % TButton37, ahk_class TDLGCONFIGALL
ControlSend, % TButton37, {Space},  ahk_class TDLGCONFIGALL

; Контрольная проверка
IfWinNotActive, ahk_class TTOTAL_CMD
{
  ControlFocus, % TButton37, ahk_class TDLGCONFIGALL
  ControlSend, % TButton37, {Space},  ahk_class TDLGCONFIGALL
}
; Разблокируем окно ТС
DllCall("LockWindowUpdate", "uint", 0)
}
Exit

;================================================================

Если имеется несколько ключей (например, два), ответственных за изменение раскраски даты, то заменяем фрагмент

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

IniRead, DateColor, % ColorsINI, Colors, ColorFilterX 
 StringReplace, DateColor, DateColor, %A_Space%-Commented-Bebebe, , UseErrorLevel 
 if ErrorLevel = 0 
 { 
   DateColor := DateColor . " -Commented-Bebebe" 
 } 
 IniWrite, % DateColor, % ColorsINI, Colors, ColorFilterX
на

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

IniRead, DateColor1, % ColorsINI, Colors, ColorFilterX
IniRead, DateColor2, % ColorsINI, Colors, ColorFilterY
StringReplace, DateColor, DateColor, %A_Space%-Commented-Bebebe, , UseErrorLevel
if ErrorLevel = 0
{
  DateColor1 := DateColor1 . " -Commented-Bebebe"
  DateColor2 := DateColor2 . " -Commented-Bebebe"
}
IniWrite, % DateColor1, % ColorsINI, Colors, ColorFilterX
IniWrite, % DateColor2, % ColorsINI, Colors, ColorFilterY
, где ColorFilterX, ColorFilterY - имена ключей в вашем файле конфигурации.
Upd. Обновил. Слегка подчистил индусский код.
Upd2. Обновил оптять. Добавил автоопределение наличия редиректа секции ini-файла.
Upd3. Обновил снова. Теперь не нужно указывать значения ключа, ответственного за подсветку по дате, он просто комментируется.

Добавлено: Чт июн 05, 2014 04:48
Flasher
LonerD

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

if ( DateColor = "Bebebe" ) 
{ 
  IniWrite, НЕСтарше1часа, % ColorsINI, Colors, ColorFilterX 
} 
else 
{ 
  IniWrite, Bebebe, % ColorsINI, Colors, ColorFilterX 
}
Смену значения ключа с самого начала проверял, но почему-то выдавало общий цвет текста. Сейчас вроде бы нет. Хм. Тогда никакой перебор номеров и не нужен, ошибся я.

Добавлено: Чт июн 05, 2014 08:23
Avada
LonerD
Flasher
Загляните, пожалуйста, в ЛС.

Добавлено: Чт июн 05, 2014 20:40
DoctorIkari
LonerD, прошу прощения, никак не могу подогнать скрипт.
TC 8.51a. Цветовые схемы я создавал не из списка по умолчанию (добавил "не старше 1 дня" и "не старше 1 часа").
В Totalcmd.inc хранятся стандартные команды. А как тогда применять пользовательские и как подправить скрипт?
Спасибо.

Добавлено: Чт июн 05, 2014 21:10
LonerD
DoctorIkari
Я обновил скрипт. Теперь уже вручную не нужно указывать значения ключей.
как подправить скрипт
Нужно исправить только имена ключей ColorFilterX на свои (под которыми в ini-файле прописаны шаблоны раскраски в зависимости от даты/времени).

А как тогда применять пользовательские

Пользовательские команды в AutoHotkey-скрипте можно использовать с помощью такой функции.

Добавлено: Пт июн 06, 2014 00:35
sa
DoctorIkari писал(а):Цветовые схемы я создавал не из списка по умолчанию (добавил "не старше 1 дня" и "не старше 1 часа")
Кнопка с использованием утилиты TCFS2:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(tcini(TCFS2, ColorOff, 0, 0), set_tcini(Colors, ColorFilter2, `>Выкл не старше 1 часа`) + set_tcini(Colors, ColorFilter3, `>Выкл не старше 1 дня`) + set_tcini(TCFS2, ColorOff, 1), set_tcini(Colors, ColorFilter2, `>не старше 1 часа`) + set_tcini(Colors, ColorFilter3, `>не старше 1 дня`) + set_tcini(TCFS2, ColorOff, 0)) tcm(494, 1) delay(500) send(`+{TAB 5}  {ENTER}`, findwnd(`TDLGCONFIGALL`))"
wcmicons.dll,20
Выкл/вкл подсвечивание файлов не старше 1 часа и не старше 1 дня


-1
Кнопка приведена для случая , когда в диалоге цветов для типов файлов, шаблон ">не старше 1 часа" идёт вторым сверху, а шаблон ">не старше 1 дня" - третьим. Если порядковые номера другие, то имена ключей ColorFilter2 и ColorFilter3 (каждый в двух местах строки параметров), надо соответствующим образом заменить.
При экспериментах с кнопкой стоит сохранить копию wincmd.ini.

Добавлено: Пт июн 06, 2014 02:06
DoctorIkari
Все равно не понятно.
Для начала попробовал прикрутить чего-нибудь системного. Вроде не меняется.

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

; Включаем-отключаем подсвечивание
IniRead, DateColor1, % ColorsINI, Colors, 3312
IniRead, DateColor2, % ColorsINI, Colors, 3313
StringReplace, DateColor, DateColor, %A_Space%-Commented-Bebebe, , UseErrorLevel
if ErrorLevel = 0
{
  DateColor1 := DateColor1 . " -Commented-Bebebe"
  DateColor2 := DateColor2 . " -Commented-Bebebe"
}
IniWrite, % DateColor1, % ColorsINI, Colors, 3312
IniWrite, % DateColor2, % ColorsINI, Colors, 3313
Зато нашёл куда пишет цветовые схемы. В моём случае: d:\SYSTEM\Total Commander\Plugins\exe\colors\colors\tce-dark-grey.ini

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

[Colors]
BackColor2=7237230
ColorFilter1=>Обозначение файлов с комментариями
ColorFilter1Color=6881077
BackColor=6381921
ForeColor=-1
InverseCursor=0
InverseSelection=0
MarkColor=-1
CursorColor=65280
CursorText=0
ColorFilter2=>Пустые каталоги
ColorFilter2Color=11529
ColorFilter3=>Неверная дата
ColorFilter3Color=15079967
ColorFilter4=>Не старше 1 часа
ColorFilter4Color=9804543
ColorFilter5=>Не старше 1 дня
ColorFilter5Color=14145535
ColorFilter6=*.bak
ColorFilter6Color=65280
ColorFilter7=>Изображения
ColorFilter7Color=16750591
ColorFilter8=>Исполняемые файлы
ColorFilter8Color=4226815
ColorFilter9=*.key
ColorFilter9Color=12254640
ColorFilter10=>Аудио-файлы
ColorFilter10Color=33023
ColorFilter11=>Видео-файлы
ColorFilter11Color=7012351
ColorFilter12=>Системные файлы (атрибут)
ColorFilter12Color=64
ColorFilter13=>Архивы
ColorFilter13Color=1553675
ColorFilter14=>Документы, книги
ColorFilter14Color=16758711
ColorFilter15=*.ini
ColorFilter15Color=45232
ColorFilter16=*.txt
ColorFilter16Color=16777215
Даже с системными командами не получается чего-то.
Если не затруднит - напишите, пожалуйста, скрипт для данного частного случая. :(

Добавлено: Пт июн 06, 2014 07:59
sa
DoctorIkari писал(а):ColorFilter4=>Не старше 1 часа
...
ColorFilter5=>Не старше 1 дня
Случай , когда шаблон ">Не старше 1 часа" идёт четвёртым, а шаблон ">Не старше 1 дня" - пятым.
Кнопка:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(tcini(TCFS2, ColorOff, 0, 0), set_tcini(Colors, ColorFilter4, `>Выкл Не старше 1 часа`) + set_tcini(Colors, ColorFilter5, `>Выкл Не старше 1 дня`) + set_tcini(TCFS2, ColorOff, 1), set_tcini(Colors, ColorFilter4, `>Не старше 1 часа`) + set_tcini(Colors, ColorFilter5, `>Не старше 1 дня`) + set_tcini(TCFS2, ColorOff, 0)) tcm(494, 1) delay(500) send(`+{TAB 5}  {ENTER}`, findwnd(`TDLGCONFIGALL`))"
wcmicons.dll,20
Выкл/вкл подсвечивание файлов не старше 1 часа и не старше 1 дня


-1

Добавлено: Сб июн 07, 2014 00:33
Flasher
Та же схема, но только без мацания лишнего ключа и с более быстрым окнепрыгом:

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

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe
/ef "if(tcini(Colors,ColorFilter4,#)+tcini(Colors,ColorFilter5,#), set_tcini(Colors,ColorFilter4,`>Не старше 1 часа`) + set_tcini(Colors,ColorFilter5,`>Не старше 1 дня`), set_tcini(Colors,ColorFilter4,`4:`) + set_tcini(Colors,ColorFilter5,`5:`)) tcm(494,1) eval(send_wait(`+{TAB 5}  {TAB 5} {ESC}`,findwnd(`TDLGCONFIGALL`)))"
wcmicons.dll,13
Вкл./выкл. подсвечивание файлов не старше 1 часа и 1 дня
Используется исправленная TCFS2.exe. TCFS2.ini должен быть из последнего релиза.