]> git.eshelyaron.com Git - emacs.git/commitdiff
Make `C-x 8 e e' work better in the terminal
authorLars Ingebrigtsen <larsi@gnus.org>
Sun, 7 Nov 2021 15:59:22 +0000 (16:59 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Sun, 7 Nov 2021 15:59:22 +0000 (16:59 +0100)
* lisp/international/emoji.el (emoji--adjust-displayable-1): Make
something rudimentary work on non-graphical Emacsen for `C-x 8 e e'.

lisp/international/emoji.el

index 2cba707b5fa7c5d52ced94992ec46c1e356e3112..d2570e99111d1ab6be039fda8b0a5d1324f06952 100644 (file)
@@ -266,15 +266,26 @@ character) under point is."
         ;; the search feature.
         (when-let ((name (emoji--name glyph)))
           (setf (gethash (downcase name) emoji--all-bases) glyph))
-        ;; Remove glyphs we don't have in graphical displays.
-        (if (let ((char (elt glyph 0)))
-              (if emoji--font
-                  (font-has-char-p emoji--font char)
-                (when-let ((font (car (internal-char-font nil char))))
-                  (setq emoji--font font))))
-            (setq alist (cdr alist))
-          ;; Remove the element.
-          (setcdr alist (cddr alist)))))))
+        (if (display-graphic-p)
+            ;; Remove glyphs we don't have in graphical displays.
+            (if (let ((char (elt glyph 0)))
+                  (if emoji--font
+                      (font-has-char-p emoji--font char)
+                    (when-let ((font (car (internal-char-font nil char))))
+                      (setq emoji--font font))))
+                (setq alist (cdr alist))
+              ;; Remove the element.
+              (setcdr alist (cddr alist)))
+          ;; We don't have font info on non-graphical displays.
+          (if (let ((char (elt glyph 0)))
+                ;; FIXME.  Some grapheme clusters display more or less
+                ;; correctly in the terminal, but we don't really know
+                ;; which ones.  None of these display totally
+                ;; correctly, though, so should they be filtered out?
+                (char-displayable-p char))
+              (setq alist (cdr alist))
+            ;; Remove the element.
+            (setcdr alist (cddr alist))))))))
 
 (defun emoji--parse-emoji-test ()
   (setq emoji--labels nil)