From fd5539c6de4df242b517a73ced2fc1ff1f661227 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Agust=C3=ADn=20Mart=C3=ADn?= Date: Wed, 7 Jul 2010 12:30:57 +0200 Subject: [PATCH] Improve ispell.el word completion handling. * ispell.el (ispell-alternate-dictionary): Use file-readable-p. Return nil if no word-list is found at default locations. (ispell-complete-word-dict): Default to nil. (ispell-command-loop): Use 'word-list' when using lookup-words. (lookup-words): Use ispell-complete-word-dict or ispell-alternate-dictionary. Check for word-list availability and handle errors if needed with better messages (Bug#6539). (ispell-complete-word): Use ispell-complete-word-dict or ispell-alternate-dictionary. --- lisp/ChangeLog | 12 +++++++++++ lisp/textmodes/ispell.el | 45 +++++++++++++++++++++++++--------------- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2214a6ba761..6fef9173109 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2010-07-07 Agustín Martín + + * ispell.el (ispell-alternate-dictionary): Use file-readable-p. + Return nil if no word-list is found at default locations. + (ispell-complete-word-dict): Default to nil. + (ispell-command-loop): Use 'word-list' when using lookup-words. + (lookup-words): Use ispell-complete-word-dict or + ispell-alternate-dictionary. Check for word-list availability + and handle errors if needed with better messages (Bug#6539). + (ispell-complete-word): Use ispell-complete-word-dict or + ispell-alternate-dictionary. + 2010-07-07 Glenn Morris * play/zone.el (top-level): Do not require timer, tabify, or cl. diff --git a/lisp/textmodes/ispell.el b/lisp/textmodes/ispell.el index a9915fcfb17..ad591eb0e7f 100644 --- a/lisp/textmodes/ispell.el +++ b/lisp/textmodes/ispell.el @@ -357,21 +357,21 @@ Must be greater than 1." :group 'ispell) (defcustom ispell-alternate-dictionary - (cond ((file-exists-p "/usr/dict/web2") "/usr/dict/web2") - ((file-exists-p "/usr/share/dict/web2") "/usr/share/dict/web2") - ((file-exists-p "/usr/dict/words") "/usr/dict/words") - ((file-exists-p "/usr/lib/dict/words") "/usr/lib/dict/words") - ((file-exists-p "/usr/share/dict/words") "/usr/share/dict/words") - ((file-exists-p "/usr/share/lib/dict/words") + (cond ((file-readable-p "/usr/dict/web2") "/usr/dict/web2") + ((file-readable-p "/usr/share/dict/web2") "/usr/share/dict/web2") + ((file-readable-p "/usr/dict/words") "/usr/dict/words") + ((file-readable-p "/usr/lib/dict/words") "/usr/lib/dict/words") + ((file-readable-p "/usr/share/dict/words") "/usr/share/dict/words") + ((file-readable-p "/usr/share/lib/dict/words") "/usr/share/lib/dict/words") - ((file-exists-p "/sys/dict") "/sys/dict") - (t "/usr/dict/words")) - "*Alternate dictionary for spelling help." + ((file-readable-p "/sys/dict") "/sys/dict")) + "*Alternate plain word-list dictionary for spelling help." :type '(choice file (const :tag "None" nil)) :group 'ispell) -(defcustom ispell-complete-word-dict ispell-alternate-dictionary - "*Dictionary used for word completion." +(defcustom ispell-complete-word-dict nil + "*Plain word-list dictionary used for word completion if +different from `ispell-alternate-dictionary'." :type '(choice file (const :tag "None" nil)) :group 'ispell) @@ -2049,10 +2049,11 @@ Global `ispell-quit' set to start location to continue spell session." (erase-buffer) (setq count ?0 skipped 0 - mode-line-format + mode-line-format ;; setup the *Choices* buffer with valid data. (concat "-- %b -- word: " new-word - " -- dict: " - ispell-alternate-dictionary) + " -- word-list: " + (or ispell-complete-word-dict + ispell-alternate-dictionary)) miss (lookup-words new-word) choices miss line ispell-choices-win-default-height) @@ -2267,11 +2268,20 @@ Otherwise the variable `ispell-grep-command' contains the command used to search for the words (usually egrep). Optional second argument contains the dictionary to use; the default is -`ispell-alternate-dictionary'." +`ispell-alternate-dictionary', overriden by `ispell-complete-word-dict' +if defined." ;; We don't use the filter for this function, rather the result is written ;; into a buffer. Hence there is no need to save the filter values. (if (null lookup-dict) - (setq lookup-dict ispell-alternate-dictionary)) + (setq lookup-dict (or ispell-complete-word-dict + ispell-alternate-dictionary))) + + (if lookup-dict + (unless (file-readable-p lookup-dict) + (error "lookup-words error: Unreadable or missing plain word-list %s." + lookup-dict)) + (error (concat "lookup-words error: No plain word-list found at system default " + "locations. Customize `ispell-alternate-dictionary' to set yours."))) (let* ((process-connection-type ispell-use-ptys-p) (wild-p (string-match "\\*" word)) @@ -3342,7 +3352,8 @@ Standard ispell choices are then available." (lookup-words (concat (and interior-frag "*") word (if (or interior-frag (null ispell-look-p)) "*")) - ispell-complete-word-dict))) + (or ispell-complete-word-dict + ispell-alternate-dictionary)))) (cond ((eq possibilities t) (message "No word to complete")) ((null possibilities) -- 2.39.2