1

Тема: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

Cкрипт для ввода HTML-разметки обрамляющими тегами
Как его изменить следующим образом?
1. Сделать чтобы срабатывал только в окнах с указанными классами MozillaWindowClass, Chrome_WidgetWin_0 и IEFrame.
2. Желательно изменить подход в скрипте таким образом, чтобы он работал не через копировать-вставить, т.к.:
   А. в буфере обмена в этот момент может быть что-то полезное, что будет утрачено
   Б. невозможно отменить обрамление тегами однократным нажатием CTRL+Z: требуется 4 нажатия вместо 1.

2

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

1. IfWinActive
2. Предложите концепцию, как получить текст из окна FIrefox, Chrome, IE не используя буфер обмена.
 A. Clipboard
 B. Однократным нажатием ctrl+z отменить можно именно вставку.

3 (изменено: Drugoy, 2012-01-22 20:54:36)

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

Я не очень в AHK разбираюсь и мне нужна более детальная помощь:
1.

If WinActive("ahk_class MozillaWindowClass") or ("ahk_class Chrome_WidgetWin_0")

также как и

IfWinActive, ("ahk_class MozillaWindowClass") or ("ahk_class Chrome_WidgetWin_0")

и также как и

IfWinActive, ("MozillaWindowClass|Chrome_WidgetWin_0")

работает и в Notepad++ почему-то.
2. Предлагаю такую:

   OldClipboard := Clipboard
...
произвести действия:
копировать выделенный текст
обрамить его тэгами
вставить уже обрамлённый тегами текст (попутно решив проблему 2.Б.)
...
   Clipboard := OldClipboard

4

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

1. По ссылке синтаксис команды описан, в переборе вариантов нет необходимости.

If WinActive("ahk_class MozillaWindowClass") or WinActive("ahk_class Chrome_WidgetWin_0")

2. Замечательно, поддерживаю.

5 (изменено: Drugoy, 2012-01-22 21:16:09)

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

creature.ws пишет:

1. По ссылке синтаксис команды описан, в переборе вариантов нет необходимости.

If WinActive("ahk_class MozillaWindowClass") or WinActive("ahk_class Chrome_WidgetWin_0")

И в таком случае - срабатывает и в notepad++.
Синтаксис описан так, что без примеров использования - мне ничего не понятно. На мой взгляд там всё очень запутано:
не описана разница между IfWinActive, If WinActive и #IfWinActive.
А примеров там мало (нет примера если нужно указать не одну проверку, а несколько).

6 (изменено: creature.ws, 2012-01-22 21:27:56)

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

А какие отличия должны быть подчеркнуты в описании?
IfWinActive — команда, WinActive() — функция, #IfWinActive — директива.
#IfWinActive, IfWinActive ::en.
Действия по условию If WinActive("ahk_class MozillaWindowClass") or WinActive("ahk_class Chrome_WidgetWin_0") выполнятся в случае если активно окно с классом MozillaWindowClass или Chrome_WidgetWin_0.
Добавить к этому нечего.

7

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

creature.ws пишет:

А какие отличия должны быть подчеркнуты в описании?
IfWinActive — команда, WinActive() — функция, #IfWinActive — директива.
#IfWinActive, IfWinActive ::en.
Действия по условию If WinActive("ahk_class MozillaWindowClass") or WinActive("ahk_class Chrome_WidgetWin_0") выполнятся в случае если активно окно с классом MozillaWindowClass или Chrome_WidgetWin_0.
Добавить к этому нечего.

Ну вот не работает оно. Не знаю почему. У Notepad++ класс явно другой (я даже проверил), но хоткеи срабатывают и в нём.
В принципе вопрос решил:

GroupAdd, Browsers, ahk_class MozillaWindowClass
GroupAdd, Browsers, ahk_class Chrome_WidgetWin_0
GroupAdd, Browsers, ahk_class IEFrame

#IfWinActive ahk_group browsers
!sc030::Wrap("b") ; Alt+B
!sc016::Wrap("u") ; Alt+U
!sc017::Wrap("i") ; Alt+I


Wrap(tag)
   {
    OldClipboard := Clipboard
    send, ^{vk43} ; Ctrl+C
    Sleep, 10
    Clipboard := "[" tag "]" . Clipboard . "[/" tag "]"
    send, ^{vk56} ; Ctrl+V
    Clipboard := OldClipboard
	return
    }
	return

8

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

Замечательно официальный форум оказался более дружелюбен.

9

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

#IfWinActive, ahk_group MyGroup
GroupAdd, MyGroup, ahk_class MozillaWindowClass
GroupAdd, MyGroup, ahk_class Chrome_WidgetWin_0
GroupAdd, MyGroup, ahk_class IEFrame
TagLength:=StrLen(Tag:="b")

^vk42:: ; ctrl+b
   ClipContent:=ClipboardAll
   Send, ^{Ins}
   Length:=StrLen(Clipboard)
   Send, % "{BS}["Tag "]+{Ins}[/"Tag "]"
   Clipboard:=ClipContent
   IsTagged:=True
   Return

^$vk5A:: ; ctrl+z
   If !IsTagged
      Send, ^{vk5A}
   Else
   {
      IfWinActive, ahk_class MozillaWindowClass
         Send, % "^{vk5A 4}{Left "Length "}"
      IfWinActive, ahk_class IEFrame
         Send, % "^{vk5A}{Left "Length "}"
      IfWinActive, ahk_class Chrome_WidgetWin_0
         Send, % "{BS "TagLength+3 "}"
             . "{Left "Length "}{BS "TagLength+2 "}"
      IsTagged:=False
   }
   Return

10

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

Grey,
спасибо, а как помимо ctrl+b добавить и ctrl+u и ctrl+i?

11

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

#IfWinActive, ahk_group MyGroup
GroupAdd, MyGroup, ahk_class MozillaWindowClass
GroupAdd, MyGroup, ahk_class Chrome_WidgetWin_0
GroupAdd, MyGroup, ahk_class IEFrame

^vk42:: ; ctrl+b
^vk49:: ; ctrl+i
^vk55:: ; ctrl+u
   If SubStr(A_ThisHotkey, 2)="vk42"
      Tag:="b"
   If SubStr(A_ThisHotkey, 2)="vk49"
      Tag:="i"
   If SubStr(A_ThisHotkey, 2)="vk55"
      Tag:="u"
   TagLength:=StrLen(Tag)
   ClipContent:=ClipboardAll
   Send, ^{Ins}
   Length:=StrLen(Clipboard)
   Send, % "{BS}["Tag "]+{Ins}[/"Tag "]"
   Clipboard:=ClipContent
   IsTagged:=True
   Return

^$vk5A:: ; ctrl+z
   If !IsTagged
      Send, ^{vk5A}
   Else
   {
      IfWinActive, ahk_class MozillaWindowClass
         Send, % "^{vk5A 4}{Left "Length "}"
      IfWinActive, ahk_class IEFrame
         Send, % "^{vk5A}{Left "Length "}"
      IfWinActive, ahk_class Chrome_WidgetWin_0
         Send, % "{BS "TagLength+3 "}"
             . "{Left "Length "}{BS "TagLength+2 "}"
      IsTagged:=False
   }
   Return

12

Re: AHK: скрипт для ввода HTML-разметки обрамляющими тегами

Grey,
спасибо!