; 細かい設定。Windowsキーバインド化とはあまり関係無いものも。 ; 一部 http://www.ht.sakura.ne.jp/~delmonta/emacs/ からパクらせていただきました。 ; 文末で[↓]キーを押しても新しい行を作らない。 (setq next-line-add-newlines nil) ; 画面の最下行で[↓]を押したときのスクロール行数。 (setq scroll-step 1) ; スクロールバーを右に。 (set-scroll-bar-mode 'right) ; 'nn' で「ん」を入力する。 (setq enable-double-n-syntax t) ; 置換後に大文字・小文字の別を保存しない。 (setq case-replace nil) ; 桁番号をモードラインに表示。 (setq column-number-mode t) ; 括弧の対応を常に表示。 (show-paren-mode t) ; Xのクリップボードと同期を取るらしい。 (setq x-select-enable-clipboard t) ; タイトルの設定。 (setq frame-title-format "%b - Emacs") ; なんだっけこれ。 (transient-mark-mode t) ; バックスペースキーを…どうするんだっけ。 (define-key function-key-map [backspace] [8]) (put 'backspace 'ascii-character 8) ;以下、Windows風選択の実装。 (defvar win-sel-v nil) (defun win-sel () (if (or (null (mark t)) (not mark-active)) (setq win-sel-v nil)) win-sel-v) (defun win-sel-begin () (transient-mark-mode 1) (if (not (win-sel)) (set-mark-command nil)) (setq win-sel-v t)) (defun win-unselect () (transient-mark-mode -1) (setq win-sel-v nil)) (defun win-copy (BEG END) (interactive (list (region-beginning) (region-end))) (copy-region-as-kill BEG END) (win-unselect)) (defun win-paste () (interactive) (if (win-sel) (delete-region (region-beginning) (region-end))) (yank)) (defun win-delete () (interactive) (if (win-sel) (delete-region (region-beginning) (region-end)) (delete-char 1))) (defun win-backspace () (interactive) (if (win-sel) (delete-region (region-beginning) (region-end)) (backward-delete-char 1))) (defun sel-forward-char () (interactive) (win-sel-begin) (forward-char)) (defun sel-backward-char () (interactive) (win-sel-begin) (backward-char)) (defun sel-next-line () (interactive) (win-sel-begin) (next-line 1)) (defun sel-previous-line () (interactive) (win-sel-begin) (previous-line 1)) (defun sel-beginning-of-line () (interactive) (win-sel-begin) (beginning-of-line)) (defun sel-end-of-line () (interactive) (win-sel-begin) (end-of-line)) (defun unsel-forward-char () (interactive) (win-unselect) (forward-char)) (defun unsel-backward-char () (interactive) (win-unselect) (backward-char)) (defun unsel-next-line () (interactive) (win-unselect) (next-line 1)) (defun unsel-previous-line () (interactive) (win-unselect) (previous-line 1)) (defun unsel-beginning-of-line () (interactive) (win-unselect) (beginning-of-line)) (defun unsel-end-of-line () (interactive) (win-unselect) (end-of-line)) ; 全体のキーバインド設定。 (setq meta-org (make-sparse-keymap)) (global-set-key "\M-o" meta-org) (define-key meta-org "\C-c" mode-specific-map) (define-key meta-org "\C-x" ctl-x-map) (global-set-key "\M-z" ctl-x-map) (global-set-key "\C-m" 'newline-and-indent) (global-set-key "\C-h" 'win-backspace) (global-set-key "\C-d" 'win-delete) (global-set-key "\177" 'win-delete) ; 環境によっては上の1行の代わりに下の2行を使うことも。 ; (global-set-key [delete] 'win-delete) ; (global-set-key [kp-delete] 'win-delete) (global-set-key [home] 'unsel-beginning-of-line) (global-set-key [end] 'unsel-end-of-line) (global-set-key [S-home] 'sel-beginning-of-line) (global-set-key [S-end] 'sel-end-of-line) (global-set-key "\C-x" 'kill-region) (global-set-key "\C-c" 'win-copy) (global-set-key "\C-v" 'win-paste) (global-set-key "\C-s" 'save-buffer) (global-set-key "\C-w" 'write-file) (global-set-key "\C-o" 'find-file) (global-set-key "\C-n" 'make-frame-command) (global-set-key "\C-z" 'undo) (global-set-key "\C-f" 'isearch-forward) (global-set-key "\C-r" 'query-replace) (global-set-key [S-right] 'sel-forward-char) (global-set-key [S-left] 'sel-backward-char) (global-set-key [S-up] 'sel-previous-line) (global-set-key [S-down] 'sel-next-line) (global-set-key [right] 'unsel-forward-char) (global-set-key [left] 'unsel-backward-char) (global-set-key [up] 'unsel-previous-line) (global-set-key [down] 'unsel-next-line) (global-set-key [M-f4] 'save-buffers-kill-emacs) ; モード別のキーバインド設定。後述。 (defun set-mode-win-key (map) (define-key map "\M-o" meta-org) (define-key map "\M-z" ctl-x-map) (define-key map "\C-m" 'newline-and-indent) (define-key map "\C-h" 'win-backspace) (define-key map "\C-d" 'win-delete) (define-key map "\177" 'win-delete) ; 環境によっては上の1行の代わりに下の2行を使うことも。 ; (define-key map [delete] 'win-delete) ; (define-key map [kp-delete] 'win-delete) (define-key map [home] 'unsel-beginning-of-line) (define-key map [end] 'unsel-end-of-line) (define-key map [S-home] 'sel-beginning-of-line) (define-key map [S-end] 'sel-end-of-line) (define-key map "\C-x" 'kill-region) (define-key map "\C-c" 'win-copy) (define-key map "\C-v" 'win-paste) (define-key map "\C-s" 'save-buffer) (define-key map "\C-w" 'write-file) (define-key map "\C-o" 'find-file) (define-key map "\C-n" 'make-frame-command) (define-key map "\C-z" 'undo) (define-key map "\C-f" 'isearch-forward) (define-key map "\C-r" 'query-replace) (define-key map [S-right] 'sel-forward-char) (define-key map [S-left] 'sel-backward-char) (define-key map [S-up] 'sel-previous-line) (define-key map [S-down] 'sel-next-line) (define-key map [right] 'unsel-forward-char) (define-key map [left] 'unsel-backward-char) (define-key map [up] 'unsel-previous-line) (define-key map [down] 'unsel-next-line) (define-key map [M-f4] 'save-buffers-kill-emacs) ) (set-mode-win-key lisp-interaction-mode-map) (set-mode-win-key emacs-lisp-mode-map) (set-mode-win-key isearch-mode-map) (load "make-mode.elc") (set-mode-win-key makefile-mode-map) (load "c-mode.elc") (set-mode-win-key c-mode-map) (load "sh-script.elc") (set-mode-win-key sh-mode-map) ; 上と同様の (set-mode-win-key *-mode-map) を、使う各モードについて書く事。 ; これをやらないと、モードごとに定義されるキー(C-cなど)は設定を上書きされてしまう。 ; ほとんどのモードは、 set-mode-win-key の前に対応する*.elcファイルの load が必要。 ; 環境によっては、*.elcの代わりに*.elを使っている場合も。 ; なんかもっとスマートな方法が有ったら教えてください。 ; (load "sgml-mode.elc") ; (set-mode-win-key html-mode-map) ; (load "php-mode.elc") ; (set-mode-win-key php-mode-map) ; (load "sql.elc") ; (set-mode-win-key sql-mode-map) ; (load "ruby-mode.elc") ; (set-mode-win-key ruby-mode-map) ; 検索中のキーバインド設定。 (define-key isearch-mode-map "\C-h" 'isearch-delete-char) (define-key isearch-mode-map [f3] 'isearch-repeat-forward) (define-key isearch-mode-map [S-f3] 'isearch-repeat-backward)