Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs:如何访问所有sql模式缓冲区并设置适当的sql缓冲区_Emacs_Buffer_Sql Mode - Fatal编程技术网

Emacs:如何访问所有sql模式缓冲区并设置适当的sql缓冲区

Emacs:如何访问所有sql模式缓冲区并设置适当的sql缓冲区,emacs,buffer,sql-mode,Emacs,Buffer,Sql Mode,我在emacs中sql模式的典型用法是: a。打开foo.sql文件并开始编辑 b。决定是否要使用sql发送区域的键绑定运行它 c。启动my custom(db connect)函数以连接到适当的数据库并创建*SQL*缓冲区 但是,foo.sql不知道*sql*缓冲区的存在,除非我在缓冲区中执行“m-x sql模式”,以刷新其环境并检测到此时存在这样的缓冲区。我想在自定义db connect函数中嵌入一些代码,以便使用sql模式访问所有缓冲区并更新sql缓冲区变量。我确信几个堆栈溢出成员以前一定

我在emacs中sql模式的典型用法是:

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

b。决定是否要使用sql发送区域的键绑定运行它

c。启动my custom(db connect)函数以连接到适当的数据库并创建*SQL*缓冲区

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

谢谢


SetJmp

我已经实现了这个小助手函数,以按缓冲区的主模式过滤缓冲区

(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缓冲区的列表。

快速查看
sql.el
文件显示命令
sql set sqli buffer generally
,也许这是适合您的

另一种方法是通过在主模式钩子中调用
kill local variable
来杀死
sqlbuffer
的缓冲区局部变量。(这样,所有SQL缓冲区都将与最新的SQL缓冲区通信。)


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

这段代码适用于一些旧版本的Emacs吗?在我的Emacs 23.3.1(OS X)上,它因(无效函数缓冲模式)而失败。我猜这意味着提取缓冲区的主模式。它在变量
主模式下可用,该模式是缓冲区本地模式。不,它不是旧模式。这只是我写的东西,但我完全忘记了-(defun buffer mode(buffer或name)(使用当前buffer或name主模式))