Ruby の勉強はじめてます
どもども。
Ruby の勉強初めてみました。
んで,便利な環境にするべくいくつか手を施したので,
そのメモ。
shell-mode のバッファで現在編集中の ruby ファイルを実行
以下の関数を,
(define-key ruby-mode-map (kbd "\C-c\C-e") 'my-ruby-mode-execute-in-shell-buffer)
で,Ctrl-cCtrl-e に割り当てました。
便利すぐる。
ちなみに自分で手を入れている shell-pop.el を使っています。
C-cC-e でシェルバッファに飛んで,実行なりしたら,shell-pop に割り当てている
キー(ワタシはF8とC-zC-z)でもとのバッファに戻ります。
※追記
シェルバッファのカレントディレクトリが.rbファイルの場所と異なる場合には,
実行できないという罠が見つかりました。
なので使わない方がいいかもです。ワタシは使うけど。
(defun my-ruby-mode-execute-in-shell-buffer () (interactive) (let* ((filename (buffer-name)) (cmd (format "ruby -cw %s && ruby -w %s" filename filename))) ;; first switch to shell-mode buffer (shell-pop) ;; move to the end of the buffer (goto-char (point-max)) ;; insert compilation command (insert cmd)))
スクリプトファイルとそのテストファイルとの行き来
そのまま。
(defun my-ruby-mode-find-test-buffer () "Switch buffers between some.rb and test_some.rb if such a buffer exists." (interactive) (let ((from-buffer-name (buffer-name)) (to-buffer-name nil)) (when (string-match "\\.rb$" from-buffer-name) ;; create a corresponding buffer name (if (string-match "^test_" from-buffer-name) (setq to-buffer-name (substring-no-properties from-buffer-name 5)) (setq to-buffer-name (concat "test_" from-buffer-name))) ;; if a buffer corresponding to the current buffer exists, get to there (when (find to-buffer-name (mapcar #'buffer-name (buffer-list)) :test #'string=) (switch-to-buffer (get-buffer to-buffer-name))))))
これを,
(define-key ruby-mode-map (kbd "\C-cn") 'my-ruby-mode-find-test-buffer)
でC-cnに割り当て。
some.rb を編集中に C-cn すると,test_some.rb バッファがあれば,そこへ移動。
また,逆に test_some.rb を編集中に C-cn すると,some.rb へ移動。
それぞれ,行き先のバッファがなければ何もしない。
行き先がテストで,そのバッファが無いときには,作るようにするかどうか悩み中。またかなり色々を決め打ちしてるので要改良かな。
yari.el を少し改造
yari.el を見つけて使って見て,これ便利なんですが,
FQN での指定がしんどい。
修正した mcomplete 使って部分一致でもしんどい。
なので少しいじってみた。
結構前にいじった部分もあるので,あんまり覚えてないという・・・。
簡単にいうと,M-x yari [RET] open [RET]
で,open のドキュメントを全部引けるとかそういう感じだったはず。
ido-mode? を使用していると動かないかも。ワシは使ってないからわからん。
ちなみに
(define-key ruby-mode-map (kbd "\C-ch") 'yari)
で,C-ch に割り当ててます。
以下役に立たないと思われますが,Ver.0.5 との diff。
diff --git a/yari.el b/yari.el index e4793b6..1e755f3 100644 --- a/yari.el +++ b/yari.el @@ -88,26 +88,30 @@ (interactive (list nil current-prefix-arg)) (let ((completing-read-func (if (null ido-mode) 'completing-read - 'ido-completing-read))) + 'ido-completing-read))) (setq ri-topic (or ri-topic (funcall completing-read-func - "yari: " - (yari-ruby-obarray rehash) - nil - t - (yari-symbol-at-point))))) - (let ((yari-buffer-name (format "*yari %s*" ri-topic))) - (unless (get-buffer yari-buffer-name) - (let ((yari-buffer (get-buffer-create yari-buffer-name)) - (ri-content (yari-ri-lookup ri-topic))) - (display-buffer yari-buffer) - (with-current-buffer yari-buffer - (erase-buffer) - (insert ri-content) - (ansi-color-apply-on-region (point-min) (point-max)) - (goto-char (point-min)) - (yari-mode)))) - (display-buffer yari-buffer-name))) + "yari: " + (yari-ruby-obarray rehash) + nil + nil + (yari-symbol-at-point))))) + (let ((yari-buffer-name (format "*yari %s*" ri-topic)) + (yari-buffer nil)) + (if (get-buffer yari-buffer-name) + (display-buffer yari-buffer-name) + (let ((ri-content (yari-ri-lookup ri-topic))) + (cond + ((null ri-content) + (message "Nothing known about %s" ri-topic)) + (ri-content + (display-buffer (setq yari-buffer (get-buffer-create yari-buffer-name))) + (with-current-buffer yari-buffer + (erase-buffer) + (insert ri-content) + (ansi-color-apply-on-region (point-min) (point-max)) + (goto-char (point-min)) + (yari-mode)))))))) (defun yari-symbol-at-point () ;; TODO: make this smart about class/module at point @@ -150,11 +154,14 @@ (defun yari-ri-lookup (name) "Return content from ri for NAME." - (assert (member name (yari-ruby-obarray)) nil - (format "%s is unknown symbol to RI." name)) - (shell-command-to-string - (format (concat yari-ri-program-name " -T -f ansi %s") - (shell-quote-argument name)))) + ;; (assert (member name (yari-ruby-obarray)) nil + ;; (format "%s is unknown symbol to RI." name)) + (let ((output (shell-command-to-string + (format (concat yari-ri-program-name " -T -f ansi %s") + (shell-quote-argument name))))) + (if (string-match "Nothing known about" output) + nil + output))) (when-ert-loaded (ert-deftest yari-test-ri-lookup-should-generate-error ()
以上でーす。