sql-set-sqli-buffer が適切な SQLi バッファーを見つけられない理由は、開いているバッファーのリストをウォークスルーするときに、SQL モード バッファーの製品サブタイプが考慮されるためです。
私のemacsに同梱されているsql.elの私のコピーからのバッファテストのコードは次のとおりです(バージョン - GNU emacs 24.2.1
(defun sql-find-sqli-buffer (&optional product connection)
"Returns the name of the current default SQLi buffer or nil.
In order to qualify, the SQLi buffer must be alive, be in
`sql-interactive-mode' and have a process."
(let ((buf sql-buffer)
(prod (or product sql-product)))
(or
;; Current sql-buffer, if there is one.
(and (sql-buffer-live-p buf prod connection)
buf)
;; Global sql-buffer
(and (setq buf (default-value 'sql-buffer))
(sql-buffer-live-p buf prod connection)
buf)
;; Look thru each buffer
(car (apply 'append
(mapcar (lambda (b)
(and (sql-buffer-live-p b prod connection)
(list (buffer-name b))))
(buffer-list)))))))
主に適格性をテストするために使用される 2 つの値は、バッファーと製品タイプを識別する記号です。この記号は引数として渡されるか、デフォルトで sql-product の値になります。他の方法で設定されていない限り、sql-product はデフォルトで 'ansi に設定されているようです。これが、編集バッファが SQL[ANSI] である理由です。
M-x sql-set-product
SQLi バッファをクエリ バッファに関連付ける前に、このバッファで製品タイプを設定してみてください (たとえば、 を使用)。デフォルトを常に「mysql」にしたい場合は、これを init ファイルに設定するか、次を使用してカスタマイズできます。M-x customize-variable
SQL モードは、関連付けられた iSQL セッションを機能させるために、適切なローカル変数を使用してバッファをセットアップすることに大きく依存します。
すでに編集中の別のバッファでクエリを使用して iSQL バッファを開始するために使用する典型的なシーケンスは次のとおりです。
- おそらくファイルにアクセスするか、 を使用
C-x b
して一時バッファを作成することにより、SQL テキストを含むバッファに切り替えます。
- このバッファを正しい SQL タイプに設定
M-x sql-set-product
し、プロンプトで「mysql」などの既知のタイプを入力します。
- ヒット
C-c <TAB>
(にバインドsql-product-interactive
) して、このバッファーに関連付けられた iSQL バッファーに切り替えます。新しい comint プロセスを見つけたり作成したりすることによって可能性があります
コマンドの出力を読むことはおそらく価値がありますM-x sql-help
。SQL モードのドキュメントは非常に軽量です。ほとんどの場合、ソースを読んで、それについて知っていることはほとんどありません。