-;;; dos.el --- Major mode for editing Dos scripts
+;;; bat-mode.el --- Major mode for editing DOS/Windows scripts
;; Copyright (C) 2003, 2008-2013 Free Software Foundation, Inc.
;;; Commentary:
;;
-;; Major mode for editing Dos scripts (batch files). Provides syntax
-;; highlighting, a basic template, access to Dos help pages, imenu/outline
+;; Major mode for editing DOS/Windows scripts (batch files). Provides syntax
+;; highlighting, a basic template, access to DOS help pages, imenu/outline
;; navigation, and the ability to run scripts from within Emacs. The syntax
;; groups for highlighting are:
;;
;; Face Example
-;; dos-label-face :LABEL
+;; bat-label-face :LABEL
;; font-lock-comment-face rem
;; font-lock-builtin-face copy
;; font-lock-keyword-face goto
;;
;; Usage:
;;
-;; See documentation of function `dos-mode'.
+;; See documentation of function `bat-mode'.
;;
;; Separate package `dos-indent' (Matthew Fidler) provides rudimentary
;; indentation, see http://www.emacswiki.org/emacs/dos-indent.el.
;; 1 Preamble
-(defgroup dos nil
+(defgroup bat-mode nil
"Major mode for editing DOS/Windows batch files."
:link '(custom-group-link :tag "Font Lock Faces group" font-lock-faces)
:group 'languages)
;; 2 User variables
-(defface dos-label-face '((t :weight bold))
- "Font Lock mode face used to highlight labels in batch files."
- :group 'dos)
+(defface bat-label-face '((t :weight bold))
+ "Font Lock mode face used to highlight labels in batch files.")
;; 3 Internal variables
-(defvar dos-font-lock-keywords
+(defvar bat-font-lock-keywords
(eval-when-compile
(let ((COMMANDS
'("assoc" "at" "attrib" "cd" "cls" "color" "copy" "date" "del" "dir"
("^[ \t]*\\(@?rem\\_>\\|::\\).*"
(0 font-lock-comment-face t))
("^:[^:].*"
- . 'dos-label-face)
+ . 'bat-label-face)
("\\<_\\(defined\\|set\\)\\_>[ \t]*\\(\\w+\\)"
(2 font-lock-variable-name-face))
("%\\(\\w+\\)%?"
(,(concat "\\_<" (regexp-opt UNIX) "\\_>")
. font-lock-warning-face)))))
-(defvar dos-menu
- '("Dos"
- ["Run" dos-run :help "Run script"]
- ["Run with Args" dos-run-args :help "Run script with args"]
+(defvar bat-menu
+ '("Bat"
+ ["Run" bat-run :help "Run script"]
+ ["Run with Args" bat-run-args :help "Run script with args"]
"--"
["Imenu" imenu :help "Navigate with imenu"]
"--"
- ["Template" dos-template :help "Insert template"]
+ ["Template" bat-template :help "Insert template"]
"--"
- ["Help (Command)" dos-cmd-help :help "Show help page for Dos command"]
- ["Help (Mode)" dos-mode-help :help "Show help page for Emacs Dos Mode"]))
+ ["Help (Command)" bat-cmd-help :help "Show help page for DOS command"]))
-(defvar dos-mode-map
+(defvar bat-mode-map
(let ((map (make-sparse-keymap)))
- (easy-menu-define nil map nil dos-menu)
- (define-key map [?\C-c ?\C-.] 'dos-mode-help)
- (define-key map [?\C-c ?\C-/] 'dos-cmd-help) ;FIXME: Why not C-c C-? ?
- (define-key map [?\C-c ?\C-a] 'dos-run-args)
- (define-key map [?\C-c ?\C-c] 'dos-run)
- (define-key map [?\C-c ?\C-t] 'dos-template)
- (define-key map [?\C-c ?\C-v] 'dos-run)
+ (easy-menu-define nil map nil bat-menu)
+ (define-key map [?\C-c ?\C-/] 'bat-cmd-help) ;FIXME: Why not C-c C-? ?
+ (define-key map [?\C-c ?\C-a] 'bat-run-args)
+ (define-key map [?\C-c ?\C-c] 'bat-run)
+ (define-key map [?\C-c ?\C-t] 'bat-template)
+ (define-key map [?\C-c ?\C-v] 'bat-run)
map))
-(defvar dos-mode-syntax-table
+(defvar bat-mode-syntax-table
(let ((table (make-syntax-table)))
;; Beware: `w' should not be used for non-alphabetic chars.
(modify-syntax-entry ?~ "_" table)
;; 4 User functions
-(defun dos-cmd-help (cmd)
+(defun bat-cmd-help (cmd)
"Show help for batch file command CMD."
(interactive "sHelp: ")
(if (string-equal cmd "net")
;; FIXME: liable to quoting nightmare. Use call-process?
(shell-command "net /?") (shell-command (concat "help " cmd))))
-(defun dos-mode-help ()
- "Show help page for `dos-mode'."
- (interactive)
- (describe-function 'dos-mode)
- (switch-to-buffer "*Help*") (delete-other-windows) (message nil))
-
-(defun dos-run ()
+(defun bat-run ()
"Run a batch file."
(interactive)
;; FIXME: liable to quoting nightmare. Use call/start-process?
(save-buffer) (shell-command buffer-file-name))
-(defun dos-run-args (args)
+(defun bat-run-args (args)
"Run a batch file with ARGS."
(interactive "sArgs: ")
;; FIXME: Use `compile'?
(shell-command (concat buffer-file-name " " args)))
-(defun dos-template ()
+(defun bat-template ()
"Insert minimal batch file template."
(interactive)
(goto-char (point-min)) (insert "@echo off\nsetlocal\n\n"))
;;;###autoload
-(add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . dos-mode))
+(add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . bat-mode))
;; 5 Main function
;;;###autoload
-(define-derived-mode dos-mode prog-mode "Dos"
+(define-derived-mode bat-mode prog-mode "Bat"
"Major mode for editing DOS/Windows batch files.\n
-The `dos-mode-help' command shows this page.\n
-Start a new script from `dos-template'. Read help pages for Dos commands
-with `dos-cmd-help'. Navigate between sections using `imenu'.
-Run script using `dos-run' and `dos-run-args'.\n
-\\{dos-mode-map}"
+Start a new script from `bat-template'. Read help pages for DOS commands
+with `bat-cmd-help'. Navigate between sections using `imenu'.
+Run script using `bat-run' and `bat-run-args'.\n
+\\{bat-mode-map}"
(setq-local comment-start "rem ")
(setq-local font-lock-defaults
- '(dos-font-lock-keywords nil t)) ; case-insensitive keywords
+ '(bat-font-lock-keywords nil t)) ; case-insensitive keywords
(setq-local imenu-generic-expression '((nil "^:[^:].*" 0)))
(setq-local outline-regexp ":[^:]"))
-(provide 'dos)
+(provide 'bat-mode)
-;;; dos.el ends here
+;;; bat-mode.el ends here