|
// 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;
// ------------------------------
|
|