Send via SMS

Saturday, January 14, 2006

Emacsに色をつける

インデントに応じて色を変えると便利かと思ったのだが、 こういうことをするためには 文字ごとに属性を設定しなければならないらしい。 面倒なのでやる気がうせたが一応作ってみた。
(setq indent-colors
     '(
       "DarkSeaGreen1"
       "DarkSeaGreen2"
       "DarkSeaGreen3"
       "DarkSeaGreen4"
       "SeaGreen1"
       "SeaGreen2"
       "SeaGreen3"
       "SeaGreen4"
       "PaleGreen1"
       "PaleGreen2"
       "PaleGreen3"
       ))

(defun set-indent-color ()
 (let (symbol face indent)
   (setq indent (% (indent-level) (length indent-colors)))
   (setq symbol (make-symbol (concat "indent" (format "%d" indent))))
   (setq face (make-face symbol))
   (set-face-foreground face "black")
   (set-face-background face (indent-color indent))
   (save-excursion
     (let (start end)
       (beginning-of-line)
       (setq start (point))
       (end-of-line)
       (setq end (point))
       (if (looking-at "\n") (setq end (1+ (point))))
       (put-text-property start end 'face face)
       ))
   ))

(defun set-indent-colors ()
 (save-excursion
   (let (old new (done nil))
     (goto-char 1)
     (setq old (point))
     (while (not done)
       (set-indent-color)
       (forward-line)
       (setq new (point))
       (setq done (= old new))
       (setq old new)
       )
   )))

(defun indent-color (indent)
 (let (c)
   (setq c (nth indent indent-colors))
   (if (null c)
       (setq c "white"))
   c
   ))

(defun indent-level ()
 (save-excursion
   (progn
     (beginning-of-line)
     (re-search-forward "[^ \t]" nil t)
     (backward-char)
     (current-column)
     )))

Wednesday, January 11, 2006

Windows/Mac上のRubyスクリプトをDrag&Dropで動かす

WindowsでもMacintoshでも、 ファイルをアイコンにDrag&DropすることによってRubyスクリプトを起動することができる。
  • Windowsの場合:

    xxxx.batというバッチファイルを作り、以下のようにRubyスクリプトを記述する。

    \cygwin\usr\local\bin\ruby -S -x %0 %1 %2
    exit
    #!ruby
    file = ARGV[0]
    (...普通のRubyスクリプト)
    
  • Macintoshの場合:

    AppleScriptを使う。 スクリプトエディタで以下のようなスクリプトを作成し、 「アプリケーション形式」で保存するとxxxx.appのような名前のアプリケーション (ドロップレット)ができ、Drag&DropしたファイルがfileListに渡されるので、 これらを連結して引数としてxxxx.rbに渡す。

    on open (fileList)
      set args to ""
      repeat with i in fileList
        set arg to POSIX path of i
        set args to args & " " & arg
      end repeat
      do shell script "ruby xxxx.rb " & args
    end open 
    

Monday, January 09, 2006

RubyでExifライブラリ(libexif)を使う

RubyからExifファイル(デジカメのJPEG拡張形式)を扱うlibexif-rubyのインストールメモ。(Cygwin)

Sunday, January 08, 2006

JavaScriptで認意のサイトと通信する方法

Ajaxで使われる XMLHttpRequestでは別サイトと通信を行なうことはできないのだが、 scriptタグを使うと認意のサイトと通信を行なうことができることをmala先生に教えてもらった。 (mala氏のコード) 以下のようなコードで動的にscript要素を生成し、 JavaScriptプログラムを吐くCGIを呼び出す。
var s=document.createElement("script");
s.charset="UTF-8";
s.type = "text/javascript";
s.src="http://pitecan.com/xxx.cgi";
document.body.appendChild(s)
たとえばxxx.cgiが
a = 100;
というテキストを返す場合、 このコードが非同期的に実行されてaに100が代入される。 (appendChildの実行終了後すぐにこのコードが実行されるわけではないことに注意が必要である)

しかしscriptタグでこういうことができるのならば 普通のAjaxで使うXMLHttpRequestは不要ということなのだろうか? 不思議。

Saturday, January 07, 2006

CodeBlog

g新部氏のプロジェクトに参加してコードブログを書く。 RubyとかJavaScriptとかのプログラムを読んでみよう。