;;==============================================================================
;;; menus.el
;;
;;; Emacs Menus
;;
;;; Author: Kyle W T Sherman
;;
;; Time-stamp: <2008-07-18 13:15:41 (kyle)>
;;==============================================================================

(message ";;; menus --> Start")

;; easymenu
(message ";;; menus --> easymenu")
(require 'easymenu)

;; auto-menu
(message ";;; menus --> auto-menu")
(require 'auto-menu)

;;==============================================================================
;;; Menus
;;==============================================================================

(message ";;; menus --> Menus")

;;------------------------------------------------------------------------------
;; Dired Menu
;;------------------------------------------------------------------------------

(message ";;; menus --> Dired Menu")

;; dired menu
(auto-menu
 "Dired"
 (append '(("recent" "(context-dired)" "Run `cdired' to list recent files."))
         (auto-menu-dired '(("home" . "~/")
                            (".emacs.d" . "~/.emacs.d")
                            (".elisp" . "~/.elisp")
                            (".elisp/kyle" . "~/.elisp/kyle")
                            ("clisp" . "~/clisp")
                            ("erlang" . "~/erlang")
                            ("bin" . "~/bin")
                            ("org" . "~/org")
                            ("web" . "~/web")
                            ("plans" . "~/plans")
                            ("wiki" . "~/wiki")
                            ("doc" . "~/doc")
                            ("svn" . "~/svn")
                            ("Help" . "~/.emacs.d/help")))))

;;------------------------------------------------------------------------------
;; Load Menu
;;------------------------------------------------------------------------------

(message ";;; menus --> Load Menu")

;; load menu
(auto-menu
 "Load"
 `(("Restore Context" "(context-restore)" "Restore previous context save.")
   ("Home Files..."
    ,(auto-menu-file '((".alias" . "~/.alias")
                       (".alias-local" . "~/.alias-local")
                       (".alias-work" . "~/.alias-work")
                       (".funct" . "~/.funct")
                       (".funct-local" . "~/.funct-local")
                       (".funct-work" . "~/.funct-work")
                       (".profile" . "~/.profile")
                       (".profile-local" . "~/.profile-local")
                       (".profile-work" . "~/.profile-work")
                       (".profile_run" . "~/.profile_run")
                       (".bashrc" . "~/.bashrc")
                       (".clisprc" . "~/.clisprc"))))
   ("Emacs Settings..."
    ,(append '((".emacs" "(find-file \"~/.emacs\")" "Load `~/.emacs' file."))
             (auto-menu-file-dir "~/.emacs.d" "\\.el$" "find-file")))
   ("Elisp Files..."
    ,(auto-menu-file-dir "~/.elisp/kyle" "\\.el$" "find-file" t))
   ("CLisp Files..."
    ,(auto-menu-file-dir "~/clisp" "\\.lisp$" "find-file" t))
   ("Erlang Files..."
    ,(auto-menu-file-dir "~/erlang" "\\.erl$" "find-file" t))
   ("Bin Files..."
    ;;,(auto-menu-file-dir "~/bin" nil "find-file" t))
    ,(auto-menu-file '(("get-emacs-modules" . "~/bin/get-emacs-modules"))))
   ("Web/Blog/Plans Files..."
    ,(auto-menu-file '(("Muse Init" . "~/web/bin/muse-init.el")
                       ("Web Home" . "~/web/home/index.muse")
                       ("Blog" . "~/web/blog/index.muse")
                       ("Tutorials" . "~/web/tutorials/index.muse")
                       ("Projects" . "~/web/projects/index.muse")
                       ("Rants" . "~/web/rants/index.muse")
                       ("Planner" . "~/plans/HomePage")
                       ("Style Default" . "~/web/style/default.css")
                       ("Template Header Default" . "~/web/template/header-default.html")
                       ("Template Footer Default" . "~/web/template/footer-default.html"))))
   ("Org Files..."
    ,(auto-menu-file-dir "~/org" "\\.\\(org\\|org\\.cpt\\)$" "find-file" t))
   ("Bookmarks" "(load-bookmarks)" "Load `~/lynx_bookmarks.html' file.")
   ))

;;------------------------------------------------------------------------------
;; Run File Menu
;;------------------------------------------------------------------------------

(message ";;; menus --> Run File Menu")

;; run file menu
(auto-menu
 "Run File"
 `(("Emacs Settings..."
    ,(append '((".emacs" "(safe-load-compile \"~/.emacs\")" "Run `~/.emacs' file."))
             (auto-menu-file-dir "~/.emacs.d" "\\.el$" "safe-load-compile")))
   ("Elisp Files..."
    ,(auto-menu-file-dir "~/.elisp/kyle" "\\.el$" "safe-load-compile" t))
   ("CLisp Files..."
    ,(auto-menu-file-dir "~/clisp" "\\.lisp$" "slime-load-file" t))
   ))

;;------------------------------------------------------------------------------
;; Miscellaneous Menu
;;------------------------------------------------------------------------------

(message ";;; menus --> Miscellaneous Menu")

;; miscellaneous menu
(auto-menu
 "Misc"
 '(("Emacs Server" "(server-start-maybe)" "Restart Emacs server.")
   ;;("Visit Local TAGS" "(when (file-exists-p \"TAGS\") (visit-tags-table \"TAGS\" t))" "Visit local tags table.")
   ("Visit Local TAGS" "(when (find-file-updir \"TAGS\") (visit-tags-table (find-file-updir \"TAGS\") t))" "Visit local tags table.")
   ("Visit Home TAGS" "(when (file-exists-p \"~/TAGS\") (visit-tags-table \"~/TAGS\"))" "Visit home tags table.")
   ("Subversion Status" "(svn-status default-directory)" "Open Subversion status buffer.")
   ("IELM Mode" "(ielm)" "Open buffer for interactively evaluating Emacs Lisp expressions.")
   ("SLIME Mode" "(slime)" "Start SLIME mode for interactively evaluating CLISP expressions.")
   ("Evaluate Current Buffer" "(eval-buffer)" "Run eval-buffer on the current buffer.")
   ("Evaluate Current SLIME Buffer" "(slime-eval-buffer)" "Run slime-eval-buffer on the current buffer.")
   ("Compile ~/.elisp Directory" "(compile-elisp)" "Byte compile `~/.elisp' directory.")
   ("Customize Group" "(customize-group)" "Run customize group function.")
   ("Regular Expression Builder" "(re-builder)" "Run regular expression builder.")
   ("MySQL" "(sql-mysql)" "Launch SQL-MySQL.")
   ("MS-SQL" "(sql-ms)" "Launch SQL-MS.")
   ("XML Reformat" "(xml-reformat)" "Reformat XML in buffer.")
   ))
   ;;("Common Lisp Doc Mode" "(add-hook 'lisp-mode-hook 'turn-on-cldoc-mode)" "Turn on auto docs in CLisp mode.")

;;------------------------------------------------------------------------------
;; Manual Menu
;;------------------------------------------------------------------------------

(message ";;; menus --> Manual Menu")

;; manual menu
(auto-menu
 "Manuals"
 `(("Help Files" ,(auto-menu-file-dir "~/.emacs.d/help" ".*" "find-file" t))
   ("Emacs Manual" "(info \"emacs22/emacs\")" "Open Emacs manual.")
   ("Elisp Manual" "(info \"emacs22/elisp\")" "Open Elisp manual.")
   ("Screen Manual" "(info \"screen\")" "Open Screen manual.")
   ("SED Manual" "(info \"sed\")" "Open SED manual.")
   ("Grep Manual" "(info \"grep\")" "Open Grep pattern matching manual.")
   ("DC Manual" "(info \"dc\")" "Open arbitrary precision RPN Desktop Calculator manual.")
   ("Wget Manual" "(info \"wget\")" "Open Wget manual.")))

;;------------------------------------------------------------------------------
;; Web Menu
;;------------------------------------------------------------------------------

(message ";;; menus --> Web Menu")

;; web menu
(auto-menu
 "Web"
 (mapcar #'(lambda (x)
             (list (car x)
                   (concat "(web-query \"" (car x) "\")")
                   (concat "Query web for \"" (car x) "\".")))
         web-query-list))

;;------------------------------------------------------------------------------
;; Insert Menu
;;------------------------------------------------------------------------------

(message ";;; menus --> Insert Menu")

;; insert menu
(auto-menu
 "Insert"
 '(("Date YYYY-MM-DD" "(insert-date)" "Insert date in YYYY-MM-DD format.")
   ("Date/Time YYYY-MM-DD HH:MM:SS" "(insert-datetime)" "Insert date/time in YYYY-MM-DD HH:MM:SS format.")
   ("Time HH:MM:SS" "(insert-time)" "Insert time in HH:MM:SS format.")
   ("UUID" "(uuid)" "Insert a UUID.")
   ("GUID" "(guid)" "Insert a GUID.")
   ("Equals" "(append-equal-to-column-80)" "Append `=' characters up to column 80.")
   ("Dashes" "(append-dash-to-column-80)" "Append `-' characters up to column 80.")
   ("Asterisks" "(append-asterisk-to-column-80)" "Append `*' characters up to column 80.")
   ("Lisp Comment Block (Equal)" "(lisp-comment-block-equal)" "Insert Lisp style comment block using equals.")
   ("Lisp Comment Block (Dash)" "(lisp-comment-block-dash)" "Insert Lisp style comment block using dashes.")
   ("C Comment Block" "(c-comment-block)" "Insert C/C++/Java style comment block.")
   ("C Comment Stub" "(c-comment-stub)" "Insert C/C++/Java style comment stub.")
   ("XML Header" "(xml-header)" "Insert XML header line.")
   ("Muse Header" "(muse-header)" "Insert Muse standard header line.")
   ("Muse Blog Header" "(muse-blog-header)" "Insert Muse blog header line.")
   ("DB Change Log" "(db-change-log-template-line)" "Insert template line for DB change log.")
   ("DB Change Log Legacy" "(db-change-log-template-line-legacy)" "Insert template line for legacy DB change log.")
   ("Capture Table" "(table-capture (mark) (point) \"  \" \"\n\" 'left 20)" "Capture table from select text.")
   ))

(message ";;; menus --> End")

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