;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  PJE-0.1 ユーザ設定ファイルサンプル for emacs(mule)
;;            MATSUMOTO Shoji (shom@i.h.kyoto-u.ac.jp)
;;            just a bit adjusted by M.KOJIMA
;;            Customized by  KATOU,Takayuki(rrr@pluto.dti.ne.jp)
;;            Time-stamp: <2000-08-07 09:23:28 rrr>
;;
;;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PJE の Emacs(Mule) を利用するために必要な設定です。
;; (その他便利に利用するための設定はこのファイルの最後の
;;  「その他の設定」にあります)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; 日本語環境 for Emacs20
(setup-japanese-environment)
(set-terminal-coding-system 'iso-2022-jp)

;; default の文字コードを EUC にする。ファイルを開くと文字化けがするよ
;; うならばコメントアウトしてください
;;(setq coding-system-for-read 'euc-jp)

;;; 漢字コードの指定 for mule19(Emacs20 では不要)
;(set-display-coding-system *euc-japan*unix)
;(set-keyboard-coding-system *euc-japan*unix)
;(set-default-file-coding-system *euc-japan*unix)
;;

;;; namazu.el の設定
(autoload 'namazu "namazu.el" nil t)
(setq browse-url-browser-function 'browse-url-netscape)
(setq namazu-default-dir "/usr/var/namazu/index")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;姓名判断
;
(autoload 'seimei "seimei" "seimei" t)

; マーク領域を色付けします
(setq transient-mark-mode t)

; JG の設定
;(load "jg")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SKK-10.57
;;   Mule 上の仮名漢字変換システム SKK の設定
;;   C-x t でチュートリアルが起動します
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;; 使用する辞書の設定 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; SKK-JISYO.L をメモリ上に読み込んで利用する場合
;(setq skk-large-jisyo "/usr/share/skk/SKK-JISYO.L")

;;; SKK-JISYO.M をメモリ上に読み込み、
;;; 見付からない場合は skkserv を起動して SKK-JISYO.L から検索する場合
;;; (skkexdic パッケージが必要です)
;;(setq skk-large-jisyo "/usr/share/skk/SKK-JISYO.M")
(setq load-path
      (append '("/usr/share/emacs/site-lisp/skk")
	      load-path))
(setq skk-aux-large-jisyo "/usr/share/skk/SKK-JISYO.L")
(setq skk-server-portnum 1178)
(setq skk-server-host "localhost")
(setq skk-server-prog "/usr/libexec/skkserv")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(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-color-properly) ))))

(defvar skktut-j-mode-map nil
  "SKK チュートリアルかな/カナモードキーマップ" )

(or skktut-j-mode-map
    (let ((map (make-sparse-keymap)))
      (substitute-key-definition 'self-insert-command 'skk-insert map
				 global-map)
      (substitute-key-definition 'egg-self-insert-command 'skk-insert map
				 global-map)
      (substitute-key-definition 'canna-self-insert-command 'skk-insert map
				 global-map)
      (substitute-key-definition 'can-n-egg-self-insert-command 'skk-insert map
				 global-map)
      (define-key map "x" 'skk-previous-candidate)
      (define-key map "\C-j" 'skk-kakutei)
      (define-key map "\t" 'skk-insert)
      (setq skktut-j-mode-map map) ))

(skk-mode)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; かんなの設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (and (boundp 'CANNA) CANNA) ; 『かんな/emacs』であることを確認
    (progn
      (load-library "canna")
      (canna)

      (setq canna-use-color t)


      (global-set-key "\C-_" 'canna-undo)  ;アンドゥの設定。
      (setq canna-save-undo-text-predicate ;アンドゥバッファへ入れる条件
            '(lambda (s) (> (length (car s)) 2)) )
      (setq canna-undo-hook ;アンドゥ＋α。
            '(lambda () (message "再変換します....")                          
               (canna-do-function canna-func-henkan)) )

      ;;かんなの変換中に BS & DEL を使う
      (define-key canna-mode-map [backspace] [?\C-h])
      (define-key canna-mode-map [delete] [?\C-h])

;;      かんなの変換中に C-h を使う (with term/keyswap)
      (define-key canna-mode-map [?\177] [?\C-h])

      ))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Egg (Wnn フロントエンド) の設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (and (boundp 'WNN) WNN) ; 『Wnn/emacs』であることを確認
    (progn

      ;; jserver が動いているホストを指定
      (set-wnn-host-name "localhost")

      ;; "nn" で「ん」を入力
      (setq enable-double-n-syntax t)

      ;; "." で「．」、"," で「，」を入力。 
      ;;(setq use-kuten-for-period nil)
      ;;(setq use-touten-for-comma nil)

      ;; 1234567890%#%"' を「半角」で入力"
      (let ((its:*defrule-verbose* nil))
	(its-define-mode "roma-kana")
	(dolist (symbol '("1" "2" "3" "4" "5" 
			  "6" "7" "8" "9" "0"
			  "#" "%" "\"" "'" ))
		(its-defrule symbol symbol)))

      ;; おまけ　 :-)
      ;;(set-egg-fence-mode-format "♪" "♪" 'highlight)
      
      ;; おまけその２
      ;; egg-mix の設定。egg-mix 本体は contrib/Working にあります
      ;; (require 'egg-mix)

      ))



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;apel,flim,semi をいれるのじゃよ。
;;ftp://ftp.etl.go.jp/pub/mule/apel/からとってきました。
;;
;;
;;(normal-top-level-add-to-load-path '("apel"))
;;(normal-top-level-add-to-load-path 
;;'("apel" "flim" "semi"))
;;(load "mime-setup")

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;塚本さんの t-gnus
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; -*- mode: emacs-lisp ; coding: iso-2022-7bit -*-

;; Mule2.3@Emacs 19.34 では、.emacs の最初に次の設定を *必ず* 入れてください。
;; これを入れないと T-gnus が正常に利用できません。
(mapcar
 (lambda (symbol)
   (makunbound (intern (format "message-%s" symbol))))
 '(citation-line-function
   cite-function courtesy-message default-headers default-mail-headers
   default-news-headers deletable-headers fcc-handler-function
   followup-to-function from-style generate-headers-first generate-new-buffers
   ignored-bounced-headers ignored-cited-headers ignored-mail-headers
   ignored-news-headers ignored-resent-headers ignored-supersedes-headers
   included-forward-headers indent-citation-function interactive
   kill-buffer-on-exit post-method reply-to-function required-mail-headers
   required-news-headers send-mail-function send-news-function
   signature signature-before-forwarded-message signature-file
   signature-separator syntax-checks use-followup-to user-organization-file
   wide-reply-to-function yank-prefix))

;; Emacs で MIME をサポートするための設定。
;; (SEMI を Gnus から利用するだけなら以下の 1 行は不要...なハズ)
(require 'mime-setup)

;; Gnus を起動するための設定。
(autoload 'gnus "gnus" nil t)
;; Gnus Agent でオフライン講読するためのコマンドの設定。
;;(autoload 'gnus-unplugged "gnus-agent" nil t)

;; custom パッケージを使ったカスタマイズのための設定。
;;(setq custom-file "~/.custom")
;;(if (file-exists-p custom-file)
;;   (load custom-file))

;; メール送信のための設定。
(setq user-mail-address "rrr@pluto.dti.ne.jp")
(setq user-full-name "KATOU Takayuki")
;;(require 'smtp)
;;(setq send-mail-function 'smtpmail-send-it)
;;(setq smtp-default-server "your.smtp.server")
;;(setq smtp-server smtp-default-server)
;;(setq smtp-service 25)
;;(setq smtp-local-domain "your.local.domain")
;;(define-service-coding-system "smtp" nil *noconv*)

;; .signature
(setq gnus-signature-file "~/.gnus.signature")

;; imput
(setq sendmail-program "imput")

;; gnus-offline を使うための設定
;(load "gnus-ofsetup")
;(gnus-setup-for-offline)

;; messageid
(eval-after-load "message"
  '(setq message-required-news-headers
	 (delq 'Message-ID message-required-news-headers)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; GNUS 5.7
;;   NetNews リーダー GNUS
;;   M-x gnus で起動します
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;(setq load-path
;;      (append '("/usr/share/emacs/site-lisp/gnus-5.4.61/lisp")
;;	      load-path))
;;(gnus-mule-add-group "dti" 'iso-2022-7bit)
;;(setq gnus-nntp-server "192.168.1.2")
;;(setq gnus-local-domain "dti.ad.jp")
;;(setq gnus-local-organization "DreamTrainInternet")
;;(setq gnus-signature-file "~/.signature")
;(delq 'Message-ID message-required-news-headers)
;;(eval-after-load "message"
;;  '(setq message-required-news-headers
;;	 (delq 'Message-ID message-required-news-headers)))
;;(setq user-mail-address "rrr@pluto.dti.ne.jp")
;;(setq fullname "KATOU Takayuki")
;;(setq sendmail-program "imput")
;;(setq news-reply-header-hook
;;	(lambda () 
;;(insert "In article " news-reply-yank-message-id
;;		" " news-reply-yank-from " writes:\n\n")))
;;(setq gnus-large-newsgroup 1000)
;News Server 名やドメイン名を指定してください
;;(setq gnus-nntp-server "news.hoge.hoge.or.jp")
;;(setq gnus-local-domain "hoge.hoge.or.jp")
;;(setq gnus-local-organization "HogeHoGe Org.")
;;(setq gnus-use-generic-from t)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Mew
;;   メールリーダー Mew
;;   M-x mew で起動します
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq mew-use-overlay-keymap nil)
;;(setq mew-mail-domain-list '("linet.gr.jp"))
(setq mew-mail-domain-list '("dti.ne.jp"))
(setq mew-opt-show-x-face t)
;; From: に余計なモノ(localhost 名等)が付いたりする場合は、
;; xxxx の部分にドメイン名やメールアドレス等を指定します
;(setq mew-mail-domain-list
;      '("rider.or.jp"))
;(setq mew-from "xxxx@xxxx.xxxx.xxxx.xxxx")

; (setq exec-path (cons "/usr/local/bin/mh" exec-path))
; (setq exec-path (cons "/usr/local/lib/mh" exec-path))
(autoload 'mew "mew" nil t)
(autoload 'mew-read "mew" nil t)
(autoload 'mew-send "mew" nil t)
;(setq mew-init-hook
;      (function
;       (lambda ()
;	 (setq kill-emacs-hook (function mew-mark-process-all-folders)))))
;(setq mew-reply-to nil)

; ML と From: の双方にメールをださないように
(setq mew-replyto-to-list '("Mail-Followup-To:" "Reply-To:"))
(setq mew-replyto-cc-list nil)

; Summary Buffer で i したときに imput -q と imget を実行
(setq mew-auto-flush-queue t)

; 起動時に POP サーバをメールを取りに行かないようにする
;(setq mew-auto-get nil)

;; X 版 Emacs/Mule で色を付ける
(cond
 ((and window-system (string-match "^19" emacs-version))
      (setq hilit-mode-enable-list  nil
            hilit-background-mode   'light
            hilit-inhibit-hooks     nil
            hilit-inhibit-rebinding nil)
      (require 'hilit19)
      ;;
      (add-hook 'mew-message-hook
                'hilit-rehighlight-buffer-quietly)
      (hilit-set-mode-patterns 
       '(mew-message-mode)
       '(("^Subject:.*$" nil msg-subject)
         ("^From:.*$" nil msg-from)
         ("^X-.*:.*$" nil msg-quote)
         ("^>.*$" nil msg-quote)
         ("^[A-Za-z][A-Za-z0-9-]+:" nil msg-header)))
      (add-hook 'mew-draft-mode-hook
                'hilit-rehighlight-buffer-quietly)
      (hilit-set-mode-patterns 
       '(mew-draft-mode)
       '(("^Subject:.*$" nil msg-subject)
         ("^From:.*$" nil msg-from)
         ("^>.*$" nil msg-quote)
         ("^[A-Za-z][A-Za-z0-9-]+:" nil msg-header)))
      )
 )

(setq mew-cite-fields '("From:" "Subject:" "Date:" "Message-ID:"))
(setq mew-cite-format "From: %s\nSubject: %s\nDate: %s\nMessage-ID: %s\n\n")
(defvar mew-cite-prefix-function nil)
;;(setq mew-cite-prefix-function 'mew-cite-prefix-username)

;;; この 2 行は通常設定する必要はありませんが、メールアドレスに
;;; ホスト名が入って欲しくない場合などに指定します。
;;(setq mew-from "hoge@hoge.hoge.or.jp")
;;(setq mew-mail-domain "hoge.hoge.or.jp")

;;outboxに記録を残す
(setq mew-fcc "+outbox") 

;;おまけヘッダをつける
(setq mew-header-alist '( ("Bcc:" . "taka-kat@ascii.co.jp") ))
(setq mew-header-alist '( ("X-Moe:" . "Meganekko!,Oneisan!,Bokebokesan!," ) ))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; irchat-2.4jp23b
;;   IRC (チャット) クライアントの設定
;;   M-x irchat で起動します
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq load-path
      (append '("/usr/share/emacs/site-lisp/irchat-2.4jp23b") load-path))
(autoload 'irchat "irchat" nil t)

;;; IRC server の指定
;;; (いずれか一つをコメントアウトします)
;;(setq irchat-server "irc.tohoku.ac.jp")
;;(setq irchat-server "irc.kyutech.ac.jp")
;;(setq irchat-server "irc.tokyo.wide.ad.jp")
;;(setq irchat-server "irc.kyoto.wide.ad.jp")
;;(setq irchat-server "irc.huie.hokudai.ac.jp")
;;(setq irchat-server "irc.cc.yamaguchi-u.ac.jp")
;;(setq irchat-server "irc.karrn.ad.jp")
(setq irchat-server "irc.2ch.net")

;;; ユーザー名とニックネーム
;;; (nick は半角英数および []{}_\^ からなる最大 9 文字の文字列です)
(setq irchat-name "rrr_tombi")
(setq irchat-nickname "tonbi")

;;; デフォルトで参加するチャンネルのリスト
;;;  （ここに書いたチャンネルには irchat の起動と同時に参加できます）
;;(setq irchat-startup-channel-list '("#linuxjp,#pjetest"))
(setq irchat-startup-channel-list '("#gnutella"))

;;; オプション
;;;   詳細は /usr/doc/irchat-2.4jp23a/FAQ-about-jp23.txt 参照
(setq irchat-reconnect-automagic t)      ; 切れた場合に再接続を試みる
;;(setq irchat-channel-buffer-mode t)    ; チャネル分割表示モード
;;(setq irchat-display-channel-always t)
;;(setq irchat-default-freeze-local nil)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; YaTeX 1.64.2
;;   [La]TeX 入力モード
;;   M-x yatex とするか、.tex で終わるファイルを読み込むと起動します
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq load-path
      (append '("/usr/share/emacs/site-lisp/yatex1.64.2") load-path))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)

;; *.tex の拡張子を持つファイルを開いた場合、自動的に Yatex を起動
(setq auto-mode-alist
      (cons (cons "\\.tex$" 'yatex-mode)
	    auto-mode-alist))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; dic (eldic.el)
;;   Mule 上で dic を利用するための設定です
;;   ~/lib/emacs に /usr/doc/dic/eldic.el をコピーして
;;   dic-shell-file-name の辺りを適切に設定してください。
;;   C-c C-c C-e で英和、C-c C-c C-j で和英が引けます。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;(global-set-key "\C-c\C-c\C-e" 'lookup-edic)
;;(global-set-key "\C-c\C-c\C-j" 'lookup-jdic)
;;(autoload 'lookup-edic "eldic" nil t)
;;(autoload 'lookup-jdic "eldic" nil t)



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; その他の設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; マクロサーチパスの追加
;;; ~/lib/emacs 以下にユーザ用の *.el, *.elc を置くことができます
;;(setq load-path (append '("~/lib/emacs") load-path))

;;; C-h と Del の入れ替え
;;; Help が Shift + Ctrl + h および Del に割当てられ、
;;; 前一文字削除が Ctrl + h に割当てられます
(load-library "term/keyswap")
(if (eq window-system 'x)
    (progn
      (define-key function-key-map [delete] [8])
      (put 'delete 'ascii-character 8)))

(global-set-key [delete] 'delete-char)


;;; ステータスラインに時間を表示する
(display-time)

;;; mule/emacs -nw で起動した時にメニューバーを消す
;;(if window-system (menu-bar-mode 1) (menu-bar-mode -1))

;;; X 版 Mule の設定
(if (eq window-system 'x)
    (progn
      
      ;; カラー表示
      (setq hilit-mode-enable-list  nil
	    hilit-background-mode   'light
	    ;;hilit-background-mode   'dark
	    hilit-inhibit-hooks     nil
	    hilit-inhibit-rebinding nil)
      (require 'hilit19)

      ;;スクロールバーを消す
      ;;(scroll-bar-mode -1)

      ))

;;; 最終更新日の自動挿入
;;;   ファイルの先頭から 8 行以内に Time-stamp: <> または
;;;   Time-stamp: " " と書いてあれば、セーブ時に自動的に日付が挿入されます
(if (not (memq 'time-stamp write-file-hooks))
    (setq write-file-hooks
          (cons 'time-stamp write-file-hooks)))


;;; for glibc2.1 日本語 locale
;;; thanks to 花高さん
;;; Emacs20.5 では不要
;
; (let ((lang (or (getenv "LC_ALL")(getenv "LC_TIME")(getenv "LANG"))))
;   (cond
;    ((and lang (string-match "^ja" lang))
;     (setq dired-move-to-filename-regexp
;           " [1 ][0-9]月 [0-3 ][0-9]日 +[0-9][0-9][:0-9][0-9][0-9年] "))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; このファイルに間違いがあった場合に全てを無効にします
(put 'eval-expression 'disabled nil)

;;;俺様の追加
; (4)文末でカーソル下げてもnewlineをつくらない
(setq NExt-line-add-newlines nil)
; (5)最下行でのスクロールは１行のみ
(setq scroll-step 1)
;auto-mode-alistを無効に
;(setq auto-mode-alist nil)



;;物理行でカーソルを動かす
;(global-set-key "\C-e" 'vz-previous-line)
;(global-set-key "\C-x" 'vz-next-line)
;(global-set-key "\C-f" 'vz-right-of-screen)
;(global-set-key "\C-a" 'vz-left-of-screen)

(global-set-key [up] 'vz-previous-line)
(global-set-key [down] 'vz-next-line)
(global-set-key [S-right] 'vz-right-of-screen)
(global-set-key [S-left]  'vz-left-of-screen)



(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
