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 

Single Post  Topic: Скрипт для быстрой навигации по пунктам меню 
Author Message
iglezz



PostPosted: Thu Dec 09, 2010 16:08    Post subject: Reply with quote

Скрипт, добавляющий нумерацию в меню.

Идея создания пришла в тот момент, когда я решил свою сборку дальше делать не только для себя, что повлекло за собой русификацию меню. На тот момент (да и до сих пор) наилучшим вариантом оказалась навигация по меню используя циферки.

Скрипт использует за основу шаблон, представляющий собой .mnu-файл (пример приведён ниже), в котором убраны символы '&' в строках, подлежащих нумерации.
Строки, содержащие '&', скрипт не нумерует. Это даёт возможность ассоциировать некоторые элементы меню с произвольными буковками/значками, проставив символ '&' перед ними.

Файл шаблона меню находится в одной папке с используемым файлом меню, т.е. для меню
C:\Totalcmd\wcmd_rus.mnu
шаблоном будет
C:\Totalcmd\wcmd_rus.mnu.template

Местонахождение mnu_AddNums.awk и mnu_AddNums.bat произвольно, но при этом они должны находится в одной папке.

В батнике требуется подправить строку:
SET MenuFile=%TC_LAUNCHER_PATH%\Profile\wcmd_rus.mnu
прописав в ней полный путь и имя используемого файла меню.
Например, следуя вышеприведённому примеру, SET MenuFile=C:\Totalcmd\wcmd_rus.mnu

! Прошу обратить внимание, %TC_LAUNCHER_PATH% — это собственная переменная моего лаунчера, а не ТК !

Для работы скрипта требуется gawk.
Его можно скачать здесь или лучше здесь (спасибо Flasherу!).
Из скачаного потребуется вытянуть только gawk.exe (никаких зависимостей он не имеет) и после этого куда-нибудь скопировать, например:
→ положить в папку, которая прописана в %PATH% или
→ положить в произвольную папку, прописав в батнике полный путь до него (не забывая про кавычки!) или
→ положить рядом с батником.


Код скриптов + пример шаблона меню и результата работы скрипта:

mnu_AddNums.awk:
Code:
BEGIN {
   ORS = "\n"
   count[level = 01 ] = 01
}

/^\;/ {
   next
}

{
   if ( $0 ~ /\<MENUITEM\W\"/ && $0 !~ "&" ) {
      
      print gensub( /\<MENUITEM\W\"/ , "&" gensub( /[0-9]$/ , "\\\\\\&&" , 1 , count[level]++ ) ": " , 1 )

   } else

      if ( $0 ~ /\<POPUP/ ) {

         print gensub( /\<POPUP\W\"/ , "&\\&" count[level++] ": " , 1 )
         count[level] = 1

      } else

         if ( $0 ~ /\<END_POPUP/ ) {
            
            print
            count[--level]++

         } else

            print $0

}

END { print "" }

mnu_AddNums.bat: (Скрипт немного обновлён)
Code:
@ECHO OFF

SET MenuFile=%TC_LAUNCHER_PATH%\Profile\wcmd_rus.mnu
SET ScriptFile=%~dp0mnu_AddNums.awk

COPY /B /V /Y "%MenuFile%" "%MenuFile%.bak"

( gawk.exe -f "%ScriptFile%" < "%MenuFile%.template" > "%MenuFile%" ) ^
   || PAUSE ; EXIT

Кусок wcmd_rus.mnu.template:
Code:
POPUP "Файл"
  POPUP "Текущий.."
    MENUITEM "..свойства\tAlt+Enter", 510
    MENUITEM "..атрибуты\tAlt+A", 502
    MENUITEM "..ассоциации", 507
  END_POPUP
  POPUP "Подсчитать занимаемое место..", 503
    MENUITEM ".. выделенным(и) файлом/папкой\tCtrl+Shift+C", 503
    MENUITEM ".. папками в текущей вкладке\tAlt+Shift+C", 2014
  END_POPUP

Кусок wcmd_rus.mnu (результат работы скрипта):
Code:
POPUP "&1: Файл"
  POPUP "&1: Текущий.."
    MENUITEM "&1: ..свойства\tAlt+Enter", 510
    MENUITEM "&2: ..атрибуты\tAlt+A", 502
    MENUITEM "&3: ..ассоциации", 507
  END_POPUP
  POPUP "&2: Подсчитать занимаемое место..", 503
    MENUITEM "&1: .. выделенным(и) файлом/папкой\tCtrl+Shift+C", 503
    MENUITEM "&2: .. папками в текущей вкладке\tAlt+Shift+C", 2014
  END_POPUP


Last edited by iglezz on Thu Dec 09, 2010 21:54; edited 8 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group