Older blog entries for Pistos (starting at number 16)

Diakonos - version 0.8.10

Version 0.8.10 of Diakonos is now available.

With this release, I’d like to welcome Dominik Honnef (dominikh) to the Diakonos development team. He has already made several contributions, including some fixes which were cherry-picked from the master development branch and included in this version. His other contributions to date will be seen in the next version (0.8.11), and I think we can expect more from him in future versions.

Starting with this version, Ruby 1.8 support is officially dropped. Diakonos will now only run on Ruby 1.9. There’s no need to rush the upgrade on your systems; it is quite possible to have both 1.8 and 1.9 installed on the same system. Search the web for how to do this.

go_to_char (Alt-N) and go_to_char_previous (Alt-P) have been added. These let you move the cursor directly to a specific nearby character.

The shell command has been adjusted a little, so that the results buffer is no longer cluttered with the command that was run.

The way you activate Klipper synchronization has been centralized and simplified. You now simply set “clipboard.external klipper”, instead of setting each clipboard-related key mapping. Along with this change, xclip support was added. This will let non-KDE users synchronize their X clipboard with Diakonos.

Sessions have been improved a bit: Cursor position is now saved, and Diakonos also remembers which was the current buffer when restoring a session.

Basic pair highlighting and jumping was added. Matching brackets are now highlighted, and you can press Alt-{ to jump to a match.

Dynamic prefix expansion was added. With this feature, you can complete long words — good for those of us who don’t like to type a lot. Type the beginning of a long variable name, or such, then press Alt-E. Diakonos will complete the word using a word found in the open buffers (the most frequently used one). Press Alt-E more times to cycle through all the matches. Here is a screencast which shows this feature in action:

Here is the full changelog for this version:

  • Ruby version 1.9+ now required. (Ruby 1.8 support dropped)
  • Added go_to_char (Alt-N).
  • Added go_to_char_previous (Alt-P).
  • shell command now shows executed command on interaction line.
  • shell command is now interruptible.
  • Klipper synchronization now a single setting (clipboard.external klipper).
  • Added xclip support.
  • Cursor and viewport positions now saved in and restored from sessions.
  • Current buffer number now saved in sessions.
  • Fixed context line.
  • Textual indication of no shell results now given.
  • Added basic pair (bracket) highlighting.
  • Added go_to_pair_match (Alt-Shift-[).
  • Fixed chmodding in installer.
  • Undo and redo now actually compare file contents to set “modified” flag.
  • Added support for a special ‘all’ language, whose formats apply no matter the current language.
  • Added dynamic prefix expansion (Alt-E).

Report any bugs here, or come visit me in IRC!

Share/Save/Bookmark

Related posts:

  1. Diakonos - version 0.8.5
  2. Diakonos - version 0.8.7
  3. Diakonos - version 0.8.4

Syndicated 2009-06-24 04:09:13 from Catholicism Computes

Diakonos - version 0.8.9

Version 0.8.9 of Diakonos is now available.

This release is primarily an internal refactor release. The only changes visible to the user are bug fixes. These include improvements to the installer, and vastly improved handling of X windows pasting. No more brutally slow terminal pasting!

The changes are listed in greater detail in the changelog:

  • Put interaction timer only on first stale session prompt, not any after that.
  • Changed all function names from camelCase to snake_case.
  • Added –help-dir switch to installer.
  • Fixed some issues with installer.
  • Changed delete_to_and_from to always assume given character is the left side character when matching pairs.
  • Fixed a line number display bug.
  • X windows pasting handled much better now.
  • Numerous internal refactorings and reorganizations.
  • Accepted patches from Decklin Foster.

Report any bugs here, or come visit me in IRC!

Share/Save/Bookmark

Related posts:

  1. Diakonos - version 0.8.8
  2. Diakonos - version 0.8.6
  3. Diakonos - version 0.8.7

Syndicated 2009-06-14 19:37:04 from Catholicism Computes

Beethoven - Für Elise

The very popular Bagatelle in A minor by Beethoven, commonly known as Für Elise.

Read more about my piano recording series here.

Share/Save/Bookmark

Related posts:

  1. Beethoven - Sonata in C minor, Op. 13, 2nd movement
  2. Chopin - Waltz Op. 64 No. 2 in C# minor
  3. Chopin - Waltz Op. 69 No. 1 in Ab major

Syndicated 2009-06-13 14:33:03 from Catholicism Computes

Ramaze vs. Rails: Battle of the default templating engines

Someone asked recently on the Ramaze mailing list:

Is Etanni a performance improvement over ERB? I’m just converting a site over to Ramaze and I’m wondering if it’d be worthwhile to convert my ERB tags to Etanni tags? :)

manveru promptly replied:

ERB is a lot larger, and does a lot more, but usually you don’t use that functionality. Etanni consists of a single regular expression substitution and should be faster than just about any other templating engine around, the whole core source of Etanni is around 4 lines.

So yes, i suggest you use Etanni instead of ERB :)

He also quickly wrote up some benchmarking code to substantiate his claims, and then enlisted me to solidify matters. I used his code as a base, and ran the same engine test code through better-benchmark. I put the benchmarking code up as a gist. The full results are embedded as a comment at the end of the gist. Here is a summary:

Template type Etanni faster
than ERb by
Just HTML (no templating) 38.3%
In-template loop with expression interpolation 20.7%
Ruby expression evaluation 43.9%

Based on the results of this little test we might conclude: If rendering speed is a concern, but you also want to just stick with your framework’s default engine to minimize gem dependencies, go with Ramaze. :)

Share/Save/Bookmark

Related posts:

  1. Rails’ memoization is not always faster
  2. Ramaze by Example - Part 4: View
  3. Ruby on Rails - Steering Is Futile

Syndicated 2009-06-02 16:14:53 from Catholicism Computes

Chaminade - Scarf Dance, Op. 37, No. 3

This piece, also known as Der Schärpentanz or Pas des écharpes, is by French pianist and composer Cécile Chaminade.

Read more about my piano recording series here.

Share/Save/Bookmark

Related posts:

  1. Chopin - Prelude in A major, Op. 28, No. 7
  2. Debussy - Rêverie
  3. Thomas - For Thee

Syndicated 2009-05-30 02:37:18 from Catholicism Computes

8 reasons why I prefer FriendFeed over Twitter

On account of the recent Twitter reply system fiasco (see Twitter blog entries 1, 2, 3, 4 and related backlash spewed across the Internet), I recently joined FriendFeed on recommendation by Jaykul. It didn’t take long for me to be really impressed with this service, and for Twitter to look pretty rinky-dink in comparison.

If you just want a basic short message service with almost no frills, then sure, Twitter fits the bill. But if you’re going to be using your communications service a lot, I think you might be pleasantly surprised, like I am, by all the great things FriendFeed is and does. The following points may not provide enough justification for you to join FriendFeed (or completely switch over), but it is for me.

Of course, there are other features of FriendFeed beyond the ones I list here, but they are not the main selling points for me personally. You can read FriendFeed’s own sales pitch on the FriendFeed home page.

8. Quickly find friends already on FriendFeed

While signing up, you are given the opportunity to find your friends who might already have FriendFeed accounts. After one click (and giving my nick), it imported everyone I knew on Twitter who were already on FriendFeed. Granted, Twitter has a similar on-join feature, but Twitter only imports from popular email services, whereas FriendFeed also imports from Twitter and Facebook.

7. Comments are second class citizens

I care about what I post to the Internet. I believe in the quality of my postings. I think that I owe it to my readership (and potential readership) to make everything I post on the net worth reading — something that would, if even just a little bit, enrich the life of the reader. This holds especially true for this blog of mine, but also applies to my microblogging, even if only to a lesser extent.

Sometimes we want to reply to or acknowledge a tweet, or maybe just chuckle with the tweeter when they make a joke or witty remark. On Twitter, what am I to do? If I reply tweet with nothing but “@Jaykul lol”, I’d have degraded the quality of my tweetstream. If I’m not willing to do that, then I have effectively been suppressed by the limitations of Twitter.

On FriendFeed, everyone has a main feed to which they can post messages, just like on Twitter or Facebook. But over there, I can comment on Jaykul’s tweet with my one-word laugh message, and my main feed is not polluted.

6. Like or Share, not retweet

On FriendFeed, I can indicate I like something with a single click. Then, everyone who cares to know (dependent on their account settings) can see what I marked. The advantage there is that I don’t need to expend message text on attribution (”RT @nickname …”). FriendFeed records and displays that metadata for me. This character savings becomes more pronounced with further degrees of retweeting; you lose dozens of precious tweet characters when trying to preserve multiple attributions (”RT @nickname1 @nickname2 @nickname3…”). Not so with FriendFeed.

Full-fledged sharing is also possible, to any of several other social sites, including Twitter, Facebook, Digg, Reddit and Delicious.

5. Shortened URLs are expanded

Those of you wary of (or downright averted to) URL shortening will be pleased to hear that FriendFeed expands URLs for you in your FriendFeed homepage. If you don’t know what the problems with URL shorteners are, I’ll let you exercise your google fu and find out.

4. Echo to Twitter

FriendFeed allows you to echo your messages over to Twitter, so you still have a heartbeat over there while you wait for people to get FriendFeed accounts. This of course removes the need to post the same message manually in both places.

3. Aggregate other services, including Twitter

FriendFeed has this great feature called “imaginary friends”. Yeah, get the giggles out of your system from that name, then let’s move on. :) By creating an imaginary FriendFeed friend, you can in effect follow (subscribe) to their accounts on other services — 57 other services, to be exact, including Twitter, Flickr, Facebook, and many others. This way, you can effectively import your Twitter friends who haven’t joined FriendFeed yet. Once added as an imaginary friend, all their Twitter updates (or Flickr photos, or Facebook updates) appear in your FriendFeed home page.

Let’s recap the last two points again: You can post to Twitter from FriendFeed instead of at Twitter, and you can receive your Twitter friends’ updates on FriendFeed instead of at Twitter. In other words, it’s really starting to look like you don’t need Twitter much any more. I only check it once in a while for direct messages, or for updates from people I haven’t turned into imaginary friends yet.

You can also follow any RSS feed with FriendFeed, which makes it a sort of primitive or summary-only RSS reader or aggregator. I’m not an avid RSS collector (uses up too much time, a resource of which I have precious little to spare), so this suits me just fine. For example, it’s allowed me to follow my personal github.com feed on FriendFeed instead of in a separate github browser tab. Nice and tidy and unified.

2. No 140 character limit

For the most part, I do not communicate in short squirts.

I’ve lost count how many times I’ve tried to tweet something, then had to trim it down because of the 140 character limit, and also because I was trying not to break a message across two tweets. One time I used “shorthand” like “2″ for “to” or “u” for “you”, and was almost ashamed of myself for doing so. Those of you that know me know that writing like that is so not me.

So, not having to restrict myself to the limits of an archaic technology was a huge selling point. I don’t use my phone for text messaging, and I definitely don’t use it for updating Twitter, Facebook or FriendFeed. So that 140 character limit feels annoying at best.

1. Very high usability; nice design

FriendFeed’s website is extremely well-designed. There are many signs of the user interface being well thought out, and it’s clear that usability was given importance during development. You should check it out for yourself, so you can experience what I’m talking about first-hand, but I can list a few items here.

The FriendFeed site strikes a great balance between AJAX versus full page loads. You get a spinner (AJAX) or popup (JS/CSS) where appropriate; a full page refresh where appropriate. This lends to a snappy and fluid user experience.

Hover over an account or group, and you get a handy JS/CSS popup that gives info and links for doing things or learning about that account or group. This in effect reduces click depth, which gives the feel that the information you want is that much more accessible and readily available.

Text boxes start out small, but automatically expand in size as needed, when the text you type gets lengthy. This lets the interface remain tidy and concise, but grow dynamically if there is a functional need.

When viewing a feed (such as the one on your personal FriendFeed home page), it updates in realtime with AJAX/JS effects. Contrast that behaviour with the pages on Twitter.

FriendFeed is very customizable. You can tweak notification settings, Twitter publishing preferences, and numerous other little things. As with all software, options help to give a very satisfying experience, because the same software can be tailored to satisfy many different tastes and preferences.

Multiple messages are compressed into “see more” links, which further helps keep the interface tidy. You can also Hide things with one click. With another click, you can hide similar items, too. For example, you might choose to hide a particular flickr photo of one friend — or go the distance and ignore their entire flickr photo stream.

When viewing someone or a group you might subscribe to, it tells you that the person posts “about 5 posts per day”. This lets you quickly gauge how much activity the person or group would add to your feed.

Conclusion

In summary, I think these reasons combine to make switching from Twitter to FriendFeed very compelling. FriendFeed offers everything Twitter does for me, and it does it much better, while also providing several enhanced features that Twitter does not provide.

If you’re a Twitter user, you at least owe it to yourself to make a FriendFeed account and test drive it. Compare and make a decision for yourself.

Share/Save/Bookmark

No related posts.

Syndicated 2009-05-19 15:45:33 from Catholicism Computes

Ramaze 2009.05 released

Ramaze 2009.05 has been released. This marks a new, brighter era in the Ramaze world.

Innate

For those of you that have not been following, manveru (Ramaze lead dev) had been brewing a new web framework core called Innate since the middle of last year. As of today, Innate is pretty much done, and only sees minor updates. Innate has its own repository on github, where you can find a detailed README. Innate is built on top of Rack, the “web framework framework”, and acts as the core for Ramaze as of this Ramaze release.

Upgrade carefully

Because of this big change, Ramaze applications built with Ramaze 2009.03 or prior need non-trivial effort to port to 2009.05. As such, proceed with caution when upgrading your gem, especially on production servers. You can install multiple Ramaze gem versions side by side, and then select a specific version in your applications as follows:

  require 'rubygems'
gem 'ramaze', '2009.03'
require 'ramaze'

Install or update Ramaze with

  gem install ramaze

The Ramaze team would like to apologize to those who unwittingly upgraded their Ramaze gems to 2009.04, which was essentially a beta release of the new Innate-cored Ramaze. We understand and acknowledge that it may have caused some confusion for some, since legacy apps have a high chance of not working without modification, and also since nearly all online information written about Ramaze to date covers pre-Innate Ramaze. We hope to rectify the situation with this release and announcement, and thank you for your understanding.

Documentation

As is the tradition in the Ramaze community, new code doesn’t come without a healthy dose of documentation. manveru has taken a lot of time to document the way things work in Ramaze 2009.05. Along with this release, he presents the fully updated, official online Ramaze book. It is quite detailed, and should help newcomers and old timers alike get to know the new Ramaze. Although not complete at this time, it is receiving regular updates and additions. The source of the book is open source.

manveru has also updated his Ramaze todo list tutorial to work with 2009.05.

Don’t forget that the source code repositories of Ramaze and Innate also have abundant documentation in them. Questions about Ramaze are sometimes answered by simply grepping the source code and reading the documentation, examples and tests. Consult both Ramaze and Innate source.

It’s a good idea to bear in mind that anything written about Ramaze up to March 2009 may not accurately reflect Ramaze as it stands in April 2009 and onwards.

Major changes

Below are some of the changes introduced by the advance from 2009.03 to 2009.05. Do not consider it exhaustive; you’d be better served checking other sources like the Ramaze book, and also hanging out in IRC so you can ask questions and receive live support. The mailing list is also a good way to get specific questions answered.

Content representations

Controllers can now provide one of multiple representations when responding to requests, based on conditions of your choosing. For example, this new feature lets you serve a normal response to /foo, but a JSON response to /foo.json. You can even use different templating engines for different wishes. See the content representations section of the Ramaze book and the source code of Innate::Node for more details.

Modes

Ramaze applications can now run in different modes, such as :dev and :live. You can make up custom modes since a mode is simply a nested array of Rack middleware.

Layouts

Layouts now reside in their own directory, layout/, distinct from the view/ directory. (As usual in the Ramaze world, these specific directories are only defaults.) Layout specification can also now take a code block to control when a layout is applied. See the layout section of the Ramaze book for more details.

Helpers

The old link helper’s methods (A, R and Rs) have been deprecated and replaced by Innate’s link helper’s methods: a, r and rs. They are mostly interchangeable, but the r methods can now also be called “off of” controllers:

OtherController.r( :foo, :bar, :a => :b )
#=> URI('/other/foo/bar?a=b')

The old partial helper has now been replaced by the render helper of Innate. The source code for the render helper is well-documented. Refer to it for usage syntax and examples.

Apps

Ramaze Apps have been introduced (notice the spelling with a capital A). A Ramaze App can be thought of as a namespace for controllers and options. You can thus take related controllers, and then package, distribute and reuse them with relative ease. An App is itself mapped to a path of your site, and can also use directories specific to it. Some example code:

module Forumaze
  class MainController < Ramaze::Controller
    map '/', :forumaze
  end
 
  class AdminController < Ramaze::Controller
    map '/admin', :forumaze
  end
end
 
app = Ramaze::App[ :forumaze ]
 
# path on site (relative URL)
app.location = '/forum'  
 
# filesystem paths relative to current dir
app.options.publics = 'forumaze/public'  
app.options.views = 'forumaze/view'
app.options.layouts = 'forumaze/layout'

With the above code, hits to http://yourdomain.com/forum would be served by Forumaze::MainController, and hits to http://yourdomain.com/forum/admin would be served by Forumaze::AdminController. Views would be taken from the directories forumaze/view/ and forumaze/view/admin. The same idea applies for static files and layouts of this App.

You can have multiple Controllers per App, and multiple Apps per Ramaze application.

ramaze binary

The ramaze binary has been updated. See ramaze --help and the ramaze command section in the Ramaze book.

Ezamar -> Etanni

The old default templating engine, Ezamar, has been replaced by the Innate equivalent, Etanni (or the more powerful Nagoro, if you choose). Ezamar templates should be forward-compatible with Etanni, but Ezamar Elements have been removed. To keep using Elements, use either Nagoro, which has Elements too, or the new render helper, which can accomplish the same thing in a different way.

Miscellany

The old start.ru Rackup file has been replaced with config.ru. This is particularly important for those of you deploying with mod_rack (Passenger).

Ramaze::Global has been removed and replaced with Ramaze.options which is intended to be a much better means of configuring Ramaze. Ramaze.options is also extensible, so you can use it for custom configuration of your applications.

Contributors

Direct contributions to the code repository for this release came from the following people (listed alphabetically, nickname in parentheses):

Innate

  • Sam Carr
  • Michael Fellinger (manveru)
  • Ryan Grove (rgrove)
  • Andreas Karlsson (jeltz)
  • (Pistos)
  • Tadahiko Uehara (kiko)
  • TJ Vanderpoel (bougyman)

Ramaze

  • Clive Crous (clive)
  • Michael Fellinger (manveru)
  • Ryan Grove (rgrove)
  • Aman Gupta (tmm1)
  • Andreas Karlsson (jeltz)
  • Victor Luft
  • (Pistos)
  • Tadahiko Uehara (kiko)
  • TJ Vanderpoel (bougyman)

Of course, all the folks who use and test drive Ramaze every day also deserve thanks, not just for using it, but also for providing valuable feedback on previous releases ramping up to this one.

As usual, we’d love to hear from long-time users and newbies alike. :) Stop by and say hello in our IRC channel (#ramaze on Freenode), or ask questions on our mailing list. We know converting old Ramaze apps may be challenging for some, but we’re here to help make the transition as smooth as possible for you. :)

Enjoy this release, and keep on Ramazing!

Share/Save/Bookmark

Related posts:

  1. Ramaze 2009.02 released
  2. Ramaze 2009.01 released
  3. Managing web application errors with Hoptoad and Ramaze

Syndicated 2009-05-06 16:02:38 from Catholicism Computes

Chopin - Prelude Op. 28, No. 20 in C minor

A short, sombre prelude by Chopin.

Read more about my piano recording series here.

Share/Save/Bookmark

Related posts:

  1. Chopin - Prelude in A major, Op. 28, No. 7
  2. Chopin - Waltz Op. 64 No. 2 in C# minor
  3. Chopin - Waltz Op. 69 No. 1 in Ab major

Syndicated 2009-05-03 19:20:39 from Catholicism Computes

Chopin - Prelude in A major, Op. 28, No. 7

A very short prelude in A by my favourite composer.

Read more about my piano recording series here.

Share/Save/Bookmark

Related posts:

  1. Chopin - Prelude Op. 28, No. 20 in C minor
  2. Chopin - Waltz Op. 69 No. 1 in Ab major
  3. Chopin - Waltz Op. 64 No. 2 in C# minor

Syndicated 2009-05-02 03:05:43 from Catholicism Computes

Diakonos - version 0.8.8

Version 0.8.8 of Diakonos is now available. This release delivers several new features, and also brings about a big change…

No more gem

Beginning with this release, I am doing something radical: I am not releasing Diakonos as a Ruby gem. While that may seem strange to some, I think the move is not only justified, but better for Diakonos.

I don’t believe Diakonos has a tremendously large user base at the moment. According to DistroWatch and LinuxRank, Ubuntu is easily the most popular Linux distribution. If Diakonos is to gain any popularity, it behooves me to ensure that it installs onto and plays well with Ubuntu.

I noticed that the Debian package for Diakonos had fallen behind my upstream releases (it was stuck at 0.8.4). I exchanged e-mails with Ralph Amissah, the maintainer of the Debian package (and, by extension, indirect maintaner of the Ubuntu package too), and was thereby informed that the inception of the new help system (introduced in 0.8.6) impeded the downstream updates. In particular, Diakonos’ downloading of configuration and help files for first time users was behaviour that ran contrary to Debian policy.

I think Debian and Ubuntu users who are not advanced Linux users would be more inclined to install packages via the apt system, as opposed to via RubyGems.

Furthermore, I have concluded that the RubyGems system is tailored much more towards libraries, and not applications. It’s great for putting files where Ruby’s require and load statements can find them. But it’s not so well suited to moving global configuration files into /etc, or system-wide documentation into /usr/share/doc. I mumbled about this over two years ago. At first, I worked around the problem by having Diakonos installed via RubyGems, and then downloading configuration files (and, later, help files) from the Internet when the user first runs Diakonos. But, as I’ve mentioned, this prevented smooth inclusion into the Debian package repositories.

RubyGems is focused on letting Ruby developers disseminate their libraries to other Ruby developers; Diakonos is an end-user application. That it is written in Ruby is secondary and peripheral; it is not my intention to present a cute novelty to the amusement and delight of a fraction of the developers of a subculture programming language. My goal is to create the most user-friendly console editor for Linux (”a Linux editor for the masses”).

In light of these facts, I elected to abandon the RubyGems system in favour of a custom installer (install.rb in the package). This installer would allow a distro package maintainer to install Diakonos to specific locations of his or her choosing in the filesystem. I envision that package maintainers for all distros should have little difficulty using it to create or update their packages. Of course, it is easy to use for the end user himself, as well. It can be used to install Diakonos completely in userspace (i.e. somewhere under a user’s home directory, without the need for root/sudo privileges).

The new package (simply a tarball) contains everything needed to run Diakonos, including default configuration files and a full set of help files. Diakonos no longer accesses the Internet for these like it used to in previous versions.

Configuration is loaded from the system-wide location (specified during installation), but user-specific overrides are (as before) loaded from ~/.diakonos/diakonos.conf.

Configuration inheritance

Configuration settings can now be inherited (cascaded). Simply use an equals sign (=) to set one setting to the value of another.

  one.setting = another.setting

For an example, have a look at the Ruby language definition in the default config file. See how the shared settings are defined earlier in the file.

This inheritance will work for any setting, not just formatting. The important thing to remember is that Diakonos will parse configuration files top to bottom, and visit each included file in the order the include directives are encountered, with a depth-first strategy. So you should define ancestor settings before descendant settings.

Block selection

You can now switch between block (columnar) selection and normal (flow) selection. Default keychains: <Alt-Shift-M, B> for block, <Alt-Shift-M, N> for normal. Mnemonic: M for Mark, B for Block, N for Normal.

Line numbering

Default keychord <Alt-Shift-L> can be used to toggle line numbering on and off. Line numbers appear in a left-side margin. Enable line numbering permanently by setting view.line_numbers to true in your config. Set view.line_numbers.width to the number of columns to use for the line numbering margin. view.line_numbers.number_format is the setting to use to define a sprintf format for the line numbers. Set the colour and brightness with view.line_numbers.format.

Code block navigation

A cool thing I’ve added in this release is code block navigation. Using Ctrl-PageDown, you can jump to the next code block of the same indentation level as the current line. Ctrl-PageUp goes back in the opposite direction (up or previous block). You might use this to easily browse: the methods of a class; or the different when clauses of a Ruby case expression; or the components of an if-elsif-else tree; or the rules of a CSS stylesheet; and so on. Diakonos will automatically limit the extent of the navigation, so if you start your browsing within an if-elsif tree, your cursor won’t jump outside that tree if you press Ctrl-PageDown too many times.

Alt-PageDown brings the cursor one block level deeper; Alt-PageUp brings you out one level.

Column markers

You can now define column markers using the view.column_markers.* settings. I’ve provided an example in the default config:

  view.column_markers.margin.column 80
view.column_markers.margin.format 9

Uncommenting or adding these lines would set up a column marker named “margin”. The name “margin” is arbitrary; use whatever names you want for your markers. The “margin” marker would highlight the 80th column using the format code 9 (white on red in the default 16-colour configuration).

You might use such a column marker as a visual cue to help you not exceed a certain line length. You can set up as many column markers as you like.

Remove word from input line

Pressing Ctrl-W on the input line will now delete the last word on the line. I mainly included this to lop off file path components when opening new files or grepping directories.

Ruby 1.9 and 1.8 support

Ruby 1.9 support is even better now. There are no known issues with Diakonos running under Ruby 1.9.1. If you encounter anything, please let me know.

As I move forward with development, I am preferring 1.9 styles and constructions where there is a choice. As such, some functions of Diakonos may no longer function under Ruby 1.8. I encourage you to install Ruby 1.9 if you have not already, and to keep both versions concurrently installed on your systems. The Ruby community benefits when people move forward to adopt and use this latest stable release of Ruby.

A corollary of running under 1.9 is the ability to open and edit files with encodings other than ASCII. The little test files I opened were handled by Diakonos without difficulty. I could insert and delete UTF-8 characters and save the file. Any real world usage (testing) of Diakonos with non-ASCII files is appreciated!

Also, don’t forget that things run faster under Ruby 1.9, and Diakonos is no exception!

Et cetera

Several bugs were fixed (see the git commit log for details). If you subscribed to the particular LinisTrac tickets in question, you would have already been notified.

The rest of the changes are described in this version’s full changelog:

  • New installation and uninstallation method: tarball + install.rb.
  • Added configuration setting inheritance.
  • Added block selection mode (Alt-Shift-M B; Alt-Shift-M N).
  • Added line numbering settings.
  • Added spawn function.
  • Added go_block_previous, go_block_next (Ctrl-PageUp, Ctrl-PageDown).
  • Added go_block_outer, go_block_inner (Alt-PageUp, Alt-PageDown).
  • “Remove word” functionality (Ctrl-W) added to readline.
  • Added find.show_context_after setting.
  • Added view.column_markers.
  • Added lang.____.indent.not_indented setting.
  • Introduced $d shell variable: current buffer’s directory.
  • $f and $d now expand to absolute paths.
  • delete_to and delete_to_and_from can now operate over multiple lines.
  • delete_to_and_from can now delete between matching brackets.
  • Added git diff (F9).
  • Ruby 1.9 support smoothed out. Ruby 1.8 support being deprecated.
  • Support for non-ASCII encodings tentatively confirmed.
  • Several bugs fixed.
  • Help files updated.

As usual, report any bugs here, or come visit me in IRC. If you like Diakonos, please consider making a small donation.

Enjoy version 0.8.8!

Share/Save/Bookmark

Related posts:

  1. Diakonos - version 0.8.6
  2. Diakonos - version 0.8.7
  3. Diakonos - version 0.8.5

Syndicated 2009-04-03 19:17:26 from Catholicism Computes

7 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!