From d107eda498f94423d846b0e2f1be7facab417b2a Mon Sep 17 00:00:00 2001 From: Anders Lindgren Date: Thu, 24 Dec 2015 09:50:26 +0100 Subject: [PATCH] ; Revert "File-name completion of non-ASCII characters on OS X (bug#22169)" ; This reverts commit 09053075225fec8a6cf7a72017a6dfc1ec6b6f0c. ; This caused a build from scratch to fail. --- lisp/loadup.el | 1 - lisp/term/ns-win.el | 28 ++++++++++++++++++++++------ src/nsfns.m | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 7 deletions(-) diff --git a/lisp/loadup.el b/lisp/loadup.el index dda433e4eaf..f0caa8be349 100644 --- a/lisp/loadup.el +++ b/lisp/loadup.el @@ -276,7 +276,6 @@ (if (featurep 'ns) (progn (load "term/common-win") - (load "international/ucs-normalize") (load "term/ns-win"))) (if (fboundp 'x-create-frame) ;; Do it after loading term/foo-win.el since the value of the diff --git a/lisp/term/ns-win.el b/lisp/term/ns-win.el index 9bd59fc1954..0b3e3bd9d9c 100644 --- a/lisp/term/ns-win.el +++ b/lisp/term/ns-win.el @@ -51,7 +51,6 @@ (require 'menu-bar) (require 'fontset) (require 'dnd) -(require 'ucs-normalize) (defgroup ns nil "GNUstep/Mac OS X specific features." @@ -338,12 +337,29 @@ See `ns-insert-working-text'." (setq ns-working-overlay nil)) -;; OS X file system Unicode UTF-8 NFD (decomposed form) support. -(when (eq system-type 'darwin) - ;; Used prior to Emacs 25. - (define-coding-system-alias 'utf-8-nfd 'utf-8-hfs) +(declare-function ns-convert-utf8-nfd-to-nfc "nsfns.m" (str)) - (set-file-name-coding-system 'utf-8-hfs)) +;;;; OS X file system Unicode UTF-8 NFD (decomposed form) support +;; Lisp code based on utf-8m.el, by Seiji Zenitani, Eiji Honjoh, and +;; Carsten Bormann. +(when (eq system-type 'darwin) + (defun ns-utf8-nfd-post-read-conversion (length) + "Calls `ns-convert-utf8-nfd-to-nfc' to compose char sequences." + (save-excursion + (save-restriction + (narrow-to-region (point) (+ (point) length)) + (let ((str (buffer-string))) + (delete-region (point-min) (point-max)) + (insert (ns-convert-utf8-nfd-to-nfc str)) + (- (point-max) (point-min)))))) + + (define-coding-system 'utf-8-nfd + "UTF-8 NFD (decomposed) encoding." + :coding-type 'utf-8 + :mnemonic ?U + :charset-list '(unicode) + :post-read-conversion 'ns-utf8-nfd-post-read-conversion) + (set-file-name-coding-system 'utf-8-nfd)) ;;;; Inter-app communications support. diff --git a/src/nsfns.m b/src/nsfns.m index 5fa68c0a15c..edc02e8350b 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -2099,6 +2099,39 @@ there was no result. */) } +DEFUN ("ns-convert-utf8-nfd-to-nfc", Fns_convert_utf8_nfd_to_nfc, + Sns_convert_utf8_nfd_to_nfc, 1, 1, 0, + doc: /* Return an NFC string that matches the UTF-8 NFD string STR. */) + (Lisp_Object str) +{ +/* TODO: If GNUstep ever implements precomposedStringWithCanonicalMapping, + remove this. */ + NSString *utfStr; + Lisp_Object ret = Qnil; + NSAutoreleasePool *pool; + + CHECK_STRING (str); + pool = [[NSAutoreleasePool alloc] init]; + utfStr = [NSString stringWithUTF8String: SSDATA (str)]; +#ifdef NS_IMPL_COCOA + if (utfStr) + utfStr = [utfStr precomposedStringWithCanonicalMapping]; +#endif + if (utfStr) + { + const char *cstr = [utfStr UTF8String]; + if (cstr) + ret = build_string (cstr); + } + + [pool release]; + if (NILP (ret)) + error ("Invalid UTF-8"); + + return ret; +} + + #ifdef NS_IMPL_COCOA /* Compile and execute the AppleScript SCRIPT and return the error @@ -3174,6 +3207,7 @@ be used as the image of the icon representing the frame. */); defsubr (&Sns_emacs_info_panel); defsubr (&Sns_list_services); defsubr (&Sns_perform_service); + defsubr (&Sns_convert_utf8_nfd_to_nfc); defsubr (&Sns_popup_font_panel); defsubr (&Sns_popup_color_panel); -- 2.39.2