Emacianとしてその殻の中に閉じこもっていたいです。だけど、世間がそれを許さず次々と無理難題を押しつけてくるのです。今回はタスク等から出てきた備忘禄をGitHub Pages(Jekyll)で管理しようと重い腰を上げました。
というわけで、GitHub Pages(Jekyll)をEmacsで楽に管理できないかと以前から考えていたのですが、いい塩梅のライブラリを発見しました。JekyllだからHydeと言います。名前が jekyll doctor (hyde)
とかぶっていますがここでは気にしません。
HydeのPros/Consは以下の通りです。
Pros
git
の自動コメントjekyll build
、jekyll serve
のショートカットCons
hyde-home
がカスタム変数ではないadd-hook
が効かないHydeの設定は基本いじることもなくJekyllを使うことが出来ます。下記記載するのはConsつぶしですが、ここはお好みです。
まず、キーバインド操作。Hyde本体がキーバインドをdefvar
で割り当てているので、init.el
の設定でrequire
前に割り込みevalして、hyde
関数にhyde-home
引数をわたすことで解決します。あと、折り返し回りは別設定になっているのでadaptive-wrap
やtruncate-lines
を設定しています。
;;; Hyde (Jekyll client)
(require-package 'adaptive-wrap)
(defun hyde/open-post-maybe-into-other-window (pos)
"Opens the post under cursor in the editor (POS)."
(interactive "d")
(let ((post-file-name (nth
1
(split-string (strip-string (thing-at-point 'line)) " : ")))
(dir (get-text-property pos 'dir)))
(let ((hyde-buffer (current-buffer)))
(find-file-other-window
(strip-string (concat hyde-home "/" dir "/" post-file-name)))
(hyde-markdown-activate-mode hyde-buffer)
(adaptive-wrap-prefix-mode t)
(set-default 'truncate-lines nil))))
(defun hyde/quit-wrap ()
"Quits hyde."
(interactive)
(progn
(delete-other-windows)
(kill-buffer (current-buffer))))
(defun create-markdown-scratch ()
"Create a markdown scratch buffer."
(interactive)
(switch-to-buffer (get-buffer-create "*markdown*"))
(markdown-mode))
(defun hyde/nabinno ()
"Run hyde-wrap with home parameter."
(interactive)
(progn
(delete-other-windows)
(create-markdown-scratch)
(split-window-horizontally)
(other-window 1)
(hyde "~/nabinno.github.io/")))
(defvar hyde-mode-map
(let
((hyde-mode-map (make-sparse-keymap)))
(define-key hyde-mode-map (kbd "N") 'hyde/new-post)
(define-key hyde-mode-map (kbd "G") 'hyde/load-posts)
(define-key hyde-mode-map (kbd "C") 'hyde/hyde-commit-post)
(define-key hyde-mode-map (kbd "P") 'hyde/hyde-push)
(define-key hyde-mode-map (kbd "J") 'hyde/run-jekyll)
(define-key hyde-mode-map (kbd "S") 'hyde/serve)
(define-key hyde-mode-map (kbd "K") 'hyde/stop-serve)
(define-key hyde-mode-map (kbd "d") 'hyde/deploy)
(define-key hyde-mode-map (kbd "D") 'hyde/delete-post)
(define-key hyde-mode-map (kbd "U") 'hyde/promote-to-post)
(define-key hyde-mode-map (kbd "X") 'hyde/quit-wrap)
(define-key hyde-mode-map (kbd "O") 'hyde/open-post-maybe-into-other-window)
hyde-mode-map)
"Keymap for Hyde")
(global-set-key (kbd "C-c ; j") 'hyde/nabinno)
(require-package 'hyde)
(require 'hyde)
次に、ホストIPの操作。Jekyllのルートにおく.hyde.el
の中身です。JekyllはWebrickを使っているので、VMなどでホストをいじっている場合はhyde/serve-command
にホストIPを0.0.0.0(jekyll s -H 0.0.0.0
)に変更する必要があります。
(setq hyde-deploy-dir "_site"
hyde-posts-dir "_posts"
hyde-drafts-dir "_drafts"
hyde-images-dir "images"
hyde/git/remote "upstream" ; The name of the remote to which we should push
hyde/git/branch "master" ; The name of the branch on which your blog resides
hyde/jekyll-command "jekyll b" ; Command to build
hyde/serve-command "jekyll s -H 0.0.0.0 --force_polling" ; Command to serve
hyde-custom-params '(("category" "personal")
("tags" "")
("cover" "false")
("cover-image" "")))
Hydeを介してEmacsでJekyllを操作できるのは、やはり快適です。特にorg-modeとMarkdownの相性が良く。org-modeで管理していた備忘をMarkdownに変換し、Jekyll(GitHub Pages)にパブリッシュというワークフローが引けたのが良かったです。数年間はお世話になると思います。
テクノロジーの進化は、絶え間ない変化の中で私たちの日常を塗り替えてきました。時には経済的な危機が、新たな可能性を切り拓く契機となることもあります。そこで、過去のリセッション期に生まれたテクノロジーの足
ATKerneyの課題解決パターン は、課題の本質を見極め、効果的な戦略的構造化を通じて解決策を導き出す手法にフォーカスしています。この冒険の旅は、解決者と協力者たちが心を一つにし、課題に立ち向かう様
私はいわゆる就職氷河期世代です。周囲から時折漏れ聞こえる不平のような言葉がありますが、それを単なる不平として片付けるのはもったいない気がします。できれば、その中に新しい視点を見つけ、次のチャンスへ繋げ