;; Not necessary when using straight.el
;; (C-h v straight-package-neutering-mode RET)
-(comment
+(when (and
+ (not (featurep 'straight))
+ (version< emacs-version "27"))
(setq package-enable-at-startup nil)
;; (package-initialize)
)
(exec-path-from-shell-copy-env "SSH_AGENT_PID")
(exec-path-from-shell-copy-env "SSH_AUTH_SOCK"))
-
;; only one custom theme at a time
(comment
(defadvice load-theme (before clear-previous-themes activate)
;; allow scrolling in Isearch
(setq isearch-allow-scroll t)
+(use-feature vc
+ :bind ("C-x v C-=" . vc-ediff))
+
+(use-feature ediff
+ :config (add-hook 'ediff-after-quit-hook-internal 'winner-undo)
+ :custom ((ediff-window-setup-function 'ediff-setup-windows-plain)
+ (ediff-split-window-function 'split-window-horizontally)))
+
\f
;;; General bindings
("C-c F m" . make-frame-command)
("C-c F d" . delete-frame)
- ("C-c F D" . delete-other-frames)
+ ("C-c F D" . server-edit)
("C-c o" . other-window)
(("C-c a o a" . org-agenda)
:map org-mode-map
("M-L" . org-insert-last-stored-link)
+ ("M-O" . org-toggle-link-display)
("s-T" . org-todo))
:hook ((org-mode . org-indent-mode)
(org-mode . auto-fill-mode)
(nconc magit-section-initial-visibility-alist
'(([unpulled status] . show)
([unpushed status] . show)))
+ :custom (magit-display-buffer-function #'magit-display-buffer-fullframe-status-v1)
:custom-face (magit-diff-file-heading ((t (:weight normal)))))
;; recently opened files
("C-c x" . counsel-M-x)
("C-c f ." . counsel-find-file)
("C-c f l" . counsel-find-library)
+ ("C-c f r" . counsel-recentf)
+ ("s-." . counsel-find-file)
+ ("s-r" . ivy-switch-buffer)
:map minibuffer-local-map
("C-r" . counsel-minibuffer-history))
:config
(setq ediff-after-quit-hook-internal nil)
(set-window-configuration wnd))))
(error "no more than 2 files should be marked"))))
+
+ (require 'dired-x)
+ (setq dired-guess-shell-alist-user
+ '(("\\.pdf\\'" "evince" "zathura" "okular")
+ ("\\.doc\\'" "libreoffice")
+ ("\\.docx\\'" "libreoffice")
+ ("\\.ppt\\'" "libreoffice")
+ ("\\.pptx\\'" "libreoffice")
+ ("\\.xls\\'" "libreoffice")
+ ("\\.xlsx\\'" "libreoffice")
+ ("\\.flac\\'" "mpv")))
:bind (:map dired-mode-map
("b" . dired-up-directory)
("e" . dired-ediff-files)
;; highlight uncommitted changes in the left fringe
(use-package diff-hl
+ :defer 0.6
:config
(setq diff-hl-draw-borders nil)
(global-diff-hl-mode)
(use-package multi-term
:defer 0.6
- :bind (("C-c a s m" . multi-term-dedicated-toggle)
+ :bind (("C-c a s m m" . multi-term)
+ ("C-c a s m d" . multi-term-dedicated-toggle)
+ ("C-c a s m p" . multi-term-prev)
+ ("C-c a s m n" . multi-term-next)
:map term-mode-map
- ("C-c C-j" . term-char-mode)
- :map term-raw-map
- ("C-c C-j" . term-line-mode))
+ ("C-c C-j" . term-char-mode))
:config
- (setq multi-term-program "/bin/screen"
+ (setq multi-term-program "screen"
+ multi-term-program-switches (concat "-c"
+ (getenv "XDG_CONFIG_HOME")
+ "/screen/screenrc")
;; TODO: add separate bindings for connecting to existing
;; session vs. always creating a new one
multi-term-dedicated-select-after-open-p t
term-bind-key-alist
'(("C-c C-c" . term-interrupt-subjob)
("C-c C-e" . term-send-esc)
+ ("C-c C-j" . term-line-mode)
("C-k" . kill-line)
- ("C-y" . term-paste)
+ ;; ("C-y" . term-paste)
+ ("C-y" . term-send-raw)
("M-f" . term-send-forward-word)
("M-b" . term-send-backward-word)
("M-p" . term-send-up)
("M-n" . term-send-down)
+ ("M-j" . term-send-raw-meta)
+ ("M-y" . term-send-raw-meta)
+ ("M-/" . term-send-raw-meta)
+ ("M-0" . term-send-raw-meta)
+ ("M-1" . term-send-raw-meta)
+ ("M-2" . term-send-raw-meta)
+ ("M-3" . term-send-raw-meta)
+ ("M-4" . term-send-raw-meta)
+ ("M-5" . term-send-raw-meta)
+ ("M-6" . term-send-raw-meta)
+ ("M-7" . term-send-raw-meta)
+ ("M-8" . term-send-raw-meta)
+ ("M-9" . term-send-raw-meta)
("<C-backspace>" . term-send-backward-kill-word)
("<M-DEL>" . term-send-backward-kill-word)
("M-d" . term-send-delete-word)
("M-," . term-send-raw)
("M-." . comint-dynamic-complete))
term-unbind-key-alist
- '("C-z" "C-x" "C-c" "C-h" "C-y" "<ESC>")))
+ '("C-z" "C-x" "C-c" "C-h"
+ ;; "C-y"
+ "<ESC>")))
(use-package page-break-lines
:defer 0.5
:init
(setq alert-default-style 'notifier))
+(use-package ivy-xref
+ :init
+ (setq xref-show-xrefs-function #'ivy-xref-show-xrefs))
+
\f
;;; Email (with Gnus)
(nnimap-address "127.0.0.1")
(nnimap-server-port 143)
(nnimap-authenticator plain)
- (nnimap-user "amin@bndl.org"))
- (nnimap "uwaterloo"
+ (nnimap-user "amin@bndl.local"))
+ (nnimap "uw"
(nnimap-stream plain)
(nnimap-address "127.0.0.1")
(nnimap-server-port 143)
(nnimap-authenticator plain)
- (nnimap-user "abandali@uwaterloo.ca"))
- (nnimap "csclub"
+ (nnimap-user "abandali@uw.local"))
+ (nnimap "csc"
(nnimap-stream plain)
(nnimap-address "127.0.0.1")
(nnimap-server-port 143)
(nnimap-authenticator plain)
- (nnimap-user "abandali@csclub.uw")))
+ (nnimap-user "abandali@csc.uw.local")))
gnus-message-archive-group "nnimap+amin:Sent"
gnus-parameters
'(("gnu\\.deepspec"
("gnu.*"
(gcc-self . t))
("gnu\\."
- (subscribed . t)))
+ (subscribed . t))
+ ("nnimap\\+uw:.*"
+ (gcc-self . t)))
gnus-large-newsgroup 50
gnus-home-directory (no-littering-expand-var-file-name "gnus/")
gnus-directory (concat gnus-home-directory "news/")
(to "webmasters-comment@gnu.org")
(body "Added to 2019supporters.html.\n\nMoving to campaigns.\n\n-amin\n")
(eval (setq a/message-cite-say-hi nil)))
- ("nnimap\\+uwaterloo:.*"
- (address "abandali@uwaterloo.ca")
- (gcc "\"nnimap+uwaterloo:Sent Items\""))
- ("nnimap\\+csclub:.*"
+ ("nnimap\\+uw:.*"
+ (address "abandali@uwaterloo.ca"))
+ ("nnimap\\+uw:INBOX"
+ (gcc "\"nnimap+uw:Sent Items\""))
+ ("nnimap\\+csc:.*"
(address "abandali@csclub.uwaterloo.ca")
- (gcc "nnimap+csclub:Sent")))))
+ (gcc "nnimap+csc:Sent")))))
(use-feature gnus-topic
:hook (gnus-group-mode . gnus-topic-mode)
:config
(setq gnus-permanently-visible-groups "\\(:INBOX$\\|:gnu$\\)"))
+(comment
+ ;; problematic with ebdb's popup, *EBDB-Gnus*
+ (use-feature gnus-win
+ :config
+ (setq gnus-use-full-window nil)))
+
+(use-feature gnus-dired
+ :commands gnus-dired-mode
+ :init
+ (add-hook 'dired-mode-hook 'gnus-dired-mode))
+
(use-feature mm-decode
:config
(setq mm-discouraged-alternatives '("text/html" "text/richtext")))