diff --git a/ffmpeg-myth.el b/ffmpeg-myth.el new file mode 100644 index 0000000..ed5b5f6 --- /dev/null +++ b/ffmpeg-myth.el @@ -0,0 +1,68 @@ +;; -*- mode: emacs-lisp; lexical-binding: t -*- + +(require 'sql) + +(defvar sql-current-output "") +(defvar sql-recent-output "") +(defvar sql-prompt-string "\nmysql> ") +(defvar sql-prompt-string-length (length sql-prompt-string)) +(defvar sql-row-separator ?|) +(defvar sql-row-separator-regexp (format "[ ]+%c[ ]*" sql-row-separator)) +(defvar sql-parsed-rows '()) +(defvar sql-column-readers + '((starttime . parse-time-string))) + +(defun sql-split-and-filter (s sep) + (let ((r (split-string s sep t))) + r)) + +(cl-defun sql-parse-header-row (hdr) + (mapcar (lambda(s) (or (assoc-default s sql-column-readers #'eql 'read) 'read)) (mapcar #'read hdr))) +(defun sql-read-row (readers row) + (cl-do* ((readers readers (cdr readers)) + (row row (cdr row)) + (x (funcall (car readers) (car row)) (funcall (car readers) (car row))) + (result (list x) (push x result))) + ((or (>= 1 (length readers)) (>= 1 (length row))) (reverse result)))) + +(cl-defun sql-parse (s) + (let ((lines (split-string s " \n")) + readers + (rows '())) + (dolist (line lines (setq rows (reverse rows))) + (when (and (> (length line) 0) (eq (elt line 0) sql-row-separator)) + (push (sql-split-and-filter (substring line 1) sql-row-separator-regexp) rows))) + (when (> (length rows) 1) + (setq readers (sql-parse-header-row (car rows))) + (mapcar (lambda(row) (sql-read-row readers row)) rows)))) + +(cl-defun sql-save/filter-current-output (str) + (let* ((n (length str)) + (m (min sql-prompt-string-length n))) + (cond ((string-equal (substring str (- 0 m)) (substring sql-prompt-string (- 0 m))) + (let ((s (concat sql-current-output str))) + (setq sql-current-output "") + (setq sql-parsed-rows (append sql-parsed-rows (sql-parse s))))) + (t (setq sql-current-output (concat sql-current-output str))))) + str) + +(cl-defmacro with-sql-parse-output (&rest body) + `(with-current-buffer "*SQL*" + (prog1 + (progn ,@body) + ))) + +(cl-defun --sql-output-filter (str) + (with-current-buffer (get-buffer-create "**sql output**") + (erase-buffer) + (insert str) + (setq sql-parsed-rows (sql-parse str)))) + +(cl-defun --shell-output-filter (str) + (with-current-buffer (get-buffer-create "**shell output**") + ;(erase-buffer) + (insert str) + )) + + +;(ansi-color-process-output comint-postoutput-scroll-to-bottom comint-watch-for-password-prompt)