読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

Emacsでhtmlのimgタグを書くときにサイズを取得して成形するスクリプトをelispとPythonで作ってみた

Python Emacs

前にやった以下の続き

準備

  • PILをインストールしておく

例(macportsで)

sudo port install py25-pil

まずPython

ファイル名を『get_image_size_tag_for_html.py』にして、とりあえずホームに置いた場合(~/get_image_size_tag_for_html.py)

#!/usr/bin/env python
# *-# -*- coding: utf-8 -*-

import PIL.Image
import os.path
import sys

def get_image_size(path):
    f = PIL.Image.open(path)
    file_name = path
    return '<img src="%s" alt="" width="%d" height="%d" />' % (file_name,
                                                               f.size[0],
                                                               f.size[1])

def use_command_at_elisp(fanc, img_file_path=""):
    if 1 < len(sys.argv):
        arg = sys.argv[1]
    else:
        arg = img_file_path
    try:
        #use "***No error.**" at emacs lisp
        ret_value = "***No error.***\n%s" % fanc(arg)
    except IOError, strerror:
        ret_value = strerror
    return ret_value


if __name__ == '__main__':
    #test
    #print use_command_at_elisp(get_image_size, "test/hoge.gif")
    
    print use_command_at_elisp(get_image_size)

Emacs Lispも書く

~/.emacs.elとかに

(defun my-html-insert-img-tag-and-size (image_path)
  (interactive "sImage file path: ")
 (setq ret_value (shell-command-to-string
          (concat
           "~/get_image_size_tag_for_html.py "
           image_path)))
 (if (string= (substring ret_value 0 15) "***No error.***")
     (progn (insert (substring ret_value 16))
            (backward-delete-char 1))
   (message (substring ret_value 0 -1))
   ))

実行してみる

Pythonのファイルは実行権限を与えとく
んで、Emacsで『M-x my-html-insert-img-tag-and-size』とかってやると、ミニバッファに『Image file path:』って表示されるから画像ファイルのパスを入力して実行(例:"test/hoge.gif")

<img src="test/hoge.gif" alt="" width="7" height="6" />

ってな感じの文字列がカーソル位置に入る。
エラーの時も一応ミニバッファに何やら表示される。

感想

もっとスマートでシンプルな方法ないかな?