branch: externals/boxy commit 5ff0999ea05533be36e3e69bb9c5e3e02836f9fc Author: Tyler Grinn <tylergr...@gmail.com> Commit: Tyler Grinn <tylergr...@gmail.com>
Add support for chinese characters in tooltip --- boxy.el | 37 ++++++++++++++++++++----------------- tests/boxy-test-visual.el | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 17 deletions(-) diff --git a/boxy.el b/boxy.el index 04c9089..9087b52 100644 --- a/boxy.el +++ b/boxy.el @@ -1625,35 +1625,38 @@ characters if possible." (rows (split-string content "\n")) (height (length rows)) (width (+ 2 (min boxy--tooltip-max-width - (apply #'max 0 (mapcar #'length rows))))) + (apply #'max 0 (mapcar #'string-width rows))))) (top (if (< (- cur-line 2 height) min-line) (+ cur-line 2) (- cur-line 1 height))) (left (if (> (+ cur-column width 1) max-column) (- max-column width 1) cur-column)) - overlay overlays) + overlays) (dolist (str rows) - (let* ((pos (save-excursion - (forward-line (- top (line-number-at-pos))) - (let ((inhibit-read-only t)) - (move-to-column left t)) - (point))) - (remaining-chars (save-excursion - (goto-char pos) - (- (save-excursion - (end-of-line) - (current-column)) - (current-column))))) + (let ((left-margin 0) + start end overlay cur-column) + (save-excursion + (let ((inhibit-read-only t)) + (forward-line (- top (line-number-at-pos))) + (move-to-column left t) + (setq cur-column (current-column)) + (if (= cur-column left) + (setq start (point)) + (setq left-margin (- cur-column left)) + (setq start (- (point) (- cur-column left)))) + (move-to-column (+ left width) t) + (setq cur-column (current-column)) + (if (= cur-column (+ left width)) + (setq end (point)) + (setq end (- (point) (- cur-column left)))))) (setq str (format (concat " %-" (number-to-string (- width 2)) "s ") (truncate-string-to-width str boxy--tooltip-max-width nil nil t))) - (when (= 0 remaining-chars) - (save-excursion (goto-char pos) (let ((inhibit-read-only t)) (insert " "))) - (setq remaining-chars 1)) - (setq overlay (make-overlay pos (+ pos (min remaining-chars width)))) + (setq overlay (make-overlay start end)) (overlay-put overlay 'face boxy--tooltip-face) (overlay-put overlay 'display `((margin nil) ,str)) + (overlay-put overlay 'before-string (make-string left-margin ?\s)) (push overlay overlays) (setq top (+ top 1)))) (save-excursion (boxy-mode-recalculate-box-ring)) diff --git a/tests/boxy-test-visual.el b/tests/boxy-test-visual.el new file mode 100644 index 0000000..fb1a523 --- /dev/null +++ b/tests/boxy-test-visual.el @@ -0,0 +1,32 @@ +;;; boxy-test-chinese.Eli --- Visual tests for boxy -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Free Software Foundation, Inc. + +;; Author: Tyler Grinn <tylergr...@gmail.com> + +;;; Commentary: +;; +;; These tests must be evaluated manually +;; + +;;; Code: + +;;;; Tests + +;; Check that the tooltip for 你好 shows correctly +(let* ((world (boxy-box)) + (greeting (boxy-box :name "我叫泰勒" :margin-y 0)) + (hello (boxy-box :name "你好" :rel "in" :tooltip "你好\n我叫泰勒"))) + (boxy-add-next greeting world) + (boxy-add-next hello greeting) + (boxy-pp world)) + +;; Check that the tooltip for 你好 shows correctly +(let* ((world (boxy-box)) + (greeting (boxy-box :name "我叫泰勒" :margin-y 0)) + (hello (boxy-box :name "你好" :rel "in" :tooltip "你好\n我叫泰勒")) + (right (boxy-box :name "右边 " :rel "to the right of"))) + (boxy-add-next greeting world) + (boxy-add-next hello greeting) + (boxy-add-next right greeting) + (boxy-pp world))