sagemath / sage-shell-mode

Emacs front end for SageMath
GNU General Public License v3.0
98 stars 16 forks source link

TAB gives `py-forward-statement: buffer not in python-mode` #34

Open johanrosenkilde opened 6 years ago

johanrosenkilde commented 6 years ago

Since upgrading Emacs and a load of packages, hitting TAB in a file with sage-mode often gives me the error py-forward-statement: buffer not in python-mode.

For instance, with a file containing:

def f():
    return 1

I get the error hitting TAB on the return line, but not on the def line.

This also happens in a clean emacs with emacs -q.

johanrosenkilde commented 6 years ago

I'm using MELPA's python-mode 20170803.405

stakemori commented 6 years ago

This is because py-forward-statement checks if major-mode is strictly equal to python-mode (I opened an issue in the python-mode repository https://gitlab.com/python-mode-devs/python-mode/issues/39). The following is a workaround by advice:

    (defun sage-shell-around-advice (fun &rest args)
      (let ((major-mode 'python-mode))
        (apply fun args)))
    (advice-add 'py-forward-statement :around #'sage-shell-around-advice)
    (advice-add 'py-switch-imenu-index-function :around #'sage-shell-around-advice)
johanrosenkilde commented 6 years ago

Thanks for your super-snappy reply! I'll use the workaround for now.