.. role:: file(literal) ======================= Giovanni Giorgi's files ======================= .. contents:: .. sectnum:: This page documents the :file:`contrib/Giorgi/` subdirectory of the Pymacs distribution. First install Pymacs from the top-level of the distribution, this has the side-effect of adjusting a few files in this directory. Once this done, return to this directory, then run ``python setup.py install``. Here, you'll find miscellaneous files contributed by Giovanni Giorgi, to be sorted, documented, maybe deleted, at least pondered in one way or another. The remainder of this page comes from Giovanni's writing, waiting for Giovanni to revise its contents. Introduction ============ ChangeLog --------- Pymacs last version was 0.22, written by Francois Pinard. Giovanni Giorgi took this version and evolved it. This new development is marked "2.0" and is it always distributed under GNU General Public License 2.0 Feel free to send comments suggestions and so on to Giovanni's email address: mailto:jj@objectsroot.com What's new in Pymacs 2.0 ------------------------ Giovanni Giorgi (the Author) has taken Pymacs 0.99 and has decided to write some extensions. The final product is named Pymacs 2.0. Improved documentation and examples ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, In Pymacs 2.0 has been added a medium sized example. The documentation offers a `Troubleshooting`_ section, to solve most common issue, also for helping newbie emacs user. Improved API ,,,,,,,,,,,, Pymacs 2.0 offers a magic save_excursion(f) method which mimics the one found on lisp side. Logging Support and Regression Tests ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, The Pymacs/utility.py module offers a useful EmacsLog class. The basictests.py module offers a list of regression tests Pymacs 2.0 has been tested on:: GNU Emacs 21.4.1 (i686-redhat-linux-gnu, X toolkit, Xaw3d scroll bars) GNU Emacs 22.1.1 (i686-pc-linux-gnu, X toolkit, Xaw3d scroll bars) XMLRPC Server ,,,,,,,,,,,,, In Pymacs 2.0 has been added a XMLRPC server to play with. Is not yet production-ready! Redesigned Web Site ,,,,,,,,,,,,,,,,,,, It is provided a new website at http://blog.objectsroot.com/pymacs History ------- The ChangeLog Reports the first release of 9th September 2001. Giovanni Giorgi started working on Pymacs on 6th March 2007 for its own personal use. This is the first public release, published as final at 23th of February 2008. Evolving Emacs -------------- One of the main goal of Pymacs 2.0 is to evolve emacs. Other editors have a very poor support for scripting. The protocol specification is quite frozen, and python offers always a good retro-compatibility, so you can develop to the python site with ease. Emacs instead has a very powerful lisp engine, but it is difficult to understand and learn. Python is very easy to understand, and there are plenty of library for it. Pymacs is quite efficient and very easy to use. I have successful written some functions in Pymacs in an evening. Best, emacs is a powerful platform for accessing remote files, parsing XML stuff and so on. There are equally powerful editor: Eclipse ,,,,,,, Very powerful but difficult to program. Lacks an easy scripting language for common tasks (like small macro-recording actions). Plug-in architecture is very stable, and even if some plug-in crashes, the user is well protected. But Emacs is more stable even then eclipse! JEdit ,,,,, Very easy to script, but too decoupled. To get a minimum of emacs functionality you need to load a huge amount of plug-in. The plug-in model is good, but they don't play nicely between them. A typical bug is a "user focus war" and the frequent errors mess up things. This is unacceptable in a production environment Vim ,,, Smaller and equally powerful, it has only a problem: cryptic sequence of keys needed to learn. And typing your name after launching Vim can destroy your file in a snap! Okay I am joking. There is a well-known war between emacs and vi. And if you are reading this document, you are on my side, young Jedi :-) Magic save_excursion(f) method ------------------------------ In Pymacs 2.0 has been added a magical save_excursion() method to the lisp object. For example, instead of:: l=Let() l.push_excursion() myFantasticFunction() l.pop_excursion() You can write a more Emacs Lisp-like code:: lisp.save_excursion(myFantasticFunction) This lead to a simpler code. The new save_excursion() method executes pop_excursion even in case of errors, so myFantasticFunction() need not worry of them. Useful Extension ================ Enanched Python Mode -------------------- Under the extensions folder you find a modified version of python-mode, provided as file :file:`python-mode.diffs`. These diffs are relative to :file:`python-mode-1.0.tar.gz` as found at: http://sourceforge.net/projects/python-mode/ Last released version is dated at the end of 2005, so it seems to me quite frozen. For an usage example execute the Emacs Lisp function "pycomplete-test" Emacs Server as XMLRPC ---------------------- Warning: this is an unsafe and very very experimental feature. Is it possible to publish emacs as a python XMLRPC server. You will be virtually able to control emacs remotely, and spread the Stallman verb to the Universe :) Okay I am joking here. First of all, import into emacs the rpcserver.py found in the extensions folder:: (pymacs-load "pymacs-2.0/extensions.rpcserver") then activate it issuing the command M-x rpcserver-publish-XMLRPC-Server Emacs will freeze, waiting requests. Open a python prompt and try something like:: import xmlrpclib s = xmlrpclib.Server('http://127.0.0.1:9000') s.message("hi emacs, I am remoted hosted") s.closeConnection() You can find a more complex example in extensions/rpcTest.py Keep in mind emacs will froze while the server is running. I have not yet tested the server on a long-running procedure, so please do some tests before using it heavily. Troubleshooting =============== I see a lot of "Garbage Collecting..." messages blinking on the emacs side -------------------------------------------------------------------------- This messages aren't a problem, but can slow down a bit your emacs side. If you have plenty of RAM, try executing something like:: lisp(""" (setq gc-cons-threshold 3558000) """) pymacs-load "path-to-mymodule" seems working only the first time ----------------------------------------------------------------- This problem was reported on python 2.5 at the moment. Usually is solved putting a dot in the last part of the filename parameter. Suppose you have a package "myPackage" and a file "utils.py" inside it. You should write:: (pymacs load "/home/jj/emacs/myPackage.utils") this syntax works well every time. To avoid the "ImportError: No module named extensions2.0.pycomplete-serverice" message, remember to add an empty __init__.py file in the /home/jj/emacs/myPackage directory fp-maybe-pymacs-reload emits an error and stop working. ------------------------------------------------------- This problem is reported on emacs 21.4 on Linux Fedora Core 6. I have noticed this bug disappears if the callback function is put as the last hook:: (add-hook 'after-save-hook 'fp-maybe-pymacs-reload 'append) It seems there is a problem calling a Pymacs function inside an hook callback function. This bug is hardly to find because frequently you define only an hook for after-save-hook. Can you give me a .emacs to play with? -------------------------------------- If you use the new customization feature of the latest emacs releases, you will not need a big .emacs. First of all, my advice is to develop a separate config.el file. Load the config.el in the .emacs, because emacs tends to write at the end of .emacs its customization. Then stick with emacs, and for the first times avoid XEmacs: I have found far more packages working for emacs, and the two programs have some incompatibilities. You can find a huge list of init file at http://www.emacswiki.org/cgi-bin/wiki/CategoryDotEmacs Have fun!