CocoaEmacs おかしいところ

anything-config.el も無事なおり、Shiftのバグなおして日本語入力も快適になり、あとはまぁだいたいいい感じに使えるようになった(現状では) CocoaEmacs だけど一点だけおかしいところがある。

僕は結構 Emacs の customize 機能をヘビーユーズしてて(コーディングしてて気に入らない色設定とか出てきたらその場ですぐ customize-face する)これで色設定はほぼ調整してるのだけど、customize するのをすべての Emacs で同じものを使うのは微妙なので、

(setq custom-file "~/.emacs.d/conf/cocoa-emacs-99customize.el")

のようにして、 customize の保存先を Emacs 毎に変えている。

のだけどこれが、init-loader のフェーズで (load custom-file) しても設定が適用されないという現象に悩まされている。

立ち上がったあとに手動で (load custom-file) するとロードされる。。なぞ。

しょうがないので、

(defun reload-custom-file ()
  (interactive)
  (load custom-file))

こんなの作っておいて起動後手動で実行している。不毛だけどまぁ Emacs たちあげっぱだからいいかなぁ。。

by typester / at 2009-12-24T17:58:00 / emacs / Comment

elispエラーった時の追い方

(setq debug-on-error t)

しておいて、eval-bufer。StackTrace 出るのでそれを見る。

Emacs 23 にしたら anything-config.el が Invalid depth in char-table とかいって死ぬようになったけど原因わからなくてこまってたけどこれやったら ~/.emacs.d/anything-c-adaptive-history のロードに失敗してるのがわかった。消したらなおりました。imakado++

by typester / at 2009-12-24T17:48:00 / emacs / Comment

CocoaEmacsその後

フルスクリーン化以外にもいじりたくなったのでそれぞれブランチを切った。

という感じになっています。 master はこれらの統合ブランチになってますので使ってる人いたら注意です。

使いながらちょいちょいいじっていて、昨日からの更新としては

  • フルスクリーン時に裏にノーマルなウィンドウが残ってしまっていたのを修正
  • 日本語入力時に Shift なんちゃらが IME をとおらずそのまま Emacs に渡されてしまっているのを修正

という感じになっております。

by typester / at 2009-12-18T13:03:00 / emacs · osx / Comment

CocoaEmacsのフォント設定

現状こんな感じ。以前書いたCarbonEmacsの設定と大して変わってない。unicode コードセットで表示される文字が増えていたのでそれに対応した程度。

(create-fontset-from-fontset-spec
 (concat
  "-*-fixed-medium-r-normal--12-*-*-*-*-*-fontset-tobi"
  ",ascii:-apple-codingfonttobi-medium-r-normal--16-120-72-72-m-120-*-*"
  ",japanese-jisx0208:-apple-osaka-*"
  ",katakana-jisx0201:-apple-osaka-*"
  ",unicode:-apple-osaka-*"
  ",chinese-big5-1:-apple-apple ligothic medium-*"
  ))

(set-default-font "fontset-tobi")

ascii 用につかってる CodingFontTobi は proggyfonts.com から。

もちろんビットマップ表示にするため

$ defaults write org.gnu.Emacs AppleAntiAliasingThreshold 16

としている。

(setq mac-allow-anti-aliasing nil)

は Snow Leopard では効かないみたいだ。

by typester / at 2009-12-17T23:50:00 / emacs · osx / Comment

フルスクリーン Cocoa Emacs

emacs23 が正式にリリースされ、ちまたではウィンドウシステムが Cocoa になったぞ、とか 64bit 対応だぞ、とか multitty だぞ、と盛り上がっていますが、 個人的にほとんど興味のないまま今日まできました。というのも CocoaEmacs はフルスクリーンにできないという僕にとっては致命的な問題があったからです。

というのも最近は Emacs をフルスクリーンにし縦二分割で使ういわゆる imakado スタイルを実践しているため、それができない CocoaEmacs は眼中になかったのでした。

そんなわけでずっと CarbonEmacs を使ってきたのですが、 Snow Leopard に移行したのを機に CocoaEmacs に移行し、さらについでにフルスクリーン化できるようにしてみています。 github でやってます。

typester's emacs at master - GitHub

現状でも若干不具合がありますが、使える段階にはなっていると思います。

ビルドは

$ git clone git://github.com/typester/emacs.git
$ cd emacs
$ ./configure --with-ns
$ make bootstrap
$ make install

こんな感じにすると、nextstep ディレクトリ以下に Emacs.app ができます。フルスクリーンにするには

M-x ns-toggle-fullscreen

でいけます。キー割り当てておくと便利です。

対応環境は定かではありませんが、OS X 10.4 と 10.6 で動作確認しております。

また 10.6 の場合のみ、フルスクリーン時に隠れているメニューバーや Dock 領域にマウスカーソルを移動させると自動的に表示されるようになっています。 CarbonEmacs と違い Dock も自動で表示されるので個人的に非常に便利です。10.6 からの新 API のため、10.5 以前ではフルスクリーン時にメニューバー、Dock は強制オフになります。

既知の不具合として外部ウィンドウでフルスクリーン化して戻そうとすると落ちるというのが報告されており調査中です。 それ以外は便利に使用できています。この文章もフルスクリーン CocoaEmacs で書いています ;)

またこのハックをしたことで elisp から C や Objective-C のコードを呼ぶ方法がわかったのでいろいろ夢がひろがりんぐというところです。

by typester / at 2009-12-17T20:27:00 / emacs · osx / Comment

A simple chat server in AnyEvent

Node.js でつくってるやつ をみて同じくらいで書けそうだなと思ったので試しに AnyEvent で書き直してみた。

#!/usr/bin/perl

use strict;
use warnings;

use AnyEvent::Socket;
use AnyEvent::Handle;

my @clients;

tcp_server undef, 7000, sub {
    my ($fh) = @_ or die $!;
    my $h = AnyEvent::Handle->new( fh => $fh );

    my $leave = sub {
        my $client = delete $clients[ fileno($fh) ];
        for my $c (grep { defined } @clients) {
            $c->{handle}->push_write("$client->{name} has left.\n");
        }
    };

    $h->on_read(sub {
        shift->push_read( line => sub {
            my ($h, $line) = @_;

            my $client = $clients[ fileno($fh) ];

            unless (defined $client->{name}) {
                if ($line =~ /(\S+)/) {
                    $client->{name} = $1;
                    $h->push_write("===========\n");

                    for my $client (grep { defined } @clients) {
                        next if $client->{handle} eq $h;
                        $client->{handle}
                            ->push_write( "$client->{name} has joined.\n" );
                    }
                }
                return;
            }

            my ($command) = $line =~ m!^/(.+)!;
            if ($command) {
                if ($command eq 'users') {
                    $h->push_write("- $_->{name}\n") for grep { defined } @clients;
                }
                elsif ($command eq 'quit') {
                    $leave->();
                }
                return;
            }

            for my $c (grep { defined } @clients) {
                next if $c->{handle} eq $h;
                $c->{handle}->push_write( "$client->{name}: $line\n" );
            }
        });
    });

    $h->on_error(sub {
        my ($h, $fatal, $msg) = @_;
        $leave->();
        $h->destroy;
    });

    $clients[ fileno($fh) ] = {
        name   => undef,
        handle => $h,
    };

    $h->push_write("Welcome, enter your username:\n");
};

AE::cv->wait;

行数的にはほぼ同じくらい。

追記@2009-12-08T10:36:37+09:00: left なメッセージがおかしかったので直した。

by typester / at 2009-12-07T20:38:00 / perl · anyevent / Comment

PhotoShare にアップロードするだけのアプリ

PhotoShare は写真共有を軸にした SNS のようなサイトで結構好きなのですが。写真をアップロードしたいだけという状況で写真をアップロードしようと公式アプリを立ち上げると自分宛のコメントが来てないかとか、友達の写真が更新されてないかとかチェックするのですぐにアップロード画面にいけずイライラしたりします。

そんなわけでシンプルに PhotoShare にアップロードするだけなアプリを作りました。

PS up: simple, fast uploader for PhotoShare

先日のたこthon で適当に書き上げたアプリなので本当にアップロードする以外の機能がありませんが、使いながら欲しい物を加えていこうと思ってます。使い方見つつインタフェースも。

by typester / at 2009-12-06T14:10:00 / iphone / Comment

3GS 購入

アプリ開発で 3GS を借りたのが最後、もうどうしてもあの速さがうらやましくなってしまって結局買ってしまった。

今まで使用していた 3G の分割のこり10ヶ月分くらいは次の請求で一括で払うことに。そのまま分割したままでもよかったが割引きかなくなるから一括で払っても変わらないからそれなら払っちゃっておいた方が良いかなーと。なんかよくわからないけどホワイトWとかなんちゃらオプションとか加入させられたのでそれはわすれないうちにオフにした。

感想としてはいままで iPhone 使ってて一番不満だったメモリ足りなすぎて重いなーって言う感じがまったくしなくなってとても快適。これが本来イメージされてた iPhone かーという感じ。 3G ユーザーはみんな乗り換えたら感動すると思う。

でも液晶の色合いがなんか 3G と違って白っぽいのはきになるなー。液晶は前の方が好み。

本体の方の色は 3G が白つかってたので黒にしたが、白の方がよかったなーと若干後悔中。iPhone の黒はなんか下品な感じがする。まぁカバーつけるから関係ないんだけど。

by typester / at 2009-12-06T13:57:00 / life / Comment

無線APによって自動でhostsを変える方法

OSX の LaunchAgents には特定のパスを監視して更新があったらプログラムを起動すると言うことが出来ます。例えば以下のような設定を書いてみると:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
          "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>org.unknownplace.wifi_switch</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/zsh</string>
      <string>-c</string>
      <string>exec perl /Users/typester/dev/scratch/wifi_switch/switch.pl</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/dev/null</string><!-- <string>/tmp/error</string> -->
    <key>StandardOutPath</key>
    <string>/dev/null</string>
    <key>WatchPaths</key>
    <array>
      <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
    </array>
  </dict>
</plist>

/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist を監視しそれが更新されたら /Users/typester/dev/scratch/wifi_switch/switch.pl を実行する。と言うことが実現できます。

この監視先のファイルは OSX の無線ネットワーク設定なので、これが更新されると言うことは無線通信の状態が変わったときと言うことを意味します。

これを有効にするにはこのファイルを適当な名前 hoge.plist/System/Library/LaunchDaemons/ 保存すれば次回起動から有効になります。すぐに有効にしたい場合は、

sudo launchctl load /System/Library/LaunchDaemons/hoge.plist

などとすればOKです。詳しくは launchctl や LaunchAgent/LaunchDaemon のドキュメントを参照のこと。システムレベルの LaunchDaemon を使用しているのは /etc/hosts を書き換えるのに root 権限が必要だからです。

あとはここで起動されるスクリプト中でからAPの情報を取得しそれをもとに hosts を書き換えればいいわけです。APの情報は

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I

と言うコマンドで取得可能なのでそれをパースすればオッケーです。

以下に僕が実際に使用しているスクリプトを貼っておきます。

http://gist.github.com/247950

このスクリプトと同じところに、default.mt特定のAPのSSID名.mt と言うファイルで hosts を書いておくと、通常は default.mt/etc/hosts に書き出され、SSIDにマッチするファイルがある場合には SSID名.mt/etc/hosts に書き出されるという感じです。

AP によって hosts を変えたいという状況がそんなにあるとは思いませんが、ネットワークの状態によっていろいろ設定を変えると言う目的では便利で使えますので覚えておいて損はないでしょう。

by typester / at 2009-12-03T16:00:00 / osx / Comment

CookPad の iPhone 用 API

こんな感じかな。

typester's cookpad-api-perl at master - GitHub

api_key ないと動かないからあれだけど。

by typester / at 2009-11-26T23:40:00 / web · cookpad · iphone / Comment

6 7 8 9 10 11 12 13 14 15

(Page 10 of 203)