2012-09-13 49 views
1

好的,noob問題也許,但我無法找到關於這個東西的信息。我想編寫一個函數,它將一個區域中選擇的任何內容傳遞給curl。 Curl會返回一些內容,我希望能夠替換選定的區域。換句話說,在區域中選擇www.foo.com並運行該功能後,它將被替換爲在命令行上運行的任何捲曲將返回curl www.foo.com如何通過「shell-command-on-region」將區域傳遞給shell命令?

這是我的嘗試,這是非常非常錯誤的。基本上,我無法弄清楚如何選定區域傳遞作爲一個變量來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的文字處理程序的指針,請分享(不引用請手冊)。謝謝!

編輯:

感謝蘭迪·莫里斯,我能找出答案:

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

回答

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並把它傳遞給捲曲,然後轉儲該網站的內容在一個新的緩衝區:

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

另外值得注意的是這種東西的原生url-函數,但我意識到這超出了這個問題的範圍。

+0

當然,我可以得到開始和結束點,但我如何運行它們之間的命令?我確定像'(shell-command(concat「curl」p1 p2))''是無效的,我錯了嗎? – mart1n

+0

是的,看來我誤解了你的問題。我會看看,如果我可以的話,我可以解決這個問題。 –

+0

我編輯了這個,我想這可能會回答你的問題。 –

相關問題