2006.03.02
かっこ(超思いつき)
(や「や[を打つと、自動的に)や」や]が入力され、そして速やかに左に戻る、つまりカッコの中にカーソルが入る、というのはどうだろうか。
key at = $「 $」 Left
key S-_8 = S-_8 S-_9 Left
key *S-*LSB = *LSB *RSB Left
案外悪くないかも。Html用やプログラム用のエディタでは見かける機能だけど、繭でやればどんな状況でも使えるのが便利。
確定後自動的に外に出る、と言うのも出来ないことはないな。
keymap Global
key IL-L5-*S-*LSB = *LSB *RSB Left &Toggle(lock5,on)
key IL-L5-*Enter = Enter Right &Toggle(Lock5,off)
出来ないことはないが、微妙。
key at = $「 $」 Left
key S-_8 = S-_8 S-_9 Left
key *S-*LSB = *LSB *RSB Left
案外悪くないかも。Html用やプログラム用のエディタでは見かける機能だけど、繭でやればどんな状況でも使えるのが便利。
確定後自動的に外に出る、と言うのも出来ないことはないな。
keymap Global
key IL-L5-*S-*LSB = *LSB *RSB Left &Toggle(lock5,on)
key IL-L5-*Enter = Enter Right &Toggle(Lock5,off)
出来ないことはないが、微妙。
2005.08.25
繭Tips 第4回 ウインドウリサイズ
前回に引き続き、またしても繭小ネタです。古い日記や窓使いの憂鬱本スレにも書いたネタをちょっと洗練させて再登場です。
窓使いの憂鬱にはWindowResizeToという関数があります。ウインドウのサイズを絶対指定で変更する関数です。しかしなぜか相対指定(今のウインドウサイズより1大きく、など)の関数は用意されていません。そこで、&PostMessageを使って実装してみます。
keyseq $WRleft = &PostMessage(ToMainWindow, 274, 0xf001, 0x3b10178)
keyseq $WRright = &PostMessage(ToMainWindow, 274, 0xf002, 0x3b10178)
keyseq $WRtop = &PostMessage(ToMainWindow, 274, 0xf003, 0x3b10178)
keyseq $WRbottom = &PostMessage(ToMainWindow, 274, 0xf006, 0x3b10178)
key A-num4 = &MouseMove( +9,0 ) &Sync $WRleft left enter
key A-S-num4 = &MouseMove( -9,0 ) &Sync $WRleft right enter
key A-num6 = &MouseMove( -9,0 ) &Sync $WRright right enter
key A-S-num6 = &MouseMove( +9,0 ) &Sync $WRright left enter
key A-num8 = &MouseMove( 0,+9 ) &Sync $WRtop up enter
key A-S-num8 = &MouseMove( 0,-9 ) &Sync $WRtop down enter
key A-num2 = &MouseMove( 0,-9 ) &Sync $WRbottom down enter
key A-S-num2 = &MouseMove( 0,+9 ) &Sync $WRbottom up enter
key A-C-num4 = &MouseMove( +1,0 ) &Sync $WRleft C-left enter
key A-C-S-num4 = &MouseMove( -1,0 ) &Sync $WRleft C-right enter
key A-C-num6 = &MouseMove( -1,0 ) &Sync $WRright C-right enter
key A-C-S-num6 = &MouseMove( +1,0 ) &Sync $WRright C-left enter
key A-C-num8 = &MouseMove( 0,+1 ) &Sync $WRtop C-up enter
key A-C-S-num8 = &MouseMove( 0,-1 ) &Sync $WRtop C-down enter
key A-C-num2 = &MouseMove( 0,-1 ) &Sync $WRbottom C-down enter
key A-C-S-num2 = &MouseMove( 0,+1 ) &Sync $WRbottom C-up enter
ウインドウズの標準的な操作の
Alt Space S
で、ウインドウサイズの変更自体は出来ます。これをそのまま定義しても良いのですが、そうすると一回一回メニューが開くことになり、画面がちらちらすること、それから環境と状況次第ではAlt Space でメニューが開かないアプリがあること、そのために、&PostMessageを使っています。&PostMessageで何を送っているのか詳しいことは分かりませんけど(汗。
&MouseMoveを入れないとマウスカーソルがウインドウリサイズと同時に動いてしまいます。そのため、マウスカーソルを逆方向に動かして相殺させています。
また、連続してリサイズしたとき、改行が入ってしまうことがあるので、&Syncを入れています。
話は変わりますが、窓使いの憂鬱本スレで、横スクロールについて質問しています。もし分かる方がいたら教えてください。
窓使いの憂鬱にはWindowResizeToという関数があります。ウインドウのサイズを絶対指定で変更する関数です。しかしなぜか相対指定(今のウインドウサイズより1大きく、など)の関数は用意されていません。そこで、&PostMessageを使って実装してみます。
keyseq $WRleft = &PostMessage(ToMainWindow, 274, 0xf001, 0x3b10178)
keyseq $WRright = &PostMessage(ToMainWindow, 274, 0xf002, 0x3b10178)
keyseq $WRtop = &PostMessage(ToMainWindow, 274, 0xf003, 0x3b10178)
keyseq $WRbottom = &PostMessage(ToMainWindow, 274, 0xf006, 0x3b10178)
key A-num4 = &MouseMove( +9,0 ) &Sync $WRleft left enter
key A-S-num4 = &MouseMove( -9,0 ) &Sync $WRleft right enter
key A-num6 = &MouseMove( -9,0 ) &Sync $WRright right enter
key A-S-num6 = &MouseMove( +9,0 ) &Sync $WRright left enter
key A-num8 = &MouseMove( 0,+9 ) &Sync $WRtop up enter
key A-S-num8 = &MouseMove( 0,-9 ) &Sync $WRtop down enter
key A-num2 = &MouseMove( 0,-9 ) &Sync $WRbottom down enter
key A-S-num2 = &MouseMove( 0,+9 ) &Sync $WRbottom up enter
key A-C-num4 = &MouseMove( +1,0 ) &Sync $WRleft C-left enter
key A-C-S-num4 = &MouseMove( -1,0 ) &Sync $WRleft C-right enter
key A-C-num6 = &MouseMove( -1,0 ) &Sync $WRright C-right enter
key A-C-S-num6 = &MouseMove( +1,0 ) &Sync $WRright C-left enter
key A-C-num8 = &MouseMove( 0,+1 ) &Sync $WRtop C-up enter
key A-C-S-num8 = &MouseMove( 0,-1 ) &Sync $WRtop C-down enter
key A-C-num2 = &MouseMove( 0,-1 ) &Sync $WRbottom C-down enter
key A-C-S-num2 = &MouseMove( 0,+1 ) &Sync $WRbottom C-up enter
ウインドウズの標準的な操作の
Alt Space S
で、ウインドウサイズの変更自体は出来ます。これをそのまま定義しても良いのですが、そうすると一回一回メニューが開くことになり、画面がちらちらすること、それから環境と状況次第ではAlt Space でメニューが開かないアプリがあること、そのために、&PostMessageを使っています。&PostMessageで何を送っているのか詳しいことは分かりませんけど(汗。
&MouseMoveを入れないとマウスカーソルがウインドウリサイズと同時に動いてしまいます。そのため、マウスカーソルを逆方向に動かして相殺させています。
また、連続してリサイズしたとき、改行が入ってしまうことがあるので、&Syncを入れています。
話は変わりますが、窓使いの憂鬱本スレで、横スクロールについて質問しています。もし分かる方がいたら教えてください。
2005.08.21
繭tips 第3回
お久しぶりの繭Tipsです。
窓使いの憂鬱には「ワンショットモディファイア」というとても便利な機能があります。
mod Shift = !!Space
この一行で、SpaceキーがShift兼用になります。慣れると手放せない機能なんですが、一つだけ弱点が。ワンショットモディファイアのシフトは、マウスクリックには反応しません。
そこで、窓使いの憂鬱に用意されている別の機能を使って、マウスクリックとも併用できる「SandS」を書いてみます。
#-----
keymap SandS : Global
key R-*Space = &Ignore
key U-*Space = &VK( U-shift ) Space
keymap Global
key D-*Space = &VK( D-shift ) &Prefix( SandS )
key R-*Space = &Ignore
key U-*Space = &VK( U-shift )
#-----
マウスクリックされたかどうか繭には取得判別できないので、スペースキーが
・長く押されたのか(キーリピートがある)
・一瞬押されたのか(キーリピートがない)
だけを見てスペースを送信するかどうかを決めます。
ですから、スペースをしばらく押してから離すと何もしません。また、スペースキーを押してすぐにマウスクリックし、すぐにスペースキーを離したときにはスペースが送信されてしまいます。普通に使う分には特に問題はないと思います。
スペースが押されている間はシフトがかかっていますから、長押ししてから文字キーを押したりマウスクリックしても、もちろんシフトはかかります。スペースキーを単独で長押ししたときだけ、何もしません。
もっと簡潔に書けそうな気もするのですが、とりあえずこれで思った通りに動いているので良しとします(笑)。もっと良い書き方があるぞ、と言う方は是非教えてください。
ちなみに、(第一回でも紹介しましたが)用意されているワンショットモディファイア機能を使った場合でも、
mod shift = !!Space に加えて
key R-*Space = &Ignore
とすることで、「スペースキーを長押ししてから離した場合は何もしない」が出来ます。スペースキーを普通のシフトキーのようにうっかり押してしまうが、間違って押したときはスペースを送信して欲しくない、と言う人は試してみてください。
窓使いの憂鬱には「ワンショットモディファイア」というとても便利な機能があります。
mod Shift = !!Space
この一行で、SpaceキーがShift兼用になります。慣れると手放せない機能なんですが、一つだけ弱点が。ワンショットモディファイアのシフトは、マウスクリックには反応しません。
そこで、窓使いの憂鬱に用意されている別の機能を使って、マウスクリックとも併用できる「SandS」を書いてみます。
#-----
keymap SandS : Global
key R-*Space = &Ignore
key U-*Space = &VK( U-shift ) Space
keymap Global
key D-*Space = &VK( D-shift ) &Prefix( SandS )
key R-*Space = &Ignore
key U-*Space = &VK( U-shift )
#-----
マウスクリックされたかどうか繭には取得判別できないので、スペースキーが
・長く押されたのか(キーリピートがある)
・一瞬押されたのか(キーリピートがない)
だけを見てスペースを送信するかどうかを決めます。
ですから、スペースをしばらく押してから離すと何もしません。また、スペースキーを押してすぐにマウスクリックし、すぐにスペースキーを離したときにはスペースが送信されてしまいます。普通に使う分には特に問題はないと思います。
スペースが押されている間はシフトがかかっていますから、長押ししてから文字キーを押したりマウスクリックしても、もちろんシフトはかかります。スペースキーを単独で長押ししたときだけ、何もしません。
もっと簡潔に書けそうな気もするのですが、とりあえずこれで思った通りに動いているので良しとします(笑)。もっと良い書き方があるぞ、と言う方は是非教えてください。
ちなみに、(第一回でも紹介しましたが)用意されているワンショットモディファイア機能を使った場合でも、
mod shift = !!Space に加えて
key R-*Space = &Ignore
とすることで、「スペースキーを長押ししてから離した場合は何もしない」が出来ます。スペースキーを普通のシフトキーのようにうっかり押してしまうが、間違って押したときはスペースを送信して欲しくない、と言う人は試してみてください。
2005.04.29
繭tips 第2回
窓使いの憂鬱に関する小技第2弾です。最終回かも知れません。またしても2chのスレからです。
窓使いの憂鬱で、入力用の配列を月やDvorak、その他の配列に変えている人もいますが、キーボードショートカットはQwertyのままにしたかったりします。そのときはCtrlなどの「モディファイアキー」と、文字キーが一緒に押された場合はQwerty配列で扱うように設定します。これは簡単にできます。
さて、ALTによるショートカットに、2ストロークキーのパターンがあります。例えばAlt+Fを押すと「ファイル(F)」のメニューが開きます。この状態で、さらに単独で "N" を押せば「新規作成(N)」が選ばれます。が、文字キーの配列を変更していると、この "N" は「モディファイア」と一緒に押すわけではないので、N を押したつもりがとんでもないキーが押されたことになってしまいます。
フォーカスが「メニュー」にあるときはQwertyにしてやることでこの問題を解決できます。
window "menu" /:.*menu/ : global
key *a = a
key *b = b
key *c = c
key *d = d
key *e = e
key *f = f
key *g = g
key *h = h
key *i = i
key *j = j
key *k = k
key *l = l
key *m = m
key *n = n
key *o = o
key *p = p
key *q = q
key *r = r
key *s = s
key *t = t
key *u = u
key *v = v
key *w = w
key *x = x
key *y = y
key *z = z
窓使いの憂鬱で、入力用の配列を月やDvorak、その他の配列に変えている人もいますが、キーボードショートカットはQwertyのままにしたかったりします。そのときはCtrlなどの「モディファイアキー」と、文字キーが一緒に押された場合はQwerty配列で扱うように設定します。これは簡単にできます。
さて、ALTによるショートカットに、2ストロークキーのパターンがあります。例えばAlt+Fを押すと「ファイル(F)」のメニューが開きます。この状態で、さらに単独で "N" を押せば「新規作成(N)」が選ばれます。が、文字キーの配列を変更していると、この "N" は「モディファイア」と一緒に押すわけではないので、N を押したつもりがとんでもないキーが押されたことになってしまいます。
フォーカスが「メニュー」にあるときはQwertyにしてやることでこの問題を解決できます。
window "menu" /:.*menu/ : global
key *a = a
key *b = b
key *c = c
key *d = d
key *e = e
key *f = f
key *g = g
key *h = h
key *i = i
key *j = j
key *k = k
key *l = l
key *m = m
key *n = n
key *o = o
key *p = p
key *q = q
key *r = r
key *s = s
key *t = t
key *u = u
key *v = v
key *w = w
key *x = x
key *y = y
key *z = z
2005.04.18