add gui, mail and programming language settings
This commit is contained in:
34
settings/eaf-settings.el
Normal file
34
settings/eaf-settings.el
Normal file
@@ -0,0 +1,34 @@
|
||||
;;; eaf-settings.el --- eaf settings -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;; https://www.emacswiki.org/emacs/EmacsApplicationFramework
|
||||
;; https://github.com/manateelazycat/emacs-application-framework
|
||||
|
||||
;;; Code:
|
||||
(use-package eaf
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/emacs-application-framework"))
|
||||
;;:after (org) ;; eaf requires eaf-interleave requires org
|
||||
;;:defer 2
|
||||
:commands (eaf-open
|
||||
eaf-open-browser
|
||||
eaf-open-browser-with-history
|
||||
eaf-open-mail-as-html
|
||||
eaf-open-camera
|
||||
eaf-open-terminal
|
||||
eaf-file-sender-qrcode eaf-file-sender-qrcode-in-dired
|
||||
eaf-file-browser-qrcode
|
||||
eaf-open-airshare
|
||||
eaf-open-rss-reader
|
||||
eaf-open-mindmap eaf-create-minmap
|
||||
eaf-open-office
|
||||
eaf-open-demo)
|
||||
;; :unless (string= (system-name) "hasp138dw")
|
||||
;;:when (if (require 'dbus) (dbus-ping :session "org.freedesktop.Notifications"))
|
||||
:if my-dbusp ;; EAF use DBus' session bus, it must run by a general user (DO NOT USE as root).
|
||||
:config
|
||||
(setq eaf-find-alternate-file-in-dired t)
|
||||
(setq eaf-config-location (concat user-cache-directory "eaf/"))
|
||||
)
|
||||
|
||||
(provide 'eaf-settings)
|
||||
;;; eaf-settings.el ends here
|
||||
36
settings/ess-settings.el
Normal file
36
settings/ess-settings.el
Normal file
@@ -0,0 +1,36 @@
|
||||
;;; ess-settings.el --- ess settings -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;; R (ESS)
|
||||
;; https://melpa.org/#/ess
|
||||
;; https://github.com/emacs-ess/ESS
|
||||
;; https://ess.r-project.org/
|
||||
;; https://ess.r-project.org/Manual/ess.html
|
||||
;; https://www.emacswiki.org/emacs/EmacsSpeaksStatistics
|
||||
|
||||
;; Requirements:
|
||||
;; ess
|
||||
;; ess-R-data-view
|
||||
;; ctable popup
|
||||
|
||||
;; TODO:
|
||||
;; install lintr for syntax checking
|
||||
|
||||
;;; Code:
|
||||
(use-package ess-site ;; all ESS features
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/ess"))
|
||||
:commands ess-r-mode ;; only R related features
|
||||
)
|
||||
(use-package ess-R-data-view
|
||||
:after (ess-r-mode))
|
||||
|
||||
(use-package company-statistics
|
||||
:after (ess-r-mode company)
|
||||
:config
|
||||
(setq company-statistics-file (concat user-cache-directory
|
||||
"company-statistics-cache.el"))
|
||||
;;(add-hook 'company-mode-hook 'company-statistics-mode)
|
||||
)
|
||||
|
||||
(provide 'ess-settings)
|
||||
;;; ess-settings.el ends here
|
||||
27
settings/filetype-settings.el
Normal file
27
settings/filetype-settings.el
Normal file
@@ -0,0 +1,27 @@
|
||||
;;; filetype-settings.el --- Summary -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;;; Requirements:
|
||||
;; markdown-mode https://melpa.org/#/markdown-mode
|
||||
;; sql-indent https://elpa.gnu.org/packages/sql-indent.html https://github.com/alex-hhh/emacs-sql-indent
|
||||
;; sqlup-mode also?
|
||||
;; systemd https://melpa.org/#/systemd
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-package markdown-mode
|
||||
:commands markdown-mode
|
||||
:mode "\\.md\\'")
|
||||
|
||||
(use-package sql-indent
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/sql-indent"))
|
||||
:commands sqlind-minor-mode)
|
||||
|
||||
(use-package systemd
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/systemd"))
|
||||
:commands systemd-mode
|
||||
:mode (("\\.service\\'" . systemd-mode) ("\\.mount\\'" . systemd-mode)))
|
||||
|
||||
(provide 'filetype-settings)
|
||||
;;; filetype-settings.el ends here
|
||||
44
settings/ledger-settings.el
Normal file
44
settings/ledger-settings.el
Normal file
@@ -0,0 +1,44 @@
|
||||
;;; ledger-settings.el --- ledger settings -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;; https://github.com/ledger/ledger-mode
|
||||
|
||||
;; Requirements:
|
||||
;; programs
|
||||
;; ledger https://www.ledger-cli.org/download.html
|
||||
;; Emacs packages
|
||||
;; ledger-mode ;; https://melpa.org/#/ledger-mode
|
||||
;; org
|
||||
;; flycheck-ledger ;; https://melpa.org/#/flycheck-ledger
|
||||
;; company-ledger ;; https://melpa.org/#/company-ledger
|
||||
|
||||
;;; Code:
|
||||
(use-package ledger-mode
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/ledger-mode"))
|
||||
:delight
|
||||
(ledger-mode "🅛d") ; "Le "
|
||||
(ledger-report-mode "🅛dr") ; "LeR 🅖⒭"
|
||||
:commands ledger-mode
|
||||
:mode "\\.ledger\\'"
|
||||
:config
|
||||
(setq ledger-post-account-alignment-column 2)
|
||||
(setq ledger-post-amount-alignment-column 62)
|
||||
)
|
||||
|
||||
(use-package flycheck-ledger
|
||||
:after (ledger-mode flycheck)
|
||||
)
|
||||
|
||||
(use-package company-ledger
|
||||
:after (ledger-mode company)
|
||||
:config
|
||||
;;(add-to-list 'company-backends 'company-ledger)
|
||||
;; Only use company-mode with company-ledger in ledger-mode
|
||||
(add-hook 'ledger-mode-hook
|
||||
(lambda ()
|
||||
(set (make-local-variable 'company-backends)
|
||||
'(company-ledger company-capf company-files))))
|
||||
)
|
||||
|
||||
(provide 'ledger-settings)
|
||||
;;; ledger-settings.el ends here
|
||||
354
settings/mail-settings.el
Normal file
354
settings/mail-settings.el
Normal file
@@ -0,0 +1,354 @@
|
||||
;;; mail-settings.el --- Mail settings -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;; https://kkatsuyuki.github.io/notmuch-conf/
|
||||
;; https://opensource.com/article/20/1/organize-email-notmuch
|
||||
;; https://notmuchmail.org/emacstips/
|
||||
;; https://bostonenginerd.com/posts/notmuch-of-a-mail-setup-part-2-notmuch-and-emacs/
|
||||
|
||||
;; `mm-text-html-renderer'
|
||||
|
||||
;; `mailcap-parse-mailcaps' in mailcap.el uses a given path or the
|
||||
;; value of environment variable MAILCAPS if set or either
|
||||
;; ("~/.mailcap", "/etc/mailcap", "/usr/etc/mailcap",
|
||||
;; "/usr/local/etc/mailcap") for *nix or ("~/.mailcap", "~/mail.cap",
|
||||
;; "~/etc/mail.cap") for `mailcap-poor-system-types'. parsed
|
||||
;; mailcaps, see `mailcap-parsed-p', are in `mailcap-mime-data'.
|
||||
|
||||
;; `notmuch-show-view-part' `mm-inlined-types'
|
||||
;; `notmuch-show-attachment-debug'
|
||||
|
||||
;;; Requirments:
|
||||
;; (mu / mu4e)
|
||||
;; mu4e-maildirs-extension https://melpa.org/#/mu4e-maildirs-extension https://github.com/agpchil/mu4e-maildirs-extension https://www.djcbsoftware.nl/code/mu/mu4e/
|
||||
;; (notmuch)
|
||||
|
||||
;;; Code:
|
||||
(use-package message
|
||||
:defer t
|
||||
:config
|
||||
(set-face-attribute 'message-header-name nil :foreground "#4f97d7")
|
||||
(set-face-attribute 'message-header-subject nil :foreground "#bc6ec5")
|
||||
(set-face-attribute 'message-header-to nil :foreground "#c56ec3")
|
||||
(set-face-attribute 'message-header-cc nil :foreground "#c56ec3")
|
||||
(set-face-attribute 'message-header-other nil :foreground "#ce537a")
|
||||
(set-face-attribute 'message-cited-text nil :foreground "#9f8766")
|
||||
(set-face-attribute 'message-mml nil :foreground "#86dc2f") ;; mime meta language
|
||||
;; define in custom.el user-mail-address, user-full-name
|
||||
(setq message-directory "~/.local/share/mail/") ;; sent mails
|
||||
(setq message-auto-save-directory "~/.local/share/mail/drafts/") ;; drafts
|
||||
(setq message-kill-buffer-on-exit t) ;; after sending mail
|
||||
(setq mm-text-html-renderer 'shr))
|
||||
|
||||
(defgroup my-mu4e nil
|
||||
"My mu4e concept mapping"
|
||||
:prefix "my-mu4e-"
|
||||
:group 'my)
|
||||
|
||||
(defcustom my-mu4e-sync 'test
|
||||
"One of `test', `offlineimap' and `mbsync'.
|
||||
see also `my-mu4e-offlineimap-command' and `my-mu4e-mbsync-command'.
|
||||
|
||||
`mu4e-get-mail-command' and `mu4e-change-filenames-when-moving' will
|
||||
be set according to this variable."
|
||||
:group 'my-mu4e
|
||||
:type '(choice
|
||||
symbol
|
||||
(const :tag "test" test)
|
||||
(const :tag "offlineimap" offlineimap)
|
||||
(const :tag "mbsync" mbsync)))
|
||||
|
||||
(defcustom my-mu4e-offlineimap-command "offlineimap"
|
||||
"Oflineimap command used for mu4e if set in `my-mu4e-sync'."
|
||||
:group 'my-mu4e
|
||||
:type '(choice string (const :tag "offlineimap" "offlineimap")))
|
||||
|
||||
(defcustom my-mu4e-mbsync-command "mbsync"
|
||||
"mbsync command used for mu4e if set in `my-mu4e-sync'."
|
||||
:group 'my-mu4e
|
||||
:type '(choice string (const :tag "mbsync" "mbsync")))
|
||||
|
||||
(defcustom my-mu4e-bookmarks
|
||||
'((:name "Unread messages"
|
||||
:query "flag:unread AND NOT flag:trashed"
|
||||
:key ?u)
|
||||
(:name "Today's messages"
|
||||
:query "date:today..now"
|
||||
:key ?t)
|
||||
(:name "Last 7 days"
|
||||
:query "date:7d..now"
|
||||
:hide-unread t
|
||||
:key ?w)
|
||||
(:name "Messages with images"
|
||||
:query "mime:image/*"
|
||||
:key ?p))
|
||||
"Documention see `mu4e-bookmarks' in `mu4e-vars.el'.
|
||||
|
||||
:query same as \"mu find xxx\""
|
||||
:group 'my-mu4e
|
||||
:type '(repeat (plist)))
|
||||
|
||||
(defcustom my-mu4e-attachment-dir (expand-file-name "~/")
|
||||
"Documention see `mu4e-attachment-dir' in `mu4e-vars.el'."
|
||||
:group 'my-mu4e
|
||||
:type '(choice
|
||||
directory
|
||||
(const :tag "~/" "~/")
|
||||
(const :tag "~/Downloads" "~/Downloads"))
|
||||
:safe 'stringp)
|
||||
|
||||
(defcustom my-mu4e-contexts nil
|
||||
"Documention see `mu4e-contexts' in `mu4e-context.el'."
|
||||
:group 'my-mu4e
|
||||
:type '(list))
|
||||
|
||||
(defcustom my-mu4e-user-mailing-lists nil
|
||||
"Documention see `mu4e-user-mailing-lists' in `mu4e-lists.el'."
|
||||
:group 'my-mu4e
|
||||
:type '(repeat (cons string string)))
|
||||
|
||||
;; note `mu4e-headers-results-limit'
|
||||
;; headers view
|
||||
;; [/] `mu4e-headers-search-narrow' - filter messages in current search query (x AND y)
|
||||
;; [\] `mu4e-headers-query-prev' - go back to previous search query
|
||||
(use-package mu4e
|
||||
:delight
|
||||
(mu4e-main-mode "🅜m")
|
||||
(mu4e-headers-mode "🅜h") ;; will be overwitten with `mu4e~headers-search-execute'
|
||||
(mu4e-view-mode "🅜v")
|
||||
(mu4e~update-mail-mode "🅜u")
|
||||
:commands mu4e
|
||||
:config
|
||||
;; allow to display emoji in the subject lines of the emails
|
||||
(delete 'mu4e-headers-mode emojify-inhibit-major-modes) ;; https://github.com/iqbalansari/emacs-emojify/issues/39
|
||||
|
||||
;; set `mu4e-get-mail-command' (runs mu index afterwards, by default key U in main or C-c C-u else)
|
||||
;; and `mu4e-change-filenames-when-moving'
|
||||
;; no default cond for custom settings
|
||||
(cond ((eq my-mu4e-sync 'test)
|
||||
"reset to saved (`custom-set-variables') or standard (if not saved) value"
|
||||
(custom-reevaluate-setting 'mu4e-get-mail-command) ;; true for testing
|
||||
(custom-reevaluate-setting 'mu4e-change-filenames-when-moving))
|
||||
((eq my-mu4e-sync 'offlineimap)
|
||||
(setq mu4e-get-mail-command my-mu4e-offlineimap-command)
|
||||
(setq mu4e-change-filenames-when-moving nil)) ;; nil better for offlineimap
|
||||
((eq my-mu4e-sync 'mbsync)
|
||||
(setq mu4e-get-mail-command my-mu4e-mbsync-command)
|
||||
(setq mu4e-change-filenames-when-moving t))) ;; t better for mbsync
|
||||
|
||||
;;; vars
|
||||
(setq mu4e-completing-read-function 'ivy-completing-read)
|
||||
(setq mu4e-confirm-quit nil)
|
||||
(setq mu4e-use-fancy-chars nil) ;; use unicodes for fancy tags etc. But this does not means emojis are activated.
|
||||
(setq mu4e-bookmarks my-mu4e-bookmarks)
|
||||
(setq mu4e-attachment-dir my-mu4e-attachment-dir)
|
||||
|
||||
;;; headers
|
||||
;;(setq mu4e-headers-results-limit 500) ;; to ignore the limit for one query press a C-u before invoking the search. consider narrowing the search instead of increasing the limit number
|
||||
(setq mu4e-headers-fields '((:human-date . 12)
|
||||
(:flags . 6)
|
||||
(:mailing-list . 10)
|
||||
;;(:from . 22)
|
||||
(:from-or-to . 22) ;; :from-or-to shows From: except when the e-mail was sent by the user (i.e., you) in that case it shows To: (prefixed by To, see also `mu4e-headers-from-or-to-prefix')
|
||||
(:subject)))
|
||||
;;(setq mu4e-headers-from-or-to-prefix '("" . "To ")) ;; prefix "To " for sent messages
|
||||
|
||||
;;; message
|
||||
;;(setq mu4e-html2text-command ...)
|
||||
|
||||
;;; view
|
||||
(setq mu4e-view-show-images t)
|
||||
(setq mu4e-view-show-addresses t)
|
||||
(add-to-list 'mu4e-headers-actions '("view in browser" . mu4e-action-view-in-browser))
|
||||
(add-to-list 'mu4e-view-actions '("view in browser" . mu4e-action-view-in-browser))
|
||||
|
||||
;;; actions
|
||||
(setq mu4e-action-tags-header "X-Keywords") ;; for e.g. gmail
|
||||
|
||||
;;; compose
|
||||
;; use mu4e for e-mail in emacs
|
||||
(setq mail-user-agent 'mu4e-user-agent) ;; for completion for To, CC, BSS fields
|
||||
;; (setq mu4e-sent-messages-behavior 'delete) ;; TODO: sent is automatic done via server? therefore delete?
|
||||
|
||||
;;; draft
|
||||
;;(defalias 'mu4e-compose-signature 'message-signature) ;; point to `message-signature'
|
||||
(setq mu4e-compose-signature-auto-include nil) ;; see also `mu4e-compose-signature defined in contexts
|
||||
|
||||
;;; context
|
||||
;; switch context with M-x mu4e-context-switch (force reload (if same context) with prefix-argument C-u)
|
||||
;; see current context with M-x mu4e-context-current
|
||||
(setq mu4e-contexts my-mu4e-contexts)
|
||||
(defun my-mu4e-message-maildir-matches (msg rx)
|
||||
"helper to determine which account context to use based on the
|
||||
folder in maildir the email (eg. ~/.mail/work) is located in."
|
||||
(when rx
|
||||
(if (listp rx)
|
||||
;; If rx is a list, try each one for a match
|
||||
(or (mu4e-message-maildir-matches msg (car rx))
|
||||
(mu4e-message-maildir-matches msg (cdr rx)))
|
||||
;; Not a list, check rx
|
||||
(string-match rx (mu4e-message-field msg :maildir)))))
|
||||
;; overwite in custom.el
|
||||
(defun my-mu4e-refile-folder-work (msg)
|
||||
"Function for chosing the refile folder for the work account.
|
||||
MSG is a message p-list from mu4e."
|
||||
(cond
|
||||
;; nil no refiling
|
||||
))
|
||||
|
||||
;; set `mu4e-context-policy` and `mu4e-compose-policy` to tweak when mu4e should
|
||||
;; guess or ask the correct context, e.g.
|
||||
(setq mu4e-context-policy 'pick-first) ;; start with the first (default) context; default is to ask-if-none (ask when there's no context yet, and none match)
|
||||
;; (setq mu4e-compose-context-policy nil) ;; compose with the current context is no context matches; default is to ask
|
||||
|
||||
;;; lists
|
||||
;; The shortname (friendly) should a at most 8 characters, camel-case, see also `mu4e-mailing-list-patterns'
|
||||
(setq mu4e-user-mailing-lists my-mu4e-user-mailing-lists)
|
||||
|
||||
;;; org
|
||||
;;(setq mu4e-org-link-query-in-headers-mode nil) ;; point to message (default) rather then the query
|
||||
)
|
||||
|
||||
(use-package mu4e-maildirs-extension
|
||||
:after mu4e
|
||||
:config
|
||||
(setq mu4e-maildirs-extension-title
|
||||
(concat " Maildirs\t(["
|
||||
(key-description mu4e-maildirs-extension-toggle-maildir-key)
|
||||
"] fold, [C-u "
|
||||
(key-description mu4e-maildirs-extension-toggle-maildir-key)
|
||||
"] fold w/ children, [RET]/[mouse-2] jump to, [C-u RET] jump to unread only)\n"))
|
||||
(setq mu4e-maildirs-extension-action-text
|
||||
(concat "\t* ["
|
||||
(key-description mu4e-maildirs-extension-action-key)
|
||||
"]pdate index & cache\t([C-u "
|
||||
(key-description mu4e-maildirs-extension-action-key)
|
||||
"] clear cache, [C-u C-u "
|
||||
(key-description mu4e-maildirs-extension-action-key)
|
||||
"] clear and refresh)\n"))
|
||||
(setq mu4e-maildirs-extension-maildir-default-prefix "└") ;;├> └>
|
||||
(setq mu4e-maildirs-extension-fake-maildir-separator "\\.")
|
||||
|
||||
;; overwrite to remove double entries:
|
||||
;; /desy/*
|
||||
;; /desy/Drafts
|
||||
;; /desy/INBOX
|
||||
;; /desy/INBOX.event
|
||||
;; /desy/INBOX.Ing
|
||||
;; /desy/INBOX/Ing/*
|
||||
;; /desy/INBOX.Ing.CAD
|
||||
;; /desy/INBOX/Ing/CAD/*
|
||||
;; alteration: searching for "/.*/.*" pathes and do not append /* to them.
|
||||
(defun mu4e-maildirs-extension-paths ()
|
||||
"Get maildirs paths."
|
||||
(let ((paths (mu4e-maildirs-extension-get-relevant-maildirs))
|
||||
(paths-to-show nil))
|
||||
|
||||
(mapc #'(lambda (name)
|
||||
(let ((parents (butlast (mu4e-maildirs-extension-parse name)))
|
||||
(path nil))
|
||||
(mapc #'(lambda (parent-name)
|
||||
(setq path (concat path "/" parent-name))
|
||||
(unless (or (member path paths-to-show)
|
||||
(string-match-p "/.*/.*" path))
|
||||
(add-to-list 'paths-to-show (format "%s/*" path) t)))
|
||||
parents))
|
||||
(add-to-list 'paths-to-show name t))
|
||||
paths)
|
||||
paths-to-show))
|
||||
|
||||
(mu4e-maildirs-extension))
|
||||
|
||||
(defgroup my-notmuch nil
|
||||
"My notmuch concept mapping"
|
||||
:prefix "my-notmuch-"
|
||||
:group 'my)
|
||||
|
||||
(defcustom my-notmuch-tag-formats
|
||||
'(("unread" (propertize tag 'face 'notmuch-tag-unread))
|
||||
("flagged" (propertize tag 'face 'notmuch-tag-flagged)
|
||||
(notmuch-tag-format-image-data tag (notmuch-tag-star-icon))))
|
||||
"Documention see `notmuch-tag-formats' in `notmuch-tag.el'."
|
||||
:group 'my-notmuch
|
||||
:type 'notmuch-tag-format-type)
|
||||
|
||||
(defcustom my-notmuch-saved-searches
|
||||
`((:name "inbox" :query "tag:inbox" :key ,(kbd "i"))
|
||||
(:name "unread" :query "tag:unread" :key ,(kbd "u"))
|
||||
(:name "flagged" :query "tag:flagged" :key ,(kbd "f"))
|
||||
(:name "sent" :query "tag:sent" :key ,(kbd "t"))
|
||||
(:name "drafts" :query "tag:draft" :key ,(kbd "d"))
|
||||
(:name "all mail" :query "*" :key ,(kbd "a")))
|
||||
"Documention see `notmuch-saved-searches' in `notmuch-hello.el'."
|
||||
:group 'my-notmuch
|
||||
:get 'notmuch-hello--saved-searches-to-plist
|
||||
:type '(repeat notmuch-saved-search-plist)
|
||||
:tag "List of Saved Searches")
|
||||
|
||||
(use-package notmuch
|
||||
:delight
|
||||
(notmuch-hello-mode "🅝h")
|
||||
(notmuch-message-mode "🅝m")
|
||||
(notmuch-search-mode "🅝s")
|
||||
(notmuch-show-mode "🅝w")
|
||||
(notmuch-tree-mode "🅝t")
|
||||
:commands notmuch
|
||||
:config
|
||||
(set-face-attribute 'notmuch-tag-flagged nil :foreground "#b1951d")
|
||||
(setq notmuch-tag-formats my-notmuch-tag-formats)
|
||||
(setq notmuch-search-oldest-first nil) ;; newest first
|
||||
(setq notmuch-saved-searches my-notmuch-saved-searches)
|
||||
|
||||
(add-to-list 'notmuch-hello-sections 'my-notmuch-hello-insert-footer t)
|
||||
(defun my-notmuch-hello-insert-footer ()
|
||||
"Insert the notmuch-hello footer."
|
||||
(widget-insert "\n")
|
||||
(let ((start (point))) ;; to center text
|
||||
(widget-insert "To download mails execute ")
|
||||
(if (executable-find "offlineimap")
|
||||
(widget-create 'link
|
||||
:notify (lambda (&rest ignore)
|
||||
(my-mail-exec-offlineimap))
|
||||
:button-prefix "" :button-suffix ""
|
||||
:help-echo "my-mail-exec-offlineimap"
|
||||
"OfflineIMAP")
|
||||
(widget-create 'link
|
||||
:notify (lambda (&rest ignore)
|
||||
(message "offlineimap is not installed"))
|
||||
:button-prefix "" :button-suffix ""
|
||||
:button-face 'error
|
||||
:help-echo "offlineimap is not installed"
|
||||
"OfflineIMAP"))
|
||||
(widget-insert " (also using ")
|
||||
(if (executable-find "notmuch")
|
||||
(widget-insert "notmuch")
|
||||
(widget-insert (propertize "notmuch" 'face 'error)))
|
||||
(widget-insert " and ")
|
||||
(if (executable-find "afew")
|
||||
(widget-insert "afew")
|
||||
(widget-insert (propertize "afew" 'face 'error)))
|
||||
(widget-insert ")")
|
||||
(let ((fill-column (- (window-width) notmuch-hello-indent)))
|
||||
(center-region start (point)))))
|
||||
|
||||
(defun my-mail-exec-offlineimap ()
|
||||
"execute offlineimap"
|
||||
(interactive)
|
||||
(set-process-sentinel
|
||||
(start-process-shell-command "offlineimap"
|
||||
"*offlineimap*"
|
||||
"offlineimap -o")
|
||||
'(lambda (process event)
|
||||
(notmuch-refresh-all-buffers)
|
||||
(let ((w (get-buffer-window "*offlineimap*")))
|
||||
(when w
|
||||
(with-selected-window w (recenter (window-end)))))))
|
||||
(popwin:display-buffer "*offlineimap*"))
|
||||
;; add a special buffer config
|
||||
(add-to-list 'popwin:special-display-config
|
||||
'("*offlineimap*" :dedicated t :position bottom :stick t
|
||||
:height 0.4 :noselect t))
|
||||
)
|
||||
|
||||
(provide 'mail-settings)
|
||||
;;; mail-settings.el ends here
|
||||
28
settings/multiple-cursors-settings.el
Normal file
28
settings/multiple-cursors-settings.el
Normal file
@@ -0,0 +1,28 @@
|
||||
;;; multiple-cursors-settings --- Settings file for multiple cursors
|
||||
|
||||
;;; Commentary:
|
||||
;; multiple cursors configurations https://melpa.org/#/multiple-cursors
|
||||
|
||||
;; Requirements:
|
||||
|
||||
;;; Code:
|
||||
(use-package multiple-cursors
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/multiple-cursors"))
|
||||
:bind (
|
||||
;; see kbd prefix description in which-key-settings
|
||||
("M-m s m a" . mc/mark-all-dwim)
|
||||
("M-m s m b" . mc/mark-all-like-this)
|
||||
("M-m s m m" . mc/mark-more-like-this-extended)
|
||||
("M-m s m r" . mc/edit-lines)
|
||||
;; special bindings manipulate text under cursors
|
||||
("M-m s m s l" . mc/insert-letters)
|
||||
("M-m s m s m" . mc/mark-sgml-tag-pair)
|
||||
("M-m s m s n" . mc/insert-numbers)
|
||||
("M-m s m s r" . set-rectangular-region-anchor)
|
||||
("M-m s m s s" . mc/sort-regions)
|
||||
("M-m s m s t" . mc/reverse-regions)
|
||||
)
|
||||
)
|
||||
|
||||
(provide 'multiple-cursors-settings)
|
||||
;;; multiple-cursors-settings.el ends here
|
||||
1038
settings/org-settings.el
Normal file
1038
settings/org-settings.el
Normal file
File diff suppressed because it is too large
Load Diff
29
settings/plot-settings.el
Normal file
29
settings/plot-settings.el
Normal file
@@ -0,0 +1,29 @@
|
||||
;;; plot-settings.el --- plot settings -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;; .plantuml .pum .plu
|
||||
|
||||
;; Requirements:
|
||||
;; gnuplot
|
||||
;; gnuplot-mode https://melpa.org/#/gnuplot-mode drive gnuplot from within Emacs e.g. via org (export)
|
||||
;; plantuml-mode https://melpa.org/#/plantuml-mode https://github.com/skuro/plantuml-mode
|
||||
;; dash
|
||||
|
||||
;;; Code:
|
||||
(use-package gnuplot-mode
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/gnuplot"))
|
||||
:commands gnuplot-mode
|
||||
:mode "\\.gp\\'"
|
||||
)
|
||||
|
||||
(use-package plantuml-mode
|
||||
:commands (plantuml-mode org-mode)
|
||||
:config
|
||||
;; arch linux aur package path
|
||||
(setq plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar")
|
||||
(setq org-plantuml-jar-path "/usr/share/java/plantuml/plantuml.jar")
|
||||
(with-eval-after-load 'org
|
||||
(add-to-list 'org-src-lang-modes '("plantuml" . plantuml))))
|
||||
|
||||
(provide 'plot-settings)
|
||||
;;; plot-settings.el ends here
|
||||
25
settings/polymode-settings.el
Normal file
25
settings/polymode-settings.el
Normal file
@@ -0,0 +1,25 @@
|
||||
;;; polymode-settings.el --- Polymode settings -*- lexical-binding: t -*-
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
(use-package polymode
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/polymode"))
|
||||
:commands poly-python-web-mode
|
||||
:config
|
||||
|
||||
(define-hostmode poly-python-hostmode :mode 'python-mode)
|
||||
|
||||
(define-innermode poly-python-web-expr-innermode
|
||||
:mode 'web-mode
|
||||
:head-matcher (rx "r" (= 3 (char "\"'")) (* (any space)))
|
||||
;;:head-matcher (rx (= 3 (char "\"'")) (* (any space)))
|
||||
:tail-matcher (rx (= 3 (char "\"'")))
|
||||
:head-mode 'host
|
||||
:tail-mode 'host)
|
||||
|
||||
(define-polymode poly-python-web-mode
|
||||
:hostmode 'poly-python-hostmode
|
||||
:innermodes '(poly-python-web-expr-innermode))
|
||||
)
|
||||
|
||||
(provide 'polymode-settings)
|
||||
;;; polymode-settings.el ends here
|
||||
13
settings/post-settings.el
Normal file
13
settings/post-settings.el
Normal file
@@ -0,0 +1,13 @@
|
||||
;;; post-settings.el --- Summary -*- lexical-binding: t -*-
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
(setq gc-cons-threshold (* 2 1000 1000)) ;; Make gc pauses faster by decreasing back the threshold. See also above.
|
||||
|
||||
(use-package cus-edit
|
||||
:config
|
||||
(setq custom-file (concat user-emacs-directory "custom.el"))
|
||||
(setq custom-buffer-done-kill t)
|
||||
(load custom-file t t))
|
||||
|
||||
(provide 'post-settings)
|
||||
;;; post-settings.el ends here
|
||||
144
settings/python-settings.el
Normal file
144
settings/python-settings.el
Normal file
@@ -0,0 +1,144 @@
|
||||
;;; python-settings.el --- Python settings -*- mode: emacs-lisp; lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Requirements:
|
||||
;; program: python
|
||||
;; Emacs packages: anaconda-mode company-anaconda sphinx-doc
|
||||
|
||||
;;; Code:
|
||||
(use-package python
|
||||
:delight (python-mode "🅟") ;; "Py "
|
||||
:commands (python-mode)
|
||||
:bind (:map python-mode-map
|
||||
;; swap C-u C-c C-c with C-c C-c, so C-c C-c sends __main__
|
||||
("C-c C-c" . my-python-shell-send-buffer-w-main)
|
||||
("C-u C-c C-c" . my-python-shell-send-buffer)
|
||||
("M-m m c c" . my-python-execute-file)
|
||||
("M-m m c C" . my-python-execute-file-switch)
|
||||
("M-m m s b" . my-python-shell-send-buffer-w-main))
|
||||
:config
|
||||
(setq python-indent-offset 2) ; python-indent is obsolete since 24.3; use python-indent-offset instead.
|
||||
(setq python-indent-guess-indent-offset nil) ; default t. nil to use the config value python-indent-offset
|
||||
(setq python-indent-guess-indent-offset-verbose nil) ; hide message like: Can’t guess python-indent-offset, using defaults: 2
|
||||
;;(setq python-shell-interpreter "ipython")
|
||||
;;(setq python-shell-interpreter-args "-i")
|
||||
|
||||
(defun my-pyenv-executable-find (command)
|
||||
"Find executable taking pyenv shims into account.
|
||||
If the executable is a system executable and not in the same path
|
||||
as the pyenv version then also return nil. This works around https://github.com/pyenv/pyenv-which-ext
|
||||
"
|
||||
(if (executable-find "pyenv")
|
||||
(progn
|
||||
(let ((pyenv-string (shell-command-to-string (concat "pyenv which " command)))
|
||||
(pyenv-version-names (split-string (string-trim (shell-command-to-string "pyenv version-name")) ":"))
|
||||
(executable nil)
|
||||
(i 0))
|
||||
(if (not (string-match "not found" pyenv-string))
|
||||
(while (and (not executable)
|
||||
(< i (length pyenv-version-names)))
|
||||
(if (string-match (elt pyenv-version-names i) (string-trim pyenv-string))
|
||||
(setq executable (string-trim pyenv-string)))
|
||||
(if (string-match (elt pyenv-version-names i) "system")
|
||||
(setq executable (string-trim (executable-find command))))
|
||||
(setq i (1+ i))))
|
||||
executable))
|
||||
(executable-find command)))
|
||||
|
||||
(defun my-python-execute-file (arg)
|
||||
"Execute a python script in a shell."
|
||||
(interactive "P")
|
||||
;; set compile command to buffer-file-name
|
||||
;; universal argument put compile buffer in comint mode
|
||||
(let ((universal-argument t)
|
||||
(compile-command (format "%s %s"
|
||||
(my-pyenv-executable-find python-shell-interpreter)
|
||||
(shell-quote-argument (file-name-nondirectory buffer-file-name)))))
|
||||
(if arg
|
||||
(call-interactively 'compile)
|
||||
(compile compile-command t)
|
||||
(with-current-buffer (get-buffer "*compilation*")
|
||||
(inferior-python-mode)))))
|
||||
|
||||
(defun my-python-execute-file-switch (arg)
|
||||
"Execute a python script in a shell and switch to the shell buffer in `insert state'."
|
||||
(interactive "P")
|
||||
(my-python-execute-file arg)
|
||||
(switch-to-buffer-other-window "*compilation*")
|
||||
(end-of-buffer)
|
||||
(evil-insert-state))
|
||||
|
||||
(defun my-python-shell-send-buffer (&optional send-main)
|
||||
"Send buffer content to shell."
|
||||
(interactive)
|
||||
(let ((python-mode-hook nil)) ;; TODO: why?
|
||||
(python-shell-send-buffer send-main)))
|
||||
|
||||
(defun my-python-shell-send-buffer-w-main ()
|
||||
"Send buffer content to shell with main."
|
||||
(interactive)
|
||||
(my-python-shell-send-buffer t))
|
||||
|
||||
(defadvice run-python
|
||||
(after my-advice-run-python activate)
|
||||
"set flag to allow exit without query on any active python
|
||||
process."
|
||||
(set-process-query-on-exit-flag ad-return-value nil))
|
||||
|
||||
(defun my-python-shell-send-buffer-w-args (args)
|
||||
"Send buffer content to shell with main and arguments."
|
||||
(interactive "sPython arguments: ")
|
||||
(let ((source-buffer (current-buffer)))
|
||||
(with-temp-buffer
|
||||
(insert "import sys; sys.argv = '''" args "'''.split()\n")
|
||||
(insert-buffer-substring source-buffer)
|
||||
(my-python-shell-send-buffer-w-main))))
|
||||
)
|
||||
|
||||
(use-package anaconda-mode ;; works with company-mode via company-anaconda
|
||||
:after python
|
||||
:delight (anaconda-mode "Ⓐ") ;; Ⓐ a
|
||||
:bind (([remap anaconda-mode-show-doc] . my-anaconda-mode-show-doc)) ;; M-?
|
||||
:hook (python-mode
|
||||
(python-mode . anaconda-eldoc-mode)) ;; if cursor is between function's parenthesis show parameter in echo area
|
||||
:config
|
||||
(setq anaconda-mode-installation-directory (concat user-cache-directory "anaconda-mode"))
|
||||
;; compared to `anaconda-mode-show-doc' using `my-anaconda-mode-show-doc-callback'
|
||||
(defun my-anaconda-mode-show-doc ()
|
||||
"Show documentation for context at point."
|
||||
(interactive)
|
||||
;;(anaconda-mode-call "show_doc" 'anaconda-mode-show-doc-callback) ;; removed
|
||||
(anaconda-mode-call "show_doc" 'my-anaconda-mode-show-doc-callback) ;; instead
|
||||
)
|
||||
;; compared to `anaconda-mode-show-doc-callback' no change of focus
|
||||
(defun my-anaconda-mode-show-doc-callback (result)
|
||||
"Process view doc RESULT."
|
||||
(if (> (length result) 0)
|
||||
(if (and anaconda-mode-use-posframe-show-doc
|
||||
(require 'posframe nil 'noerror)
|
||||
(posframe-workable-p))
|
||||
(anaconda-mode-documentation-posframe-view result)
|
||||
;;(pop-to-buffer (anaconda-mode-documentation-view result) t) ;; removed
|
||||
(anaconda-mode-documentation-view result) ;; instead
|
||||
)
|
||||
(message "No documentation available")))
|
||||
)
|
||||
|
||||
(use-package company-anaconda
|
||||
:after (python anaconda-mode company)
|
||||
:bind (([remap anaconda-mode-complete] . company-anaconda))
|
||||
:config
|
||||
(add-to-list 'company-backends '(company-anaconda :with company-capf)) ;; to see anaconda-mode completions together with ones comes from inferior python process
|
||||
)
|
||||
|
||||
;; https://melpa.org/#/sphinx-doc
|
||||
;; https://github.com/naiquevin/sphinx-doc.el
|
||||
;; enable the sphinx-doc-mode and bind the interactive function sphinx-doc to C-c M-d.
|
||||
(use-package sphinx-doc
|
||||
:delight (sphinx-doc-mode "Ⓢ") ;; Ⓢ s
|
||||
:hook (python-mode . sphinx-doc-mode)
|
||||
)
|
||||
|
||||
(provide 'python-settings)
|
||||
;;; python-settings.el ends here
|
||||
19
settings/shell-settings.el
Normal file
19
settings/shell-settings.el
Normal file
@@ -0,0 +1,19 @@
|
||||
;;; shell-settings.el --- Summary -*- lexical-binding: t -*-
|
||||
;;; Commentary:
|
||||
;;; Code:
|
||||
(use-package sh-script
|
||||
:defer t
|
||||
:config
|
||||
(setq sh-basic-offset 2)
|
||||
)
|
||||
|
||||
(use-package powershell ;; https://melpa.org/#/powershell
|
||||
:commands powershell-mode)
|
||||
|
||||
(use-package eshell-mode
|
||||
:defer t
|
||||
:init
|
||||
(setq eshell-directory-name (concat user-cache-directory "eshell/")))
|
||||
|
||||
(provide 'shell-settings)
|
||||
;;; shell-settings.el ends here
|
||||
49
settings/web-settings.el
Normal file
49
settings/web-settings.el
Normal file
@@ -0,0 +1,49 @@
|
||||
;;; web-settings.el --- Summary -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Requirements:
|
||||
;; js2-mode https://melpa.org/#/js2-mode
|
||||
;; tern (npm install -g tern)
|
||||
;; php-mode https://melpa.org/#/php-mode
|
||||
;; web-mode https://melpa.org/#/web-mode
|
||||
;; company-web https://melpa.org/#/company-web
|
||||
;; web-completion-data https://melpa.org/#/web-completion-data
|
||||
|
||||
;;; Code:
|
||||
|
||||
(use-package css-mode
|
||||
:defer t
|
||||
:config
|
||||
(setq css-indent-offset 2))
|
||||
|
||||
(use-package js2-mode
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/js2-mode"))
|
||||
:commands js2-mode)
|
||||
|
||||
(use-package php-mode
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/php-mode"))
|
||||
:commands php-mode)
|
||||
|
||||
(use-package web-mode
|
||||
:commands (web-mode))
|
||||
|
||||
(use-package web-completion-data
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/web-completion-data"))
|
||||
:defer t)
|
||||
|
||||
(use-package company-web-html
|
||||
:after (web-mode company)
|
||||
:load-path (lambda() (concat user-emacs-directory "lisp/company-web"))
|
||||
:bind (([remap complete-symbol] . company-complete)) ;; M-C-i and <M-tab>
|
||||
:config
|
||||
;;(add-to-list 'company-backends 'company-web-html)
|
||||
;; Only use company-mode with company-web-html in web-mode
|
||||
(add-hook 'web-mode-hook
|
||||
(lambda ()
|
||||
(set (make-local-variable 'company-backends)
|
||||
'(company-web-html company-capf company-files))))
|
||||
)
|
||||
|
||||
(provide 'web-settings)
|
||||
;;; web-settings.el ends here
|
||||
Reference in New Issue
Block a user