2020年5月19日火曜日

PPb+pecoで英和辞書

英和辞典を一行編集で引く方法を以前紹介したが、連続的に辞書を引く必要があるとき、一行編集をその度に表示しないといけないのが煩わしいなと思っていた。
なので別の方法を考案。

chcp 65001 %: type %0ejdic-hand-utf8.txt | %0peco.exe

これでPPbを辞書代わりにできる。


辞書ファイルは以下。

2020年5月5日火曜日

PPx+pecoで柔軟にフォルダ階層移動


pecoで柔軟に階層移動できるようにする。以前は一階層しか移動できなかったが、今回は複数階層の移動が可能。
Script Module以外にText Moduleが必要。Releases · peco/peco · GitHubからWindows版のバイナリ(peco_windows_amd64.zip)をダウンロードし、peco.exeをPPxフォルダに置いておく。



以下を編集して取込。

_Command = {
folder2peco = chcp 65001
 %Oi (echo ---thispath & echo .. & dir /a:d-s /b)  | %0peco.exe | %0ppbw.exe -c *alias selectedpath=%%*stdin(-utf8)
 *return %'selectedpath'
root2peco = chcp 65001
 %Oi (echo ---thispath & dir /a:d-s /b)  | %0peco.exe | %0ppbw.exe -c *alias selectedpath=%%*stdin(-utf8)
 *return %'selectedpath'
move2folder = *ifmatch 0,0%*substring("%1",3) %: *string o,hoge=%*root2peco()
 *ifmatch !0,0%*substring("%1",3) %: *string o,hoge=%*folder2peco()
 *ifmatch ---thispath,%so"hoge" %: *return
 *jumppath %*name(DC,%so"hoge") %: *execute,*%*arg(0)
}

PPcで

*move2folder %: *focus "PPB[" %: %k"ESC"

を実行する。

ポイントとか


  • 試行錯誤してる間、二度くらいカスタマイザーが起動しなくなって再インスコすることになった(再現性はよくわからない)。試す方は注意を
  • move2folderが本体
  • folder2pecoとroot2pecoは、カレントフォルダのサブフォルダ一覧をpecoに投げ、結果を返すユーザコマンド。2つの違いは「..」を表示するか否か
  • chcp 65001 で文字コードをUTF-8に
  • ユーザコマンドは*test以外に%*test()の形でも使える
  • linuxだと標準出力は簡単に取り出せるようだが、Windowsだと難しい(多分)。そこで、「エイリアスに格納して、returnで返す」という手続きを踏んでいる。_User:nameではなくエイリアスを使ってるのは、_User:nameだと処理速度が落ちるから(おま環かも)
  • ユーザコマンド中の*%arg(0)で再帰呼び出しができる。以下はもっと単純な例


_Command = {
test = *ifmatch 0,0%"何も入力しないでくだしあ><"%E %: *return
 *execute,*%*arg(0)
}


2020年5月3日日曜日

ウィンドウの位置とサイズを引数で変更

xyzzyの位置がずれたとき、いちいちマウスでつまんだりドラッグしたりして直すのが面倒なので、コマンドで戻せるようにする。

;; ウィンドウの位置とサイズを引数で変更
;; 「X座標 Y座標 ウィンドウ幅 ウインドウの高さ」の4つの引数を取る
;; > xyzzy の音 - バッファ/ウィンドウ/フレーム
;; > http://hie.s64.xrea.com/xyzzy/note/buffer.html#xyzzy-resize
;; を参考にした

(require "wip/winapi")
(unless (fboundp 'SetWindowPos)
  (c:*define-dll-entry winapi:BOOL SetWindowPos
    (winapi:HWND winapi:HWND winapi:INT winapi:INT winapi:INT winapi:INT winapi:UINT)
    "user32"))
;サイズを変更
(defun xyzzy-resize ()
  (interactive)
  (if si:*command-line-args* (setq x (pop si:*command-line-args*))(setq x "1280"))
  (if si:*command-line-args* (setq y (pop si:*command-line-args*))(setq y "43"))
  (if si:*command-line-args* (setq w (pop si:*command-line-args*))(setq w "608"))
  (if si:*command-line-args* (setq h (pop si:*command-line-args*))(setq h "1023"))
  ;位置/サイズを指定
  (SetWindowPos (get-window-handle) 0
  (parse-integer x)  ;X座標
  (parse-integer y) ;Y座標
  (parse-integer w) ;ウィンドウ幅
  (parse-integer h) ;ウィンドウ高さ
  0))


xyzzy -e (xyzzy-resize) 1280 43 608 1023

のように「X座標 Y座標 幅 高さ」の数値を与えて外部から変更する。

参考