Haskell | Wiki community | Recent changes
Random page | Special pages

 

Not logged in
Log in | Help

Yi

Categories: Applications


Contents

[hide]

1 About

Yi is a text editor written and extensible in Haskell. The goal of Yi is to provide a flexible, powerful and correct editor core dynamically scriptable in Haskell.

The long term goal of the project is to make Yi the editor of choice for the haskell hacker.

former Yi homepage: http://www.cse.unsw.edu.au/~dons/yi.html

2 Get Yi

"Stable" release on hackage:

http://hackage.haskell.org/packages/archive/pkg-list.html#cat:Editor

Development repo:

darcs get --partial http://darcs.haskell.org/yi/

We try to keep the repo in a clean state, so it's always in a "testable" state. So if you have darcs installed and are not afraid of Makefiles, this is probably a better choice.

3 The obligatory screenshoot

Gtk frontend:

Image:yi-20070409.png

Vty frontend: (upcoming)

4 NEWS

(Recent items first)

5 Bugs

Check/report bug reports here: http://code.google.com/p/yi-editor/issues/list

6 How to Configure Yi

You can find configuration file examples here:

http://darcs.haskell.org/yi/examples/

A good start is to copy YiConfig.hs in your ~/.yi directory (create it if needed), and hack as needed.

To run the gtk frontend:

7 Contribute

Get the repo here:

darcs get --partial http://darcs.haskell.org/yi/

Work on whatever you please, patches are always welcome. :)

Otherwise, see the complete list of open issues here: http://code.google.com/p/yi-editor/issues/list

Also read: http://darcs.haskell.org/yi/TODO

Post your questions and follow up on the mailng list: http://groups.google.com/group/yi-devel

Some other pending tasks are described below.

7.1 Test suite

The test suite has to be made up to date and re-instated.

Build test: vty, gtk, and haddock html doc should be buildable at all times.

7.2 Refactorings

The below describes possible refactorings to investigate:

8 Yi ideas

This section is meant to gather ideas people have for Yi.

8.1 Emacs

Coming from an Emacs background, I think a few things are essential, mainly the introspection capabilities of Emacs.

8.1.1 Emacs goodness

The following are things I like about Emacs, as an extensible environment, and miss in Yi:

Really good online documentation
Emacs can tell you a lot about a function or variable with a keypress--- the current value, where it is declared, and a hypertext formation string
Hooks-Extensibility
All (good) apps allow users to extend, through, e.g., hooks --- a list of functions that are run before/after some event (like saving a file)


8.1.2 Emacs badness

So, why replace it?:

ELisp
Dynamically scoped, Dynamically typed, ugly, old. 'Nuff said
What's a Parser?
A lot of apps in emacs do stuff with text, usually text that is in some language. There is no standard parser (like, e.g. parsec), so a lot of it is ugly handwritten spaghetti. This also means that adding analysis tools isn't really done (or done nicely).
ELisp again
Haskell is a lot cleaner to write, especially because of the large number of libraries.

8.1.3 Emacs maybeness (?)

Some things that are sometimes bad, sometimes good:

Everything is a buffer
Makes some sense, but sometimes doesn't. It is nice to have uniform key bindings do the right thing (e.g., C-Space sets the mark, and the region can then be used, e.g. to delete a sequence of emails in Wl) Sometimes, however, you just want some sort of GUI widget.
OTOH, having the minibuffer be a special kind of buffer is a good idea.
Properties
It is possible to associate arbitrary properties with symbols. This means you can annotate a symbol and then use that information at a later date

8.2 Vi ?

What about vi? I believe we want Yi to subsume vi as well.

8.3 Ideas

An extension to GHCi to support documentation of symbols.
This seems to be (reasonably) straightforward, as GHCi already has :info. It would mean hacking the type environment (what about values?) to add documentation information. The main problem would seem to be populating this --- maybe hack haddock to produce something from the library docs? I assume that using package GHC uses the parent RTS (package GHC seems to be the way to go, but more investigation is required --- don?)
Views on data
Rather than just editing a file, you would open a view onto the file, i.e. there is no longer a 1-1 correspondence between buffers and files. Why? Well, for aggregate buffers (i.e., editing multiple files in the one view), or for multiple views of a file (e.g. AST and source-level). There would be some primitive ops for editing a buffer (insertChar, delete, etc.), which would then call update functions on anything observing that file.
Remote attach so I can work from home, but still use a remote machine
Haddock documentation
(no brainer), maybe associate with .hi files for binaries.
A class MiniBufferRead (or PromptingRead) which allows the user to

invoke a function similar to M-x in Emacs, but without requiring (interactive)

This means that given f :: String -> Int -> Action, (makeInteractive f) :: Action would prompt the user for a String then an Int and run the corresponding action.
Maybe a class YiShow, which all config items must be a member of? This is to emulate describe-variable

8.4 Implementation

Considerations:

Configuration
Per mode/file/buffer/whatever Monads, or reload/recompile? Or some hybrid? How does this interact with the documentation aspects? Do we want to have separate sorts of symbols a la emacs (describe-function, describe-variable), or is everything a function? I would think that configuration info doesn't change that frequently --- is this globally true though?
We can probably use a GHCi-like "let". Rebinding a function would then be synonym to assign a variable, thereby achieve unification between functions and variables.
Also possible: use something similar to the GHCi debugger to "tune" the behavior of some functions.
Interface to the runtime
The scheduler, docs, etc.
Introspection of e.g. what processes are running.
There are already libraries in Haskell for processes, but they don't give Yi any extra information --- we really want a layer on top.

...

Sjw 09:15, 2 June 2006 (UTC)

Retrieved from "http://haskell.org/haskellwiki/Yi"

This page has been accessed 5,403 times. This page was last modified 09:24, 7 June 2007. Recent content is available under a simple permissive license.