Hi Pavel,
On Tue, May 12, 2009 at 11:01:05AM -0700, Pavel Panchekha wrote:
>
> I'd like to write a shell for oranj similar to bpython. I've already
> written a pygments parser for it, and writing completion shouldn't be
> too hard. What else needs to be changed before I can get a full
> bpython-esque shell for oranj? Is there anything in curses to fiddle
> with, for example? (I tried just replacing PythonLexer with
> OranjLexer, but it doesn't seem to work)
>
> Oranj: http://github.com/pavpanchekha/oranj/tree/master
> OranjLexer: http://dev.pocoo.org/projects/pygments/ticket/409
I tried downloading it and running it (seems it depends on 2.6) but, since I
didn't have readline built against my 2.6 build, it errored - you try to import
readline, pass on an ImportError and then refer to it anyway.
Anyway, so I've rebuilt my python2.6 and got it working.
It looks to me like you'd be best off using bpython pretty much as-is and
providing something similar to the "code" module for oranj, i.e. a way of
executing oranj code from any Python program. Here's how bpython uses it:
def push(self, s):
"""Push a line of code onto the buffer so it can process it all
at once when a code block ends"""
s = s.rstrip('\n')
self.buffer.append(s)
try:
more = self.interp.runsource("\n".join(self.buffer))
except SystemExit:
# Avoid a traceback on e.g. quit()
self.do_exit = True
return False
if not more:
self.buffer = []
return more
"self.interp" in this case is one of these:
class Interpreter(code.InteractiveInterpreter):
So, if you can make a Python module that mimics the code module (at least the
part of it that bpython uses) then you should be able to swap out the Python
code module with your one, change the lexer it being used, do your own
autocompletion routines and everything should hopefully Just Work.
You might also want to try to mimic the behaviour of inspect.getargspec, since
bpython uses that to show what arguments a function is expecting.
I can't think of anything else right now, but if you have any more questions
feel free to ask. Also if you think you can make the necessary changes to
bpython and still keep it 100% compatible with its current functionality (i.e.
if you can make it so anyone could come along and plug in their own module to
make it work with some other language) then I'd be happy to bring that
upstream. Otherwise, you are of course encouraged to fork it. :)
Good luck !
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"bpython" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/bpython?hl=en
-~----------~----~----~----~------~----~------~--~---