MoEの最小構成

普段使っているPC以外でもMoEができるように、fenrirとかを抜いた最小構成を考えてみる。MoEでやってるのは大掛かりだけどちょっと試してみたいという場合とかもいいかもしれない。あれやろうとすると、フォルダ構造とか少しがんばる必要あるので。

MoEの本質は、howm形式でとったメモの編集を、PPxでやることにある。

Xyzzy

Xyzzyをインストールした後、次のスクリプトをsite-lispフォルダに入れる。

  • howmcreate2dir.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))

ついで、.xyzzyに以下を追加。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;howmモード

(pushnew '("\\.howm$" . howm-create2dir-mode) *auto-mode-alist* :test #'equal)
(require "howm-create2dir")

PPx

  • Paper Plane xUI本体
  • Paper Plane xUI Script Module(これも本体と同じページからダウンロード)

をインストールした後、PPxフォルダにscriptフォルダを作る。
そこに次のスクリプトを保存。

  • MakeComment.js
//!*script

var strLine = "\n";
currentDir = PPx.Extract("%1");


// ファイル操作
var objApl = new ActiveXObject("Shell.Application");
var objFolder = objApl.NameSpace(currentDir);

// ファイルのリストを取得
var objFolderItems = objFolder.Items();

// フォルダ内のファイルとフォルダへの処理
for(var i=0;i<objFolderItems.Count;i++) {

    var objItem = objFolderItems.Item(i);

    var objFileSys = new ActiveXObject("Scripting.FileSystemObject");

    // ディレクトリでなく空ファイルでもなく00_INDEX.txtでもなく拡張子がtxtかhowmの場合に処理する
    if (objItem.IsFolder==false && objItem.Size != 0 && objItem != "00_INDEX.txt" && (objFileSys.GetExtensionName(objItem) == "txt"  || objFileSys.GetExtensionName(objItem) == "howm")) {

       // ファイルの内容を取得
       objInFile = objFileSys.OpenTextFile(objItem, 1);

       // ファイル名+Tab+一行目の最初二文字を切り取ったもの+改行をstrに代入

       str = objItem + "\t" + objInFile.ReadLine().slice( 2 ) + "\n"

       strLine =  strLine + str;
       objInFile.Close();

    }else{}

}

// カレントディレクトリに00_INDEX.txtを作成
strCreateFile = objFileSys.BuildPath(currentDir,"00_INDEX.txt");
objFileSys.CreateTextFile(strCreateFile);

// 00_INDEX.txtに書き込み
objOutFile = objFileSys.OpenTextFile(strCreateFile, 2);
objOutFile.Write(strLine);
objOutFile.Close();
PPx.Execute("%K\"@[F5]\"")

次に、以下をコピペして、カスタマイザーから編集して取り込み。

;PPcのキーカスタマイズ
KC_main	= {	; PPcメイン窓
F6	,*script %0\Script\MakeComment.js
\K	,%M_makefile,H
E	,%"Text edit"%Orib,editor %FDC
}

;表示形式"howmtitle"の追加
MC_celS	= {	; エントリ表示 書式([;]メニュー)
howmtitle	= M cF50,5 C z7 S1 tC"y-N-D" s1
}

;拡張子がhowmの時にEnterを押すとビューアが起動
E_cr	= {
HOWM	,%v %FCD
}

;PPvのキーカスタマイズ
KV_main	= {
UP	,%KC"@UP@N"
DOWN	,%KC"@DOWN@N"
SPACE	,%KC"@SPACE@N"
\SPACE	,%KC"@\SPACE@N"
ENTER	= @Q
}

;howm作成用メニュー
;パスはxyzzyをインストールした場所になおす
M_makefile	= {	** comment **
&howm-create2dir	= %Ob D:\bin\xyzzy\xyzzy.exe -e (howm-create2dir) %1
--	= 
ディレクトリ(&D)	= *makedir %1\%E
}


利用するとき

PPxで適当なフォルダに行き、

  • Shift+Kでhowmファイル作成用メニューを起動する。


  • xyzzyが起動するのでメモを書き、保存する


  • メモがいくつかたまったら、F6を押してコメントファイルを作成
  • ";"を押し表示形式メニューを出し、howmtitleを選択してタイトル表示に


  • howmファイル上でEnterを押すとビューアが起動。カーソル上下で移動する。もう一度Enterを押すと閉じる