ホットキー 1

ホットキーの登録

通常、ホットキーを登録するには Hotkey Editor (Window → Settings/Preferences → Hotkeys...)を使用します。
MEL コマンドによってホットキーの登録・リストアップ・消去を行いたい場合は、 nameCommand, runTimeCommand, hotkey コマンドを使用します。

hotkey コマンドによるホットキーの登録

hotkey コマンドによって、ホットキーを登録する時は、 以下の手順によって行ないます。
hotkey コマンドだけでは、ホットキーの登録はできないことに注意して下さい。

  1. nameCommand オブジェクトを作る
    nameCommand コマンドによって、 ホットキーで実行したいコマンドに名前を付けます。
    この nameCommand オブジェクトがホットキーに登録されます。
  2. runTimeCommand でコマンドを作る
    Hotkey Editor に表示されるようにするために必要です。
  3. hotkey コマンドでホットキーを登録
    nameCommand オブジェクトをホットキーとして登録します。

ホットキーの登録の例

hotkey コマンドによって、 sphere; move 1 2 3; というコマンドを実行するホットキーを、 割り当てられていない文字をさがして自動的に登録してくれる MEL スクリプトを作ってみましょう。
ホットキーに割り当てられる文字は ctrl + 英小文字 としています。
また、ホットキーの名前や註釈は適当な文字列を登録しているので、 変更したい場合は Hotkey Editor で行ってください。

  1. 以下の MEL スクリプトを setHotkey1.mel という名前で作ります。
    proc string [] findUnmappedCtlKey()
    {
    	string $alpha[] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
    	string $unmap[];
    	int $i = 0;
    	for($char in $alpha)
    	{
    		if(`hotkey -q -ctl -k $char` == 0)
    		{
    			$unmap[$i] = $char;
    			$i++;
    		}
    	}
    	return $unmap;
    }
    
    proc setMyHotkey(string $key, string $com)
    {
    	string $name = ("myHotkey_ctl_" + $key);
    	nameCommand -annotation ("My hotkey Ctl+" + $key) -command $com $name;
    	runTimeCommand -annotation ("My hotkey Ctl+" + $key) -command $com -category "User" $name;
    	hotkey -k $key -ctl -name $name;
    }
    
    global proc setHotkey1()
    {
    	string $unmap[] = findUnmappedCtlKey();
    	if(`size $unmap` > 0)
    	{
    		string $com = "sphere; move 1 2 3;";
    		setMyHotkey($unmap[0], $com);
    	}
    	else
    	{
    		warning "Not Found Unmapped key";
    	}
    }
    
  2. Script EditorFile → Source Script によって setHotkey1.mel を読み込みます。
  3. Script Editor の下のウインドウから setHotkey1(); と打ち込んで実行します。
  4. Hotkey Editor → Categories → User を見ると、 myHotkey_ctl_英小文字 というコマンドが登録されているはずです。
    [Hotkey Editor の図]

スクリプトの解説

proc string [] findUnmappedCtlKey()
文字列の配列を返す findUnmappedCtlKey プロシージャの宣言です。
proc の前に global が付いていないので、このファイルの中のみで呼び出すことができます。
他の MEL スクリプトから呼ばれて実行されては困るプロシージャは global を付けないようにします。
string $alpha[] = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
ホットキーに割り当てる侯補となる文字をリストアップした、 文字列の配列の宣言です。
この文字の中からホットキーに割り当てられていないものをさがします。
ここでは、"a" から順番に "z" までをさがしてゆきます。
もし、割り当てる文字の順番を変えたければ、 優先的に割り当てたい文字を最初の方に移動にしてください。
string $unmap[];
まだホットキーに割り当てられていない文字を入れておくための配列です。
int $i = 0;
配列 $unmap のインデックスとして使用する変数です。
for($char in $alpha)
配列 $alpha の中から 1 文字づつ $char に代入して、 その文字がホットキーに割り当てられていないかどうか調べてゆきます。
if(`hotkey -q -ctl -k $char` == 0)
hotkey コマンドによって $char の文字がホットキーに割り当てられているかどうかを調べます。
hotkey コマンドの返す値が 0 であれば、 そのキーはホットキーに割り当てられていません。
ここでは、-ctl フラグがあるので、 コントロールキー + $char キーがホットキーに割り当てられているかどうかを調べています。
$unmap[$i] = $char;
ホットキーに割り当てられていない文字を配列 $unmap の $i 番目に代入します。
$i++;
$i の中味を 1 加算します。
return $unmap;
ホットキーに割り当てられていない文字が入った配列 $unmap を結果として返します。
proc setMyHotkey(string $key, string $com)
setMyHotkey というプロシージャの宣言です。
proc の前に global が付いていないので、このファイルの中のみで呼び出すことができます。
このプロシージャは、 文字 $key をホットキーとして、コマンド $com を割り当てます。
string $name = ("myHotkey_ctl_" + $key);
myHotkey_ctl_ という文字列に $key を結合して、 コマンドの名前にします。
nameCommand -annotation ("My hotkey Ctl+" + $key) -command $com $name;
$name という名前の nameCommand オブジェクトを作ります。
この nameCommand オブジェクトをホットキーに割り当てます。
各フラグの意味は以下のとおりです。
-annotation ("My hotkey Ctl+" + $key)
コマンドの註釈です。
-command $com
実行されるコマンドをします。
runTimeCommand -annotation ("My hotkey Ctl+" + $key) -command $com -category "User" $name;
コマンドを作成します。
ここで作成したコマンドが Hotkey Editor に表示されます。
各フラグの意味は以下のとおりです。
-annotation ("My hotkey Ctl+" + $key)
コマンドの註釈です。
Hotkey Editor の Description に表示されます。
-command $com
実行されるコマンドをします。
-category "User"
User カテゴリーに登録します。
Hotkey Editor の Categories → User に表示されるようになります。
hotkey -k $key -ctl -name $name;
$name という名前のコマンドを ctl + $key キーに割り当てます。
global proc setHotkey1()
setHotkey1 というプロシージャの定義です。
string $unmap[] = findUnmappedCtlKey();
findUnmappedCtlKey というプロシージャを実行して、 その結果を文字列の配列 $unmap に代入します。
$unmap にはホットキーに割り当てられていない文字が入っています。
if(`size $unmap` > 0)
配列 $unmap のサイズが 0 以上かどうかを調べています。 0 以上ならば、割り当てられていない文字が $unmap に 1 つ以上入っていることになります。
string $com = "sphere; move 1 2 3;";
ホットキーに登録するコマンドを文字列変数 $com に代入しておきます。
setMyHotkey($unmap[0], $com);
上で定義したプロシージャ setMyHotkey を実行して、 割り当てられていない文字のひとつ $unmap[0] をコマンド $com を実行する、 ホットキーとして登録します。
else
配列 $unmap のサイズが 0 である場合は、 ホットキーに割り当てられていない文字が無かったので、 以下のコマンドを実行して、 ホットキーへの登録を実行しないで終了します。
warning "Not Found Unmapped key";
warning コマンドによって "Not Found Unmapped key" という警告を表示します。
[Script Editor の図]

Tips (hotkey コマンドのフラグ)

hotkey コマンドでホットキーの登録を行うときは、 以下のような組み合わせが可能です。

hotkey -k 文字 -name コマンド名
文字にホットキーを登録します。
hotkey -k 文字 -ctl -name コマンド名
ctl + 文字にホットキーを登録します。
hotkey -k 文字 -alt -name コマンド名
alt + 文字にホットキーを登録します。
hotkey -k 文字 -ctl -alt -name コマンド名
ctl + alt + 文字にホットキーを登録します。

練習

練習課題

参考


Prev | Next
Home | Contents
Mail