Переопределить Caps Lock ключом Esc в Mma 7 - PullRequest
12 голосов
/ 27 апреля 2011

TLDR : Как заставить CapsLock перевести на «ShortNameDelimiter» в Mma 7?

Мне нравится красивый текст в моих тетрадях mma, и я часто определяю функции как f[\[Alpha]_] =..., чтобы соответствовать точному уравнению, с которым я работаю. Таким образом, он включает в себя множество последовательностей Esc - letter - Esc , и достижение Esc при каждом другом ударе нарушает мой поток типирование.

Теперь ключ CapsLock используется редко (я не помню, когда в последний раз он мне понадобился), но удобно расположен (ваш мизинец прямо там!). Преобразование его в Esc на vim творило чудеса для меня, и мне было интересно, есть ли способ сделать то же самое в mma, без необходимости изменять раскладку клавиатуры системы.

Я попытался отредактировать KeyEventTranslations.tr, добавив следующее в EventTranslations[{...

Item[KeyEvent["CapsLock"], "ShortNameDelimiter"]

но это не имело никакого эффекта. Есть ли другой способ сделать это? CapsLock не является правильным идентификатором? Если это поможет, я использую студенческую версию Mma7 на Mac.

1 Ответ

7 голосов
/ 06 мая 2011

Клавиши-модификаторы обрабатываются совершенно специально, и я сомневаюсь, что Mathematica сможет переопределить систему.Вероятно, у вас есть , чтобы сделать это в слое между Mathematica и ОС.НО, возможно заставить ключ вести себя по-разному в зависимости от приложения, в котором вы находитесь. Таким образом, если немного поработать, МОЖЕТ быть возможно, чтобы ключ capslock вел себя по-разному только в Mathematica .

edit: я не видел, чтобы вы говорили, какая у вас операционная система, поэтому я добавил инструкции для Mac.


Windows

Например, если у вас Windows, выможно использовать программу под названием http://www.autohotkey.com/.В частности, он имеет функцию, с помощью которой вы можете привязать ключ к сценарию, а именно к следующему сценарию:

Как сделать горячую клавишу или горячую строку доступной для определенных программ?

Другими словами, я хочу, чтобы определенный ключ действовал как обычно, кроме случаев, когда определенное окно активно.В следующем примере NumpadEnter настроен для нормальной работы, за исключением случаев, когда активно окно с названием «CAD Editor».Обратите внимание на использование префикса $ в «$ 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 и содержит следующий скрипт:

CapsLock UP::Run C:\Documents and Sett...[path to script]...\CapsLock.ahk 

Второй называется CapsLock.ahk и имеет этот скрипт:

GetKeyState, state, CapsLock, T 
if state = D 
    SetCapsLockState, off 
else 
    SetCapsLockState, on 
exit

Таким образом, хуже всего становится хуже, если у вас возникли проблемы с изменением сценария «Ведите себя как Foo, если Active Window = Mathematica иначе ведет себя как Bar», вы можете использовать это для ручного переключения состояния CapsLock, я думаю.Google также покажет больше результатов.


Linux

Я знаю, что в Linux вы можете использовать программу под названием xbindkeys, чтобы связать CapsLock со скриптом, из которого вы можетев свою очередь, позвоните по номеру xdo, если вы обнаружите, что Mathematica является одним из самых верхних окон (например, через Получение pid и подробностей для самого верхнего окна или xdotool getwindowfocus) или «от худшего к худшему», вы можете простоу вас есть скрипт, который переключает вашу конфигурацию между CapsLock -> xdotool key Escape, xdotool type "whatever", xdotool key Escape («режим Mathematica») и «нормальный режим» ... хотя это может помешать вам кричать на математиков над мгновенным сообщением во время выполнения математики.Если вам не понадобится, вам может понадобиться какой-нибудь способ программно переключать CapsLock, возможно, путем создания фиктивного ключа 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, со скриптом, который делает вызовы xdotool, чтобы проверить, находитесь ли вы в Mathematica, а также для выдачи :esc:...:esc:, если вы (см. Раздел Linux этого ответа).В противном случае вы имитируете нажатие клавиши на CapsLock.Но вы переназначили CapsLock!Поэтому вам может понадобиться создать другой фиктивный ключ, который вы никогда не используете, в ключе CapsLock и вызвать нажатие на него с помощью библиотек Cocoa или простого AppleScript.Если вы хотите продолжить маршрут CapsLock, вам может пригодиться Использование Caps Lock в качестве Esc в Mac OS X .

...