MariaDB 客户端在 Emacs sql 模式下没有提示

MariaDB 客户端在 Emacs sql 模式下没有提示

我刚刚从旧的 MySQL 客户端升级到mariadb-clients-10.0.21-3在 Arch Linux 上。升级后,我在使用Emacs的sql-mysql功能时不再看到提示。

它似乎mysql正在缓冲提示,因为它显示在输出的第一行中:

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 19662
Server version: 4.1.11-standard-log

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

show tables;
MySQL [dbname]> +---------------------------------------------------------+
| Tables_in_dbname                                           |
+---------------------------------------------------------+
...
+---------------------------------------------------------+
80 rows in set (0.02 sec)

help
MySQL [dbname]> 
General information about MariaDB can be found at
http://mariadb.org

List of all MySQL commands:
...
For server side help, type 'help contents'

?
MySQL [dbname]> 
General information about MariaDB can be found at
http://mariadb.org

List of all MySQL commands:
...
For server side help, type 'help contents'

exit
MySQL [dbname]> Bye

在所有情况下,“”之前的行MySQL [dbname]>都是我输入的内容。 (...表示输出我省略。)

如何才能让提示正确显示? 我尝试过;-n的选项mysql它没有效果。如果我mysql在终端中运行,它工作正常。

答案1

您忘记转义特殊字符。 Elisp-regex 的反斜杠相当重,因为第一个 \ 被 lisp 字符串吞没了。看https://www.emacswiki.org/emacs/RegularExpression

为了捕获 MariaDB 和 MySQL,我在配置中添加了以下内容:

(sql-set-product-feature 'mysql :prompt-regexp "^\\(MariaDB\\|MySQL\\) \\[[_a-zA-Z]*\\]> ")

答案2

如果添加到 .emacs,请按以下步骤操作:

(require 'sql)
(sql-set-product-feature 'mysql :prompt-regexp 
            "^\\(MariaDB\\|MySQL\\) \\[[_a-zA-Z]*\\]> ")

sql-set-product-feature 函数需要(require 'sql)全局可用。

答案3

问题原来是提示与预期不符sql-mode。 MariaDB 使用“MySQL [dbname]>”作为默认提示符,并且sql-mode只允许“mysql>”。

因此,一种修复方法是将“--prompt=mysql>”添加到sql-mysql-options

(setq sql-mysql-options '("--prompt=mysql> "))

更好的方法是修复正则表达式以允许任一提示样式。但我在让它发挥作用时遇到了一些困难,所以如果有人发布如何做到这一点,我将奖励赏金。

我试过了

(sql-set-product-feature 'mysql :prompt-regexp "^[mM]y[sS][qQ][lL][^>]*> ")

但除非提示符是“mysql>”或“MySQL>”,否则它不起作用。

相关内容