On Jan 8, 2004, at 8:33 PM, Pete Yadlowsky wrote:

> I like Ruby very much except for one thing: all those "end" tokens 
> scattered
> everywhere. For my style of coding, they are superfluous and, in my 
> opinion,
> only serve to clutter the code. I very much like Python's indent 
> blocking
> style and would like to use it with Ruby. Indenting does everything I 
> need it
> to do in terms of establishing structure and enhancing readability. 
> Once you
> get used to this style (I've been using it for just about all 
> languages and
> for longer than Python has existed), delimiter tokens become 
> unnecessary and
> unwanted.
>
> I'm sure the topic of Python-style blocking in Ruby has been brought up
> before. Is there a general consensus on this in the community? Before I
> totter off to write my own Ruby preprocessor, does such a thing already
> exist? Thanks.

As a simple workaround, I wrote this little code to hide ends in a row 
and collapse their lines in Emacs. Useful for reading but not for 
writing:

-- fxn

(defvar ruby-ends-hide-regexp-overlays nil "")
(make-variable-buffer-local 'ruby-ends-hide-regexp-overlays)

(defun hide-ruby-ends ()
   "Hide Ruby end keywords."
   (interactive)
   (let ((regexp "^\\(?:[ \t]*\\(?:end\\|}\\)\n\\)+"))
     (save-excursion
       (goto-char (point-min))
       (while (and (< (point) (point-max))
                   (re-search-forward regexp nil t))
         (let ((overlay (make-overlay (match-beginning 0) (match-end 
0))))
           (overlay-put overlay 'invisible 't)
           (overlay-put overlay 'intangible 't)
           (overlay-put overlay 'before-string "")
           (overlay-put overlay 'after-string "")
           (setq ruby-ends-hide-regexp-overlays
                 (cons overlay ruby-ends-hide-regexp-overlays)))))))

(defun unhide-ruby-ends ()
   "Unhide Ruby end keywords."
   (interactive)
   ;; remove all overlays in the buffer
   (while (not (null ruby-ends-hide-regexp-overlays))
     (delete-overlay (car ruby-ends-hide-regexp-overlays))
     (setq ruby-ends-hide-regexp-overlays (cdr 
ruby-ends-hide-regexp-overlays))))

(defvar ruby-ends-are-hidden nil "")
(make-variable-buffer-local 'ruby-ends-are-hidden)

(defun toggle-ruby-ends ()
   "Hide/unhide Ruby end keywords."
   (interactive)
   (cond (ruby-ends-are-hidden (unhide-ruby-ends)
                               (setq ruby-ends-are-hidden nil))
         (t (hide-ruby-ends)
            (setq ruby-ends-are-hidden t))))