add gui, mail and programming language settings

This commit is contained in:
2020-12-05 20:44:33 +01:00
parent c06aba2ba4
commit 7d8b0caeee
13 changed files with 1840 additions and 0 deletions

34
settings/eaf-settings.el Normal file
View 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
View 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

View 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

View 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
View 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

View 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

File diff suppressed because it is too large Load Diff

29
settings/plot-settings.el Normal file
View 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

View 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
View 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
View 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: Cant 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

View 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
View 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