[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#17619: 24.3; js-indent-line mixes display position with character po
From: |
uu1101 |
Subject: |
bug#17619: 24.3; js-indent-line mixes display position with character position |
Date: |
Wed, 28 May 2014 20:16:39 +0200 |
`js-indent-line' mixes up display column with character count. This
results in incorrect indentation when both differ. For example, I am
using the following snippet to ``prettify'' function keywords, resulting
in the characters 'function' being displayed as a single 'f':
-- >8 --
(font-lock-add-keywords
'js-mode `(("\\(function *\\)("
(0 (progn (compose-region (match-beginning 1)
(match-end 1) "\u0192")
nil)))))
-- >8 --
The current implementation of `js-indent-line' is the following:
-- >8 --
(defun js-indent-line ()
"Indent the current line as JavaScript."
(interactive)
(save-restriction
(widen)
(let* ((parse-status
(save-excursion (syntax-ppss (point-at-bol))))
(offset (- (current-column) (current-indentation))))
(indent-line-to (js--proper-indentation parse-status))
(when (> offset 0) (forward-char offset)))))
-- >8 --
Please, notice how `current-column', which returns the _display_
position is used to calculate the offset, but then the result is used
with `forward-char' which expects a character offset instead.
I am using the following modification to work-around the issue, although
it is not correct either: it mixes character count with display offset
returned by `current-indentation'. It fixes the issue with my font-lock
customization.
-- >8 --
(defun js-indent-line ()
"Indent the current line as JavaScript."
(interactive)
(save-restriction
(widen)
(let* ((parse-status (save-excursion (syntax-ppss (point-at-bol))))
(current-char-position (save-excursion
(let ((final (point)))
(beginning-of-line)
(- final (point)))))
(offset (- current-char-position (current-indentation))))
(indent-line-to (js--proper-indentation parse-status))
(when (> offset 0) (forward-char offset)))))
-- >8 --
Best regards,
Urbano Ustero.
- bug#17619: 24.3; js-indent-line mixes display position with character position,
uu1101 <=