Emacs: Как посетить все буферы sql-mode и установить соответствующий sql-буфер - PullRequest
2 голосов
/ 24 марта 2011

Мое типичное использование sql-mode в emacs:

a.откройте файл foo.sql и начните редактирование

b.решите, что я хочу запустить его, используя привязки клавиш для sql-send-region

c.запустите мою пользовательскую функцию (db-connect) для подключения к соответствующей базе данных и создания буфера * SQL *.

Однако foo.sql не знает о существовании буфера * SQL *, покавыполнить «mx sql-mode» в буфере, чтобы обновить его среду и обнаружить, что такой буфер существует в этой точке.Я хотел бы встроить некоторый код в мою пользовательскую функцию db-connect, чтобы посещать все буферы с использованием sql-mode и обновлять переменную sql-buffer.Я уверен, что несколько членов переполнения стека должны были сделать это или что-то подобное раньше.

Спасибо,

SetJmp

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Быстрый просмотр в файле sql.el показал команду sql-set-sqli-buffer-generally, может быть, это что-то для вас?

Другой способ, которым вы могли бы это передать, - убить локальный для буфера вариант sql-bufferпозвонив по номеру kill-local-variable в режиме основного режима.(Таким образом, в результате все буферы SQL будут взаимодействовать с самым последним буфером SQL.)

Отказ от ответственности: Я ничего не знаю о режиме SQL или SQL, только Emacs в целом.

2 голосов
/ 24 марта 2011

Я реализовал эту маленькую вспомогательную функцию для фильтрации буферов по их основному режиму

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

Вы можете передать 'sql-mode в качестве аргумента, и вы получите список всех открытых буферов sql.

...