all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eugene Vlasov <eugene@ikz.ru>
Cc: mange@freemail.hu, emacs-devel@gnu.org
Subject: Re: ispell-aspell-find-dictionary: Opening input file: no such file or directory
Date: Wed, 19 Oct 2005 12:24:27 +0600	[thread overview]
Message-ID: <20051019062427.GB8451@eugene-home.ikz.ru> (raw)
In-Reply-To: <E1ES3vt-0006lP-7n@fencepost.gnu.org>

On Tue, Oct 18, 2005 at 10:44:01PM -0400 Richard M. Stallman wrote:

> This patch tries to preserve standard elements of ispell-dictionary-alist
> for dictionaries that are not found by ispell-aspell-find-dictionary.
> Does it do the job for you?

Yes, with this patch I can check spell with russian dictionary. But
here error:

> --- 898,915 ----
>   	 (split-string
>   	  (with-temp-buffer
>   	    (call-process ispell-program-name nil t nil "dicts")
> ! 	    (buffer-string))))
> ! 	;; Search for the named dictionaries.
> ! 	(found
> ! 	 (delq nil 
> ! 	       (mapcar #'ispell-aspell-find-dictionary dictionaries))))

Variable dictionaries not bound at this time. I use let*:

--- emacs/lisp/textmodes/ispell.el	2005-10-09 19:02:50 +0600
+++ emacs.build/lisp/textmodes/ispell.el	2005-10-19 12:08:20 +0600
@@ -894,13 +894,22 @@
   "Find Aspell's dictionaries, and record in `ispell-dictionary-alist'."
   (unless ispell-really-aspell
     (error "This function only works with aspell"))
-  (let ((dictionaries
+  (let* ((dictionaries
 	 (split-string
 	  (with-temp-buffer
 	    (call-process ispell-program-name nil t nil "dicts")
-	    (buffer-string)))))
-    (setq ispell-dictionary-alist
-	  (mapcar #'ispell-aspell-find-dictionary dictionaries))
+	    (buffer-string))))
+	;; Search for the named dictionaries.
+	(found
+	 (delq nil 
+	       (mapcar #'ispell-aspell-find-dictionary dictionaries))))
+    ;; Merge into FOUND any elements from the standard ispell-dictionary-alist
+    ;; which have no element in FOUND at all.    
+    (dolist (dict ispell-dictionary-alist)
+      (unless (assoc (car dict) found)
+	(setq found (nconc found (list dict)))))
+    (setq ispell-dictionary-alist found)
+
     (ispell-aspell-add-aliases)
     ;; Add a default entry
     (let* ((english-dict (assoc "en" ispell-dictionary-alist))
@@ -922,6 +931,9 @@
     (car (split-string (buffer-string)))))
 
 (defun ispell-aspell-find-dictionary (dict-name)
+  ;; This returns nil if the data file does not exist.
+  ;; Can someone please explain the return value format when the
+  ;; file does exist -- rms?
   (let* ((lang ;; Strip out region, variant, etc.
 	  (and (string-match "^[[:alpha:]]+" dict-name)
 	       (match-string 0 dict-name)))
@@ -931,35 +943,37 @@
 			    (ispell-get-aspell-config-value "data-dir")))
 		  "/" lang ".dat"))
 	 otherchars)
-    ;; This file really should exist; there is no sensible recovery.
-    (with-temp-buffer
-      (insert-file-contents data-file)
-      ;; There is zero or one line with special characters declarations.
-      (when (search-forward-regexp "^special" nil t)
-	(let ((specials (split-string
-			 (buffer-substring (point)
-					   (progn (end-of-line) (point))))))
-	  ;; The line looks like: special ' -** - -** . -** : -*-
-	  ;; -** means that this character
-	  ;;    - doesn't appear at word start
-	  ;;    * may appear in the middle of a word
-	  ;;    * may appear at word end
-	  ;; `otherchars' is about the middle case.
-	  (while specials
-	    (when (eq (aref (cadr specials) 1) ?*)
-	      (push (car specials) otherchars))
-	    (setq specials (cddr specials))))))
-    (list dict-name
-	  "[[:alpha:]]"
-	  "[^[:alpha:]]"
-	  (regexp-opt otherchars)
-	  t 				; We can't tell, so set this to t
-	  (list "-d" dict-name "--encoding=utf-8")
-	  nil				; aspell doesn't support this
-	  ;; Here we specify the encoding to use while communicating with
-	  ;; aspell.  This doesn't apply to command line arguments, so
-	  ;; just don't pass words to spellcheck as arguments...
-	  'utf-8)))
+    (condition-case ()
+	(with-temp-buffer
+	  (insert-file-contents data-file)
+	  ;; There is zero or one line with special characters declarations.
+	  (when (search-forward-regexp "^special" nil t)
+	    (let ((specials (split-string
+			     (buffer-substring (point)
+					       (progn (end-of-line) (point))))))
+	      ;; The line looks like: special ' -** - -** . -** : -*-
+	      ;; -** means that this character
+	      ;;    - doesn't appear at word start
+	      ;;    * may appear in the middle of a word
+	      ;;    * may appear at word end
+	      ;; `otherchars' is about the middle case.
+	      (while specials
+		(when (eq (aref (cadr specials) 1) ?*)
+		  (push (car specials) otherchars))
+		(setq specials (cddr specials)))))
+	  (list dict-name
+		"[[:alpha:]]"
+		"[^[:alpha:]]"
+		(regexp-opt otherchars)
+		t			     ; We can't tell, so set this to t
+		(list "-d" dict-name "--encoding=utf-8")
+		nil				; aspell doesn't support this
+		;; Here we specify the encoding to use while communicating with
+		;; aspell.  This doesn't apply to command line arguments, so
+		;; just don't pass words to spellcheck as arguments...
+		'utf-8))
+      (file-error
+       nil))))
 
 (defun ispell-aspell-add-aliases ()
   "Find aspell's dictionary aliases and add them to `ispell-dictionary-alist'."


With this changes spell checking works for me.


-- 
WBR, Eugene Vlasov        mailto:eugvv at altlinux.ru
                          JID: eugvv@jabber.ru

  reply	other threads:[~2005-10-19  6:24 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-29 17:18 ispell-aspell-find-dictionary: Opening input file: no such file or directory Eugene Vlasov
2005-10-13 12:44 ` Magnus Henoch
2005-10-13 14:47   ` Stefan Monnier
2005-10-13 15:48   ` Eugene Vlasov
2005-10-17  4:33     ` Richard M. Stallman
2005-10-17  7:21       ` Eugene Vlasov
2005-10-18  3:39         ` Richard M. Stallman
2005-10-18  6:24           ` Eugene Vlasov
2005-10-19  2:44             ` Richard M. Stallman
2005-10-19  6:24               ` Eugene Vlasov [this message]
2005-10-14 17:37   ` Richard M. Stallman
2005-10-14 18:31     ` Eugene Vlasov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051019062427.GB8451@eugene-home.ikz.ru \
    --to=eugene@ikz.ru \
    --cc=emacs-devel@gnu.org \
    --cc=mange@freemail.hu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.