以前のポストで書いたコード Emacs でカーソル行にあるURLを取得してブラウザで開く を 実際に emacs でテキストを編集しているときに使えるようにする方法を調べた。
elisp を emacs で書くには *scratch* バッファで記述して C-j するとか、 foo.el など .el 拡張子を持つファイルをバッファで開いて、コードを書いた末尾で C-x C-e するの方法をとる(らしい)。
そうやって書いた関数を普段使いするにはどうすればいいのか?
(defun my-get-current-line ()
(buffer-substring-no-properties (point-at-bol) (point-at-eol)))
(defun my-get-url (s)
(if (string-match ".*\\(https:\\/\\/.*\\/\\).*" s)
(match-string 1 s)
s))
(defun my-open-url ()
(interactive)
(shell-command (concat "xdg-open " (my-get-url (my-get-current-line)))))
以前のポスト(Emacs でカーソル行にあるURLを取得してブラウザで開く) では my-show-url という関数名にしていたが、ここではそれを my-open-url と改名することにした。
ここでは Chromebook の Linux の emacs を使っているので、ブラウザを開くコマンドは xdg-open を使っています。
~/.emacs.d/foo/my-open-url.el ファイルを作成してそこにこの関数を記述しておく。
~/.emacs.d/init.el に記述を追加
(add-to-list 'load-path "~/.emacs.d/foo")
(autoload 'my-open-url "my-open-url" "カーソルのある行に存在するURLをブラウザで開く" t)
~/.emacs.d/foo/ のパスに自分で書いた elisp を配置することとして、それを load-path に追加しています。 そして autoload を使って my-open-url 関数を使えるようにしています。
適当なテキストファイルを emacs で開く。
なんやかんや https://www.mindboardapps.com/ なり
こんなテキストがあったとしてこの行にカーソルをあてた状態で M-x して my-open-url と入力、その後 RET キーを押します。 すると ChromeOS 側のブラウザに https://www.mindboardapps.com/ が表示されます。
もちろん my-open-url 関数はこのURL文字列を取得して xdg-open に渡しているだけなので、 環境によっては Linux 側のブラウザにそのページが表示されるなど、異なる振る舞いになるかもしれません。
これで自作の関数を emacs でテキスト編集中に使えるようになりました。