Hi Carsten and Andreas,
thanks to Kenichi Handa, here is a proposal to fix the issus mentioned below. I tested it in emacs 22 and 23 and it seems to work just fine. Carsten, as always if I use some new elisp construct, please review the patch. I used `eval-when-compile' and `defsubst' to inline the char-to-string function, since it might be called very often, depending on the amount of text passed to emacs through org-protocol. Andreas, could you check if it works for you, too?
diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el index 133fae4..9b34ed9 100644 --- a/lisp/org-protocol.el +++ b/lisp/org-protocol.el @@ -280,6 +280,19 @@ decode each split part." (mapcar 'org-protocol-unhex-string split-parts)) split-parts))) + +;; This inline function is needed in org-protocol-unhex-compound to do +;; the right thing to decode UTF-8 char integer values. +(eval-when-compile + (if (>= emacs-major-version 23) + (defsubst org-protocol-char-to-string(c) + "Defsubst to decode UTF-8 character values in emacs 23 and beyond." + (char-to-string sum)) + (defun org-protocol-char-to-string (c) + "Defsubst to decode UTF-8 character values in emacs 22." + (string (decode-char 'ucs sum))))) + + (defun org-protocol-unhex-string(str) "Unhex hexified unicode strings as returned from the JavaScript function encodeURIComponent. E.g. `%C3%B6' is the german Umlaut `ü'." @@ -331,7 +344,7 @@ encodeURIComponent. E.g. `%C3%B6' is the german Umlaut `ü'." (setq sum (+ (lsh sum shift) val)) (if (> eat 0) (setq eat (- eat 1))) (when (= 0 eat) - (setq ret (concat ret (char-to-string sum))) + (setq ret (concat ret (org-protocol-char-to-string sum))) (setq sum 0)) )) ;; end (while bytes ret ))
> Andreas Burtzlaff <and...@gmx.net> writes: >> Hello Sebastian, >> >> I'm not sure you noticed the org-protocol bug in this thread on the >> org-mode list: >> http://www.mail-archive.com/emacs-orgmode@gnu.org/msg18673.html >> >> To sum it up, when the title of a page contains an &ndash then the error >> org-protocol-unhex-compound: Invalid character: 8211, #o20023, #x2013 >> occurs when invoking remember in Emacs 22, not in Emacs 23. >> >> Just wondering whether you have any idea how this could be fixed. Sebastian
_______________________________________________ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode