;;==============================================================================
;;; mode-line.el
;;
;;; Emacs Mode Line Modifications
;;
;;; Author: Kyle W T Sherman
;;
;; Time-stamp: <2008-03-13 13:27:11 (kyle)>
;;==============================================================================

(message ";;; mode-line --> Start")

;;==============================================================================
;;; Mode Line
;;==============================================================================

(when (>= emacs-major-version 22)

  (message ";;; mode-line --> Mode Line")

  ;; set mode line format
  (setq mode-line-format
        '("%e"
          #("-" 0 1 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
          mode-line-mule-info
          mode-line-modified
          mode-line-frame-identification
          mode-line-buffer-identification
          #("  " 0 2 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
          mode-line-position
          ;; #(" w:" 0 3 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
          ;; (count-words-paragraph count-words-paragraph)
          (vc-mode vc-mode)
          #("  " 0 2 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
          mode-line-modes
          ;; (which-func-mode
          ;;  ("" which-func-format
          ;;   #("--" 0 2 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))))
          ;; (global-mode-string
          ;;  (#("--" 0 2 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
          ;;   global-mode-string))
          (global-mode-string
           (#(" " 0 1 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
            global-mode-string))
          #("-%-" 0 3 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))))
  (set-default 'mode-line-format mode-line-format)

  ;; set mode line modes
  (setq mode-line-modes
        '((#("%[(" 0 3 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
           (:propertize
            ("" mode-name)
            help-echo "mouse-1: major mode, mouse-2: major mode help, mouse-3: toggle minor modes"
            mouse-face mode-line-highlight local-map
            (keymap
             (mode-line keymap
                        (down-mouse-3 . mode-line-mode-menu-1)
                        (mouse-2 . describe-mode)
                        (down-mouse-1 . mouse-major-mode-menu))))
           ("" mode-line-process)
           (:propertize
            ("" minor-mode-alist)
            mouse-face mode-line-highlight
            help-echo "mouse-2: minor mode help, mouse-3: toggle minor modes"
            local-map
            (keymap
             (header-line keymap
                          (down-mouse-3 . mode-line-mode-menu-1))
             (mode-line keymap
                        (down-mouse-3 . mode-line-mode-menu-1)
                        (mouse-2 . mode-line-minor-mode-help))))
           #("%n" 0 2
             (help-echo "mouse-2: widen" mouse-face mode-line-highlight local-map
                        (keymap
                         (mode-line keymap
                                    (mouse-2 . mode-line-widen)))))
           #(")%]" 0 3
             (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0")))))
  (set-default 'mode-line-modes mode-line-modes)

  ;; (set (car (last (car mode-line-modes)))
  ;;      '#(")%]" 0 3 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0")))

  )

;;------------------------------------------------------------------------------
;; Add Count Words Paragraph To Mode Line
;;------------------------------------------------------------------------------

;; (when (>= emacs-major-version 21)

;;   (message ";;; mode-line --> Count Words")

;;   ;; store count in variable
;;   (defvar count-words-paragraph
;;     nil
;;     "*Current value returned from `count-words-paragraph' function.")

;;   ;; only setup timer once
;;   (unless count-words-paragraph
;;     ;; seed count-words-paragraph
;;     (setq count-words-paragraph "0  ")
;;     ;; create timer to keep count-words-paragraph updated
;;     (run-with-idle-timer 0.5 t
;;                          #'(lambda ()
;;                              (let ((count (number-to-string (count-words-paragraph))))
;;                                (while (< (length count) 3)
;;                                  (setq count (concat count " ")))
;;                                (setq count-words-paragraph count)))))

;;   ;; add count words paragraph the mode line
;;   (if (< emacs-major-version 22)
;;       ;; older emacs versions
;;       (unless (and (listp (nth 13 mode-line-format))
;;                    (memq 'count-words-paragraph (nth 13 mode-line-format)))
;;         (push (cons '#("w:" 0 2 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
;;                     '(count-words-paragraph))
;;               (nthcdr 13 mode-line-format))
;;         (push '#("--" 0 2 (help-echo "mouse-1: select window, mouse-2: delete others, mouse-3: delete ..."))
;;               (nthcdr 14 mode-line-format)))
;;     ;; emacs versions 22+
;;     (unless (and (listp (nth 8 mode-line-format))
;;                  (memq 'count-words-paragraph (nth 8 mode-line-format)))
;;       (push (cons '#(" w:" 0 3 (help-echo "mouse-1: select (drag to resize), mouse-2 = C-x 1, mouse-3 = C-x 0"))
;;                   '(count-words-paragraph))
;;             (nthcdr 8 mode-line-format))))

;;   ;; set mode line
;;   (set-default 'mode-line-format mode-line-format)

;;   )

(message ";;; mode-line --> End")

;;==============================================================================
;;; End of File
;;==============================================================================