tag:crieit.net,2005:https://crieit.net/tags/Emacs/feed 「Emacs」の記事 - Crieit Crieitでタグ「Emacs」に投稿された最近の記事 2022-11-13T10:56:11+09:00 https://crieit.net/tags/Emacs/feed tag:crieit.net,2005:PublicArticle/18317 2022-11-13T10:49:01+09:00 2022-11-13T10:56:11+09:00 https://crieit.net/posts/WSL2-Emacs-org-mode-Windows-Edge WSL2のEmacsでorg-modeのリンクをWindows側のEdgeで開く <p>WSL2に入れたEmacsでorg-modeを使う際、そのままだとorg-mode内のWebサイトへのリンクはWSL2内のlynx(テキストブラウザ)で開こうとする。これを、代わりにWindows側のブラウザで開くように設定したい。その方法を記録しておく。</p> <h1 id="方法"><a href="#%E6%96%B9%E6%B3%95">方法</a></h1> <h2 id="Windows側のEdgeにWSL側でパスを通す"><a href="#Windows%E5%81%B4%E3%81%AEEdge%E3%81%ABWSL%E5%81%B4%E3%81%A7%E3%83%91%E3%82%B9%E3%82%92%E9%80%9A%E3%81%99">Windows側のEdgeにWSL側でパスを通す</a></h2> <p>そもそもWSL側からWindows側のEdgeを起動できないと話にならない。もちろんフルパスを入れれば起動できるのだが、簡単にするためにまずはWSL側のパスが通っている場所にEdgeの実行ファイルへのシンボリックリンクをつくる。</p> <p><code>msedge.exe</code> は <code>C:\Program Files (x86)\Microsoft\Edge\Application</code> にあるので、以下のようにする。シンボリックリンクを作る場所は <code>/usr/local/bin</code> とする。</p> <pre><code class="sh">sudo ln -s /mnt/c/Program\ Files\ \(x86\)/Microsoft/Edge/Application/msedge.exe /usr/local/bin/msedge </code></pre> <p>これで、WSL側からWindows側のEdgeを簡単に呼べるようになる。</p> <pre><code class="sh">msedge "yahoo.co.jp" </code></pre> <p>なお、WSLには <code>wslview</code> というコマンドがあり、これにURLを渡すことでもWindows側のEdgeで開いてくれるのだが、これをEmacsのブラウザに設定した場合は何故か画面が崩れるという問題が発生した。</p> <h2 id="Emacsの設定"><a href="#Emacs%E3%81%AE%E8%A8%AD%E5%AE%9A">Emacsの設定</a></h2> <p><a target="_blank" rel="nofollow noopener" href="https://www.emacswiki.org/emacs/BrowseUrl">https://www.emacswiki.org/emacs/BrowseUrl</a> を参考に、init.elに設定を書く。org-modeのリンクについては普通のリンク向けのブラウザ設定だけではだめなようなので注意。</p> <pre><code>(setq browse-url-browser-function 'browse-url-generic browse-url-generic-program "msedge") (defadvice org-open-at-point (around org-open-at-point-choose-browser activate) (let ((browse-url-browser-function (cond ((equal (ad-get-arg 0) '(4)) 'browse-url-generic) ((equal (ad-get-arg 0) '(16)) 'choose-browser) (t (lambda (url &optional new) (browse-url-generic url t))) ))) </code></pre> <h1 id="おまけ:leaf.elの場合"><a href="#%E3%81%8A%E3%81%BE%E3%81%91%EF%BC%9Aleaf.el%E3%81%AE%E5%A0%B4%E5%90%88">おまけ:leaf.elの場合</a></h1> <p>私は leaf.el を使っているので以下のようにした。<code>C-w</code>と<code>M-w</code>のときにWindows側のクリップボードにも渡す設定も書いている。</p> <pre><code>(leaf wsl-settings :custom ((browse-url-browser-function . 'browse-url-generic) (browse-url-generic-program . "msedge")) :config ;; org-modeで外部ブラウザでリンクを開くようにする設定 (defadvice org-open-at-point (around org-open-at-point-choose-browser activate) (let ((browse-url-browser-function (cond ((equal (ad-get-arg 0) '(4)) 'browse-url-generic) ((equal (ad-get-arg 0) '(16)) 'choose-browser) (t (lambda (url &optional new) (browse-url-generic url t))) ))) ad-do-it)) (leaf wsl-copy-setting :doc "コピーしたものをクリップボードに渡す設定" :init (defun wsl-copy (start end) (interactive "r") (shell-command-on-region start end "clip.exe") (kill-ring-save start end)) :bind (("M-w" . wsl-copy))) (leaf wsl-cut-setting :doc "切り取りしたものをクリップボードに渡す設定" :init (defun wsl-cut (start end) (interactive "r") (shell-command-on-region start end "clip.exe") (kill-region start end)) :bind (("C-w" . wsl-cut))) ) </code></pre> すずしめ tag:crieit.net,2005:PublicArticle/15459 2019-10-08T01:05:45+09:00 2019-10-08T01:09:21+09:00 https://crieit.net/posts/C-5d9b6259e4530 C#を本業にしているスクリプトキディが思いついた、私史上最強の三文未満小説執筆環境 <p>3畳に足りるか足りないか分からないシェアハウスの個室で、間接照明とディスプレイの明かりを頼りに、<br /> この文章を自作した左右分離式キーボードで書いている。</p> <p><a href="https://crieit.now.sh/upload_images/3bf7b632524cf2841f96bdb7b8fe62e05d9b6315cd782.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/3bf7b632524cf2841f96bdb7b8fe62e05d9b6315cd782.png?mw=700" alt="This is DOOM Emacs." /></a><br /> Emacsで。 厳密に言うと、DOOM Emacsだ。</p> <p>そんな私がなぜ久々に文章を打っているかといえば、<br /> 就業中にわだかまっていた三文小説未満のライトノベルにも満たないプログラミング入門以前物語のそれを書きたくなったり、<br /> 書くに至って良いやり方をいろいろ考えていたら、思いついたのでまとめているわけである。</p> <h1 id="Emacsは最強の執筆環境"><a href="#Emacs%E3%81%AF%E6%9C%80%E5%BC%B7%E3%81%AE%E5%9F%B7%E7%AD%86%E7%92%B0%E5%A2%83">Emacsは最強の執筆環境</a></h1> <p>この記事に何らかのきっかけで行き着いた方々には釈迦に説法だとは思うし、<br /> もっとLispを使いこなしているEmacsユーザーに対しては僭越だが、<br /> 一応Emacsというエディタについて簡単に自分が今(2019-10-07T22:46)資料を見ないでできる限りの<br /> 紹介をさせていただく。</p> <h2 id="Emacsという古来から存在するテキストエディタ"><a href="#Emacs%E3%81%A8%E3%81%84%E3%81%86%E5%8F%A4%E6%9D%A5%E3%81%8B%E3%82%89%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF">Emacsという古来から存在するテキストエディタ</a></h2> <p>古来(といってもUNIXが生まれてからではあるので、西暦1980年以降である)から存在するテキストエディタであるが、<br /> その拡張性の高さと、拡張性ゆえの可能性の多さから、このエディタのファンは多く、根強い支持を得ている。</p> <p>とかく書いてる私自身も2年前から少しずつEmacsを触り始めた口で、それまでは<a target="_blank" rel="nofollow noopener" href="http://vim.org">Vim</a>という双対をなすテキストエディタを使っていた。</p> <h2 id="(ほぼ)文字だけで表現するテキストエディタ"><a href="#%EF%BC%88%E3%81%BB%E3%81%BC%EF%BC%89%E6%96%87%E5%AD%97%E3%81%A0%E3%81%91%E3%81%A7%E8%A1%A8%E7%8F%BE%E3%81%99%E3%82%8B%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF">(ほぼ)文字だけで表現するテキストエディタ</a></h2> <p>これら(Emacs,<br /> Vim)の特徴としては、ほぼすべてを文字で表現することにある。</p> <p>ドットインパクトプリンタなどの出力機器しかなかった時代から見るとずいぶんと贅沢かもしれないが、<br /> 2000年以降に生まれた若い人たちからすると、ずいぶんと貧相に思うかもしれない。<br /> 今日のEmacs,<br /> その拡張機能と適切なフォントをインストールすれば、絵文字などを利用して見栄えは良くなる。</p> <h2 id="「ダサい」? 違う、洗練されているのだ。"><a href="#%E3%80%8C%E3%83%80%E3%82%B5%E3%81%84%E3%80%8D%EF%BC%9F%E3%80%80%E9%81%95%E3%81%86%E3%80%81%E6%B4%97%E7%B7%B4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A0%E3%80%82">「ダサい」? 違う、洗練されているのだ。</a></h2> <p>とはいえ、EmacsはCtrlやAltなどの装飾キーを酷使し、Vimは3つのモードを把握しなければいけないなどの<br /> 参入障壁があり、それ以前におそらく最初の見た目はWindowsのメモ帳と代わり映えしないだろう。</p> <p>「ダサい」と思われるかもしれない。 しかし本当にダサいのだろうか。</p> <p>私は憧れる。必要な時に必要な道具をサッと出し、作業に取り掛かり、必要が無くなったらしまう。</p> <p>それができるのがこれらのエディタの強さである。</p> <h1 id="Org-modeは至高の(ドキュメント|タスク管理|プロジェクト管理)テキストフォーマット"><a href="#Org-mode%E3%81%AF%E8%87%B3%E9%AB%98%E3%81%AE%EF%BC%88%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%EF%BD%9C%E3%82%BF%E3%82%B9%E3%82%AF%E7%AE%A1%E7%90%86%EF%BD%9C%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E7%AE%A1%E7%90%86%EF%BC%89%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88">Org-modeは至高の(ドキュメント|タスク管理|プロジェクト管理)テキストフォーマット</a></h1> <h2 id="執筆に適したテキストフォーマットを作るという行為の非現実性"><a href="#%E5%9F%B7%E7%AD%86%E3%81%AB%E9%81%A9%E3%81%97%E3%81%9F%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%A8%E3%81%84%E3%81%86%E8%A1%8C%E7%82%BA%E3%81%AE%E9%9D%9E%E7%8F%BE%E5%AE%9F%E6%80%A7">執筆に適したテキストフォーマットを作るという行為の非現実性</a></h2> <p>とはいえ、テキストエディタが優秀で拡張性に優れているからと言って、自前で執筆に適した拡張機能を作るのは骨が折れる。</p> <p>ましてや進捗やHTMLファイル(Webブラウザで閲覧できる形式)への変換出力機能も実装するのは、自分のような専門学校卒業程度の、<br /> ほぼ文系コーダーに毛が生えてるか生えていないか程度のプログラマというのもおこがましい劣化知的生命体には無茶な話で、<br /> 仕事の余暇に作るなんて、人間の平均寿命から20年ほど引いた年数ではできるものではない<br /> (たまにそれを成し遂げる者も居るが、それは天才と言われる超人類にしか当てはまらない)。</p> <h2 id="巨人の肩に腰を据える"><a href="#%E5%B7%A8%E4%BA%BA%E3%81%AE%E8%82%A9%E3%81%AB%E8%85%B0%E3%82%92%E6%8D%AE%E3%81%88%E3%82%8B">巨人の肩に腰を据える</a></h2> <p>今日、オープンソースソフトウェア・フリーソフトウェアという文化が広まり、インターネットにつながるパソコンがあれば、<br /> 天才達が考えたプログラムを自由に利用し、技術があれば改造したり、更にその天才が気づかなかった不具合を治すことだってできる。<br />  <br /> Emacsの文化から生まれた<a target="_blank" rel="nofollow noopener" href="https://orgmode.org/ja/">Org-mode</a>もその一つだろう。</p> <p>Org-modeはそのよく考えられたテキストフォーマットと、文字列情報を解析して機能を与えるEmacsが織りなす、</p> <ul> <li>メモ</li> <li>ジャーナル</li> <li>文書</li> <li>タスク管理</li> <li>プロジェクト管理</li> </ul> <p>上記全て(さらに数個以上)に対応するテキストフォーマットなのである。</p> <p>MarkdownやreStructuredTextも拡張することでこれらを全て受け持つテキストフォーマットになるだろう。<br /> ただ、Emacs<br /> Lispという強力なテキストエディタの拡張性により、テキストエディタとシンプルな軽量マークアップ言語<br /> で実装できたと私は思う。</p> <h1 id="実際にどう書くのか。"><a href="#%E5%AE%9F%E9%9A%9B%E3%81%AB%E3%81%A9%E3%81%86%E6%9B%B8%E3%81%8F%E3%81%AE%E3%81%8B%E3%80%82">実際にどう書くのか。</a></h1> <p>さて、ここからそんなEmacsとOrg-modeを利用して執筆する方法を見てみよう。</p> <h2 id="とにかく見出しを作る"><a href="#%E3%81%A8%E3%81%AB%E3%81%8B%E3%81%8F%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%92%E4%BD%9C%E3%82%8B">とにかく見出しを作る</a></h2> <p>とにかく見出しを作る。</p> <h3 id="更に細分化した見出しを作る"><a href="#%E6%9B%B4%E3%81%AB%E7%B4%B0%E5%88%86%E5%8C%96%E3%81%97%E3%81%9F%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%92%E4%BD%9C%E3%82%8B">更に細分化した見出しを作る</a></h3> <p>その見出しを細分化する。</p> <p>アニメの絵コンテの一枠や、マンガのヒトコマくらいに細分化してしまっていい。</p> <h3 id="そのシーンを1行でまとめた描写を"><a href="#%E3%81%9D%E3%81%AE%E3%82%B7%E3%83%BC%E3%83%B3%E3%82%921%E8%A1%8C%E3%81%A7%E3%81%BE%E3%81%A8%E3%82%81%E3%81%9F%E6%8F%8F%E5%86%99%E3%82%92">そのシーンを1行でまとめた描写を</a></h3> <p>更にその見出しを細分化する。段落レベルまで細分化してしまっても良い。</p> <p>私の様な人間は特に、 「これは5分で書けるだろう」 <br /> くらいのレベルまで細分化してしまったほうが良いと思う。</p> <h2>見出しを <code>TODO</code> にしてしまう</h2> <p>Org-modeのテキストを、Emacsの <code>org-mode</code> を適応して開いていれば、<br /> キーボード・ショートカットで見出しを一瞬でタスクに切り替えることができる。</p> <p>この機能を最大限利用し、先程まで書いた見出しを全て <code>TODO</code><br /> にしてしまおう。</p> <p>もちろんだが、全ての見出しを <code>TODO</code><br /> にするスクリプトを書いてしまっても良い。<br /> むしろそうやって積極的に拡張できるのがEmacsの強みだと私は思う。</p> <h2 id="書け。羅列されたシーンを描写しろ。"><a href="#%E6%9B%B8%E3%81%91%E3%80%82%E7%BE%85%E5%88%97%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B7%E3%83%BC%E3%83%B3%E3%82%92%E6%8F%8F%E5%86%99%E3%81%97%E3%82%8D%E3%80%82">書け。羅列されたシーンを描写しろ。</a></h2> <p>さあ、何を書きたいか決まった。書こう。</p> <h3 id="細分化された見出しはほぼ穴埋めだ。"><a href="#%E7%B4%B0%E5%88%86%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E8%A6%8B%E5%87%BA%E3%81%97%E3%81%AF%E3%81%BB%E3%81%BC%E7%A9%B4%E5%9F%8B%E3%82%81%E3%81%A0%E3%80%82">細分化された見出しはほぼ穴埋めだ。</a></h3> <p>細分化された見出しに答えるように書いていくだけで良いはずだ。</p> <p>それで筆が進まないのは、もしかしたら細分化が足りない。</p> <p>どんな風に書くか迷ったら、 <code>#</code><br /> を行頭につけてコメントアウトしてとりあえず書いてみる。</p> <h3 id="余談:テストを行うプログラムから書く「テスト駆動開発」"><a href="#%E4%BD%99%E8%AB%87%EF%BC%9A%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E8%A1%8C%E3%81%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%8B%E3%82%89%E6%9B%B8%E3%81%8F%E3%80%8C%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%80%8D">余談:テストを行うプログラムから書く「テスト駆動開発」</a></h3> <p>昨今になってソフトウェア開発の世界で注目されているのが、「テスト駆動開発」という手法だ。</p> <p>雑に説明してしまうと、<br /> 「作ったものの動作が正しく動作するか検証するプログラムを書きながらソフトウェアを作っていく」<br /> という手法だ。</p> <p>この執筆手法も、このソフトウェア開発手法からヒントを得た。<br /> 「自分の書きたいことをある程度ハッキリさせたら筆が進むはず」<br /> という、結構安直な考えである。</p> <p>この際なのでここに、 「ドメイン駆動設計」<br /> の考え方も混ぜ込みたくもなったが、まだそこまで考えがまとまってないので、後日うっかりひらめいたら。</p> <h2 id="見出しを消す"><a href="#%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%92%E6%B6%88%E3%81%99">見出しを消す</a></h2> <h3 id="よしっ!"><a href="#%E3%82%88%E3%81%97%E3%81%A3%EF%BC%81">よしっ!</a></h3> <p>(ヘルメットを被った猫の絵は省略)</p> <p>あとは大見出し以外を消すなり、大見出しを書き直したら、大分いい感じになってるはずだ。</p> <h3 id="Orgで書いたテキストを変換。"><a href="#Org%E3%81%A7%E6%9B%B8%E3%81%84%E3%81%9F%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E5%A4%89%E6%8F%9B%E3%80%82">Orgで書いたテキストを変換。</a></h3> <p>とはいえ、書いたテキストを他の人が見やすいフォーマットにできないと、<br /> なかなか見せづらくて寂しいと思われる。</p> <p>EmacsとOrg-mode標準でもいくつかのファイルフォーマットに出力できるが、<a target="_blank" rel="nofollow noopener" href="https://pandoc.org">Pandoc</a>などのツールを使うと、<br /> 更に幅が広がる。</p> <p>LaTeX形式に一度吐き出して、PDF形式に変換することも可能だ 。</p> <h1 id="Git(とMagit)を合わせると鬼に金棒。"><a href="#Git%EF%BC%88%E3%81%A8Magit%EF%BC%89%E3%82%92%E5%90%88%E3%82%8F%E3%81%9B%E3%82%8B%E3%81%A8%E9%AC%BC%E3%81%AB%E9%87%91%E6%A3%92%E3%80%82">Git(とMagit)を合わせると鬼に金棒。</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://git-scm.com">Git</a>と<a target="_blank" rel="nofollow noopener" href="https://magit.vc">Magit</a>を使って共同執筆する方法についても書きたかったが、私個人の時間切れに付き、ここまで。</p> <p>Gitを使った執筆活動の方法は他の方も各所で書いているので、興味のある方はぜひ調べてみるといいだろう。</p> <h1 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h1> <p>私の眠気もいい具合にキマってきた午前0時40分。</p> <p>割と思いついたことは書き留めれたはず。</p> <p>なお、この記事を書くに当たって、<a target="_blank" rel="nofollow noopener" href="http://www.mhatta.org/wp/category/org-mode/">八田真行さんの「モーレツ! Org<br /> mode教室」</a>を多大に参考にさせていただいた。<br /> ちょっとでもEmacsとOrg-modeに興味を抱いた方は、ぜひ確認していただきたい。</p> <h1 id="Emacsディストリビューション"><a href="#Emacs%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3">Emacsディストリビューション</a></h1> <p>しかしながら、この記事の最初でも記したとおり、Emacsは素のままでは結構難解なテキストエディタである。</p> <p>そこで、そんなEmacsにパッケージを追加して使いやすくしたEmacs達を紹介して話を締めたいと思う。</p> <dl> <dt>Graphene</dt> <dd>比較的優しそうな見た目</dd> <dt>Emacs Prelude</dt> <dd>ディストリビューションでは結構人気</dd> <dt>Spacemacs</dt> <dd>ちょっと重くて音沙汰ないけど、元祖Emacs + Vim</dd> <dt>DOOM Emacs</dt> <dd>Spacemacsの意志を受け継いだ? チョットワカル人向け。とはいえ自分みたいなニワカでも割と扱える。</dd> <dt>Emacs</dt> <dd>弘法は筆を選ぶのではない。作るのだ。</dd> <dt>Vim-Org-mode</dt> <dd>VimでもOrg-mode</dd> <dt>VSCode + VS Code Org Mode</dt> <dd>Visual Studio CodeでもOrg-mode。すげぇな。</dd> </dl> <h1 id="P.S."><a href="#P.S.">P.S.</a></h1> <p>このテキストの原稿もOrg-modeで書きました。<br /> <a target="_blank" rel="nofollow noopener" href="https://gist.github.com/manzyun/63768a11fde889e090ffe16c785425a6">GIstに原稿を上げてます</a>Rawボタンを見ると、生テキストファイルが見れます。<br /> 参考になれば幸いです。</p> まんじゅ(´ん`)