Scriptable text editor with Ruby?

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.

I think there are basically two ways of implementing this interaction:
- using IPC
- command line interaction (host executes the ruby script with
parameters and catches the output)

IPC is the most powerful I think, but then again I have various options
to achieve this communication:
- TCP
- XmlRpc
- shared memory

I'm very new to the concept of inter-process-communication and I would
greatly appreciate your insights on how I would best proceed to achieve
this interaction.

Or maybe there is a more obvious and straightforward approach that I
overlooked?

Best regards,
Francis

Vim runs everywhere. Are you sure that this is necessary?

Mike

···

On 1/3/07, Dolazy <francis.rammeloo@gmail.com> wrote:

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.

--
Michael P. Soulier <msoulier@digitaltorque.ca>
"Any intelligent fool can make things bigger and more complex... It takes a
touch of genius - and a lot of courage to move in the opposite direction."
--Albert Einstein

Embed the Ruby interpreter in the text editor itself? Then just make certain
functions available to Ruby and script away.

Jason

···

On 1/3/07, Dolazy <francis.rammeloo@gmail.com> wrote:

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.

I think there are basically two ways of implementing this interaction:
- using IPC
- command line interaction (host executes the ruby script with
parameters and catches the output)

IPC is the most powerful I think, but then again I have various options
to achieve this communication:
- TCP
- XmlRpc
- shared memory

I'm very new to the concept of inter-process-communication and I would
greatly appreciate your insights on how I would best proceed to achieve
this interaction.

Or maybe there is a more obvious and straightforward approach that I
overlooked?

Best regards,
Francis

Dolazy wrote:

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts.

Vim can do that now. Build it with Ruby support and you can drive the editor with Ruby.

···

--
James Britt

"I was born not knowing and have had only a little
  time to change that here and there."
  - Richard P. Feynman

Dolazy wrote:

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.
  

Well, given QtRuby, you probably don't really need C++ at all -- you could do it all in Ruby. But I'm not sure what the most recent status of QtRuby is, and there is always the licensing gotcha -- you have to use Qt 4 for open source Windows projects. If you use another GUI toolkit, there are a number with Ruby bindings. For that matter, most of them have some kind of text editor widget built in, which makes life even easier.

I think there are basically two ways of implementing this interaction:
- using IPC
- command line interaction (host executes the ruby script with
parameters and catches the output)

IPC is the most powerful I think, but then again I have various options
to achieve this communication:
- TCP
- XmlRpc
- shared memory

I'm very new to the concept of inter-process-communication and I would
greatly appreciate your insights on how I would best proceed to achieve
this interaction.

Or maybe there is a more obvious and straightforward approach that I
overlooked?
  

Two comments:

1. As a number of folks have pointed out, "vim" has an excellent Ruby scripting facility already.
2. Rather than delving into issues of low-level implementation, interprocess communication vs. shelling out to a command like vs. whatever, I'd recommend a more agile and pragmatic approach. Pick a toolkit, find a Windows user, a Mac user and a Linux user, set up a project on RubyForge and start building the thing!

···

--
M. Edward (Ed) Borasky, FBG, AB, PTA, PGS, MS, MNLP, NST, ACMC(P)
http://borasky-research.blogspot.com/

If God had meant for carrots to be eaten cooked, He would have given rabbits fire.

[snip stuff about ruby/c++]

Or maybe there is a more obvious and straightforward approach that I
overlooked?

have you considered writing the entire editor in ruby and
then use ruby qt.. so you don't use any c++?

Ruby is good at string manipulation, so its possible
to do the entire syntax coloring in ruby. I think
this task is pretty big in c++.

···

On 1/3/07, Dolazy <francis.rammeloo@gmail.com> wrote:

--
Simon Strandgaard
http://opcoders.com/

- using vim

it already does all this! check out the man pages.

regards.

-a

···

On Thu, 4 Jan 2007, Dolazy wrote:

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.

I think there are basically two ways of implementing this interaction:
- using IPC
- command line interaction (host executes the ruby script with
parameters and catches the output)

--
if you find yourself slandering anybody, first imagine that your mouth is
filled with excrement. it will break you of the habit quickly enough. - the
dalai lama

"Dolazy" <francis.rammeloo@gmail.com> writes:

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.

I think there are basically two ways of implementing this interaction:
- using IPC
- command line interaction (host executes the ruby script with
parameters and catches the output)

IPC is the most powerful I think, but then again I have various options
to achieve this communication:
- TCP
- XmlRpc
- shared memory

I'm very new to the concept of inter-process-communication and I would
greatly appreciate your insights on how I would best proceed to achieve
this interaction.

Or maybe there is a more obvious and straightforward approach that I
overlooked?

Although I've not looked at it in any detail, there is an emacs->ruby interface
which allows you to extend emacs functionality with ruby code in a similar way
to how functionality is extended with elisp.

I would strongly recommend leveraging an existing editor - writing an editor is
a non-trivial task and many many code years have been put into vim and emacs.
Take advantage of this to allow you time to concentrate on the bits you really
want to achieve.

Note that if you don't like emacs (many don't) I believe vim has the ability to
achieve what you want. A few people from the common lisp community have been
working on an interface between vim and common lisp to provide a more high
level development environment (similar to emacs + slime). You can probably
steal ^H^H^H^H^H borrow some of their ideas to provide a way of
interfacing/extending vim with ruby scripts/code.

HTH

Tim

···

--
tcross (at) rapttech dot com dot au

[snip out of context]

I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts.

[snip]

I don't know what exactly your goal is for this editor,
but if you want it to be great then take a look at
what other great editors is doing.

IMO TextMate is the best editor I have ever tried,
and was the reason I abandoned my own editor
project: http://aeditor.rubyforge.org/

btw: Know your enemy (maybe I should this one day)

···

On 1/3/07, Dolazy <francis.rammeloo@gmail.com> wrote:

--
Simon Strandgaard
http://opcoders.com/

Dolazy wrote:

I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.

Why start from scratch? Take over an existing, defunct open source
project:

  http://aeditor.rubyforge.org/

···

--
Posted via http://www.ruby-forum.com/\.

As you probably already told by numerous people, Vim does that already.

Emacs is supposed to have something like that as well, but it hardly works.

Whereas I managed to get Vim's Ruby support running out of the box on
several flavours of Linux and even freaking Windows...! Respect.

-Alder

···

On 1/3/07, Dolazy <francis.rammeloo@gmail.com> wrote:

...

Michael P. Soulier schreef:

Vim runs everywhere. Are you sure that this is necessary?

Mike

Are you sure Vim was necessary? Emacs runs everywhere... :stuck_out_tongue:

Embed the Ruby interpreter in the text editor itself? Then just make certain
functions available to Ruby and script away.

Jason

That would be one of those obvious approaches that I couldn't think of
myself.. Thanks!

Hi,

You might want to have a look at Java 6. I have just installed that
yesterday and haven't played around with it at all yet, but from what
I read on the website it's integration with scripting languages might
make it relatively easy to include Ruby scripting in your text editor.

I realise there would be quite a few disadvantages to this approach
(need the runtime, need a brand new runtime, cannot code it in
Ruby...) but it might be worth looking into this.

Thomas

···

2007/1/4, Simon Strandgaard <neoneye@gmail.com>:

On 1/3/07, Dolazy <francis.rammeloo@gmail.com> wrote:
[snip stuff about ruby/c++]
> Or maybe there is a more obvious and straightforward approach that I
> overlooked?

have you considered writing the entire editor in ruby and
then use ruby qt.. so you don't use any c++?

Ruby is good at string manipulation, so its possible
to do the entire syntax coloring in ruby. I think
this task is pretty big in c++.

--
Simon Strandgaard
http://opcoders.com/

M. Edward (Ed) Borasky wrote:

Dolazy wrote:

Hi all!

Vim and emacs are text editor that can be scripted using internal
script languages. I'm thinking of writing a platform independent text
editor myself that uses the ruby language for executing scripts. The
host application would be written in C++ (+Qt) and it would somehow be
able to interact with ruby.
  

Well, given QtRuby, you probably don't really need C++ at all -- you
could do it all in Ruby.

  I can only agree to that. For what I experience, Qt4 1.4.7 is pretty
stable, much more than its predecessors. But I think you'll need a bit
of practice with the C++ classes before coding direcly with Qt/Ruby.

  Well, have fun !

  Vince

···

--
Vincent Fourmond, PhD student
http://vincent.fourmond.neuf.fr/

"Simon Strandgaard" <neoneye@gmail.com> writes:

Subject: Re: Scriptable text editor with Ruby?

[snip stuff about ruby/c++]

Or maybe there is a more obvious and straightforward approach that I
overlooked?

have you considered writing the entire editor in ruby and
then use ruby qt.. so you don't use any c++?

Ruby is good at string manipulation, so its possible
to do the entire syntax coloring in ruby. I think

syntax highlighting can be non-trivial to get right, paticularly with larger
files (see some of the debates in emacs and xemacs community as an example).

What I think would be really good is semantic highlighting rather than syntax
highlighting - this may sound crazy, but I find syntax problems to be the more
trivial bugs to squash. Highlighting which gave more information on the
"meaning" of what you are coding would probably provide more valuable
information. The problem of course is that the editor wold then need to
understand more than the basic syntax rules of the language you are coding in -
essentially, it would need an interpreter, either built-in or closely
integrated.

I've not really given a lot of thought to this, it just strikes me that nearly
every editor does syntax highlighting and maybe its time to re-evaluate the
paradigm and see if, given faster cpus, greater memory and larger storage, it
might not be time to look at doing things differently.

Tim

···

On 1/3/07, Dolazy <francis.rammeloo@gmail.com> wrote:

--
tcross (at) rapttech dot com dot au

Simon Strandgaard wrote:

have you considered writing the entire editor in ruby and
then use ruby qt.. so you don't use any c++?

Ruby is good at string manipulation, so its possible
to do the entire syntax coloring in ruby. I think
this task is pretty big in c++.

:slight_smile: Syntax coloring could be implemented as a ruby plugin.
And all these advanced concepts I will try to delegate to libraries as
much as I can.

Simon Strandgaard wrote:

I don't know what exactly your goal is for this editor,
but if you want it to be great then take a look at
what other great editors is doing.

IMO TextMate is the best editor I have ever tried,
and was the reason I abandoned my own editor
project: http://aeditor.rubyforge.org/

Well TextMate has two important drawbacks: it's Mac only and it's not
free. I'll give the evaluation version a try on my Mac at work to see
if I it can inspire me (hopefully not discourage me if it's too
good!)..

btw: Know your enemy (maybe I should this one day)
The Art of War - Wikipedia

Hah, thanks :wink:

Suraj Kurapati wrote:

Dolazy wrote:
> I'm thinking of writing a platform independent text
> editor myself that uses the ruby language for executing scripts. The
> host application would be written in C++ (+Qt) and it would somehow be
> able to interact with ruby.

Why start from scratch? Take over an existing, defunct open source
project:

  http://aeditor.rubyforge.org/

+1

Simon?

T.

I have taken a look at embedding and Swig.

Hmm... I'm very unsure about them.

Swig seems to assume that you want to take away the main() method and
treat the C++ code as a shared library. It's not really the same as
interprocess communication.

The embedding solution also provides one way interaction. The C++
program calls ruby, but not the other way around. There might be ways
around this, using callbacks or so. I'd like to learn more...

I suspect that IPC using XmlRpc is the most powerful solution (and easy
to implement).

I am eager to learn your (anyone's) insights.