しょぼしょぼすくりぷと xyzzy > カスタマイズ > siteinit.l と.xyzzyの設定例

siteinit.l と.xyzzyの設定例

自分の siteinit.l と.xyzzyの設定

;;;----------------------------------------------------
;;; library
;;;----------------------------------------------------

;インクリメンタルサーチの導入
(require "isearch")
(load-library "isearch-deco.l")

;dynamic abbreviation
(require "dabbrev") 
(global-set-key #\\M-/ 'dabbrev-expand)

;リージョン範囲に色つけ
(require "region-hilight")
(global-set-key #\\C-@ 'region-hilight)

;html+  のモード設定
(export 'ed::html+-mode "ed")
(autoload 'html+-mode "html+-mode" t)
(pushnew '("\\\\.s?html?$" . html+-mode) *auto-mode-alist* :test 'equal)

;マウスジェスチャー設定
(load-library "mouse-action.l")
(setq *mouse-action-list*
      '(("→" "次のバッファ" next-buffer)
        ("←" "前のバッファ" previous-buffer)
        ("↓→" "タブを閉じる" delete-current-buffer-force)
        ("→←" "split-window" split-window)
        ("↓↑" "split-window" split-window-vertically)
        ("→←→←" "保存" save-buffer)

        ("←→" "共通設定" option-property-sheet)
        ("↑↓" "全て選択(A)" selection-whole-buffer) ;A文字のイメージ
        ("←↓→" "Copy Selection(C)" copy-selection-to-clipboard);C文字のイメージ
        ("↑→↓←" "Paste (P)" paste-from-clipboard);P文字のイメージ
        ("↑↓↑↓" "Memo (M)" memo-start);M文字のイメージ、独自関数
        ("←↑→↓←" "エクスプローラ(O)" open-directory-where-current-buffer-file-be) ;O文字のイメージ,独自関数
        ("←↓→↑←" "Grep(G)" grep-dialog);G文字のイメージ
  ))

;カッコ()[]に色つけ
(require "paren")
(turn-on-global-paren)
(setq-default *paren-attribute* '(:background 5))
(setq-default *paren-paren-attribute* '(:background 13))
(setq-default *paren-invalid-attribute* '(:bold t :background 9))


;lisp reference popup
(require "ldoc")
(turn-on-ldoc)

;sh mode編集用
(load-library "bash-mode.l")
(pushnew '("\.sh$" . bash-mode) *auto-mode-alist* :test 'equal)

;静的補完語も 動的補完と一緒(先)に補完
;(load-library "abbrev-complition")
(global-set-key '(#\C-x #\') 'completion-abbreve-table)
(setq *do-expand-after-complition* t)
(setq *do-expand-all-in-abbrev-complition :all)


;;;----------------------------------------------------
;;; setting
;;;----------------------------------------------------

3つのフォーマットについては、xyzzy 更新履歴:Version 0.2.1.153参照
(各バーのフォーマットについては 黒い羽根さん)がわかりやすいです。
;タイトルバー  
(setq-default title-bar-format "( %b ) %f %p %v%#h ")

;モードライン設定
(setq-default mode-line-format "[%i] %* %b (%M) [%k:%l] %P %f")

;ステータスバー
(setq *status-bar-format* "cupT")
;バッファー オーダ(順序)と next-bufferを合わせる (setq *next-buffer-in-tab-order* t) ;日付挿入フォーマットの変更 (setq *date-formats* '("%g%#e年%#m月%#d日 %v曜日")) (pushnew "%A, %d %B %Y %H:%M:%S %z" *date-formats*) (pushnew "%Y/%m/%d(%v) %H:%M" *date-formats*) (pushnew "(%Y/%m/%d)" *date-formats*) (pushnew "%m/%d(%v)" *date-formats*) ;静的補完ファイルの読み込みと保存 (read-abbrev-file) ;(add-hook '*query-kill-buffer-hook* 'write-abbrev-file) ;Version 0.2.1.194 ~/.abbrev_defsを読み込んだ場合は、勝手に保存するようにした。 ;;;---------------------------------------------------- ;;; function & key ;;;---------------------------------------------------- ;キー設定 (global-set-key #\\C-z 'undo) (global-set-key #\\M-% 'query-replace) (defun kill-whole-line (&optional lines) (interactive "*p") (kill-line (cond (lines lines) ((bolp) 1)))) (global-set-key #\\M-k 'kill-whole-line) (global-set-key #\\End 'end-of-line) ;基本は(goto-virtual-bol)のように前に行くが、0カラム目であれば ;インデントの空白をスキップする。 ;MSの VisualStudioや ExcelのVBA環境のように (defun goto-virtual-indent-bol () (interactive) (if (= 0 (current-column)) (scan-buffer "[^\n \t ]" :regexp t) (goto-virtual-bol))) (global-set-key #\C-a 'goto-virtual-indent-bol) ;右上に バツボタン をつけて、マウスでバッファを閉じられるようにする ;Version 0.2.1.180 (add-hook '*init-app-menus-hook* #'(lambda () (add-menu-item *app-menu* 'close-box :close-box #'kill-selected-buffer))) ;そのままバッファ消去 (defun delete-current-buffer-force () (interactive) "カレントバッファーを有無をいわさず消去" (if (selected-buffer) (delete-buffer (selected-buffer)) (message "失敗してもうた") )) ;リージョン設定 (defun mark-hole-buffer () "buffer 全体に リージョンを設定" (interactive) (goto-char (point-min)) (set-mark) (goto-char (point-max)) ) ;C-k の行頭操作(行末処理)を emacsライクに 改行も含める。 (defvar *kill-whole-line* t) (defun emacs-kill-line (&optional lines) (interactive "*p") (kill-line (cond (lines lines) ((eobp) (message "end-of-buffer") (return-from emacs-kill-line nil)) ((or (looking-at "[ \\t]*$") (and *kill-whole-line* (bolp))) 1)))) (global-set-key #\\C-k 'emacs-kill-line) ;開いているファイルのバッファを開く (defun open-directory-where-buffer-file-be (&optional buffer-name) (interactive) (let (b-f-name d-name) (if buffer-name (and (setq b-f-name (get-buffer-file-name buffer-name)) (setq d-name (directory-namestring b-f-name))) (setq d-name (read-directory-name "open direcory: " &key (get-buffer-file-name )))) (shell-execute d-name) ) ) ;;scratch の保存 ;; *scratch* を終了時に保存 ;; wikiより (add-hook '*kill-xyzzy-hook* #'(lambda () (save-excursion (set-buffer (find-buffer "*scratch*")) (write-file "~/scratch")))) ;; *scratch* を起動時にロード (add-hook '*post-startup-hook* #'(lambda () (save-excursion (set-buffer (find-buffer "*scratch*")) (insert-file-contents "~/scratch" t)))) ;注意!:このままだと、バッファが消えたとき復活ができないし、Undoも無いので消えるリスクは高いです。 ;; C-x C-f 時にショートカットで固定文字列を挿入 ; by masahito henmi [xyzzy:02669] ;例では C-x C-f のときさらに C-s で ~xyzzy/site-lisp/ を挿入 ;C-s の代わりによく編集するファイルを F1 から順にファンクションキーに登録しておくと便利 ;(F1 に .xyzzy,F2 に siteinit.l とか) ; C-l(L) C-1 C-2 C-s (define-key minibuffer-local-completion-map #\C-s #'(lambda () (interactive) (replace-directory-path-only (concat (merge-pathnames "site-lisp" (si:system-root)) "/")))) (define-key minibuffer-local-completion-map #\C-k #'kill-line)' ;C-x C-wでrenameして上書き保存(一時的に別名でファイルを作成するのではなく) (defun emacs-write-file (filename) (interactive "FWrite file: " :title0 "Write File") (and (rename filename) (save-buffer))) (define-key ctl-x-map #\C-w 'emacs-write-file)

自分の siteinit.l と.xyzzyの設定 ちょっと抜粋

精査が追いついていないなぁ

(setq-default mode-line-format "%p:<%*:%#r:%i> (%M) [%k:%l]  %P %#F")



;補完はpopupにする。
(setq *popup-completion-list-default* :always);:never


(setq *auto-mode-alist* (append *auto-mode-alist* '((".xyzzy" . lisp-interaction-mode))))


; Version 0.2.2.215 で改行文字などを表示させる方法
(setq-default display-newline-char #\downwards_arrow_with_tip_leftwards)
(setq-default display-first-tab-char #\rightwards_arrow_to_bar)
(setq-default display-rest-tab-char t)
(setq-default display-rest-tab-char #\.)

; セレクションを上書きして貼り付け
; by Tetsuya Kamei  [xyzzy:02641]
;セレクションに対して C-y で上書き貼り付け
(defun yank-overwrite (prefix &optional (arg 0))
  (interactive "*P\np")
  (when (pre-selection-p)
    (delete-region (selection-mark) (selection-point))
    (stop-selection))
  (setq *this-command* 'yank)
  (yank prefix arg))
(global-set-key #\C-y 'yank-overwrite)

;F5を押すと今開いているファイルをbyte-compileする
(defun byte-compile-current-buffer ()
  (interactive)
  (if (get-buffer-file-name)
		(progn
		 (if (buffer-modified-p) (save-buffer))
		  (byte-compile-file (get-buffer-file-name)))
    (message "ファイル名がないので、byte-compileできません")
  ))

(define-key ed::*lisp-mode-map* #\C-F5 'byte-compile-current-buffer)


;ファンクションキーのラベル設定
(set-function-bar-label #\F1 "reference")
(set-function-bar-label #\C-F4 "eval cur")
(set-function-bar-label #\C-F5 "compile cur")
(set-function-bar-label #\C-F6 "indent cur")


;モード毎に背景をつける
(add-hook '*find-file-hooks*
	  #'(lambda ()
	      (let ((ext (pathname-type (get-buffer-file-name (selected-buffer)))))
		(cond
		 ((equal ext "java") (set-buffer-colors #(#xffffff #x808aaa)))
		 ((or (equal ext "dat")
		      (equal ext "txt")) (set-buffer-colors #(#xffffff #x465769)))
;		 ((or (equal ext "pl")
;		      (equal ext "rb"))  (set-buffer-colors #(#xffffff #x80aa80)))
		 ((or (equal ext "html")
		      (equal ext "htm")
		      (equal ext "ihtml")
		      (equal ext "xml")) (set-buffer-colors #(#xffffff #x503030)))
		 ((or (equal ext "php")
		      (equal ext "php3")
		      (equal ext "phtml")
		      (equal ext "inc")) (set-buffer-colors #(#xffffff #xa0aaaa)))
		 ((or (equal ext "sql")
		      (equal ext "css")) (set-buffer-colors #(#xffffff #xaa6080)))
		 )
		   (refresh-screen)
			)))

;  find-fileでC-x C-v でファイル名ももらう (Ver.0.0.0.90 以降)
(setq *find-other-file-requires-file-name* t)


(defun close-all-buffers-except-this()
  "今カーソルのあるバッファ以外を閉じる"
  (interactive)
  (let (tb)
    (setq tb (get-buffer-file-name))
    (close-session-dialog)
    (find-file tb)
    )
  )

;ファイルサイズチェック
(defun myf-bff (file-full-path)
  (interactive)
  (let (fs)
    (handler-case
        (if file-full-path
            (progn
              (setq fs (file-length file-full-path))
              ;(msgbox "before find file ~A ~D kjfjkdjfkfjkdjk " file-full-path fs)
              (if (and file-full-path fs (> fs (* *file-open-ask-bound-kilo* 1024)))
                  (if (yes-or-no-p "file name: ~A \n(size: ~D M byte/~D k byte/ ~D byte)\n 開いて見ちゃう?" file-full-path (truncate fs (* 1024 1024)) (truncate fs 1024) fs)
                      nil
                    (selected-buffer))
                nil
                )
              )
          nil
          )
      (condition (c) nil))
    )
  )

(add-hook '*before-find-file-hook* 'myf-bff)
(defvar *file-open-ask-bound-kilo* (* 1024 3));ask when over 100 kbyte


(defun make-scratch-buffer ()
  (interactive)
  (set-buffer
   (switch-to-buffer "*scratch*")
   )
  (execute-extended-command 'lisp-interaction-mode)
  (setq need-not-save t)
  )

(defun open-directory-where-current-buffer-file-be ()
  (interactive)
  (let ((name  (get-buffer-file-name)))
    (shell-execute 
     (if name (directory-namestring name) "~/"))))

(defun indent-current-buffer ()
  (interactive)
  (save-excursion
    (let ((sp)(ep))
      ;	(setq sp (point-min)ep(point-max))
      ;	(widen)
      (indent-region (point-min) (point-max))
      ;	(narrow-to-region sp ep)
      ))
  )
(define-key ed::*lisp-mode-map* #\C-F6 'indent-current-buffer)

(defun clear-temp-buffers()
  "*の付いたバッファーを削除"
  (interactive)
  (let ((fn))
    (dolist (bf (buffer-list))
      (setq fn (buffer-name bf))
      (when (and fn
                 (equal (schar fn 0) #\*)
                 (not (equal "*scratch*" fn)))
        ;	 (msgbox(format nil "<~A>" fn))
        (delete-buffer bf)
        )
      ))
  )

(defun eval-current-buffer ()
  (interactive)
  "byte compile current buffer if lisp file / カレントバッファーを評価"
  (if (selected-buffer)
      (let ((now-point (point)) (error-occur t))
         (when
             (save-excursion (eval-region (point-min) (point-max)))
              (message "eval CORRECTLY : (current buffer : ~A)" (buffer-name (selected-buffer)))
               (setq error-occur nil)

#|
;siteinit.l なら dump チェックも
           (let (bfname (get-buffer-file-name (selected-buffer)))
             (if (and bfname
                      (path-equal bfname
                                  (concat (si:system-root) "site-lisp/siteinit.l"))
                      (byte-compile-file bfname))
                 (delete-dump-file)
               ))
|#
           )
        (if error-occur
            (message "ERROR!! buffer : ~A" (buffer-name(selected-buffer))))
        )
    (message "buffer が見つからないようさっ"))
  )


;セーブしたとき自動的にモードを切り替える方法
(defun set-mode-at-current-buffer ()
  (editor::find-file-process-params  (editor::find-file-scan-params) (selected-buffer))
  )
;ファイル名を変えたときだけチェックしたかったけど。
(add-hook '*after-save-buffer-hook* 'set-mode-at-current-buffer)





;M-xを実行した後 そのコマンドにショートカットがあれば表示する
(defun lookup-key-from-command (command)
 (or (find command  (cdr (local-keymap))  :key 'cdr)
	 (find command  (cdr (minor-mode-map))  :key 'cdr)
     (let ((key)(ret))
       (setq key (position command *global-keymap* ))
       (when key (setq ret (cons (*keymap-index-char  key) (elt *global-keymap*  key)))
        )
       ret
      )
  )
  )
(defvar *print-short-cut-after-exe-com* t)
(defvar *xyzzy-language* "JAPANESE")

;標準Lispを上書き
(defun execute-extended-command (command &optional raw arg)
  (interactive "0CM-x: \nP\np")
  (let ((*prefix-args* raw)
	(*prefix-value* arg))
    (setq *last-complex-command* nil)
    (setq *this-command* command)
    (command-execute command (and (interactive-p)
				  (not *executing-macro*)
				  #'ed::record-complex-command))
;ここから上書き
    (when *print-short-cut-after-exe-com*
	(let ((key))
;	  (setq key (lookup-key-from-command (find-symbol command)))
	  (setq key (lookup-key-from-command command))

	 (when key
      (if (string-equal *xyzzy-language* "JAPANESE")
          (minibuffer-message "今 入れたコマンド '~A' は ~S というショートカットキーがあるよ" command (car key) )
        (minibuffer-message "You can run the command '~A' with ~S" command (car key) )
       )
      (sit-for 3)
       )
	  )
	 )
	))


;日付挿入フォーマットの変更 (普段はあそこまで候補は いいよという人向け)
(setq *date-formats* '("%g%#e年%#m月%#d日 %v曜日"))
(pushnew "%A, %d %B %Y %H:%M:%S %z" *date-formats*)
(pushnew "%Y/%m/%d(%v) %H:%M" *date-formats*)
(pushnew "(%Y/%m/%d)" *date-formats*)
(pushnew "%m/%d(%v)" *date-formats*)



;エンコードが多くて困る。 普段はそんなにかえないZo。
;utf8n選択するのが少し楽に。
;文字エンコード ; language,encode setting  2011/09/20(火) 22:20
  (setq *char-encoding-list*
	(list *encoding-auto*
	      *encoding-sjis*
	      *encoding-jis*
	      *encoding-euc-jp*
	      *encoding-utf16*
	      *encoding-utf8*
	      *encoding-utf8n*
         *encoding-binary*))

;メニューで表示する文字列の長さをちょっと長めに
(setq *menu-display-length* 80)

;lisp では :も syntaxの範疇にする。
(set-syntax-symbol ed::*lisp-mode-syntax-table* #\:)


;ファイラで全ファイル表示をデフォルトに
;デフォルトのマスクを全ファイルに
;; 2 画面用
(setq *filer-primary-file-mask* '("*"))
(setq *filer-secondary-file-mask* '("*"))
;; 1 画面用
(setq *filer-last-file-mask* '("*"))

(setq *filer-modal* nil)
(setq *filer-use-recycle-bin* t) ; ごみはごみ箱へ

;*filer-path-masks*
(push "*.dat" (cdr (assoc-equal "ドキュメント" *filer-path-masks*)))
;(push "*.dat" (cdr (assoc-equal "ドキュメント" *filer-path-masks*)))
(push '("Java" "*.java") *filer-path-masks*)
(push '("HTML" "*.htm?") *filer-path-masks*)
(push '("Script" "*.cgi" "*.rb" "*.pl" "*.py" ) *filer-path-masks*)




(global-set-key #\C-d 'delete-or-unshift-selection)
;(global-set-key #\C-d 'delete-char-or-selection)

(global-set-key #\C-z 'undo)

(global-set-key #\C-k 'kill-line-CR)

(global-set-key #\C-h 'delete-backward-char-or-selection)

(global-set-key '(#\C-x #\d) 'delete-current-buffer-force)

(global-set-key #\M-f 'move-groups-forward)
(global-set-key #\M-b 'move-groups-backword)


(global-set-key #\C-a #'(lambda () (interactive) (goto-virtual-bol)))
(global-set-key #\C-e 'goto-virtual-eol2)
(global-set-key #\M-a 'beginning-of-line)
(global-set-key #\M-e 'end-of-line)

(global-set-key '(#\C-x #\C-w) 'emacs-write-file)


(global-set-key '(#\C-x #\2) 'split-window-and-move-other)

(global-set-key #\M-] 'goto-matched-parenthesis-prevention)

(global-set-key #\C-F24 'next-buffer)             ; 
(set-extended-key-translate-table exkey-C-tab #\C-F24)

(global-set-key #\F1 'popup-xyzzy-operation)
;括弧で囲むやつら
(global-set-key '(#\C-x #\p) 'enclose-braces)

; キーバインディング
(global-set-key #\C-/ 'undo)
(global-set-key '(#\C-x #\u) 'undo)
(global-set-key '(#\C-x #\5 #\C-f) 'find-file-in-other-xyzzy)

(global-set-key '(#\C-x #\3) 'split-window-vertically)



;;

;each  binding key map

(define-key ed::*lisp-mode-map* #\C-j 'eval-last-sexp)
(define-key ed::*lisp-mode-map* #\C-F4 'eval-current-buffer)

(define-key ed::*lisp-interaction-mode-map* #\C-j 'eval-print-last-sexp)
(define-key ed::*lisp-interaction-mode-map* #\C-F4 'eval-current-buffer)

(define-key ed::*lisp-mode-map* #\TAB 'lisp-indent-line)
(define-key ed::*lisp-interaction-mode-map* #\TAB 'lisp-indent-line)
;(define-key ed::*lisp-mode-map* #\TAB 'lisp-indent-line-or-shift-selection)
;(define-key ed::*lisp-interaction-mode-map* #\TAB 'lisp-indent-line-or-shift-selection)

(global-set-key  #\DEL 'delete-or-unshift-selection)

(global-set-key '(#\C-x #\m) 'jump-to-some-method)


(define-key *global-keymap* #\C-M-Z
				#'(lambda()
					 (interactive)
					 (goto-char (last-modified-point))))


最近のWindows ライクな設定

;マウスの 戻る進むボタンで バッファー移動
;Version 0.2.1.179 ;亀井さん動いていますよ。ホイールもOKです。 
(global-set-key #\XBtn1Down 'previous-buffer)
(global-set-key #\XBtn2Down 'next-buffer)

office ライクな設定

;Office likeに セレクション範囲をD&D移動
; 実装済み ;共通設定 さまざま D&D編集する にチェック。
; Ctrl押しながらだと 移動ではなく、セレクション選択したままコピーも出来ます。

;MSのExcel likeに バッファーを移動するキーバインディング設定
(set-extended-key-translate-table exkey-C-tab #\C-PageDown)
(global-set-key #\C-PageDown 'next-buffer)
(set-extended-key-translate-table exkey-S-C-tab #\C-PageUp)
(global-set-key #\C-PageUp 'previous-buffer)

;ノートパソコンだとちょっときついので C-F11,F12でやる場合はこちら
(setq *next-buffer-in-tab-order* t)
(setq *previous-buffer-in-tab-order* t)
(global-set-key #\C-F11 'previous-buffer)
(global-set-key #\C-F12 'next-buffer)

;MSのOffice likeに selection範囲毎を上下に移動
;http://blue.ribbon.to/~aotororo/prog/200310.html#d08_t4   めざなでさん
;; 行セレクションを上下に移動
(defun transpose-selection-down (&optional (n 1))
  "行セレクションを n 行下に移動"
  (interactive "*p")
  (let ((pre-selection-type (get-selection-type))
        (column (current-column)))
    (unless pre-selection-type
      (goto-bol)
      (start-selection 1 t)
      (or (forward-line 1)
          (progn (goto-eol) (insert #\LFD))))
    (selection-start-end (beg end)
      (when (and (goto-char end) (bolp)
                 (goto-char beg) (bolp))
        (insert (prog1
                    (buffer-substring beg end)
                  (delete-region beg end)
                  (forward-line n)
                  (and (minusp (1- (get-window-line)))
                       (recenter 1))
                  (when pre-selection-type
                    (start-selection pre-selection-type t))))
        (unless pre-selection-type
          (forward-line -1)
          (goto-column column))))))
(defun transpose-selection-up (&optional (n 1))
  "行セレクションを n 行上に移動"
  (interactive "*p")
  (transpose-selection-down (- n)))
(global-set-key #\S-M-Down 'transpose-selection-down)
(global-set-key #\S-M-Up 'transpose-selection-up)


;M-S-左右で シフト、アンシフト(オフィスや秀丸風)
(global-set-key #\M-S-Left 'unshift-selection)
(global-set-key #\M-S-Right 'shift-selection)

他人の設定集リンク

しょぼしょぼすくりぷと xyzzy | lisp サンプルLibrary集