header

2013年7月31日水曜日

flymake coffee modeを設定した


最近coffeescriptを興味本位でいじってました。
js2-modeを利用していたので、シンタックスチェックがないと落ち着かなかったので
flymake-coffeeをいれました。
Emacs側で必要なのはflymake-easyとflymake-coffeeです。
package-installでインストールしました。
またcoffeelintも利用するので、

sudo npm install -g coffeelint


しました。

Emacsの設定

(require 'flymake-easy)
(require 'flymake-coffee)
;; To create configuration file, execute below comamnd
;; $ coffeelint --makeconfig > config.json
(setq flymake-coffee-coffeelint-configuration-file
(expand-file-name "~/.coffeelint-config.json"))


絶対パス指定しないといけなくて、しばらく悩みました。
コンフィグファイルは別に指定しなくてもいいのですが,
文字の長さでエラーを出されるのがうざいので

coffeelint --makeconfig > config.json


でconfig fileを書きだしたあと、

"max_line_length": {
"value": 80,
"level": "ignore"
}


の部分をerror->ignoreに変更しました。


2013年7月15日月曜日

TorontoのSugar Beachに行きました


TorontoのSugar Beachに行きました。
部屋探しをしてる時に趣味がドラゴンカヌー(名前間違ってるかも)という人に
あって、どこでやってるの?って聞いたら近くの湖というのでいってみました。
なんというか、気分転換。。。(後で調べたら湖の名前はLake Ontarioでした)


看板の説明書き:

Canada's Sugar Beach:
part of our new blue edge.
Welcom to canada's Sugar Beach.
Opened in 2012 as part of the revitalization of
Toronto's waterfront, Canada's Sugar Beach
transformed a derelict parking lot into an
exciting waterside destination. The park's name
celebrates the important industrial heritage of
the area while the playful public space acts as an
inviting gateway to the new East Bayfront community.


適当な訳:

Canada's Sugar Beachは2012にToronto's waterfront再生化の一部として
オープンしました。このビーチは使ってない駐車場を利用して
watersideの観光地※に変わりました。
(destinationって書いてあるけど目的地と訳すのは変かなと)
この広場の名前は重要なこの地域の歴史的産業を祝してつけられました。
(そういえば近くになんかプラントがあった)
更にこの公共施設はthe new East Bayfront communityを招く入り口としての
役割もあります。


砂はこんな感じ、人工物な感じがする。



ビーチ
小さいスーパーくらいの大きさ,水着のおねーさんもいた。



近くを歩いてたら湖を船で観光するツアーへの入り口が、
近くで地面にお絵書きしてるひとがいた。



Dundas streetから歩くと結構距離があって運動になった。


2013年7月14日日曜日

Emacs ERCでIRCを試してみた


IRC がどんなもんだか試してみたくてEmacs用IRC client ERCを導入しました。
(たぶんEmacsのデフォルトで入ってるっぽい)

設定

emacsWikiかどっかにあったやつをちょっと変えて設定。full-nameとnicknameは変えてるので使う人は適当に変えてください。
erc-nick変数はlistを設定した場合、listの最初の文字列を使用するがそのnicknameがすでに使われていた場合、次のlistを使う。下の設定はnicknameにA~Zを割り振ったlistにして変数に代入している。なのでnicknameにsuzukiって入れて他にsuzukiさんがいたらあなたはsuzukiAになるってことです。

(require 'erc)
(eval-when-compile (require 'cl))
(defun start-irc ()
"Connect to IRC."
(interactive)
(lexical-let* ((nickname "your nickname"))
(setq erc-autojoin-channels-alist '(("freenode.net"
"#emacs" "#node.js" "#ruby-lang")
("oftc.net"
"#debian" "#awesome"))
erc-nick (append `(,nickname)
(loop for i from ?a upto ?z
for string = (char-to-string i)
if (string-match "[a-z]" string)
collect (concat nickname (capitalize string)))))
(erc-tls :server "irc.oftc.net" :port 6697
:full-name "you")
(erc :server "irc.freenode.net" :port 6667
:full-name "you")))

;; auto spell checker
(add-hook 'erc-mode-hook
'(lambda ()
(flyspell-mode-on)))
(global-set-key (kbd "C-c i") "start-irc")

スクリーンショット


使用感

最初にnickname上とは違う方法で一個だけnickname登録したけど、すでに使われていてGuestほげほげみたいな名前になって悲しかったけど、Emacsチャンネル見てたらなかなかおもしろそう。多分自分が好きな話題にしぼってるからかも、、


2013年7月10日水曜日

JavaScriptの文字列内でzencodingを展開するEmacsの関数作りました


こんにちはカナダのトロントに住んでいます。7月は以外と暑いです。結構蒸し蒸ししています。あと急に雨が降ることがあり結構日本の夏と似てると思います。。。
さて本題の件ですが、Backbone.jsの本を読んでいてコード写経をしていたのですがふと文字列内でzencoding展開できたら楽かなーと思い実装してみました。

コード

(eval-when-compile (require 'cl))
(require 'flyspell)

(defun my/zencoding-expand ()
"Execute zencoding if current point is in string and
you can execute from minibuffer if you push C-u before this command"
(interactive)
(lexical-let*
((quote "['\"]")
(statement "")
(correct-condition-p
(lambda ()
(and (flyspell-generic-progmode-verify)
(case (face-at-point)
(font-lock-string-face t)
(font-lock-comment-face nil)
(t nil)))))
(move-start-point
(lambda ()
(if (funcall correct-condition-p)
(while (and (funcall correct-condition-p)
(search-backward-regexp quote))))
(forward-char 1)))
(move-end-point
(lambda ()
(while (flyspell-generic-progmode-verify)
(forward-char 1))
(backward-char 2)))
(set-statement
(lambda ()
(funcall move-start-point)
(set-mark-command nil)
(funcall move-end-point)
(kill-region (region-beginning) (region-end))
(setq statement (car kill-ring))))
(do-zencoding-from-minibuffer
(lambda ()
(setq statement (read-from-minibuffer "zencoding: "))
(insert (zencoding-transform (car (zencoding-expr statement))))))
(flyspell-state (if flyspell-mode t nil)))
(when (and (funcall correct-condition-p)
(case major-mode
(js2-mode t)
(javascript-mode t)
(t nil)))
(if current-prefix-arg
(funcall do-zencoding-from-minibuffer)
(when flyspell-state (turn-off-flyspell))
(funcall move-start-point)
(set-mark-command nil)
(funcall move-end-point)
(funcall set-statement)
(insert (zencoding-transform (car (zencoding-expr statement))))
(when flyspell-state (turn-on-flyspell))))))


yasnippetと同じキーに登録する場合は以下を追加してください。

(defadvice yas-expand-from-trigger-key
(around ad-add-zencoding-expand activate)
(if (flyspell-generic-progmode-verify)
(my/zencoding-expand)
ad-do-it))


動作としては"",''などの文字列内ではzencodingの展開そうでなければ普通のyasnippetの展開となります。あとC-uを押したあとに実行するとminibufferに展開前の文字列を入力&展開
できます。

おわりに

"",''などの文字列の中かを判別するのにflyspell-generic-progmode-verifyを使っていますがよく考えたらface-at-pointで十分判別できそうとか思ったり、、、でもユーザーが色変えてたら意味ないとか、そもそもflyspell-generic-progmode-verifyの実装をみてないのでこれも大丈夫かわからないのですが、一応動いています。。。
まぁここまでやらなくても、

(defun insert-zencoding-from-minibuffer ()
(interactive)
(insert (zencoding-transform
(car (zencoding-expr (read-from-minibuffer "zencoding: "))))))


みたいに書いて(試してません)別のキーバインドに登録してもいいかもしれません。
ではよかったら使ってみてください。
gistに登録してので


git clone https://gist.github.com/5958399.git


でもクローンできます。


Popular Posts

Blogger templates

Blogger news