Структура разделов [lefttabs] и [righttabs]

Эти разделы файла конфигурации Total Commander содержат информацию о текущем состоянии вкладок на левой [lefttabs] и правой [righttabs] панелях. Прежде всего, следует отметить, что выражение "текущее состояние" не совсем верно. Попробуйте в произвольный момент открыть файл wincmd.ini и просмотреть эти разделы - вы убедитесь, что они отражают состояние вкладок не на данный момент, а, скорее всего, на момент начала сеанса работы. Чтобы синхронизировать эти разделы, необходимо выдать команду cm_ConfigSaveSettings.
Прежде всего, двигаясь от общего к частному, рассмотрим наиболее распространенный случай, когда открыто множество вкладок. Вот один из примеров раздела [lefttabs], а именно - содержание файла XXcopy.tab, который я в целях наглядности несколько подправил. Здесь и далее рассматривается левая панель, для правой всё аналогично.

[lefttabs]
0_path=c:\utils\XXcopy\
0_options=1|0|0|0|0|1|0
1_path=c:\user\HTML\Статьи\XXcopy\
1_caption=Статьи\XXcopy
1_options=1|0|0|0|0|1|0
2_path=c:\Utils\Test\
2_options=13|0|0|0|0|0|0
3_path=c:\user\Batches\
3_options=1|0|0|0|0|2|0
4_path=c:\Utils\
4_options=5|0|0|0|0|0|0
5_path=\\\Registry\HKEY_USERS\
5_options=1|0|0|0|0|0|0
6_path=::
6_caption=Desktop
6_options=1|0|0|0|0|0|0
7_path=D:\Documents and Settings\
7_options=1|0|0|0|0|0|0
8_path=c:\Utils\Test\
8_options=1|3|1|0|0|0|0
activetab=4


На первый взгляд, все очевидно. Вкладки нумеруются слева направо, первый индекс 0. У каждой вкладки два обязательных ключа: <номер>_path и <номер>_options и один необязательный - <номер>_caption, содержащий заголовок (название) вкладки, присвоенное пользователем.
Начнем с ключа <номер>_options. Подробное изучение смысла, который вкладывается в цифры, не проводилось, однако удалось сделать некоторые наблюдения.
Первая цифра - вид, используемый для представления файлов. Например, 0 - brief, 1 - full, 4 - show comments и т. д. Номер 13 в ключе 2_options соответствует одному из content-плагинов, идущим в моем списке под №8. Третья цифра с конца показывает, находится ли текущая директория внутри архива, предыдущая - тип архива, и т. д.

Для меня при написании скрипта TabTools была наиболее важна предпоследняя цифра, которая может принимать значения 0, 1 или 2, что соответствует состоянию "запертости" вкладки - "unlock", "lock" и "lock, but directory changes allowed" соответственно.
Обратим внимание, что кавычки не используются даже в тех строках, что содержат пробелы (например, 7_path=D:\Documents and Settings\). Символ :: означает рабочий стол. Ключ 5_path=\\\Registry\HKEY_USERS\ - FS-плагин TurboRegistry.
Казалось бы, все просто. Ключ activetab=4 тоже вроде бы сомнений не вызывает. А вот теперь вопрос на засыпку: какая директория является текущей? Вы думаете, c:\Utils\? А вот и нет! Не существует никакой связи между цифрами 4 в ключах activetab и 4_path. Точнее, отдаленная связь есть - текущая вкладка располагается рядом с c:\Utils\, но в общем случае отображает другой путь и другие опции!
Аналогично, пытаясь ответить на вопрос "Сколько вкладок открыто на левой панели?", вы скажете "Девять" и опять ошибетесь - десять.
Попутно заметим, что, сохранив текущий набор вкладок в файл, мы получим несколько иную структуру, как раз-таки отвечающую нашим ожиданиям. Во-первых, общее число вкладок будет на единицу (а не на два) больше номера последней. Во-вторых, значение ключа activetab будет указывать именно на текущую вкладку с соответствующим номером. Но нас интересует не файл с содержанием вкладок, а раздел конфигурации.
Дело в том, что информация о текущем пути и опциях всегда хранится не в разделах [lefttabs] и [righttabs], а [left] и [right]. Типовое содержание раздела [left]:


[left]
path=d:\Winnt\
ShowAllDetails=1
show=1
negative Sortorder=1
SpecialView=0
sortorder=3


Тут все еще проще и в пояснениях не нуждается. При этом заголовок панели, если он есть, все равно располагается в разделе [lefttabs], в ключе activecaption, и в этом есть смысл.
Теперь рассмотрим некоторые особые, частные случаи.
Прежде всего, загляните в свои настройки, раздел "Folder Tabs", флаг "Show tab header also when there is only one tab". Не знаю как вы, а я не вижу в установке этого флага решительно никакого смысла. Впрочем, если этот флаг все-таки стоит, придется рассмотреть один частный случай вместо двух.
Итак, предполагая, что флаг сброшен, закроем все вкладки (например, с помощью моего скрипта
CloseAllTabs) и вернем панель к первозданному виду, характерному для менее продвинутых файл-менеджеров или для самого ТС версии ниже 6.
Сохранив настройки и открыв файл конфигурации, мы увидим, что раздел [lefttabs] отсутствует - ровно до тех пор, пока мы не создадим вкладку - тогда их сразу будет две. Однако в разделе [lefttabs], напомним, будет содержаться информация всего об одной из них - той, которая не является активной.
Можно ли добиться, чтобы при единственной вкладке раздел [lefttabs] существовал? Как я узнал при написании скрипта
TabTools - можно. В реальной жизни такая ситуация вряд ли встретится, но хорошая программа должна предусматривать все, даже маловероятные, возможности.
Создадим две вкладки, одну из них запрем, а вторую закроем. На панели останется одна запертая вкладка. Тогда раздел будет иметь вид:

[lefttabs]
activetab=0
activelocked=1


Единственное, что может здесь меняться - значение ключа activelocked: 1 - "lock" или 2 - "lock, but directory changes allowed". Стоит нам отпереть вкладку, она пропадет (если флаг сброшен) или, в противном случае, присвоит ключу activelocked значение 0.
Напомню, что из файла конфигурации нельзя установить, какая панель - левая или правая - является активной в данный момент времени. Для этого можно использовать плагин
tc.
Напоследок приведу информацию для программистов - путь к текущей директории на левой панели можно получить и без чтения раздела [left], а запросив текст дочернего окна №3 класса TMyPanel.


Вахмурка