;;
;; .emacs20 : Emacs $B=i4|@_Dj(B
;;

;;
;; $B4pK\@_Dj(B
;; 

;; $B%m!<%I%Q%9$NDI2C(B
(setq load-path
      (append '("/usr/local/share/emacs/site-lisp"
                "/usr/local/share/emacs/20.7/site-lisp"
                "/usr/local/lib/wnn7/elisp/emacs20")
              load-path))

;; $B8@8l@_Dj(B
(set-language-environment "Japanese")
(put 'eval-expression 'disabled nil)
(line-number-mode 1)
(setq default-tab-width 4)

;; KOI8-R $B4D6-$N$H$-$N%$%s%W%C%H%a%=%C%I$O(B Yawerty
(set-language-info-alist
 "Cyrillic-KOI8" `((input-method . "cyrillic-yawerty"))
 '("Cyrillic"))

;; $B6/D4(B
(global-font-lock-mode t)
;;(require 'paren)
(show-paren-mode 1)

;; ! $B$GBP1~$9$k3g8L$K0\F0(B
(global-set-key "!" 'match-paren)
(defun match-paren (arg)
  "Go to the matching paren if on a paren; otherwise insert !."
  (interactive "p")
  (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1))
        ((looking-at "\\s\)") (forward-char 1) (backward-list 1))
        (t (self-insert-command (or arg 1)))))

;; Backup control
(fset 'make-backup-file-name
      '(lambda (file)
         (concat (expand-file-name "/tmp/edback/")
                 (file-name-nondirectory file))
         ))
(if (file-exists-p "/tmp/edback/")
    (setq auto-save-list-file-prefix "/tmp/edback/"))

;;(setq version-control t)
;;(setq kept-new-versions 2)

;; .save.. $B%U%!%$%k$r:n$i$J$$(B
(setq auto-save-list-file-name nil)
(setq auto-save-list-file-prefix nil)

;; Frame
(setq default-frame-alist
      (append (list '(foreground-color . "#330000")
;                    '(background-color . "mistyrose")
                    '(border-color . "red")
                    '(mouse-color . "mediumpurple")
                    '(cursor-color . "#8B0000")
                    )
              default-frame-alist))

;;
;; UNICODE Mule-UCS $B@_Dj(B
;;
(setq unicode-basic-translation-charset-order-list
      '(ascii
        latin-iso8859-1 latin-iso8859-2 latin-iso8859-3 latin-iso8859-4
        cyrillic-iso8859-5 greek-iso8859-7 hebrew-iso8859-8 latin-iso8859-9
        ipa thai-tis620 ethiopic indian-is13194 
        vietnamese-viscii-lower vietnamese-viscii-upper
        japanese-jisx0208
        korean-ksc5601
        chinese-cns11643-1 chinese-cns11643-2 chinese-cns11643-3
        chinese-cns11643-4 chinese-cns11643-5 chinese-cns11643-6
        chinese-cns11643-7
        chinese-gb2312
        chinese-big5-1 chinese-big5-2
        chinese-sisheng
        japanese-jisx0212
        japanese-jisx0213-1 japanese-jisx0213-2
        latin-jisx0201 katakana-jisx0201
        mule-unicode-0100-24ff mule-unicode-2500-33ff mule-unicode-e000-ffff
        ))
(require 'un-define)
(require 'un-tools)
(require 'jisx0213)

;;
;; JIS X 0213
;;
(require 'egg-sim-jisx0213)

(let (fontset)
  (when (setq fontset (query-fontset "-*-*-medium-r-*-*-16-*-*-*-*-*-*-*"))
    (set-fontset-font fontset 'japanese-jisx0213-1 "*jisx0213.2000-1")
    (set-fontset-font fontset 'japanese-jisx0213-2 "*jisx0213.2000-2")
    )
  (when (setq fontset (query-fontset "-*-*-medium-r-*-*-24-*-*-*-*-*-*-*"))
    (set-fontset-font fontset 'japanese-jisx0213-1 "*shiftjis-0")
    (set-fontset-font fontset 'japanese-jisx0213-2 "*shiftjis-0")
    ))

;;
;; Coding system
;;
(set-terminal-coding-system 'utf-8-unix)
(set-default-coding-systems 'utf-8-unix)
(set-buffer-file-coding-system 'utf-8-unix)

;; by masuyama
(put 'utf-8 'eol-type [utf-8-unix utf-8-dos utf-8-mac])
(put 'utf-8-unix 'eol-type 0)
(put 'utf-8-dos 'eol-type 1)
(put 'utf-8-mac 'eol-type 2)
(coding-system-put 'utf-8      'alias-coding-systems '(utf-8))
(coding-system-put 'utf-8-dos  'alias-coding-systems '(utf-8))
(coding-system-put 'utf-8-mac  'alias-coding-systems '(utf-8))
(coding-system-put 'utf-8-unix 'alias-coding-systems '(utf-8))
;; raw text $B$N>l9g(B utf8 $B$H$_$J$9(B
(setq coding-category-raw-text 'utf-8-unix)

;;
;; HTML/XML utf-8 $BH=JL(B (by masuyama)
;;
(defvar html-xml-charset-decl-alist
  '(("\\.s?html?$" nil
     "<meta\\b[^>]+content-type[^>]+charset *= *\\([a-zA-Z0-9_.-]+\\)")
    ("\\.xml$" utf-8
     "<\\?xml\\b[^>]+encoding=['\"]\\([a-zA-Z0-9_.-]+\\)")))
(defvar html-xml-auto-coding-chain)
(defun html-xml-auto-coding (filename size)
  (or (funcall html-xml-auto-coding-chain filename size)
      (let ((case-fold-search t) (alist html-xml-charset-decl-alist)
            search-limit pat cs string)
        (while (and alist (not pat))
          (if (string-match (car (car alist)) filename)
              (setq pat (cdr (car alist))))
          (setq alist (cdr alist)))
        (when pat
          (goto-char (point-min))
          (setq search-limit (+ (min size 4096) (point)))
          (if (not (search-forward-regexp (cadr pat) search-limit t))
              (car pat)
            (setq string (downcase (match-string 1)))
            (while (string-match "^x-" string)
              (setq string (substring string 2)))
            (setq cs (intern string))
            (if (coding-system-p cs) cs))))))
(setq html-xml-auto-coding-chain set-auto-coding-function
      set-auto-coding-function 'html-xml-auto-coding)

;;
;; Egg (Wnn $B%U%m%s%H%(%s%I(B) $B$N@_Dj(B
;;
;; Wnn7 
(global-set-key "\C-\\" 'toggle-input-method)
(load "wnn7egg-leim")
(set-input-method "japanese-egg-wnn7")
(set-language-info "Japanese" 'input-method "japanese-egg-wnn7")
;; $B3Z!9F~NO$r;HMQ(B
(egg-use-input-predict)
;; isearch $B$GF|K\8lF~NO(B
(define-key isearch-mode-map "\C-k" 'isearch-edit-string)
;; $B6gFIE@(B: $B!%!$(B
(setq use-touten-for-comma nil)
(setq use-kuten-for-period nil)

;; $BJ8;zF~NO4X?t(B -- $B4D6-$K$h$C$F$O;HMQIT2D(B
(defun insert-zenkaku-space ()    ; $BA43Q%9%Z!<%9F~NO(B
    (interactive)
    (insert "$B!!(B"))
(defun insert-zenkaku-comma ()    ; $BA43Q%3%s%^F~NO(B
    (interactive)
    (insert "$B!$(B"))
(defun insert-zenkaku-period ()   ; $BA43Q%T%j%*%IF~NO(B
    (interactive)
    (insert "$B!%(B"))
(defun insert-zenkaku-toten ()    ; $BA43QFIE@F~NO(B
    (interactive)
    (insert "$B!"(B"))
(defun insert-zenkaku-kuten ()    ; $BA43Q6gE@F~NO(B
    (interactive)
    (insert "$B!#(B"))
(defun insert-zenkaku-chuten ()   ; $BA43QCfE@F~NO(B
    (interactive)
    (insert "$B!&(B"))
(defun insert-zenkaku-nijukagi () ; $BA43Q!X!YF~NO(B
    (interactive)
    (insert "$B!X!Y(B"))

(global-set-key "\C-c\C-s" 'insert-zenkaku-space)
(global-set-key "\C-c\C-m" 'insert-zenkaku-comma)
(global-set-key "\C-c\C-p" 'insert-zenkaku-period)
(global-set-key "\C-c\C-t" 'insert-zenkaku-toten)
(global-set-key "\C-c\C-k" 'insert-zenkaku-kuten)
(global-set-key "\C-c\C-o" 'insert-zenkaku-chuten)
(global-set-key "\C-c\C-[" 'insert-zenkaku-nijukagi)

;; 
;; coded on 11 Aug 2001 by Junichi Uekawa  <dancer@debian.org>
;; Copyright 2001 Junichi Uekawa
;;
(defun translate-comma-japanese-ronbun ()
 "translate maru and ten to comma and period so that the document gives a decent feeling"
 (interactive)
 (goto-line 1)
 (while (search-forward "$B!#(B" nil t)
    (replace-match "$B!%(B" nil t))
 (goto-line 1)
 (while (search-forward "$B!"(B" nil t)
    (replace-match "$B!$(B" nil t))
 )

(defun translate-comma-japanese-ippan ()
 "translate maru and ten to comma and period so that the document gives a decent feeling"
 (interactive)
 (goto-line 1)
 (while (search-forward "$B!%(B" nil t)
    (replace-match "$B!#(B" nil t))
 (goto-line 1)
 (while (search-forward "$B!$(B" nil t)
    (replace-match "$B!"(B" nil t))
 )

(global-set-key [f11] 'translate-comma-japanese-ronbun)
(global-set-key [f12] 'translate-comma-japanese-ippan)

;;
;; Change input method
;;
(defun set-cyrillic-input ()
 "cyrillic yawerty"
 (interactive)
 (set-input-method "cyrillic-yawerty")
 )

(defun set-japanese-input ()
 "japanese egg wnn7"
 (interactive)
 (set-input-method "japanese-egg-wnn7")
 )

(defun set-latin1-input ()
 "latin-1"
 (interactive)
 (set-input-method "latin-1-postfix")
 )

(defun set-latin2-input ()
 "latin-2"
 (interactive)
 (set-input-method "latin-2-postfix")
 )

(global-set-key [f5] 'set-cyrillic-input)
(global-set-key [f6] 'set-japanese-input)
(global-set-key [f7] 'set-latin1-input)
(global-set-key [f8] 'set-latin2-input)

;;
;; Egg for FreeWnn
;;
;;(setq its-hira-comma  "$B!$(B")
;;(setq its-hira-period "$B!%(B")
;;(setq its-hira-enable-zenkaku-alphabet nil)
;;(defun toggle-kutoten ()
;;    "$B6gFIE@$r(B $B!V!$!W!V!%!W$K$9$k$+!V!"!W!V!#!W$K$9$k$+@Z$jBX$($k!#(B"
;;    (interactive)
;;    (if (equal its-hira-comma "$B!"(B")
;;        (progn
;;            (setq its-hira-comma  "$B!$(B") ; $B!H(B,$B!I$r!H!$!I$KJQ49(B
;;            (setq its-hira-period "$B!%(B") ; $B!H(B.$B!I$r!H!%!I$KJQ49(B
;;            (message "$B!$!%%b!<%I(B"))
;;        (setq its-hira-comma  "$B!"(B")     ; $B!H(B,$B!I$r!H!"!I$KJQ49(B
;;        (setq its-hira-period "$B!#(B")     ; $B!H(B.$B!I$r!H!#!I$KJQ49(B
;;        (message "$B!"!#%b!<%I(B")))

;;
;; JDE
;;
;;(require 'jde)

;;
;; Mode
;; 
(setq auto-mode-alist
      (append '(("\\.C$"    . c++-mode)
                ("\\.cc$"   . c++-mode)
                ("\\.cpp$"  . c++-mode)
                ("\\.hh$"   . c++-mode)
                ("\\.c$"    . c-mode)
                ("\\.h$"    . c-mode)
                ("\\.m$"    . objc-mode)
;;              ("\\.java$" . jde-mode)
                ("\\.java$" . java-mode)
                ("\\.pl$"   . perl-mode)
                ("\\.perl$" . perl-mode)
                ("\\.tex$"  . yatex-mode)
                ("\\.sty$"  . yatex-mode)
                ("\\.cls$"  . yatex-mode)
                ("\\.clo$"  . yatex-mode)
                ("\\.dtx$"  . yatex-mode)
                ("\\.fdd$"  . yatex-mode)
                ("\\.ins$"  . yatex-mode)
                ("\\.s?html?$" . yahtml-mode)
                ) auto-mode-alist))

;; c/c++, java
(autoload 'c++-mode  "cc-mode" "C++ Editing Mode" t)
(autoload 'c-mode    "cc-mode" "C Editing Mode" t)
(autoload 'objc-mode "cc-mode" "Objective-C Editing Mode" t)
(autoload 'java-mode "cc-mode" "Java Editing Mode" t)
;;(autoload 'jde-mode "cc-mode" "Java Editing Mode" t)
(setq c-tab-always-indent t)
(setq c-default-style "bsd")
(setq c-block-comments-indent-p 3)
(setq c-mode-hook
      (function (lambda ()
                  (c-set-style-1
                   '((c-basic-offset . 4) ; change
                     (c-offsets-alist .
                                      ((statement-block-intro . +)
                                       (knr-argdecl-intro     . 5)
                                       (substatement-open     . +)
                                       (label                 . 0)
                                       (statement-case-open   . +)
                                       (statement-cont        . +)
                                       (arglist-intro . +) ; change
                                       (arglist-close . 0) ; change
                                       (access-label  . 0))
                                      ))))))
(setq c++-mode-hook c-mode-hook)
(setq java-mode-hook
      (function (lambda ()
                  (c-set-style-1
                   '((c-basic-offset . 4) ; change
                     (c-offsets-alist .
                                      ((statement-block-intro . +)
                                       (knr-argdecl-intro     . 5)
                                       (substatement-open     . +)
                                       (label                 . 0)
                                       (statement-case-open   . +)
                                       (statement-cont        . +)
                                       (arglist-intro . +) ; change
                                       (arglist-close . 0) ; change
                                       (access-label  . 0))
                                      ))))))

;;
;; JSP Java/html multi-mode
;;
;;(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(autoload 'multi-mode
  "multi-mode"
  "Allowing multiple major modes in a buffer."
  t)
(defun jsp-mode () 
  (multi-mode 1
              'yahtml-mode
              ;;your choice of modes for java and html
              '("<%" java-mode)
              ;;'("<%" jde-mode)
              '("%>" yahtml-mode)))
(setq auto-mode-alist (append '(("\\.jsp$" . jsp-mode)) auto-mode-alist))

;;
;; YaTeX $B$N@_Dj(B
;;
(autoload 'yatex-mode "yatex" "Yet Another LaTeX Mode" t)
;; EUC $B4A;z%3!<%I(B
(setq YaTeX-kanji-code 3)
(setq tex-command "platex")
(setq dvi2-command "xdvi")
(setq section-name "documentclass")
(setq mode-name "YaTeX")
(setq YaTeX-fill-column 240)

;; bold, italic $B$K$7$J$$(B
(setq YaTeX-font-lock-bold-face 'bold
      YaTeX-font-lock-italic-face 'italic
      YaTeX-use-italic-bold nil)

(defface YaTeX-font-lock-bold-face
  '((((class color) (background dark)) (:foreground "lightgoldenrod"))
    (((class color) (background light)) (:foreground "DarkGoldenrod"))
    (t (:bold nil)))
  "Font Lock mode face used to express bold itself."
  :group 'font-lock-faces)
(defvar YaTeX-font-lock-bold-face 'YaTeX-font-lock-bold-face)

(defface YaTeX-font-lock-italic-face
  '((((class color) (background dark)) (:foreground "Plum1"))
    (((class color) (background light)) (:foreground "purple"))
    (t (:italic t)))
  "Font Lock mode face used to express italic itself."
  :group 'font-lock-faces)
(defvar YaTeX-font-lock-italic-face 'YaTeX-font-lock-italic-face)

;;
;; YaHTML $B$N@_Dj(B
;;
(autoload 'yahtml-mode "yahtml" "Yet Another HTML Mode" t)
(setq yahtml-www-browser "mozilla")
(setq yahtml-path-url-alist
      '(("/home/user/src/" . "http://dddd.ne.jp/~user/")))

;; $B4A;z%3!<%I$N;XDj(B(1=sjis, 2=jis, 3=euc)
(setq yahtml-kanji-code 2)

;; HTML $B$N%?%0$rBgJ8;z$K$9$k(B
;; (setq yahtml-prefer-upcases t)

;; $BB0@-;XDj;R$rBgJ8;z$K$9$k(B
;; (setq yahtml-prefer-upcase-attributes t)

;; $B<+F02~9T$O$7$J$$(B
(setq yahtml-fill-column nil)

;; yahtml-mode $B=i4|2=;~$N@_Dj(B
(add-hook 'yahtml-mode-hook
          (function
           (lambda ()
             ;; outline-minor-mode $B$N@_Dj(B($B;HMQ$7$J$$>l9g$OITMW(B)
             (outline-minor-mode t)   ; outline-minor-mode $B$r5/F0(B
             ;; $B8+=P$7$N@55,I=8=(B
             (make-local-variable 'outline-regexp)
             (setq outline-regexp "^.*<[Hh][1-6]\\>") 
             ;; $B8+=P$7=*$o$j$N@55,I=8=(B
             (make-local-variable 'outline-heading-end-regexp)
             (setq outline-heading-end-regexp "</[Hh][1-6]>")
             ;; $B8+=P$7%l%Y%k$N7W;;<0(B
             (make-local-variable 'outline-level)
             (setq outline-level
                   (function (lambda () (char-after (1- (match-end 0))))))
             
             ;; font-lock $B$N@_Dj(B
             (setq YaTeX-use-font-lock t))))

;; font-lock
(defvar yahtml-hilit-patterns-alist
  '(
    'case-fold
    ;; comments
    ("<!--\\s " "-->" comment)
    ;; include&exec
    ("<!--#\\(include\\|exec\\|config\\|fsize\\|flastmod\\)" "-->" include)
    ;; string
    (hilit-string-find ?\\ string)
    ;; bold $B$K$O$7$J$$(B
    ;; (yahtml-hilit-region-tag "<\\(em\\|strong\\|b\\)\\>" bold)
    ("</?[uod]l>" 0 decl)
    ("<\\(di\\|dt\\|li\\|dd\\)>" 0 label)
    (yahtml-hilit-region-tag "<\\(i\\>\\)" italic)
    ;("<a\\s +href" "</a>" crossref) ;good for hilit19, but odd for font-lock..
    (yahtml-hilit-region-tag "<\\(a\\)\\s +href" crossref)
    (yahtml-hilit-region-tag-itself "</?\\sw+\\>" decl)
    ))

;;
;; Mew $B$N@_Dj(B
;;
(autoload 'mew "mew" nil t)
(autoload 'mew-send "mew" nil t)
(setq mew-name "Isao YASUDA")                     ;; (user-full-name)
(setq mew-user "isao")                            ;; (user-login-name)
(setq mew-mail-domain "foo.net")
(setq mew-pop-user "xxxx")                        ;; (user-login-name)
(setq mew-pop-auth 'pass)
(setq mew-smtp-server "laura")                    ;; if not localhost
;; See also mew-config-alist for advanced use

(setq mew-mail-domain-list
      '("aaa.bbbb.co.jp" "cccc.or.jp" "dddd.ne.jp"))
(setq mew-icon-directory "/usr/local/share/emacs/20.7/etc/Mew")

;; $B$$$A$$$A%Q%9%o!<%I$r$-$+$J$$$G(B
(setq mew-use-cached-passwd t)

;; $B%j%W%i%$;~(B Cc: $B$K<+J,$N%"%I%l%9$r$$$l$J$$(B
(setq mew-mail-address-list '("xxx@foo.net"))
(setq mew-reply-to "yyy@dddd.ne.jp")
(setq mew-from "Isao YASUDA <yyy@dddd.ne.jp>")
(setq mew-fcc "+Backup")

;; draft mode $B$G(B subject $B$K4A;z$rF~NO$G$-$J$$LdBj$NBP:v(B
;;(setq mew-use-overlay-keymap nil)

;; $B%a!<%k$N0u:~@_Dj(B
(setq mew-print-command-format "a2ps-j | lpr -Pps")
(defun mew-print-region (begin end)
  (interactive "r")
  (shell-command-on-region begin end mew-print-command-format))
(defun mew-print-buffer ()
  (interactive)
  (mew-print-region (point-min) (point max)))
(setq mew-print-function (function mew-print-buffer))

;; $B0zMQ@_Dj(B
(setq mew-cite-fields '("From:" "Message-ID:" "Subject:" "Date:"))
(setq mew-cite-format 
      "%s san wrote at :\n- Message-ID: %s\n- Subject: %s\n- Date: %s\n")
;;(setq mew-cite-prefix-function 'mew-cite-prefix-username)
(setq mew-cite-prefix ">")

;; Using "Mozilla"
(add-hook 'mew-message-mode-hook
          (function
           (lambda ()
             (local-set-key [mouse-2] 'browse-url-at-mouse))))
(require 'mew-browse)
(setq mew-ext-prog-url "/usr/X11R6/bin/mozilla")

;;
;; Ispell
;;
;; $B8D?M<-=q(B
(setq ispell-personal-dictionary "~/.ispell-dict-personal")
;; $BI8=`<-=q(B $B%m%7%"8l(B
(setq ispell-dictionary "russian")

;;
;; SKK 11
;;
;;(require 'skk-setup)
(global-set-key "\C-x\C-j" 'skk-mode)
(global-set-key "\C-xj" 'skk-auto-fill-mode)
(global-set-key "\C-xt" 'skk-tutorial)
(autoload 'skk-mode "skk" nil t)
(autoload 'skk-auto-fill-mode "skk" nil t)
(autoload 'skk-tutorial "skk-tut" nil t)
(autoload 'skk-isearch-mode-setup "skk-isearch" nil t)
(autoload 'skk-isearch-mode-cleanup "skk-isearch" nil t)
(add-hook 'isearch-mode-hook
      (function (lambda ()
              (and (boundp 'skk-mode) skk-mode
               (skk-isearch-mode-setup) ))))
(add-hook 'isearch-mode-end-hook
      (function (lambda ()
              (and (boundp 'skk-mode) skk-mode
               (skk-isearch-mode-cleanup)
               (skk-set-cursor-properly) ))))
(setq skk-egg-like-newline t)
(setq skk-large-jisyo "/usr/local/share/skk/SKK-JISYO.L")

;;
;; autoinsert
;;
(require 'autoinsert)
(add-hook 'find-file-hooks 'auto-insert)
(setq auto-insert-directory "~/docs/template/")
(setq auto-insert-alist
      (append '(
                ("\\.tex$"  . "latex-insert.tex")
                ("\\.sty$"  . "latex-insert.tex")
                ("\\.cls$"  . "latex-insert.tex")
                ("\\.clo$"  . "latex-insert.tex")
                ("\\.dtx$"  . "latex-insert.tex")
                ("\\.fdd$"  . "latex-insert.tex")
                ("\\.ins$"  . "latex-insert.tex")
                ("\\.s?html?$" . "html-insert.html")
                ) auto-insert-alist))
