ラベル ネタ の投稿を表示しています。 すべての投稿を表示
ラベル ネタ の投稿を表示しています。 すべての投稿を表示

2011年5月28日土曜日

めんまフォント

アニメ「あの日見た花の名前を僕達はまだ知らない。」の公式ページで配布されている「めんまフォント」が気になったのでインストールしてみた。…が英数字や記号の一部が表示されないおかげでかゆうま(初代バイオハザード:飼育員の日記)に見えてしまう件。
ちなみにxyzzyでは利用できないみたい。同じTrueTypeフォントのARISAKAフォントやうずらフォントは使えるのになぜ?

2008年11月30日日曜日

xyzzy を再起動させる

新しいネタを提供する気力がないので手元にある既存のものを。

(defun reboot-xyzzy (&optional cleanup)
  "xyzzyを再起動する."
  (interactive "P")
  ;; ついでに初期化する
  (when cleanup
    (delete-file (si:dump-image-path) :if-does-not-exist :skip)
    (let ((siteinit (find-load-path "siteinit")))
      (and siteinit
           (string-match "\\.lc$" siteinit)
           (delete-file siteinit))))
  (cond ((modified-buffer-exist-p)
         (error "保存をしよう、な!"))
        ((running-process-exist-p)
         (error "サブプロセスが走ってるで")))
  (and (call-process (merge-pathnames "xyzzy.exe" (si:system-root))
                     ;; 環境変数の設定
                     :environ `(("XYZZYHOME" . ,(si:system-root))
                                ;; 設定ファイル (xyzzy.ini等) のディレクトリ
                                ("XYZZYCONFIGPATH" . ,(user-config-path)))
                     :no-std-handles t
                     :exec-directory (si:system-root)
                     :show t
                     :wait nil)
       (kill-xyzzy)))

(defun modified-buffer-exist-p ()
  "保存する必要のあるバッファがあるか."
  (remove-if-not #'need-buffer-save-p (buffer-list)))

(defun running-process-exist-p ()
  "動作中のプロセスがあるか."
  (some #'(lambda (pid)
            (eq (process-status pid) :run))
        (process-list)))

使い方:

  • 再起動させる M-x: reboot-xyzzy

  • 再起動のついでに、ダンプファイルと siteinit.lc を削除して再ダンプさせるようにする。 C-u M-x: reboot-xyzzy

注意:

保存していないバッファがあったりサブプロセスが走っていたりすると、「いいの?」って質問されて止まっちゃうのでそこはエラーにしてます。保存関係は (save-some-buffers) 使ってもいいかも。

あと、自分は xyzzy.ini ファイルを $XYZZY/usr/ ディレクトリ直下に置いてあるで、普通に使ってる人は ("XYZZYCONFIGPATH" . ,(user-config-path)) の部分を削除して下さい。

紙一重で動いてるスクリプトな気がするのでご使用は各自の責任でお願いします。

2008年10月23日木曜日

elispでarglist関数っぽいの

「xyzzyでarglist関数っぽいの 」[その1][その2] のおまけ。

何でこんなの作ったんだろう…

;;; for Emacs Lisp
(defun arglist (def)
  (unless (keymapp def)
    (let ((argstr (car (help-split-fundoc (documentation def) def))))
      (if argstr
          (format "%s" (cdr (car (read-from-string argstr))))
        (help-function-arglist def)))))

(arglist 'arglist)        ; (def)
(arglist 'lambda)         ; "(ARGS [DOCSTRING] [INTERACTIVE] BODY)"
(arglist 'if)             ; "(COND THEN ELSE...)"
(arglist 'ctl-x-4-prefix) ; nil

参考にした関数: describe-function-1 (lisp/help-fns.el)

elisp では関数定義の引数とドキュメントに書かれている引数が異なる場合があるので、そのときは後者を優先します。ややこしいなあ。

(help-function-arglist 'lambda)
=> (&rest cdr)
(car (help-split-fundoc (documentation 'lambda) 'lambda))
=> "(lambda ARGS [DOCSTRING] [INTERACTIVE] BODY)"

2008-10-25T00:40:33+09:00 [追記]

read-from-whole-string 関数 (lisp/thingatpt.el ファイルで定義されている) は標準で使えるものでないので read-from-string に変更。