[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/valign 81de913 042/198: Property support tabs
From: |
Stefan Monnier |
Subject: |
[elpa] externals/valign 81de913 042/198: Property support tabs |
Date: |
Tue, 1 Dec 2020 18:19:13 -0500 (EST) |
branch: externals/valign
commit 81de91320e38bb741b62bfe60fb84f891073f06f
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Property support tabs
* valign.el (valign--tab-width): New function.
(valign--glyph-width-at-point): Treat tabs differently.
---
valign.el | 37 +++++++++++++++++++++++++++----------
1 file changed, 27 insertions(+), 10 deletions(-)
diff --git a/valign.el b/valign.el
index bba3140..07dcb77 100644
--- a/valign.el
+++ b/valign.el
@@ -91,6 +91,21 @@ Return nil if not in a cell."
;; nil
;; (char-after)))))
+(defun valign--tab-width (font)
+ "Return the pixel width of a tab in FONT."
+ ;; FIXME We have to over-estimate the pixel width of a tab. Since
+ ;; it is very hard to compute the exact width of it (basically Emacs
+ ;; redisplay calculates tab width based one the iterators position
+ ;; on-the-fly, to calculate the exact width of a tab, you need to
+ ;; know it’s _position_, that means calculating from the left edge).
+ (* (or tab-width 8) ;; FIXME For some unknown reason, tab-width is
+ ;; sometimes nil, someone should investigate.
+ (aref (car (mapcar
+ #'identity (font-get-glyphs
+ font
+ 0 1 " ")))
+ 4)))
+
(defun valign--glyph-width-at-point (&optional point)
"Return the pixel width of the glyph at POINT.
The buffer has to be visible. If point is at an image, this
@@ -98,16 +113,18 @@ function doens’t return the image’s width, but the
underlining
character’s glyph width."
(let* ((p (or point (point))))
;; car + mapcar to translate the vector to a list.
- (aref (car (mapcar
- #'identity (font-get-glyphs
- ;; (font-at 0 nil (buffer-substring p (1+
- ;; p))) doesn’t work, the font is
- ;; sometimes wrong. (font-at p) doesn’t
- ;; work, because it requires the buffer to
- ;; be visible.
- (font-at p)
- p (1+ p))))
- 4)))
+ (if (eq (char-after point) ?\t)
+ (valign--tab-width (font-at p))
+ (aref (car (mapcar
+ #'identity (font-get-glyphs
+ ;; (font-at 0 nil (buffer-substring p (1+
+ ;; p))) doesn’t work, the font is
+ ;; sometimes wrong. (font-at p) doesn’t
+ ;; work, because it requires the buffer to
+ ;; be visible.
+ (font-at p)
+ p (1+ p))))
+ 4))))
(defun valign--pixel-width-from-to (from to)
"Return the width of the glyphs from FROM (inclusive) to TO (exclusive).
- [elpa] externals/valign b0cea9f 012/198: Make point appear in the middle for empty cells, (continued)
- [elpa] externals/valign b0cea9f 012/198: Make point appear in the middle for empty cells, Stefan Monnier, 2020/12/01
- [elpa] externals/valign eea08cc 023/198: Re add org-agenda support., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 2a60a4d 025/198: Remove valign-setup, Stefan Monnier, 2020/12/01
- [elpa] externals/valign e555277 029/198: Add with-silent-modification, Stefan Monnier, 2020/12/01
- [elpa] externals/valign bdb56ce 032/198: Sync all org mode alignment state automatically, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 3c70c15 034/198: * valign.el (valign-mode): Fix., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 3752d53 036/198: Solve a bunch of edge cases, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 5b9a086 038/198: Fix edge case, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 8cfe0ca 039/198: * valign.el (valign-separator-row-style): Add choice definition., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 927d82d 041/198: Support indented tables, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 81de913 042/198: Property support tabs,
Stefan Monnier <=
- [elpa] externals/valign db0c4d8 043/198: Add support for markdown tables, Stefan Monnier, 2020/12/01
- [elpa] externals/valign da56833 047/198: Always realign markdown tables, Stefan Monnier, 2020/12/01
- [elpa] externals/valign e885f67 048/198: Merge branch 'markdown', Stefan Monnier, 2020/12/01
- [elpa] externals/valign cd7c17f 052/198: Fix infinite loop, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 638f978 054/198: Fix infinite loop!!, Stefan Monnier, 2020/12/01
- [elpa] externals/valign 994a4dc 056/198: Advice outline, Stefan Monnier, 2020/12/01
- [elpa] externals/valign cf4f9c9 059/198: * valign.el (valign-initial-alignment): Check buffer visibility., Stefan Monnier, 2020/12/01
- [elpa] externals/valign cc53114 060/198: * valign.el (valign-initial-alignment): Fix., Stefan Monnier, 2020/12/01
- [elpa] externals/valign f2ccbd9 069/198: * README.org: Rarrange., Stefan Monnier, 2020/12/01
- [elpa] externals/valign 24ad00d 074/198: * valign.el (valign--cell-width): Includes extra spaces in cell width., Stefan Monnier, 2020/12/01