2099-12-31
■『Emacsメルマガ公開』&『Emacs Lispテクニックバイブル 〜真髄を知るLispの掟〜』発売中
- プロジェクトその2 メルマガ「Emacsの鬼るびきちのココだけの話」発行! - (rubikitch loves (Emacs Ruby CUI Books))
- 【特典付】『Emacs Lispテクニックバイブル』発売します - (rubikitch loves (Emacs Ruby CUI Books))
- 新刊『Emacsテクニックバイブル 〜作業効率をカイゼンする200の技〜』8/3発売 - (rubikitch loves (Emacs Ruby CUI Books))
- 『Ruby逆引きハンドブック』出版 - (rubikitch loves (Emacs Ruby CUI Books))
- YAMDAS現更新履歴 - 単著祭2009夏 〜 この一年で単著を出した文化系...
- Emacs/Lisp/Drill - 例えばanything-config.el内のanything-regexp(...
- (programmer? yaotti) - Emacsの設定整理&Perl用設定
- はてなダイアリー日記 - 【リニューアル記念第一弾】はてなブロガー...
- はてなブックマーク日記 - はてなブロガーの豪華サイン本がまとめて...
- はてな広報ブログ - ブロガーのサイン本、続々と到着!「はてなブロ...
- hchbaw記 - anything.el とともに SLIME を使うのに便利な設定を集...
- Weekly Emacs - Rubyにおけるコード補完の考察
- deruiの日記 - ぱうフォント on Emacs23
- (Life Hack!!)放牧日記 - anything-complete.elのanything-read-fil...
- god eat god のhowm - 前に考察した奴、全部じゃなくて、一部だけ...
- 武蔵の日記 - anything の source の設定値について
- 武蔵の日記 - EmacsWikiからリンクを張っていただきました
- 武蔵の日記 - My Tweets on Twitter
- 武蔵の日記 - My Tweets on Twitter
- deruiの日記 - 履歴を絞りこみながら正規表現で検索する。
- hchbaw記 - anything-el-swank-fuzzy.el を更新しました。
- ぺっくブログミラー - uptime
- deruiの日記 - zshでanything.el風履歴検索(その3)
- deruiの日記 - 履歴を絞りこみながら正規表現で検索する。
- hchbaw記 - anything-show-completion.el/anything-complete.el の...
- deruiの日記 - 履歴を絞りこみながら正規表現で検索する。
- deruiの日記 - zshでanything.el風履歴検索(その3)
- deruiの日記 - 履歴を絞りこみながら正規表現で検索する。
- deruiの日記 - zshでanything.el風履歴検索(その3)
- deruiの日記 - w3mでhit-a-hintもどき
- よしだメモ
- deruiの日記 - 履歴を絞りこみながら正規表現で検索する。
- deruiの日記 - zshでanything.el風履歴検索(その3)
- deruiの日記 - w3mでhit-a-hintもどき
- キングダムぶろぐ - termtterをEmacsの中から動かす方法
- すばらしい新世界 - 「yasnippetで同じパターンを連続入力する」件...
- 技術日記@kiwanami - 機能とコマンドとキーバインド : Emacs Adven...
- I am Cruby! - マイ.emacs探訪
- ぺっくブログミラー - Emacs Advent Calendar jp 2009 終了しました
- ぺっくブログミラー - Emacs Advent Calendar JP まとめ
- よしだメモ - [emacs][haskell] anything.elでhrefを引けるように...
- SmileRubyの外部記憶
- SmileRubyの外部記憶 - Ruby開発支援 - rcodetools - xmpfilter
- hchbaw記 - Anything.el で javadoc ツールで出力されるドキュメン...
- hchbaw記 - Anything.el で今見えている候補群を一挙にマークする a...
- とりあえず暇だったし何となく始めたブログ - Re: text-translator...
- I am Cruby! - org-mode、remember-modeでいろいろしたい!!
- リタマス - c-eldoc.el で C 言語プログラミング革命
- uhiaha888の日記 - org-mode入門(僕が) その1
- uhiaha888の日記 - org-mode入門(僕が) その2
- 雑記帳 - install-elisp.el
- 8tree にっき - bug-gnu-emacs ML を 3 日眺めて、気づいたこと
- 刺身☆ブーメランのはてなダイアリー - anything 中に anything を...
- 刺身☆ブーメランのはてなダイアリー - anything 中に anything を...
- 日々、とんは語る。 - 日本から買ってきてもらうリスト。
- 8tree にっき - shell-pop.el が紹介されました
- 日々、とんは語る。 - 夏だ!! 祭りだ!! スーパーEmacs祭り!!!!。
- がべこれログ - Garbage Collection Log - ここ最近買った書籍や D...
- ふなむしのはあとふるだいありぃ! - トゥルリラ 何かはしよう
- uhiaha888の日記 - matlabでもel-doc
- ふなむしのはあとふるだいありぃ! - anythins-gtags の DLに失敗
- (programmer? yaotti) - anything関数を好きな言語で実装できるanyt...
- Emacs/Lisp/Drill - 空気のようなEmacs Lisp 2010 冬
- ぺっくブログミラー@peccul - *emacsadventjp*= Emacs Advent Calen...
- ぺっくブログミラー@peccul - = Emacs Advent Calendar jp 2010 完...
- 技術日記@kiwanami - Emacsでカレンダーコンポーネントを作った
- ふなむしのはあとふるだいありぃ! - Meadowでanythingをしようと...
- Linux Wizardへの道 - Emacsノアクセサリー
- maeshimaの日記 - sudo-ext.elがうまく動かない件
- I am Cruby! - rcodetoolsが素晴らしすぎる件
- ToMmY-REOPENED - スクロールと設定 - 5日目
- Twitter / @akicho8
- Twitter / @akicho8
- ToMmY-REOPENED - 旅立ちの日 - 14日目
- 技術日記@kiwanami - [emacs][ui] calfw v1.2 リリース
- uenopの日記 - rcodetoolsが素晴らしすぎる件
- mozic - Mac
- Life is very short - 今すぐフォローすべき Emacs界のスーパーエ...
- がべこれログ - Garbage Collection Log - 「わたしのやてふ環境」...
- (rubikitch loves (Emacs Ruby CUI Books)) - はてな記法のテスト
- (rubikitch loves (Emacs Ruby CUI Books)) - はてな記法のテスト
- ふなむしのはあとふるだいありぃ! - 本を買った
- 戯れ日記 - Emacs で画像をスライドショーしたりカタログ表示した...
- 彼女からは、おいちゃんと呼ばれています - Emacs 厨だけど、PHP ID...
- すぎゃーんメモ - anything-grepでackを使うとマッチした部分のカラ...
- むしゃくしゃしてやった - key-combo v0.6をリリース:sequential-co...
- STARTATD - Carbon Emacsでload-pathを設定するときの注意
- メルセゲルのブログ - 手間をかけた脱google
- redboltzの日記 - anything.elをemacs22で使う
- むしゃくしゃしてやった - rspecのように前処理などを構造化できるE...
- Humanity - autochmodx.vimっていうプラグイン作った
- 日々、とんは語る。 - Emacs ビギナーに贈る、これからバリバリ使い...
- 日々、とんは語る。 - もう初心者なんて言わせない、Anything で始...
2013-02-02
■[emacs]all-ext.el:対象行を絞り込んでからまとめて編集するM-x allを超強化!occurと融合&anything・helmと連携
お久しぶりです。
みなさん、M-x allって知ってますか?
M-x package-install all
でインストールできるのですが、これはM-x occurのように正規表現にマッチする行を表示します。
occurとの違いは表示結果を書き換えれば、該当部分が自動的に書き変わることです。
ユースケースとしては、編集対象行を絞り込んでから、置換やrectangle系コマンドで一気に編集するって感じです。
便利なので以前から重宝しています。
ただ、occurより劣る点としては、対象行の行番号が出ていない点と、M-g M-n (next-error)とM-g M-p (previous-error)で移動できない点です。
(union all occur)
occurで絞り込んだはいいけれど、その結果をやっぱり編集したいという場合に改めてM-x allを実行するのは面倒ですね。
そこで、拙作all-ext.elの出番です。
MELPAに登録してあるので
M-x package-refresh-contents M-x package-install all-ext
でインストールしてください。
packageについては以下の設定が必要です。
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
all.elがインストールされていないならば同時にインストールされます。
(require 'all-ext)
のみで使えます。
ついでにauto-install.elなどもMELPA経由でインストールできるようにしました。
all-ext.elをインストール後、いつも通りM-x allを実行してください。
M-x occur同様行番号がついていることがわかります。
そしてM-g M-nやM-g M-pを実行してください。
該当行にジャンプできるようになっています。
*All*バッファからもC-c C-cで該当行にジャンプできます。
これでだいたいM-x occurの置き換えはできたことでしょう。
この時点で書き換え可能なoccurとなりました。
anythingやhelmから使う
今のemacsで検索といえば、anythingやその後継となるhelmを使ってる人も多いでしょう。
M-x anything-occur、M-x anything-c-moccur-occur-by-moccur、M-x helm-occurでMigemoつきでガンガン絞り込めるのは爽快としか言いようがありません。
これらで特定の行を絞り込んだら、その結果を編集したいときもあります。
そのとき、anything-resumeなどで次々と見ていくのは面倒で非効率的です。
ならばいっそのことanythingやhelmで表示されている内容を*All*に放り込めないかと思いました。
M-x anything-occurやM-x helm-occurで絞り込んだ後にC-c C-aを押すと、表示内容による*All*バッファが作成されます。
あとは*All*バッファを編集して元のバッファに反映させてください。
occurだけでなく、行番号とその行の内容を表示しているanything・helmコマンドならばなんでも使えます。
2012-10-09
■[emacs][el-expectations]ert-expectations: 新世代ユニットテストフレームワーク in Emacs Lisp
お久しぶりです。
世の中はすっかりEmacs24になってきたようですね。
本日、el-expectations.elの後継となるert-expectations.elをリリースしたのでお知らせします。
el-expectations.elは現役で使っているのですが、テストが失敗したときのレポート機能が弱くて不便に思っていました。
Emacs24ではユニットテストフレームワークのERTが標準添付になったことにより、ERTを内部で呼び出すことでその問題を克服しました。
基本的な使い方はel-expectationsと変わりません。
ERTについて学んでなくても今すぐ使えます。
M-x install-elisp-from-emacswiki ert-expectations.el
M-x install-elisp-from-emacswiki el-mock.el
あるいは
M-x auto-install-batch el-expectations
でインストールしてください。
※auto-install-batch-list.elはert-expectations.elを読むように更新しました。
http://www.emacswiki.org/emacs/download/ert-expectations.el
http://www.emacswiki.org/emacs/download/el-mock.el
たとえば、成功するテスト2つと失敗するテスト2つを実行させましょう。
el-expectationsと同じようにS式にてC-M-xを押します。
(expectations (desc "success") (expect 10 (+ 4 6)) (expect 5 (length "abcde")) (desc "fail") (expect 11 (+ 4 6)) (expect 6 (length "abcde")))
すると、*ert*バッファに次のように出力されます。
Selector: t
Passed: 2
Failed: 2 (2 unexpected)
Total: 4/4
Started at: 2012-10-09 15:37:17+0900
Finished.
Finished at: 2012-10-09 15:37:17+0900
..FF
F erte-test-00003
(ert-test-failed
((should
(equal 11
(mock-protect
(lambda nil
(+ 4 6)))))
:form
(equal 11 10)
:value nil :explanation
(different-atoms
(11 "#xb" "?^K")
(10 "#xa" "?\n"))))
F erte-test-00004
(ert-test-failed
((should
(equal 6
(mock-protect
(lambda nil
(length "abcde")))))
:form
(equal 6 5)
:value nil :explanation
(different-atoms
(6 "#x6" "?^F")
(5 "#x5" "?^E"))))
また、desc式を置いていれば、テスト名(erte-test-00003など)のリンクを辿ればジャンプできます。
その他はel-expectations.elの説明を参照してください。
http://d.hatena.ne.jp/rubikitch/20080409/elexpectations
P.S.
ここで一気にライバルに差をつけてしまいましょう。
2012-07-06
■[anything]anything-grep.elで最初からマッチ行をハイライトするようにした
anything.elの後継としてhelm.elが開発されていますが、anything.elはまだ死んでいません。
anything.elの現行ユーザのために、バグ修正をメインにメンテナンスし続けます。
ものすごい久し振りですがanything-grep.elを修正しました。
grepの結果をanything.elで絞り込む anything-grep.el をリリース - (rubikitch loves (Emacs Ruby CUI Books))
変更点はたった1点で、何も設定しなくてもpersistent-actionでマッチした行をハイライトできるようにしました。
(require 'anything-grep) のみでおkです。
M-x install-elisp-from-emacswiki anything-grep.el
2012-06-23
■[emacs]Emacs24のelispは速いぞ!ベンチマークを測定してみた
Emacs24「ねんがんのlexical-bindingをてにいれたぞ!」
10年にわたって開発してきたlexical-bindingがついにEmacs24に取り込まれました。
lexical-bindingが有効になると、letがlexical-letに化けます。
lexical-bindingは速いということらしいのですが、現時点でベンチマークをみかけないので測定してみました。
lexical-bindingは変数lexical-bindingをtにすると有効になります。
この変数は、バッファローカル変数なのでsetqで設定しても他のバッファに影響はありません。
M-x ielmで実験してみましょう。
ELISP> (setq lexical-binding t)
t
ELISP> (defun f1 (n) (let ((i 1) (s 0)) (while (<= i n) (setq s (+ s i)) (setq i (1+ i))) s))
f1
ELISP> (f1 10)
55
ELISP> (byte-compile 'f1)
nil
ELISP> (symbol-function 'f1)
(closure
(t)
(n)
(let
((i 1)
(s 0))
(while
(<= i n)
(setq s
(+ s i))
(setq i
(1+ i)))
s))
ぬ、lexical-bindingを設定したらielmではバイトコンパイルできないぞ??
とりあえず、適当なファイルを開いて以下の内容にして、C-u M-x byte-compile-file。
lexical-bindingをファイル内で有効にするには、こんなふうに一行目に -*- lexical-binding: t -*- を入れること。
;; -*- lexical-binding: t -*- (defun f1 (n) (let ((i 1) (s 0)) (while (<= i n) (setq s (+ s i)) (setq i (1+ i))) s))
そこでM-x rename-uniquelyでバッファ名を変えて、再びM-x ielm。
こっちはlexical-bindingを使わない方。
ELISP> (defun f2 (n) (let ((i 1) (s 0)) (while (<= i n) (setq s (+ s i)) (setq i (1+ i))) s)) f2 ELISP> (byte-compile 'f2) #[(n) 略(バイトコード) [s i n 1 0] 3]
さっそく測定。
ELISP> (benchmark-run 1 (f1 100000)) (0.016059 0 0.0) ELISP> (benchmark-run 1 (f2 100000)) (0.022624 0 0.0)
lexical-bindingによって3割ほど高速化しました。
P.S.
ここで一気にライバルに差をつけてしまいましょう。


