2

我在 emacs 中 sql-mode 的典型用法是:

一种。打开 foo.sql 文件并开始编辑

湾。决定我想使用 sql-send-region 的键绑定来运行它

C。启动我的自定义 (db-connect) 函数以连接到适当的数据库并创建 *SQL* 缓冲区。

但是 foo.sql 不知道 *SQL* 缓冲区的存在,除非我在缓冲区中执行“mx sql-mode”以刷新其环境并检测此时存在这样的缓冲区。我想在我的自定义 db-connect 函数中嵌入一些代码,以使用 sql-mode 访问所有缓冲区并更新 sql-buffer 变量。我确信几个堆栈溢出成员之前必须这样做或类似的事情。

谢谢,

SetJmp

4

2 回答 2

4

快速查看sql.el文件显示命令sql-set-sqli-buffer-generally,也许这适合你?

sql-buffer您可以处理此问题的另一种方法是通过调用kill-local-variable您的主要模式挂钩来终止缓冲区本地变体。(这样一来,所有 SQL 缓冲区都会与最新的 SQL 缓冲区对话。)

免责声明:我对 SQL 或 SQL 模式一无所知,一般只知道 Emacs。

于 2011-03-25T10:52:34.047 回答
2

我已经实现了这个小助手函数来通过他们的主要模式过滤缓冲区

(defun buffer-mode (buffer-or-name)
  (with-current-buffer buffer-or-name major-mode))


(defun filter-buffers-by-mode (mode)
  (delq nil
        (mapcar
         (lambda (x) (and (eq (buffer-mode x) mode) x))
         (buffer-list))))

您可以将 'sql-mode 作为参数传递,您将获得所有打开的 sql 缓冲区的列表。

于 2011-03-24T19:25:39.717 回答