<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikemacs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Matthias</id>
	<title>WikEmacs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wikemacs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Matthias"/>
	<link rel="alternate" type="text/html" href="https://wikemacs.org/wiki/Special:Contributions/Matthias"/>
	<updated>2026-04-26T09:59:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wikemacs.org/index.php?title=Talk:Java&amp;diff=47613</id>
		<title>Talk:Java</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Talk:Java&amp;diff=47613"/>
		<updated>2016-09-19T10:43:01Z</updated>

		<summary type="html">&lt;p&gt;Matthias: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have added a paragraph with a list of articles that talk about java editing with emacs. I hope it is filled soon and gives a nice collection of emacs and java related reading sources.&lt;br /&gt;
&lt;br /&gt;
[[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 12:45, 13 September 2016 (EDT) It's a good initiative, however imo it's actually better to incorporate the interesting parts of those articles into wikemacs.&lt;br /&gt;
&lt;br /&gt;
[[User:Matthias|Matthias]] Would that not get to lengthy once a couple of articles are collected?&lt;br /&gt;
&lt;br /&gt;
[[User:Elvince|Elvince]] ([[User talk:Elvince|talk]]) 16:51, 18 September 2016 (EDT) It may become lengthy, but I believe it's a good thing, because we can structure the content very well, and that is the goal of a wiki, to document stuff as well as possible. I really think it's good to have a lot of doc in one, well structured place, rather than in many blog posts. I hope that the python page, that I edited a lot, is readable: http://wikemacs.org/wiki/Python It has a big table of contents that help find what we're interested in quickly. You can also write a guick summary and refer to the post if it's big, that's a good start already. (anyway, any edit on wikemacs is cool :) )&lt;br /&gt;
&lt;br /&gt;
[[User:Matthias|Matthias]] Admitted - Python article looks good! However my level as a &amp;quot;Java Developer using Emacs&amp;quot; is absolut beginner. So the article collection I have in mind supports my current level: I collect advice and try to find my preferences. I think this is integral part of every learning process and a good wiki entry on any topic should support me.&lt;/div&gt;</summary>
		<author><name>Matthias</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Python&amp;diff=47612</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Python&amp;diff=47612"/>
		<updated>2016-09-19T10:39:55Z</updated>

		<summary type="html">&lt;p&gt;Matthias: There are rumors about emacs 23 supporting packages.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Default modes ==&lt;br /&gt;
&lt;br /&gt;
There are a number of python modes for Emacs.&lt;br /&gt;
fgallina's [https://github.com/fgallina/python.el python.el] is the python.el included in Emacs 24.2 and onwards.&lt;br /&gt;
&lt;br /&gt;
== All-in-one solutions ==&lt;br /&gt;
&lt;br /&gt;
=== emacs-for-python ===&lt;br /&gt;
&lt;br /&gt;
'''emacs-for-python''' is a bundle of the above modes (and more), and it's an easy way to turn Emacs into a Python IDE.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/gabrielelanaro/emacs-for-python/ emacs-for-python at github]&lt;br /&gt;
&lt;br /&gt;
=== Elpy ===&lt;br /&gt;
&lt;br /&gt;
'''Elpy''' is a collection of elisp packages for Python too.&lt;br /&gt;
&lt;br /&gt;
https://github.com/jorgenschaefer/elpy/wiki/Features&lt;br /&gt;
&lt;br /&gt;
=== EMP: EMacs Python ===&lt;br /&gt;
&lt;br /&gt;
The goal of '''emp''' is to take all the best development components available for Python, and combine it conveniently under Emacs. It builds on top of elpy, and provides even more bindings.&lt;br /&gt;
&lt;br /&gt;
https://kootenpv.github.io/2016-01-01-emacs-python&lt;br /&gt;
&lt;br /&gt;
== Refactoring ==&lt;br /&gt;
&lt;br /&gt;
=== rope &amp;amp; ropemacs ===&lt;br /&gt;
&lt;br /&gt;
==== Presentation ====&lt;br /&gt;
&lt;br /&gt;
'''rope''' is a library for refactoring and manipulating Python code, '''pymacs''' is an interface between emacs lisp and python, and '''{{ModeLink|ropemacs}}''' is an Emacs interface to the rope library which uses rope and pymacs.&lt;br /&gt;
&lt;br /&gt;
If you do some search and replace of code objects in your code and find it sometimes tricky, and/or you need to do it in more than one file, then you should consider a good tool of refactoring.&lt;br /&gt;
&lt;br /&gt;
But Rope can do more than this simple example, it can:&lt;br /&gt;
&lt;br /&gt;
* Rename anything&lt;br /&gt;
* Extract method/local variable &lt;br /&gt;
* Change method signature &lt;br /&gt;
* Perform cross-project refactorings&lt;br /&gt;
* Support Mercurial, GIT, Darcs and SVN in refactorings &lt;br /&gt;
&lt;br /&gt;
Rope can also help IDE's with: &lt;br /&gt;
&lt;br /&gt;
* Auto-completion&lt;br /&gt;
* Finding definition location&lt;br /&gt;
* Getting pydoc&lt;br /&gt;
* Finding occurrences&lt;br /&gt;
* Organizing imports (removing unused and duplicate imports and sorting them)&lt;br /&gt;
* Generating python elements &lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
===== With el-get =====&lt;br /&gt;
&lt;br /&gt;
So an easy way is to use an [[el-get]] recipe: '''M-x el-get-install ropemacs'''. It installs and build Pymacs, rope and ropemacs. The difference from the solution using pip is that it setups the Emacs side of Pymacs correctly.&lt;br /&gt;
&lt;br /&gt;
===== Manually =====&lt;br /&gt;
&lt;br /&gt;
You can follow the instructions as given [http://stackoverflow.com/a/22496541/4018217 here] ,if you don't want to use marmalade you can use the following instructions .&lt;br /&gt;
&lt;br /&gt;
    sudo pip install rope ropemacs&lt;br /&gt;
&lt;br /&gt;
As of February 2014 you can't install Pymacs via pip, therefore:&lt;br /&gt;
&lt;br /&gt;
    git clone http://github.com/pinard/pymacs&lt;br /&gt;
    cd pymacs&lt;br /&gt;
    make check&lt;br /&gt;
    sudo make install&lt;br /&gt;
&lt;br /&gt;
make check ensures the prerequisites. sudo make install puts Pymacs module in Python local modules path, usually /usr/local/lib/python2.7/dist-packages/. People generally frown upon make install, because if you lose the Makefile, it can become hard to cleanly uninstall. But you shouldn't fear it, as pip uses the same directory, so pip uninstall pymacs will work.&lt;br /&gt;
&lt;br /&gt;
'''After you do the make install of pymacs do not delete the folder.Copy the file pymacs.el to ~/.emacs.d/site-lisp/'''&lt;br /&gt;
&lt;br /&gt;
Now add path of pyamcs.el to your ~/.emacs file,using this code:&lt;br /&gt;
    (setq emacs-config-path &amp;quot;~/.emacs.d/&amp;quot;) &lt;br /&gt;
    (setq base-lisp-path &amp;quot;~/.emacs.d/site-lisp/&amp;quot;)&lt;br /&gt;
    (setq site-lisp-path (concat emacs-config-path &amp;quot;/site-lisp&amp;quot;))&lt;br /&gt;
    (defun add-path (p)&lt;br /&gt;
      (add-to-list 'load-path (concat base-lisp-path p)))&lt;br /&gt;
    (add-path &amp;quot;&amp;quot;)&lt;br /&gt;
    (add-to-list 'load-path &amp;quot;~/.emacs.d&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
You can now lazily load ropemacs or load it at runtime.For lazy evaluation add this to your .emacs file:&lt;br /&gt;
    (defun load-ropemacs ()&lt;br /&gt;
      &amp;quot;Load pymacs and ropemacs&amp;quot;&lt;br /&gt;
      (interactive)&lt;br /&gt;
      (require 'pymacs)&lt;br /&gt;
      (pymacs-load &amp;quot;ropemacs&amp;quot; &amp;quot;rope-&amp;quot;)&lt;br /&gt;
      ;; Automatically save project python buffers before refactorings&lt;br /&gt;
      (setq ropemacs-confirm-saving 'nil)&lt;br /&gt;
    )&lt;br /&gt;
    (global-set-key &amp;quot;\C-xpl&amp;quot; 'load-ropemacs)&lt;br /&gt;
&lt;br /&gt;
use c-xpl to load ropemacs.Read more about it [https://github.com/python-rope/ropemacs#setting-up here]&lt;br /&gt;
&lt;br /&gt;
=== Rope &amp;amp; traad ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/abingham/traad Traad] is a client-server approach to using the rope Python refactory library. It involves two basic components:&lt;br /&gt;
* A HTTP server exposing the rope API via JSON, and&lt;br /&gt;
* Client libraries for talking to the server&lt;br /&gt;
Since rope is written in Python, any tool that wants to use rope needs to either embed Python, or it needs to find a way to communicate with a Python process running rope. The embedding approach is difficult if the target environment is not written in Python, and it also faces challenges when dealing with more than one Python version.&lt;br /&gt;
&lt;br /&gt;
So traad aims to simplify communication with rope running in an independent process. HTTP communication and JSON data handling is well supported in many, many languages, so any environment that wants to use rope should be able to easily communicate with traad.&lt;br /&gt;
&lt;br /&gt;
=== Projectile - replace in project ===&lt;br /&gt;
&lt;br /&gt;
This is not specific to Python but is very helpful anyway. [[Projectile]] has a function '''projectile-replace''' which interactively offers to replace all occurrences of a term in all the files of the project. So it's handy to rename a method.&lt;br /&gt;
&lt;br /&gt;
=== Refactor with Elpy ===&lt;br /&gt;
&lt;br /&gt;
See Elpy's documentation: http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#refactoring&lt;br /&gt;
&lt;br /&gt;
One can refactor code (with rope), format code, edit all the occurences of the symbol at point simultaneously, and fix imports.&lt;br /&gt;
&lt;br /&gt;
== Auto-Completion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Jedi ===&lt;br /&gt;
&lt;br /&gt;
Jedi.el is a Python auto-completion package for Emacs. It aims at helping your Python coding in a non-destructive way. It also helps you to find information about Python objects, such as docstring, function arguments and code location.&lt;br /&gt;
&lt;br /&gt;
Jedi is simple to install and it works out of the box.&lt;br /&gt;
&lt;br /&gt;
See screenshots and get the full documentation : http://tkf.github.io/emacs-jedi/released/&lt;br /&gt;
&lt;br /&gt;
Jedi's official page: http://jedi.jedidjah.ch/en/latest/&lt;br /&gt;
&lt;br /&gt;
==== Installation ====&lt;br /&gt;
&lt;br /&gt;
Install Jedi.el via el-get, Marmalade or MELPA (see install for more info) and add this to your Emacs configuration:&lt;br /&gt;
    (add-hook 'python-mode-hook 'jedi:setup)&lt;br /&gt;
    (setq jedi:setup-keys t)                      ; optional&lt;br /&gt;
    (setq jedi:complete-on-dot t)                 ; optional&lt;br /&gt;
&lt;br /&gt;
or call M-x jedi:setup&lt;br /&gt;
&lt;br /&gt;
''Note'': it's nice to use it in a python interpreter inside emacs :)&lt;br /&gt;
&lt;br /&gt;
=== Anaconda ===&lt;br /&gt;
&lt;br /&gt;
'''Anaconda-mode''' is a mode for '''code navigation, documentation lookup''' and '''completion''' for Python.&lt;br /&gt;
&lt;br /&gt;
It runs on '''emacs 24.3''' with python &amp;gt;= 2.6. &lt;br /&gt;
&lt;br /&gt;
It provides:&lt;br /&gt;
&lt;br /&gt;
* context-sensitive code completion for Python&lt;br /&gt;
* jump to definition&lt;br /&gt;
* find references&lt;br /&gt;
* view documentation&lt;br /&gt;
* virtualenv management&lt;br /&gt;
&lt;br /&gt;
The package is available in [[MELPA]]. For more information, [https://github.com/proofit404/anaconda-mode read its documentation].&lt;br /&gt;
&lt;br /&gt;
== Code Checker ==&lt;br /&gt;
&lt;br /&gt;
=== Flymake ===&lt;br /&gt;
&lt;br /&gt;
[[Flymake|flymake]] is a on-the-fly syntax checker for Emacs. &lt;br /&gt;
We can use it alongside with [[flyspell|flyspell]].&lt;br /&gt;
&lt;br /&gt;
To run pep8, pylint, pyflakes and unit-tests (with nose), you can be interested in using [https://github.com/akaihola/flymake-python flymake-python].&lt;br /&gt;
&lt;br /&gt;
Don't forget about '''pylint''' too.&lt;br /&gt;
&lt;br /&gt;
== Indexing sources: ctags, cscope, pycscope == &lt;br /&gt;
&lt;br /&gt;
Indexing sources allows you to do neat things, like going to the definition of a function or finding which functions are calling another one.&lt;br /&gt;
&lt;br /&gt;
=== etags, ctags ===&lt;br /&gt;
&lt;br /&gt;
'''Etags''' (Exuberant Ctags) generates an index (or tag) file of language objects found in source files that allows these items to be quickly and easily located by a text editor or other utility. A tag signifies a language object for which an index entry is available (or, alternatively, the index entry created for that object). Etags is a multilingual implementation of '''ctags'''.&lt;br /&gt;
&lt;br /&gt;
The primary use for the tags files is looking up class/method/function/constant/etc declaration/definitions. Cscope is more powerful (see below).&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
Generate the tags with this command at the root of your project:&lt;br /&gt;
&lt;br /&gt;
     find . -name &amp;quot;*.py&amp;quot; -print | etags -&lt;br /&gt;
&lt;br /&gt;
it creates the file TAGS.&lt;br /&gt;
&lt;br /&gt;
Note that projects like [[Projectile]] or [[Helm]] provide an integrated use of etags (finding one, re-generating the index, etc).&lt;br /&gt;
&lt;br /&gt;
=== cscope ===&lt;br /&gt;
&lt;br /&gt;
'''cscope''' is a much more powerful beast. While it operates on more or less the same principle (generating a file of useful metadata) it allows you do some fancier things like find all references to a symbol, see where a function is being invoked, etc.+ (you can find definitions as well). &lt;br /&gt;
&lt;br /&gt;
It was originally designed for C and C++, but thanks to version 0.3 of '''pycscope''', pythonistas can make use of it.&lt;br /&gt;
&lt;br /&gt;
==== usage ====&lt;br /&gt;
&lt;br /&gt;
The following commands should get you running: &lt;br /&gt;
&lt;br /&gt;
    apt-get install cscope&lt;br /&gt;
    pip install pycscope&lt;br /&gt;
    # in project base dir:&lt;br /&gt;
    find . -name '*.py' &amp;gt; cscope.files&lt;br /&gt;
    cscope -R &lt;br /&gt;
&lt;br /&gt;
now install the '''xcscope''' emacs package with [[ELPA]] and require it: &lt;br /&gt;
    (require 'xcscope)&lt;br /&gt;
&lt;br /&gt;
When done, you can either enable the mode with '''cscope-minor-mode''' (which will add a menu you are free to explore) or call some functions like {{Command|cscope-find-global-definition}}, {{Command|cscope-find-functions-calling-this-function}}, etc.&lt;br /&gt;
&lt;br /&gt;
==== Interactivity with helm-cscope ====&lt;br /&gt;
&lt;br /&gt;
You can do all that interactively with [https://github.com/sergey-pashaev/helm-cscope helm-cscope]: when you are on symbol, just call {{Command|helm-cscope-find-global-definition}} (for example) and enjoy the nice interactive interface.&lt;br /&gt;
&lt;br /&gt;
== Running tests ==&lt;br /&gt;
&lt;br /&gt;
Elpy has commands to run either all tests of the current buffer or only the test we are on. It supports launchers for '''Django''' (thus using &amp;quot;manage.py test&amp;quot;), '''pytest''' and '''nose'''. See http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#testing&lt;br /&gt;
&lt;br /&gt;
If you wish to modify the way it runs test, set the following variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(setq elpy-test-&amp;lt;django, nose, pytest&amp;gt;-runner-command '(&amp;quot;./manage.py&amp;quot; &amp;quot;test&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
Well, let's start with the debuggers documentation:&lt;br /&gt;
&lt;br /&gt;
* [https://docs.python.org/3/library/pdb.html pdb doc]&lt;br /&gt;
* [https://pypi.python.org/pypi/pdbpp/ pdb++] has a few more commands&lt;br /&gt;
* [https://pypi.python.org/pypi/ipdb ipdb] to make use of ipython (aka jupyter)&lt;br /&gt;
&lt;br /&gt;
=== Ipdb, ipython debugger ===&lt;br /&gt;
&lt;br /&gt;
If you call ipdb, the execution will stop and give a nice ipython-looking prompt.&lt;br /&gt;
Just add the line &lt;br /&gt;
&lt;br /&gt;
    import ipdb; ipdb.set_trace()&lt;br /&gt;
&lt;br /&gt;
Now you can use the usual commands: '''c''' to continue the execution, '''n''' to execute the next one, '''s''' to step into the next function call, '''l''' to list the source code, '''!''' to execute a statement in the current context, etc.&lt;br /&gt;
&lt;br /&gt;
Note: You can use [[yasnippet]] to quickly enter this sentence, or just a simple function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
(defun python-add-breakpoint ()&lt;br /&gt;
  &amp;quot;Add a break point&amp;quot;&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (newline-and-indent)&lt;br /&gt;
  (insert &amp;quot;import ipdb; ipdb.set_trace()&amp;quot;)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;^[ ]*import ipdb; ipdb.set_trace()&amp;quot;))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use the following to highlight this line, and not forget it :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;scheme&amp;quot;&amp;gt;&lt;br /&gt;
; Highlight the call to ipdb&lt;br /&gt;
; src http://pedrokroger.com/2010/07/configuring-emacs-as-a-python-ide-2/&lt;br /&gt;
(defun annotate-pdb ()&lt;br /&gt;
  (interactive)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;import ipdb&amp;quot;)&lt;br /&gt;
  (highlight-lines-matching-regexp &amp;quot;ipdb.set_trace()&amp;quot;))&lt;br /&gt;
(add-hook 'python-mode-hook 'annotate-pdb)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And just delete every breakpoints of the buffer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;list&amp;quot;&amp;gt;&lt;br /&gt;
(defun ipdb-cleanup ()&lt;br /&gt;
    (interactive)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (replace-regexp &amp;quot;.*ipdb.set_trace().*\n&amp;quot; &amp;quot;&amp;quot; nil (point-min) (point-max))&lt;br /&gt;
      ;; (save-buffer)&lt;br /&gt;
      ))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== pdb track ===&lt;br /&gt;
&lt;br /&gt;
If you use emacs-for-python given above, you can track your source code while debugging with pdbtrack.&lt;br /&gt;
&lt;br /&gt;
A tool to use in a non-emacs terminal would be [https://pypi.python.org/pypi/pdbpp/ pdbpp]&lt;br /&gt;
&lt;br /&gt;
=== Realgud, a front end to many debuggers to stay in the source window ===&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/realgud/realgud Realgud]. The goal is to call the debugger from within emacs and manipulate it ('''c'''ontinue, '''n'''ext commands, setting breakpoints, etc) within the source window.&lt;br /&gt;
&lt;br /&gt;
=== Redefine the code being run in the debugger session ===&lt;br /&gt;
&lt;br /&gt;
The tip in [http://wenshanren.org/?p=351 this article] makes use of the pdb feature to execute code in the context of the current stack frame with the &amp;quot;!&amp;quot; command (which can actually be omitted. See [https://docs.python.org/3/library/pdb.html the pdb doc]) and it uses an emacs package to make it much easier to write code blocks for the (i)pdb prompt (à la org-mode code blocks).&lt;br /&gt;
&lt;br /&gt;
=== M-x compile and breakpoints ===&lt;br /&gt;
&lt;br /&gt;
You may run your script from a real terminal, from emacs with M-x shell or with M-x compile. If you like the latter you'll notice that it hangs if you set breakpoints inside your code. The function below checks if your code has breakpoints and if so, it gives you the hand for the debugger prompt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lisp&amp;quot;&amp;gt;&lt;br /&gt;
; thanks to https://masteringemacs.org/article/compiling-running-scripts-emacs (slightly modified)&lt;br /&gt;
(defadvice compile&lt;br /&gt;
    (before ad-compile-smart activate)&lt;br /&gt;
  &amp;quot;Advises `compile' so it sets the argument COMINT to t if breakpoints are present in `python-mode' files&amp;quot;&lt;br /&gt;
  (when (derived-mode-p major-mode 'python-mode)&lt;br /&gt;
    (save-excursion&lt;br /&gt;
      (save-match-data (goto-char (point-min))&lt;br /&gt;
                       (if (search-forward &amp;quot;ipdb.set_trace()&amp;quot;&lt;br /&gt;
                                           (point-max)&lt;br /&gt;
                                           t)&lt;br /&gt;
                           (progn (ad-set-arg 1 t)&lt;br /&gt;
                                  (switch-to-buffer-other-window &amp;quot;*compilation*&amp;quot;)))))))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Now just run '''M-x compile''' as usual.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Eldoc: argument list in the echo area ===&lt;br /&gt;
&lt;br /&gt;
Eldoc is a MinorMode which shows you, in the echo area, the argument list of the function call you are currently writing. It works out of the box for elisp editing and for modes that implement its support, such as python-mode. You just have to call '''eldoc-mode'''.&lt;br /&gt;
&lt;br /&gt;
To always enable it:&lt;br /&gt;
&lt;br /&gt;
    (add-hook 'python-mode-hook 'eldoc-mode)&lt;br /&gt;
&lt;br /&gt;
=== helm-pydoc ===&lt;br /&gt;
&lt;br /&gt;
'''helm-pydoc''' is a little utility that lets you interactively select a module you want read the doc and displays it in another buffer.&lt;br /&gt;
&lt;br /&gt;
=== pydoc linkification ===&lt;br /&gt;
&lt;br /&gt;
If you've ever used the emacs lisp documentation system, you may find that the pydoc is poorer in functionnalities:&lt;br /&gt;
* there is no direct link to code source&lt;br /&gt;
* there is no &amp;quot;back&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
John Kitchin's pydoc aims at fixing that with more enhancements, like a bit of source fontification. See more at [http://kitchingroup.cheme.cmu.edu/blog/2014/12/20/A-new-mode-for-Python-documentation/ his presentation] and [https://github.com/jkitchin/jmax/blob/master/pydoc.el on github].&lt;br /&gt;
&lt;br /&gt;
=== info format ===&lt;br /&gt;
&lt;br /&gt;
Another way to read the python documentation is in the texinfo format. You'll need to install the package '''python-info''' [http://melpa.org/#/python-info on MELPA] and go through [https://bitbucket.org/jonwaltman/pydoc-info/ the installation process].&lt;br /&gt;
&lt;br /&gt;
== Other tools ==&lt;br /&gt;
&lt;br /&gt;
=== Virtual environments ===&lt;br /&gt;
&lt;br /&gt;
Some tools allow to apply the changes of virtual environment activation inside emacs. They make '''M-x compile''' aware of the environment, etc.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/porterjamesj/virtualenvwrapper.el virtualenvwrapper] emulates much of the functionnality of '''virtualenvwrapper''', integrates well with '''M-x shell''' or '''eshell''', is aware of hooks, has an automatic activation by project and integrates in the mode line.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/jorgenschaefer/pyvenv pyvenv] sets the python path, uses virtualwrapper's hooks, ...&lt;br /&gt;
&lt;br /&gt;
=== Pymacs ===&lt;br /&gt;
&lt;br /&gt;
'''{{ModeLink|Pymacs}}''' is an Emacs extension that enables the use of Python alongside with Emacs Lisp.&lt;br /&gt;
&lt;br /&gt;
[http://pymacs.progiciels-bpi.ca/index.html Pymacs homepage]&lt;br /&gt;
&lt;br /&gt;
=== include import statements or remove unused ===&lt;br /&gt;
&lt;br /&gt;
[[Ropemacs]] (see above) is a plugin for performing python refactorings in emacs. It uses rope library and pymacs. It has '''rope-auto-import''', so if you write &lt;br /&gt;
&lt;br /&gt;
    rmtree&lt;br /&gt;
&lt;br /&gt;
and then execute {{Command|rope-auto-import}}, &lt;br /&gt;
&lt;br /&gt;
    from shutil import rmtree&lt;br /&gt;
&lt;br /&gt;
is inserted at the top of the file.&lt;br /&gt;
&lt;br /&gt;
Unfortunately Ropemacs can not do non-relative imports, it can only create imports of the &amp;quot;from X import Y&amp;quot; variety (if you type ''shutil.rmtree'' it doesn't write ''import shutil'').&lt;br /&gt;
&lt;br /&gt;
[https://github.com/Wilfred/pyimport pyimport] can add import statements or remove the unused ones (with pyflakes).&lt;br /&gt;
&lt;br /&gt;
[http://elpy.readthedocs.io/en/latest/ide.html?highlight=django#refactoring Elpy] too can import missing ones.&lt;br /&gt;
&lt;br /&gt;
See also [https://gitlab.com/emacs-stuff/python-import-add/ a snippet] to add many imports at once.&lt;br /&gt;
&lt;br /&gt;
=== Sort import statements ===&lt;br /&gt;
&lt;br /&gt;
See the '''py-isort''' [[Melpa]] package to automatically sort import statements.&lt;br /&gt;
&lt;br /&gt;
=== pip-requirements mode ===&lt;br /&gt;
&lt;br /&gt;
[http://melpa.org/#/pip-requirements pip-requirements] (in MELPA) is a major mode for editing pip requirements files, with the following features:&lt;br /&gt;
* syntax highlighting&lt;br /&gt;
* Auto completion of package names from PyPI&lt;br /&gt;
* togglable comments&lt;br /&gt;
&lt;br /&gt;
=== Code coverage with Python 3 ===&lt;br /&gt;
&lt;br /&gt;
There's a tool to highlight in real time the lines that are (not) covered by your unit tests. It's called [https://github.com/mattharrison/pycoverage.el pycoverage.el] and it is in [[melpa]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
You'll be certainly interested in the following packages (that you will find on [[ELPA]] or MELPA):&lt;br /&gt;
&lt;br /&gt;
=== '''Magit''', a git interface === &lt;br /&gt;
&lt;br /&gt;
Emacs + git is magic : see [[magit]]&lt;br /&gt;
&lt;br /&gt;
=== Code navigation ===&lt;br /&gt;
&lt;br /&gt;
Get started with [[imenu]] and '''helm-imenu''' (see [[helm]]).&lt;br /&gt;
&lt;br /&gt;
=== '''Yasnippet''', a template system ===&lt;br /&gt;
&lt;br /&gt;
[[yasnippet]]&lt;br /&gt;
&lt;br /&gt;
=== '''helm-pydoc''' to browse the documentation of installed packages and import one ===&lt;br /&gt;
&lt;br /&gt;
=== '''pungi''' to integrate jedi, virtualenv and buildout ===&lt;br /&gt;
&lt;br /&gt;
=== How to do code folding ===&lt;br /&gt;
&lt;br /&gt;
See [[folding]]&lt;br /&gt;
&lt;br /&gt;
=== other '''ELPA packages''' === &lt;br /&gt;
&lt;br /&gt;
If you're running Emacs with package support (usually Emacs 24 and later), check out what is available in [[ELPA]]:&lt;br /&gt;
; {{Command | list-packages}}  :  and see flymake-pyhon-pyflakes, flymake-shell, abl-mode (a python TDD minor-mode), nose (easy python test-running in emacs), visual-regexp / visual-regexp-steroids, python-magic and more.&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming languages]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Matthias</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Talk:Java&amp;diff=47596</id>
		<title>Talk:Java</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Talk:Java&amp;diff=47596"/>
		<updated>2016-09-12T08:23:34Z</updated>

		<summary type="html">&lt;p&gt;Matthias: Talk about if its a good idea to have a list of java and emacs related articles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I have added a paragraph with a list of articles that talk about java editing with emacs. I hope it is filled soon and gives a nice collection of emacs and java related reading sources.&lt;/div&gt;</summary>
		<author><name>Matthias</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Java&amp;diff=47595</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Java&amp;diff=47595"/>
		<updated>2016-09-12T07:56:53Z</updated>

		<summary type="html">&lt;p&gt;Matthias: Added new hopefully to be extended list of articles that talk about editing java with emacs.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Java''' support comes shipped with Emacs in the form of [[java-mode]].&lt;br /&gt;
&lt;br /&gt;
==List of notable Java modes==&lt;br /&gt;
* [https://github.com/espenhw/malabar-mode malabar-mode] is a Java mode which was originally by Espen Wiborg. It has Maven integration, JUnit integration, support for Java generics, simple refactoring support and more. (no longer maintained)&lt;br /&gt;
* [https://github.com/jdee-emacs/jdee JDEE], Java Development Environment for Emacs, has intelligent Java code completion among other things. (jdee is currently maintained on github)&lt;br /&gt;
* {{ModeLink|java-mode}} provides basic Java 1.4 syntax highlighting.&lt;br /&gt;
* [https://github.com/senny/emacs-eclim emacs-eclim] communicates with the [http://eclim.org/ eclim] plugin in Eclipse to get a headless Eclipse instance do the heavy-lifting of completion, simple refactoring, building, and code navigation when editing files in Emacs.&lt;br /&gt;
* [https://github.com/mopemope/meghanada-emacs meghanada-emacs] aims to help with Gradle and Maven, code completion, jumping to declarations and more. It's based on meghanada-server written in Java, for JDB &amp;gt;= 1.8.&lt;br /&gt;
&lt;br /&gt;
==See also ==&lt;br /&gt;
[[java-mode]]&lt;br /&gt;
&lt;br /&gt;
==List of Java editing related Articles==&lt;br /&gt;
* [http://mp.vv.si/blog/emacs/coding-in-java-with-emacs-and-jdee/ jdee and checkstyle]&lt;br /&gt;
[[Category:Programming languages]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Matthias</name></author>
	</entry>
	<entry>
		<id>https://wikemacs.org/index.php?title=Java&amp;diff=47594</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Java&amp;diff=47594"/>
		<updated>2016-09-12T07:53:57Z</updated>

		<summary type="html">&lt;p&gt;Matthias: Jdee moved to github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Java''' support comes shipped with Emacs in the form of [[java-mode]].&lt;br /&gt;
&lt;br /&gt;
==List of notable Java modes==&lt;br /&gt;
* [https://github.com/espenhw/malabar-mode malabar-mode] is a Java mode which was originally by Espen Wiborg. It has Maven integration, JUnit integration, support for Java generics, simple refactoring support and more. (no longer maintained)&lt;br /&gt;
* [https://github.com/jdee-emacs/jdee JDEE], Java Development Environment for Emacs, has intelligent Java code completion among other things. (jdee is currently maintained on github)&lt;br /&gt;
* {{ModeLink|java-mode}} provides basic Java 1.4 syntax highlighting.&lt;br /&gt;
* [https://github.com/senny/emacs-eclim emacs-eclim] communicates with the [http://eclim.org/ eclim] plugin in Eclipse to get a headless Eclipse instance do the heavy-lifting of completion, simple refactoring, building, and code navigation when editing files in Emacs.&lt;br /&gt;
* [https://github.com/mopemope/meghanada-emacs meghanada-emacs] aims to help with Gradle and Maven, code completion, jumping to declarations and more. It's based on meghanada-server written in Java, for JDB &amp;gt;= 1.8.&lt;br /&gt;
&lt;br /&gt;
==See also ==&lt;br /&gt;
[[java-mode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Programming languages]]&lt;br /&gt;
[[Category:Java]]&lt;/div&gt;</summary>
		<author><name>Matthias</name></author>
	</entry>
</feed>