小编mbo*_*ork的帖子

PATH(由setenv设置)和GNU Emacs中的exec-path之间究竟有什么区别?

嗯,标题就是这一切.我曾经(setenv "PATH" "whatever:$PATH" t)能够从Emacs调用事物(事实上,有一件事 - 来自AUCTeX内部的ConTeXt).就在不久前我才了解到exec-path.我应该使用它吗?

emacs elisp

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

如何将区域或整个缓冲区复制到Emacs中的另一个缓冲区而不影响kill ring?

我想将该区域复制到Emacs中的另一个(临时)缓冲区,但如果没有(acive)区域,我想复制整个当前缓冲区.我做的是如下:

(defun do-something-with-region-or-buffer ()
  (interactive)
  (save-excursion
    (let ((begin (point-min)) (end (point-max)))
      (when (region-active-p)
        (setq begin (region-beginning))
        (setq end (region-end)))
      (copy-region-as-kill begin end)
      (with-temp-buffer
        (switch-to-buffer (current-buffer))
        (rename-buffer "*My Temp Buffer*")
        (delete-other-windows)
        (yank)
        (do-something-with-current-buffer)))))
Run Code Online (Sandbox Code Playgroud)

但是,我有一种强烈的感觉,这是不是最理想的,因为我正在搞乱杀戮戒指.怎么做而不影响它?(额外的问题:如果没有活跃的区域,那么我可以用区域整个缓冲区做事吗?)

emacs elisp

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

宏参数的解构“真的需要”吗?

我知道 LISP 宏参数中的解构是一件好事;我想知道这是否是必要的。举个例子,

(defmacro m1 (a) (car a))
Run Code Online (Sandbox Code Playgroud)

(defmacro m2 ((a1 a2)) a1)
Run Code Online (Sandbox Code Playgroud)

似乎(大致)等效 - 除了检查参数的正确形式。

我的猜测是,解构使代码更容易编写/理解,但任何使用它的代码都可能被翻译成不那么容易编写/理解的代码。我是对的还是这是一个愚蠢的初学者错误?

lisp macros destructuring

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

如何在Emacs次要模式下重新绑定TAB和RET?

我试图定义我的次要模式,之后模仿它isearch-mode(因为它是一种交互式搜索和替换工具,我认为它可能是一个很好的起点).我的命令运行良好(在全局键绑定上测试),但我在本地(在次模式映射中)将它们绑定到某些键(即TAB和RET)时遇到严重问题.我正在做这样的事情:

(defvar my-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map "\s" 'my-command)
    (define-key map "\t" 'another-one)
    (define-key map "\r" 'yet-another)
    map))
Run Code Online (Sandbox Code Playgroud)

(当然,我确实把我的keymap放到了minor-mode-map-alist中.)

虽然空间绑定命令工作正常,但TAB和RET在某种程度上没有.如果我改变,例如,"\ t"改为"[f11]",它可以正常工作.我尝试使用"矢量符号"([?\ t]),结果相同(在我的键盘映射之后,这并不奇怪).可能会发生什么?

编辑:澄清问题,我试图隔离它,我想出了以下代码.假设我想要一个人为的,相当小的次要模式tabbang,其中TAB键插入一个感叹号.我这样做:

(defvar tabbang-mode)
(add-to-list 'minor-mode-alist '(tabbang-mode tabbang-mode) t)

(defvar tabbang-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map [?\t] 'tabbang-insert-bang)
    (define-key map [?\C-\t] 'tabbang-insert-bang)
    (define-key map [f11] 'tabbang-insert-bang)
    (define-key map [?\r] 'tabbang-done)
    (define-key map [t] 'tabbang-other-char)
    map))
(add-to-list 'minor-mode-map-alist `(tabbang-mode . ,tabbang-mode-map) t)

(defun tabbang-insert-bang ()
  (interactive)
  (insert "!"))

(defun tabbang-mode ()
  (interactive) …
Run Code Online (Sandbox Code Playgroud)

emacs elisp keymapping

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

如何编写一个elisp函数返回文件的内容作为字符串?

嗯,标题有这一切;).当然,我可以创建一个新的缓冲区,insert-file-contents然后将它放入变量,杀死缓冲区并返回变量 - 但这似乎有点过分.有没有更好的办法?

NB.我的用例是.emacs声明smtpmail-auth-credentials- 我在一些文件中有我的密码,并且不想再把它放进.emacs去.

elisp file

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

交叉连接可以是“隐式横向”吗?

假设有以下相当简单的数据库:

CREATE TABLE test_table(
  name TEXT,
  data JSONB
);
INSERT INTO test_table VALUES ('name1', '{"a": 1, "b": 2}'), ('name2', '{"c": 3, "d": 4, "e": 5}');
Run Code Online (Sandbox Code Playgroud)

所以我们有下表:

# SELECT * FROM test_table ;
 name  |           data
-------+--------------------------
 name1 | {"a": 1, "b": 2}
 name2 | {"c": 3, "d": 4, "e": 5}
(2 rows)
Run Code Online (Sandbox Code Playgroud)

现在我看到了这样的查询:

# SELECT * FROM test_table CROSS JOIN JSONB_EACH(test_table.data);
Run Code Online (Sandbox Code Playgroud)

返回以下结果:

 name  |           data           | key | value
-------+--------------------------+-----+-------
 name1 | {"a": 1, "b": 2}         | a   | 1 …
Run Code Online (Sandbox Code Playgroud)

postgresql jsonb lateral-join

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

什么是GTK中的timeout_id?

我正在阅读官方的PyGObject教程,我在其中一个例子中发现了这个(无法解释的)行:

self.timeout_id = None
Run Code Online (Sandbox Code Playgroud)

(它__init__属于Gtk.Window-descendant类的功能;整个列表在这里).我不能谷歌呢; 这是为了什么?

gtk pygobject

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

给定一个文件,如何找出mercurial存储库中的哪个版本?

假设hg版本控制下有一个文件.我有该文件的特定版本,我想知道此文件在此版本中的修订版本.

我怀疑有两种可能的方法可以做到这一点.

  1. 不要hg update在一个循环,并针对diff的后续版本文件(sloooow,但应该工作).

  2. Make Mercurial在提交之前将转号放在文件的第二行中,例如注释中.从我所读到的,precommit钩子可能是有用的.然后我不必比较任何东西,只看文件本身(我假设没有人会改变这个,当然,但在我的情况下这是相当安全的假设).

我的用例是一篇用LaTeX编写的联合论文,有两位共同作者根本不知道版本控制,但我更喜欢使用它(出于显而易见的原因).我们通过电子邮件进行沟通,并且实际上有一个基于人的锁系统("在你发给我下一个版本之前,我不会对这个文件起作用,好吗?").这产生唯一的问题是,我要送X版本,以笔者B到校对,然后笔者C发送我一个修正版本,Y和我犯到我的回购,那么笔者B发送改正Z(到版本X)和我我开始迷路 - 但是我可以检查发送给B的电子邮件中的附件,我只需要找出它是哪个版本.

所以,我的问题是:上面两个想法中的哪一个会更好,或者还有另外一个可以帮我处理这个烂摊子?

mercurial

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