Questions tagged «elisp»

与其他语言(尤其是与其他Lisp方言相比)有关Emacs Lisp作为一种语言的问题。也就是说,它是关于语言本身的问题。*请勿使用*关于*使用* Emacs Lisp的问题。Emacs Lisp是Emacs编辑器所基于的脚本和编程语言。

4
如何模拟Elisp的任意按键事件?
是否可以从elisp模拟任意键事件?我知道可以找到给定键的绑定,然后以交互方式调用该命令的方法,但是如果该键事件未绑定到命令怎么办? 举一个例子,如果我想绑定C-`以在所有上下文中与ESC键表现相同,该怎么办?


2
函数可以访问其名称吗?
在C语言中,有magic变量__func__保存当前函数的名称。在Bash中,有一个数组FUNCNAME保存调用堆栈中所有函数的名称! Emacs Lisp中有类似的东西吗?还是通过任何简单的方法来访问函数的名称? 我在Emacs Lisp手册中没有找到任何答案(有关函数或变量和函数索引以及..的第12章)
25 elisp  functions 

6
如何在第二个缓冲区中获取组织模式大纲作为动态目录?
当我编辑大型文档时,我想通过在单独的缓冲区中看到轮廓(没有内容)来查看我的位置。就像您阅读PDF文件时一样,左侧有一个目录。(见下文) 在组织模式下,可以展开/折叠轮廓。但是是否有可能在单独的缓冲区的左侧(或右侧)具有静态轮廓,以便当您单击标题时,另一个缓冲区移至该位置? 有点像这样,但对于组织模式? [编辑] 将clone-indirect-buffer是非常接近我想要的东西。难题的缺失部分是单击标题/(或实际上是任何一点)时跳转到相同的位置。 为此,我尝试编写一些代码:移动到其他克隆的缓冲区到同一点?(间接缓冲区的同步位置)(组织模式) 但是,如果内容被折叠,它将不起作用。如果可以做到这一点,那么clone-inderect-buffer就是一个完整的解决方案。 [Edit2解决方案] 上方链接和下方答案中的代码结合了niceley来解决来回跳转的问题。 ;first call 'clone-indirect-buffer'. Then... ;This function works between buffer and it's clone. (defun my/goto-same-spot-in-other-buffer () "Go to the same location in the other buffer. Useful for when you have cloned indirect buffers" (interactive) (let ((my/goto-current-point (point))) (other-window 1) (goto-char my/goto-current-point) (when …


2
通过编程将自定义变量重置为默认值
问:使用Elisp,如何在不知道变量值的情况下将变量重置为其默认值? 我试图找出解决方案,方法是为我在初始化文件中设置为非默认值的变量调出Customize接口,C-h k然后按一下,然后单击“还原...”按钮。这就带来了的文档widget-button-click,这显然并没有太大帮助。(类似地,C-h k RET按钮上的点显示的帮助Custom-newline,这也不是我想要的。)

1
排序使用什么算法?
我需要向已排序的列表中添加一个整数,以便将其放在正确的位置。我的第一个强项是 (sort (cons newelt list) #'<) 但是,鉴于list已经排序,实际上只需要一个插入,这意味着取决于所使用的算法,该解决方案可能非常不合适sort。 那么,使用哪种算法sort? 我会做以下更好的方法吗? (let ((tail list)) ;; The first element is never less-than (while (and tail (< newelt (cadr tail))) (setq tail (cdr tail))) (setcdr tail (cons newelt (cdr tail))) list)

1
purecopy需要什么功能?
我浏览时compile.el发现了这种结构: (defcustom compile-command (purecopy "make -k ")) 该purecopy文档说明: purecopy是“ C源代码”中的内置函数。 (纯副本OBJ) 在纯存储中复制对象OBJ。递归复制vector和cons单元的内容。不复制符号。复制没有文本属性的字符串。 因此,我认为我理解为什么如果期望compile-command包含一个复杂的列表,可能需要在以后进行修改,那么为什么有必要这样做。但是它只是一个简单的字符串,所以为什么有purecopy必要?更一般而言,何时purecopy需要?
23 elisp 

1
符号前面的'和#'有什么区别?
我对Emacs有点陌生。当查看某些配置时,我发现“ add-hook”中有两种类型的命令。 (add-hook 'LaTeX-mode-hook #'LaTeX-math-mode) 和 (add-hook 'LaTeX-mode-hook 'LaTeX-math-mode) 这让我很困惑了很长时间,而且我不知道如何在Google中搜索“#'” ... 谢谢。
22 elisp  hooks  functions  quote 

2
格式化(美化)Elisp代码的命令
假设我有一个如下所示的函数(在打印elisp输出时通常是这种情况)。 (defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a)))) 我想要一个可以将其转换为人类可以编写的命令的命令,例如以下命令。 (defun my-example-function () (let ((a (do-something)) (b (do-something))) (setq someone me) (with-current-buffer b (do-that (or this (and that those))) (format "%s" a)))) 我了解,格式化elisp代码的方式不只一种,而且不同的人做的方式也不同。此外,我了解它有些主观。但是,要想出一套规则,使代码至少是体面的,应该相当容易。 实际上,我前一段时间确实很难做到这一点,但是我认为最好是在重新发明轮子之前先问一下。 请注意,我知道pp函数,但还不能完全实现: (defun …
21 elisp  formatting 


3
为什么存在lisp-interaction-mode,我们是否需要它?
问:为什么lisp-interaction-mode存在,有什么理由代替它使用emacs-lisp-mode? 该手册指出,emacs-lisp-mode和lisp-interaction-mode是不同之处在于后者结合相同C-j到eval-print-last-sexp。除此之外,“ Lisp交互模式下的所有其他命令与Emacs Lisp模式下的相同。” 据我所知,只有*scratch*缓冲区使用后一种模式。 我感到奇怪的是,有一个整体模式与另一个模式只有一个按键绑定是不同的,所以我想我缺少一些历史或上下文。 所以: 为什么lisp-interaction-mode存在? 不计算C-j键绑定,在任何情况下都更可取emacs-lisp-mode? 将缓冲区的模式更改为*scratch*emacs-lisp-mode会不会有任何意外的后果? 这个问题的动机是,现在,我将键绑定两次(在两种模式下),以便*scratch*缓冲区的行为就像访问*.el文件的缓冲区一样。如果没有实际的理由可以lisp-interaction-mode解决,那么我就(setq initial-major-mode 'emacs-lisp-mode)解决了。

2
在大型缓冲区中获取“行中行号”的更快方法
line-number-at-pos当点接近缓冲区的末端时,该函数(当重复约50次时)会导致半大缓冲区(例如50,000条线)明显减速。减速是指总计约1.35秒。 与其使用100%的elisp函数对行进行计数并转到缓冲区的顶部,我对一种混合方法感兴趣,该方法利用了负责出现在模式行上的行号的内置C功能。不管缓冲区的大小如何,出现在模式行上的行号都会以光速出现。 这是一个测试功能: (defmacro measure-time (&rest body) "Measure the time it takes to evaluate BODY. http://lists.gnu.org/archive/html/help-gnu-emacs/2008-06/msg00087.html" `(let ((time (current-time))) ,@body (message "%.06f" (float-time (time-since time))))) (measure-time (let* ( line-numbers (window-start (window-start)) (window-end (window-end))) (save-excursion (goto-char window-end) (while (re-search-backward "\n" window-start t) (push (line-number-at-pos) line-numbers))) line-numbers))

2
设置变量或启用模式时如何在nil和0或t和1之间选择
我了解nil,0和/或-1用于禁用某些功能t,1和和/或+1用于启用某些功能。在分配变量或启用/禁用次要模式时,我应该选择哪个? 我已经看到所有这些变化都在某一点或另一点使用。这使我想知道它们之间是否确实存在差异。我已经看到有时使用0对我nil不起作用,而对我却不起作用。使用位置是否有差异?
19 elisp 

6
以列表形式获取缓冲区中的所有正则表达式匹配项
今天,在Code Golf Stack Exchange网站上,我在Clojure中找到了“获取网页上的所有链接”问题的答案。 (->> (slurp "http://www.stroustrup.com") (re-seq #"(?:http://)?www(?:[./#\+-]\w*)+")) 没有花哨的宏,就是这样: (re-seq #"(?:http://)?www(?:[./#\+-]\w*)+" (slurp "http://www.stroustrup.com")) 这将返回列表: ("http://www.morganstanley.com/" "http://www.cs.columbia.edu/" "http://www.cse.tamu.edu" ...) 我可以在Emacs Lisp中做类似的事情吗? 也许像(re-seq regexp (buffer-string))这样的函数返回'(firstmatch secondmatch thirdmatch ...)?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.