我有这个清单:
("x" "y" "z")
Run Code Online (Sandbox Code Playgroud)
如何从列表中提取元素?(在这种情况下,我对列表中的第一个元素感兴趣,但我正在寻找一个通用的解决方案.)
看看这个简单的程序:
(defun test ()
(interactive)
(push-mark)
(setq mark-active t)
(search-forward "a" nil nil 1))
Run Code Online (Sandbox Code Playgroud)
它将光标移动到最近的'a',并突出显示路径.当然,这很明显.
但它的行为有所不同,具体取决于执行此过程后您的下一个输入是什么,例如,您输入一个字符,如'b'或\ Cg,突出显示消失,但如果您输入\ Cf或\ Ce,则突出显示保持不变.所以这是我的问题:是什么让这些输入表现不同?
假设我有一个变量newName,它带有一些模式名称,例如"python-mode".如何创建newName指定的模式的当前缓冲区?
(progn
(let (newName)
(setq newName "python-mode")
(newName) ;; doesn't work! It doesn't set current buffer's mode to be a python mode.
)
)
Run Code Online (Sandbox Code Playgroud)
这也行不通:
(set-variable 'major-mode "python-mode")
Run Code Online (Sandbox Code Playgroud)
这个问题是基本的 - 因为它等于"是否真的可以将数据视为lisp中的代码?"
编辑
@phils
您的解决方案对我不起作用.我复制一个缓冲区 - 我希望新的缓冲区具有与旧缓冲区相同的模式.所以我将原始缓冲区的模式存储在变量中.然后尝试应用您的解决方案.它给出了错误(这是本质 - 我在这里省略了缓冲区复制的东西):
(let (sameMode)
(setq sameMode major-mode)
(funcall (intern sameMode))
)
Run Code Online (Sandbox Code Playgroud)
sameMode以"python-mode"的形式存储此模式(python-mode的示例).
我有一个自定义设置面,我曾在emacs启动文件中使用,特别是当我启动乳胶文件但我正在合并和更新我的.emacs文件,所以我没有启动单独启动乳胶文件的特写过程.我想设置它,以便仅在乳胶模式打开时设置此自定义面.因为它是一个自定义的面孔我不认为设置一个LaTeX模式钩子是明智的,但我知道应该有一种方法来做到这一点.我只是在输入时才更改字体和文本大小.如果可能的话,我也希望这能用于文本模式.附上下面的自定义面.
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(default ((t (:inherit nil :stipple nil :background "white" :foreground "black" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 98 :width normal :foundry "unknown" :family "DejaVu Sans")))))
Run Code Online (Sandbox Code Playgroud) 我使用(find-file-noselect"filename"),但它总是询问"文件已更改.从磁盘重读?" 我必须回答是的.如果不问,怎么能重读呢?
这是我的尝试:
(if (eq system-type 'gnu/linux)
(load "/usr/share/emacs/site-lisp/site-gentoo")
(require 'site-gentoo))
Run Code Online (Sandbox Code Playgroud)
但无论如何我在Windows上收到错误:
/.emacs':
File error: Cannot open load file, site-gentoo
Run Code Online (Sandbox Code Playgroud) 我有一个名为TABLE1的表,我正在尝试将列表传递给函数foo,如下所示:
#+TBLFM: $1='(foo list(a b c))
(defun foo (my-list)
(first my-list)
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,表公式的计算结果为#ERROR.知道如何将列表传递给函数吗?
我希望输出像0 1,但下面的代码只打印nil.我使用type-of来测试(第一个十六进制),它是整数.%d应该有效,对吧?如果我使用消息,它可以在Emacs中使用.
(defun draw-board (board)
(loop for x below 2
for hex = (aref board x)
do (format "%d " (first hex))))
(draw-board [(0 2) (1 2) (0 3) (0 2)])
Run Code Online (Sandbox Code Playgroud) 是否可以仅针对特定模式/缓冲区使用defadvice修改函数的行为?我希望mouse-yank-primary插入额外的文本,但只有在我处于特定模式时.对于mouse-yank-primary,我试过'defadvice',但是一旦激活它也可以在所有其他缓冲区中运行.
我认为可以通过在模式挂钩中将鼠标按钮重新绑定到我自己的函数来解决,但是elisp手册说最好使用defadvice.
我想将Cx-insert绑定到命令.这有效:
(global-set-key [\C-insert] 'my-func)
Run Code Online (Sandbox Code Playgroud)
但这不是:
(global-set-key [\C-x-insert] 'my-func)
Run Code Online (Sandbox Code Playgroud)