Подтвердить что ты не робот

Клавиша блокировки Remap Caps для Esc в Mma 7

TL;DR: Как заставить 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.

4b9b3361

Ответ 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.