ラベル emacs の投稿を表示しています。 すべての投稿を表示
ラベル emacs の投稿を表示しています。 すべての投稿を表示

2026年5月28日木曜日

ぼくの中での emacs は死んでしまったのかもしれない

ぼくの中での emacs は死んでしまったのかもしれない

さらば emacs …

結論

  • emacs は完全に AI 関連で遅れを取っている
  • Copilot や OpenAI の拡張はあるが「そうじゃない」感がすごい
  • VSCode + copilot の使い勝手に勝てない

以下詳細に綴ります

emacs 拡張を使えば各種 AI と連携はできるができるだけで公式レベルには勝てないと判断した

emacs にも copilot.el などの拡張があるので emacs から各種 AI と連携することはできます

ただ連携できるだけでエージェントや MCP 連携 (最近は MCP もほぼ使わない) がほぼ無力な印象です
ただチャットに質問しているだけで自動で編集してくれたり作成してくれたりはしません

これを執筆しているときはほぼ emacs は使っていないので何ともですが自分が copilot.el を試した時期では少なくともエージェントのような機能はありませんでした
今であれば拡張も充実してエージェント機能も充実しているかもしれませんがそれでも VSCode + copilot のエージェント機能には及ばない気がします

公式が出しているエディタに付属している公式が出しているエージェントが公式の LLM を使うという当たり前の正解

基本 AI コーディングには LLM は必須です
OpenAI や Claude、Gemini などバックエンドに専用の LLM が必要です
もちろんローカルでも OK です

すべての LLM に言えることとしてすべての LLM は挙動が違うと思っています
OpenAI だとこう答えるが Gemini だとこう答えるといういわゆる「クセ」みたいなのがあると思っています

LLM に対して質問するのは基本的にエージェントです
そのエージェントが LLM の挙動を知っているか知っていないかは AI コーディングにおいて非常に重要な点かなと思っています

例えば VScode + copilot でローカル LLM を呼び出すとしましょう
するとどうでしょうか普通に使っている copilot とは全く挙動が違って全然思い通りのコーディングをしてくれなかったなんて経験はないでしょうか
自分はかつて試したことがあり全く期待通りじゃなかったことを実感しています
もちろんローカル LLM の選択やマシンのスペックが低かったなど考えられる要因は様々あります

つまりエージェントには適した LLM があり間違った組み合わせのエージェントと LLM では AI コーディングの精度に大きな差が生まれるのです

ここまで説明すればだいたいわかると思いますが同じ公式が作ったエディタ+エージェント+LLMの組み合わせのほうが確実に良い AI コーディングができるに決まっているのです

それなのに自力でエージェントを作ってサードパーティなりローカルの LLM を呼び出し AI コーディングしてもらうのは (決して間違ってはいませんが) DRY や KISS の法則的には反しているような気が自分はしています

与えられたものを素直に使うのが良いということです

独自の AI エージェントを作る場合は別

上記の件に関して独自の AI エージェントを作る場合は別かなと思います

エージェントは自作する必要がありますし LLM もどこか選定し API をコールする必要があります
そのエージェントに何をさせるかはわかりませんが自分だけの自分専用のエージェントであれば作りましょう

だたその場合も CLI で動作するエージェントはたくさんあるのでもし自分にあった既製品があるのであればそれを使うほうが精度としては良くなることがあるかもしれません (もちろん自作のほうが良い挙動になる可能性もあります)

エージェントが賢くなりすぎて最近は MCP すらいらない気がする

かつてはエディタやエージェントから MCP にアクセスする必要がありプロセスを立ち上げていました
MCP は Ubuntu などの Linux 環境では容易に立ち上げられるし管理も用意だったのでその点では emacs との親和性はありました

しかし最近のエージェントではデフォルトでブラウザが扱えたりローカルに対してはコマンドを叩けたり外部リソースにも簡単にアクセスしたりとかつて MCP が必要だった機能をエージェントが補完してくれています (内部的に MCP をエージェントがコールしてくれているケースもありますが)

要するにエージェントが賢くなりすぎていろいろできるようになってしまったがゆえに MCP も独自で立てる必要がなくなった気がしています

もちろん MCP が不要とはいいませんが昔ほど AI コーディングにおいて MCP が必須なコンポーネントであるとは現在では思えません

RAG や他の AI プロトコルについては今回は触れませんが RAG に関しても自分は同等の意見です
また Agents.md などのコンテキストというかシステムプロンプト的なものも最近では書く必要を感じなくなりました

そうじゃない感について

自分は主に copilot を使うので比較対象が copilot になってしまうのですが copilot には「Copilot CLI」という CLI 環境で動作するエージェントもあります
それを使って emacs の拡張で足りない部分を補いことはできるかもしれませんが個人的にはそれが「そうじゃない感」を生み出している点です

開発するときには基本的にはエディタや IDE と向き合います
かつて自分が emacs で開発しているときは開発 VM に ssh しそこで tmux を立ち上げその tmux バッファないで emacs を -nw で emacs を立ち上げて開発していました

確かにその環境は素晴らしかったです
ssh して tmux バッファを開けばすでに emacs でコーディングもできるし他のバッファでアプリのビルドやテストができる状態でした
その環境自体は自分は今も好きです

ただ AI コーディングをするとなるとエディタや IDE だけで完結する必要があります (必要があるというかその方がはるかにストレスレスだと思っています)
AI に質問するのにわざわざバッファを切り替えたり AI に質問したあとでわざわざ手動でコピペするというのは今の時代だとかなりナンセンスな方法です
一昔前であればブラウザでチャッピー (ChatGPT) に質問しその結果をエディタ側にコピペしてという開発手法でしたがコンテキストの与え方を考えたりトークンの数を減らすために RAG を構築したりとかなり大変でした (それは今もやってるかもしれませんが)

AI コーディングするにあたってあっちこっち切り替えてコピペしては簡単な作業とは言えかなりストレスが溜まります
それが VSCode + copilot ではすべてその場で解決します
質問すればすべて回答しその回答結果を即時に勝手にコードに反映してくれます
もしかすると一部コピペする必要があるかもしれません
もしかすると一部のコマンドの許可を与えるためにボタンを押す必要があるかもしれません
それでもアプリを切り替えてあっちこっちいったりする必要はなく VSCode ないだけでほぼ確実に完結します

これが個人的に感じている AI コーディングにおける「そうじゃない感」です

勝っている点があるとすれば

正直ないような気もします
本当に一部のケースで(慣れの問題もありますが) emacs のほうが素早く作業できる場合はあります

  • インストール -> どちらも homebrew できる
  • CLI 環境 -> emacs は -nw、VSCode は code-server or SSH トンネルなど
  • 拡張 -> どちらもあり (elisp or JavaScript)
  • コード実行 -> どちらもあり
  • オープンソース -> どちらも
  • キーバインド -> どちらもできる

などなど emacs にしかできないことはほぼないような気がします (もちろん探せば全然ありますが表面上の利用用途としてはほぼなさそう)

それでも一部の作業はやはり emacs を使う

自分が今でも emacs を使っているケースがあります
それは単純なメモを取るときです

VSCode + copilot は何でもかんでも AI でやろうとするのでただメモを取りたいだけなのにコードサジェスチョンをしようとします
タイプ中に関係ないことをサジェスチョンされるのは嫌なのでプレーンテキストメモするときは emacs を使っています

また VSCode は基本的に 1 プロジェクトのみを開くことを対象にしているので現在開発しているプロジェクト以外を編集/閲覧したい場合には emacs を使います
一応 VSCode にも workspace という機能があり 1 つのウィンドウで複数のプロジェクトを開くことができるのですが AI のノイズになったり単純に邪魔になったりするので自分はあまり使っていません

emacs は今後も生き続けるはず

それでも emacs は今後も生き続けるはずです
emacs 自体の発展や拡張の発展が AI コーディングにより期待できるからです

先ほども記載しましたが tmux + emacs の環境は今でも好きだし使っています

またキーバインドによるショートカットや矩形選択などの編集などはまだ emacs のほうが速く作業できるケースもあるのでケースバイケースかなとも思っています
ただメインのアプリケーション開発においてはもう VSCode しか使っていません

もちろん emacs キーバインドは大好きで VSCode でも他のエディタや IDE、ターミナルソフトでも emacs キーバインドを使っています

最後に

AI エージェントが搭載されていないアプリはエディタや IDE だけではなく今後なくなってくるのかもしれません
また AI の肝はエージェントの実装と言っても過言ではないので優れたエージェントを持つアプリが生き残っていくのかもしれません

今回はその例がたまたま emacs vs VSCode だったというわけです

その他メモ

  • トラブル時にサーバに SSH ログインして作業するときも vim があれば十分なケースが多い
  • Microsoft 製のソフトウェアで唯一使っているソフトかもしれない

2015年10月8日木曜日

消えた 1a0a666f941c99882093d7bd08ced15033bc3f0c の package.el

概要

どこを探してもない
とりあえず emacs23 で動いた package.el をキャッシュしておきます

package.el

たぶんこれのはず
package.el

とりあえず Debian 上で動作する emacs 23.4.1 ではちゃんと動くことを確認しました

2015年7月7日火曜日

Emacs で Mew を使って Gmail を受信してみた

概要

Emacs の mew というメールパッケージを使って Gmail を受信してみました
最新のMac (OS X) で試しています

環境

  • Mac OS X 10.10.4
  • stunnel 5.17
  • Emacs 24.4.1
  • Mew 6.6
  • Gmail 20150707時点

Mew のインストール

package.elを使ってインストールしました
package-list-packagesを起動して melpa の「mew 20150607.2316」を選択してインストールします
※20150707時点での最新の mew をインストールしているのでそれ以上のバージョンがあればそちらをインストールしてください

stunnel のインストール

stunnel は簡単に言えばSSL通信をするためのツールです
Homebrewを使ってインストールしました

brew install stunnel
/usr/local/bin/stunnel -version

証明書の設置

stunnel を使って Gmail と SSL 通信するのに利用します
stunnel のサイトで公開されている証明書をダウンロードして配置すればOKです

cd /var/tmp
wget http://www.mew.org/Release/certs-20110624.tar.gz
tar zvxf certs-20110624.tar.gz
mkdir ~/.certs
mv certs-20110624/* ~/.certs

GmailのIMAP設定

デフォルトではONになっています
ここの手順で確認することが可能です

Mewの設定を記載

.emacsでOKです
他の設定ファイルをloadしている場合はそのファイルでもOKです

; for configuration of mew
; Load stunnel
(setq mew-prog-ssl "/usr/local/bin/stunnel")
; User IMAP with Gmail for receiving a mail
(setq mew-proto "%")
(setq mew-imap-server "imap.gmail.com")
(setq mew-imap-ssl-port "993")
(setq mew-imap-user "your.account.name@gmail.com")
(setq mew-imap-auth  t)
(setq mew-imap-ssl t)
; User SMTP with Gmail for sending a mail
(setq mew-smtp-server "smtp.gmail.com")
(setq mew-smtp-ssl-port "465")
(setq mew-smtp-user "your.account.name@gmail.com")
(setq mew-smtp-auth t)
(setq mew-smtp-ssl t)

(setq mew-fcc "%Sent")
(setq mew-imap-trash-folder "%[Gmail]/ゴミ箱")
(setq mew-use-cached-passwd t)

変更する箇所は Gmail のアカウントを記載する部分です
「your.account.name」の部分を変更してください
その他が基本そのままでOKです
(setq mew-proto "%")とすることで mew を起動した際に受信フォルダに移動します
その他の値に関してここを検索するとどんな値なのかわかると思います

起動確認

emacs -e mew
とすると mew が立ち上がります
emacs を起動したあとでM-x mewでもOKです
立ち上がるとアカウントに対する認証が聞かれるのでGmailで使っているパスワードを入力します

問題なく認証が完了するとGmail上のメールデータが古い順に受信されます
初回起動時は全メールを取得するのでGmail上の受信メールが多い場合はダウンロードに時間がかかるかもしれません

デフォルトだと古い順に表示されるので新しい順に表示したい場合はバッファの最下部に移動してください

操作Tips

  • 終了方法
    Inbox内で「Q」とすることで終了させることができます
    メールの受信中に終了した場合は、mew 起動時に再度メールを受信してくれます

最後に

特にハマることなくできました
バージョンもだいぶ新しいのを使っているからでしょうか
ブラウザが使えない環境だと便利ですね
操作方法がわからなくなったら公式のマニュアルを読めばだいたいは解決すると思います

参考サイト

2015年6月2日火曜日

Emacs で Web Server - Elnode を使ってみた

概要

Elnodeなるものがあり、これでEmacs上でlispを書いてWebサーバを構築することができます
ちょっと興味があったので試してみました

環境

  • Mac OS X 10.10.3
  • Emacs 24.4.1
  • Elnode 0.9.9.8.8

Elnodeインストール

まずEmacsにElnodeをインストールします
Emacsのバージョン24以上を使っていればpacakge.elを使ってインストールすることができます

ここを元に package.el でダウンロードできるリポジトリ (marmalade, melpa) を追加します
追加できたらM-x package-list-packagesでパッケージのリストを表示します
一覧の中にelnodeがあるので i -> x とキーを押してインストールします
i でインストール対象を選択して、 x でインストールを実行します

インストールできるとelnode-startなどの命令が使えるようになります

サンプルスクリプト作成

適当なHTMLを返却することができるEmacs-lispを作成してみます

  • emacs sample_web_app.el
(defun my-test-handler (httpcon)
  "Demonstration function"
  (elnode-http-start httpcon 200 '("Content-type" . "text/html"))
  (elnode-http-return httpcon "<html><b>HELLO!</b></html>"))

(elnode-start 'my-test-handler :port 8082)

「HELLO!」という文字列を返すだけの簡単なサンプルです
上記のスクリプトを開いているバッファでeval-bufferを実行してみましょう
するとサーバが起動します(特に *Messages* にログはでません)

ブラウザでアクセスしてみる

http://localhost:8082/
にアクセスしてみましょう
先ほど設定した「HELLO!」といういう文字列がボールドされて返ってくると思います

サーバを停止する

M-x elnode-stop
で起動中のポート番号を入力してEnterでOKです
停止時は *Messages* に停止ログが出力されます
念のためブラウザで先ほどのURLにアクセスするとページが返ってこないことがわかると思います

Tips

  • Cannot bind server socket: permission denied
    LISTENするポートを1024番以上にしてください
    80番とかでサーバを起動しようとすると上記のエラーになります
  • index.htmlを表示する方法
(setq my-webserver
      (elnode-webserver-handler-maker "/path/to/elisp"))

(elnode-start my-webserver :port 8082)

「/path/to/elisp」配下に index.html を配置して同様にstartすれば index.html を自動で探して表示してくれます

最後に

他にもorg-modeと連携したりCSSを適用したり、HTTPのパラメータを取得したりといろいろできるみたいです

自分はとりあえず動作することを確認したかっただけなので、これで終わりますが 本格的にWebアプリを作ろうとしたら、DBと接続したり別のHTTPをコールしたり、MVCしたりといろいろ考えなければいけませんが、何か頑張ればできそうな気がします

.elファイルをデプロイしてemacsコマンドを使ってWebサーバを立ちあげる、なんて運用が実現できるのか・・・

参考サイト

2015年3月24日火曜日

emacs で clipborad を共有する方法

概要

emacsの「-nw」で起動した状態でクリップボードを共有する方法を紹介します

環境

  • emacs 24.4.1
  • Max OS X 10.10.2 or Cygwin 1.7.32

elisp

.emacsに以下を書けばOKです
Githubで公開している.emacsに記載しているので最新版はそっちで管理しています

以下は一部抜粋のサンプル

; for clipborad
(setq sysname system-type)
(if (eq sysname 'darwin)
    (progn
      (defun copy-from-osx ()
    (shell-command-to-string "pbpaste"))
      (defun paste-to-osx (text &optional push)
    (let ((process-connection-type nil))
      (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
        (process-send-string proc text)
        (process-send-eof proc))))
      (setq interprogram-cut-function 'paste-to-osx)
      (setq interprogram-paste-function 'copy-from-osx)
    )
    (message "This platform is not mac")
)
(if (eq sysname 'cygwin)
    (progn
      (defun paste-from-cygwin ()
        (with-temp-buffer
          (insert-file-contents "/dev/clipboard")
          (buffer-string)))
      (defun cut-to-cygwin (text &optional push)
        (with-temp-file "/dev/clipboard"
          (insert text)))
      (setq interprogram-cut-function 'cut-to-cygwin)
      (setq interprogram-paste-function 'paste-from-cygwin)
   )
   (message "This platform is not cygwin")
)

emacsでプラットフォーム情報を取得できるので、それに応じてクリップボードを使うコマンドを分けています
Windows上で開いているターミナルアプリでSSHログインした先のLinuxサーバで起動上で動作しているemacsとクリップボードを共有する方法が知りたい
そもそもできるのだろうか

2015年2月7日土曜日

emacsで改行時に表示されるバックスラッシュを消す

概要

これを
enter image description here

これにします
after.png

ターミナルの情報をコピペしたときにバックスラッシュまでクリップボードに保存されてしまい、いちいち削除するのが面倒なので
Emacsにクリップボードにコピーする方法もあるが「-nw」で起動している場合やサーバ上で起動している場合もあるので

環境

  • Emacs 24.3.1

設定方法

.emacsに以下に追記する

(set-display-table-slot standard-display-table 'wrap ? )

最後にスペースが入力されているので注意してください
最後のスペースをnilに変更すればバックスラッシュに戻ります
やっていることは単純でバックスラッシュをスペースに置き換えているだけです

scratchバッファで実行してもOK
永続化しておきたいなら.emacsに書いておきましょう

Display-Tableという仕組みを使っているようで、これを使えばバッファが分割された場合の境界線なども変更できるようです

2014年11月18日火曜日

emacsを起動しないでelispを実行する方法

概要

rubyとかでいうところのirb的なことをemacsでもやりたいなと思い調べてみたらあったので紹介します

環境準備

  • CentOS 5.10 Final
  • emacs 24.2.2

やり方

サンプルを交えつつ

  • メッセージをプリントするだけ
emacs -batch --eval '(message "test")'
  • package.elを使ってパッケージをインストールする
emacs -l ~/.emacs -batch --eval '(progn (require (quote package)) (package-install (quote anything)))'

オプションの説明

  • -batch
    emacsをバッチモードで起動します、エディタが立ち上がってきません
  • –eval
    引数で与えられたelispを評価します
    シングルクォートでくくっておくといいです
    評価式内でシングルクォートを使いたい場合は(quote)を使いましょう
  • -l
    .emacsをロードする
    指定しない場合は.emacsに定義されているelispは読み込まれずにバッチモードが起動します

これでpackage.elがコマンドラインから使えるのでemacsの設定もある程度自動化できそうです

2014年11月7日金曜日

Emacsにクリップボードをペーストすると勝手にインデントされてしまう場合の対処方法

概要

Cygwin上でemacsを使っていてクリックボードの情報をemacsに貼り付け(Shift-Insert)しようとすると行ごとに勝手にインデントされてしまいました
結果、ペーストした情報が段々になり思い通りに貼り付けできない現象に遭遇しました
上記の解決方法を紹介します

環境

  • Windows7 64bit
  • Cygwin 1.7.32
  • Emacs 24.4.1

対処方法

いろいろ調べた結果自分は以下の方法で解消されました

(electric-indent-mode 0)

を.emacsに記載しました
ミニバッファでelectric-indent-modeを実行してdisableにするのでもいいです

他の環境のemacsではデフォルトでelectric-indent-modeがdisableだったのですが、そうでない場合もあるようです
Emacsのバージョンの違いとかでしょうか

2014年10月29日水曜日

【emacs】cond: Invalid version list `(8 5 -4)'

概要

Cygwin + apt-cyg でインストールしたemacsでpackage.elを使おうとしたら発生しました
原因はよくわからないですが、emacsをapt-cygでアップデートしたら直ったのでメモしておきます

環境

  • Cygwin 1.7.32-1
  • emacs 24.4-1
  • apt-cyg 0.59

現象

emacsの24系からデフォルトでインストールされているpackage.elを使ってpackage-list-packagesを実行しようとしたところ
パッケージの一覧が表示されずミニバッファに
cond: Invalid version list(8 5 -4)’`が表示され終了となってしまう

対応方法

自分の場合はemacsをアップデートしたら直りました
emacs24.3系から24.4にアップデートされました

apt-cyg remove emacs
apt-cyg update
apt-cyg install emacs

でインストールしたemacsのバージョンが24.4系になっていればOKです
再度package-list-packagesを実行すればパッケージの一覧が表示されるはずです

ちょっと原因がわからず気持ち悪い感じですが、とりあえず自分は上記で対応できたので忘れないようにメモしておきます

2014年9月10日水曜日

Emacsで色(face)をカスタマイズする方法

概要

Emacsの文字色や背景色はfaceという仕組み(というか名称)で管理されています
ユーザはfaceをカスタマイズすることで見た目を変更ことができます
faceのカスタム方法はいろいろありますが、今回はEmacsに付属されている customize-face という機能を使って変更する方法を紹介します

環境準備

  • Emacs
    24.3.1

カスタマイズ

customize-face 起動

まずはcustomize-faceを起動します
ミニバッファで「customize-face」と入力すれば起動することができます
M-x customize-face

Customize face (defaultall faces’):` と聞かれるので Enter を入力します
face はカテゴリごとに管理されておりカスタマイズしたいカテゴリに絞ってからカスタムすることも可能です
とりあえず今回はデフォルトの all を使ってカスタマイズしてみます
起動すると以下のように表示されるはずです
customize-faces-start.png

目的のfaceを見つける

今回は試しにscratchバッファのコメント部分の文字色を変更してみたいと思います
scratch.png

faceでカスタムする際に一番大変な作業は、カスタムしようとしている場所が何というfaceなのかを知ることです
今回変更しようとしているfaceはfont-lock-comment-faceになります
これをどうやって知ったかというとdescribe-faceという関数がありこれを変更したい文字上で実行すると調べることができます

faceの名前がわかったのでcustomize-faceに戻って早速カスタムしてみます
customize-faceをallで開いたので大量のfaceがあると思います
EmacsなのでCtrl+sで検索してもいいですし、一番上の黄色部分が検索窓の役割にもなっているのでここにkeywordを入力してもOKです
検索するときにはfont-lock-comment-faceと入力してもマッチしません
customize-face上のface名は「font lock comment face」とハイフンなしでで検索することで目的のfaceに辿りつくことができます
font-lock-comment-face.png

scratchの文字色をカスタムしてみる

「Show」の部分をEnterするとfaceの設定項目が出てきます
元々の色はどうやら「yellow」が定義されているようです
yellow の部分にカーソルを合わせてEnterを入力するとミニバッファに色を指定するように言われます
Emacsで提供しているカラーテーマ以外は指定できません
Emacsが提供するカラーの一覧はlist-color-displayで表示することが可能です
ここでは試しに「red」と入力しましょう
change-red.png

カスタム情報を保存する

変更が完了すると状態が編集中になります
カスタム情報を保存する方法はEmacsの王道の「Ctrl+x, s」でも問題ありません
customize-faceの機能を使って保存する場合は「State」をEnterするとミニバッファに選択項目が出てくるので「1 = Save for Future Sessions」を選択すればOKです
するとカスタム情報が.emacsに書き込まれます
この状態まで来たらscratchバッファを再度見てみると黄色だったコメント部分が赤色になっていることがわかります
保存した際に.emacsにカスタム情報が記録されるためEmacsを再起動しても文字が赤になっていると思います

今回の紹介は以上です
-nw オプションでemacsを起動していると変更できないfaceもあるようなので、その辺りは実際に変更しながら試していくしかなさそうです

Enjoy Emacs life !

2014年8月4日月曜日

Package `emacs-24.1' is unavailable

emacs24以上にはデフォルトでpackage.elがインストールされています
emacsをバージョンアップした等でタイトルのエラーが出る場合には
独自でインストールした package.el を移動(もしくは削除)してあげる必要があります

独自でインストールした package.el が使われているかどうかは
M-x load-library RET package.el
でパスが表示されると使われていることになります
また、package-list-packages 等のコマンドでパッケージが2種類表示されている場合でも両方の package.el が効いているので独自でインストールしたほうを移動(もしくは削除)してください

~/.emacs.d/site-lisp
mv package.el /var/tmp/

find したところ以下のパスにビルトイン用の package.elc がありこれを使っているようです
/usr/share/emacs/24.3/lisp/emacs-lisp/package.elc

独自でインストールした package.el を移動したからといってインストールしたパッケージが削除されることはなかったです

2014年3月26日水曜日

Emacsにmarkdown-modeをインストール

■環境
CentOS 5.10 64bit
Emacs 23.4.1

■インストール
cd /var/tmp
git clone git://jblevins.org/git/markdown-mode.git
cd markdown-mode
cp markdown-mode.el ~/.emacs.d/site-lisp/
emacs ~/.emacs
以下を追記
(load-file "~/.emacs.d/site-lisp/markdown-mode.el")
(autoload 'markdown-mode "markdown-mode"
   "Major mode for editing Markdown files" t)
(add-to-list 'auto-mode-alist '("\\.text\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

※cookbooksにも適用しました
https://github.com/kakakikikeke/cookbooks-emacs

■参考サイト

2013年11月22日金曜日

【emacs】php-modeのインストール方法

■環境
CentOS 5.9
GNU Emacs 23.4.1

■インストール手順
http://downloads.sourceforge.net/project/php-mode/php-mode/1.5.0/php-mode-1.5.0.tar.gz?r=http%3A%2F%2Fphp-mode.sourceforge.net%2F&ts=1384992949&use_mirror=jaist
tar zvxf php-mode-1.5.0.tar.gz
cd ~/.emacs.d/site-lisp/
mv /var/tmp/php-mode-1.5.0 .

emacs ~/.emacs
以下を追記する
(load-file "~/.emacs.d/site-lisp/php-mode-1.5.0/php-mode.el")
(push '("\\.php$" . php-mode) auto-mode-alist)

■動作確認
emacsを再起動(Ctrl+x, Ctrl+cで抜けて起動するだけ)
emacs sample.php
とすると以下のような感じで色付けされます

Githubで公開しているchefのemacs cookbooksも対応しました
https://github.com/kakakikikeke/cookbooks-emacs

2013年4月9日火曜日

emacsでXMLパースをやってみた

1. インストール
cd ~/.emacs.d/site-lisp/xml
wget http://repo.or.cz/w/emacs.git/blob_plain/HEAD:/lisp/xml.el
.emacsに以下を追記
(load-file "~/.emacs.d/site-lisp/xml/xml.el")
emacsを再起動します

2. サンプルXML作成
<post time="20050716234509" id="010101">
  <login>Test</login>
  <msg>Here is the message</msg>
  <info>MyUA</info>
</post>

上記をcd ~/.emacs.d/site-lisp/xml/sample.xmlとして保存してください
※他にも「XML サンプル」でググるとたくさんでてきます

3. 実行
scratchで以下のソースコードを記載

(let*
  ((xml (xml-parse-file
    (expand-file-name "~/.emacs.d/site-lisp/xml/sample.xml")))
    (post (car xml))
    (attrs (xml-node-attributes post))
    (time (cdr (assq 'time attrs)))
    (msg (car (xml-get-children post 'msg)))
    (text (car (xml-node-children msg))))
    (message "time: %s, message '%s'" time text))

eva-bufferもしくはカーソルを一番下にもっていきCtrl+jで実行できます
ミニバッファに
「time: 20050716234509, message 'Here is the message'」と出れば成功です
xmlをパースしたリストを返すようなメソッドを作成して受け取ったリストから
パースする流れを作ったほうがいいかもしれません


ちなみに文字列を直接パースする場合には以下の方法となります
ファイルの読み込み時とは異なるのでご注意を

(let*
  ((xml "<post time=\"20050716234509\" id=\"010101\"><login>Test</login><msg>Here is the message</msg><info>MyUA</info></post>")
    (root (with-temp-buffer (insert xml) (xml-parse-region (point-min) (point-max))))
    (post (car root))
    (attrs (xml-node-attributes post))
    (time (cdr (assq 'time attrs)))
    (msg (car (xml-get-children post 'msg)))
    (text (car (xml-node-children msg))))
    (message "time: %s, message '%s'" time text))

処理の流れとしてはXMLデータをlispで扱えるリスト形式のデータに落とし込んだ後にcarでリストから値を取得するという流れになっています
パースする部分は直感的で使いやすいなーと感じました


参考サイト
http://www.emacswiki.org/emacs/XmlParserExamples

2013年4月6日土曜日

【emacs】elipsでREST-APIのsignatureを生成する方法

gistで公開しています
https://gist.github.com/kakakikikeke/5316171

■インストール方法
cd ~/.emacs.d/site-lisp/get-signature
git clone git://github.com/psanford/emacs-oauth.git
# hmac-sha1.elという公開済みのelispを使用する
mv ~/.emacs.d/site-lisp/get-signature/emacs-oauth/hmac-sha1.el ~/.emacs.d/site-lisp/get-signature/
wget https://raw.github.com/gist/5316171/get-signature.el

.emacsに以下を追記
(load-file "~/.emacs.d/site-lisp/get-signature/hmac-sha1.el")
(load-file "~/.emacs.d/site-lisp/get-signature/get-signature.el")

emacsを再起動後、scratchで以下を実施すると生成されたsignatureが表示されます
(get-signature "Your Secret Key" "message for creating the signature")

2013年4月5日金曜日

【emacs】Not enough arguments for format string

(message "%s" test)

依存文字らしき文字「%」や「:」が入っているときには
「%s」
でmessageを表示しないとエラーになるようです
なので当該エラーが発生したときには、elispファイル内にmessageの宣言がないか確認しましょう

2013年4月4日木曜日

【emacs】一回で画面を4分割するelisp

gistで公開しています
https://gist.github.com/kakakikikeke/5308321

■インストール方法
cd ~/.emacs.d/site-lisp/split4
wget https://raw.github.com/gist/5308321/split4.el

.emacsに以下を追記
(load-file "~/.emacs.d/site-lisp/split4/split4.el")

emacsを再起動後、ミニバッファでで以下を実施すると画面が4分割されます
M-x split4

2013年3月29日金曜日

emacsでHTTP Requestを送る方法

デフォルトのemacsパッケージの url を使って簡単なelispスクリプトを作成しました。
https://gist.github.com/kakakikikeke/5262112

■インストール方法
cd ~/.emacs.d/site-lisp/send-http-request
wget https://raw.github.com/gist/5262112/send-http-request.el

.emacsに以下を追記
(load-file "~/.emacs.d/site-lisp/send-http-request/send-http-request.el")

emacsを再起動後、scratchで以下を実施するとカレントバッファに結果がかえってきます
(send-http-request "http://kakakikikeke.blogspot.com/")

参考サイト
http://emacswiki.org/emacs/UrlPackage#toc2

2013年3月27日水曜日