forked from mirrors/org-mode
org-colview: Do not rely on `current-column' ignoring display properties
* lisp/org-macs.el (org-current-text-column): New macro calculating current column without accounting display text properties. * lisp/org-colview.el (org-columns-check-computed): (org-columns-next-allowed-value): (org-columns-new): (org-columns-delete): (org-columns-edit-attributes): (org-columns-widen): (org-columns-move-right): (org-columns-move-left): (org-columns-update): Use the new macro when calculating point position in the column view table overlay. Do _not_ use the new macro when we want to get the visual column position of the point. Fixes "test-org-colview/" failures on Emacs 29 after Emacs commit 4243747b1b8c3b7e3463822804b32e83febe2878: ;; Fix 'current-column' in the presence of display strings ;; * src/indent.c (check_display_width): Support calculation of width ;; of 'display' properties whose values are strings. This fixes the ;; value returned by 'current-column' when display strings are ;; present between BOL and point. (Bug#53795) See https://orgmode.org/list/CACnOyijQc7BDDtrYQb+=VoGWkpWAyMu7O4qsvGpsU6SCgwiM8Q@mail.gmail.com
This commit is contained in:
parent
8f5bf17255
commit
5a1b050310
|
@ -557,7 +557,7 @@ for the duration of the command.")
|
|||
|
||||
(defun org-columns-check-computed ()
|
||||
"Throw an error if current column value is computed."
|
||||
(let ((spec (nth (current-column) org-columns-current-fmt-compiled)))
|
||||
(let ((spec (nth (org-current-text-column) org-columns-current-fmt-compiled)))
|
||||
(and
|
||||
(nth 3 spec)
|
||||
(assoc spec (get-text-property (line-beginning-position) 'org-summaries))
|
||||
|
@ -713,7 +713,8 @@ When PREVIOUS is set, go to the previous value. When NTH is
|
|||
an integer, select that value."
|
||||
(interactive)
|
||||
(org-columns-check-computed)
|
||||
(let* ((column (current-column))
|
||||
(let* ((column (org-current-text-column))
|
||||
(visible-column (current-column))
|
||||
(key (get-char-property (point) 'org-columns-key))
|
||||
(value (get-char-property (point) 'org-columns-value))
|
||||
(pom (or (get-text-property (line-beginning-position) 'org-hd-marker)
|
||||
|
@ -763,7 +764,7 @@ an integer, select that value."
|
|||
;; the right place on the current line.
|
||||
(let ((org-columns-inhibit-recalculation)) (org-columns-redo))
|
||||
(org-columns-update key)
|
||||
(org-move-to-column column))))))
|
||||
(org-move-to-column visible-column))))))
|
||||
|
||||
(defun org-colview-construct-allowed-dates (s)
|
||||
"Construct a list of three dates around the date in S.
|
||||
|
@ -925,14 +926,14 @@ details."
|
|||
(if spec
|
||||
(progn (setcar spec (car new))
|
||||
(setcdr spec (cdr new)))
|
||||
(push new (nthcdr (current-column) org-columns-current-fmt-compiled)))
|
||||
(push new (nthcdr (org-current-text-column) org-columns-current-fmt-compiled)))
|
||||
(org-columns-store-format)
|
||||
(org-columns-redo)))
|
||||
|
||||
(defun org-columns-delete ()
|
||||
"Delete the column at point from columns view."
|
||||
(interactive)
|
||||
(let ((spec (nth (current-column) org-columns-current-fmt-compiled)))
|
||||
(let ((spec (nth (org-current-text-column) org-columns-current-fmt-compiled)))
|
||||
(when (y-or-n-p (format "Are you sure you want to remove column %S? "
|
||||
(nth 1 spec)))
|
||||
(setq org-columns-current-fmt-compiled
|
||||
|
@ -942,18 +943,18 @@ details."
|
|||
;; updating it may prove counter-intuitive. See comments in
|
||||
;; `org-columns-move-right' for details.
|
||||
(let ((org-columns-inhibit-recalculation t)) (org-columns-redo))
|
||||
(when (>= (current-column) (length org-columns-current-fmt-compiled))
|
||||
(when (>= (org-current-text-column) (length org-columns-current-fmt-compiled))
|
||||
(backward-char)))))
|
||||
|
||||
(defun org-columns-edit-attributes ()
|
||||
"Edit the attributes of the current column."
|
||||
(interactive)
|
||||
(org-columns-new (nth (current-column) org-columns-current-fmt-compiled)))
|
||||
(org-columns-new (nth (org-current-text-column) org-columns-current-fmt-compiled)))
|
||||
|
||||
(defun org-columns-widen (arg)
|
||||
"Make the column wider by ARG characters."
|
||||
(interactive "p")
|
||||
(let* ((n (current-column))
|
||||
(let* ((n (org-current-text-column))
|
||||
(entry (nth n org-columns-current-fmt-compiled))
|
||||
(width (aref org-columns-current-maxwidths n)))
|
||||
(setq width (max 1 (+ width arg)))
|
||||
|
@ -969,7 +970,7 @@ details."
|
|||
(defun org-columns-move-right ()
|
||||
"Swap this column with the one to the right."
|
||||
(interactive)
|
||||
(let* ((n (current-column))
|
||||
(let* ((n (org-current-text-column))
|
||||
(cell (nthcdr n org-columns-current-fmt-compiled))
|
||||
e)
|
||||
(when (>= n (1- (length org-columns-current-fmt-compiled)))
|
||||
|
@ -993,7 +994,7 @@ details."
|
|||
(defun org-columns-move-left ()
|
||||
"Swap this column with the one to the left."
|
||||
(interactive)
|
||||
(let* ((n (current-column)))
|
||||
(let* ((n (org-current-text-column)))
|
||||
(when (= n 0)
|
||||
(error "Cannot shift this column further to the left"))
|
||||
(backward-char 1)
|
||||
|
@ -1039,7 +1040,7 @@ the current buffer."
|
|||
(let ((key (overlay-get ov 'org-columns-key)))
|
||||
(when (and key (equal key p) (overlay-start ov))
|
||||
(goto-char (overlay-start ov))
|
||||
(let* ((spec (nth (current-column) org-columns-current-fmt-compiled))
|
||||
(let* ((spec (nth (org-current-text-column) org-columns-current-fmt-compiled))
|
||||
(value
|
||||
(or (cdr (assoc spec
|
||||
(get-text-property (line-beginning-position)
|
||||
|
@ -1049,7 +1050,7 @@ the current buffer."
|
|||
(let ((displayed (org-columns--displayed-value spec value))
|
||||
(format (overlay-get ov 'org-columns-format))
|
||||
(width
|
||||
(aref org-columns-current-maxwidths (current-column))))
|
||||
(aref org-columns-current-maxwidths (org-current-text-column))))
|
||||
(overlay-put ov 'org-columns-value value)
|
||||
(overlay-put ov 'org-columns-value-modified displayed)
|
||||
(overlay-put ov
|
||||
|
|
|
@ -1042,6 +1042,11 @@ Return width in pixels when PIXELS is non-nil."
|
|||
pixel-width
|
||||
(/ pixel-width symbol-width)))))))
|
||||
|
||||
(defmacro org-current-text-column ()
|
||||
"Like `current-column' but ignore display properties."
|
||||
`(string-width (buffer-substring-no-properties
|
||||
(line-beginning-position) (point))))
|
||||
|
||||
(defun org-not-nil (v)
|
||||
"If V not nil, and also not the string \"nil\", then return V.
|
||||
Otherwise return nil."
|
||||
|
|
Loading…
Reference in a new issue