主人公が一人で住んでいるゴッドビルというゲームを発見すると、
自分が怠けていないときは蹴らなければなりません。 しかし、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に招待してください