;;; ns-win.el --- lisp side of interface with NeXT/Open/GNUstep/MacOS X window system -*- lexical-binding: t -*-
-;; Copyright (C) 1993-1994, 2005-2015 Free Software Foundation, Inc.
+;; Copyright (C) 1993-1994, 2005-2016 Free Software Foundation, Inc.
;; Authors: Carl Edman
;; Christian Limpach
(require 'menu-bar)
(require 'fontset)
(require 'dnd)
+(require 'ucs-normalize)
(defgroup ns nil
"GNUstep/Mac OS X specific features."
(insert ns-input-spi-arg))
((string-equal ns-input-spi-name "mail-to")
(compose-mail ns-input-spi-arg))
- (t (error (concat "Service " ns-input-spi-name " not recognized")))))
+ (t (error "Service %s not recognized" ns-input-spi-name))))
;; Composed key sequence handling for Nextstep system input methods.
(setq ns-working-overlay nil))
-(declare-function ns-convert-utf8-nfd-to-nfc "nsfns.m" (str))
-
-;;;; 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.
+;; OS X file system Unicode UTF-8 NFD (decomposed form) support.
(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))
+ ;; Used prior to Emacs 25.
+ (define-coding-system-alias 'utf-8-nfd 'utf-8-hfs)
+
+ (set-file-name-coding-system 'utf-8-hfs))
;;;; Inter-app communications support.
;;;; Pasteboard support.
-(declare-function ns-get-selection-internal "nsselect.m" (buffer))
-
-(define-obsolete-function-alias 'ns-get-cut-buffer-internal
- 'ns-get-selection-internal "24.1")
(define-obsolete-function-alias 'ns-store-cut-buffer-internal
'gui-set-selection "24.1")
(defun ns-paste-secondary ()
(interactive)
- (insert (ns-get-selection-internal 'SECONDARY)))
+ (insert (gui-get-selection 'SECONDARY)))
;;;; Scrollbar handling.
;; Do the actual Nextstep Windows setup here; the above code just
;; defines functions and variables that we use now.
-(defun ns-initialize-window-system (&optional _display)
+(cl-defmethod window-system-initialization (&context (window-system ns)
+ &optional _display)
"Initialize Emacs for Nextstep (Cocoa / GNUstep) windowing."
(cl-assert (not ns-initialized))
;; Any display name is OK.
(add-to-list 'display-format-alist '(".*" . ns))
-(gui-method-define handle-args-function ns #'x-handle-args)
-(gui-method-define frame-creation-function ns #'x-create-frame-with-faces)
-(gui-method-define window-system-initialization ns
- #'ns-initialize-window-system)
-
-(gui-method-define gui-set-selection ns
- (lambda (selection value)
- (if value (ns-own-selection-internal selection value)
- (ns-disown-selection-internal selection))))
-(gui-method-define gui-selection-owner-p ns #'ns-selection-owner-p)
-(gui-method-define gui-selection-exists-p ns #'ns-selection-exists-p)
-(gui-method-define gui-get-selection ns #'ns-get-selection)
+(cl-defmethod handle-args-function (args &context (window-system ns))
+ (x-handle-args args))
+
+(cl-defmethod frame-creation-function (params &context (window-system ns))
+ (x-create-frame-with-faces params))
+
+(declare-function ns-own-selection-internal "nsselect.m" (selection value))
+(declare-function ns-disown-selection-internal "nsselect.m" (selection))
+(declare-function ns-selection-owner-p "nsselect.m" (&optional selection))
+(declare-function ns-selection-exists-p "nsselect.m" (&optional selection))
+(declare-function ns-get-selection "nsselect.m" (selection-symbol target-type))
+
+(cl-defmethod gui-backend-set-selection (selection value
+ &context (window-system ns))
+ (if value (ns-own-selection-internal selection value)
+ (ns-disown-selection-internal selection)))
+
+(cl-defmethod gui-backend-selection-owner-p (selection
+ &context (window-system ns))
+ (ns-selection-owner-p selection))
+
+(cl-defmethod gui-backend-selection-exists-p (selection
+ &context (window-system ns))
+ (ns-selection-exists-p selection))
+
+(cl-defmethod gui-backend-get-selection (selection-symbol target-type
+ &context (window-system ns))
+ (ns-get-selection selection-symbol target-type))
(provide 'ns-win)