Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: Iskandar от сентября 25, 2011, 14:33

Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 14:33
А кстати, есть ли в Винде возможность добавить раскладки клавиатуры так, чтобы они вызывались не переключением стандартного Shift + Alt/Ctrl, а какими-то другими клавишами?

Дело в том, что для обычной жизни в компе обычно достаточно двух раскладок: русской и аглицкой. Все остальные раскладки требуют редко, от случая к случаю, и если навешать на Shift + Alt пяток раскладок, жить расхочешь их переключать, чтобы просто докопаться до аглицкой и потом обратно до русской...
Название: Допраскладки
Отправлено: Bhudh от сентября 25, 2011, 14:37
По дефолту вроде вот так...
Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 14:39
А... И всё? Никогда не задумывался над сабжем и потому не долезал дотуда :)
Спасибо
Название: Допраскладки
Отправлено: Bhudh от сентября 25, 2011, 14:41
Пожалуйста. Я, правда, никогда цифры не юзал — лениво до верхнего ряда тянуться. Ну так у меня и языков стоит всего три.
Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 14:43
Хотя нет. Вспомнил, что такое уже вроде когда-то давно делал.
Однако всё равно не очень удобно. Хорошо бы, чтобы Shift + Alt переключало только с русского на английский и обратно. А остальные клавы включались только допсочетаниями.
Название: Допраскладки
Отправлено: Bhudh от сентября 25, 2011, 14:46
А если вдруг забыл, какое сочетание⁈ :uzhos:

myst вроде писал, что для этого надо в реестре копаться... Но точно не помню.
Название: Допраскладки
Отправлено: mnashe от сентября 25, 2011, 14:55
У меня так:
Alt+Shift последовательно прокручивает раскладки.
Ctrl+Shift+1 выбирает английскую раскладку. Альтернатива (через AHK) – Win+1.
Ctrl+Shift+2 выбирает русскую раскладку йцукенг. Альтернатива – Win+2.
Ctrl+Shift+3 выбирает русскую фонетическую (для жены). Альтернатива – Win+3.
Ctrl+Shift+4 выбирает ивритскую раскладку. Альтернатива – Win+4.
Ctrl+CapsLock (через AHK) переключает между йцукенг и qwerty. Если сейчас выбрана английская, выбирает русскую, иначе выбирает английскую.

Дать код?
Название: Допраскладки
Отправлено: Bhudh от сентября 25, 2011, 15:01
Цитата: mnashe от Ctrl+CapsLock
У меня на этом reCap стоит, через пунто.
Название: Допраскладки
Отправлено: Hellerick от сентября 25, 2011, 15:09
Я работаю на четырех компьютерах, и на всех разные клавиши переключения раскладок.  :(
Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 15:30
Цитата: mnashe от сентября 25, 2011, 14:55
Дать код?

Да!
Что такое АНК?
Название: Допраскладки
Отправлено: Hellerick от сентября 25, 2011, 15:33
Цитата: Iskandar от сентября 25, 2011, 15:30
Что такое АНК?

http://www.autohotkey.com/
Название: Допраскладки
Отправлено: Квас от сентября 25, 2011, 15:45
Цитата: Iskandar от сентября 25, 2011, 15:30
Что такое АНК?

Это вообще мегавещь!
www.autohotkey.com
Хорошо, что mnashe, спокойный популяризатор, упомянул раньше, чем я, безумный популяризатор. :D

У меня две раскладки: русская и английская. Для удобства переключения написал функцию:

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
PostMessage, 0x50,, %Layout%, %C%, A
}

Её можно до бесконечности дописывать, но мне не надо было. Английская раскладка включается левым контролом, русская — правым:

; Включение раскладки по Ctrl:
~LControl::SetLayout("English") ; по левому - английская
~RControl::SetLayout("Russian") ; по правому - русская


; Чтобы клавиши сохранили обычную функциональность, нужно хотя бы раз их использовать в качестве префиксов.
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


В качестве бонуса здесь Ctrl+Ins прикрепляет к каждой клавише «буфер»: много буферов бывает удобно при редактировании (вставка через Shift+Ins).

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

; / - accent grave & é & la cedille & œ

:*?C:e/::é
:*?C:o/::œ
:*?C:c/::ç
:*?C:E/::é
:*?C:O/::Œ
:*?C:C/::Ç
:*?C:a/::à
:*?C:A/::À
:*?C:u/::ù
:*?C:U/::Ù

; ] - è

:*?C:e]::è
:*?C:E]::È

:*?C:i]::ï
:*?C:u]::ü
:*?C:I]::Ï
:*?C:U]::Ü

; [ - l'accent circonflexe

:*?C:a[::â
:*?C:e[::ê
:*?C:o[::ô
:*?C:u[::û

:*?C:A[::Â
:*?C:E[::Ê
:*?C:O[::Ô
:*?C:U[::Û

; { - le trema

:*?C:i{::ï
:*?C:e{::ë
:*?C:u{::ü

:*?C:I{::Ï
:*?C:E{::Ë
:*?C:U{::Ü


Включение/выключение можно организовать по любой клавише.

Если вы установите себе несколько раскладок, то циклически переключаться становится неудобно, любой AHK бессилен. Но циклическое переключение — всё равно зло, так что лучше повесить включение раскладок на комбинации. Комбинации AHK позволяет использовать любые; можно сделать по примеру моих контролов, научив функцию SetLayout понимать нужные раскладки.
Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 15:47
Короче, проще всего назначить в Пунте клавишу на переключение рус / англ (есть, оказывается, такая функция, например, на месте Капса, я всё равно не блондинка, он мне не нужен), а всё на остальное - поназначать клавиш.
Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 15:53
Хотел установить персидскую клаву, это какой-то  :fp:
Букву П билгейцовцы, шоб они были здоровы, упёрли на предполагаемую клавишу, что над Энтером и которой на наших клавах обычно не бывает. А ведь во всех он-лайновых версиях она на месте M/Ь... Идиоты...
Название: Допраскладки
Отправлено: Квас от сентября 25, 2011, 15:57
В принципе, можно писать AHK-раскладки не через автозамены, а через горячие клавиши (для интереса делал армянскую). Расположение клавиш при этом зависит только от фантазии. Но «интеллектуальности» трудно достигать (например, чтобы автоматически вставлялась начальная/конечная/срединная формы).
Название: Допраскладки
Отправлено: Квас от сентября 25, 2011, 16:02
Цитата: Квас от сентября 25, 2011, 15:45
Если вы установите себе несколько раскладок, то циклически переключаться становится неудобно, любой AHK бессилен.

Хотя почему это так пессимистично? Делаем комбинацию Alt+Shift, которая в зависимости от текущей раскладки включает русскую или английскую, имеем в точности
Цитата: Iskandar от сентября 25, 2011, 14:43
Хорошо бы, чтобы Shift + Alt переключало только с русского на английский и обратно.

Iskandar, придумайте дизайн — я вам скрипт напишу.

Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 16:14
Цитата: Квас от сентября 25, 2011, 16:02
Iskandar, придумайте дизайн — я вам скрипт напишу.

Дизайн чего, простите?
Название: Допраскладки
Отправлено: mnashe от сентября 25, 2011, 16:50
Мой скрипт:
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(0xF0C10419) ; to Russian

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

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

^CapsLock::
If (GetInputLocaleId()==0x04090409)
{
  LangSwitch(0xF0C10419)
  return
}
LangSwitch(0x04090409)
return
Его надо видоизменить, поскольку конкретный идентификатор нужной раскладки на каждом компьютере свой (если русская раскладка, как у меня, нестандартная).
Для того, чтобы узнать идентификатор текущей раскладки, нужно нажать Ctrl+Shift+`. Полученное число и нужно прописать в нужные места скрипта (вместо 0xF0C10419).
Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 18:37
Вот, нашёл, если кому нужна, нормальную персидскую клаву:
http://ehsanakhgari.org/article/miscellaneous/standard-persian-keyboard-for-windows
Название: Допраскладки
Отправлено: Квас от сентября 25, 2011, 19:51
Цитата: Iskandar от сентября 25, 2011, 16:14
Цитата: Квас от сентября 25, 2011, 16:02Iskandar, придумайте дизайн — я вам скрипт напишу.
Дизайн чего, простите?

Чем что включать/выключать/переключать.
Название: Допраскладки
Отправлено: mnashe от сентября 25, 2011, 19:58
А у меня маленький, простой и всё что надо делает :dayatakoy:
Более простой (http://lingvoforum.net/index.php/topic,38722.msg1011869.html#msg1011869) — ненадёжен. Например, если есть две русские раскладки, он переключает на последнюю использованную, а не на ту, на которую просят.
Название: Допраскладки
Отправлено: Квас от сентября 25, 2011, 20:34
Цитата: mnashe от сентября 25, 2011, 19:58
Более простой — ненадёжен. Например, если есть две русские раскладки, он переключает на последнюю использованную, а не на ту, на которую просят.

Да, был какой-то такой глюк. А механику не пояснишь? Я DllCall-ы только из чужих скриптов выдирать умею.
Название: Допраскладки
Отправлено: mnashe от сентября 25, 2011, 21:13
Цитата: Квас от сентября 25, 2011, 20:34
А механику не пояснишь? Я DllCall-ы только из чужих скриптов выдирать умею.
Именно это я и сделал: нашёл на форуме подходящий скрипт и переделал под себя.
Так что не поясню, ибо не знаю :)
Название: Допраскладки
Отправлено: Квас от сентября 25, 2011, 22:01
mnashe, разница в наших функциях переключения раскладки — то, что у меня аргумент пропущен, там где у тебя 0. Неужели это так критично? :???
Название: Допраскладки
Отправлено: Iskandar от сентября 25, 2011, 22:02
Цитата: Квас от сентября 25, 2011, 19:51
Чем что включать/выключать/переключать.

А... Надо подумать
Спасибо
Название: Допраскладки
Отправлено: mnashe от сентября 26, 2011, 07:55
Цитата: Квас от сентября 25, 2011, 22:01
mnashe, разница в наших функциях переключения раскладки — то, что у меня аргумент пропущен, там где у тебя 0. Неужели это так критично?
Действительно...
Нет, не критично:
Цитата: AHKThe first component of the message, which can be an expression. If blank or omitted, 0 will be sent.

До этого у меня был какой-то ещё более короткий скрипт, и с ним была проблема. А с этим нет.
Кстати, со стандартным переключением Ctrl+Shift+цифра тоже такая проблема есть: если была выбрана русская фонетическая (Ctrl+Shift+3), потом переключили на английскую (Ctrl+Shift+1), потом на русскую йцукенг (Ctrl+Shift+2) — реально активируется фонетическая. Нужно ещё раз нажать Ctrl+Shift+2, чтобы активировать йцукенг.
Надо проверить скрипт дома — может, там у меня идёт два раза PostMessage? :donno:
Я привёл скрипт, что на работе, а на работе мне фонетическая не нужна (дома она для жены).
Название: Допраскладки
Отправлено: Искандер от сентября 26, 2011, 08:10
А я так сделал: наваял абхазскую раскладку и присвоил ей русский язык в свойствах. Наваял раскладку с комбодиакритикой и присвоил ей английский язык.
Между языками у меняь переклюсчается шифтальтом, а внутри языка между раскладками шифтконтрлом.
Польская только мешается.
Название: Допраскладки
Отправлено: Квас от сентября 26, 2011, 09:06
Цитата: Искандер от сентября 26, 2011, 08:10
Наваял раскладку с комбодиакритикой и присвоил ей английский язык.
Между языками у меняь переклюсчается шифтальтом, а внутри языка между раскладками шифтконтрлом.

И как, you never know, какую раскладку он подсунет для английского?

У меня AHK путался с двумя раскладками для английского, несмотря на то, что я месседжи очередями стал постить.

Название: Допраскладки
Отправлено: mnashe от сентября 26, 2011, 09:14
Цитата: Квас от сентября 26, 2011, 09:06
У меня AHK путался с двумя раскладками для английского, несмотря на то, что я месседжи очередями стал постить.
А, да? Со sleep между ними?
У меня с нынешним скриптом проблем не было, он всегда переключал на то, что мне надо, в отличие от предыдущих попыток...
Название: Допраскладки
Отправлено: Искандер от сентября 26, 2011, 09:21
ну по умолчанию стоит американская раскладка. А потом таки да, надо следить. Но обычно довольно быстро выясняется. Абхазская проявляет свою сущность почти сразу, диакритическая на первой å вместо w.
Вообще обе раскладки пора лэвэлапить. Вот только у меня вопрос --если они были установлены в винду, их же как-то вырубить из реестра надо, а то разведется зоопарк апсуа1.0, апсуа1.1, апсуа1.2бета...
Название: Допраскладки
Отправлено: Квас от сентября 26, 2011, 11:20
Цитата: mnashe от сентября 26, 2011, 09:14
Цитата: Квас от сентября 26, 2011, 09:06У меня AHK путался с двумя раскладками для английского, несмотря на то, что я месседжи очередями стал постить.
А, да? Со sleep между ними?

Кажется, нет. Это я экспериментировал, вторую английскую снёс. Главным образом из-за того, что иногда он мне её подсовывал первой при переключении на английский.