Fukuoka Emacs #X02

Post on 14-Jun-2015

2776 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

(fukuoka-emacs #x02)

Transcript

Emacs Now

Kenichirou Oyama (k1LoW)

-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")

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

What is Emacs?

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

What is Emacs?

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

-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が増える。

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

Why Emacs?

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

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

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

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

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

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

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

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

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

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

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

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

• マウスが使えない

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Emacsに対する今のイメージ

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

Emacsに対する今のイメージ

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

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

Emacsに対する今のイメージ

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

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

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

Emacsに対する今のイメージ

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

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

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

Emacsに対する今のイメージ

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

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

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

Emacsに対する今のイメージ

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

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

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

Emacsに対する今のイメージ

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

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

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

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

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

機能比較Emacs Popular Text

EditorPopular IDE

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

インストーラですぐ

インストーラですぐ

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

拡張 Emacs Lispで超可能

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

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

シンタックスハイライト

可能 可能 可能

ネットワークごしの使用

可能 不可能 不可能

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

機能比較Emacs Popular Text

EditorPopular IDE

メール 可能 不可能 不可能

Web 可能 不可能 不可能

RSS購読 可能 不可能 不可能

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

Twitter 可能 不可能 不可能

スケジュール管理

可能 不可能 不可能

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

機能比較Emacs Popular Text

EditorPopular IDE

IRC 可能 不可能 不可能

Skypeチャット

可能 不可能 不可能

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

ゲーム 可能 不可能 不可能

プログラムインタプリタ

可能 不可能 不可能

Wiki編集 可能 不可能 不可能

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

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

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

Emacs Now

-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をチェック

-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"と書く

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

anything.el

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

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

•詳しくはid:IMAKADOで

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

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

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

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

(de|defundefvadefvardefadvicedefine-key

defun

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

auto-complete.el demo

-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つキーの押す時間を測定し、ある閾値以

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

変わらない

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

key-chord.el demo

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

smartchr.el• キー入力拡張

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

–元ネタ:smartchr.vim

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

smartchr.el demo

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

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

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

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

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

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

sequential-command.el demo

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

for Emacs Lisp Beginner

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

Emacs Lisp

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

-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)))))

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

括弧だらけ。

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

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

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

括弧は空気。

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

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

-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"。

-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"。

-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"を設定。

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

Emacs Lisp Sample

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

myfuncという関数を定義。

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

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

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

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

-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も多くある

-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つを学ぶことで大抵のことはできるよ

うになる。

-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をつくるのも面白い

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

#emacs-lisp-ja@irc.freenode.netに参加しよう!

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

#emacs-lisp-ja@irc.freenode.net

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

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

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

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

Let's enjoy Emacs& Emacs Lisp!!

top related