emacs

anything-occurなどで現在のselectionの位置を表示する。

上下に移動する際に、persistent-actionを実行して上げればできそうです。(type-attributeがlineなら) 今回は、 anything-bm-list* anything-occur* を作ってみました。 code

.emacsの設定に役立つ関数

.emacsの中で定義していて便利だなと感じる関数/マクロの紹介。 とりあえず、aifとand-let*はUtilityとして必要かなと思います。 他にon-offを切り替えるトグルスイッチ見たいな関数を楽に定義できるdef-toggleというものを定義して使っています。 utilitie…

カーソルの色を変えるelisp

何だか面白そうだったので http://d.hatena.ne.jp/kitokitoki/20100322/p3 http://d.hatena.ne.jp/hitode909/20100322/1269232929 違い emacs上で名前がつけられている全ての色からランダムで選ぶようにした run-with-idle-timerを使ってみた*1 blink-modeと…

lisp的直積集合

appendを使わなくても書ける (define (cp . seqs) (define (cp1 xs acc) (fold (lambda (e r) (fold (cut acons <> e <>) r xs)) '() acc)) (let loop ((seqs seqs)) (match seqs [(xs) (map list xs)] [(xs . seqs*) (cp1 xs (loop seqs*))]))) reduceを使…

開いている全てのバッファの.cppと.hをrevert-bufferするelisp

http://d.hatena.ne.jp/berrylife/20100207/1265552316 開いている全てのバッファの.cppと.hをrevert-bufferするなら (require 'cl) (defun revert-matched-buffers (pattern) (loop for b in (buffer-list) when (string-match pattern (buffer-name b)) do…

現在のclojure用のemacsの設定

http://gist.github.com/297284 docstringとかまったく書いていない。defcustomも存在しない。

リアルタイムっぽい感じに動作するoccur

anything-occurがあれば用無しだけど… read-from-minibufferにkey-mapを渡せることを知りませんでした。 (require 'cl) (defvar ort-running-timer nil) (defvar ort-current-input "") (defvar ort-current-buffer nil) (defvar ort-current-window nil) (d…

schemeコードバトン(もどき)をelispで

emacs上だったら、もっとおもしろいことが出来そうだけれど。思いつかない。 関数名などは変えてしまっています。(elispでx->yとか見たことがないので) (defvar he:word-list-path "word-list.sexp") (defun he:call-with-input-buffer (buf &optional resum…

書き初め

schemeの感覚で書くとこんな感じかもしれない。foldの代わりにreduceで (defun dirs-children (dirs &optional exclude) (let ((exclude* (or exclude (mapconcat 'identity '("\\.\\{1,2\\}$" "\\.git$" "\\.svn$") "\\|")))) (nreverse (reduce #'(lambda …

lstripとかrstripとか欲しくなる。

例えば shell-command-to-stringで返ってきた文字列の末尾にいらない改行が含まれたりだとか。 そんなわけで、自分で定義して使っています。 code (defun rstrip (str) (replace-regexp-in-string "[ \t\n]+$" "" str)) ;;(defun lstrip (str) (replace-rege…

count-up

http://d.hatena.ne.jp/kitokitoki/20091219 http://d.hatena.ne.jp/gongoZ/20091222 (defun count-up (d) (interactive "P") (when (looking-at "[0-9.]") (let ((col (current-column)) (beg (progn (skip-chars-backward "[0-9.]") (point))) (end (progn…

info-modeで使うanything(memo)

anything-c-moccurのように、selectionを移動するたびに対応した行に移動する方法がわかった。 (defmacro let1 (var val &rest body) (declare (indent 2) (debug t)) `(let ((,var ,val)) ,@body)) (defmacro ilambda (&rest body) `(lambda () (interactiv…

timer用のanythingのSource

何となく作ってみた。(特に意味はない) 一度定義したタイマーを再利用したいかもしれないということで、いきなり殺すのではなく、stop-listというところに退避させるようにしている。でも、reviveは実装していない。*1 (defvar stop-timer-list nil) (defun …

emacsからtimeout付きでprocessを呼び出す2

emacs側では以下の2つのようなプロセスを呼び出せばいいことに気づいた。 . 動作 その後 this-process 渡されたコマンドを実行して もう一方のprocessが終わってなかったら殺す。 that-process sleepして もう一方のprocessが終わってなかったら殺す。 ;(req…

emacsからタイムアウト付きでプロセスを呼び出す。

なかなかうまく行かない。 with-timeoutはprocessの呼び出しに対応していない。 sleep-forは渡した秒数だけ待たないこともある。(原因不明) (sleep-for 3)が0.1xxx秒で終わってしまうことも 今のところはこのような感じ。(一応目的にあった振る舞いはするよ…

マッチする文字列を後ろから探す。

http://d.hatena.ne.jp/whitypig/20091102/1257187523 with-temp-bufferとre-search-backwardを組み合わせると惜しい結果にはなる。 一文字ずれてしまう。 (defvar str "This is a foo that is not same as the foo appeared in that sentence written by fo…

and-let*をelispで実装してみた。

srfi-2のand-let*がelispになかったので、実装してみました。 and-let* let*みたいなもの 値の束縛以外に条件式も渡せる 条件式の真偽で実行を続けるかどうか決める。 偽になったら、途中で実行中断nil(#f)を返す and-let*の利用例 ;;let*のように使える。 (…

emacs,haskell補完2

前回の続き。ghci上でタブを入力することで現れる候補を利用して補完。 でも、エラーもまるごと読み取って捨てているという強引なことをしているので適切な方法とは言えないような気もする。とりあえず、利用することはできるのでまぁいいや。 code (require…

ghciと通信して補完をする(かなり強引)

とりあえず目処は立った。 でも、他の人に進めようとする気にはなれないな。*1 (defmacro toggle! (name) `(progn (setq ,name (not ,name)) (message (format "%s:%s" ,(symbol-name name) ,name)))) (require 'inf-haskell) (defun haskell-send-string (s…

Rakefileを再帰的に探してrake testするelisp(TB)

http://d.hatena.ne.jp/modka/20090820/1250759260 書いてみました。*1 (require 'cl) ;; (defvar raketest-old-color (frame-parameter (selected-frame) 'background-color)) (defvar raketest-output-buffer "*rake test output*") (defvar raketest-succ…

method一覧

以下の方法が一番楽かもしれない。 準備 qriを使えるようにする。*1 sudo gem install fastri fastri-server -b .emacs (require 'ansi-color) (require 'anything) (unless (fboundp 'rlet1) (defmacro let1 (var val &rest action) `(let ((,var ,val)) ,@…

emacs内にlocal-twitter的なものを創った。

追記 上から下に挿入していくのを止めて、下から上に上がっていくようにした。(上の方が最近、下の方が過去) use-local-mapを使っていたせいで、post-to-buferを実行した後key-mapが変更されてしまっていた。 read-from-minibufferはkey-mapを引数として取…

リハビリ

最近、何もしていなかったので何か書く。これをやってみる。 内容 カーソル上にある単語を" "で区切って強調表示する。 (defun strong () (interactive) (let ((start (progn (backward-word 1) (point))) (end (progn (forward-word 1) (point)))) (let ((w…

gaucheの補完をanythingから使えるようにしてみた

symbol名の補完 inferior-gauche-modeでは以下の点が不満でした。 scheme-other-window*1で立ち上がったreplとも通信できない anythingで候補を選択できない*2 inferior-gauche-modeではcompleting-readを利用して候補を選択する replと通信する scheme-othe…

putがウザくなってきたのでマクロを書く。

(require 'cl) (defmacro set-put (progname edit-list) "edit-list = ((<value> . (sym ...)) ...)" `(progn ,@(loop for (depth sym-list) in edit-list nconc (loop for sym in sym-list collect `(put (quote ,sym) ,progname ,depth))))) (set-put 'scheme-ind</value>…

faceの情報取得

emacsの色の設定などを変更したかったので、カーソル位置の文字のfaceの情報を取得したかった。 現在位置のfaceは以下のようにして取得できる (get-char-property (point) 'face) 取得したfaceから設定されている情報をみたい。 face-all-attributesという関…

今までloopマクロを怖がって避けてたけど、つかってみたら結構便利だった。

1から10までの数を集める (require 'cl) (loop for i from 1 to 10 collect i); =>(1 2 3 4 5 6 7 8 9 10) collectを使うとlistに集めていくような処理になるみたい 他にもappend,nconc,sum,count,doがある (defmacro 1from10 (action var expr) `(loop for …

javascriptなどのfunctionとかの表示を短くしてみる

書いたもの (defmacro set-pretty-keywords (mode keyword-num-char-list) `(font-lock-add-keywords ,mode (quote ,(loop for (keyword num char) in keyword-num-char-list collect `(,keyword (0 (prog1 () (compose-region (match-beginning ,num) (matc…

emacsで画像の変更をチェックしてリロードする関数を書いた

これで絵を書くコードで遊ぶのが楽になるはず>< (defvar reload-image-target-path "") (defvar reload-image-target-buf "") (defvar reload-image-current-buffer "") (defvar reload-image-wait-time 1) (defvar reload-image-every-where-p nil) (defv…

ちょっとしたメモをとるのに便利かもしれないside-pocket-file.elというものを作った。

code readingとかしている時に、関数の挙動を調べたい時がある そんな時に使うと便利だと思う。*1 foo.elを編集していて C-c C-c でfoo.tmp.elが開かれる。 もう一度,C-c C-c でfoo.elに戻る。 foo.tmp.elに何か調べたいこととかメモをとったり実行してみた…