branch: externals/ruby-end
commit 91f3c3fc6e367ebeaba5cd42b95e2c8f3bec5fa4
Author: Johan Andersson <[email protected]>
Commit: Johan Andersson <[email protected]>
Add option to expand on return.
---
features/ruby-end.feature | 19 +++++++++++++++
features/step-definitions/ruby-end-steps.el | 4 ++++
features/support/env.el | 3 ++-
ruby-end.el | 36 +++++++++++++++++++++++------
4 files changed, 54 insertions(+), 8 deletions(-)
diff --git a/features/ruby-end.feature b/features/ruby-end.feature
index a93933e03e..5360111434 100644
--- a/features/ruby-end.feature
+++ b/features/ruby-end.feature
@@ -162,3 +162,22 @@ Feature: Insert end
end
"""
+ Scenario: Expand on return
+ When I type "Proc.new do"
+ And I press "RET"
+ Then I should see:
+ """
+ Proc.new do
+
+ end
+ """
+
+ Scenario: Do not expand on return when disabled
+ Given I disable expand on return
+ When I type "Proc.new do"
+ And I press "RET"
+ Then I should see:
+ """
+ Proc.new do
+
+ """
diff --git a/features/step-definitions/ruby-end-steps.el
b/features/step-definitions/ruby-end-steps.el
index 74ae3a1918..ae9ab7fdc8 100644
--- a/features/step-definitions/ruby-end-steps.el
+++ b/features/step-definitions/ruby-end-steps.el
@@ -41,3 +41,7 @@
(Given "^insert newline is turned off$"
(lambda ()
(setq ruby-end-insert-newline nil)))
+
+(Given "I disable expand on return"
+ (lambda ()
+ (setq ruby-end-expand-on-ret nil)))
diff --git a/features/support/env.el b/features/support/env.el
index 017d6f8f19..636e6eff37 100644
--- a/features/support/env.el
+++ b/features/support/env.el
@@ -9,7 +9,8 @@
(add-to-list 'load-path (expand-file-name "emacs-lisp" (expand-file-name
"lisp" (expand-file-name "ert" ruby-end-util-path))))
(Before
- (setq ruby-end-insert-newline t))
+ (setq ruby-end-insert-newline t)
+ (setq ruby-end-expand-on-ret t))
(require 'ruby-end)
(require 'espuds)
diff --git a/ruby-end.el b/ruby-end.el
index 7c6a4543f6..dd66f83780 100644
--- a/ruby-end.el
+++ b/ruby-end.el
@@ -48,13 +48,21 @@
(require 'ruby-mode)
-(defvar ruby-end-expand-key "SPC"
+(defvar ruby-end-expand-spc-key "SPC"
"Space key name.")
+(defvar ruby-end-expand-ret-key "RET"
+ "Return key name.")
+
+(defvar ruby-end-expand-on-ret t
+ "Should return expand or not.")
+
(defvar ruby-end-mode-map
(let ((map (make-sparse-keymap))
- (key (read-kbd-macro ruby-end-expand-key)))
- (define-key map key 'ruby-end-space)
+ (spc (read-kbd-macro ruby-end-expand-spc-key))
+ (ret (read-kbd-macro ruby-end-expand-ret-key)))
+ (define-key map spc 'ruby-end-space)
+ (define-key map ret 'ruby-end-return)
map)
"Keymap for `ruby-end-mode'.")
@@ -97,10 +105,24 @@
(ruby-end-insert-end)
(insert " "))
(t
- (let ((ruby-end-mode nil))
- (call-interactively
- (key-binding
- (read-kbd-macro ruby-end-expand-key)))))))
+ (ruby-end-fallback ruby-end-expand-spc-key))))
+
+(defun ruby-end-return ()
+ "Called when RET-key is pressed."
+ (interactive)
+ (cond
+ ((and ruby-end-expand-on-ret (ruby-end-expand-p))
+ (ruby-end-insert-end)
+ (forward-line 1)
+ (indent-according-to-mode))
+ (t
+ (ruby-end-fallback ruby-end-expand-ret-key))))
+
+(defun ruby-end-fallback (key)
+ "Execute function that KEY was bound to before `ruby-end-mode'."
+ (let ((ruby-end-mode nil))
+ (execute-kbd-macro
+ (edmacro-parse-keys key))))
(defun ruby-end-insert-end ()
"Closes block by inserting end."