From: Eli Zaretskii Date: Sun, 3 Jan 2016 15:22:06 +0000 (+0200) Subject: Fix compilation next-error in buffers with selective-display X-Git-Tag: emacs-25.0.90~280 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1f680db;p=emacs.git Fix compilation next-error in buffers with selective-display * lisp/progmodes/compile.el (compilation-beginning-of-line): New function. (compilation-internal-error-properties) (compilation-next-error-function, compilation-set-window): Use it. (Bug#1092) --- diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el index e5609b8bc5b..b7ab408f744 100644 --- a/lisp/progmodes/compile.el +++ b/lisp/progmodes/compile.el @@ -1125,6 +1125,16 @@ POS and RES.") (compilation-internal-error-properties file line end-line col end-col type fmt))) +(defun compilation-beginning-of-line (&optional n) + "Like `beginning-of-line', but accounts for lines hidden by `selective-display'." + (if (or (not (eq selective-display t)) + (null n) + (= n 1)) + (beginning-of-line n) + (re-search-forward "[\n\r]" nil 'end (1- n)) + (if (< n 0) + (beginning-of-line)))) + (defun compilation-move-to-column (col screen) "Go to column COL on the current line. If SCREEN is non-nil, columns are screen columns, otherwise, they are @@ -1183,13 +1193,15 @@ FMTS is a list of format specs for transforming the file name. (goto-char (marker-position marker)) ;; Set end-marker if appropriate and go to line. (if (not (or end-col end-line)) - (beginning-of-line (- line marker-line -1)) - (beginning-of-line (- (or end-line line) marker-line -1)) + (compilation-beginning-of-line (- line marker-line -1)) + (compilation-beginning-of-line (- (or end-line line) + marker-line -1)) (if (or (null end-col) (< end-col 0)) (end-of-line) (compilation-move-to-column end-col screen-columns)) (setq end-marker (point-marker)) - (when end-line (beginning-of-line (- line end-line -1)))) + (when end-line + (compilation-beginning-of-line (- line end-line -1)))) (if col (compilation-move-to-column col screen-columns) (forward-to-indentation 0)) @@ -2469,7 +2481,7 @@ This is the value of `next-error-function' in Compilation buffers." ;; Treat file's found lines in forward order, 1 by 1. (dolist (line (reverse (cddr (compilation--loc->file-struct loc)))) (when (car line) ; else this is a filename w/o a line# - (beginning-of-line (- (car line) last -1)) + (compilation-beginning-of-line (- (car line) last -1)) (setq last (car line))) ;; Treat line's found columns and store/update a marker for each. (dolist (col (cdr line)) @@ -2541,7 +2553,7 @@ displays at the top of the window; there is no arrow." (if (integerp compilation-context-lines) (set-window-start w (save-excursion (goto-char mk) - (beginning-of-line + (compilation-beginning-of-line (- 1 compilation-context-lines)) (point))) ;; If there is no left fringe.