View previous topic :: View next topic |
Author |
Message |
HEXFIX
Joined: 25 Jun 2010 Posts: 173 Location: Калининград
|
(Separately) Posted: Thu Dec 09, 2010 12:44 Post subject: Скрипт для быстрой навигации по пунктам меню |
|
|
iglezz wrote: |
Меню нумеруется скриптом для организации быстрой навигации по его пунктам независимо от текущей раскладки.
|
А можно узнать, что за скрипт?
|
|
Back to top |
|
 |
iglezz
Joined: 08 Dec 2010 Posts: 48
|
(Separately) 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 |
|
Back to top |
|
 |
HEXFIX
Joined: 25 Jun 2010 Posts: 173 Location: Калининград
|
(Separately) Posted: Thu Dec 09, 2010 16:13 Post subject: |
|
|
iglezz
Спасибо. Попробую такую штуку. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10417 Location: Россия, Саратов
|
(Separately) Posted: Thu Dec 09, 2010 18:08 Post subject: |
|
|
Некоторым участникам возникшей дискуссии даны разъяснения через ЛС. Обсуждение скрипта и его аналогов продолжаем только здесь. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
HEXFIX
Joined: 25 Jun 2010 Posts: 173 Location: Калининград
|
(Separately) Posted: Thu Dec 09, 2010 22:46 Post subject: |
|
|
Получается, что работает только для пунктов из списка выпадающего меню.
Можно ли сделать следующее: нажимаю цифру 1 -открывается меню "Файл", цифру 2 - "Выделение" и т. д. ? |
|
Back to top |
|
 |
iglezz
Joined: 08 Dec 2010 Posts: 48
|
(Separately) Posted: Thu Dec 09, 2010 23:18 Post subject: |
|
|
HEXFIX
Подсказка: на моём скриншоте меню было открыто последовательностью Alt+7, затем 3. Далее для выбора элемента подменю остаётся нажать 1,2,3,4.
Это типичный способ навигации с клавиатуры по меню (в том числе контекстных) и диалогам во многих программах для Windows.
Символ, следующий за значком '&' в ресурсном файле меню и становится "горячей кнопкой", позволяющей быстро выбрать тот или иной пункт. |
|
Back to top |
|
 |
HEXFIX
Joined: 25 Jun 2010 Posts: 173 Location: Калининград
|
(Separately) Posted: Tue Dec 14, 2010 01:51 Post subject: |
|
|
Как образом добавить номер к пункту меню "Запуск"? |
|
Back to top |
|
 |
iglezz
Joined: 08 Dec 2010 Posts: 48
|
(Separately) Posted: Tue Dec 14, 2010 02:38 Post subject: |
|
|
HEXFIX wrote: | Как образом добавить номер к пункту меню "Запуск"? |
Пока только вручную.
Название этого пункта меню находится в .lng файле (ресурс №129)
Пункты этого меню соответственно живут в .ini файле в секции [user]
Скрипт для внесения изменений в эти два файла будет несколько сложнее. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Dec 14, 2010 19:47 Post subject: |
|
|
HEXFIX
А em_ команды чем не подходят? |
|
Back to top |
|
 |
iglezz
Joined: 08 Dec 2010 Posts: 48
|
(Separately) Posted: Tue Dec 14, 2010 23:24 Post subject: |
|
|
У меня доп. меню как раз на em_ командах и построено, т.к. меню запуск жутко неудобное и, к сожалению, неотключаемое  |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10417 Location: Россия, Саратов
|
(Separately) Posted: Tue Dec 14, 2010 23:42 Post subject: |
|
|
iglezz
Очень даже отключаемое. RestrictInterface=1. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Dec 15, 2010 00:09 Post subject: |
|
|
Забавно, только пару дней назад сообщил об этом автору топика в личке.  |
|
Back to top |
|
 |
iglezz
Joined: 08 Dec 2010 Posts: 48
|
(Separately) Posted: Wed Dec 15, 2010 00:21 Post subject: |
|
|
Avada wrote: | iglezz
Очень даже отключаемое. RestrictInterface=1. |
Спасибо, давно что-то я не заглядывал в справку по .ini…
Flasher wrote: | Забавно, только пару дней назад сообщил об этом автору топика в личке.  |
Так уж вышло, что автор темы и я — разные люди  |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Dec 15, 2010 00:36 Post subject: |
|
|
iglezz
Так уж совпало, что он задал вопрос, на который получил от меня аналогичный Avada ответ в личке, в завуалированной форме (по его словам) здесь, но в конкретной там.  |
|
Back to top |
|
 |
|