From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Vladimir Lomov Newsgroups: gmane.emacs.bugs Subject: bug#15903: 24.3.50; Fix small issue with ispell-hunspell when dictionary is set to default (nil) Date: Mon, 18 Nov 2013 15:33:00 +0900 Message-ID: <20131118063300.GB889@smoon> References: <87wqk9k96w.fsf@smoon.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="IrhDeMKUP4DT/M7F" X-Trace: ger.gmane.org 1384756454 9589 80.91.229.3 (18 Nov 2013 06:34:14 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 18 Nov 2013 06:34:14 +0000 (UTC) To: 15903@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Nov 18 07:34:19 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ViIPa-0004Qy-K4 for geb-bug-gnu-emacs@m.gmane.org; Mon, 18 Nov 2013 07:34:19 +0100 Original-Received: from localhost ([::1]:41524 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ViIPZ-0005Uw-Vy for geb-bug-gnu-emacs@m.gmane.org; Mon, 18 Nov 2013 01:34:18 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:34738) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ViIPQ-0005Um-Id for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 01:34:14 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ViIPK-0003FE-IB for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 01:34:08 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:45363) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ViIPK-0003EN-Cb for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 01:34:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1ViIPJ-00052C-P5 for bug-gnu-emacs@gnu.org; Mon, 18 Nov 2013 01:34:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Vladimir Lomov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Nov 2013 06:34:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 15903 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 15903-submit@debbugs.gnu.org id=B15903.138475639919284 (code B ref 15903); Mon, 18 Nov 2013 06:34:01 +0000 Original-Received: (at 15903) by debbugs.gnu.org; 18 Nov 2013 06:33:19 +0000 Original-Received: from localhost ([127.0.0.1]:59382 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ViIOb-00050w-8Y for submit@debbugs.gnu.org; Mon, 18 Nov 2013 01:33:18 -0500 Original-Received: from mail-la0-f53.google.com ([209.85.215.53]:56723) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1ViIOW-00050d-Bc for 15903@debbugs.gnu.org; Mon, 18 Nov 2013 01:33:14 -0500 Original-Received: by mail-la0-f53.google.com with SMTP id ea20so4461842lab.26 for <15903@debbugs.gnu.org>; Sun, 17 Nov 2013 22:33:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=qk2XHxs85Un3kCaoGtZe0cI7eBI2TJOTM7D2uvGXQMY=; b=kn5bnbsuYrdoHk7jUsvBWhWpv6kUYYtUx/rrlowkFwFALhV2yjPJHCPfaFO21h5H3z 7thzfZe6l6T93L1fD5vVAuNBX3YEFyOFftVSLg/8g8+k+22E7CvWDeqC4NFMIZBlqfZc BzrjvpQL7RE5deBeaTML5E7FmSuqouzHooTtEuF8xxEoreALcvebvJu1uoAJ4OKZyw9u 7rH0ytgBvtWgNkUIm1byhPwIzSZfPbnLSbR989L9gbCuKkC9SAlIC2WVRrslsQ/4VHe9 qlWwaS4ndKRy0nKF4j8ihfyDcwmKS32cGd1NT+BiZOwmSjPPCr5hbpMWUVVdYHab4aAO YJDg== X-Received: by 10.112.204.74 with SMTP id kw10mr12292867lbc.13.1384756386215; Sun, 17 Nov 2013 22:33:06 -0800 (PST) Original-Received: from smoon ([141.105.47.97]) by mx.google.com with ESMTPSA id zv10sm11252163lbb.2.2013.11.17.22.33.02 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 17 Nov 2013 22:33:04 -0800 (PST) Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.22 (2013-10-16) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:80712 Archived-At: --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hello, ** Agustin Martin [2013-11-16 12:43:02 +0100]: > 2013/11/15 Vladimir Lomov >> Hello, >> according to variable 'ispell-dictionary-base-alist' defined in >> 'ispell.el' if 'ispell-dictionary' is nil then it is considered as >> default value for dictionary. Unfortunately, when hunspell is used as >> ispell program function 'ispell-parse-hunspell-affix-file' fails because >> it doesn't expect nil as argument. >> I propose small and simple patch. I checked it starting emacs as: >> emacs -Q >> and evaluating in *scratch*: >> (setq ispell-program-name "hunspell") >> (setq ispell-really-hunspell t) >> after that I run 'M-$' while point is on first 's' of >> (message) >> In minibuffer I see >> MESSAGE is correct >> Without this patch the same steps lead to message >> ispell-phaf: No matching entry for nil. > Hi, > Cannot reproduce it here. By the way, once initialized for hunspell > ispell.el provides a match for default (nil) value, here > (nil [[:alpha:]] [^[:alpha:]] ['] nil (-B) nil utf-8) Wouldn't you mind to share how you get this? I tried hard to prepare minimal example to catch when the problem appears but I know a very little of Emacs Lisp. This is my investigation and results. My system: OS: Archlinux x86_64, Emacs: compiled from trunk (rev. 115132), with original ispell.el env. variables: DICTIONARY=russian LANG=ru_RU.UTF-8 LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE=C LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= aspell: @(#) International Ispell Version 3.1.20 (but really Aspell 0.60.6.1) hunspell: @(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2) System has both Russian and English dictionaries. I tested both aspell and hunspell variants. Emacs is started from rxvt terminal as emacs -Q -l min-VARIANT.el both min-VARIANT.el, VARIANT={a,hun}spell are attached (and also can be found in repository https://bitbucket.org/vp1981/issues, https://bitbucket.org/vp1981/issues/src/452f8c393983a875cb46e96d9c9b5d42cb5e1dc7/emacs/ispell/?at=default) Then I open one of three test files VARIANT-exN.el, (N=,2,3) and evaluate commands. The only difference between test files is that - VARIANT-ex.el: dictionary is not set explicitly, - VARIANT-ex2.el: dictionary is set to string 'english', - VARIANT-ex3.el: dictionary is set to nil, The rest of test files are the same: 1. output values of several variables: ispell-VARIANT-dictionary-alist, ispell-dictionary and ispell-{local,current}-dictionary; 2. run 'ispell-word'; 3. output values of the same variables; 4. run 'ispell-word' again; 5. output values of the same variables. Results are shown in table \ | aspell | hunspell Test file \ | 1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5 | ------------+---+---+---+---+---+---+---+---+---+---+ ex.el | n | - | + | - | + | n |e11| + |e12| + | ex2.el | n |+n | + |+n | + | n |e11| + |e2 | + | ex3.el | n | - | + | - | + | n |e11| + |e12| + | Here: n: means 'nil' (return value); +n: means successful run and nil is returned; +: means successful run; -: means 'ispell-word' was run but seems can't find word "message" in a dictionary (may be it didn't use any); e1*: 'ispell-phaf' error (No matching entry for nil); difference between e11 and e12 is that first calls 'find-dictionaries' while second one calls 'fill-dictionary-entry'; e2: Lisp error, (No data for dictionary \"english\"...) Reports (backtrace) from Debugger are attached. What I expect in all cases: if either dictionary set to a valid string, to nil or doesn't set at all, call of 'ispell-word' (or M-$) should give result, may be zero one but not an error. These test files show (on my system) some problem with ispell. Of course I could be wrong and do something unusual but I tried to minimize any side-effects of my /real/ Emacs configuration. If I apply patch proposed in first message and run tests again (only hunspell part) then all three test files would give positive results (evaluating 'ispell-word' function gives nil, M-$ gives message in minibuffer "MESSAGE is correct"). P.S. Seems there might be a problem with aspell but here I want to clarify issue with hunspell. --- WBR, Vladimir Lomov -- Churchill's Commentary on Man: Man will occasionally stumble over the truth, but most of the time he will pick himself up and continue on. --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex.el" ;;; ;; Show default values for several variables, even if they are not defined before first call to 'ispell-word' ;;; (when (boundp 'ispell-hunspell-dictionary-alist) (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) ) ;;; ;; The call of 'ispell-word' runs several routines that populate several variables, especially '-dictionary-alist'. ;;; (ispell-word "message") ;;; ;; Now output the same variables as above. They must have values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) ;;; ;; Second run of 'ispell-word'. ;;; (ispell-word "message") ;;; ;; After second run variables might have other values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex2.el" ;;; ;; Set (default) dictionary ;;; (setq ispell-dictionary "english") ;;; ;; Show default values for several variables, even if they are not defined before first call to 'ispell-word' ;;; (when (boundp 'ispell-hunspell-dictionary-alist) (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) ) ;;; ;; The call of 'ispell-word' runs several routines that populate several variables, especially '-dictionary-alist'. ;;; (ispell-word "message") ;;; ;; Now output the same variables as above. They must have values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) ;;; ;; Second run of 'ispell-word'. ;;; (ispell-word "message") ;;; ;; After second run variables might have other values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex3.el" ;;; ;; Set (default) dictionary ;;; (setq ispell-dictionary nil) ;;; ;; Show default values for several variables, even if they are not defined before first call to 'ispell-word' ;;; (when (boundp 'ispell-hunspell-dictionary-alist) (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) ) ;;; ;; The call of 'ispell-word' runs several routines that populate several variables, especially '-dictionary-alist'. ;;; (ispell-word "message") ;;; ;; Now output the same variables as above. They must have values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) ;;; ;; Second run of 'ispell-word'. ;;; (ispell-word "message") ;;; ;; After second run variables might have other values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "ispell-hunspell-dictionary-alist:") (prin1 ispell-hunspell-dictionary-alist) ) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="aspell-ex3.el" ;;; ;; Set (default) dictionary ;;; (setq ispell-dictionary nil) ;;; ;; Show default values for several variables, even if they are not defined before first call to 'ispell-word' ;;; (when (boundp 'ispell-aspell-dictionary-alist) (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) ) ;;; ;; The call of 'ispell-word' runs several routines that populate several variables, especially '-dictionary-alist'. ;;; (ispell-word "message") ;;; ;; Now output the same variables as above. They must have values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) ;;; ;; Second run of 'ispell-word'. ;;; (ispell-word "message") ;;; ;; After second run variables might have other values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="aspell-ex2.el" ;;; ;; Set (default) dictionary ;;; (setq ispell-dictionary "english") ;;; ;; Show default values for several variables, even if they are not defined before first call to 'ispell-word' ;;; (when (boundp 'ispell-aspell-dictionary-alist) (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) ) ;;; ;; The call of 'ispell-word' runs several routines that populate several variables, especially '-dictionary-alist'. ;;; (ispell-word "message") ;;; ;; Now output the same variables as above. They must have values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) ;;; ;; Second run of 'ispell-word'. ;;; (ispell-word "message") ;;; ;; After second run variables might have other values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="aspell-ex3.el" ;;; ;; Set (default) dictionary ;;; (setq ispell-dictionary nil) ;;; ;; Show default values for several variables, even if they are not defined before first call to 'ispell-word' ;;; (when (boundp 'ispell-aspell-dictionary-alist) (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) ) ;;; ;; The call of 'ispell-word' runs several routines that populate several variables, especially '-dictionary-alist'. ;;; (ispell-word "message") ;;; ;; Now output the same variables as above. They must have values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) ;;; ;; Second run of 'ispell-word'. ;;; (ispell-word "message") ;;; ;; After second run variables might have other values. ;;; (progn (message "Default dictionary [%s]" ispell-dictionary) (message "Local dictionary [%s]" ispell-local-dictionary) (message "Current dictionary [%s]" ispell-current-dictionary) (prin1 "aspell-dictionary-alist:") (prin1 ispell-aspell-dictionary-alist) ) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="min-hunspell.el" (setq ispell-program-name "hunspell") (setq ispell-really-hunspell t) ;; (setq ispell-dictionary "english") ;; (setq ispell-local-dictionary "english") (setq debug-on-error t) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="min-aspell.el" (setq ispell-program-name "aspell") (setq ispell-really-aspell t) ;; (setq ispell-dictionary "english") ;; (setq ispell-local-dictionary "english") (setq debug-on-error t) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex-step2.txt" Debugger entered--Lisp error: (error "ispell-phaf: No matching entry for nil. ") signal(error ("ispell-phaf: No matching entry for nil.\n")) error("ispell-phaf: No matching entry for %s.\n" nil) ispell-parse-hunspell-affix-file(nil) ispell-find-hunspell-dictionaries() ispell-set-spellchecker-params() ispell-word("message") eval((ispell-word "message") nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex-step4.txt" Debugger entered--Lisp error: (error "ispell-phaf: No matching entry for nil. ") signal(error ("ispell-phaf: No matching entry for nil.\n")) error("ispell-phaf: No matching entry for %s.\n" nil) ispell-parse-hunspell-affix-file(nil) ispell-hunspell-fill-dictionary-entry(nil) ispell-start-process() ispell-init-process() ispell-buffer-local-words() ispell-accept-buffer-local-defs() ispell-word("message") eval((ispell-word "message") nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex2-step2.txt" Debugger entered--Lisp error: (error "ispell-phaf: No matching entry for nil. ") signal(error ("ispell-phaf: No matching entry for nil.\n")) error("ispell-phaf: No matching entry for %s.\n" nil) ispell-parse-hunspell-affix-file(nil) ispell-find-hunspell-dictionaries() ispell-set-spellchecker-params() ispell-word("message") eval((ispell-word "message") nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex2-step4.txt" Debugger entered--Lisp error: (error "No data for dictionary \"english\", neither in `ispell-local-dictionary-alist' nor in `ispell-dictionary-alist'") signal(error ("No data for dictionary \"english\", neither in `ispell-local-dictionary-alist' nor in `ispell-dictionary-alist'")) error("No data for dictionary \"%s\", neither in `ispell-local-dictionary-alist' nor in `ispell-dictionary-alist'" "english") ispell-get-decoded-string(1) ispell-get-casechars() ispell-get-word("message") ispell-word("message") eval((ispell-word "message") nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex3-step2.txt" Debugger entered--Lisp error: (error "ispell-phaf: No matching entry for nil. ") signal(error ("ispell-phaf: No matching entry for nil.\n")) error("ispell-phaf: No matching entry for %s.\n" nil) ispell-parse-hunspell-affix-file(nil) ispell-find-hunspell-dictionaries() ispell-set-spellchecker-params() ispell-word("message") eval((ispell-word "message") nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="hunspell-ex3-step4.txt" Debugger entered--Lisp error: (error "ispell-phaf: No matching entry for nil. ") signal(error ("ispell-phaf: No matching entry for nil.\n")) error("ispell-phaf: No matching entry for %s.\n" nil) ispell-parse-hunspell-affix-file(nil) ispell-hunspell-fill-dictionary-entry(nil) ispell-start-process() ispell-init-process() ispell-buffer-local-words() ispell-accept-buffer-local-defs() ispell-word("message") eval((ispell-word "message") nil) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) command-execute(eval-last-sexp) --IrhDeMKUP4DT/M7F--