タグ

ブックマーク / podhmo.hatenadiary.org (8)

  • anything-vcs-project.elというelispを書いた。 - podhmoの日記

    https://github.com/podhmo/anything-vcs-project.el これ何? バージョン管理システム(git,hg)などで管理されているファイルをanythingからアクセスするためのelisp。 (以降バージョン管理システム=VCS) 実際の動作。 現在開いているバッファのディレクトリから、~/.{git,hg}を探す。 ~/foo/bar/boo/yee.txtにいる時は、~/foo/bar/boo/.git, ~/foo/bar/.git, ~/foo/.git, ~/.gitを探していく (hgについても同様) 見つかったら、そのVCSが管理しているファイルをanythingで選択して絞り込む 次回からは、開いているバッファがVCSが管理しているバッファでなくても開けるように覚えておく。 便利なのは、gitとhgどちらで管理しているか気にしなくて良い

    anything-vcs-project.elというelispを書いた。 - podhmoの日記
    lugecy
    lugecy 2011/05/04
  • ちっぽけな名前空間を作るマクロを作成 - podhmoの日記

    elispに名前空間を作る機能がないので、毎回同じような関数を違うprefixで定義しなければならなくてすごく面倒。 というか、関数の名前が長くなりがち。面倒。 なのでwith-prefixというマクロを作った。 すごく、強引だけどdefmacro!が認められるのだとしたらあって良い気がする。 とりあえず、個人的に利用するつもり。 使い方 (with-prefix ((@ with-prefix:) (util. with-prefix-util:)) (defun @odd? (x) "check a received argument is odd number or not" (if (<= x 0) nil (@even? (- x 1)))) (defun @even? (x) (if (<= x 0) t (@odd? (- x 1)))) (defun util.out (&

    ちっぽけな名前空間を作るマクロを作成 - podhmoの日記
    lugecy
    lugecy 2011/04/21
  • emacsでロード時にも現在のディレクトリを元にパスを設定する。 - podhmoの日記

    通常、emacsが立ち上がっているとき、現在開いているバッファのディレクトリの値が欲しければ、`default-directory`を使えば良い。 (insert default-directory);; -> /home/podmo/up/ バッファ上で直接`eval-buffer`をした場合には問題ないが、`load`を利用して読み込んだ時に失敗する。 具体例 現在のディレクトリは"/home/podhmo/up"。これでeval-bufferを使った場合とloadを使った場合でのdefault-directoryの値を見る。 現状の位置から、"./tmp/test.buf"を作成し、test.bufから見た相対的なファイルパスを取得したい。 得られる値が"/home/podhmo/up/tmp/"になることを期待している。 (defun show-me-default-directo

    emacsでロード時にも現在のディレクトリを元にパスを設定する。 - podhmoの日記
    lugecy
    lugecy 2011/03/16
  • とてもliteなpython用のemacsの設定 - podhmoの日記

    前書き(飛ばし読み推奨) 最近、ようやく、pythonで小さなコードを書くようになってきた。そして少し考え方が変わってきた。以前は、repl*1との連携を重要視してきたのだけれど、日常的なコードを書くのなら、もっと手軽な環境で十分なような気がしている。replと連携できることで得られるメリットは以下の2つだった(個人的)。 環境が保持できる (保持した環境を元に)情報を尋ねるインターフェイスが存在する。 環境が保持できるメリットは、あまり考えずに書けること。方針が立たない内に必要そうな関数を書き殴る。replのインターフェイスに少しずつ式をわせていく。書いた関数に値を渡して、結果を確認してみる。この繰り返しをしている内に、小さな関数の断片を組み合わせてある程度の規模のコード片を作り上げることができる。。 また、後者については、pythonのプロンプトを立ち上げて"dir({})"などと入

    とてもliteなpython用のemacsの設定 - podhmoの日記
  • whileでループを回すのは苦手です。 - podhmoの日記

    elispを読んでいるときに、whileがある箇所に辿り着くと頭が「うー」ってなります。何か読み辛いんですよ。 単純なループだったらdolist 構造的なループだったらloopマクロ を使って欲しいななんて思ったりします。 loopマクロと言っても、全部の機能を使う必要なんかないです。ちょっと便利なループ構文とでも思って使えばそれだけで便利ですよ。 そんなわけで、ちょっとした布教も兼ねて、どんな感じのループの時にどのように書いて欲しいかということを書いてみたいと思います。 その前に準備 リスト作成するのが面倒なのでrange関数を定義しておきます。 (require 'cl) (defun range (minv maxv) (loop for i from minv below maxv collect i)) (range 0 10) ; => (0 1 2 3 4 5 6 7 8 9

    whileでループを回すのは苦手です。 - podhmoの日記
    lugecy
    lugecy 2010/12/23
  • srfi-1の関数をだいたいelispで書いた。 - podhmoの日記

    srfi-1の関数をだいたいelispで書いた。 - podhmoの日記
    lugecy
    lugecy 2010/11/24
  • LoLのdefmacro!をelispに移植 - podhmoの日記

    util-macroを集める旅の途中で「defmacro!いいよ」という声を聞いたので、LoLのdefmacro!をelispに移植してみました。と言っても、mapcarの部分をmapcar*に変えてみたりなどと少しコードを変更するだけで済みました。大したことはしてないです。 コードは以下においてあります。 https://github.com/podhmo/el-util-macro/blob/master/defmacro!.el defmacro!について defmacro!では、with-gensymsの機能とonece-onlyの機能を、式中のシンボル名で利用することができます。 G!fooはgensyms相当のものに置き換わる(名前の衝突を防ぐ) O!fooは評価を一度切りに抑える(式の中で利用する際にはG!fooを利用) defmacro!の利用例(square) 変数の値を

    LoLのdefmacro!をelispに移植 - podhmoの日記
    lugecy
    lugecy 2010/11/07
  • 便利そうなマクロを集める旅。途中経過 - podhmoの日記

    旅をしています。途中経過はgistで はじめに elispは便利な機能がデフォルトでつかえないことが多いです。cl由来の便利ライブラリが使えません。(require 'cl)をする必要があります。それ自体はeval-when-compileで囲めば良いので問題ないです。elispは名前の衝突を避ける仕組み(e.g. 名前空間)が用意されていません。そんなわけで、自前の拡張を作成するときに各自で重複するようなマクロが定義されてます。onlisp由来のマクロなどを良く見かけます(とくにaifを良く見かける)。 今回の目的は2つあります。 各自が個別に定義してきた便利マクロを集めてみるとどの程度の規模になるのか知りたい。 自分用の便利なマクロを集めたライブラリが欲しい。 とりあえず、便利だなと思うマクロを追加してみることにしました。util-macro.elというファイルがそれです。 追加したマ

    便利そうなマクロを集める旅。途中経過 - podhmoの日記
  • 1