自分の手でEmacsを拡張する

Habraシチズンになり、UFOを観察したい私の同僚によるEmacsの巧妙な使用に関する記事。 d.klykvin@gmail.comに招待してください



主人公が一人で住んでいるゴッドビルというゲームを発見すると、

自分が怠けていないときは蹴らなければなりません。 しかし、n番目の後

数週間、ブラウザを開いて見るのにうんざりしています

私のヒーローは幸福だったので、emacsの拡張機能を書くことにしました。

それ自体がネットワークに登り、私を面白い表示します

情報。

確かに、この記事はemacsの達人にとっては興味深いものではありませんが、最初のステップについては

役に立つかもしれません



私たちが持っています:

-GNU Emacs

-サーバー側xml

-elispの基本的な知識

-グーグル

-他のモジュールのソース



ガットインサイド





まず、私たちがすでに持っているツールを確認する必要があります

あります。 まず、サーバーからファイルを取得する必要があり、次に、

それをパースします。

/ usr / share / emacs /のクイック検索(どこで入手したかを調べる

emacsはMx v load-pathを使用してファイルをロードします)

リンクの読み込みは特定のURLによって行われ、解析はxmlによって行われるため、



 MXロードライブラリのURL
 MXロードライブラリxml




これで、コードを保存するバッファーを作成できます(I

〜/ .emacs.d / godville.elに入れてください)



機能を探しています





私は通常3つの方法で関数を探します-Ch a(apropos)leafing through

ソースコードまたはCh f関数名を作成します。

この場合、「grep」コマンドは

defun url.el "このファイルにあるすべての機能を提供してくれました

(URLパッケージは1つのファイルに限定されないことを思い出してください-私だけ

彼が必要だった)



emacsの大きな利点は、それがLispマシンであることです。

エディターの場所でコードを実行できます。 grepでスリップ

url-retrieveに関する情報-すぐに参照してください。

ファイルの先頭に書き込みます



 (url-retrieve "http://ya.ru")


Cx Ceを使用して式を計算します。 おっと:



間違った引数の数(URLコールバックとオプションのcbargs)




Ch f url-retrieveから判断すると、コールバックも必要です。 なぜなら

pop-to-bufferは機能せず、別の機能は怠inessを作ることです

ラムダ式を貼り付ける



 (url-retrieve "http://ya.ru"(lambda(x)(pop-to-buffer(current-buffer)))))


おめでとうございます-最も可能性が高いのは、ソースコードya.ruを開いたことです。

半分終わった。 開かない場合は、エラーと

隣人ロドヴォドフとの問題は何ですか



コードを作ります





Emacsはライブラリを実行するために必要なものを知る必要があり、

一般的に、私たちのライブラリが提供するので、最初の3行

当たり前になります:



 ( 'urlが必要)
 ( 'xmlが必要)
 (「ゴッドビル」を提供)




誰かがロードライブラリのゴッドビルをするとき、最初にemacsが

urlとxmlが使用可能であることを確認してください。



次のステップは、XMLを取得する関数を作成することです

サーバー。 urlはhttp://godville.net/gods/api/username.xmlのようになります

次に、godという名前の変数を追加する必要があります。 開発中

setqを使用すると簡単です。

(setq godville-username "Godville")



そして、実際には、関数自体:



 (defun godville-get-info()
     「サーバーに接続し、XMLを取得し、データを含むリストを作成します」

     (インタラクティブ)
     ;; ヒーローデータでXMLを取得し、パーサーに移動します
     (if(godville-usernameではない)
    	 (setq godville-username(read-from-minibuffer "Enter user name:"))))
	 (godville-parse-xml(url-retrieve
		        (concat "http://godville.net/gods/api/" godville-username ".xml")
		        (ラムダ(x)()
		        )))
 )



実際、関数の作成は他のほとんどの場合と同様に発生します

言語:



 (defun関数名(パラメーター)
 ;; 関数本体
 )


慣れる必要があるのは、必要がないことだけです

多くの中間変数を開始-1つの関数の結果

より高いものに送信されます そしてもう一つ-常に

関数にコメントを残します。 いつも 。 時間を節約します

あなたと将来コードを見る人に。



私たちの場合(if)最初に変数の存在をチェックします

godville-username。設定されていない場合は、入力するように求められます

ミニバッファ。 名前を入力すると、リストが計算されます

(godville-parse-xml(url-retrieve ...))コールバックから

url-retrieveは役に立たない(より正確には、404処理をそこに置くが、

今では不要です)空のラムダ式をそこに挿入し、

url-retrieveの結果をgodville-parse-xml関数に渡します



url-retrieveは、データを含む新しいバッファを返します

受け取りました。 したがって、godville-parse-xmlには少なくとも1つがあります

parameterは、XMLを含むバッファーの名前です。



 (defun godville-parse-xml(バッファー)
 ...
 )




xml.elをgrepで調べると、xml-parse-fileとxml-parse-regionが見つかりました。 のために

xml-parse-fileバッファを取得、保存、

解析し、ファイルを削除します...適切ではありません。 使用します

xml-parse-region。 これで、関数は次のようになります。



 (defun godville-parse-xml(バッファー)
     「xmlを解析して一時バッファを強制終了」
     (バッファーへの切り替えバッファー)
     (setq tmp-list(xml-parse-region(point-min)(point-max)))
     (キルバッファバッファ))



Ch fを使用してドキュメントを読むと、この機能がすぐにわかるでしょう。

2つのコペックと同じくらい簡単:バッファに切り替えられ、解析されたxml、詰められた

変数になり、すでに不要なバッファが釘付けになりました。



原則として、urlおよびxmlライブラリの作業はこれで終わります-

受信し、xmlファイルから通常のリストを作成し、残りは

テクニック-リストを調べて、必要なデータを美しく描画し、

不要なものは捨てて、コードを一般の裁判所に置きます。



カスタマイズ





この特定のタスクの退屈なコードを省略しても、チャンスを逃さないでください。

設定。 みなさんはMxカスタマイズまたはMxを使用している必要があります

カスタマイズグループ。これは、私たちが悪化することを意味します。



このために、関数defgroup、defcustom、deffaceなどが使用されます。



 (defgroup godville nil "Godville status viewer"

     :グループ「アプリケーション」


(馴染みのない関数ごとにCh fを実行することを忘れないでください-emacs lispをマスターすると、はるかに速くなります。

defgroupでnilがどこから来たかを確認してください)



 (defcustom godville-user nil
     「神の名前」
     :タイプ 'string
     :グループ「ゴッドビル」)

 (defcustom godville-timer 1800
     「更新間隔」

     :タイプ 'integer
     :グループ「ゴッドビル」)




ファイナル





実際、このように、ヘッダーにrequire / provideを記入し、コードを追加します

小さなステップで、エディターを小さく快適なものに変えることができます

必要のないオペレーティングシステム

外出する。 主なことは、Cx Ceの実行、エラーの読み取り、

それらを修正します。



Habraシチズンになり、UFOを観察したい私の同僚によるEmacsの巧妙な使用に関する記事。 d.klykvin@gmail.comに招待してください



All Articles