X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=my-init.org;h=e893ebeb2b07f8ed8413cce8f1ea5e2a4e083c55;hb=33a4c3e2a78144d819e52ee67ffca336e51d3b97;hp=65808dab5112fb9db39fa54bfc6d69d1ae1f0638;hpb=153c091bfaa1726263ff11c9f9745bb09558e9b8;p=dot-emacs diff --git a/my-init.org b/my-init.org index 65808da..e893ebe 100644 --- a/my-init.org +++ b/my-init.org @@ -200,7 +200,11 @@ forward/backward word C-M-d swap buffers across windows +shell-cd-to-file +M-2 +* TODO add simpler keybind for make-frame-command +current one is C-x 5 2. * TODO learn some more ivy mode stuff * TODO declarative package installations, @@ -210,6 +214,9 @@ with documentation. causes emacs to freeze until I kill -9 it. * TODO make a keybind to print var under cursor and actually, putting the start of it in th emodeline might be cool +* TODO make recent files save periodically, +normally it just saves on exit, but half the time I don't exit cleanly +so they don't get saved, because I leave emacs running until it crashes * TODO fix undo tree outside visible buffer bug * TODO c- in shell mode should send over previous line if current line is empty @@ -567,14 +574,28 @@ I need this function here, where INSIDE_EMACS is replaced with RLC_INSIDE_EMACS. ;; main hook for my auto save (add-hook 'auto-save-hook 'my-auto-save) ;; additional hook to try to deal with emacs not auto-saving when a buffer isn't active -(add-hook 'window-configuration-change-hook 'my-auto-save) +(add-hook 'window-configuration-change-hook 'my-auto-save-win) + +;; this function from mu4e really does not like buffer saving +(advice-add 'message-send-and-exit :before 'my-as-off) +(advice-add 'message-send-and-exit :after 'my-as-on) -(defun my-auto-save () +;; avoid window config hook saving too much, it can +;; get into loops in some random situations +(setq my-auto-save-last nil) +(defun my-auto-save-win () + (unless (eq (current-buffer) my-auto-save-last) + (my-auto-save (current-buffer)))) + +(defun my-auto-save (&optional last) (when (and my-as (buffer-file-name) + ;; mu4e has a bug right now, undo breaks when saving drafts + (not (string= (buffer-file-name) "*draft*")) (buffer-modified-p) (not (org-src-edit-buffer-p))) + (setq my-auto-save-last last) (let (message-log-max) ;; a bit of a hack to partially suppress the constant saving in the echo area (with-temp-message "" @@ -733,6 +754,7 @@ seems they are created (add-to-list 'load-path "~/.emacs.d/src/bbdb-csv-import") (require 'bbdb-csv-import) + #+end_src * bookmark settings @@ -915,6 +937,108 @@ Things I tried which didn't work, which intuitively I think should work better: (put 'dired-find-alternate-file 'disabled nil) #+end_src +* mu4e +[[info:org#External links]] +[[info:mu4e#Keybindings]] + +alsot tried notmuch, it had some glitches, and it's config +has a list of folders which i'd rather not publish, so it's config is archived. + +#+begin_src emacs-lisp +;;(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e") +(require 'mu4e) +(setq send-mail-function (quote sendmail-send-it) ;; common to gnus also + mu4e-maildir "/m/4e" + ;; use the standard imap folders + mu4e-sent-folder "/Sent" + mu4e-drafts-folder "/Drafts" + mu4e-trash-folder "/Trash" + ;; standard imap folder is /Archive, but I've set this to /Junk, + ;; because I don't manually archive individual messages, and mu4e + ;; is lacking a button to move to the spam folder "Junk", and I + ;; want one to train spamassassin better. Note: It calls + ;; archiving "refiling", so it's bound to r. + mu4e-refile-folder "/Junk" + ;; reindex new mail this often in seconds + ;; show addresses instead of just names + mu4e-view-show-addresses t + mu4e-use-fancy-chars t + mu4e-confirm-quit nil + mu4e-headers-leave-behavior 'apply ;; dont ask, do whatever was marked + mu4e-headers-fields (delq (assoc :mailing-list mu4e-headers-fields) mu4e-headers-fields) + ;; a bit faster than the default 500. trying out the default for now + ;;mu4e-headers-results-limit 80 + + ;; looking up the list of maildirs when doing jo from summary + ;; can take a few seconds if we have a ton of messages. + ;; Only take that time for the first lookup. + ;; if we add a new maildir, just restart mu4e for it to be in that list. + mu4e-cache-maildir-list t + ;; default is 8, way too small for my big monitors + mu4e-headers-visible-lines 50 + ) + +;; fucks up reading unread bookmark. when that is fixed, enable it +;; (setq mu4e-update-interval 60) + + +;; this file includes setting up my email addresses, which are not public, +;; including +;; mu4e-user-mail-address-list +;; and a function +;; inspired by mu4e info manual, search for mu4e-compose-pre-hook. +(load "/p/c/mu4e.el") + +;; it's implemented in mu4e, but not in the actions list for +;; some reason. +(add-to-list 'mu4e-view-actions + '("browser view" . mu4e-action-view-in-browser) t) +(setq mu4e-maildir-shortcuts + '( ("/INBOX" . ?i) + ("/github" . ?g) + ("/zroe" . ?z) + ("/Drafts" . ?d) + ("/Sent" . ?d) + )) + +;; normally, you would add to this, but we want to +;; modify unread messages. the first 4 are defined by default. +(setq mu4e-bookmarks + `( ,(make-mu4e-bookmark + :name "Unread messages" + :query "flag:unread AND NOT flag:trashed AND NOT maildir:/Junk AND NOT maildir:/fwfw" + :key ?u) + ,(make-mu4e-bookmark + :name "Today's messages" + :query "date:today..now" + :key ?t) + ,(make-mu4e-bookmark + :name "Last 7 days" + :query "date:7d..now" + :key ?w) + ,(make-mu4e-bookmark + :name "Messages with images" + :query "mime:image/*" + :key ?p)) + ) + + +(defun mu4e-action-msgs-by-this-sender (msg) + "In header view, view messages by the sender of the message under point." + (let ((from (mu4e-message-field msg :from))) + (unless from + (mu4e-error "No from header for this message")) + ;; from is structured like: (("Anacron" . "root@x2.lan")) + (mu4e-headers-search (concat "f:" (cdar from))))) + +(add-to-list 'mu4e-headers-actions + '("from this sender" . mu4e-action-msgs-by-this-sender) t) +(add-to-list 'mu4e-view-actions + '("from this sender" . mu4e-action-msgs-by-this-sender) t) +#+end_src + + + * disabled but saved for documentation purposes :PROPERTIES: :header-args: :tangle no @@ -1148,55 +1272,6 @@ seems like 1 in 100 times, an invisible command to restore prompt didn't work -** mu4e - -alsot tried notmuch, it had some glitches, and it's config -has a list of folders which i'd rather not publish, so it's config is archived. - -#+begin_src emacs-lisp -(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e") -(require 'mu4e) -(setq send-mail-function (quote sendmail-send-it) ;; common to gnus also - mu4e-sent-folder "/Sent Items" - mu4e-drafts-folder "/Drafts" - mu4e-trash-folder "/Trash" - mu4e-refile-folder "/Archive" - mu4e-get-mail-command "offlineimap" - mu4e-update-interval 60 - mu4e-sent-messages-behavior 'delete - mu4e-use-fancy-chars t - mu4e-confirm-quit nil - mu4e-headers-leave-behavior 'apply ;; dont ask - mu4e-headers-fields (delq (assoc :mailing-list mu4e-headers-fields) mu4e-headers-fields) - ;; a bit faster than the default 500 - mu4e-headers-results-limit 80) - -(define-key mu4e-headers-mode-map (kbd "") 'mu4e-headers-view-message) - -(defun my-mu4e-to () - "inspired by mu4e info manual" - (--reduce-from (if (mu4e-message-contact-field-matches - mu4e-compose-parent-message :to (cadr it)) - (concat (car it) (cadr it)) - acc) - '("Ian Kelling ") - ;; ("Ian Kelling " "")) - )) - -(add-hook 'mu4e-compose-pre-hook 'my-mu4e-to) - -(add-to-list 'mu4e-view-actions - '("ViewInBrowser" . mu4e-action-view-in-browser) t) -(setq mu4e-maildir-shortcuts - '( ("/INBOX" . ?i) - ("/bog" . ?b) - ("/Drafts" . ?d))) - -#+end_src - - - ** org-mode auto-complete source @@ -1235,6 +1310,13 @@ this looks nice, but it lags gnus just a bit ** misc #+begin_src emacs-lisp +;; this makes more ergonomic sense, since our eyes are mostly on the left, +;; but after using it a while, it's too much cognitive dissonance that +;; every other program has it on the right +;;(set-scroll-bar-mode 'left) + + + ; todo, is this require things necessary? ; (require 'flyspell) @@ -2198,9 +2280,8 @@ currently makes emacs hang a bunch. dunno why. just using eclipse instead ;; this starter kit setting is probably good (if window-system (setq frame-title-format '(buffer-file-name "%f" ("%b")))) -(set-terminal-coding-system 'utf-8) -(set-keyboard-coding-system 'utf-8) -(prefer-coding-system 'utf-8) + +;;(prefer-coding-system 'utf-8-unix) ;; remove ugly 3d box feature (set-face-attribute 'mode-line nil :box nil) @@ -2247,7 +2328,6 @@ currently makes emacs hang a bunch. dunno why. just using eclipse instead (blink-cursor-mode '(-4)) (menu-bar-mode -1) (tool-bar-mode -1) -(set-scroll-bar-mode 'left) ;; enable various commands @@ -3580,6 +3660,8 @@ commands to change: select other window: C-x o. #+end_src ** named commands +*** gdb +gdb-many-windows *** tramp sudo /ssh:host|sudo:host: when in the same session, you can then do: @@ -3674,6 +3756,9 @@ to use with up and down. #+begin_src emacs-lisp (global-set-key (kbd "C-x C-b") 'ibuffer) #+end_src + +*** C-x r c +rectangular clear, replace area with whitespace ** gnus searching overview. 3 types: @@ -3736,6 +3821,9 @@ E = expired M-& apply process mark to a non-process mark command *** S D e] edit as new +*** T k / C-M-k +maybe rebind this to a shorter keybind, like del +gnus-summary-kill-thread ** message mode *** C-ck] discard message @@ -4732,7 +4820,7 @@ abort-recursive-edit *** C-M-g] gnus #+begin_src emacs-lisp - (global-set-key (kbd "C-M-g") 'gnus) + (global-set-key (kbd "C-M-g") 'mu4e) #+end_src *** C-S-g *** C-z @@ -5205,8 +5293,9 @@ join lines #+end_src *** M-/ *** C-M-/] -copy-variable +copy-buffer-file-name #+begin_src emacs-lisp +;; haven't bound this atm, todo, maybe someday? (defun copy-variable (variable) (interactive (let ((v (variable-at-point)) @@ -5225,7 +5314,17 @@ copy-variable (list (if (equal val "") v (intern val))))) (kill-new (symbol-value variable))) -(global-set-key (kbd "C-M-/") 'copy-variable) + +(defun copy-buffer-file-name () + (interactive) + (kill-new + (cond + ((derived-mode-p 'mu4e-view-mode) (mu4e-message-field-at-point :path)) + (t buffer-file-name)) + )) + +(global-set-key (kbd "C-M-/") 'copy-buffer-file-name) + #+end_src *** C-S-/