Показаны сообщения с ярлыком autohotkey. Показать все сообщения
Показаны сообщения с ярлыком autohotkey. Показать все сообщения

воскресенье, 17 октября 2010 г.

Раскладки. Революция.

Некоторое время назад я писал "псто о раскладках", в котором пропагандировал за программу AutoHotKey. Тогда я еще не был макпользователем и не знал, какие маленькие радости несет в себе алюминиевое яблоко.В общем, на клавиатуре у меня нет клавиши Delete и переключение раскладок тоже.. скажем так, необычное.
А еще меня давно раздражают сочетания клавиш (по-моему, КО, гораздо удобнее тыркать одну клавишу, чем две). Нет, я, наверное, понимаю, почему по традиции используются сочетания, но хочу без них. Итак, находясь в Mac OS X, я нашел программу KeyRemap4McBook, которая пришла на смену менее удобной программе DoubleCommand (отмечу к слову, что я удалял эту программу два дня, пока не понял в точности что нужно сделать, что стереть ее с лица моего макбука,  типичное решение для домохозяек).
С помощью KeyRemap я назначил русскую раскладку на правую клавишу Cmd, а английский - на левую. Если запомнить, что тыкаешь правым большим пальцем для русского, а левым для английского, то процесс набора текста ускоряется (у меня, во всяком случае).

Также я назначил, чтобы сочетание Shift+Delete делало "Delete в стиле PC" - то есть удаляло символ справа от курсора. Для удаления символа слева от курсора используется "Delete в стиле  Mac", который любой ПК-пользователь назовет "Backspace".

Но когда возникла необходимось поработать в Windows, стало понятно, что надо звать на помощь AutoHotKey. И вот какая проблема тут возникла.

Мне надо, чтобы одиночно нажатая клавиша LWin ( левый Windows,  или левый Cmd)  вызвала переключение на английскую раскладку, но чтобы в сочетаниях с другими клавишами она работала как Ctrl -  потому что именно сочетание Cmd + V (а не Ctrl + V) уже вызвало у меня привычку в Mac OS X.

На данный момент я не знаю как решить эту задачу в общем случае, перебрал с десяток вариантов, но все время что-то не то.

Поэтому вот частное решение.


RWin::PostMessage, 0x50, 2, 68748313,, A  
LWin::PostMessage, 0x50, 2, 67699721,, A
 LWin & sc02f::send {Ctrl Down}{vk56}{Ctrl Up}  ;paste
 LWin & sc02e::send {Ctrl Down}{vk43}{Ctrl Up}  ;copy
 LWin & sc02d::send {Ctrl Down}{vk58}{Ctrl Up}  ;cut
 LWin & sc02c::send {Ctrl Down}{vk5A}{Ctrl Up}  ;undo
 
+BS::Send, {Del}

Решение заключается в том, чтобы для конкретных сочетаний работы с буфером обмена и отменой происходил ремаппинг. Хитрость тут в том, что по-разному воспринимаются клавиши с буквами z,x,c,v (я,ч,с,м) в разных раскладках. Поэтому используются скан-коды и виртуальные клавиши.