2011-03-24 1 views
2

Моего типичное использование SQL-режим в Emacs заключается в следующем:Emacs: Как посетить все буфера SQL-режим и установить соответствующий SQL-буфер

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

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

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

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

Спасибо,

SetJmp

ответ

4

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

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

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

2

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

(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-режим в качестве аргумента и вы Появится список всех открытых буферов sql.

+0

Этот код для старой версии Emacs? Он не работает (буферный режим void-function) на моем Emacs 23.3.1 (OS X). Я предполагаю, что это означает извлечение основного режима буфера. Он доступен в переменной 'major-mode', которая является локальным буфером. – vpit3833

+0

Нет, это еще не так. Его просто что-то я написал, но я полностью забыл об этом - (defun buffer-mode (buffer-or-name) (с основным-буфером-буфером-буфером) –

 Смежные вопросы

  • Нет связанных вопросов^_^