Checking a narrowed org subtree confuses langtool
brandelune opened this issue · 3 comments
Open a narrowed org subtree in a separate window or frame and launch langtool-check.
The highlighted areas will be shifted to a position that counts from the beginning of the original buffer, not of that narrowed buffer.
So all the highlighted areas will not correspond to the area that has a problem and the correction will be applied to the wrong area.
Open a narrowed org subtree in a separate window or frame and launch langtool-check.
The highlighted areas will be shifted to a position that counts from the beginning of the original buffer, not of that narrowed buffer.
So all the highlighted areas will not correspond to the area that has a problem and the correction will be applied to the wrong area.
Having the same problem. I thought it was an issue with my setup, but being able to check on only one section of an org file would be great. Not a deal breaker since you can widen out, but when you have a large org file and want to focus in a narrowed tree it would be nice to have langtool available as well.
This could probably be easily patched by rewriting the way langtool-check-buffer
checks for
begin and end as follows:
@@ -1676,8 +1676,12 @@
(langtool--check-command)
;; probablly ok...
(let* ((region-p (langtool-region-active-p))
- (begin (and region-p (region-beginning)))
- (finish (and region-p (region-end))))
+ (begin (cond
+ (region-p (region-beginning))
+ (buffer-narrowed-p) (point-min)))
+ (finish (cond
+ (region-p (region-end))
+ (buffer-narrowed-p) (point-max))))
This way, if the buffer is narrowed, a tmpfile is created
similarly to how langtool.el
handles an active region,
but begin
and finish
will be nil if the buffer is not narrowed (and no region is active)
thus bypassing tmpfile creation as was originally the case.
another workaround is to define an advice that will simply mark whole buffer:
(define-advice langtool-check-buffer (:around (fn &optional lang) fix-narrowing)
(save-mark-and-excursion
(unless (use-region-p)
(let ((inhibit-message t))
(mark-whole-buffer)))
(funcall fn lang)))