代码之家  ›  专栏  ›  技术社区  ›  Ray

如果emacs中已经存在一个SQL缓冲区,您可以在其中创建一个新的SQL缓冲区吗?

  •  5
  • Ray  · 技术社区  · 16 年前

    假设您已经在Emacs中打开了一个*SQL*缓冲区,该缓冲区连接到特定的服务器和数据库。现在,您的目的是连接到不同的服务器和数据库,同时保持其他SQL缓冲区进程处于活动状态。

    如何在不破坏原始SQL缓冲区的情况下创建新的*SQL*缓冲区进程?能做到吗?是否有方法更改现有缓冲区的连接信息?

    4 回复  |  直到 15 年前
        1
  •  8
  •   Sean Bright Sean Stinehour    16 年前

    运行:

    M-x sql-rename-buffer
    

    关于连通 *SQL* 缓冲区将在当前连接后重命名当前缓冲区。所以:

    *SQL*
    

    变成:

    *SQL user/database*
    

    然后你可以做:

    M-x sql-mysql
    

    或者,无论您喜欢什么样的数据库,都可以创建另一个SQL缓冲区。

        2
  •  2
  •   Jacob Gabrielson    16 年前

    稍微简单一点,您可以:

    (add-hook 'sql-interactive-mode-hook 'sql-rename-buffer)
    

    (也就是说,你不需要 lambda )

        3
  •  1
  •   rzab    16 年前

    另外,如果像我这样的人喜欢这种联系的另一种表现形式, 这是我的。 这是我的SQL缓冲区命名方式:“driver://user@server/database”

    
    (defun sql-make-alternate-buffer-name ()
      (concat (concat (prin1-to-string sql-interactive-product) "://")
          (if (string= "" sql-user)
              (if (string= "" (user-login-name))
              ()
            (concat (user-login-name) "/"))
            (concat sql-user "@"))
          (concat sql-server "/")
          (if (string= "" sql-database)
              (if (string= "" sql-server)
              (system-name)
            sql-server)
            sql-database)))
    

    SQL 在运行SQL交互模式挂钩的SQL交互模式下创建的缓冲区, 所以不需要手动运行SQL重命名缓冲区

    
    (add-hook 'sql-interactive-mode-hook
        (lambda () (sql-rename-buffer)))
    
        4
  •  0
  •   rzab    16 年前

    @雅各伯 对不起,还不能评论。

    是的,在这种情况下,不需要lambda。
    但是我一直使用它来添加hook,所以我可以为hook函数指定参数。
    add hook总是不带参数地调用函数(lambda)。