xyzzy
Top Page > Tips > Preference


編集関係

保持する削除バッファの数

siteinit.l(追加)
(setq *kill-ring-max* [数値])

commentary

 削除バッファに保持されるテキストの数を指定します。デフォルトは16です。

対応する括弧に飛ばない

siteinit.l(追加)
(setq *show-matched-parenthesis* nil)

commentary

 閉じ括弧を入力した時にいちいち対応する括弧を表示するのが嫌な人は、このように設定しましょう。

デフォルトのモード

siteinit.l(追加)
(setq *default-buffer-mode* '[モード])
siteinit.l(追加)
(setq *default-buffer-mode* 'text-mode)

commentary

 ファイルを指定せずにxyzzyを起動したときのモードを*default-buffer-mode*に代入します。
 ただし、起動直後は必ずLisp Interactionモードで、新しくバッファを作成したときのモードがここで指定したものになります。

関連づけ

siteinit.l(追加)
(pushnew '("[拡張子]" . [モード]) *auto-mode-alist* :test 'equal)
for example...
(pushnew '("\\.xyzzy$" . lisp-mode) *auto-mode-alist* :test 'equal)

 ある拡張子のファイルを開くときにどのモードで開くかを設定します。[拡張子]は正規表現で指定します。

ファイル操作関係

insert-fileC-x iの初期ディレクトリを固定
 →Written by Nekoya

insert2.l(新規作成)
(provide "insert2")

(in-package "editor")

(export '(insert-file2 *default-insert-file-directory*))

(defvar *default-insert-file-directory* nil)

(defun insert-file2 (filename &optional encoding)
  (interactive "*fInsert file: \n0zEncoding: " :title0 "Insert file"
        :default0 *default-insert-file-directory*)
  (let ((*expected-fileio-encoding*
          (or encoding *expected-fileio-encoding*)))
    (declare (special *expected-fileio-encoding*))
    (setq filename (namestring filename))
    (when (special-file-p filename)
      (error "~aはデバイスファイルです" filename))
    (when (file-directory-p filename)
      (error "~aはディレクトリです" filename))
    (unless (and (valid-path-p filename)
         (file-exist-p filename))
      (error "~a\nファイルまたはディレクトリが見つかりません" filename))
    (insert-file-contents filename)
  )
)
siteinit.l(追加)
(load-library "insert2")
(global-set-key #\[キー] 'insert-file2)
for example...
(load-library "insert2")
(global-set-key #\M-i 'insert-file2)

commentary

 insert2.lの中で設定した名前を、load-libraryで呼び出します。
 カレントディレクトリからinsert-fileを起動したいこともあるでしょうから、ここではinsert-file2を別のキーM-iに設定しています。

.xyzzy(追加)
(setq *default-insert-file-directory* "[ディレクトリ]")
for example...
(setq *default-insert-file-directory* "d:/home/temporary/")

commentary

 insert2.lで指定した変数*default-insert-file-directory*にディレクトリを代入します。
 設定を変更することも多いと思うので、ダンプファイルを消す必要のあるsiteinit.lより.xyzzyに記述した方がいいでしょう。

find-file(C-x C-f)の後F7で.xyzzy、F8でsiteinit.lをロード
 →MailingList 02669

siteinit.l(追加)
(define-key minibuffer-local-completion-map #\F7
    #'(lambda () (interactive)
        (delete-region (point-min) (point-max))
        (insert (concat
            (merge-pathnames ".xyzzy" (si:system-root))))))

(define-key minibuffer-local-completion-map #\F8
    #'(lambda () (interactive)
        (delete-region (point-min) (point-max))
        (insert (concat
          (merge-pathnames "site-lisp" (si:system-root)) "/siteinit.l"))))

siteinit.lのバイトコンパイル+ダンプファイル削除
 →Witten by Toy

siteinitl.(追加)
(defun compile-and-delete-dump-file ()
  (interactive)
  (and (find-buffer "siteinit.l")
       (eval-buffer "siteinit.l"))
  (byte-compile-file
   (concat (si:system-root) "site-lisp/siteinit.l"))
  (let ((dumpfile
         (concat (si:system-root) "xyzzy.w"
                 (case (os-platform)
                   (windows-2000 "2k")
                   (windows-nt "nt")
                   (windows-98 "98")
                   (windows-95 "95")
                   (t "nt")))))
    (and (file-exist-p dumpfile)
         (delete-file dumpfile))))
(global-set-key '(#\C-c #\b) 'compile-and-delete-dump-file)

 siteinit.lをバイトコンパイルした後はダンプファイルを削除するのが通常なので、これを一連の動作としてC-c bに割り当てています。新しい環境を入れる時は特に便利なんじゃないかと。

画面表示・バッファ関係

バッファ移動をツールバー表示順にする

siteinit.l(追加)
(setq *next-buffer-in-tab-order* t)

commentary

 標準では、next-bufferprevious-bufferで移動するバッファの順序がツールバーのバッファ順と同じではないので、同じにするためにこのように設定します。

タスクバー・モード行の表示

siteinit.l(追加)
(setq-default mode-line-format [フォーマット]) ; モードライン
(setq-default title-bar-format [フォーマット]) ; タイトルバー
for example...
(setq-default title-bar-format "%b - %p")
(setq-default mode-line-format "-%*- %b (%M) [%k:%l] %f [%i]")

フォーマット

ファイル・バッファ名関係
%b
バッファ名
%f
File: ファイル名
%#f
ファイル名
%F
File:ファイル名(ファイル名がなければバッファ名)
%#F
ファイル名(ファイル名がなければバッファ名)
現在の状態
%*
変更あり:**、書込禁止:%-、変更あり・書込禁止:%*、それ以外:--
%#*
変更あり:*、 変更なし:空白
%r
書込可:空白、書込禁止:%
%#r
書込可:空白、書込禁止:%、不完全バッファ:#
%M
モード(マイナーモード含む)
%m
モード
%k
エンコーディング
%l
改行コード
%i
IMEの状態。mode-line-formatのみ。
%P
カーソル位置。mode-line-formatのみ。
プログラム・OS
%h
ホスト名
%#h
@ホスト名
%p
プログラム名
%v
バージョン

ステータスバーの表示

siteinit.l(追加)
(setq *status-bar-format* "[フォーマット]")

フォーマット

t
月/日 時:分
T
月/日(曜日) 時:分
p
カーソルのある行:桁
c
カーソル位置の文字コード(内部コード)
u
カーソル位置の文字コード(ユニコード)

特殊バッファを削除してウィンドウを1つにする
 →Witten by xyzzy thread No.4 - 400

siteinit.l(追加)
(defun cleanup-window()
  (interactive)
  (let ((bufl (buffer-list)) buf name)
    (loop
      (setq buf (pop bufl))
      (if (null buf) (return nil))
      (setq name (buffer-name buf))
      (if (member-if
           #'(lambda (str) (string= name str))
           '("[バッファ1]" "[バッファ2]"
             "[バッファ3]" "[バッファ4]" …
            ))
          (delete-buffer buf)))
    (delete-other-windows)))
(global-set-key #\S-F11 'cleanup-window)

commentary

 Grep、Help、補完リスト(初期設定状態)を使うと、"*grep*" "*Help*" "*Completion*"バッファが作られ、ウィンドウが2つに分割されます。Grep結果などを見終わった後もこれらのバッファは残り、ウィンドウもそのままです。これを消すには、そのバッファでC-x 0としてウィンドウを閉じてからバッファを閉じる必要があります。しかし、これは面倒なので、1キーでこれらの動作ができるように設定します。ここではS-F11に割り当てています。
 消したいバッファはこんな感じで羅列してください。

for example...
"*grep*" "*Help*" "*Completion*" "*Shell output*"
"*Calendar*" "*PickupPatternShow*" "*dictionary*"
"*Buffer List*" "*XML Command error*"
"*buf2html: HTML*" "buf2html: CSS*" "*output*"

ミニバッファの補完候補リストをチップヘルプにする

siteinit.l(追加)
(setq *print-completion-list-hook*
'(lambda (list prefix &optional string)
(popup-string (format nil "Possible completions are ~D
  items:\n~{\n~A~}" (length list) list) (point))))

commentary

 ミニバッファでTabキーを押すと、現在まで入力している文字に続くコマンド・キーワードなどを表示してくれます。しかし、これを表示するたびにいちいち"*Completion*"バッファが開くので後の処理が面倒です。
 この設定を追加すると、補完リストはチップヘルプで表示されるようになります。

▲トップページに戻る▲

編集

削除バッファ

括弧に飛ばない

デフォルトのモード

関連づけ

ファイル操作

insert-file

find-file

siteinit.lコンパイル+ダンプファイル削除

表示・バッファ

バッファ移動順

タスクバー・モード行

ステータスバー

ウィンドウ整理

補完候補リスト