branch: externals/org-remark commit 4ad2be30e4d5516218a381ce879b1df44d9b9fdc Author: Noboru Ota <m...@nobiot.com> Commit: Noboru Ota <m...@nobiot.com>
fix(icon): the line icon not displaying --- org-remark-icon.el | 40 ++++++++++++++++++++++++++++------------ org-remark-line.el | 31 ++++++++++++++++++------------- 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/org-remark-icon.el b/org-remark-icon.el index 4e50911ffe..2203f48c5e 100644 --- a/org-remark-icon.el +++ b/org-remark-icon.el @@ -85,26 +85,22 @@ The icons currently available are defined in `org-remark-icons'." ;; Add-icons should be the last function because other functions may do ;; something relevant for an icon -- e.g. adjust-positon." (add-hook 'org-remark-highlights-after-load-functions - #'org-remark-highlights-add-icons 80 :local)) + #'org-remark-highlights-add-icons-maybe 80 :local)) ;; Disable (remove-hook 'org-remark-highlights-toggle-hide-functions #'org-remark-icon-toggle-hide :local) (remove-hook 'org-remark-highlights-toggle-show-functions #'org-remark-icon-toggle-show :local) (remove-hook 'org-remark-highlights-after-load-functions - #'org-remark-highlights-add-icons 80 :local))) + #'org-remark-highlights-add-icons-maybe :local))) (defvar org-remark-icons (list (list 'notes - (lambda (ov) - (and org-remark-icon-notes - (overlay-get ov '*org-remark-note-body))) + #'org-remark-icon-notes-p nil) (list 'position-adjusted - (lambda (ov) - (and org-remark-icon-position-adjusted - (overlay-get ov '*org-remark-position-adjusted))) + #'org-remark-icon-position-adjusted-p 'org-remark-highlighter-warning)) "List of icons enabled. It is an alist. Each element is a list of this form: @@ -121,6 +117,14 @@ for ICON-NAME will be added to the highlight. DEFAULT FACE must be a named face. It is optinal and can be nil.") +(defun org-remark-icon-notes-p (ov) + (and org-remark-icon-notes + (overlay-get ov '*org-remark-note-body))) + +(defun org-remark-icon-position-adjusted-p (ov) + (and org-remark-icon-position-adjusted + (overlay-get ov '*org-remark-position-adjusted))) + (defun org-remark-icon-toggle-hide (highlight) (overlay-put highlight '*org-remark-icons (overlay-get highlight 'after-string)) (overlay-put highlight 'after-string nil)) @@ -129,7 +133,7 @@ DEFAULT FACE must be a named face. It is optinal and can be nil.") (overlay-put highlight 'after-string (overlay-get highlight '*org-remark-icons)) (overlay-put highlight '*org-remark-icons nil)) -(defun org-remark-highlights-add-icons (overlays _notes-buf) +(defun org-remark-highlights-add-icons-maybe (overlays _notes-buf) "Add icons to OVERLAYS. Each overlay is a highlight." (dolist (ov overlays) @@ -141,9 +145,21 @@ Each overlay is a highlight." (org-remark-icon-propertize icon-name ov default-face))))) (let ((icon-string (mapconcat #'add-icon-maybe org-remark-icons))) - (when icon-string (org-remark-icon-overlay-put - ov icon-string - (overlay-get ov 'org-remark-type))))))) + ;; `mapconcat' returns "" when all function calls for SEQUENCE + ;; return nil, I guess to guarantee the result is a string + (when (and icon-string + (not (string= icon-string ""))) + (org-remark-icon-overlay-put + ov icon-string + (overlay-get ov 'org-remark-type))))))) + +;; (defun org-remark-icon-image-p (icon-string) +;; "Return t when ICON-STRING contains a display property. +;; The string may be empty like \"\" but it may have a display +;; property to display an icon image. In this case, we should not +;; consider it an empty string. This is important to know when an +;; image icon is used instead of a string." +;; (when (get-text-property 0 'display icon-string))) (cl-defgeneric org-remark-icon-overlay-put (ov icon-string _org-remark-type) "Default method to deal with icon. diff --git a/org-remark-line.el b/org-remark-line.el index 1b4fdcebc0..93b118f857 100644 --- a/org-remark-line.el +++ b/org-remark-line.el @@ -98,16 +98,17 @@ by `overlays-in'." (org-remark-line-highlight-overlay-put ov face) ;; LINE (overlay-put ov 'insert-in-front-hooks (list 'org-remark-line-highlight-modified))) -(defun org-remark-line-highlight-overlay-put (ov face) +(defun org-remark-line-highlight-overlay-put (ov face &optional string) (let* ((face (or face 'org-remark-line-highlighter)) (left-margin (or (car (window-margins)) ;; when nil = no margin, set to 1 (progn (set-window-margins nil 2) 2))) (spaces (- left-margin 2)) - (string (with-temp-buffer (insert-char ?\s spaces) - (insert org-remark-line-icon) - (buffer-string)))) + (string (or string + (with-temp-buffer (insert-char ?\s spaces) + (insert org-remark-line-icon) + (buffer-string))))) (overlay-put ov 'before-string (propertize "! " 'display `((margin left-margin) ,(propertize string 'face face)))) @@ -160,15 +161,19 @@ end of overlay being identical." (cl-defmethod org-remark-icon-overlay-put (ov icon-string (org-remark-type (eql 'line))) ;; If the icon-string has a display properties, assume it is an icon image (let ((display-prop (get-text-property 0 'display icon-string))) - (when display-prop - (let* ((display-prop (list '(margin left-margin) display-prop)) - (icon-string (propertize "* " 'display display-prop)) - (icon-string (propertize icon-string face 'org-remark-line-highligther))) - (overlay-put ov 'before-string icon-string))))) - -;; (defun org-remark-line-inspect-overlay () -;; (interactive) -;; (car (overlays-in (point) (point)))) + (cond (display-prop + (let* ((display-prop (list '(margin left-margin) display-prop)) + (icon-string (propertize "* " 'display display-prop))) + (setq icon-string (propertize icon-string + 'face 'org-remark-line-highlighter)) + (overlay-put ov 'before-string icon-string))) + (icon-string + (setq icon-string (propertize icon-string + 'face 'org-remark-line-highlighter)) + (org-remark-line-highlight-overlay-put ov + 'org-remark-line-highlighter + icon-string)) + (t (ignore))))) (provide 'org-remark-line) ;;; org-remark-line.el ends here