13

TLDR : Mma 7 で CapsLock を "ShortNameDelimiter" に変換するにはどうすればよいですか?

私は mma ノートブックのきれいなテキストが好きで、f[\[Alpha]_] =...作業している方程式と正確に一致するように関数を定義することがよくあります。そのため、多くのEsc- letter-Escシーケンスが含まれ、 Esc1 つおきのストロークに手を伸ばすと、タイピングの流れが中断されます。

現在、CapsLockキーはめったに使用されませんが (最後にいつ必要だったか思い出せません)、便利な場所に配置されています (小指はすぐそこにあります!)。システムのキーボード レイアウトを変更せずに、 で同じことを行う方法があるかどうか疑問に思っていましEscた。vimmma

KeyEventTranslations.trに以下を追加して編集してみましたEventTranslations[{...

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

しかし、それは効果がありませんでした。それを行う別の方法はありますか?CapsLock正しい識別子ではありませんか? 役に立ったら、私は Mac で Mma7 学生版を使用しています。

4

1 に答える 1

7

修飾キーは非常に特別に扱われ、Mathematicaがシステムをオーバーライドできるとは思えません。おそらくMathematicaとOSの間の層でこれをしなければならないでしょう。ただし、使用しているアプリケーションに応じてキーの動作を変えることは可能です。したがって、少しの作業で、Mathematicaでのみcapslockキーの動作を変えることができる場合があります。

編集:あなたがどのオペレーティングシステムを持っているかをあなたが言うのを見なかったので、私はMacの指示を追加しました。


ウィンドウズ

たとえば、Windowsを使用している場合は、http://www.autohotkey.com/というプログラムを使用できます。具体的には、キーをスクリプト、具体的には次のスクリプトにバインドできる機能があります。

ホットキーまたはホットストリングを特定のプログラム専用にするにはどうすればよいですか?

つまり、特定のウィンドウがアクティブな場合を除いて、特定のキーを通常どおりに機能させたいのです。次の例では、「CADEditor」というタイトルのウィンドウがアクティブな場合を除いて、NumpadEnterが正常に実行されます。「$NumpadEnter」で$プレフィックスを使用していることに注意してください。これは、ホットキーを「自分自身に送信」させるために必要です。

$NumpadEnter::
IfWinNotActive, CAD Editor
{
    Send, {NumpadEnter}
    return
}
; Otherwise, the desired application is active, so do a custom action:
Send, abc
return

この次の例は上記よりも純粋ですが、「CADエディター」アプリケーションが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 

2つ目はCapsLock.ahkという名前で、次のスクリプトがあります。

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

したがって、最悪の事態になります。「Active Window = Mathematicaの場合はFooのように動作し、それ以外の場合はBarのように動作する」スクリプトの変更に問題がある場合は、これに取り組み、CapsLockの状態を手動で切り替えることができます。グーグルはまた、より多くの結果を明らかにします。


Linux

xbindkeysLinuxでは、呼び出されたプログラムを使用してCapsLockをスクリプトにバインドできることを知っています。このプログラムから、 xdoMathematicaが最上位のウィンドウの1つであることが検出された場合に呼び出すことができます(たとえば、最上位のウィンドウのpidと詳細を取得するなどxdotool getwindowfocus) 。さらに悪いことに、設定をCapsLock -> xdotool key Escape, xdotool type "whatever", xdotool key Escape(「Mathematicaモード」)と「通常モード」の間で切り替えるスクリプトを作成することもできます。ただし、数学を行っている間、インスタントメッセージングで数学者に怒鳴るのを防ぐことができます。ダミーのCapsLockキーを作成するなどして、プログラムでCapsLockを切り替える方法を見つける必要がある場合を除きます(これは極端なハックですが、何らかのライブラリを見つけることができる可能性があります。おそらく、CapsLockのオン/オフを切り替える方法を知っている人は誰でもいます。 Pythonで?役に立つかもしれません)。(この問題は、CapsLock以外のキーを使用するか、CapsLock機能を維持したいことを気にしないことで回避できます。また、使用しない別のキーをCapsLockに変えることもできます。)


マック

Macにも同様のツールがあるかもしれません。たとえばxdotool、MacPortsプロジェクトを介して上記のLinuxのように取得できます。通常、CapLockキーはMacで簡単にリバウンドできないと聞きました。そのため、別のキーを処理できれば、はるかに簡単になる可能性があります。しかし、理論的には可能であるはずです...

CapsLockを使用する場合は、PCKeyboardHack http://pqrs.org/macosx/keyremap4macbook/extra.htmlを使用して、CapLockキーをOSXにCapsLockの再マップを許可するものに再マップできます。次に、それを再マップし、Quicksilverを使用してキーをスクリプトにバインドします。このスクリプトxdotoolは、Mathematicaを使用しているかどうかを確認し、使用している:esc:...:esc:場合も発行します(この回答のLinuxセクションを参照)。それ以外の場合は、CapsLockでキーを押すことをシミュレートします。しかし、CapsLockを再マップしました!そのため、使用しない別のダミーキーをCapsLockキーに作成し、Cocoaライブラリまたは単純なAppleScriptを使用してそのキーを押す必要がある場合があります。CapsLockルートを追求したい場合は、MacOSXでEscとしてCapsLockを使用すると便利です。

于 2011-05-06T08:33:37.733 に答える