Home About Contact
Emacs , Emacs Lisp , Chromebook

Emacs でカーソル行にあるURL文字列を取得してブラウザで開く

以前のポストで書いたコード Emacs でカーソル行にあるURLを取得してブラウザで開く を 実際に emacs でテキストを編集しているときに使えるようにする方法を調べた。

elisp を emacs で書くには *scratch* バッファで記述して C-j するとか、 foo.el など .el 拡張子を持つファイルをバッファで開いて、コードを書いた末尾で C-x C-e するの方法をとる(らしい)。

そうやって書いた関数を普段使いするにはどうすればいいのか?

my-open-url 関数

(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 を使っています。

Step1

~/.emacs.d/foo/my-open-url.el ファイルを作成してそこにこの関数を記述しておく。

Step2

~/.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 関数を使えるようにしています。

Step3

適当なテキストファイルを emacs で開く。

なんやかんや https://www.mindboardapps.com/ なり

こんなテキストがあったとしてこの行にカーソルをあてた状態で M-x して my-open-url と入力、その後 RET キーを押します。 すると ChromeOS 側のブラウザに https://www.mindboardapps.com/ が表示されます。

もちろん my-open-url 関数はこのURL文字列を取得して xdg-open に渡しているだけなので、 環境によっては Linux 側のブラウザにそのページが表示されるなど、異なる振る舞いになるかもしれません。

まとめ

これで自作の関数を emacs でテキスト編集中に使えるようになりました。