summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--misc/ruby-mode.el39
2 files changed, 42 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index b0517f6bea..a493391da7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,6 @@
-Wed Mar 30 22:54:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Wed Mar 30 22:55:47 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * misc/ruby-mode.el (ruby-toggle-block): toggle do/end and {}.
* misc/ruby-mode.el (ruby-move-to-block): move to opening of
block.
diff --git a/misc/ruby-mode.el b/misc/ruby-mode.el
index 3799541901..48d91836f2 100644
--- a/misc/ruby-mode.el
+++ b/misc/ruby-mode.el
@@ -172,6 +172,7 @@
(define-key ruby-mode-map "\t" 'ruby-indent-command)
(define-key ruby-mode-map "\C-c\C-e" 'ruby-insert-end)
(define-key ruby-mode-map "\C-j" 'ruby-reindent-then-newline-and-indent)
+ (define-key ruby-mode-map "\C-c{" 'ruby-toggle-block)
(define-key ruby-mode-map "\C-c\C-u" 'uncomment-region))
(defvar ruby-mode-syntax-table nil
@@ -1161,6 +1162,44 @@ balanced expression is found."
(if mlist (concat mlist mname) mname)
mlist)))))
+(defun ruby-brace-to-do-end ()
+ (when (looking-at "{")
+ (let ((orig (point)) (end (progn (ruby-forward-sexp) (point))))
+ (when (eq (char-before) ?\})
+ (delete-char -1)
+ (if (eq (char-syntax (char-before)) ?w)
+ (insert " "))
+ (insert "end")
+ (if (eq (char-syntax (char-after)) ?w)
+ (insert " "))
+ (goto-char orig)
+ (delete-char 1)
+ (if (eq (char-syntax (char-before)) ?w)
+ (insert " "))
+ (insert "do")
+ (if (eq (char-syntax (char-after)) ?w)
+ (insert " "))
+ t))))
+
+(defun ruby-do-end-to-brace ()
+ (when (and (or (bolp)
+ (not (memq (char-syntax (char-before)) '(?w ?_))))
+ (looking-at "\\<do\\(\\s \\|$\\)"))
+ (let ((orig (point)) (end (progn (ruby-forward-sexp) (point))))
+ (backward-char 3)
+ (when (looking-at ruby-block-end-re)
+ (delete-char 3)
+ (insert "}")
+ (goto-char orig)
+ (delete-char 2)
+ (insert "{")
+ t))))
+
+(defun ruby-toggle-block ()
+ (interactive)
+ (or (ruby-brace-to-do-end)
+ (ruby-do-end-to-brace)))
+
(eval-when-compile
(if (featurep 'font-lock)
(defmacro eval-when-font-lock-available (&rest args) (cons 'progn args))