Skip to content

Fix #459: 'find-tag-marker-ring' is an obsolete variable (as of 25.1) #465

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions haskell-commands.el
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
;;; Code:

(require 'cl-lib)
(require 'haskell-compat)
(require 'xref)
(require 'haskell-process)
(require 'haskell-font-lock)
(require 'haskell-interactive-mode)
Expand Down Expand Up @@ -354,19 +356,21 @@ jump to the tag.
Remember: If GHCi is busy doing something, this will delay, but
it will always be accurate, in contrast to tags, which always
work but are not always accurate.

If the definition or tag is found, the location from which you
jumped will be pushed onto `find-tag-marker-ring', so you can
return to that position with `pop-tag-mark'."
If the definition or tag is found, the location from which you jumped
will be pushed onto `xref--marker-ring', so you can return to that
position with `xref-pop-marker-stack'."
(interactive "P")
(let ((initial-loc (point-marker))
(loc (haskell-mode-find-def (haskell-ident-at-point))))
(if loc
(haskell-mode-handle-generic-loc loc)
(call-interactively 'haskell-mode-tag-find))
(unless (equal initial-loc (point-marker))
;; Store position for return with `pop-tag-mark'
(ring-insert find-tag-marker-ring initial-loc))))
(save-excursion
(goto-char initial-loc)
(set-mark-command nil)
;; Store position for return with `xref-pop-marker-stack'
(xref-push-marker-stack)))))

;;;###autoload
(defun haskell-mode-goto-loc ()
Expand All @@ -380,7 +384,7 @@ command from GHCi."
(defun haskell-mode-goto-span (span)
"Jump to the span, whatever file and line and column it needs
to to get there."
(ring-insert find-tag-marker-ring (point-marker))
(xref-push-marker-stack)
(find-file (expand-file-name (plist-get span :path)
(haskell-session-cabal-dir (haskell-interactive-session))))
(goto-char (point-min))
Expand Down
14 changes: 14 additions & 0 deletions haskell-compat.el
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
;;; Commentary:

;;; Code:
(require 'xref nil 'noerror)
(require 'ring)

;; Missing in Emacs23, stolen from Emacs24's `subr.el'
(unless (fboundp 'process-live-p)
Expand All @@ -31,6 +33,18 @@ A process is considered alive if its status is `run', `open',
(memq (process-status process)
'(run open listen connect stop))))

;; Cross-referencing commands have been replaced since Emacs 25.1.
;; These aliases are required to provide backward compatibility.
(unless (fboundp 'xref-push-marker-stack)
(defalias 'xref-pop-marker-stack 'pop-tag-mark)

(defun xref-push-marker-stack ()
"Add point to the marker stack."
(defvar find-tag-marker-ring)
(ring-insert find-tag-marker-ring (point-marker)))

(provide 'xref))

(provide 'haskell-compat)

;;; haskell-compat.el ends here
4 changes: 3 additions & 1 deletion inf-haskell.el
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@

(require 'comint)
(require 'shell) ; For directory tracking.
(require 'haskell-compat)
(require 'xref)
(require 'compile)
(require 'haskell-mode)
(require 'haskell-decl-scan)
Expand Down Expand Up @@ -568,7 +570,7 @@ The returned info is cached for reuse by `haskell-doc-mode'."
(setq file (expand-file-name file)))
;; Push current location marker on the ring used by `find-tag'
(require 'etags)
(ring-insert find-tag-marker-ring (point-marker))
(xref-push-marker-stack)
(pop-to-buffer (find-file-noselect file))
(when line
(goto-char (point-min))
Expand Down