summaryrefslogtreecommitdiff
path: root/sample/ruby-mode.el
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1995-05-19 15:33:23 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:32 +0900
commit8bf1c909dc31fd4bcdc1488cda9fe89a62bc2830 (patch)
tree6899d116a280ba8f99f65e21fe9259706474c0aa /sample/ruby-mode.el
parentb2420d8ffa4d347a75efbbdc376f4ce65c0eb172 (diff)
version 0.76v0_76
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.76.tar.gz Fri May 19 15:33:23 1995 Yukihiro Matsumoto <matz@ix-02> * version 0.76 Fri May 19 00:48:08 1995 Yukihiro Matsumoto (matz@dyna) * string.c (Fstr_each): イテレータブロック中で文字列の変更が行われ たかどうかをチェック.ポインタの値が変わっていれば例外を発生する. * ruby-mode.el: ruby-electric-braceの新設. Thu May 18 12:27:23 1995 Yukihiro Matsumoto <matz@ix-02> * string.c (Fstr_tr): trの置換対象に`\0'を含む時に正しく置換を行わ ないバグがあった.更に置換文字列をASCII順に指定しないと動作しな い問題もあった.結果としてtrを書き換えたので,copyrightの問題は 無くなった(と思う). * gc.c (gc): the_scopeをマークしていなかったので,ローカル変数が間 違って開放される場合があった. * gc.c (mark_locations_array): 若干の高速化. Mon May 15 11:43:49 1995 Yukihiro Matsumoto <matz@ix-02> * ext/extmk.rb.in: Dynamic Loadモジュールのコンパイル用チェックを 行うruby script.autoconfに近い感覚で使える.新しいモジュールを 提供したい人はextの下にディレクトリを作るだけで良い.必須のファ イルはファイル名の一覧を記録した`MANIFEST'というファイルのみ.必 要に応じて`depend'(ファイルの依存関係を記述するファイル gcc -MM の出力),`extconf.rb'(コンパイル用にライブラリと関数の存在チェッ クするファイル)を用意できる. * eval.c (rb_call): rubyメソッドの引数チェック時に未初期化の jmp_bufを使用していた. * parse.y: `or'と`and'の優先順位を同じにした. Wed May 3 18:21:36 1995 Yukihiro Matsumoto (matz@dyna) * dln.c: Linuxでは`__.SYMDEF/'であった. * dln.c: system callのエラーチェックを忘れていた. Wed Apr 26 09:50:56 1995 Yukihiro Matsumoto (matz@ix-02) * parse.y: イテレータブロックの変数宣言を`|'で括るようにした.これ でイテレータ変数がない時は宣言そのものを省略できる.文法の変更は 久しぶりだ. Tue Apr 25 12:04:17 1995 Yukihiro Matsumoto (matz@ix-02) * eval.c(require): loadからダイナミックロードの機能を移してきた. さらに拡張子の補完機能を追加してユーザがdln/dlopenの差を意識する 必要のないようにした. * string.c(sub,sub): イテレータとしても動作するように. * object.c: init_object -> initialize. Mon Apr 24 14:22:39 1995 Yukihiro Matsumoto (matz@ix-02) * NEWS-OS 3.4対応 * io.c: Solarisのstdioの動作が違うようだ.signalでEOFを返してしま う….perlでも同様の問題がある. Fri Apr 21 20:04:39 1995 Yukihiro Matsumoto (matz@ix-02) * version 0.75 * signal.c: trapがなくなっていた.うーむ. * configure: Solaris 2.3対応. * io.c: #elifのないcppもある. * dir.c: autoconf 2.xへの対応が不十分 Thu Apr 20 12:31:24 1995 Yukihiro Matsumoto (matz@ix-02) * version 0.74 * env.h, gc.c, regex.c: IRIXへの移植対応 * configure: picを生成するoptionの検出のため,システムタイプをチェッ クするように. Tue Apr 18 19:08:17 1995 Yukihiro Matsumoto (matz@ix-02) * gc.c(xrealloc): ptr=nilの時,malloc()と同じ働きを * array.c(astore): 空の配列の0番目の要素に代入するとsize=0で realloc()を呼んでいた. * configure, glob.c: Solaris 2.xでコンパイルできるように
Diffstat (limited to 'sample/ruby-mode.el')
-rw-r--r--sample/ruby-mode.el134
1 files changed, 14 insertions, 120 deletions
diff --git a/sample/ruby-mode.el b/sample/ruby-mode.el
index fd44dc6..bcbbdc3 100644
--- a/sample/ruby-mode.el
+++ b/sample/ruby-mode.el
@@ -18,7 +18,7 @@
(defconst ruby-block-end-re "end")
(defconst ruby-delimiter
- (concat "[$/(){}#\"'`]\\|\\[\\|\\]\\|\\b\\("
+ (concat "[$/<(){}#\"'`]\\|\\[\\|\\]\\|\\b\\("
ruby-block-beg-re "\\|" ruby-block-end-re "\\)\\b")
)
@@ -37,10 +37,11 @@
(if ruby-mode-map
nil
(setq ruby-mode-map (make-sparse-keymap))
+ (define-key ruby-mode-map "{" 'ruby-electric-brace)
+ (define-key ruby-mode-map "}" 'ruby-electric-brace)
(define-key ruby-mode-map "\e\C-a" 'ruby-beginning-of-defun)
(define-key ruby-mode-map "\e\C-e" 'ruby-end-of-defun)
(define-key ruby-mode-map "\t" 'ruby-indent-command)
- (define-key ruby-mode-map "\t" 'ruby-indent-command)
(define-key ruby-mode-map "\C-m" 'ruby-reindent-then-newline-and-indent)
(define-key ruby-mode-map "\C-j" 'newline))
@@ -178,7 +179,9 @@ The variable ruby-indent-level controls the amount of indentation.
(t
(goto-char indent-point)
(setq in-string t))))
- ((string= "/" w)
+ ((or (string= "/" w)
+ (string= "<" w))
+ (if (string= "<" w) (setq w ">"))
(let (c)
(save-excursion
(goto-char pnt)
@@ -261,120 +264,6 @@ The variable ruby-indent-level controls the amount of indentation.
(error (format "bad string %s" w)))))))
(list in-string in-paren (car nest) depth)))
-(defun ruby-parse-region (start end)
- (let ((indent-point end)
- (indent 0)
- (in-string nil)
- (in-paren nil)
- (depth 0)
- (nest nil))
- (save-excursion
- (if start
- (goto-char start)
- (ruby-beginning-of-defun))
- (while (and (> indent-point (point))
- (re-search-forward ruby-delimiter indent-point t))
- (let ((w (buffer-substring (match-beginning 0) (match-end 0)))
- (pnt (match-beginning 0)))
- (cond
- ((or (string= "\"" w) ;skip string
- (string= "'" w)
- (string= "`" w))
- (cond
- ((string= w (char-to-string (char-after (point))))
- (forward-char 1))
- ((re-search-forward (format "[^\\]%s" w) indent-point t)
- nil)
- (t
- (goto-char indent-point)
- (setq in-string t))))
- ((or (string= "/" w)
- (string= "<" w))
- (if (string= "<" w) (setq w ">"))
- (let (c)
- (save-excursion
- (goto-char pnt)
- (skip-chars-backward " \t")
- (setq c (char-after (1- (point))))
- (if c (setq c (char-syntax c))))
- (if (or (eq c ?.)
- (and (eq c ?w)
- (save-excursion
- (forward-word -1)
- (or
- (looking-at ruby-block-beg-re)
- (looking-at ruby-block-mid-re)))))
- (cond
- ((string= w (char-to-string (char-after (point))))
- (forward-char 1))
- ((re-search-forward (format "[^\\]%s" w) indent-point t)
- nil)
- (t
- (goto-char indent-point)
- (setq in-string t))))))
- ((string= "$" w) ;skip $char
- (forward-char 1))
- ((string= "#" w) ;skip comment
- (forward-line 1))
- ((string= "(" w) ;skip to matching paren
- (let ((orig depth))
- (setq nest (cons (point) nest))
- (setq depth (1+ depth))
- (while (and (/= depth orig)
- (re-search-forward "[()]" indent-point t))
- (cond
- ((= (char-after (match-beginning 0)) ?\( )
- (setq nest (cons (point) nest))
- (setq depth (1+ depth)))
- (t
- (setq nest (cdr nest))
- (setq depth (1- depth)))))
- (if (> depth orig) (setq in-paren ?\())))
- ((string= "[" w) ;skip to matching paren
- (let ((orig depth))
- (setq nest (cons (point) nest))
- (setq depth (1+ depth))
- (while (and (/= depth orig)
- (re-search-forward "\\[\\|\\]" indent-point t))
- (cond
- ((= (char-after (match-beginning 0)) ?\[ )
- (setq nest (cons (point) nest))
- (setq depth (1+ depth)))
- (t
- (setq nest (cdr nest))
- (setq depth (1- depth)))))
- (if (> depth orig) (setq in-paren ?\[))))
- ((string= "{" w) ;skip to matching paren
- (let ((orig depth))
- (setq nest (cons (point) nest))
- (setq depth (1+ depth))
- (while (and (/= depth orig)
- (re-search-forward "[{}]" indent-point t))
- (cond
- ((= (char-after (match-beginning 0)) ?{ )
- (setq nest (cons (point) nest))
- (setq depth (1+ depth)))
- (t
- (setq nest (cdr nest))
- (setq depth (1- depth)))))
- (if (> depth orig) (setq in-paren ?{))))
- ((string-match ruby-block-end-re w)
- (setq nest (cdr nest))
- (setq depth (1- depth)))
- ((string-match ruby-block-beg-re w)
- (let (c)
- (save-excursion
- (goto-char pnt)
- (skip-chars-backward " \t")
- (setq c (char-after (1- (point)))))
- (if (or (null c) (= c ?\n) (= c ?\;))
- (progn
- (setq nest (cons (point) nest))
- (setq depth (1+ depth))))))
- (t
- (error (format "bad string %s" w)))))))
- (list in-string in-paren (car nest) depth)))
-
(defun ruby-calculate-indent (&optional parse-start)
(save-excursion
(beginning-of-line)
@@ -413,6 +302,11 @@ The variable ruby-indent-level controls the amount of indentation.
(setq indent (- indent ruby-indent-level)))
indent)))
+(defun ruby-electric-brace (arg)
+ (interactive "P")
+ (self-insert-command (prefix-numeric-value arg))
+ (ruby-indent-line t))
+
(defun ruby-beginning-of-defun (&optional arg)
"Move backward to next beginning-of-defun.
With argument, do this that many times.
@@ -433,12 +327,12 @@ An end of a defun is found by moving forward from the beginning of one."
(defun ruby-reindent-then-newline-and-indent ()
(interactive "*")
+ (save-excursion
+ (delete-region (point) (progn (skip-chars-backward " \t") (point))))
(insert ?\n)
(save-excursion
(forward-line -1)
- (indent-according-to-mode)
- (end-of-line)
- (delete-region (point) (progn (skip-chars-backward " \t") (point))))
+ (indent-according-to-mode))
(indent-according-to-mode))
(defun ruby-encomment-region (beg end)