Using saved parent location: http://bzr.savannah.gnu.org/r/emacs/trunk/ Now on revision 101828. ------------------------------------------------------------ revno: 101828 committer: Katsumi Yamaoka branch nick: trunk timestamp: Thu 2010-10-07 06:47:37 +0000 message: [Gnus] Enable XEmacs to display images. gnus-html.el (gnus-html-schedule-image-fetching): Remove function name from XEmacs' function-arglist. gnus-gravatar.el (gnus-gravatar-insert): Don't add properties to gravatar under XEmacs. diff: === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2010-10-07 03:49:38 +0000 +++ lisp/gnus/ChangeLog 2010-10-07 06:47:37 +0000 @@ -1,3 +1,11 @@ +2010-10-07 Katsumi Yamaoka + + * gnus-html.el (gnus-html-schedule-image-fetching): Remove function + name from XEmacs' function-arglist. + + * gnus-gravatar.el (gnus-gravatar-insert): Don't add properties to + gravatar under XEmacs. + 2010-10-07 Teodor Zlatanov * auth-source.el: Update docs with TODO items. === modified file 'lisp/gnus/gnus-gravatar.el' --- lisp/gnus/gnus-gravatar.el 2010-10-03 00:33:27 +0000 +++ lisp/gnus/gnus-gravatar.el 2010-10-07 06:47:37 +0000 @@ -84,10 +84,9 @@ ;; another mail with the same someaddress. (unless (memq 'gnus-gravatar (text-properties-at (point))) (let ((inhibit-read-only t) - (point (point)) - (gravatar (append - gravatar - gnus-gravatar-properties))) + (point (point))) + (unless (featurep 'xemacs) + (setq gravatar (append gravatar gnus-gravatar-properties))) (gnus-put-image gravatar nil category) (put-text-property point (point) 'gnus-gravatar address) (gnus-add-wash-type category) === modified file 'lisp/gnus/gnus-html.el' --- lisp/gnus/gnus-html.el 2010-10-05 22:43:06 +0000 +++ lisp/gnus/gnus-html.el 2010-10-07 06:47:37 +0000 @@ -361,7 +361,7 @@ 'gnus-html-image-fetched (list buffer image)))) (when (> (length (if (featurep 'xemacs) - (split-string (function-arglist 'url-retrieve)) + (cdr (split-string (function-arglist 'url-retrieve))) (help-function-arglist 'url-retrieve))) 4) (setq args (nconc args (list t)))) ------------------------------------------------------------ revno: 101827 author: Teodor Zlatanov committer: Katsumi Yamaoka branch nick: trunk timestamp: Thu 2010-10-07 03:49:38 +0000 message: gnus-int.el, gnus-util.el: Gnus hooks for the mark get/set operations. gnus-sync.el: Update docs to explain state and plans. auth-source.el: Update docs with TODO items. diff: === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2010-10-06 14:02:39 +0000 +++ lisp/gnus/ChangeLog 2010-10-07 03:49:38 +0000 @@ -1,3 +1,16 @@ +2010-10-07 Teodor Zlatanov + + * auth-source.el: Update docs with TODO items. + + * gnus-sync.el: Update docs to explain state and plans. + + * gnus-int.el (gnus-after-set-mark-hook, gnus-before-update-mark-hook): + Hooks for mark updates. + (gnus-request-set-mark, gnus-request-update-mark): Use them. + + * gnus-util.el (gnus-run-hooks-with-args): Convenience function to run + hooks with arguments, which is needed for mark update hooks. + 2010-10-06 Julien Danjou * sieve-manage.el: Update example in `Commentary'. === modified file 'lisp/gnus/auth-source.el' --- lisp/gnus/auth-source.el 2010-09-26 13:25:35 +0000 +++ lisp/gnus/auth-source.el 2010-10-07 03:49:38 +0000 @@ -29,6 +29,14 @@ ;; See the auth.info Info documentation for details. +;; TODO: + +;; - never decode the backend file unless it's necessary +;; - a more generic way to match backends and search backend contents +;; - absorb netrc.el and simplify it +;; - protect passwords better +;; - allow creating and changing netrc lines (not files) e.g. change a password + ;;; Code: (require 'gnus-util) @@ -49,29 +57,29 @@ :group 'gnus) (defcustom auth-source-protocols '((imap "imap" "imaps" "143" "993") - (pop3 "pop3" "pop" "pop3s" "110" "995") - (ssh "ssh" "22") - (sftp "sftp" "115") - (smtp "smtp" "25")) + (pop3 "pop3" "pop" "pop3s" "110" "995") + (ssh "ssh" "22") + (sftp "sftp" "115") + (smtp "smtp" "25")) "List of authentication protocols and their names" :group 'auth-source :version "23.2" ;; No Gnus :type '(repeat :tag "Authentication Protocols" - (cons :tag "Protocol Entry" - (symbol :tag "Protocol") - (repeat :tag "Names" - (string :tag "Name"))))) + (cons :tag "Protocol Entry" + (symbol :tag "Protocol") + (repeat :tag "Names" + (string :tag "Name"))))) ;;; generate all the protocols in a format Customize can use ;;; TODO: generate on the fly from auth-source-protocols (defconst auth-source-protocols-customize (mapcar (lambda (a) - (let ((p (car-safe a))) - (list 'const - :tag (upcase (symbol-name p)) - p))) - auth-source-protocols)) + (let ((p (car-safe a))) + (list 'const + :tag (upcase (symbol-name p)) + p))) + auth-source-protocols)) (defvar auth-source-cache (make-hash-table :test 'equal) "Cache for auth-source data") @@ -94,11 +102,11 @@ that function using the same arguments as `message'." :group 'auth-source :version "23.2" ;; No Gnus - :type `(choice - :tag "auth-source debugging mode" - (const :tag "Log using `message' to the *Messages* buffer" t) - (function :tag "Function that takes arguments like `message'") - (const :tag "Don't log anything" nil))) + :type `(choice + :tag "auth-source debugging mode" + (const :tag "Log using `message' to the *Messages* buffer" t) + (function :tag "Function that takes arguments like `message'") + (const :tag "Don't log anything" nil))) (defcustom auth-source-hide-passwords t "Whether auth-source should hide passwords in log messages. @@ -108,7 +116,7 @@ :type `boolean) (defcustom auth-sources '((:source "~/.authinfo.gpg") - (:source "~/.authinfo")) + (:source "~/.authinfo")) "List of authentication sources. The default will get login and password information from a .gpg @@ -122,34 +130,34 @@ :group 'auth-source :version "23.2" ;; No Gnus :type `(repeat :tag "Authentication Sources" - (list :tag "Source definition" - (const :format "" :value :source) - (choice :tag "Authentication backend choice" - (string :tag "Authentication Source (file)") - (list :tag "secrets.el (Secret Service API/KWallet/GNOME Keyring)" + (list :tag "Source definition" + (const :format "" :value :source) + (choice :tag "Authentication backend choice" + (string :tag "Authentication Source (file)") + (list :tag "secrets.el (Secret Service API/KWallet/GNOME Keyring)" (const :format "" :value :secrets) (choice :tag "Collection to use" (string :tag "Collection name") (const :tag "Default" 'default) (const :tag "Login" "login") (const :tag "Temporary" "session")))) - (repeat :tag "Extra Parameters" :inline t - (choice :tag "Extra parameter" - (list :tag "Host (omit to match as a fallback)" - (const :format "" :value :host) - (choice :tag "Host (machine) choice" - (const :tag "Any" t) - (regexp :tag "Host (machine) regular expression"))) - (list :tag "Protocol (omit to match as a fallback)" - (const :format "" :value :protocol) - (choice :tag "Protocol" - (const :tag "Any" t) - ,@auth-source-protocols-customize)) - (list :tag "User (omit to match as a fallback)" :inline t - (const :format "" :value :user) - (choice :tag "Personality or username" - (const :tag "Any" t) - (string :tag "Specific user name")))))))) + (repeat :tag "Extra Parameters" :inline t + (choice :tag "Extra parameter" + (list :tag "Host (omit to match as a fallback)" + (const :format "" :value :host) + (choice :tag "Host (machine) choice" + (const :tag "Any" t) + (regexp :tag "Host (machine) regular expression"))) + (list :tag "Protocol (omit to match as a fallback)" + (const :format "" :value :protocol) + (choice :tag "Protocol" + (const :tag "Any" t) + ,@auth-source-protocols-customize)) + (list :tag "User (omit to match as a fallback)" :inline t + (const :format "" :value :user) + (choice :tag "Personality or username" + (const :tag "Any" t) + (string :tag "Specific user name")))))))) ;; temp for debugging ;; (unintern 'auth-source-protocols) @@ -176,21 +184,21 @@ ;; we also check the value (when auth-source-debug (let ((logger (if (functionp auth-source-debug) - auth-source-debug - 'message))) + auth-source-debug + 'message))) (apply logger msg)))) ;; (auth-source-pick nil :host "any" :protocol 'imap :user "joe") ;; (auth-source-pick t :host "any" :protocol 'imap :user "joe") ;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe") -;; (:source (:secrets "session") :host t :protocol t :user "joe") -;; (:source (:secrets "login") :host t :protocol t) -;; (:source "~/.authinfo.gpg" :host t :protocol t))) +;; (:source (:secrets "session") :host t :protocol t :user "joe") +;; (:source (:secrets "login") :host t :protocol t) +;; (:source "~/.authinfo.gpg" :host t :protocol t))) ;; (setq auth-sources '((:source (:secrets default) :host t :protocol t :user "joe") -;; (:source (:secrets "session") :host t :protocol t :user "joe") -;; (:source (:secrets "login") :host t :protocol t) -;; )) +;; (:source (:secrets "session") :host t :protocol t :user "joe") +;; (:source (:secrets "login") :host t :protocol t) +;; )) ;; (setq auth-sources '((:source "~/.authinfo.gpg" :host t :protocol t))) @@ -200,11 +208,11 @@ the file name." (let ((source (plist-get entry :source))) (if (stringp source) - source + source ;; Secret Service API. (setq source (plist-get source :secrets)) (when (eq source 'default) - (setq source (or (secrets-get-alias "default") "login"))) + (setq source (or (secrets-get-alias "default") "login"))) (or source "session")))) (defun auth-source-pick (&rest spec) @@ -214,124 +222,124 @@ SPEC means to always succeed in the match. A string value is matched as a regex." (let ((keys (loop for i below (length spec) by 2 collect (nth i spec))) - choices) + choices) (dolist (choice (copy-tree auth-sources) choices) (let ((source (plist-get choice :source)) - (match t)) - (when - (and - ;; Check existence of source. - (if (consp source) - ;; Secret Service API. - (member (auth-get-source choice) (secrets-list-collections)) - ;; authinfo file. - (file-exists-p source)) - - ;; Check keywords. - (dolist (k keys match) - (let* ((v (plist-get spec k)) - (choicev (if (plist-member choice k) - (plist-get choice k) t))) - (setq match - (and match - (or - ;; source always matches spec key - (eq t choicev) - ;; source key gives regex to match against spec - (and (stringp choicev) (string-match choicev v)) - ;; source key gives symbol to match against spec - (and (symbolp choicev) (eq choicev v)))))))) - - (add-to-list 'choices choice 'append)))))) + (match t)) + (when + (and + ;; Check existence of source. + (if (consp source) + ;; Secret Service API. + (member (auth-get-source choice) (secrets-list-collections)) + ;; authinfo file. + (file-exists-p source)) + + ;; Check keywords. + (dolist (k keys match) + (let* ((v (plist-get spec k)) + (choicev (if (plist-member choice k) + (plist-get choice k) t))) + (setq match + (and match + (or + ;; source always matches spec key + (eq t choicev) + ;; source key gives regex to match against spec + (and (stringp choicev) (string-match choicev v)) + ;; source key gives symbol to match against spec + (and (symbolp choicev) (eq choicev v)))))))) + + (add-to-list 'choices choice 'append)))))) (defun auth-source-retrieve (mode entry &rest spec) "Retrieve MODE credentials according to SPEC from ENTRY." (catch 'no-password (let ((host (plist-get spec :host)) - (user (plist-get spec :user)) - (prot (plist-get spec :protocol)) - (source (plist-get entry :source)) - result) + (user (plist-get spec :user)) + (prot (plist-get spec :protocol)) + (source (plist-get entry :source)) + result) (cond ;; Secret Service API. ((consp source) - (let ((coll (auth-get-source entry)) - item) - ;; Loop over candidates with a matching host attribute. - (dolist (elt (secrets-search-items coll :host host) item) - (when (and (or (not user) - (string-equal - user (secrets-get-attribute coll elt :user))) - (or (not prot) - (string-equal - prot (secrets-get-attribute coll elt :protocol)))) - (setq item elt) - (return elt))) - ;; Compose result. - (when item - (setq result - (mapcar (lambda (m) - (if (string-equal "password" m) - (or (secrets-get-secret coll item) - ;; When we do not find a password, - ;; we return nil anyway. - (throw 'no-password nil)) - (or (secrets-get-attribute coll item :user) - user))) - (if (consp mode) mode (list mode))))) - (if (consp mode) result (car result)))) + (let ((coll (auth-get-source entry)) + item) + ;; Loop over candidates with a matching host attribute. + (dolist (elt (secrets-search-items coll :host host) item) + (when (and (or (not user) + (string-equal + user (secrets-get-attribute coll elt :user))) + (or (not prot) + (string-equal + prot (secrets-get-attribute coll elt :protocol)))) + (setq item elt) + (return elt))) + ;; Compose result. + (when item + (setq result + (mapcar (lambda (m) + (if (string-equal "password" m) + (or (secrets-get-secret coll item) + ;; When we do not find a password, + ;; we return nil anyway. + (throw 'no-password nil)) + (or (secrets-get-attribute coll item :user) + user))) + (if (consp mode) mode (list mode))))) + (if (consp mode) result (car result)))) ;; Anything else is netrc. (t - (let ((search (list source (list host) (list (format "%s" prot)) - (auth-source-protocol-defaults prot)))) - (setq result - (mapcar (lambda (m) - (if (string-equal "password" m) - (or (apply - 'netrc-machine-user-or-password m search) - ;; When we do not find a password, we - ;; return nil anyway. - (throw 'no-password nil)) - (or (apply - 'netrc-machine-user-or-password m search) - user))) - (if (consp mode) mode (list mode))))) - (if (consp mode) result (car result))))))) + (let ((search (list source (list host) (list (format "%s" prot)) + (auth-source-protocol-defaults prot)))) + (setq result + (mapcar (lambda (m) + (if (string-equal "password" m) + (or (apply + 'netrc-machine-user-or-password m search) + ;; When we do not find a password, we + ;; return nil anyway. + (throw 'no-password nil)) + (or (apply + 'netrc-machine-user-or-password m search) + user))) + (if (consp mode) mode (list mode))))) + (if (consp mode) result (car result))))))) (defun auth-source-create (mode entry &rest spec) "Create interactively credentials according to SPEC in ENTRY. Return structure as specified by MODE." (let* ((host (plist-get spec :host)) - (user (plist-get spec :user)) - (prot (plist-get spec :protocol)) - (source (plist-get entry :source)) - (name (concat (if user (format "%s@" user)) - host - (if prot (format ":%s" prot)))) - result) + (user (plist-get spec :user)) + (prot (plist-get spec :protocol)) + (source (plist-get entry :source)) + (name (concat (if user (format "%s@" user)) + host + (if prot (format ":%s" prot)))) + result) (setq result - (mapcar - (lambda (m) - (cons - m - (cond - ((equal "password" m) - (let ((passwd (read-passwd - (format "Password for %s on %s: " prot host)))) - (cond - ;; Secret Service API. - ((consp source) - (apply - 'secrets-create-item - (auth-get-source entry) name passwd spec)) - (t)) ;; netrc not implemented yes. - passwd)) - ((equal "login" m) - (or user - (read-string (format "User name for %s on %s: " prot host)))) - (t - "unknownuser")))) - (if (consp mode) mode (list mode)))) + (mapcar + (lambda (m) + (cons + m + (cond + ((equal "password" m) + (let ((passwd (read-passwd + (format "Password for %s on %s: " prot host)))) + (cond + ;; Secret Service API. + ((consp source) + (apply + 'secrets-create-item + (auth-get-source entry) name passwd spec)) + (t)) ;; netrc not implemented yes. + passwd)) + ((equal "login" m) + (or user + (read-string (format "User name for %s on %s: " prot host)))) + (t + "unknownuser")))) + (if (consp mode) mode (list mode)))) ;; Allow the source to save the data. (cond ((consp source) @@ -340,33 +348,33 @@ (t ;; netrc interface. (when (y-or-n-p (format "Do you want to save this password in %s? " - source)) - (netrc-store-data source host prot - (or user (cdr (assoc "login" result))) - (cdr (assoc "password" result)))))) + source)) + (netrc-store-data source host prot + (or user (cdr (assoc "login" result))) + (cdr (assoc "password" result)))))) (if (consp mode) - (mapcar #'cdr result) + (mapcar #'cdr result) (cdar result)))) (defun auth-source-delete (entry &rest spec) "Delete credentials according to SPEC in ENTRY." (let ((host (plist-get spec :host)) - (user (plist-get spec :user)) - (prot (plist-get spec :protocol)) - (source (plist-get entry :source))) + (user (plist-get spec :user)) + (prot (plist-get spec :protocol)) + (source (plist-get entry :source))) (cond ;; Secret Service API. ((consp source) (let ((coll (auth-get-source entry))) - ;; Loop over candidates with a matching host attribute. - (dolist (elt (secrets-search-items coll :host host)) - (when (and (or (not user) - (string-equal - user (secrets-get-attribute coll elt :user))) - (or (not prot) - (string-equal - prot (secrets-get-attribute coll elt :protocol)))) - (secrets-delete-item coll elt))))) + ;; Loop over candidates with a matching host attribute. + (dolist (elt (secrets-search-items coll :host host)) + (when (and (or (not user) + (string-equal + user (secrets-get-attribute coll elt :user))) + (or (not prot) + (string-equal + prot (secrets-get-attribute coll elt :protocol)))) + (secrets-delete-item coll elt))))) (t)))) ;; netrc not implemented yes. (defun auth-source-forget-user-or-password @@ -416,57 +424,57 @@ "auth-source-user-or-password: get %s for %s (%s) + user=%s" mode host protocol username) (let* ((listy (listp mode)) - (mode (if listy mode (list mode))) - (cname (if username - (format "%s %s:%s %s" mode host protocol username) - (format "%s %s:%s" mode host protocol))) - (search (list :host host :protocol protocol)) - (search (if username (append search (list :user username)) search)) - (found (if (not delete-existing) - (gethash cname auth-source-cache) - (remhash cname auth-source-cache) - nil))) + (mode (if listy mode (list mode))) + (cname (if username + (format "%s %s:%s %s" mode host protocol username) + (format "%s %s:%s" mode host protocol))) + (search (list :host host :protocol protocol)) + (search (if username (append search (list :user username)) search)) + (found (if (not delete-existing) + (gethash cname auth-source-cache) + (remhash cname auth-source-cache) + nil))) (if found - (progn - (auth-source-do-debug - "auth-source-user-or-password: cached %s=%s for %s (%s) + %s" - mode - ;; don't show the password - (if (and (member "password" mode) auth-source-hide-passwords) - "SECRET" - found) - host protocol username) - found) ; return the found data + (progn + (auth-source-do-debug + "auth-source-user-or-password: cached %s=%s for %s (%s) + %s" + mode + ;; don't show the password + (if (and (member "password" mode) auth-source-hide-passwords) + "SECRET" + found) + host protocol username) + found) ; return the found data ;; else, if not found (let ((choices (apply 'auth-source-pick search))) - (dolist (choice choices) - (if delete-existing - (apply 'auth-source-delete choice search) - (setq found (apply 'auth-source-retrieve mode choice search))) - (and found (return found))) - - ;; We haven't found something, so we will create it interactively. - (when (and (not found) create-missing) - (setq found (apply 'auth-source-create - mode (if choices - (car choices) - (car auth-sources)) - search))) - - ;; Cache the result. - (when found - (auth-source-do-debug - "auth-source-user-or-password: found %s=%s for %s (%s) + %s" - mode - ;; don't show the password - (if (and (member "password" mode) auth-source-hide-passwords) - "SECRET" found) - host protocol username) - (setq found (if listy found (car-safe found))) - (when auth-source-do-cache - (puthash cname found auth-source-cache))) - - found)))) + (dolist (choice choices) + (if delete-existing + (apply 'auth-source-delete choice search) + (setq found (apply 'auth-source-retrieve mode choice search))) + (and found (return found))) + + ;; We haven't found something, so we will create it interactively. + (when (and (not found) create-missing) + (setq found (apply 'auth-source-create + mode (if choices + (car choices) + (car auth-sources)) + search))) + + ;; Cache the result. + (when found + (auth-source-do-debug + "auth-source-user-or-password: found %s=%s for %s (%s) + %s" + mode + ;; don't show the password + (if (and (member "password" mode) auth-source-hide-passwords) + "SECRET" found) + host protocol username) + (setq found (if listy found (car-safe found))) + (when auth-source-do-cache + (puthash cname found auth-source-cache))) + + found)))) (defun auth-source-protocol-defaults (protocol) "Return a list of default ports and names for PROTOCOL." === modified file 'lisp/gnus/gnus-int.el' --- lisp/gnus/gnus-int.el 2010-09-30 08:39:23 +0000 +++ lisp/gnus/gnus-int.el 2010-10-07 03:49:38 +0000 @@ -41,6 +41,16 @@ :group 'gnus-start :type 'hook) +(defcustom gnus-after-set-mark-hook nil + "Hook called just after marks are set in a group." + :group 'gnus-start + :type 'hook) + +(defcustom gnus-before-update-mark-hook nil + "Hook called just before marks are updated in a group." + :group 'gnus-start + :type 'hook) + (defcustom gnus-server-unopen-status nil "The default status if the server is not able to open. If the server is covered by Gnus agent, the possible values are @@ -471,7 +481,8 @@ action (funcall (gnus-get-function gnus-command-method 'request-set-mark) (gnus-group-real-name group) action - (nth 1 gnus-command-method))))) + (nth 1 gnus-command-method)) + (gnus-run-hook-with-args gnus-after-set-mark-hook group action)))) (defun gnus-request-update-mark (group article mark) "Allow the back end to change the mark the user tries to put on an article." @@ -479,6 +490,7 @@ (if (not (gnus-check-backend-function 'request-update-mark (car gnus-command-method))) mark + (gnus-run-hook-with-args gnus-before-update-mark-hook group article mark) (funcall (gnus-get-function gnus-command-method 'request-update-mark) (gnus-group-real-name group) article mark)))) === modified file 'lisp/gnus/gnus-sync.el' --- lisp/gnus/gnus-sync.el 2010-08-17 07:04:35 +0000 +++ lisp/gnus/gnus-sync.el 2010-10-07 03:49:38 +0000 @@ -24,6 +24,10 @@ ;; This is the gnus-sync.el package. +;; It's due for a rewrite using gnus-after-set-mark-hook and +;; gnus-before-update-mark-hook. Until then please consider it +;; experimental. + ;; Put this in your startup file (~/.gnus.el for instance) ;; possibilities for gnus-sync-backend: @@ -40,6 +44,9 @@ ;; - after gnus-sync-read, the message counts are wrong +;; - use gnus-after-set-mark-hook and gnus-before-update-mark-hook to +;; catch the mark updates + ;;; Code: (eval-when-compile (require 'cl)) === modified file 'lisp/gnus/gnus-util.el' --- lisp/gnus/gnus-util.el 2010-10-06 01:09:32 +0000 +++ lisp/gnus/gnus-util.el 2010-10-07 03:49:38 +0000 @@ -1290,6 +1290,11 @@ (save-current-buffer (apply 'run-hooks funcs))) +(defun gnus-run-hook-with-args (hook &rest args) + "Does the same as `run-hook-with-args', but saves the current buffer." + (save-current-buffer + (apply 'run-hook-with-args hook args))) + (defun gnus-run-mode-hooks (&rest funcs) "Run `run-mode-hooks' if it is available, otherwise `run-hooks'. This function saves the current buffer." ------------------------------------------------------------ revno: 101826 committer: Glenn Morris branch nick: trunk timestamp: Wed 2010-10-06 19:42:30 -0700 message: Reduce rmail.el's use of sendmail.el * lisp/mail/rmail.el (mail-sendmail-delimit-header, mail-header-end) (mail-position-on-field): Remove declarations. (mail-position-on-field): Autoload it. (rmail-retry-failure): Replace use of mail-sendmail-delimit-header and mail-header-end. Don't require sendmail. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2010-10-07 02:37:39 +0000 +++ lisp/ChangeLog 2010-10-07 02:42:30 +0000 @@ -1,5 +1,11 @@ 2010-10-07 Glenn Morris + * mail/rmail.el (mail-sendmail-delimit-header, mail-header-end) + (mail-position-on-field): Remove declarations. + (mail-position-on-field): Autoload it. + (rmail-retry-failure): Replace use of mail-sendmail-delimit-header + and mail-header-end. Don't require sendmail. + * emacs-lisp/shadow.el (shadow-font-lock-keywords): New variable. (shadow-mode): New mode. (shadow-find-file): New button. === modified file 'lisp/mail/rmail.el' --- lisp/mail/rmail.el 2010-08-29 16:17:13 +0000 +++ lisp/mail/rmail.el 2010-10-07 02:42:30 +0000 @@ -3838,9 +3838,7 @@ (1- (point)) (point-max))))))) -(declare-function mail-sendmail-delimit-header "sendmail" ()) -(declare-function mail-header-end "sendmail" ()) -(declare-function mail-position-on-field "sendmail" (field &optional soft)) +(autoload 'mail-position-on-field "sendmail") (defun rmail-retry-failure () "Edit a mail message which is based on the contents of the current message. @@ -3926,18 +3924,19 @@ ;; Insert original text as initial text of new draft message. ;; Bind inhibit-read-only since the header delimiter ;; of the previous message was probably read-only. - (let ((inhibit-read-only t)) + (let ((inhibit-read-only t) + eoh) (erase-buffer) (insert-buffer-substring rmail-this-buffer bounce-start bounce-end) (goto-char (point-min)) (if bounce-indent (indent-rigidly (point-min) (point-max) bounce-indent)) - ;; FIXME better to replace sendmail functions. - (require 'sendmail) - (mail-sendmail-delimit-header) + (rfc822-goto-eoh) + (setq eoh (point)) + (insert mail-header-separator) (save-restriction - (narrow-to-region (point-min) (mail-header-end)) + (narrow-to-region (point-min) eoh) (rmail-delete-headers rmail-retry-ignored-headers) (rmail-delete-headers "^\\(sender\\|return-path\\|received\\):") (setq resending (mail-fetch-field "resent-to")) @@ -4456,5 +4455,4 @@ (provide 'rmail) -;; arch-tag: 65d257d3-c281-4a65-9c38-e61af95af2f0 ;;; rmail.el ends here ------------------------------------------------------------ revno: 101825 committer: Glenn Morris branch nick: trunk timestamp: Wed 2010-10-06 19:37:39 -0700 message: Add a shadow-mode for load-path shadows. * lisp/emacs-lisp/shadow.el (shadow-font-lock-keywords): New variable. (shadow-mode): New mode. (shadow-find-file): New button. (list-load-path-shadows): Use shadow-mode and buttons. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2010-10-07 02:32:52 +0000 +++ lisp/ChangeLog 2010-10-07 02:37:39 +0000 @@ -1,5 +1,10 @@ 2010-10-07 Glenn Morris + * emacs-lisp/shadow.el (shadow-font-lock-keywords): New variable. + (shadow-mode): New mode. + (shadow-find-file): New button. + (list-load-path-shadows): Use shadow-mode and buttons. + * iimage.el (iimage-version): Remove. (iimage-mode-image-search-path, iimage-mode-image-regex-alist): Turn into defcustoms. === modified file 'lisp/emacs-lisp/shadow.el' --- lisp/emacs-lisp/shadow.el 2010-01-13 08:35:10 +0000 +++ lisp/emacs-lisp/shadow.el 2010-10-07 02:37:39 +0000 @@ -151,6 +151,34 @@ (and (= (nth 7 (file-attributes f1)) (nth 7 (file-attributes f2))) (eq 0 (call-process "cmp" nil nil nil "-s" f1 f2)))))))) + +(defvar shadow-font-lock-keywords + `((,(format "hides \\(%s.*\\)" + (file-name-directory (locate-library "simple.el"))) + . (1 font-lock-warning-face))) + "Keywords to highlight in `shadow-mode'.") + +(define-derived-mode shadow-mode fundamental-mode "Shadow" + "Major mode for load-path shadows buffer." + (set (make-local-variable 'font-lock-defaults) + '((shadow-font-lock-keywords))) + (setq buffer-undo-list t + buffer-read-only t)) + +;; TODO use text-properties instead, a la dired. +(require 'button) +(define-button-type 'shadow-find-file + 'follow-link t +;; 'face 'default + 'action (lambda (button) + (let ((file (concat (button-get button 'shadow-file) ".el"))) + (or (file-exists-p file) + (setq file (concat file ".gz"))) + (if (file-readable-p file) + (pop-to-buffer (find-file-noselect file)) + (error "Cannot read file")))) + 'help-echo "mouse-2, RET: find this file") + ;;;###autoload (defun list-load-path-shadows (&optional stringp) @@ -234,14 +262,20 @@ ;; Create the *Shadows* buffer and display shadowings there. (let ((string (buffer-string))) (with-current-buffer (get-buffer-create "*Shadows*") - (fundamental-mode) ;run after-change-major-mode-hook. (display-buffer (current-buffer)) - (setq buffer-undo-list t - buffer-read-only nil) - (erase-buffer) - (insert string) - (insert msg "\n") - (setq buffer-read-only t))) + (shadow-mode) ; run after-change-major-mode-hook + (let ((inhibit-read-only t)) + (erase-buffer) + (insert string) + (insert msg "\n") + (while (re-search-backward "\\(^.*\\) hides \\(.*$\\)" + nil t) + (dotimes (i 2) + (make-button (match-beginning (1+ i)) + (match-end (1+ i)) + 'type 'shadow-find-file 'shadow-file + (match-string (1+ i))))) + (goto-char (point-max))))) ;; We are non-interactive, print shadows via message. (unless (zerop n) (message "This site has duplicate Lisp libraries with the same name. @@ -259,5 +293,4 @@ (provide 'shadow) -;; arch-tag: 0480e8a7-62ed-4a12-a9f6-f44ded9b0830 ;;; shadow.el ends here ------------------------------------------------------------ revno: 101824 committer: Glenn Morris branch nick: trunk timestamp: Wed 2010-10-06 19:32:52 -0700 message: Minor iimage.el changes. * lisp/iimage.el (iimage-version): Remove. (iimage-mode-image-search-path, iimage-mode-image-regex-alist): Turn into defcustoms. (iimage-mode-map): Give it a doc string. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2010-10-07 02:26:30 +0000 +++ lisp/ChangeLog 2010-10-07 02:32:52 +0000 @@ -1,5 +1,10 @@ 2010-10-07 Glenn Morris + * iimage.el (iimage-version): Remove. + (iimage-mode-image-search-path, iimage-mode-image-regex-alist): + Turn into defcustoms. + (iimage-mode-map): Give it a doc string. + * calendar/appt.el (appt-activate): Give a warning rather than an error if there is no diary-file. === modified file 'lisp/iimage.el' --- lisp/iimage.el 2010-06-07 21:01:23 +0000 +++ lisp/iimage.el 2010-10-07 02:32:52 +0000 @@ -1,6 +1,7 @@ ;;; iimage.el --- Inline image minor mode. -;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 +;; Free Software Foundation, Inc. ;; Author: KOSEKI Yoshinori ;; Maintainer: KOSEKI Yoshinori @@ -27,20 +28,16 @@ ;; exists in the buffer. ;; http://www.netlaputa.ne.jp/~kose/Emacs/iimage.html ;; -;; Add to your `~/.emacs': -;; (autoload 'iimage-mode "iimage" "Support Inline image minor mode." t) -;; (autoload 'turn-on-iimage-mode "iimage" "Turn on Inline image minor mode." t) -;; ;; ** Display images in *Info* buffer. ;; -;; (add-hook 'info-mode-hook 'turn-on-iimage-mode) +;; (add-hook 'info-mode-hook 'iimage-mode) ;; ;; .texinfo: @file{file://foo.png} ;; .info: `file://foo.png' ;; ;; ** Display images in Wiki buffer. ;; -;; (add-hook 'wiki-mode-hook 'turn-on-iimage-mode) +;; (add-hook 'wiki-mode-hook 'iimage-mode) ;; ;; wiki-file: [[foo.png]] @@ -54,19 +51,10 @@ :version "22.1" :group 'image) -(defconst iimage-version "1.1") - -(defvar iimage-mode-map - (let ((map (make-sparse-keymap))) - (define-key map "\C-l" 'iimage-recenter) - map)) - -(defun iimage-recenter (&optional arg) - "Re-draw images and recenter." - (interactive "P") - (iimage-mode-buffer nil) - (iimage-mode-buffer t) - (recenter arg)) +(defcustom iimage-mode-image-search-path nil + "List of directories to search for image files for iimage-mode." + :type '(choice (const nil) (repeat directory)) + :group 'iimage) (defvar iimage-mode-image-filename-regex (concat "[-+./_0-9a-zA-Z]+\\." @@ -75,23 +63,36 @@ image-file-name-extensions) t))) -(defvar iimage-mode-image-regex-alist +(defcustom iimage-mode-image-regex-alist `((,(concat "\\(`?file://\\|\\[\\[\\|<\\|`\\)?" "\\(" iimage-mode-image-filename-regex "\\)" "\\(\\]\\]\\|>\\|'\\)?") . 2)) - "*Alist of filename REGEXP vs NUM. + "Alist of filename REGEXP vs NUM. Each element looks like (REGEXP . NUM). NUM specifies which parenthesized expression in the regexp. -Examples of image filename regexps: +Examples of image filename patterns to match: file://foo.png `file://foo.png' \\[\\[foo.gif]] - foo.JPG") - -(defvar iimage-mode-image-search-path nil - "*List of directories to search for image files for `iimage-mode'.") + foo.JPG +" + :type '(alist :key-type regexp :value-type integer) + :group 'iimage) + +(defvar iimage-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-l" 'iimage-recenter) + map) + "Keymap used in `iimage-mode'.") + +(defun iimage-recenter (&optional arg) + "Re-draw images and recenter." + (interactive "P") + (iimage-mode-buffer nil) + (iimage-mode-buffer t) + (recenter arg)) ;;;###autoload (define-obsolete-function-alias 'turn-on-iimage-mode 'iimage-mode "24.1") @@ -144,5 +145,4 @@ (provide 'iimage) -;; arch-tag: f6f8e29a-08f6-4a12-9496-51e67441ce65 ;;; iimage.el ends here ------------------------------------------------------------ revno: 101823 committer: Glenn Morris branch nick: trunk timestamp: Wed 2010-10-06 19:26:30 -0700 message: Minr appt.el change. * lisp/calendar/appt.el (appt-activate): Give a warning rather than an error if there is no diary-file. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2010-10-06 12:03:29 +0000 +++ lisp/ChangeLog 2010-10-07 02:26:30 +0000 @@ -1,3 +1,8 @@ +2010-10-07 Glenn Morris + + * calendar/appt.el (appt-activate): Give a warning rather than an error + if there is no diary-file. + 2010-10-06 Michael Albinus * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Use === modified file 'lisp/calendar/appt.el' --- lisp/calendar/appt.el 2010-10-04 01:19:56 +0000 +++ lisp/calendar/appt.el 2010-10-07 02:26:30 +0000 @@ -621,17 +621,19 @@ (setq appt-timer nil)) (if appt-active (progn - (diary-check-diary-file) (add-hook 'write-file-functions 'appt-update-list) (setq appt-timer (run-at-time t 60 'appt-check) global-mode-string (append global-mode-string '(appt-mode-string))) (appt-check t) - (message "Appointment reminders enabled")) + (message "Appointment reminders enabled%s" + ;; Someone might want to use appt-add without a diary. + (if (ignore-errors (diary-check-diary-file)) + "" + " (no diary file found)"))) (message "Appointment reminders disabled")))) (provide 'appt) -;; arch-tag: bf5791c4-8921-499e-a26f-772b1788d347 ;;; appt.el ends here ------------------------------------------------------------ revno: 101822 committer: Glenn Morris branch nick: trunk timestamp: Wed 2010-10-06 19:23:28 -0700 message: Include version number in doc `make dist' tarfiles. * doc/lispref/Makefile.in (version): New, set by configure. (clean): Delete dist tar file. (dist): Use version in tar name. * doc/lispintro/Makefile.in (version): New, set by configure. (clean): Delete dist tar file. (dist): Use version in tar name. * doc/emacs/Makefile.in (version): New, set by configure. (clean): Delete dist tar file. (dist): Use version in tar name. diff: === modified file 'doc/emacs/ChangeLog' --- doc/emacs/ChangeLog 2010-10-06 04:20:46 +0000 +++ doc/emacs/ChangeLog 2010-10-07 02:23:28 +0000 @@ -1,3 +1,9 @@ +2010-10-07 Glenn Morris + + * Makefile.in (version): New, set by configure. + (clean): Delete dist tar file. + (dist): Use version in tar name. + 2010-10-06 Glenn Morris * Makefile.in (EMACS_XTRA): Add the main source file. @@ -7367,12 +7373,11 @@ ;; Local Variables: ;; coding: utf-8 -;; fill-column: 79 -;; add-log-time-zone-rule: t ;; End: - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, - 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, + 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -7388,5 +7393,3 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . - -;;; arch-tag: f1d62776-3ed5-4811-9d96-267252577dbd === modified file 'doc/emacs/Makefile.in' --- doc/emacs/Makefile.in 2010-10-06 04:20:46 +0000 +++ doc/emacs/Makefile.in 2010-10-07 02:23:28 +0000 @@ -28,6 +28,9 @@ # Tell make where to find source files; this is needed for the makefiles. VPATH=@srcdir@ +# Only for make dist. +version=@version@ + ## Where the output files go. ## Note that the setfilename command in the .texi files assumes this. infodir=../../info @@ -148,6 +151,7 @@ ## Products not in the release tarfiles. clean: mostlyclean rm -f emacs.dvi emacs-xtra.dvi emacs.pdf emacs-xtra.pdf + rm -f emacs-manual-${version}.tar* distclean: clean @@ -161,15 +165,16 @@ ## The [c] is a dumb way to prevent configure expanding it. ## The emacs: rule becomes circular when we change infodir to ".". dist: - rm -rf emacs - mkdir emacs + rm -rf emacs-manual-${version} + mkdir emacs-manual-${version} cp ${srcdir}/*.texi ${texinfodir}/texinfo.tex \ - ${srcdir}/ChangeLog* emacs/ + ${srcdir}/ChangeLog* emacs-manual-${version}/ sed -e 's/@sr[c]dir@/./' -e 's/\(texinfodir *=\).*/\1 ./' \ -e 's/\(infodir *=\).*/\1 ./' -e '/^emacs *:/d' \ -e 's/^\(clean:.*\)/\1 infoclean/' \ - ${srcdir}/Makefile.in > emacs/Makefile - tar -cf emacs-texi.tar emacs - rm -rf emacs + -e "s/@ver[s]ion@/${version}/" \ + ${srcdir}/Makefile.in > emacs-manual-${version}/Makefile + tar -cf emacs-manual-${version}.tar emacs-manual-${version} + rm -rf emacs-manual-${version} ### Makefile ends here === modified file 'doc/lispintro/ChangeLog' --- doc/lispintro/ChangeLog 2010-10-06 02:26:38 +0000 +++ doc/lispintro/ChangeLog 2010-10-07 02:23:28 +0000 @@ -1,3 +1,9 @@ +2010-10-07 Glenn Morris + + * Makefile.in (version): New, set by configure. + (clean): Delete dist tar file. + (dist): Use version in tar name. + 2010-10-06 Glenn Morris * Makefile.in (SHELL): Use /bin/sh, like every other Makefile.in. @@ -406,11 +412,10 @@ ;; Local Variables: ;; coding: utf-8 -;; add-log-time-zone-rule: t ;; End: - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -426,5 +431,3 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . - -;;; arch-tag: ee4f8e1f-e14c-4d2e-86de-4dd697e6f1c3 === modified file 'doc/lispintro/Makefile.in' --- doc/lispintro/Makefile.in 2010-10-06 04:20:46 +0000 +++ doc/lispintro/Makefile.in 2010-10-07 02:23:28 +0000 @@ -23,6 +23,7 @@ srcdir = @srcdir@ VPATH = @srcdir@ +version=@version@ infodir = ../../info # Directory with the (customized) texinfo.tex file. @@ -70,6 +71,7 @@ clean: mostlyclean rm -f emacs-lisp-intro.dvi emacs-lisp-intro.pdf rm -rf emacs-lisp-intro.html/ + rm -f emacs-lispintro-${version}.tar* distclean: clean @@ -79,15 +81,16 @@ maintainer-clean: distclean infoclean dist: - rm -rf lispintro - mkdir lispintro + rm -rf emacs-lispintro-${version} + mkdir emacs-lispintro-${version} cp ${srcdir}/*.texi ${srcdir}/*.eps ${srcdir}/*.pdf \ ${texinfodir}/texinfo.tex \ - ${srcdir}/ChangeLog* ${srcdir}/README lispintro/ + ${srcdir}/ChangeLog* ${srcdir}/README emacs-lispintro-${version}/ sed -e 's/@sr[c]dir@/./' -e 's/\(texinfodir *=\).*/\1 ./' \ -e 's/\(infodir *=\).*/\1 ./' -e 's/^\(clean:.*\)/\1 infoclean/' \ - ${srcdir}/Makefile.in > lispintro/Makefile - tar -cf emacs-lisp-intro-texi.tar lispintro - rm -rf lispintro + -e "s/@ver[s]ion@/${version}/" \ + ${srcdir}/Makefile.in > emacs-lispintro-${version}/Makefile + tar -cf emacs-lispintro-${version}.tar emacs-lispintro-${version} + rm -rf emacs-lispintro-${version} ### Makefile ends here === modified file 'doc/lispref/ChangeLog' --- doc/lispref/ChangeLog 2010-10-06 04:20:46 +0000 +++ doc/lispref/ChangeLog 2010-10-07 02:23:28 +0000 @@ -1,3 +1,9 @@ +2010-10-07 Glenn Morris + + * Makefile.in (version): New, set by configure. + (clean): Delete dist tar file. + (dist): Use version in tar name. + 2010-10-06 Glenn Morris * Makefile.in: Rearrange to more closely resemble doc/emacs/Makefile. @@ -8684,11 +8690,10 @@ ;; Local Variables: ;; coding: utf-8 -;; add-log-time-zone-rule: t ;; End: - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -8704,5 +8709,3 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . - -;;; arch-tag: 985ae0ce-df29-475b-b3f8-4bbcbf6f7fda === modified file 'doc/lispref/Makefile.in' --- doc/lispref/Makefile.in 2010-10-06 04:20:46 +0000 +++ doc/lispref/Makefile.in 2010-10-07 02:23:28 +0000 @@ -27,6 +27,8 @@ # Tell make where to find source files; this is needed for the makefiles. VPATH=@srcdir@ +version=@version@ + infodir = ../../info # Directory with the (customized) texinfo.tex file. texinfodir = $(srcdir)/../misc @@ -118,6 +120,7 @@ clean: mostlyclean rm -f elisp.dvi elisp.pdf vol[12].pdf + rm -f emacs-lispref-${version}.tar* distclean: clean @@ -128,14 +131,15 @@ ## Note this excludes the two-volume stuff. dist: - rm -rf lispref - mkdir lispref + rm -rf emacs-lispref-${version} + mkdir emacs-lispref-${version} cp ${srcdir}/*.texi ${texinfodir}/texinfo.tex \ - ${srcdir}/ChangeLog* ${srcdir}/README lispref/ + ${srcdir}/ChangeLog* ${srcdir}/README emacs-lispref-${version}/ sed -e 's/@sr[c]dir@/./' -e 's/\(texinfodir *=\).*/\1 ./' \ -e 's/\(infodir *=\).*/\1 ./' -e 's/^\(clean:.*\)/\1 infoclean/' \ - ${srcdir}/Makefile.in > lispref/Makefile - tar -cf elisp-texi.tar lispref - rm -rf lispref + -e "s/@ver[s]ion@/${version}/" \ + ${srcdir}/Makefile.in > emacs-lispref-${version}/Makefile + tar -cf emacs-lispref-${version}.tar emacs-lispref-${version} + rm -rf emacs-lispref-${version} ### Makefile ends here === modified file 'doc/misc/ChangeLog' --- doc/misc/ChangeLog 2010-10-06 14:02:39 +0000 +++ doc/misc/ChangeLog 2010-10-07 02:23:28 +0000 @@ -7058,12 +7058,11 @@ ;; Local Variables: ;; coding: utf-8 -;; fill-column: 79 -;; add-log-time-zone-rule: t ;; End: - Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, - 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, + 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -7079,5 +7078,3 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . - -;; arch-tag: 08b2903e-900c-4c72-a4a9-e76416a80803 ------------------------------------------------------------ revno: 101821 author: Julien Danjou committer: Katsumi Yamaoka branch nick: trunk timestamp: Wed 2010-10-06 14:02:39 +0000 message: sieve-manage.el: Add authenticate function. sieve-manage.el (sieve-manage-open): Use sieve-manage-default-port. diff: === modified file 'doc/misc/ChangeLog' --- doc/misc/ChangeLog 2010-10-06 12:38:45 +0000 +++ doc/misc/ChangeLog 2010-10-06 14:02:39 +0000 @@ -1,5 +1,7 @@ 2010-10-06 Julien Danjou + * sieve.texi (Manage Sieve API): Document sieve-manage-authenticate. + * message.texi (PGP Compatibility): Remove reference to gpg-2comp, broken link. === modified file 'doc/misc/sieve.texi' --- doc/misc/sieve.texi 2010-10-06 13:13:11 +0000 +++ doc/misc/sieve.texi 2010-10-06 14:02:39 +0000 @@ -292,6 +292,10 @@ @findex sieve-manage-close Close a server connection. +@item sieve-manage-authenticate +@findex sieve-manage-authenticate +Authenticate to the server. + @item sieve-manage-capability @findex sieve-manage-capability Return a list of capabilities the server supports. === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2010-10-06 13:21:07 +0000 +++ lisp/gnus/ChangeLog 2010-10-06 14:02:39 +0000 @@ -1,3 +1,13 @@ +2010-10-06 Julien Danjou + + * sieve-manage.el: Update example in `Commentary'. + + * sieve.el (sieve-open-server): Use sieve-manage-authenticate. + + * sieve-manage.el (sieve-manage-open): Use sieve-manage-default-port, + not 2000. + (sieve-manage-authenticate): Re-add function. + 2010-10-06 Lars Magne Ingebrigtsen * shr.el (shr-insert): Get 'space transition right. === modified file 'lisp/gnus/sieve-manage.el' --- lisp/gnus/sieve-manage.el 2010-10-06 13:13:11 +0000 +++ lisp/gnus/sieve-manage.el 2010-10-06 14:02:39 +0000 @@ -50,9 +50,11 @@ ;; ;; and that's it. Example of a managesieve session in *scratch*: ;; +;; (with-current-buffer (sieve-manage-open "mail.example.com") +;; (sieve-manage-authenticate) +;; (sieve-manage-listscripts)) ;; -;; (sieve-manage-listscripts my-buf) -;; ("vacation" "testscript" ("splitmail") "badscript") +;; => ((active . "main") "vacation") ;; ;; References: ;; @@ -387,7 +389,7 @@ If nil, chooses the best stream the server is capable of. Optional argument BUFFER is buffer (buffer, or string naming buffer) to work in." - (setq buffer (or buffer (format " *sieve* %s:%d" server (or port 2000)))) + (setq buffer (or buffer (format " *sieve* %s:%d" server (or port sieve-manage-default-port)))) (with-current-buffer (get-buffer-create buffer) (mapc 'make-local-variable sieve-manage-local-variables) (sieve-manage-disable-multibyte) @@ -444,6 +446,17 @@ (sieve-manage-erase) buffer))) +(defun sieve-manage-authenticate (&optional buffer) + "Authenticate on server in BUFFER. +Return `sieve-manage-state' value." + (with-current-buffer (or buffer (current-buffer)) + (if (eq sieve-manage-state 'nonauth) + (when (funcall (nth 2 (assq sieve-manage-auth + sieve-manage-authenticator-alist)) + (current-buffer)) + (setq sieve-manage-state 'auth)) + sieve-manage-state))) + (defun sieve-manage-opened (&optional buffer) "Return non-nil if connection to managesieve server in BUFFER is open. If BUFFER is nil then the current buffer is used." === modified file 'lisp/gnus/sieve.el' --- lisp/gnus/sieve.el 2010-10-06 13:13:11 +0000 +++ lisp/gnus/sieve.el 2010-10-06 14:02:39 +0000 @@ -320,17 +320,12 @@ (insert "\n")))) (defun sieve-open-server (server &optional port) + "Open SERVER (on PORT) and authenticate." (with-current-buffer ;; open server (set (make-local-variable 'sieve-manage-buffer) (sieve-manage-open server)) - ;; authenticate - (if (eq sieve-manage-state 'nonauth) - (if (funcall (nth 2 (assq sieve-manage-auth - sieve-manage-authenticator-alist)) - (current-buffer)) - (setq sieve-manage-state 'auth)) - (eq sieve-manage-state 'auth)))) + (sieve-manage-authenticate))) (defun sieve-refresh-scriptlist () (interactive) ------------------------------------------------------------ revno: 101820 author: Lars Magne Ingebrigtsen committer: Katsumi Yamaoka branch nick: trunk timestamp: Wed 2010-10-06 13:21:07 +0000 message: shr.el (shr-render-td): Only delete space at the end of the TD. diff: === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2010-10-06 13:13:11 +0000 +++ lisp/gnus/ChangeLog 2010-10-06 13:21:07 +0000 @@ -1,6 +1,7 @@ 2010-10-06 Lars Magne Ingebrigtsen * shr.el (shr-insert): Get 'space transition right. + (shr-render-td): Only delete space at the end of the TD. * nnimap.el (nnimap-open-connection): Prepare to support open-gnutls-stream. === modified file 'lisp/gnus/shr.el' --- lisp/gnus/shr.el 2010-10-06 12:38:45 +0000 +++ lisp/gnus/shr.el 2010-10-06 13:21:07 +0000 @@ -553,8 +553,10 @@ (let ((shr-width width) (shr-indentation 0)) (shr-generic cont)) - (while (re-search-backward "\n *$" nil t) - (delete-region (match-beginning 0) (match-end 0))) + (delete-region + (point) + (+ (point) + (skip-chars-backward " \t\n"))) (goto-char (point-min)) (let ((max 0)) (while (not (eobp)) ------------------------------------------------------------ revno: 101819 author: Julien Danjou committer: Katsumi Yamaoka branch nick: trunk timestamp: Wed 2010-10-06 13:13:11 +0000 message: sieve-manage: use auth-source. diff: === modified file 'doc/misc/sieve.texi' --- doc/misc/sieve.texi 2010-09-02 00:55:51 +0000 +++ doc/misc/sieve.texi 2010-10-06 13:13:11 +0000 @@ -264,10 +264,6 @@ @table @code -@item sieve-manage-default-user -@vindex sieve-manage-default-user -Sets the default username. - @item sieve-manage-default-port @vindex sieve-manage-default-port Sets the default port to use, the suggested port number is @code{2000}. @@ -296,10 +292,6 @@ @findex sieve-manage-close Close a server connection. -@item sieve-manage-authenticate -@findex sieve-manage-authenticate -Authenticate to the server. - @item sieve-manage-capability @findex sieve-manage-capability Return a list of capabilities the server supports. === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2010-10-06 12:38:45 +0000 +++ lisp/gnus/ChangeLog 2010-10-06 13:13:11 +0000 @@ -77,6 +77,8 @@ 2010-10-05 Julien Danjou + * sieve-manage.el (sieve-sasl-auth): Use auth-source to authenticate. + * gnus-html.el (gnus-html-wash-images): Rescale image from cid too. (gnus-html-maximum-image-size): Add this function. (gnus-html-put-image): Use gnus-html-maximum-image-size. === modified file 'lisp/gnus/sieve-manage.el' --- lisp/gnus/sieve-manage.el 2010-10-05 13:19:07 +0000 +++ lisp/gnus/sieve-manage.el 2010-10-06 13:13:11 +0000 @@ -43,7 +43,6 @@ ;; `sieve-manage-close' ;; close a server connection. ;; -;; `sieve-manage-authenticate' ;; `sieve-manage-listscripts' ;; `sieve-manage-deletescript' ;; `sieve-manage-getscript' @@ -51,11 +50,6 @@ ;; ;; and that's it. Example of a managesieve session in *scratch*: ;; -;; (setq my-buf (sieve-manage-open "my.server.com")) -;; " *sieve* my.server.com:2000*" -;; -;; (sieve-manage-authenticate "myusername" "mypassword" my-buf) -;; 'auth ;; ;; (sieve-manage-listscripts my-buf) ;; ("vacation" "testscript" ("splitmail") "badscript") @@ -87,6 +81,7 @@ (require 'starttls)) (autoload 'sasl-find-mechanism "sasl") (autoload 'starttls-open-stream "starttls") +(autoload 'auth-source-user-or-password "auth-source") ;; User customizable variables: @@ -100,11 +95,6 @@ :type 'string :group 'sieve-manage) -(defcustom sieve-manage-default-user (user-login-name) - "Default username to use." - :type 'string - :group 'sieve-manage) - (defcustom sieve-manage-server-eol "\r\n" "The EOL string sent from the server." :type 'string @@ -174,8 +164,6 @@ sieve-manage-port sieve-manage-auth sieve-manage-stream - sieve-manage-username - sieve-manage-password sieve-manage-process sieve-manage-client-eol sieve-manage-server-eol @@ -186,8 +174,6 @@ (defvar sieve-manage-auth nil) (defvar sieve-manage-server nil) (defvar sieve-manage-port nil) -(defvar sieve-manage-username nil) -(defvar sieve-manage-password nil) (defvar sieve-manage-state 'closed "Managesieve state. Valid states are `closed', `initial', `nonauth', and `auth'.") @@ -201,61 +187,6 @@ (unless (featurep 'xemacs) '(set-buffer-multibyte nil))) -(declare-function password-read "password-cache" (prompt &optional key)) -(declare-function password-cache-add "password-cache" (key password)) -(declare-function password-cache-remove "password-cache" (key)) - -;; Uses the dynamically bound `reason' variable. -(defvar reason) -(defun sieve-manage-interactive-login (buffer loginfunc) - "Login to server in BUFFER. -LOGINFUNC is passed a username and a password, it should return t if -it was successful authenticating itself to the server, nil otherwise. -Returns t if login was successful, nil otherwise." - (with-current-buffer buffer - (make-local-variable 'sieve-manage-username) - (make-local-variable 'sieve-manage-password) - (let (user passwd ret reason passwd-key) - (condition-case () - (while (or (not user) (not passwd)) - (setq user (or sieve-manage-username - (read-from-minibuffer - (concat "Managesieve username for " - sieve-manage-server ": ") - (or user sieve-manage-default-user))) - passwd-key (concat "managesieve:" user "@" sieve-manage-server - ":" sieve-manage-port) - passwd (or sieve-manage-password - (password-read (concat "Managesieve password for " - user "@" sieve-manage-server - ": ") - passwd-key))) - (when (y-or-n-p "Store password for this session? ") - (password-cache-add passwd-key (copy-sequence passwd))) - (when (and user passwd) - (if (funcall loginfunc user passwd) - (setq ret t - sieve-manage-username user) - (if reason - (message "Login failed (reason given: %s)..." reason) - (message "Login failed...")) - (password-cache-remove passwd-key) - (setq sieve-manage-password nil) - (setq passwd nil) - (setq reason nil) - (sit-for 1)))) - (quit (with-current-buffer buffer - (password-cache-remove passwd-key) - (setq user nil - passwd nil - sieve-manage-password nil))) - (error (with-current-buffer buffer - (password-cache-remove passwd-key) - (setq user nil - passwd nil - sieve-manage-password nil)))) - ret))) - (defun sieve-manage-erase (&optional p buffer) (let ((buffer (or buffer (current-buffer)))) (and sieve-manage-log @@ -336,70 +267,72 @@ process))) ;; Authenticators - (defun sieve-sasl-auth (buffer mech) "Login to server using the SASL MECH method." (message "sieve: Authenticating using %s..." mech) - (if (sieve-manage-interactive-login - buffer - (lambda (user passwd) - (let (client step tag data rsp) - (setq client (sasl-make-client (sasl-find-mechanism (list mech)) - user "sieve" sieve-manage-server)) - (setq sasl-read-passphrase (function (lambda (prompt) passwd))) - (setq step (sasl-next-step client nil)) - (setq tag - (sieve-manage-send - (concat - "AUTHENTICATE \"" - mech - "\"" - (and (sasl-step-data step) - (concat - " \"" - (base64-encode-string - (sasl-step-data step) - 'no-line-break) - "\""))))) - (catch 'done - (while t - (setq rsp nil) - (goto-char (point-min)) - (while (null (or (progn - (setq rsp (sieve-manage-is-string)) - (if (not (and rsp (looking-at - sieve-manage-server-eol))) - (setq rsp nil) - (goto-char (match-end 0)) - rsp)) - (setq rsp (sieve-manage-is-okno)))) - (accept-process-output sieve-manage-process 1) - (goto-char (point-min))) - (sieve-manage-erase) - (when (sieve-manage-ok-p rsp) - (when (string-match "^SASL \"\\([^\"]+\\)\"" (cadr rsp)) - (sasl-step-set-data - step (base64-decode-string (match-string 1 (cadr rsp))))) - (if (and (setq step (sasl-next-step client step)) - (setq data (sasl-step-data step))) - ;; We got data for server but it's finished - (error "Server not ready for SASL data: %s" data) - ;; The authentication process is finished. - (throw 'done t))) - (unless (stringp rsp) - (apply 'error "Server aborted SASL authentication: %s %s %s" - rsp)) - (sasl-step-set-data step (base64-decode-string rsp)) - (setq step (sasl-next-step client step)) - (sieve-manage-send - (if (sasl-step-data step) - (concat "\"" - (base64-encode-string (sasl-step-data step) - 'no-line-break) - "\"") - ""))))))) - (message "sieve: Authenticating using %s...done" mech) - (message "sieve: Authenticating using %s...failed" mech))) + (with-current-buffer buffer + (let* ((user-password (auth-source-user-or-password + '("login" "password") + sieve-manage-server + "sieve" nil t)) + (client (sasl-make-client (sasl-find-mechanism (list mech)) + (car user-password) "sieve" sieve-manage-server)) + (sasl-read-passphrase + ;; We *need* to copy the password, because sasl will modify it + ;; somehow. + `(lambda (prompt) ,(copy-sequence (cadr user-password)))) + (step (sasl-next-step client nil)) + (tag (sieve-manage-send + (concat + "AUTHENTICATE \"" + mech + "\"" + (and (sasl-step-data step) + (concat + " \"" + (base64-encode-string + (sasl-step-data step) + 'no-line-break) + "\""))))) + data rsp) + (catch 'done + (while t + (setq rsp nil) + (goto-char (point-min)) + (while (null (or (progn + (setq rsp (sieve-manage-is-string)) + (if (not (and rsp (looking-at + sieve-manage-server-eol))) + (setq rsp nil) + (goto-char (match-end 0)) + rsp)) + (setq rsp (sieve-manage-is-okno)))) + (accept-process-output sieve-manage-process 1) + (goto-char (point-min))) + (sieve-manage-erase) + (when (sieve-manage-ok-p rsp) + (when (and (cadr rsp) + (string-match "^SASL \"\\([^\"]+\\)\"" (cadr rsp))) + (sasl-step-set-data + step (base64-decode-string (match-string 1 (cadr rsp))))) + (if (and (setq step (sasl-next-step client step)) + (setq data (sasl-step-data step))) + ;; We got data for server but it's finished + (error "Server not ready for SASL data: %s" data) + ;; The authentication process is finished. + (throw 'done t))) + (unless (stringp rsp) + (error "Server aborted SASL authentication: %s" (caddr rsp))) + (sasl-step-set-data step (base64-decode-string rsp)) + (setq step (sasl-next-step client step)) + (sieve-manage-send + (if (sasl-step-data step) + (concat "\"" + (base64-encode-string (sasl-step-data step) + 'no-line-break) + "\"") + "")))) + (message "sieve: Login using %s...done" mech)))) (defun sieve-manage-cram-md5-p (buffer) (sieve-manage-capability "SASL" "CRAM-MD5" buffer)) @@ -534,24 +467,6 @@ (sieve-manage-erase) t)) -(defun sieve-manage-authenticate (&optional user passwd buffer) - "Authenticate to server in BUFFER, using current buffer if nil. -It uses the authenticator specified when opening the server. If the -authenticator requires username/passwords, they are queried from the -user and optionally stored in the buffer. If USER and/or PASSWD is -specified, the user will not be questioned and the username and/or -password is remembered in the buffer." - (with-current-buffer (or buffer (current-buffer)) - (if (not (eq sieve-manage-state 'nonauth)) - (eq sieve-manage-state 'auth) - (make-local-variable 'sieve-manage-username) - (make-local-variable 'sieve-manage-password) - (if user (setq sieve-manage-username user)) - (if passwd (setq sieve-manage-password passwd)) - (if (funcall (nth 2 (assq sieve-manage-auth - sieve-manage-authenticator-alist)) buffer) - (setq sieve-manage-state 'auth))))) - (defun sieve-manage-capability (&optional name value buffer) "Check if capability NAME of server BUFFER match VALUE. If it does, return the server value of NAME. If not returns nil. === modified file 'lisp/gnus/sieve.el' --- lisp/gnus/sieve.el 2010-09-02 00:55:51 +0000 +++ lisp/gnus/sieve.el 2010-10-06 13:13:11 +0000 @@ -320,11 +320,17 @@ (insert "\n")))) (defun sieve-open-server (server &optional port) - ;; open server - (set (make-local-variable 'sieve-manage-buffer) - (sieve-manage-open server)) - ;; authenticate - (sieve-manage-authenticate nil nil sieve-manage-buffer)) + (with-current-buffer + ;; open server + (set (make-local-variable 'sieve-manage-buffer) + (sieve-manage-open server)) + ;; authenticate + (if (eq sieve-manage-state 'nonauth) + (if (funcall (nth 2 (assq sieve-manage-auth + sieve-manage-authenticator-alist)) + (current-buffer)) + (setq sieve-manage-state 'auth)) + (eq sieve-manage-state 'auth)))) (defun sieve-refresh-scriptlist () (interactive) ------------------------------------------------------------ revno: 101818 author: Gnus developers committer: Katsumi Yamaoka branch nick: trunk timestamp: Wed 2010-10-06 12:38:45 +0000 message: Merge changes made in Gnus trunk. shr.el: Rearrange function order to be more logical. gnus-faq.texi: Remove reference to my.gnus.org message.el (message-change-subject): Remove 404 URL in a comment. nnir.el: Fix Swish-E URL. nnir.el: Fix Namazu URL. nnrss.el (nnrss-check-group): Remove 404 URL in comment. nnrss.el (nnrss-discover-feed): Remove 404 URL in docstring. gnus-faq.texi (FAQ 5-5): Fix Flyspell URL. gnus-faq.texi (FAQ 7-1): Fix getmail URL. gnus.texi (Comparing Mail Back Ends): Remove broken link and allusion to ReiserFS. nnimap.el (nnimap-open-connection): Prepare to support open-gnutls-stream. shr.el (shr-insert): Get 'space transition right. message.texi: Remove reference to gpg-2comp. diff: === modified file 'doc/misc/ChangeLog' --- doc/misc/ChangeLog 2010-10-06 07:12:42 +0000 +++ doc/misc/ChangeLog 2010-10-06 12:38:45 +0000 @@ -1,3 +1,16 @@ +2010-10-06 Julien Danjou + + * message.texi (PGP Compatibility): Remove reference to gpg-2comp, + broken link. + + * gnus-faq.texi (FAQ 8-3): Remove references to my.gnus.org. + + * gnus.texi (Comparing Mail Back Ends): Remove broken link and allusion + to ReiserFS. + + * gnus-faq.texi (FAQ 5-5): Fix Flyspell URL. + (FAQ 7-1): Fix getmail URL. + 2010-10-06 Daiki Ueno * epa.texi (Caching Passphrases): New section. === modified file 'doc/misc/gnus-faq.texi' --- doc/misc/gnus-faq.texi 2010-09-02 00:55:51 +0000 +++ doc/misc/gnus-faq.texi 2010-10-06 12:38:45 +0000 @@ -4,9 +4,6 @@ @c Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, @c 2009, 2010 Free Software Foundation, Inc. @c -@c Do not modify this file, it was generated from gnus-faq.xml, available from -@c . -@c @setfilename gnus-faq.info @settitle Frequently Asked Questions @c %**end of header @@ -40,20 +37,9 @@ @subheading Abstract This is the new Gnus Frequently Asked Questions list. -If you have a Web browser, the official hypertext version is at -@uref{http://my.gnus.org/FAQ/}, -the Docbook source is available from -@uref{http://sourceforge.net/projects/gnus/, http://sourceforge.net}. Please submit features and suggestions to the -@email{faq-discuss@@my.gnus.org, FAQ discussion list}. -The list is protected against junk mail with -@uref{http://smarden.org/qconfirm/index.html, qconfirm}. As -a subscriber, your submissions will automatically pass. You can -also subscribe to the list by sending a blank email to -@email{faq-discuss-subscribe@@my.gnus.org, faq-discuss-subscribe@@my.gnus.org} -and @uref{http://mail1.kens.com/cgi-bin/ezmlm-browse?command=monthbythread%26list=faq-discuss, browse -the archive (BROKEN)}. +@email{ding@@gnus.org, ding list}. @node FAQ - Changes @subheading Changes @@ -98,8 +84,6 @@ job with this FAQ before him. We would like to do the same - thanks, Justin! -If you have a Web browser, the official hypertext version is at: -@uref{http://my.gnus.org/FAQ/}. This version is much nicer than the unofficial hypertext versions that are archived at Utrecht, Oxford, Smart Pages, Ohio State, and other FAQ archives. See the resources question below @@ -107,7 +91,7 @@ The information contained here was compiled with the assistance of the Gnus development mailing list, and any errors or -misprints are the my.gnus.org team's fault, sorry. +misprints are the Gnus team's fault, sorry. @node FAQ 1 - Installation FAQ @subsection Installation FAQ @@ -1042,8 +1026,7 @@ make faces (specifications of how summary-line shall look like) for those postings, then we'll give them some special score and finally we'll tell Gnus to use the new -faces. You can find detailed instructions on how to do it on -@uref{http://my.gnus.org/node/view/224, my.gnus.org} +faces. @node FAQ 4-12 @subsubheading Question 4.12 @@ -1414,7 +1397,7 @@ installed and in your Path. Then you need @uref{http://www.kdstevens.com/~stevens/ispell-page.html, ispell.el} and for on-the-fly spell-checking -@uref{http://www-sop.inria.fr/mimosa/personnel/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}. +@uref{http://www-sop.inria.fr/members/Manuel.Serrano/flyspell/flyspell.html, flyspell.el}. Ispell.el is shipped with Emacs and available through the XEmacs package system, flyspell.el is shipped with Emacs and part of XEmacs text-modes package which is available through the package system, so there should be no need to install them @@ -1987,7 +1970,7 @@ @uref{http://www.isc.org/products/INN/, inn}. Then you want to fetch your Mail, popular choices are @uref{http://www.catb.org/~esr/fetchmail/, fetchmail} -and @uref{http://www.qcc.ca/~charlesc/software/getmail-3.0/, getmail}. +and @uref{http://pyropus.ca/software/getmail/, getmail}. You should tell those to write the mail to your disk and Gnus to read it from there. Last but not least the mail sending part: This can be done with every MTA like @@ -2141,12 +2124,8 @@ @subsubheading Answer -The two most important ones are the +The most important one is the @uref{http://www.gnus.org, official Gnus website}. -and it's sister site -@uref{http://my.gnus.org, my.gnus.org (MGO)}, -hosting an archive of lisp snippets, howtos, a (not -really finished) tutorial and this FAQ. Tell me about other sites which are interesting. === modified file 'doc/misc/gnus.texi' --- doc/misc/gnus.texi 2010-10-04 22:26:51 +0000 +++ doc/misc/gnus.texi 2010-10-06 12:38:45 +0000 @@ -17401,13 +17401,12 @@ mail back ends. @code{nnmaildir} is largely similar to @code{nnml}, with some notable -differences. Each message is stored in a separate file, but the -filename is unrelated to the article number in Gnus. @code{nnmaildir} +differences. Each message is stored in a separate file, but the +filename is unrelated to the article number in Gnus. @code{nnmaildir} also stores the equivalent of @code{nnml}'s overview files in one file -per article, so it uses about twice as many inodes as @code{nnml}. (Use -@code{df -i} to see how plentiful your inode supply is.) If this slows -you down or takes up very much space, consider switching to -@uref{http://www.namesys.com/, ReiserFS} or another non-block-structured +per article, so it uses about twice as many inodes as @code{nnml}. +(Use @code{df -i} to see how plentiful your inode supply is.) If this +slows you down or takes up very much space, a non-block-structured file system. Since maildirs don't require locking for delivery, the maildirs you use === modified file 'doc/misc/message.texi' --- doc/misc/message.texi 2010-09-26 14:35:50 +0000 +++ doc/misc/message.texi 2010-10-06 12:38:45 +0000 @@ -1149,11 +1149,8 @@ signed and encrypted messages to your fellow PGP 2.x users, you'll discover that the receiver cannot understand what you send. One solution is to use PGP 2.x instead (i.e., if you use @code{pgg}, set -@code{pgg-default-scheme} to @code{pgp}). If you do want to use -GnuPG, you can use a compatibility script called @code{gpg-2comp} -available from -@uref{http://muppet.faveve.uni-stuttgart.de/~gero/gpg-2comp/}. You -could also convince your fellow PGP 2.x users to convert to GnuPG. +@code{pgg-default-scheme} to @code{pgp}). You could also convince your +fellow PGP 2.x users to convert to GnuPG. @vindex mml-signencrypt-style-alist As a final workaround, you can make the sign and encryption work in two steps; separately sign, then encrypt a message. If you would like === modified file 'lisp/gnus/ChangeLog' --- lisp/gnus/ChangeLog 2010-10-06 02:41:59 +0000 +++ lisp/gnus/ChangeLog 2010-10-06 12:38:45 +0000 @@ -1,3 +1,22 @@ +2010-10-06 Lars Magne Ingebrigtsen + + * shr.el (shr-insert): Get 'space transition right. + + * nnimap.el (nnimap-open-connection): Prepare to support + open-gnutls-stream. + + * shr.el: Rearrange function order to be more logical. + +2010-10-06 Julien Danjou + + * nnrss.el (nnrss-check-group): Remove 404 URL in comment. + (nnrss-discover-feed): Remove 404 URL in docstring. + + * nnir.el: Fix Swish-E URL. + Fix Namazu URL. + + * message.el (message-change-subject): Remove 404 URL in a comment. + 2010-10-06 Katsumi Yamaoka * gnus-art.el (gnus-mime-view-part-as-type): Make it work when being === modified file 'lisp/gnus/message.el' --- lisp/gnus/message.el 2010-10-04 22:26:51 +0000 +++ lisp/gnus/message.el 2010-10-06 12:38:45 +0000 @@ -2151,7 +2151,6 @@ (defun message-change-subject (new-subject) "Ask for NEW-SUBJECT header, append (was: )." - ;; (interactive (list (read-from-minibuffer "New subject: "))) === modified file 'lisp/gnus/nnimap.el' --- lisp/gnus/nnimap.el 2010-10-05 22:43:06 +0000 +++ lisp/gnus/nnimap.el 2010-10-06 12:38:45 +0000 @@ -317,13 +317,16 @@ 'starttls)) '("imap")) ((memq nnimap-stream '(ssl tls)) - (open-tls-stream - "*nnimap*" (current-buffer) nnimap-address - (setq port - (or nnimap-server-port - (if (netrc-find-service-number "imaps") - "imaps" - "993")))) + (funcall (if (and nil + (fboundp 'open-gnutls-stream)) + 'open-gnutls-stream + 'open-tls-stream) + "*nnimap*" (current-buffer) nnimap-address + (setq port + (or nnimap-server-port + (if (netrc-find-service-number "imaps") + "imaps" + "993")))) '("143" "993" "imap" "imaps")) (t (error "Unknown stream type: %s" nnimap-stream)))) === modified file 'lisp/gnus/nnir.el' --- lisp/gnus/nnir.el 2010-10-05 22:43:06 +0000 +++ lisp/gnus/nnir.el 2010-10-06 12:38:45 +0000 @@ -509,8 +509,7 @@ :group 'nnir) ;; Swish-E. -;; URL: http://sunsite.berkeley.edu/SWISH-E/ -;; New version: http://www.boe.es/swish-e +;; URL: http://swish-e.org/ ;; Variables `nnir-swish-e-index-file', `nnir-swish-e-program' and ;; `nnir-swish-e-additional-switches' @@ -596,7 +595,7 @@ :type '(directory) :group 'nnir) -;; Namazu engine, see +;; Namazu engine, see (defcustom nnir-namazu-program "namazu" "*Name of Namazu search executable." === modified file 'lisp/gnus/nnrss.el' --- lisp/gnus/nnrss.el 2010-10-01 00:25:50 +0000 +++ lisp/gnus/nnrss.el 2010-10-06 12:38:45 +0000 @@ -703,9 +703,6 @@ (push (list group nnrss-group-max url) nnrss-server-data))) (setq changed t)) (setq xml (nnrss-fetch url))) - ;; See - ;; http://feeds.archive.org/validator/docs/howto/declare_namespaces.html - ;; for more RSS namespaces. (setq dc-ns (nnrss-get-namespace-prefix xml "http://purl.org/dc/elements/1.1/") rdf-ns (nnrss-get-namespace-prefix xml "http://www.w3.org/1999/02/22-rdf-syntax-ns#") rss-ns (nnrss-get-namespace-prefix xml "http://purl.org/rss/1.0/") @@ -966,7 +963,7 @@ (defun nnrss-discover-feed (url) "Given a page, find an RSS feed using Mark Pilgrim's -`ultra-liberal rss locator' (URL `http://diveintomark.org/2002/08/15.html')." +`ultra-liberal rss locator'." (let ((parsed-page (nnrss-fetch url))) === modified file 'lisp/gnus/shr.el' --- lisp/gnus/shr.el 2010-10-05 23:42:01 +0000 +++ lisp/gnus/shr.el 2010-10-06 12:38:45 +0000 @@ -57,13 +57,17 @@ This is used for cid: URLs, and the function is called with the cid: URL as the argument.") +(defvar shr-width 70 + "Frame width to use for rendering.") + +;;; Internal variables. + (defvar shr-folding-mode nil) (defvar shr-state nil) (defvar shr-start nil) (defvar shr-indentation 0) (defvar shr-inhibit-images nil) - -(defvar shr-width 70) +(defvar shr-list-mode nil) (defvar shr-map (let ((map (make-sparse-keymap))) @@ -75,6 +79,64 @@ (define-key map "\r" 'shr-browse-url) map)) +;; Public functions and commands. + +;;;###autoload +(defun shr-insert-document (dom) + (let ((shr-state nil) + (shr-start nil)) + (shr-descend (shr-transform-dom dom)))) + +(defun shr-copy-url () + "Copy the URL under point to the kill ring. +If called twice, then try to fetch the URL and see whether it +redirects somewhere else." + (interactive) + (let ((url (get-text-property (point) 'shr-url))) + (cond + ((not url) + (message "No URL under point")) + ;; Resolve redirected URLs. + ((equal url (car kill-ring)) + (url-retrieve + url + (lambda (a) + (when (and (consp a) + (eq (car a) :redirect)) + (with-temp-buffer + (insert (cadr a)) + (goto-char (point-min)) + ;; Remove common tracking junk from the URL. + (when (re-search-forward ".utm_.*" nil t) + (replace-match "" t t)) + (message "Copied %s" (buffer-string)) + (copy-region-as-kill (point-min) (point-max))))))) + ;; Copy the URL to the kill ring. + (t + (with-temp-buffer + (insert url) + (copy-region-as-kill (point-min) (point-max)) + (message "Copied %s" url)))))) + +(defun shr-show-alt-text () + "Show the ALT text of the image under point." + (interactive) + (let ((text (get-text-property (point) 'shr-alt))) + (if (not text) + (message "No image under point") + (message "%s" text)))) + +(defun shr-browse-image () + "Browse the image under point." + (interactive) + (let ((url (get-text-property (point) 'shr-image))) + (if (not url) + (message "No image under point") + (message "Browsing %s..." url) + (browse-url url)))) + +;;; Utility functions. + (defun shr-transform-dom (dom) (let ((result (list (pop dom)))) (dolist (arg (pop dom)) @@ -87,12 +149,6 @@ (push (shr-transform-dom sub) result))) (nreverse result))) -;;;###autoload -(defun shr-insert-document (dom) - (let ((shr-state nil) - (shr-start nil)) - (shr-descend (shr-transform-dom dom)))) - (defun shr-descend (dom) (let ((function (intern (concat "shr-tag-" (symbol-name (car dom))) obarray))) (if (fboundp function) @@ -107,10 +163,49 @@ ((listp (cdr sub)) (shr-descend sub))))) -(defun shr-tag-p (cont) - (shr-ensure-paragraph) - (shr-generic cont) - (shr-ensure-paragraph)) +(defun shr-insert (text) + (when (eq shr-state 'image) + (insert "\n") + (setq shr-state nil)) + (cond + ((eq shr-folding-mode 'none) + (insert text)) + (t + (let ((first t) + column) + (when (and (string-match "\\`[ \t\n]" text) + (not (bolp))) + (insert " ") + (setq shr-state 'space)) + (dolist (elem (split-string text)) + (setq column (current-column)) + (when (> column 0) + (cond + ((and (or (not first) + (eq shr-state 'space)) + (> (+ column (length elem) 1) shr-width)) + (insert "\n")) + ((not first) + (insert " ")))) + (setq first nil) + (when (and (bolp) + (> shr-indentation 0)) + (shr-indent)) + ;; The shr-start is a special variable that is used to pass + ;; upwards the first point in the buffer where the text really + ;; starts. + (unless shr-start + (setq shr-start (point))) + (insert elem)) + (setq shr-state nil) + (when (and (string-match "[ \t\n]\\'" text) + (not (bolp))) + (insert " ") + (setq shr-state 'space)))))) + +(defun shr-ensure-newline () + (unless (zerop (current-column)) + (insert "\n"))) (defun shr-ensure-paragraph () (unless (bobp) @@ -125,20 +220,8 @@ (insert "\n") (insert "\n\n"))))) -(defun shr-tag-b (cont) - (shr-fontize-cont cont 'bold)) - -(defun shr-tag-i (cont) - (shr-fontize-cont cont 'italic)) - -(defun shr-tag-em (cont) - (shr-fontize-cont cont 'bold)) - -(defun shr-tag-u (cont) - (shr-fontize-cont cont 'underline)) - -(defun shr-tag-s (cont) - (shr-fontize-cont cont 'strike-through)) +(defun shr-indent () + (insert (make-string shr-indentation ? ))) (defun shr-fontize-cont (cont &rest types) (let (shr-start) @@ -150,17 +233,6 @@ (let ((overlay (make-overlay start end))) (overlay-put overlay 'face type))) -(defun shr-tag-a (cont) - (let ((url (cdr (assq :href cont))) - (start (point)) - shr-start) - (shr-generic cont) - (widget-convert-button - 'link (or shr-start start) (point) - :help-echo url) - (put-text-property (or shr-start start) (point) 'keymap shr-map) - (put-text-property (or shr-start start) (point) 'shr-url url))) - (defun shr-browse-url () "Browse the URL under point." (interactive) @@ -169,94 +241,6 @@ (message "No link under point") (browse-url url)))) -(defun shr-copy-url () - "Copy the URL under point to the kill ring. -If called twice, then try to fetch the URL and see whether it -redirects somewhere else." - (interactive) - (let ((url (get-text-property (point) 'shr-url))) - (cond - ((not url) - (message "No URL under point")) - ;; Resolve redirected URLs. - ((equal url (car kill-ring)) - (url-retrieve - url - (lambda (a) - (when (and (consp a) - (eq (car a) :redirect)) - (with-temp-buffer - (insert (cadr a)) - (goto-char (point-min)) - ;; Remove common tracking junk from the URL. - (when (re-search-forward ".utm_.*" nil t) - (replace-match "" t t)) - (message "Copied %s" (buffer-string)) - (copy-region-as-kill (point-min) (point-max))))))) - ;; Copy the URL to the kill ring. - (t - (with-temp-buffer - (insert url) - (copy-region-as-kill (point-min) (point-max)) - (message "Copied %s" url)))))) - -(defun shr-tag-img (cont) - (when (and (> (current-column) 0) - (not (eq shr-state 'image))) - (insert "\n")) - (let ((start (point-marker))) - (let ((alt (cdr (assq :alt cont))) - (url (cdr (assq :src cont)))) - (when (zerop (length alt)) - (setq alt "[img]")) - (cond - ((and (not shr-inhibit-images) - (string-match "\\`cid:" url)) - (let ((url (substring url (match-end 0))) - image) - (if (or (not shr-content-function) - (not (setq image (funcall shr-content-function url)))) - (insert alt) - (shr-put-image image (point) alt)))) - ((or shr-inhibit-images - (and shr-blocked-images - (string-match shr-blocked-images url))) - (setq shr-start (point)) - (let ((shr-state 'space)) - (if (> (length alt) 8) - (shr-insert (substring alt 0 8)) - (shr-insert alt)))) - ((url-is-cached (browse-url-url-encode-chars url "[&)$ ]")) - (shr-put-image (shr-get-image-data url) (point) alt)) - (t - (insert alt) - (ignore-errors - (url-retrieve url 'shr-image-fetched - (list (current-buffer) start (point-marker)) - t)))) - (insert " ") - (put-text-property start (point) 'keymap shr-map) - (put-text-property start (point) 'shr-alt alt) - (put-text-property start (point) 'shr-image url) - (setq shr-state 'image)))) - -(defun shr-show-alt-text () - "Show the ALT text of the image under point." - (interactive) - (let ((text (get-text-property (point) 'shr-alt))) - (if (not text) - (message "No image under point") - (message "%s" text)))) - -(defun shr-browse-image () - "Browse the image under point." - (interactive) - (let ((url (get-text-property (point) 'shr-image))) - (if (not url) - (message "No image under point") - (message "Browsing %s..." url) - (browse-url url)))) - (defun shr-image-fetched (status buffer start end) (when (and (buffer-name buffer) (not (plist-get status :error))) @@ -306,64 +290,6 @@ image))) image))) -(defun shr-tag-pre (cont) - (let ((shr-folding-mode 'none)) - (shr-ensure-newline) - (shr-generic cont) - (shr-ensure-newline))) - -(defun shr-tag-blockquote (cont) - (shr-ensure-paragraph) - (let ((shr-indentation (+ shr-indentation 4))) - (shr-generic cont)) - (shr-ensure-paragraph)) - -(defun shr-ensure-newline () - (unless (zerop (current-column)) - (insert "\n"))) - -(defun shr-insert (text) - (when (eq shr-state 'image) - (insert "\n") - (setq shr-state nil)) - (cond - ((eq shr-folding-mode 'none) - (insert text)) - (t - (let ((first t) - column) - (when (and (string-match "\\`[ \t\n]" text) - (not (bolp))) - (insert " ")) - (dolist (elem (split-string text)) - (setq column (current-column)) - (when (> column 0) - (cond - ((and (or (not first) - (eq shr-state 'space)) - (> (+ column (length elem) 1) shr-width)) - (insert "\n")) - ((not first) - (insert " ")))) - (setq first nil) - (when (and (bolp) - (> shr-indentation 0)) - (shr-indent)) - ;; The shr-start is a special variable that is used to pass - ;; upwards the first point in the buffer where the text really - ;; starts. - (unless shr-start - (setq shr-start (point))) - (insert elem)) - (setq shr-state nil) - (when (and (string-match "[ \t\n]\\'" text) - (not (bolp))) - (insert " ") - (setq shr-state 'space)))))) - -(defun shr-indent () - (insert (make-string shr-indentation ? ))) - (defun shr-get-image-data (url) "Get image data for URL. Return a string with image data." @@ -376,7 +302,95 @@ (search-forward "\r\n\r\n" nil t)) (buffer-substring (point) (point-max)))))) -(defvar shr-list-mode nil) +(defun shr-heading (cont &rest types) + (shr-ensure-paragraph) + (apply #'shr-fontize-cont cont types) + (shr-ensure-paragraph)) + +;;; Tag-specific rendering rules. + +(defun shr-tag-p (cont) + (shr-ensure-paragraph) + (shr-generic cont) + (shr-ensure-paragraph)) + +(defun shr-tag-b (cont) + (shr-fontize-cont cont 'bold)) + +(defun shr-tag-i (cont) + (shr-fontize-cont cont 'italic)) + +(defun shr-tag-em (cont) + (shr-fontize-cont cont 'bold)) + +(defun shr-tag-u (cont) + (shr-fontize-cont cont 'underline)) + +(defun shr-tag-s (cont) + (shr-fontize-cont cont 'strike-through)) + +(defun shr-tag-a (cont) + (let ((url (cdr (assq :href cont))) + (start (point)) + shr-start) + (shr-generic cont) + (widget-convert-button + 'link (or shr-start start) (point) + :help-echo url) + (put-text-property (or shr-start start) (point) 'keymap shr-map) + (put-text-property (or shr-start start) (point) 'shr-url url))) + +(defun shr-tag-img (cont) + (when (and (> (current-column) 0) + (not (eq shr-state 'image))) + (insert "\n")) + (let ((start (point-marker))) + (let ((alt (cdr (assq :alt cont))) + (url (cdr (assq :src cont)))) + (when (zerop (length alt)) + (setq alt "[img]")) + (cond + ((and (not shr-inhibit-images) + (string-match "\\`cid:" url)) + (let ((url (substring url (match-end 0))) + image) + (if (or (not shr-content-function) + (not (setq image (funcall shr-content-function url)))) + (insert alt) + (shr-put-image image (point) alt)))) + ((or shr-inhibit-images + (and shr-blocked-images + (string-match shr-blocked-images url))) + (setq shr-start (point)) + (let ((shr-state 'space)) + (if (> (length alt) 8) + (shr-insert (substring alt 0 8)) + (shr-insert alt)))) + ((url-is-cached (browse-url-url-encode-chars url "[&)$ ]")) + (shr-put-image (shr-get-image-data url) (point) alt)) + (t + (insert alt) + (ignore-errors + (url-retrieve url 'shr-image-fetched + (list (current-buffer) start (point-marker)) + t)))) + (insert " ") + (put-text-property start (point) 'keymap shr-map) + (put-text-property start (point) 'shr-alt alt) + (put-text-property start (point) 'shr-image url) + (setq shr-state 'image)))) + +(defun shr-tag-pre (cont) + (let ((shr-folding-mode 'none)) + (shr-ensure-newline) + (shr-generic cont) + (shr-ensure-newline))) + +(defun shr-tag-blockquote (cont) + (shr-ensure-paragraph) + (let ((shr-indentation (+ shr-indentation 4))) + (shr-generic cont)) + (shr-ensure-paragraph)) (defun shr-tag-ul (cont) (shr-ensure-paragraph) @@ -422,10 +436,7 @@ (defun shr-tag-h6 (cont) (shr-heading cont)) -(defun shr-heading (cont &rest types) - (shr-ensure-paragraph) - (apply #'shr-fontize-cont cont types) - (shr-ensure-paragraph)) +;;; Table rendering algorithm. ;; Table rendering is the only complicated thing here. We do this by ;; first counting how many TDs there are in each TR, and registering ------------------------------------------------------------ revno: 101817 committer: Michael Albinus branch nick: trunk timestamp: Wed 2010-10-06 14:03:29 +0200 message: * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Use `tramp-handle-find-backup-file-name'. diff: === modified file 'lisp/ChangeLog' --- lisp/ChangeLog 2010-10-06 04:14:05 +0000 +++ lisp/ChangeLog 2010-10-06 12:03:29 +0000 @@ -1,3 +1,8 @@ +2010-10-06 Michael Albinus + + * net/tramp-sh.el (tramp-sh-file-name-handler-alist): Use + `tramp-handle-find-backup-file-name'. + 2010-10-06 Glenn Morris * font-core.el (font-lock-defaults-alist): Remove variable. === modified file 'lisp/net/tramp-sh.el' --- lisp/net/tramp-sh.el 2010-10-05 14:20:24 +0000 +++ lisp/net/tramp-sh.el 2010-10-06 12:03:29 +0000 @@ -912,7 +912,7 @@ (insert-file-contents-literally . tramp-sh-handle-insert-file-contents-literally) (write-region . tramp-sh-handle-write-region) - (find-backup-file-name . tramp-sh-handle-find-backup-file-name) + (find-backup-file-name . tramp-handle-find-backup-file-name) (make-auto-save-file-name . tramp-sh-handle-make-auto-save-file-name) (unhandled-file-name-directory . tramp-handle-unhandled-file-name-directory) (dired-compress-file . tramp-sh-handle-dired-compress-file) ------------------------------------------------------------ revno: 101816 committer: Juanma Barranquero branch nick: trunk timestamp: Wed 2010-10-06 12:55:03 +0200 message: nt/INSTALL: Add note about problematic characters passed to configure. diff: === modified file 'nt/ChangeLog' --- nt/ChangeLog 2010-10-01 11:52:23 +0000 +++ nt/ChangeLog 2010-10-06 10:55:03 +0000 @@ -1,3 +1,7 @@ +2010-10-06 Juanma Barranquero + + * INSTALL: Add note about problematic characters passed to configure. + 2010-10-01 Eli Zaretskii * makefile.w32-in (frc, TAGS, TAGS-gmake, TAGS-nmake): New targets. === modified file 'nt/INSTALL' --- nt/INSTALL 2010-07-24 13:35:31 +0000 +++ nt/INSTALL 2010-10-06 10:55:03 +0000 @@ -221,6 +221,14 @@ absolutely sure the produced binaries will never need to be run under a debugger. + Because of limitations of the stock Windows command shell, certain + characters (quotes, backslashes and equal signs) can be problematic + and should not be used in arguments to configure. That means that + forward slashes must be used in paths passed to the compiler and + linker via the --cflags and --ldflags options, and that it is + currently not possible to pass a macro like -DFOO=BAR (though -DFOO + is perfectly valid). + N.B. It is normal to see a few error messages output while configure is running, when gcc support is being tested. These cannot be suppressed because of limitations in the Windows 9X command.com shell. ------------------------------------------------------------ revno: 101815 committer: Daiki Ueno branch nick: trunk timestamp: Wed 2010-10-06 16:12:42 +0900 message: * epa.texi (Caching Passphrases): New section. diff: === modified file 'doc/misc/ChangeLog' --- doc/misc/ChangeLog 2010-10-06 04:20:46 +0000 +++ doc/misc/ChangeLog 2010-10-06 07:12:42 +0000 @@ -1,3 +1,7 @@ +2010-10-06 Daiki Ueno + + * epa.texi (Caching Passphrases): New section. + 2010-10-06 Glenn Morris * Makefile.in (SHELL): Set it. === modified file 'doc/misc/epa.texi' --- doc/misc/epa.texi 2010-09-29 08:36:38 +0000 +++ doc/misc/epa.texi 2010-10-06 07:12:42 +0000 @@ -66,6 +66,7 @@ * Overview:: * Quick start:: * Commands:: +* Caching Passphrases:: * Bug Reports:: @end menu @@ -399,6 +400,43 @@ The default value is @code{t}. @end defvar +@node Caching Passphrases +@chapter Caching Passphrases + +Typing passphrases is an irritating task if you frequently open and +close the same file. GnuPG and EasyPG Assistant provide mechanisms to +remember your passphrases. However, the configuration is a bit +confusing since it depends on your GnuPG installation (GnuPG version 1 or +GnuPG version 2), encryption method (symmetric or public key), and whether or +not you want to use gpg-agent. Here are some questions: + +@enumerate +@item Do you use GnuPG version 2 instead of GnuPG version 1? +@item Do you use symmetric encryption rather than public key encryption? +@item Do you want to use gpg-agent? +@end enumerate + +Here are configurations depending on your answers: + +@multitable {111} {222} {333} {configuration configuration configuration} +@item @b{1} @tab @b{2} @tab @b{3} @tab Configuration +@item Yes @tab Yes @tab Yes @tab Nothing to do. +@item Yes @tab Yes @tab No @tab You can't, without gpg-agent. +@item Yes @tab No @tab Yes @tab Nothing to do. +@item Yes @tab No @tab No @tab You can't, without gpg-agent. +@item No @tab Yes @tab Yes @tab Set up elisp passphrase cache. +@item No @tab Yes @tab No @tab Set up elisp passphrase cache. +@item No @tab No @tab Yes @tab Nothing to do. +@item No @tab No @tab No @tab You can't, without gpg-agent. +@end multitable + +To setup gpg-agent, follow the instruction in GnuPG manual. +@pxref{Invoking GPG-AGENT, , Invoking GPG-AGENT, gnupg}. + +To set up elisp passphrase cache, set +@code{epa-file-cache-passphrase-for-symmetric-encryption}. +@xref{Encrypting/decrypting *.gpg files}. + @node Bug Reports @chapter Bug Reports ------------------------------------------------------------ revno: 101814 committer: Glenn Morris branch nick: trunk timestamp: Tue 2010-10-05 21:20:46 -0700 message: Minor doc/*/Makefile.in change. * doc/emacs/Makefile.in ($(infodir)): Add parallel build workaround. * doc/lispintro/Makefile.in ($(infodir)): Add parallel build workaround. * doc/lispref/Makefile.in ($(infodir)): Add parallel build workaround. * doc/misc/Makefile.in ($(infodir)): Add parallel build workaround. diff: === modified file 'doc/emacs/ChangeLog' --- doc/emacs/ChangeLog 2010-10-06 02:26:38 +0000 +++ doc/emacs/ChangeLog 2010-10-06 04:20:46 +0000 @@ -6,6 +6,7 @@ (clean): Delete specific dvi and pdf files. (infoclean, dist): New rules. (maintainer-clean): Use infoclean. + ($(infodir)): Add parallel build workaround. 2010-10-04 Glenn Morris === modified file 'doc/emacs/Makefile.in' --- doc/emacs/Makefile.in 2010-10-06 02:26:38 +0000 +++ doc/emacs/Makefile.in 2010-10-06 04:20:46 +0000 @@ -111,7 +111,7 @@ info: $(infodir)/emacs $(infodir): - mkdir $@ + mkdir $@ || test -d $@ dvi: emacs.dvi pdf: emacs.pdf === modified file 'doc/lispintro/Makefile.in' --- doc/lispintro/Makefile.in 2010-10-06 02:26:38 +0000 +++ doc/lispintro/Makefile.in 2010-10-06 04:20:46 +0000 @@ -38,7 +38,7 @@ info: ${infodir}/eintr $(infodir): - mkdir $@ + mkdir $@ || test -d $@ dvi: emacs-lisp-intro.dvi html: emacs-lisp-intro.html === modified file 'doc/lispref/ChangeLog' --- doc/lispref/ChangeLog 2010-10-06 02:26:38 +0000 +++ doc/lispref/ChangeLog 2010-10-06 04:20:46 +0000 @@ -5,6 +5,7 @@ (mostlyclean, infoclean, dist): New rules. (clean): Delete dvi and pdf files. (maintainer-clean): Remove elisp.oaux, use infoclean. + ($(infodir)): Add parallel build workaround. 2010-10-04 Glenn Morris === modified file 'doc/lispref/Makefile.in' --- doc/lispref/Makefile.in 2010-10-06 02:26:38 +0000 +++ doc/lispref/Makefile.in 2010-10-06 04:20:46 +0000 @@ -97,7 +97,7 @@ pdf: elisp.pdf $(infodir): - mkdir $@ + mkdir $@ || test -d $@ $(infodir)/elisp: $(infodir) $(srcs) cd $(srcdir); $(MAKEINFO) -I. -I$(texinfodir) elisp.texi -o $@ === modified file 'doc/misc/ChangeLog' --- doc/misc/ChangeLog 2010-10-06 02:26:38 +0000 +++ doc/misc/ChangeLog 2010-10-06 04:20:46 +0000 @@ -5,6 +5,7 @@ (mostlyclean): Tidy up. (clean): Only delete the specific dvi and pdf files. (maintainer-clean): Be more restrictive in what we delete. + ($(infodir)): Add parallel build workaround. 2010-10-04 Lars Magne Ingebrigtsen === modified file 'doc/misc/Makefile.in' --- doc/misc/Makefile.in 2010-10-06 02:26:38 +0000 +++ doc/misc/Makefile.in 2010-10-06 04:20:46 +0000 @@ -202,7 +202,7 @@ info: $(INFO_TARGETS) $(infodir): - mkdir $@ + mkdir $@ || test -d $@ dvi: $(DVI_TARGETS)