diff options
| author | Michael R. Mauger | 2019-04-24 20:59:25 -0400 |
|---|---|---|
| committer | Michael R. Mauger | 2019-04-24 20:59:25 -0400 |
| commit | a1386fa6a7698c04902354cd5fefb39056b0a901 (patch) | |
| tree | 9d4ee7ae5b4d3cc13e0b88a445ec2e1c35e36117 /lisp/progmodes/sql.el | |
| parent | 2bf957394cdcb93396966d3289f5e200886cb424 (diff) | |
| download | emacs-a1386fa6a7698c04902354cd5fefb39056b0a901.tar.gz emacs-a1386fa6a7698c04902354cd5fefb39056b0a901.zip | |
* lisp/progmodes/sql.el
(sql-is-sqli-buffer-p): New function.
(sql-generate-unique-sqli-buffer-name): Refactor and use it.
(sql-product-interactive): Simplify name logic.
* test/lisp/progmodes/sql-tests.el
(sql-tests-placeholder-filter-harness): New macro.
(sql-tests-placeholder-filter-simple)
(sql-tests-placeholder-filter-ampersand)
(sql-tests-placeholder-filter-period): Refactored tests and use macro.
(sql-tests-buffer-naming-harness): New macro.
(sql-tests-buffer-naming-default)
(sql-tests-buffer-naming-multiple)
(sql-tests-buffer-naming-explicit)
(sql-tests-buffer-naming-universal-argument)
(sql-tests-buffer-naming-existing): New tests.
Diffstat (limited to 'lisp/progmodes/sql.el')
| -rw-r--r-- | lisp/progmodes/sql.el | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el index 28261ef74b2..2d33b3130cd 100644 --- a/lisp/progmodes/sql.el +++ b/lisp/progmodes/sql.el | |||
| @@ -1423,6 +1423,15 @@ specified, it's `sql-product' or `sql-connection' must match." | |||
| 1423 | (and (stringp connection) | 1423 | (and (stringp connection) |
| 1424 | (string= connection sql-connection)))))))) | 1424 | (string= connection sql-connection)))))))) |
| 1425 | 1425 | ||
| 1426 | (defun sql-is-sqli-buffer-p (buffer) | ||
| 1427 | "Return non-nil if buffer is a SQLi buffer." | ||
| 1428 | (when buffer | ||
| 1429 | (setq buffer (get-buffer buffer)) | ||
| 1430 | (and buffer | ||
| 1431 | (buffer-live-p buffer) | ||
| 1432 | (with-current-buffer buffer | ||
| 1433 | (derived-mode-p 'sql-interactive-mode))))) | ||
| 1434 | |||
| 1426 | ;; Keymap for sql-interactive-mode. | 1435 | ;; Keymap for sql-interactive-mode. |
| 1427 | 1436 | ||
| 1428 | (defvar sql-interactive-mode-map | 1437 | (defvar sql-interactive-mode-map |
| @@ -3550,24 +3559,29 @@ server/database name." | |||
| 3550 | "Generate a new, unique buffer name for a SQLi buffer. | 3559 | "Generate a new, unique buffer name for a SQLi buffer. |
| 3551 | 3560 | ||
| 3552 | Append a sequence number until a unique name is found." | 3561 | Append a sequence number until a unique name is found." |
| 3553 | (let ((base-name (when (stringp base) | 3562 | (let ((base-name (substring-no-properties |
| 3554 | (substring-no-properties | 3563 | (if base |
| 3555 | (or base | 3564 | (if (stringp base) |
| 3556 | (sql-get-product-feature product :name) | 3565 | base |
| 3566 | (format "%S" base)) | ||
| 3567 | (or (sql-get-product-feature product :name) | ||
| 3557 | (symbol-name product))))) | 3568 | (symbol-name product))))) |
| 3558 | buf-fmt-1st buf-fmt-rest) | 3569 | buf-fmt-1st |
| 3570 | buf-fmt-rest) | ||
| 3559 | 3571 | ||
| 3560 | ;; Calculate buffer format | 3572 | ;; Calculate buffer format |
| 3561 | (if base-name | 3573 | (if (string-blank-p base-name) |
| 3562 | (setq buf-fmt-1st (format "*SQL: %s*" base-name) | 3574 | (setq buf-fmt-1st "*SQL*" |
| 3563 | buf-fmt-rest (format "*SQL: %s-%%d*" base-name)) | 3575 | buf-fmt-rest "*SQL-%d*") |
| 3564 | (setq buf-fmt-1st "*SQL*" | 3576 | (setq buf-fmt-1st (format "*SQL: %s*" base-name) |
| 3565 | buf-fmt-rest "*SQL-%d*")) | 3577 | buf-fmt-rest (format "*SQL: %s-%%d*" base-name))) |
| 3566 | 3578 | ||
| 3567 | ;; See if we can find an unused buffer | 3579 | ;; See if we can find an unused buffer |
| 3568 | (let ((buf-name buf-fmt-1st) | 3580 | (let ((buf-name buf-fmt-1st) |
| 3569 | (i 1)) | 3581 | (i 1)) |
| 3570 | (while (sql-buffer-live-p buf-name) | 3582 | (while (if (sql-is-sqli-buffer-p buf-name) |
| 3583 | (comint-check-proc buf-name) | ||
| 3584 | (buffer-live-p (get-buffer buf-name))) | ||
| 3571 | ;; Check a sequence number on the BASE | 3585 | ;; Check a sequence number on the BASE |
| 3572 | (setq buf-name (format buf-fmt-rest i) | 3586 | (setq buf-name (format buf-fmt-rest i) |
| 3573 | i (1+ i))) | 3587 | i (1+ i))) |
| @@ -4670,13 +4684,13 @@ the call to \\[sql-product-interactive] with | |||
| 4670 | (read-string | 4684 | (read-string |
| 4671 | "Buffer name (\"*SQL: XXX*\"; enter `XXX'): " | 4685 | "Buffer name (\"*SQL: XXX*\"; enter `XXX'): " |
| 4672 | (sql-make-alternate-buffer-name product)))) | 4686 | (sql-make-alternate-buffer-name product)))) |
| 4673 | ((or (string-prefix-p " " new-name) | ||
| 4674 | (string-match-p "\\`[*].*[*]\\'" new-name)) | ||
| 4675 | new-name) | ||
| 4676 | ((stringp new-name) | 4687 | ((stringp new-name) |
| 4677 | (sql-generate-unique-sqli-buffer-name product new-name)) | 4688 | (if (or (string-prefix-p " " new-name) |
| 4689 | (string-match-p "\\`[*].*[*]\\'" new-name)) | ||
| 4690 | new-name | ||
| 4691 | (sql-generate-unique-sqli-buffer-name product new-name))) | ||
| 4678 | (t | 4692 | (t |
| 4679 | (sql-generate-unique-sqli-buffer-name product nil))))) | 4693 | (sql-generate-unique-sqli-buffer-name product new-name))))) |
| 4680 | 4694 | ||
| 4681 | ;; Set SQLi mode. | 4695 | ;; Set SQLi mode. |
| 4682 | (let ((sql-interactive-product product)) | 4696 | (let ((sql-interactive-product product)) |