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

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 "[email protected]")
(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 "[email protected]")
(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日水曜日

2013年3月26日火曜日

【emacs】multi-term.elのインストールと設定

1. インストール
mkdir ~/.emacs.d/site-lisp/multi-term
cd ~/.emacs.d/site-lisp/multi-term
curl -O http://www.emacswiki.org/emacs/download/multi-term.el

2. 設定
.emacs に以下を記述
(require 'multi-term)
(setq multi-term-program shell-file-name)

3. 確認
emacsを起動して
M-x multi-term
を実行するとterminalでemacsのキーバインドが使えるようになっているはずです
(Ctrl+x b でバッファの切り替えができるようになります)

参考サイト
http://sakito.jp/emacs/emacsshell.html