summaryrefslogtreecommitdiff
path: root/elpa/dashboard-20200306.1344
diff options
context:
space:
mode:
authorBlendoit <blendoit@gmail.com>2020-08-01 15:18:40 -0700
committerBlendoit <blendoit@gmail.com>2020-08-01 15:18:40 -0700
commit374ae3de24187512adddf01a56e5eb52c79db65f (patch)
tree847adf6824b56394f5a040ba45863e2dbdceac70 /elpa/dashboard-20200306.1344
parent54fbf6576cf2dd94ef5af332a6075723a9dfa8b3 (diff)
Include contents of elpa/ sources + theme update.
Diffstat (limited to 'elpa/dashboard-20200306.1344')
-rw-r--r--elpa/dashboard-20200306.1344/banners/1.txt8
-rw-r--r--elpa/dashboard-20200306.1344/banners/2.txt6
-rw-r--r--elpa/dashboard-20200306.1344/banners/3.txt8
-rw-r--r--elpa/dashboard-20200306.1344/banners/emacs.pngbin0 -> 43759 bytes
-rw-r--r--elpa/dashboard-20200306.1344/banners/logo.pngbin0 -> 32305 bytes
-rw-r--r--elpa/dashboard-20200306.1344/dashboard-autoloads.el41
-rw-r--r--elpa/dashboard-20200306.1344/dashboard-pkg.el13
-rw-r--r--elpa/dashboard-20200306.1344/dashboard-widgets.el729
-rw-r--r--elpa/dashboard-20200306.1344/dashboard.el258
9 files changed, 1063 insertions, 0 deletions
diff --git a/elpa/dashboard-20200306.1344/banners/1.txt b/elpa/dashboard-20200306.1344/banners/1.txt
new file mode 100644
index 0000000..8bd71a7
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/banners/1.txt
@@ -0,0 +1,8 @@
+
+######## ## ## ### ###### ######
+## ### ### ## ## ## ## ## ##
+## #### #### ## ## ## ##
+###### ## ### ## ## ## ## ######
+## ## ## ######### ## ##
+## ## ## ## ## ## ## ## ##
+######## ## ## ## ## ###### ######
diff --git a/elpa/dashboard-20200306.1344/banners/2.txt b/elpa/dashboard-20200306.1344/banners/2.txt
new file mode 100644
index 0000000..73b761b
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/banners/2.txt
@@ -0,0 +1,6 @@
+ _______ .___ ___. ___ ______ _______.
+| ____|| \/ | / \ / | / |
+| |__ | \ / | / ^ \ | ,----' | (----`
+| __| | |\/| | / /_\ \ | | \ \
+| |____ | | | | / _____ \ | `----.----) |
+|_______||__| |__| /__/ \__\ \______|_______/
diff --git a/elpa/dashboard-20200306.1344/banners/3.txt b/elpa/dashboard-20200306.1344/banners/3.txt
new file mode 100644
index 0000000..3abfd82
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/banners/3.txt
@@ -0,0 +1,8 @@
+ _______ _____ ______ ________ ________ ________
+|\ ___ \ |\ _ \ _ \|\ __ \|\ ____\|\ ____\
+\ \ __/|\ \ \\\__\ \ \ \ \|\ \ \ \___|\ \ \___|_
+ \ \ \_|/_\ \ \\|__| \ \ \ __ \ \ \ \ \_____ \
+ \ \ \_|\ \ \ \ \ \ \ \ \ \ \ \ \____\|____|\ \
+ \ \_______\ \__\ \ \__\ \__\ \__\ \_______\____\_\ \
+ \|_______|\|__| \|__|\|__|\|__|\|_______|\_________\
+ \|_________|
diff --git a/elpa/dashboard-20200306.1344/banners/emacs.png b/elpa/dashboard-20200306.1344/banners/emacs.png
new file mode 100644
index 0000000..718b071
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/banners/emacs.png
Binary files differ
diff --git a/elpa/dashboard-20200306.1344/banners/logo.png b/elpa/dashboard-20200306.1344/banners/logo.png
new file mode 100644
index 0000000..c9de00c
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/banners/logo.png
Binary files differ
diff --git a/elpa/dashboard-20200306.1344/dashboard-autoloads.el b/elpa/dashboard-20200306.1344/dashboard-autoloads.el
new file mode 100644
index 0000000..cc682f5
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/dashboard-autoloads.el
@@ -0,0 +1,41 @@
+;;; dashboard-autoloads.el --- automatically extracted autoloads
+;;
+;;; Code:
+
+(add-to-list 'load-path (directory-file-name
+ (or (file-name-directory #$) (car load-path))))
+
+
+;;;### (autoloads nil "dashboard" "dashboard.el" (0 0 0 0))
+;;; Generated autoloads from dashboard.el
+
+(autoload 'dashboard-setup-startup-hook "dashboard" "\
+Setup post initialization hooks.
+If a command line argument is provided,
+assume a filename and skip displaying Dashboard.
+
+\(fn)" nil nil)
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dashboard" '("dashboard-")))
+
+;;;***
+
+;;;### (autoloads nil "dashboard-widgets" "dashboard-widgets.el"
+;;;;;; (0 0 0 0))
+;;; Generated autoloads from dashboard-widgets.el
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dashboard-widgets" '("dashboard-" "recentf-list")))
+
+;;;***
+
+;;;### (autoloads nil nil ("dashboard-pkg.el") (0 0 0 0))
+
+;;;***
+
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; coding: utf-8
+;; End:
+;;; dashboard-autoloads.el ends here
diff --git a/elpa/dashboard-20200306.1344/dashboard-pkg.el b/elpa/dashboard-20200306.1344/dashboard-pkg.el
new file mode 100644
index 0000000..44d332a
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/dashboard-pkg.el
@@ -0,0 +1,13 @@
+(define-package "dashboard" "20200306.1344" "A startup screen extracted from Spacemacs"
+ '((emacs "25.3")
+ (page-break-lines "0.11"))
+ :commit "bf38867ae80902d58207974b4a2bba4249324599" :keywords
+ '("startup" "screen" "tools" "dashboard")
+ :authors
+ '(("Rakan Al-Hneiti"))
+ :maintainer
+ '("Rakan Al-Hneiti")
+ :url "https://github.com/emacs-dashboard/emacs-dashboard")
+;; Local Variables:
+;; no-byte-compile: t
+;; End:
diff --git a/elpa/dashboard-20200306.1344/dashboard-widgets.el b/elpa/dashboard-20200306.1344/dashboard-widgets.el
new file mode 100644
index 0000000..a045ce7
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/dashboard-widgets.el
@@ -0,0 +1,729 @@
+;;; 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
diff --git a/elpa/dashboard-20200306.1344/dashboard.el b/elpa/dashboard-20200306.1344/dashboard.el
new file mode 100644
index 0000000..56b6418
--- /dev/null
+++ b/elpa/dashboard-20200306.1344/dashboard.el
@@ -0,0 +1,258 @@
+;;; dashboard.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 'seq)
+(require 'page-break-lines)
+(require 'recentf)
+
+(require 'dashboard-widgets)
+
+;; Custom splash screen
+(defvar dashboard-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "C-p") 'dashboard-previous-line)
+ (define-key map (kbd "C-n") 'dashboard-next-line)
+ (define-key map (kbd "<up>") 'dashboard-previous-line)
+ (define-key map (kbd "<down>") 'dashboard-next-line)
+ (define-key map (kbd "k") 'dashboard-previous-line)
+ (define-key map (kbd "j") 'dashboard-next-line)
+ (define-key map [tab] 'widget-forward)
+ (define-key map (kbd "C-i") 'widget-forward)
+ (define-key map [backtab] 'widget-backward)
+ (define-key map (kbd "RET") 'dashboard-return)
+ (define-key map [down-mouse-1] 'widget-button-click)
+ (define-key map (kbd "g") #'dashboard-refresh-buffer)
+ (define-key map (kbd "}") #'dashboard-next-section)
+ (define-key map (kbd "{") #'dashboard-previous-section)
+ map)
+ "Keymap for dashboard mode.")
+
+(define-derived-mode dashboard-mode special-mode "Dashboard"
+ "Dashboard major mode for startup screen.
+\\<dashboard-mode-map>
+"
+ :group 'dashboard
+ :syntax-table nil
+ :abbrev-table nil
+ (buffer-disable-undo)
+ (whitespace-mode -1)
+ (linum-mode -1)
+ (when (>= emacs-major-version 26)
+ (display-line-numbers-mode -1))
+ (page-break-lines-mode 1)
+ (setq inhibit-startup-screen t)
+ (setq buffer-read-only t
+ truncate-lines t))
+
+(defgroup dashboard nil
+ "Extensible startup screen."
+ :group 'applications)
+
+(defcustom dashboard-center-content nil
+ "Whether to center content within the window."
+ :type 'boolean
+ :group 'dashboard)
+
+(defconst dashboard-buffer-name "*dashboard*"
+ "Dashboard's buffer name.")
+
+(defvar dashboard--section-starts nil
+ "List of section starting positions.")
+
+(defun dashboard-previous-section ()
+ "Navigate back to previous section."
+ (interactive)
+ (let ((current-section-start nil)
+ (current-position (point))
+ (previous-section-start nil))
+ (dolist (elt dashboard--section-starts)
+ (when (and current-section-start
+ (not previous-section-start))
+ (setq previous-section-start elt))
+ (when (and (not current-section-start)
+ (< elt current-position))
+ (setq current-section-start elt)))
+ (goto-char (if (eq current-position current-section-start)
+ previous-section-start
+ current-section-start))))
+
+(defun dashboard-next-section ()
+ "Navigate forward to next section."
+ (interactive)
+ (let ((current-position (point))
+ (next-section-start nil)
+ (section-starts (reverse dashboard--section-starts)))
+ (dolist (elt section-starts)
+ (when (and (not next-section-start)
+ (> elt current-position))
+ (setq next-section-start elt)))
+ (when next-section-start
+ (goto-char next-section-start))))
+
+(defun dashboard-previous-line (arg)
+ "Move point up and position it at that line’s item.
+Optional prefix ARG says how many lines to move; default is one line."
+ (interactive "^p")
+ (dashboard-next-line (- arg)))
+
+(defun dashboard-next-line (arg)
+ "Move point down and position it at that line’s item.
+Optional prefix ARG says how many lines to move; default is one line."
+ ;; code heavily inspired by `dired-next-line'
+ (interactive "^p")
+ (let ((line-move-visual nil)
+ (goal-column nil))
+ (line-move arg t))
+ ;; We never want to move point into an invisible line. Dashboard doesn’t
+ ;; use invisible text currently but when it does we’re ready!
+ (while (and (invisible-p (point))
+ (not (if (and arg (< arg 0)) (bobp) (eobp))))
+ (forward-char (if (and arg (< arg 0)) -1 1)))
+ (beginning-of-line-text))
+
+(defun dashboard-return ()
+ "Hit return key in dashboard buffer."
+ (interactive)
+ (let ((start-ln (line-number-at-pos))
+ (fd-cnt 0)
+ (diff-line nil)
+ (entry-pt nil))
+ (save-excursion
+ (while (and (not diff-line)
+ (not (= (point) (point-min)))
+ (not (get-char-property (point) 'button))
+ (not (= (point) (point-max))))
+ (forward-char 1)
+ (setq fd-cnt (1+ fd-cnt))
+ (unless (= start-ln (line-number-at-pos))
+ (setq diff-line t)))
+ (unless (= (point) (point-max))
+ (setq entry-pt (point))))
+ (when (= fd-cnt 1)
+ (setq entry-pt (1- (point))))
+ (if entry-pt
+ (widget-button-press entry-pt)
+ (call-interactively #'widget-button-press))))
+
+(defun dashboard-maximum-section-length ()
+ "For the just-inserted section, calculate the length of the longest line."
+ (let ((max-line-length 0))
+ (save-excursion
+ (dashboard-previous-section)
+ (while (not (eobp))
+ (setq max-line-length
+ (max max-line-length
+ (- (line-end-position) (line-beginning-position))))
+ (forward-line)))
+ max-line-length))
+
+(defun dashboard-insert-startupify-lists ()
+ "Insert the list of widgets into the buffer."
+ (interactive)
+ (let ((buffer-exists (buffer-live-p (get-buffer dashboard-buffer-name)))
+ (recentf-is-on (recentf-enabled-p))
+ (origial-recentf-list recentf-list)
+ (dashboard-num-recents (or (cdr (assoc 'recents dashboard-items)) 0))
+ (max-line-length 0))
+ ;; disable recentf mode,
+ ;; so we don't flood the recent files list with org mode files
+ ;; do this by making a copy of the part of the list we'll use
+ ;; let dashboard widgets change that
+ ;; then restore the orginal list afterwards
+ ;; (this avoids many saves/loads that would result from
+ ;; disabling/enabling recentf-mode)
+ (if recentf-is-on
+ (setq recentf-list (seq-take recentf-list dashboard-num-recents)))
+ (when (or (not (eq dashboard-buffer-last-width (window-width)))
+ (not buffer-exists))
+ (setq dashboard-banner-length (window-width)
+ dashboard-buffer-last-width dashboard-banner-length)
+ (with-current-buffer (get-buffer-create dashboard-buffer-name)
+ (let ((buffer-read-only nil))
+ (erase-buffer)
+ (dashboard-insert-banner)
+ (dashboard-insert-page-break)
+ (setq dashboard--section-starts nil)
+ (mapc (lambda (els)
+ (let* ((el (or (car-safe els) els))
+ (list-size
+ (or (cdr-safe els)
+ dashboard-items-default-length))
+ (item-generator
+ (cdr-safe (assoc el dashboard-item-generators))))
+ (add-to-list 'dashboard--section-starts (point))
+ (funcall item-generator list-size)
+ (setq max-line-length
+ (max max-line-length (dashboard-maximum-section-length)))
+ (dashboard-insert-page-break)))
+ dashboard-items)
+ (when dashboard-center-content
+ (when dashboard--section-starts
+ (goto-char (car (last dashboard--section-starts))))
+ (let ((margin (floor (/ (max (- (window-width) max-line-length) 0) 2))))
+ (while (not (eobp))
+ (and (not (eq ? (char-after)))
+ (insert (make-string margin ?\ )))
+ (forward-line 1))))
+ (dashboard-insert-footer))
+ (dashboard-mode)
+ (goto-char (point-min))))
+ (if recentf-is-on
+ (setq recentf-list origial-recentf-list))))
+
+(add-hook 'window-setup-hook
+ (lambda ()
+ (add-hook 'window-size-change-functions 'dashboard-resize-on-hook)
+ (dashboard-resize-on-hook)))
+
+(defun dashboard-refresh-buffer ()
+ "Refresh buffer."
+ (interactive)
+ (kill-buffer dashboard-buffer-name)
+ (dashboard-insert-startupify-lists)
+ (switch-to-buffer dashboard-buffer-name))
+
+(defun dashboard-resize-on-hook (&optional _)
+ "Re-render dashboard on window size change."
+ (let ((space-win (get-buffer-window dashboard-buffer-name))
+ (frame-win (frame-selected-window)))
+ (when (and space-win
+ (not (window-minibuffer-p frame-win)))
+ (with-selected-window space-win
+ (dashboard-insert-startupify-lists)))))
+
+;;;###autoload
+(defun dashboard-setup-startup-hook ()
+ "Setup post initialization hooks.
+If a command line argument is provided,
+assume a filename and skip displaying Dashboard."
+ (when (< (length command-line-args) 2 )
+ (add-hook 'after-init-hook (lambda ()
+ ;; Display useful lists of items
+ (dashboard-insert-startupify-lists)))
+ (add-hook 'emacs-startup-hook '(lambda ()
+ (switch-to-buffer "*dashboard*")
+ (goto-char (point-min))
+ (redisplay)))))
+
+(provide 'dashboard)
+;;; dashboard.el ends here
Copyright 2019--2024 Marius PETER