Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: Квас от сентября 8, 2010, 11:42

Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 11:42
myst вчера подсказал о существовании сабжа.

А пользовались ли вы?

Я второй день нахожусь в положении той лисицы, которая с виноградом. Дело в том, что при автозамене строк, содержащих латинские буквы, компьютер виснет окончательно и бесповоротно. Таким образом, не работают простейшие скрипты, как, например,  элементарный пример из AutoHotkey и русский язык – дружба навеки (http://www.script-coding.info/AutoHotkey/AhkRussian_3b.html)

::btw::by the way. ; назначаем автозамену для английской раскладки
::иец::by the way. ; назначаем автозамену для русской раскладки

Замена "иец" работает, замена "btw" - нет.

OS Windows XP, язык по умолчанию - русский, версия AutoHotkey 1.0.48.05.

Any help appreciated. :) А то я в печали даже на Сером форуме (http://www.script-coding.info/) зарегистрировался.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 12:04
Пользовался давно. Хотел сокращений навешать, типа тп → т. п., нэ → н. э., днэ → до н. э. и т. д., но потом забил. У меня сейчас другая затея — predictive text entry system. :)
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 12:06
Вспомнил, она с Уникодом вроде не дружила.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 12:13
Цитата: Квас от сентября  8, 2010, 11:42
Замена "иец" работает, замена "btw" - нет.
У меня нормально работает этот пример. Программу взял с оффсайта. Правда, я комментарии удалил.
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 12:46
Видно, с Уникодом его подружить проще, чем с моим компом. :( Между делом ещё разок перегрузил и решил закончить с экспериментами.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 13:39
Цитата: Квас от сентября  8, 2010, 12:46
идно, с Уникодом его подружить проще, чем с моим компом. :( Между делом ещё разок перегрузил и решил закончить с экспериментами.
А Вы для чего её хотели? Для тире и пр.? Я нашёл, что такие вещи эффективнее добавить в раскладку. Если использовать для развёртки аббревиатур, то русский язык с его падежными окончаниями всё портит. :(
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 13:43
А если строки переставить местами, ничего не меняется?
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 14:00
Цитата: myst от сентября  8, 2010, 13:39
А Вы для чего её хотели? Для тире и пр.? Я нашёл, что такие вещи эффективнее добавить в раскладку.

У меня давно в голове крутились какие-то мысли об организации ввода. Пришёл к выводу, что хорошо всё-таки фактически иметь много "раскладок": если на одну навешать слишком много всего, то для получения нужного симовла может требоваться слишком много нажатий, что для набора "в промышленном масштабе" существенный недостаток. Взял кавычки слово "раскладки", потому что добавлять настоящие раскладки не хочу из-за неудобности циклического переключения.

Оказывается, все эти задачи уже решены, и поставлены новые, и они тоже решены.

И AutoHotkey мне вообще понравился, хотя я и не особенно глубоко вник. Hotstring-ам можно было бы много применений сделать: куски ТеХ-овского кода, например, автоматически вставлять, да и вместо мёртвых клавиш их использовать.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 14:07
Цитата: Квас от сентября  8, 2010, 14:00
Взял кавычки слово "раскладки", потому что добавлять настоящие раскладки не хочу из-за неудобности циклического переключения.
:o Ctrl+Shift+<цифра> же!
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 14:12
Цитата: myst от сентября  8, 2010, 14:07
Ctrl+Shift+<цифра> же!

Это понятно. Но, во-первых, если постоянно переключать две, то дешевле цикличиски. Во-вторых, супруга ругается, когда я "ерунду всякую добавляю". :green: Кроме прочего, у меня пока нет насущной необходимости набирать большие тексты на языках с экзотическими буквами.
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 14:25
Цитата: myst от сентября  8, 2010, 13:43
А если строки переставить местами, ничего не меняется?

Semper idem. В том числе если одну строчку оставить. Готов спорить, что моя винда виновата.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 15:11
Цитата: Квас от сентября  8, 2010, 14:12
Это понятно. Но, во-первых, если постоянно переключать две, то дешевле цикличиски.
Если постоянно переключать две, самый эффективный метод — это повесить их на шифты или контролы. Переключать не правильно, правильно включать. :)
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 15:12
Цитата: Квас от сентября  8, 2010, 14:25
Semper idem. В том числе если одну строчку оставить. Готов спорить, что моя винда виновата.
Убейте все процессы, которые вешают хуки, и попробуйте ещё раз.
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 16:26
Цитата: myst от сентября  8, 2010, 15:11
Убейте все процессы, которые вешают хуки, и попробуйте ещё раз.

Вот так задача. Если уничтожить все процессы, запущенные от имени пользователя, то можно ли быть уверенным, что оставшиеся не вешают хуков?
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 16:32
Цитата: Квас от сентября  8, 2010, 16:26
Вот так задача. Если уничтожить все процессы, запущенные от имени пользователя, то можно ли быть уверенным, что оставшиеся не вешают их?
Под подозрение должны попадать процессы (включая службы) установленных программ, естественно. То есть всё, что в автозагрузке, и вручную запущено в текущем сеансе. Временно отключите всё, что есть в автозагрузке (с помощью msconfig, например), выйдите из системы (Log off) и снова войдите (Log on).
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 17:50
Цитата: myst от сентября  8, 2010, 16:32
Временно отключите всё, что есть в автозагрузке (с помощью msconfig, например), выйдите из системы (Log off) и снова войдите (Log on).

Надеюсь, я сделал то что надо, но всё равно напрасно.
Название: AutoHotkey
Отправлено: Bhudh от сентября 8, 2010, 17:59
Offtop
Автозамену строк я себе в ПунтоСвичере сделал, там можно выбрать, во всех раскладках переключать или только в одной.
Но чё-т мне кажется, AutoHotkey вообще не для того нужон.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 18:10
В Punto вроде тоже косяк с Уникодом.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 18:11
Цитата: Квас от сентября  8, 2010, 16:26
Если уничтожить все процессы, запущенные от имени пользователя, то можно ли быть уверенным, что оставшиеся не вешают хуков?
Значит дело не в конфликте хуков.
Название: AutoHotkey
Отправлено: Bhudh от сентября 8, 2010, 18:58
Цитата: myst В Punto вроде тоже косяк с Уникодом.
Не знаю, пока не встречал. Гречица и m-dash вставляются без проблем.
Название: AutoHotkey
Отправлено: myst от сентября 8, 2010, 19:03
Я не помню, но почему-то тоже перестал им пользоваться...
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 21:29
(http://www.kolobok.us/smiles/standart/dance3.gif)(http://www.kolobok.us/smiles/standart/dance3.gif)(http://www.kolobok.us/smiles/standart/dance3.gif)
Заработало!
:P
Оказывается, было виновата английская раскладка: у меня стояла значительно модифицированная MSKLC-ом. То есть видимо из-за неладов с Уникодом в конечном итоге. Интересно, что русская была тоже минимально модифицирована: подвесил тильду.
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 21:34
myst, а всё неюникодное вы отбрасываете из-за практических неудобств или из-за того, что "за Уникодом будущее, всё остальное обречено"?
Название: AutoHotkey
Отправлено: Квас от сентября 8, 2010, 23:12
AutoHotkey ĭllŭm sătĭs bĕnĕ Unicod ăccĭpĭt, ŭt ĕjŭs auxĭlĭō ŏmnēs ăccĕntūs ĕffĭcĕrĕ pŏssŭm, ĭdquĕ făcĭlĭŭs quăm ăntĕā ēvenit.

Короче, достаточно дружат AutoHotkey с Уникодом, чтобы я эту фигню набрал. Например, файлы .ahk можно сохранять в UTF-8.
Название: AutoHotkey
Отправлено: RawonaM от сентября 9, 2010, 08:40
Лень доки курить: как сделать, чтобы правый ктрл+вверх = pageup?

На моем новом ноуте та же проблема, что эти клавиши навешаны на стрелки при нажатии fn, которая находится только с другой стороны. Хочу решить вопрос таким способом.
Название: AutoHotkey
Отправлено: RawonaM от сентября 9, 2010, 09:03
Как мало надо для счастья:

RControl & Up::Send {PgUp}
RControl & Down::Send {PgDn}
RControl & Left::Send {Home}
RControl & Right::Send {End}


8-)
Название: AutoHotkey
Отправлено: myst от сентября 9, 2010, 11:29
^Up::SendInput {PgUp}
^Down::SendInput {PgDn}
Название: AutoHotkey
Отправлено: myst от сентября 9, 2010, 11:30
Цитата: Квас от сентября  8, 2010, 23:12
Короче, достаточно дружат AutoHotkey с Уникодом, чтобы я эту фигню набрал. Например, файлы .ahk можно сохранять в UTF-8.
Значит уже дружит. Это хорошо.
Название: AutoHotkey
Отправлено: RawonaM от сентября 9, 2010, 12:34
Цитата: myst от сентября  9, 2010, 11:29
^Up::SendInput {PgUp}
^Down::SendInput {PgDn}
Не гут, надо тока правый ктрл. Я уже сделал. А в чем разница между Send и SendInput?
Название: AutoHotkey
Отправлено: myst от сентября 9, 2010, 13:13
Цитата: RawonaM от сентября  9, 2010, 12:34
А в чем разница между Send и SendInput?
Я так понял, SendInput работает через SendInput(), а Send — через механизм сообщений.
Название: AutoHotkey
Отправлено: Квас от сентября 9, 2010, 23:38
Цитата: myst от сентября  8, 2010, 15:11
Если постоянно переключать две, самый эффективный метод — это повесить их на шифты или контролы. Переключать не правильно, правильно включать. :)

Это я согласен. Уже сделал. :yes:
Название: AutoHotkey
Отправлено: Квас от сентября 11, 2010, 20:31
myst, за AHK огромное спасибо! ;up: У меня теперь тоже человеческое тире есть, а также «ёлочки»! Не считая скриптика для открытия электронных книг. :=

С уникодом он не сказать чтобы дружит. Вернее сказать общаются. А дружит его модификация AutoHotkey_L (http://www.autohotkey.net/~Lexikos/AutoHotkey_L/).
Название: AutoHotkey
Отправлено: myst от сентября 11, 2010, 21:00
Цитата: Квас от сентября 11, 2010, 20:31
myst, за AHK огромное спасибо! ;up:
Пожалуйста. :)

Цитата: Квас от сентября 11, 2010, 20:31
У меня теперь тоже человеческое тире есть, а также «ёлочки»!
Это ить в раскладку можно добавить. Могу даже готовой поделиться.
Название: AutoHotkey
Отправлено: Квас от сентября 11, 2010, 21:10
Цитата: myst от сентября 11, 2010, 21:00
Это ить в раскладку можно добавить. Могу даже готовой поделиться.

Спасибо, не стоит. :) Я собирался как-то сам добавить, да так и не собрался. Зато у меня «ёлочки» — smart, а в раскладке без второй клавиши, наверно, не обойтись.

Кстати, апостроф и закрывающая кавычка - это не одно и то же?
Название: AutoHotkey
Отправлено: myst от сентября 11, 2010, 21:57
Цитата: Квас от сентября 11, 2010, 21:10
Кстати, апостроф и закрывающая кавычка - это не одно и то же?
Нет вроде.
Название: AutoHotkey
Отправлено: Bhudh от сентября 11, 2010, 23:41
U+0027 APOSTROPHE vs. U+2019 RIGHT SINGLE QUOTATION MARK
Название: AutoHotkey
Отправлено: Квас от сентября 11, 2010, 23:49
Цитата: Bhudh от сентября 11, 2010, 23:41
U+0027 APOSTROPHE vs. U+2019 RIGHT SINGLE QUOTATION MARK

Это я видал. U+0027 — это, очевидно, в точности то, что должна производить клавиша «апостроф» английской раскладки. Но этот символ бывает не очень-то похож на запятую. В то же время определённо я видел книги, в которых апостроф и закрывающаяся кавычка имели одинаковую форму запятой.

У меня недоверие к Basic Latin. В конце концов, там  в качестве кавычек указывается единственно двойная открывающая и она же закрывающая. В нормальных книгах так не делается.
Название: AutoHotkey
Отправлено: Bhudh от сентября 12, 2010, 00:10
В уникоде до фига разных кавычек. Одинарные, двойные, парные, непарные, угловые, жирные...
Название: AutoHotkey
Отправлено: myst от сентября 12, 2010, 09:42
Цитата: Квас от сентября 11, 2010, 23:49
Это я видал. U+0027 — это, очевидно, в точности то, что должна производить клавиша «апостроф» английской раскладки. Но этот символ бывает не очень-то похож на запятую.
Цитата: http://en.wikipedia.org/wiki/Apostroph#Computing
There are several types of apostrophe character in Unicode:
( ' ) Vertical typewriter apostrophe (Unicode name apostrophe or apostrophe-quote), U+0027, inherited from ASCII.
( ' ) Punctuation apostrophe (or typographic apostrophe; right single quotation mark; single comma quotation mark), U+2019. Serves as both an apostrophe and closing single quotation mark. This is the preferred character to use for apostrophe according to the Unicode standard.[61]
( ʼ ) Letter apostrophe (or modifier letter apostrophe), U+02BC. This is preferred when the apostrophe is not considered punctuation that separates letters, but a letter in its own right. Examples occur in Breton cʼh, the Cyrillic Azerbaijani alphabet, or in some transliterations such as the transliterated Arabic glottal stop, hamza, or transliterated Cyrillic soft sign. As the letter apostrophe is seldom used in practice, the Unicode standard cautions that one should never assume text is coded thus. The letter apostrophe is rendered identically to the punctuation apostrophe in the Unicode code charts.[62]
( ʻ ) The Hawaiian glottal stop, the ʻokina, has its own Unicode character, U+02BB.
( ˮ ) Nenets languages Double letter apostrophe (Unicode name modifier letter double apostrophe), U+02EE.
(  ՚  ) Armenian apostrophe, U+055A.
А ведь Вы правы. Действительно правая одиночная кавычка.
Название: AutoHotkey
Отправлено: Тайльнемер от сентября 12, 2010, 10:49
Цитата: Квас от сентября 11, 2010, 21:10
Кстати, апостроф и закрывающая кавычка - это не одно и то же?
Да. Дурь, но это так.
Цитата: Bhudh от сентября 12, 2010, 00:10
В уникоде до фига разных кавычек.
В уникоде недостаточное количество разных кавычек.
Название: AutoHotkey
Отправлено: Тайльнемер от сентября 12, 2010, 10:58
Цитата: Квас от сентября 11, 2010, 20:31
А дружит его модификация AutoHotkey_L.
А вот за "_L" вам спасибо, Квас!
Я ведь AHK не стал использовать именно из-за неуникодности.
Название: AutoHotkey
Отправлено: Квас от сентября 12, 2010, 10:59
Je vous en prie ! :UU:
Название: AutoHotkey
Отправлено: O от января 25, 2012, 10:02
Наконец, скачал, установил, запустил. Предложила создать пример скрипта. Отказался. Закрылась. Запустил снова, согласился, создала, закрылась. Запускаю — ругается, что, дескать, #z::Run www.autohotkey.com — негодный скрипт, и отказывается работать. Выясняется, что ей обязательно нужна английская раскладка по умолчанию. Бред какой-то, ей-богу!
Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 10:45
Да, буквы в горячих клавишах — это самая неудобная вещь. Чтобы сделать независящие от раскладки сочетания, используются сканкоды или виртуальные коды. Не вдаваясь в то, чем они отличаются, я имею обыкновение пользоваться сканкодами, в чём помогает следующий немудрёный скрипт:

SetTitleMatchMode, 2
return
#IfWinActive, SciTE4AutoHotkey
^+sc01::SendInput, sc01
^+sc02::SendInput, sc02
^+sc03::SendInput, sc03
^+sc04::SendInput, sc04
^+sc05::SendInput, sc05
^+sc06::SendInput, sc06
^+sc07::SendInput, sc07
^+sc08::SendInput, sc08
^+sc09::SendInput, sc09
^+sc0A::SendInput, sc0A
^+sc0B::SendInput, sc0B
^+sc0C::SendInput, sc0C
^+sc0D::SendInput, sc0D
^+sc0E::SendInput, sc0E
^+sc0F::SendInput, sc0F
^+sc10::SendInput, sc10
^+sc11::SendInput, sc11
^+sc12::SendInput, sc12
^+sc13::SendInput, sc13
^+sc14::SendInput, sc14
^+sc15::SendInput, sc15
^+sc16::SendInput, sc16
^+sc17::SendInput, sc17
^+sc18::SendInput, sc18
^+sc19::SendInput, sc19
^+sc1A::SendInput, sc1A
^+sc1B::SendInput, sc1B
^+sc1C::SendInput, sc1C
^+sc1D::SendInput, sc1D
^+sc1E::SendInput, sc1E
^+sc1F::SendInput, sc1F
^+sc20::SendInput, sc20
^+sc21::SendInput, sc21
^+sc22::SendInput, sc22
^+sc23::SendInput, sc23
^+sc24::SendInput, sc24
^+sc25::SendInput, sc25
^+sc26::SendInput, sc26
^+sc27::SendInput, sc27
^+sc28::SendInput, sc28
^+sc29::SendInput, sc29
^+sc2A::SendInput, sc2A
^+sc2B::SendInput, sc2B
^+sc2C::SendInput, sc2C
^+sc2D::SendInput, sc2D
^+sc2E::SendInput, sc2E
^+sc2F::SendInput, sc2F
^+sc30::SendInput, sc30
^+sc31::SendInput, sc31
^+sc32::SendInput, sc32
^+sc33::SendInput, sc33
^+sc34::SendInput, sc34
^+sc35::SendInput, sc35
^+sc36::SendInput, sc36
^+sc37::SendInput, sc37
^+sc38::SendInput, sc38
^+sc39::SendInput, sc39
^+sc3A::SendInput, sc3A
^+sc3B::SendInput, sc3B
^+sc3C::SendInput, sc3C
^+sc3D::SendInput, sc3D
^+sc3E::SendInput, sc3E
^+sc3F::SendInput, sc3F
^+sc40::SendInput, sc40
^+sc41::SendInput, sc41
^+sc42::SendInput, sc42
^+sc43::SendInput, sc43
^+sc44::SendInput, sc44
^+sc45::SendInput, sc45
^+sc46::SendInput, sc46
^+sc47::SendInput, sc47
^+sc48::SendInput, sc48
^+sc49::SendInput, sc49
^+sc4A::SendInput, sc4A
^+sc4B::SendInput, sc4B
^+sc4C::SendInput, sc4C
^+sc4D::SendInput, sc4D
^+sc4E::SendInput, sc4E
^+sc4F::SendInput, sc4F
^+sc50::SendInput, sc50
^+sc51::SendInput, sc51
^+sc52::SendInput, sc52
^+sc53::SendInput, sc53
^+sc54::SendInput, sc54
^+sc55::SendInput, sc55
^+sc56::SendInput, sc56
^+sc57::SendInput, sc57
^+sc58::SendInput, sc58
^+sc59::SendInput, sc59
^+sc5A::SendInput, sc5A
^+sc5B::SendInput, sc5B
^+sc5C::SendInput, sc5C
^+sc5D::SendInput, sc5D
^+sc5E::SendInput, sc5E
^+sc5F::SendInput, sc5F
^+sc60::SendInput, sc60
^+sc61::SendInput, sc61
^+sc62::SendInput, sc62
^+sc63::SendInput, sc63
^+sc64::SendInput, sc64
^+sc65::SendInput, sc65
^+sc66::SendInput, sc66
^+sc67::SendInput, sc67
^+sc68::SendInput, sc68
^+sc69::SendInput, sc69
^+sc6A::SendInput, sc6A
^+sc6B::SendInput, sc6B
^+sc6C::SendInput, sc6C
^+sc6D::SendInput, sc6D
^+sc6E::SendInput, sc6E
^+sc6F::SendInput, sc6F
^+sc70::SendInput, sc70
^+sc71::SendInput, sc71
^+sc72::SendInput, sc72
^+sc73::SendInput, sc73
^+sc74::SendInput, sc74
^+sc75::SendInput, sc75
^+sc76::SendInput, sc76
^+sc77::SendInput, sc77
^+sc78::SendInput, sc78
^+sc79::SendInput, sc79
^+sc7A::SendInput, sc7A
^+sc7B::SendInput, sc7B
^+sc7C::SendInput, sc7C
^+sc7D::SendInput, sc7D
^+sc7E::SendInput, sc7E
^+sc7F::SendInput, sc7F
^+sc80::SendInput, sc80
^+sc81::SendInput, sc81
^+sc82::SendInput, sc82
^+sc83::SendInput, sc83
^+sc84::SendInput, sc84
^+sc85::SendInput, sc85
^+sc86::SendInput, sc86
^+sc87::SendInput, sc87
^+sc88::SendInput, sc88
^+sc89::SendInput, sc89
^+sc8A::SendInput, sc8A
^+sc8B::SendInput, sc8B
^+sc8C::SendInput, sc8C
^+sc8D::SendInput, sc8D
^+sc8E::SendInput, sc8E
^+sc8F::SendInput, sc8F
^+sc90::SendInput, sc90
^+sc91::SendInput, sc91
^+sc92::SendInput, sc92
^+sc93::SendInput, sc93
^+sc94::SendInput, sc94
^+sc95::SendInput, sc95
^+sc96::SendInput, sc96
^+sc97::SendInput, sc97
^+sc98::SendInput, sc98
^+sc99::SendInput, sc99
^+sc9A::SendInput, sc9A
^+sc9B::SendInput, sc9B
^+sc9C::SendInput, sc9C
^+sc9D::SendInput, sc9D
^+sc9E::SendInput, sc9E
^+sc9F::SendInput, sc9F
^+scA0::SendInput, scA0
^+scA1::SendInput, scA1
^+scA2::SendInput, scA2
^+scA3::SendInput, scA3
^+scA4::SendInput, scA4
^+scA5::SendInput, scA5
^+scA6::SendInput, scA6


В окне Scite4Autohotkey сочетание Ctrl + Shift + клавиша вводит сканкод.

Ваш скрипт должен выглядеть следующим образом:
#sc2C::Run, www.autohotkey.com ; Win + Z

В автозаменах и команде SendInput сканкоды не нужны за одним исключением: если SendInput отправляет сочетание клавиш (например, Ctrl + C, Ctrl + V), то должны стоять сканкоды в фигурных скобках (соответственно ^{sc2E}, ^{sc2F}).
Название: AutoHotkey
Отправлено: O от января 25, 2012, 11:44
Да можно было бы и без скан-кодов сделать две записи: на Z и на Я. Но почему так сделано, что оно вообще не запускается?  :uzhos:
А если так, то зачем именно этот скрипт сделали примером по умолчанию?  :wall:
Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 11:50
Цитата: O от января 25, 2012, 11:44
Да можно было бы и без скан-кодов сделать две записи: на Z и на Я. Но почему так сделано, что оно вообще не запускается?  :uzhos:

Определяется не раскладкой активного окна, а раскладкой (невидимого) окна самого скрипта. В принципе, у вас будет работать просто ^я, но понятно, что такие скрипты не будут переносимы на компьютеры, где по умолчанию английская раскладка.
Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 11:53
А не работает потому, что горячие клавиши привязываются именно к клавишам, а не к символам. То есть в определении горячей клавиши должно фигурировать имя клавиши, и часто так и делается: F1, Esc и т. д. Просто имена буквоцифровых клавиш совпадают с соответствующей буквой/цифрой. При компиляции AHK ищет клавишу с именем z, не находит и ругается.
Название: AutoHotkey
Отправлено: O от января 25, 2012, 12:19
Второй скрипт-образец должен лишь активизировать Блокнот, если тот уже запущен. На самом деле, запускает всё новые и новые окна Блокнота.
^!n::
IfWinExist Untitled - Notepad
WinActivate
else
Run Notepad
return


Замена на IfWinExist Безымянный - Блокнот не изменяет поведение скрипта.
Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 12:28
В начале #IfWinExist решётка стоит. Потом идёт название окна, которое должно существовать (видимо, у вас должно быть по-русски).

Чтобы не указывать полное имя, в исполняемой части скрипта (в начале то есть) можно поставить
SetTitleMatchMode, 2
(я так обычно делаю). Исполняемая часть отделяется от горячих клавиш и т. п. строчкой
return.
Название: AutoHotkey
Отправлено: O от января 25, 2012, 12:34
::b::d работает, но ::b::в вставляет квадрат (replacement character)  :D

Квас, большое спасибо за Ваши комментарии! Буду думать, на что бы мне смогла сгодиться эта бага фича.  8-)
Название: AutoHotkey
Отправлено: O от января 25, 2012, 12:39
Цитата: Квас от января 25, 2012, 12:28
В начале #IfWinExist решётка стоит.

Не-а. Оно само сгенерилось именно так, без решётки. Если её поставить, то ругается на то, что элс без иф.

Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 12:40
Не за что. Мне кажется, я уже всему ЛФ голову забил этим AHK, так что теперь положение обязывает. :)

Горячая строка ваша должна нормально работать по идее. Файл в utf-8?
Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 12:51
Прошу прощения, невнимательно прочитал. Вообще, решётками начинаются команды, устанавливающие опции для горячих строк и клавиш. Здесь просто управляющая команда, решётки действительно не нужны.

У меня заработало, когда поставил SetTitleMatchMode, 2 и в названии окна оставил только «Блокнот». Очевидно, потому что там не дефис, а тире: —. Тире я выловил с помощью Window Spy, который вызывается из контекстного меню к любому скрипту.
Название: AutoHotkey
Отправлено: O от января 25, 2012, 13:00
Цитата: Квас от января 25, 2012, 12:40
Горячая строка ваша должна нормально работать по идее. Файл в utf-8?

Да, в utf-8 заработало. Но пришлось менять кодировку в Блокноте, а то в том-редакторе-с-длинным-названием смена кодировки в окне редактирования не влияла на то, в каком формате он сохранял файл.
Название: AutoHotkey
Отправлено: O от января 25, 2012, 13:02
Цитата: Квас от января 25, 2012, 12:51
У меня заработало, когда поставил SetTitleMatchMode, 2 и в названии окна оставил только «Блокнот». Очевидно, потому что там не дефис, а тире: —. Тире я выловил с помощью Window Spy, который вызывается из контекстного меню к любому скрипту.

Спасибо. Но пока практических применений AHK для себя я не нахожу.
Название: AutoHotkey
Отправлено: O от января 25, 2012, 13:16
Цитата: O от января 25, 2012, 13:02
Но пока практических применений AHK для себя я не нахожу.

Точнее, практические цели есть, но пока я справляюсь так, что мне проще запомнить код символа и вводить его, чем разбираться с AHK. Короче, процесс обещает затянуться.  :)
Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 13:25
Цитата: O от января 25, 2012, 13:00
в том-редакторе-с-длинным-названием смена кодировки в окне редактирования не влияло на то, в каком формате он сохраняет файл.

Да, у Scite бывают какие-то глюки с кодировками.

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

Цитата: O от января 25, 2012, 13:02
Но пока практических применений AHK для себя я не нахожу.

Можно просто полистать туториал и ждать, когда появятся задачи. Если приходится работать с документами, то самые обыкновенные автозамены могут оказаться очень полезными. А так — всякая мелкая и не очень автоматизация, при том что AHK умеет работать с окнами, запускать программы, общаться с Windows, позволяет легко программировать несложные окошки. Например, удобное переключение раскладок, большое число квазибуферов, ввод всяких разных символов. При необходимости скачать энное число файлов можно воспользоваться скриптом на несколько строк. Или, например, можно написать функцию, которая звёздочки заменяет на теги , и применять её к содержимому буфера обмена... Короче говоря, со временем задачи обязательно появятся.

Чтобы не быть голословным, вот кусок кода из постоянно работающего у меня скрипта. Включение раскладок по Ctrl и ассоциирование с каждой клавишей «буфера» (запись в буфер по Ctrl+Insert, <клавиша>; вставка из буфера — Shift+Insert, <клавиша>.

; Включение раскладки по Ctrl:

~LControl::SetLayout("English") ; по левому - английская
~RControl::SetLayout("Russian_mash") ; по правому - русская

; Чтобы клавиши сохранили обычную функциональность, нужно хотя бы раз их использовать в качестве префиксов.
LControl & Ins::
Input, BufferLabel, L1
SendInput, ^{sc2E}
Buffer%BufferLabel% := Clipboard
Return
RControl & Ins::
Input, BufferLabel, L1
SendInput, ^{sc2E}
Buffer%BufferLabel% := Clipboard
Return
+Ins::
Input, BufferLabel, L1
Clipboard := Buffer%BufferLabel%
SendInput, ^{sc2F}
Return

GetActiveKeyboardLayout()
{
WinGet, WinID,, A
ThreadID := DllCall("GetWindowThreadProcessId", UInt, WinID, UInt, 0)
InputLocaleID:=DllCall("GetKeyboardLayout", UInt, ThreadID, UInt)
Return, InputLocaleID
}
SetLayout(Layout)
; The function accepts hexadecimal layout code or one of specific strings as its argument.
{
ControlGetFocus, C, A
If (Layout = "English")
PostMessage, 0x50,, 0x4090409, %C%, A
Else If (Layout = "Russian")
PostMessage, 0x50,, 0x4190419, %C%, A
Else If (Layout = "Russian_mash")
PostMessage, 0x50,, 0xf0080419, %C%, A
Else
PostMessage, 0x50,, %Layout%, %C%, A
}
Название: AutoHotkey
Отправлено: Квас от января 25, 2012, 13:26
Цитата: O от января 25, 2012, 13:16
Цитата: O от января 25, 2012, 13:02Но пока практических применений AHK для себя я не нахожу.
Точнее, практические цели есть, но пока я справляюсь так, что мне проще запомнить код символа и вводить его, чем разбираться с AHK. Короче, процесс обещает затянуться.  :)

Ну, фазу обучения никуда не денешь. :) Но по идее такие основные вещи как автозамены и горячие клавиши — это несложно. AHK создавался не для программистов.
Название: AutoHotkey
Отправлено: Dmi3 от января 28, 2012, 20:13
Квасе, у меня к Вам вопрос. Посмотрел AutoHotkey. В принципе понравилось.

Вопрос такой. Хочу себе сымитировать Acme, но в Windows, для всей системы и с горячими клавишами вместо мыши. ☺ Хотя может я и мышь потом захочу, не знаю.

Можно ли так сделать:

1. При нажатии на горячую клавишу содержание буфера обмена рассматривается как команда: первое слово—название, остальное—как аргументы к ней; всё это запускается. Например, ls C:\dir запускает программу ls.exe (из системной папки) с аргументом C:\dir
2. Берётся текст из текущего выделения текущей программы (можна путём банальной посылки Ctrl-X, не обязательно 100% универсально), и этот текст передаётся запущенной программе в stdin; сам текст удаляется.
3. То, что команда пишет в stdout, выводится в программу (можно путём помещения в буфер и посылки в StdOut)
4. Если команда зависла, была бы неплоха возможность убиения её по какой-нибудь ещё горячей клавише.

???

В справке не нашёл ничего для работы с pipe'ами. Вижу такие варианты:
Название: AutoHotkey
Отправлено: O от января 29, 2012, 13:55
Dmi3, вы форумом немножко не ошиблись?  8-)

Коллекция скриптов и идей » AutoHotkey (http://forum.script-coding.com/viewforum.php?id=2)
AutoHotkey Community. Scripts & Functions (http://www.autohotkey.com/forum/forum-2.html)
Название: AutoHotkey
Отправлено: mnashe от января 29, 2012, 14:24
Цитата: Ο от января 29, 2012, 13:55
Dmi3, вы форумом немножко не ошиблись?
Возможно, Demetrius предположил, что Квас уже сталкивался с такой задачей, и ему несложно будет подсказать.
Название: AutoHotkey
Отправлено: O от января 29, 2012, 14:56
Цитата: mnashe от января 29, 2012, 14:24
Цитата: Ο от января 29, 2012, 13:55
Dmi3, вы форумом немножко не ошиблись?
Возможно, Demetrius предположил, что Квас уже сталкивался с такой задачей, и ему несложно будет подсказать.

Спасибо, Кэп!
Название: AutoHotkey
Отправлено: mnashe от января 29, 2012, 15:03
Так и в чём тогда проблема?
По-моему, это нормально — спросить у товарищей, а уж если не знают — искать самому. Лама ло?
Название: AutoHotkey
Отправлено: Квас от января 29, 2012, 20:13
Цитата: Dmi3 от января 28, 2012, 20:13
1. При нажатии на горячую клавишу содержание буфера обмена рассматривается как команда: первое слово—название, остальное—как аргументы к ней; всё это запускается. Например, ls C:\dir запускает программу ls.exe (из системной папки) с аргументом C:\dir

Это в принципе легко. Если строка представляет собой такую команду, которую можно дать в командную строку, то достаточно просто
Run, %Clipboard%
В более сложном случае можно распарсить Clipboard как обычную строку. Я что-то не понял, в какой «системной папке» должна искаться программа, а то мог бы и код написать.

Остальные надо посоображать.

Цитата: Dmi3 от января 28, 2012, 20:13
т.е. не забивать жёстко пути к C:\temp\in.txt, а брать системную временную папку.

В AHK много стандартных переменных, для доступа к временной папке можно использовать A_Temp.
Название: AutoHotkey
Отправлено: Квас от января 29, 2012, 20:15
Offtop
Кстати, буржуйский форум об AHK я иногда читаю, а наш почему-то никогда. Так что лично я очень доволен, что такие интересные обсуждения можно вести не уходя с ЛФ. :)
Название: AutoHotkey
Отправлено: Квас от января 29, 2012, 21:32
Цитата: Dmi3 от января 28, 2012, 20:13
2. Берётся текст из текущего выделения текущей программы (можна путём банальной посылки Ctrl-X, не обязательно 100% универсально), и этот текст передаётся запущенной программе в stdin; сам текст удаляется.
3. То, что команда пишет в stdout, выводится в программу (можно путём помещения в буфер и посылки в StdOut)
4. Если команда зависла, была бы неплоха возможность убиения её по какой-нибудь ещё горячей клавише.

Видимо, действительно самый простой метод — работать с файлами. (Если что, может оказаться полезной команда FileRead). Вот ещё какая-то штука нашлась:
http://www.autohotkey.com/forum/topic8606.html
Но я это уже плохо понимаю.

Для убиения можно пользоваться командами WinKill и Process.
Название: AutoHotkey
Отправлено: O от января 29, 2012, 23:17
Цитата: mnashe от января 29, 2012, 15:03
Так и в чём тогда проблема?

У вас проблема? Вы хотите об этом поговорить?  ;)
Название: AutoHotkey
Отправлено: Joris от июля 7, 2012, 03:01
有几个问题
1) Почему-то скрипт не хочет заменять y2 на ý (без комбайнов), хотя без проблем заменяет Y2 на Ý. Пришлось поставить комбайн: ý — так работает.
2) ::T//::Þ и ::t//::þ ни в какую не хотят работать. Результат — как будто я ничего не набирал.
3) Хотел настроить ударение в русском языке (гласная + два → гласная + ударение комбайном), но в этом случае комбайн не набирается (из скрипта пока убрал).
Spoiler: сам скрипт ⇓⇓⇓
Название: AutoHotkey
Отправлено: Квас от июля 7, 2012, 12:14
Нужно больше информации. :??? У меня всё работает (в том числе я заменил ý с комбайном на комбинированный).

Что касается последних автозамен, то они, наверно, работают не совсем так. Например, не получается набрать «привет» с большой буквы. Я бы просто отключил перед ними все включенные ранее опции путём #Hotstring C0?0... На самом деле стандартное ::<бла>::<бла> вполне естественно функционирует.
Название: AutoHotkey
Отправлено: Joris от июля 7, 2012, 12:22
Цитата: Квас от июля  7, 2012, 12:14
Нужно больше информации. :??? У меня всё работает (в том числе я заменил ý с комбайном на комбинированный).
гм...
а что еще сообщить?
Цитата: Квас от июля  7, 2012, 12:14
Например, не получается набрать «привет» с большой буквы.
мне и не надо :) дело в том, что при переписке я вообще не ставлю большие буквы, а, например, в ворде автоматический вводу заглавных букв в начале предложения у меня включен.
Цитата: Квас от июля  7, 2012, 12:14
На самом деле стандартное ::<бла>::<бла> вполне естественно функционирует.
Не всегда так, как нужно.
Название: AutoHotkey
Отправлено: Квас от июля 7, 2012, 12:24
Может, интерференция с другими скриптами?
Название: AutoHotkey
Отправлено: Joris от июля 7, 2012, 12:29
Цитата: Квас от июля  7, 2012, 12:24
Может, интерференция с другими скриптами?
У меня других нет.
А торн не хотел набираться даже тогда, когда он был просто вставлен в мою раскладку клавиатуры.
Название: AutoHotkey
Отправлено: Квас от июля 7, 2012, 12:39
Может в редакторе дело? А если просто скопипастить из таблицы символов?
Название: AutoHotkey
Отправлено: Joris от июля 7, 2012, 12:40
Цитата: Квас от июля  7, 2012, 12:39
А если просто скопипастить из таблицы символов?
Ну дык я так и делал.
Название: AutoHotkey
Отправлено: Квас от июля 7, 2012, 12:42
И везде такой эффект? В разных редакторах, в браузере?
Название: AutoHotkey
Отправлено: Joris от июля 7, 2012, 12:53
Цитата: Квас от июля  7, 2012, 12:42
И везде такой эффект?
сейчас проверил — вроде только в ворде. В опере торн вводится нормально Þþ, ý тоже без проблем. А вот кириллицу пока не проверю, нужно ее загонять туда.
Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 19:25
Можно ли сделать так, чтобы при смене раскалдки на китайскую, скрипт автоматически становился на паузу, а при смене с китайской на любую другую снова запускался?
Название: AutoHotkey
Отправлено: Квас от июля 10, 2012, 19:48
Цитата: Juuurgen от июля 10, 2012, 19:25
Можно ли сделать так, чтобы при смене раскалдки на китайскую, скрипт автоматически становился на паузу, а при смене с китайской на любую другую снова запускался?

Если речь о том, чтобы горячие клавиши/горячие строки не работали, то этого можно достичь с помощью #If:

#If <условие>

Все нижеследующие горячие клавиши и строки будут работать только при выполнении условия. Это распространяется на всё, что под данной строкой вплоть до нового #If/#IfWinActive/...

В данном случае можно воспользоваться функцией

GetActiveKeyboardLayout()
{
    WinGet, WinID,, A
    ThreadID := DllCall("GetWindowThreadProcessId", UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall("GetKeyboardLayout", UInt, ThreadID, UInt)
    return, InputLocaleID
}

Она возвращает код активной раскладки. Функцию можно описать в любом месте скрипта, обычно их описывают в начале. Тогда условие будет иметь вид
#If GetActiveKeyboardLayout() = <код китайской раскладки>
А чтобы узнать код китайской раскладки, можно воспользоваться той же функцией:

F12::
SetFormat, Integer, h
MsgBox % GetActiveKeyboardLayout()
return


Кстати говоря, с помощью AHK очень удобно переключать раскладки. Я для этого пользуюсь такой функцией:

SetLayout(Layout)
; The function accepts hexadecimal layout code
; or one of specific strings as its argument.
{
    ControlGetFocus, C, A
    If (Layout = "English")
    {
        PostMessage, 0x50,, 0x4090409, %C%, A
    }
    Else If (Layout = "Russian")
        PostMessage, 0x50,, 0x4190419, %C%, A
    Else If (Layout = "Russian_mash")
        PostMessage, 0x50,, 0xf0080419, %C%, A
    Else
        PostMessage, 0x50,, %Layout%, %C%, A
}

То есть для включения английской раскладки я пишу в скриптах SetLayout("English"). По образу и подобию туда можно и других строчек насовать:

    Else If (Layout = "Chinese")
        PostMessage, 0x50,, <код китайской>, %C%, A
Название: AutoHotkey
Отправлено: mnashe от июля 10, 2012, 19:51
Цитата: Juuurgen от июля 10, 2012, 19:25
Можно ли сделать так, чтобы при смене раскалдки на китайскую, скрипт автоматически становился на паузу, а при смене с китайской на любую другую снова запускался?
1. Можно переключать на китайскую самим AHK, тогда параллельно переключению раскладки ставить на паузу автозамены.
2. Можно ставить на паузу по тому же сочетанию клавиш, которым переключаешь.
3. Можно периодически опрашивать, но это нерационально.
Нужные функции можно выдрать из моего скрипта:
;Switch the active window's keyboard layout/language:
LangSwitch(layout)
{
  ControlGetFocus,ctl,A
  SendMessage, 0x50, 0, layout, %ctl%, A ;WM_INPUTLANGCHANGEREQUEST
}

GetInputLocaleId()
{
  SetFormat, Integer, H
  WinGet, WinId,, A
  ThreadId:=DllCall("GetWindowThreadProcessId", UInt, WinId, UInt, 0)
  Return DllCall("GetKeyboardLayout", UInt, ThreadId, UInt)
}

#1::LangSwitch(0x04090409) ; to English

#2::
LangSwitch(0xF0C00419) ; to Russian
sleep 100
LangSwitch(0xF0C00419)
return

#3::
LangSwitch(0xF0C20419) ; to Russian
sleep 100
LangSwitch(0xF0C20419)
return

#4::LangSwitch(0xF0C1040D) ; to Hebrew

^+`::
InputLocaleId:=GetInputLocaleId()
MsgBox, %InputLocaleId%

^CapsLock::
If (GetInputLocaleId()==0x04090409)
{
  LangSwitch(0xF0C00419)
  sleep 100
  LangSwitch(0xF0C00419)
  return
}
LangSwitch(0x04090409)
return
Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 20:08
Цитата: Квас от июля 10, 2012, 19:48
Если речь о том, чтобы горячие клавиши/горячие строки не работали
да :)
Цитата: Квас от июля 10, 2012, 19:48
Она возвращает код активной раскладки. Функцию можно описать в любом месте скрипта, обычно их описывают в начале. Тогда условие будет иметь вид
#If GetActiveKeyboardLayout() = <код китайской раскладки>
т.е. мне нужно указать те раскладки, в которых должен работать скрипт?
Цитата: Квас от июля 10, 2012, 19:48
А чтобы узнать код китайской раскладки, можно воспользоваться той же функцией:
так, вроде все получилось, настроил, чтоб скрипт работал только в английской и русской
Цитата: Квас от июля 10, 2012, 19:48
Кстати говоря, с помощью AHK очень удобно переключать раскладки. Я для этого пользуюсь такой функцией:
стоп, но ведь если у меня скрипт будет отключаться в китайской раскладке, я не смогу ее переключить на другую с помощью AHK?
Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 20:11
Цитата: Квас от июля 10, 2012, 19:48
Else
        PostMessage, 0x50,, %Layout%, %C%, A
зачем тут эта строчка?
Цитата: Квас от июля 10, 2012, 19:48
    If (Layout = "English")
    {
        PostMessage, 0x50,, 0x4090409, %C%, A
    }
    Else If (Layout = "Russian")
    {
        PostMessage, 0x50,, 0x4190419, %C%, A
    }
тут не нужны фигурные скобки?
Название: AutoHotkey
Отправлено: Квас от июля 10, 2012, 20:18
Цитата: Juuurgen от июля 10, 2012, 20:08
т.е. мне нужно указать те раскладки, в которых должен работать скрипт?

Пардон, имелось в виду Get...() <> код раскладки.

Цитата: Juuurgen от июля 10, 2012, 20:08
стоп, но ведь если у меня скрипт будет отключаться в китайской раскладке, я не смогу ее переключить на другую с помощью AHK?

Ну, это просто офтоп был. В любом случае, #If действует только на то, что под ним. То есть переключалки можно сделать выше.

Цитата: Juuurgen от июля 10, 2012, 20:11
тут не нужны фигурные скобки?

Фигурные скобки можно не ставить, если после If идёт одна строчка.
Название: AutoHotkey
Отправлено: Квас от июля 10, 2012, 20:21
Цитата: Juuurgen от июля 10, 2012, 20:11
ЦитироватьElse
        PostMessage, 0x50,, %Layout%, %C%, A
зачем тут эта строчка?

Строки "English", "Russian" usw. — это просто для своего удобства. А так всегда можно засунуть аргументом стандартный код раскладки типа 0x... — сработает как раз эта строчка функции.
Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 20:26
Цитата: Квас от июля 10, 2012, 20:18
Пардон, имелось в виду Get...() <> код раскладки.
ща уже ниче не понял
#If GetActiveKeyboardLayout() =
обозначает раскладку, в которой работает скрипт?
как их написать несколько (в частности русский и английский)? если я пишу две такие строчки, то скрипт работает только в последней
Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 20:28
Цитата: Juuurgen от июля 10, 2012, 20:26
если я пишу две такие строчки, то скрипт работает только в последней
хотя стоп, у меня ж не пересекаются они, одно может работать только в русской (там русские символы), другое - только в английской. Так что скопирую одно под одну строчку, другое под другую
Название: AutoHotkey
Отправлено: Квас от июля 10, 2012, 20:30
GetActiveKeyboardLayout() — это код раскладки активного окна. Для сравнения можно использовать операторы = (равно) и <> (не равно). То есть можно написать, например,
#If (GetActiveKeyboardLayout() = 0x...) and (GetActiveKeyboardLayout() = 0x...)
или
#If GetActiveKeyboardLayout() <> 0x...
Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 20:35
Цитата: Квас от июля 10, 2012, 20:30
GetActiveKeyboardLayout() — это код раскладки активного окна. Для сравнения можно использовать операторы = (равно) и <> (не равно).
А, сейчас понял, спасибо.
Но мне проще написать те, в которых должно работать, потому что их только две, а те, в которых не должно — 8 :)

Спасибо большое!
Название: AutoHotkey
Отправлено: Квас от июля 10, 2012, 20:36
Не за что. :)
Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 20:42
вот это я уже задал
а что мне нужно написать, чтобы при нажатии, допустим, Ctrl+Shift+1 раскладка менялась на английскую
у меня просто стандартные виндовские смены слетают после каждой перезагрузки, а так я бы их в AHK запихнул, а его в автозагрузку и все было бы оккэ :)
Название: AutoHotkey
Отправлено: Квас от июля 10, 2012, 20:57
Цитата: Juuurgen от июля 10, 2012, 20:42
а что мне нужно написать, чтобы при нажатии, допустим, Ctrl+Shift+1 раскладка менялась на английскую


^!1::SetLayout("English")


Если вдруг будет глючить с единицей (мало ли какие экзотичные раскладки), можно универсально — сканкодом:
^!sc02::SetLayout("English")
Список сканкодов можно посмотреть, например, здесь:
http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html
(Для раскладконезависимости горячих клавиш люди пользуются или сканкодами или виртуальными кодами. Я так и не понял, что из этого идеологически более оправданно, и по инерции пользуюсь сканкодами.)

Название: AutoHotkey
Отправлено: Joris от июля 10, 2012, 21:08
Цитата: Квас от июля 10, 2012, 20:57
^!
:o
это типа Ctrl+Shift
Цитата: Квас от июля 10, 2012, 20:57
sc02
прикольно :)

Цитата: Квас от июля 10, 2012, 20:57
Если вдруг будет глючить с единицей (мало ли какие экзотичные раскладки), можно универсально — сканкодом:
^!sc02::SetLayout("English")
Список сканкодов можно посмотреть, например, здесь:
а вообще, не работает не ^!1 ни ^!sc02
Название: AutoHotkey
Отправлено: Квас от июля 10, 2012, 21:49
Опять обманываю. :( ! — это альт, а шифт — +. То есть ^+1.
Название: AutoHotkey
Отправлено: arseniiv от июля 10, 2012, 22:52
Вот моя самопальщина! ;D

SendMode Input
hotstringsEnabled := true

>!\::
  hotstringsEnabled := not hotstringsEnabled
  if hotstringsEnabled {
    SoundPlay, *64
  } else {
    SoundPlay, *-1
  }
return

#Hotstring * ? c z
#If hotstringsEnabled

; всякие символы-пунктуация
::\bullet ::•
::\(c) ::©
::\(r) ::®
::\(tm) ::™
::\tribullet ::‣
::\<< ::«
::\>> ::»
::\0 ::°
::\-- ::—
::\S ::§
::\' ::′
::\'' ::″
::\''' ::‴
::\% ::‰
::\%% ::‱
::\asterism ::⁂
::\space ::␣
::\9< ::,,
::\6> ::"
::\!! ::‼
::\?! ::⁈
::\!? ::⁉
::\.. ::‥
::\... ::...
::\6 ::'
::\9 ::'
::\66 ::"
::\99 ::"
::\big66 ::❝
::\big99 ::❞
::\interrobang ::‽
::\! ::¡
::\? ::¿
::\< ::‹
::\> ::›
::\!! ::‼
::\?? ::⁇
::\c... ::⋯
::\times ::×
::\c. ::⋅

::\[[ ::⟦
::\]] ::⟧
::\le ::⩽
::\ge ::⩾
::\le' ::≤
::\ge' ::≥
::\<- ::←
::\-> ::→
::\upar ::↑
::\dnar ::↓
::\<-> ::↔
::\<= ::⇐
::\=> ::⇒
::\uparr ::⇑
::\dnarr ::⇓
::\<=> ::⇔
::\langle ::⟨
::\rangle ::⟩
::\neg ::¬
::\and ::∧
::\or ::∨
::\circ ::∘
::\lceil ::⌈
::\rceil ::⌉
::\lfloor ::⌊
::\rfloor ::⌋
::\QED ::◼
::\nothing ::∅
::\partial ::∂
::\Nabla ::∇
::\forall ::∀
::\exists ::∃
::\in ::∈
::\notin ::∉
::\in' ::∋
::\minus ::−
::\* ::∗
::\sqrt ::√
::\infty ::∞
::\int ::∫
::\iint ::∬
::\cap ::∩
::\cup ::∪
::\pm ::±
::\mapsto ::↦
::\approx ::≈
::\congruent ::≅
::\!= ::≠
::\=== ::≡
::\parallel ::∥
::\!parallel ::∦
::\perpend ::⊥
::\oplus ::⊕
::\otimes ::⊗
::\subset ::⊂
::\supset ::⊃
::\subset= ::⊆
::\supset= ::⊇
::\subset!= ::⊊
::\!subset= ::⊈
::\sqrt3 ::∛
::\|= ::⊧
::\|- ::⊦

::\venus ::♀
::\mars ::♂

; буквы

::\I ::İ
::\i ::ı
::\Mho ::℧
::\S, ::Ş
::\s, ::ş
::\Z, ::Ȥ
::\z, ::ȥ
::\AE ::Æ
::\ae ::æ
::\O/ ::Ø
::\o/ ::ø

; комбинирующееся
; á
::\acu ::́
; a̋
::\acc ::̋
; â
::\cir ::̂
; ǎ
::\car ::̌
; ā
::\mac ::̄
; ã
::\til ::̃
; ă
::\bre ::̆
; ȧ
::\doo ::̇
; ạ
::\do' ::̣
; ä
::\ddo ::̈
; a̤
::\dd' ::̤
; å
::\rin ::̊
; ḁ
::\ri' ::̥
; a̲
::\und ::̲
; a̶  (зачёркивание)
::\str ::̶
; à
::\gra ::̀
; ȃ
::\ibr ::̑
; a̗
::\ac' ::̗
; a̖
::\gr' ::̖
; a̭
::\ci' ::̭
; a̬
::\ca' ::̬
; a̰
::\ti' ::̰
; a̱
::\ma' ::̱
; a̮
::\br' ::̮
; a̯
::\ib' ::̯
; ą
::\ogo ::̨
; a̽
::\cro ::̽
; a͓
::\cr' ::͓

; буквы
::\И ::І
::\и ::і
::\Йи ::Ї
::\йи ::ї
::\Й ::Ј
::\й ::ј
::\Ль ::Љ
::\ль ::љ
::\Нь ::Њ
::\нь ::њ
::\Е ::Є
::\е ::є
::\У ::Ў
::\у ::ў

; гречица
::\Alpha ::Α
::\Beta ::Β
::\Gamma ::Γ
::\Delta ::Δ
::\Epsilon ::Ε
::\Zeta ::Ζ
::\Eta ::Η
::\Theta ::Θ
::\Iota ::Ι
::\Kappa ::Κ
::\Lambda ::Λ
::\Mu ::Μ
::\Nu ::Ν
::\Xi ::Ξ
::\Omicron ::Ο
::\Pi ::Π
::\Rho ::Ρ
::\Sigma ::Σ
::\Tau ::Τ
::\Ypsilon ::Υ
::\Phi ::Φ
::\Chi ::Χ
::\Psi ::Ψ
::\Omega ::Ω
::\alpha ::α
::\beta ::β
::\gamma ::γ
::\delta ::δ
::\epsilon ::ε
::\zeta ::ζ
::\eta ::η
::\theta ::θ
::\iota ::ι
::\kappa ::κ
::\lambda ::λ
::\mu ::μ
::\nu ::ν
::\xi ::ξ
::\omicron ::ο
::\pi ::π
::\rho ::ρ
::\sigma ::σ
::\tau ::τ
::\ypsilon ::υ
::\phi ::ϕ
::\chi ::χ
::\psi ::ψ
::\omega ::ω
::\varbeta ::ϐ
::\varpi ::ϖ
::\varrho ::ϱ
::\varsigma ::ς
::\vartheta ::ϑ
::\varphi ::φ
::\varkappa ::ϰ

::\aleph ::ℵ
::\^0 ::⁰
::\^1 ::¹
::\^2 ::²
::\^3 ::³
::\^4 ::⁴
::\^5 ::⁵
::\^6 ::⁶
::\^7 ::⁷
::\^8 ::⁸
::\^9 ::⁹
::\^+ ::⁺
::\^- ::⁻
::\^( ::⁽
::\^) ::⁾
::\_0 ::₀
::\_1 ::₁
::\_2 ::₂
::\_3 ::₃
::\_4 ::₄
::\_5 ::₅
::\_6 ::₆
::\_7 ::₇
::\_8 ::₈
::\_9 ::₉
::\_+ ::₊
::\_- ::₋
::\_( ::₍
::\_) ::₎

#If
Название: AutoHotkey
Отправлено: Joris от июля 11, 2012, 00:55
Цитата: Квас от июля 10, 2012, 21:49
Опять обманываю. :( ! — это альт, а шифт — +. То есть ^+1.
感谢!
:)
теперь все работает
Название: AutoHotkey
Отправлено: mnashe от июля 11, 2012, 09:01
Цитата: arseniiv от июля 10, 2012, 22:52
::\' ::′
::\'' ::″
::\''' ::‴
Вот поэтому постфикс лучше префикса.
У меня на один символ (пробел) короче:
::'~::′
::'~ ::″
::'''~::‴
Нажатий, впрочем, столько же, поскольку '~' со Shift'ом. Но можно и без Shift'а постфикс использовать.
Название: AutoHotkey
Отправлено: Joris от июля 11, 2012, 12:18
Цитата: mnashe от июля 11, 2012, 09:01
Цитировать::\' ::′
::\'' ::″
::\''' ::‴
Вот поэтому постфикс лучше префикса.
дык такое ж работать не будет, нэ?
Название: AutoHotkey
Отправлено: Joris от июля 11, 2012, 12:27
Цитата: Juuurgen от июля 11, 2012, 12:18
дык такое ж работать не будет, нэ?
а не, там пробел.
Название: AutoHotkey
Отправлено: arseniiv от июля 11, 2012, 18:38
Будет-будет. Там есть разные режимы обработчика, к тому же. Он может и в 1111 для 11 три раза срабатывать, и прочее. ;D
Название: AutoHotkey
Отправлено: Joris от июля 11, 2012, 18:45
у меня просто так расписано:
:C1?0:ща ::сейчас{Space}
:C1?0:ща.::сейчас.
:C1?0:ща!::сейчас{!}
:C1?0:ща?::сейчас?
:C1?0:ща)::сейчас)
:C1?0:щас::сейчас
Название: AutoHotkey
Отправлено: arseniiv от июля 11, 2012, 19:19
Есть режим воспринимать разделители как конец заменяемой строчки. Только какие именно разделители — не помню. Хотя ваши, вероятно, подойдут все (general punctuation же).
Название: AutoHotkey
Отправлено: Toivo от сентября 26, 2012, 19:57
Я так и не понял, замена работает только в том случае, если последовательность символов стоит между двумя пробелами. :(
Название: AutoHotkey
Отправлено: arseniiv от сентября 26, 2012, 21:51
Странно.
Название: AutoHotkey
Отправлено: Joris от сентября 26, 2012, 21:51
Цитата: Toivo от сентября 26, 2012, 19:57
Я так и не понял, замена работает только в том случае, если последовательность символов стоит между двумя пробелами. :(
Это смотря какие параметры указывать
Название: AutoHotkey
Отправлено: Toivo от сентября 26, 2012, 22:24
Цитата: Juuurgen от сентября 26, 2012, 21:51
Это смотря какие параметры указывать
:???
В смысле?
Название: AutoHotkey
Отправлено: Joris от сентября 26, 2012, 22:37
Цитата: Toivo от сентября 26, 2012, 22:24
В смысле?
Можно указать, чтоб в середине слова тоже работала, можно указать, чтобы заменялось по последнему символу, а не по пробелу, можно указать (не)зависимость от заглавных букв (может еще че можно, но я не знаю). Можно как для отдельных строк указывать, так и для всего файла сразу
Название: AutoHotkey
Отправлено: Toivo от сентября 26, 2012, 22:40
Цитата: Juuurgen от сентября 26, 2012, 22:37
Цитата: Toivo от сентября 26, 2012, 22:24
В смысле?
Можно указать, чтоб в середине слова тоже работала, можно указать, чтобы заменялось по последнему символу, а не по пробелу, можно указать (не)зависимость от заглавных букв (может еще че можно, но я не знаю). Можно как для отдельных строк указывать, так и для всего файла сразу
Всё, дошло, просто строку следовало начинать не с
Цитировать::
, а с
Цитировать:*?:
:)
Название: AutoHotkey
Отправлено: Joris от сентября 26, 2012, 22:44
вот например, та, что мне Квас делал. Там в начале указано
#Hotstring ?*C

? — сработает внутри другого слова
* — не нужен пробел
C — чувствительность к регистру

это для всего скрипта

тоже самое можно писать между первыми двумя двоеточиями, например:
::a^::â — сработает только в начале слова при нажатии «а 6 пробел»
:*:a^::â — сработает только в начале слова при нажатии «а 6»
:C0:a^::â — A + 6 + пробел даст такой же результат, как и «a 6 пробел»
:?:a^::â — например, sta + 6 + пробел будет заменяться на stâ
:?*:a^::â — например, sta + 6 замениться на stâ
и т.п.
Название: AutoHotkey
Отправлено: Joris от сентября 26, 2012, 22:47
Вот кстати, тут можно чего посмотреть
http://www.script-coding.com/AutoHotkeyTranslation.html
Название: AutoHotkey
Отправлено: Toivo от сентября 26, 2012, 22:55
Цитата: Juuurgen от сентября 26, 2012, 22:44
C — чувствительность к регистру
Спасибо, это как раз то, чего мне не хватало! :UU:
Цитата: Juuurgen от сентября 26, 2012, 22:47
Вот кстати, тут можно чего посмотреть
http://www.script-coding.com/AutoHotkeyTranslation.html
AHK, често говоря, мне понадобился только потому, что наодело копипастить латинские буквы с макронами и бреве, так что всё это богатство возможностей пока что лишнее... :)
Название: AutoHotkey
Отправлено: Joris от сентября 26, 2012, 23:05
Цитата: Toivo от сентября 26, 2012, 22:55
AHK, често говоря, мне понадобился только потому, что наодело копипастить латинские буквы с макронами и бреве, так что всё это богатство возможностей пока что лишнее...
Ну, во всяком случае тут, подробно расписано, про то, что может понадобиться
http://www.script-coding.com/AutoHotkey/Hotstrings.html
Название: AutoHotkey
Отправлено: mnashe от сентября 26, 2012, 23:15
Мой файл автозамен в качестве примера.
Пояснения:
#IfWinNotActive Multi-Edit ;отсюда и до следующего #IfWinNotActive — не работает в окне с заголовком Multi-Edit
<...>
#Hotstring * ? C ;отсюда и до следующего #Hotstring по умолчанию работают опции * ? C
<...>
#Hotstring * ? C0 ;отсюда и до следующего #Hotstring по умолчанию работают опции * ? C0
<...>
#IfWinNotActive ;конец действия предыдущей #IfWinNotActive.

Spoiler: объяснения опций ⇓⇓⇓
Название: AutoHotkey
Отправлено: mnashe от сентября 26, 2012, 23:22
Цитата: Toivo от сентября 26, 2012, 22:55
AHK, често говоря, мне понадобился только потому, что наодело копипастить латинские буквы с макронами и бреве, так что всё это богатство возможностей пока что лишнее...
Можно и в готовом виде мой скрипт взять.
Макрон вводится так: ^-
Бреве вводится так: ^u
Причём если существует готовый комбинированный символ, скрипт подставляет его, а если нет — набирает комбинируемую диакритику. Удобно!
Название: AutoHotkey
Отправлено: Toivo от сентября 26, 2012, 23:30
Цитата: mnashe от сентября 26, 2012, 23:22
Можно и в готовом виде мой скрипт взять.
Макрон вводится так: ^-
Бреве вводится так: ^u
Спасибо за помощь, mnashe!
Впрочем, у меня уже и так всё работает:#Hotstring c * ?

::am~::ā
::Am~::Ā
::em~::ē
::Em~ ::Ē
::im~::ī
::Im~::Ī
::om~::ō
::Om~::Ō
::um~::ū
::Um~::Ū

::ab~::ă
::Ab~::Ă
::eb~::ĕ
::Eb~::Ĕ
::ib~::ĭ
::Ib~::Ĭ
::ob~::ŏ
::Ob~::Ŏ
::ub~::ŭ
::Ub~::Ŭ

::ed~::ë
::Ed~::Ë

::ae~::æ
::Ae~::Æ
::oe~::œ
::Oe~::Œ
:-[ :dayatakoy:
Название: AutoHotkey
Отправлено: mnashe от сентября 26, 2012, 23:53
Какой коротенький! :)

В моём скрипте обнаружилось 3 дубликата; исправил и заменил приложенный файл.
Название: AutoHotkey
Отправлено: mnashe от сентября 26, 2012, 23:56
Кстати: может, кто-нибудь знает, как сделать автозамену, заканчивающуюся двоеточием?
Я не нашёл. Приходится умлауты назначать на точку с запятой вместо логичного двоеточия (u^; → ü).
Название: AutoHotkey
Отправлено: Joris от сентября 27, 2012, 05:31
У меня спокойно работает замена двух двоеточий на ː
Выглядит как
::::::ː
Название: AutoHotkey
Отправлено: Bhudh от сентября 27, 2012, 06:29
Эзотерично...
Название: AutoHotkey
Отправлено: Тайльнемер от августа 20, 2013, 06:01
Подскажите.
Как сделать так, чтобы строковые автозамены работали не только с символоми, введёнными непосредственно, но и с символами, введёнными через горячие клавиши?
Например, я делаю горячую клавишу для ввода навесного акута:
>#'::SendInput {U+0301} ; combining acute accent
А теперь я хочу, чтобы буква 'a' в комбинации с навесным акутом заменялась на прекомбинированную 'á'.
Если написать
:*?:á::á ; преобразовать навесную диакритику в прекомбинированную
то работать не будет из-за того, что навесной акут набирается горячей клавишей. (Когда я набираю навесной акут из раскладки — замена работает.)
Можно ли сделать так, чтобы для строковой автозамены было неважно, каким способом набран символ?
Название: AutoHotkey
Отправлено: Тайльнемер от августа 20, 2013, 07:46
Нашёл в документации, что так нельзя:
ЦитироватьHotstrings can never be triggered by keystrokes produced by any AutoHotkey script. This avoids the possibility of an infinite loop where hotstrings trigger each other over and over.
На форуме AHK уже много лет подряд появляются предложения сделать возможность включения такого режима. Разработчик отвечал, что сделает, вот только до сих пор, вроде как, не сделал.

Жаль, я хотел оставить раскладку стандартной, и все выкрутасы сделать на AHK, чтобы всё было в одном месте.
Придётся оставить диакритику в раскладке (http://lingvowiki.info/wiki/images/0/07/Sm_sad.svg)
Название: AutoHotkey
Отправлено: mnashe от августа 20, 2013, 08:34
Цитата: Тайльнемер от августа 20, 2013, 06:01
Например, я делаю горячую клавишу для ввода навесного акута:
>#'::SendInput {U+0301} ; combining acute accent
А теперь я хочу, чтобы буква 'a' в комбинации с навесным акутом заменялась на прекомбинированную 'á'.
Если написать
:*?:á::á ; преобразовать навесную диакритику в прекомбинированную
то работать не будет из-за того, что навесной акут набирается горячей клавишей. (Когда я набираю навесной акут из раскладки — замена работает.)
Можно ли сделать так, чтобы для строковой автозамены было неважно, каким способом набран символ?
Нельзя.
Но добиться описанной цели (если я понял её правильно) можно вполне.
Для этого нужно просто расположить автозамены в правильном порядке: сначала все прекомбинированные сочетания, а потому уже навесные. Тогда, к примеру, ^' будет давать навесной акут, а a^' — прекомбинированную á, o^' → ó и т.д.
Так оно сделано у меня. Мне не приходится волноваться, каким образом я ввожу диакритику — последовательность всегда одна и та же, а результат зависит от наличия соответствующих прекомбинаций (ы^' даёт два символа, а u^' — один).

Цитата: Тайльнемер от августа 20, 2013, 07:46
Придётся оставить диакритику в раскладке :(
Не придётся, если сделать как я описал.

Да, и SendInput не нужен, достаточно обычных автозамен (но нужна уникодная версия, конечно).
Название: AutoHotkey
Отправлено: Тайльнемер от августа 20, 2013, 09:38
Мнаше, это понятно, Но дело в том, что я не хочу использовать обычные символы ASCII как инициаторы автозамены. По трём причинам:
1) В коде на различных языках программирования встречаются всякие разные сочетания ASCII-символов. Автозамена будет мешать писать их.
2) Для других членов семьи клавиатура должна вести себякак можно более стандартно.
3) Я хотел минимизировать количество вводимых символов — вместо трёх (буква, диакритический знак, инициатор замены) вводить два (буква, диакритический знак являющийся инициатором замены).

Сейчас я могу сделать раскладку, в которой на AltGr+клавиша висят все нужные навесные диакритики, а в AHK прописать замену навесных на прекомбинированные (скрипт генерируется на основе списка канонических декомпозиций с официального сайта Уникода).
Но очень  ограничивает то, что все символы надо пихать в раскладку, а использовать горячие клавиши AHK нельзя.
Так что моя идея, похоже, нереализуема в полную силу — раскладки поддерживают только один дополнительный регистр — AltGr, а я хотел несколько.
Название: AutoHotkey
Отправлено: Nevik Xukxo от августа 20, 2013, 09:52
Скорей всего не пользуюсь хоткеями. Потому что не знаю что это. И влом курить доки.
Название: AutoHotkey
Отправлено: Тайльнемер от августа 20, 2013, 10:06
Цитата: mnashe, скрипт его
::1/0::∞
Название: AutoHotkey
Отправлено: O от августа 22, 2013, 02:39
Цитата: Тайльнемер от августа 20, 2013, 10:06
Цитата: mnashe, скрипт его
::1/0::∞


У меня бесконечность даёт 8 и «инициатор замены». А ноль так же даёт ∅.
Название: AutoHotkey
Отправлено: arseniiv от августа 26, 2013, 21:36
Цитата: Тайльнемер от августа 20, 2013, 09:38
1) В коде на различных языках программирования встречаются всякие разные сочетания ASCII-символов. Автозамена будет мешать писать их.
2) Для других членов семьи клавиатура должна вести себякак можно более стандартно.
Можно сделать переключаемый режим типа такого (у меня):

hotstringsEnabled := true
>!\::
  hotstringsEnabled := not hotstringsEnabled
  if hotstringsEnabled {
    SoundPlay, *64
  } else {
    SoundPlay, *-1
  }
return
#If hotstringsEnabled
...замены...
#If
Название: AutoHotkey
Отправлено: Тайльнемер от августа 27, 2013, 04:43
Цитата: arseniiv от августа 26, 2013, 21:36
Можно сделать переключаемый режим типа такого (у меня)
Нихачу.
Буду мучить раскладки.

MSKLC может вместо того, чтобы билдить dll, выдать сишный исходник этой dll (у утилиты $MSKLC$\bin\i386\kbdutool.exe ключ -s). Правя эти исходники, можно получить больше клавиш-модификаторов, чем позволяет MSKLC, и ещё всякие другие вещи.
Название: AutoHotkey
Отправлено: Python от августа 27, 2013, 15:25
Строго говоря, редактор MSKLC позволяет не все, что может его транслятор. Например, если отредактировать вручную исходники (.klc), а затем их скомпилировать, можно добавить в раскладку последовательности из нескольких мертвых клавиш, что непосредственно в редакторе раскладок сделать невозможно.
Название: AutoHotkey
Отправлено: Тайльнемер от августа 27, 2013, 18:00
Да :yes:

Rwseg тут ещё баг транслятора нашёл, который тоже обходится правкой klc-файла вручную.
(Если в одной раскладке присутствуют символы верхних плоскостей уникода и последовательности из нескольких символов («лигатуры»), то раскладка косячится. Выход — переписать в klc-файле символы верхних плоскостей в виде лигатур из utf-16-суррогатов (как, собственно, и делает сам транслятор, когда в раскладке нет других лигатур))