From: Romain Francoise Date: Thu, 10 Aug 2006 20:06:19 +0000 (+0000) Subject: * textmodes/dns-mode.el: Alias `zone-mode' to `dns-mode'. X-Git-Tag: emacs-pretest-22.0.90~1042 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c40408fbe7d325d81ebe784f9565edb39ca23d9f;p=emacs.git * textmodes/dns-mode.el: Alias `zone-mode' to `dns-mode'. (dns-mode-soa-auto-increment-serial): New user option. (dns-mode-soa-maybe-increment-serial): New function. (dns-mode): Add the latter to `write-contents-functions'. * obsolete/zone-mode.el: Move to obsolete/ from net/. Delete autoload cookies. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 213f5939f62..a994da42625 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,13 @@ +2006-08-10 Romain Francoise + + * textmodes/dns-mode.el: Alias `zone-mode' to `dns-mode'. + (dns-mode-soa-auto-increment-serial): New user option. + (dns-mode-soa-maybe-increment-serial): New function. + (dns-mode): Add the latter to `write-contents-functions'. + + * obsolete/zone-mode.el: Move to obsolete/ from net/. + Delete autoload cookies. + 2006-08-10 John Wiegley * eshell/em-glob.el (eshell-glob-chars-list) diff --git a/lisp/net/zone-mode.el b/lisp/net/zone-mode.el deleted file mode 100644 index 441ef143f9c..00000000000 --- a/lisp/net/zone-mode.el +++ /dev/null @@ -1,120 +0,0 @@ -;;; zone-mode.el --- major mode for editing DNS zone files - -;; Copyright (C) 1998, 2002, 2003, 2004, 2005, -;; 2006 Free Software Foundation, Inc. - -;; Author: John Heidemann -;; Keywords: DNS, languages - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Commentary: - -;;; -;;; See the comments in ``define-derived-mode zone-mode'' -;;; (the last function in this file) -;;; for what this mode is and how to use it automatically. -;;; - -;;; -;;; Credits: -;;; Zone-mode was written by John Heidemann , -;;; with bug fixes from Simon Leinen . -;;; - -;;; Code: - -(defun zone-mode-update-serial () - "Update the serial number in a zone." - (interactive) - (save-excursion - (goto-char (point-min)) - (while (re-search-forward "\\b\\([0-9]+\\)\\([0-9][0-9]\\)\\([ \t]+;[ \t]+[Ss]erial\\)" (point-max) t) - (let* ((old-date (match-string 1)) - (old-seq (match-string 2)) - (old-seq-num (string-to-number (match-string 2))) - (old-flag (match-string 3)) - (cur-date (format-time-string "%Y%m%d")) - (new-seq - (cond - ((not (string= old-date cur-date)) - "00") ;; reset sequence number - ((>= old-seq-num 99) - (error "Serial number's sequence cannot increment beyond 99")) - (t - (format "%02d" (1+ old-seq-num))))) - (old-serial (concat old-date old-seq)) - (new-serial (concat cur-date new-seq))) - (if (string-lessp new-serial old-serial) - (error "Serial numbers want to move backwards from %s to %s" old-serial new-serial) - (replace-match (concat cur-date new-seq old-flag) t t)))))) - -;;;###autoload -(defun zone-mode-update-serial-hook () - "Update the serial number in a zone if the file was modified." - (interactive) - (if (buffer-modified-p (current-buffer)) - (zone-mode-update-serial)) - nil ;; so we can run from write-file-hooks - ) - -(defvar zone-mode-syntax-table nil - "Zone-mode's syntax table.") - -(defun zone-mode-load-time-setup () - "Initialize `zone-mode' stuff." - (setq zone-mode-syntax-table (make-syntax-table)) - (modify-syntax-entry ?\; "<" zone-mode-syntax-table) - (modify-syntax-entry ?\n ">" zone-mode-syntax-table)) - -;;;###autoload -(define-derived-mode zone-mode fundamental-mode "zone" - "A mode for editing DNS zone files. - -Zone-mode does two things: - - - automatically update the serial number for a zone - when saving the file - - - fontification" - - (add-hook 'write-file-functions 'zone-mode-update-serial-hook nil t) - - (if (null zone-mode-syntax-table) - (zone-mode-load-time-setup)) ;; should have been run at load-time - - ;; font-lock support: - (set-syntax-table zone-mode-syntax-table) - (make-local-variable 'comment-start) - (setq comment-start ";") - (make-local-variable 'comment-start-skip) - ;; Look within the line for a ; following an even number of backslashes - ;; after either a non-backslash or the line beginning. - (setq comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+[ \t]*") - (make-local-variable 'comment-column) - (setq comment-column 40) - (make-local-variable 'font-lock-defaults) - (setq font-lock-defaults - '(nil nil nil nil beginning-of-line))) - -(zone-mode-load-time-setup) - -(provide 'zone-mode) - -;;; arch-tag: 6a2940ef-fd4f-4de7-b979-b027b09821fe -;;; zone-mode.el ends here diff --git a/lisp/obsolete/zone-mode.el b/lisp/obsolete/zone-mode.el new file mode 100644 index 00000000000..d8bfefc1e87 --- /dev/null +++ b/lisp/obsolete/zone-mode.el @@ -0,0 +1,118 @@ +;;; zone-mode.el --- major mode for editing DNS zone files + +;; Copyright (C) 1998, 2002, 2003, 2004, 2005, +;; 2006 Free Software Foundation, Inc. + +;; Author: John Heidemann +;; Keywords: DNS, languages + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;;; +;;; See the comments in ``define-derived-mode zone-mode'' +;;; (the last function in this file) +;;; for what this mode is and how to use it automatically. +;;; + +;;; +;;; Credits: +;;; Zone-mode was written by John Heidemann , +;;; with bug fixes from Simon Leinen . +;;; + +;;; Code: + +(defun zone-mode-update-serial () + "Update the serial number in a zone." + (interactive) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward "\\b\\([0-9]+\\)\\([0-9][0-9]\\)\\([ \t]+;[ \t]+[Ss]erial\\)" (point-max) t) + (let* ((old-date (match-string 1)) + (old-seq (match-string 2)) + (old-seq-num (string-to-number (match-string 2))) + (old-flag (match-string 3)) + (cur-date (format-time-string "%Y%m%d")) + (new-seq + (cond + ((not (string= old-date cur-date)) + "00") ;; reset sequence number + ((>= old-seq-num 99) + (error "Serial number's sequence cannot increment beyond 99")) + (t + (format "%02d" (1+ old-seq-num))))) + (old-serial (concat old-date old-seq)) + (new-serial (concat cur-date new-seq))) + (if (string-lessp new-serial old-serial) + (error "Serial numbers want to move backwards from %s to %s" old-serial new-serial) + (replace-match (concat cur-date new-seq old-flag) t t)))))) + +(defun zone-mode-update-serial-hook () + "Update the serial number in a zone if the file was modified." + (interactive) + (if (buffer-modified-p (current-buffer)) + (zone-mode-update-serial)) + nil ;; so we can run from write-file-hooks + ) + +(defvar zone-mode-syntax-table nil + "Zone-mode's syntax table.") + +(defun zone-mode-load-time-setup () + "Initialize `zone-mode' stuff." + (setq zone-mode-syntax-table (make-syntax-table)) + (modify-syntax-entry ?\; "<" zone-mode-syntax-table) + (modify-syntax-entry ?\n ">" zone-mode-syntax-table)) + +(define-derived-mode zone-mode fundamental-mode "zone" + "A mode for editing DNS zone files. + +Zone-mode does two things: + + - automatically update the serial number for a zone + when saving the file + + - fontification" + + (add-hook 'write-file-functions 'zone-mode-update-serial-hook nil t) + + (if (null zone-mode-syntax-table) + (zone-mode-load-time-setup)) ;; should have been run at load-time + + ;; font-lock support: + (set-syntax-table zone-mode-syntax-table) + (make-local-variable 'comment-start) + (setq comment-start ";") + (make-local-variable 'comment-start-skip) + ;; Look within the line for a ; following an even number of backslashes + ;; after either a non-backslash or the line beginning. + (setq comment-start-skip "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+[ \t]*") + (make-local-variable 'comment-column) + (setq comment-column 40) + (make-local-variable 'font-lock-defaults) + (setq font-lock-defaults + '(nil nil nil nil beginning-of-line))) + +(zone-mode-load-time-setup) + +(provide 'zone-mode) + +;;; arch-tag: 6a2940ef-fd4f-4de7-b979-b027b09821fe +;;; zone-mode.el ends here diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el index a323d4c4468..78be0f888a3 100644 --- a/lisp/textmodes/dns-mode.el +++ b/lisp/textmodes/dns-mode.el @@ -90,6 +90,18 @@ :type 'sexp :group 'dns-mode) +(defcustom dns-mode-soa-auto-increment-serial t + "Whether to increment the SOA serial number automatically. + +If this variable is t, the serial number is incremented upon each save of +the file. If it is `ask', Emacs asks for confirmation whether it should +increment the serial upon saving. If nil, serials must be incremented +manually with \\[dns-mode-soa-increment-serial]." + :type '(choice (const :tag "Always" t) + (const :tag "Ask" ask) + (const :tag "Never" nil)) + :group 'dns-mode) + ;; Syntax table. (defvar dns-mode-syntax-table @@ -135,8 +147,12 @@ Turning on DNS mode runs `dns-mode-hook'." (unless (featurep 'xemacs) (set (make-local-variable 'font-lock-defaults) '(dns-mode-font-lock-keywords nil nil ((?_ . "w"))))) + (add-hook 'write-contents-functions 'dns-mode-soa-maybe-increment-serial + nil t) (easy-menu-add dns-mode-menu dns-mode-map)) +;;;###autoload (defalias 'zone-mode 'dns-mode) + ;; Tools. ;;;###autoload @@ -192,6 +208,19 @@ Turning on DNS mode runs `dns-mode-hook'." (message "Replaced old serial %s with %s" serial new)) (error "Cannot locate serial number in SOA record")))))) +(defun dns-mode-soa-maybe-increment-serial () + "Increment SOA serial if needed. + +This function is run from `write-contents-functions'." + (when (and (buffer-modified-p) + dns-mode-soa-auto-increment-serial + (or (eq dns-mode-soa-auto-increment-serial t) + (y-or-n-p "Increment SOA serial? "))) + ;; We must return nil. If `dns-mode-soa-increment-serial' signals + ;; an error saving will fail but that probably means that the + ;; serial should be fixed to comply with the RFC anyway! -rfr + (progn (dns-mode-soa-increment-serial) nil))) + ;;;###autoload(add-to-list 'auto-mode-alist '("\\.soa\\'" . dns-mode)) (provide 'dns-mode)