Hatena::ブログ(Diary)

三等兵

2012-06-22

決定版!EvernoteにMarkdown記法で構造化されたデザイン文書を作るやつ!

今までの流れで一応形になって落ち着きましたー。

madeverというAppleScriptで書いたスクリプトを使って、Evernoteクライアント上でMarkdown記法が使えるようになります。文章を書くときはmarkdown、ちゃんとした形として保存するならリッチテキスト。そういった使い方で利用できるようイメージしました。(もちろんリッチテキストでも編集可能)

インストールや詳しい使い方については下記のURLでどうぞ。


Evernoteの使い道

ネットだとEvernoteはよくあるライフハック的な使い方やEvernoteにライフログを残すといった情報ばかりです。というか、私はそういったイメージが強くて使っていなかったのですが、

  • 読書メモ
  • 技術的な知識のまとめ
  • アイデアメモ
  • 領収書
  • pdf書籍の保管

などで利用すると便利でした。

ウェブページ保存とかライフログとかはやらないです。めんどくさいです。

個人的にEvernoteの一番の魅力はドキュメントや画像管理が楽なとこですね。テキストファイルとか邪魔で、そういうの保存する、管理するってめんどくさいし、さらに画像も含まれてくると嫌になるんですが、Evernoteだとそういうことを気にせず扱えます。あとクラウドって部分も大きい。

だけれど構造的な文書を作るのには向いていない

Evernoteのクライアントは構造的な文章が書きにくい。書きにくいというか向いていない。Evernoteって普通だとメモ程度にしか使えないので、それ向けに使ってる人も不満に感じないと思います。

ちゃんとした文書を作るとなると自分に馴染んだアプリを使いますね。自分もそうしていたんですがめんどくさくなりました。読書メモで電子書籍のスクショとか取ると画像の扱いとか面倒で。あと文書がかければ私はメモ帳でもなんでも良いです。

で、個人的な文書ならEvernoteだけで終わらせてしまってもいいんじゃないかと。でも文書の見た目はちゃんとさせたい。構造化された文書はパッと見てポイントがつかみやすいのでこれだけはちゃんとしたい。

そういった動機からmadeverみたいなのを作りました。

Evernoteでそんな文書を書きたいなんて人は稀でしょうが同じような人の役に立てたらうれしいです。

2012-06-13

EvernoteだけでMarkdown<=>リッチテキストの相互変換できるスクリプト書いた

前回Pandocを入れたのはEvernoteだけでmarkdownとhtml(リッチテキスト)を相互変換できないものかという考えからだった。

そういうわけでやってみたできた。こうやってEvernoteでmarkdownの文書を書いて、

f:id:sandai:20120612234852p:image


スクリプト実行すると、

f:id:sandai:20120612234853p:image


markdownにするかhtml(リッチテキスト)にするかダイアログが出るのでリッチテキスト(html)にして変換。

f:id:sandai:20120612234855p:image


リッチテキストからmarkdownにするにはさっきのダイアログをmarkdownにする。

すると、

f:id:sandai:20120612234856p:image

こうして元に戻せる。

markdownで文書を編集、きれいにしたければリッチテキストに変換、また問題があればmarkdownに変換して文書を編集、といった使い方ができる。

若干最初と違いがあるのはPandocの仕様。複雑な構造部分も基本的には問題ない。

f:id:sandai:20120612234857p:image


まあ以前の使い回しなので変換するコードに特に手を入れなきゃいけない部分がなかったのもあってか問題はなかった。が、なんかいろいろめんどくさいことがあったけどそれはいいや。

とりあえずEvernoteのクライアントだけでMarkdownを使えるようになった!これでEvernoteでいろいろ書きやすくなると思う!

さらに、

を使えばショートカットでいけるようになると思うけど、試してない。また今度。


相互変換のために準備するもの

2つ必要。Pandocと相互変換するmadever.applescriptというスクリプト。


AppleScriptはAlfredでも呼び出せる。設定画面のFeaturesのAppleScriptsにチェック入れると表示されるけど、/Users/ユーザ名/Library/Scriptsだとうまく表示されなかった。ホームディレクトリに適当にフォルダ作って置けばみつかると思う。あとscptにすること。エディタで開いて別名で保存して、フォーマットをスクリプトにすればできる。

HomebrewからPandocをインストール

Pandocはいろんなテキストフォーマットのコンバータ。これを利用して変換作業を行なってますのでお手持ちのMacにインストール。Homebrewからインストールするには、まずhaskell-platformというのをインストール。

% brew install haskell-platform

結構時間かかるので待機。

完了したらcabalというHaskellのパッケージ管理システムを使ってPandocをインストール。RubyのgemのHaskell版みたいなもの。

% cabal update
% cabal install pandoc

インストールできたら.zshrcから$HOME/.cabal/binにパス通す。bashの人も適当にどうぞ。

PATH=$HOME/.cabal/bin:$PATH

記述して保存したらターミナルを再起動して、

pandoc -v

とすると、

% pandoc 1.9.4
Compiled with citeproc-hs 0.3.4, texmath 0.6.0.6, highlighting-kate 0.5.1.
Syntax highlighting is supported for the following languages:
    Actionscript, Ada, Alert, Alert_indent, Apache, Asn1, Asp, Awk, Bash,
    Bibtex, Boo, C, Changelog, Clojure, Cmake, Coffeescript, Coldfusion,
    Commonlisp, Cpp, Cs, Css, D, Diff, Djangotemplate, Doxygen, Dtd, Eiffel,
    Email, Erlang, Fortran, Fsharp, Gnuassembler, Go, Haskell, Haxe, Html, Ini,
    Java, Javadoc, Javascript, Json, Jsp, Latex, Lex, LiterateHaskell, Lua,
    Makefile, Mandoc, Matlab, Maxima, Metafont, Mips, Modula2, Modula3,
    Monobasic, Nasm, Noweb, Objectivec, Objectivecpp, Ocaml, Octave, Pascal,
    Perl, Php, Pike, Postscript, Prolog, Python, R, Relaxngcompact, Rhtml, Ruby,
    Scala, Scheme, Sci, Sed, Sgml, Sql, SqlMysql, SqlPostgresql, Tcl, Texinfo,
    Verilog, Vhdl, Xml, Xorg, Xslt, Xul, Yacc, Yaml
Copyright (C) 2006-2012 John MacFarlane
Web:  http://johnmacfarlane.net/pandoc
This is free software; see the source for copying conditions.  There is no
warranty, not even for merchantability or fitness for a particular purpose.

みたいに出てきたらうまくいってる。

なんのこっちゃお前なにいってんのかよくわからんぞボケという人は普通にダウンロード。

インストーラが助けてくれますんで誰でも導入できます。

もし.cabalやインストーラ以外のパスにPandocの実行ファイルがある場合madeverスクリプトの上部にそこまでのパスを書いてほしい。たぶんすぐわかると思う。

Markdown記法について

いくつか特殊というか、他のMarkdown記法と互換性のない記法が存在する。全てを把握できているかどうかはっきりテストしていないが、現在分かるものは次の通り。

  • 改行は半角スペース2つだけじゃなくて、バックスラッシュ(\)を使う
  • html→markdownにしたときにリストの間に不自然な行が入る
    • 特に問題はないのでそのままだがこちらで対応しようかどうか検討中
  • 引用のネスト時に1行余計に書く必要がある
    • これは言葉では表しにくい
  • プログラミングコードのシンタックスハイライトがある
    • 便利ではあるがhtml→markdown時に対応できない。どうしようか検討中
  • tableのalignがmarkdown→html→markdownに変換したとき無効になる
    • pandoc側のバグといっていいのか。ちょっとこれは調節するのが難しそう

とりあえず改行と引用だけ書き方を気をつければ良い。あと画像はEvernoteの関係でmarkdownやらhtmlやら変換していると無くなっちゃうので、画像なしで。

それ以外はだいたい安心できると思う。

まあちょこちょこ直していく。

引用の書き方

問題ない書き方はこれ。

> 引用のテスト 段落と同じような扱いを受けている。改行するときは末尾に□□

> と半角スペースを2つ入れることで改行になる

>

> Markdownで`1行`あけることで行が開く

>

> > ネストした引用のテスト

> >

> > > さらにネスト引用。ネストには一行あける必要がある

> > > これはPandocだけの仕様。普通にやるなら–strictを使う必要がある

>

> 引用された文章です 

>

> 引用された文章です

>

> ### hタグのテスト

>

> - リストのテスト1

> - リストのテスト2

問題が出る書き方

> 引用のテスト

> 段落と同じような扱いを受けている。改行するときは末尾に□□

> と半角スペースを2つ入れることで改行になる

>

> Markdownで`1行`あけることで行が開く

> > ネストした引用のテスト

> > > さらにネスト引用

> ネストした引用ではPandoc-1.9.4で正しく動作しない

>

> 引用された文章です 

>

> 引用された文章です

>

> ### hタグのテスト

>

> * リストのテスト1

> * リストのテスト2

ネストするとき気をつけて。あんまりやらないと思うけど。

2012-06-04

Haskell製のMarkdownをHTMLやLaTeXに変換できるPandocのインストールとサンプル

Haskell製のドキュメントコンバータ。markdownをhtmlにしたりLaTeXにしたりっていうことができるやつ。変換できる形式が多い。便利だ。

いろいろできてすごいんだけどオプションも多め。さすがに全部はめんどくさいけど調べてみた。


インストール

詳しいことはここに書かれている。


だいたいのOSに対応しているみたいなんで誰でも試せる。


MacのHomebrewでインストールする

Homebrewでインストールした。といっても、Pandocはformulaが用意されていない(npmでも用意されていないのと同じ理由らしい)ので、いま話題のhaskell-platformを通して、それからcabalを使ってインストール。

% brew install haskell-platform
% cabal update
% cabal install pandoc

少し時間かかるかも。インストールできたら.zshrcから$HOME/.cabal/binにパスを通す。zshの場合。

PATH=${HOME}/.cabal/bin:$PATH

記述して保存したらターミナルを再起動して、

% pandoc -v

とすると、

% pandoc 1.9.4
Compiled with citeproc-hs 0.3.4, texmath 0.6.0.6, highlighting-kate 0.5.1.
Syntax highlighting is supported for the following languages:
    Actionscript, Ada, Alert, Alert_indent, Apache, Asn1, Asp, Awk, Bash,
    Bibtex, Boo, C, Changelog, Clojure, Cmake, Coffeescript, Coldfusion,
    Commonlisp, Cpp, Cs, Css, D, Diff, Djangotemplate, Doxygen, Dtd, Eiffel,
    Email, Erlang, Fortran, Fsharp, Gnuassembler, Go, Haskell, Haxe, Html, Ini,
    Java, Javadoc, Javascript, Json, Jsp, Latex, Lex, LiterateHaskell, Lua,
    Makefile, Mandoc, Matlab, Maxima, Metafont, Mips, Modula2, Modula3,
    Monobasic, Nasm, Noweb, Objectivec, Objectivecpp, Ocaml, Octave, Pascal,
    Perl, Php, Pike, Postscript, Prolog, Python, R, Relaxngcompact, Rhtml, Ruby,
    Scala, Scheme, Sci, Sed, Sgml, Sql, SqlMysql, SqlPostgresql, Tcl, Texinfo,
    Verilog, Vhdl, Xml, Xorg, Xslt, Xul, Yacc, Yaml
Copyright (C) 2006-2012 John MacFarlane
Web:  http://johnmacfarlane.net/pandoc
This is free software; see the source for copying conditions.  There is no
warranty, not even for merchantability or fitness for a particular purpose.

うまくいった。

% pandoc -h
pandoc [OPTIONS] [FILES]
Input formats:  native, json, markdown, markdown+lhs, rst, rst+lhs, docbook,
                textile, html, latex, latex+lhs
Output formats: native, json, html, html5, html+lhs, html5+lhs, s5, slidy,
                dzslides, docbook, opendocument, latex, latex+lhs, beamer,
                beamer+lhs, context, texinfo, man, markdown, markdown+lhs,
                plain, rst, rst+lhs, mediawiki, textile, rtf, org, asciidoc,
                odt, docx, epub
Options:
  -f FORMAT, -r FORMAT  --from=FORMAT, --read=FORMAT                  
  -t FORMAT, -w FORMAT  --to=FORMAT, --write=FORMAT                   
  -o FILENAME           --output=FILENAME                             
                        --data-dir=DIRECTORY                          
                        --strict                                      
  -R                    --parse-raw                                   
  -S                    --smart                                       
                        --old-dashes                                  
                        --base-header-level=NUMBER                    
                        --indented-code-classes=STRING                
                        --normalize                                   
  -p                    --preserve-tabs                               
                        --tab-stop=NUMBER                             
  -s                    --standalone                                  
                        --template=FILENAME                           
  -V KEY[:VALUE]        --variable=KEY[:VALUE]                        
  -D FORMAT             --print-default-template=FORMAT               
                        --no-wrap                                     
                        --columns=NUMBER                              
                        --toc, --table-of-contents                    
                        --no-highlight                                
                        --highlight-style=STYLE                       
  -H FILENAME           --include-in-header=FILENAME                  
  -B FILENAME           --include-before-body=FILENAME                
  -A FILENAME           --include-after-body=FILENAME                 
                        --self-contained                              
                        --offline                                     
  -5                    --html5                                       
                        --ascii                                       
                        --reference-links                             
                        --atx-headers                                 
                        --chapters                                    
  -N                    --number-sections                             
                        --no-tex-ligatures
.
.
.

な、なるほど。調べるのしんどいな。オプションは下記のURLで調べられる。


デモ

オンラインで試せるやつもあった。


けど、オンラインじゃなくてとりあえずREADMEだけダウンロードして変換してみる。

% pandoc -s README | less
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta http-equiv="Content-Style-Type" content="text/css" />
  <meta name="generator" content="pandoc" />
  <meta name="author" content="John MacFarlane" />
  <meta name="date" content="2012-01-27" />
  <title>Pandoc User's Guide</title>
</head>
.
.
.

といった感じ。ファイルで出力するなら、

% pandoc -s README -o readme.html

それぞれファイルのフォーマットを指定するなら、

% pandoc -s -f markdown -t html README -o readme.html

こうする。


自前で用意したMarkdownファイルを変換してみる

EvernoteとMarkdownでごちゃごちゃやってるのでちょっとそのとき使う簡単なテストファイルを通して精度を確かめる。

% pandoc -s -f markdown -t html test.md -o test.html

tableがうまく変換されなかった。

First Header | Second Header

------------- | -------------

Row1 Cell1 | Row1 Cell2

Row2 Cell1 | Row2 Cell2



First Header Second Header Third Header
------------ ------------- ------------
Content Cell Content Cell Content Cell
Content Cell Content Cell Content Cell


First Header | Second Header | Third Header

----------- |
-----------: | -----------:

Left | Center | Right

Left | Center | Right

どれもだめらしい。

ドキュメントを確かめてみると、

とのこと。Markdownの正しいテーブルの書き方って結局何なんだ…...。とりあえずこっちに差し替えてやってみるとうまく表が作られた。

-------------------------------------------------------------

Centered Default Right Left

Header Aligned Aligned Aligned

----------- ------- --------------- -------------------------

First row 12.0 Example of a row that

spans multiple lines.



Second row 5.0 Here's another one. Note

the blank line between

rows.

-------------------------------------------------------------

今までみたテーブルよりかきやすいといえば書きやすいけど。そもそもmarkdownの表はどれも扱いにくい。

その他オプションを試したんだけど目的のものがすぐ見つかってしまったのでやめた。Markdownに関して言えば、若干公式?の記法と異なる部分が見受けられる。そこにオプション混ぜると公式通りだったりそうじゃなかったり...。テーブルだけじゃなかったよ。精密さを求めるなら気軽にデータ投げられない。

2012-06-02

全部無料で。EvernoteにMarkdownで書いたCSS対応の文書を投稿するやり方

MacのEvernoteのクライアントは使いにくい。とくにMarkdownが使えないのは辛い。リッチテキストだって全然リッチにできない。もっときれいなデザインの文書を投稿したい。

そんなことを思っていて、じゃあMouというMarkdownエディタで書いた文書をEvernoteに保存できるようにしたらいいんじゃないか、という誰もが考えそうだけどあえて誰もやらなかった(めんどくさいから)であろうようなことをできるようにした。

結果的にどうなったかというと、下の画像のようなCSSでデザインされた文書をEvernoteに投稿できるようになった。

f:id:sandai:20120602015847p:image


デザインはMouで用意されているgithub.cssをそのまま割り当てている。

これはAppleScriptっていうマイナーな言語で書いたスクリプトを使う。ちょっと試験的なんだけど今回はそのスクリプトを公開。


必要なもの

Mouの文書をEvernoteに投稿するにはMouとその内容を投稿するスクリプトの2つ必要。

  • Mou
    • 無料のMarkdownエディタ。ヘタな有料のアプリより良かった
  • mouever.applescript
    • Mouで書いた文書をEvernoteに投稿するスクリプト。名前は適当
Mou
mouever.applescript

ちなみに私はAlfredというランチャーを使ってスクリプトを実行している。設定画面のFeaturesのAppleScriptsにチェック入れるとAppleScriptも表示されるようになる。(拡張子が.scptじゃないと見えないっぽいので注意)

実行方法についてはお好みで。


使い方

Mouで適当に文書書く書く。

f:id:sandai:20120602015848p:image


文書ができたらさっきダウンロードしたスクリプトを実行。

下の画像は/Users/ユーザ名/Library/Scripts/以下にmouever.scptを置いて、http://d.hatena.ne.jp/shinya_ohtani/20091109/1257777144の設定でメニューバーから実行しようとしている例。

f:id:sandai:20120602015849p:image


実行したときに「システム環境設定」の「ユニバーサルアクセス」で「補助装置にアクセスできるようにする」にチェックが入っていない場合、それの設定を促す案内が出てくるのでチェックを入れる。これをしないとうまいこと動作しないので注意。

そうしてしばらくするとダイアログが表示される。

このダイアログの「設定」ボタンで、

  • ノートの名前
  • 投稿先のノートブック
  • タグ

を設定することができる。

f:id:sandai:20120602015850p:image


適当に設定してみた。たぶんなんとなく使えると思うのでこのあたりの詳細は省く。

f:id:sandai:20120602015851p:image


投稿が完了すると完了のダイアログが表示されるので、これで終わり。

f:id:sandai:20120602015852p:image


投稿した文書のEvernoteでの画面。デザインそのまままんもすうれぴー。

f:id:sandai:20120602015853p:image


その他細かい部分も他人が使えるレベルにはしたので実用できると思う。


デザインカスタマイズ

投稿する文書のデザインを変更したい場合。スクリプトを直接いじる必要がある。スクリプトのソースコードの上らへんに下の画像のような部分があるのでここいじればいい。

f:id:sandai:20120602015854p:image


ただ、少し癖があるというか、いくつかの構造は特別に割り当てたりしているのでそのへんの仕組みを把握しないとうまくできない。というか私自身もめんどくさくてやっつけ。

ほんとはCSSファイル読み込むだけでできるようになりゃいいなとは思うけど時間かかりそうだからやめた。ある程度限定したフォーマットなら簡単に対応できるのだろうけど。

まあ、いろいろデザイン変えたくなったらそのうちちゃんと何かやるかも。


その他のMarkdown系のアプリでも使えるようにできる

このEvernoteにきれいな文書を投稿するスクリプトはどのエディタやアプリでも簡単に対応できると思う。というかできた。

というのも、Mouより先にMarkdown ProというMacの有料アプリを買ってて、書いたスクリプトはもともとMarkdown Pro用のスクリプトだった。で、後からMouに気づいて、スクリプト書き換えたらちょろかったので簡単だなーと。たぶん他のエディタでも似たような修正を加えればいける。

そういえば私は無料で済まなかったんだけどもまあいいや。自分好みのエディタで扱える方法についてもそのうちいつか書く。


Markdown記法早見表

おまけ。これだけ覚えれば問題ないという記法を自分用にまとめてたのでそれものせておく。

Markdown記法は同じ結果を出力するのに記法が違うときがあって、その場合簡単な書き方を採用している。

見出し
markdown表示html
# 見出し1

見出し1

<h1>見出し1</h1>
## 見出し2

見出し2

<h2>見出し2</h2>
### 見出し3

見出し3

<h3>見出し3</h3>
#### 見出し4

見出し4

<h4>見出し4</h4>
##### 見出し5
見出し5
<h5>見出し5</h5>
###### 見出し6
見出し6
<h6>見出し6</h6>
段落
markdown表示html
普通の文章です

普通の文章です

<p>普通の文章です</p>

普通の文章です
普通の文章その2です

普通の文章です 普通の文章その2です

<p>普通の文章です
普通の文章その2です</p>

この文は文末に半角スペースを2つ入れています
普通の文章その2です

この文は文末に半角スペースを2つ入れています
普通の文章その2です

<p>この文は文末に半角スペースを2つ入れています<br />
普通の文章その2です</p>

文末に半角スペースを2つ入れることで改行を表現することができる。全然知らなくてずっと悩んでた。

文字装飾
markdown表示html
*イタリック体*ですイタリック体です<em>イタリック体</em>です
*太字*です太字です<strong>太字</strong>です
***イタリック体と太字***ですイタリック体と太字です<strong><em>イタリック体と太字</em><strong>です
~~打ち消し線~~です打ち消し線です<del>打ち消し線</del>です
リンクとアドレス
markdown表示html

[googleへのリンク](http://google.co.jp/)です

googleへのリンクです

<a href="http://google.co.jp/ ">googleへのリンク</a>です

メールアドレスは<example@example.com>メールアドレスはexample@example.com

メールアドレスは<a href="example@example.com">example@example.com</a>

インラインコード
markdown表示html
文章中に`<li>`といったコードを表示する目的で使用します文章中に<li>といったコードを表示する目的で使用します文章中に<code>&lt;li&gt;</code>といったコードを表示する目的で使用します
`` `バッククォート` ``の表示方法です`バッククォート`の表示方法です<code>`バッククォート`</code>の表示方法です
リスト
markdown表示html
* リスト1
    * リスト1-1
        * リスト1-1-1
    * リスト1-2
* リスト2
  • リスト1
    • リスト1-1
      • リスト1-1-1
    • リスト1-2
  • リスト2
<ul>
<li>リスト1
<ul>
<li>リスト1-1
<ul>
<li>リスト1-1-1</li>
</ul>
</li>
<li>リスト1-2</li>
</ul>
</li>
<li>リスト2</li>
</ul>
1. リスト1
    1. リスト1-1
        1. リスト1-1-1
    2. リスト1-2
2. リスト2
  1. リスト1
    1. リスト1-1
      1. リスト1-1-1
    2. リスト1-2
  2. リスト2
<ol>
<li>リスト1
<ol>
<li>リスト1-1
<ol>
<li>リスト1-1-1</li>
</ol>
</li>
<li>リスト1-2</li>
</ol>
</li>
<li>リスト2</li>
</ol>
* リスト1
    * リスト1-1
        1. リスト1-1-1
        2. リスト1-1-2
        3. リスト1-1-3
    * リスト1-2
* リスト2
  • リスト1
    • リスト1-1
      1. リスト1-1-1
      2. リスト1-1-2
      3. リスト1-1-3
    • リスト1-2
  • リスト2
<ul>
<li>リスト1
<ul>
<li>リスト1-1
<ol>
<li> リスト1-1-1</li>
<li> リスト1-1-2</li>
<li> リスト1-1-3</li>
</ol>
</li>
<li>リスト1-2</li>
</ul>
</li>
<li>リスト2</li>
</ul>

箇条書きリストについては、*の他に、

  • +
  • -

などでも利用できる。

引用
markdown表示html
> 引用された文章です
> 引用された文章です

引用された文章です 引用された文章です

<blockquote>
<p>引用された文章です
引用された文章です</p>
</blockquote>
> 引用されたこの文は文末に半角スペースが2つ入れています
> 引用された文章です

引用されたこの文は文末に半角スペースが2つ入れています
引用された文章です

<blockquote>
<p>引用されたこの文は文末に半角スペースが2つ入れています<br />
引用された文章です</p>
</blockquote>

> 引用された文章です

> 引用された文章です

引用された文章です


引用された文章です

<blockquote>
<p>引用された文章です</p>
<p>引用された文章です</p>
</blockquote>

文末に半角スペース2つ入れることで改行を表現できる。最初は気が付かないこともあると思うので注意。

整形済みテキスト
markdown表示html
    行頭にタブか4つの半角スペースが入ってます
    行を続けるときもタブか4つの半角スペースをいれます
行頭にタブか4つの半角スペースが入ってます
行を続けるときもタブか4つの半角スペースをいれます
<pre>
<code>行頭にタブか4つの半角スペースが入ってます
行を続けるときもタブか4つの半角スペースをいれます
</code>
</pre>

表示されているものはこのブログで利用しているpre要素のCSS。デフォルトでこうはならない。

画像
markdown表示html

![alt属性のテキスト](https://www.google.co.jp/images/srpr/logo3w.png)

alt属性のテキスト
※表示が大きいので手を加えて小さく表示しています

<img src="https://www.google.co.jp/images/srpr/logo3w.png" alt="alt属性のテキスト" />

境界線
markdown表示html
---
<hr>

短かくて分かりにくいが<hr>タグ。最低ハイフンを3つ並べればhrになる。3つ以上でもhrになる。

markdown表示html
タイトル1 | タイトル2
------------- | -------------
筋肉愛    | 贅肉愛
蛋白愛    | 油愛
タイトル1タイトル2
筋肉愛贅肉愛
蛋白愛油愛
<table>
<thead>
<tr>
<th>タイトル1</th>
<th>タイトル2</th>
</tr>
</thead>
<tbody>
<tr>
<td>筋肉愛</td>
<td>贅肉愛</td>
</tr>
<tr>
<td>蛋白愛</td>
<td>油愛</td>
</tr>
</tbody>
</table>

markdownはこの他にもいくつか表を作成できる記法が存在するがどれも面倒なんで使わない方がいい。そもそも表自体が作るのめんどくさい。

2010-10-15

Emacs使いのミサワがWindowsで(NT)Emacs使うってそれどこ情報よー

環境はWindows7。情報はインターネットとかWEB+DB PRESS Vol.58|技術評論社とか。

地獄のミサワの「女に惚れさす名言集」とか拝借。なんとなくマイブームなので、そのとき思いついたことをつらつらっと。ぬるっと。


NTEmacsをダウンロード

NTEmacsはEmacsをWindows向けに使いやすくしたもの。一応純正のEmacsもWindows向けは用意してある。

私は最初にこのEmacsをいろいろいじっていたけど、どうもEmacsは日本語入力が全く使い物にならない。SKKというのがあるけど変換があれだったり、パッチ当てればなんとか使えるようにはできるらしいけど、知識が無いし気力もないしで痔になりそうなのでやめた。

でも、「かぁーっ!Emacs使いすぎて小指折れたわー!小指に痛みをおぼえることがあるってEmacs - Wikipediaに書いてあるけどヨユーで骨折っすから!おれ、ヨユーでやっちゃいましたから!かぁーっ!」

というEmacs使いのミサワになりたい。


いや、なりたくない。そんなのには断じてなりたくない。なりたくないけどEmacsは使ってみたい。

それで結局Emacsやめて、NTEmacsをインストールして使ってみた。そしたらEmacsと特に大きな違いも無く、日本語も普通にインライン入力できるし、開発も停滞していないようなのでNTEmacsで問題ないようです。

あとNTEmacsはgnupackというのがあるけど、いろいろ便利なものをパッケージにしたもの?みたいなので、Emacsだけ使いたいのであればNTEmacsxxxx.exeのみで良いかなと思いますが、あってるかな。とりあえず単体で使っていきます。

以後NTEmacsはEmacsと表記。


インストール

ダウンロードしたexeファイルを悠久の時を超え時空の狭間より呼び出されし神器マウースの封印を解き放ち彼の西方の地を神速の速度を超え再々押したまえ。

(ダブルクリックする)


はい。emacs-23.2というフォルダができた。とりあえずC:\emacs-23に置いた。


起動

確認のためにbinフォルダにあるrunemacs.exeを起動。ecmas.exeというのがあってそっちが本命っぽいけど、違うらしい。立ち上げたらメニューが英語だったり古めかしい画像があったりして全然よく分からなくて鬱になった初めてのEmacs。

私が平常心で使いやすいようにいろいろ準備していきます。


ホームディレクトリを設定

ホームディレクトリを設定すると.emacs.dというフォルダが自動生成されるようなので、その仕組まれた通り従順なる下僕となって設定します。

Windowsは、このホームディレクトリというアットホームな場所が最初から設定されていないので、環境変数をいじって設定する。Windows7の場合、

  1. コンピューターアイコンとかコンピュータウィンドウ上で右クリック
  2. コンテキストメニュー中のプロパティを左クリック
  3. 開いたウィンドウの左から「システムの詳細設定左クリック
  4. 詳細設定タブで環境変数てボタンをレフトにクリック

で環境変数いじれます。クリックのしすぎで骨折しないよう気をつける。足元とかもねッ。次にユーザ環境変数で新規作成をして、

  • 変数名
    • HOME
  • 変数値
    • C:\Users\ユーザ名

を入力してOKを押す。変数値とはホームディレクトリの場所。どこでもいいとは思いますが、私は他のユーザいないけど上記のところに。

Windows7ではCドライブ中にあるユーザーというフォルダのうち、自分のユーザ名のフォルダにあたる。Windows7以外のフォルダ構成は分かりませんが、vitaはほぼ同じだったはず。XPは少し違うかも。

ここまでできたらPCを再起動。起動したら、

  • C:\Users\ユーザ名

の場所で.emacs.dフォルダが生成されていることを確認。


・・・もしかしてできていない?その理由は環境変数の設定がおかしいから?それともオレが今シャブやってるからかな?


はい。


elispフォルダとinit.elを生成

.emacs.d以下にelispフォルダとinit.elファイルを作成。

  • .emacs.dフォルダ
    • elispフォルダ
    • init.el

このような構造。WEB+DB PRESS Vol.58にはconfフォルダも作ってありますが、どう扱えば良いのかわからないので辞めました。

ここからinit.elにいろいろ設定を書いていきます。emacsはこれをいじって機能を拡張していくようです。また、elispフォルダにはEmacsの機能を拡張するときに必要なelispファイル(xxx.elのファイル)を入れていくようで。

elisp(Ecmas Lisp)とはEmacsで利用されているプログラミング言語で、これでEmacsをあんなことやこんなことができるみたい。

この記事ではelispで書かれたコードを保存しているファイルを「elispファイル」とし、「elisp」はEmacs Lispのことを指します。ちょっとややこしい。


・・・ん?俺の方もややこしいだって?いくらオレがジョニーデップに激似だからって、そこまで区別付かないほどじゃないだろ?オーラで分かるでしょ?オーラで?


はい。


その前にload-pathの設定

load-pathというのはEmacsからelispファイルを読み込むときに、elispファイルはこのフォルダに詰め込んでいますよってことを表すパス。load-pathを設定しないと拡張されないんですね。

ではさっきelispフォルダを作ったのでこれにパスを通す。

そのための設定はinit.elに記述。以下のコードを先ほど作ったinit.elにコピペ。

;;; load-pathの追加関数
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory (expand-file-name (concat user-emacs-directory path))))
        (add-to-list 'load-path default-directory)
        (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
            (normal-top-level-add-subdirs-to-load-path))))))

;; load-pathに追加するフォルダ
;; 2つ以上指定する場合の形 -> (add-to-load-path "elisp" "xxx" "xxx")
(add-to-load-path "elisp")

ファイルをEmacsで開いた場合、貼り付けはCtrl-yを押す。Ctrl押してからy押し。こういったキーバインドの操作は設定作業をしていると自然と慣れるでしょうか。慣れなきゃ困るなあ。

コピペしたらCtrl-x Ctrl-sで保存。Ctrl押しながらxを押して、xを離してからsを押す。

ウィンドウの一番下にミニバッファって欄があるのですが、そこにWrote c:〜って表示されれば保存できたということになるみたい。これでパスが通りました。今後、elispファイルはこのelispフォルダにぶっこんでいきます。

  • コードはWEB+DB PRESS Vol.58のp74より拝借。no titleにこの本のサンプルコードが公開されているのでそっちもどうぞ。

Emacsの一般的な設定

elispファイルをインストールする前にEmacsの基本的な部分を設定。私はほとんど本のコード参考にしました。

;;; スタートアップ非表示
(setq inhibit-startup-screen t)

;;; ツールバー非表示
(tool-bar-mode 0)

;;; ファイルのフルパスをタイトルバーに表示
(setq frame-title-format
      (format "%%f - Emacs@%s" (system-name)))

;;; Windows で英数に DejaVu Sans Mono、日本語にMeiryoを指定
(when (eq window-system 'w32)
  (set-face-attribute 'default nil
                      :family "DejaVu Sans Mono"
                      :height 100)
  (set-fontset-font nil 'japanese-jisx0208 (font-spec :family "Meiryo")))

;;; バックアップを残さない
(setq make-backup-files nil)

;;; 行番号表示
(global-linum-mode)

;;; 文字コード
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8-unix)
(set-default-coding-systems 'utf-8-unix)
(setq file-name-coding-system 'sjis)
(setq locale-coding-system 'utf-8)

;;; 括弧の範囲内を強調表示
(setq show-paren-delay 0)
(show-paren-mode t)
(setq show-paren-style 'expression)
;; 括弧の範囲色
(set-face-background 'show-paren-match-face "#800")

;;; 選択領域の色
(set-face-background 'region "#555")

;;; 最近使ったファイルをメニューに表示
(recentf-mode 1)
(setq recentf-max-menu-items 10)
(setq recentf-max-saved-items 10)

フォントについてはDejaVu Sans Monoを利用。もっぱら最近はInconsolataが評判良いですが、私の環境では文字の強調が強く目が疲れる。

DejaVu Sans Monoは線がスマートなのでもっさりせずシンプルで好みです。おすすめ。日本語はメイリオ使ってます。実はメイリオだけでも英文字含めて十分きれい。


まあ、もっとも、キミの瞳のきれいさにはどのフォントもかすんで見えるけどね・・・。あるいは俺が今シャブやっているからだろうね。


はい。

他の方々の設定も参考にどうぞ。


elispファイルをインストール

だのに俺はキミのハートからアンインストール・・・ってか。それは俺がシャブをやったからだろうね。完璧に。


はい。

Emacsの機能を拡張できるelispファイルをいくつかインストール。たぶんだいたい一般的な拡張かと。そこまで深く調べていないので。


auto-install.el

拡張のインストールを自動化してくれます。以下よりauto-install.elをダウンロード。

ダウンロードしたファイルを~/.emacs.d/elisp以下に置く。そしてinit.elにauto-installの設定を記入。

;;; auto-install.el
;; elispのインストール自動化
;; http://www.emacswiki.org/emacs/download/auto-install.el
(when (require 'auto-install nil t)
  (setq auto-install-directory "~/.emacs.d/elisp/")
  (auto-install-update-emacswiki-package-name t)
  (auto-install-compatibility-setup))

式の最後でCtrl-x Ctrl-eを押して設定を反映させます。Ctrl押しながらx押して、xを離してからeを押す。

ウィンドウの一番下にあるミニバッファにInstall-elisp compatibility installed.ってメッセージが出てればインストール完了。

Emacsを再起動しても反映されるけど面倒なのでCtrl-x Ctrl-eとやった方が便利。これはeval-last-sexpのキーバインドでその場で式を評価しているわけですが、詳しくは検索で調べてみてください。


redo+.el

EmacsにはもともとUndoは標準で付いているのですがRedoがない(あるといえばあるけどwin系の人はきっと使いづらい)のでelispで拡張すると便利。さっきインストールしたauto-installを使って、redo+.elをインストールしてみる。

  1. Emacsが開いている状態でAlt-xを押す
  2. ミニバッファに「M-x」と表示される
  3. そこに「install-elisp」と入力してEnter
  4. 今度は「URL ():」と表示されたと思う
  5. そこにhttp://www.emacswiki.org/emacs/download/redo+.elのURLを貼り付けてEnter
    • 貼り付けはCtrl-y
  6. redo+.elのコードがEmacsに読み込まれてダウンロードされたはず
  7. そうしたらCtrl-c Ctrl-cと入力。Ctrl押しつつcを2回押す
  8. ミニバッファにInstallation is completed.って表示されたら完了

あとはinit.elにredo+.elの設定を記入。

;;; redo+.el
;; kbd -> C-.
;; http://www.emacswiki.org/emacs/download/redo+.el
(when (require 'redo+ nil t)
  (define-key global-map (kbd "C-.") 'redo))

UndoはCtrl-/で使えるので、私は左隣のCtrl-.にRedoを設定しました。キーバインドを変えたかったら(kbd "好きなとこ")に。

auto-installはダウンロードからバイトコンパイルまでの手間がかからず楽ですね。他のファイルでも同じ要領でできるので覚えておくとインストールするときに便利。


バイトコンパイル

xxx.elをバイトコンパイルすればxxx.elcというファイルが出力されます。こうすればEmacsはxxx.elではなくxxx.elcを読み込みます。xxx.elcはEmacsにとっては読みやすい形式で内容が記述されているため、その読み込み速度や実行速度がだいたい速くなるとのこと。

なのでelファイルは基本的にバイトコンパイルしておくと良いようです。それでは、redo+.elファイルはauto-installによってバイトコンパイルまで済んでいるので、auto-install.elをバイトコンパイルしてみます。

  1. Emacs開いた状態でAlt-x
  2. M-x byte-compile-fileと入力しEnter
  3. Byte compile file: ~/.emacs.d/elisp/auto-install.elと入力しEnter
  4. ミニバッファにWrote c:〜と表示されたら完了

C:\Users\ユーザー名\.emacs.d\elisp以下で確認してみると、auto-install.elcというファイルが生成されていた。こういう作業をやってみると、auto-install.elのありがたさがよく分かりました。楽です。


menu-tree.el

Emacsのメニューを日本語化できます。慣れたらメニューは利用しなくなるでしょうがインストールします。

  1. http://www11.atwiki.jp/s-irie/pages/13.htmlからダウンロードして解凍
  2. menu-tree.elをC:\Users\ユーザ名\.emacs.d/elisp以下に置く
  3. Emacs開いた状態でAlt-x
  4. M-x byte-compile-fileと入力しEnter
  5. Byte compile file: ~/.emacs.d/elisp/menu-tree.elと入力しEnter
  6. ミニバッファにWrote c:〜と表示されたら完了

init.elに設定を記述。

;;; menu-tree.el
;; メニュー日本語化
;; http://www11.atwiki.jp/s-irie/pages/13.html
(require 'menu-tree nil t)

式の最後の位置でCtrl-x Ctrl-eで反映させると、メニューが日本語に。


elscreen.el

それぞれのバッファをタブで表示させることができます。バッファとは編集画面のデータそのものを指すようですが、ここではファイルという認識で良いかなと。だから、それぞれのファイルがタブブラウザのような操作で切り替えられるってイメージ。視覚的に分かりやすくて便利。


elscreen.elを利用するためにはまずAPELというライブラリが必要なので、それをインストールしてからelscreen.elをインストール。

URL先からAPELをダウンロードして解凍。現在は10.8が最新。

解凍したらそのうちのmakeit.batを開いて、105行目あたりの、

set PREFIX=
set EMACS=
set LISPDIR=
set DEFAULT_MAKE_ARG=

以下のように編集。

set PREFIX=C:\emacs-23.2
set EMACS=%PREFIX%\bin\emacs.exe
set LISPDIR=C:\Users\ユーザ名\.emacs.d\elisp
set DEFAULT_MAKE_ARG=

自分の環境に合わせて値は変更。あとemacs.exeはrunemacs.exeでないことに注意。ここミスった。次はAPEL-CFGを開いて、以下の2行を最後に付け足し。

(setq APEL_DIR "C:/Users/ユーザ名/.emacs.d/elisp/apel")
(setq EMU_DIR "C:/Users/ユーザ名/.emacs.d/elisp/emu")

それぞれ編集して保存できたら、コマンドプロンプトからAPELのフォルダにアクセス。まず「cd 」と入力し、それからAPELのフォルダをドラッグ&ドロップして、

C:\Users\ユーザ名>cd C:\Users\ユーザ名\Desktop\apel-10.8

これでEnter。今度は、

C:\Users\ユーザ名\Desktop\apel-10.8>makeit.bat elc

でEnter。xxx.elファイルをxxx.elcファイルにコンパイルしたことになる。そしてインストール。

C:\Users\ユーザ名\Desktop\apel-10.8>makeit.bat install

このとき2つのフォルダに分けられてライブラリがインストールされる。

  • apel
  • emu

それぞれC:\Users\ユーザ名\.emacs.d\elisp以下に生成されていることを確認。もし無い様であれば、C:\emacs-23.2\site-lispにあるかも。APEL-CFGで指定した2行を付け足していないと、そういったところにインストールされます。私はされてどこにあるのか分からず困りました。


次はelscreen.elインストール。

現在1.4.6が最新のようです。

  1. elscreen.elをC:\Users\ユーザ名\.emacs.d/elisp以下に置く
  2. Emacs開いた状態でAlt-x
  3. M-x byte-compile-fileと入力しEnter
  4. Byte compile file: ~/.emacs.d/elisp/elscreen.elと入力しEnter
  5. ミニバッファにWrote c:〜と表示されたら完了

あとはinit.elに設定を記述。

;;; elscreen.el
;; バッファをタブ化
;; http://www.morishima.net/~naoto/software/elscreen/
(setq elscreen-prefix-key "\C-z")
(require 'elscreen)
(if window-system
    (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
  (define-key elscreen-map "\C-z" 'suspend-emacs))

Ctrl-z Ctrl-cで新規ウィンドウを生成できることと、Ctrl-z Ctrl-kでウィンドウとバッファを閉じるぐらい覚えました。

ツールバーからも操作できるのでよくわからなければそこから指定すればいいし、その他の設定や操作は調べたりソース読んだりします。


Auto Complete Mode

入力補完機能。プログラミング時など便利。

インストール先は~/.emacs.d/elispを指定。init.elの設定はあちらでも書いてありますが、

;;; Auto Complete Mode
;; 自動補完機能
;; http://cx4a.org/software/auto-complete/index.ja.html
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/elisp/ac-dict")
(ac-config-default)

そのまま。設定や使い方などは参考URL参照。


ここまできたら

箇条。今までの要領で大丈夫でした。


今のところこれだけ。これ以上はまた後で。適切に使いこなせるまでにはかなり時間がかかりそうですが、何事もやってみなければいけないと思うのでがんばってみます。

もし何かおすすめの設定や拡張がありましたら教えてください。コメントし難い記事かもしれませんが。普通に真面目にやってます。


表記について

Ctrl-x Ctrl-sのキーバインドはバッファの保存に当たりますが、通常はC-x C-sなどと略称が一般的。この記事では冒頭での説明が面倒なのでCtrlと表記していましたが、一般的な表記は、

  • CtrlキーはC
  • AltキーはM
  • ShiftキーはS

とそれぞれ表記されています。当たり前のことすぎて書かれている記事が少ないですが念のため。AltがMなのはMetaキーのMということだそうで納得。ついでにCはControlで、SはShiftとそのまま。

基本的にこれらのキーを基本に操作するのがEmacsのようで、たとえば、

  • Emacsの終了はC-x C-c
  • インクリメンタルサーチはC-s
  • コマンドの実行はM-x

など。こういった基本となるC・M・Sキーは修飾キーと総称されています。Sはまだ使ったことないけど。ああ、でもSKKで使ったことある。これが苦痛でEmacsやめたんだ。慣れるまで待てませんでした。


操作のキャンセル方法

現在の操作をキャンセルする方法は、

  • C-g(Ctrl-g)
    • 現在行っている操作をキャンセル
  • ESC-ESC-ESC
    • 現在の状態をできる限りリセット

の2つがありますが、私はまずC-gをタイプして、どうにもならなかったらESC-ESC-ESCをタイプしています。


その他参考になりそうなURL


雑話

使っていてブルーになったら

Emacsやvimはだいぶ前にも挑戦したことがあるのですがブルーになったのでやめました。今回はなぜブルーにならなかったかというと、

  • マウスが壊れた
  • キーバインド覚える気がなかった
  • WEB+DB PRESS Vol.58のおかげ
  • 地獄のミサワさんのおかげ
    • 気分的に

いつか慣れます。慣れなかったら泣けば良いんです。ブルーになったら泣いて慣れるまで続けます。私は器用でないのでネガティブになること前提で挑むスタンスです。そこら辺を心得た上でのネガティブにポジティブなんです。

vimは?

個人的には基本となるキー(C, M, S)があって覚えやすいかなってことでEmacsに。vimは、Windowsではhttp://www.kaoriya.net/が利用できます。

どっちにしようかなってときは、触ってみて気分が良い方を選ぶのが良いかと思います。

小指折れる?

折れない。Emacsで鍛えられれば小指デコピンで地面がえぐれるほどの小指を持つ者になれるらしい。クククク。我が小指のデコピンに勝るデコピン無し!!(ウソだよ)

なんでジョニーデップに激似なの?

あれ?オレがジョニーデップに激似っていつばれた?おいおい、広めないでくれよー?それが広まるとオファーくるだろ?ウッドからオファーくるだろ?


はい。いろいろ設定できてよかった。コメントとかしっかり書かずにやっていたので分からなくなって、一度爆発しました。