branch: externals/company commit e1d58370cf1f6b42b929376eab2193bfc0914381 Author: Dmitry Gutov <dgu...@yandex.ru> Commit: Dmitry Gutov <dgu...@yandex.ru>
Use 'after-string' to render the popup To make possible rendering images in it. Discussion in https://github.com/company-mode/company-mode/pull/996#issuecomment-662743347. --- company.el | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/company.el b/company.el index 45cfebf..82264e1 100644 --- a/company.el +++ b/company.el @@ -2738,9 +2738,23 @@ If SHOW-VERSION is non-nil, show the version in the echo area." (company--offset-line (pop lines) offset)) new)) - (let ((str (concat (when nl " \n") - (mapconcat 'identity (nreverse new) "\n") - "\n"))) + ;; TODO: Choose the face most appropriate for each line, instead of + ;; simply forcing :extend to nil. + (let* ((nl-face (list + :extend t + :inverse-video nil + :background (face-attribute 'default :background))) + (str (concat (when nl " \n") + (apply + #'concat + (mapcan + ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=42552#23 + (lambda (line) (list line + (propertize "\n" 'face nl-face))) + (nreverse new)))))) + ;; Use add-face-text-property in Emacs 24.4 + ;; https://debbugs.gnu.org/38563 + (font-lock-append-text-property 0 (length str) 'face 'default str) (when nl (put-text-property 0 1 'cursor t str)) str))) @@ -2949,14 +2963,12 @@ Returns a negative number if the tooltip should be displayed above point." (overlay-put ov 'priority 111) ;; No (extra) prefix for the first line. (overlay-put ov 'line-prefix "") - ;; `display' is better - ;; (http://debbugs.gnu.org/18285, http://debbugs.gnu.org/20847), - ;; but it doesn't work on 0-length overlays. - (if (< (overlay-start ov) (overlay-end ov)) - (overlay-put ov 'display disp) - (overlay-put ov 'after-string disp) - (overlay-put ov 'invisible t)) - (overlay-put ov 'face 'default) + (overlay-put ov 'after-string disp) + ;; `display' is better than `invisible': + ;; https://debbugs.gnu.org/18285 + ;; https://debbugs.gnu.org/20847 + ;; https://debbugs.gnu.org/42521 + (overlay-put ov 'display "") (overlay-put ov 'window (selected-window))))) (defun company-pseudo-tooltip-guard ()