;; NetInstaller
(require "ni/setup")
(ni-autoload)
; インクリメンタルサーチ (C-s, C-r)
(require "isearch")
; dynamic abbreviation
(require "dabbrev")
(global-set-key #\M-/ 'dabbrev-expand)
; write-file
; バッファーの名前や割り付けられているファイル名も新しく指定
; されたファイルに変える
(define-key ctl-x-map #\C-w 'emacs-write-file)
; C-x C-v
; 廃棄するバッファのファイル名がミニバッファに表示
(setq *find-other-file-requires-file-name* t)
; sort-lines
(defun sort-lines (start end)
(interactive "*r")
(filter-region "sort" start end))
; ウィンドウを左右に分割
(define-key ctl-x-map #\3 'split-window-vertically)
; ispell-word
(defun ispell-word()
(interactive "*")
(let ((end (progn
(skip-chars-forward "A-Za-z")
(point)))
(beg (progn
(skip-chars-backward "A-Za-z")
(point))))
(ispell-region beg end)))
(global-set-key #\M-$ 'ispell-word)
; frame
(global-set-key '(#\C-x #\5 #\o) 'other-pseudo-frame)
(global-set-key '(#\C-x #\5 #\0) 'delete-pseudo-frame)
(global-set-key '(#\C-x #\5 #\2) 'new-pseudo-frame)
; 文字コードの変更
(global-set-key '(#\C-x #\RET #\f) 'change-fileio-encoding)
;;;; emacs風
; C-x C-v
; 廃棄するバッファのファイル名がミニバッファに表示
(setq *find-other-file-requires-file-name* t)
; sort-lines
(defun sort-lines (start end)
(interactive "*r")
(filter-region "sort" start end))
; ウィンドウを左右に分割
(define-key ctl-x-map #\3 'split-window-vertically)
; ispell-word
(defun ispell-word()
(interactive "*")
(let ((end (progn
(skip-chars-forward "A-Za-z")
(point)))
(beg (progn
(skip-chars-backward "A-Za-z")
(point))))
(ispell-region beg end)))
(global-set-key #\M-$ 'ispell-word)
; frame
(global-set-key '(#\C-x #\5 #\o) 'other-pseudo-frame)
(global-set-key '(#\C-x #\5 #\0) 'delete-pseudo-frame)
(global-set-key '(#\C-x #\5 #\2) 'new-pseudo-frame)
; 文字コードの変更
(global-set-key '(#\C-x #\RET #\f) 'change-fileio-encoding)
;;; grepの強化
;;; grep 結果からダブルクリックでファイルを開く
;;; http://hie.s64.xrea.com/xyzzy/note/search.html#grep-mouse-left-press
;;; http://hie.s64.xrea.com/xyzzy/note/search.html#grep-mouse-left-press
(defun grep-mouse-left-press ()
(interactive)
(let ((click (mod *last-mouse-click-count* 6)))
(if (= click 2)
(first-error)
(mouse-left-press))))
(defvar *grep-map* nil)
(unless *grep-map*
(setq *grep-map* (make-sparse-keymap))
(define-key *grep-map* #\LBtnDown 'grep-mouse-left-press))
(add-hook 'ed::*grep-hook* #'(lambda () (use-keymap *grep-map*)))
(add-hook 'ed::*grepd-hook* #'(lambda () (use-keymap *grep-map*)))
(define-key *grep-map* #\RET 'first-error)
;; 操作を便利にするためにキーバインドの類を設定
;; 検索結果一覧(*compilation*バッファ)上の操作:
;; * [↑][↓]で、該当箇所を別ウィンドウに表示
;; * RETまたはダブルクリックで、該当箇所にジャンプ
;; 検索対象バッファ上での操作:
;; * C-M-Up([Ctrl]+[Alt]+[↑])で1つ前のマッチへジャンプ(F11と同じ)
;; * C-M-Down([Ctrl]+[Alt]+[↓])で1つ先のマッチへジャンプ(C-u F11と同じ)
(defun show-previous-error ()
(interactive)
(progn (next-line -1)(first-error)(other-window -1)))
(defun show-next-error ()
(interactive)
(progn (next-line)(first-error)(other-window -1)))
(define-key *grep-map* #\Up 'show-previous-error)
(define-key *grep-map* #\Down 'show-next-error)
(defun previous-error ()
(interactive)
(next-error -1))
(global-set-key #\C-M-^ 'previous-error)
(global-set-key #\C-^ 'next-error)
;;; grepの強化ここまで
;;マウスだけでコピー・ペースト
(defun mouse-right-press ()
(interactive)
(mouse-left-press)
(paste-from-clipboard))
(global-set-key #\LBtnUp 'copy-selection-to-clipboard)
;;(global-set-key #\RBtnUp 'mouse-right-press)
;;(global-set-key #\MBtnUp 'mouse-menu-popup)
;;;;;
;バックアップ - 外部 lisp は不要
(require "backup")
(setq *hierarchic-backup-directory* t)
;バックアップを取る場所を指定 in .xyzzy
(setq *backup-directory* "~/backup")
;; XML-MODE
(require "xml/xml-mode")
(use-package 'xml)
(pushnew '("\\.\\(xml\\|arxml\\|mcxml\\|xsl\\|html\\|sdoc\\|fo\\|rng\\|svg\\|xi\\)" . xml-mode) *auto-mode-alist* :test #'equal)
;; 色の変更
(setq *xml-tag-attribute* '(:bold t :foreground 9))
(setq *xml-tag-invalid-attribute* '(:bold t :foreground 1))
(setq *xml-cdata-attribute* '(:foreground 2))
;; リージョンに色をつける
(require "rv-region")
(setq *rv-region-stay-on* t)
;; TreeView
(require "treeview/setup")
;; buf2html
(require "buf2html")
;; OutlineTree
(require "outline-tree/outline-tree")
;; c-mode インデント設定
(setq *c-indent-tabs-mode* t)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c-brace-offset -4)
(setq c-argdecl-indent 4)
(setq c-label-offset -4)
(setq c-brace-imaginary-offset 0)
(add-hook 'ed::*c-mode-hook*
#'(lambda () (set-tab-columns 4 (selected-buffer))))
; (setq *c++-tab-always-indent* nil)
;; c++-mode インデント設定
(setq *c++-indent-tabs-mode* t)
(setq c++-indent-level 4)
(setq c++-continued-statement-offset 4)
(setq c++-brace-offset -4)
(setq c++-argdecl-indent 4)
(setq c++-label-offset -4)
(setq c++-brace-imaginary-offset 0)
(add-hook 'ed::*c++-mode-hook*
#'(lambda () (set-tab-columns 4 (selected-buffer))))
; (setq *c++-tab-always-indent* nil)
;; コメントアウト
(autoload 'comment-out-region "comment" t nil)
(global-set-key #\M-\; 'comment-out-region)
;;Migemoの正規表現をキャッシュ
(require "migemo")
(defvar *migemo-cache-more-than* 3)
(defvar *migemo-cache-file* "~/etc/migemo.dat")
(in-package "editor")
(let (old-migemo-query cache)
(add-hook '*post-startup-hook*
#'(lambda ()
(when (file-exist-p user::*migemo-cache-file*)
(with-open-file (fp user::*migemo-cache-file*)
(let (line)
(while (setf line (read fp nil))
(pushnew line cache
:key 'car
:test 'equal)))))))
(add-hook '*kill-xyzzy-hook*
#'(lambda ()
(with-open-file (s user::*migemo-cache-file*
:direction :output
:if-exists :overwrite
:if-does-not-exist :create)
(mapc #'(lambda (x)
(format s "~S~%" x))
cache))))
(setf (symbol-function 'old-migemo-query)
(symbol-function 'migemo-query))
(defun migemo-query (query)
(setq *isearch-regexp* *migemo-on*)
(let ((val (assoc query cache :test 'equal)))
(if val
(cdr val)
(let ((regexp (old-migemo-query query)))
(when (<= (length query) user::*migemo-cache-more-than*)
(setf cache
(acons query regexp cache)))
regexp))))
(defun migemo-delete-cache ()
(interactive)
(setf cache nil)))
(in-package "user")
(migemo-toggle t)
;dabbrevでこれ以上の文字数の時にmigemo使う
(defvar *dabbrev-use-migemo-more-than* 4)
(let ((old #'ed::dabbrev-find-expansion)
(old-all #'ed::dabbrev-find-all-expansion))
(defun ed::dabbrev-find-all-expansion (abbrev case-fold match-table start matches)
(and (not (regexpp abbrev))
(<= *dabbrev-use-migemo-more-than* (length abbrev))
(setf abbrev (compile-regexp (ed::migemo-query abbrev) t)))
(funcall old-all abbrev case-fold match-table start matches))
(defun ed::dabbrev-find-expansion (abbrev count reverse no-dup case-fold match-table)
(and (not (regexpp abbrev))
(<= *dabbrev-use-migemo-more-than* (length abbrev))
(setf abbrev (compile-regexp (ed::migemo-query abbrev) t)))
(funcall old abbrev count reverse no-dup case-fold match-table)))
;; migemoのバグ対策
(in-package "editor")
(let ((migemo #'migemo-query))
(defun migemo-query (query)
(let ((regexp (funcall migemo query)))
(setf regexp (substitute-string regexp
"\\[\\\\)" "\\\\[\\\\)")
regexp (substitute-string regexp
"\\[\\\\|" "\\\\[\\\\|")
regexp (substitute-string regexp
"\\[\\[" "\\\\[\\[")))))
(in-package "user")
;; bat-mode
(in-package "editor")
(export 'bat-mode)
(export 'ini-mode)
(autoload 'bat-mode "bat-mode" t)
(autoload 'ini-mode "ini-mode" t)
(pushnew '("\\.bat$" . bat-mode) *auto-mode-alist* :test 'equal)
(pushnew '("\\.ini$" . ini-mode) *auto-mode-alist* :test 'equal)
(in-package "user")
;; バッファ名をコピー
;; 名前だけ
(defun clipboard-to-buffer-name() (interactive)
(copy-to-clipboard (buffer-name (selected-buffer))))
(define-key spec-map #\c 'my-buffer-name-copy)
;; フルパス
(defun clipboard-to-buffer-file-name ()
(interactive)
(unless (equal (get-buffer-file-name) nil)
(copy-to-clipboard
(map-slash-to-backslash (get-buffer-file-name)))))
(define-key spec-map #\n 'my-file-name-copy-backslash)
;; makefile-mode
(require "elisp")
(load-library "make-mode")
(push '("makefile\\|\\.mak$\\|\\.mk$" . elisp::makefile-mode) *auto-mode-alist*)
;; 行末まで削除する
(defun my-kill-line (&optional arg)
(interactive "*p")
(cond ((bolp)
(let ((point (point))
(lines (cond ((or (null arg)
(<= arg 1))
0)
(t
(- arg 1)))))
(kill-region point
(progn
(forward-line lines)
(goto-eol)
(forward-char)
(point)))))
(t
(kill-line arg))))
(define-key *global-keymap* #\C-k 'my-kill-line)
;; 括弧をハイライト
(require "paren")
(turn-on-global-paren)
;; emacs風キーバインド
; key bind
(global-set-key #\C-] 'redo)
(global-set-key #\M-h 'backward-kill-word)
(global-set-key #\C-/ 'undo)
(global-set-key #\M-v 'previous-page)
;(global-set-key #\M-% 'replace-string)
;(global-set-key #\C-M-% 'replace-regexp)
(global-set-key #\M-% 'query-replace)
(global-set-key #\C-M-% 'query-replace-regexp)
(global-set-key #\C-M-\\ 'indent-region)
(global-set-key '(#\C-x #\h) 'mark-page)
(global-set-key '(#\C-x #\u) 'undo)
(global-set-key '(#\C-x #\r #\d) 'delete-rectangle)
(global-set-key '(#\C-x #\r #\k) 'kill-rectangle)
(global-set-key '(#\C-x #\r #\o) 'open-rectangle)
(global-set-key '(#\C-x #\r #\t) 'string-rectangle)
(global-set-key '(#\C-x #\r #\y) 'yank-rectangle)
(global-set-key '(#\C-x #\r #\w) 'copy-rectangle)
(global-set-key #\Home 'beginning-of-buffer)
(global-set-key #\End 'end-of-buffer)
(global-set-key #\C-_ 'undo)
(global-set-key #\C-- 'negative-argument)
(global-set-key #\C-\\ 'toggle-ime)
(dolist (c '(#\C-0 #\C-1 #\C-2 #\C-3 #\C-4 #\C-5 #\C-6 #\C-7 #\C-8 #\C-9))
(global-set-key c 'digit-argument))
(global-set-key '(#\C-x #\n #\n) 'narrow-to-region)
(global-set-key '(#\C-x #\n #\w) 'widen)
(global-set-key #\M-: 'eval-expression)
(substitute-key-definition 'next-virtual-line 'next-line)
(substitute-key-definition 'previous-virtual-line 'previous-line)
(export 'ed::csv-mode "ed")
(autoload 'csv-mode "csv-mode" t)
;;(autoload 'tsv-mode "csv-mode" t)
(pushnew '("\\.csv$" . csv-mode) *auto-mode-alist* :test 'equal)
;;(pushnew '("\\.tsv$" . csv-mode) *auto-mode-alist* :test 'equal)
;; マウスホイールで画面をスクロールさせてもセレクションを解除されないようにする
;;(require "keep-selection")
;;
;;(in-package "editor")
;;
;;(defun mouse-wheel-scroll (window n lines)
;; (or lines
;; (setq lines (window-lines window)))
;; (with-selected-window
;; (set-window window)
;; (move-kept-selection #'scroll-window (* n lines))))
;;
;;(setq mouse-wheel-handler #'mouse-wheel-scroll)
;;
;;(defun previous-page-kept-selection ()
;; (interactive)
;; (move-kept-selection #'previous-page))
;;
;;(in-package "user")
;;
;;(global-set-key #\PageUp 'previous-page-kept-selection)
;;(global-set-key #\PageDown 'next-page-kept-selection)
;; bash-mode
(load-library "bash-mode")
;; python-mode
(load-library "py-mode")
(push '("\\.py$" . py-mode) *auto-mode-alist*)
;;Python-mode関連
(add-hook 'ed::*py-mode-hook*
#'(lambda ()
;c-jをオートインデント改行に
(define-key ed::*py-mode-map* #\c-m 'ed::py-newline-and-indent)
))
(require "complete+") ; ni-autoloadしている人は不要
(use-package "complete+"); ni-autoloadしている人は不要
(dolist (keymap (list minibuffer-local-completion-map
minibuffer-local-must-match-map))
(define-key keymap '#\C-n 'complete+-select-next-item) ; 次の候補
(define-key keymap '#\C-p 'complete+-select-prev-item) ; 前の候補
(define-key keymap '#\C-< 'complete+-substring-match-rotate) ; 部分一致
(define-key keymap '#\C-> 'complete+-skip-match-rotate) ; スキップマッチ
(define-key keymap '#\C-. 'complete+-toggle-incremental)) ; インクリメンタル
(setf *complete+-and-search* ";") ;AND検索
(setf *complete+-show-drive* t) ;ドライブを表示
(setf *complete+-current-item-attribute* '(:foreground 1)) ; *Completion*バッファ
(setf *complete+-highlight-color* '(:foreground 2)) ; ハイライト
(complete+-toggle-incremental t);最初からインクリメンタルに補完候補を表示
;; 罫線モードの拡張
(require "box-fixation-mode")
;; URL
(require "clickable-uri")
;; Explorer呼び出し
(require "explorer")
;; Grrep拡張
(require "ggrep")
;; iswitchb
(require "elisp")
(require "iswitchb")
(elisp::iswitchb-mode 1)
(elisp::iswitchb-substitute-global-map)
;; JavaScript
(require "jscript-mode")
;; markdown
(require "markdown")
;;Replace拡張
(require "multiple-replace")
;; 最近使ったファイル一覧
(defun list-recents ()
(interactive)
(let (hlist filename)
(setq hlist (mapcar #'(lambda (x)
(list (abbreviate-display-string x 60 t) x))
*minibuffer-file-name-history*))
(multiple-value-bind (result data)
(dialog-box
'(dialog 0 0 286 162
(:caption "最近使ったファイル")
(:font 9 "MS Pゴシック")
(:control
(:listbox flist nil #x50b10111 7 7 216 148)
(:button IDOK "OK" #x50010001 229 7 50 14)
(:button IDCANCEL "キャンセル" #x50010000 229 24 50 14)))
(list (cons 'flist hlist))
`((flist :must-match t :enable (IDOK))))
(when result
(setq filename (car (cddr (assoc 'flist data))))
(find-file filename)
(add-history filename '*minibuffer-file-name-history*)))))
;; URLデコード
;; 文字コードを指定して開き直す
(defvar *encoding-menu* nil)
(defun encoding-menu ()
(or *encoding-menu*
(let ((menu (create-popup-menu)))
(mapc #'(lambda (x)
(add-menu-item menu nil (car x)
#'(lambda ()
(interactive)
(revert-buffer (cdr x)))))
`(("utf-8n \t(&8)" . ,*encoding-utf8n*)
("utf-16 \t(&6)" . ,*encoding-utf16*)
("sjis \t(&S)" . ,*encoding-sjis*)
("auto \t(&A)" . ,*encoding-auto*)
("euc-jp \t(&E)" . ,*encoding-euc-jp*)
("jis \t(&J)" . ,*encoding-jis*)))
(add-menu-item menu :select "詳細指定\t(&_)"
#'(lambda (encoding)
(interactive "zEncoding: ")
(revert-buffer encoding)))
(setq *encoding-menu* menu))))
(defun revert-buffer-encoding-popup2 ()
(interactive)
(track-popup-menu (encoding-menu)))
(defun encoding-menu-in-file-autoload ()
(let ((filemenu (get-menu *app-menu* 'ed::file)))
(insert-popup-menu filemenu
(1- (get-menu-position (get-menu *app-menu* 'ed::file) :above-session))
(encoding-menu) "Reopen with Encoding (&G)\tC-c e")))
(add-hook '*init-app-menus-hook* 'encoding-menu-in-file-autoload)
(global-set-key '(#\C-x #\RET #\r) 'revert-buffer-encoding-popup2)
0 件のコメント:
コメントを投稿