* progmodes/sql.el Version 3.3
(sql-product-alist): Improve oracle :prompt-cont-regexp. (sql-starts-with-prompt-re, sql-ends-with-prompt-re): New functions. (sql-interactive-remove-continuation-prompt): Rewrite, use functions above. Fix continuation prompt and complete output line handling. (sql-redirect-one, sql-execute): Use `read-only-mode' on redirected output buffer. (sql-mode): Restore deleted code (Bug#13591).
This commit is contained in:
parent
da77a2e2eb
commit
3d012865be
2 changed files with 70 additions and 29 deletions
|
@ -1,3 +1,15 @@
|
|||
2013-07-23 Michael R. Mauger <michael@mauger.com>
|
||||
|
||||
* progmodes/sql.el Version 3.3
|
||||
(sql-product-alist): Improve oracle :prompt-cont-regexp.
|
||||
(sql-starts-with-prompt-re, sql-ends-with-prompt-re): New functions.
|
||||
(sql-interactive-remove-continuation-prompt): Rewrite, use
|
||||
functions above. Fix continuation prompt and complete output line
|
||||
handling.
|
||||
(sql-redirect-one, sql-execute): Use `read-only-mode' on
|
||||
redirected output buffer.
|
||||
(sql-mode): Restore deleted code (Bug#13591).
|
||||
|
||||
2013-07-23 Juanma Barranquero <lekktu@gmail.com>
|
||||
|
||||
* desktop.el (desktop-clear, desktop-list*): Fix previous change.
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
;; Author: Alex Schroeder <alex@gnu.org>
|
||||
;; Maintainer: Michael Mauger <michael@mauger.com>
|
||||
;; Version: 3.2
|
||||
;; Version: 3.3
|
||||
;; Keywords: comm languages processes
|
||||
;; URL: http://savannah.gnu.org/projects/emacs/
|
||||
|
||||
|
@ -233,6 +233,7 @@
|
|||
(require 'regexp-opt))
|
||||
(require 'custom)
|
||||
(require 'thingatpt)
|
||||
(require 'view)
|
||||
|
||||
(defvar font-lock-keyword-face)
|
||||
(defvar font-lock-set-defaults)
|
||||
|
@ -246,7 +247,7 @@
|
|||
:group 'languages
|
||||
:group 'processes)
|
||||
|
||||
;; These four variables will be used as defaults, if set.
|
||||
;; These five variables will be used as defaults, if set.
|
||||
|
||||
(defcustom sql-user ""
|
||||
"Default username."
|
||||
|
@ -437,7 +438,7 @@ file. Since that is a plaintext file, this could be dangerous."
|
|||
:completion-object sql-oracle-completion-object
|
||||
:prompt-regexp "^SQL> "
|
||||
:prompt-length 5
|
||||
:prompt-cont-regexp "^\\s-*[[:digit:]]+ "
|
||||
:prompt-cont-regexp "^\\(?:[ ][ ][1-9]\\|[ ][1-9][0-9]\\|[1-9][0-9]\\{2\\}\\)[ ]\\{2\\}"
|
||||
:statement sql-oracle-statement-starters
|
||||
:syntax-alist ((?$ . "_") (?# . "_"))
|
||||
:terminator ("\\(^/\\|;\\)$" . "/")
|
||||
|
@ -3276,6 +3277,17 @@ Allows the suppression of continuation prompts.")
|
|||
|
||||
(defvar sql-preoutput-hold nil)
|
||||
|
||||
(defun sql-starts-with-prompt-re ()
|
||||
"Anchor the prompt expression at the beginning of the output line.
|
||||
Remove the start of line regexp."
|
||||
(replace-regexp-in-string "\\^" "\\\\`" comint-prompt-regexp))
|
||||
|
||||
(defun sql-ends-with-prompt-re ()
|
||||
"Anchor the prompt expression at the end of the output line.
|
||||
Remove the start of line regexp from the prompt expression since
|
||||
it may not follow newline characters in the output line."
|
||||
(concat (replace-regexp-in-string "\\^" "" sql-prompt-regexp) "\\'"))
|
||||
|
||||
(defun sql-interactive-remove-continuation-prompt (oline)
|
||||
"Strip out continuation prompts out of the OLINE.
|
||||
|
||||
|
@ -3293,38 +3305,52 @@ to the next chunk to properly match the broken-up prompt.
|
|||
If the filter gets confused, it should reset and stop filtering
|
||||
to avoid deleting non-prompt output."
|
||||
|
||||
(let (did-filter)
|
||||
(setq oline (concat (or sql-preoutput-hold "") oline)
|
||||
sql-preoutput-hold nil)
|
||||
(when comint-prompt-regexp
|
||||
(save-match-data
|
||||
(let (prompt-found last-nl)
|
||||
|
||||
(if (and comint-prompt-regexp
|
||||
(integerp sql-output-newline-count)
|
||||
(>= sql-output-newline-count 1))
|
||||
(progn
|
||||
(while (and (not (string= oline ""))
|
||||
;; Add this text to what's left from the last pass
|
||||
(setq oline (concat sql-preoutput-hold oline)
|
||||
sql-preoutput-hold "")
|
||||
|
||||
;; If we are looking for multiple prompts
|
||||
(when (and (integerp sql-output-newline-count)
|
||||
(>= sql-output-newline-count 1))
|
||||
;; Loop thru each starting prompt and remove it
|
||||
(let ((start-re (sql-starts-with-prompt-re)))
|
||||
(while (and (not (string= oline ""))
|
||||
(> sql-output-newline-count 0)
|
||||
(string-match comint-prompt-regexp oline)
|
||||
(= (match-beginning 0) 0))
|
||||
|
||||
(setq oline (replace-match "" nil nil oline)
|
||||
sql-output-newline-count (1- sql-output-newline-count)
|
||||
did-filter t))
|
||||
|
||||
(string-match start-re oline))
|
||||
(setq oline (replace-match "" nil nil oline)
|
||||
sql-output-newline-count (1- sql-output-newline-count)
|
||||
prompt-found t)))
|
||||
|
||||
;; If we've found all the expected prompts, stop looking
|
||||
(if (= sql-output-newline-count 0)
|
||||
(setq sql-output-newline-count nil
|
||||
oline (concat "\n" oline))
|
||||
|
||||
;; Still more possible prompts, leave them for the next pass
|
||||
(setq sql-preoutput-hold oline
|
||||
oline ""))
|
||||
oline "")))
|
||||
|
||||
(unless did-filter
|
||||
(setq oline (or sql-preoutput-hold "")
|
||||
sql-preoutput-hold nil
|
||||
sql-output-newline-count nil)))
|
||||
;; If no prompts were found, stop looking
|
||||
(unless prompt-found
|
||||
(setq sql-output-newline-count nil
|
||||
oline (concat oline sql-preoutput-hold)
|
||||
sql-preoutput-hold ""))
|
||||
|
||||
(setq sql-output-newline-count nil))
|
||||
|
||||
oline))
|
||||
;; Break up output by physical lines if we haven't hit the final prompt
|
||||
(unless (and (not (string= oline ""))
|
||||
(string-match (sql-ends-with-prompt-re) oline)
|
||||
(>= (match-end 0) (length oline)))
|
||||
(setq last-nl 0)
|
||||
(while (string-match "\n" oline last-nl)
|
||||
(setq last-nl (match-end 0)))
|
||||
(setq sql-preoutput-hold (concat (substring oline last-nl)
|
||||
sql-preoutput-hold)
|
||||
oline (substring oline 0 last-nl))))))
|
||||
oline)
|
||||
|
||||
;;; Sending the region to the SQLi buffer.
|
||||
|
||||
|
@ -3462,7 +3488,8 @@ list of SQLi command strings."
|
|||
:prompt-regexp))
|
||||
(start nil))
|
||||
(with-current-buffer buf
|
||||
(setq view-read-only nil)
|
||||
(setq-local view-no-disable-on-exit t)
|
||||
(read-only-mode -1)
|
||||
(unless save-prior
|
||||
(erase-buffer))
|
||||
(goto-char (point-max))
|
||||
|
@ -3571,8 +3598,8 @@ buffer is popped into a view window."
|
|||
(get-lru-window))))
|
||||
(with-current-buffer outbuf
|
||||
(set-buffer-modified-p nil)
|
||||
(setq view-read-only t))
|
||||
(view-buffer-other-window outbuf)
|
||||
(read-only-mode +1))
|
||||
(pop-to-buffer outbuf)
|
||||
(when one-win
|
||||
(shrink-window-if-larger-than-buffer)))))
|
||||
|
||||
|
@ -3747,7 +3774,9 @@ must tell Emacs. Here's how to do that in your init file:
|
|||
(setq-local abbrev-all-caps 1)
|
||||
;; Contains the name of database objects
|
||||
(set (make-local-variable 'sql-contains-names) t)
|
||||
;; Set syntax and font-face highlighting
|
||||
;; Catch changes to sql-product and highlight accordingly
|
||||
(sql-set-product (or sql-product 'ansi)) ; Fixes bug#13591
|
||||
(add-hook 'hack-local-variables-hook 'sql-highlight-product t t))
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue