2013年1月21日月曜日

ポチエスの代替

僕はポチエスにファイル判別を任せている。それをPPxのみで行う方法。
Shift+Enterに割り当て。画像ファイルとテキストファイルのみメニューを表示する。
M_Picture = { ** comment **
&Azpainter = %Ob D:\bin\azpt\AzPainter2.exe %FCD
&MassiGra = %Ob D:\bin\MassiGra\MassiGra.exe %FCD
縮小専用(&S) = %Ob D:\bin\smahe\SmaHey.exe %FCD
}

M_Editor = { ** comment **
&Xyzzy = %Ob D:\bin\xyzzy\xyzzy.exe  %FCD
&OEdit = %Ob D:\bin\oedit\oedit.exe %FCD
Xyzzyで印刷(&P) = %Ob D:\bin\xyzzy\xyzzy.exe -p %FCD
}

E_pochiS = { ** comment **
.INI;.TXT;.HOWM;.CFG;.L;.XYZZY;.TEX ,%M_Editor,X
.PY;.PYW ,%Ob "D:\bin\xyzzy\xyzzy.exe" %FCD
HTML ,%Ob "C:\Program Files\Crescent Eve\Eve.exe" %FCD
.JPEG;.BMP;.PNG;.JPG ,%M_Picture,A
:JPEG,%M_Picture,A
:BMP,%M_Picture,A
GIF ,%Ob "D:\bin\MassiGra\MassiGra.exe" %FCD
.MP3;.OGG;.MPG;.WMA;.OMA;.FLAC;.WMV;.M3U ,%Ob "C:\\Program Files\\AIMP2\\AIMP2.exe" %FCD
KIF ,%Ob "D:\\bin\\KIFUW\\Kifuw.exe" %FCD
}

KC_main = { ; PPcメイン窓
\ENTER ,%ME_pochiS
}

2013年1月16日水曜日

外部アプリケーション、メニュー、スクリプト

ポチエス

外部アプリケーション。Shift+Enterに割り当て。ファイル判別をさせている。
KC_main = { ; PPcメイン窓
\ENTER ,%Ob D:\bin\esExt\esExt5.exe %FCD
}
esExt5.ini
;基本動作設定
;
[system]
@menu=active
@icon
@context=0
%end

;ここから関連付け設定
;
;
#[folder]
D:\bin\ppw\PPCW.EXE | PPx
>-r "%P"
%end

#[.txt][.ini][.bat][.rb][.cfg][.l][.xyzzy][.howm][.tex]
D:\bin\ttPage-R\ttPage.exe | &ttPage-R
D:\bin\xyzzy\xyzzy.exe | &Xyzzy
D:\bin\oedit\oedit.exe | &oedit
D:\bin\xyzzy\xyzzy.exe | Xyzzyで印刷
>-p "%P"
%end

#[.html]
C:\Program Files\Crescent Eve\Eve.exe | &Eve
%end

#[.py][.pyw]
D:\bin\xyzzy\xyzzy.exe | &Xyzzy
%end


[.mp3][.ogg][.mpg][.wma][.oma][.flac][.wmv][.m3u]
C:\Program Files\AIMP2\AIMP2.exe | AIMP2
%end

[.kif]
D:\bin\KIFUW\Kifuw.exe | KifuForWin
%end


[.PDF]
D:\bin\SumatraPDF\SumatraPDF.exe | スマトラPDF
%end

#[.gif]
D:\bin\MassiGra\MassiGra.exe | MassiGra
%end

#[.jpeg][.jpg][.bmp][.tif][.png]
D:\bin\azpt\AzPainter2.exe | AzPainter
D:\bin\MassiGra\MassiGra.exe | MassiGra
D:\bin\smahe\SmaHey.exe | 画像縮小
%end

;例外拡張子の設定
#[.*]
@system
%end


;ここで設定されている'#'マークを除くすべての拡張子に関連付け
;[all]
;@system | 実行
;%end

ClipPath


ファイルパスの取得に利用するメニュー。Shift+Nに割り当てている。
KC_main = { ; PPcメイン窓
\N ,%M_ClipPath,C
}

M_ClipPath = { ** comment **
CopyFileName = *cliptext %R
Copy&DirName = *cliptext %1
Copy&FileName(拡張子無し) = *cliptext %Y
CopyFilePath = *cliptext %FCD
ファイルの内容をクリップボードにコピー = %Ob D:\data\AHKScript\ClipFile.ahk %FCD
ファイルの内容をクリップボードに追加コピー = %Ob D:\data\AHKScript\ClipFileAdd.ahk %FCD
}
ClipFile.ahk
#NoTrayIcon

FileRead, hoge, %1%
clipboard = %hoge%
return

ClipFileAdd.ahk
#NoTrayIcon

FileRead, hoge, %1%
clipboard = %clipboard% `n %hoge%
return

MakeFile

ファイル作成のためのメニュー。 Shift+Kに割り当てている。
KC_main = { ; PPcメイン窓
\K ,%M_makefile,H
}

M_makefile = { ** comment **
howm = %Ob D:\bin\xyzzy\xyzzy.exe -e (howm-create2dir) %1
PlainFile = *set name=%1\%"PlainFile"%E %: *makefile "%'name'" %: editor "%'name'" %: *jumppath "%'name'" /entry
-- = 
txt = *set name=%1\%"テキストファイル"%{%|.txt%} %: *makefile "%'name'" %: editor "%'name'" %: *jumppath "%'name'" /entry
VBS = *set name=%1\%"VBScript"%{%|.vbs%} %: *makefile "%'name'" %: editor "%'name'" %: *jumppath "%'name'" /entry
JS = *set name=%1\%"JScript"%{%|.js%} %: *makefile "%'name'" %: editor "%'name'" %: *jumppath "%'name'" /entry
py = *set name=%1\%"JScript"%{%|.py%} %: *makefile "%'name'" %: editor "%'name'" %: *jumppath "%'name'" /entry
-- = 
ディレクトリ(&D) = *makedir %1\%E
}
howm-create2dir.l
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;本体
(defvar *temp-howm-dir* nil)

(defun make-howm-create2dir-file (howm-dir)
  (let* ((filename (format-date-string "%Y-%m-%d-%H%M%S.howm"))
   (filepath (merge-pathnames filename howm-dir))
   (directory (directory-namestring filepath)))
 (if (not (file-directory-p directory))
  (create-directory directory))
 (find-file filepath)
 (if (eq (point-max) (point-min))
  (progn
    (insert (format-date-string "= \n\n[%Y-%m-%d %H:%M]\n"))
    (goto-char (+ (point-min) 2))))
 ))
(defun howm-create2dir ()
  (interactive)
  (if si:*command-line-args* (setq *howmdir* (pop si:*command-line-args*)))
  (make-howm-create2dir-file *temp-howm-dir*)
  (howm-create2dir-mode))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;キーバインド
(defun hateda-heading1 ()
  (interactive "*")
  (save-excursion
  (goto-bol)
  (insert "*")
  (fix-selection-point)))

(defun hateda-heading2 ()
  (interactive "*")
  (save-excursion
  (goto-bol)
  (insert "**")
  (fix-selection-point)))

(defun hateda-num-list ()
  (interactive "*")
  (save-excursion
  (goto-bol)
  (insert "+")
  (fix-selection-point)))

(defun hateda-list ()
  (interactive "*")
  (save-excursion
  (goto-bol)
  (insert "-")
  (fix-selection-point)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;モードの設定
(defun howm-create2dir-mode ()
  (interactive)
  (kill-all-local-variables)
  (setq buffer-mode 'howm-create2dir-mode)
  (setq mode-name "howm Create2dir")
  (make-local-variable 'regexp-keyword-list)
  (setq hateda-regexp-keyword-list
        (compile-regexp-keyword-list
  `(
      ("^[=].*" t (:color 7 13 :line :bold ))
    ("^[*][*][^*].*" t (:color 10 15 :line ))
    ("^[*][*][*][^*].*" t (:color 9 12 :line ))
    )))
  (setq regexp-keyword-list hateda-regexp-keyword-list)
  (use-keymap *howm-create2dir-mode-map*))


(defvar *howm-create2dir-mode-map* nil)
  (unless *howm-create2dir-mode-map*
    (setq *howm-create2dir-mode-map* (make-sparse-keymap))
    (define-key *howm-create2dir-mode-map* '#\C-] 'hateda-heading1)
    (define-key *howm-create2dir-mode-map* '#\C-: 'hateda-heading2)
    (define-key *howm-create2dir-mode-map* '#\C-+ 'hateda-num-list)
    (define-key *howm-create2dir-mode-map* '#\C-- 'hateda-list)
    (define-key *howm-create2dir-mode-map* '(#\C-c #\, #\c) 'howm-create2dir))

マスク

*でカーソル上拡張子マスクのトグル
Shift+*でマスクメニュー
KC_main = { ; PPcメイン窓
'*' ,%M_Mask
':' ,*RotateExecute id,*maskentry *.%T,*maskentry
}
M_Mask = { ** comment **
ディレクトリマスク = *maskentry attribute:d
EXEでマスク = *maskentry *.exe
テキストマスク = *maskentry *.txt,*.howm,*.ini
画像マスク = *maskentry *.jpg,*.jpeg,*.png,*.gif,*.bmp
マスク解除 = *maskentry
}

BackSpace.js

リストファイル内にいれば一つ前へ。そうでなければ親フォルダへ移動するスクリプト。バックスペースに割り当てている。
KC_main = { ; PPcメイン窓
BS ,*script %0\Script\BackSpace.js
}
BackSpace.js
//!*script
type = PPx.DirectoryType
if (type == 4){
 PPx.Execute("%k\"@^LEFT\"")
}else{
PPx.Execute("%K\"@BS\"")
};

2013年1月15日火曜日

PPvの設定

Enter用判別


PPcと同IDのPPvを起動するための設定
E_cr = { ; [Enter]用判別
KIF ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
SCM ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
GIF ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
TXT ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
JPEG ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
:JPEG ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
BMP ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
:BMP ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
INI ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
VBS ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
:XVBS ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
JS ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
:XJS ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
PY ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
:XPLS ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
PNG ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
JPG ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
PY ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
HOWM ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
CFG ,%0\PPVW.EXE -bootid:%*regexp(%n,"/.(.)/$1/")  %FCD
}

キー設定


  • カーソルキー で同IDのPPcと連動
  • エディタで直接編集
  • Tで透過度合い変更
  • Ctrl+Tで最前面トグル
  • Zで最大化のトグル
  • Ctrl+DでDialogHandler
KV_main = { ; PPvメイン窓
LEFT ,*execute C%*regexp(%n,"/.(.)/$1/"),*cursor 6, -1 %: %KC%*regexp(%n,"/.(.)/$1/")"@N"
RIGHT ,*execute C%*regexp(%n,"/.(.)/$1/"),*cursor 6, 1 %: %KC%*regexp(%n,"/.(.)/$1/")"@N"
UP ,%KC%*regexp(%n,"/.(.)/$1/") "@UP @N"
DOWN ,%KC%*regexp(%n,"/.(.)/$1/") "@DOWN @N"
SPACE ,%KC"@SPACE@N"
\SPACE ,%KC"@\SPACE@N"
E ,%"Text edit"%Orib,editor %FDC
T ,*RotateExecute id,*customize X_bg:O_%n=100,*customize X_bg:O_%n=85,*customize X_bg:O_%n=65
^V_H54 ,*topmostwindow %N
Z ,*togglewinsize
ENTER ,*script %0\Script\PPvEnter.js
^V_H44 ,*script %0\Script\DialogHandler.js
}

PPvEnter.js
//!*script

id = PPx.Extract("%n").slice( 1 ) //現在窓のIDを取得
filepath = PPx.Extract("%*extract(C" + id +"%%FCD)").replace(/\"/g, "") //PPcが選択しているパスを取得

  //パスがフォルダの場合、PPcでEnter。
  //そうでなければ現在窓を閉じる
if ( PPx.GetFileInformation(filepath) == ":DIR" ){PPx.Execute("%KC" + id +"\"@ENTER\"")
}else{PPx.Execute("%K\"@Q\"")
}
DialogHandler.js
//!*script

var command = '%Ob D:\\bin\\DialogHandler\\DialogHandler.x86-32.exe %FCD';
PPx.Execute(command);
PPx.Execute("%K\"@Q\"")

マウス

  • 左ダブルクリックで一つ下へ
  • 中ホイールクリックで一つ前へ
MV_click = { ; PPv メイン窓
LD_SPC ,%KC"@DOWN@N"
M_SPC ,%KC"@UP@N"
}

単語ハイライト

CV_hkey = { 
C = H008000,void
 H008000,#include
 H008000,#if
 H008000,#endif
 H008000,#define
 H008000,#pragma
 H008000,//
 H008000,/*
 H008000,*/
 
H = _DGRE,void
 _DGRE,#include
 _DGRE,#if
 _DGRE,#endif
 _DGRE,#define
 _DGRE,#pragma
 _DGRE,//
 _DGRE,/*
 _DGRE,*/
HOWM = >HFFFF00,=
 HFF8000,*
 
HTML = _CYA,Subject:
 _CYA,From:
 _CYA,To:
 _CYA,Received:
SCM = >H008000,;
 HFF9933,define
 HFF8000,if
 
}

メニュー

MV_menu = { ; PPv メニューバー
← = %KC"@UP@N"
→ = %KC"@DOWN@N"
DH = *script %0\Script\DialogHandler.js
透過 = *RotateExecute id,*customize X_bg:O_%n=100,*customize X_bg:O_%n=85,*customize X_bg:O_%n=65
hide = %K"@'^'"
&Close = %K"@Q"
}

その他

XV_cols = { ; 表示桁数=該当拡張子、全てに一致しなければ80、0:桁数最大 -1:窓幅に合わせる
-1 = .txt,.howm,.ini
0 = .scm,.py
}
XV_imgD = { ; 拡大縮小設定([=],*zoom,*reducemode) PPvID = 倍率、縮小方法
;倍率: -1:窓枠に合わせる -2:窓より小→等倍、大→縮小 0:100% 1-10000:%倍率
;縮小方法: 1:白地に黒文字 2:黒地に白文字 3:カラー高速 4:混合
VA = -2,4
}

Paper Plane xUIの基本設定


何回かに分けてPPxのカスタマイズを晒していきます。今日は基本的な設定。

準備



TORO's Libraryから
  • Paper Plane xUI Window Module
  • Paper Plane xUI Text Module
  • Paper Plane xUI Script Module
を落とし、それぞれに入っているDLLをPPxフォルダに保存します。
また以下のものも用意します。

  • migemo関連
  • gdiplus.dll
  • Bregexp.dll


拡張子色


C_ext = {
EXE = _DGRE
LZH = _CYA
BAT = _DBRO
COM = _DBRO
CMD = _DBRO
ZIP = _CYA
ZOO = _DCYA
ARJ = _DCYA
CAB = _CYA
ISH = _DCYA
RAR = _CYA
JPG = _MAG
GIF = _MAG
BMP = _MAG
C = HFF8000
JPE = _MAG
JPEG = _MAG
INI = _SBLU
AHK = H6A240A
BAK = _DRED
PY = HFF8000
DLL = H0080FF
TGZ = _CYA
PNG = _MAG
JTD = H4080FF
HLP = _WHI
CPP = HFF8000
H = HFF8000
HPP = _WHI
MAK = _WHI
RC = _WHI
RH = _WHI
TXT = _BRO
* = _AUTO
CFG = _SBLU
DOC = H4080FF
HOWM = _BRO
}

キー設定


PPcのキーバインドです。メニューやスクリプト、外部アプリケーションを使うのは別にしてます。それらについては後日書く予定
KC_main = { ; PPcメイン窓
U ,*makedir "%2%\%X" %: *unpack %2%\%X
'\' = @Q
B ,%"Binary Convert" %M_bin
E ,%"Text edit"%Orib,editor %FDC
P ,%"Pack File" %M_xpack,!"zip(zip32j)"
\P ,%"Pack File Ex" %M_xpack
L = @\L
F = @\J
^ENTER = @Z
\F ,*sortentry 17, 0, 1,B11000,
\T ,*sortentry 11, 0,-1,B11000,
'.' ,*RotateExecute id,*viewstyle 一覧&1,*viewstyle image1,*viewstyle image2,*viewstyle image3
}

ファイル判別


Enter用判別です。
E_cr = { ; [Enter]用判別
BAT ,%M_Ccr,!X
EXE ,%M_Ccr,!X
. ,%M_Ccr,!N
DOC ,%M_Ccr,!N
:DIR = C_DIR
:LHA = C_DIR
7Z = C_DIR
CAB = C_DIR
RAR = C_DIR
}

表示形式の追加

MC_celS = { ; エントリ表示 書式([;]メニュー)
image1 = n20,8 s1
image2 = n30,12 s1
image3 = n40,20 s1
}

その他



X_dlf = B1000100,B0 ; ドライブリスト(:),ドライブメニュー(PPc \[L])で 
XC_mvUD = 0,1,4,B0000,5,B010 ; [↑][↓] 
XC_mvLR = 4,1,4,B0000,6,B001 ; [←][→] 
XC_isea = 0,1,3,1 ; インクリメンタルサーチ動作 方法,位置,対象,ハイライト 
XC_celD = _AUTO,_AUTO,1,7 ; エントリ表示 文字,背景,カーソル,マーク 
X_vzs = 0 ; 選択する範囲を選択方向に応じて変更 0:しない 1:する 
XV_drag = 2,1,3 ; ドラッグ開始ボタン スクロール,選択,窓移動
X_jinfo = 0,0,0,0 ; ダイアログ表示時・処理終了時通知
; 表示点滅,表示cmd,終了点滅,終了cmd (0:無 1:裏の時 2:常時)
X_flst = 0 ; エントリ補完結果一覧 0:無 1:有 2:OS版 3~5:動的
XC_acsr = 1,1 ; 各コマンド終了後のカーソル位置処理
; [.]等の再読込,[S/\S]の順
; 0:以前の画面と同じ位置,1:以前のエントリ内容と同じ位置
XC_alst = 3,0,3,3,4 ; 各コマンド終了後の一覧処理
; [A],[C/M],[D/\D],[R],アクティブ化時の順
; 0:更新,1:更新(非表示),2:更新(マークがないときは再読込),
; 3:更新(非表示,マークがないときは再読込),4:再読込,-1:何もしない
X_inag = 0 ; 現在窓以外はグレー調に 0:しない 1:する
;migemoを使う
XC_isea = 2,1,3,1 ; インクリメンタルサーチ動作 方法,位置,対象,ハイライト
;エントリ状態の選択色を青色、ハイライト表示を緑色に
C_eInfo = _AUTO,_DRED,_AUTO,_DBLA,_DBLU,_DCYA,_DBLA,_BRO,_GRE,_WHI,_AUTO,H804000,_AUTO,H404000,_BRO,_CYA,_GRE 
XC_swin = { ; 窓の連結、設定,状態保存値の順 *layout
A = B000000000,0
}
X_beep = B00000000 ; Beepを発声する B00000000:全く出さない
   ;B10101111:重要なものだけ B11111111:全て
X_evoc = 0 ; 表示喚起 0:なし 1:タイトルバー点滅


2013年1月11日金曜日

OEditでhowm

OEditでhowmファイルを作成する方法です。

準備


OEditのscmlibフォルダにoedit.scmを作ります。xyzzyにおける.xyzzyみたいなものらしい。
次に、OEditの(ぷち)資料室 - Schemeサンプルソースからxlib-base.scmとxlib-event.scmをダウンロードし、scmlibフォルダに保存します。


oedit.scm


先ほど作成したoedit.scmに以下をコピペ

(use xlib-base)  ;◆汎用基礎関数ライブラリ
(use xlib-event) ;◆拡張ハンドラ操作ライブラリ


;▼コマンドライン引数(文字列)をバラして、文字列リストにして返す関数▼
(define (apx-get-command-line-args) (get-args (app-get-command-line-option)))
(define (get-args s)
  (define (skip-space) ;◆半角空白をスキップ。(その次位置へ)
    (define c (peek-char ip))
    (if (eqv? c #\space) (begin (read-char ip) (skip-space)))
  )
  (define (get-inner-quote os) ;◆"~"内の文字列を取得。(その次位置へ)
    (define c (read-char ip))
    (if (or (eof-object? c) (eqv? c #\"))
      os
      (get-inner-quote (string-append os (string c)))
    )
  )
  (define (get-word os) ;◆単語を取得。(その次位置へ)
    (define c (peek-char ip))
    (cond
      ((or (eof-object? c) (eqv? c #\space)) os)
      ((eqv? c #\") (begin (read-char ip) (string-append os (get-inner-quote ""))))
      (else (get-word (string-append os (string (read-char ip)))))
    )
  )
  (define ip (open-input-string s))
  (let loop ( (ol '()) )
    (define c (read-char ip))
    (cond
      ((eof-object? c)  (close-input-port ip) (reverse ol))
      ((eqv? c #\space) (skip-space) (loop ol))
      ((eqv? c #\") (loop (cons (get-inner-quote "")  ol)))
      (else         (loop (cons (get-word (string c)) ol)))
    )
  )
)

;▼自作起動オプション処理用ハンドラ▼
(define handle-my-option (lambda ()
  (define (option-launcher ops)
    (cond
      ((equal? ops "/howm") (define s (sys-strftime "\= \n\n\n[%Y-%m-%d %H:%M]" (sys-localtime (sys-time))))(editor-paste-string s)(editor-set-row-col 0 2))
      ((rxmatch #/^\/xa(\d+)-(\d+)-(\d+)-(\d+)$/ ops) => (lambda (m)
        (editor-set-select-area
          (- (string->number (rxmatch-substring m 1)) 1)
          (- (string->number (rxmatch-substring m 2)) 1)
          (- (string->number (rxmatch-substring m 3)) 1)
          (- (string->number (rxmatch-substring m 4)) 1)
        )))
      ((rxmatch #/^\/xc(\d+)-(\d+)$/ ops) => (lambda (m)
        (editor-set-row-col
          (- (string->number (rxmatch-substring m 1)) 1)
          (- (string->number (rxmatch-substring m 2)) 1)
        )))
    )
  )
  (for-each option-launcher (apx-get-command-line-args))
))

;▼on-open-fileイベントハンドラとしてセット▼
(app-add-event-handler "on-open-file-first" handle-my-option)


;▼ howm追加▼
(app-set-key "Ctrl+3" (lambda() (howm-add)))
(define (howm-add)
  (begin
  (define howm-editor-path (string-append (app-get-tool-dir) "oedit.exe"))
  (define fn (editor-get-filename)) ;◆現在編集中のテキストのファイルパス
  (if (and fn (string>? fn "")) ;◆カレントファイルのあるディレクトリにファイルを作成。無題ならば起動ディレクトリに作成する
   (define howm-path 
    (string-append (regexp-replace #/^(.*\\).*$/ fn "$1") (sys-strftime "%Y-%m-%d-%H%M%S" (sys-localtime (sys-time))) ".howm /howm"))
   (define howm-path (string-append (sys-strftime "%Y-%m-%d-%H%M%S" (sys-localtime (sys-time))) ".howm /howm")))
  (win-exec howm-editor-path howm-path )))


howm追加より上が、howmの起動オプションを追加するためのもの。起動オプションに/howmがあれば、howmの書式をコピペするようにしてます。ほぼOEditの(ぷち)資料室 - メモ|OEdit関連の自作起動オプションのコピペです。
howm追加のところは僕が書いたもの。Ctrl+3を押せば、新規にhowmファイルを作成します。(app-set-key "Ctrl+3" (lambda() (howm-add)))の"Ctrl+3"の箇所を書き換えることで、別のキーに割り当てることができます。

PPxの設定


次に、PPxから新規作成でhowmファイルを作れるようにします。
まず、TORO's Libraryに行ってPaper Plane xUI Text Moduleをダウンロード。その中にあるPPXTEXT.DLLをPPxフォルダに置きます。
あとは、以下のようなコマンドをキーかメニューかに登録すればおk。

%Ob D:\bin\oedit\oedit.exe %*nowdatetime(Y-N-D-HMS).howm /howm

参考にしたサイト


あとはDocフォルダ内のmacro_ref.txtを読みましょう

2013年1月9日水曜日

PPvのEnter用スクリプト

僕は、以前


で書いたように、PPvとPPcをID対応で連動させている。
PPv[A]でカーソルを上下左右させればPPc[A]のカーソルが上下左右し、それにあわせてPPv[A]の表示も変わるというように。テキストファイルや画像を閲覧するのにはそのほうが便利だからだ。それを踏まえてのお話です。

PPvからの操作で、さらにフォルダ移動もできるようになればより楽になるんじゃないかと思いついた。今までは別フォルダに行くために、いちいちPPvを閉じ、PPcでフォルダ移動をしてからまたPPvを開くということをしてたけど、この手間を省略したい。カーソル移動と同様、フォルダに潜ったりするのもPPv上でしたいのだ。

そこで次のスクリプトを用いる。同IDのPPcで選択しているパスを取得、それがフォルダであればPPcで階層移動。そうでなければPPvを閉じるというもの。

PPvEnter.js

//!*script

id = PPx.Extract("%n").slice( 1 ) //現在窓のIDを取得
filepath = PPx.Extract("%*extract(C" + id +"%%FCD)").replace(/\"/g, "") //PPcが選択しているパスを取得

  //パスがフォルダの場合、PPcでEnter。
  //そうでなければ現在窓を閉じる
if ( PPx.GetFileInformation(filepath) == ":DIR" ){PPx.Execute("%KC" + id +"\"@ENTER\"")
}else{PPx.Execute("%K\"@Q\"")
}
これをPPvのEnterに登録する。

KV_main = {
ENTER ,*script %0\Script\PPvEnter.js
}

フォルダに潜りたい時は、フォルダにカーソルをあわせてEnter。親フォルダに行きたい時とかルートフォルダに行きたい時とかは「..」や「.」にあわせてEnterです。


こんなふうにPPcとPPvを少しずらし、ファイル名が見えるようにして使ってます。