*2006-10-06 (Fri)\n** tw-kill-all: 動作がおかしい、考える時間がないのでコメントアウトした。\n*2006-09-10 (Sun)\n** ライセンス: 適用 \n*2006-09-07 (Thu)\n** tw-save-key-color: 一行だけ検索するようにして少し、改行時の引っかかりを修正。\n** tw-grep: 正規表現で検索するように戻した。\n*2006-09-06 (Wed)\n** tw-index: index を開いている場合はそのバッファに移動することにした。\n** tw-index: q では閉じなくして other-buffer C-q で Index 終了\n** grep: surmmary が同じ File の場合チカチカするのは挫折しなくても、良かった()\n*2006-09-05 (Tue)\n** misc: ちょこちょこ修正したが、grep で surmmary が同じ File の場合チカチカするのは挫折\n*2006-09-03 (Sun)\n** tw-file-write-time: ファイルを削除した場合出ていたエラーを修正\n*2006-09-02 (Sat)\n** tw-grep: 更新日時でソートできるようにした。{{{Scan}}} した時まずかったのを修正\n** tw-index: 土日の色づけ\n*2006-09-01 (Fri)\n** Scan: デフォルトで 1000 日以上前の {{{Todo}}} は削除することにした。そんな昔のことは多分必要ない。\n*2006-08-31 (Thu)\n** tw-index: {{{ToDo}}} sort を少し修正\n** tw-index: 優先度を追加した。同じ指定日でも階層で表示\n*2006-08-29 (Tue)\n** tw-search-memo-title-sort: index で [Title] keymap l 検索結果を a-z 順に表示を追加 \n*2006-08-28 (Mon)\n** tw-index: limit の表示を修正 !n で指定日から n 日前から表示 , 指定日になると浮いたまま\n** tw-index: keybind の動作を少し変更\n*2006-08-27 (Sun)\n** tw-index: {{{ToDo}}} 周りを少し修正 日付で潜伏期間を設けた。howm とは少し違うのが悩み\n*2006-08-26 (Sat)\n** tw-todo-change-date: {{{ToDo}}} 日付 Return で変更するようにした。\n*2006-08-23 (Wed)\n** tw-index: {{{ToDo}}} 周りを少し修正(保留はあきらめた)\n*2006-08-21 (Mon)\n** tw-save-buffer: 指定していないディレクトリーで保存するとエラーが出ていたのを修正\n** tw-random-list: 勘違いしてたのを修正\n*2006-08-20 (Sun)\n** tw-index: @ 予定を表示するように\n*2006-08-19 (Sat)\n** tw-indent: fundamental-mode 等の local-keymap がない時 #\sLFD を挿入するよう修正\n** *tw-color-return-position*: {{{Wikiname や Keyword}}} が在る場合に {{{Return}}} 後ろの境界ポジション 0 or 1\n*2006-08-18 (Fri)\n** tw-index: howm の {{{ToDo}}} に合わせたつもり\n*2006-08-17 (Thu)\n** tw-todo-option-number: todo の後に文字がないとエラーが出ていたのを修正\n*2006-08-16 (Wed)\n** tw-index: {{{ToDo}}} で曜日の後に今日との差を表示 (最大 999 以降 ***)\n2006-08-15 (Tue)\n** tw-index: {{{ToDo}}} で曜日を表示するようにした。\n*2006-08-13 (Sun)\n** tw-scan-index-make: [SCAN] もしくは、INDEX Buffer で C-S でメモのタイトル {{{ToDo}}} の Index を取る\n** tw-toggle-switch: *tw-toggle-switch* に'(("{*}""{-}""{ }")) リストにして書くと Return でトグル\n* [][10%][20%][30%].....[100%] とりあえず試しに(止めると思うけど ..)\n*2006-08-12 (Sat)\n** tw-index: [ALL] は廃止、{{{[ToDo]}}} t で {{{ ToDo}}} 一覧、memo のどこかに行頭*tw-section-mark* ~~でタイトルとして検索する\n** {{{ToDo}}}: [2002-12-12]x で表示しなくする\n2006-08-11 (Fri)\n** tw-index: メモが増えた場合遅すぎなので {Title {{{ToDo}}} KEYWORD WIKINAME} Index 化することで少しはましに\n**tw-index: ただし、まだファイルを削除、{{{ToDo}}} を変更に対応してない。\n*2006-08-08 (Tue)\n** tw-index: tw-todo-sort で {{{ToDo}}} がなかった時おかしかったのを直した。\n** title: 1行目に何も書かなかった時は Index に表示しないことにした。\n*2006-08-07 (Mon)\n** tw-index: +30 は三十日かけて浮かぶ -30 は三十日かけて沈むに対応\n** tw-index: ~ reserve 保留 適当に浮き沈み\n*2006-08-06 (Sun)\n** tw-index: {{{ToDo}}} を表示(まだ細かくは動かない)\n** tw-grep: @ で連結表示\n*2006-08-03 (Thu)\n** tw-crawl: 仕様を少し変更 scaner を option で変更できるように\n** tw-grep: r で反転\n** tw-memo: 1行目をタイトルとして扱うことにした。いちいち対話形式で開いていたが、それをやめた。\n*2006-07-31 (Mon)\n** tw-index: tw-index にメモの履歴をランダムに表示\n** tw-index:[ALL][RECENT][RANDOM] でタイトルを grep この場合リストで操作するので色々なことができそう。\n*2006-07-30 (Sun)\n** tw-now-grep: option でディレクトリーを指定するようにした。\n** tw-index: tw-index にメモの履歴を表示させるようにした。memo が増えるにつれて重くなりそう。\n** tw-grep-scaner: ついでにリストにしておくことにした。\n*2006-07-29 (Sat)\n** tw-names-open: さらに汚く\n** tw-grep: 修正 [[foo]] | hogehoe → foo | hogehoe\n2006-07-27 (Thu)\n** grep: 独自の遅い tw-grep-mode 追加 汎用性はない。\n*2006-07-25 (Tue)\n** 思うことがあり : いろいろと変更 #{{{[[diary]]#→[[memo]]#[[@memo]]}}}#\n*2006-07-19 (Wed)\n** tw-grep-log tw-grep-open tw-grep-key-color:<<< で grep した場合色づけ Return grep\n** tw-grep-word で検索するディレクトリーをどうするか考え中\n*2006-07-18 (Tue)\n**{{{[[favorite]] [[recent]]}}}: 止めた。使い勝手が悪い。\n*2006-07-16 (Sun)\n** tw-files-summary-mode : File 一覧バッファ "*Wiki: F:"\n** tw-summary-mode : 内容一覧バッファ "*Wiki: S:"\n** tw-summary : 同じ階層のメモ一覧\n*2006-07-14 (Fri)\n** tw-diary-summary :{{{[[diary]] }}} 日記が書けるようにした。\n*2006-07-14 (Fri)\n** tw-summary-mode : "*wiki:~ " Buffer は tw-summary-mode で開く\n*2006-07-12 (Wed) \n** {{{[[diary/%Y/%m/%Y-%m-%d]] }}}: 開いた場合テンプレートは挿入しないことにした。\n*2006-07-09 (Sun)\n** tw-insert-index : 追加\n*2006-07-02 (Sun)\n**{{{ [[index]]}}}: の仕様を {{{[[favorite]] [[recent]]}}} にあわせた。\n*2006-06-27 (Tue)\n** 設定ファイル : 読み込みカスタムできるようにした。といゆか .xyzzy に書いても反映されない所があっただけ\n*2006-06-26 (Mon)\n** tw-mode : 初版作成 \n
* 2006-11-02(Thu)\n**[[tiddlyspot.com|http://tiddlyspot.com/]]:引っ越し\n
*2006-11-12 (Sun)\n**tw-index: index に Keyword を表示するように
*2006-11-16 (Thu)\n** *tw-grep-window-close*: 検索結果を開く時に grep バッファを閉じるかどうか 追加
*2006-11-17 (Fri)\n** * tw-memo: 作成時に移動したバッファの行数を挿入するように\n** * tw-shell-exec: file@n でその行まで移動するように 例 C:/readme.txt@34
*2006-11-19 (Sun)\n**少しバグとりした。Grepで大文字小文字を区別してファイルにログを取るのは無理っぽい
*2006-11-24 (Fri)\n** tw-grep-mode: キーバインド u d k を追加\n**2xmlを書いていて、思いつきで追加した。
2xmlを変更
2xmlを少し変更したけどきっと、lispらしい方法で軽くできるはず\nファイルを読み込む時点でこんなリストにするとよさそうなのだが、わからん\n{{{\n((section1\n (para para)\n (sectoin2\n (para para)\n (section2-1\n (para)\n (section2-1-1\n (para para)))))\n (section3\n (para para)\n (section3-1\n (para))))\n}}}\n
*2006-11-27 (Mon)\n* パッケージ: editor から tw に変更したので、注意
tw-shell-execがうまくいってないことに気づいたが、なんでだろう。
直ったけど、いじった記憶がない
*2006-12-20(Sun)\n**KeyBindを少し追加と変更 \nなにかうまい方法はないものだろうか\n# ''C-c C-n'' 現在の buffer をコピーして新しくメモを作る\n# ''C-c !C-q'' tw-mode に関係の在るバッファを閉じる\n# ''s'' Todo Schedule\n# ''+'' Todo Todo\n# ''-'' Todo Memo\n# ''.'' Todo Done\n# ''~'' Todo Reserve\n# ''{{{!}}}'' Todo Limit\n# ''x'' Todo Stop
* メモ溜ディレクトリー : 変更するとおかしくなっていたのを多分修正\n* *select-memo-list* tw-select-directory: 追加 *select-memo-list* にメモを貯めておくディレクトリーのリストを指定してから M-x tw-select-directory でそこのディレクトリーでメモを貯める。なんか使い道あるのか?
*2006-12-02 (Sat)\n** hook: *tw-index-hook* *tw-index-close-hook*を追加
*2006-12-6(Wed)\n**[[alternate-lighting]]を少し修正
*2006-12-7(Thu)\n** alternate-lighting:delete-alternate-lightingのおかしい所修正 おかしいとこだらけだ..
*2006-10-17 (Tue) \n** tw-names-open: memo dir なら {{{[[foo]]}}} は新しいメモを作り {{{<<<foo}}} を挿入するようにした。
*2007-02-25 (Sun)\n** tw-grep-squeezing: grepbuffer で{{{#\sC-M-s}}} で絞り込む(日本語は無理)とりあえず
*2007-03-11 (Sun)\n** tloa-output: todo-level-of-achievement todo を主に使う方向に持って行くための仕組み\n** tloa-mode: SPC RET q
[[tiddlysnip|http://tiddlysnip.com/#About]]Firefoxの拡張
package cでエラーということはファイルを扱う関数でこけているのかもしれませんね\n  *tw-base-dir*  [自動生成]\n  │\n  ├ *tw-inex-template-file* [作成してやらなければならない]\n  ├ log     [自動生成]\n  └ memo   [自動生成]\n   └ date-dir.. [自動生成]\n詳しいことが解らないのでこの辺りかと\n放置してたけど使う人がいたなんてびっくり\n改めてソースをみるとげんなりするほどひどい^^;\n\n
ざっくり、かなりいい加減\n[[2xml new]]のおまけで書けてしまったのであんまり意味なし\n{{{\n;;; 2HTML\n(defun tw-2html-list(file)\n (let*((content (tw-contents-list file))\n (encode (one-line-char-encode content *html-char-alist*))\n (check (delete nil(section-position-check content)))\n (head `("<html>""<head>""<title>",(pathname-name file)"</title>"\n "</head>""<body>""<a href=\s"index.html\s">index</a>""<hr>"))\n (foot '("<hr>""<a href=\s"index.html\s">index</a>""<body>""</html>")))\n (append head (section-html-tag-close check encode) foot)))\n\n(setq *html-char-alist* `(("&" . "&#38;")("\s"" . "&#34;")\n ("<" . "&#60;")(">" . "&#62;")\n ;;(" " . "&#160;&#160;")\n ("\s\s[\s\s[\s\s(.*?\s\s)|\s\s(.*?\s\s)\s\s]\s\s]".\n "<a href=\s"\s\s2\s" title=\s"\s\s1\s" target=\s"_blank\s">\s\s1</a>")\n ;;("^\s\s([^<=].*?$\s\s)" . "\s\s1</br>")\n ))\n\n\n(defun section-html-tag-close(position-list source-list)\n (dolist(x position-list source-list)\n (setq source-list\n (substitute\n (concat (cond((eq 1 (car x))\n (tag-close "h2"\n (string-left-trim " ="(nth (cdr x)source-list))))\n ((eq 2 (car x))\n (tag-close "h3"\n (string-left-trim " ="(nth (cdr x)source-list))))\n ((eq 3 (car x))\n (tag-close "h4"\n (string-left-trim " ="(nth (cdr x)source-list))))\n ((eq 9 (car x))\n (tag-close "pre"\n (nth (cdr x)source-list))))\n (tag "pre"));p or pre?\n (nth (cdr x) source-list)\n source-list\n :test 'equal)))\n (setq source-list (append source-list `(,(tag "pre" t))))\n (dolist(x position-list source-list)\n (setq source-list\n (substitute (concat(unless(eq(cdr x)0) (tag "pre" t))(nth (cdr x)source-list))\n (nth (cdr x) source-list)\n source-list\n :test 'equal))))\n\n(defun tw-html-output(outputdir filelist)\n (create-directory outputdir :if-exists :skip)\n (let(index line)\n (macrolet((out(path &rest arg)\n `(with-open-file(fw (merge-pathnames ,path outputdir)\n :direction :output\n :if-exists :overwrite\n :if-exists :new-version\n :if-does-not-exist :create)\n ,@arg)))\n (dolist(x filelist)\n (with-open-file (fp x)\n (setq line (substitute-string(read-line fp nil nil nil)"<" "&#60;")))\n (push `(,(concat(pathname-name x)".html"),(concat(pathname-name x)".html") ,line) index)\n (out (concat(pathname-name x)".html")\n (format fw "~{~A~%~}"(tw-2html-list x))\n\n (message "~A" x)))\n (out "index.html"\n (format fw "<html><head><title>index</title></head><body>index<hr>")\n (format fw "~%~:{<p><a href=\s"~A\s">~A</a> | ~A</p> ~}" index)\n (format fw "~%<hr><body></html>")\n )\n )\n (message "done...")))\n\n(defun tw-2html(outputdir)\n (interactive "s出力先のディレクトリーを指定: "\n :default0 (let((f(get-buffer-file-name)))\n (if f\n (directory-namestring f)\n (si:system-root))))\n (long-operation\n (tw-html-output outputdir(nreverse(directory (tw::tw-memo-dir)\n :absolute t\n :recursive t\n :wild (tw::tw-index-wild)\n :file-only t)))))\n}}}
tw-memo以下のメモをもの凄く適当なxmlに,はき出してみる.\n{{{\n(defun tw-2xml-memo(file)\n (interactive "F出力先を指定: "\n :default0 (let((f(get-buffer-file-name)))\n (if f\n (directory-namestring f)\n (si:system-root))))\n (long-operation\n (tw-xml-output file(nreverse(directory *tw-memo-dir*\n :absolute t\n :recursive t\n :wild (ed::tw-index-wild)\n :file-only t)))))\n\n(defun tw-xml-output(outputfile filelist)\n (with-open-file(fw outputfile\n :direction :output\n :if-exists :overwrite\n :if-exists :new-version\n :if-does-not-exist :create)\n (format fw "~A~%~A~%" "<?xml version=\s"1.0\s" encoding=\s"UTF-8\s"?>""<tw>")\n (dolist(x filelist)\n (format fw "~A"\n (map-internal-to-utf-8(format nil "~{~A~%~}" (tw-memo-output-xml-list x)))))\n (format fw "~A~%""</tw>")))\n\n(defun tw-memo-output-xml-list(file)\n (interactive)\n (when file\n (let((tod "todo")(section "section")(title "title")(<tod "<todo")(<sec "<section")\n (p "para")(me "memo")(day "day")(tm"todomark")(tn "todoname"))\n (flet((tag(str &optional arg)\n (if (not arg)(concat "<" str ">")\n (concat "</" str ">"))))\n (flet((tag-close(&rest list)\n (if(atom list)nil\n (let(re)\n (dolist(x list)\n (push(list (tag(car x))(cadr x) (tag(car x) t)) re))\n (format nil "~{~{~A~}~}" (nreverse re))))))\n (flet((char-enc(old char-list n)\n (let(r out (ch(nth n char-list)))\n (dolist(x old)\n (setq r (substitute-string x (car ch)(cdr ch)))\n (push r out))\n (nreverse out)))\n (sec-char(n)(concat "\sn"(tag section)\n (tag-close `(,title\n ,(string-left-trim" ="(match-string 1))))\n ))\n (char-name-return(&optional str)\n (let((str (if(eq str nil) "" str)))\n (cond((string-match "\s\s." str) "done")\n ((string-match "\s\s+" str) "todo")\n ((string-match "@" str)"schedule")\n ((string-match "!" str) "limit")\n ((string-match "-" str) "memo")\n ((string-match "~" str) "reserve")\n (t "none")))))\n (let*(new todo\n (char-list '(("&" . "&#38;;")("\s"" . "&#34;")\n ("<" . "&#60;")(">" . "&#62;")\n ("\s\s[\s\s[\s\s(.*?\s\s)|\s\s(.*?\s\s)\s\s]\s\s]".\n "\sn<link>\sn<title>\s\s1</title>\sn<url>\s\s2</url>\sn</link>\sn")))\n (fut(format-date-string *tw-memo-format*(file-write-time file)))\n (fct(pathname-name file))\n (memo (list(concat(tag me) (tag-close `("create" ,fct)`("update" ,fut)) )))\n (mem (list (tag me t)))\n (sect (tag section t))\n (sec (tag section))\n (td (tag tod))\n (pc (concat "^"(tag-close `(,p "\s\s(.*\s\s)"))))\n (sectit(concat sec (tag-close `(,title "\s\s1"))))\n (q (tw-contents-list file))\n (x (char-enc q char-list 0))\n (x (char-enc x char-list 1))\n (x (char-enc x char-list 2))\n (x (char-enc x char-list 3))\n (l (char-enc x char-list 4)))\n (setq new(mapcar\n #'(lambda(x)\n (cond((string-match "^=\s\s([^=].*$\s\s)" x)\n (sec-char 1))\n ((string-match "^==\s\s([^=].*$\s\s)" x)\n (sec-char 2))\n ((string-match "^===\s\s([^=].*$\s\s)" x)\n (sec-char 3))\n ((string-match(concat\n "^"(ed::tw-todo-main-regexp)\n "\s\s([.+!@~-]\s\s)\s\s(.*$\s\s)") x)\n (let((d (match-string 4))\n (c (match-string 7))\n (sub(match-string 8)))\n (concat td\n (tag-close\n `(,day ,d)\n `(,tm ,c)\n `(,tn ,(char-name-return c))\n `(,title ,(string-left-trim " " sub)))\n (tag tod t))))\n ((string-match(concat\n "^"(ed::tw-todo-main-regexp)\n "\s\s(.*$\s\s)") x)\n (concat td\n (tag-close\n `(,day ,(match-string 4))\n `(,tm "")\n `(,tn "none")\n `(,title\n ,(string-left-trim " "(match-string 7))))\n (tag tod t)))\n (t (tag-close `(,p ,(string-left-trim " " x))))\n ))\n l))\n ;first line\n (unless(string-match sec (car new))\n (string-match pc (car new))\n (setq new (append\n (list(string-replace-match\n (car new)sectit))\n (cdr new))))\n ;;memo tag\n (setq todo(member <tod new :test #'(lambda(x y)(string-match x y))))\n (when(cadr todo)\n (when(string-match (tag p) (cadr todo))\n (string-match pc (cadr todo))\n (setq todo (cons(car todo)(append\n (list(string-replace-match\n (cadr todo)sectit))\n (cddr todo))))))\n (setq todo(nreverse\n (append todo\n (let(r)\n (dotimes(x (count <sec todo\n :test #'(lambda(x y)(string-match x y))))\n (push sect r)) r))\n ))\n (setq new (subseq new 0\n (position <tod new\n :test #'(lambda(x y)(string-match x y))\n :from-end nil)))\n (setq new(nreverse\n (append mem todo\n (let(r)\n (dotimes(x (count <sec new\n :test #'(lambda(x y)(string-match x y))))\n (push sect r))r)\n (nreverse(append memo new)))))\n )))))))\n}}}\n\n*例\n**M-x tw-2xml-memo fileを指定する\n\ntw-xml-outputの引数をlistにしたのでこんなこともできた。\n{{{\n(defun tw-2xml-grep()\n (interactive)\n (let((gbuf(ed::tw-grep-buffer))\n (buf(buffer-name(selected-buffer))))\n (if(equal gbuf buf)\n (long-operation\n (tw-xml-output\n (read-string "出力先を指定: "\n :default (si:system-root))\n (tw-grep-view-file-list)))\n (message " ~A は~A じゃないです。" buf gbuf))))\n}}}\n検索結果のバッファで、M-x tw-2xml-grepすると結果をXMLにExport\n!! Temptae\nこんな感じのメモは\n{{{\nxml template\n= section 1\nparagraph\nparagraph\n== section 1-1\nparagraph\nparagraph\nparagraph\n[2006-11-27]+ todo\n[2006-11-28]- todo\n[2006-11-26]+ todo\n[2006-11-27]~ todo\n[2006-11-27]@ todo\n[2006-11-28]! todo\nTodo の下の一行目に何か書いていると sction\nparagraph\n== section\nparagraph\nこれ以降に Todo を書くのには対応してない\n}}}\nこんな感じに吐き出す。sectionは複雑なのには対応できなかった。\nどうせちょこちょこ書いたものを集めてきてxmlにするつもりなのでこれでよしとする。\n{{{\n<?xml version="1.0" encoding="UTF-8"?>\n<tw>\n <memo>\n <create>2006-11-26-1832</create>\n <update>2006-11-26-1854</update>\n <section>\n <title>xml template</title>\n <section>\n <title>section 1</title>\n <para>paragraph</para>\n <para>paragraph</para>\n <section>\n <title>section 1-1</title>\n <para>paragraph</para>\n <para>paragraph</para>\n <para>paragraph</para>\n </section>\n </section>\n </section>\n <todo>\n <day>2006-11-27</day>\n <todomark>+</todomark>\n <todoname>todo</todoname>\n <title>todo</title>\n </todo>\n <todo>\n <day>2006-11-28</day>\n <todomark>-</todomark>\n <todoname>memo</todoname>\n <title>todo</title>\n </todo>\n <todo>\n <day>2006-11-26</day>\n <todomark>+</todomark>\n <todoname>todo</todoname>\n <title>todo</title>\n </todo>\n <todo>\n <day>2006-11-27</day>\n <todomark>~</todomark>\n <todoname>reserve</todoname>\n <title>todo</title>\n </todo>\n <todo>\n <day>2006-11-27</day>\n <todomark>@</todomark>\n <todoname>schedule</todoname>\n <title>todo</title>\n </todo>\n <todo>\n <day>2006-11-28</day>\n <todomark>!</todomark>\n <todoname>limit</todoname>\n <title>todo</title>\n </todo>\n <para>Todo の下の一行目に何か書いていると sction</para>\n <para>paragraph</para>\n <section>\n <title>section</title>\n <para>paragraph</para>\n <para>これ以降に Todo を書くのには対応してない</para>\n </section>\n </memo>\n</tw>\n}}}\nかなり重い\n''で?''\n[[2xml new]]の方で少し違う書き方を考えたけどlispじゃない方が便利だと思った\n
少し違う方法で出力\n{{{\n(defun tag(str &optional arg &key id name)\n (if (not arg)\n (concat "<" str\n (when id (concat " id=\s"" id "\s""))\n (when name (concat " name=\s"" name "\s""))\n ">")\n (concat "</" str ">")))\n\n(defmacro tag-close(str &rest arg)\n `(concat ,(tag str) ,@arg ,(tag str t)))\n\n(defun tw-contents-list(file)\n (with-open-file (fp file)\n (let (c (line nil))\n (while(setq line (read-line fp nil nil nil))\n (push line c))\n (nreverse c))))\n;; oneline で置き換えできるものは A-LIST で変換する\n(setq *char-alist* '(("&" . "&#38;")\n ("\s"" . "&#34;")\n ("<" . "&#60;")\n (">" . "&#62;")\n ;;(" " . "&#160;&#160;")\n ("\s\s[\s\s[\s\s(.*?\s\s)|\s\s(.*?\s\s)\s\s]\s\s]".\n "\sn<link>\sn<title>\s\s1</title>\sn<url>\s\s2</url>\sn</link>\sn")))\n;todoもonelineで\n(defun todo-char(char)\n (concat "^"(tw::tw-todo-main-regexp) "\s\s([" char "]\s\s)\s\s(.*$\s\s)"))\n(defun todo-tag(str)\n (tag-close"todo"\n (tag-close "todo_day" "\s\s4")\n (tag-close "todo_mark" "\s\s7")\n (tag-close "todo_name" str)\n (tag-close "todo_title""\s\s8")))\n\n(setq *todo-tags-alist* `((,(todo-char ".") . ,(todo-tag "done"))\n (,(todo-char "+") . ,(todo-tag "todo"))\n (,(todo-char "@" ) . ,(todo-tag "schedule"))\n (,(todo-char "!" ) . ,(todo-tag "limit"))\n (,(todo-char "-") . ,(todo-tag "memo"))\n (,(todo-char "~") . ,(todo-tag "reserve"))\n (,(todo-char " ") . ,(todo-tag "none"))\n ("^\s\s([^<=].*?$\s\s)" . ,(tag-close "para" "\s\s1"))\n ))\n\n\n(defun section-position-check (source-list)\n (unless(atom source-list)\n (let(res (n -1))\n (dolist (x source-list (reverse res))\n (incf n)\n (push(cond((eq n 0)(cons 1 n))\n ((string-match "^===[^=]+?" x)(cons 3 n))\n ((string-match "^==[^=]+?" x)(cons 2 n))\n ((string-match "^=[^=]+?" x)(cons 1 n))\n ((string-match (todo-char "!@+-~.")x)(cons 9 n))\n (t nil)\n )\n res)))))\n\n(defun section-position(position-list)\n (unless(atom position-list)\n (let((next (member-if #'consp (cdr position-list)))\n eqmax)\n (flet((member-max(n)\n (cdar\n (if(setq eqmax(member n (cdr position-list)\n :test 'eq\n :key #'(lambda(x)(unless(atom x)(car x)))))\n eqmax (list (cons 0 (+ (cdar position-list)(length position-list))))))))\n (when(car position-list)\n (cons(cons\n (cons(cdar position-list)\n (cond((eq 1 (caar position-list))\n (if(< (member-max 1)(member-max 9))\n (member-max 1) (member-max 9)))\n ((eq 3 (caar position-list))\n (cond((eq 1 (caar next))\n (cdar next))\n ((eq 2 (caar next))\n (cdar next))\n ((atom (member-max 3))(member-max 3))))\n ((eq 2 (caar position-list))\n (cond((< (member-max 1)(member-max 2))(member-max 1))\n ((> (member-max 1)(member-max 2))(member-max 2))\n ((atom(member-max 2))(member-max 2))))\n ((eq 9 (caar position-list))\n (cond((< (member-max 1)(member-max 2)(member-max 9))(member-max 1))\n ((> (member-max 1)(member-max 2)(member-max 9))(member-max 2))\n ((atom(member-max 9))(member-max 9))))\n ))\n (caar position-list))\n (section-position next))\n )))))\n\n;list からタグを閉じる\n(defun section-tag-close(position-list source-list)\n (dolist(x position-list source-list)\n (setq source-list\n (substitute\n (concat "\sn"\n (tag "section")\n (if(string-match"<todo>.*?"(nth (caar x)source-list))\n (string-left-trim " ="(nth (caar x)source-list))\n (tag-close "section_title"\n (string-left-trim " ="(nth (caar x)source-list))))\n (tag "paragraph"))\n (nth (caar x) source-list)\n source-list\n :test 'equal)))\n (setq source-list (append source-list `(,(tag "memo" t))))\n (dolist(x position-list source-list)\n (setq source-list\n (substitute (concat (tag "paragraph" t)"\sn"(tag "section" t)(nth (cdar x)source-list))\n (nth (cdar x) source-list)\n source-list\n :test 'equal)))\n (setq source-list (append `(,(tag "memo")) source-list )))\n\n(defun one-line-char-encode(contents-list char-alist)\n (if(atom char-alist)\n contents-list\n (one-line-char-encode\n (let((lst\n (mapcar #'(lambda(x)\n (substitute-string x\n (caar char-alist)\n (cdar char-alist)))\n contents-list)))\n (cons(substitute-string(car lst)(tag "\s\s(\s\s|/\s\s)para") "")(cdr lst)))\n ;1行目を一応タイトルとしているので\n (cdr char-alist))))\n\n(defun tw-2xml-list(file)\n (let*((content (tw-contents-list file))\n (encode (one-line-char-encode content(append *char-alist* *todo-tags-alist*)))\n (check (section-position (section-position-check content)))\n (main(section-tag-close check encode))\n (fut(format-date-string *tw-memo-format*(file-write-time file)))\n (fct(pathname-name file))\n (newcar (substitute-string\n (car main) ">" (concat " create=\s"" fct "\s" update=\s"" fut "\s">"))))\n (cons newcar (cdr main))\n ))\n\n\n(defun tw-xml-output(outputfile filelist)\n (with-open-file(fw outputfile\n :direction :output\n :if-exists :overwrite\n :if-exists :new-version\n :if-does-not-exist :create)\n (format fw "~A~%~A~%" "<?xml version=\s"1.0\s" encoding=\s"UTF-8\s"?>" "<tw>")\n (dolist(x filelist)\n (message "~A" x)\n (format fw "~A"\n (map-internal-to-utf-8(format nil "~{~A~%~}" (tw-2xml-list x)))))\n (format fw "~A~%" "</tw>"))\n (message "done..."))\n\n(defun tw-2xml(file)\n (interactive "F出力先を指定: "\n :default0 (let((f(get-buffer-file-name)))\n (if f\n (directory-namestring f)\n (si:system-root))))\n (long-operation\n (tw-xml-output file(nreverse(directory (tw::tw-memo-dir)\n :absolute t\n :recursive t\n :wild (tw::tw-index-wild)\n :file-only t)))))\n\n(defun tw-2xml-grep()\n (interactive)\n (let((gbuf(tw::tw-grep-buffer))\n (buf(buffer-name(selected-buffer))))\n (if(equal gbuf buf)\n (long-operation\n (tw-xml-output\n (read-string "出力先を指定: "\n :default (si:system-root))\n (tw-grep-view-file-list)))\n (message " ~A は~A じゃないです。" buf gbuf))))\n}}}\n[[Apache FOPを使ってPDFにしてみるテスト]]
config.options.chkHttpReadOnly = false;\n
[[Apache FOP|http://xmlgraphics.apache.org/fop/]]\n吐き出したxmlをPDFにするためのxsl\n{{{\n<?xml version="1.0" encoding="UTF-8"?>\n\n<xsl:stylesheet\n xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\n xmlns:fo="http://www.w3.org/1999/XSL/Format"\n version="1.0">\n\n <xsl:template match="/">\n <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" language="ja">\n <fo:layout-master-set>\n <fo:simple-page-master\n master-name="simple"\n page-height="29.7cm"\n page-width="21cm"\n margin-top="1cm"\n margin-bottom="2cm"\n margin-left="2.5cm"\n margin-right="2.5cm">\n <fo:region-body margin-top="3cm"/>\n <fo:region-before extent="3cm"/>\n <fo:region-after extent="1.5cm"/>\n </fo:simple-page-master>\n </fo:layout-master-set>\n\n <fo:page-sequence master-reference="simple">\n <fo:flow flow-name="xsl-region-body">\n <xsl:apply-templates/>\n </fo:flow>\n </fo:page-sequence>\n </fo:root>\n </xsl:template>\n\n <xsl:template match="memo">\n <xsl:for-each select="section">\n <fo:block font-family="Mincho" font-size="18px" text-align="left" background-color="blue"\n keep-with-next.within-page="always" margin="20px">\n <xsl:value-of select="section_title"/>\n </fo:block>\n <xsl:apply-templates select="paragaph"/>\n </xsl:for-each>\n </xsl:template>\n \n <xsl:template match="paragraph">\n <xsl:for-each select="para">\n <fo:block font-family="MS-Gothic" font-size="11pt" text-align="left" padding-top="5px">\n <xsl:value-of select="."/>\n </fo:block>\n </xsl:for-each>\n </xsl:template>\n</xsl:stylesheet>\n}}}\n{{{\nC:\sfop>fop -c userconfig.xml -xsl this.xml -xml output.xml output.xml\n}}}\n[[XSL-FO|http://www.w3.org/Style/XSL/]]さっぱりわからなかったのでこれでよしとする。\n>[[CSSJでHTML/XMLをPDFに変換する|http://www.cssj.jp/]]\nこちらの方がHTML,CSSからなのでこっちの方がよさそう
{{{\n;;Tabble of Contents を挿入する場所\n;;t: Last nil: Top\n ;;*tw-section-mark* の次の行になります。\n;;一つ目の*tw-section-mark* は取り去られる\n (setq *tw-toc-location-bottom* nil)\n;;ファイル間で移動した時に履歴を挿入する位置\n;;t: 行末 nil: 行頭\n (setq *tw-recent-pos* t)\n;;t: ファイル間で移動した時に Templete を挿入する\n;;nil: == Shortcut Index だけ挿入\n (setq *tw-default-template-insert* t)\n;;indent 時にタブ文字を使う。\n (setq *tw-untabify* nil) default :t\n;;Todo の行頭に入れる曜日の表示 t:English nil:Japan\n (setq *tw-index-todo-week* nil)\n;;tw-memo 作成時にセクションマークを挿入する\n (setq *tw-memo-insert-section-mark* t)\n;;検索結果を開く時に grep バッファを閉じるかどうか\n (setq *tw-grep-window-close* nil)\n}}}
{{{\n;;tw-summary-mode の buffer tab を表示する場合\n (setq *tw-buf-prefix* "*Wiki: ")\n}}}\n
<<tiddler 2007-3-11-1117>><<tiddler 2007-2-25-1328>><<tiddler 2006-12-18-1522>><<tiddler 2006-12-7-1647>><<tiddler 2006-12-6-1814>><<tiddler 2006-12-2-1716>><<tiddler 2006-11-27-129>><<tiddler 2006-11-24>><<tiddler 2006-11-19>><<tiddler 2006-11-17>><<tiddler 2006-11-16>><<tiddler 2006-11-12>><<tiddler 2006-11-02>><<tiddler 2006年10月17日>><<tiddler 2006-10-06>>
私は背景黒なので適当に変えて下さい。\n{{{\n;;Table of Contents を挿入した場合についでに挿入される文字の色\n (setq *tw-toc-range-face* '(:color 12 0 :line :strike-out))\n;;Wiki Name を囲む文字の文字の色 Default: {{{[[foo]]}}}\n (setq *tw-names-paren-face* '(:color 12 0))\n;;Wiki Name 文字の色\n (setq *tw-names-face* '(:color 6 0 :underline))\n;;~WikiName File が存在している場合の色 0~15\n (setq *tw-exist-name-face* 3)\n;;ID を囲む文字の文字の色 Default: {{{[foo]}}}\n (setq *tw-id-paren-face* '(:color 11 0))\n;;ID の文字の色\n (setq *tw-id-face* '(:color 8 0 :underline))\n;;Section の文字の色\n (setq *tw-section-face* '(:color 7 15 :line :bold))\n;;絶対パスを開く(howm 風)文字の色\n (setq *tw-abs-path-link-face* '(:color 6 0))\n;;絶対パスを開く(howm 風)文字の色\n (setq *tw-abs-pass-face* '(:color 4 0 :underline))\n;;HR\n (setq *tw-hr-face* '(:color 15 8 :line :strike-out))\n;;Grep するアクションの文字の色\n (setq *tw-grep-regexp-face* '((1 :color 8 0 :underline)(2 :color 8 0 :underline)(3 :color 0 0)))\n;;~ToDo の 色\n (setq *tw-todo-important-face* '(:color 1 0)) ; !\n (setq *tw-todo-todo-face* '(:color 2 0)); +\n (setq *tw-todo-memo-face* '(:color 4 0)); -\n (setq *tw-todo-done-face* '(:color 15 0)); .\n (setq *tw-todo-reserve-face* '(:color 8 0)); ~\n (setq *tw-todo-stop-face* '(:color 0 0 :strike-out)); x\n (setq *tw-priority-face* '(:color 9 0 :bold)) ; >\n (setq *tw-index-todo-sunday-face* '(:color 1 0)) ;^ 日 or Sun\n (setq *tw-index-todo-saturday-face* '(:color 4 0)) ;^ 土 or Sat\n;;toggle-switch の色\n (setq *tw-toggle-switch-face* 6)\n}}}
[[Tw-Mode]]\n[[インストール]]\n
バックアップがてらに[[Box.net|http://www.box.net/]]においてあります。\n[[tw-mode|http://www.box.net/public/8qvq596a7u]] 最新\n[[Archive |http://www.box.net/public/s1bei4p73r]] 昔のやつ一覧\n[[Omnidrive|http://www.omnidrive.com/]]だとそのまま落とせるみたいなので、こっちにも\n[[tw-mode|http://web.omnidrive.com/APIServer/shared/4MEjNOzvtGwjL20Z4QVxaPTB/tw-mode.lzh]]\n[[古いの|http://web.omnidrive.com/APIServer/shared/cuEttXO4SeZdds4V7tsPylAZ/]]\n\n[[todo.l|http://www.box.net/shared/9yg19r0acl]] todoだけ抜き出したモード\nOmnidrive [[todo.l|http://web.omnidrive.com/APIServer/public/XK4ynRk6HzjF0R88jzf8TtxN/todo.zip]]
{{{\n;;[[hoge]]RET で新しくファイルを作る場合の拡張子\n (setq *tw-extension* ".txt")\n;;Memo を貯めておく基本のフォルダ\n (setq *tw-base-dir* "~/Wiki/")\n;;[[foo|http://?]] >>>http://? を補完する時のディレクトリー\n;;インターネットショートカットで補完するのでインターネットショート\n;;カットを貯めているフォルダがあるのならそれでもいい\n;;Default: お気に入り\n (setq *tw-url-fav-dir*\n  (merge-pathnames "Favorites" (si:getenv "USERPROFILE"))\n;;ファイルのフォーマット1日1メモまでは大丈夫です。\n; 1秒1メモの場合\n(setq *tw-memo-format* "%Y-%m-%d-%H%M%S")\n}}}
モード別のキーバインド
/***\n|''Name:''|LegacyStrikeThroughPlugin|\n|''Description:''|Support for legacy (pre 2.1) strike through formatting|\n|''Version:''|1.0.1|\n|''Date:''|Jul 21, 2006|\n|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''License:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n\n***/\n\n//{{{\n\n// Ensure that the LegacyStrikeThrough Plugin is only installed once.\nif(!version.extensions.LegacyStrikeThroughPlugin)\n {\n version.extensions.LegacyStrikeThroughPlugin = true;\n\nconfig.formatters.push(\n{\n name: "legacyStrikeByChar",\n match: "==",\n termRegExp: /(==)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n});\n\n} // end of "install only once"\n//}}}\n
{{{\n;;File を開く時、関連づけで開く拡張子 \n (setq *tw-shell-exec-list* '("html" "htm" "jpg" "png" "wmv" "zip" "lzh" "exe"))\n;;Index で default 以外に表示したい拡張子のリスト \n'("*.html" "*.txt")とか\n (setq *tw-index-wild-list* nil)\n;;default:[?] で補完するリスト\n (setq *tw-action-complete-list* nil)\n;;Toggle Switch 用のリスト\n (setq *tw-toggle-swith-list* nil)\n ;;例 お好みで\n (setq *tw-toggle-swith-list* '(("{}" "{まだ}" "{これから}" "{もう少し}"\n "{後ちょっと}" "{やる気なくなった}"\n "{済み}")))\n;;Index buffer に挿入したいリスト\n (setq *tw-index-insert-file-list* '("FILENAME" "FILENAME"))\n ;;どんなファイルでもいい 表示させておきたいものをどうぞ\n}}}
<<tiddler GettingStarted>>\n<<tiddler tiddlyspotControls>>\n
!![[MainMenu]]\n[[Tw-Mode]]\n[[インストール]]\n[[DownLoad]]\n<<tag KeyBind>>\n[[アクション]]\n[[howm風]]\n[[コマンド]]\n<<tag Custom>> \n<<tag Changelog>>\n[[ChangeLog一覧]]\n\n----\n<<today>>\n[[TiddlyWiki|http://www.tiddlywiki.com/]] <<version>>\n----\n\n\n
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'>
[[xyzzy の音 - 検索|http://hie.s64.xrea.com/xyzzy/note/search.html#grep-mouse-left-press]] grep-mouse-left-pressを設定していれば便利 (改悪すみません)\n{{{\n > 1 ;;◇ grep 結果からウィンドウサイズを場合により変更し検索先に移動\n > 2 (defun grep-first-error-and-resize-window ()\n > 3 (interactive)(delete-other-windows)(first-error)(other-window))\n > 4 (define-key *grep-map* #\sRET 'grep-first-error-and-resize-window)\n > 5\n > 6 (defun grep-first-error-and-resize-window-forward-line()\n > 7 (interactive)\n > 8 (unless (forward-line)\n > 9 (goto-char (point-min)))\n > 10 (grep-first-error-and-resize-window)\n > 11 (refresh-screen))\n > 12\n > 13 (defun grep-first-error-and-resize-window-backward-line()\n > 14 (interactive)\n > 15 (unless (backward-line)\n > 16 (goto-char (point-max)))\n > 17 (grep-first-error-and-resize-window)\n > 18 (refresh-screen))\n > 19\n > 20 (defun grep-window-close()\n > 21 (interactive)\n > 22 (when(find-buffer "*grep*")\n > 23 (delete-buffer "*grep*")\n > 24 (delete-window)))\n > 25\n > 26 (defun grep-scroll-up-other-window()\n > 27 (interactive)\n > 28 (scroll-other-window t))\n > 29\n > 30 (defun grep-scroll-other-window()\n > 31 (interactive)\n > 32 (scroll-other-window))\n > 33 ; 別の window をスクロール\n > 34 (define-key *grep-map* #\sSPC 'grep-scroll-other-window)\n > 35 (define-key *grep-map* #\sC-h 'grep-scroll-up-other-window);BS\n > 36 ; 検索結果を開く\n > 37 (define-key *grep-map* #\sC-n 'grep-first-error-and-resize-window-forward-line)\n > 38 (define-key *grep-map* #\sC-p 'grep-first-error-and-resize-window-backward-line)\n > 39 ; 閉じる\n > 40 (define-key *grep-map* #\sq 'grep-window-close)\n}}}
{{{\n(setq *tw-action-return-list*\n (cons '(FUNCTION REGEXP)\n ;;関数 RETで動作させる正規表現のリスト\n *tw-action-return-list*))\n}}}\n新しくアクションを作れます。Lispがわかる人だけにして下さい。\n
{{{\n;;Index に表示するメモの最大値 日付順\n (setq *tw-memo-recent-max* 50)\n;;Index に表示するメモの最大値 ランダム\n (setq *tw-memo-random-max* 10)\n;;Index で済み Done を表示する最大値\n (setq *tw-done-max* 10)\n;;Section Mark の 最大値\n;;======= fooはマッチしなくなる\n (setq *tw-mark-length* 6)\n;;移動した時の表示位置 0 ならウインドウの一番上 (recenter)\n (setq *tw-recenter* 5)\n;;Summary mode で表示する行数 Default:10\n (setq *tw-summary-line-max* 10)\n;;一覧表示で制限する行数 \n (setq *tw-summary-line-max* 10)\n;;grep-buffer の window の高さ\n (setq *tw-grep-view-height* 0)\n;;Wikiname や Keyword が在る場合に Return するポジション 0 or 1\n (setq *tw-color-return-position* 1) default: 0 \n;;Index で表示する予定の前後の長さ\n (setq *tw-schedule-margin-before* 7)\n (setq *tw-schedule-margin-over* 1)\n;;Scan した時に n 日以上前の Todo は検索しない default: 1000 日以上すぎたものは削除する \n (setq *tw-cleaning-todo-day-length* 1000)\n;;memo 覚書は適当に消えて欲しいのでどのくらいまでか指定 default: 60 日\n (setq *tw-todo-memo-day-length* 60)\n;;index で Keyword を横に表示する数\n (setq *tw-key-index-num* 7)\n;;index で 更新日時の新しい Keyword を表示する数\n (setq *tw-key-hot-num* 7)\n}}}
<!--{{{-->\n<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>\n<div class='headerShadow'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n<div class='headerForeground'>\n<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;\n<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n</div>\n</div>\n<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>\n<!--<div id='chat'>コメント書くとこ<br /><iframe src="http://chat2.fc2.com/ch/ajax_chat_mini.php?id=658807&bgcolor=ffffff" width="130" height="250" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe><br /><a href="http://rentalserver.fc2.com/">fc2</a></div>-->\n<div id='sidebar'>\n<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n</div>\n<div id='displayArea'>\n<div id='messageArea'></div>\n<div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal 'YYYY-MM-DD-hhmm'>><<saveChanges>><<upload http://tw-mode.tiddlyspot.com/store.cgi index.html . . tw-mode>><html><a href='http://tw-mode.tiddlyspot.com/download' class='button'>download</a></html><<slider chkSliderOptionsPanel OptionsPanel 'options »' 'Change TiddlyWiki advanced options'>>
text wiki mode for xyzzy
tw-mode
http://tw-mode.tiddlyspot.com/index.html
{{{\n;;Section に用いる文字\n (setq *tw-section-mark* "=")\n;;良く開くファイルを登録 お気に入りの ~WikiName file\n (setq *tw-favorite* "favorite")\n (setq *tw-index* "index")\n (setq *tw-toc* "~Make-Toc")\n (setq *tw-act-color-clear* "Refresh")\n (setq *tw-memo* "memo")\n (setq *tw-wiki* "Wiki")\n (setq *tw-new-file-section-title* "Shortcut Index")\n}}}
/***\nPlace your custom CSS here\n***/\n/*{{{*/\n.title {\n color: #fff;\n background: #6c79cd;\n}\nh1,h2,h3,h4,h5 {\n color: #00f;\n background: #bbc4f6;\n}\n.viewer pre {\n border: 1px solid #660000;\n padding: 0.5em 0.5em 0.5em 0.5em;\n background: #eeeeaa;\n color: #660000;\n overflow: auto;\n /* font-size: 10px;*/\n}\n#chat {\n //position: reretive;\n left: 0;\n width: 14em;\n text-align: left;\n line-height: 1.6em;\n padding: 1.5em 0.5em 0.5em 0.5em;\n font-size: 1.1em;\n margin-top : 50em;\n}\n\n\n/*}}}*/\n
!概要\ntext Wiki Mode(多分 minor-mode)\nWiki 風な動作をする Lisp です。\n残念ながら、まだまだ便利だと思うようなものではありません。\nhowm modoki\n書式も、どうせ私が覚えきれないので数種類でやめた。\n初めての Lisp なので何が在っても責任は持てません。[1]\n汚いソースも勘弁してください。
\n| 15/11/2006 18:24:56 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/#mail2]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/11/2006 16:52:55 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 17/11/2006 20:58:12 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 19/11/2006 11:10:50 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 19/11/2006 11:46:54 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 23/11/2006 16:13:52 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 23/11/2006 16:36:34 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 23/11/2006 17:0:31 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 23/11/2006 17:9:34 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 23/11/2006 21:14:1 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/11/2006 17:15:35 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/11/2006 21:1:0 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 9:57:29 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 26/11/2006 10:14:37 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 17:17:29 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 18:56:24 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 19:5:13 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 26/11/2006 19:7:4 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 26/11/2006 19:30:36 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 27/11/2006 12:11:24 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 2/12/2006 17:36:20 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 2/12/2006 17:42:21 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 2/12/2006 17:43:40 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 2/12/2006 18:11:36 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 2/12/2006 18:12:30 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 2/12/2006 18:12:34 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok | Ok |\n| 2/12/2006 18:23:11 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 2/12/2006 18:33:35 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 2/12/2006 21:58:12 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 2/12/2006 22:34:29 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/12/2006 18:30:46 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 6/12/2006 20:11:23 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/12/2006 17:4:45 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/12/2006 15:22:18 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/12/2006 15:23:35 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/12/2006 15:25:46 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/12/2006 15:27:11 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/12/2006 15:29:5 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 10/12/2006 15:31:48 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 16/12/2006 20:37:10 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 18/12/2006 15:29:15 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 24/12/2006 18:27:4 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 31/12/2006 15:40:45 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/2/2007 13:32:5 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 25/2/2007 13:32:29 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 4/3/2007 12:51:50 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/3/2007 11:12:45 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 11/3/2007 11:16:7 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/3/2007 11:25:35 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/3/2007 11:52:15 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 11/3/2007 14:9:2 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/3/2007 18:10:29 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/3/2007 18:31:59 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/3/2007 20:44:13 | YourName | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/3/2007 20:46:24 | YourName | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/3/2007 20:47:3 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/3/2007 21:4:55 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 12/3/2007 21:8:11 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 12/3/2007 21:12:35 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/3/2007 14:8:5 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 25/3/2007 14:8:21 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/3/2007 14:13:58 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 25/3/2007 17:31:24 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 28/4/2007 11:24:27 | tw-mode | [[index.html|http://tw-mode.tiddlyspot.com/index.html#UploadLog]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 28/4/2007 11:25:26 | tw-mode | [[index.html|http://tw-mode.tiddlyspot.com/index.html#UploadLog]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/8/2007 19:29:48 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |\n| 7/12/2007 5:31:54 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . | Ok |\n| 7/12/2007 5:32:16 | tw-mode | [[/|http://tw-mode.tiddlyspot.com/]] | [[store.cgi|http://tw-mode.tiddlyspot.com/store.cgi]] | . | index.html | . |
/***\n|''Name:''|UploadPlugin|\n|''Description:''|Save to web a TiddlyWiki|\n|''Version:''|3.4.4|\n|''Date:''|Sep 30, 2006|\n|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|\n|''Documentation:''|http://tiddlywiki.bidix.info/#UploadDoc|\n|''Author:''|BidiX (BidiX (at) bidix (dot) info)|\n|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|\n|''~CoreVersion:''|2.0.0|\n|''Browser:''|Firefox 1.5; InternetExplorer 6.0; Safari|\n|''Include:''|config.lib.file; config.lib.log; config.lib.options; PasswordTweak|\n|''Require:''|[[UploadService|http://tiddlywiki.bidix.info/#UploadService]]|\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 4, revision: 4, \n date: new Date(2006,8,30),\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n documentation: 'http://tiddlywiki.bidix.info/#UploadDoc',\n author: 'BidiX (BidiX (at) bidix (dot) info',\n license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',\n coreVersion: '2.0.0',\n browser: 'Firefox 1.5; InternetExplorer 6.0; Safari'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 1}, \n date: new Date(2006,8,19)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 3, date: new Date(2006,8,30),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) \n {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.className = "txtOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "pasOptionInput "+opt;\n place.appendChild(c);\n c.value = config.options[opt];\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n c.className = "chkOptionInput "+opt;\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n backupFileStored: "Previous file backuped in %0",\n crossDomain: "Certainly a cross-domain isue: access to an other site isn't allowed",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileLocked: "Files is locked: You are not allowed to Upload",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n passwordEmpty: "Unable to upload, your password is empty",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.toDirUrl(storeUrl, uploadDir, username)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.toRootUrl = function (storeUrl, username)\n{\n return root = (this.dirname(storeUrl)?this.dirname(storeUrl):this.dirname(document.location.toString()));\n}\nconfig.macros.upload.toDirUrl = function (storeUrl, uploadDir, username)\n{\n var root = this.toRootUrl(storeUrl, username);\n if (uploadDir && uploadDir != '.')\n root = root + '/' + uploadDir;\n return root;\n}\nconfig.macros.upload.toFileUrl = function (storeUrl, toFilename, uploadDir, username)\n{\n return this.toDirUrl(storeUrl, uploadDir, username) + '/' + toFilename;\n}\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (!password || password === '') {\n alert(config.macros.upload.messages.passwordEmpty);\n return;\n }\n if (storeUrl === '') {\n storeUrl = config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n // Check that file is not locked\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n if (BidiX.GroupAuthoring.lock.isLocked() && !BidiX.GroupAuthoring.lock.isMyLock()) {\n alert(config.macros.upload.messages.fileLocked);\n return;\n }\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n var toDir = config.macros.upload.toDirUrl(storeUrl, toFilename, uploadDir, username);\n displayMessage(config.macros.upload.messages.aboutToUpload.format([toDir]), toDir);\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, rssPath, uploadDir, username);\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [toFileUrl]), toFileUrl);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n\n revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");\n revised = revised.replaceChunk("<!--PRE-HEAD-START--"+">","<!--PRE-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPreHead","") + "\sn");\n revised = revised.replaceChunk("<!--POST-HEAD-START--"+">","<!--POST-HEAD-END--"+">","\sn" + store.getTiddlerText("MarkupPostHead","") + "\sn");\n revised = revised.replaceChunk("<!--PRE-BODY-START--"+">","<!--PRE-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPreBody","") + "\sn");\n revised = revised.replaceChunk("<!--POST-BODY-START--"+">","<!--POST-BODY-END--"+">","\sn" + store.getTiddlerText("MarkupPostBody","") + "\sn");\n\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n var toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n if (responseText.indexOf("destfile:") > 0) {\n var destfile = responseText.substring(responseText.indexOf("destfile:")+9, \n responseText.indexOf("\sn", responseText.indexOf("destfile:")));\n toFileUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + destfile;\n }\n else {\n toFileUrl = config.macros.upload.toFileUrl(storeUrl, toFilename, uploadDir, username);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [toFileUrl]), toFileUrl);\n if (backupDir && responseText.indexOf("backupfile:") > 0) {\n var backupFile = responseText.substring(responseText.indexOf("backupfile:")+11, \n responseText.indexOf("\sn", responseText.indexOf("backupfile:")));\n toBackupUrl = config.macros.upload.toRootUrl(storeUrl, username) + '/' + backupFile;\n displayMessage(config.macros.upload.messages.backupFileStored.format(\n [toBackupUrl]), toBackupUrl);\n }\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n // erase local lock\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n BidiX.GroupAuthoring.lock.eraseLock();\n // change mtime with new mtime after upload\n var mtime = responseText.substr(responseText.indexOf("mtime:")+6);\n BidiX.GroupAuthoring.lock.mtime = mtime;\n }\n \n \n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) {}\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir;\n // add lock attributes to sheader\n if (window.BidiX && BidiX.GroupAuthoring && BidiX.GroupAuthoring.lock) {\n var l = BidiX.GroupAuthoring.lock.myLock;\n sheader += ";lockuser=" + l.user\n + ";mtime=" + l.mtime\n + ";locktime=" + l.locktime;\n }\n sheader += ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n //strailer = "--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n try {\n request.open("POST", storeUrl, true); \n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent + "\snStatus: "+request.status.statusText);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n try {\n request.open("GET", document.location.toString(), true);\n }\n catch(e) {\n alert(config.macros.upload.messages.crossDomain + "\snError:" +e);\n exit;\n }\n \n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]) + "\snStatus: "+request.status.statusText);\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nsetStylesheet(\n ".pasOptionInput {width: 11em;}\sn"+\n ".txtOptionInput.txtUploadStoreUrl {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadFilename {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadDir {width: 25em;}\sn"+\n ".txtOptionInput.txtUploadBackupDir {width: 25em;}\sn"+\n "",\n "UploadOptionsStyles");\nconfig.shadowTiddlers.UploadDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadDoc ]]\sn"; \nconfig.options.chkAutoSave = false; saveOptionCookie('chkAutoSave');\n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n};\n\n//}}}\n////===\n
<!--{{{-->\n<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'><span macro='view modified date [[DD MMM YYYY]]'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date [[DD MMM YYYY]]'></span>)</div>\n<div class='tagging' macro='tagging'></div>\n<div class='tagged' macro='tags'></div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>\n<!--}}}-->
This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://tw-mode.tiddlyspot.com/controlpanel]] (your control panel username is //tw-mode//).\n<<tiddler tiddlyspotControls>>\n@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the "save to web" button in the column on the right.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click "upload" and your ~TiddlyWiki will be saved back to tiddlyspot.com.\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].\n\n@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions.
デフォルトでは三日前になるとピコピコ、1日前になると...アホすぎる\n{{{\n(defvar *alternate-lighting-list* nil)\n(defvar *alternate-lighting-list-option* nil)\n(defvar *alternate-lighting-rainbow-day* "[1]") ;1日前になると..\n(defvar *alternate-lighting-option-day* "[2-3]") ;三日前になると...\n(setq alternate-lighting-char-list\n `(,(nth 0 *tw-todo-mark-list*) ;!\n ,(nth 6 *tw-todo-mark-list*))) ;@\n\n(defun alternate-lighting-point-list(&optional (before-day *alternate-lighting-rainbow-day*))\n (let(pos)\n (dolist (x alternate-lighting-char-list)\n (save-excursion\n (goto-char(point-min))\n (while\n (scan-buffer\n (concat "^ .*? -\s\s(" before-day\n "\s\s)|\s\s(" (tw-todo-regexp)\n " *\s\s(" x "\s\s)\s\s)"):regexp t)\n (forward-char)\n (push(list(match-beginning 2)(match-end 2)x) pos))))\n (setq pos (delete-duplicates pos :test 'equal))\n (if (equal before-day *alternate-lighting-rainbow-day*)\n (setq *alternate-lighting-list* pos)\n (setq *alternate-lighting-list-option* pos))\n ))\n\n(defun alternate-lighting-attribute(lstn &optional bold (background 0))\n (when(equal(buffer-name(selected-buffer))(tw-index-buffer))\n (let((lst alternate-lighting-char-list))\n (mapcar #'(lambda(x)\n (set-text-attribute\n (car x)(cadr x)\n ;(quote\n (if (equal lstn *alternate-lighting-list*) 'l 'lo);)\n :foreground\n (cond((equal(caddr x)(car lst))\n (cadr *tw-todo-important-face*))\n ((equal(caddr x)(cdr lst))\n (cadr *tw-todo-schedule-face*))\n (t 0))\n :bold bold\n :background background\n :underline background))\n lstn))))\n\n(defun alternate-lighting-run()\n (let ((func (gensym))\n (time 0)\n (background 0))\n (setf (symbol-function 'func)\n #'(lambda()\n ;;(delete-text-attributes 'l)\n (alternate-lighting-attribute *alternate-lighting-list*\n (oddp(incf time))\n (incf background))\n ;;(delete-text-attributes 'lo)\n (alternate-lighting-attribute *alternate-lighting-list-option*\n (oddp time) 0)\n (refresh-screen)))\n )\n (start-timer 1 'func nil)\n )\n\n(defun alternate-lighting()\n (alternate-lighting-point-list)\n (alternate-lighting-point-list *alternate-lighting-option-day*)\n (alternate-lighting-run))\n\n(defun delete-alternate-lighting()\n (let((buf(selected-buffer))\n (index(tw-index-buffer)))\n (setq *alternate-lighting-list* nil)\n (setq *alternate-lighting-list-option* nil)\n (while(stop-timer 'func)nil)\n (when(find-buffer index)\n (switch-to-buffer index)\n (delete-text-attributes 'l)\n (delete-text-attributes 'lo))\n ;;(delete-buffer(tw-index-buffer))\n (switch-to-buffer buf))\n )\n\n(add-hook '*tw-index-hook* 'alternate-lighting)\n(add-hook '*tw-index-close-hook* 'delete-alternate-lighting)\n}}}\n *tw-index-hook* *tw-index-close-hook*を追加したので\n[[tw-mode|http://www.box.net/public/8qvq596a7u]] 最新のものにアップデートしてから.twiki.lに上記のコード\nを追加し使って下さい。\n遊びで書いたのでどうこうするつもりはありません。\n
{{{\n;; *scratch* で何か書いていたのをメモにする\n (defun scratch-to-tw-memo(str kill)\n (interactive "sTitle: \snS*scratch* の内容削除する?: "\n :default0 "*scratch*" :default1 "nil")\n (when kill (kill-region(point-min)(point-max)))\n (let((f(buffer-name(selected-buffer))))\n (when f (tw-memo)\n (insert (concat " "str " --"(format-date-string *tw-memo-format*)"--\sn"))\n (if kill (yank)(insert-buffer f))\n (message "In new memo copy ... ~A " f))))\n ;keymap\n (define-key ed::*lisp-interaction-mode-map* #\sF12 'scratch-to-tw-memo)\n\n}}}\n
NEW
*{{{>>>C:/foo/test.html}}}\n**(howm 風)で絶対パスを開く、ない場合は Filer を開き(正規表現がまずいので開かないかもしれない)パスを挿入し開く。\n** path@n でその行まで移動\n(match させる気なしなので一行にした方が無難)\nFull Path RET でも同じ動作にした。{{{http://?}}} は後ろに何か文字\n(例えば Space)とかが在れば大丈夫かも\n日本語や Space の在るものは {{{[[foo|http://?]]}}} が無難\n*{{{<<<Wiki <<<hoge}}}\n** Grep (howm 風に全文検索 come-from) |参考に [[Mygrep-Setting]]\nFile にできない文字(*><?/\s 6 種類 ?)は、キーワードにできない ;)\n*{{{>>> foo}}}\n** Grep (howm 風に全文検索 goto)正規表現での検索\n{{{<<<foo}}} で一度検索すると、.tw-keys に書き込まれ tw-mode で開いた時色づけ(point-min の場合はダメにたいです)します。({{{[Wiki-Name-Color]}}} と同じ)\nこの場合は Return で grep します。\n独自の遅い grep なので、とりあえず、保存した時に KEYWORD ~WikiName が在れば、ファイルに残して次回検索の時に使います。(何かいい方法が在れば、変更するつもり)\nメモは1分1メモにした。\nメモの1行目をタイトルとして tw-index を扱います。(*tw-section-mark* Default:= もタイトル)\n行頭から (もしくはスペース , タブ , > なら){{{[2006-08-25]}}}(!+-.~x@) は ~ToDo として検索します。\ntw-index で\n* @@''!''@@ 締め切り 指定日7日前から浮かぶ(!3 指定日の 三日前から)指定日になると浮かびっぱなし\n* @@''+''@@ ~ToDo 指定日になると浮かぶ (+3 三日間は浮かばない) \n* @@''-''@@ 覚書 指定日になると沈む (-3 三日間は浮かんだまま)\n* @@''.''@@ 済み 常に一番下(ランダム表示)\n* @@''~''@@ 保留 適当に浮き沈み(これは howm のそれとは違う動作です。)\n* @@''x''@@ 止め 表示しない(必要ないかも)\n* @@''{{{@}}}''@@ 予定 指定日から Default 7 日前から表示 1 日後迄表示\n* SPC TAB >[yyyy-mm-dd] は同じ日の中での優先順位 , 多いほど上に来る [3]\nhowm と同じとはいかない、もう少し勉強が必要です。 ;)\n* {*}{-}{ } 括弧内を Return トグルどう使うかはわからない\n* {{{[2000-12-12]|!}}} (|キャレットのつもり)Return で !+-.~x@ をトグル\n* {{{[][0%][10%].....[100%]}}} 括弧内を Return でトグル\n{{{[2006-08-25]}}} 内で Return するとミニバッファから下のように尋ねられます。\n{{{\n RET (Search)|yymmdd (Set Days)|-or+n (Shift)|~n (Repeat)|. (Done) |t (Today)|p (priority) : \n}}}\n* Return 検索\n* 20060825 0060825 060825 RET なら{{{[2006-08-25]}}}\n* t 今日の日付\n* + - n で n 日目\n* ~ n n 回繰り返し(0 1 の場合はそのままになるので注意) で次に \n* . 済みに変更\n~n の場合は\n{{{\n How?|n (Width)|d (Day)|w (Week)|m (month)|y (Year): \n}}}\n* n は n 日ずつ繰り返し\n* d 一日ずつ繰り返し\n* w 一週間ずつ繰り返し\n* m 一ヶ月ずつ繰り返し\n* y 一年ずつ繰り返し\n{{{\n Pointing Day yymmdd :\n}}}\n* いつからか日付を入れる :Default 指定日\np (優先順位)の場合は\n Do Times: 1\n* 優先順位の数字 \n\nhowm とは関係ないのですが達成度を表示する\n([yyyy-mm-dd]+ todo ) で *TAG* を書いておくと達成度を表示するようにしました。\n例えば\n{{{\n [yyyy-mm-dd]+ *mail* 太郎さんにメール\n [yyyy-mm-dd]+ *mail* 太郎さんにメール\n [yyyy-mm-dd]+ *mail* はなこさんにメール\n [yyyy-mm-dd]. *mail* 太郎さんにメール\n [yyyy-mm-dd]. *mail* 花子さんにメール\n}}}\nindex-buffer で ? すると\n{{{\n mail [++++++++ ] 40%\n}}}
nippo-mode の send-mail を使いBlogger に送る\n[[がらくた置き場|http://tai-hai.net/junk/]] nippo-mode の send-mail をありがたく使わせて頂き\nBlogger で日記をつけていく。(以前書いたのは、まずい所があったので削除した。)\n{{{\n(setq *from-mail-adress* "メールアドレス")\n(setq *to-mail-adress* "送信先")\n(setq *smtp-server* "SMTPサーバ")\n;title\n(defvar *mail-title* nil)\n;あまりよろしくない名前なので変えるべき\n(defun mail-title()\n (save-excursion\n (goto-char(point-min))\n (if(eolp)\n (setq *mail-title*\n (read-string "Title: " :default "(none)"))\n (setq *mail-title*\n (buffer-substring(point)\n (progn(goto-eol)(point)))))))\n\n;二行目から本文\n(defun mail-content()\n (save-excursion\n (goto-char(point-min))\n (buffer-substring\n (progn(goto-line 2)(point))\n (point-max))))\n\n(defun mail-header(title adress)\n (concat "From: owner <" adress ">\sn"\n "To: " *to-mail-adress* "\sn"\n "Subject: =?ISO-2022-JP?B?"\n;; (string-trim\n;; "\sn"\n;; (si::base64-encode(map-internal-to-jis title)))\n (substitute-string (si::base64-encode (map-internal-to-jis title))"\sn" "")\n "?=\sn"\n (format nil "Date: ~A~%"\n (format-date-string "%a, %d %b %Y %H:%M:%S %Z"))\n "Content-Type: text/plain; charset=ISO-2022-JP\sn"\n "Mime-Version: 1.0\sn"\n (format nil "X-Yzzy-Version: ~A~%" (software-version))\n "MeReturn-Path: <" adress ">\sn\sn"))\n\n(defun mail-to-string()\n (concat (mail-header\n *mail-title* *from-mail-adress*)\n (map-internal-to-jis\n (mail-content))))\n\n(defun post-mail()\n (interactive)\n (when\n (yes-or-no-p "~{~A~A~%~}"\n `("Buffer: "\n ,(buffer-name(selected-buffer))\n "Title: "\n ,(mail-title)\n ,*to-mail-adress*\n " に送信しますか?"))\n (long-operation\n (send-mail *smtp-server*\n 25\n (mail-to-string)\n *from-mail-adress*\n *to-mail-adress*))\n (message "done...")))\n}}}\n例\n{{{\n(define-key ed::*tw-mode-map* #\sF2 'post-mail)\n}}}
[[mail]]とほぼ同じなのですが、送信先を選んで送るようにして、もし、{{{ToDo}}}が在れば\nタイトルに{{{ToDo}}}を埋め込んで送信する\n{{{\n;send mail\n;;setting\n(setq *from-mail-adress* "送信元")\n(setq *to-mail-adress-list*\n '(\n ("その1" . "送信先メールアドレス")\n ("その2" . "送信先メールアドレス")\n ("その3" . "送信先メールアドレス")\n ("その4" . ("送信先メールアドレス" "送信先メールアドレス" "送信先メールアドレス"))\n ))\n\n(setq *smtp-server* "SMTPサーバ")\n\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n(require "nippo")\n(setq mail-title-todo-list\n '(("!" . "limits")\n ("+" . "+Todo")\n ("-" . "-Memo")\n ("." . ".Done")\n ("~" . "~Reserve")\n ("@" . "@Schedule")))\n\n(defvar *mail-title* nil)\n;title\n(defun mail-title()\n (save-excursion\n (goto-char(point-min))\n (if(eolp)\n (setq *mail-title*\n (read-string "Title: " :default "(none)"))\n (setq *mail-title*\n (buffer-substring(point)\n (progn(goto-eol)(point)))))\n (when(scan-buffer\n "\s\s[[0-9]+-[0-9]+-[0-9]+\s\s]\s\s([!+-@.~]\s\s)" :regexp t)\n (setq *mail-title*\n (concat "["\n (cdr(assoc(match-string 1)\n mail-title-todo-list\n :test 'equal))\n "] " *mail-title*))))\n *mail-title*)\n\n;二行目から本文\n(defun mail-content()\n (save-excursion\n (goto-char(point-min))\n (buffer-substring\n (progn(goto-line 2)(point))\n (point-max))))\n\n(defun select-send-mail-adress()\n (let((name-to-adress\n (completing-read\n "adress: "\n *to-mail-adress-list*\n :case-fold t\n :default (car *to-mail-adress-list*)\n :must-match t)))\n (cdr\n (assoc\n name-to-adress *to-mail-adress-list*\n :test 'equal))))\n\n(defun mail-header(title from-adress to-adress)\n (concat "From: owner <" from-adress ">\sn"\n "Subject: =?ISO-2022-JP?B?"\n (substitute-string\n (si::base64-encode (map-internal-to-jis title))"\sn" "")\n "?=\sn"\n (format nil "Date: ~A~%"\n (format-date-string "%a, %d %b %Y %H:%M:%S %Z"))\n "Content-Type: text/plain; charset=ISO-2022-JP\sn"\n "Mime-Version: 1.0\sn"\n (format nil "X-Yzzy-Version: ~A~%"\n (software-version))\n ;"MeReturn-Path: <" from-adress ">"\n "\sn\sn"))\n\n(defun post-mail()\n (interactive)\n (let((to-adr(select-send-mail-adress))\n (mes (concat(make-sequence\n 'string 60 :initial-element #\s-) "\sn")))\n (when\n (yes-or-no-p "~{~A~A~%~}"\n `("Buffer: " ,(buffer-name(selected-buffer))\n "Adress: " ,(if (listp to-adr)\n (format nil "~{~A ~}~%" to-adr)\n to-adr);,to-adr;str\n "Title: " ,(mail-title)\n ,mes "本文 :\sn"\n ,(mail-content) ""\n ,mes " を送信しますか?"))\n (let((send-content\n (concat\n (mail-header *mail-title*\n *from-mail-adress*\n to-adr)\n (map-internal-to-jis(mail-content)))))\n (long-operation\n (send-mail *smtp-server*\n 25\n send-content\n *from-mail-adress*\n to-adr)\n (message "done..."))))))\n}}}\n送信先を複数に多分対応
| tiddlyspot password:|<<option pasUploadPassword>>|\n| site management:|<<upload http://tw-mode.tiddlyspot.com/store.cgi index.html . . tw-mode>>//(requires tiddlyspot password)//<<br>>[[control panel|http://tw-mode.tiddlyspot.com/controlpanel]], [[download (go offline)|http://tw-mode.tiddlyspot.com/download]]|\n| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|
|SPC|tag member|\n|RET |file open|\n|q |close|
| C-m , Return | ファイルを開く |\n| C-j , {{{C-Return}}} | ファイルを開く |\n| C-n | 次の検索結果 |\n| C-p | 前の検索結果 |\n| SPC | 下にスクロール |\n| C-h ,BS | 上にスクロール |\n| r | 並びを反転 |\n| l | 検索結果を a-z 順に表示|\n| q | 閉じる |\n| d | その行を一つ下げる |\n| u | その行を一つあげる |\n| k | その行を削除 |\n| @ | 連結表示 |\n| a | memo 検索結果を日付順に表示 (反転) |\n| s | 予定 一覧 |\n| T | {{{ToDo}}} 一覧 |\n| n (とりあえず) | 更新日時でソート |\n| 左クリック | ファイルを開く |\n| s | Todo Schedule |\n| + | Todo Todo |\n| - | Todo Memo |\n| . | Todo Done |\n| ~ | Todo Reserve |\n| {{{!}}} | Todo Limit |\n| x | Todo Stop |\n| C-M-s | 英単語で絞り込み |\n
| C-m , Return | ファイルを開く |\n| C-i | 移動 |\n| SPC | 移動 |\n| C-h , BS | 移動 |\n| {{{M-SPC}}} | 移動 |\n| C-s | ログを取り直す |\n| r | memo の検索結果をランダムに表示 |\n| A | memo の検索結果を日付順に表示 |\n| a | memo の検索結果を日付順に表示 (反転) |\n| c | 新しいメモ作成 |\n| q | 閉じる |\n| C-q | Index 終了 |\n| T | {{{ToDo}}} 一覧 |\n| l | 検索結果を a-z 順に表示 |\n| s | 予定 一覧 |\n| i | 更新 |\n| C-c C-s | tw-grep |\n| 右クリック | ファイルを開く |\n| s | Todo Schedule |\n| + | Todo Todo |\n| - | Todo Memo |\n| . | Todo Done |\n| ~ | Todo Reserve |\n| {{{!}}} | Todo Limit |\n| x | Todo Stop |\n| C-c C-q | tw-mode に関係の在るバッファを閉じる |
| C-m , Return | 改行 アクションを実行 |\n| C-j , {{{C-Return}}} | 改行 |\n| C-i , TAB | 移動 |\n| C-c C-v | 同じ階層の File 一覧 |\n| C-c C-m ,{{{C-Returm}}}| Memo Summary |\n| C-c C-i, C-c TAB | Index |\n| C-c C-g | 現在開いている {{{WikiName}}} 0 or region 0< を検索(mark が必要)で grep |\n| C-c C-s | tw-grep|\n| C-c C-t | Table of Contents に移動 |\n| C-c C-n | 現在の buffer をコピーして新しくメモを作る |\n| C-c C-q | tw-mode に関係の在るバッファを閉じる |\n| C-c C-k | *tw-grep-key-file* を補完します |\n| M-→ | 行頭に Space を二つ入れる。|\n| M-← | 行頭の Space を二つ削る。|
| C-m , Return | アクションを実行 file open |\n| C-j , ~C-Return | 改行 アクションを実行 |\n| C-i , TAB | タイトル 移動 |\n| ~M-C-i , ESC TAB | タイトル 移動逆 |\n| SPC | next-page |\n| C-h , BS | previous-page |\n| c | 今日のメモを開く。|\n| q | Summary を閉じる |\n| i | Index |\n| C-c C-s | tw-grep |
デフォルトの動作\n!!Return\n*{{{[[WikiName]]}}} でファイルを開き、履歴をバッファの一行目に書き込む。{{{[[hoge/foo]]}}} の場合は、下の階層に新しくディレクトリーを作り、ファイルを作る。find-file なだけだけど ...\n(動作がおかしくなるでこの場合は Recent なしにした)色々してる内に矛盾が生じてきたのでどうするか考え中\n*{{{[[%Y-%m-%d-%H%M]] }}}はメモ用につかうので色づけはするけどもファイルはメモになる. *tw-memo-format* default: "{{{%Y-%m-%d-%H%M}}}"\n*同一 Directory 内の指定した ~WikiName.Extension(Default: .txt) が在るところのは色を付け、RET でファイルを開く。(改行時 たまに驚く時がある(~T_T))\n*例 \n**{{{[[test]]}}} でファイルを作っている場合 test RET でそのファイルを開く。\n**{{{[[Hoge.Extesion]]}}} は shell-execute で開きます。\n(html 化しようと思っていた頃の残骸になるかもしれない。)\n----\n*{{{[[hoge|http://?]]}}} は IE のお気に入りを開いて path 補完\n**インターネットショートカットで補完\n**{{{[[xyzzy|http://xyzzy]]}}} は shell-execute\n*{{{[[foo|C:/none]]}}} パスがマッチしない場合 Filer を開き path 補完\n**{{{[[hoge|C:/foo]]}}} がマッチしている場合はshell-execute\n**(path@n でその行まで移動)\n*{{{[Name]}}}Return で{{{[Name]}}} まで移動、同じ{{{[Name]}}}なら何でもいい\n\nName\n{{{[Name]}}}\nこんな感じ \nSection もしくは Toc で RET 交互に移動\n*{{{[[index]]:[[memo]]:[[Wiki]]}}} はデフォルトで使っています。\n**{{{[[index]]}}} は同じ階層に在る指定してある拡張子のファイル一覧と、最近メモ(default:50) のタイトルを表示\n*{{{[[memo]]}}} memo Summary 今月の memo 一覧 (最小は月単位)\n*{{{[[Wiki]]}}} ~Wikiname で貯めたメモ一覧\n----\n●おまけ\n実験的に追加したのでいい加減\n*{{{[Make-Toc]}}}\n**Table of Contents を挿入\n*{{{[Refresh]}}}\n** 実行した時に変わった色を元に戻す。\n*{{{[@]}}}\n** todo 用の日付を挿入\n*{{{[?]}}}\n** Return Action の補完\n!!Tab\nTab で ID ~WikiName の在る所を順に移動\nSection 行なら section toc の在る所を順に移動
~/site-lisp に放り込む\n.xyzzy もしくは siteinit.l に\n{{{\n(require "tw-mode")\n}}}\nバイトコンパイルする\n M-x byte-compile-file Return\n ~/site-lisp/tw-mode.l Return\n xyzzy を再起動ダンプし直す。(ダンプファイルを削除 or Ctrl+Shift+xyzzy.exe(short cut)等)\n~/.twiki.l に書く[2]\n例 \n{{{\n(global-set-key '(#\sC-c #\sC-w) 'tw-mode) ;Toggle Mode\n(add-hook '*text-mode-hook* 'tw-mode)\n;キーバインド これは設定してないのでお好きなものを、どうぞ\n(global-set-key '(#\sC-c #\sC-i) 'tw-index);*tw-memo-dir* Default ~/Wiki の Index\n(global-set-key '(#\sC-c #\sn) 'tw-new-file); 新しく Wikifile を作る。\n(global-set-key '(#\sC-c #\sC-c) 'tw-memo); メモを作る。開いていた buffer のパス名が挿入される\n ; 現在作業しているバッファをコピーして新しくメモを作る\n ; (global-set-key '(#\sC-c #\sC-p) 'tw-copy-buffer-memo)\n(setq *tw-base-dir* "~/Wiki/")\n}}}\n==Memo を貯めておく基本のフォルダを作る。\nめんどうだといゆう人は、ここでもう一度再起動してから\n *scartch* にコピーして C-j or ~C-RET==\n=={{{\n(defun tw-make()\n (dolist(x (list *tw-base-dir* *tw-log-dir* *tw-memo-dir*))\n (create-directory x))\n (dolist(x (list *tw-grep-key-file* *tw-todo-file* *tw-title-file*))\n (with-open-file(fw (merge-pathnames x *tw-log-dir*)\n :direction :output\n :if-exists :append\n :if-does-not-exist :create))))\n=>tw-make\n(tw-make)\n=>nil\n}}}==\n==これでMemo を貯めておく基本のフォルダが作られいるはず==\n*勝手に作っちゃうことにしました。\n\n
*tw-toc-insert\n** Table of Contents を挿入({{{[Make-Toc]}}}RET と同じ)\n*tw-tempalte\n** buffer の先頭にテンプレートを挿入。(単なる思いつき)\n*tw-new-file\n** 新しくメモを作る。(多分必要ない)\n*tw-project\n** *tw-memo-dir* 以下に在るファイルを選択し、開く。\n*tw-action-color-clear\n** 色づけされたのをリフレッシュ\n*tw-toc-position\n** Table of Contents に移動\n*tw-memo\n** Memo を書く 1行目を一応タイトルとして tw-index で扱います。\n*tw-memo-summary\n** Memo 一覧(現在は月指定か、年指定しかできない。)\n*tw-summary\n** 現在開いている buffer と同じ階層のメモ一覧\n*tw-index\n** Index buffer ~/Wiki 以下のファイルへのリンク(howm でいゆうとこの howm menu)\n*tw-grep\n** ~/Wiki 以下を grep します。\n*tw-scan-index-make\n**Memo の File,Directory を削除やコピペした場合タイトルや ~ToDo がおかしくなるのでこのコマンドでログを作り直します。{{{[index]}}}\n*tw-copy-buffer-memo\n** 作業中のバッファをメモにコピーします。\n*==tw-kill-all==\n** ==tw-mode に関係あるバッファをすべて閉じます。==\n*tw-insert-index\n** caret の在る場所に{{{ [[WikiName]] }}}一覧を挿入する(これは同じ階層に在る同じ拡張子を挿入するので、あまり必要ない)\n*tw-select-directory\n** メモ溜ディレクトリーを一時的に変更する