1

ある種の elisp 関数を作成し、2 つの形式のいずれかで URL を取得するキーにバインドし、HTML リンク要素を生成したいと考えています。

2 つの入力形式を次に示します。

http://developer.apple.com/safaridemos/
http://developer.apple.com/safaridemos|Safari Demos

必要な 2 つの出力値は次のとおりです。

<a href="http://developer.apple.com/safaridemos/">safaridemos</a>
<a href="http://developer.apple.com/safaridemos/">Safari Demos</a>

理想的には、これはリージョンで機能しますが、1 行でしか機能しない場合でも役に立ちます。

4

2 に答える 2

18

これを行う1つの方法があります。この方法は、ユーザーにリンクに変換する必要のあるテキストを選択させてから、それを置き換えることで機能します。

;;; http://developer.apple.com/safaridemos|Safari Demos
;;; becomes <a href="http://developer.apple.com/safaridemos">Safari Demos</a>
;;; http://developer.apple.com/safaridemos|Safari Demos
;;; <a href="http://developer.apple.com/safaridemos">Safari Demos</a>

  (defun url-to-html-link(input)
  "Convert INPUT url into a html link. The link text will be the text after the last slash or you can end the url with a | and add text after that"
  (let ((split-on-| (split-string input "|"))
    (split-on-/ (split-string input "/"))
    (fmt-string "<a href=\"%s\">%s</a>"))
    (if (> (length split-on-|) 1)
    (format fmt-string (first split-on-|) (second split-on-|))
      (format fmt-string input (first (last split-on-/))))))


(defun url-region-to-html-link(b e)
  (interactive "r")
  (let ((link 
     (url-to-html-link (buffer-substring-no-properties b e))))
    (delete-region b e)
    (insert link)))

(global-set-key (kbd "C-c j") 'url-region-to-html-link)

編集:最初の関数をと組み合わせて使用query-replace-regexp​​して、インタラクティブなコマンドを作成することもできます。

(defun query-replace-urls ()
  (interactive)
  (query-replace-regexp "http://.*"
                        (quote (replace-eval-replacement replace-quote (url-to-html-link (match-string 0))))
                        nil
                        (if (and transient-mark-mode mark-active) (region-beginning))
                        (if (and transient-mark-mode mark-active) (region-end))))
于 2012-07-29T03:47:34.210 に答える
8

おそらく、スニペットエンジンを使用する方が良いでしょうか? たとえば、Yasnippet は、ボイラープレート テキストを埋めるための略語メカニズムと同様のものを提供します。以下のスニペットを正確にどこで入手したかは覚えていませんが、そのようなものを自分で思いつくのは簡単です。

# contributor: Jimmy Wu <frozenthrone88 at gmail dot com>
# name: <a href="...">...</a>
# key: href
# --
<a href="$1">$2</a>

Yasnippet では、プレースホルダーにデフォルト値を配置したり、eLisp コードを使用して、スニペットにデータを入力したり、システム状態から値を読み取ったりしながら、インタラクティブにユーザーにクエリを実行することもできます。

于 2012-07-29T05:24:44.903 に答える