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/