Ответ 1
Ключи модификатора обрабатываются довольно конкретно, и я сомневаюсь, что Mathematica сможет переопределить систему. Вы, вероятно, имеете, чтобы сделать это в слое между Mathematica и ОС. НО, можно заставить ключ вести себя в зависимости от приложения, в котором вы находитесь. Таким образом, с небольшим количеством работы МОЖНО быть возможно, чтобы ключевое слово блокировки выполнялось по-разному только в Mathematica.
edit: Я не видел, чтобы вы сказали, какую операционную систему у вас есть, поэтому я добавил инструкции Mac.
Окна
Например, если у вас есть Windows, вы можете использовать программу http://www.autohotkey.com/. В нем есть функция, в которой вы можете привязать ключ к script, а именно следующему script:
Как может горячая клавиша или горячая строка быть эксклюзивной для определенных программ?
Другими словами, я хочу, чтобы определенный ключ действовал так, как обычно, за исключением случаев, когда определенное окно активно. В следующем примере NumpadEnter выполняется для выполнения нормально, за исключением случаев, когда открыто окно "Редактор САПР". Обратите внимание на использование префикса $в "$ NumpadEnter", который требуется, чтобы горячая клавиша "отправила себя":
$NumpadEnter::
IfWinNotActive, CAD Editor
{
Send, {NumpadEnter}
return
}
; Otherwise, the desired application is active, so do a custom action:
Send, abc
return
Этот следующий пример более чист, чем выше, но он будет работать только в том случае, если приложение "CAD Editor" предназначено для игнорирования самого ключа NumpadEnter. Префикс тильды (~) превращает NumpadEnter в не подавленную горячую клавишу, что означает, что нажатие клавиши NumpadEnter всегда отправляется в активное окно, с той лишь разницей, что оно вызывает действие горячей клавиши. Для функции ~ требуется Windows NT/2k/XP.
~NumpadEnter::
IfWinNotActive, CAD Editor
return
; Otherwise, the desired application is active, so do a custom action:
Send, abc
return
В цитате из "MRCS" на этом форуме вы можете найти следующее полезное:
Первый, который я назвал CapsLockR.ahk и содержит следующий script:
CapsLock UP::Run C:\Documents and Sett...[path to script]...\CapsLock.ahk
Второй называется CapsLock.ahk и имеет этот script:
GetKeyState, state, CapsLock, T
if state = D
SetCapsLockState, off
else
SetCapsLockState, on
exit
Таким образом, хуже всего происходит худшее, если у вас возникли проблемы с модификацией "Behave, как Foo, если Active Window = Mathematica else ведет себя как Bar" script, вы можете применить это к ручному переключению состояния CapsLock, которое я думаю. Googling также покажет больше результатов.
Linux
Я знаю, что в Linux вы можете использовать программу под названием xbindkeys
для привязки CapsLock к script, из которой вы можете в свою очередь вызвать xdo
, если вы обнаружите, что Mathematica является одним из самых верхних окон (например, через Получение pid и деталей для самого верхнего окна или xdotool getwindowfocus
) или хуже всего-на-худшем, вы можете просто иметь script, который переключает вашу конфигурацию между CapsLock -> xdotool key Escape, xdotool type "whatever", xdotool key Escape
( "Режим Mathematica" ) и "нормальный режим"... хотя это может помешать вам ЖИТЬ В МАТЕМАТИЧЕСКИХ МАТЕМАТИЧЕСКИХ ОБЯЗАТЕЛЬСТВАХ ПОСЛЕ МГНОВЕННОГО СООБЩЕНИЯ ПРИ МАТЕМАТИКЕ. Если вам это не понадобится, вам может понадобиться какой-то способ программно переключить CapsLock, возможно, создав фиктивный ключ CapsLock (хотя это крайне хакер, вероятно, можно найти какую-то библиотеку, возможно Кто-нибудь знает, как включить/выключить блокировку в Python? может быть полезно). (Эту проблему можно было бы избежать, используя ключ, помимо CapsLock, или не заботясь о том, что вы хотите сохранить свою функциональность CapsLock, вы также можете просто превратить другой ключ, который вы никогда не используете в CapsLock.)
Mac
У Mac могут быть похожие инструменты. Например, вы можете получить xdotool
, как в Linux выше, через проект MacPorts. Я слышал, что клавиша CapLock обычно не восстанавливается на Mac, поэтому, если вы можете справиться с другим ключом, это может быть намного проще. Но теоретически это должно быть возможно...
Если вы хотите использовать CapsLock, вы можете использовать PCKeyboardHack http://pqrs.org/macosx/keyremap4macbook/extra.html, чтобы переназначить ключ CapLock на то, что сообщит OS X позвольте вам переделать CapsLock. Затем вы переназначите его, затем привяжите ключ, используя Quicksilver, к script, который вызывает вызовы xdotool
, чтобы проверить, также ли вы в Mathematica, чтобы выпустить :esc:...:esc:
, если вы есть (см. Раздел Linux этого ответа), В противном случае вы имитируете нажатие клавиши CapsLock. Но вы переделали CapsLock! Таким образом, вам может понадобиться сделать еще один фиктивный ключ, который вы никогда не используете в ключе CapsLock, и вызвать нажатие клавиши, используя библиотеки Cocoa или простой AppleScript. Если вы хотите продолжить маршрут CapsLock, вы можете найти Использование Caps Lock как Esc в Mac OS X.