vi 風の window操作マクロNo.02612
安久津 さん 01/11/13 21:11
 
// vi 風の window操作マクロ
##n = 1; $$t = "window command";
##ime = imestate; if( imestate ) imeswitch;
main:
    ##in = inputchar( $$t );
    if( splitstate ){
        if( ##in == 'q' ){
            splitswitch; split;
        }else if( ##in == 'j' || ##in == 'k' ){
            splitswitch;
        }else if( ##in == 'o' ){
            split;
        }else if( ##in == '+' || ##in == ';' ){
            call resize ##n;
        }else if( ##in == '-' ){
            call resize 0 - ##n;
        }else if( ##in == '=' || ##in == 'e' ){
            call resize 0;
        }else if( ##in == '_' || ##in == '\\' ){
            call resize 999;
        }else if( ##in == '0' ){
            call resize -999;
        }else if( ##in == 'r' ){
            call rotate;
        }else if( ##in >= '1' && ##in <= '9' ){
            ##n = ##in - '0';
            $$t = str(##n) + " window command";
            goto main;
        }else if( ##in == 'l' ){
            redraw;
        }else if( ##in != 0x1b ){
            beep;
        }
    }else{
        if( ##in == 's' ) split;
        else if( ##in != 0x1b ) beep;
    }
    if( ##ime ) imeswitch;
endmacro;
// ------------------------------
resize:
    ##n = ##1;
    if( splitstate == 1 ){
        ##this = 1; ##other = 2;
    }else{
        ##this = 2; ##other = 1;
    }
    ##wh[0] = 0;
    ##wh[##this] = windowheight;
    ##cx[##this] = x; ##cy[##this] = y;
    splitswitch;
    ##wh[##other] = windowheight;
    ##cx[##other] = x; ##cy[##other] = y;
    splitswitch;
    ##ww = windowwidth; ##wh[0] = ##wh[1] + ##wh[2];
    if( ##n == 999 ){
        ##wh[##this] = ##wh[0] - 3; ##wh[##other] = 3;
    }else if( ##n == -999 ){
        ##wh[##other] = ##wh[0] - 3; ##wh[##this] = 3;
    }else if( ##n ){
        ##wh[##this] = ##wh[##this] + ##n;
        ##wh[##other] = ##wh[##other] - ##n;
        if( ##wh[##this] < 3 ){
            ##wh[##other] = ##wh[0] - 3; ##wh[##this] = 3;
        }else if( ##wh[##other] < 3 ){
            ##wh[##this] = ##wh[0] - 3; ##wh[##other] = 3;
        }
    }else{
        ##wh[##this] = (##wh[0] / 2) + (##wh[0] % 2);
        ##wh[##other] = ##wh[0] / 2;
    }
    if( ##wh[1] < ##wh[2] ){
        ##min = ##wh[1];
    }else{  
        ##min = ##wh[2];
    }
    ##min = 2 * ##min;
    split;
    setwindowsize ##ww, ##min;
    split;
    if( ##wh[##this] < ##wh[##other] && splitstate == ##this ) splitswitch;
    else if( ##wh[##other] < ##wh[##this] && splitstate == ##other ) splitsw
itch;
    setwindowsize ##ww, ##wh[0]; // <-★[1]
    // showwindow 3; // <-★[2]
    if( splitstate == ##this ){
        moveto ##cx[##this], ##cy[##this];
        splitswitch;
        moveto ##cx[##other], ##cy[##other];
        splitswitch;
    }else{
        moveto ##cx[##other], ##cy[##other];
        splitswitch;
        moveto ##cx[##this], ##cy[##this];
    }
return;
// ------------------------------
rotate:
    ##cx[0] = x; ##cy[0] = y;
    splitswitch;
    ##cx[1] = x; ##cy[1] = y;
    moveto ##cx[0], ##cy[0];
    splitswitch;
    moveto ##cx[1], ##cy[1];
return;
// ------------------------------

[ ]
RE:02612 vi 風の window操作マクロNo.02614
安久津 さん 01/11/13 21:42
 
vi クローン vim, jvim, gvim の window 操作キーを真似する。
 k_ctrl_w.mac

● 使い方。
  Ctrl + w に割り当ててください。以下 Ctrl + w は C-w と書く。

  C-w s  ウインドウを分割します。split
  C-w q  アクティブな分割ウインドウを閉じます。 quit
  C-w o  非アクティブな分割ウインドウを閉じます。( only の オー )

  C-w j または C-w k
      アクティブな分割ウインドウを切り替えます。
  C-w r  上下分割ウインドウを入れ替えます。rotate

  C-w e または C-w =
      上下の分割ウインドウの大きさを同じにします。equal
  C-w _ または C-w \
      アクティブな分割ウインドウを最大化します。
  C-w 0  アクティブな分割ウインドウを最小化します。( 0 はゼロ )

  C-w +  アクティブな分割ウインドウを 1 行分大きくします。
  C-w -  アクティブな分割ウインドウを 1 行分小さくします。

  C-w 3 + アクティブな分割ウインドウを 3 行分大きくします。
  C-w 3 - アクティブな分割ウインドウを 3 行分小さくします。
      この例の場合、有効な数字は 1 から 9 までです。

  C-w l  再描画します。( l はエル )
  C-w ESC 何もしないで終了します。

● 不具合と注意。
  (1) vim, jvim, gvim と同じ動作ではない。
  (2)上下ウインドウの表示具合は、不完全に維持。
    秀丸が勝手に調節します。ただし、カーソル位置は維持します。
  (3)最大化ウインドウで使うと、ちょっとだけ横幅が小さくなってしまう。
    気になる人は、マクロの星印 ★[1] の所を無効にして、
    ★[2] を有効にする。
  (4) k_ctrl_w.mac 実行時のウインドウの高さは 6行以上を想定している。

[ ]
RE:02614 vi 風の window操作マクロNo.02622
ひろ さん 01/11/14 17:51
 
 安久津さん今日は、ひろです。
> vi クローン vim, jvim, gvim の window 操作キーを真似する。
>  k_ctrl_w.mac
 この様な方法があったんですね。発想の転換は出来ませんでした。
 会議室の発言は、ある程度消えてしまうので、ライブラリに登録されては
如何でしょうか?
 また手元のファイルは変更しましたが、次のようになると便利ではないで
しょうか?
(1)タイトルに簡易メニュー
(2)[Esc] を押すまでは、マクロを終了しない
  つまり [+] を押し続けると、どんどんウィンドウサイズを増加させる

[ ]
RE:02622 vi 風の window操作マクロNo.02624
安久津 さん 01/11/15 03:06
 
こんにちは ひろさん、安久津です。

> 会議室の発言は、ある程度消えてしまうので、ライブラリに登録されては
>如何でしょうか?
登録はしません。

> また手元のファイルは変更しましたが、次のようになると便利ではないで
>しょうか?
>(1)タイトルに簡易メニュー
>(2)[Esc] を押すまでは、マクロを終了しない
>  つまり [+] を押し続けると、どんどんウィンドウサイズを増加させる
なるほど。
お手数でなければ、その変更したものをひろさんが登録してください。(^^;)

では。

[ ]