summaryrefslogtreecommitdiff
path: root/misc/ruby-additional.el
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-09-03 09:31:37 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-09-03 09:31:37 +0000
commit98fded61f83f75b0c64806ef1c27a1c200868a47 (patch)
treeeca40f3948061f801a0810b9dbb86937cd3a346e /misc/ruby-additional.el
parent7c2230bd8c8a16a976091f983737d94ce52959d1 (diff)
ruby-additional.el
* misc/ruby-additional.el: missing functions in Emacs 24. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'misc/ruby-additional.el')
-rw-r--r--misc/ruby-additional.el59
1 files changed, 59 insertions, 0 deletions
diff --git a/misc/ruby-additional.el b/misc/ruby-additional.el
new file mode 100644
index 0000000000..aabf0a6888
--- /dev/null
+++ b/misc/ruby-additional.el
@@ -0,0 +1,59 @@
+;; missing functions in Emacs 24.
+
+(eval-after-load "\\(\\`\\|/\\)ruby-mode\\.elc?\\(\\.gz\\)?\\'"
+ (progn
+ (define-key ruby-mode-map "\C-c\C-e" 'ruby-insert-end)
+ (define-key ruby-mode-map "\C-c{" 'ruby-toggle-block)
+
+ (defun ruby-insert-end ()
+ (interactive)
+ (if (eq (char-syntax (char-before)) ?w)
+ (insert " "))
+ (insert "end")
+ (save-excursion
+ (if (eq (char-syntax (char-after)) ?w)
+ (insert " "))
+ (ruby-indent-line t)
+ (end-of-line)))
+
+ (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)))
+ ))