elisp

関数にlocalな変数を作る。あとbyte compilerのwarningsを抑える

emacs lispで複数の関数で共有したい変数を作りたい場合、普通は、グローバル変数を作って (require 'cl) ; incf (defvar my-count 0) (defun my-inc-count () (incf my-count)) (defun my-reset-count () (setq my-count 0)) (defun my-get-count () my-cou…

日本人ユーザーかどうか判別する処理

を考えたのですが (cond ((string= (downcase current-language-environment) "japanese") (message "japanese")) (t (message "otherwise"))) しか思いつきませんでした。

el-expectations.elを使ったテストまで移動する関数

el-expectationsを使ったテストに直ぐに移動するための関数です。 つい癖でanything-c-moccurなどを使ってテストの位置まで移動していましたが、コマンドにしたら凄く便利になって気持ちがスッキリしました。14行程コードを書けば世界が変わりますね。まあ名…

ポイントがある行のインデントより深い文字列を収得する関数

(defun take-same-indent-string () (let* ((indent (current-indentation)) (start-point (point)) (end-point (save-excursion (forward-line) (loop while (and (not (>= indent (current-indentation))) (not (eobp))) do (forward-line) finally return…

outputz.elでclマクロがrequireしないで使われている?

outputz.el読んでて気付いたので。 (unless (fboundp 'mailcap-parse-mailcaps) (block nil (dolist (path load-path) (when (or (file-exists-p (expand-file-name "mailcap.el" path)) (file-exists-p (expand-file-name "mailcap.elc" path))) (load (exp…

~/c/remedie/bin/remedie-server.pl開いてる時に~/c/remedie/lib/と~/c/remedie/extlib/をPERL5LIBにいれたい

flymakeでエラー出ちゃうので、どうにかしたいと思っていたのですがこんなのを思いついたのでメモ。 とりあえず、3ディレクトリくらい上がっていく間に存在するextlib,libをリストで返す関数を書いた。 (defun* plcmp--get-lib-path-list-liberal (&optional…

emacs lispで高速なremove-dupsを書く

次世代auto-complete.elを読んでみる - http://rubikitch.com/に移転しました id:IMAKADOさんによるとdelete-dupsは要素数が多いと遅いので、本当に高速化したい場合はハッシュテーブルを使ったほうがいいかと。anything.elではそうしている。 簡単なベンチ…

set-perl5lib.elのアイデアをブランチで作業している次バージョンのperl-completion.elに追加

id:sun-basixさんのset-perl5lib.elのアイデアをperl-completion.elでも実装することにしました。 PERL5LIBに編集中のCatAppのlibまでのパスを追加するelisp - taiyoh独言 このエントリーで書かれているアイデアです。コードは、coderepos上のものを参考にさ…

ストリングのリストを引数にとって割り当てられたキーを連続して押すと順番に入力するコマンド関数を返す関数

これもid:k1LoWさんが話していたアイデアです。 (eval-when-compile (require 'cl)) (defun my-chr (list-of-string) (lexical-let ((los list-of-string) (last-word "") (count 0)) (lambda () (interactive) (if (eq this-command real-last-command) (in…

良きに計らってリージョン選択してくれるコマンド(書き途中)

id:k1LoWさんと居酒屋で、 連打すると良きに計らってリージョン選択してくれるコマンドがあると便利ですよね。 という話をしたので考えてみました。書きかけ版です。 関数名とか適当です。 (defun auto-region-paren (&optional forward-char) (ignore-error…

バッファ内を走査してregexpにマッチしたストリングのリストを返す関数

よく使うので汎用的な関数を作って、それを使うことにしました。 codereposのブランチで作業しているperl-completion.elのversion1.0で使う予定です。 (eval-when-compile (require 'cl)) (defun* plcmp-collect-matches (re &optional (count 0) (match-str…

末尾に改行がないバッファで(while (re-search-forward (rx symbol-end) nil t))するとemacsがハングする気がする

末尾に改行がないバッファで以下のコードを実行するとemacsが落ちる気がします 自分のcarbon emacs環境だとC-gでもexitできないからanything-c-occur-by-moccurで落ちるときがあった。 (require 'rx) (while (re-search-forward (rx symbol-end) nil t)) 他…

シンボルがmacroかどうかを判定するmacrop関数の実装

edebugパッケージで提供されるedebug-macrop関数を参考にしました。 prefixとしてmy-をつけてあります。 確実に判定できるかどうかは未検証です。 (defalias 'my-func1 'my-func2) (defalias 'my-func2 'my-func1) ↑のような関数の場合に無限ループにならな…

コマンド名と割り当てているキーの文字列のリストを返す関数

anythingでmenuを作れないかと思って調べたのでメモ。 (defun get-describe-command-cands (s) (loop for sym being the symbols for sym-name = (symbol-name sym) when (and (string-match s sym-name) (commandp sym)) collect (substitute-command-keys …

elisp 再帰的にファイルを探す関数って標準ではない?

探してみたけど見付からなかったので、それっぽい動きをする関数を書いてみた。 (defun IK::directory-files-recursively (regexp &optional directory type) (let* ((directory (or directory default-directory)) (predfunc (case type (dir 'file-directo…

macroの勉強をかねてelisp上にmy言語?っぽいものを作ってみるテスト。

全部マクロで書いちゃえば (eval-when-compile (require 'twenty)) みたいにしてバイトコンパイルしてランタイムにはロードしないように使えば名前空間汚さないと思うので自分の作品で気兼ねなくつかえるかなと思って。(間違ってるかもしれない)例が適当です…

mozreplのemacsインターフェイスの補完機能を強化するmoz-plus.elをcodereposにコミットしました。

まだ状況によって挙動が微妙だったりする部分がたくさんあって恥ずかしいのですが公開しないよりずっとましだとここ数週間で考え方が変わったのでcodereposにコミットさせていただきました。 これはなに? inferior-moz-modeに補完機能を追加します。 機能 f…

js2-modeがでた!!

http://steve-yegge.blogspot.com/2008/03/js2-mode-new-javascript-mode-for-emacs.html以下、メモ。 多分生成されたコードもあるのかも知れないけど一万行近になってる! jsdocのハイライトとか括弧の補完その他いろいろ機能がありそうで楽しみ。 インデン…

Stevey's Blogのelisp記事が面白い

今はgoogleのSteve Yagge氏のブログ Emergency Elisp http://steve-yegge.blogspot.com/2008/01/emergency-elisp.html C,java, javascriptとの比較。loopマクロ。defstruct。ダイナミックスコープ。 超意訳なため間違っているかもしれないけど、 Emacs lisp…

anythingでoccur-by-moccur

emacs使っている人は、ほとんどの人が使っていると思いますがバッファやファイルを対象とした検索が超絶便利なcolor-moccurというelispがあります。 これをanythingで使えばimenuと組み合わせたりしてバッファ内の検索->移動が非常に素早くできると思ったの…

anythingでelispシンボルの補完をする

emacs-lisp-modeでM-tabにデフォルトで割り当てられてるシンボルの補完をanything使ってできるようにしました。自分は (global-set-key (kbd "C-S-i") 'anything-lisp-complete-symbol) に割り当てて lisp-complete-symbol の代わりに使ってます。-nwだとC-S…

anything-c-yasnippetをcodereposにコミットしました

codereposにコミットしました。 追記 2008/3/26 補完候補の収得方法をyasnippetの関数にアドバイスして自前で作る方法からyasnippetのstoreしているデータからとってくる方法に変えました。 codereposにコミット済みですので使ってくださっている方は以下か…

yasnippetのanythingインターフェイス

を書いてみました。 今日書いたばかりで、ほとんど使っていない状態なので不具合等残っていると思いますがとりあえず現段階のコードを書いておきます。 もし使ってくださる方がいましたらツッコミ歓迎です。 (require 'cl) (require 'anything) (require 'ya…