mapcar で perform-string を使って文字列置換しようと思ってかなりハマったのでメモって置きます。
ダメな例 (mapcar '(lambda (s) (goto-char (point-min)) (perform-replace s "" nil t t nil)) '("foo[0-9]" "bar[0-9]")) これだと “foo1 bar2” は削除できるけど “bar2” と2個めの検索要素だけしかないときに削除できない
良い例 (mapcar '(lambda (s) (goto-char (point-min)) (perform-replace s "" nil t t t)) '("foo[0-9]" "bar[0-9]")) perform-replaceの最後の引数NOERRORをtに設定しておけば該当する文字列がなくてもスムーズに次に進んでくれます。
機能 xyzzyで”wŏ shì rìbĕn rén” などが、そこそこ簡単に打てるようになります。
インストール方法 NetInstallerで以下のパッケージを追加して、”ton input”をインストールして下さい。
http://ironsand.net/xyzzy/packages.l
再起動すると有効になってます。
再起動せずに有効にできそうですが、よくわかりませんでした。
NetInstallerが何かわからない人はこちらを読んでください。
http://xyzzy.s53.xrea.com/wiki/index.php?QuickTour%2Fext%2FNetInstaller
使い方 C-F9 (Controlキーを押しながらF9キーを押す)で Ton Input モードに入ります。
“wo” を打った時点で数字の”3″を押すと “wŏ” になります。
1,2,3,4 でそれぞれの声調に、”0″で声調無しに変化します。
“xian” の最後でキーを押せば一番最後に入力された母音の “a” に声調がつきます。
Ton Input モードを終了させるには、もう一度 C-F9 を入力します。
注意点 Ton Input モード中は数字(0~4)を入力しようとしても入りません。
謝辞 ありがとうございます。 ありがとうございます。
マイナーモードの作り方 [silog]
http://white.s151.xrea.com/wiki/index.php?memo%2Fxyzzy%2Fminor-mode
netinstaller 対応メモ
http://d.hatena.ne.jp/bowbow99/20090710/1247182818
そして、lispでわからないことを教えてくれた2chのxyzzyの名無しさん達がいなければ途中で作るのを諦めてたと思います。 みなさんに感謝を。
xyzzy の lisp の関数 backward-word, previous-word, forward-word, next-word の動作の違いがよくわからなかったので、試してみた。
黒背景白文字が移動前のカーソルの位置で、灰色背景太字が移動後の場所。
backward-word
123 456 789
123456 789
123 456 789
previous-word
123 456 789
123456 789
123 456 789
forward-word
123456 789
123456789
123 456789
next-word
123 456 789
123456 789
123 456 789
backward-word と previous-word は同じ動作で forward-word と next-word は動作が異なるらしい。 あってんのかな、これ。
Xyzzy Wiki の [ソースからビルドしてみる3][1] を参考に xyzzy をソースからビルドしてみました。 ファイルを取ってきたり、めんどくさいことが多かったので以下のステップでできるように簡略化。
[xyzzysrc-0.2.2.235-pack][2]
これをダウンロードしてあとは01README.txtを見てください。
1 Microsoft Visual C++ 2008 Express Edition インストール
2 env.vbs を叩く (環境変数のセットとafxres.hのコピー)
3 cd xyzzy/src
4 nmake (デバッグ版は nmake CFG=d)
5 ぽけーと待つ
6 できあがり
以上です。 何かおかしいところあったら連絡ださい。 俺は何もわかっていませんので。
Unicode Consortium のファイルも同封してますが、ライセンスの確認はとってます。
2011/05/28追記
2chで指摘されて気づいたのですが、env.vbs で c:\Program Files\ 配下にファイルの移動を行ってるので UAC が入っているとエラーになります。 UACを一時的に切ってenv.vbs を実行してください。
一度実行してしまえば次回以降ビルドするときにはUAC がオンでも問題ありません。
Xyzzy上で新規作成した javascript とか ruby のバッファに毎回モード設定をするのがめんどくさかったので書いた。 siteinit.l か ~/.xyzzy のどこかに貼りつけて使ってください。
※同じ拡張子に複数のモードが紐付けられていると、古い方に設定されるようになっていたので修正;ファイル保存時に拡張子をチェックして適切なモードに変更する。 ;リネーム時にしたかったけど、hookが用意されてないので断念。 (defun set-buffer-mode () (block sbm (mapcar (lambda (l) (when (string-matchp (car l) (get-buffer-file-name)) (funcall (cdr l)) (return-from sbm)) ) *auto-mode-alist*))) (add-hook ‘*after-save-buffer-hook* ‘set-buffer-mode)
テキスト形式でUMLが書けるPlantUML PlantUMLはテキスト形式でUMLを記述して画像に出力できるオープンソースのソフトウェアです。 UMLが書けるフリーソフトはいくつかありますが、テキストベースで記述できるのは大変ありがたいですね。
PlantUMLの具体例 サンプルをPlantUMLのサイト内から引用します。
http://plantuml.sourceforge.net/classes.html
[][1] こんなUMLが以下の記述で作れちゃいます。@startuml img/classes04.png abstract class AbstractList abstract AbstractCollection interface List interface Collection List <|– AbstractList Collection <|– AbstractCollection Collection <|- List AbstractCollection <|- AbstractList AbstractList <|– ArrayList ArrayList : Object[] elementData ArrayList : size() enum TimeUnit TimeUnit : DAYS TimeUnit : HOURS TimeUnit : MINUTES @enduml
PlantUMLのインストール http://plantuml.sourceforge.net/download.html
から plantuml.jar をダウンロードしてください。
plantumlの実行にはJavaが必要になりますので、もしJavaがインストールされていなければ
http://www.java.com/ja/download/
からインストールを行ってください。
“Sequence Diagram” 以外の画像の出力、つまり普通に使うのであれば Graphviz もインストールする必要があります。
http://graphviz.org/Download_windows.php
からダウンロードしてインストールしてください。
以上でインストールは終了です。
xyzzyからPlantUMLを使う方法 さて、次は以下のコードを siteinit.
xyzzyから直接javascriptを使う 今回の記事はRhinoのインストールが行われてる事と xyzzy で jscript-mode がインストールされている事が前提条件になります。 RhinoのWindowsでのインストール方法については前回の記事『[Windows(cygwin+zsh)環境でRhinoを使う][1]』を参考にしてください。 今回の記事の設定を行うと xyzzy から直接Rhinoを呼び出して下の画像のように簡単なスクリプトを気軽に書けるようになります。
[][2]
下記のlispはruby-modeから引っ張ってきて少し修正を加えたもので、これを ~/.xyzzy や siteinitl. に貼りつければjscript-mode で C-c C-x すれば現在編集中のバッファの javascript が実行されます。
;;jscript-mode(for Rhino) (setf \*js-prog\* "java org.mozilla.javascript.tools.shell.Main") (setf \*js-classpath\* "X:/sugarsync/bin/rhino1\_7R2/js.jar") (defun js-run-script-immediate () (interactive) (js-run "")) (defun js-run (args) (let ((tempfile (make-temp-file-name "\_\_temp\_" "js" (default-directory)))) (write-file tempfile t nil (buffer-fileio-encoding) (buffer-eol-code)) (command-execution (concat \*js-prog\* " -f \"" tempfile "\" " args)) (delete-file tempfile :if-does-not-exist :skip))) (defun command-execution (command) (interactive "