On Thursday 13 January 2005 11:18 am, Thomas Bushnell BSG wrote:
> Ben Pfaff <blp@cs.stanford.edu> writes:
> > Thomas Bushnell BSG <tb@becket.net> writes:
> >
> > [updating copyright years]
> >
> > > I have a handy-dandy emacs lisp frob that will do this automagically
> > > for you if you like.
> >
> > I would like this.
Slight modification that works more conveniently for me (this is the only
significant chunk of elisp I've tried to write, so may be buggy; it worked
in tests, though):
======= cut here =======
(defconst current-year (substring (current-time-string) -4)
"String representing the current year.")
(defconst last-year (int-to-string (- (string-to-int current-year) 1))
"String representing the current year (presuming that the current year is not 1 AD, which hopefully will continue to be the case indefinitely).")
(defvar current-gpl-version "2"
"String representing the current version of the GPL.")
(defvar copyright-regex "[Cc]opyright\\s *\\(([Cc])\\)?\\(\\s *[0-9]+\\s *\\(-\\s *[0-9]+\\s *\\)?,\\s *\\)*\\s *\\(\\([0-9]+\\)\\s *-\\)?\\s *\\([0-9]+\\)"
"Regular expression to match common copyright declarations, extracting the final year(s).")
;; Note: paren expr. #5 is the first year of the last dashed pair, if
;; any; paren expr. #6 is the last year.
(defun update-copyright-with-queries ()
"My version of update-copyright."
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(and (re-search-forward "[i]s free software"
nil t)
(not (eq major-mode 'rmail-mode))
(let ((limit (point)))
(goto-char (point-min))
(re-search-forward copyright-regex
limit t))
(let ((final-year (match-string 6))
(final-range-start (match-string 5)))
(when (and (not (string= final-year current-year))
(progn (goto-char (point-min))
(sit-for 0)
(y-or-n-p (format "Update copyright (last %s)? " final-year))))
(if (string= final-year last-year)
(if final-range-start
(progn
(goto-char (match-end 6))
(delete-region (match-beginning 6) (match-end 6))
(insert current-year))
(progn
(goto-char (match-end 6))
(insert "-")
(insert current-year)))
(progn
(goto-char (match-end 6))
(insert ", ")
(insert current-year))) t))
(message "Copyright updated to include %s." current-year)
(if (re-search-forward
"; either version \\(.+\\), or (at your option)"
nil t)
(progn
(goto-char (match-beginning 1))
(delete-region (point) (match-end 1))
(insert current-gpl-version)))))))
(setq write-file-hooks (cons 'update-copyright-with-queries write-file-hooks))
====== cut here ========
Daniel
--
/------------------- Daniel Burrows <dburrows@debian.org> ------------------\
| Whom the gods would destroy, they first teach BASIC. |
\--- News without the $$ -- National Public Radio -- http://www.npr.org ---/
Attachment:
pgpQXp1_XIk6j.pgp
Description: PGP signature