iglezz
|
Posted: Thu Dec 09, 2010 16:08 Post subject: |
|
|
Скрипт, добавляющий нумерацию в меню.
Идея создания пришла в тот момент, когда я решил свою сборку дальше делать не только для себя, что повлекло за собой русификацию меню. На тот момент (да и до сих пор) наилучшим вариантом оказалась навигация по меню используя циферки.
Скрипт использует за основу шаблон, представляющий собой .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 |
|