2011 12/15
Resea 0.01の仕様とか機能とか
誰得OSフレームワークのReseaの途中経過に「いいね!」と言ってくれる方がいたり、
はてなスターをつけてくれる方がいて、とても嬉しい今日この頃です。
今週の土日で大体完成させるResea 0.01の仕様とか機能とかを記録に残しておきたいのでここに書いておきます。
2011 11/08
鬼軍曹.nano.patchを作ってみた
Emacsには鬼軍曹.elとかいうカーソルキーなどを無効化するものがあるらしいです。
「Ctrl+ほにゃらら」で出来るので、普通のEmacs使いはカーソルキーなんてものは使ってないらしい(?)。
話は変わりますが、nanoへの無知を@MatsumuraKSに晒しながらTwitterで会話をしてると、
@mafice7 鬼軍曹.nanoをつくろう!!!!!!!!!!!!!!!!!!!!!!
2011-11-08 21:28:17 via TweetDeck to @mafice7
と言われたので、nanoへの無知の反省と謝罪の意を込めて、
nanoのソースコードを読み、改変することにしました。
何をやったか
キーバインドのでやってみようと思ったら、CtrlキーかAltキーを組み合わせるか、
ファンクションキーしかできないっぽいので、ソースコードをいじって実現しました。
さらっと読んでいくと、get_shortcut関数内でなにかキー入力をstderrに出力している部分が見つかったので、
これをログファイルに出力させてtailコマンドで観察して、鬼軍曹.el的なものを作りました。
ダウンロードとかビルドとか
パッチファイルはここです。
https://gist.github.com/1347806
ダウンロードしたら、nanoのリポジトリからソースコードをとってきて、srcにコピーして、
$ patch < パッチのファイル名
を実行してmakeしてください。
機能
カーソルキーやenter,tab,backspace,delキーを押すと、無効でなく、ヘルプを表示してくれます。
「あ、やべえしくった。どうだったっけ?」とヘルプを見るまでの時間を減少し、作業の効率化を図ります。
それと最後に
誰得ですかこれは。
2011 11/05
インラインアセンブリでIntel記法を使う
あの忌まわしいAT&T記法を使わせられるインラインアセンブリでIntel記法使う方法です。
動作確認はi686-apple-darwin11-llvm-gcc-4.2でしました。
コード
#define inline_asm(code) __asm__ __volatile__(".intel_syntax noprefix;"code";.att_syntax") int main (void){ inline_asm("mov eax, 17"); inline_asm("pop rbp"); inline_asm("ret"); }
実行結果
説明とか注意点とか
inline_asmはマクロで定義しています。
マクロは
.intel_syntax noprefix アセンブリコード .att_syntax
という風に展開して、__asm____volatile__を呼ぶようになっています。内容は、
「.intel_syntax noprefix」で以下はIntel記法であると宣言して、その後Intel記法でのアセンブリコードがあり、
「.att_syntax」で後のコードはAT&T記法であると宣言しています。
ただ、拡張インラインアセンブリ構文がうまく使えません...構文エラーが出てしまうようです。
追記
コメントで教えてもらったのですが、masmオプションでわざわざこんな事しなくても
Intel記法が使えるようです。
下のサンプルコードは
int main (void){ __asm__ __volatile__("mov eax, 17"); __asm__ __volatile__("pop rbp"); __asm__ __volatile__("ret"); }
となり、masmオプションをつけてコンパイルします。
$ gcc -masm=intel test.c
ただ、Mac OS(Xcode付属?)のgccはmasmオプションは存在しますが、manに書いているとおり、
-masm=dialect
Output asm instructions using selected dialect. Supported choices are
intel or att (the default one). Darwin does not support intel.
intelが指定できません。
Opera WidgetなTwitterクライアントづくりは無理かもしれない
数日間没頭してわかったこと
- OAuth難しい
- User Streams対応は無理っぽい
- Operaが$.getや$.postを使わせてくれない(設定ファイルに不備?)
- twicliみたいにブラウザベースのほうが楽なんじゃ...


