10 KiB
10 KiB
title | author | date | wordtwit_post_info | categories | |||
---|---|---|---|---|---|---|---|
『やさしいEmacs‐Lisp講座』を購入 | kazu634 | 2008-12-07 |
|
|
Emacs-Lispの勉強用に購入しました。外部プロセスを起動する方法をペラっとめくって、ちょっと書いてみたら、革命的に便利になってしまった…ちょっと前にisbn13からisbn10(つまりasin)を求めるスクリプトを書きましたが、それをEmacs上で実行できるようにしてみました。
これで本を片手に、日記を書くのが便利になった。
.emacsとかに表記するの
(defun lookup-asin (isbn13) (interactive "sISBN13: \n") (call-process "isbn" nil t t isbn13))
isbn13の値をミニバッファーで尋ね、isbn10をカレントバッファーに返す。M-x lookup-asinしてみよう。
Perlスクリプト
#!/usr/bin/perl use strict; use warnings; # ================== # === 変数の宣言 === # ================== # isbn10を格納するための配列 my @isbn10; my $isbn13; # ==================== # === 起動時の処理 === # ==================== # スクリプトに引数が設定されてなければ終了 exit if (@ARGV == ); # スクリプトの引数を代入する my $chk = &chk_arg($ARGV[]); # 引数のチェック exit if ($chk == -1); $isbn13 = $ARGV[]; # ================ # === 処理開始 === # ================ # 数字を一つずつ配列に格納 my @temp = split(//, $isbn13); # check digit以外の部分が完成 for (my $i = 3; $i < 12; $i++) { push(@isbn10, $temp[$i]) } # check digitの計算 my $c_digit = &calc_c_digit(@isbn10); # check digitを配列に格納 push(@isbn10, $c_digit); # isbn10を表示 print(@isbn10, "\n"); # ================ # === 処理終了 === # ================ exit; # ================================== # ========== サブルーチン ========== # ================================== # ================================ # === チェックディジットの計算 === # ================================ # 戻り値: チェックディジット sub calc_c_digit { # check digitを計算するためのisbn my @tmp_isbn9 = @_; # 計算用 my $temp; for (my $i = ; $i < @tmp_isbn9; $i++) { $temp += $tmp_isbn9[$i] * (10 - $i); } $temp = int($temp % 11); $temp = 11 - $temp; if ($temp == 10) { return ("X"); } else { return $temp; } } # ================================ # === スクリプトの引数チェック === # ================================ # 0 : 正常な引数 # -1 : 異常な引数 sub chk_arg { my @tmp = @_; foreach my $i (@tmp) { return (-1) if ($i =~ /[a-zA-Z]/); } return(); }
このスクリプトをisbnとして保存し、パスの通ったところに保存する。
まとめ
外部プロセスを起動させられるようになると、Emacsの拡張性がさらに広がるなぁ。