]> git.eshelyaron.com Git - emacs.git/commitdiff
Add macOS character-palette (bug#29837)
authorAlan Third <alan@idiocy.org>
Sun, 24 Dec 2017 15:40:03 +0000 (15:40 +0000)
committerAlan Third <alan@idiocy.org>
Sun, 7 Jan 2018 20:38:26 +0000 (20:38 +0000)
* lisp/ns-win.el (ns-do-show-character-palette): New function.
* src/nsfns.m (Sns_show_character_palette): New function.
* src/nsterm.m (EmacsView::insertText): Handle NSAttributedString.

lisp/term/ns-win.el
src/nsfns.m
src/nsterm.m

index c9534b7bb81f8d7897a10408a5133063f1da6f82..aa3113bd340e4c88b2f0aae7d37e60359ca7edd6 100644 (file)
@@ -144,6 +144,8 @@ The properties returned may include `top', `left', `height', and `width'."
 (define-key global-map [?\s-z] 'undo)
 (define-key global-map [?\s-|] 'shell-command-on-region)
 (define-key global-map [s-kp-bar] 'shell-command-on-region)
+(define-key global-map [C-s- ] 'ns-do-show-character-palette)
+(define-key key-translation-map [C-s-268632064] [C-s- ])
 ;; (as in Terminal.app)
 (define-key global-map [s-right] 'ns-next-frame)
 (define-key global-map [s-left] 'ns-prev-frame)
@@ -575,6 +577,12 @@ the last file dropped is selected."
   (interactive)
   (ns-emacs-info-panel))
 
+(declare-function ns-show-character-palette "nsfns.m" ())
+
+(defun ns-do-show-character-palette ()
+  (interactive)
+  (ns-show-character-palette))
+
 (defun ns-next-frame ()
   "Switch to next visible frame."
   (interactive)
index 3ede63f9854bee34f9b6b2c5960ffbab35ffb4c7..c8b302462681014a585aa6c8db0a600d81a7de49 100644 (file)
@@ -3135,6 +3135,19 @@ position (0, 0) of the selected frame's terminal. */)
                            (pt.y - screen.frame.origin.y)));
 }
 
+DEFUN ("ns-show-character-palette",
+       Fns_show_character_palette,
+       Sns_show_character_palette, 0, 0, 0,
+       doc: /* Show the macOS character palette.  */)
+       (void)
+{
+  struct frame *f = SELECTED_FRAME ();
+  EmacsView *view = FRAME_NS_VIEW (f);
+  [NSApp orderFrontCharacterPalette:view];
+
+  return Qnil;
+}
+
 /* ==========================================================================
 
     Class implementations
@@ -3326,6 +3339,7 @@ be used as the image of the icon representing the frame.  */);
   defsubr (&Sns_frame_restack);
   defsubr (&Sns_set_mouse_absolute_pixel_position);
   defsubr (&Sns_mouse_absolute_pixel_position);
+  defsubr (&Sns_show_character_palette);
   defsubr (&Sx_display_mm_width);
   defsubr (&Sx_display_mm_height);
   defsubr (&Sx_display_screens);
index 3f59e33c7b1114fa6236e19980f419c473d85429..b80d832ee0b0872843e963058b964a8bb383cfd5 100644 (file)
@@ -6283,11 +6283,18 @@ not_in_argv (NSString *arg)
          by doCommandBySelector: deleteBackward: */
 - (void)insertText: (id)aString
 {
-  NSString *s = aString;
-  NSUInteger len = [s length];
+  NSString *s;
+  NSUInteger len;
 
   NSTRACE ("[EmacsView insertText:]");
 
+  if ([aString isKindOfClass:[NSAttributedString class]])
+    s = [aString string];
+  else
+    s = aString;
+
+  len = [s length];
+
   if (NS_KEYLOG)
     NSLog (@"insertText '%@'\tlen = %lu", aString, (unsigned long) len);
   processingCompose = NO;