summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-03-30 13:54:26 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-03-30 13:54:26 +0000
commit764c486b8459cb4426fb2be77b4cd93879853911 (patch)
tree55b8c013715343983c233e4c061f4a347099d46f /misc
parent3e2a0184d0169131c0db735ffb5b61eb3f22d2fa (diff)
* misc/ruby-mode.el (ruby-move-to-block): move to opening of
block. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31217 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'misc')
-rw-r--r--misc/ruby-mode.el16
1 files changed, 13 insertions, 3 deletions
diff --git a/misc/ruby-mode.el b/misc/ruby-mode.el
index a65278eff7..3799541901 100644
--- a/misc/ruby-mode.el
+++ b/misc/ruby-mode.el
@@ -910,7 +910,7 @@ An end of a defun is found by moving forward from the beginning of one."
(forward-line 1))
(defun ruby-move-to-block (n)
- (let (start pos done down)
+ (let (start pos done down (orig (point)))
(setq start (ruby-calculate-indent))
(setq down (looking-at (if (< n 0) ruby-block-end-re
(concat "\\<\\(" ruby-block-beg-re "\\)\\>"))))
@@ -936,8 +936,18 @@ An end of a defun is found by moving forward from the beginning of one."
(save-excursion
(back-to-indentation)
(if (looking-at (concat "\\<\\(" ruby-block-mid-re "\\)\\>"))
- (setq done nil))))))
- (back-to-indentation))
+ (setq done nil)))))
+ (back-to-indentation)
+ (when (< n 0)
+ (let ((eol (point-at-eol)) state next)
+ (if (< orig eol) (setq eol orig))
+ (setq orig (point))
+ (while (and (setq next (apply 'ruby-parse-partial eol state))
+ (< (point) eol))
+ (setq state next))
+ (when (cdaadr state)
+ (goto-char (cdaadr state)))
+ (backward-word)))))
(defun-region-command ruby-beginning-of-block (&optional arg)
"Move backward to next beginning-of-block"