diff --git a/.gitmodules b/.gitmodules index 48e6ec82..35824d1d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,3 +16,6 @@ [submodule "plugins/auto-complete"] path = plugins/auto-complete url = http://github.com/emacsmirror/auto-complete.git +[submodule "plugins/ruby-block"] + path = plugins/ruby-block + url = http://github.com/emacsmirror/ruby-block.git diff --git a/README b/README index 2baa427c..24c2cfc9 100644 --- a/README +++ b/README @@ -4,7 +4,7 @@ REQUIREMENTS ruby Emacs >= 23.2 rake for intall and update -Rcodetools for auto-complete (gem install rcodetools) +rcodetools for auto-complete (gem install rcodetools) DESCRIPTION @@ -27,7 +27,7 @@ rdebug redo ri-emacs rinari (http://rinari.rubyforge.org/) -ruby-block +ruby-block (submodule => http://github.com/emacsmirror/ruby-block.git) ruby-mode (copied => svn co http://svn.ruby-lang.org/repos/ruby/trunk/misc) toggle yaml-mode (submodule => http://github.com/emacsmirror/yaml-mode.git) @@ -97,4 +97,3 @@ CONTACT You can contact me: santiago@wyeworks.com Follow us in our blog: http://blog.wyeworks.com Repo: git://github.com/spastorino/my_emacs_for_rails.git - diff --git a/init.el.example b/init.el.example index d49d2a17..6c186bd9 100644 --- a/init.el.example +++ b/init.el.example @@ -311,11 +311,13 @@ t) (add-hook 'ruby-mode-hook 'turn-on-font-lock) (add-to-list 'auto-mode-alist '("\\.rjs$" . ruby-mode)) (add-to-list 'auto-mode-alist '("\\.rake$" . ruby-mode)) -(add-to-list 'auto-mode-alist '("Rakefile" . ruby-mode)) +(add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode)) ;; ruby-block (add-to-list 'load-path "~/.emacs.d/plugins/ruby-block") (require 'ruby-block) +(ruby-block-mode t) +(setq ruby-block-highlight-toggle 'overlay) ;; ruby electric (defun try-complete-abbrev (old) diff --git a/plugins/ruby-block b/plugins/ruby-block new file mode 160000 index 00000000..e8e4b6e7 --- /dev/null +++ b/plugins/ruby-block @@ -0,0 +1 @@ +Subproject commit e8e4b6e7bba9b9ea383deeb1487f9f9b584ace20 diff --git a/plugins/ruby-block/ruby-block.el b/plugins/ruby-block/ruby-block.el deleted file mode 100644 index 88700bde..00000000 --- a/plugins/ruby-block/ruby-block.el +++ /dev/null @@ -1,252 +0,0 @@ -;;; ruby-block.el --- highlight matching block - -;; Copyright (C) 2007-2008 khiker - -;; Author: khiker -;; Keywords: languages, faces, ruby - -;; This file is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. - -;; This file is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to -;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. - -;;; Commentary: - -;;; Usage: - -;; Add this line to your .emacs -;; -;; (require 'ruby-block) -;; (ruby-block-mode t) -;; -;; In addition, you can also add this line too. -;; -;; ;; do overlay -;; (setq ruby-block-highlight-toggle 'overlay) -;; ;; display to minibuffer -;; (setq ruby-block-highlight-toggle 'minibuffer) -;; ;; display to minibuffer and do overlay -;; (setq ruby-block-highlight-toggle t) -;; -;; Default is minibuffer. -;; -;; Tested on Emacs 22.1 and Emacs 23.0.50.2. - -;;; Note: - -;; A ruby-mode.el is necessary to use this package. - -;;; Code: - -(require 'ruby-mode) - -;; Variables: - -(defconst ruby-block-version "0.0.7" - "Ruby block package version.") - -(defconst ruby-block-keyword-list - (list "end" "for" "while" "until" "if" "class" "module" - "case" "unless" "def" "begin" "do") - "Keyword for highlighting.") - -(defconst ruby-block-keyword-regex - "\\(end\\|for\\|while\\|until\\|if\\|class\\|module\\|case\\|unless\\|def\\|begin\\|do\\)" - "Rregular expression to look for correspondence.") - -(defgroup ruby-block nil - "Ruby block" - :tag "Ruby block" - :group 'ruby-block) - -(defcustom ruby-block-delay 0.50 - "*Time in seconds to delay before showing a matching paren." - :type 'number - :group 'ruby-block) - -(defcustom ruby-block-highlight-face 'highlight - "*Face for block highlighting." - :type 'face - :group 'ruby-block) - -(defcustom ruby-block-highlight-toggle 'minibuffer - "*How do you display corresponding line. -Default is minibuffer. display to minibuffer. - -The possible choice is as follows. - -nil => nothing -minibuffer => minibuffer -overlay => overlay -t => minibuffer and overlay" - :type '(choice (const :tag "nothing" nil) - (const :tag "minibuffer" minibuffer) - (const :tag "overlay" overlay) - (const :tag "minibuffer and overlay" t)) - :group 'ruby-block) - -(defvar ruby-block-timer nil) - -(defvar ruby-block-highlight-overlay nil) - - -;; Functions: - -(define-minor-mode ruby-block-mode - "In ruby-mode, Displays the line where there is keyword corresponding -to END keyword. this is Minor mode for ruby-mode only." - :init-value t - :global nil - :keymap nil - :lighter " RBlock" - (if ruby-block-mode - (ruby-block-start-timer) - (ruby-block-stop-timer))) - -(defun ruby-block-start-timer () - "start timer." - (when ruby-block-timer - (cancel-timer ruby-block-timer)) - (setq ruby-block-timer - (run-with-idle-timer ruby-block-delay t 'ruby-block-hook))) - -(defun ruby-block-stop-timer () - "stop timer." - (when ruby-block-timer - (cancel-timer ruby-block-timer) - (setq ruby-block-timer nil))) - -(defun ruby-block-hook () - "When Major-mode is ruby-mode, this package is running." - (if (eq major-mode 'ruby-mode) - (condition-case err - (ruby-block-function) - (error - (setq ruby-block-mode nil) - (message "Error: %S; ruby-block-mode now disabled." err))) - (setq ruby-block-mode nil))) - -(defun ruby-block-get-line-start-pos () - (save-excursion - (let ((xor '(lambda (a b) (and (or a b) (not (and a b))))) - (point (point)) - (count 0)) - (while (and (not (funcall xor (bobp) (eolp))) - (> point (point-min))) - (setq point (1- point)) - (goto-char (1- (point)))) - ;; delete linefeed of start point. - (when (and (eolp) (>= (point-max) (1+ point))) - (setq point (1+ point))) - point))) - -(defun ruby-block-get-line-end-pos () - (save-excursion - (let ((xor '(lambda (a b) (and (or a b) (not (and a b))))) - (point (point))) - (while (and (not (funcall xor (eobp) (eolp))) - (>= (point-max) point)) - (setq point (1+ point)) - (goto-char (1+ (point)))) - point))) - -(defun ruby-block-function () - "Point position's word decides behavior." - (let ((current (current-word))) - (setq current (car (member current ruby-block-keyword-list))) - (cond - ;; not keyword - ((null current) - nil) - ;; keyword "end" - ((and (string= "end" current) - (eq 'font-lock-keyword-face (get-text-property (point) 'face))) - (let ((point (ruby-block-get-corresponding-point)) - (slinep 0)(elinep 0)) - ;; get whole line(exists point). and, display minibuffer. - (when (> point 0) - (save-excursion - (goto-char point) - (setq slinep (ruby-block-get-line-start-pos) - elinep (ruby-block-get-line-end-pos))) - ;; display line contents to minibuffer - (when (or (eq ruby-block-highlight-toggle t) - (eq ruby-block-highlight-toggle 'minibuffer)) - (message "%d: %s" (1+ (count-lines (point-min) slinep)) - (buffer-substring slinep elinep))) - ;; do overlay. - (when (or (eq ruby-block-highlight-toggle t) - (eq ruby-block-highlight-toggle 'overlay)) - (ruby-block-do-highlight slinep elinep))))) - ;; keyword except "end" - (t - nil)))) - -(defun ruby-block-get-corresponding-point () - "Get point of corresponding line." - (let ((orig-col (- (point) (ruby-block-get-line-start-pos))) - (recent-col (- (point) (ruby-block-get-line-start-pos))) - (count 1)(check t)(point 0)(face "")(string "")) - (save-excursion - (while check - (if (re-search-backward ruby-block-keyword-regex (point-min) t 1) - (setq point (match-beginning 1) - face (get-text-property point 'face) - string (current-word)) - (setq point -1 face "" string "" check nil)) - (when (and (eq face 'font-lock-keyword-face) - (not (string= string "elsif")) - ;; case: STMT if(or unless, while, untill) EXPR - (if (member string '("if" "unless" "while" "until")) - (let ((col (- point (ruby-block-get-line-start-pos)))) - (if (or (> (+ orig-col 3) col) - (> (+ recent-col 3) col)) - t nil)) - t)) - (if (and (string= string "end") check) - (setq count (1+ count) - recent-col (- (point) (ruby-block-get-line-start-pos))) - (setq count (1- count)))) - (when (= count 0) - (setq check nil))) - point))) - -(defun ruby-block-do-highlight (beg end) - "Do overlay corresponding line." - (if ruby-block-highlight-overlay - (move-overlay ruby-block-highlight-overlay beg end) - (setq ruby-block-highlight-overlay (make-overlay beg end))) - (overlay-put ruby-block-highlight-overlay - 'face ruby-block-highlight-face) - (add-hook 'pre-command-hook 'ruby-block-highlight-done)) - -(defun ruby-block-highlight-done () - "After do overlay, restore the line to original color." - (remove-hook 'pre-command-hook 'ruby-block-highlight-done) - (if ruby-block-highlight-overlay - (delete-overlay ruby-block-highlight-overlay))) - -(defun ruby-block-highlight-toggle () - "Switch on/off for ruby-block-mode." - (interactive) - (if ruby-block-highlight-toggle - (setq ruby-block-highlight-toggle nil) - (setq ruby-block-highlight-toggle t))) - -(provide 'ruby-block) - -;; Local Variables: -;; Coding: iso-2022-7bit -;; End: - -;;; ruby-block.el ends here