emacs-emojify

fork of https://github.com/iqbalansari/emacs-emojify
Log | Files | Refs | LICENSE

commit 320f187895e9b54fb42f210dd08e661f184c124f
parent 471d6976b5acc5a9796038bde700de4ea5a454ab
Author: Iqbal Ansari <iqbalansari02@yahoo.com>
Date:   Wed, 15 May 2019 11:17:46 +0530

Enable support for emojifying org mode source blocks

Diffstat:
Memojify.el | 38+++++++++++++++++++++++---------------
1 file changed, 23 insertions(+), 15 deletions(-)

diff --git a/emojify.el b/emojify.el @@ -57,9 +57,11 @@ (declare-function org-list-get-item-begin "org-list") (declare-function org-at-heading-p "org") -;; Required to determine point is in an org-src block +;; Required to determine the context is in an org-src block (declare-function org-element-type "org-element") +(declare-function org-element-property "org-element") (declare-function org-element-at-point "org-element") +(declare-function org-src--get-lang-mode "org-src") ;; Required for integration with company-mode (declare-function company-pseudo-tooltip-unhide "company") @@ -516,15 +518,16 @@ This returns non-nil if the region is valid according to `emojify-program-contex (memql 'unicode emojify-emoji-styles)) t))))) -(defun emojify-inside-org-src-p (point) - "Return non-nil if POINT is inside `org-mode' src block. +(defun emojify-org-src-lang-at-point (point) + "Return the `major-mode' for the org source block at POINT. -This is used to inhibit display of emoji's in `org-mode' src blocks -since our mechanisms do not work in it." +Returns nil if the point is not at an org source block" (when (eq major-mode 'org-mode) (save-excursion (goto-char point) - (eq (org-element-type (org-element-at-point)) 'src-block)))) + (let ((element (org-element-at-point))) + (when (eq (org-element-type element) 'src-block) + (org-src--get-lang-mode (org-element-property :language element))))))) (defun emojify-looking-at-end-of-list-maybe (point) "Determine if POINT is end of a list. @@ -1073,8 +1076,7 @@ should not be a problem 🤞." (when (and emoji (not (or (get-text-property match-beginning 'emojify-inhibit) (get-text-property match-end 'emojify-inhibit))) - (memql (intern (ht-get emoji "style")) - emojify-emoji-styles) + (memql (intern (ht-get emoji "style")) emojify-emoji-styles) ;; Skip displaying this emoji if the its bounds are ;; already part of an existing emoji. Since the emojis ;; are searched in descending order of length (see @@ -1083,10 +1085,19 @@ should not be a problem 🤞." ;; ones (not (or (get-text-property match-beginning 'emojified) (get-text-property (1- match-end) 'emojified))) - ;; Display unconditionally in non-prog mode - (or (not (derived-mode-p 'prog-mode 'tuareg--prog-mode 'comint-mode 'smalltalk-mode)) - ;; In prog mode enable respecting `emojify-program-contexts' - (emojify-valid-program-context-p emoji match-beginning match-end)) + + ;; Validate the context in a programming major-mode, if + ;; the buffer is in org-mode we determine the major + ;; mode is picked from the language/babel block if any + ;; at point + (let ((major-mode-at-point (if (eq major-mode 'org-mode) + (or (emojify-org-src-lang-at-point match-beginning) 'org-mode) + major-mode))) + ;; Display unconditionally in non-prog mode + (or (not (provided-mode-derived-p major-mode-at-point + 'prog-mode 'tuareg--prog-mode 'comint-mode 'smalltalk-mode)) + ;; In prog mode enable respecting `emojify-program-contexts' + (emojify-valid-program-context-p emoji match-beginning match-end))) ;; Display ascii emojis conservatively, since they have potential ;; to be annoying consider d: in head:, except while executing apropos @@ -1095,9 +1106,6 @@ should not be a problem 🤞." force-display (emojify-valid-ascii-emoji-context-p match-beginning match-end)) - (or force-display - (not (emojify-inside-org-src-p match-beginning))) - ;; Inhibit possibly inside a list ;; 41 is ?) but packages get confused by the extra closing paren :) ;; TODO Report bugs to such packages