[前][次][番号順一覧][スレッド一覧]

ruby-changes:19179

From: nobu <ko1@a...>
Date: Wed, 30 Mar 2011 22:55:56 +0900 (JST)
Subject: [ruby-changes:19179] Ruby:r31218 (trunk): * misc/ruby-mode.el (ruby-toggle-block): toggle do/end and {}.

nobu	2011-03-30 22:55:50 +0900 (Wed, 30 Mar 2011)

  New Revision: 31218

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31218

  Log:
    * misc/ruby-mode.el (ruby-toggle-block): toggle do/end and {}.

  Modified files:
    trunk/ChangeLog
    trunk/misc/ruby-mode.el

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 31217)
+++ ChangeLog	(revision 31218)
@@ -1,5 +1,7 @@
-Wed Mar 30 22:54:24 2011  Nobuyoshi Nakada  <nobu@r...>
+Wed Mar 30 22:55:47 2011  Nobuyoshi Nakada  <nobu@r...>
 
+	* misc/ruby-mode.el (ruby-toggle-block): toggle do/end and {}.
+
 	* misc/ruby-mode.el (ruby-move-to-block): move to opening of
 	  block.
 
Index: misc/ruby-mode.el
===================================================================
--- misc/ruby-mode.el	(revision 31217)
+++ misc/ruby-mode.el	(revision 31218)
@@ -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 @@
               (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))

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]