簡體   English   中英

為什么Emacs中的“goto-line”僅用於交互式使用?

[英]Why is “goto-line” in Emacs for interactive use only?

如果在非交互式elisp程序中使用goto-line函數會出現什么問題? 它的docstring發出警告說:

在Lisp程序中使用此函數通常是錯誤的。 您可能想要的是:

 (goto-char (point-min)) (forward-line (1- N)) 

而且,當我嘗試使用goto-line我的init文件進行byte-compile-file ,我再次得到一個令人不快的警告:

.emacs:170:19:Warning: `goto-line' used from Lisp code
That command is designed for interactive use only

在非交互式程序中使用goto-line真的那么危險嗎? 相關地,為什么建議的forward-line解決方案更可取?

首先,這可以防止Elisp程序員陷入壞習慣 - 以行號為中心編寫低效的代碼。 即代替使用(forward-line 1)計算當前行號,遞增和使用goto-line

這個郵件列表文章:

簡而言之,goto-line不應該是一個經常使用的命令的原因是通常沒有理由想要獲得行號N,除非你有一個程序告訴你在那一行有一些有趣的東西。

其次,除了移動點(即push-mark )之外,goto-line還操縱用戶的環境。 對於非交互式使用,這可能不是您想要的。 另一方面,如果考慮到所有這些,你相信goto-line正是你需要的,那么就這樣稱呼它:

(defun foo ()
  (interactive)
  (with-no-warnings
    (goto-line N)))

並且您不會收到任何編譯器警告。

除了所說的:

“goto-line”最后再次出現在“(前線(1-行)”上,這實際上是完成了工作。“goto-line”命令體的43行中的所有其他行處理交互式使用。例如考慮到可能普遍的論點。

編寫程序時 在運行它時,您的計算機處於另一種狀態,而不是跟隨交互式呼叫。 因此,你應該直接使用“前線”來解決這種狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM