2013年5月5日日曜日

MakeComment.jsを書き直す

このブログのコメントで、Windows7だとMakeComment.jsで.txt拡張子の一行目を取得できないという報告をいただいたので書き直してみた。
ちなみにMakeComment.jsはMoEで使用する、一行目とファイルパスを対応させたコメントファイルを作成するPPxスクリプトです。

MakeComment.js
//!*script
//カレントディレクトリに一行目とファイルパスを対応させたコメントファイル(00_INDEX.txt)を作成

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

for (var i = 0; i < PPx.EntryAllCount; i++) {
  // サイズが0のファイルとディレクトリは読み込まない
  if (PPx.Entry(i).Size == 0) {
  }
  // 拡張子がtxtとhowmのファイルを読み込む
  else if (PPx.Entry(i).Name.match(/.txt$|.howm$/i)) {
    var entryName = PPx.Entry(i).Name;
    var objItem = currentDir + "\\" + entryName;
    var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
    // ファイルの内容を取得
    objInFile = objFileSys.OpenTextFile(objItem, 1);
    // ファイル名+Tab+一行目の最初二文字~100字を切り取ったもの+改行をstrに代入
    str = entryName + "\t" + objInFile.ReadLine().slice( 2,100 ) + "\n";
    strLine =  strLine + str;
    objInFile.Close();
  }
}

// カレントディレクトリに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();
// F5で更新
PPx.Execute("%K\"@[F5]\"")

Windows7で実際に動くか試したからこれでいけるはず。 だめなら連絡ください。
一行が長いときのため、100字の文字数制限を追加してみました。あとtxtやhowmが大文字(TXTやHOWM)になってたら読み込まなかったみたいなのでそれも直しておいた。たぶんこっちのほうが処理早いので今まで問題なく使えてたひとも差し替えたほうがいいかもです。
けど以前のコードでVistaまでは問題なかったのに、7からは.txtファイルを読み取らなくなるってどういう理屈なんだろう。私、気になります!

2013年5月2日木曜日

実行ファイル用アイコンの作成

あいさつ


アイコンを作成し、それをpy2exeで埋め込むまでの過程のメモです。
今までSETZERを作る時は適当にアイコンエディタでアイコンを作って埋め込んでいたが、Win2kとかだとそれでよくてもVistaでは表示されないようなので、対応するようにしました。そのときに調べたことの記録です。

画像の作成


AzPainterで作成する。キャンバスは320x320で作りました。あとで調整するのでこの大きさは別にどうでもよさげ


アイコンの作成



今まで仕組みをよく知らなかったのだが、アイコンは複数の画像ファイルを束ねたものらしい。大きいアイコンとか小さいアイコンとかで表示分けがされるのは、同じ一つの画像を拡大したり縮小したりしているわけではなく、

Xpまでは
  • 大アイコン 48 × 48
  • 中アイコン 32 × 32
  • 小アイコン 16 × 16
Vistaからは
  • 特大アイコン 256 x 256
  • 中アイコン 48 x 48
  • 中アイコン 32 x 32
  • 小アイコン 16 x 16

と、それぞれに対応した画像がアイコンの中にあらかじめ含まれていて、時と場合に応じて違う画像を表示しているらしいです。ちなみに数値についてはちゃんと確かめたわけではないです。


そこで、画像ファイルからそのようなアイコンファイルを調整して作成するソフトが必要になる。いくつか試して一番よかったのがアイコン ウィザード

ライトタブと縁タブとで設定をし、画像を整形。ライトは40、縁の面取りを30にしました。



そしてアイコンファイルに含めるサイズを選択する。



Vistaに完全に対応するには特大アイコンを入れる必要があるのだろうが、ファイルサイズが数倍になってしまうので割愛。そこで32bitの48 32 16にチェックする…ことでいいはずなのだが、そうするとなぜかVistaでの中サイズアイコンの表示が荒くなってしまう。理由は不明。ただ、これは48よりも大きいアイコンを一つ追加しておけばとりあえずは起こらないようなので、64を追加しチェックを入れる。
あとは完了を押せばiconが作成される。



アイコンの埋め込み


py2exeを使って実行ファイルを作る際、ここで作ったアイコンを埋め込むだけです。

setup.py
import sys
import os

from distutils.core import setup
import py2exe
import setzer_resource

py2exe_options = {
  "compressed": 1,
  "optimize": 2,
  "bundle_files": 3}

setup(
  options = {"py2exe": py2exe_options},
  windows = [{
            "script" : "SETZER.py", "icon_resources": [(1,"py.ico")],

            "name" : setzer_resource.appname,
            "version" : setzer_resource.version,
            "description" : "",
            "company_name" : setzer_resource.copyright,
            "url" : setzer_resource.homepage,
            
            }],
  zipfile = "lib/library.zip")

PPxなら次のようなコマンドを打つ。
CD %1 %: C:\Python27\python.exe setup.py py2exe

を実行する。

2013年4月30日火曜日

SETZER ver0.5公開

久しぶりにSETZER更新しました。 前回の更新から半年以上たってますね。

hoehoesoft - SETZER

SETZERはクリップボード履歴管理ソフト。eClipとClip.netに影響を受けてます。AA貼り付けツールの側面もあるのが特徴。



今までは改行文字を含む文字列、つまり複数行の文字列は保存できませんでしたが、今回のバージョンから保存できるようにしました。元々設計段階では複数行保存に対応する気は無かったが、調べてみると案外簡単にできそうなのでやってみた。



 設定で折り返し無しにもできる。



この更新に伴い、これまでのクリップボード履歴データは使えなくなります。今まではclip.datに一文ずつ履歴を書く、という形式だったのがシリアライズされよくわからないのになる。保存しておきたい場合は別のところに保存してください。
今まで通り複数行の文章は履歴に残したくない、という場合はfilter.txtに"\n"を追加すればいいと思います。

ここしばらくは開発を続けようと思うので、何か要望とかバグとかあれば今のうちに言ってくれると対応する…かもです


ちなみに今回の更新内容は
  • クリップボードの文字列が改行を含むものでも履歴にとれるようにした
  • クリップボードモード時のツールチップ表示を可能にした
  • AAモード時にDeleteキーを押してもAAを削除しない設定を追加
  • ツールチップの余白の大きさを設定可能に
  • ファイル名によってはAAファイルの編集ができないバグを修正
  • clip.datの自動保存を可能にした。クリップボードの中身が変わった瞬間にclip.datを保存
  • タイトルバーのモード表示を非表示可能に
  • アイコンを変更 
  • オプションのその他タブを二つに分けた
  • 起動時フックオフの設定が効いていなかったのを修正

2013年3月21日木曜日

KaTeXのコマンド

KaTeXを使うたびにコマンドを忘れるのでそのメモ

準備


xyzzy + KaTeX - 物理のかぎしっぽ
しょぼしょぼスクリプト - ミニバッファに入ったときIMEをOFFにする

の二つを.xyzzyにコピペ
;; KaTeX必須
(push "D:/bin/xyzzy/site-lisp/katex" *load-path*)
(require "elisp")
(push '("\\.tex$" . elisp::katex-mode) *auto-mode-alist*)
(autoload 'elisp::katex-mode "katex" t)
(setq elisp::tex-command "platex -src")
(setq elisp::dvi2-command "dviout")
(setq elisp::dviprint-command-format "dvipdfmx %s ")

; M-x katex-mode で花鳥を起動
(defun katex-mode()
    (interactive)
    (elisp::katex-mode))

(add-hook 'elisp::katex-mode-hook
               #'(lambda ()
                  (auto-fill-mode nil)))

;(provide "minibuffer")
;(in-package "editor")

(export '(*ime-mode-into-minibuffer*))
(defvar *ime-mode-into-minibuffer* nil)

(defun ime-state-get-and-setoff (bef-buffer file-name)
 (interactive)
 (setq *ime-mode-into-minibuffer* (get-ime-mode)
  )
 (toggle-ime nil)
  )

(defun ime-state-set (bef-buffer file-name)
 (interactive)
 (toggle-ime *ime-mode-into-minibuffer*
  )
  )

(add-hook '*enter-minibuffer-hook* 'ime-state-get-and-setoff)
(add-hook '*exit-minibuffer-hook* 'ime-state-set)

よく使うコマンド


  • 見出し C-c s からsection、subsection
  • 箇条書き C-c b i か C-c b  e
  • コンパイル C-c t j
  • プレビュー C-c t p

テンプレ

\documentclass{jsarticle}
\begin{document}
\title{タイトル}
\author{つかさ}
\maketitle

\tableofcontents

\end{document}

2013年3月3日日曜日

まとめる方法論2パターン

はじめに


メモをためたあとに、それをまとめて文章にする方法論について。テキスト形式でメモをため、それを活用するMemo on the Electronを前提としてます。

ためたメモをカテゴリフォルダに移動し、そこにメモが数十並んでいるとする。それをまとめる方法だが、二パターンあると思っている。

一つが1st2nd法。似たようなメモ同士を統合していくことで、徐々にフォルダ内のメモを洗練したものにしていく方法。このようにして、十個以下のまとまったメモのみが残った状態にして、それを元にして文章を作る。

もう一つが修正法。メモのうちから一つ、核となるものを決め、それの修正を、メモを利用して繰り返すことで、徐々に完成させる方法。

方法その1-1st2nd


メモから新たにメモを作る。それを繰り返すことで、内容を洗練されたものにしていく。
メモが十個なり数十個なり雑多にたまっているとしして、それらを閲覧し、メモを取りながら読んでいく。
そして似たようなものを見つけ、それを統合する。そうして、最初にあった数十個のメモを1stとして、二段階目のメモ2ndを作成する。2ndに反映された1stは捨てる。
こうすれば、先のメモ群はより洗練された、少数のメモ群に変わることになる。次はこれを元にしてまた先と同じ作業。3rd、4thとこれを数個のまとまりを持ったものになるまで繰り返し、最終的に残った数個のメモを元にして文章を作る。

1st2ndで必要になる技法


メモを見てメモをかく技法が必要になる。PCでやるなら、メモの閲覧についてはMoEでやってる方法がそのまま使える。タイトル表示と連動ビューですね。それを横目にしながら個々の2ndを作成する。もしメモファイルの数が多すぎて一度に似たようなメモを把握するのが無理、という場合は、一時メモ用のソフト(CatMemoNoteとか)を開き、眺めながら箇条書きで思いついたことをメモっていき、その後でそのメモを元にして2ndを作成する、というのでもいい。
ディスプレイが小さい場合は、PPvの透過+最前面化、を利用すると捗る。




方法その2-修正法


メモのうちから核となりそうな文章を取り出し、それを修正、肉付けしていくことで、徐々に完成型に持っていく方法。
まず最初に、メモのうちから全体像をとらえていそうな文章を探す。それに、ほかのメモをざっと眺めて欠けている部分を適当にコピペで継ぎ足した後に、プリントアウトする。
次はそれを修正。欠けている部分を欄外に書き足し、不要な箇所を削り、かぶっている箇所を消し、意味が通るように入れ替えをする。書いている途中で思いついたけれどもすぐに文章に反映できないものはメモっておき、後にそのメモ群にデータ化して入れる。
ついで、そのプリントの書き込みを元のデータに反映。そしてまたプリントアウト。修正。を繰り返す。
これをやっているうちに、徐々に内容がまとまり、個々の主張、ソースが明確になるはず。ここで、必要に応じてメモを、その個々の主張に関係していないかどうか探し、使えそうなものを取り込んでいく。取り込んだものは捨て、またすでに文章において考察済みと判明したメモも捨てる。

修正法の技法


核となる文章をどうやって作成するかが問題になる。
ある程度短い場合はエディタの印刷。僕は二段組でやっている。ある程度文章が長くなり、見出しや構成などで複雑になればワープロソフトに移すというのがいい。TeXやワード、一太郎などが選択肢となる。



あと考える必要があるのはバージョン管理。僕はファイル名の末尾に連番を振っていた。

どちらがいいか


作りたい文章の規模によって変えるのがいいと思う。ブログだとかレポートだとか本の感想だとかについては、1st2ndが適している。A4用紙一枚に収まる程度だろうか。
それ以上の規模の場合には、修正法のほうが適切。構成がややこしくなって見出しとかそれぞれの主張ごとのつながりとか考える必要があると、こちらのほうがやりやすい。
ただこの両者の方法は特に矛盾しないので、併用してもいいとは思う。

2013年2月24日日曜日

ファイルの内容をクリップボードにコピー

PPxでカーソル下のファイルの内容をコピーする方法です。 今まではAHKを使ってやってましたが(ファイルの内容をクリップボードにコピー - つかさのほえほえ日記)、それをPPxのScript Moduleを利用してできるようにします。

ファイルの内容をコピーするスクリプト


カーソル上のファイルの内容を読み出し、クリップボードにコピーするスクリプトです。

ClipFile.js
//!*script

var objItem = PPx.Extract("%FCD");
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
objInFile = objFileSys.OpenTextFile(objItem, 1);

PPx.Clipboard = objInFile.ReadAll();
objInFile.Close();

ファイルの内容を追加コピーするスクリプト


カーソル上のファイルの内容を読み出し、クリップボードに追加コピーするスクリプトです。

ClipFileAdd.js
//!*script

var objItem = PPx.Extract("%FCD");
var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
objInFile = objFileSys.OpenTextFile(objItem, 1);

PPx.Clipboard = PPx.Clipboard + "\n" + objInFile.ReadAll();
objInFile.Close();

マークしたファイルの内容をコピーするスクリプト

マークした順番に、マークしたファイルの内容をクリップボードにコピーします。

ClipMarkFile.js
//!*script
 
if (PPx.EntryFirstMark == 0){
  var objItem = PPx.Extract("%FCD");
  var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
  objInFile = objFileSys.OpenTextFile(objItem, 1);

  PPx.Clipboard = objInFile.ReadAll();
  objInFile.Close();
  
} else {
  strLine = ""
  while(true){
    var dir = PPx.Extract('%1');
    var entryName = PPx.EntryName;
    var objItem = dir + "\\" + entryName;
    
    var objFileSys = new ActiveXObject("Scripting.FileSystemObject");
    objInFile = objFileSys.OpenTextFile(objItem, 1);
    strLine = strLine + objInFile.ReadAll() + "\n";
    objInFile.Close();

    if(PPx.EntryNextMark == 0) break;
  }
  PPx.Clipboard = strLine
}

メニュー形式で登録してみる

パスのコピーなどとあわせて、メニュー形式で登録してます。僕はShift+Nに割り振っています。

KC_main = { ; PPcメイン窓
\N ,%M_ClipPath,C
}


M_ClipPath = { ** comment **
CopyFileName = *cliptext %R
Copy&DirName = *cliptext %1
Copy&FileName(拡張子無し) = *cliptext %Y
CopyFilePath = *cliptext %FCD
ファイルの内容をクリップボードにコピー = *script %0\Script\ClipFile.js
ファイルの内容をクリップボードに追加コピー = *script %0\Script\ClipFileAdd.js
マークしたファイルの内容をクリップボードにコピー = *script %0\Script\ClipMarkFile.js
}

2013年2月2日土曜日

AAの連続投稿

SETZERでAAを連続投稿したいときの方法。

その他タブの「ウィンドウ表示時のモードを固定」と「AA貼り付け時に入力欄をクリア」のチェックをはずす。



これで、AAを貼り付けた後も入力欄をクリアせず、またカーソル位置も同じままで再表示することができる。



同じ系統のAAを連投したいときや、同じAAを何度も貼りたいときもこれで安心ですね!