App-Chart
view release on metacpan or search on metacpan
emacs/chartprog.el view on Meta::CPAN
"An internal part of chartprog.el.
SYMLIST is a Lisp symbol, a symlist key.
SYMBOL-LIST is a list of Chart symbols (strings) which are the
contents of that symlist."
(when (and (get-buffer "*chartprog-watchlist*") ;; ignore if gone
(eq symlist chartprog-watchlist-current-symlist)) ;; or if stray response
(with-current-buffer "*chartprog-watchlist*"
(let (alst need)
;; build alst (SYMBOL . LINE-STRING) for existing lines
(save-excursion
(goto-char (point-min))
(while (let ((symbol (chartprog-watchlist-symbol)))
(when symbol
(push (cons symbol
(buffer-substring (point)
(1+ (point-at-eol))))
alst))
(= 0 (forward-line)))))
;; fill buffer, and use existing lines from alst
(let ((inhibit-read-only t))
(chartprog-save-row-col
(erase-buffer)
(dolist (symbol symbol-list)
(insert (or (cdr (assoc symbol alst))
(progn
(setq need (cons symbol need))
(propertize (concat symbol "\n")
'chartprog-symbol symbol)))))
(unless symbol-list
(if (chartprog-symlist-editable-p chartprog-watchlist-current-symlist)
(insert (format "\n\n(Empty list, use `%s' to add a symbol.)"
(key-description
(car (where-is-internal
'chartprog-watchlist-add
chartprog-watchlist-map)))))
(insert (format "\n\n(Empty list.)"))))))
(if need
(chartprog-exec 'latest-get-list (nreverse need)))))))
;;-----------------------------------------------------------------------------
;; header-line-format hscrolling
(defconst chartprog-header-line-scrolling-align0
(propertize " " 'display '((space :align-to 0)))
"An internal part of chartprog.el.
An string which is space with align-to 0 property.")
(defvar chartprog-header-line-scrolling-str nil
"An internal part of chartprog.el.
Buffer local full `header-line-format' string to be hscrolled.")
(defun chartprog-header-line-scrolling-align ()
"An internal part of chartprog.el.
Return a string which will align to column 0 in a `header-line-format'."
(if (string-match "^21\\." emacs-version)
(and (display-graphic-p)
(concat " " ;; the fringe
(and (eq 'left (frame-parameter nil 'vertical-scroll-bars))
" "))) ;; left scrollbar
;; in emacs 22 and up align-to understands fringe and scrollbar
chartprog-header-line-scrolling-align0))
(defun chartprog-header-line-scrolling-eval ()
"An internal part of chartprog.el.
Install hscrolling header line updates on the windows of the current frame."
(concat (chartprog-header-line-scrolling-align)
(substring chartprog-header-line-scrolling-str
(min (length chartprog-header-line-scrolling-str)
(window-hscroll)))))
(defun chartprog-header-line-scrolling (str)
"An internal part of chartprog.el.
Set STR as `header-line-format' and make it follow any hscrolling."
(set (make-local-variable 'chartprog-header-line-scrolling-str) str)
(set (make-local-variable 'header-line-format)
'(:eval (chartprog-header-line-scrolling-eval))))
;;-----------------------------------------------------------------------------
;; watchlist commands
(defvar chartprog-watchlist-menu (make-sparse-keymap "Chart")
"An internal part of chartprog.el.
Menu for Chart watchlist.")
(defvar chartprog-watchlist-map
(let ((m (make-sparse-keymap)))
(define-key m "\C-k" 'chartprog-watchlist-kill-line)
(define-key m "\C-w" 'chartprog-watchlist-kill-region)
(define-key m "\C-y" 'chartprog-watchlist-yank)
(define-key m "\C-_" 'chartprog-watchlist-undo)
(define-key m "a" 'chartprog-watchlist-add)
(define-key m "g" 'chartprog-watchlist-refresh)
(define-key m "n" 'next-line)
(define-key m "q" 'chartprog-watchlist-quit)
(define-key m "p" 'previous-line)
(define-key m "L" 'chartprog-watchlist-symlist)
(define-key m "?" 'chartprog-watchlist-detail)
(define-key m [menu-bar chartprog] (cons "Chart" chartprog-watchlist-menu))
m)
"Keymap for Chart watchlist.")
(defun chartprog-watchlist-want-edit ()
"An internal part of chartprog.el.
Check that the watchlist being displayed is editable."
(or (chartprog-symlist-editable-p chartprog-watchlist-current-symlist)
(error "This list is not editable")))
(defun chartprog-watchlist-detail ()
"Show detail for this line (stock name and full quote and times)."
(interactive)
(let ((str (get-text-property (point-at-bol) 'help-echo)))
(if str
(message "%s" str))))
(defun chartprog-watchlist-kill-line ()
"Kill watchlist line into the kill ring.
Use \\[chartprog-watchlist-yank] to yank it back at a new position."
(interactive)
(chartprog-watchlist-want-edit)
(let ((inhibit-read-only t))
(save-excursion
(beginning-of-line)
(kill-line 1)))
(chartprog-exec 'symlist-delete chartprog-watchlist-current-symlist
( run in 0.736 second using v1.01-cache-2.11-cpan-e1769b4cff6 )