MariaDB クライアントは Emacs SQL モードではメッセージを表示しません。

MariaDB クライアントは Emacs SQL モードではメッセージを表示しません。

先ほどのMySQLクライアントから次にアップグレードしました。mariadb-クライアント-10.0.21-3Arch 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>」のみを受け入れます。

したがって、1つの回避策は、「--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>」でない限り、機能しません。

関連情報