Anything.elが楽しいです♪
というわけで、ちょっとだけですが前回の記事からAnything.elをつかったObjective-Cのメソッドの補完をバージョンアップをさせてみました。何行か追加しただけなのですが、結構使い勝手がよくなった気がします。
;; anything-c-source-stClass-dumpの設定
;; stClass-dumpをanythingから使う key-mapはObjctive-Cの設定参照
(defvar anything-make-objc-method-command "stClass-dump %s")
(defun anything-c-make-objc-method-init ()
(start-process-shell-command "stClass-dump" nil
(format anything-make-objc-method-command
anything-pattern)))
(defvar anything-c-source-stClass-dump
'((name . "stClass-dump")
(candidates . anything-c-make-objc-method-init)
(action . (("InsertMethod" . anything-c-make-objc-insert-method)
("InsertAction" . anything-c-make-objc-insert-action)))
(requires-pattern . 3)
(delay)))
(defun anything-c-make-objc-insert-method (line)
(let ((selected-line (string-match " *\\(\\+\\|-\\) ([^)]*)\\([^;]*\\)" line)))
(insert (match-string 2 line))))
(defun anything-c-make-objc-insert-action (line)
(let ((selected-line (string-match " *\\(.*\\)$" line)))
(insert (match-string 1 line))))
(defun anything-objc-complete ()
(interactive)
(anything-other-buffer '(anything-c-source-stClass-dump)
"*anything-objc*"))
追加した機能は一つだけなのですが、画像の候補を選んでタブを押すと

こんな感じでActionが選択できるようになります

ここでInsertActionを選択すると、前回と同じで選択した項目がそのまま入力されます。

ここでInsertMethodを選択した場合

候補を選択してそのまま決定すると、InsertMethod が選択されます。 InsertAction を選択する場合は C-e もしくは TAB で候補を出してから InsertAction を選択してください。
一番上の画像のように -C UIApplication と指定すると UIApplication を含むクラスに絞った検索ができるようになっています。
ついでにiPhoneの開発しかしない & UIKit.framework のメソッドだけ補完できればいいという人は、以下のように書き換えるのもおすすめです。
(defvar anything-make-objc-method-command "stClass-dump %s")
↓
(defvar anything-make-objc-method-command "stClass-dump -i uikit -C %s)
この設定だと一番上の画像のように「UIKit.framework内の文字列 “UIApplication” を含むクラスで “application” を含むメソッドの検索が、「UIApplication -f application」と検索するだけで出てくるようになります。楽ちんなのです。ぜひ使ってみてくださいね。
でわでわ、たかともでした。
Emacs テクニックバイブルを手にいれたかた、どれぐらいいるんでしょうか?
たかともはいまだに購入を迷っています。知っていることも多いというのが一番の悩み。最後の方のAnything.elの章はものすごく手元にほしいのですが、それだけのために購入していいものかというところです。
そんなわけでAnything.elを使ってObjective-Cのメソッド名を補完するanything-c-sourceを作ってみました。
導入にあたって必要なもの
Anything.elはもう導入できているものとして、class-dump,stClass-dumpについては、この記事を参照にインストールしてください。ということで、あとはEmacsの設定ファイルにコードを追加していくだけになります。
(add-hook 'objc-mode-hook
(lambda ()
(define-key objc-mode-map (kbd "C-;") 'anything-objc-complete)))
;; anything-c-source-stClass-dumpをつくる。
(defvar anything-make-objc-method-command "stClass-dump %s")
(defun anything-c-make-objc-method-init ()
(start-process-shell-command "stClass-dump" nil
(format anything-make-objc-method-command
anything-pattern)))
(defvar anything-c-source-stClass-dump
'((name . "stClass-dump")
(candidates . anything-c-make-objc-method-init)
(action . anything-c-make-objc-insert-action)
(requires-pattern . 3)
(delay)))
(defun anything-c-make-objc-insert-action (line)
(let ((selected-line (string-match " *\\(.*\\)$" line)))
(insert (match-string 1 line))))
(defun anything-objc-complete ()
(interactive)
(anything-other-buffer '(anything-c-source-stClass-dump)
"*anything-objc*"))
使い方
iPhone開発に使う場合
- -i : iOS SDKに含まれるフレームワークをすべて表示
- -i フレームワーク名 : フレームワーク名を検索
- -i フレームワーク名 -a : フレームワークに含まれるメソッド・プロパティを検索
- -i フレームワーク名 -f : フレームワークに含まれるメソッド一覧
- -i フレームワーク名 -f hoge : フレームワークに含まれるメソッドでhogeを含むものを検索
Mac開発に使う場合は -i を -m に変更してください。
選択した項目はカーソル位置に挿入されるようになっています。また以下のように設定しておくとメソッド名をほとんどみられるようになっておいしいかもしれません。
(setq anything-candidate-number-limit 30000)
(setq anything-lisp-complete-symbol-set-timer 500)
(setq anything-mp-highlight-delay nil)
(setq anything-mp-highlight-threshold nil)
まだ設定したばかりですが、 「-i uikit -f numberOf…」のように検索して、メソッドを選択していくような使い方を想定しています。=他の機能はおまけ。よかったら試してみてください。そのうち「-(void)hotehote」をそのまま入力するのではなくて、 [hogehoge addSubView:]のような形での入力もできるように仕様と思っています。
でわでわ、たかともでした。
おまけ: anything の入力をするときに /Applications/Safari.app などすると Safariで使っているメソッドが見られるようになっています。
本日が発売日♪
Anything.el という elisp を作った方が書いた本なのですが、
目次をみてみたのですが、目次だけで自分のEmacsが強化されていきそうな気がします。
とくにAnything.elはカスタマイズの幅が広く、知らないことも多いので
1章をまるまるこのelispについて解説があるのはうれしいです。
早く手に入れたい><
しかし予約するのを忘れてしまって、どうしようか。。。
これからEmacsを使い始める人、
というよりはEmacsをすでに使っていて、もう一歩踏み込んだ使い方をしたい。
そんな人にはぴったりな本だと思われます。
いや、まぁ目次みただけですけど。
手に入れた方は感想を聞かせてくださいね。
でわでわ、たかともでした。
最近はVimばっかりつかってEmacsを起動することが少なくなってしまったのですが、anything.elの作者さんが本を出す。とのことで復習がてらEmacsの設定ファイルをいじっています。
Emacsで一つだけプラグインを入れろと言われたら、まちがいなく選ぶのがこのanything.elというElisp。バッファを切り替えたりファイルを開いたりするだけじゃなくって、 imenuとかとの連携もできたりgrepの結果を絞り込んだり、なんだかものすごい多機能なプラグインになってます。
本は8/3に発売のようですが、それを前に作者のrubikitchさんのエントリー。
■[anything][emacs]anything導入のeverything ~3分で使えるanything.el~
気になったのが下の方にある「anything-sourcesとM-x anythingは非推奨」の部分。
おもいっきり設定していますが、なにか? なんて強がってみようと思ったのですが、さくさくっと該当する部分を直してみました。
;; anything-mydefaut()にキーバインドを割り当てる
(define-key global-map (kbd "C-;") 'anything-my-default)
;; - anything-my-default() を設定する
(defun anything-my-default()
(interactive)
(anything-other-buffer '(anything-c-source-ffap-line
anything-c-source-ffap-guesser
anything-c-source-buffers+
anything-c-source-recentf
anything-c-source-files-in-current-dir+)
"*anything defalut*"))
anythingのソース(anything-c-source-なんちゃら〜)が用意されていれば、
(defun hogehoge() ;hogehogeという関数を定義
(interactive) ;おまじない
(anything-other-buffer ; anything-other-bufferを呼び出す
'(anything-c-source-hogehoge anything-c-source-fugafuga) ;ソースを書いていく '()はリスト
"*anything default*")) ;ソースを表示するバッファの名前を"*waiwai*"みたいに書く
上記のような関数を自分の用途に合わせて作ってあげれば、用途に合わせてanythingのソースを切り替えて使えるようになるわけです。便利〜♪
みなさんもぜひぜひ使ってみてください☆
でわでわ、たかともでした。
anything-c-sourceの作り方も書いてみたいけど、いまいち理解できてない。。。。
EmacsでもVimでも少しでも作業がとまると自動で保存してくれるのが、ものすごい便利だったりします。副作用がないわけではないのですが、ファイルの管理はバージョン管理のSubversionとかGitとかに任せてしまっているので、実に快適に作業できちゃうんですよね。
というわけで、EmacsとVim。両方の自動保存するための設定を紹介したいと思います
Vim編
以下の設定をVimの設定ファイルに追加
" 何も操作をしていないと判定される時間
set updatetime=500
set updatecount=500
" バッファの切り替えなどのときにファイルを自動で保存する。
set autowriteall
"set autowrite
" 操作がとまったときにファイルが更新されていれば自動で保存する
autocmd! CursorHold *.* update
autocmd! CursorHoldI *.* update
" ついでに操作がとまったら保存されるのでSwapファイルもバックアップファイルもいらない。
" バックアップファイルを作らない
set nobackup
" swapファイルを作らない
set noswapfile
autocmd! CursolHold *.* updateをautocmd! CursorHold * updateに変更すると無名バッファで編集ができなくなるので、こんな表記に。。。。無名バッファを表すときってどうやって表現したらいいのかわからなかったので、こんな表現になっています。
注意:BufWritePostにコマンドを割り当てていたりすると副作用があるかもしれないです。
Emacs編
こちらのサイトからauto-save-buffers.elをダウンロード。以下のコードをEmacsの設定ファイルに追加してあげる。
(require 'auto-save-buffers)
(run-with-idle-timer 0.5 t 'auto-save-buffers)
「たかともは保存を忘れたようだ。」
いちばんの副作用は、ほかのアプリケーションを使ってるときにまで保存するのを忘れたするようになってしまったことです。
みなさん、気をつけてつかってみてくださいね。
でわでわ、たかともでした。