mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-04 11:00:45 -08:00
Merge from upstream ruby-mode.el
* lisp/progmodes/ruby-mode.el (ruby-mode-map): Remove unnecessary binding for `newline'. (ruby-move-to-block): When moving backward, stop at block opening, not indentation. * progmodes/ruby-mode.el (ruby-brace-to-do-end) (ruby-do-end-to-brace, ruby-toggle-block): New functions. * progmodes/ruby-mode.el (ruby-mode-map): Add binding for `ruby-toggle-block'. * test/automated/ruby-mode-tests.el (ruby-move-to-block-stops-at-opening) (ruby-toggle-block-to-do-end, ruby-toggle-block-to-brace): New test.
This commit is contained in:
parent
577d5eea9a
commit
0d9e2599ec
4 changed files with 115 additions and 15 deletions
|
|
@ -150,7 +150,7 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
|
|||
(define-key map (kbd "M-C-q") 'ruby-indent-exp)
|
||||
(define-key map (kbd "C-M-h") 'backward-kill-word)
|
||||
(define-key map (kbd "C-j") 'reindent-then-newline-and-indent)
|
||||
(define-key map (kbd "C-m") 'newline)
|
||||
(define-key map (kbd "C-c {") 'ruby-toggle-block)
|
||||
map)
|
||||
"Keymap used in Ruby mode.")
|
||||
|
||||
|
|
@ -881,10 +881,11 @@ or blocks containing the current block."
|
|||
;; TODO: Make this work for n > 1,
|
||||
;; make it not loop for n = 0,
|
||||
;; document body
|
||||
(let (start pos done down)
|
||||
(setq start (ruby-calculate-indent))
|
||||
(setq down (looking-at (if (< n 0) ruby-block-end-re
|
||||
(concat "\\<\\(" ruby-block-beg-re "\\)\\>"))))
|
||||
(let ((orig (point))
|
||||
(start (ruby-calculate-indent))
|
||||
(down (looking-at (if (< n 0) ruby-block-end-re
|
||||
(concat "\\<\\(" ruby-block-beg-re "\\)\\>"))))
|
||||
pos done)
|
||||
(while (and (not done) (not (if (< n 0) (bobp) (eobp))))
|
||||
(forward-line n)
|
||||
(cond
|
||||
|
|
@ -907,8 +908,18 @@ or blocks containing the current block."
|
|||
(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 ruby-beginning-of-block (&optional arg)
|
||||
"Move backward to the beginning of the current block.
|
||||
|
|
@ -1116,6 +1127,47 @@ See `add-log-current-defun-function'."
|
|||
(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")
|
||||
(when (looking-at "\\sw\\||")
|
||||
(insert " ")
|
||||
(backward-char))
|
||||
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 "{")
|
||||
(if (looking-at "\\s +|")
|
||||
(delete-char (- (match-end 0) (match-beginning 0) 1)))
|
||||
t))))
|
||||
|
||||
(defun ruby-toggle-block ()
|
||||
(interactive)
|
||||
(or (ruby-brace-to-do-end)
|
||||
(ruby-do-end-to-brace)))
|
||||
|
||||
(declare-function ruby-syntax-propertize-heredoc "ruby-mode" (limit))
|
||||
(declare-function ruby-syntax-general-delimiters-goto-beg "ruby-mode" ())
|
||||
(declare-function ruby-syntax-propertize-general-delimiters "ruby-mode" (limit))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue