diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 8eadf018a67..340c689f02e 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -1690,7 +1690,8 @@ See `add-log-current-defun-function'." (when (eq (char-before) ?\}) (delete-char -1) (when (save-excursion - (skip-chars-backward " \t") + (let ((n (skip-chars-backward " \t"))) + (if (< n 0) (delete-char (- n)))) (not (bolp))) (insert "\n")) (insert "end") diff --git a/test/lisp/progmodes/ruby-mode-tests.el b/test/lisp/progmodes/ruby-mode-tests.el index efbe012427f..83fcdd8aa85 100644 --- a/test/lisp/progmodes/ruby-mode-tests.el +++ b/test/lisp/progmodes/ruby-mode-tests.el @@ -369,7 +369,11 @@ VALUES-PLIST is a list with alternating index and value elements." (ruby-with-temp-buffer "foo {|b|\n}" (beginning-of-line) (ruby-toggle-block) - (should (string= "foo do |b|\nend" (buffer-string))))) + (should (string= "foo do |b|\nend" (buffer-string)))) + (ruby-with-temp-buffer "foo {|b| b }" + (beginning-of-line) + (ruby-toggle-block) + (should (string= "foo do |b|\n b\nend" (buffer-string))))) (ert-deftest ruby-toggle-block-to-brace () (let ((pairs '((17 . "foo { |b| b + 2 }")