ちょっとしたdirectoryの整理をemacs上で簡単に。
こんな状況のとき
でもrubyの場合。
「ruby -r fileutils -e '..'」とやっているうちに何が何だかわからなくなってしまいます><。
見やすい状態でコードが書きたいです。(具体的にはemacsで)
そこで、
(defun ruby-eval-buffer (&optional print?) "Evaluate the buffer with ruby." (shell-command-on-region (point-min) (point-max) "ruby") (if print? (insert-buffer-substring-as-yank "*Shell Command Output*"))) (add-hook 'ruby-mode-hook (lambda () (define-key ruby-mode-map "\C-c@" (lambda () (interactive) (ruby-eval-buffer))) (define-key ruby-mode-map "\C-c`" (lambda () (interactive) (ruby-eval-buffer t))) ))
を追加しておくと、「C-c@」で現在開いているバッファの内容をrubyに実行させることができます。
(C-c`だと実行結果を現在のバッファに書き込みます。(rcodetool.elを入れてからあまり使わなくなりました))
そんなわけで、例えば"*scratch*"のmodeをruby-modeに変えた後に
以下のようなコードを書いてからC-c@で"~/box/"内のファイルを"~/box/used/"に移動することができます。
emacsなのでコードを書くのが楽です。
p = (ENV["HOME"]+"/box") Dir.chdir(p) t = Dir["*"].reject{ |e| File.directory? e} require 'fileutils' FileUtils.move(t,p+"/used/", :verbose => true, :noop => true) #:noopがtrueになっているので移動はしません。 #(本当に移動させたいときには:noopをなくします。)
rubyでaccumulate-nを作ってみた
module Enumerable def accumulate_n(init) (0..self.first.size-1).inject([]) do |result, i| x = self.map{ |e| e[i]} result << x.inject(init){ |re,e| yield(re,e)} end end end a = (0..3).map{ |e| e * 3}.map{ |e| [e,e+1,e+2]} a # => [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]] a.accumulate_n(0){ |re,e| re + e} # => [18, 22, 26] a # => [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]]
"で""とか(で()とか
ruby-electricの機能を
他の言語を書いている時にも使いたいと思っていました。
具体的にはこんな感じ
- "{"と入力しただけで自動で"{}"と入力してくれる
- 入力したかっこの中にカーソルを置いてくれる
他の言語でも設定すればできるらしいので
http://d.hatena.ne.jp/khiker/20080118
http://d.hatena.ne.jp/gan2/20071227/1198759894
の2つをみながら設定してみました。
実際にしたこと
parenthesis.elをダウンロード。
http://www.oti-orz.mydns.jp/~khiker/file/20080119/parenthesis.el
.emacsに以下を追加
(require 'parenthesis) (defun f (name) (let ((modehook (intern (concat name "-mode-hook")))) (add-hook modehook (lambda () ;; { で{}を書く (define-key (current-local-map) "{" 'insert-braces) ;; ( で()を書く (define-key (current-local-map) "(" 'insert-parens) ;; " で""を書く (define-key (current-local-map) "\'" 'insert-single-quotation) ;; " で""を書く (define-key (current-local-map) "\"" 'insert-double-quotation) ;; [ で[]を書く (define-key (current-local-map) "[" 'insert-brackets) )))) (setq parenthesis-add-language '("javascript" "py" "text")) ;;pythonがpy-mode-mapなのが不思議 (let ((x parenthesis-add-language)) (while (car x) (f (car x)) (setq x (cdr x))))
これでpythonでもjavascriptでも文章を書くときでもカッコを書くのが楽になりました。