2011-03-24 6 views
2

emacsでのSQLモードの一般的な使用方法は次のとおりです。Emacs:すべてのsql-modeバッファーを訪ねて適切なsqlバッファーを設定する方法

a。 foo.sqlファイルを開いて編集を開始する

b。 sql-send-regionのキーバインディングを使用して実行することを決定します。

c。私のカスタム(db-connect)関数を起動して適切なデータベースに接続し、* SQL *バッファを作成します。

しかし、foo.sqlは、環境をリフレッシュし、そのようなバッファがこの場所に存在することを検出するために、バッファ内で "mx sql-mode"を実行しない限り、* SQL *バッファの存在を認識しませんポイント。カスタムdb-connect関数にいくつかのコードを埋め込み、sql-modeを使ってすべてのバッファを参照し、sql-buffer変数を更新したいと思います。私は、いくつかのスタックオーバーフローメンバーが以前にこれを似たようにしているに違いないと確信しています。私はあなたが引数とあなたのように「SQLモードを渡すことができます

(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)))) 

彼らの主要なモードでバッファをフィルタリングするには、この小さなヘルパー関数を実装しました

答えて

4

sql.elファイルのクイックルックでは、コマンドsql-set-sqli-buffer-generallyが表示されます。

これを手渡す別の方法は、メジャーモードフックでkill-local-variableを呼び出して、sql-bufferのバッファローカルバリアントを強制終了することです。そのようにすると、すべてのSQLバッファが最新のSQLバッファと通信することになります。

免責事項:SQLまたはSQLモードについてはわかりませんが、一般的なのはEmacsのみです。

2

おかげで、

のsetjmpすべての開いているSQLバッファのリストを取得します。

+0

このコードはEmacsの古いバージョンのものですか? Emacs 23.3.1(OS X)の(void-function buffer-mode)で失敗します。私はそれがバッファのメジャーモードを抽出することを意味していると推測しています。バッファローカルである変数 'major-mode'で利用できます。 – vpit3833

+0

いいえ、それは古くはありません。バッファーモード(バッファー名またはバッファー名の省略) (バッファー名またはメジャーモードの現在のバッファー付き))を忘れてしまった –

関連する問題