[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#14732: Package dos-mode for ELPA
From: |
Stefan Monnier |
Subject: |
bug#14732: Package dos-mode for ELPA |
Date: |
Wed, 07 Aug 2013 13:27:19 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) |
>> OK, so I just installed your code into trunk. Thank you.
>> I also added the patch below to it.
> I found no patch attached.
What are you, blind? Look again!
Stefan "Geez!"
=== modified file 'lisp/ChangeLog'
--- lisp/ChangeLog 2013-08-07 15:43:57 +0000
+++ lisp/ChangeLog 2013-08-07 15:50:16 +0000
@@ -1,3 +1,10 @@
+2013-08-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/dos.el (auto-mode-alist): Add entries for dos-mode.
+ (dos-mode): Use setq-local. Add space after "rem".
+ (dos-mode-syntax-table): Don't use "w" for symbol chars.
+ (dos-font-lock-keywords): Try to adjust font-lock rules accordingly.
+
2013-08-07 Arni Magnusson <arnima@hafro.is>
* progmodes/dos.el: New file.
=== modified file 'lisp/progmodes/dos.el'
--- lisp/progmodes/dos.el 2013-08-07 15:43:57 +0000
+++ lisp/progmodes/dos.el 2013-08-07 15:50:16 +0000
@@ -79,24 +79,25 @@
"goto" "gtr" "if" "in" "leq" "lss" "neq" "not" "start"))
(LINUX
'("cat" "cp" "ls" "mv" "rm")))
- (list
- '("\\<\\(call\\|goto\\)\\>[ \t]+%?\\([A-Za-z0-9-_\\:.]+\\)%?"
+ `(("\\<_\\(call\\|goto\\)\\_>[ \t]+%?\\([A-Za-z0-9-_\\:.]+\\)%?"
(2 font-lock-constant-face t))
- '("^[ \t]*\\(@?rem\\>\\|::\\).*"
+ ("^[ \t]*\\(@?rem\\_>\\|::\\).*"
(0 font-lock-comment-face t))
- '("^:[^:].*"
+ ("^:[^:].*"
. 'dos-label-face)
- '("\\<\\(defined\\|set\\)\\>[ \t]*\\(\\w+\\)"
+ ("\\<_\\(defined\\|set\\)\\_>[ \t]*\\(\\w+\\)"
(2 font-lock-variable-name-face))
- '("%\\(\\w+\\)%?"
+ ("%\\(\\w+\\)%?"
(1 font-lock-variable-name-face))
- '("!\\(\\w+\\)!?" ; delayed-expansion !variable!
+ ("!\\(\\w+\\)!?" ; delayed-expansion !variable!
(1 font-lock-variable-name-face))
- '("[ =][-/]+\\(\\w+\\)"
+ ("[ =][-/]+\\(\\w+\\)"
(1 font-lock-type-face append))
- (cons (regexp-opt COMMANDS 'words) font-lock-builtin-face)
- (cons (regexp-opt CONTROLFLOW 'words) font-lock-keyword-face)
- (cons (regexp-opt LINUX 'words) font-lock-warning-face)))))
+ (,(concat "\\_<" (regexp-opt COMMANDS) "\\_>") .
font-lock-builtin-face)
+ (,(concat "\\_<" (regexp-opt CONTROLFLOW) "\\_>")
+ . font-lock-keyword-face)
+ (,(concat "\\_<" (regexp-opt LINUX) "\\_>")
+ . font-lock-warning-face)))))
(defvar dos-menu
'("Dos"
@@ -114,7 +115,7 @@
(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)
+ (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)
@@ -123,21 +124,24 @@
(defvar dos-mode-syntax-table
(let ((table (make-syntax-table)))
- (modify-syntax-entry ?~ "w" table)
+ ;; Beware: `w' should not be used for non-alphabetic chars.
+ (modify-syntax-entry ?~ "_" table)
(modify-syntax-entry ?% "." table)
- (modify-syntax-entry ?- "w" table)
- (modify-syntax-entry ?_ "w" table)
- (modify-syntax-entry ?{ "w" table)
- (modify-syntax-entry ?} "w" table)
+ (modify-syntax-entry ?- "_" table)
+ (modify-syntax-entry ?_ "_" table)
+ ;; FIXME: { and } can appear in identifiers? Really?
+ (modify-syntax-entry ?{ "_" table)
+ (modify-syntax-entry ?} "_" table)
(modify-syntax-entry ?\\ "." table)
table))
;; 4 User functions
(defun dos-cmd-help (cmd)
- "Show help for Dos command."
+ "Show help for Dos 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 ()
@@ -149,11 +153,13 @@
(defun dos-run ()
"Run Dos script."
(interactive)
+ ;; FIXME: liable to quoting nightmare. Use call/start-process?
(save-buffer) (shell-command buffer-file-name))
(defun dos-run-args (args)
"Run Dos script with ARGS."
(interactive "sArgs: ")
+ ;; FIXME: Use `compile'?
(shell-command (concat buffer-file-name " " args)))
(defun dos-template ()
@@ -161,6 +167,9 @@
(interactive)
(goto-char (point-min)) (insert "@echo off\nsetlocal\n\n"))
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.\\(bat\\|cmd\\)\\'" . dos-mode))
+
;; 5 Main function
;;;###autoload
@@ -171,12 +180,11 @@
`dos-cmd-help'. Navigate between sections using `imenu'. Run script using
`dos-run' and `dos-run-args'.\n
\\{dos-mode-map}"
- (set (make-local-variable 'comment-start) "rem")
- (set (make-local-variable 'font-lock-defaults)
+ (setq-local comment-start "rem ")
+ (setq-local font-lock-defaults
'(dos-font-lock-keywords nil t)) ; case-insensitive keywords
- (set (make-local-variable 'imenu-generic-expression) '((nil "^:[^:].*" 0)))
- (set (make-local-variable 'outline-regexp) ":[^:]")
- (set-syntax-table dos-mode-syntax-table))
+ (setq-local imenu-generic-expression '((nil "^:[^:].*" 0)))
+ (setq-local outline-regexp ":[^:]"))
(provide 'dos)
- bug#14732: Package dos-mode for ELPA, Stefan Monnier, 2013/08/04
- bug#14732: Package dos-mode for ELPA, Arni Magnusson, 2013/08/04
- bug#14732: Package dos-mode for ELPA, Stefan Monnier, 2013/08/06
- bug#14732: Package dos-mode for ELPA, Juanma Barranquero, 2013/08/07
- bug#14732: Package dos-mode for ELPA, Stefan Monnier, 2013/08/07
- bug#14732: Package dos-mode for ELPA, Eli Zaretskii, 2013/08/07
- bug#14732: Package dos-mode for ELPA, Juanma Barranquero, 2013/08/07
- bug#14732: Package dos-mode for ELPA, Stefan Monnier, 2013/08/07
- bug#14732: Package dos-mode for ELPA, Eli Zaretskii, 2013/08/07
- Message not available
- bug#14732: Package dos-mode for ELPA, Glenn Morris, 2013/08/07
- bug#14732: Package dos-mode for ELPA, Eli Zaretskii, 2013/08/08
- bug#14732: Package dos-mode for ELPA, Stefan Monnier, 2013/08/07
- bug#14732: Package dos-mode for ELPA, Eli Zaretskii, 2013/08/08