TOP

■Schemeサンプルソース■

自作マクロを、大体そのまま置いときます。
OEdit6当時に作成したものですが、OEdit7で仕様が変わって、かなり動かなくなりました。
不動作を確認できたものは外して、移植できたものは直して再掲載といった感じです。
動作検証が不完全なので、エラーが出て動かないものもあるかもしれません。(ご容赦)
あと、OEdit6版掲載当時よりバージョンが上がってしまい、以前との互換性が微妙なものも含まれます。
 ・『◆編集モード用の設定ファイル◆』名で分類したものは、配色定義用のファイルです。
  『data』フォルダ直下に配置して利用。
  『data\languages.txt』にも若干書き足す必要があります。
 ・『◆ファイルから実行用◆』名で分類したものは、
  任意のフォルダに配置して、『ツール→マクロを実行(ファイル)』から利用。
  ちなみに、ファイル名中の■/□は、それぞれ、『通常/矩形選択両対応』『通常選択のみ対応』を表す。
 ・それ以外は、
  ファイルサーチパスの通ったフォルダ(『scmlib』とか)直下に配置して、
  『scmlib\oedit.scm』ファイル中からロードする事で利用可能。
 ・ソースは、タブストップ4、画面横巾105桁、行番号非表示の環境で書かれています。

ソースの一括ダウンロード → sample-macro.zip (MD5値:ED01031A0DB2E3E8BE5DABBAA39DEEE9)

◆見本◆

oedit.scm
ソース → oedit.scm

・oedit.scmの見本です。

◆ライブラリ(汎用関数)◆

xlib-base.scm
ソース → xlib-base.scm
依存関係:なし。

・汎用関数を40種程、収録してます。
・自作マクロの殆どが、ここの汎用関数を利用してます。
・前回掲載分より少し収録数が増えました。(ソート関数とか)
xlib-debug.scm
ソース → xlib-debug.scm
依存関係:なし。

・デバッグ用の関数を収録しています。
・(簡易)書式化表示関数は、デバッグ以外にも使えるかもしれません。(自分は、結構気に入ってます)
xlib-event.scm
ソース → xlib-event.scm
依存関係:『xlib-base.scm』に依存。

・拡張ハンドラ操作ライブラリを収録しています。
・仕組みは、↓な感じ。(あくまでイメージ。実際とは異なる)
 @ライブラリロード時に↓な枠組みを構築してしまう。
(define hl-oo '()) ;◆on-open-file用ハンドラリスト
(define hl-oc '()) ;◆on-close-file用ハンドラリスト
(define hl-os '()) ;◆on-selection-changed用ハンドラリスト
(define hl-om '()) ;◆on-cursor-moved用ハンドラリスト
(define (call x) (x))
(app-set-event-handler "on-open-file"         (lambda () (for-each call hl-oo)))
(app-set-event-handler "on-close-file"        (lambda () (for-each call hl-oc)))
(app-set-event-handler "on-selection-changed" (lambda () (for-each call hl-os)))
(app-set-event-handler "on-cursor-moved"      (lambda () (for-each call hl-os)))
 A後は、↓新関数を使って各々ハンドラリストにハンドラを随時追加して行く。
app-add-event-handler関数  …ハンドラリストにハンドラを追加。
app-clr-event-handler関数  …ハンドラリストをクリア。(イベント単位)
app-clr-all-event-handler関数…ハンドラリストをクリア。(全イベント分)

・app-add-event-handlerは、app-set-event-handlerと同じ使い方です。(完全に置き換え可能です)
 →setの代わりにaddを用いるメリットは、『1つのイベントに対して複数のハンドラを設定できる』事です。
 →通常、複数ハンドラを設定するには、↓A手法によりハンドラを再ラッピングする必要がありますが、
  app-add-event-handlerではそれを必要としません。
 →保守性向上の観点から、各々ハンドラが別ファイルに位置している局面とかで、有益かと思います。
 →ただ、ハンドラ設定について、仕組み上setはaddを、addはsetを上書きしますので、
  app-add-event-handlerとapp-set-event-handlerの共存は原則不可能です。(一方に統一して下さい)
  (承知の上で、見切って使う分には問題ないです)
;■1つのイベントに複数ハンドラを設定する例■
;▼手法@(失敗)|app-set-event-handler関数による複数ハンドラ設定▼
(define handler1 (lambda () (display "おはよう。\n")))
(define handler2 (lambda () (display "おやすみ。\n")))
(app-set-event-handler "on-open-file" handler1)
(app-set-event-handler "on-open-file" handler2) ;◆こっちしか効いてない。

;▼手法A(成功)|app-set-event-handler関数による複数ハンドラ設定▼
(define handler1 (lambda () (display "おはよう。\n")))
(define handler2 (lambda () (display "おやすみ。\n")))
(app-set-event-handler "on-open-file" (lambda () (handler1) (handler2))) ;◆両方効く。

;▼手法B(成功)|app-add-event-handler関数による複数ハンドラ設定▼
(define handler1 (lambda () (display "おはよう。\n")))
(define handler2 (lambda () (display "おやすみ。\n")))
(app-add-event-handler "on-open-file" handler1) ;◆両方効く。
(app-add-event-handler "on-open-file" handler2) ;◆両方効く。
・他2つの新関数は、多分使う機会がないと思うので、説明は省略します。
・それと、特記事項として、本ライブラリからは↓2つの擬似イベントが使用可能です。
・on-open-file-first…on-open-fileの『最初の1度切り捕捉する』版です。
           『Schemeで自作起動オプション処理に挑戦』で述べた問題点Cを解決するものです。
・on-close-file-easy…on-close-fileの『空ファイルを閉じる際には捕捉しない』版です。
           (『OEditの起動シーケンス』参照)
●OEdit7系では、on-cursor-movedイベントが追加となりましたが、上記@にて枠組みを作る際に、
 on-selection-changedとon-cursor-movedの両ハンドラが共存衝突してしまう事が判明しました。(汗)
 →具体的には『xdef-handler-mov.scm』に収録のハンドラが、上手く動作しないです。
●という訳で、当ライブラリからは、↓2つのイベントを指定不可に修正しました。(回避策)
 on-selection-changed
 on-cursor-moved
xlib-edx.scm
ソース → xlib-edx.scm
依存関係:『xlib-base.scm』に依存。

・edx-系関数を収録。(editor-系関数に対する追加ライブラリ的もの)
・主に、テキスト置換系と現在編集中のファイルパス取得系を収録。
xlib-edx-rc.scm
ソース → xlib-edx-rc.scm
依存関係:『xlib-base.scm』に依存。

・OEdit6系→7系にて、Scheme標準の桁位置関連関数の仕様が↓の如く変更になりました。
 OEdit6系…『行-桁』座標系。       ◆『半角を1桁、全角を2桁と換算』する座標系。
 OEdit7系…『行-文字インデックス』座標系。◆『半角/全角の区別なく1文字を1桁と換算』する座標系。
・当ライブラリは、仕様変更となった↓5種の桁位置関連Scheme関数について、
 editor-get-cur-col
 editor-set-row-col
 editor-get-row-col-char
 editor-get-selected-area
 editor-set-select-area
 後方互換の為に、↓5種の代替関数を提供します。(OEdit6系の挙動を擬似的に再現)
 edx-get-cur-col
 edx-set-row-col
 edx-get-row-col-char
 edx-get-selected-area
 edx-set-select-area
・あと、『行-桁』座標系(OEdit6系挙動)に従う、幾つかの独自拡張関数も提供します。
・一部Unicode文字↓が含まれない限り、OEdit6互換が保たれる筈です。(自信ないが)
 『2バイト以上の空間(U+100〜)に存在する半角文字』
xlib-xy.scm
ソース → xlib-xy.scm
依存関係:『xlib-base.scm』『xlib-edx.scm』に依存。

・OEdit6系当時は↓な感じでしたが、OEdit7系でeditor-系関数の挙動がxy-系と同じになり、存在意義を失った形。
 editor-系関数…『行-桁』座標系。
 xy-系関数  …『行-文字インデックス』座標系。
・一部の拡張関数群には利用価値があるかもしれないけど、ややこしくて手を付けてない。
・よって、当ライブラリの収録は見送りました。
xlib-stub.scm
ソース → xlib-stub.scm
依存関係:なし。(但し、string-chopとstring-chompのみ、『xlib-base.scm』に依存)

・xlib-base.scmの選から漏れた、補欠の汎用関数を収録。
・必要かって訊かれれば、必要ないかも?な関数が主。

◆ハンドラ設定/キー割り当て◆

xdef-handler-op.scm
ソース → xdef-handler-op.scm
依存関係:『xlib-base.scm』『xlib-event.scm』に依存。

・自作起動オプションを処理する為のハンドラ設定。
・↓3つの自作オプションを処理します。
/xa…指定範囲を選択した状態で開く。
/xc…指定位置にカーソルセットした状態で開く。
/xt…テキスト先頭に、指定テンプレを挿入した状態で開く。
●詳しくは、ソースを参照の事。
xdef-handler-sel.scm
ソース → xdef-handler-sel.scm
依存関係:なし。

・おがわ様作の『選択範囲のバイト数・文字数を表示』ハンドラの改造版。
 →『選択行数』も同時に表示します。
xdef-handler-mov.scm
ソース → xdef-handler-mov.scm
依存関係:『xlib-base.scm』に依存。

・↓3種のハンドラを収録してます。
 @ステータスバー上に、常に現カーソル位置の文字コードを表示する版。
 A『文字コード+選択文字数/バイト数』をまとめて表示する版。(@+α)
 B『文字コード+選択文字数/バイト数+選択行数』をまとめて表示する版。(A+α)
・好みのもの以外をコメントアウトしてお使い下さい。(同時に1つしか使えません)
・『xdef-handler-sel.scm』と同時に使うと、干渉して多分、上手く動作しません。
xdef-key.scm
ソース → xdef-key.scm
依存関係:『xlib-base.scm』『xlib-edx.scm』に依存。

・キー割り当て集。
 →自分は、OEditをワープロに使ってて、しかもマウス派の人なので、ちょっと偏ってるかもしれない。
・主だったものだけ紹介。
 @自動ワード選択。
  →例えば、テキスト中に『起動時のディレクトリ…"C:\Documents and Settings\toshi\My Documents"』
   な行が存在する場合に、
   初期カーソル位置をSettingsの辺りとして本マクロを連続実行して行くと、
   第1選択状態…『Settings\toshi\My』
              ↓↓
   第2選択状態…『C:\Documents and Settings\toshi\My Documents』
              ↓↓
   第3選択状態…『"C:\Documents and Settings\toshi\My Documents"』
   風な段階的範囲選択をしてくれる。
  →認識するクォートは_*quote*変数中で定義されているので、ここをいぢって挙動を調節できます。
   (最終的に、文字列→正規表現に変換されるので、正規表現用のエスケープを考慮して記述する必要)
 A編集中のテキストをGrep検索。
  →機能は、その名の通り。
   (厳密には、テキストそのものでなく元ファイルの方をgrepするので、grep前に保存操作が必要)
  →『ogrep.ini』経由で、『ogrep.exe』にパラメータを渡してます。(=『ogrep.ini』の書替え)
   だから、原理的には以前から溜め込んだgrep履歴が全てクリアされます。
   それを避ける為に、本マクロ利用に先立って、『ogrep.exe』『oedit.ini』をどこかにコピって
   それに対してEXE呼び出しを掛ける事を前提としています。
   (詳しくは、ソース参照)

◆ファイルから実行用◆

罫線・描画.scm
ソース → 罫線・描画.scm
依存関係:『xlib-base.scm』『xlib-edx-rc.scm』に依存。

・このマクロを実行した直後から、↓キー割り当てが有効になります。
 Alt+矢印   …罫線(細)による描画
 Alt+Ctrl+矢印 …罫線(太)による描画
 Alt+Shift+矢印…罫線を消しゴム描画
・矩形範囲のある状態でAlt+矢印すると、範囲内を罫線補完しながら伸ばせます。
 →罫線表なんかで、行/桁巾を自由に広げる感覚で使えます。
 →縮める場合は、OEdit標準の矩形削除を使って下さい。
・キー割り当てが被る人は、適当に変えて下さい。
・折り返しとタブが絡むと、まるでダメです。(半角には、ほんの少し対応してます)
・OEdit7になって動かなくなったマクロの1つ。動く様にしたけど、移植は完全でないかも知れない。
罫線・枠生成■.scm
ソース → 罫線・枠生成■.scm
依存関係:『xlib-base.scm』『xlib-edx-rc.scm』に依存。

・矩形範囲に沿って、罫線枠を生成します。(枠の内側の下地は、そのまま維持されます)
 →矩形範囲専用です。
・タブや半角の混じらない平坦な全角領域に対して行うのが望ましいです。
 →混じっていると、軒並みズレまくります。
 →折り返しもダメです。
・矩形範囲中に、範囲巾に満たない(短い)行を含んでいた場合も、上手く行かないです。
罫線・線巾反転■.scm
ソース → 罫線・線巾反転■.scm
依存関係:『xlib-base.scm』に依存。

・選択範囲内の罫線の太さを入れ替えます。(太⇔細)
・タブや半角の混じった領域でも、問題なく動作します。(多分)
エスケープ■.scm
ソース → エスケープ■.scm
依存関係:なし。

・選択範囲内の文字列をエスケープします。
 →例.『C:\windows\system32\drivers』→『C:\\windows\\system32\\drivers』な感じ。
エスケープ解除■.scm
ソース → エスケープ解除■.scm
依存関係:なし。

・選択範囲内の文字列のエスケープを解きます。
 →例.『C:\\windows\\system32\\drivers』→『C:\windows\system32\drivers』な感じ。
タブ→半角空白□.scm
ソース → タブ→半角空白□.scm
依存関係:『xlib-base.scm』に依存。

・選択範囲内の文字列について、『タブ→半角空白』置換する。
 →変換比率は、ソース中の$tab-stopにて変更可。(初期値は4)
・矩形範囲には非対応です。
OEdit7系では、一部制約(↓)が掛かるが、それ以外は大体上手く動作する筈。
 『2バイト以上の空間(U+100〜)に存在する半角文字が含まれると、上手く変換できない』
半角空白除去■.scm
ソース → 半角空白除去■.scm
依存関係:『xlib-base.scm』『xlib-edx.scm』に依存。
ブロックコメント化■.scm
ソース → ブロックコメント化■.scm
依存関係:『xlib-base.scm』『xlib-edx.scm』に依存。

・選択範囲をブロックコメント化します。
・幾つかの拡張子を自動判別して処理します。
文字コード確認□.scm
ソース → 文字コード確認□.scm
依存関係:『xlib-base.scm』に依存。

・時々、文字コードが気になるんで作りました。
・範囲選択して実行すると、文字コード列がステータスバーに出ます。
 (表示領域の都合で、表示は先頭30文字迄に限定されます)
集計□.scm
ソース → 集計□.scm
依存関係:『xlib-base.scm』に依存。

・マッチワードを重複なく抽出する目的のマクロです。
・例えば、自分は、Webアクセス先を集計する為に使いました。(↓手順)
 @httpヘッダのログを取る。
 Aログに『^Host:\s+\K.+$』条件にて本マクロを実行。
ソート□.scm
ソース → ソート□.scm
依存関係:『xlib-base.scm』に依存。

・選択範囲内の各行を要素とし、それを指定条件にて昇順ソートして、最後に範囲内を結果にて置換する。
・URL等をちょっとインテリジェントな並び順にてソート可能。
・また、『部分マッチを含む正規表現』+『各部分マッチの、ソート時の適用順序』を指定する事により、
 かなりフレキシブルなソートが可能。
・詳しい利用法については、ソースを参照の事。

◆編集モード用の設定ファイル◆

css.cfg
css.txt
ソース → css.cfg (設定ファイル)
ソース → css.txt (キーワードファイル)

・CSS用の配色ファイルです。
・それっぽく配色されれば、それで十分くらいのノリで作りました。
・若干、Opera専用プロパティが混じっています。
・『css.cfg』を少しいぢったので、前回掲載分より多少マシになってます。
http.cfg
http.txt
ソース → http.cfg (設定ファイル)
ソース → http.txt (キーワードファイル)

・httpヘッダ用の配色ファイルです。
・ヘッダにメリハリがあると、読み易いかな、という程度の出来です。
ini.cfg
ini.txt
ソース → ini.cfg (設定ファイル)
ソース → ini.txt (キーワードファイル)

・OperaのINIファイル用の配色ファイルです。