Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

AutoHotkey

Автор Квас, сентября 8, 2010, 11:42

0 Пользователи и 1 гость просматривают эту тему.

Toivo

Я так и не понял, замена работает только в том случае, если последовательность символов стоит между двумя пробелами. :(


Joris

Цитата: Toivo от сентября 26, 2012, 19:57
Я так и не понял, замена работает только в том случае, если последовательность символов стоит между двумя пробелами. :(
Это смотря какие параметры указывать
yóó' aninááh

Toivo


Joris

Цитата: Toivo от сентября 26, 2012, 22:24
В смысле?
Можно указать, чтоб в середине слова тоже работала, можно указать, чтобы заменялось по последнему символу, а не по пробелу, можно указать (не)зависимость от заглавных букв (может еще че можно, но я не знаю). Можно как для отдельных строк указывать, так и для всего файла сразу
yóó' aninááh

Toivo

Цитата: Juuurgen от сентября 26, 2012, 22:37
Цитата: Toivo от сентября 26, 2012, 22:24
В смысле?
Можно указать, чтоб в середине слова тоже работала, можно указать, чтобы заменялось по последнему символу, а не по пробелу, можно указать (не)зависимость от заглавных букв (может еще че можно, но я не знаю). Можно как для отдельных строк указывать, так и для всего файла сразу
Всё, дошло, просто строку следовало начинать не с
Цитировать::
, а с
Цитировать:*?:
:)

Joris

вот например, та, что мне Квас делал. Там в начале указано
#Hotstring ?*C

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

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

тоже самое можно писать между первыми двумя двоеточиями, например:
::a^::â — сработает только в начале слова при нажатии «а 6 пробел»
:*:a^::â — сработает только в начале слова при нажатии «а 6»
:C0:a^::â — A + 6 + пробел даст такой же результат, как и «a 6 пробел»
:?:a^::â — например, sta + 6 + пробел будет заменяться на stâ
:?*:a^::â — например, sta + 6 замениться на stâ
и т.п.
yóó' aninááh

Joris

yóó' aninááh

Toivo

Цитата: Juuurgen от сентября 26, 2012, 22:44
C — чувствительность к регистру
Спасибо, это как раз то, чего мне не хватало! :UU:
Цитата: Juuurgen от сентября 26, 2012, 22:47
Вот кстати, тут можно чего посмотреть
http://www.script-coding.com/AutoHotkeyTranslation.html
AHK, често говоря, мне понадобился только потому, что наодело копипастить латинские буквы с макронами и бреве, так что всё это богатство возможностей пока что лишнее... :)

Joris

Цитата: Toivo от сентября 26, 2012, 22:55
AHK, често говоря, мне понадобился только потому, что наодело копипастить латинские буквы с макронами и бреве, так что всё это богатство возможностей пока что лишнее...
Ну, во всяком случае тут, подробно расписано, про то, что может понадобиться
http://www.script-coding.com/AutoHotkey/Hotstrings.html
yóó' aninááh

mnashe

Мой файл автозамен в качестве примера.
Пояснения:
#IfWinNotActive Multi-Edit ;отсюда и до следующего #IfWinNotActive — не работает в окне с заголовком Multi-Edit
<...>
#Hotstring * ? C ;отсюда и до следующего #Hotstring по умолчанию работают опции * ? C
<...>
#Hotstring * ? C0 ;отсюда и до следующего #Hotstring по умолчанию работают опции * ? C0
<...>
#IfWinNotActive ;конец действия предыдущей #IfWinNotActive.

Spoiler: объяснения опций ⇓⇓⇓
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

mnashe

Цитата: Toivo от сентября 26, 2012, 22:55
AHK, често говоря, мне понадобился только потому, что наодело копипастить латинские буквы с макронами и бреве, так что всё это богатство возможностей пока что лишнее...
Можно и в готовом виде мой скрипт взять.
Макрон вводится так: ^-
Бреве вводится так: ^u
Причём если существует готовый комбинированный символ, скрипт подставляет его, а если нет — набирает комбинируемую диакритику. Удобно!
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Toivo

Цитата: 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:

mnashe

Какой коротенький! :)

В моём скрипте обнаружилось 3 дубликата; исправил и заменил приложенный файл.
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

mnashe

Кстати: может, кто-нибудь знает, как сделать автозамену, заканчивающуюся двоеточием?
Я не нашёл. Приходится умлауты назначать на точку с запятой вместо логичного двоеточия (u^; → ü).
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Joris

У меня спокойно работает замена двух двоеточий на ː
Выглядит как
::::::ː
yóó' aninááh

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Тайльнемер

Подскажите.
Как сделать так, чтобы строковые автозамены работали не только с символоми, введёнными непосредственно, но и с символами, введёнными через горячие клавиши?
Например, я делаю горячую клавишу для ввода навесного акута:
>#'::SendInput {U+0301} ; combining acute accent
А теперь я хочу, чтобы буква 'a' в комбинации с навесным акутом заменялась на прекомбинированную 'á'.
Если написать
:*?:á::á ; преобразовать навесную диакритику в прекомбинированную
то работать не будет из-за того, что навесной акут набирается горячей клавишей. (Когда я набираю навесной акут из раскладки — замена работает.)
Можно ли сделать так, чтобы для строковой автозамены было неважно, каким способом набран символ?

Тайльнемер

Нашёл в документации, что так нельзя:
Цитировать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, чтобы всё было в одном месте.
Придётся оставить диакритику в раскладке

mnashe

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

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

Да, и SendInput не нужен, достаточно обычных автозамен (но нужна уникодная версия, конечно).
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Тайльнемер

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

Сейчас я могу сделать раскладку, в которой на AltGr+клавиша висят все нужные навесные диакритики, а в AHK прописать замену навесных на прекомбинированные (скрипт генерируется на основе списка канонических декомпозиций с официального сайта Уникода).
Но очень  ограничивает то, что все символы надо пихать в раскладку, а использовать горячие клавиши AHK нельзя.
Так что моя идея, похоже, нереализуема в полную силу — раскладки поддерживают только один дополнительный регистр — AltGr, а я хотел несколько.

Nevik Xukxo

Скорей всего не пользуюсь хоткеями. Потому что не знаю что это. И влом курить доки.

Тайльнемер


O

Цитата: Тайльнемер от августа 20, 2013, 10:06
Цитата: mnashe, скрипт его
::1/0::∞


У меня бесконечность даёт 8 и «инициатор замены». А ноль так же даёт ∅.
gdy padła granica, pękły więzień bramy,
w ten dzień wyzwolenia: siedemnasty września

arseniiv

Цитата: Тайльнемер от августа 20, 2013, 09:38
1) В коде на различных языках программирования встречаются всякие разные сочетания ASCII-символов. Автозамена будет мешать писать их.
2) Для других членов семьи клавиатура должна вести себякак можно более стандартно.
Можно сделать переключаемый режим типа такого (у меня):

hotstringsEnabled := true
>!\::
  hotstringsEnabled := not hotstringsEnabled
  if hotstringsEnabled {
    SoundPlay, *64
  } else {
    SoundPlay, *-1
  }
return
#If hotstringsEnabled
...замены...
#If

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр