1

わかりました、初心者の質問かもしれませんが、この件に関する情報を見つけるのに苦労しています。領域で選択されたものを何でも受け取り、curl に渡す関数を書きたいと思います。Curl が何かを返すので、選択した領域をその何かに置き換えたいと考えています。つまり、リージョンで www.foo.com を選択して関数を実行すると、コマンド ラインで を使用して実行した場合に curl が返すものに置き換えられcurl www.foo.comます。

これは非常に間違っている私の試みです。基本的に、選択した領域を変数として に渡す方法がわかりませんshell-command-on-region

(defun curl-something()
  (interactive)
  (setq region ((region-beginning)(region-end)))
  (shell-command-on-region (region-beginning) (region-end) (shell-command (concat "curl" region)) nil t))

また、基本的な elisp テキスト操作プログラミングをどこで学ぶべきかについて誰かが何か指針を持っている場合は、それらを共有してください (リファレンス マニュアルではありません)。ありがとう!

編集:

Randy Morris のおかげで、答えを見つけることができました。

(defun curl-something (begin end)
  (interactive "r")
  (shell-command-on-region begin end (concat "curl -s " (buffer-substring begin end)) nil t))
4

1 に答える 1

2

「r」フラグをに渡す必要があります(interactive)。次に、関数には、領域内のテキストを取得するために使用できる数値引数として、領域の開始と終了が渡されます。

これがErgoEmacsからの例です:

(defun dosomething-region (p1 p2)
  "Prints region starting and ending positions." 
  (interactive "r")
  (message "Region starts: %d, end at: %d" p1 p2))

次の関数は、URLを取得してcurlに渡し、そのWebサイトのコンテンツを新しいバッファーにダンプします。

(defun curl-something (begin end)
  (interactive "r")
  (shell-command (concat "curl " (buffer-substring begin end))))

また、この種のネイティブ関数も注目に値しますが、url-これはこの質問の範囲を超えていることを認識しています。

于 2012-09-13T11:06:17.993 に答える