Emacs初心者が利用1ヶ月でパッケージにコントリビュートした話
Emacs利用1ヶ月でパッケージにコントリビュートした話
宗教として知られるVim、Emacsの宗派において、Emacs初心者が何故お手軽にパッケージの一つにコントリビュート出来たか?のお話
きっかけ:パッケージがmacOSで動かん🤦♂️
Emacsには様々なメモやToDOを作るのに便利なOrgmodeなるモードがある🦄
このOrgmode用パッケージにorg-web-tools
なるものがあり、これを使うとorg-web-tools-insert-link-for-url
コマンドでURLのリンクをタイトル付きで手軽にメモれる
問題点: Curl de DNS Error
Linux上では無問題に動作するこのパッケージだが、何故かmacOSだとcurl
がDNSエラーを吐いて死ぬ💀
解決に至るまで
ソースを見る
問題があるならソースを見てみようということで、GitHubにソースを見に行く(むしろこれはダウンロードされてるパッケージのディレクトリの中身でも良い)🔍
はい、それがこちら:
(defun org-web-tools-insert-link-for-url (url)
"Insert Org link to URL using title of HTML page at URL.
If URL is not given, look for first URL in `kill-ring'."
(interactive (list (org-web-tools--get-first-url)))
(insert (org-web-tools--org-link-for-url url)))
curl
はorg-web-tools--get-first-url
から呼ばれてるっぽいので、そっちを見に行く🏃♀️💨
はい、それがこちら:
(defun org-web-tools--get-first-url ()
"Return URL in clipboard, or first URL in the `kill-ring', or nil if none."
(cl-loop for item in (append (list (gui-get-selection 'CLIPBOARD))
kill-ring)
when (and item (string-match (rx bol "http" (optional "s") "://") item))
return item))
動かしてみる
Emacsはテキストエディタ兼Lisp実行環境でもあるので、Lisp(Elisp)をそのまま実行できる👍
なので、スクラッチバッファを開き、上記のコードを貼り、下記のようにして読み込ませる:
(defun org-web-tools-insert-link-for-url (url)
"Insert Org link to URL using title of HTML page at URL.
If URL is not given, look for first URL in `kill-ring'."
(interactive (list (org-web-tools--get-first-url)))
(insert (org-web-tools--org-link-for-url url))) ← ここにカーソルを置いて C-x C-e
(defun org-web-tools--get-first-url ()
"Return URL in clipboard, or first URL in the `kill-ring', or nil if none."
(cl-loop for item in (append (list (gui-get-selection 'CLIPBOARD))
kill-ring)
when (and item (string-match (rx bol "http" (optional "s") "://") item))
return item)) ← ここにカーソルを置いて C-x C-e
そして下記のようにして実行
(org-web-tools--get-first-url "https://zenn.dev/zenn/articles/zenn-cli-guide") ← ここにカーソルを置いて C-x C-e
結果
[[https://zenn.dev/zenn/articles/zenn-cli-guide][Zenn CLIで記事・本を管理する方法]]
動きます👍
問題点を探す
org-web-tools-insert-link-for-url
は動きそうなので、こやつにURLを渡すorg-web-tools--get-first-url
を見てみます
最初にクリップボードのデータを取得してる箇所を試します
スクラッチバッファに下記を書きます:
(gui-get-selection 'CLIPBOARD)
macOSでブラウザから適当なURLをコピーし、Emacsで記載した処理を実行します
(gui-get-selection 'CLIPBOARD) ←ここでC-x C-e
結果:nil
いや、nilじゃねーよ 👀⁉️
(gui-get-selection 'CLIPBOARD)
犯人はなんということでしょう、Emacsの(gui-get-selection 'CLIPBOARD)
はmacOS側のクリップボードデータを取ることが出来ないのでした😨
修正とPR
はい修正push、あとよろ〜
まとめ
こうしてEmacs初心者の自分は、Emacsの便利機能に助けられ、Emacs初心者でもElispのパッケージにコントリビュート出来たのでした
Happy Hacking!!
Discussion