Bastien <b...@gnu.org> writes: > Hi Eric, > > Eric Abrahamsen <e...@ericabrahamsen.net> writes: > >> Sorry this took a while to get to... >> >> I think it was a little simpler than I thought -- at least I hope that's >> true, and I'm not missing something really obvious. There are two >> patches attached, a simple one that handles re-justification of table >> fields during field movement, and another that allows for narrowing of >> columns with double-width strings. The second patch is uglier, and >> doesn't work 100% well (you get misalignment if you try to narrow a >> double-wide to an odd number of single-width characters), but it's >> better than nothing. > > I want to apply the patches on master -- can you give them a commit > message with an Emacs changelog? Also, the first one (0001-...) does > not apply on master anymore. > > Thanks in advance!
The patch series that would not die! I'm not a git wizard, but I think I was able to apply both these patches to master with no problem: they're now sitting on top of 56b47fb and nothing is going wrong (I think). Can you try again? Here they are with better commit messages. E
>From 3e6fd0e2790156a9bd68401bdabbf1b170408ba6 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen <e...@ericabrahamsen.net> Date: Wed, 13 Feb 2013 11:56:18 +0800 Subject: [PATCH 1/2] Use string width in table field justification lisp/org-table.el (org-table-justify-field-maybe): Use org-string-width instead of length to calculate the visual width of table cells -- helps with double-width charsets, etc. --- lisp/org-table.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lisp/org-table.el b/lisp/org-table.el index 6a7935e..5e0177f 100644 --- a/lisp/org-table.el +++ b/lisp/org-table.el @@ -981,13 +981,16 @@ Optional argument NEW may specify text to replace the current field content." (progn (setq s (match-string 1) o (match-string 0) - l (max 1 (- (match-end 0) (match-beginning 0) 3)) + l (max 1 + (- (org-string-width + (buffer-substring-no-properties + (match-end 0) (match-beginning 0))) 3)) e (not (= (match-beginning 2) (match-end 2)))) (setq f (format (if num " %%%ds %s" " %%-%ds %s") l (if e "|" (setq org-table-may-need-update t) "")) n (format f s)) (if new - (if (<= (length new) l) ;; FIXME: length -> str-width? + (if (<= (org-string-width new) l) (setq n (format f new)) (setq n (concat new "|") org-table-may-need-update t))) (if (equal (string-to-char n) ?-) (setq n (concat " " n))) -- 1.9.3
>From 7850f739a6ef21bcc92763150861a67798282f12 Mon Sep 17 00:00:00 2001 From: Eric Abrahamsen <e...@ericabrahamsen.net> Date: Wed, 13 Feb 2013 16:46:33 +0800 Subject: [PATCH 2/2] Improve table column narrowing with variable-width strings lisp/org-table.el (org-table-align): Use org-string-width to make a better guess as to how wide a narrowed table column should actually be. This won't work perfectly with variable-width scripts, as it still only narrows in full-column increments, but it's better than before. --- lisp/org-table.el | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/lisp/org-table.el b/lisp/org-table.el index 5e0177f..d1f9686 100644 --- a/lisp/org-table.el +++ b/lisp/org-table.el @@ -765,7 +765,7 @@ When nil, simply write \"#ERROR\" in corrupted fields.") (hfmt1 (concat (make-string sp2 ?-) "%s" (make-string sp1 ?-) "+")) emptystrings links dates emph raise narrow - falign falign1 fmax f1 len c e space) + falign falign1 fmax f1 f2 len c e space) (untabify beg end) (remove-text-properties beg end '(org-cwidth t org-dwidth t display t)) ;; Check if we have links or dates @@ -851,10 +851,19 @@ When nil, simply write \"#ERROR\" in corrupted fields.") (unless (> f1 1) (user-error "Cannot narrow field starting with wide link \"%s\"" (match-string 0 xx))) - (add-text-properties f1 (length xx) (list 'org-cwidth t) xx) - (add-text-properties (- f1 2) f1 - (list 'display org-narrow-column-arrow) - xx))))) + (setq f2 (length xx)) + (if (= (org-string-width xx) + f2) + (setq f2 f1) + (setq f2 1) + (while (< (org-string-width (substring xx 0 f2)) + f1) + (setq f2 (1+ f2)))) + (add-text-properties f2 (length xx) (list 'org-cwidth t) xx) + (add-text-properties (if (>= (string-width (substring xx (1- f2) f2)) 2) + (1- f2) (- f2 2)) f2 + (list 'display org-narrow-column-arrow) + xx))))) ;; Get the maximum width for each column (push (apply 'max (or fmax 1) 1 (mapcar 'org-string-width column)) lengths) -- 1.9.3