FC2ブログ

<< 前のページ | 次のページ >>

Emacs で Script-Fu を書いて実行させる / script-fu-shell.rb

環境: Ubuntu Studio 9.04 / Gimp 2.6.6 / Ruby 1.8.7 / Emacs 23.0.91.1

ダウンロード

ここからダウンロードして適当なところに置いてください。
http://github.com/sonota/script-fu-shell/blob/master/script-fu-shell.rb
sonota's script-fu-shell at master - GitHub

script-fu-shell.rb を単体で動かしてみる

Gimp を起動し、メニューから [フィルタ > Script-Fu > サーバスタート]
(Gimp のバージョンによってメニュー位置が違います)

「サーバスタート」をクリックしてサーバを開始させます。

端末で
$ ruby script-fu-shell.rb
と実行するとプロンプトが表示され、 Gimp本体の Script-Fu コンソールを使うのと同じ要領で S式を書くと 対話的に実行されます。

たとえばプロンプトに続けて
(gimp-display-new (car (gimp-image-new 640 480 0)))
と入力しエンターキーを押すと、Gimp側で新規画像が表示されます。

Emacs から使う

手軽に試してみる

Emacs には最初から cmuscheme という Scheme用の便利なライブラリが付属しており、 これをそのまま利用することができます。

まず手軽に試してみたいという場合は scratch バッファで
(setq scheme-program-name "~/test/script-fu-shell.rb")
などと書いて C-xC-e で評価し「Scheme インタプリタとして script-fu-shell.rb を使う」ように設定します。

次に M-x run-scheme すると、Script-Fu用のバッファが開きプロンプトが表示されます。 適当に S式を入力して試してみてください。

プロンプトの位置にカーソルを置いて M-p, M-n で履歴を前後に辿れます。

gimp-shell.el / gimp-mode を使ってみた

てきとーメモ。

gimp-shell.el

環境: Ubuntu Studio 8.04 / Gimp 2.4.5 / Emacs 23.0.60.1

そのままでは動かなかったので、 以下の箇所を修正。


;; 修正前
  (gimp-send-string 
   "(define (int--emacs-tostring item)
      (cond ((number? item) (number->string item 10))
 	((string? item) (print-to-string item (string-append (substring item 0)
                                                             \"                                 \" )))
 	((null? item)   \"()\")
        ((eq? t item)    \"t\")
 	((pair? item) 
 	 (string-append \"(\" 
		(unbreakupstr 
 			 (map int--emacs-tostring item) \" \") \")\"))
        (TRUE item)))")

;; 修正後
  (gimp-send-string 
    "(define (int--emacs-tostring item)
      (cond
        ((number? item) (number->string item 10))
        ((string? item) item)
        ((null? item) \"()\")
        ((eq? #t item) \"#t\")
        ((pair? item) 
          (string-append
            \"(\" 
       	    (unbreakupstr 
       	      (map int--emacs-tostring item) \" \")
            \")\"))
        (TRUE item)))")

「とりあえず動く」ようにしただけなので、 もっといいやり方があるはず……。

あとは send-last-sexp、send-definition があるだけでも違うので以下を適当に追加:


;; この2つの関数は cmuscheme から。ほぼそのまま。
(defun gimp-send-last-sexp ()
  "Send the previous sexp to the Script-Fu process."
  (interactive)
  (gimp-send-region (save-excursion (backward-sexp) (point)) (point)))

(defun gimp-send-definition ()
  "Send the current definition to the Script-Fu process."
  (interactive)
  (save-excursion
   (end-of-defun)
   (let ((end (point)))
     (beginning-of-defun)
     (gimp-send-region (point) end))))

...

;; キーバインド
(define-key gimp-mode-map "\C-c\C-r" 'gimp-send-region)
(define-key gimp-mode-map "\C-c\C-e" 'gimp-send-definition)
(define-key gimp-mode-map "\C-x\C-e" 'gimp-send-last-sexp)

Emacs: フェイスをカスタマイズする

覚書。

フェイス名を調べる → 設定変更

大まかな流れ:

  • カーソル位置のフェイスを調べる
  • フェイスの設定を修正する
  • 設定を反映させる
  • 設定を保存する

まあこれだけなんですが。

カーソル位置のフェイスを調べる

Meadow/Emacs memo: 基本的な設定 のページの「カーソル位置のフェースを調べる関数 describe-face-at-point」を .emacs に書いて評価 (関数末尾の閉じ括弧の後ろにカーソルを置いて C-x C-e)。

フェイスを調べたい文字にカーソルを移動させ、M-x describe-face-at-point → フェイス名がエコーエリアに表示される。

追記 20101113: describe-face-at-point を使わなくても M-x describe-face で調べられるようです。

設定を修正する

M-x list-faces-display でフェイスの一覧ウィンドウが出るので、 修正したいフェイスを選んで RET 。

「Attributes:」の各項目を好きなようにいじる。

設定を反映させる

「Set for current session」にカーソルを当てて RET を押すと、一時的に設定を反映させた状態になるので、見栄えなどを確認する。
この段階では設定は保存されず、次回起動時には修正前の状態に戻る。

設定を保存する

上記のカスタマイズウィンドウで「Save for future sessions」を選んで RET を押すと設定が .emacs に保存され、次回起動時にも設定が有効になる。

モード + customize

M-x customize → Faces → モードを選択

後は上記の方法と同じように設定を修正・反映・保存する。

Emacs メモ

適当なメモ。

.emacs

Tango Icon パレット色のテキストデータ

本家の方にテキスト化された データが見当たらなかったので勝手に作りました。 横着コピペ用。
butter-1butter-1 fce94ffce94f
butter-2butter-2 edd400edd400
butter-3butter-3 c4a000c4a000
orange-1orange-1 fcaf3efcaf3e
orange-2orange-2 f57900f57900
orange-3orange-3 ce5c00ce5c00
chocolate-1chocolate-1 e9b96ee9b96e
chocolate-2chocolate-2 c17d11c17d11
chocolate-3chocolate-3 8f59028f5902
chameleon-1chameleon-1 8ae2348ae234
chameleon-2chameleon-2 73d21673d216
chameleon-3chameleon-3 4e9a064e9a06
skyblue-1skyblue-1 729fcf729fcf
skyblue-2skyblue-2 3465a43465a4
skyblue-3skyblue-3 204a87204a87
plum-1plum-1 ad7fa8ad7fa8
plum-2plum-2 75507b75507b
plum-3plum-3 5c35665c3566
scarletred-1scarletred-1 ef2929ef2929
scarletred-2scarletred-2 cc0000cc0000
scarletred-3scarletred-3 a40000a40000
alminium-1alminium-1 eeeeeceeeeec
alminium-2alminium-2 d3d7cfd3d7cf
alminium-3alminium-3 babdb6babdb6
alminium-4alminium-4 888a85888a85
alminium-5alminium-5 555753555753
alminium-6alminium-6 2e34362e3436
以下、CSV と Ruby用ハッシュ、Emacs Lisp用関数です。



** ホームに戻る

<< 前のページ | 次のページ >>