0

I am using rope-goto-definition to jump into a module's definition, link. But I cannot jump back to where I was. xref-pop-marker-stack says Marker stack is empty. Is it possible to jump back after running rope-goto-definition? Similiar behavior is done using jedi:goto-definition-pop-marker.


My setup:

(require 'pymacs)
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport 't)
(setq ropemacs-autoimport-modules '("os" "shutil"))

(defun goto-def-or-jedi ()
  "Go to definition of thing at point or do an rgrep in project if that fails"
  (interactive)
  (condition-case nil (rope-goto-definition)
    (error (rope-goto-definition (thing-at-point 'symbol)))))

Note: On there github its said that: ropemacs is completely unmaintained and abandoned. link. So there is no hope to have support from developers. Maybe before jump, the location can be pushed into the stack?

11
  • Is it any particular reason to use rope? With lsp + python, xref-pop-marker-stack works flawlessly.
    – Ian
    Mar 8, 2021 at 14:46
  • just rope has auto-import option but actually no. I just want to jump into definition and get back. I wasn't able to setup of lsp + python for that that's why I also end up in rope. How can I use lsp +python to jump into module definitions?
    – alper
    Mar 8, 2021 at 15:07
  • 1
    I do not know what you tried with lsp, here are two steps to check the combination lsp+python: First install python-language-server as described [github.com/palantir/python-language-server/blob/develop/…, including all 3rd party plugins. (install [all]).
    – Ian
    Mar 9, 2021 at 12:31
  • 1
    Clone [github.com/rksm/emacs-rust-config] this package to check/play with lsp , it does not interfere with your emacs configuration - while this is written for rust, before installing it, just edit the file init.el and comment out the lines 9..35 and 48 and add the following (use-package python :ensure nil), save and install packages. Then open a python file, and M-x lsp to start lsp, M-x lsp-find-definiton of a function and M-x xref-pop-marker-stack to return to source file. Or use the already binded keys s-l g g and M-,.
    – Ian
    Mar 9, 2021 at 12:32
  • Should I add (use-package python :ensure nil), to line 9 ? including ,? How can I install it afterwards? like (load "standalone.el")?
    – alper
    Mar 9, 2021 at 19:38

1 Answer 1

1
+50

you can put a mark at rope-goto-definition with https://www.emacswiki.org/emacs/auto-mark.el

(require 'auto-mark)
  (setq auto-mark-command-class-alist
        '((anything . anything)
          (rope-goto-definition . jump)
          (indent-for-tab-command . ignore)
          (undo . ignore)))
  (setq auto-mark-command-classifiers
        (list (lambda (command)
                (if (and (eq command 'self-insert-command)
                         (eq last-command-event ? ))
                    'ignore))))
  (global-auto-mark-mode 1)

Then you can use pop-global-mark or pop-local-mark depending on whether there is a change of buffer or not. unfortunately with this solution it is up to the user to manage when to use local or global marks.

2
  • 1
    Please, make it into pull request against github.com/python-rope/ropemacs
    – mcepl
    Mar 13, 2021 at 14:47
  • @mcepl This "solution" is a workaround... I don't think it's a good idea to integrate this code. If we want this evolution in ropemacs, we will have to take the time to do it properly.
    – djangoliv
    Mar 15, 2021 at 7:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.