summaryrefslogtreecommitdiff
path: root/elpa/dashboard-20200306.1344/dashboard-widgets.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/dashboard-20200306.1344/dashboard-widgets.el')
-rw-r--r--elpa/dashboard-20200306.1344/dashboard-widgets.el729
1 files changed, 0 insertions, 729 deletions
diff --git a/elpa/dashboard-20200306.1344/dashboard-widgets.el b/elpa/dashboard-20200306.1344/dashboard-widgets.el
deleted file mode 100644
index a045ce7..0000000
--- a/elpa/dashboard-20200306.1344/dashboard-widgets.el
+++ /dev/null
@@ -1,729 +0,0 @@
-;;; dashboard-widgets.el --- A startup screen extracted from Spacemacs -*- lexical-binding: t -*-
-
-;; Copyright (c) 2016-2020 Rakan Al-Hneiti & Contributors
-;;
-;; Author: Rakan Al-Hneiti
-;; URL: https://github.com/emacs-dashboard/emacs-dashboard
-;;
-;; This file is not part of GNU Emacs.
-;;
-;;; License: GPLv3
-;;
-;; Created: October 05, 2016
-;; Package-Version: 1.8.0-SNAPSHOT
-;; Keywords: startup, screen, tools, dashboard
-;; Package-Requires: ((emacs "25.3") (page-break-lines "0.11"))
-;;; Commentary:
-
-;; An extensible Emacs dashboard, with sections for
-;; bookmarks, projectile projects, org-agenda and more.
-
-;;; Code:
-
-(require 'cl-lib)
-
-;; Compiler pacifier
-(declare-function all-the-icons-icon-for-dir "ext:all-the-icons.el")
-(declare-function all-the-icons-icon-for-file "ext:all-the-icons.el")
-(declare-function bookmark-get-filename "ext:bookmark.el")
-(declare-function bookmark-all-names "ext:bookmark.el")
-(declare-function calendar-date-compare "ext:calendar.el")
-(declare-function projectile-cleanup-known-projects "ext:projectile.el")
-(declare-function projectile-load-known-projects "ext:projectile.el")
-(declare-function projectile-mode "ext:projectile.el")
-(declare-function projectile-relevant-known-projects "ext:projectile.el")
-(declare-function org-agenda-format-item "ext:org-agenda.el")
-(declare-function org-compile-prefix-format "ext:org-agenda.el")
-(declare-function org-entry-is-done-p "ext:org.el")
-(declare-function org-get-category "ext:org.el")
-(declare-function org-get-deadline-time "ext:org.el")
-(declare-function org-get-heading "ext:org.el")
-(declare-function org-get-scheduled-time "ext:org.el")
-(declare-function org-get-tags "ext:org.el")
-(declare-function org-map-entries "ext:org.el")
-(declare-function org-outline-level "ext:org.el")
-(defvar all-the-icons-dir-icon-alist)
-(defvar package-activated-list)
-
-(defcustom dashboard-page-separator "\n\f\n"
- "Separator to use between the different pages."
- :type 'string
- :group 'dashboard)
-
-(defcustom dashboard-image-banner-max-height 0
- "Maximum height of banner image.
-
-This setting applies only if Emacs is compiled with Imagemagick
-support. When value is non-zero the image banner will be resized
-to the specified height, with aspect ratio preserved."
- :type 'integer
- :group 'dashboard)
-
-(defcustom dashboard-image-banner-max-width 0
- "Maximum width of banner image.
-
-This setting applies if Emacs is compiled with Imagemagick
-support. When value is non-zero the image banner will be resized
-to the specified width, with aspect ratio preserved."
- :type 'integer
- :group 'dashboard)
-
-(defcustom dashboard-set-heading-icons nil
- "When non nil, heading sections will have icons."
- :type 'boolean
- :group 'dashboard)
-
-(defcustom dashboard-set-file-icons nil
- "When non nil, file lists will have icons."
- :type 'boolean
- :group 'dashboard)
-
-(defcustom dashboard-set-navigator nil
- "When non nil, a navigator will be displayed under the banner."
- :type 'boolean
- :group 'dashboard)
-
-(defcustom dashboard-set-init-info t
- "When non nil, init info will be displayed under the banner."
- :type 'boolean
- :group 'dashboard)
-
-(defcustom dashboard-set-footer t
- "When non nil, a footer will be displayed at the bottom."
- :type 'boolean
- :group 'dashboard)
-
-(defcustom dashboard-footer-messages
- '("The one true editor, Emacs!"
- "Who the hell uses VIM anyway? Go Evil!"
- "Free as free speech, free as free Beer"
- "Richard Stallman is proud of you"
- "Happy coding!"
- "Vi Vi Vi, the editor of the beast"
- "Welcome to the church of Emacs"
- "While any text editor can save your files,\
- only Emacs can save your soul"
- "I showed you my source code, pls respond")
- "A list of messages, one of which dashboard chooses to display."
- :type 'list
- :group 'dashboard)
-
-(defcustom dashboard-show-shortcuts t
- "Whether to show shortcut keys for each section."
- :type 'boolean
- :group 'dashboard)
-
-(defcustom dashboard-org-agenda-categories nil
- "Specify the Categories to consider when using agenda in dashboard.
-Example:
-'(\"Tasks\" \"Habits\")"
- :type 'list
- :group 'dashboard)
-
-(defconst dashboard-banners-directory
- (concat (file-name-directory
- (locate-library "dashboard"))
- "/banners/"))
-
-(defconst dashboard-banner-official-png
- (expand-file-name (concat dashboard-banners-directory "emacs.png"))
- "Emacs banner image.")
-
-(defconst dashboard-banner-logo-png
- (expand-file-name (concat dashboard-banners-directory "logo.png"))
- "Emacs banner image.")
-
-(defconst dashboard-banner-length 75
- "Width of a banner.")
-
-(defcustom dashboard-banner-logo-title "Welcome to Emacs!"
- "Specify the startup banner."
- :type 'string
- :group 'dashboard)
-
-(defcustom dashboard-navigator-buttons nil
- "Specify the navigator buttons.
-The format is: 'icon title help action face prefix suffix'.
-
-Example:
-'((\"☆\" \"Star\" \"Show stars\" (lambda (&rest _) (show-stars)) 'warning \"[\" \"]\"))"
- :type '(repeat (repeat (list string string string function symbol string string)))
- :group 'dashboard)
-
-(defcustom dashboard-init-info
- ;; Check if package.el was loaded and if package loading was enabled
- (if (bound-and-true-p package-alist)
- (format "%d packages loaded in %s"
- (length package-activated-list) (emacs-init-time))
- (if (and (boundp 'straight--profile-cache) (hash-table-p straight--profile-cache))
- (format "%d packages loaded in %s"
- (hash-table-size straight--profile-cache) (emacs-init-time))
- (format "Emacs started in %s" (emacs-init-time))))
- "Init info with packages loaded and init time."
- :type 'boolean
- :group 'dashboard)
-
-(defcustom dashboard-footer
- (let ((list '("The one true editor, Emacs!"
- "Who the hell uses VIM anyway? Go Evil!"
- "Free as free speech, free as free Beer"
- "Richard Stallman is proud of you"
- "Happy coding!"
- "Vi Vi Vi, the editor of the beast"
- "Welcome to the church of Emacs"
- "While any text editor can save your files,\
- only Emacs can save your soul"
- "I showed you my source code, pls respond"
- )))
- (nth (random (1- (1+ (length list)))) list))
- "A footer with some short message."
- :type 'string
- :group 'dashboard)
-
-(defcustom dashboard-footer-icon
- (if (and (display-graphic-p)
- (or (fboundp 'all-the-icons-fileicon)
- (require 'all-the-icons nil 'noerror)))
- (all-the-icons-fileicon "emacs"
- :height 1.1
- :v-adjust -0.05
- :face 'font-lock-keyword-face)
- (propertize ">" 'face 'dashboard-footer))
- "Footer's icon."
- :type 'string
- :group 'dashboard)
-
-(defcustom dashboard-startup-banner 'official
- "Specify the startup banner.
-Default value is `official', it displays
-the Emacs logo. `logo' displays Emacs alternative logo.
-An integer value is the index of text
-banner. A string value must be a path to a .PNG file.
-If the value is nil then no banner is displayed."
- :type '(choice (const :tag "offical" official)
- (const :tag "logo" logo)
- (string :tag "a png path"))
- :group 'dashboard)
-
-(defcustom dashboard-buffer-last-width nil
- "Previous width of dashboard-buffer."
- :type 'integer
- :group 'dashboard)
-
-(defcustom dashboard-item-generators '((recents . dashboard-insert-recents)
- (bookmarks . dashboard-insert-bookmarks)
- (projects . dashboard-insert-projects)
- (agenda . dashboard-insert-agenda)
- (registers . dashboard-insert-registers))
- "Association list of items to how to generate in the startup buffer.
-Will be of the form `(list-type . list-function)'.
-Possible values for list-type are: `recents', `bookmarks', `projects',
-`agenda' ,`registers'."
- :type '(repeat (alist :key-type symbol :value-type function))
- :group 'dashboard)
-
-(defcustom dashboard-items '((recents . 5)
- (bookmarks . 5)
- (agenda . 5))
- "Association list of items to show in the startup buffer.
-Will be of the form `(list-type . list-size)'.
-If nil it is disabled. Possible values for list-type are:
-`recents' `bookmarks' `projects' `agenda' `registers'."
- :type '(repeat (alist :key-type symbol :value-type integer))
- :group 'dashboard)
-
-(defcustom dashboard-items-default-length 20
- "Length used for startup lists with otherwise unspecified bounds.
-Set to nil for unbounded."
- :type 'integer
- :group 'dashboard)
-
-(defcustom dashboard-heading-icons '((recents . "history")
- (bookmarks . "bookmark")
- (agenda . "calendar")
- (projects . "rocket")
- (registers . "database"))
- "Association list for the icons of the heading sections.
-Will be of the form `(list-type . icon-name-string)`.
-If nil it is disabled. Possible values for list-type are:
-`recents' `bookmarks' `projects' `agenda' `registers'"
- :type '(repeat (alist :key-type symbol :value-type string))
- :group 'dashboard)
-
-(defvar recentf-list nil)
-
-;;
-;; Faces
-;;
-(defface dashboard-text-banner
- '((t (:inherit font-lock-keyword-face)))
- "Face used for text banners."
- :group 'dashboard)
-
-(defface dashboard-banner-logo-title
- '((t :inherit default))
- "Face used for the banner title."
- :group 'dashboard)
-
-(defface dashboard-navigator
- '((t (:inherit font-lock-keyword-face)))
- "Face used for the navigator."
- :group 'dashboard)
-
-(defface dashboard-heading
- '((t (:inherit font-lock-keyword-face)))
- "Face used for widget headings."
- :group 'dashboard)
-
-(defface dashboard-footer
- '((t (:inherit font-lock-doc-face)))
- "Face used for widget headings."
- :group 'dashboard)
-
-(define-obsolete-face-alias
- 'dashboard-text-banner-face 'dashboard-text-banner "1.2.6")
-(define-obsolete-face-alias
- 'dashboard-banner-logo-title-face 'dashboard-banner-logo-title "1.2.6")
-(define-obsolete-face-alias
- 'dashboard-heading-face 'dashboard-heading "1.2.6")
-
-;;
-;; Generic widget helpers
-;;
-(defun dashboard-subseq (seq start end)
- "Return the subsequence of SEQ from START to END..
-Uses `cl-subseq`, but accounts for end points greater than the size of the
-list.
-Return entire list if `END' is omitted."
- (let ((len (length seq)))
- (cl-subseq seq start (and (number-or-marker-p end)
- (min len end)))))
-
-(defmacro dashboard-insert-shortcut (shortcut-char
- search-label
- &optional no-next-line)
- "Insert a shortcut SHORTCUT-CHAR for a given SEARCH-LABEL.
-Optionally, provide NO-NEXT-LINE to move the cursor forward a line."
- `(progn
- (eval-when-compile (defvar dashboard-mode-map))
- (let ((sym (make-symbol (format "Jump to \"%s\"" ,search-label))))
- (fset sym (lambda ()
- (interactive)
- (unless (search-forward ,search-label (point-max) t)
- (search-backward ,search-label (point-min) t))
- ,@(unless no-next-line
- '((forward-line 1)))
- (back-to-indentation)))
- (eval-after-load 'dashboard
- (define-key dashboard-mode-map ,shortcut-char sym)))))
-
-(defun dashboard-append (msg &optional _messagebuf)
- "Append MSG to dashboard buffer.
-If MESSAGEBUF is not nil then MSG is also written in message buffer."
- (with-current-buffer (get-buffer-create "*dashboard*")
- (goto-char (point-max))
- (let ((buffer-read-only nil))
- (insert msg))))
-
-(defun dashboard-modify-heading-icons (alist)
- "Append ALIST items to `dashboard-heading-icons' to modify icons."
- (dolist (icon alist)
- (add-to-list 'dashboard-heading-icons icon)))
-
-(defun dashboard-insert-page-break ()
- "Insert a page break line in dashboard buffer."
- (dashboard-append dashboard-page-separator))
-
-(defun dashboard-insert-heading (heading &optional shortcut)
- "Insert a widget HEADING in dashboard buffer, adding SHORTCUT if provided."
- (when (and (display-graphic-p)
- dashboard-set-heading-icons)
- ;; Try loading `all-the-icons'
- (unless (or (fboundp 'all-the-icons-octicon)
- (require 'all-the-icons nil 'noerror))
- (error "Package `all-the-icons' isn't installed"))
-
- (insert (cond
- ((string-equal heading "Recent Files:")
- (all-the-icons-octicon (cdr (assoc 'recents dashboard-heading-icons))
- :height 1.2 :v-adjust 0.0 :face 'dashboard-heading))
- ((string-equal heading "Bookmarks:")
- (all-the-icons-octicon (cdr (assoc 'bookmarks dashboard-heading-icons))
- :height 1.2 :v-adjust 0.0 :face 'dashboard-heading))
- ((or (string-equal heading "Agenda for today:")
- (string-equal heading "Agenda for the coming week:"))
- (all-the-icons-octicon (cdr (assoc 'agenda dashboard-heading-icons))
- :height 1.2 :v-adjust 0.0 :face 'dashboard-heading))
- ((string-equal heading "Registers:")
- (all-the-icons-octicon (cdr (assoc 'registers dashboard-heading-icons))
- :height 1.2 :v-adjust 0.0 :face 'dashboard-heading))
- ((string-equal heading "Projects:")
- (all-the-icons-octicon (cdr (assoc 'projects dashboard-heading-icons))
- :height 1.2 :v-adjust 0.0 :face 'dashboard-heading))
- (t " ")))
- (insert " "))
-
- (insert (propertize heading 'face 'dashboard-heading))
- (if shortcut (insert (format " (%s)" shortcut))))
-
-(defun dashboard-center-line (string)
- "Center a STRING accoring to it's size."
- (insert (make-string (max 0 (floor (/ (- dashboard-banner-length
- (+ (length string) 1)) 2))) ?\ )))
-
-;;
-;; BANNER
-;;
-(defun dashboard-insert-ascii-banner-centered (file)
- "Insert banner from FILE."
- (let ((ascii-banner
- (with-temp-buffer
- (insert-file-contents file)
- (let ((banner-width 0))
- (while (not (eobp))
- (let ((line-length (- (line-end-position) (line-beginning-position))))
- (if (< banner-width line-length)
- (setq banner-width line-length)))
- (forward-line 1))
- (goto-char 0)
- (let ((margin
- (max 0 (floor (/ (- dashboard-banner-length banner-width) 2)))))
- (while (not (eobp))
- (insert (make-string margin ?\ ))
- (forward-line 1))))
- (buffer-string))))
- (put-text-property 0 (length ascii-banner) 'face 'dashboard-text-banner ascii-banner)
- (insert ascii-banner)))
-
-(defun dashboard-insert-image-banner (banner)
- "Display an image BANNER."
- (when (file-exists-p banner)
- (let* ((title dashboard-banner-logo-title)
- (spec
- (if (image-type-available-p 'imagemagick)
- (apply 'create-image banner 'imagemagick nil
- (append (when (> dashboard-image-banner-max-width 0)
- (list :max-width dashboard-image-banner-max-width))
- (when (> dashboard-image-banner-max-height 0)
- (list :max-height dashboard-image-banner-max-height))))
- (create-image banner)))
- (size (image-size spec))
- (width (car size))
- (left-margin (max 0 (floor (- dashboard-banner-length width) 2))))
- (goto-char (point-min))
- (insert "\n")
- (insert (make-string left-margin ?\ ))
- (insert-image spec)
- (insert "\n\n")
- (when title
- (dashboard-center-line title)
- (insert (format "%s\n\n" (propertize title 'face 'dashboard-banner-logo-title)))))))
-
-;;
-;; INIT INFO
-;;
-(defun dashboard-insert-init-info ()
- "Insert init info when `dashboard-set-init-info' is t."
- (when dashboard-set-init-info
- (dashboard-center-line dashboard-init-info)
- (insert
- (propertize dashboard-init-info 'face 'font-lock-comment-face))))
-
-(defun dashboard-get-banner-path (index)
- "Return the full path to banner with index INDEX."
- (concat dashboard-banners-directory (format "%d.txt" index)))
-
-(defun dashboard-choose-banner ()
- "Return the full path of a banner based on the dotfile value."
- (when dashboard-startup-banner
- (cond ((eq 'official dashboard-startup-banner)
- (if (and (display-graphic-p) (image-type-available-p 'png))
- dashboard-banner-official-png
- (dashboard-get-banner-path 1)))
- ((eq 'logo dashboard-startup-banner)
- (if (and (display-graphic-p) (image-type-available-p 'png))
- dashboard-banner-logo-png
- (dashboard-get-banner-path 1)))
- ((integerp dashboard-startup-banner)
- (dashboard-get-banner-path dashboard-startup-banner))
- ((and dashboard-startup-banner
- (image-type-available-p (intern (file-name-extension
- dashboard-startup-banner)))
- (display-graphic-p))
- (if (file-exists-p dashboard-startup-banner)
- dashboard-startup-banner
- (message (format "could not find banner %s"
- dashboard-startup-banner))
- (dashboard-get-banner-path 1)))
- (t (dashboard-get-banner-path 1)))))
-
-(defun dashboard-insert-banner ()
- "Insert Banner at the top of the dashboard."
- (goto-char (point-max))
- (let ((banner (dashboard-choose-banner))
- (buffer-read-only nil))
- (progn
- (when banner
- (if (image-type-available-p (intern (file-name-extension banner)))
- (dashboard-insert-image-banner banner)
- (dashboard-insert-ascii-banner-centered banner))
- (dashboard-insert-navigator)
- (dashboard-insert-init-info)))))
-
-(defun dashboard-insert-navigator ()
- "Insert Navigator of the dashboard."
- (when (and dashboard-set-navigator dashboard-navigator-buttons)
- (dolist (line dashboard-navigator-buttons)
- (dolist (btn line)
- (let* ((icon (car btn))
- (title (cadr btn))
- (help (or (cadr (cdr btn)) ""))
- (action (or (cadr (cddr btn)) #'ignore))
- (face (or (cadr (cddr (cdr btn))) 'dashboard-navigator))
- (prefix (or (cadr (cddr (cddr btn))) (propertize "[" 'face face)))
- (suffix (or (cadr (cddr (cddr (cdr btn)))) (propertize "]" 'face face))))
- (widget-create 'item
- :tag (concat
- (when icon
- (propertize icon 'face `(:inherit
- ,(get-text-property 0 'face icon)
- :inherit
- ,face)))
- (when (and icon title
- (not (string-equal icon ""))
- (not (string-equal title "")))
- (propertize " " 'face 'variable-pitch))
- (when title (propertize title 'face face)))
- :help-echo help
- :action action
- :button-face `(:underline nil)
- :mouse-face 'highlight
- :button-prefix prefix
- :button-suffix suffix
- :format "%[%t%]")
- (insert " ")))
- (let* ((width (current-column)))
- (beginning-of-line)
- (dashboard-center-line (make-string width ?\s))
- (end-of-line))
- (insert "\n"))
- (insert "\n")))
-
-(defmacro dashboard-insert-section (section-name list list-size shortcut action &rest widget-params)
- "Add a section with SECTION-NAME and LIST of LIST-SIZE items to the dashboard.
-SHORTCUT is the keyboard shortcut used to access the section.
-ACTION is theaction taken when the user activates the widget button.
-WIDGET-PARAMS are passed to the \"widget-create\" function."
- `(progn
- (dashboard-insert-heading ,section-name
- (if (and ,list dashboard-show-shortcuts) ,shortcut))
- (if ,list
- (when (dashboard-insert-section-list
- ,section-name
- (dashboard-subseq ,list 0 ,list-size)
- ,action
- ,@widget-params)
- (dashboard-insert-shortcut ,shortcut ,section-name))
- (insert "\n --- No items ---"))))
-
-;;
-;; Section list
-;;
-(defmacro dashboard-insert-section-list (section-name list action &rest rest)
- "Insert into SECTION-NAME a LIST of items, expanding ACTION and passing REST to widget creation."
- `(when (car ,list)
- (mapc
- (lambda (el)
- (let ((tag ,@rest))
- (insert "\n ")
-
- (when (and (display-graphic-p)
- dashboard-set-file-icons
- (or (fboundp 'all-the-icons-icon-for-dir)
- (require 'all-the-icons nil 'noerror)))
- (let* ((path (car (last (split-string ,@rest " - "))))
- (icon (if (and (not (file-remote-p path))
- (file-directory-p path))
- (all-the-icons-icon-for-dir path nil "")
- (cond
- ((string-equal ,section-name "Agenda for today:")
- (all-the-icons-octicon "primitive-dot" :height 1.0 :v-adjust 0.01))
- ((file-remote-p path)
- (all-the-icons-octicon "radio-tower" :height 1.0 :v-adjust 0.01))
- (t (all-the-icons-icon-for-file (file-name-nondirectory path)
- :v-adjust -0.05))))))
- (setq tag (concat icon " " ,@rest))))
-
- (widget-create 'item
- :tag tag
- :action ,action
- :button-face `(:underline nil)
- :mouse-face 'highlight
- :button-prefix ""
- :button-suffix ""
- :format "%[%t%]")))
- ,list)))
-
-;; Footer
-(defun dashboard-random-footer ()
- "Return a random footer from `dashboard-footer-messages'."
- (nth (random (length dashboard-footer-messages)) dashboard-footer-messages))
-
-(defun dashboard-insert-footer ()
- "Insert footer of dashboard."
- (let ((footer (and dashboard-set-footer (dashboard-random-footer))))
- (when footer
- (insert "\n")
- (dashboard-center-line footer)
- (insert dashboard-footer-icon)
- (insert " ")
- (insert (propertize footer 'face 'dashboard-footer))
- (insert "\n"))))
-
-;;
-;; Recentf
-;;
-(defun dashboard-insert-recents (list-size)
- "Add the list of LIST-SIZE items from recently edited files."
- (recentf-mode)
- (dashboard-insert-section
- "Recent Files:"
- recentf-list
- list-size
- "r"
- `(lambda (&rest ignore) (find-file-existing ,el))
- (abbreviate-file-name el)))
-
-;;
-;; Bookmarks
-;;
-(defun dashboard-insert-bookmarks (list-size)
- "Add the list of LIST-SIZE items of bookmarks."
- (require 'bookmark)
- (dashboard-insert-section
- "Bookmarks:"
- (dashboard-subseq (bookmark-all-names)
- 0 list-size)
- list-size
- "m"
- `(lambda (&rest ignore) (bookmark-jump ,el))
- (let ((file (bookmark-get-filename el)))
- (if file
- (format "%s - %s" el (abbreviate-file-name file))
- el))))
-
-;;
-;; Projectile
-;;
-(defun dashboard-insert-projects (list-size)
- "Add the list of LIST-SIZE items of projects."
- (require 'projectile)
- (let ((inhibit-message t) (message-log-max nil))
- (projectile-cleanup-known-projects))
- (projectile-load-known-projects)
- (dashboard-insert-section
- "Projects:"
- (dashboard-subseq (projectile-relevant-known-projects)
- 0 list-size)
- list-size
- "p"
- `(lambda (&rest ignore) (projectile-switch-project-by-name ,el))
- (abbreviate-file-name el)))
-
-;;
-;; Org Agenda
-;;
-(defun dashboard-timestamp-to-gregorian-date (timestamp)
- "Convert TIMESTAMP to a gregorian date.
-
-The result can be used with functions like
-`calendar-date-compare'."
- (let ((decoded-timestamp (decode-time timestamp)))
- (list (nth 4 decoded-timestamp)
- (nth 3 decoded-timestamp)
- (nth 5 decoded-timestamp))))
-
-(defun dashboard-date-due-p (timestamp &optional due-date)
- "Check if TIMESTAMP is today or in the past.
-
-If DUE-DATE is nil, compare TIMESTAMP to today; otherwise,
-compare to the date in DUE-DATE.
-
-The time part of both TIMESTAMP and DUE-DATE is ignored, only the
-date part is considered."
- (unless due-date
- (setq due-date (current-time)))
- (setq due-date (time-add due-date 86400))
- (let* ((gregorian-date (dashboard-timestamp-to-gregorian-date timestamp))
- (gregorian-due-date (dashboard-timestamp-to-gregorian-date due-date)))
- (calendar-date-compare (list gregorian-date)
- (list gregorian-due-date))))
-
-(defun dashboard-get-agenda ()
- "Get agenda items for today or for a week from now."
- (org-compile-prefix-format 'agenda)
- (let ((due-date nil))
- (if (and (boundp 'show-week-agenda-p) show-week-agenda-p)
- (setq due-date (time-add (current-time) (* 86400 7)))
- (setq due-date nil)
- )
- (let* ((filtered-entries nil))
- (org-map-entries
- (lambda ()
- (let* ((schedule-time (org-get-scheduled-time (point)))
- (deadline-time (org-get-deadline-time (point)))
- (item (org-agenda-format-item
- (format-time-string "%Y-%m-%d" schedule-time)
- (org-get-heading t t)
- (org-outline-level)
- (org-get-category)
- (org-get-tags)
- t))
- (loc (point))
- (file (buffer-file-name)))
- (if (or (equal dashboard-org-agenda-categories nil)
- (member (org-get-category) dashboard-org-agenda-categories))
- (when (and (not (org-entry-is-done-p))
- (or (and schedule-time (dashboard-date-due-p schedule-time due-date))
- (and deadline-time (dashboard-date-due-p deadline-time due-date))))
- (setq filtered-entries
- (append filtered-entries
- (list (list item schedule-time deadline-time loc file))))))))
- nil
- 'agenda)
- filtered-entries)))
-
-(defun dashboard-insert-agenda (list-size)
- "Add the list of LIST-SIZE items of agenda."
- (require 'org-agenda)
- (require 'calendar)
- (let ((agenda (dashboard-get-agenda)))
- (dashboard-insert-section
- (or (and (boundp 'show-week-agenda-p) show-week-agenda-p "Agenda for the coming week:")
- "Agenda for today:")
- agenda
- list-size
- "a"
- `(lambda (&rest ignore)
- (let ((buffer (find-file-other-window (nth 4 ',el))))
- (with-current-buffer buffer
- (goto-char (nth 3 ',el)))
- (switch-to-buffer buffer)))
- (format "%s" (nth 0 el)))))
-
-;;
-;; Registers
-;;
-(defun dashboard-insert-registers (list-size)
- "Add the list of LIST-SIZE items of registers."
- (require 'register)
- (dashboard-insert-section
- "Registers:"
- register-alist
- list-size
- "e"
- (lambda (&rest _ignore) (jump-to-register (car el)))
- (format "%c - %s" (car el) (register-describe-oneline (car el)))))
-
-(provide 'dashboard-widgets)
-;;; dashboard-widgets.el ends here
Copyright 2019--2024 Marius PETER