でらうま倶楽部

バカってゆうか、ゲームを作る事しか能の無いプログラマの、面白おかしな日々を綴ってみる実験。

org-mode

org-modeのHTML書き出しでソースコードのレイアウトが崩れる問題解決

org-mode-unicorn-logo
コード書いとる??

電子書籍で出版した拙書3冊。すべてemacsのorg-modeを使っています。
org-modeでテキスト書く⇒HTML形式出力。画像や表、ソースコード入りのHTMLファイルがいい感じに書き出せます。レイアウトの装飾はすべてCSSで記述。素晴らしい!!

ところが…ソースコードの書き出しで一部インデントが崩れてしまう現象が…
 
photo1
org-modeの不具合かしらん…と思ってサポートのメアドに不具合報告を再現情報込みで送ってみるもノーリアクション。この問題、しばらく放置していたのですが、教えに行ってる専門学校で配布する資料はもっぱらorg-modeでテキスト⇒HTML形式。さすがにインデントが崩れが無視できなくなってきました。

そこで、ちょいと腰を据えてorg-modeの変数を1つ1つ調べてみ…あった。

org-src-preserve-indentation

ソースコードブロックのインデントはそのまま出力する設定、あるじゃーん。初期値は「インデントを設定値で揃える」

photo2

おおお。崩れな〜い!!

だからワシの送った不具合報告はスルーされとったのか!! 苦笑

ちょっと面倒でも、時間を確保して調べてみるもんだね。

ではまた次回!!

もしかして emacs こそ電子出版に最適なツールかもしれない

photo
こんにちは!
みなさん今日もバリバリemacs使ってますか?

先日電子書籍として出版した『チュートリアル形式で始めるOpenGL[2D編]』ですが、

emacs + org-mode → html

という流れで原稿を作成しました。

いやほんとこれが異常なほど効率的で、きっと世のemacs使いはこれを使ってバリバリ電子書籍を出版してるに違いない!と思えてしまうほどに惚れ込んでしまいました。

というわけで、アウトラインプロセッサorg-mode。html出力に限った用途での使い方を紹介してみたいと思います。すっげえニッチな記事だね。まあそれはいつもの事か。


org-modeはemacsに標準添付されているのですが、ちとバージョンが古いので、公式サイトから最新版を落としてきましょう。ファイルを解凍したらlispフォルダの中身全部と、contlib/lispフォルダのhtmlize.elを、自分のローカルなlisp置き場に置いて、init.elにはこう書きます。

(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
;; 以下はお好みで
(setq org-export-allow-bind-keywords t)
(setq org-export-with-sub-superscripts nil)

はい完了!emacsを再起動すれば、もう最新版のorg-modeが使えるようになっています。

では早速、test.orgを開いて、以下のように打ち込みます。「ほげほげ」とか「ふがふが」が嫌な人は適時文章を流し込んでください。

#+TITLE: org-modeのHTML書き出しテスト

#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="test.css" />

* テスト1
  <<hoge>>
  ほげほげほげほげほげ

** 小見出し1
   ふがふがふがふがふがふがふがふがふがふがふがふがふがふがふがふがふがふが

** 小見出し2
   強調は前後に空白を入れて「*」で挟む。 *こんな感じです* 文字の装飾は他にもあるので、org-mode同梱のpdfファイルに目を通してみてください。

   空行を入れてから書き始めると、「次の段落」扱いになります。

   + 順序無しリスト1\\
     行末に「\\」で同じ段落内での改行
     - さらに順序無しリスト\\
       ふがふがほげほげふがふがほげほげふがふがほげほげふがふがほげほげ

   + 順序無しリスト2\\
     ふがほげふがほげふがほげふがほげふがほげふがほげ

* テスト2
  ぴよぴよふがふがぴよぴよふがふがぴよぴよふがふがぴよぴよふがふが

** 小見出し1
   見出し(*のついている行)でTABを押すと、見出しを折り畳んだり展開したりもできる!

*** さらに小見出し1
    TABを押していい感じにインデントして書き出します

*** さらに小見出し2
    ちなみに、見出し以外は改行を無視します

    #+CAPTION: テーブルはこんな感じ
    | ほげほげ     | ふがふが         |
    |--------------+------------------|
    | ぴよぴよぴよ | ほげぴよほげぴよ |

   リンクは http://test.org と書いたり、[[http://test.org][リンク]] と書いたりします

** 小見出し2
   コードの挿入は
   
   #+BEGIN_SRC c++

#include <iostrem>

int main() {
  std::cout << "ほげほげ" << std::endl;
  return 0;
}

   #+END_SRC

   こんな感じなのですが、なんとemacsの色分けをそのまま出力してくれる!

** 原稿内でのリンク
   こうやって書くだけ。[[hoge][リンク]] 編集で段落が移動しても問題無し。


打ち終わったら C-c C-e h h と入力。はい!できました!!たったそれだけで同じ場所に test.html が出力されます。素晴らしい!あとは、test.cssを作っていい感じに装飾すれば、もう立派な原稿の出来上がりです。自分がそうした!
17
50
画像の挿入は

file:hoge.png

とだけ書けばよく、テーブルに至っては|(縦棒)と、中の語句を書きながら、適時TABを押してゆけばいい感じに整形してくれて至れり尽くせりです。たいていTABを押したら何とかしてくれるので、もうHTMLでテーブルを作る事はないだろうと思いましたw

org-modeの素晴らしい所は、

・目次を自動で生成してくれる(まさに電子書籍向け!)
・段落丸ごとを前後に移動するのも簡単(M-up、M-down)
・プログラム部分はemacsの色分けそのままで出力してくれる
・テキストファイルなので、他のエディタでも編集できる

などなど、挙げたらきりがありません。自分はとくに、プログラム部分をemacsの色分けと同じにしてくれるのが気に入ってます。

ひとつ前のバージョンですが、有志の方々によるマニュアルの邦訳もありますので、emacs使いの人!お暇な時にでも挑戦してみてはいかがですかな?


ではまた次回!

org-mode 8.0 画像入り日本語PDFをOSX10.8で出力するなら LuaTeX を使え!

こんにちは!

みなさん連休中はEmacsに何時間くらい触れましたか?

オレはずっと触っていたぜ!(白目)

さて…そんなEmacsのプラグインの中でも特に良く出来てると思っている「org-mode」ですが、まさか編集中のバッファを直接PDFファイルに書き出せるなんて思ってもみなかったので(HTMLファイルに書き出して喜んでいた程度)、ちょっと試してみたら、これが思った以上に道が険しかったのでした!

結論:OSX 10.8では「platexとdvipdfmxで変換」が使えないので「lualatex」を使う

という訳で、いつものようにその導入と設定についてメモ。
 
まず、macportsからTexLive2012パッケージ関連をゲット
あとで振り返ってみたら、こんだけインストールしてました。ちょっと時間が掛かりました。

sudo port install texlive-lang-cjk
sudo port install texlive-latex-recommended
sudo port install texlive-fonts-recommended
sudo port install texlive-luatex

ウェブ上にある諸先輩型の情報を眺めるに、「platexとdvipdfmxを併用すれば、日本語ファイルも問題なくPDF出力可能だぜ〜」という事で早速org-modeを設定して試してみたのですが、なんと画像が含まれる場合に dvipdfmx が途中で「Abort Trap 6」してしまうという不具合「死のトラップ6」が見つかっており、しかもこれがまだ修正されていない模様。あ、「死のトラップ6」は今オレが勝手に命名したった。

マジかよ…と思ったのですがここで諦めないでさらに調べてみたら「lualatex」なるコマンド一発で.texから.pdfに変換可能。という情報を見つける。でもorg-modeでの使用例が見つからない。グーグルせんせぇ…

惜しい!

でもやっぱり諦めきれないので、「platexとdvipdfmxで変換」する時の設定をあーだこーだと修正して、なんとかこの設定に辿り着きました…。でもきっといろいろ間違ってると思いますので、あとでそっと教えてくれると嬉しいです…。
 
(setq org-latex-classes '(("ltjsarticle"
            "\\documentclass{ltjsarticle}
\\usepackage{graphicx}
\\usepackage{color}
\\usepackage{atbegshi}
\\usepackage[unicode=true,bookmarks=true]{hyperref}
\\usepackage{bookmark} \\usepackage{url} [NO-DEFAULT-PACKAGES] [PACKAGES] [EXTRA]" ("\\section{%s}" . "\\section*{%s}") ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) )) (setq org-latex-default-class "ltjsarticle") (setq org-latex-pdf-process '("lualatex %b" "lualatex %b"))

※自分はorg-latex-default-classとorg-latex-pdf-processはEmacsの便利で楽なcustomize機能を使ってます

これで無事、org-modeから直接、画像入りの日本語PDFが出力できるようになりました!

#+TITLE:org-modeからPDFを書き出す
#+OPTIONS: \n:t


* こんな感じに日本語で書いても大丈夫!
  org-modeからHTMLに出力できるのは知っていたのですが、まさかPDFでも書き出せるとは思ってもみませんでした。
*** ふがふが
    こんな感じに画像が挿入されていても、問題なく書き出してくれます。org-modeとluaTeX最高!

    #+ATTR_LaTeX: :width 5cm
    file:test.png
*** ほげほげ
    あとは挿入する画像のサイズの調整とか、文字フォントの埋め込みとか、諸々調整が残ってるけどとりあえずオッケィ!

こんな感じにorg-modeでテキスト書いて、PDFに書き出してみると…

test
うはっぁああ!やったあああぁぁぁああ!

スッキリ!!

ではまた次回。

Emacs 巷はバージョンアップ祭り開催中(23.2)。でも指をくわえて見てるしか…!

photo1Emacsのバージョンが23.2になったのでいそいそとバージョンアップ作業。

特にWindows環境は、公式バイナリで日本語がインライン入力できるようになるという、嬉しすぎる機能強化があったので期待大。でも若干いまさら感もあり(笑)

ま、UNIX畑のソフトだからねー。Windowsで使うには色々諸々工夫が必要なのだ。でも時間を掛ければそのへんのテキストエディタより格段に使いやすくなるはずなので我慢の子。使い古した道具が手に馴染む感じ。

そしてあえなく玉砕。

WindowsXPだとConsolasフォントを指定すると激重になる件が相変わらず。ハンパなく重い。これじゃ使いモノにならんので思い切ってバグレポ書くべ…と思って検索してみたら、やっぱり上がってたよバグレポ。なんだよもう!

という訳で、この件FIXされるまでバージョンアップはおあずけになりました。Macだとぜんぜん問題ないのになー。

Macの場合、23.2のソースを取ってきて

./configure --with-ns --without-x
make
make install

でなんの問題も無くバイナリが出来あがる。もちろん64bit。素晴らしい!


で、Consolas問題で四苦八苦してた時になんとなく見つけたEmacs23.2のTips…とか?

  1. set-face-foregroundで色を変えてると、org-modeの色分けが変になるんで、カスタマイズ機能を使って指定し直す必要がある。
  2. (setq redisplay-preemption-period nil)で、描画が重い時にそれなりに描画完了を待ってくれるようになる。
  3. フォント設定は
    (set-frame-font "Bitstream Vera Sans Mono-9")
    みたいに書く。いいかげん set-default-font は使うなって事らしい。
  4. Mac版で簡易的にフルスクリーンにしたければ、フレームの幅と高さに1000とか大きな値を設定すればよい。23.2からはいい塩梅にサイズ調整してくれる。
  5. org-mode、なにげにバージョンが上がって6.36になってた。

では次回までごきげんよう!

なぜかパッチの存在しないEmacs22.3で日本語をインライン入力を実現する

ええーっ!

もう新しなっとりますよ…6.35gだって。
org-modeめ!

でも、そのぶんどんどん不具合が解消されたり便利になってるって事だよね~。

んで、部長の開発環境。
白状しますが、一個だけ妥協していた部分がありました。

Windows版Emacs22.3で日本語を入力する時に、インラインで入力できない。

まあかなり重大な問題です。

Mac版は有志の方が修正してくれたので問題ないんだけど、Windows版は一個前のバージョン(22.2)か、次のバージョン(23.1~)じゃないとインライン入力できるバイナリが存在しないという悲しい現実。よりにもよって、22台の最終バージョンだけ無いなんて…。
ホントは23.1以降の新しいバージョンに乗り換えたいんだけど、手持ちのPCだとかなり重いんだよね。Mac版はちゃんとしたバイナリが見あたらないし。

photo1で、もうどうにも我慢が出来なくなって自分で作りました。
無いなら作れの精神。
正直無駄な労力だとは思ってますが…これも勉強の一環だと思って頑張りました。

修正にあたって、NTEmacsのサイトgnupackのサイトを参考。特にEmacs23.1.94のパッチは、日本語を入力中に周りの文字が消えてしまう現象を解決するのに大役立ち。

久しぶりに日本語をインライン入力できてとにかく幸せ…(笑)


もし部長と同じく、Emacs22.3でインライン入力できなくて日々不自由しとる人!試してみる価値があると思います。

ただ…何か不具合があっても対応できるかどうか微妙なのは許してちょ。自分の環境だけのテストでは限界があるし、かなり突貫で直したのよ。

※(mw32-ime-initialize)の直前で
   (set-w32-system-coding-system 'sjis)しないと、
半角カナの入力でいろいろ問題があった(汗)
 
あと、画像関連のライブラリは軒並み入ってないからね(笑)

Emacsの二次配布に当たってのライセンスをいまいち理解してないので、もしかしたら公開を取りやめるかもしれないのでお早めに。

⇒バイナリだけ
⇒ソース一式

Emacs スケジュールから企画書まで、なんでもござれのorg-modeが新しなっとる!

phot1待ってました!

org-mode 6.35eが公開されとるがね。

org-mode無しのスケジュール管理はもはや考えられないほどドップリorg-modeにハマっとるでねー。バージョンアップすらちょっとしたニュースだがね。

orgの導入については手前味噌ながら、こことかこことかこことかこことかここあたりを読んでちょ。

とりあえずなんも考えずに更新。特に問題なし。

更新履歴を見るに、細かい機能追加や互換性の無い変更が散見されますが…いまんとこ特に問題なし。


それよか、もやしナムルを作ったのはいいものの、デスソースの分量を間違えて激辛を通り越してもはや食べられないレベルなのをどーにかしたい。

辛すぎるのが命にかかわるデスソース(笑)

その可能性は無限大!「朗読劇」というパフォーマンス。

a17c30feはえぇーー!

あっちゅうまに3月だがね。

先週末手伝ってたイベント「パラレルスリップ」の方は無事完了。
おなじみ楠田さんを始め、ビッグバードの中の人やらカービィの中の人やらキュア5の新聞部長プリズンブレイクの中の人やらも参加する、豪華で楽しいリーディングイベントになりました!

ミステリーガールズ達もパワーアップしてましたね!


f5b2207a舞台やライブとはまた一味違う朗読劇というパフォーマンス。

何から何まで言葉だけで表現するこのスタイルは、
役者の力量が最も問われるともいえるでしょう。

でも、言葉一つでミクロの世界から宇宙のかなたまで
ぶっちゃけ何でもアリ!
これって、無限の可能性を秘めているともいえるんじゃないかな?

その朗読劇に近いと思っているのがプログラミング。
print("Hello C world."); から、世界のすべてを検索するグーグルまで、
テキストエディタとコンパイラから生み出される無限の可能性。

次回は春を予定。一緒に可能性を楽しんでみる?


org-mode(6.34c)のビミョーな不具合

たとえばこんな風に見出しを書いたとする。

* ミーティング<2010-03-03 水 13:00 +7d>   :PROJECT:


これ、アジェンダビューで表示すると

to-do:      13:00...... ミーティング:PROJECT::

と、タグが見出しの後ろにくっついて表示されるというビミョーな不具合。
なんか気持ち悪いんで、調べに調べて問題の個所を発見。

org-agenda.el の4659行目、

(string-match (concat (regexp-quote s0) " *") txt)

となってるトコを

(string-match (regexp-quote s0) txt)

と書き換えてみた。
これでとりあえずは意図通りに表示されたけど、他に影響がありそうな雰囲気。

見出しに時間指定の日付が含まれている場合、後ろに続く空白を含めて取り除くようになってるんだけど、タグが含まれた見出しだと都合が悪いっぽい。

でもこれ、ケアレスミスではない気がする。どーなんだろ。
製作者に報告するのも踏まえて、しばらく使ってみる感じで。

Emacsでコメント位置がズレる問題はこうして解決。と、二股っぽい話(笑)

photo1実はもういっこ買ってたりして(笑)
こっちは事務所に置く用。

これであと一年は戦える…。


最近の観葉植物って、名前とかお世話の仕方とかQRコードまでも書かれてる札が鉢に刺さってて、とにかく初心者の不安を解消しようとする姿勢に好感が持てる。

さらに、鉢を工夫する事で水のやり時まで一目瞭然。すごいよね。

今回見つけたのはビビの鉢というシリーズらしい。やるなぁ…三浦園芸

こういうおもてなしは見習わなくっちゃ。

そうそう、このシリーズ。なんと300円切ります。けっこう鉢のつくりもしっかりしてるのにかなりなリーズナブル。これ知人の受け売りだけど、観葉植物って東京23区を離れるとグッと相場が下がるんだって。興味のある人は遠出したついでに園芸店に立ち寄ってみると、素敵な出会いが待ってるかもしれません(*^_^*)


さてさてEmacsネタですが、ソースコードにコメントを入れたり外したりする時は comment-dwim を使ってます。
んで、
(setq comment-column 52)
などと設定してコメント位置を指定してたつもりが…なんかズレる?

おっかしいなぁ…と思って調べてみたら(実際のプログラムも読んだよ!)、なんと文章の最大幅を comment-fill-column という変数で決めてて、それよりはみ出す場合にはコメント位置を変更しているという実装でした。ガーン…!

なので、
(setq comment-fill-column 500)
とかテキトーに大きな値を設定して解決。特にObjective-Cは横に長くなりがちなので、これ解決してよかったわ。というか、日本語での記述がなぜか見あたらない。最近実装された訳でもなさそうなのに…?


あと、org-mode で、毎週やんなきゃいけない予定は

* TODO 携帯サイト更新<2010-02-26 金 +7d>

こうやって書いてるんだけど、アジェンダビューでTODOからDONEに変更すると、過去ログ表示モード(lキーを押すとなる)に表示されなくなるのが微妙に不便。ログ表示した時「あれ?今週って作業したよな?」って毎回ドキッてなる(笑)

でも実際にはこんな感じにちゃんと記録されとる。

* TODO 携帯サイト更新<2010-02-26 金 +7d>
    - State "DONE"       from "TODO"       [2010-02-19 金 10:22]

う~ん。できれば過去ログに表示されつつ、来週の予定にはTODO表示されて欲しいのぅ…と思っていたら、ありました。

(setq org-agenda-log-mode-items (quote(closed clock state)))

こう設定したら意図した通りの動作に!過去ログではDONEに変更した記録が表示されつつ、翌週にはちゃんとTODOで表示されとる!!いや~すごいよorg-mode。すごいよ。

スッキリ!

どんなスケジュールも見落とさない、Emacs org-mode

phot1Emacs上で動くアウトラインプロセッサorg-mode。遂に「アジェンダビュー」に手を出し始めました。ま、統合環境みたいなものです。

org-mode(6.34c)の場合、.emacsに最低限書く設定は以下の通り。

(require 'org-install)
(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(global-set-key "\C-ca" 'org-agenda)

そして、.orgファイルを開いた状態でC-c [ (org-agenda-file-to-front)を実行。アジェンダで管理する.orgファイルを指定します。


で、Emacs上でC-caと打つと画面下部にアジェンダビューのメインメニューが表示されます。いろいろ選べますが部長が使うのは

a  Agenda for current week or day
t  List of all TODO entries

の2つだけ。

a を押すと、今週1週間のスケジュール(あれば)が表示されます。
たとえば、何かスケジュールを入力して、C-c C-s として日付を入れます。

* iPhoneアプリデバッグ開始
   SCHEDULED: <2010-01-26 火>
こんな感じ。で、アジェンダビューで a を押すと、

Week-agenda (W04):
Monday     25 January 2010 W04
Tuesday    26 January 2010
  to-do:      Scheduled:  iPhoneアプリデバッグ開始
Wednesday  27 January 2010
Thursday   28 January 2010
Friday     29 January 2010
Saturday   30 January 2010
Sunday     31 January 2010

自動的に.org内を検索して表示してくれます。あー便利!深い場所に書かれたスケジュールも探し出して表示してくれるので、メモる時にいちいちメモリ方を考えなくてよいのが素晴らしい。「スケジューリングする時は、メモってC-c C-s」ただそんだけ。

で、この表示の時に「l(小文字のL)」を押すと、

* DONE HDD買い出し
   CLOSED: [2010-01-25 月 23:28]
と書かれた項目だけを抽出して表示してくれます。これがまた死ぬほどに便利。TODOからDONEに変更になった項目を一日単位で追っかけられるので、今日1日の作業が一瞬で把握できます。

で、そのTODO項目は、メニューで t を押せばズラズラっと表示されるという仕組みです。

なんとも部長の文章能力では2%くらいしか説明できてないアジェンダビュー。とにかくこれはマジで便利なので、スケジュールが散らかりがちなEmacs使い(すくなそう)は是非使ってみておくれやす。

洗濯苦手な人は手を挙げて!(org-mode)

phot1数年前に洗濯機が壊れてから、ずっとコインランドリーを使っている部長です。

なのですが!

・近所のコインランドリー⇒火事で焼失
・近所のコインランドリー2⇒店じまい
・やや近所のコインランドリー⇒店じまい
・あるいて15分のコインランドリー⇒さらに遠くに移転
・銭湯併設のコインランドリー⇒マンションが建ってた

呪われてるのか?
もはやランドリー難民っすよ。

ギリギリの状況の中、銭湯をもう一個だけ思い出して、もうダメ元で行ったら…そこでようやく見つけました。それも徒歩3分。

うんめいにほんろうされる部長…!

まぁとにかく、お昼過ぎから何往復もして洗濯物をやっつけました。

腰を悪くしてからぜんぜん洗濯物が片付いてなかったのでスッキリ具合もハンパじゃないよ!洗濯物からほのかに香るダウニー。お部屋広~い。みたいな。

どんだけ溜まってたんだよ!


Emacs with org-mode

Emacs上で高機能なアウトラインエディタを提供するorg-mode
概ね習得できたので、設定を大公開。

(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(setq org-hide-leading-stars t)
(setq org-log-done t)
(setq org-odd-levels-only t)
(setq org-read-date-popup-calendar nil)
(setq org-special-ctrl-a/e t)
(add-hook 'org-mode-hook
          '(lambda ()
;;             (local-set-key "\C-cl" 'org-store-link)
;;             (local-set-key "\C-ca" 'org-agenda)
;;              (local-set-key "\C-cb" 'org-iswitchb)
             (local-set-key (kbd "C-c <left>") 'org-shiftleft)
             (local-set-key (kbd "C-c <right>") 'org-shiftright)
             (local-set-key (kbd "M-<left>") 'org-shiftmetaleft)
             (local-set-key (kbd "M-<right>") 'org-shiftmetaright)
             (local-set-key [\S-left] 'org-beginning-of-line)
             (local-set-key [\S-right] 'org-end-of-line)
             (local-set-key "\C-v" 'org-yank)
             (local-set-key "\C-f" 'my-org-copy-special)
             (local-set-key "\C-w" 'my-org-cut-special)
             (local-set-key "\C-j" 'my-org-insert-parent-heading)
             (local-set-key "\C-k" 'org-insert-heading-after-current)
             (local-set-key "\C-l" 'my-org-insert-subheading)
             (local-set-key (kbd "C-<down>") 'org-forward-same-level)
             (local-set-key (kbd "C-<up>") 'org-backward-same-level)
             (local-set-key "\C-cd" 'my-org-time-stamp)
             (local-set-key "\C-ct" 'org-show-todo-tree)
             ;; C-c C-u 親の見出しへ
             ;; C-c C-c Tag入力
             ;; C-c .   タイムスタンプ挿入
             ))

(defun my-org-copy-special()
  "リージョンがあれば kill-ring-save。なければ org-copy-special"
  (interactive)
  (if mark-active
      (kill-ring-save (region-beginning) (region-end))
    (org-copy-special)
    ))

(defun my-org-cut-special()
  "リージョンがあれば kill-region。なければ org-cut-special"
  (interactive)
  (if mark-active
      (kill-region (region-beginning) (region-end))
    (org-cut-special)
    ))

(defun my-org-insert-parent-heading(arg)
  "親レベルの新規項目を作成"
  (interactive "p")
  (if (condition-case nil
          (outline-up-heading arg)
        (error nil))
      (org-insert-heading-after-current)
    (org-insert-heading-respect-content)))
 
(defun my-org-insert-subheading(arg)
  "子レベルの新規項目を作成"
  (interactive "p")
  (org-end-of-line)
  (org-insert-heading)
  (org-metaright))

(defun my-org-time-stamp()
  "タイムスタンプを挿入"
  (interactive)
  (org-time-stamp 1))


org-modeのキモでもあるagendaモードを無視してますが気にしない(笑)
基本NSアウトライナーの振る舞いを真似つつ、「そうじゃないだろ!」と思った振る舞いを直した感じ。これでファイルを読み込んだ時に全てのツリーが子供1つ分だけ開いてる状態になってくれたら最高なのですが…誰かカスタマイズ方法を教えて下さい。

NSアウトライナーからのデータ移行ですが、コピペであっさりできちゃいました。段落がTABに変換された状態でEmacs上にペースト出来たので、あとはテキトーに置換して完了。楽々。

思わぬ副作用として、「Emacsで動く=Macでも使える」ってのが嬉しい。NSアウトライナーはWindows専用だったからね。まぁこうしてOSに縛られない開発環境への移行が進んでいくのです。

すべてブラウザ上で動かしてしまう構想だって、10年前は絵空事かと思っていたのに、いまやカウントダウン状態だしね。生きてるうちにもうふた山くらい、何かありそうなパソコン業界。

Emacs スケジュール管理に最適な編集モード。

phot1丁度、マクロスFが終わるくらいに帰って来て、そっから自炊してお風呂してEmacs。

ゲーム作ってて、趣味がパソコンいじりってのが微妙すぎるという自覚はある。

さてさいきんは、org-modeの習得が続いてますが、今夜はチュートリアルに沿って操作を覚えつつ、NSアウトライナーに似た振る舞いをするようにカスタマイズ。

テキストはいい感じに色分けされてるし、見出しに「TODO」とか書きいれるのもショートカット一発で実行できるので、Emacsとは別の専用のソフトを使っている気分になるよね。

ただ、どうしても一部気にいらない振る舞いが出てきて、手始めにリージョンがある時とない時で、コピーとカットの振る舞いをかえるマクロを書いた所で今日は時間切れ。

(defun my-org-copy-special()
  "リージョンがあれば kill-ring-save。なければ org-copy-special"
  (interactive)
  (if mark-active
      (kill-ring-save (region-beginning) (region-end))
    (org-copy-special)
    ))

(defun my-org-cut-special()
  "リージョンがあれば kill-region。なければ org-cut-special"
  (interactive)
  (if mark-active
      (kill-region (region-beginning) (region-end))
    (org-cut-special)
    ))


とりあえず最低限の機能だけなぞってますが、org-mode面白い。NSアウトライナーの書類は専用フォーマットの為に他のソフトでは読み込めませんでしたが、org-modeは単なるテキストだというのも素晴らしい。JSONもそうだけど、書類の可搬性が高いのはいいですよ~。ゲーム開発にも持ち込めるし。

イマドキWindow$の特定のソフトでしか読めないとかってのはありえない(笑)

Emacsで始めるGTD

イマドキ「To-Do List」は時代遅れで、Getting Things Done、略してGTDがトレンドなんだそうな。

さて、昨日に引き続き、org-mode in Emacs。

org-modeは激烈に開発が進んでいるので、本家から最新版をダウンロード。ファイルを解凍して出てきたlispディレクトリの中身を自分のlisp置き場にコピー。部長の環境(WindowsXP)では、~/.emacs.d/lisp。

.emacsでのパスの指定はこんな感じ(前のブログの記事からちょっと変えた)

(setq load-path
      (append
       (list "~/.emacs.d/lisp") load-path))


続いて、docディレクトリの中のorgという名前のファイルを、自分のinfo置き場にコピー。部長の環境(WindowsXP)では、~/.emacs.d/info。

.emacsでのパスの指定はこんな感じ。

(setq Info-directory-list
      (append
       (list "~/.emacs.d/info") Info-default-directory-list))

準備できたら、org-hog.elファイルを軒並みバイトコンパイル。Linux系はmakeするようですが、Windowsの場合、diredモードでファイルをマークして一気にバイトコンパイルしてしまうのが一番楽でしょう。でも、けっこう警告出ます。大丈夫なんか?


本家のサイトにも書かれてますが、最低限の設定はこんな感じ。

(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(add-hook 'org-mode-hook
          '(lambda ()
             (local-set-key "\C-cl" 'org-store-link)
             (local-set-key "\C-ca" 'org-agenda)
             (local-set-key "\C-cb" 'org-iswitchb)
             ))

これで、C-h iでinfo画面を表示したとき、org-modeのinfoのバージョンがダウンロードしたバージョンと一致していたら成功。もともとパッケージに入ってるlispを新しいバージョンに置き換える作業が楽なのは流石。

あとはマニュアル(英文)を片手にhoge.orgファイルを作って、いろいろ試してみる…って事で。

部長は標準のキーバインドをかなり変更しているのですが…ここにきてちょっとしんどい。org-modeが標準のキーバインドをかなり書き替えてるんだよね。動作は同じなんだけど、org-mode用にちょっと振る舞いが違うよ。みたいな。

し、しんどいなぁ。

ま、ちょくちょくカスタマイズしつつ今後もレポート。


photo1写真は、なぜだかピック入れと化しとるペコちゃんきんちゃく袋。こまい小物入れが何気に好きで集めてます。

あれ?これ何のオマケだったっけ…?覚えてない。

Emacsで書くTo-Doリスト

photo2数日前から管理画面が重々だったり、日記の投稿の途中でエラーになる件、ようやく対応が始まったみたいだね。

ぶっちゃけかなり複雑なシステムだろうと思うので、中の人もたいへんだと思います。でも何が原因なんだろうね。近々に無事判明すればよいのですが…。


photo1さてさて。Emacsでアウトラインエディタを実現するorg-mode。

.emacsでの初期化は今風に書くときっとこんな感じ(ネット上のはどうにも情報が古い)
拡張子が org のファイルを開く時に、org-modeに切り替えるように設定してみました。

(add-to-list 'auto-mode-alist '("\\.org$" . org-mode))
(setq org-hide-leading-stars t)
(add-hook 'org-mode-hook
          '(lambda ()
             (local-set-key "\C-cl" 'org-store-link)
             (local-set-key "\C-ca" 'org-agenda)
             ;; 以下あなたの環境に合わせてキーバインドの設定を書いたりします。
             ))

ざっと使ってみた感じ、キーバインドが被りまくるのさえこれからなんとかすれば、部長が求めてる仕様+αは充分満たしてる。すげーなEmacs。というか、org-modeを開発した人。

Emacsってこんな事もできるんだよ、というお手本のようなメジャーモードですわ。

さよならNSアウトライナー。君の事は忘れない(笑)

むしろプログラマ以外にオススメ?多機能すぎるEmacs

photo1もう5年以上、To-Do管理用途としてNSアウトライナーというソフトを使っている西山部長。

これが非常に便利でして…やる事を箇条書きにしておき、片付けたら階層の下の方に移動させるだけ…という使い方でおおよそ作業の抜けや見落としが無くなるのです。

銀行振り込みのメモ書きからプログラムの実装管理からデバッグリストまで、およそTo-Doな事は漏れなく、1ファイル内で管理しています。おかげでどえらい量になっとりますが…。

もっと多機能で便利なアウトラインプロセッサは他にもあると思いますが、部長的には必要最低限の機能でサクサク使えるソフトが好みです。あと見た目。

残念なのが、このソフト、公開が終了してるんだよね。パソコンの世界じゃよくある事だけど。開発元の会社に問い合わせれば分けてくれるっぽいのですが…開発は終了している感じなので、VistaとかWindows7とかでちゃんと動かない時に対応してもらえないんだろうなー。それがイタイよなー。これもパソコンの世界じゃよくある事(涙)

で、そろそろ乗り換えますが…と思ってグーグル先生にきいてみたら、サクッと見つかりました。

それもEmacsの拡張機能で(笑)

Emacs、電卓からアウトラインプロセッサまでなんでもあるな。

その機能はorg-modeというメジャーモードで、Emacs22からは標準で搭載されてるとな。それを知らずにもう2カ月くらいEmacsを使ってるんですけど。

先のリンクは、有志で日本語訳を作ってくれている方のサイトへのリンク。Emacs界隈の先人たちの英知に感謝しつつ、利用したいと思います。
記事検索
このブログを書いとる人
電子書籍発売中

「チュートリアル形式で始めるOpenAL」
サウンド怖くない。C++による8つのチュートリアルで始めるOpenALプログラミング。さああなたも、自作アプリに魅力的な音効を添えてみませんか??
⇒Kindle版 ⇒iBooks版


「iPhoneアプリ『ういろう』のレシピ」
ゲームってどうやって作ってるの?? 拙アプリ『ういろう』の製作過程を本にまとめました。もちろんソースコードつき
⇒Kindle版 ⇒iBooks版


『チュートリアル形式で始めるOpenGL[2D編]』
OpenGL怖くない。C++による16のチュートリアルで始めるOpenGLプログラミング[2D編]。さああなたも、ゲーム作りを始めてみませんか?
⇒Kindle版 ⇒iBooks版
自作ゲーム配信中

『ういろう』
名古屋土産ういろうがiPhoneで大活躍?! 白ういろうを守れるのはあなただけ。ひゅーん、ぼよよーん!!
⇒AppStore ⇒LITE版


『こなへん』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒AppStore ⇒LITE版


『GEOSPOT』
ヒマラヤ山脈、大西洋、世界で一番深い湖… それって地球のどこにあるのか知ってるかな?『全方位直感地理クイズ』という新ジャンルに挑戦!あ、それ。地球をくーるくるw
⇒Windows ⇒Mac


『TieGunner』
マウス片手に大宇宙へ飛び立とう!『しっぽシューティング』というジャンルを作って頂きました^^; WinでもMacでも動きます。ソースもあるでよw
⇒Windows ⇒Mac
監修を担当しました

QRコード
QRコード
  • ライブドアブログ