「ESS」タグアーカイブ

Rソースコードへのグラフ埋め込みをサポートするinlineR.elを書いてみた

Rの大きな魅力の一つが強力なグラフィックス機能であることに、最早異論を挟む余地はありません。そして、ほとんどのユーザに何かしら作図をする機会があるはずです。

さて、そのグラフィックスの出力はどうやって出力していますか?

別ウィンドウで出してますか?

それとも画像で保存して、画像ビューワかなんかで見ますか?

めんどくないですか? どっちも。

作図も1枚程度なら気になりませんが、何十枚も作っていると、ウィンドウの往復なり視線の移動に辟易してきます。Rハカーは、コードを読むとそのグラフを脳内補完できるという話ですが、残念ながらそこまでの能力はありません。

せめて、コードを読むようにグラフを眺めたい!! というわがままを叶えてみました。

inlineR.elとは

元々Emacsには画像を描画する機能があります。また、cacoo.elやiimage.elなどは、任意のタグを読みこむことで簡単に画像をインライン表示することができます。inlineR.elは、Rの作図関数を読みこんで画像を出力、cacoo.elやiimage.elが読みこめるタグを挿入するelispです。

インストール

githubに置いてます。ダウンロードしてロードパスの通ったところに置いたら、後は(require ‘inlineR)と.emacsとかに書けば終わりです。

myuhe/inlineR.el – GitHub

当然ですが、ESSが必要です。事前に入れておきます。

ESS – Emacs Speaks Statistics

それと、ないといけないわけでなありませんが、cacoo.elを併用するとさらに便利になると思うので、導入をおすすめします。インストール、使い方は@kiwanamiさんの記事を参考にしてください。

Emacsでスムーズに図形編集ができるようになるcacoo.elを作ってみた

使い方

まず、Rで作図関数を使ったコードを書いてみましょう。

その時、書いたコードがplot()など単一の関数で完結するものは括弧の内側にカーソルを合わせます。ggplot2など複数の関数が使われる場合は実行したい部分をリージョン選択します。

そして、”M-x inlineR-insert-tag”とすると、画像のフォーマット、名前がミニバッファで聞かれてくると思いますので、適宜入力します。

すると、カーソルの後にタグが挿入されます。

https://cacoo.com/diagrams/w4qQSvMvZ6yiBBxV-92FE7.png

この時、cacoo.elがインストールされていれば、cacoo.elに対応したタグが挿入されますので、”M-x toggle-cacoo-minor-mode”とすると、画像がインライン表示されるはずです。

cacoo.elがインストールされていなければ、iimage.elに対応したタグが挿入されます。”M-x iimage-mode”とすることで同様に画像がインライン表示されます。

設定

設定項目をいくつか設けています。お好みに応じて変更してください。

・inlineR-re-funcname
Rの作図関数を正規表現で指定します。ここで指定するとリージョン選択しなくてもタグを挿入することができます。
・inlineR-default-image
ミニバッファに最初に表示されている画像フォーマットです。デフォルトは”png”です。
・inlineR-default-dir
作図した関数を保存するディレクトリを指定します。デフォルトではカレントディレクトリです。
・inlineR-cairo-p
Cairoパッケージを使った出力の有無を指定します。デフォルトでは使用しません。使用する場合は事前にCairoパッケージを読みこんでおく必要があります。

カスタム例

カスタムはこんな感じになると思います。

(setq inlineR-re-funcname "plot\|image\|hogehoge\|my-func") ;;my-funcなどの作図関数追加
(setq inlineR-default-image "jpeg") ;;デフォルトをjpegに
(setq inlineR-default-dir "/tmp/") ;;tmpディレクトリに画像を出力
(setq inlineR-cairo-p t) ;;Cairoパッケージを使う

EmacsひきこもりRライフ

グラフがインラインで表示されると、データの入力に始まり、コーディング、作図までがソースコード中で眺めることができるので、全体の流れが非常に追いやすくなります。 ますますEmacsへのひきこもりっぷりが加速すること間違いなしです!!

gist.elが使えなくなったのでフォーク版作った

便利に使わせてもらっていたgist.elですが、最近急にgistにアップできなくなってしまいました。
どうやら原因は、SSLでしか通信できなくなったことにあるようです。
Sidejack Prevention Phase 2: SSL Everywhere – GitHub

ならば、コード中の「http」を「https」に変えれば済みそうですし、すでにgist.elをフォークしてそのような修正をしているものもありました。
んが、この方法でもなぜかgistにアップできません。ついカッとなってcurlに下請けに出すことにしました。
オレオレ修正版はgithubに置いてます。同じ症状にお悩みの方は使ってみてください。
myuhe’s gist.el at master – GitHub

@ymir_linさんに教えていただいたのですが、windows むけにopenssl同梱のcurl.exeがあるようです。ありがとうごさいます。

@myuhe http://tinyurl.com/2eext の三番目のリンクが openssl 同梱してるみたいです.less than a minute ago via twmode

@cvmatさんからは、gnutlsを使えばurl-retrieveでもいける、と教えていただいたのですが、当方のUbuntu環境ではうまくいきませんでした。。。

@myuhe url-retrieveもOpenSSLかGnuTLSがあればHTTPSで通信できるんですが、Windowsだと面倒かもしれませんね…。less than a minute ago via twmode

なんでだろう。。。

タイル型ウィンドウマネージャawesomeとその便利な機能とか設定10選

10月になってもPCが熱暴走するような南国暮らしも長くなったなーと実感する今日この頃、いかがお過ごしでしょうか。 こんばんわ、myuhe a.k.a 暑いのが大の苦手な南国人 です。

さて、いきなりですが、これまでWMはubuntu標準のGNOMEを使っていました。あまりこだわりもなかったですし、compizとかと併用すればそこそこ便利にも使えるので、そのまま使っていたのです。
んですが、EmacsとKeySnailの引きこもりライフも長くなり、だんだんとWMに不満が出てきました。何といってもマウス操作を頻繁に強要されます。compizもキー
バインドをある程度あてられますが、どうしてもキーバインドがあてられなくてイラっとすることもしばしばでした。
良い方法はないかなーと探していて、見つけたのがawesomeでした。

awesomeとは

awesomeとは、タイル型WMの一つです。awesomeとかタイル型WMについては以下が詳しいです。
日本タイル型ウィンドウマネージャ推進委員会 Wiki – SourceForge.JP
awesome – 日本タイル型ウィンドウマネージャ推進委員会 Wiki – SourceForge.JP

つまり、しょっちゅうマウス操作をしなくてもよくなりそうな感じです。素晴らしいです。というわけで、早速インストールしてみます。

その前に、ubuntuリポジトリのawesomeはバージョンが少し古いので、PPAから新しめのものをいただきます。

sudo add-apt-repository ppa:klaus-vormweg/ppa

それでは、早速apt-get

sudo apt-get install awesome awesome-extra

これで、使えます。簡単です。

カスタマイズ事始

デフォルトの状態でも、いろいろと便利機能が使えるようになっているのですが、少し物足りません。というわけで手を加えていきたいと思います。
awesomeの設定は、luaで記述していきます。luaです。全く書けません。まあ、書けなくてもどうにかなりそうですので、まずは、luaを快適に書けるようlua-modeを導入します。以下のサイトからlua-mode.elを落してきます。
Lua-mode
そして、.emacsなりに以下のように書いておきます。

(setq auto-mode-alist (cons '("\.lua$" . lua-mode) auto-mode-alist))
(autoload 'lua-mode "lua-mode" "Lua editing mode." t)

これで、Emacsで快適に編集できるはずです。
次にカスタマイズのベースとなる設定ファイルを持ってきます。/etc/xdg/awesome/rc.luaを~/.config/awesomeにコピーしておきます。このコピーしたrc.luaを編集していきます。
これから、個人的に便利だなーと思った機能とか、設定を紹介します。
当方、luaを全く知らないのでほとんどコピペです。おかしいところあるかもしれないので、先に謝っておきます。ごめんなさい。

expose風にタグを選択

macのexepose、便利ですよね。とうちのおじいちゃんが言ってました。
awesomeでもexpose風に選択することができます。まず、以下のサイトからrevelation.luaを落としてきます。
revelation.lua at master from bioe007’s awesome-configs – GitHub
次にrc.luaの始めの方に以下のように書いておきます。

require("revelation") 

そして、globalkeysに以下のような設定を書いておくと、prefixキーとsキーの同時押しでexposeもどきが起動します。

awful.key({ modkey }, "s",  revelation.revelation),

シェルのプロンプトをポップアップする。

タイル型WMはシェルから操作することが多くなりがちです。いつ、どんな時にでもシェルをさくっと使える状態となっていると、すごく快適です。
以下のコードをglobalkeysの中に書いておくと下からニョキっとプロンプトがでてきます。タブで補完もできるというおまけつきです。

require("obvious.popup_run_prompt")
awful.key({ modkey }, "r", obvious.popup_run_prompt.run_prompt), 

Run or Raise

起動に時間がかかるEmacsやFirefoxはいったん起動したらそれを落とさずいろいろな形で使いまわします。以下の設定は任意のアプリケーションが起動しいたなかったら起動して、起動していた場合はそれにフォーカスするというものです。同じタイル型WMのstumpWMやXmonadにも同様の機能があるみたいですね。

--- Spawns cmd if no client can be found matching properties
-- If such a client can be found, pop to first tag where it is visible, and give it focus
-- @param cmd the command to execute
-- @param properties a table of properties to match against clients. Possible entries: any properties of the client object
function run_or_raise(cmd, properties)
   local clients = client.get()
   local focused = awful.client.next(0)
   local findex = 0
   local matched_clients = {}
   local n = 0
   for i, c in pairs(clients) do
      --make an array of matched clients
      if match(properties, c) then
         n = n + 1
         matched_clients[n] = c
         if c == focused then
            findex = n
         end
      end
   end
   if n > 0 then
      local c = matched_clients[1]
      -- if the focused window matched switch focus to next in list
      if 0 < findex and findex < n then
         c = matched_clients[findex+1]
      end
      local ctags = c:tags()
      if table.getn(ctags) == 0 then
         -- ctags is empty, show client on current tag
         local curtag = awful.tag.selected()
         awful.client.movetotag(curtag, c)
      else
         -- Otherwise, pop to first tag client is visible on
         awful.tag.viewonly(ctags[1])
      end
      -- And then focus the client
      client.focus = c
      c:raise()
      return
   end
   awful.util.spawn(cmd)
end

-- Returns true if all pairs in table1 are present in table2
function match (table1, table2)
   for k, v in pairs(table1) do
      if table2[k] ~= v and not table2[k]:find(v) then
         return false
      end
   end
   return true
end

キーバインドの割り当てにはglobalkeysに以下のように書いておきます。

awful.key({ modkey }, "e", function () run_or_raise("emacs",{ class = "Emacs" }) end),

Emacs開く時にできる微妙な隙間をなくしたい

デフォルトで使っているとアプリケーションによっては周りに変な隙間ができたりすることがあります。Emacsもそうだったのですが、すごく気になります。そんな時は、awful.rules.rulesの中のpropertiesでsize_hints_honorをfalseにしておくとウィンドウがぴったりきます。

{ rule = { class = "Emacs" },
      properties = { tag = tags[1][1], size_hints_honor = false } },

dmenuのプロンプトをつくる

dmenuというのは、軽量なコマンドランチャ。タイル型WMと相性がすこぶる良いです。以下の設定は、dmenuをパネル上で起動する設定です。globalkeysの中に追加します。

awful.key({ modkey },            ";",
              function ()
                 awful.util.spawn("dmenu_run -i -p 'Run command:' -nb '" .. 
                                  beautiful.bg_normal .. "' -nf '" .. beautiful.fg_normal .. 
                                  "' -sb '" .. beautiful.bg_focus .. 
                                  "' -sf '" .. beautiful.fg_focus .. "'") 
              end)

CPUとメモリの状態をパネルに表示

見た目も手をいれます。以下の設定はパネルにCPUとメモリの状態をリアルタイムに表示するものです。

require("vicious")
-- Directory containing icons for the wibox
icon_path = os.getenv('HOME') .. '/.config/awesome/icons/'

-- CPU usage
cpuicon = widget({ type = "imagebox" })
cpuicon.image = image(icon_path .. 'cpu.png')
cpugraph = awful.widget.graph()
cpugraph:set_width(30)
cpugraph:set_height(16)
cpugraph:set_border_color(beautiful.border_widget)
cpugraph:set_background_color(beautiful.bg_widget)
cpugraph:set_color(beautiful.fg_widget)
vicious.register(cpugraph, vicious.widgets.cpu, '$1')

-- Memory usage
memoryicon = widget({ type = 'imagebox' })
memoryicon.image = image(icon_path .. 'mem.png')
memory = awful.widget.progressbar()
memory:set_width(8)
memory:set_height(16)
memory:set_vertical(true)
memory:set_border_color(beautiful.border_widget)
memory:set_background_color(beautiful.bg_widget)
memory:set_color(beautiful.fg_widget)
vicious.register(memory, vicious.widgets.mem, '$1', 9)

メニューからシャットダウン

awesomeはコマンドを使わないとシャットダウンできません。できれば、マウスでポチッとしたらシャットダウンできるようにしたいです。最初の方で言ってた事と言い分が違ってる気がしますが、気にしません。awful.menuの中に以下のように設定します。

mymainmenu = awful.menu({ items = 
                          {
                          { "awesome", myawesomemenu, beautiful.awesome_icon },
                          { "Ubuntu", debian.menu.Debian_menu.Debian },
                          { "open terminal", terminal }, 
                          { "Shutdown", function () awful.util.spawn_with_shell("gksu 'shutdown -h now'") end}
                       }
                    })

パネルにランチャーアイコンを置く

アプリを起動するのにいちいちコマンドを打ちたくありません。もう何が何だかわかりませんが、そんな気分なのです。というわけでパネルにアイコンを設置して、アイコンクリックで起動できるようにします。以下の設定を書いてemacslauncherをmywibox[s].widgetsの中に追加しておきます。

emacslauncher = awful.widget.launcher({ image = image( "/usr/share/icons/hicolor/24x24/apps/emacs23.png"),
                                     command = "emacs23"})

ターミナルをポップアップ

いついかなる時にでも、ターミナルは起動できるようにしておきたいです。このような望みをかなえるものとしてEmacsではshell-pop.el、アプリケーションとしてはtildaとかguakeなどがありますが同様の機能をawesomeで実現するものです。以下のサイトからscratchディレクトリ以下のファイルをローカルの~/.config/awesomeの中に保存します。そして、globalkeysに以下のコードを追加します。
awesome-configs – configuration files for awesome window manager

require("scratch")
awful.key({ modkey, "Control" }, "z",      function (c) scratch.pad.set(c, 0.60, 0.60, true)  end)

任意のウィンドウをワンキーで開いたり閉じたりしたい

先ほどの設定は、ターミナルをポップアップさせる設定だったのですが、ターミナル以外でもポップアップさせたい時もあります。そんな時のための設定です。まず以下のようにrc.luaに書いておきます。

require("scratch")

globalkeyに次のコードを追加します。

awful.key({ modkey, "Shift"}, "z", function () scratch.pad.toggle() end),

そして、clientkeysに次のコードを追加します。

awful.key({ modkey, "Control" }, "z",      function (c) scratch.pad.set(c, 0.60, 0.60, true)  end),

以上の設定をしてから、ポップアップしたいウィンドウを選択してから、prefixキー + Ctrl + z でそのウィンドウがフロートウィンドウとなるはずです。
この状態で prefixキー + Shift + z を押すと表示がトグルされます。

タイル型WMジャンキー

まだ、awesomeを使いはじめて日が浅いですが、ほとんどGNOMEを起動しなくなりました。他にもタイル型WMには様々なものがあります。WMをいろいろと変えられるというのもLinuxの良いところ。また他のWMも折を見て試してみたいと思います。
最後になりましたが、私のrc.luaを晒しておきます。他のファイルにも依存しているのでこのままでは動きませんが、参考になれば幸いです。
gist: 626278 – GitHub

今週の気になるアレSeptember 29th

delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
googlereader (feed #6)
delicious (feed #4)
googlereader (feed #6)
delicious (feed #4)
delicious (feed #4)
googlereader (feed #6)
googlereader (feed #6)
delicious (feed #4)
Shared awesome.
delicious (feed #4)
delicious (feed #4)
delicious (feed #4)
twitter (feed #2)
なんと谷村先生もawesomeユーザだったのか。しかもESSのことまで書かれてある。"awesome" – http://j.mp/9Hq6rT [myuhe]
twitter (feed #2)
ESS使いの方はいっぺんタイル型WMを試してみると良いです。かなり感動しますです!! [myuhe]
twitter (feed #2)
いつの間にかMobileOrgのAndroid版がマーケットに出てたので早速インストール!! "MobileOrg v0.4.3 Android用アプリケーション | 仕事効率化" – http://j.mp/dq1ouw [myuhe]
twitter (feed #2)
awesome、開発が活発なのはすごくありがたいんだけど、関数の互換性とってくれないのは、ちょっと。。ねぇ [myuhe]
twitter (feed #2)
まあ、なんだかんだ言ってGNOME使ってる以上に便利にはなったす。起動も速くなって、動作も軽くなってと良いことづくめ [myuhe]
twitter (feed #2)
MobileOrg、iPhone版の単純なクローンかと思ってたら、いろいろオリジナルの機能がついてた。ウィジェットの表示とかもできて、好印象です!! [myuhe]
twitter (feed #2)
ソースコードも公開されてるし、余裕があったらコード読んでみよう [myuhe]
twitter (feed #2)
結構頻繁にコミットされてるなー。これからが楽しみす!! "matburt’s mobileorg-android at master – GitHub" – http://j.mp/cdFQxC [myuhe]
twitter (feed #2)
あーでもJavaいぢるのはちょっと億劫。。。 [myuhe]
twitter (feed #2)
elispもいぢりたいし、そろそろいい加減Ekumacsもしたいですが、しばらくデスマが止まりそうにない。Rとにらめっこする日々 [myuhe]
twitter (feed #2)
デスマチックが止まらない [myuhe]
twitter (feed #2)
そういえば、自分で作ったadviceが思いのほか快適ですた。 [myuhe]
twitter (feed #2)
RT @tm8st: yafastnav.el 更新。コントロール文字を使ってショートカットキーを増やしてみた。Ctrl押しっぱなしで移動できると流れが切れなくてよさそう。 [myuhe]
twitter (feed #2)
昨日やってたRの高速化処理、ループの中でマトリックスにベクトルをrbindさせてたんだけど、最初にでかいマトリックス作って上書きさせていくやり方より速かった。逆だと思ってたんだけどな。rbind自体が結構高速に動作するってことなのか? [myuhe]
twitter (feed #2)
ESSでcontext-skkがきかなかったので、(setq context-skk-programming-mode (append context-skk-programming-mode (list ‘ess-mode ))) しといた。素敵。 [myuhe]
twitter (feed #2)
こうやって、ちょこちょこelispをいぢりながら作業してるから、遅々として進まんのか。。 でも気になるんだけどな。 [myuhe]
twitter (feed #2)
しかも、Rみたくマイナー言語は標準で考慮されてないことが多々あるので、いぢるところも必然と多いというね。いやESSは素晴らしいんですけどね。。。 [myuhe]
twitter (feed #2)
rtagsとか、どう考えてもESSのために追加したとしか思えんしwww [myuhe]
twitter (feed #2)
I’m at としのり歯科. http://4sq.com/ai44ED [myuhe]
googlereader (feed #6)
googlereader (feed #6)

今週の気になるアレSeptember 22nd

delicious (feed #4)
googlereader (feed #6)
googlereader (feed #6)
googlereader (feed #6)
googlereader (feed #6)
googlereader (feed #6)
Shared linum-off.el.
delicious (feed #4)
googlereader (feed #6)
delicious (feed #4)

今週の気になるアレSeptember 15th

googlereader (feed #6)
googlereader (feed #6)
delicious (feed #4)
lastfm (feed #3)
53 曲を聴きました。
lastfm (feed #3)
11 曲を聴きました。
delicious (feed #4)
delicious (feed #4)
twitter (feed #2)
大文字派、小文字派と分かれそうな気がする。僕は気分次第で変わるという一番駄目なパタン RT @R_Linux: Writing R Extensions に拡張子は .R 推奨って書いてありました orz RT: そういえば俺,Rのスクリプトの拡張子を大文字で .R としてます [myuhe]
twitter (feed #2)
今週あたりからデスマ入りそうな予感。 [myuhe]
twitter (feed #2)
使わしてもらいます!! いや飲んだことないんだけど。。。 RT @stillpedant: 寝てないアピールと同じ文脈でレッドブルアピールという言葉が使えると思うので, どんどん使いましょう [myuhe]
twitter (feed #2)
つか、先週からやっとけば楽にできたんです。あのせいで、あのせいで。。。ぅっぅっ [myuhe]
twitter (feed #2)
ぐーFirefoxががっつんがっつん固まってストレスフル [myuhe]
twitter (feed #2)
MAROON5のエロいプロモは公私混同以外の何者でもねーだろよ!! [myuhe]
twitter (feed #2)
面倒くさくなってきた。Profile作りなおそ [myuhe]
twitter (feed #2)
むー今はFirefoxの大掃除なんてしている場合ではないんだけど。。。これが現実逃避か。 [myuhe]
twitter (feed #2)
ま、だいぶ軽くなった気がするし、良いとしとこ [myuhe]
twitter (feed #2)
I’m at ハローデイ さくらの森店 (桜木6丁目6番1号, 熊本市). http://4sq.com/5ODD1D [myuhe]
twitter (feed #2)
I’m at ウエスト立田の杜店 (熊本市龍田陳内2丁目3-1, 国道3号線, 熊本市). http://4sq.com/beNwRv [myuhe]
twitter (feed #2)
問:良いモデルとは何ですか? [myuhe]
twitter (feed #2)
答:モデルを使用する目的によって異なる! [myuhe]
twitter (feed #2)
本当にありがとうございました。 [myuhe]
twitter (feed #2)
今回は、どうにかまだWinBUGSの範疇でおさまりそうだけど、どっぷり暗黒面に落ちざるを得なさそう。。。 [myuhe]
twitter (feed #2)
つっても、そろそろWinBUGSではどうしようもなくなりそうな気配なので、卒業の準備もせねばねー [myuhe]
twitter (feed #2)
まあ、c++とか全然書けないんですけどね。 [myuhe]
twitter (feed #2)
明日こそは積読状態の計算統計2を読まないと。。。 [myuhe]
twitter (feed #2)
今気付いたけど、DDSKKで「つんどく」って入力したら、積読って▽でてきた!! [myuhe]
twitter (feed #2)
そういや、MAGROってどうなんだろ。最近あんま更新されてないけど、オープンソースだし勉強のテキストとして使えるかなー [myuhe]

ESS on EmacsでRの実行結果を見やすくしてくれるadvice

EmacsでRを書く時は基本的にRのコードを表示しているバッファと実行結果を表示する*R*バッファの2枚を開いて作業しています。
Rのコードをess-eval-*関数群で実行していって、*R*バッファでその実行結果を眺めながら作業していくのですが、この*R*バッファがちょっと使いにくいです。実行しても画面がスクロールしてくれないのです。実行結果が隠れて見えないので、見るためにはscroll-other-windowなんかを使ってスクロールさせていました。それもだんだん嫌になってきたので、そこらへんの勝手を良くしてくれるdefadviceを書いてみました。.emacsあたりに適当に貼ってお使いください。

ess-eval-regionしかadviceしてませんが、他のess-eval-*はess-eval-regionのラッパーみたいなのでどうにかなると思います。
にしても、defadvice便利。Rにも欲しいです、母さん。

EmacsでRのコード補完を快適にしてくれるauto-complete-acr.elがオムニ補完に対応しました。

Emacs Wiki更新情報を眺めていると、ac-R.elなるものを発見。

auto-complete.elのRインターフェイスが出てる!! “EmacsWiki: ac-R.el” – http://j.mp/cbrPMEMon Aug 23 22:48:03 via KeySnail

案の定、auto-complete.elのR用拡張でした。
ざーっと見た感じ、オムニ補完ができそうだし、古いバージョンのRでも補完ができるようになっていたりと、とても高機能っぽいです。
ちなみにオムニ補完とは、もともとVimの補完方法につけられている名称で(多分)、VSのインテリセンスのようなものだと思うとわかりやすいかもしれません。
これを使うと例えば、JavaやPythonのメソッドをさくっと補完していくことができるのですごく便利なのです。

で、早速使ってみたのですが、これがなかなか思うように動いてくれません。
まず、思いもよらないところでオムニ補完が働いたりするくせにオムニ補完してほしいところでしてくれません。これはオムニ補完のトリガーとなっている正規表現が変てこなことに起因するのですが、あまり肌に合いませんでした。
それと、オムニ補完時は、補完候補が読みこまれているオブジェクトに限定されるようになっているのですが、変なところでオムニ補完が働くせいで入力したいものが補完候補になかったりします。

というわけで結局, 肌にあったauto-complete-acr.elやねーということになったわけですが、せっかくなのでauto-complete-acr.elもオムニ補完ができるようにしてみました。
んですが書いた後に、そもそもCLOS風味なオブジェクトシステムのRでオムニ補完って必要なくね?という事に気がついたのですが、とりあえずアップデートしてGitHubに置いときます。

auto-complete-acr.el at master from myuhe’s auto-complete-acr.el – GitHub

インストールなぞは以前書いたこちらを参考にどうぞ。

ESS on Emacsで快適に補完できるauto-complete-acr.el0.2リリースしました

肝心のオムニ補完ですが、今のところデータフレームの列にアクセスする$演算子とS4クラスのスロットにアクセスする@演算子に対応しています。
動作している動画を見れば一目瞭然かと思います。動画ではデータフレーム”dat”で列やスロットを入力しています。

これまでデータフレーム等の要素にアクセスする際、例えばhoge$fugaのように入力する場合で考えると、hogeは補完できる可能性があったわけですが、fugaについてはほとんど手入力であったと思います。今回のオムニ補完では、$や@がトリガーとなってauto-completeするので、$より後ろのfugaについても補完候補から選択できるようになります。さらに、オムニ補完時にはトリガー($とか@)より前の文字列に応じて補完候補が絞られるので、効率的に候補選択することができるようになりました。
実は、もっとオムニ補完を働かせる場面ってあるかなーと思ってたのですが、意外にありませんでした。いやあ、CLOSって素晴らしいですね!!
ほかにオムニ補完をきかせたいシチュエーションがあったら、教えてもらえると嬉しいです。
最後になりましたが、補完候補を表示している際にいきなり補完候補が落ちる現象を確認しています。あまり気になるようでしたらac-source-omni-pre-list-essacrとac-source-omni-pre-class-essacrを情報源からはずしてみてください。

それでは Enjoy R and Emacs!!

今週の気になるアレJuly 1st

googlereader (feed #6)
googlereader (feed #6)
googlereader (feed #6)
delicious (feed #4)
delicious (feed #4)
googlereader (feed #6)
twitter (feed #2)
HDD、まだ35%しかフォーマットされてないし。。。 [myuhe]
twitter (feed #2)
同居人に一昨日フォローしてきたやつがひどい。TLが全て女性へのナンパリプライで埋めつくされてる。必死すぎだろ。 [myuhe]
twitter (feed #2)
おやつ – カルビー じゃがりこ SPICY CHEESE 52g http://htn.to/r9yf67 [myuhe]
twitter (feed #2)
もう一個 – (お徳用ボックス) カルビー じゃがりこ サラダ 60g*12個 http://htn.to/Sys9Gx [myuhe]
twitter (feed #2)
ただ、体だけの関係のを求めている方って、そんな女子はtwitterとかぢゃなくて、もっと別のところで探して方がいいと思うよ [myuhe]
delicious (feed #4)
twitter (feed #2)
HDDのフォーマットが全然わらない [myuhe]
twitter (feed #2)
液晶テレビ、本当に安くなったよなー [myuhe]
twitter (feed #2)
うちの親父、バリから帰国したらしい。また、えぐいインスタント食品がお土産なんだろうな。 [myuhe]
twitter (feed #2)
twittering-modeのキーバインドをKeySnailクライアントのキーバインドに合わせた。twittering-modeはしばらくつぶやき専用として使ってみる。 [myuhe]
twitter (feed #2)
眠いなー。やっぱサッカー見なかったら非国民?? [myuhe]
twitter (feed #2)
風呂はいろ [myuhe]
googlereader (feed #6)
twitter (feed #2)
I’m at グランメッセ熊本 (福富1010, 益城町). http://4sq.com/7TzH07 [myuhe]
googlereader (feed #6)
twitter (feed #2)
データの移行作業、ようやく終わた [myuhe]
twitter (feed #2)
余ったHDDは液晶テレビの記録用にとっておく [myuhe]
twitter (feed #2)
スペシャとかMTVがむしょーに見たい。 [myuhe]
twitter (feed #2)
twittering-mode使ってたら、同居人から殺伐としたtwitterやねーとかなんとかツッコミが。 [myuhe]
twitter (feed #2)
これ聴いてる -> November 15th by Nothing’s Carved In Stone (20:36:40) [myuhe]
twitter (feed #2)
Google docで家計簿作ってみた。来月から緊縮財政なので。。。 [myuhe]
lastfm (feed #3)
8 曲を聴きました。
twitter (feed #2)
RT @cametan_001: TeXの功罪ってのがあってさ。実際問題、これ使う唯一の理由ってのは「プリントアウトした時の見た目がいい」ってだけなんだよな。「多大な努力で習得して」結果はそれ「だけ」なんだ。言わば印刷下請けの部分を自分でやりたいだけ、って話なんだよ(笑)。 [myuhe]
twitter (feed #2)
RT @cametan_001: Emacsはプラットフォームとしては強力で、以前書いたけど「仮装マシン」だと行っていいと思う。色々実験的な事を簡易で行える、ってのはプログラミングしてみたい、って層には逆に向いてるんだよね。テキストエディタとしてではなく。そこは否定しない。 [myuhe]
twitter (feed #2)
wolfbird,BASIC認証廃止までの期間にoauth,xauth対応終るんだろか。songbird亡き今、結構重篤な問題なんだけど。 [myuhe]
twitter (feed #2)
つか、BASIC認証の廃止って、どーでもいいクライアントとかを排除するのが主目的のような気がしてきたなー [myuhe]
twitter (feed #2)
お金が来ないので、書いたい本がたまりまくってる。いや、自腹で買えばすむ問題だってのは、重々承知です、ええ。 [myuhe]
delicious (feed #4)
twitter (feed #2)
I’m at ミスターマックス. http://4sq.com/dj6ESb [myuhe]
twitter (feed #2)
えへへ、涙が止まんないや。。。 [myuhe]
twitter (feed #2)
ま、玉葱でだけどねー [myuhe]
twitter (feed #2)
それより、twittering-modeがログインでけん。xauthの認証で失敗してるみたい。 [myuhe]
twitter (feed #2)
これ聴いてる -> Cold Reason by Nothing’s Carved In Stone (12:00:00) [myuhe]
twitter (feed #2)
ほんと勝手だなー [myuhe]
twitter (feed #2)
だめだ、こりゃ [myuhe]
lastfm (feed #3)
14 曲を聴きました。

今週の気になるアレJune 17th

twitter (feed #2)
日記書いた-> 今週の気になるアレJune 10th http://bit.ly/aeAwJb [myuhe]
twitter (feed #2)
前のはテフロンが駄目になったので – T-fal インジニオ サファイア フライパン 26cm L52005 http://htn.to/nRGEkq [myuhe]
twitter (feed #2)
2つ買ってやった – T-fal インジニオ サファイア ウォックパン 26cm L52077 http://htn.to/7YC5gU [myuhe]
twitter (feed #2)
やたーハードル一つクリア!! [myuhe]
twitter (feed #2)
IOエラーは出なくなったんだけど、postできてない。実機で試してみるか。 [myuhe]
twitter (feed #2)
もしかしたら、別スレッドにしないといけないとか? [myuhe]
twitter (feed #2)
Org-modeで家計簿つけて、Rで経済分析するとゆーライフハック。 [myuhe]
twitter (feed #2)
いや、まぢいいかもしれんな。 [myuhe]
twitter (feed #2)
ちなみにOrg-babel-RにはESSが必須です。てか、ESSないとR使う気起きない。 [myuhe]
twitter (feed #2)
logcatの GC freedって何なん? フリーザのすごいの?? [myuhe]
twitter (feed #2)
あー実機でも駄目やん。どうしたもんかな。後は別スレッドにするぐらいしか方法思いつかないな。 [myuhe]
twitter (feed #2)
とか言いながらThreadのこと全然理解してない。 [myuhe]
twitter (feed #2)
Rってば膨大なパッケージ使いこなせてなんぼだからなー ま、シンタックスは変態だけど。 [myuhe]
twitter (feed #2)
もう一回、実機で試してみよう。 [myuhe]
twitter (feed #2)
logcatがしょっちゅう出なくなる。その度にEclipse落とすのがわずらわしい。Emacsくらい起動速ければなー [myuhe]
twitter (feed #2)
あーlogcatが化けらった。。。 [myuhe]
twitter (feed #2)
いろいろ入ってるなー – 中国 蜂蜜飴 http://htn.to/2ou9M1 [myuhe]
twitter (feed #2)
やたーpostできたー!! これでオレオレandroidアプリの完成だす。 [myuhe]
twitter (feed #2)
いぢる必要あるとこはたくさんあるが個人で使う分には全く問題ない。ま、もう少し汎用的にして公開はするけど。 [myuhe]
twitter (feed #2)
お。org-babel-clojureほしーって言ってる人いる。その前にScalaもやな。 [myuhe]
twitter (feed #2)
書いた量はたいしたことないんだよな。なれだな、なれ。 [myuhe]
twitter (feed #2)
自分がやりたいことができるようになったら俄然やる気失せてきた。ソースコードも公開してるんだから、ソース嫁とか思うようになってくる。オープンソース開発者ってほんとすごいよな。 [myuhe]
googlereader (feed #6)
twitter (feed #2)
ウロウロ (@ 白川公園) http://4sq.com/b2ufos [myuhe]
twitter (feed #2)
ブラブラ (@ 無印良品 熊本パルコ上通り) http://4sq.com/9oOADt [myuhe]
twitter (feed #2)
今日は、遠泳大会の壮行会なのであります。 [myuhe]
twitter (feed #2)
モヒカンのおじいちゃんがいる [myuhe]
twitter (feed #2)
これはない – 夏のわすれもの/Love Letter (CD+DVD) / つるの剛士 http://htn.to/xurR9f [myuhe]
twitter (feed #2)
スカパラも節操がない [myuhe]
twitter (feed #2)
最近ズンズンな四つ打ち聞くと気分悪くなる。年とったす [myuhe]
twitter (feed #2)
飲み会なので – 日本薬剤 キングファイトウコン ウコンドリンク 100ml×30本 http://htn.to/fX4GEv [myuhe]
twitter (feed #2)
RT @motoshit: 【RT願】 東北大・生態適応GCOEの学生有志で,生物多様性・移入種などについての意識調査を行っています.結果はウェブ・雑誌などで公表する予定です.ちょっと長い(15~20分)ですが,多くのみなさんのご協力をお願いします.http://bit. … [myuhe]
twitter (feed #2)
帰宅 [myuhe]
googlereader (feed #6)
twitter (feed #2)
google goggleのすごさに改めて感動。画像探すのすんげ便利 [myuhe]
googlereader (feed #6)
twitter (feed #2)
GETしたデータをSQLiteに入れとこうかと思ったけど、めんどそうなのでやめた。たいした量でもないので当面毎回リクエストすることにする。 [myuhe]
twitter (feed #2)
Androidアプリ、XMLをパースさせる箇所ができたら、とりあえずpre^100 Alphaとしてリリース予定。明日くらいまでにできたらいいな [myuhe]
twitter (feed #2)
でも、今日も飲み会なんだよね。あー行きたくない。。。 [myuhe]
twitter (feed #2)
お腹減ってきたのでキムチ食べよ。 [myuhe]
delicious (feed #4)
twitter (feed #2)
ひたすらキムチを食べつづけている [myuhe]
twitter (feed #2)
EclipseのXMLインデントが糞すぎる。そう糞だ。 [myuhe]
twitter (feed #2)
twitter (feed #2)
twitter (feed #2)
飲み会へ出立 [myuhe]
twitter (feed #2)
今日は年齢層が幾分若いバス車内 [myuhe]
twitter (feed #2)
twitter (feed #2)
お腹の調子が良くならん。今日は早めに帰りたい。許されればだけど [myuhe]
twitter (feed #2)
鉄工団地なくなったんだから「鉄工団地前」というバス停は良くなかろうて [myuhe]
twitter (feed #2)
シュロアモール前ですよね [myuhe]
twitter (feed #2)
なぜベロベロになるまで、飲むの?バカなの?死ぬの?て言われるんだけど本人は全くその気はなくて、いつの間にかそうなっている。それをかれこれ10年くらい繰り返している。やっぱりバカだ [myuhe]
twitter (feed #2)
信号停止でエンジンが止まると乗客の会話も止まる理由を140文字以内で述べよ。 [myuhe]
twitter (feed #2)
foursquareでオフ会とかすると、あいつからメイヤー盗まれたとかなって、気まずくなったりするんだろか。 [myuhe]
twitter (feed #2)
着いた (@ 白川公園) http://4sq.com/b2ufos [myuhe]
twitter (feed #2)
暇なので (@ 蔦屋書店 熊本三年坂) http://4sq.com/8xvGMW [myuhe]
twitter (feed #2)
欲しいなー – エキスパートPythonプログラミング / Tarek Ziade http://htn.to/NgaGpU [myuhe]
twitter (feed #2)
あ、でもエキpy、なぜかその他プログラミングコーナーに置いてる。てきとーだな。 [myuhe]
twitter (feed #2)
綺麗なお姉さんが上流工程入門なる本読んでる。 [myuhe]
twitter (feed #2)
今日の飲み会会場 (@ 紅蘭亭 下通本店) http://4sq.com/cA0ojG [myuhe]
twitter (feed #2)
きょうもウコン – ウコンの力 http://htn.to/FaQe9k [myuhe]
googlereader (feed #6)
twitter (feed #2)
帰りたいけど帰れない、 [myuhe]
twitter (feed #2)
レーザーディスクのカラオケで歌えもしない歌を歌う。そんな夜 [myuhe]
googlereader (feed #6)
twitter (feed #2)
終わった。ぬむい。かえる [myuhe]
twitter (feed #2)
この時間のバス、乗客多いなー [myuhe]
twitter (feed #2)
寝よう。そして起きたらEclipseがEmacsになってるんだ [myuhe]
twitter (feed #2)
自炊って、手段と目的があべこべになってない? [myuhe]
twitter (feed #2)
I’m at スーパーマーケット みやはら (熊本県熊本市御領2丁目6-1, 熊本市). http://4sq.com/9rxUUA [myuhe]
twitter (feed #2)
イベントリスナつけたら、ぬるぽでる。 [myuhe]
twitter (feed #2)
RT @kobashinG: RT @masason: 陳謝。RT @hage: ソフトバンクの社長のアカウントは @masason@hage じゃないです。お願いですから僕にiPhoneの発売日とか価格とか予約の話とか聞かないでください。 [myuhe]
googlereader (feed #6)
twitter (feed #2)
単純な@idのミスorz [myuhe]
twitter (feed #2)
twitter (feed #2)
Photo: jinon: (via classics, tkr) http://tumblr.com/x8bbgtjv8 [myuhe]
twitter (feed #2)
アイス食べにきた。 (@ サーティワンアイスクリーム ゆめタウンサンピアン店) http://4sq.com/bMJPir [myuhe]
googlereader (feed #6)
twitter (feed #2)
XMLのパースまではうまくいったけど、spinnerの設定でストップ。今日までの公開は間に合わなかったか。 [myuhe]
delicious (feed #4)
twitter (feed #2)
弁当忘れて、家に戻ってくるなど。 [myuhe]
googlereader (feed #6)
twitter (feed #2)
今日学んだこと。Eclipseを信じすぎてはいけない。 [myuhe]
twitter (feed #2)
はーspinner部分がようやく完成。 [myuhe]
twitter (feed #2)
今日じゅうに仕上げてみせる。でないと、本業に悪影響ががが。 [myuhe]
twitter (feed #2)
I’m at マックスバリュ新託麻店 (小山2-13-60, 熊本市). http://4sq.com/btfsq0 [myuhe]
twitter (feed #2)
I’m at ダイソー 熊本新託麻店 (武蔵ヶ丘4丁目18武蔵ヶ丘団地内, 熊本市). http://4sq.com/dkGM4f [myuhe]
twitter (feed #2)
Androidアプリ完成! いろいろ問題あるけど、とりあえず完成。 [myuhe]
twitter (feed #2)
日記書いた-> フォト蔵へ写真をアップロードするAndroidアプリ「アンドロイ蔵」をpreAlphaリリースしました。 http://bit.ly/bu2Ib3 [myuhe]
twitter (feed #2)
リリース記事書きました。"フォト蔵へ写真をアップロードするAndroidアプリ「アンドロイ蔵」をpreAlphaリリースしました。" – http://j.mp/9Z5DPP #androidjp #android [myuhe]
twitter (feed #2)
はーすっきりした。これでしばらく本業に勤しもう。 [myuhe]
twitter (feed #2)
うーん。こ、これは。やっぱり別スレッドにしないと大きな画像は実用的ではないな。ま、今度書きかえよ。 [myuhe]
twitter (feed #2)
EVO,もうルートとられてる。はえーな、おい。 [myuhe]
twitter (feed #2)
同居人がことごとく僕のMayerを奪っていってる。別にいいんだけど、奪われるたびにメールが届き、Twitterでもつっこまれるとさすがにちょっと悲しい。 [myuhe]
twitter (feed #2)
ま、その時点でforusquareに完全にのせられてるな、とも思うけど。 [myuhe]
twitter (feed #2)
お、ESS R anythingで検索してきてる。少からず、需要はあるんだねー [myuhe]
twitter (feed #2)
今日のおやつ – チョコモナカジャンボ http://htn.to/6BZYFu [myuhe]
twitter (feed #2)
soul coughingは本当に良い。なんで解散しちゃったんだよぅ [myuhe]
twitter (feed #2)
日本勝ってた [myuhe]
delicious (feed #4)
twitter (feed #2)
scim-skkの調子がすこぶる悪い。起動しなかったりするので、uim-skkに乗り換え。いろいろと時代に逆行してるな。 [myuhe]
twitter (feed #2)
scim-skkが起動できないだの何だのでイライラしてたので、思いきってuim-skkに乗り換え。今のところ快適だけど、時代の流れには逆行してるよね。。。 [myuhe]
twitter (feed #2)
そのおかげで、これまで愛用していたscim-bridge.elが自動的に使えなくなったので、本家SKKをインストール。 [myuhe]
twitter (feed #2)
SandSとSKKの組み合わせなら、ATOKの次くらいに入力速度は速いと思う。 [myuhe]
twitter (feed #2)
DDSKKの機能を網羅しているSKKクローンがないのがつらいとこ。uim-skkも結構いいところまでいってる気はするんだけど。 [myuhe]
twitter (feed #2)
SKKのinfo読んでる。context-skkとか便利すぎるやろ。 [myuhe]
twitter (feed #2)
I’m at エブリワン 東部中前店 (日本). http://4sq.com/9fEtp9 [myuhe]
twitter (feed #2)
RT @kmartino: A Python library to work with Emacs org-mode http://members.optusnet.com.au/~charles57/GTD/orgnode.html [myuhe]
twitter (feed #2)
うーん。uim-skk素晴らしいな。もっと早く気づくべきだったす。 [myuhe]
twitter (feed #2)
これ聴いてる -> Stay with You by capsule (17:43:20) [myuhe]
twitter (feed #2)
コンスセルもありますよー > R RT @stillpedant: Lisp (Emacs Lisp しら知らないけど) はシンボルテーブルをいじれたりして楽しい. で, 聞くところによると R もそうらしい. 環境を直接触れるらしい. [myuhe]
twitter (feed #2)
鹿児島土産の紫いもパイがうまい。 [myuhe]
twitter (feed #2)
SKKいぢり、もう少しやってみよう。Emacsヒッキーが加速しそうだけど。 [myuhe]
twitter (feed #2)
RT @pokarim: @tyatsuta Pythonでfor文や内包表記の中でクロージャ作りたくなったときは、functools.partialで部分適用するのもおすすめです。 [myuhe]
twitter (feed #2)
これ聴いてる -> Fuck Shit up [Live] by The Jon Spencer Blues Explosion (03:30:00) [myuhe]
delicious (feed #4)
twitter (feed #2)
DDSKK素敵や。scim-skk使ってても、ほんの一握りの幸せしか享受できてなかったんだなー [myuhe]
twitter (feed #2)
install-info、知らなかった。dir手書きしてたよorz"install-info コマンドで MacPorts で入れた Gauche に付属する info を Emacs から読めるようにする – 刺身☆ブーメランのはてなダ – http://j.mp/aGz6Lb [myuhe]
delicious (feed #4)
twitter (feed #2)
これ聴いてる -> 赤い電車 by くるり (00:30:00) [myuhe]
lastfm (feed #3)
22 曲を聴きました。
googlereader (feed #6)
twitter (feed #2)
RT @khiker: すげえ。APEL 10.8 がマジで出てる。まだ更新してたのか!(ぉ [myuhe]
twitter (feed #2)
WinにもDDSKK入れよかな、とも思ったけど、めんどそう。とりあえずNTEmacsでいいかな。GNU Emacsがめっさ軽いとかだと別だけど、そうでもなさそうだし。。。 [myuhe]
twitter (feed #2)
仕事で街まで (@ 白川公園) http://4sq.com/b2ufos [myuhe]
googlereader (feed #6)
googlereader (feed #6)
twitter (feed #2)
そんなあなたにSKK!! RT @stillpedant: 「行って」が「お粉って」に, 「処理」が「初り」に変換される IME ってどうなの. 形態素解析がことごとくうまく行っていない印象. Anthy, もう君とはうまくやっていけないようだ…… [myuhe]
twitter (feed #2)
x60の使用がつらい季節となってきました [myuhe]
twitter (feed #2)
RT @m2ym: リポジトリ作った。開発はひとまずストップ http://github.com/m2ym/pyparser [myuhe]
twitter (feed #2)
無線LANつけっぱなしだと、熱くてかなわん。あーx201が欲しい。 [myuhe]
googlereader (feed #6)
twitter (feed #2)
RT @tumblife: NexusOneがトイレにダイブしました。 [myuhe]
twitter (feed #2)
日記書いた-> Java初心者が送るAndroidアプリ開発におすすめの書籍 http://bit.ly/a5h7Y4 [myuhe]
lastfm (feed #3)
8 曲を聴きました。
twitter (feed #2)
PCとアンプとつなぐために買ったケーブルがステレオでなくモノラルだったことに今ごろ気がついた。しょんな。。。 [myuhe]
twitter (feed #2)
音が変なのamarokのせいにしてた。ごめんよ。 [myuhe]
twitter (feed #2)
twitter (feed #2)
はてなモノリスができないですよね。。。RT @kzfm: バーコードのうえにシールを張るのはやめてほしい [myuhe]
twitter (feed #2)
こ、これは! RT @khiker: Emacs24 に package.el キター! http://permalink.gmane.org/gmane.emacs.devel/126050 [myuhe]
googlereader (feed #6)
twitter (feed #2)
あれ、gistってRのシンタックスきくのね! [myuhe]