Questions tagged «elisp»

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




3
为什么在没有initvalue的情况下defvar作用域的工作方式有所不同?
假设我有一个名为elisp-defvar-test.el包含的文件: ;;; elisp-defvar-test.el --- -*- lexical-binding: t -*- (defvar my-dynamic-var) (defun f1 (x) "Should return X." (let ((my-dynamic-var x)) (f2))) (defun f2 () "Returns the current value of `my-dynamic-var'." my-dynamic-var) (provide 'elisp-dynamic-test) ;;; elisp-defvar-test.el ends here 我加载此文件,然后进入暂存缓冲区并运行: (setq lexical-binding t) (f1 5) (let ((my-dynamic-var 5)) (f2)) (f1 5)按预期返回5,表示的主体按预期f1被my-dynamic-var视为动态范围变量。但是,最后一种形式给出的变量变量为void my-dynamic-var,表明该变量使用词法作用域。似乎与的文档不一致,该文档defvar说: 该defvar表格还声明变量为“特殊”,所以它始终是动态即使势必lexical-binding为t。 …

2
什么时候应该使用尖引号?
我看到其他人的eLisp代码中使用了尖锐的引号,而我自己也使用了引号,但是我不清楚它们什么时候合适,什么时候不合适。 谁能确切说明何时应使用尖引号以及何时应使用普通单引号?
10 elisp  functions  quote  style 

2
是否可以将生成的文档字符串附加到lambda?
Emacs文档说,当文档字符串放在其中lambda或defun“直接存储在函数对象中”时。但是,我们可以像这样更改命名函数的文档: (put 'my-function-name 'function-documentation "Blah.") 但是,相同的技巧不适用于lambda。有没有一种方法可以向lambda添加文档?还是以某种方式动态生成文档字符串文字? 为了澄清,设想以下情况: (let ((foo 1) (bar 2)) (lambda () (+ foo bar))) 我希望Lambda有一个文档字符串,其中提到fooand的值bar。

3
hl-line-mode隐藏背景,如何避免这种情况?
带有: (when window-system (set-face-background 'hl-line "light yellow") (global-hl-line-mode 1)) 当前行以黄色背景突出显示,但是如果文本具有背景属性,它也会被覆盖(例如diff-mode,rainbow-mode)。 是否可以仅为没有适当属性的零件设置背景? 我开始进行实验的UPDATE,似乎点画与背景没有冲突: (set-face-stipple 'hl-line '(4 4 "\x01\x00\x00\x00")) (set-face-attribute 'hl-line nil :inherit nil) 但是不幸的是,点画会损坏文本外观。

3
如何从elisp回答minibuffer提示?
我偶尔会发现自己在自己编写的函数内部使用交互函数。如果某个函数要求提供某些信息(例如“输出文件:〜/”),是否有一种通用的省略号方式可将文本添加到小型缓冲区中,然后按Enter键,以便用户不必这样做? 例如,假设我想org-latex-export-to-pdf在函数内部运行,但是我不想用户必须指定文件名。运行(org-latex-export-to-pdf)会将点移动到迷你缓冲区,但是(insert "filename.tex")在下一行放置类似内容似乎无效。
10 elisp 


1
简单的request.el使用
我尴尬的问题很简单: 为什么以下代码有效: (require 'request) (defun geocoder () (request "http://rpc.geocoder.us/service/csv" ;;; **Hardcoded parameter!** :params '(("address" . "1600 Pennsylvania Ave, Washington DC")) :parser 'buffer-string :success (function* (lambda (&key data &allow-other-keys) (when data (with-current-buffer (get-buffer-create "*request demo*") (erase-buffer) (insert data) (pop-to-buffer (current-buffer)))))) :error (function* (lambda (&key error-thrown &allow-other-keys&rest _) (message "Got error: %S" …
9 elisp 

2
如何确定包装中需要的包装版本?
我现在有几个软件包,在PackageRequires部分中,我想将我需要的所有软件包放入其中,好像它需要名称和版本。您在哪里确定版本号?例如,我有(cl-lib“ 0.5”),但是确定我可以使用的最低版本的最佳方法是什么?我可以看到当前版本,但是确定所需最小值的最佳方法是什么?另外,某些必需的软件包在其文件中未指定版本。在这些情况下,建议什么?
9 elisp  package 

3
如何控制org todo关键字缓冲区的显示位置?
问:如何控制orgtodo关键字缓冲区的显示位置? todo使用C-c C-t(org-todo)输入关键字会打开一个包含关键字选项的新缓冲区,然后在选择一个缓冲区后再次将其关闭。到目前为止,一切都很好。但是,这样做却要接管另一个窗口,这不太好,尤其是因为它实际上只需要显示带有关键字的一两行。 因此,使用以下布局,C-c C-t在左侧窗口(some-org-buffer)中单击时将*Org todo*在右侧窗口中打开: +---------------------+---------------------+ | | | | | | | | | | | | | some-org-buffer | some-other-buffer | | | | | | | | | | | | | +---------------------+---------------------+ 相反,我想弹出一个小窗口作为垂直拆分,如下所示: +---------------------+---------------------+ | | | | | | | some-org-buffer | some-other-buffer | …

1
如何切换组织模式源代码块的“:eval no”状态
我经常使用:eval标头参数来限制或取消对组织模式babel中特定代码块的评估。 这是一个例子: #+BEGIN_SRC emacs-lisp :results value scalar :eval no (+ 1 1) #+END_SRC #+RESULTS: : 2 我手动在:eval no和之间:eval n(或:eval no完全删除)之间切换代码块。 #+PROPERTY: eval no 方便,但不适用于每个代码块。 有没有更好的方法来:eval方便地切换状态,如下所示? C-c C-t (org-todo) Rotate the TODO state of the current item among (unmarked) -> TODO -> DONE
9 org-mode  elisp 

4
在Elisp中深度复制字符串?
我有一个适当的字符串。我想对其进行深拷贝,以添加更多属性,同时将属性保留在原始字符串中。我该怎么做(轻松)? 例 一对一评估: (setq test-str-1 #(";; This `is' a test" 0 3 (fontified nil face font-lock-comment-delimiter-face) 3 9 (fontified nil face font-lock-comment-face) 9 11 (fontified nil face (font-lock-constant-face font-lock-comment-face)) 11 19 (fontified nil face font-lock-comment-face))) (setq test-str-2 (concat test-str-1)) (add-face-text-property 0 (length test-str-2) 'foobar t test-str-2) 结果: test-str-2 ;; => …
9 elisp 

4
如何确定当前字符是否为字母
如何确定当前字符是否是字母(字母字符)(即属于[:alpha:]regexp概念中的语法类)。我想编写一个简单的函数,如下所示: (defun test-letter () (interactive) (if char-after-is-a-letter (message "This is a letter") (message "This is not a letter") ) ) 更新 不幸的是,我对字母类和语法类等效的假设[:alpha:]似乎是错误的。

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.