diff --git a/idris-commands.el b/idris-commands.el index f7cb915f..00fb1525 100644 --- a/idris-commands.el +++ b/idris-commands.el @@ -229,15 +229,27 @@ A prefix argument forces loading but only up to the current line." for h in hs do (pcase h (`(((:filename ,fn) - (:start ,start-line ,start-col) - (:end ,end-line ,end-col)) + (:start ,start-line-raw ,start-col-raw) + (:end ,end-line-raw ,end-col-raw)) ,props) (when (string= (file-name-nondirectory fn) (file-name-nondirectory (buffer-file-name))) - (idris-highlight-input-region (current-buffer) + (let ((start-line (if (>=-protocol-version 2 1) + (+ 1 start-line-raw) + start-line-raw)) + (start-col (if (>=-protocol-version 2 1) + (+ 1 start-col-raw) + start-col-raw)) + (end-line (if (>=-protocol-version 2 1) + (+ 1 end-line-raw) + end-line-raw )) + (end-col (if (>= idris-protocol-version 2 1) + (+ 1 end-col-raw) + end-col-raw ))) + (idris-highlight-input-region (current-buffer) start-line start-col end-line end-col - props)))))) + props))))))) (_ (idris-make-clean) (idris-update-options-cache) diff --git a/idris-common-utils.el b/idris-common-utils.el index d08b451a..be9b8c43 100644 --- a/idris-common-utils.el +++ b/idris-common-utils.el @@ -402,4 +402,12 @@ relative to SRC-DIR" (when (file-exists-p lidr) (make-link lidr)))))) +(defvar idris-protocol-version 0 "The protocol version") +(defvar idris-protocol-version-minor 0 "The protocol minor version") + +(defun >=-protocol-version (major minor) + (or (> idris-protocol-version major) + (and (>= idris-protocol-version major) + (>= idris-protocol-version-minor minor)))) + (provide 'idris-common-utils) diff --git a/idris-highlight-input.el b/idris-highlight-input.el index 56f46a62..396ff202 100644 --- a/idris-highlight-input.el +++ b/idris-highlight-input.el @@ -60,14 +60,14 @@ See Info node `(elisp)Overlay Properties' to understand how ARGS are used." (widen) (if (or (> end-line start-line) (and (= end-line start-line) - (>= end-col start-col))) + (> end-col start-col))) (with-current-buffer buffer (save-excursion (goto-char (point-min)) (let* ((start-pos (+ (line-beginning-position start-line) (idris-highlight-column start-col))) (end-pos (+ (line-beginning-position end-line) - (idris-highlight-column (+ 1 end-col)))) + (idris-highlight-column end-col))) (highlight-overlay (make-overlay start-pos end-pos (get-buffer buffer)))) (overlay-put highlight-overlay 'idris-source-highlight t) diff --git a/idris-warnings.el b/idris-warnings.el index bec2ad1a..927d6a9c 100644 --- a/idris-warnings.el +++ b/idris-warnings.el @@ -81,10 +81,18 @@ WARNING is of form (filename (startline startcolumn) (endline endcolumn) message As of 20140807 (Idris 0.9.14.1-git:abee538) (endline endcolumn) is mostly the same as (startline startcolumn) " (cl-destructuring-bind (filename sl1 sl2 message spans) warning - (let ((startline (nth 0 sl1)) - (startcol (1- (nth 1 sl1))) - (endline (nth 0 sl2)) - (endcol (1- (nth 1 sl2)))) + (let ((startline (if (>=-protocol-version 2 1) + (1+ (nth 0 sl1)) + (nth 0 sl1))) + (startcol (if (>=-protocol-version 2 1) + (nth 1 sl1) + (1- (nth 1 sl1)))) + (endline (if (>=-protocol-version 2 1) + (1+ (nth 0 sl2)) + (nth 0 sl2))) + (endcol (if (>=-protocol-version 2 1) + (nth 1 sl2) + (1- (nth 1 sl2))))) (push (list filename startline startcol message spans) idris-raw-warnings) (let* ((fullpath (concat (file-name-as-directory idris-process-current-working-directory) filename)) diff --git a/inferior-idris.el b/inferior-idris.el index ac818c2e..7f73923f 100644 --- a/inferior-idris.el +++ b/inferior-idris.el @@ -66,12 +66,11 @@ (defvar idris-connection nil "The Idris connection.") -(defvar idris-protocol-version 0 "The protocol version") - (defun idris-version-hook-function (event) (pcase event - (`(:protocol-version ,version ,_target) + (`(:protocol-version ,version ,minor) (setf idris-protocol-version version) + (setf idris-protocol-version-minor minor) (remove-hook 'idris-event-hooks 'idris-version-hook-function) t)))