; -*- coding: euc-jp -*- ;このファイルでは、一部に半角カタカナを使用しています。EUC形式で保存してください。 ;------------------------------------------------------------------------------ ;Delmonta's Customization of Emacs/Mule ;(C) 1997- IIJIMA Hiromitsu aka Delmonta / delmonta@ht.sakura.ne.jp ;********************************* DISCLAIMER ********************************* ; Redistribution and use in source and binary forms, with or without ; modification, are permitted under the BSD License modified in 22 July 1999, ; found at . ;****************************************************************************** (setq load-path (cons (expand-file-name "~/bin") load-path)) (load "delmonta-site-start" t t) ;############################################################################## ;# 外道でない各種設定 # ;############################################################################## ;------------------------------オプション類----------------------------------- ;置換時にケースを保存しない(abc→defの置換でAbc→Defとしない) (setq case-replace nil) ;デフォルトはFundamentalモード (setq default-major-mode 'fundamental-mode) ;括弧を入力したときに、対応する括弧を時間差ゼロで示す (setq blink-matching-paren t) (setq show-paren-delay 0) ;行番号・列番号・時計を表示する (setq line-number-mode t) (setq column-number-mode t) (display-time) ;最終行で下カーソルを入力しても新しい行を作らない (setq next-line-add-newlines nil) ;ファイル名とモードとの対応表を空に(=モード変更を禁止する) (setq auto-mode-alist nil) ; '( ; ("\\.\\(arc\\|zip\\|lzh\\|zoo\\)\\'" . archive-mode) ; ("\\.\\(ARC\\|ZIP\\|LZH\\|ZOO\\)\\'" . archive-mode) ; ) ;) ;#!…の後のコマンド名とモードとの対応表を空に(=同上) (setq interpreter-mode-alist nil) ;ファイル名補完候補からの .log の除外を解除 (setq completion-ignored-extensions (delete ".log" completion-ignored-extensions)) ;終了時に、編集中のファイルを保存するか確認 (setq buffer-offer-save t) ;画面の最下行で下カーソルを押した時のスクロール行数 ;(デフォルトは スクリーン行数÷2) (setq scroll-step 1) ;いちどの kill-line で行全体を削除 (setq kill-whole-line t) ;ウィンドウ環境でなければ、メニューバーを表示しない (if (and (eq window-system nil) (commandp 'menu-bar-mode)) (menu-bar-mode -1) ) ;*scartch* のモード。Lisp Interaction のままにしておく。 ;(setq initial-major-mode 'fundamental-mode) ;-------------------------------- ange-ftp 関係 ------------------------------- (eval-after-load "ange-ftp" '(and (string-equal (getenv "OSTYPE") "FreeBSD") (setq ange-ftp-ftp-program-args (cons "-4" ange-ftp-ftp-program-args)) ;-4 をつけないと先に IPv6 で接続しようとしてエラーに ;なって、その時点で ange は接続不能という判定を返す。 ) ) ;--------------------------------- dired 関係 --------------------------------- (setq dired-recursive-copies 'top); ディレクトリ丸ごとのコピーを許可 ; 各ディレクトリのトップにつき確認が取られる ;------------------- disabled になっている関数を enable する ------------------ (put 'eval-expression 'disabled nil) (put 'downcase-region 'disabled nil) (put 'upcase-region 'disabled nil) ;------------------------------ 文字コードの設定 ------------------------------ (defun Mule-UCS-customize-common () (interactive) (require 'un-supple) (un-supple-enable 'windows) ) ;断念 ;(put 'Mule-UCS-char-unification-table-jis 'translation-rule-for-unicode ; '(assoc ; (char-1 ucs-generic) ; (?― ?\x2015) ; HORIZONTAL BAR - Windows, JIS X0208 ; (?― ?\x2014) ; EM HASH - Mac, JIS X0213 ; ) ;) (defun Mule-UCS-use-charset-jis () (interactive) (un-define-change-charset-order (append '(ascii japanese-jisx0208); Mule-UCS-char-unification-table-jis) unicode-basic-translation-charset-order-list ) ) (Mule-UCS-customize-common) ) (defun Mule-UCS-use-charset-ks () (interactive) (un-define-change-charset-order (append '(ascii korean-ksc5601) unicode-basic-translation-charset-order-list ) ) (Mule-UCS-customize-common) ) (defun delmonta-set-coding-systems (szLang) (interactive "sENV{LANG}=") (let ( (language "Japanese") (charset-v19 '*euc-japan*) (charset-v20 'euc-jp) (case-fold-search t) ) (cond ((not (stringp szLang)) (message "LANG=nil; defaults to 'ja.euc'.") (sleep-for 3) ) ((string-match "ja\\(_JP\\)?\\.\\(euc\\|ujis\\)" szLang) (setq language "Japanese") (setq charset-v19 '*euc-japan*) (setq charset-v20 'euc-jp) ) ((string-match "ja\\(_JP\\)?\\.\\(sjis\\|shift[-_]?jis\\|pck\\)" szLang) (setq language "Japanese") (setq charset-v19 '*sjis*) (setq charset-v20 'sjis) ) (t (message "LANG=%s... defaults to 'ja.euc'." szLang) (sleep-for 3) ) ) (cond ((boundp '*euc-japan*) ; Mule 2.3 (set-keyboard-coding-system charset-v19) (set-display-coding-system charset-v19) (set-default-file-coding-system charset-v19) (if (fboundp 'set-pathname-coding-system) (set-pathname-coding-system charset-v19) ) )((commandp 'set-language-environment) ; Emacs 20+ (set-language-environment language) (set-keyboard-coding-system charset-v20) (set-terminal-coding-system charset-v20) (setq default-buffer-file-coding-system charset-v20) (setq file-name-coding-system charset-v20) )) (cond ((member charset-v20 '(euc-jp sjis iso-2022-jp)) (eval-after-load "un-define" '(Mule-UCS-use-charset-jis)) )((member charset-v20 '(euc-kr)) (eval-after-load "un-define" '(Mule-UCS-use-charset-ks)) )) )) (delmonta-set-coding-systems (or (getenv "LC_ALL") (getenv "LANG") nil)) ;---------------------- ESC+2バイト文字の入力に関する対策 --------------------- (let ((i 128)) (while (<= i 255) (define-key function-key-map (vector 27 i) (vector i)) (setq i (1+ i)) )) ;------------------------------ Egg/Wnnの ロード ------------------------------ ; XEmacs などでは .emacs を解釈する時点では egg が読み込まれていない ; (fence-mode-map 等の変数も存在しない)ので、ここで読み込んでしまう。 ; 特に、egg v3 の初期化ファイルには陽に \C-x という文字が書かれているので、 ; C-x の書き換え前に egg を読み込まないと、egg 起動時にエラーになる ;------------------------------------------------------------------------------ ; Emcws と Tamago4 が両方入っている環境でこれを実行するとエラーになるので、 ; 変数 WNN が定義されている(=Mule 2.3、Emcws)ときは除外。 ;------------------------------------------------------------------------------ (if (and (boundp 'input-method-alist) (not (boundp 'WNN))) (progn ;いったん Wnn を起動する (if (assoc "japanese-egg-wnn" input-method-alist) (activate-input-method "japanese-egg-wnn") ) ;デフォルトのIMEに戻す (and default-input-method (assoc default-input-method input-method-alist) (activate-input-method default-input-method) ) (inactivate-input-method) )) ;----------------------------- face を利用した設定 ---------------------------- (if (featurep 'faces) (progn (transient-mark-mode 1) (if (boundp 'fence-mode-map) (progn (set-egg-fence-mode-format "" "" 'underline) (set-egg-henkan-mode-format "" "" "" "" 'underline nil 'region) )) )) ;-------------------------------- モードライン -------------------------------- ; 行番号・列番号を冒頭に…そうしないと、長いファイル名で表示が出なくなる ;------------------------------------------------------------------------------ (let (L C M) (setq M mode-line-format) (setq C (assoc 'column-number-mode M)) (if C (setq M (cons C (delete C M))) ) (setq L (assoc 'line-number-mode M)) (if L (setq M (cons L (delete L M))) ) (setq-default mode-line-format M) ) ;############################################################################# ;# メニューバーの設定 # ;############################################################################# (setq menu-bar-delmonta-menu (make-sparse-keymap "Delmonta")) ;----------------------------------------------------------------------------- ;(define-key menu-bar-delmonta-menu [ds-separator-end] '("--")) (define-key menu-bar-delmonta-menu [ds-gotoline] '("Go to Line..." . goto-line)) ;----------------------------------------------------------------------------- (define-key menu-bar-delmonta-menu [ds-separator-modeline] '("--")) (define-key menu-bar-delmonta-menu [ds-disable-mode-line] '("Disable Mode Line" . delmonta-disable-mode-line)) ;----------------------------------------------------------------------------- (define-key menu-bar-delmonta-menu [ds-separator-readonly] '("--")) (define-key menu-bar-delmonta-menu [ds-toggle-read-only] '("Toggle Read Only" . toggle-read-only)) (define-key menu-bar-delmonta-menu [ds-tabwidth] '("Set Tab width and TabStop list...." . delmonta-set-tab-width-and-tab-stop-list)) ;----------------------------------------------------------------------------- (define-key menu-bar-delmonta-menu [ds-separator-jiskb] '("--")) (define-key menu-bar-delmonta-menu [ds-jiskb-quail] '("106/9800 KeyBoard for Quail" . (lambda () (interactive) (setq quail-keyboard-translate-table quail-keyboard-translate-table-jis) ) )) ;------------------------------ Egg v3 固有の設定 ----------------------------- (if (boundp 'fence-mode-map) (progn (define-key menu-bar-delmonta-menu [ds-jiskb-kanainput] '("106/9800 KeyBoard for KanaInput" . delmonta-kanainput-keymap-jis)) (define-key menu-bar-delmonta-menu [ds-separator-egg] '("--")) (define-key menu-bar-delmonta-menu [ds-its-roma-kana] '("Set Egg to ROMA-KANA mode" . (lambda () (interactive) (its:select-mode "roma-kana") ) )) (define-key menu-bar-delmonta-menu [ds-its-kanainput] '("Set Egg to KANAINPUT mode" . (lambda () (interactive) (its:select-mode "kanainput") ) )) )) ; (if (boundp 'fence-mode-map) (progn ;----------------------------------------------------------------------------- (global-set-key [menu-bar delmonta] (cons "Delmonta" menu-bar-delmonta-menu)) (if (boundp 'menu-bar-final-items) (setq menu-bar-final-items (cons 'delmonta menu-bar-final-items)) ) ;****************************** 各種自作コマンド ****************************** ; このへんはキー設定より先に定義してしまう。キー設定が先だと、途中でエラーに ; なったときに、ここで定義しているコマンドを割り当てているキーが使えなくなって ; しまう。 ;****************************************************************************** (defun delmonta-start/end-kbd-macro () "キーボードマクロの記録開始・終了" (interactive) (if defining-kbd-macro (end-kbd-macro) (start-kbd-macro nil) ) ) ;------------------------------- kill/yank 関係 ------------------------------- (defun delmonta-popup-from-kill-ring () "kill-ring から要素を取りだしてペーストしますが、次のペーストではその前のものが出るようにします。" (interactive) (save-excursion (insert (car kill-ring))) (setq kill-ring (cdr kill-ring)) ) (defun yank-with-quotation () "引用記号 '> ' をつけてペーストする" (interactive) ;文字列に対する replace-match は Emacs 20 以降。 ;replace-regexp-in-string は Emacs 21 以降。 ; 参考 news:020609023703.M0203180@mistral.imasy.or.jp (autoload 'dired-replace-in-string "dired") (let (str) (setq str (car kill-ring)) ; あとの置換処理の関係で、いちばん最後の \n を取り除く (if (and (not (string= str "")) (string= (substring str -1) "\n") ) (setq str (substring str 0 -1)) (message "matched") ) (insert "> " (dired-replace-in-string "\n" "\n> " str) "\n") ) ) (defun popup-from-kill-ring-with-quotation () (interactive) (yank-with-quotation) (setq kill-ring (cdr kill-ring)) ) (defun yank-and-replace-region () (interactive) (delete-region (mark) (point)) (yank) ) ;------------------ ファイルの先頭・末尾でもエラーにならない ------------------ (defun scroll-down-or-beginning-of-buffer (&optional arg) (interactive "P") (condition-case e (scroll-down arg) (error (beginning-of-buffer)) ) ) (defun scroll-up-or-end-of-buffer (&optional arg) (interactive "P") (condition-case e (scroll-up arg) (error (end-of-buffer)) ) ) ;---------------------- Vz 風 物理行単位でのカーソル移動 --------------------- (defvar vz-goal-column nil) (defun vz-next-line () "Vz:↓" (interactive) (if truncate-lines (next-line 1) (or (eq last-command 'vz-next-line) (setq vz-goal-column (% (current-column) (1- (window-width))))) (if (eolp) (progn (forward-char 1) (move-to-column vz-goal-column)) (vertical-motion 1) (move-to-column (+ vz-goal-column (current-column)))))) (defun vz-previous-line () "Vz:↑" (interactive) (if truncate-lines (previous-line 1) (or (eq last-command 'vz-next-line) (setq vz-goal-column (% (current-column) (1- (window-width))))) (let ((ncol (- vz-goal-column (window-width) -1))) (vertical-motion -1) (if (<= 0 ncol) (move-to-column ncol) (move-to-column (+ vz-goal-column (current-column)))))) (setq this-command 'vz-next-line)) ;fake (defun vz-right-of-screen () "Vz 画面の右端" (interactive) (vertical-motion 1) (if (not (eobp)) (backward-char 1))) (defun vz-left-of-screen () "Vz 画面の左端" (interactive) (vertical-motion 0)) ;--------------- バッファのパーミッションを Emacs 上から変更する -------------- (defun chmod-buffer (szPermission szBuffer) (interactive "sChange Permission to:\nbBuffer:") (save-excursion (with-output-to-temp-buffer "*Chmod*" (message (format "%S" szBuffer)) (sleep-for 3) (set-buffer standard-output) (if szBuffer (call-process "chmod" nil t nil szPermission szBuffer) (error "Buffer '%s' has no filename" szBuffer) ) )) ) ;--------------------------------- italk 関係 --------------------------------- (defun set-italk-server (szHostname) (interactive "sHostname:") (require 'italk) (setq italk-server szHostname) ) ;############################################################################# ;# Delmontaの極悪非道なキーバインディング # ;############################################################################# ;---------------------------- キーマップの作成 -------------------------------- (if (y-or-n-p "Delmontaの極悪非道なキーバインディングを使いますか?") (progn (setq VZ-Ctrl-K (make-sparse-keymap)) ; VZ-likeコマンド (setq VZ-Ctrl-Q (make-sparse-keymap)) ; VZ-likeコマンド (setq MSWin-Alt-File (make-sparse-keymap)) ; Windows-likeコマンド (setq MSWin-Alt-Edit (make-sparse-keymap)) ; Windows-likeコマンド (setq Meta-Original (make-sparse-keymap)) ; ここに元のキーマップを退避 (global-set-key "\M-o" Meta-Original) (or (boundp 'Delmonta-Ctrl-O) (setq Delmonta-Ctrl-O (make-sparse-keymap)) ) (global-set-key "\C-o" 'Delmonta-Ctrl-O) ;---------------------------- MSWin-Alt-File/Edit ----------------------------- (global-set-key "\M-e" MSWin-Alt-Edit) (global-set-key "\M-f" MSWin-Alt-File) (define-key Meta-Original "\M-e" (global-key-binding "\M-e")) (define-key Meta-Original "\M-f" (global-key-binding "\M-f")) (define-key MSWin-Alt-File "o" 'find-file) ;Open file (define-key MSWin-Alt-File "s" 'save-buffer) ;Save (define-key MSWin-Alt-File "m" 'compile) ;Make (define-key MSWin-Alt-File "i" 'insert-file) ;Insert (define-key MSWin-Alt-File "a" 'write-file) ;save As (define-key MSWin-Alt-File "l" 'find-alternate-file) ;別ファイルを開く (define-key MSWin-Alt-File "x" 'save-buffers-kill-emacs);eXit (define-key MSWin-Alt-File "c" 'kill-buffer) ;Close (define-key MSWin-Alt-File "r" 'revert-buffer) (define-key MSWin-Alt-File "0" 'delete-window) (define-key MSWin-Alt-File "1" 'delete-other-windows) (define-key MSWin-Alt-File "2" 'split-window) (define-key MSWin-Alt-Edit "s" 'mark-whole-buffer) ;秀丸風 (global-set-key [(meta f4)] 'save-buffers-kill-emacs) (cond ((fboundp 'set-file-coding-system) (define-key MSWin-Alt-File "k" 'set-file-coding-system) ) ((fboundp 'set-buffer-file-coding-system) (define-key MSWin-Alt-File "k" 'set-buffer-file-coding-system) ) ) (if (fboundp 'universal-coding-system-argument) (define-key MSWin-Alt-File "K" 'universal-coding-system-argument) (define-key MSWin-Alt-File "K" 'universal-argument) ) ;------------------------------ Ctrl+文字キー --------------------------------- (if (eq (global-key-binding "\C-a") 'beginning-of-line) (let ((i 0)) (while (< i 32) (define-key Meta-Original (char-to-string i) (global-key-binding (char-to-string i))) (setq i (1+ i)) )) ) (global-set-key "\C-a" 'vz-left-of-screen) (global-set-key "\C-b" 'set-mark-command) (global-set-key "\C-c" 'scroll-up-or-end-of-buffer) (global-set-key "\C-d" 'forward-char) (global-set-key "\C-e" 'vz-previous-line) (global-set-key "\C-f" 'vz-right-of-screen) ;(global-set-key "\C-g" 'delete-char) ;keyboard-quitは必要なのでそのまま (global-set-key "\C-h" 'delete-backward-char) (global-set-key "\C-i" 'tab-to-tab-stop) (global-set-key "\C-j" 'delmonta-popup-from-kill-ring) (global-set-key "\C-k" VZ-Ctrl-K) ;(global-set-key "\C-l" 'recenter) ;VZでは検索文字列の取得だが、使わない ;(global-set-key "\C-m" 'newline) ;デフォルトでこうなっている? (global-set-key "\C-n" 'make-frame-command) (global-set-key "\C-o" Delmonta-Ctrl-O) (global-set-key "\C-p" 'quoted-insert) (global-set-key "\C-q" VZ-Ctrl-Q) (global-set-key "\C-r" 'scroll-down-or-beginning-of-buffer) (global-set-key "\C-s" 'backward-char) (global-set-key "\C-t" 'kill-word) (global-set-key "\C-u" 'advertised-undo) (global-set-key "\C-v" 'yank) ; overwrite-mode は滅多に使わないので ;(global-set-key "\C-w" 'kill-region) ; スクロールよりこっちが大事 (global-set-key "\C-x" 'vz-next-line) (global-set-key "\C-y" 'kill-line) ;(global-set-key "\C-z" '_________) ; サスペンド機能のほうが大事 (define-key Meta-Original "\M-u" (global-key-binding "\M-u")) (global-set-key "\M-u" 'universal-argument) ;------------------------------- VZ 風の設定など ------------------------------ (define-key VZ-Ctrl-K "\C-k" 'copy-region-as-kill) (define-key VZ-Ctrl-K "k" 'copy-region-as-kill) (define-key VZ-Ctrl-K "\C-c" 'yank) (define-key VZ-Ctrl-K "c" 'yank) (define-key VZ-Ctrl-K "j" 'ds-describe-char) (define-key VZ-Ctrl-K "\C-j" 'ds-describe-char) (define-key VZ-Ctrl-Q "\C-j" 'goto-line) (define-key VZ-Ctrl-Q "j" 'goto-line) (define-key VZ-Ctrl-Q "r" 'beginning-of-buffer) (define-key VZ-Ctrl-Q "\C-r" 'beginning-of-buffer) (define-key VZ-Ctrl-Q "c" 'end-of-buffer) (define-key VZ-Ctrl-Q "\C-c" 'end-of-buffer) (global-set-key "\C-_" 'delmonta-start/end-kbd-macro) (global-set-key "\M-\\" 'call-last-kbd-macro) (global-set-key "\M-c" 'nonincremental-repeat-re-search-forward) (global-set-key "\M-r" 'nonincremental-repeat-re-search-backward) (autoload 'ds-describe-char "ds-char" "Show charcode in various encodings such as SJIS or KU-TEN." t) ;------------------------------ Delmonta-Ctrl-O ------------------------------- (define-key Delmonta-Ctrl-O "x" 'shell-command) (define-key Delmonta-Ctrl-O "X" 'shell-command-on-region) (define-key Delmonta-Ctrl-O "j" 'popup-from-kill-ring-with-quotation) (define-key Delmonta-Ctrl-O "l" 'delmonta-line-macro) (define-key Delmonta-Ctrl-O "h" 'delmonta-html-mode) (define-key Delmonta-Ctrl-O "\C-l" 'delmonta-line-macro) (define-key Delmonta-Ctrl-O "\C-h" 'delmonta-html-mode) (define-key Delmonta-Ctrl-O "s" 'set-selected-frame-size) (define-key Delmonta-Ctrl-O "?" 'apropos) (autoload 'delmonta-line-macro "ds-line" "Delmonta's Line Macro" t) (autoload 'delmonta-html-mode "ds-html" "Delmonta's HTML helper mode" t) ;---------------------------------- 特殊キー ---------------------------------- (global-set-key "\177" 'delete-char) (global-set-key "\M-h" help-map) (global-set-key "\M-\C-j" 'yank-and-replace-region) (global-set-key "\M- " 'tmm-menubar) (global-set-key "\M-\177" 'delete-region) (global-set-key "\M-+" 'enlarge-window) (global-set-key [f1] MSWin-Alt-File) (global-set-key [f2] 'other-window) (global-set-key [f3] 'switch-to-buffer) (global-set-key [f6] 'nonincremental-re-search-forward) (global-set-key [f7] 'query-replace-regexp) (global-set-key [up] 'vz-previous-line) (global-set-key [down] 'vz-next-line) (global-set-key [home] 'vz-left-of-screen) (global-set-key [(shift left)] 'vz-left-of-screen) (global-set-key [end] 'vz-right-of-screen) (global-set-key [(shift right)] 'vz-right-of-screen) (global-set-key [(shift up)] 'scroll-down-or-beginning-of-buffer) (global-set-key [prior] 'scroll-down-or-beginning-of-buffer) (global-set-key [(shift down)] 'scroll-up-or-end-of-buffer) (global-set-key [next] 'scroll-up-or-end-of-buffer) ;デフォルトでは (backward-)kill-word だが、 ;C-\ と C-BS の押し間違いが少なからずあるので、殺す (global-unset-key [(control backspace)]) (global-unset-key [(control delete)]) (global-set-key [henkan] (global-key-binding "\C-\\")) ;Emacs 21 では余計なお世話が入っている(普通の人には朗報だが)ので、殺す (if (fboundp 'normal-erase-is-backspace-mode) (normal-erase-is-backspace-mode 0) ) ;デフォルトでは mark-whole-buffer だが、ESC で始まるキーバインディング一覧を ;出してほしいので、殺す。 (global-unset-key "\e\C-h") ;空白を含むファイル名を入力するために (define-key minibuffer-local-completion-map [space] nil) (define-key minibuffer-local-completion-map " " nil) ;***************** キーボードの特殊キーを認識させるための設定 ***************** (add-hook 'term-setup-hook '(lambda () (message "term-setup-hook...") (normal-erase-is-backspace-mode -1) ; TeraTerm Pro…Linux と非互換なのが悩みの種。 (define-key function-key-map "\e[21~" [f10]) (define-key function-key-map "\e[3~" [delete]) ; Linux では delete (define-key function-key-map "\e[2~" [home]) (define-key function-key-map "\e[1~" [insert]) ;Linux Console ;BSキーを押すと0x7Fを吐くのはいただけないが…なんとかしたい。 (define-key function-key-map "\e[5~" [prior]) ;kterm@ux???.ecc + www.sodan (define-key function-key-map "\e[11~" [f1]) (define-key function-key-map "\e[12~" [f2]) (define-key function-key-map "\e[13~" [f3]) (define-key function-key-map "\e[14~" [f4]) ; Windows telnet.exe (define-key function-key-map "\eOA" [up]) (define-key function-key-map "\eOB" [down]) (define-key function-key-map "\eOC" [right]) (define-key function-key-map "\eOD" [left]) (define-key function-key-map "\eOP" [f1]) (define-key function-key-map "\eOQ" [f2]) (define-key function-key-map "\eOR" [f3]) (define-key function-key-map "\eOS" [f4]) ; ファンクションキーが全く効かない環境のために (define-key function-key-map "\C-o1" [f1]) (define-key function-key-map "\C-o2" [f2]) (define-key function-key-map "\C-o3" [f3]) (define-key function-key-map "\C-o6" [f6]) (define-key function-key-map "\C-o7" [f7]) (define-key function-key-map "\C-o8" [f8]) (define-key function-key-map "\C-o0" [f10]) ;(if (featurep 'xemacs) ; (define-key function-key-map "\C-o\C-s7" [(control f7)]) ; (define-key function-key-map "\C-o\C-s7" [C-f7]) ;) ; BSキーをDelキーの等価ではなくC-hの等価にする (define-key function-key-map [backspace] "\C-h") (put 'backspace 'ascii-character 8) ;環境によってはDeleteキーをC-hと等価に設定しているので、オーバーライド (define-key function-key-map [delete] "\177") (put 'delete 'ascii-character 127) ;わからん…Linux は Backspace キーが 0x7F を吐くのだけど、 ;0x7F を backward-delete-char にして、\e[3~ を delete-char にする ;方法がわからん Macに倣って両方backward-delete-charで妥協 (defun set-3~-as-delete () (interactive) (define-key function-key-map "\e[3~" [127]) (global-set-key "\177" 'backward-delete-char) ) (and (getenv "BACKSPACE_IS_127") (set-3~-as-delete) ) ;Home/Endキーはほとんど使わないので、Linux での PageUp 機能を優先 ;(define-key function-key-map "\e[5~" [end]) (message "term-setup-hook...done") )) ;検索文字列中にコントロールコードを入力するためのprefix(標準はC-q) ;(setq search-quote-char (list [?\C-p] [?\M-o ?\C-q])) ;------------------ いろいろなモードでのキー操作の変更 ------------------------ (add-hook 'dired-mode-hook '(lambda() (define-key dired-mode-map "\C-h" 'kill-buffer) )) (add-hook 'mh-letter-mode-hook '(lambda() (let (C-c) (setq C-c (lookup-key mh-letter-mode-map "\C-c")) (if C-c (define-key mh-letter-mode-map "\e\C-c" C-c) ) ) (define-key mh-letter-mode-map "\C-c" nil) )) (add-hook 'mew-init-hook '(lambda() (let (C-c) (setq C-c (lookup-key mew-summary-mode-map "\C-c")) (if C-c (define-key mew-summary-mode-map "\e\C-c" C-c) ) ) (define-key mew-summary-mode-map "\C-c" nil) )) (define-key lisp-interaction-mode-map "\177" 'delete-char) ;-------------------------------- Egg v3関連 ---------------------------------- ; fence-mode-map は egg.el で、henkan-mode-map は wnn-egg.el で定義されている。 ;------------------------------------------------------------------------------ (if (boundp 'fence-mode-map) (progn ;ファンクションキーなどがコンソールでもきちんと使えるように (define-key fence-mode-map "\eO" nil) (define-key fence-mode-map "\e[" nil) (define-key henkan-mode-map "\eO" nil) (define-key henkan-mode-map "\e[" nil) ;Control+英字 (setq fence-Meta-Original (make-sparse-keymap)) (setq henkan-Meta-Original (make-sparse-keymap)) (define-key fence-mode-map "\eo" fence-Meta-Original) (define-key henkan-mode-map "\eo" henkan-Meta-Original) (if (eq (lookup-key fence-mode-map "\C-d") 'fence-delete-char) (let (i) (dolist (i '("\C-d" "\C-f" "\177" [delete])) (define-key fence-Meta-Original i (lookup-key fence-mode-map i)) )) ) (define-key fence-mode-map "\C-h" 'fence-backward-delete-char) (define-key fence-mode-map "\C-d" 'fence-forward-char) (define-key fence-mode-map "\C-s" 'fence-backward-char) (define-key fence-mode-map "\C-f" 'fence-end-of-line) (define-key fence-mode-map "\C-y" 'fence-kill-line) (define-key fence-mode-map "\177" 'fence-delete-char) (define-key fence-mode-map [delete] nil) ; \177 のほうを見に行ってもらう (if (eq (lookup-key henkan-mode-map "\C-d") 'undefined) (let (i) (dolist (i '("\C-e" "\C-f" "C-h")) (define-key henkan-Meta-Original i (lookup-key henkan-mode-map i)) )) ) (define-key henkan-mode-map "\C-h" 'henkan-quit) (define-key henkan-mode-map "\C-d" 'henkan-forward-bunsetu) (define-key henkan-mode-map "\C-e" 'henkan-previous-kouho) (define-key henkan-mode-map "\C-x" 'henkan-next-kouho) (define-key henkan-mode-map "\C-s" 'henkan-backward-bunsetu) (define-key henkan-mode-map "\C-f" 'henkan-last-bunsetu) (or (featurep 'jisx0201) (featurep 'egg-jisx0201) (load "jisx0201" t t) ; jisx0201.el が M-x を書き換えるので、 (load "egg-jisx0201" t t) ; 先に読み込んでから自前で元に戻す ) (define-key fence-mode-map "\M-x" 'execute-extended-command) (define-key henkan-mode-map "\M-x" 'execute-extended-command) ;ファンクションキー (define-key fence-mode-map [f6] 'fence-hiragana) (define-key fence-mode-map [f7] 'fence-katakana) (define-key fence-mode-map [f8] '(lambda () (interactive) (fence-hankaku) ; ASCII を半角化 (fence-hankaku-katakana) ; カタカナを半角化 ) ) (define-key fence-mode-map [f9] 'fence-zenkaku) ;f10 はグローバルキーにしないと、Wnn を ON にしただけで文字を入れていない ;ときには動かない (global-set-key [f10] 'special-symbol-input) (define-key henkan-mode-map [f6] 'henkan-hiragana) (define-key henkan-mode-map [f7] 'henkan-katakana) (define-key henkan-mode-map [f8] '(lambda () (interactive) (henkan-katakana) ;(henkan-hankaku) うまくいかない ;(henkan-hankaku-katakana) うまくいかない ) ) (define-key henkan-mode-map [(shift left)] 'henkan-bunsetu-chijime-dai) (define-key henkan-mode-map [(shift right)] 'henkan-bunsetu-nobasi-dai) (global-set-key [(control f7)] 'toroku-region) (setq enable-double-n-syntax t) ; 'nn' で 'ん' を入力する (load "wnn-recovery" t) (its-define-mode "roma-kana" "あ連R漢" nil) )) ; (if (boundp 'function-key-map) (progn ;-------------------------------- Tamago4 関係 -------------------------------- ; its-mode-map は its-keydef.el で、egg-conversion-map は egg-cnv.el で定義され ; ている。 ;------------------------------------------------------------------------------ (if (boundp 'its-mode-map) (progn ;ファンクションキーなどがコンソールでもきちんと使えるように (define-key its-mode-map "\eO" nil) (define-key its-mode-map "\e[" nil) (define-key egg-conversion-map "\eO" nil) (define-key egg-conversion-map "\e[" nil) ;Control+英字…まあ、これはおいおい、Tamago4 を常用する機会がができたら。 (define-key its-mode-map "\eo" (make-sparse-keymap)) (define-key egg-conversion-map "\eo" (make-sparse-keymap)) ;特殊キー (define-key egg-conversion-map [(shift right)] 'egg-enlarge-bunsetsu-major) (define-key egg-conversion-map [(shift left) ] 'egg-shrink-bunsetsu-major) (define-key egg-conversion-map [f6] 'egg-hiragana) (define-key egg-conversion-map [f7] 'egg-katakana) (define-key its-mode-map [f6] 'its-hiragana) (define-key its-mode-map [f7] 'its-katakana) ;ローマ字カスタマイズ (define-its-state-machine-append its-hira-map (its-defrule "dhi" "でぃ" nil t) (its-defrule "dhu" "どぅ" nil t) (its-defrule "thi" "てぃ" nil t) (its-defrule "thu" "とぅ" nil t) ) ;雑 (setcar (cdr its-hira-map) "[あ連R漢]") )) ; (if (boundp 'its-mode-map) (progn ;------------------------------------------------------------------------------ )) ; (if 極悪非道キーを使う (progn ;############################################################################# ;# JISかな入力 # ;############################################################################# (if (y-or-n-p "its/kanainputパッケージ+Delmontaカスタマイズを使用しますか?") (progn ;--------------------------共通キー設定+XMiNT用設定-------------------------- (defun delmonta-kanainput-common-redefinition () (its-define-mode "kanainput" "あ連カナ漢" nil) (its-defrule-select-mode-temporally "R" "roma-kana") (its-defrule-select-mode-temporally "X" "zenkaku-downcase") ;本当は Q を使いたいが、「Q なんとか」をぜんぶ殺す必要があって ;めんどくさいので、これでお茶を濁しておく (its-defrule "4[" "ヴ") ;う゛ (its-defrule "?" "・") ;Shift+め (its-defrule "We" "ゐ") ;W い (its-defrule "W5" "ゑ") ;W え ;以下は 97-98 年の設定。 ;(its-defrule "\\" "ー");「へ」の隣に「ー」がないのは気になる ;(its-defrule "`" "む") ;(its-defrule "~" "ろ") ;MSIME98 と統一させるための設定 (its-defrule "\\" "む") (its-defrule "`" "ろ") (its-defrule "_" "ー") ) (defun delmonta-kanainput-keymap-vt100 () "メリケン系鍵盤(XMiNT,101,etc.)用にkanainputを設定します" (interactive) (load "its/kanainput" t) (load "its-kanainput" t) (delmonta-kanainput-common-redefinition) ) ;-----------------------日本語106/NEC PC-98[02]1用設定------------------------ (defun delmonta-kanainput-keymap-jis () "106 / PC-9800 キーボード用にkanainputを設定します" (interactive) (its-define-mode "kanainput" "ア連カナ漢" nil) (its-defrule "\"" "@") ; 英語キーボード同様 Shift+2 で @ を出す (its-defrule "@" "゛") (its-defrule "[" "゜") (its-defrule "&" "ぉ") (its-defrule "'" "ゃ") (its-defrule "(" "ゅ") (its-defrule ")" "ょ") (its-defrule "^" "へ") (its-defrule "\\" "ー") (its-defrule "=" "を") ;Shift+0 が使えないので、隣のキーで代用 (its-defrule "=[" nil) ;英語配列ではべ・ぺになっているもの (its-defrule "=]" nil) (its-defrule ":" "け") (its-defrule "]" "む") (its-defrule "4@" "ヴ") (its-defrule "_" "ろ") (its-defrule "t@" "が") (its-defrule "g@" "ぎ") (its-defrule "h@" "ぐ") (its-defrule ":@" "げ") (its-defrule "b@" "ご") (its-defrule "x@" "ざ") (its-defrule "d@" "じ") (its-defrule "r@" "ず") (its-defrule "p@" "ぜ") (its-defrule "c@" "ぞ") (its-defrule "q@" "だ") (its-defrule "a@" "ぢ") (its-defrule "z@" "づ") (its-defrule "w@" "で") (its-defrule "s@" "ど") (its-defrule "f@" "ば") (its-defrule "v@" "び") (its-defrule "2@" "ぶ") (its-defrule "^@" "べ") (its-defrule "-@" "ぼ") (its-defrule "f[" "ぱ") (its-defrule "v[" "ぴ") (its-defrule "2[" "ぷ") (its-defrule "^[" "ぺ") (its-defrule "-[" "ぽ") ) ;----------------------------- kanainput のロード ----------------------------- (defun delmonta-load-egg3-kanainput() (catch 'delmonta-load-egg3-kanainput (setq its:*defrule-verbose* nil) (load "its/kanainput" t) ; Mule 2.3 の場合 (load "its-kanainput" t) ; XEmacs の場合 (if (not (its:get-mode-map "kanainput")) (progn (message "kanainput はインストールされていないようです。\n") (sleep-for 1) (throw 'delmonta-load-egg3-kanainput nil) )) (setq its:*standard-modes* (append (list (its:get-mode-map "kanainput")) its:*standard-modes* ) ) (setq-default its:*current-map* (its:get-mode-map "kanainput")) (its:select-mode "kanainput") ; XEmacs ではこれが必要 (delmonta-kanainput-common-redefinition) )) (eval-after-load "egg-wnn" '(delmonta-load-egg3-kanainput)) ; XEmacs+egg-its (if (boundp 'WNN) ; Mule 2.3 / emcws (delmonta-load-egg3-kanainput) ) )) ; (if JISかな入力 (progn ;****************************************************************************** ; メーラーの設定 ;------------------------------------------------------------------------------ ; ht.sakura.ne.jp の mh-e がタコなので… ;****************************************************************************** (setq mh-compose-letter-function '(lambda (szTo szSubject szCc) (interactive) (goto-char (point-min)) (insert "From: IIJIMA Hiromitsu \n" "Content-type: text/plain; charset=iso-2022-jp\n" "Content-transfer-encoding: 7bit\n" ) (goto-char (point-max)) ; デフォルトの文字セットを ISO-2022-JP にする ; あとで変更できるように! (cond ((boundp '*euc-japan*) ; Emacs 19 (set-file-coding-system *iso-2022-jp*unix) )((commandp 'set-language-environment) ; Emacs 20+ (set-buffer-file-coding-system 'iso-2022-jp-unix) )) )) ; この hook には、mule-init.el で (set-file-coding-system *junet*) が ; 設定されているので、それを無効にする (setq mh-before-send-letter-hook nil) ;****************************************************************************** ;* マクロ * ;****************************************************************************** ;------------------------- ギリシャ文字入力パッケージ ------------------------- ;(quailモードで M-s greek としたときの文字セットは ISO-8859-7 なので、 ; JIS X0208 のギリシャ文字を使うにはそのあともう一度 M-s jis-greek と ; しなければならず、めんどくさい) ;------------------------------------------------------------------------------ (defun delmonta-jis-greek () "quail/greekを読み込み、jis-greekをquailのデフォルトにします" (interactive) (load-library "quail/greek") (quail-select-package "jis-greek") ) ;-------------------------------- タブ長さ設定 -------------------------------- (defun delmonta-set-tab-width-and-tab-stop-list (n) "タブ幅を指定します" (interactive "nTab width: ") (setq tab-width n) ; \x09 を画面上に空白いくつで表示するか (setq tab-stop-list ()) ; TAB を押したときの飛び先 (while (< n 256) (setq tab-stop-list (append tab-stop-list (list n))) (setq n (+ n tab-width)) ) ) (delmonta-set-tab-width-and-tab-stop-list 8) ;---------- ウィンドウ(フレーム)のサイズを interactive に変更する ---------- (defun set-selected-frame-size (width height) (interactive (list (string-to-int (read-string (format "Width(now %d):" (frame-width (selected-frame))) )) (string-to-int (read-string (format "Height(now %d):" (frame-height (selected-frame))) )) )) (set-frame-size (selected-frame) width height) ) ;----------------------- 韓国語などの印刷のために(^_^;) ----------------------- (defvar delmonta-save-mode-line-format nil "delmonta-disable-mode-line における変数退避用領域") (defvar delmonta-save-mode-line-inverse-video nil "delmonta-disable-mode-line における変数退避用領域") (defun delmonta-disable-mode-line () (interactive) (if delmonta-save-mode-line-format (progn (setq mode-line-inverse-video delmonta-save-mode-line-inverse-video) (setq mode-line-format delmonta-save-mode-line-format) (setq delmonta-save-mode-line-format nil) ) (setq delmonta-save-mode-line-inverse-video mode-line-inverse-video) (setq mode-line-inverse-video nil) (setq delmonta-save-mode-line-format mode-line-format) (setq mode-line-format "") ) (if (boundp 'update-mode-lines) (update-mode-lines)) ) ;----------------------------- フォントロック関係 ----------------------------- (defun delmonta-setup-font-lock () (interactive) (require 'font-lock) (setq delmonta-font-lock-keywords (list ;'("[^ -~ -瑤\t\n]" ;(0 delmonta-font-lock-non-japanese t)) '("[∈-◯─-╂]" (0 delmonta-font-lock-jis83 t)) '(" " (0 delmonta-font-lock-zenkaku-space t)) '("\n" (0 delmonta-font-lock-newline t)) '("<[^<]+>" (0 delmonta-font-lock-html-font-tag t)) '("\t" (0 delmonta-font-lock-horizontal-tab t)) ) ; "*でるもんたのフォントロックパターン表" ); (setq font-lock-defaults-alist (append (list '(fundamental-mode (delmonta-font-lock-keywords t t)) ) font-lock-defaults-alist )) (setq font-lock-face-attributes (append (list '(delmonta-font-lock-zenkaku-space nil "blue") '(delmonta-font-lock-newline nil "aquamarine") '(delmonta-font-lock-non-japanese "white" "red") '(delmonta-font-lock-horizontal-tab "wheat") '(delmonta-font-lock-jis83 "green") '(delmonta-font-lock-html-font-tag "mediumslateblue") ) font-lock-face-attributes )) (global-font-lock-mode t) (add-hook 'find-file-hook 'turn-on-font-lock) ) (if (y-or-n-p "font-lock による特殊記号の色分けを使用しますか") (delmonta-setup-font-lock) ) ;------------------------------- フォントの設定 ------------------------------- (if (and (eq window-system 'x) (boundp 'lc-kr)) (progn (set-fontset-font "default-fontset" lc-kr "-*-gothic-medium-r-*--*-ksc5601.1987-*") ;韓国語(^_^;)は明朝より読みやすいゴシックに (let ( (sFontName "-*-*-bold-r-*--16-*-iso8859-1") (sFont2byte "-*-*-bold-r-*--16-*-jisx0208.1983-*") ) (set-fontset-font "default-fontset" lc-ltn3 sFontName) (set-fontset-font "default-fontset" lc-ltn4 sFontName) (set-fontset-font "default-fontset" lc-ltn5 sFontName) (set-fontset-font "default-fontset" lc-thai sFontName) (set-fontset-font "default-fontset" lc-grk sFontName) (set-fontset-font "default-fontset" lc-crl sFontName) (set-fontset-font "default-fontset" lc-ipa0 sFontName) (set-fontset-font "default-fontset" lc-sisheng sFontName) (set-fontset-font "default-fontset" lc-vn-1 sFontName) (set-fontset-font "default-fontset" lc-vn-2 sFontName) (set-fontset-font "default-fontset" lc-arb0 sFontName) (set-fontset-font "default-fontset" lc-arb1 sFontName) (set-fontset-font "default-fontset" lc-arb0 sFontName) (set-fontset-font "default-fontset" lc-arb1 sFontName) (set-fontset-font "default-fontset" lc-arb2 sFontName) (set-fontset-font "default-fontset" lc-ethio sFont2byte) (set-fontset-font "default-fontset" lc-cns1 sFont2byte) (set-fontset-font "default-fontset" lc-cns2 sFont2byte) (set-fontset-font "default-fontset" lc-cns3 sFont2byte) (set-fontset-font "default-fontset" lc-cns4 sFont2byte) (set-fontset-font "default-fontset" lc-cns5 sFont2byte) (set-fontset-font "default-fontset" lc-cns6 sFont2byte) (set-fontset-font "default-fontset" lc-cns7 sFont2byte) ) )) ;------------------------------------------------------------------------------ (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(safe-local-variable-values (quote ((file-coding-system . *euc-japan*))))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) ;Local variables: ; file-coding-system: *euc-japan* ;End: