HomeBlogCategory: “emacs”

Showing only posts in category “emacs”.

Show all


SS-Lisp — run Lisp in your browser

SS-Lisp is an experiment I've worked on in my free time, rather sporadically, for several months.

It's a Lisp compiler that runs in a browser.  It compiles Lisp to an intermediary “bytecode” and it provides a virtual machine to run the compiled code with acceptable speed (I recommend Chrome or a derivative browser for “acceptable” to stand true).

It provides an “IDE” which mimics Emacs/SLIME, via my Ymacs editor.  The IDE has some interesting features, like symbol completion and cross-reference—if you used Emacs/SLIME you should feel fairly comfortable with it, though do not expect it to be that competent. ;)

I made a screen-cast here: https://vimeo.com/42070553 (that's without voice because I totally suck at making screen-casts).

While just a toy, as far as my research goes, I think it's the best one at the moment.  It beats BiwaScheme by orders of magnitude in terms of speed and development environment, and most other Lisp interpreters for the browser, including my own previous attempts, are not worth mentioning—except one, which actually inspired me to work on this: http://norstrulde.org/ilge10/.  Great job Eric!

Update: fellow from Germany suggested that I should rename the project, since the SS abbreviation brings up painful memories in some parts of the world...  I believe he's right so I'll rename it in the following days.  Any ideas for a name are welcome. :-)

Followup: done with that, the new name is “SLip”.  The old URL will redirect to the new one (slip.lisperator.net).


On Automatic Semicolon Insertion

(this started as a reply to this thread in NodeJS, but it got rather long so I'm posting it here)

Before doing JavaScript, I was doing C/C++. There semicolons were required, and you got an error from the compiler when they were missing. I rarely got such errors though because when a semicolon was missing, Emacs would indent badly the following line; bad indentation was always a sign of syntax errors.

So when I moved to JavaScript, semicolons at end of statements made very much sense. The Emacs JS options at that time weren't nearly as good as the C/C++ mode, so sometimes I forgot the semicolon.  Although usually the program ran fine, I still went through all sorts of scary bugs because of the automatic semicolon insertion. Oh how I missed that compiler error!

So I got quite religious about using semicolons (also because I was using a simple regexp-based scanner to minify JS, and that was easily screwed by missing semicolons). Nowadays I use Emacs with js2-mode, which contains a full JS parser, and is able to warn about various things during editing, such as missing semicolons.

As a matter of taste, I find code that uses semicolons at the beginning of lines a bit silly:

;(x || y).doSomething()
;[a, b, c].forEach(doSomething)
for (var i = 0; i < 10; i ++) {

I'm doing a lot of Lisp hacking lately, and the first two lines look like comments to me (intentionally turned off syntax highlighting above).

Using the comma at BOL looks a bit better, because it makes it possible to comment out the line without forgetting a trailing comma:

var magicWords = [ "abracadabra"
                 , "gesundheit"
                 //, "ventrilo"

but still (continuing paste from npm's coding style):

  , spells = { "fireball" : function () { setOnFire() }
             , "water" : function () { putOut() }

you can't comment out the spells = line in the same way, because it spans multiple lines. So this argument fades away and let's just say it looks silly.

So as far as my advice goes:

  1. Use an editor with good JS support. If it's just decent, it doesn't qualify. GEdit is decent, but not good enough. Emacs is supremely great.

  2. Configure your editor to warn you about “poor practice”. Again, in Emacs it's possible to do that. For example, my setup warns me if I assign to a variable that's not defined (creating globals is almost always a source of errors), if I forget semicolons, or if I assign in a conditional (where most likely the case is that you want "==" instead of "="). Details on my setup here.

  3. Do insert semicolons and save yourself from the pain of debugging "automatic semicolon insertion".

  4. Be happy. ;-)


The greatest programmer in the universe

Want to know who that is?  It's me. ;-)

I submitted my Ymacs project to Ohloh (Ymacs project page at Ohloh).  They have a nice feature that gives some statistics, based on the source code (they can understand some source control repositories, including Mercurial, which is what I use).  The Ymacs statistics say the following (the whole source taken into consideration):

  • estimated effort: 4 person-years
  • project cost: $210,926 (for a $55000/year salary)

    Counting only the JavaScript files, which is the main programming language, we have:

    • estimated effort: 1 person-years
    • project cost: $61,739 (same $55000/year salary)

    The fact is: I did this myself in a bit more than 2 months (work on the website and infrastructure included).

    It's true that Ymacs includes a build of DynarchLIB in it's source repository, and DynarchLIB started in 2005 (I didn't work on it full-time, though, far from it).  However, Ohloh counts DynarchLIB as a single line of code, because the code is minified, so it probably doesn't add much in the 1 person-years estimation.

    Once I put up a public code repository for DynarchLIB, it will be interesting to see how much Ohloh underestimates me. :-)


        Ymacs — AJAX source code editor

        I just released a new project that I've been working on for about a month: Ymacs is an AJAX text editor, suitable for editing source code (currently there is support for JavaScript and XML, but more modes could be easily implemented).

        Ymacs is a DynarchLIB widget, which makes it easily embeddable into any DynarchLIB application.  This doesn't sound impressive, isn't it, but here's the real good news: I've decided to open source DynarchLIB and release it under a BSD-style license.  Some folks might believe this project is already dead, but this isn't so; it is true that there was no new release in almost two years, but the thing kept being improved and there are people using it in successful commercial applications.

        Well..  This should happen any minute, but I'm running out of time, as usual.  So it could take a few more days to push a new DL release.  In the mean time, go check Ymacs, it's pretty cool.  It has Emacs key bindings too. ;-)


        Editing JavaScript with Emacs — js2-mode

        I wrote about this topic before.  My small hackish mode attracted a few people for its good indentation, but it still had some issues that were hard to track down.  In short, it's quite impossible to use c-mode's indentation.

        In the last few days I played with Steve Yegge's excellent js2-mode and I'll write about my setup here.  js2-mode is different from most other programming modes that you can find in Emacs (and in any other editor for that matter), because it employs a full, solid parser of the language.  Instead of guessing the syntax with buggy regexps, js2-mode actually parses your code into an abstract syntax tree (AST) and can therefore provide complex information about it, not to mention very good syntax highlighting.  For example, js2-mode can and does warn you about syntax errors such as misplaced parens, or missing semicolon, or trailing comma.  Or about undeclared variables — a ”must have” with JavaScript, since it's usually the source of many subtle bugs.

        I noticed this excellent mode about an year ago, but indentation was simply unbearable so this is why I didn't use it.  But now I decided to give it a second try.  Indentation can be fixed.

        [ read full story... ]



        This is a minor mode that I wrote on top of js2-mode which automatically highlights all occurrences of the variable under the cursor within its defining scope.  I once saw this at a friend who was using Eclipse, and I thought it's pretty cool.  With the powerful API that js2-mode exposes, it was pretty easy to write it, even despite my limited (E)Lisp experience.

        [ read more... ]


        Emacs, my Wife and my Muse

        Wait a minute...  Emacs is not my wife.  I'm spending too much time with Emacs.  If you used Emacs (or VIM for that matter, same thing) for more than a few years, then you know how frustrating it is to try to convince other people about the true genious that rests in your editor.  In 10 years of using Emacs I convinced many frieds to try it and some were quite successful and agreed that Emacs is "The Shit".  However, half a year later, they kept telling me how Emacs sucks and .Net studio rules.  Oh well.

        This story is about Emacs and about my wife.  My wife knows so little about computers, that to her, the difference between Emacs and Notepad is not obvious.  You see, she has to write a few papers for her university degree (God I'm so glad for I never finished one).  She did these with OpenOffice.

        [ read more ]

        Filed in: emacs, life, rants7 comments

        Emacs JavaScript mode

        Here's my update to an old javascript-mode (authors Steven Champeon and Ville Skyttä).  In essence, I was unhappy with indentation, but I also removed some stuff that I don't need and fixed various small things, such as highlighting literal regexps.

        The indentation is based on CC Mode, which is almost Good Enough for JavaScript; the original javascript-mode.el (note that I'm talking about the version I had back in 2004; they might have fixed it in between, but I don't think so) had some indentation problems, for examples in cases like this:

        [ go to project page ]

        Filed in: emacs, programming12 comments

        A movie Subtitle Editor

        A few days ago I wanted to create Romanian subtitles for a movie that I want to watch with my friends.  After Googling around I found 4 projects that claim to do this in Linux.  These are:

        • gnome-subtitles
        • ksubtile
        • subtitleeditor
        • gaupol

        All of them seemed very disappointing.

        ( go to project page... )

        Filed in: emacs, programming14 comments

        Close last XML tag (Emacs)

        I'm using Emacs for almost 10 years, but still I never wrote too much about it.  Partly, the reason is that I'm not an Emacs guru (although I'm using it for 10 years, imagine that).  Emacs is so functional in itself that you don't have to become a “guru” to like it (by “guru” here I mean someone who can bring substantial improvements by writing Lisp code, such as writing a major mode).

        I'm using Emacs for most my editing needs.  These include, sometimes, typing text in a <textarea> in Firefox (there is a nifty extension called “it's all text” which allows you to use a decent editor to type in those rough boxes).  I also frequently use Emacs for typing email (check Wanderlust if you haven't already, one of the best email clients I ever used).  And obviously for writing source code of any kind—XML, JavaScript, Java, C, Perl, Python, Ruby—you name it, we have it.  I remember a great saying by Paul Graham: “all other things being equal, it's a bad decision not to chose the best programming language for your problem” (that's not ad literam what he said, but you get the point).

        ( read more... )

        Filed in: emacs, programmingOne comment
        See also