标签: elisp

密钥绑定在emacs中被覆盖

我有自己的用户定义的键绑定,如下所述: 全局覆盖Emacs中的键绑定

每当我加载一个新的主要模式时,比如说OrgMode,我会覆盖一些我的绑定,以满足我在特定模式下的需求.但是当我加载另一个主要模式,它有自己的重写时,即使我不再处于具有该主模式的缓冲区,它们也会保持不变.

例如

(define-key custom-keys-mode-map (kbd "C-p") 'some-cool-function)
(add-hook 'org-mode-hook
    (lambda ()
    (define-key custom-keys-mode-map (kbd "C-p") 'org-cool-function )))
(add-hook 'sunrise-mode-hook
    (lambda ()
    (define-key custom-keys-mode-map (kbd "C-p") 'sunrise-cool-function )))
Run Code Online (Sandbox Code Playgroud)

起初我使用Cp来执行我的酷,默认功能.加载组织模式后,我使用Cp执行"org-cool-function",当我加载Sunrise-Commander时,Cp执行"sunrise-cool-function".

但是当我回到Org-Mode文件时,Cp仍然试图执行"sunrise-cool-function"而不是"org-cool-function".

希望我很清楚:)

emacs elisp

1
推荐指数
1
解决办法
306
查看次数

是否有magit中的功能,emacs git add-on,可以跳转到编辑?

在Jetbrains产品中,如IntelliJ和RubyMine,你可以在git diff的diff窗口中点击F4跳转到当前编辑.Magit中是否有任何功能可以让emacs从git直接转到diff?

git emacs elisp magit emacs24

1
推荐指数
1
解决办法
137
查看次数

为键盘退出定义一个新功能并突出显示清除

我对elisp很新,我试图在搜索时定义一个设置突出显示行为的函数.目标是:之后i-search,我希望能够清除突出显示C-g,但是如果我按回车键,我希望保持高亮显示.

所以我在我的定义了一个函数init.el:

(defun keyboard-quit-cleanup ()
  "clean up highligh after keyboard quit"
  (keyboard-quit)
  (lazy-highlight-cleanup))
(global-set-key (kbd "C-g") '(keyboard-quit-cleanup))
Run Code Online (Sandbox Code Playgroud)

然而,它不起作用.这有什么不对?

谢谢!

emacs elisp

1
推荐指数
1
解决办法
174
查看次数

有没有更好的方法来解决emacs lib依赖关系?

当我尝试在emacs项目中运行测试文件时遇到一个问题。

例如,我将此项目克隆到主目录中,将cd 克隆到测试目录中,然后用于emacs -batch -l ert -l nrepl-tests.el -f ert-run-tests-batch-and-exit运行测试。但是找不到文件nrepl.el,该文件不在同一目录中。因此,我将其中一个复制到〜/ nrep.el / test中。但是它说“无法打开加载文件:clojure-mode”。这是我要提出的问题。

我确实有clojure-mode和其他使用nrepl.el的库。但是它们都在不同的目录中(在我的情况下是〜/ emacs.d / packs / live / clojure-pack / lib /)。为了运行测试,是否必须将这些文件复制到克隆的nrepl项目中?是否有更好的方法可以像在IDE中一样运行测试文件。例如,在Intellij中,我只需在测试文件中编写import语句,它就会自动为我准备依赖库。这让我很困扰。我想知道是否有针对此问题的最佳实践。

emacs unit-testing elisp dependency-management ert

1
推荐指数
1
解决办法
96
查看次数

emacs的基本功能

我之前从未编写过emacs函数,并且想知道是否有人可以帮助我开始.我希望有一个函数,它将突出显示的区域解析它(通过","),然后用已经内置到emacs中的另一个函数计算每个块.

突出显示的代码可能是这个样子:x <- function(w=NULL,y=1,z=20){}(R代码),我想刮出来w=NULL,y=1z=20然后通过每一个功能已经包含emacs的.有关如何入门的任何建议?

emacs elisp

1
推荐指数
1
解决办法
237
查看次数

Emacs应该有一个hook.el文件吗?

所以我有这个文件称为hooks.elemacs.d有这样的内容:

(add-hook 'term-mode-hook ...)
(add-hook 'term-exec-mode-hook ...)
(add-hook 'python-mode-hook ...)
(add-hook 'ido-setup-hook ...)
(add-hook 'makefile-mode-hook ...)
(add-hook 'c-mode-common-hook ...)
(add-hook 'c-mode-hook ...)
(add-hook 'c++-mode-hook ...)
(add-hook 'dired-mode-hook
      (lambda()
        (define-key dired-mode-map "h" 'dired-previous-line)
        (define-key dired-mode-map "j" 'ido-find-file)
            ;; ...
            ))
Run Code Online (Sandbox Code Playgroud)

我只是想知道我是否在做一些奇怪的事情,或者这确实是基于模式分配快捷方式的惯用方法?

我的意思是在这里添加钩子而不是明白地写:

(define-key dired-mode-map "h" 'dired-previous-line)
Run Code Online (Sandbox Code Playgroud)

当然,除非dired加载并dired-mode-map定义,否则这将不起作用,因此钩子.并且加载所有模式可能不是最好的事情,即使我不是总是使用它们,只是为了定义自定义快捷方式.但另一方面,钩子正在为每个新的缓冲区打开 - 所有这些快捷方式都被重复定义,而不是一次.

你对此事有何看法?我确信我可以切换到更优化的东西.

在此期间,我可以为我展示书签hooks.el:

(defun goto-hook-file ()
  "Opens hooks.el at point specific to current `major-mode'"
  (interactive)
  (let ((str-mode-hook (format "%s-hook" major-mode)))
    (find-file (concat emacs.d …
Run Code Online (Sandbox Code Playgroud)

emacs elisp

1
推荐指数
1
解决办法
97
查看次数

查找项目中文件的相对路径

我的项目文件以这种格式设置:

/home/user/proj/source
/home/user/proj/source/src1
/home/user/proj/source/src1
/home/user/proj/header ...etc
Run Code Online (Sandbox Code Playgroud)

我有办法在查看任何源文件时找到项目路径

"/home/user/proj"
Run Code Online (Sandbox Code Playgroud)

此外,(buffer-file-name)给出给定源文件的完整绝对路径.

如何编写一个提取源文件相对路径的lisp函数?

意思是,如果我正在观看

/home/user/proj/source/src1/file.c
Run Code Online (Sandbox Code Playgroud)

我想有这条路

"source/src1/file.c"
Run Code Online (Sandbox Code Playgroud)

以下函数为我提供了项目路径:

(defun upward-find-file (filename &optional startdir)
  (let ((dirname (expand-file-name
          (if startdir startdir ".")))
    (found nil) ; found is set as a flag to leave loop if we find it
    (top nil))  ; top is set when we get
            ; to / so that we only check it once
    ; While we've neither been at the top last time nor have we found
    ; the file.
    (while …
Run Code Online (Sandbox Code Playgroud)

emacs elisp

1
推荐指数
1
解决办法
740
查看次数

Emacs:如果latexmk完成正常,则显示pdf,否则显示错误

任何人都可以请第一个 start-process第二个 之间的步骤start-process.显示pdf文件的第二个 start-process应该运行only if一个 start-process完成而没有错误.可能会发现某种类型的成功退出代码,但在这方面我需要一些帮助.

我愿意接受有关如何最好地确定第一次 start-process完成是否没有错误的建议.一种方法是查看output缓冲区以确定最后一行是否等于"处理process完成".使*.pdf文件即使没有错误也可能需要几秒钟,而如果它过早开始则第二个 start-process失败.Sit-for不是最好的选择,因为如果第一个没有正确完成,第二个 start-process应该被中止.生成缓冲区也需要几秒钟,因此检查缓冲区中的最后一行还需要等到第一行 start-processoutput start-process饰面.但是,发现一个成功的退出代码(如果存在这样的东西)将比搜索输出缓冲区中的字符串等更好....

仅供参考:.latexmkrc $pdflatex代码行将*.pdf的副本放回工作目录,而.latexmkrc $out_dir代码行将所有辅助文件放入/tmp文件夹中.这是必需的,因为Tex-Live for OSX不支持$aux_dir.结果是一个干净的工作目录,只包含*.tex和*.pdf文件.

(defun latexmk ()
  ".latexmkrc should contain the following entries -- without the backslashes:
  $pdflatex .= ' && (cp \"%D\" \"%R.pdf\")';
  $force_mode = 1;
  $pdf_mode = 1;
  $out_dir …
Run Code Online (Sandbox Code Playgroud)

emacs elisp

1
推荐指数
1
解决办法
1045
查看次数

这个emacs配置在做什么?

(setq backup-directory-alist `(("." . "~/.saves")))
Run Code Online (Sandbox Code Playgroud)

我知道它正在设置保存备份文件的目录,但我不明白该`(("." . "~/.saves"))部件正在做什么.特别:

  1. 什么是'标记在做什么?(还有那个东西有一个特殊的可谷歌名字吗?)
  2. 为什么这需要双括号?在默认设置中就是这样,而不仅仅是在我的配置文件中.
  3. 似乎单独的.内部可能是某种替换运算符,我注意到我有另一个类似的行用逗号代替.这些事情的作用是什么?

我的google-fu在找出lisp中标点符号的作用时失败了,而且我懒得通过emacs lisp教程.

emacs elisp

1
推荐指数
1
解决办法
90
查看次数

函数式编程替代了Lisp中的while/break

有一个字符串列表.想法是编写一个迭代字符串列表的函数,如果找到匹配则返回字符串名称,否则nil.这可以用语言编写

string match-string(tmp)
{
    for (int i = 0; i < stringList.size(); ++i)
    {
       if (tmp == stringList.at(i))
           return tmp;
    }
    return string(); // null string
}
Run Code Online (Sandbox Code Playgroud)

在这篇文章中提到通常循环不在Lisp中使用,必须有一个功能方式.有什么功能可以做到这一点?

lisp emacs functional-programming elisp

1
推荐指数
1
解决办法
818
查看次数