diff options
| author | Paul Eggert | 2012-02-24 22:41:40 -0800 |
|---|---|---|
| committer | Paul Eggert | 2012-02-24 22:41:40 -0800 |
| commit | a89654f8f34114db543cb91363e8fded6d73e986 (patch) | |
| tree | 5ac508597ef2aa460308b4b26c244779e48cdb40 /admin | |
| parent | 6e6c82a4e687708d5a7a3887f92db45bd74da276 (diff) | |
| parent | 67b0de11479247cb8bd8491e10e0b464046f18be (diff) | |
| download | emacs-a89654f8f34114db543cb91363e8fded6d73e986.tar.gz emacs-a89654f8f34114db543cb91363e8fded6d73e986.zip | |
Merge from trunk.
Diffstat (limited to 'admin')
| -rw-r--r-- | admin/ChangeLog | 11 | ||||
| -rw-r--r-- | admin/FOR-RELEASE | 65 | ||||
| -rw-r--r-- | admin/admin.el | 123 | ||||
| -rw-r--r-- | admin/unidata/unidata-gen.el | 14 |
4 files changed, 172 insertions, 41 deletions
diff --git a/admin/ChangeLog b/admin/ChangeLog index 2178df6caf0..c7bfc0ddc6e 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog | |||
| @@ -1,3 +1,14 @@ | |||
| 1 | 2012-02-16 Kenichi Handa <handa@m17n.org> | ||
| 2 | |||
| 3 | * unidata/unidata-gen.el (unidata-prop-alist): Change the default | ||
| 4 | values of name and old-name to nil. | ||
| 5 | (unidata-get-name): Return nil for the default value. | ||
| 6 | |||
| 7 | 2012-02-11 Glenn Morris <rgm@gnu.org> | ||
| 8 | |||
| 9 | * admin.el (cusver-find-files, cusver-scan, cusver-goto-xref) | ||
| 10 | (cusver-check): New functions. | ||
| 11 | |||
| 1 | 2012-01-19 Glenn Morris <rgm@gnu.org> | 12 | 2012-01-19 Glenn Morris <rgm@gnu.org> |
| 2 | 13 | ||
| 3 | * bzrmerge.el (bzrmerge-missing): Allow a definitive "no" answer to the | 14 | * bzrmerge.el (bzrmerge-missing): Allow a definitive "no" answer to the |
diff --git a/admin/FOR-RELEASE b/admin/FOR-RELEASE index abe53ad0b0d..12b99e49688 100644 --- a/admin/FOR-RELEASE +++ b/admin/FOR-RELEASE | |||
| @@ -7,7 +7,7 @@ Check cross-references between the manuals (eg from emacs to elisp) | |||
| 7 | are correct. You can use something like the following in the info | 7 | are correct. You can use something like the following in the info |
| 8 | directory in the Emacs build tree: | 8 | directory in the Emacs build tree: |
| 9 | 9 | ||
| 10 | emacs -Q --eval "(setq Info-default-directory-list '(\".\"))" \ | 10 | emacs -Q --eval "(progn (require 'info) (setq Info-directory-list '(\".\")))" \ |
| 11 | -f info-xref-check-all | 11 | -f info-xref-check-all |
| 12 | 12 | ||
| 13 | make emacs.dvi, elisp.dvi, and deal with any errors (undefined | 13 | make emacs.dvi, elisp.dvi, and deal with any errors (undefined |
| @@ -61,11 +61,6 @@ sk Miroslav Vaško | |||
| 61 | 61 | ||
| 62 | * BUGS | 62 | * BUGS |
| 63 | 63 | ||
| 64 | ** rms: gnus-dired.el is a mistake. Those features should not | ||
| 65 | be part of Gnus. They should be moved to some other part of Emacs. | ||
| 66 | rsteib: Gnus dependencies in `gnus-dired.el' (and `mailcap.el') have been | ||
| 67 | minimized. I don't know what is left to do here. | ||
| 68 | |||
| 69 | ** Check for modes which bind M-s that conflicts with a new global binding M-s | 64 | ** Check for modes which bind M-s that conflicts with a new global binding M-s |
| 70 | and change key bindings where necessary. The current list of modes: | 65 | and change key bindings where necessary. The current list of modes: |
| 71 | 66 | ||
| @@ -83,9 +78,10 @@ and change key bindings where necessary. The current list of modes: | |||
| 83 | `log-edit-comment-search-forward'. Perhaps search commands | 78 | `log-edit-comment-search-forward'. Perhaps search commands |
| 84 | on the global key binding `M-s' are useless in these modes. | 79 | on the global key binding `M-s' are useless in these modes. |
| 85 | 80 | ||
| 86 | * DOCUMENTATION | 81 | 5. Rmail binds `\es' to `rmail-search'/`rmail-summary-search'. |
| 82 | |||
| 87 | 83 | ||
| 88 | ** Document XEmbed support | 84 | * DOCUMENTATION |
| 89 | 85 | ||
| 90 | ** Check the Emacs Tutorial. | 86 | ** Check the Emacs Tutorial. |
| 91 | 87 | ||
| @@ -125,48 +121,53 @@ TUTORIAL.zh | |||
| 125 | ** Check the manual. | 121 | ** Check the manual. |
| 126 | 122 | ||
| 127 | abbrevs.texi cyd | 123 | abbrevs.texi cyd |
| 128 | ack.texi | 124 | ack.texi rgm |
| 129 | anti.texi cyd | 125 | anti.texi cyd |
| 130 | arevert-xtra.texi cyd | 126 | arevert-xtra.texi cyd |
| 131 | basic.texi cyd | 127 | basic.texi cyd |
| 132 | buffers.texi cyd | 128 | buffers.texi cyd |
| 133 | building.texi cyd | 129 | building.texi cyd |
| 134 | calendar.texi | 130 | calendar.texi rgm |
| 135 | cal-xtra.texi | 131 | cal-xtra.texi rgm |
| 136 | cmdargs.texi cyd | 132 | cmdargs.texi cyd |
| 137 | commands.texi cyd | 133 | commands.texi cyd |
| 138 | custom.texi cyd | 134 | custom.texi cyd |
| 139 | dired.texi cyd | 135 | dired.texi cyd |
| 140 | dired-xtra.texi | 136 | dired-xtra.texi rgm |
| 141 | display.texi cyd | 137 | display.texi cyd |
| 142 | emacs.texi | 138 | emacs.texi rgm |
| 143 | emacs-xtra.texi | 139 | emacs-xtra.texi rgm |
| 144 | emerge-xtra.texi | 140 | emerge-xtra.texi rgm |
| 145 | entering.texi cyd | 141 | entering.texi cyd |
| 146 | files.texi cyd | 142 | files.texi cyd |
| 147 | fixit.texi cyd | 143 | fixit.texi cyd |
| 148 | fortran-xtra.texi | 144 | fortran-xtra.texi rgm |
| 149 | frames.texi cyd | 145 | frames.texi cyd |
| 150 | glossary.texi | 146 | glossary.texi |
| 151 | help.texi cyd | 147 | help.texi cyd |
| 152 | indent.texi cyd | 148 | indent.texi cyd |
| 153 | killing.texi cyd | 149 | killing.texi cyd |
| 154 | kmacro.texi cyd | 150 | kmacro.texi cyd |
| 155 | macos.texi | 151 | macos.texi rgm (can't actually test any of it though) |
| 156 | maintaining.texi cyd | 152 | maintaining.texi cyd |
| 157 | mark.texi cyd | 153 | mark.texi cyd |
| 158 | mini.texi | 154 | mini.texi rgm |
| 159 | misc.texi cyd | 155 | misc.texi cyd |
| 160 | modes.texi cyd | 156 | modes.texi cyd |
| 161 | msdog.texi | 157 | msdog.texi rgm (can't actually test any of it though) |
| 162 | msdog-xtra.texi | 158 | It was not obvious to me that the following is true (it could well be though): |
| 159 | |||
| 160 | Emacs on Windows automatically determines your default printer and | ||
| 161 | sets the variable `printer-name' to that printer's name. | ||
| 162 | |||
| 163 | msdog-xtra.texi rgm (can't actually test any of it though) | ||
| 163 | mule.texi | 164 | mule.texi |
| 164 | m-x.texi cyd | 165 | m-x.texi cyd |
| 165 | package.texi cyd | 166 | package.texi cyd |
| 166 | picture-xtra.texi | 167 | picture-xtra.texi rgm |
| 167 | programs.texi cyd | 168 | programs.texi cyd |
| 168 | regs.texi cyd | 169 | regs.texi cyd |
| 169 | rmail.texi | 170 | rmail.texi rgm |
| 170 | screen.texi cyd | 171 | screen.texi cyd |
| 171 | search.texi cyd | 172 | search.texi cyd |
| 172 | sending.texi cyd | 173 | sending.texi cyd |
| @@ -185,26 +186,26 @@ anti.texi | |||
| 185 | back.texi | 186 | back.texi |
| 186 | backups.texi | 187 | backups.texi |
| 187 | buffers.texi | 188 | buffers.texi |
| 188 | commands.texi | 189 | commands.texi cyd |
| 189 | compile.texi cyd | 190 | compile.texi cyd |
| 190 | control.texi cyd | 191 | control.texi cyd |
| 191 | customize.texi cyd | 192 | customize.texi cyd |
| 192 | debugging.texi | 193 | debugging.texi cyd |
| 193 | display.texi | 194 | display.texi |
| 194 | edebug.texi | 195 | edebug.texi |
| 195 | elisp.texi | 196 | elisp.texi |
| 196 | errors.texi | 197 | errors.texi |
| 197 | eval.texi cyd | 198 | eval.texi cyd |
| 198 | files.texi | 199 | files.texi cyd |
| 199 | frames.texi | 200 | frames.texi |
| 200 | functions.texi cyd | 201 | functions.texi cyd |
| 201 | hash.texi cyd | 202 | hash.texi cyd |
| 202 | help.texi | 203 | help.texi cyd |
| 203 | hooks.texi | 204 | hooks.texi |
| 204 | index.texi | 205 | index.texi |
| 205 | internals.texi | 206 | internals.texi |
| 206 | intro.texi cyd | 207 | intro.texi cyd |
| 207 | keymaps.texi | 208 | keymaps.texi cyd |
| 208 | lists.texi cyd | 209 | lists.texi cyd |
| 209 | loading.texi cyd | 210 | loading.texi cyd |
| 210 | locals.texi | 211 | locals.texi |
| @@ -212,7 +213,7 @@ macros.texi cyd | |||
| 212 | maps.texi | 213 | maps.texi |
| 213 | markers.texi | 214 | markers.texi |
| 214 | minibuf.texi | 215 | minibuf.texi |
| 215 | modes.texi | 216 | modes.texi cyd |
| 216 | nonascii.texi | 217 | nonascii.texi |
| 217 | numbers.texi cyd | 218 | numbers.texi cyd |
| 218 | objects.texi cyd | 219 | objects.texi cyd |
| @@ -222,19 +223,15 @@ positions.texi | |||
| 222 | processes.texi | 223 | processes.texi |
| 223 | searching.texi | 224 | searching.texi |
| 224 | sequences.texi cyd | 225 | sequences.texi cyd |
| 225 | streams.texi | 226 | streams.texi cyd |
| 226 | strings.texi cyd | 227 | strings.texi cyd |
| 227 | symbols.texi cyd | 228 | symbols.texi cyd |
| 228 | syntax.texi | 229 | syntax.texi cyd |
| 229 | text.texi | 230 | text.texi |
| 230 | tips.texi | 231 | tips.texi |
| 231 | variables.texi cyd | 232 | variables.texi cyd |
| 232 | windows.texi | 233 | windows.texi |
| 233 | 234 | ||
| 234 | * PLANNED ADDITIONS | ||
| 235 | * pov-mode (probably not for Emacs-23: waiting for a Free POV-Ray). | ||
| 236 | ** gas-mode ? | ||
| 237 | |||
| 238 | 235 | ||
| 239 | Local variables: | 236 | Local variables: |
| 240 | mode: outline | 237 | mode: outline |
diff --git a/admin/admin.el b/admin/admin.el index 2ca838fdff9..27b2b3ab648 100644 --- a/admin/admin.el +++ b/admin/admin.el | |||
| @@ -442,6 +442,129 @@ Also generate PostScript output in PS-DEST." | |||
| 442 | (setq done t)))) | 442 | (setq done t)))) |
| 443 | (forward-line 1)))) | 443 | (forward-line 1)))) |
| 444 | 444 | ||
| 445 | |||
| 446 | ;; Stuff to check new defcustoms got :version tags. | ||
| 447 | ;; Adapted from check-declare.el. | ||
| 448 | |||
| 449 | (defun cusver-find-files (root &optional old) | ||
| 450 | "Find .el files beneath directory ROOT that contain defcustoms. | ||
| 451 | If optional OLD is non-nil, also include defvars." | ||
| 452 | (process-lines find-program root | ||
| 453 | "-name" "*.el" | ||
| 454 | "-exec" grep-program | ||
| 455 | "-l" "-E" (format "^[ \\t]*\\(def%s" | ||
| 456 | (if old "(custom|var)" | ||
| 457 | "custom" | ||
| 458 | )) | ||
| 459 | "{}" "+")) | ||
| 460 | |||
| 461 | ;; TODO if a defgroup with a version tag, apply to all customs in that | ||
| 462 | ;; group (eg for new files). | ||
| 463 | (defun cusver-scan (file &optional old) | ||
| 464 | "Scan FILE for `defcustom' calls. | ||
| 465 | Return a list with elements of the form (VAR . VER), | ||
| 466 | This means that FILE contains a defcustom for variable VAR, with | ||
| 467 | a :version tag having value VER (may be nil). | ||
| 468 | If optional argument OLD is non-nil, also scan for defvars." | ||
| 469 | (let ((m (format "Scanning %s..." file)) | ||
| 470 | (re (format "^[ \t]*\\((def%s\\)[ \t\n]" | ||
| 471 | (if old "\\(?:custom\\|var\\)" "custom"))) | ||
| 472 | alist var ver) | ||
| 473 | (message "%s" m) | ||
| 474 | (with-temp-buffer | ||
| 475 | (insert-file-contents file) | ||
| 476 | ;; FIXME we could theoretically be inside a string. | ||
| 477 | (while (re-search-forward re nil t) | ||
| 478 | (goto-char (match-beginning 1)) | ||
| 479 | (if (and (setq form (ignore-errors (read (current-buffer)))) | ||
| 480 | (setq var (car-safe (cdr-safe form))) | ||
| 481 | ;; Exclude macros, eg (defcustom ,varname ...). | ||
| 482 | (symbolp var)) | ||
| 483 | (setq ver (car (cdr-safe (memq :version form))) | ||
| 484 | alist (cons (cons var ver) alist)) | ||
| 485 | (if form (message "Malformed defcustom: `%s'" form))))) | ||
| 486 | (message "%sdone" m) | ||
| 487 | alist)) | ||
| 488 | |||
| 489 | (define-button-type 'cusver-xref 'action #'cusver-goto-xref) | ||
| 490 | |||
| 491 | (defun cusver-goto-xref (button) | ||
| 492 | "Jump to a lisp file for the BUTTON at point." | ||
| 493 | (let ((file (button-get button 'file)) | ||
| 494 | (var (button-get button 'var))) | ||
| 495 | (if (not (file-readable-p file)) | ||
| 496 | (message "Cannot read `%s'" file) | ||
| 497 | (with-current-buffer (find-file-noselect file) | ||
| 498 | (goto-char (point-min)) | ||
| 499 | (or (re-search-forward (format "^[ \t]*(defcustom[ \t]*%s" var) nil t) | ||
| 500 | (message "Unable to locate defcustom")) | ||
| 501 | (pop-to-buffer (current-buffer)))))) | ||
| 502 | |||
| 503 | ;; You should probably at least do a grep over the old directory | ||
| 504 | ;; to check the results of this look sensible. Eg cus-start if | ||
| 505 | ;; something moved from C to Lisp. | ||
| 506 | ;; TODO handle renamed things with aliases to the old names. | ||
| 507 | ;; What to do about new files? Does everything in there need a :version, | ||
| 508 | ;; or eg just the defgroup? | ||
| 509 | (defun cusver-check (newdir olddir) | ||
| 510 | "Check that defcustoms have :version tags where needed. | ||
| 511 | NEWDIR is the current lisp/ directory, OLDDIR is that from the previous | ||
| 512 | release. A defcustom that is only in NEWDIR should have a :version | ||
| 513 | tag. We exclude cases where a defvar exists in OLDDIR, since | ||
| 514 | just converting a defvar to a defcustom does not require a :version bump. | ||
| 515 | |||
| 516 | Note that a :version tag should also be added if the value of a defcustom | ||
| 517 | changes (in a non-trivial way). This function does not check for that." | ||
| 518 | (interactive "DNew Lisp directory: \nDOld Lisp directory: ") | ||
| 519 | (or (file-directory-p (setq newdir (expand-file-name newdir))) | ||
| 520 | (error "Directory `%s' not found" newdir)) | ||
| 521 | (or (file-directory-p (setq olddir (expand-file-name olddir))) | ||
| 522 | (error "Directory `%s' not found" olddir)) | ||
| 523 | (let* ((newfiles (progn (message "Finding new files with defcustoms...") | ||
| 524 | (cusver-find-files newdir))) | ||
| 525 | (oldfiles (progn (message "Finding old files with defcustoms...") | ||
| 526 | (cusver-find-files olddir t))) | ||
| 527 | (newcus (progn (message "Reading new defcustoms...") | ||
| 528 | (mapcar | ||
| 529 | (lambda (file) | ||
| 530 | (cons file (cusver-scan file))) newfiles))) | ||
| 531 | oldcus result thisfile) | ||
| 532 | (message "Reading old defcustoms...") | ||
| 533 | (dolist (file oldfiles) | ||
| 534 | (setq oldcus (append oldcus (cusver-scan file t)))) | ||
| 535 | ;; newcus has elements (FILE (VAR VER) ... ). | ||
| 536 | ;; oldcus just (VAR . VER). | ||
| 537 | (message "Checking for version tags...") | ||
| 538 | (dolist (new newcus) | ||
| 539 | (setq file (car new) | ||
| 540 | thisfile | ||
| 541 | (let (missing var) | ||
| 542 | (dolist (cons (cdr new)) | ||
| 543 | (or (cdr cons) | ||
| 544 | (assq (setq var (car cons)) oldcus) | ||
| 545 | (push var missing))) | ||
| 546 | (if missing | ||
| 547 | (cons file missing)))) | ||
| 548 | (if thisfile | ||
| 549 | (setq result (cons thisfile result)))) | ||
| 550 | (message "Checking for version tags... done") | ||
| 551 | (if (not result) | ||
| 552 | (message "No missing :version tags") | ||
| 553 | (pop-to-buffer "*cusver*") | ||
| 554 | (erase-buffer) | ||
| 555 | (insert "These defcustoms might be missing :version tags:\n\n") | ||
| 556 | (dolist (elem result) | ||
| 557 | (let* ((str (file-relative-name (car elem) newdir)) | ||
| 558 | (strlen (length str))) | ||
| 559 | (dolist (var (cdr elem)) | ||
| 560 | (insert (format "%s: %s\n" str var)) | ||
| 561 | (make-text-button (+ (line-beginning-position 0) strlen 2) | ||
| 562 | (line-end-position 0) | ||
| 563 | 'file (car elem) | ||
| 564 | 'var var | ||
| 565 | 'help-echo "Mouse-2: visit this definition" | ||
| 566 | :type 'cusver-xref))))))) | ||
| 567 | |||
| 445 | (provide 'admin) | 568 | (provide 'admin) |
| 446 | 569 | ||
| 447 | ;;; admin.el ends here | 570 | ;;; admin.el ends here |
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el index 713b0512e09..d9277217f0e 100644 --- a/admin/unidata/unidata-gen.el +++ b/admin/unidata/unidata-gen.el | |||
| @@ -166,9 +166,10 @@ | |||
| 166 | '((name | 166 | '((name |
| 167 | 1 unidata-gen-table-name "uni-name.el" | 167 | 1 unidata-gen-table-name "uni-name.el" |
| 168 | "Unicode character name. | 168 | "Unicode character name. |
| 169 | Property value is a string." | 169 | Property value is a string or nil. |
| 170 | The value nil stands for the default value \"null string\")." | ||
| 170 | nil | 171 | nil |
| 171 | "") | 172 | nil) |
| 172 | (general-category | 173 | (general-category |
| 173 | 2 unidata-gen-table-symbol "uni-category.el" | 174 | 2 unidata-gen-table-symbol "uni-category.el" |
| 174 | "Unicode general category. | 175 | "Unicode general category. |
| @@ -235,7 +236,8 @@ Property value is a symbol `Y' or `N'. See also the property `mirroring'." | |||
| 235 | (old-name | 236 | (old-name |
| 236 | 10 unidata-gen-table-name "uni-old-name.el" | 237 | 10 unidata-gen-table-name "uni-old-name.el" |
| 237 | "Unicode old names as published in Unicode 1.0. | 238 | "Unicode old names as published in Unicode 1.0. |
| 238 | Property value is a string.") | 239 | Property value is a string or nil. |
| 240 | The value nil stands for the default value \"null string\").") | ||
| 239 | (iso-10646-comment | 241 | (iso-10646-comment |
| 240 | 11 unidata-gen-table-name "uni-comment.el" | 242 | 11 unidata-gen-table-name "uni-comment.el" |
| 241 | "Unicode ISO 10646 comment. | 243 | "Unicode ISO 10646 comment. |
| @@ -712,7 +714,7 @@ is the character itself."))) | |||
| 712 | (aset table c name) | 714 | (aset table c name) |
| 713 | (if (= c char) | 715 | (if (= c char) |
| 714 | (setq val name)))) | 716 | (setq val name)))) |
| 715 | (or val "")))) | 717 | val))) |
| 716 | 718 | ||
| 717 | ((and (integerp val) (> val 0)) | 719 | ((and (integerp val) (> val 0)) |
| 718 | (let* ((symbol-table (aref (char-table-extra-slot table 4) 1)) | 720 | (let* ((symbol-table (aref (char-table-extra-slot table 4) 1)) |
| @@ -738,9 +740,7 @@ is the character itself."))) | |||
| 738 | ((eq sym 'CJK\ COMPATIBILITY\ IDEOGRAPH) | 740 | ((eq sym 'CJK\ COMPATIBILITY\ IDEOGRAPH) |
| 739 | (format "%s-%04X" sym char)) | 741 | (format "%s-%04X" sym char)) |
| 740 | ((eq sym 'VARIATION\ SELECTOR) | 742 | ((eq sym 'VARIATION\ SELECTOR) |
| 741 | (format "%s-%d" sym (+ (- char #xe0100) 17)))))) | 743 | (format "%s-%d" sym (+ (- char #xe0100) 17)))))))) |
| 742 | |||
| 743 | (t ""))) | ||
| 744 | 744 | ||
| 745 | ;; Store VAL as the name of CHAR in TABLE. | 745 | ;; Store VAL as the name of CHAR in TABLE. |
| 746 | 746 | ||