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 

Скрипт для быстрой навигации по пунктам меню

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Thu Dec 09, 2010 12:44    Post subject: Скрипт для быстрой навигации по пунктам меню Reply with quote

iglezz wrote:

Меню нумеруется скриптом для организации быстрой навигации по его пунктам независимо от текущей раскладки.

А можно узнать, что за скрипт?

 !  Avada:
Отделено из темы Ваш TC: выкладываем скриншоты (png) и цветовые схемы!
Back to top
View user's profile Send private message
iglezz



Joined: 08 Dec 2010
Posts: 48

Post (Separately) Posted: 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
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Thu Dec 09, 2010 16:13    Post subject: Reply with quote

iglezz
Спасибо. Попробую такую штуку.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Dec 09, 2010 17:01    Post subject: Reply with quote

HEXFIX
gawk
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10417
Location: Россия, Саратов

Post (Separately) Posted: Thu Dec 09, 2010 18:08    Post subject: Reply with quote

Некоторым участникам возникшей дискуссии даны разъяснения через ЛС. Обсуждение скрипта и его аналогов продолжаем только здесь.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Thu Dec 09, 2010 22:46    Post subject: Reply with quote

Получается, что работает только для пунктов из списка выпадающего меню.

Можно ли сделать следующее: нажимаю цифру 1 -открывается меню "Файл", цифру 2 - "Выделение" и т. д. ?
Back to top
View user's profile Send private message
iglezz



Joined: 08 Dec 2010
Posts: 48

Post (Separately) Posted: Thu Dec 09, 2010 23:18    Post subject: Reply with quote

HEXFIX
Подсказка: на моём скриншоте меню было открыто последовательностью Alt+7, затем 3. Далее для выбора элемента подменю остаётся нажать 1,2,3,4.

Это типичный способ навигации с клавиатуры по меню (в том числе контекстных) и диалогам во многих программах для Windows.
Символ, следующий за значком '&' в ресурсном файле меню и становится "горячей кнопкой", позволяющей быстро выбрать тот или иной пункт.
Back to top
View user's profile Send private message
HEXFIX



Joined: 25 Jun 2010
Posts: 173
Location: Калининград

Post (Separately) Posted: Tue Dec 14, 2010 01:51    Post subject: Reply with quote

Как образом добавить номер к пункту меню "Запуск"?
Back to top
View user's profile Send private message
iglezz



Joined: 08 Dec 2010
Posts: 48

Post (Separately) Posted: Tue Dec 14, 2010 02:38    Post subject: Reply with quote

HEXFIX wrote:
Как образом добавить номер к пункту меню "Запуск"?

Пока только вручную.
Название этого пункта меню находится в .lng файле (ресурс №129)
Пункты этого меню соответственно живут в .ini файле в секции [user]

Скрипт для внесения изменений в эти два файла будет несколько сложнее.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Dec 14, 2010 19:47    Post subject: Reply with quote

HEXFIX
А em_ команды чем не подходят?
Back to top
View user's profile Send private message
iglezz



Joined: 08 Dec 2010
Posts: 48

Post (Separately) Posted: Tue Dec 14, 2010 23:24    Post subject: Reply with quote

У меня доп. меню как раз на em_ командах и построено, т.к. меню запуск жутко неудобное и, к сожалению, неотключаемое Sad
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10417
Location: Россия, Саратов

Post (Separately) Posted: Tue Dec 14, 2010 23:42    Post subject: Reply with quote

iglezz
Очень даже отключаемое. RestrictInterface=1.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Dec 15, 2010 00:09    Post subject: Reply with quote

Забавно, только пару дней назад сообщил об этом автору топика в личке. Very Happy
Back to top
View user's profile Send private message
iglezz



Joined: 08 Dec 2010
Posts: 48

Post (Separately) Posted: Wed Dec 15, 2010 00:21    Post subject: Reply with quote

Avada wrote:
iglezz
Очень даже отключаемое. RestrictInterface=1.

Спасибо, давно что-то я не заглядывал в справку по .ini…

Flasher wrote:
Забавно, только пару дней назад сообщил об этом автору топика в личке. Very Happy

Так уж вышло, что автор темы и я — разные люди Smile
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Dec 15, 2010 00:36    Post subject: Reply with quote

iglezz
Так уж совпало, что он задал вопрос, на который получил от меня аналогичный Avada ответ в личке, в завуалированной форме (по его словам) здесь, но в конкретной там. Wink
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group