Download - Fukuoka Emacs #X02

Transcript
Page 1: Fukuoka Emacs #X02

Emacs Now

Kenichirou Oyama (k1LoW)

Page 2: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 2

• type:–Programmer (PHPer)

• Emacs Level:–Enjoy Emacs Lisp

• Emacs Lisp:– cake.el– drill-instructor.el(鬼軍曹.el)– and more.

• membership:– Fusic Co.,Ltd >> http://fusic.co.jp

– codecheck.in >> http://trac.codecheck.inand 101000code / 3rdSTONE

(self-introduce "k1LoW")

Page 3: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 3

What is Emacs?

Page 4: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 4

What is Emacs?

• たぶんテキストエディタ• Emacs Lispと呼ばれるプログラミング言語で自由度の高すぎる拡張が可能–テキストエディタの範疇を軽く超えている

Page 5: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 5

Emacsの歴史1970 MIT AI研で誕生(略)1984 GNU Emacs project start.2007 anything.el first release.2008 (tokyo-emacs #x01)2009 (fukuoka-emacs #x02) in テキストエディタ勉強会←今ココ

2009 Emacserが増える。Emacs Lisperが増える。

Page 6: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 6

Why Emacs?

Page 7: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 7

Why Emacs?• 現在よく使われているテキストエ

ディタとしてはたぶん古いほう• 別に他に選択肢はたくさんある

–FusicのPHPの開発で言えば• NetBeans• Peggy• VisualStudio• Vim• Emacs

Page 8: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 8

Emacsに対するかつてのイメージ

Page 9: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 9

Emacsに対するかつてのイメージ

• 黒白画面–ネットワークごしに使うもの

Page 10: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 10

Emacsに対するかつてのイメージ

• 黒白画面–ネットワークごしに使うもの

• マウスが使えない

Page 11: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 11

Emacsに対するかつてのイメージ

• 黒白画面–ネットワークごしに使うもの

• マウスが使えない• キーバインド(ショートカット)が変態

Page 12: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 12

Emacsに対するかつてのイメージ

• 黒白画面–ネットワークごしに使うもの

• マウスが使えない• キーバインド(ショートカット)が変態• 古い

Page 13: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 13

Emacsに対するかつてのイメージ

• 黒白画面–ネットワークごしに使うもの

• マウスが使えない• キーバインド(ショートカット)が変態• 古い• めちゃくちゃすごい人が使っている

Page 14: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 14

Emacsに対するかつてのイメージ

• 黒白画面–ネットワークごしに使うもの

• マウスが使えない• キーバインド(ショートカット)が変態• 古い• めちゃくちゃすごい人が使っている• めちゃくちゃすごい人しか使えない

Page 15: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 15

Emacsに対する今のイメージ

Page 16: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 16

Emacsに対する今のイメージ

• シンタックスハイライト可能–ネットワークごしでもカラー

Page 17: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 17

Emacsに対する今のイメージ

• シンタックスハイライト可能–ネットワークごしでもカラー

• マウスを使いたくなくなる

Page 18: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 18

Emacsに対する今のイメージ

• シンタックスハイライト可能–ネットワークごしでもカラー

• マウスを使いたくなくなる• キーバインド(ショートカット)は慣れ

Page 19: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 19

Emacsに対する今のイメージ

• シンタックスハイライト可能–ネットワークごしでもカラー

• マウスを使いたくなくなる• キーバインド(ショートカット)は慣れ• 超拡張可能。超可能。

Page 20: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 20

Emacsに対する今のイメージ

• シンタックスハイライト可能–ネットワークごしでもカラー

• マウスを使いたくなくなる• キーバインド(ショートカット)は慣れ• 超拡張可能。超可能。• 使っているとできる気になる

Page 21: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 21

Emacsに対する今のイメージ

• シンタックスハイライト可能–ネットワークごしでもカラー

• マウスを使いたくなくなる• キーバインド(ショートカット)は慣れ• 超拡張可能。超可能。• 使っているとできる気になる• すごくなくても使える

Page 22: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 22

Emacs VS 一般的なエディタ/IDEで機能比較してみた

Page 23: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 23

機能比較Emacs Popular Text

EditorPopular IDE

インストール インストーラですぐ

インストーラですぐ

インストーラですぐ

初期設定 不必要(一部必要) 不必要 不必要

拡張 Emacs Lispで超可能

あまりできない プラグイン

マウス 使用可能 ないと使えない ないと使えない

シンタックスハイライト

可能 可能 可能

ネットワークごしの使用

可能 不可能 不可能

Page 24: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 24

機能比較Emacs Popular Text

EditorPopular IDE

メール 可能 不可能 不可能

Web 可能 不可能 不可能

RSS購読 可能 不可能 不可能

2chブラウズ 可能 不可能 不可能

Twitter 可能 不可能 不可能

スケジュール管理

可能 不可能 不可能

Page 25: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 25

機能比較Emacs Popular Text

EditorPopular IDE

IRC 可能 不可能 不可能

Skypeチャット

可能 不可能 不可能

ブログ投稿 可能 不可能 不可能

ゲーム 可能 不可能 不可能

プログラムインタプリタ

可能 不可能 不可能

Wiki編集 可能 不可能 不可能

Page 26: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 26

Emacsはなんかおかしい(いい意味で)感想:

Page 27: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 27

Emacs Now

Page 28: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 28

Emacs Now※注意:以下はかなり主観的内容です

• Emacsの機能拡張は基本的にEmacsLispになるので、Emacs LispのトレンドがEmacsをとりまく現状になる?–EmacsWikiのRSSを日々購読–話題になるEmacs Lispをチェック

Page 29: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 29

Emacs Now• 個々のPCの処理能力の向上によって、そ

のリソースを有効に使ったEmacs Lispが登場している。–"情報の集約"がキーワード

•候補選択•補完/自動挿入•自動生成/自動チェック

–Emacsの特殊なキーバインド(Ctrl+a、Ctrl+x sなど※)の解消を目指すものも多い

–ユーザの思考を止めないようにEmacsで処理を行う

※以下"C-x"、"C-x s"と書く

Page 30: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 30

anything.el

•候補選択フレームワーク–Emacs版QuickSilver–Emacs版Google Suggest

•何でも候補選択→さまざまな操作が可能

•詳しくはid:IMAKADOで

Page 31: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 31

auto-complete.el• 単語補完フレームワーク

– IDEなどでよくあるポップアップ型単語の候補選択• m2ym謹製• フレームワークなので、補完候補部分の実装(何を補完

候補にするか)を独自に作成することが可能• さらに複数の補完候補の集約が可能

(de|defundefvadefvardefadvicedefine-key

defun

Page 32: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 32

auto-complete.el demo

Page 33: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 33

key-chord.el• キーバインド拡張

– "キー同時押し"や"キー連続押し"をキーバインドとして使用することができる• "C-a"や"C-x a"だけではなく"aa"や ”hj同時押し”

も使える– 内部的には2つキーの押す時間を測定し、ある閾値以

下だったら同時押しや連続押しと判定する• キーを押すたびに処理が走るが、特に体感速度は

変わらない

Page 34: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 34

key-chord.el demo

Page 35: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 35

smartchr.el• キー入力拡張

–id:IMAKADO謹製–例えば"="キーを押したときに、"="キーの連続入力回数によって" = "," == "," === ","="とトグルで入力できるような設定が可能•ソースコードを書くときに楽

–元ネタ:smartchr.vim

Page 36: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 36

smartchr.el demo

Page 37: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 37

sequential-command.el• コマンド入力拡張

–id:rubikitch謹製–例えば"C-a"を押したときに、"C-a"の連続入

力回数によって"行頭へ移動","バッファの先頭に移動","元の場所に移動"とトグルでコマンド実行できるような設定が可能•楽

–つい今週にリリースアナウンス

Page 38: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 38

sequential-command.el demo

Page 39: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 39

for Emacs Lisp Beginner

Page 40: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 40

Emacs Lisp

•Emacsを拡張できるLisp言語•今回紹介した拡張は全てEmacsLispで書かれている

Page 41: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 41

例:smartchr.el(eval-when-compile (require 'cl))(defun smartchr (list-of-string)

(lexical-let ((los list-of-string)(last-word "")(count 0))

(lambda ()(interactive)(if (eq this-command real-last-command)

(incf count)(setq count 0))

(when (>= count (length los))(setq count 0))

(let ((word (nth count los)))(when (eq this-command real-last-command)

(delete-backward-char (length last-word)))(setq last-word word)(insert word)))))

Page 42: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 42

括弧だらけ。

Page 43: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 43

違う。そう考えてはいけない。

Page 44: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 44

括弧は空気。

Page 45: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 45

括弧は空気だ。by id:hayamiz from tokyo-emacs

Page 46: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 46

Emacs Lisp Sample

(message "hello world")

messageという関数を引数"hello world"で評価する。(メッセージバッファに"hello world"を表示)返り値は"hello world"。

Page 47: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 47

Emacs Lisp Sample

(message (concat "hello" "world"))

concatという関数を引数"hello"と"world"で評価する。 (文字列を連結)返り値は"hello world"。その返り値をmessageという関数に引数として渡して評価する。(メッセージバッファに"hello world"を表示)返り値は"hello world"。

Page 48: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 48

Emacs Lisp Sample

(defvar hoge "hello")

hogeという変数を定義。初期値は文字列"hello"。

(setq hoge "world")

hogeという変数に文字列"world"を設定。

Page 49: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 49

Emacs Lisp Sample

(defun myfunc()(interactive)(...))

myfuncという関数を定義。

Page 50: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 50

Emacs Lisp•関数を評価してその返り値をそのまま他の関数の引き数として使って・・・と書ける言語–少なくともPHPとはまったく違う言語仕様

–むしろJavaScript的(jQueryのメソッドチェーンなど)• 本当はもっと似ている言語があるのだけれども、

他はあまり触ったことがないので・・・

Page 51: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 51

Emacs Lisp• 覚えると直接開発環境の拡張につな

がる。• 再帰、無名関数などに強くなる。

–clパッケージを使えばクロージャもわかる。

• 残念ながらEmacsの設定を書く上でEmacs Lispはなかなか縁が切れない

• custamize-*系があるけどもdefcustomしていないEmacs Lispも多くある

Page 52: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 52

for Emacs Lisp Beginner• Emacs Lisp(Lisp)に触れたことのない人

が感覚としてつかむことは"括弧は空気"のみ–"S式"とか"シンボル"とか"リスト"とか難しい

ことの理解はあとからついてくる• Emacs LispはWeb上の日本語ドキュメン

トも充実している–Emacs Lisp プログラミング–GNU Emacs Lisp リファレンスマニュアル–上記2つを学ぶことで大抵のことはできるよ

うになる。

Page 53: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 53

for Emacs Lisp Beginner

•大抵のやりたいことを実現するためのライブラリはある。–主にEmacsWiki (CPAN並み?)–install-elisp.elとかauto-install.elで一発インストール

–anything.elやauto-complete.elのsourceをつくるのも面白い

Page 54: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 54

#[email protected]に参加しよう!

Page 55: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 55

#[email protected]

• id:IMAKADOの声かけでつい今週はじまったIRCチャンネル

• Emacs Lispの話ができたらおもしろい

• 既に猛者が参加中• 主に自分の質問先にしたい

Page 56: Fukuoka Emacs #X02

-uuu:---F1 fukuoka-emacs #x02 2009.2.21 All(1,0) (Emacs-Lisp ppt)--------- 56

Let's enjoy Emacs& Emacs Lisp!!


Top Related