2013-09-01 2 views
0

В Onenote, скажем, я хочу написать x^y (x для мощности y), мне нужно будет войти в режим Equ (с помощью сочетания клавиш), введите x^y, нажмите пробел, затем выйдите из режима экстентаКак использовать HotString с переменной и шаблоном?

Таким образом, я полагаю, что это может быть что-то вроде этого:

::(wild_card)^(wild_card):: 
Send, (Shortcut for equ mode) 
Send, variable1 
Send,^
Send, variable2 
Send, space 
Send, (Shortcut for equ mode) 

Как я на самом деле добиться этого?

С другой стороны, с той же целью можно сформулировать делая,
- монитор слова, разделенные, прекратив символов
- обнаружить, если ^ в те слова
- Send (Shortcut), то слово, то пространство, то (ярлык).
Является ли это более выполнимым?

+1

Посмотрите на [RegEx Powered Dynamic строки автозамены] (http://www.autohotkey.com/board/topic/15015-regex-powered-dynamic-hotstring с /). Чтобы получить то, что вы хотите, вам нужно будет внести несколько поправок в пример процента. Конечно, вы должны проверить, активен ли OneNote до запуска. – MCL

ответ

1

Благодаря MCL,

Вот код для автоматического конвертирования x_y и х^у в их математическое представление в OneNote

#Include DynamicHotstrings.ahk 
#IfWinActive, ahk_class Framework::CFrame 
hotstrings("(\w+\_\w+) ","dowork") 
hotstrings("(\w+\^\w+) ","dowork") 

dowork: 
    Send, {LAlt Down}{=}{LAlt Up} 
    SendRaw, %$1% 
    Send, {Space} 
    Send, {LAlt Down}{=}{LAlt Up} 
    Send, {Space} 
    Return 

еще лучше, вы можете изменить DynamicHotstrings.ahk поэтому он будет игнорировать авто новообращенного, когда мы уже в режиме уравнения:

hotstrings(k, a = "") 
{ 
    CoordMode,Pixel,Screen 
    PixelGetColor, color, 455, 1 
    if (color = 0xD7337F) 
     return 
     .... 
+0

Хорошая работа, несколько заметок: 1) Я считаю, что избежать подчеркивания (** \\ _ **) в регулярном выражении не требуется. 2) Проверка пикселя по координатам для идентификации окна (состояния) почти всегда ненадежна. Если это собственное окно, попробуйте его идентифицировать. Если это просто элемент управления, работайте с командами «Control ...». 3) '# IfWin' скорее всего не применим к функции' hotstrings() '. Вам также придется изменить функцию для этого, также проверив 'IfWinActive, ...'. – MCL

Смежные вопросы