emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/boxy 5ff0999 02/10: Add support for chinese characters


From: ELPA Syncer
Subject: [elpa] externals/boxy 5ff0999 02/10: Add support for chinese characters in tooltip
Date: Fri, 15 Oct 2021 10:57:10 -0400 (EDT)

branch: externals/boxy
commit 5ff0999ea05533be36e3e69bb9c5e3e02836f9fc
Author: Tyler Grinn <tylergrinn@gmail.com>
Commit: Tyler Grinn <tylergrinn@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 <tylergrinn@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))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]