[ 新規に投稿する ]

prevhidemaru の挙動について問い合わせですNo.08570
小野雅弘 さん 17/09/26 18:36 [ コメントを投稿する ]
  数年前のバージョンの秀丸エディタで、prevhidemaru;とだけ記した
マクロを左ダブルクリックに割り当てていました。
実行すると、複数の文書を重ねて表示した時は次の文書に入れ替わり、
左右に2つのエディタを並べた時は左右が入れ替わるという風に動作し、
大変便利に使っていました。

会社のパソコンが更新され、インストールされた秀丸8.64
では、重ねた時には次の文書に入れ替わりますが、左右に並べた時は
カーソルが別の文書に移動するだけ、という動作に変わってしまいました。

同様の効果を得るための設定方法やバージョンダウン、コマンド、マクロ
などがありましたら教えて頂けませんでしょうか。無理なようでしたら、
左右が入れ替わる効果だけでも結構です。よろしくお願いします。



[ ]
RE:08570 prevhidemaru の挙動について問い合わせですNo.08571
秀丸担当 さん 17/09/27 08:37 [ コメントを投稿する ]
 
prevhidemaruは、以前も現在もアクティブウィンドウを切り替えるだけの文にな
っています。
左右を入れ替えるという動作は、画面の右半分と左半分に秀丸エディタが並んで
いて、右にあったウィンドウが左に移動、左にあったウィンドウが右に移動、と
いうことかと思います。
そういう動作だとしたら、おそらくprevhidemaruだけではない、ウィンドウ配置
を調整するようなマクロを使われていたのだと思います。

例えば、現在の秀丸エディタを右に、前の秀丸エディタを左に配置し、前の秀丸
エディタをアクティブにするとしたら、以下のようなマクロになります。

setwindowpos xworkarea+cxworkarea/2,yworkarea,cxworkarea/2,cyworkarea;
prevhidemaru;
setwindowpos xworkarea,yworkarea,cxworkarea/2,cyworkarea;
endmacro;

重なっているときは切り替わるだけ、というのは、重なっているか左右に並んで
いるかを何をもってして判断するかによりますが、もし最大化しているときとい
う条件で、最大化したままで切り替える場合は、以下のようなマクロにするとい
いと思います。

if(windowstate==3){
  prevhidemaru;
  showwindow 3;
} else {
  setwindowpos xworkarea+cxworkarea/2,yworkarea,cxworkarea/2,cyworkarea;
  prevhidemaru;
  showwindow 1;
  setwindowpos xworkarea,yworkarea,cxworkarea/2,cyworkarea;
}
endmacro;
[ ]
RE:08571 ご回答ありがとうございます No.08572
小野雅弘 さん 17/09/27 15:15 [ コメントを投稿する ]
  ご回答ありがとうございます。
画面左半分の資料を参照しながら右半分で
文書を作成するという作業をしていますが、
やはり右半分の秀丸で頂いた前段のマクロ

setwindowpos xworkarea+cxworkarea/2,yworkarea,cxworkarea/2,cyworkarea;
prevhidemaru;
setwindowpos xworkarea,yworkarea,cxworkarea/2,cyworkarea;
endmacro;

を実行しても、左半分の秀丸にカーソルが移るだけでした。
これは秀丸でなく、エクスプローラーの問題なのかもしれません。
何か方法を考えてみます。どうもありがとうございました。


[ ]
RE:08572 左側では動きました No.08573
小野雅弘 さん 17/09/27 15:23 [ コメントを投稿する ]
  左側で実行すると動きました。ひょっとすると
prevhidemaruだけでも同じように動くのでしょうか。
試してみます。

[ ]
RE:08573 左側では動きました No.08574
秀丸担当 さん 17/09/27 18:07 [ コメントを投稿する ]
 
前のマクロは左側がアクティブとなることを前提としていました。
すみません。
右側にあるときは右側のまま入れ替えにするとしたら、以下のようなマクロにす
るといいと思います。

if(windowstate==3){
  prevhidemaru;
  showwindow 3;
} else if( (windowposx+windowcx/2) < (xworkarea+cxworkarea/2) ) {
  setwindowpos xworkarea+cxworkarea/2,yworkarea,cxworkarea/2,cyworkarea;
  prevhidemaru;
  showwindow 1;
  setwindowpos xworkarea,yworkarea,cxworkarea/2,cyworkarea;
} else {
  setwindowpos xworkarea,yworkarea,cxworkarea/2,cyworkarea;
  prevhidemaru;
  showwindow 1;
  setwindowpos xworkarea+cxworkarea/2,yworkarea,cxworkarea/2,cyworkarea;
}
endmacro;
[ ]

[ 新規に投稿する ]