tkf / emacs-ipython-notebook

IPython notebook client in Emacs
tkf.github.com/emacs-ipython-notebook/
GNU General Public License v3.0
548 stars 51 forks source link

Symbol's function definition is void: python-indent-line-function #102

Open captainponky opened 11 years ago

captainponky commented 11 years ago

When I am using ein:notebook-multilang-mode python code does not indent when I press tab. I get an error message "Symbol's function definition is void: python-indent-line-function".

The indentation works fine when I switch to ein:notebook-python-mode though.

tkf commented 11 years ago

Please use M-x ein:dev-bug-report-template to write a bug report.

captainponky commented 11 years ago

When I try that I get a message "call-interactively: Cannot open load file: ein-dev"

tkf commented 11 years ago

I think that means your load-path setting is invalid. Please checkout http://tkf.github.com/emacs-ipython-notebook/#install and https://github.com/tkf/emacs-ipython-notebook/blob/master/CONTRIBUTING.md

You need to get to the point that EIN is installed correctly and ein:dev-bug-report-template works. For example, loading its modules M-: (require 'ein-dev) or M-: (require 'ein-notebook) should work.

jswhite97 commented 11 years ago

I got exactly the same error message when I switched from using python-mode to Fabian Gallina's python.el. When I switched back it went away.

tkf commented 11 years ago

@jswhite97 I am using the new python.el (Fabian Gallina's one) and I have no problem. Probably you are using old version of python.el or loading wrong python.el (the one shipped with Emacs < 24)? You can check it by M-x locate-library RET python RET or M-x ein:dev-bug-report-template RET. To check that your python.el defines python-indent-line-function, you can do <f1> f python-indent-line-function RET. If it shows a *Help* buffer, it means that it is defined and EIN should work.

EIN's support for python-mode.el is very poor so you are missing some features if you are using python-mode.el.

captainponky commented 11 years ago

@tkf Without changing anything with my load-path, loading both modules M-: (require 'ein-dev) and M-: (require 'ein-notebook) worked, with the exception that a warning was issued when loading 'ein-dev: "Warning: defvar ignored because pp-escape-newlines is let-bound". That seemed to cause no problem though and once 'ein-dev was loaded the bug report template opened. I will go through the suggestions and fill it in soon. Thanks.

captainponky commented 11 years ago

It seems I had the opposite problem as jswhite97. After installing Fabian Gallina's python.el the problem went away and python indentation works, and python-indent-line-function is defined. Thanks for the help.

mvcisback commented 11 years ago

Hi, so I was having the same issue described above. While python-indent-line-function was not defined, python-indent-line was. That said there purpose and usage is identical... so (defalias 'python-indent-line-function 'python-indent-line) fixes the issue.

tkf commented 11 years ago

@mvcisback What version of python.el you are using? How do you install? It seems python-indent-line-function is defined in the latest version: https://github.com/fgallina/python.el/blob/master/python.el#L957 But it is doing the same thing as defalias. So I think your workaround is fine.