org-mode

とあるページを見ていたら、emacs上で動くOrg-modeってのが紹介されてた。面白そうなので、ちょいとつまみ食いしてみる

manual

色々な人が紹介してるけど、一次情報って事で

Org Mode マニュアル

そして、利用の勘所

モーレツ! Org mode 教室

why

何故注目したか? 今まで、このページをpikiってスタイルで書いていた(10年もね)。元々は、haskellに目覚めた方がmarkdown似の文法を、独自に実装したものだ。

変換器でhtmlにするんだけど、この変換器を作るにはhaskellが必要。今使ってる変換器が壊れてしまったら、haskellをインストールして、コンパイルし直さなければならない。Maybe ok だろうけど、もしも作成出来なかったら右往左往。

そんな訳で、Orgモードで何とかならないかの確認だ。用心に越した事はないからね。

how to use

org-modeで書いた原稿をhtmlに変換する方法を、まず確認しておく。原稿はサフィックスにorgを付けておくと、開いた時点でorgモードになってる。

書き終わったら、セーブして、C-c C-e h h するだけだ。これで、xxx.orgって原稿が、xxx.htmlに変換される。たったこれだけだ。

C-c C-e は、orgを他の書式にエクスポートするって言う分かり易いキーバインド。次の h h はどんな形式でどうするを指定する。h o すると、htmlファイルに落として、それをブラウザーで開いてくれるので便利だぞ。C-c C-eした時に表われる案内。

Use SPC, DEL, C-n or C-p to navigate.
[C-b] Body only:    Off           [C-v] Visible only:     Off
[C-s] Export scope: Buffer        [C-f] Force publishing: Off
[C-a] Async export: Off


[h] Export to HTML
    [H] As HTML buffer            [h] As HTML file
    [o] As HTML file and open

[t] Export to Plain Text
    [A] As ASCII buffer           [a] As ASCII file
    [L] As Latin1 buffer          [l] As Latin1 file
    [U] As UTF-8 buffer           [u] As UTF-8 file

[&] Export stack                  [#] Insert template
[q] Exit

他にもLaTexとか有ったけど、取る合えず使いそうなものだけ抜粋。C-c C-e t a ってやると、Plainなファイルに落とせるなんて事が分かる。

emacs -Q xxx.org --batch -f org-ascii-export-to-ascii

とやるのと一緒の事だ(xxx.txtが作成される)。

畳んで、開いて

Orgの特徴は、文書を構造化して、編集を効率化するって事に主眼を置いているらしい。注目してる部分を拡げて編集とか、章を入れ替えようとか。昔流行った、アウトラインの流れを汲んでいるらしい。

必然的に、markup系になるわな。htmlもしかり。★一つが大項目。★が増えれば項目が細分化してく。

星の所にカーソルを合わせてTABを叩くと、配下を展開、もう一度TABすると、全展開。更にTABすると、展開止めて元に戻る。

これ、展開されてる部分だけに注目出来るんで便利。最初、項目を決めちゃえば、書き忘れにもなるしね。

pikiとの互換性

オイラーが多用してるリンク。そのままでも何とか見られる代物だった。問題は、コマンドの実行結果とか、ソースを表す、矩形区切りの部分。これを、どう置き換えるか?

12.5.7 HTMLエクスポートでのテキストエリア
 >|
 ...
 ...
 |<

     #+BEGIN_EXAMPLE -t -w 40
      ...
      ...
     #+END_EXAMPLE

上段はpikiでの指定。下段は、orgでの指定。-tを付けておくと、矩形になる。更に-wで横幅を指定出来る。

table(表)

余り使わないけど、作成は簡単。

|name|age|tel(RET)
|-(TAB)

縦棒で区切ってどんどん入力。行の最後でRETする。次行で縦棒-してからTABキーすると、下記のようになる。

| name | age | tel |
|------+-----+-----|
|      |     |     |

後はどんどん入力してTABで次の項目に移れる。勝手に横幅を揃えてくれる(右寄せ)。

| name     | age |          tel |
|----------+-----+--------------|
| tanake   |  23 | 011-123-4567 |
| fudafuda | 100 |      222-123 |
|----------+-----+--------------|

余り、頻繁には使わないと思うけど。

css

デフォルトで色々なcss(主にprogramming言語用)が出力されるので、鬱陶しい。そこで、そいつらを規制して、自前のやつを取り込む。

#+OPTIONS: html-style:nil
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="piki.css" />

もう一つ鬱陶しいのにjavascriptが有るけど、こやつはどうやって禁止出来るのだろう。infoを見る限り、何時も付いて回るって書いてある。

where is H1 tag

htmlファイルにしてつらつらと出来栄えを眺めていると、★一つの見出しがH2なタグになってる事が分かる。そんじゃ、H1タグは?

#+TITLE: change to org

こんな具合にタイトルが、H1タグに割り当てられてました。納得です。

link

pikiでは、リンクを鍵カッコの中に書く。最初は文字列による説明。スペースを1個空けてからURLって決まり。haskell由来なので、形式には厳しい。

orgではどうよ? 前記のモーレツに説明が有ったので、引用させて頂く。

Org modeではリンクも簡単に張ることができる。そもそも https://www.mhatta.org/wp/ と
いった具合で、ただURLを書けばすぐにリンクになる。最初は面食らうかもしれない。

説明をつけたければ C-c C-l である。まずリンクを入力し、次いで説明を入力する。
するとリンクが挿入される。私のブログ といった具合である。リンク上でもう一度
C-c C-l を打つと編集できる。また、リンク上で C-c C-o を押すとWWWのURLならブラウザ、
PDFファイルならPDFビューワといった具合で、適切な手段で開いてくれる。

へぇ、分かり易いキーバインドな。

Tips

orgモードは、行の折り返しが無い。まさかね? そんなの、init.elに書いて、折り返しするように設定しとけ。

;; org-mode
(setq org-startup-truncated nil)

後、ブロックを指定するのが、面倒なんですが。。。<e(TAB)で、exampleに展開される。その他に、<q(TAB)とか、<s(TAB) なんかでもOK。たった一行の場合は、冒頭に : を置けばよい。

source

この際だから、orgのソースを拝んでおく。

  -rw-r--r-- 1 root root   3246 Dec 16  2018 ob-ruby.el.gz
  -rw-r--r-- 1 root root   1216 Dec 16  2018 ob-sass.el.gz
  -rw-r--r-- 1 root root   3075 Dec 16  2018 ob-scheme.el.gz

  -rw-r--r-- 1 root root 260794 Dec 16  2018 org.el.gz
  -rw-r--r-- 1 root root   8704 Dec 16  2018 org-entities.el.gz
  -rw-r--r-- 1 root root   1083 Dec 16  2018 org-eshell.el.gz
  -rw-r--r-- 1 root root   2427 Dec 16  2018 org-eww.el.gz

  -rw-r--r-- 1 root root  68902 Dec 16  2018 ox.el.gz
  -rw-r--r-- 1 root root  35718 Dec 16  2018 ox-html.el.gz
  -rw-r--r-- 1 root root  10817 Dec 16  2018 ox-icalendar.el.gz

こんな風に、接頭語で3種類にソースが分かれている。

最初のob-系は、

;;; ob-scheme.el --- Babel Functions for Scheme   -*- lexical-binding: t; -*\-

;;; Requirements:

;; - a working scheme implementation
;;   (e.g. guile https://www.gnu.org/software/guile/guile.html)
;;
;; - for session based evaluation geiser is required, which is available from
;;   ELPA.

;;; Code:
(require 'ob)
(require 'geiser nil t)
(require 'geiser-impl nil t)

このようになってた。そう、よそのパッケージを利用して、source-blockに置いたソース片をその場で実行出来ますってのが売り。文芸的なプログラミングを実現するんだな。 Babelってバベルの塔、摩天楼、意味深であります。深入りしない方が良さそうです。

次のorg-系は、いわゆる本体系ね。色々な人の協力で構成されてる。ちょい見してたら、org-ctags.elなんてのが有った。ダブル三角括弧でリンクを作っておくと、勝手にetagしてくれるみたい。何でも症候群の香りがするぞ。

そして、3番目のox-系は、エキスポート系になるな。ox-man.elなんてのが標準で入っていた。

; This library implements a Man back-end for Org generic exporter.
;;
;; To test it, run
;;
;;   M-: (org-export-to-buffer 'man "*Test Man*") RET
;;
;; in an Org buffer then switch to the buffer to see the Man export.
;; See ox.el for more details on how this exporter works.

manの系統にも輸出出来るんだ。なんかM$もけつまくって逃げ出すような、てんこ盛り状態。更にELMAあたりを漁れば、3つの系統が山ほど出て来る。もう、誉めるしかないな。

出来栄え

で、気になるのは、出来栄え。firefox基準なので、問題なく見られれば良しとしよう。 後は、ぐぐる系のやつね。それからテキスト系のw3m。

Xも自由にならないテキストだけの世界(Debian 32Bit)で試したら、C-c C-e h o ね。 w3mを起動しましたって出てきたけど、どこにw3mは居るのよ? tmuxが障害になってるの? いや、別な窓を開いて、そこにw3mを張り付けているんだろうね。すなわちXは上がっているけど、訳あってfirefoxとかを入れていない人向けだな(多分)。

それから、気になるサイズだけど、明日にでも、A/B テストと銘打って結果を発表する事にします。

gas

gas

アセンブラ GNU as の基礎知識

X86アセンブラ/GASでの文法