From 37260474e36fcb22726e0988577ec05023d297e4 Mon Sep 17 00:00:00 2001 From: colin Date: Tue, 3 Jan 2023 21:31:09 -0800 Subject: Much destruction --- init-el.org | 787 +----------------------------------------------------------- 1 file changed, 13 insertions(+), 774 deletions(-) diff --git a/init-el.org b/init-el.org index ffdd2a2..cee7846 100644 --- a/init-el.org +++ b/init-el.org @@ -1,41 +1,5 @@ #+auto_tangle: t #+OPTIONS: html-style:nil -* About This Tangle - -** Customize This Tangle - - Set these variable src blocks before tangling. When these are set, - simply type =C-c C-v t= to build your emacs config. - - Set this to configure [[Configuring offlineimap][offlineimap]] correctly. It should be your email - password. - -#+name: emailpw -#+begin_src conf -PUTSOMETHINGHERE -#+end_src - -** Tags used in this file - - - =prereq= indicates that this involves installing something on the - underlying system, and is not part of the tangle - - - =disabled= indicates that the name of the code block under this - heading has been disabled. I perform this disabling by commenting - out the name of the block so that the tangle operation does - nothing when encountering it. Some blocks are a pain to run - everytime I want to tangle this file, so by marking them as - disabled I can easily see the blocks that might need to be - enabled on a fresh emacs install. - -So, to use this file for the very first time you must - -1) run the code tagged prereq, then -2) fill in the [[*Customize This Tangle][customize]] section, above, then -3) enable the disabled sections (by uncommenting the code blocks they contain) -4) then run the tangle. - - * init.el This section generates the init.el file in the .emacs.d @@ -75,8 +39,7 @@ So, to use this file for the very first time you must <> <> <> -<> -<> + #+end_src ** Packages Setup Config @@ -118,8 +81,6 @@ So, to use this file for the very first time you must <> #+end_src - - I have written a custom leader key system called "my-leader-keys". A leader key system emulates menus. An initial key (M-m for me) opens the top level menu. The menu presents a key to press that either leads @@ -323,29 +284,13 @@ So, to use this file for the very first time you must #+begin_src elisp :results none -(package-install 'graphviz-dot-mode) -(package-install 'ob-haxe) -(package-install 'plantuml-mode) - -(add-hook 'org-mode-hook - (lambda () (org-toggle-inline-images))) - (org-babel-do-load-languages 'org-babel-load-languages '((emacs-lisp . t) (lisp . t) - (haxe . t) - (dot . t) - (plantuml . t) (C . t) (shell . t))) -(add-to-list 'org-src-lang-modes - '("dot" . graphviz-dot)) - -(setq org-plantuml-jar-path - "/usr/share/plantuml/plantuml.jar") - #+end_src @@ -478,37 +423,6 @@ So, to use this file for the very first time you must #+end_src -** Fonts Config - - I use Victor Mono for most coding work, and Linux Libertine for my - variable pitch font. Variable pitch fonts are good for e.g. reading - the web using =eww= and writing in distraction-free mode with - =writeroom=. - - Fonts must generally be installed. Linux libertine came preinstalled - with my Debian system (running Gnome 3), but Victor Mono had to be - installed manually. I downloaded it from [[https://rubjo.github.io/victor-mono/][here]] and then installed it - using the =font-manager= application. - - Running these two commands should install the font. - - - : sudo apt install font-manager - : font-manager -i ~/Downlaods/VictorMonoAll.zip - - #+name: ui-fonts-config - #+begin_src elisp :results none - ;; FONTS - - (add-to-list 'default-frame-alist - '(font . "Victor Mono-10")) - - (set-face-attribute 'variable-pitch nil - :family "Linux Libertine" - :height 1.25) - - #+end_src - ** Bells and Whistles #+name: ui-bells-and-wistles @@ -553,16 +467,17 @@ So, to use this file for the very first time you must #+name: ui-windows-and-perspectives-packages #+begin_src elisp :results none - (package-install 'perspective) - (persp-mode) +(package-install 'perspective) +(setq persp-suppress-no-prefix-key-warning t) +(persp-mode) - (package-install 'rotate) +(package-install 'rotate) - (package-install 'window-numbering) - (window-numbering-mode) +(package-install 'window-numbering) +(window-numbering-mode) - (package-install 'resize-window) - (require 'resize-window) +(package-install 'resize-window) +(require 'resize-window) #+end_src *** Window Leader Key Menu @@ -802,278 +717,7 @@ So, to use this file for the very first time you must #+end_src -** Org - -*** Org mode tweaks -# #+name: ui-org-mode-tweaks - #+begin_src elisp :noweb no-export :results none - (add-hook 'org-mode-hook - '(lambda () - (mapc - (lambda (face) ;; Other fonts with fixed-pitch. - (set-face-attribute face nil :inherit 'fixed-pitch :height 100)) - (list 'org-code - 'org-link - 'org-block - 'org-table - 'org-block-begin-line - 'org-block-end-line - 'org-meta-line - 'org-document-info-keyword)))) - - - (setq org-adapt-indentation nil) - - #+end_src - -* Communications - -#+name: communications-config -#+begin_src elisp :noweb no-export :results none -<> -;;<> -;;<> -;; <> -<> -#+end_src - -** Mastodon - -#+name: mastodon-config -#+begin_src elisp :noweb no-export :results none - -(package-install 'mastodon) - -(require 'mastodon) - -(setq mastodon-instance-url "https://mastodon.sdf.org" - mastodon-active-user "antisphex") - -#+end_src - - -** ERC - - ERC is an IRC client that is built into Emacs. You can use it to - log into irc servers and chat with other nerds. ERC is very - communicative about changes in status in a particular IRC channel - -- too informative. It prints messages everytime somebody joins or - leaves a room or quits the server altogether. This can be a bit - annoying - active rooms will often contain just as many join/part - messages as chat messages. So this little snippit configures ERC - to hide certain kinds of message: - -#+name: erc-config -#+begin_src elisp :results none -;;; ERC -(setq erc-hide-list '("JOIN" "QUIT" "PART")) -#+end_src - -** Cicadas Pastebin - -*** bepasty from emacs - -First you need to install ~pastebinit~ - -: sudo apt install pastebinit - -Then you should get the pastebin creds from somebody who has them and -put them into a file called ~$HOME/.bepasty-key~. - -Then put the following into yoru config. - -#+name: cicadas-bepasty -#+begin_src elisp :noweb no-export :results none - - - - - -(setq cicadas-paste-pw (read-file-into-string "~/.bepasty-key")) - -(defun cicadas-paste-current-buffer () - (interactive) - (let ((tmpfile - (concat "/tmp/" (buffer-name)))) - (write-region nil nil tmpfile) - (let ((url - (first (last (butlast - (split-string - (shell-command-to-string - (format "pastebinit -i %s -p %s -t '%s' -f text/plain" - tmpfile - cicadas-paste-pw - (buffer-name))) - "\n")))))) - (delete-file tmpfile) - (kill-new url) - (message "Pasted to %s (on kill ring)" url)))) - - -#+end_src - -*** SCPASTE :disabled: -# #+name: cicadas-scpaste -#+begin_src elisp :results none -(package-install 'scpaste) - -(setq scpaste-http-destination "http://cicadas.surf/pastebin" - scpaste-scp-destination "colin@cicadas.surf:/srv/http/www.cicadas.surf/pastebin" - scpaste-user-name "Colin" - scpaste-user-address "https://hyperthings.garden") - - -#+end_src - -** Mail on emacs - -*** Installing dependencies :prereq: - - On debian 11, I was able to run this to install dependencies. - -#+begin_src bash -sudo apt-get install -y libgmime-3.0-dev libxapian-dev \ - mu4e guile-3.0-dev html2text xdg-utils offlineimap -#+end_src - - -*** Configuring offlineimap :disabled: - - The blocks in this file are used to separately tangle to an ~/.offlineimparc - - See the file at - /usr/share/doc/offlineimap3/examples/offlineimap.conf for more - info. -# :tangle ~/.offlineimaprc :noweb no-export :results none - -#+begin_src conf :resutls none - -[general] - -accounts = Cicadas, ToyfulSpace - -[Account Cicadas] -localrepository = CicadasLocal -remoterepository = CicadasRemote - -[Repository CicadasLocal] -type = Maildir -localfolders = ~/Maildir/Cicadas - -[Repository CicadasRemote] -type = IMAP -remotehost = imap.migadu.com -remoteuser = colin@cicadas.surf -remotepass = <> -ssl = yes -sslcacertfile = /etc/ssl/certs/ca-certificates.crt - - -[Account ToyfulSpace] -localrepository = ToyfulSpaceLocal -remoterepository = ToyfulSpaceRemote - -[Repository ToyfulSpaceLocal] -type = Maildir -localfolders = ~/Maildir/ToyfulSpace - -[Repository ToyfulSpaceRemote] -type = IMAP -remotehost = imap.migadu.com -remoteuser = okay@toyful.space -remotepass = <> -ssl = yes -sslcacertfile = /etc/ssl/certs/ca-certificates.crt - - -#+end_src - -**** Setup Mu and Sync Initial Mails :setup: - -#+begin_src bash -mu init --maildir=~/Maildir --my-address=colin@cicadas.surf --my-address=okay@toyful.space && \ -offlineimap -a Cicadas && offlineimap -a ToyfulSpace && \ -mu index -#+end_src - -*** Confuguring Mu4e :disabled: - -#+name: mu4e-config -#+begin_src elisp :noweb no-export :results none - - -(require 'mu4e) - -<> -<> - -(setq mu4e-contexts - (list - <> - <>)) - -;; For viewing patches in emails -(package-install 'message-view-patch) -(add-hook 'mu4e-view-mode-hook 'message-view-patch-highlight) - -#+end_src - -**** Mu4e Sendmail Config - #+name: mu4e-sendmail-config - #+begin_src elisp :results none - (require 'smtpmail) - - (setq mail-user-agent 'mu4e-user-agent - message-send-mail-function 'smtpmail-send-it - smtpmail-stream-type 'tls - smtpmail-default-smtp-server "smtp.migadu.com" - smtpmail-smtp-server "smtp.migadu.com" - smtpmail-smtp-service 465) - - - #+end_src - - -**** Mu4e mail sync command - #+name: mu4e-fetch-and-sync-mail-config - #+begin_src elisp :results none - (setq mu4e-get-mail-command "offlineimap -a Cicadas && offlineimap -a ToyfulSpace") - #+end_src - -**** Mu4e Contexts - #+name: cicadas-mu4e-context - #+begin_src elisp :results none - - (make-mu4e-context - :name "Cicadas" - :enter-func (lambda () (mu4e-message "Entering Cicadas Context")) - :leave-func (lambda () (mu4e-message "Leaving Cicadas Context")) - :match-func (lambda (msg) - (when msg - (mu4e-message-contact-field-matches msg :to "colin@cicadas.surf"))) - :vars '((user-full-name . "Colin Okay") - (user-mail-address . "colin@cicadas.surf") - (smtpmail-smtp-user . "colin@cicadas.surf") - (mu4e-sent-folder . "/Cicadas/Sent") - (mu4e-compose-signature . "Making Things Wiggle\nColin\n"))) - #+end_src - - #+name: toyfulspace-mu4e-context - #+begin_src elisp :results none - (make-mu4e-context - :name "Toyful Space" - :enter-func (lambda () (mu4e-message "Entering Toyful Space Context")) - :leave-func (lambda () (mu4e-message "Leaving Toyful Space Context")) - :match-func (lambda (msg) - (when msg - (mu4e-message-contact-field-matches msg :to "okay@toyful.space"))) - :vars '((user-full-name . "Colin Okay") - (user-mail-address . "okay@toyful.space") - (smtpmail-smtp-user . "okay@toyful.space") - (mu4e-sent-folder . "/ToyfulSpace/Sent") - (mu4e-compose-signature . "Making Things Wiggle\nColin\n"))) - #+end_src * Time Managment @@ -1170,17 +814,17 @@ mu index <> <> <> -<> + <> -<> + <> <> <> <> <> <> -<> -<> + + #+end_src ** Calibre db @@ -1259,16 +903,6 @@ mu index -** Nov for Reading EPUBs - -#+name: nov-mode-config -#+begin_src elisp :results none - -(package-install 'nov) -(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode)) - -#+end_src - ** Elfeed for Reading RSS Feeds #+name: elfeed-config @@ -1420,34 +1054,6 @@ mu index #+end_src -** Zettelgunk - - Zettelgunk is a half-hearted zettelkasten system I am sometimes - working on. - -#+name: zettelgunk -#+begin_src elisp :results none -(load "~/notes/elisp/zettel-mode/zettel.el") -(setq zettel-directory "~/notes/zettel/") - -(def-my-command my-zettel-mode-command - '((?b "[b]ack " zettel-jump-back) - (?t "[t]ag browse" zettel-browse-tags) - (?f "[f]ind note" zettel-browse-notes) - (?/ "[/] term search" zettel-search-notes) - (?h "[h]istorical browse (days)" zettel-browse-notes-days-ago) - (?r "browse by [r]everse link" zettel-browse-notes-linking-here))) - -(def-my-command my-zettel-subcommand - '((?/ "[/] search notes" zettel-search-notes) - (?f "[f]ind note" zettel-browse-notes) - (?t "[t]ag browse" zettel-browse-tags) - (?h "[h]istorical browse (days)" zettel-browse-notes-days-ago) - (?n "[n]ew note" zettel-spanking-new-note) - (?z "[z]ettel" zettel))) -#+end_src - - ** CCRYPT ccrypt is a standard unix encryption tool. It ships with emacs @@ -1537,55 +1143,6 @@ mu index #+RESULTS: markdown-editing -** Writefreely - -Writefreely is a federated blogging service. The [[https://github.com/dangom/writefreely.el][writefreely.el]] -package lets you publish to writefreely blogs from the comfort of -emacs. - -*** Prereqs - - -First, you need to get an auth token. The following will dump one to a json document. -#+begin_src shell - -curl "https://read.cicadas.surf/api/auth/login" \ - -H "Content-Type: application/json" -X POST \ - -d '{"alias": "your-user-name", "pass": "your-pw"}' > wf-token.json - -#+end_src - -Next, open that json document and cop the value of the "access_token" -field into a file called =~/.cicadas-wf.token=. When you do, don't -keep the string quoted - leave it unquoted in that .token file. - -*** Writefreely Config - #+name: writefreely-config - #+begin_src elisp :noweb no-export :results none - (package-install 'writefreely) - (require 'writefreely) - - (setq writefreely-instance-url "https://read.cicadas.surf/" - writefreely-instance-api-endpoint "https://read.cicadas.surf/api" - writefreely-auth-token (read-file-into-string "~/.cicadas-wf.token")) - - - - #+end_src - -** threadcat - -There is nothing to do for threadcat except set a threadcat user. - -It has been convenient to type threadcat messages into a scratch -buffer and then post using =M-x |= on a selected region, piping to -=threadcat write ...= - -#+name: threadcat -#+begin_src elisp :noweb no-export :results none -(setenv "THREADCAT_USER" "colin@cicadas.surf") -#+end_src - * Software Development #+name: software-development-config @@ -1597,10 +1154,6 @@ buffer and then post using =M-x |= on a selected region, piping to <> <> <> -<> -;; <> -<> -<> #+end_src ** Literate Programming @@ -1687,77 +1240,6 @@ association one shell with each [[*Perspectives Leader Key Menu][perspective aka #+end_src -** Eshell :disabled: - -*** Eshell Prompt - The ehsell prompt can be customized - - #+name: eshell-prompt-config - #+begin_src elisp :results none - - (defun shortened-path (path max-len) - "Return a modified version of `path', replacing some components - with single characters starting from the left to try and get - the path down to `max-len'" - (let* ((components (split-string (abbreviate-file-name path) "/")) - (len (+ (1- (length components)) - (cl-reduce '+ components :key 'length))) - (str "")) - (while (and (> len max-len) - (cdr components)) - (setq str (concat str (if (= 0 (length (car components))) - "/" - (string (elt (car components) 0) ?/))) - len (- len (1- (length (car components)))) - components (cdr components))) - (concat str (cl-reduce (lambda (a b) (concat a "/" b)) components)))) - - (defun rjs-eshell-prompt-function () - (concat (shortened-path (eshell/pwd) 30) - (if (= (user-uid) 0) " # " " $ "))) - - (setq eshell-prompt-function 'rjs-eshell-prompt-function) - - #+end_src - -*** Persp-Eshell - - Persp eshell ensures that there is at most one eshell buffer that can - be easily reache per "perspective" It depends on perspectives. - - #+name: persp-eshell - #+begin_src elisp :results none - ;; relies on the package 'perspective' from melpa - - (defun persp-eshell--eshell-buffer-p (buffer) - (string-prefix-p "*eshell*" (buffer-name buffer))) - - (defun persp-eshell--persp-eshell () - (cl-find-if 'persp-eshell--eshell-buffer-p - (persp-buffers (persp-curr)))) - - (defun persp-eshell--get-next-eshell-n () - (let ((n 0)) - (while (get-buffer (format "*eshell*<%i>" n)) - (cl-incf n)) - n)) - - ;; bind this to a key of your choice - (defun persp-eshell--jump-to-persp-eshell () - (interactive) - (let ((buff (persp-eshell--persp-eshell))) - (if buff (switch-to-buffer-other-window buff) - (eshell (persp-eshell--get-next-eshell-n))))) - - - #+end_src - - - - - - - ** Common Lisp #+name: common-lisp-config @@ -1889,246 +1371,3 @@ from debian contrib -** Haxe - -#+name: haxe-config -#+begin_src elisp :results none - -(package-install 'battle-haxe) - -(use-package haxe-mode - :mode ("\\.hx\\'" . haxe-mode) - :no-require t - :init - (require 'js) - (define-derived-mode haxe-mode js-mode "Haxe" - "Haxe syntax highlighting mode. This is simply using js-mode for now.")) - - -;; (use-package battle-haxe -;; :hook (haxe-mode . battle-haxe-mode) -;; :bind (("M-," . #'pop-global-mark) ;To get back after visiting a definition -;; :map battle-haxe-mode-map -;; ("M-." . #'battle-haxe-goto-definition) -;; ("M-/" . #'battle-haxe-helm-find-references)) -;; :custom -;; (battle-haxe-yasnippet-completion-expansion t "Keep this if you want yasnippet to expand completions when it's available.") -;; (battle-haxe-immediate-completion nil "Toggle this if you want to immediately trigger completion when typing '.' and other relevant prefixes.")) - - -#+end_src - -** Web Development - -#+name: webdev-setup -#+begin_src elisp :results none -(package-install 'json-mode) -(package-install 'skewer-mode) -#+end_src -** WASM - -#+name: wasm-setup -#+begin_src elisp :noweb no-export :results none -(if (not (file-exists-p "~/.emacs.d/wat-mode")) - (shell-command "git clone https://github.com/devonsparks/wat-mode ~/.emacs.d/wat-mode")) - -(add-to-list 'load-path "~/.emacs.d/wat-mode") - -(require 'wat-mode) -#+end_src - -#+RESULTS: wasm-setup -: wat-mode -** CPP development -*** Notes - - + tags (ctags, etags) index file storing language objects from - different sources, sued for code navigation - + gnu global source code tagging system - + cmake [[https://github.com/atilaneves/cmake-ide][cmake-ide]] is a package to "enable ide-like features" for - "cmake" projects. - -*** Language Server :prereq: - -clangd is the language server, [[https://github.com/rizsotto/Bear][bear]] is "a tool that generates -a compilation database for clang tooling. - -#+begin_src shell :noweb no-export -sudo apt install clangd bear -#+end_src -*** CPP IDE setup - -#+name: cpp-ide -#+begin_src elisp :noweb no-export :results none -(mapc #'package-install - '(lsp-mode yasnippet flycheck dap-mode ivy-xref)) - - -(add-hook 'c-mode-hook 'lsp) -(add-hook 'c++-mode-hook 'lsp) - -(with-eval-after-load 'lsp-mode - (require 'dap-cpptools) - (yas-global-mode)) -#+end_src - - -* Bells And Whistles - -#+name: bells-and-whistles -#+begin_src elisp :noweb no-export :results none -<> -<> -#+end_src - -** Lifecoach - -A few functions to start a process where, periodically, motivational -messages echo to the echo area. - -#+name: lifecoach -#+begin_src elisp :noweb no-export :results none - -(setq lifecoach-messages - '( - "In pursuit of knowledge, every day something is acquired. In pursuit of wisdom, every day something is dropped. -- lao tzu" - "Abandon the idea that you are ever going to finish. -- steinbeck" - "You are the only hope you have! Keep working!" - "You get hack on stuff you thought up... Keep going!" - "You don't have to be working a real job! Enjoy this!" - "Trust the process. Act and React!" - "Resistence points in the direction of courage. Step into courage!" - "Care About Your Craft. (pragprog)" - "Think! About Your Work. (pragprog)" - "Remember the Big Picture. (pragprog)" - "Make It Easy To Reuse. (pragprog)" - "There Are No Final Decisions. (pragprog)" - "Use Tracer Bullets To Find The Target (pragprog)" - "Prototype To Learn. (pragprog)" - "Dont Panic -- the guide" - "Abstractions Live Longer Than Details. (pragprog)" - "There is one path in the world that non can walk but you. Where does it lead? Don't ask, Walk!" - "Get it done. Then start the next one!" - "Interact! Hack forward!" - "This is your work. Love it!" - "What if it works? Don't give up!" - "Dont play the finite games!" - "There is no escape from now!" - "Be Tosk! Challenge the hunter! Surprise him. Delight him." - "Expect anything worthwhile to take a long time. -- popova" - "To know what you're going to draw, you must begin drawing! --picasso" - "Fire and motion. Move forward a little each day. --spolsky" - "Enthusiasm at the price of reinventing the wheel pays for itself. --boutade" - "This is reality happening! --boutade" - "Allow yourself the uncomfortable luxury of changing your mind. --popova" - "Do nothing for prestige or status or money or approval alone. --popova, graham" - "Follow Your Wierd -- bruce sterling" - "Do you. -- Charlie Kauffman" - "Prefer to work on things you can own --patio11" - "Beauty rests on necessities --Emerson" - "Every day we see people who are busy distorting their talents in order to enhance their popularity or to make money that they could do without. --flannery o'conner" - "Problems worthy of attack prove their worth by fighting back --Erdös" - "To work continuously at the highest level a person needs to be challenged continuously. --harold cohen" - "Difficulty is an essential element in the creative process." - "There's a million races being run. You just got to get in one of them and win --hamming" - "To invent your own life's meaning is not easy, but it's still allowed, and I think you'll be happier for the trouble --watterson" - "There is no heaven. -- boutade" - "Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better --beckett" - "Welcome the accidents. --boutade" - "Occassion that invites no accidents invites nothing and need not occur, for everything is known already. --boutade" - "What is the harder thing? Why is it harder?" - "What does the perfectionist want? And the artist? --godin" - "What are you doing right now? What do you want one year from now?" - "Which impulse is the saboteur?" - "Is your exahaustion real?" - "Don't be ashamed of the carrot - what is the carrot?" - "Who benefits when you do?" - "How committed do you feel? Where's the evidence?" - "Why do you resist?" - "What is an ideal future?" - "Can you work another ten minutes?" - "Do you understand the why?" - "This is just resistence." - "Fear is the soul killer.")) - - -(setq lifecoach-idle-timer nil) -(setq lifecoach-index 0) -(setq permuted-lifecoach-messages nil) - -(defun permute (seq) - (let ((len (length seq))) - (if (zerop len) - seq - (let ((idx - (random len))) - (append (subseq seq idx (1+ idx)) - (permute (append (subseq seq 0 idx) - (subseq seq (1+ idx))))))))) - -(defun lifecoach-message () - (setq lifecoach-index - (mod (1+ lifecoach-index) (length permuted-lifecoach-messages))) - (message - "Lifecoach says: %s" - (nth lifecoach-index - permuted-lifecoach-messages))) - -(defun lifecoach-start () - (interactive) - (when lifecoach-idle-timer - (cancel-timer lifecoach-idle-timer)) - (setq - permuted-lifecoach-messages (permute (copy-seq lifecoach-messages)) - lifecoach-idle-timer (run-with-idle-timer 30 t #'lifecoach-message))) - -(defun lifecoach-stop () - (interactive) - (when lifecoach-idle-timer - (cancel-timer lifecoach-idle-timer)) - (setf lifecoach-idle-timer nil)) -#+end_src - - - -** EMMS - - Configuration for the emacs multi media system - -#+name: emms -#+begin_src elisp :noweb no-export :results none -(package-install 'emms) - -(require 'emms-setup) -(emms-all) -(emms-default-players) - -(setq emms-source-file-default-directory "~/Music/") - -(defun update-cicadas-now-listening-to () - (let ((track - (emms-track-description - (emms-playlist-current-selected-track)))) - (with-temp-buffer - (insert track) - (write-file "/ssh:colin@cicadas.surf:~/.now-listening-to")))) - - -(add-hook 'emms-player-started-hook #'update-cicadas-now-listening-to) - -(defun update-cicadas-drop-listening-to () - (with-temp-buffer - (write-file "/ssh:colin@cicadas.surf:~/.now-listening-to"))) - -(add-hook 'emms-player-stopped-hook #'update-cicadas-drop-listening-to) - - -#+end_src - -* Overwrites - -#+name: overwrites -#+begin_src elisp :noweb no-export :results none -(setq-default cursor-type 'box) -(setq cursor-type 'box) -#+end_src -- cgit v1.2.3