From: Mirko V. <mir...@gm...> - 2010-04-21 00:04:31
|
Hello, I am using files with utf-8 encoding and greek characters. I have a problem loading such files. I am using clisp 2.47 on cygwin and slime on a windows version of emacs. The particular problem I am having is as follows. If I have a file with the following contents (defparameter +foo+ 2.0) (defparameter +αβψ+ 3.0) (defparameter +ζχψω+ "abc") and I do > (compile-file "...") > (load "...") at slime's REPL, only +foo+ will be defined. The other two will be undefined. I can go to the file buffer and successfully do `C-x C-E' (slime-eval-last-expression). Likewise, `defun's whose function definitions contain greek characters do not get evaluated unless I explicitly evaluate them using C-x C-E I have setup slime's repl to understand utf-8 encoding as per the instructions, and I can use variables with greek characters in that repl. Is this a `clisp' feature, or am I doing something incorrect? Thank you, Mirko |
From: Sam S. <sd...@gn...> - 2010-04-21 15:51:26
|
Hi, Mirko Vukovic wrote: > > I am using files with utf-8 encoding and greek characters. I have a > problem loading such files. > > I am using clisp 2.47 on cygwin and slime on a windows version of emacs. > > The particular problem I am having is as follows. > > If I have a file with the following contents > > (defparameter +foo+ 2.0) > (defparameter +αβψ+ 3.0) > (defparameter +ζχψω+ "abc") > > and I do >> (compile-file "...") >> (load "...") > > at slime's REPL, only +foo+ will be defined. The other two will be undefined. I cannot reproduce this with either current cvs head (development version) or an older clisp 2.41. the symbols are there: ======================= greek.lisp (defpackage "GREEK") (in-package "GREEK") (defparameter +foo+ 2.0) (defparameter +αβψ+ 3.0) (defparameter +ζχψω+ "abc") (do-symbols (s) (when (and (eq (symbol-package s) *package*) (boundp s)) (print (list s (symbol-value s) (map 'list #'char-name (symbol-name s)))))) ======================= greek.lisp $ clisp -q -norc -E utf-8 -c i18n.lisp ;; Compiling file i18n.lisp ... ;; Wrote file i18n.fas 0 errors, 0 warnings $ clisp -q -norc -E utf-8 -i i18n ;; Loading file i18n.fas ... (+��������+ "abc" ("PLUS_SIGN" "GREEK_CAPITAL_LETTER_ZETA" "GREEK_CAPITAL_LETTER_CHI" "GREEK_CAPITAL_LETTER_PSI" "GREEK_CAPITAL_LETTER_OMEGA" "PLUS_SIGN")) (+������+ 3.0 ("PLUS_SIGN" "GREEK_CAPITAL_LETTER_ALPHA" "GREEK_CAPITAL_LETTER_BETA" "GREEK_CAPITAL_LETTER_PSI" "PLUS_SIGN")) (+FOO+ 2.0 ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_F" "LATIN_CAPITAL_LETTER_O" "LATIN_CAPITAL_LETTER_O" "PLUS_SIGN")) ;; Loaded file i18n.fas [1]> > I can go to the file buffer and successfully do `C-x C-E' > (slime-eval-last-expression). > > Likewise, `defun's whose function definitions contain greek characters > do not get evaluated unless I explicitly evaluate them using C-x C-E > > I have setup slime's repl to understand utf-8 encoding as per the > instructions, and I can use variables with greek characters in that > repl. > > Is this a `clisp' feature, or am I doing something incorrect? I think this is a case of bad interaction with emacs. what I observer in emacs (plain emacs, no slime) is this: [11]> (symbol-value (find-symbol "+ΖΧΨΩ+" "GREEK")) (SYMBOL-VALUE (FIND-SYMBOL "+FOO+" "GREEK")) [12]> (SYMBOL-VALUE (FIND-SYMBOL "+" "GREEK")) [13]> somehow emacs has problems with these greek chars. however, the symbols are there: (symbol-value (find-symbol (map 'string #'name-char '("PLUS_SIGN" "GREEK_CAPITAL_LETTER_ALPHA" "GREEK_CAPITAL_LETTER_BETA" "GREEK_CAPITAL_LETTER_PSI" "PLUS_SIGN")) "GREEK")) ==> 3.0 Sorry, I don't think I can offer more help. You should contact the emacs maintainers (gnu-emacs-help). Sam. |
From: Mirko V. <mir...@gm...> - 2010-04-22 01:24:17
|
On Wed, Apr 21, 2010 at 11:51 AM, Sam Steingold <sd...@gn...> wrote: > Hi, > > Mirko Vukovic wrote: >> >> I am using files with utf-8 encoding and greek characters. I have a >> problem loading such files. >> >> I am using clisp 2.47 on cygwin and slime on a windows version of emacs. >> >> The particular problem I am having is as follows. >> >> If I have a file with the following contents >> >> (defparameter +foo+ 2.0) >> (defparameter +αβψ+ 3.0) >> (defparameter +ζχψω+ "abc") >> >> and I do >>> >>> (compile-file "...") >>> (load "...") >> >> at slime's REPL, only +foo+ will be defined. The other two will be >> undefined. > > I cannot reproduce this with either current cvs head (development version) > or an older clisp 2.41. the symbols are there: > > ======================= greek.lisp > (defpackage "GREEK") > (in-package "GREEK") > (defparameter +foo+ 2.0) > (defparameter +αβψ+ 3.0) > (defparameter +ζχψω+ "abc") > (do-symbols (s) > (when (and (eq (symbol-package s) *package*) (boundp s)) > (print (list s (symbol-value s) > (map 'list #'char-name (symbol-name s)))))) > ======================= greek.lisp > $ clisp -q -norc -E utf-8 -c i18n.lisp > ;; Compiling file i18n.lisp ... > ;; Wrote file i18n.fas > 0 errors, 0 warnings > $ clisp -q -norc -E utf-8 -i i18n > ;; Loading file i18n.fas ... > (+��������+ "abc" > ("PLUS_SIGN" "GREEK_CAPITAL_LETTER_ZETA" "GREEK_CAPITAL_LETTER_CHI" > "GREEK_CAPITAL_LETTER_PSI" "GREEK_CAPITAL_LETTER_OMEGA" "PLUS_SIGN")) > (+������+ 3.0 > ("PLUS_SIGN" "GREEK_CAPITAL_LETTER_ALPHA" "GREEK_CAPITAL_LETTER_BETA" > "GREEK_CAPITAL_LETTER_PSI" "PLUS_SIGN")) > (+FOO+ 2.0 > ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_F" "LATIN_CAPITAL_LETTER_O" > "LATIN_CAPITAL_LETTER_O" "PLUS_SIGN")) > ;; Loaded file i18n.fas > [1]> > Thanks Sam. I think the problem is somewhere in my file encoding. When I execute your code, I get the following output: (+î±+ "alpha" ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX" "PLUS-MINUS_SIGN" "PLUS_SIGN")) ;; Loaded file /home/projects/pinot-noir/workbooks/2221--Brinkmann-rf-sheath-model/utf81.fas t cs-user> (load "utf-8") ;; Loading file /home/projects/pinot-noir/workbooks/2221--Brinkmann-rf-sheath-model/utf-8.lisp ... (+î±î²ïˆ+ 3.0 ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX" "PLUS-MINUS_SIGN" "LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX" "SUPERSCRIPT_TWO" "LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS" "MODIFIER_LETTER_CIRCUMFLEX_ACCENT" "PLUS_SIGN")) (+î¶ï‡ïˆï‰+ "abc" ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX" "PILCROW_SIGN" "LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS" "DOUBLE_DAGGER" "LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS" "MODIFIER_LETTER_CIRCUMFLEX_ACCENT" "LATIN_CAPITAL_LETTER_I_WITH_DIAERESIS" "PER_MILLE_SIGN" "PLUS_SIGN")) (+foo+ 2.0 ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_F" "LATIN_CAPITAL_LETTER_O" "LATIN_CAPITAL_LETTER_O" "PLUS_SIGN")) (+î±+ "alpha" ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_I_WITH_CIRCUMFLEX" "PLUS-MINUS_SIGN" "PLUS_SIGN")) This suggests an encoding problem. Indeed when I opened the source file with firefox, the it used the Western (ISO-8859-1) encoding. (forcing the encoding to unicode/utf-8) displayed the greek characters nicely. I think the file is encoded as utf-8 as the mode-line displays a U, and the coding system for the buffer is utf-8-unix (I also tried bare utf-8, utf-8-dos) I will pursue this on the slime mailing list. It is not directly relevant to slime, but is a probably a good forum for emacs/lisp interaction. If I do find a solution, I will post a follow-up here so that this thread has a clojure. Mirko |
From: Mirko V. <mir...@gm...> - 2010-04-22 10:22:17
|
On Wed, Apr 21, 2010 at 11:51 AM, Sam Steingold <sd...@gn...> wrote: > Hi, > > Mirko Vukovic wrote: >> >> I am using files with utf-8 encoding and greek characters. I have a >> problem loading such files. >> >> I am using clisp 2.47 on cygwin and slime on a windows version of emacs. >> >> The particular problem I am having is as follows. >> >> If I have a file with the following contents >> >> (defparameter +foo+ 2.0) >> (defparameter +αβψ+ 3.0) >> (defparameter +ζχψω+ "abc") >> >> and I do >>> >>> (compile-file "...") >>> (load "...") >> >> at slime's REPL, only +foo+ will be defined. The other two will be >> undefined. > > I cannot reproduce this with either current cvs head (development version) > or an older clisp 2.41. the symbols are there: > > ======================= greek.lisp > (defpackage "GREEK") > (in-package "GREEK") > (defparameter +foo+ 2.0) > (defparameter +αβψ+ 3.0) > (defparameter +ζχψω+ "abc") > (do-symbols (s) > (when (and (eq (symbol-package s) *package*) (boundp s)) > (print (list s (symbol-value s) > (map 'list #'char-name (symbol-name s)))))) > ======================= greek.lisp > $ clisp -q -norc -E utf-8 -c i18n.lisp > ;; Compiling file i18n.lisp ... > ;; Wrote file i18n.fas > 0 errors, 0 warnings > $ clisp -q -norc -E utf-8 -i i18n > ;; Loading file i18n.fas ... > (+��������+ "abc" > ("PLUS_SIGN" "GREEK_CAPITAL_LETTER_ZETA" "GREEK_CAPITAL_LETTER_CHI" > "GREEK_CAPITAL_LETTER_PSI" "GREEK_CAPITAL_LETTER_OMEGA" "PLUS_SIGN")) > (+������+ 3.0 > ("PLUS_SIGN" "GREEK_CAPITAL_LETTER_ALPHA" "GREEK_CAPITAL_LETTER_BETA" > "GREEK_CAPITAL_LETTER_PSI" "PLUS_SIGN")) > (+FOO+ 2.0 > ("PLUS_SIGN" "LATIN_CAPITAL_LETTER_F" "LATIN_CAPITAL_LETTER_O" > "LATIN_CAPITAL_LETTER_O" "PLUS_SIGN")) > ;; Loaded file i18n.fas > [1]> > Fixed by specifying -E utf-8 on the command line -- I was mistyping it as `utf8' Thank you very much Mirko |