Source of Nothingness - バッファ

* Menu

About | Profile | まとめ | オリジナル | xyzzy | あんてな | | buzz

* memo :

現在位置と前と後ろと目標位置との関係を調べて、近いほうから進む?

* xyzzy lisp : ミニバッファの入力にエスケープシーケンス

interactive指定子を作っちゃえば楽に置き換えられるんじゃね?
ってことで、こんな。
(in-package "editor")
(defun interactive-read-string-with-escape-sequence (prompt default history title)
  (list (decode-escape-sequence (read-string prompt :default default :history history) nil)))
(pushnew '(#\w . interactive-read-string-with-escape-sequence)
	 *interactive-specifier-alist* :test #'equal)
(defun interactive-read-regexp-with-escape-sequence (prompt default history title)
  (list (decode-escape-sequence (read-string prompt :default default :history history) t)))
(pushnew '(#\W . interactive-read-regexp-with-escape-sequence)
	 *interactive-specifier-alist* :test #'equal)

;; こんな感じで使う
;; 文字列
(defun search-forward-wes (pattern &optional noerror)
  (interactive "wSearch forward: "
    :default0 *last-search-string* :history0 'search)
  (search-command pattern nil nil (interactive-p) noerror))
;; 正規表現
(defun re-search-forward-wes (regexp &optional noerror)
  (interactive "WRe-search forward: "
    :default0 *last-search-regexp* :history0 'search)
  (search-command regexp nil t (interactive-p) noerror))
(export '(search-forward-wes re-search-forward-wes))
(in-package "user")

* xyzzy : 変数の種類

(ReadMore...)

* xyzzy lisp : clone-buffer

とりあえずこんなところか。
主だったところはsession.lから。
outline-tree2をバッファバーの代わりにしつつ、rename-bufferを良く使う人向け。
もしくは*compilation*バッファとかでうっかりそのまま編集して、undoができず残念な思いをする人向け。
(defun clone-buffer (buffer-name &optional (buffer (selected-buffer)))
  (interactive "sClone Buffer: ")
  (let ((major buffer-mode)
        (minor (mapcan #'(lambda (mode)
                           (let ((var (and (consp mode) (car mode))))
                             (and (symbolp var)
                                  (boundp var)
                                  (symbol-value var)
                                  (list var))))
                       *minor-mode-alist*))
        (locals (mapcar #'(lambda (var)
                            (and (symbolp var)
                                 (local-variable-p var)
                                 (cons var (symbol-value var))))
                        *buffer-info-variable-list*))
        (point (point)))
    (set-buffer (create-new-buffer buffer-name))
    (insert-buffer buffer)
    (funcall major)
    (mapc #'(lambda (f) (and (fboundp f) (funcall f))) minor)
    (mapc #'(lambda (x)
              (when (and (car x) (symbolp (car x)))
                (make-local-variable (car x))
                (set (car x) (cdr x))))
          locals)
    (goto-char point)))

メモ:
undo情報をそっくり写せるとうれしいかも。
(ReadMore...)

* Scrapbook : Oniguruma

http://www.geocities.jp/kosako3/oniguruma/index.html

その2。
対象が文字列ならなんとかなるでしょ。
気がかりは文字コード。
バッファを対象にするのは内部コードとの絡みがあるから厳しいだろうな。

* xyzzy topic : バッファバーの並び順を変える

http://xyzzy.s53.xrea.com/wiki/index.php?tips%2F%A5%D0%A5%C3%A5%D5%A5%A1%A5%D0%A1%BC%A4%CE%CA%C2%A4%D3%BD%E7%A4%F2%CA%D1%A4%A8%A4%EB
(2006-04-12)

* xyzzy topic : outline-tree2, treeview, diff-detail 更新

http://ohkubo.s53.xrea.com/xyzzy/index.html

あの件とかこの件とか。後者については採用感謝です。
(2006-03-30)
(ReadMore...)

* xyzzy lisp : ディレクトリ付きにしてユニークなバッファ名に

機能的にはしょぼしょぼすくりぷとさんと同等。
ひとつ上のディレクトリでやめてしまうみたいだから自分で書いてみた。
(defun buffer-name-with-directory ()
  (let* ((buffer (selected-buffer))
         (name (buffer-name buffer))
         dirs)
    (when (string-match "<[0-9]+>" name)
      (setq dirs (reverse (pathname-directory (get-buffer-file-name buffer))))
      (setq name (format nil "~A/~A" (pop dirs) (file-namestring (get-buffer-file-name buffer))))
      (while (and dirs (dolist (x (buffer-list))
                         (if (string= (buffer-name x) name)
                             (return t))))
        (setq name (format nil "~A/~A" (pop dirs) name)))
      (rename-buffer (abbreviate-display-string name 40) buffer))))
(add-hook '*find-file-hooks* 'buffer-name-with-directory)

* xyzzy topic : bufbar2, popup-key, www-search更新

http://sazasaza.client.jp/xyzzy/
それぞれ変更点は
bufbar2
起動時のファイル周りの処理を改善。delete-buffer と get-next-buffer とでバッファを文字列指定できるように修正。
popup-key
popup-key-add-doc を追加。
www-search
アンインストール方法を変更。
とのこと。

* xyzzy topic : はてダラを使いやすく

http://d.hatena.ne.jp/takef/20060320/1142829588

find-fileバッファを作っても保存するまではファイルができないから、こんな感じでもよさそう。
(defvar *hatedara-directory* "~/hatena")
(defun hatedara ()
  (interactive)
  (find-file (merge-pathnames *hatedara-directory* (format-date-string "%Y-%m-%d.txt"))))

* xyzzy lisp : outline-treeの表示順にnext-bufferとか

(in-package "outline-tree2")
(global-set-key #\C-PageUp #'(lambda ()
                               (interactive)
                               (outline-tree-previous-buffer)
                               (outline-tree-select-node-by-buffer (selected-buffer))))
(global-set-key #\C-PageDown #'(lambda ()
                                 (interactive)
                                 (outline-tree-next-buffer)
                                 (outline-tree-select-node-by-buffer (selected-buffer))))

outline-treeをバッファバーの代わりにしているから、その見た目どおりに移動したい、
ということで、マウスに触る機会を減らすために。
outline-treeは規模が大きいからなかなか読めない(^^;