elisp snippets

<<<

A bunch of dumb functions for academic emacs use.

Basic pomodoro functionality

This allows you to call the set-timer function through M-x. You provide the function an interval of X minutes. After X minutes have passed, the function flash-mode-line is called. The mode line flashes, reminding you to take a break.

(defun flash-mode-line (str)
  (invert-face 'mode-line)
  (run-with-timer 1.0 nil #'invert-face 'mode-line)
  (message str))

(defun set-timer (interval)
  (interactive "s > set interval: ")
  (run-at-time (format "%s min" interval) nil #'flash-mode-line " > time for a break.")
  (message (format " > will alert in %s min." interval)))

Switch between dark and light themes

Tries to invert the color scheme. Works well with the default theme. I haven't tested it with custom color themes.

(defun switch-colors ()
  (interactive)
  (invert-face 'default)
  )
  

Get bibtex citation by DOI

This has two implementations, which may give different results. The first one is a pure elisp implementation, the second one calls the external curl program.

(defun doi-to-bib-elisp (doi)
  "modified from iosad (https://www.anghyflawn.net/blog/2014/emacs-give-a-doi-get-a-bibtex-entry/)"
  (interactive "Mdoi: ")
  (get-buffer-create "*doi2bib-el*")
  (switch-to-buffer "*doi2bib-el*")
  (let ((url-mime-accept-string "text/bibliography;style=bibtex"))
    (with-current-buffer 
	(url-retrieve-synchronously (format "http://dx.doi.org/%s" doi))
      (switch-to-buffer (current-buffer))
      (goto-char (point-max))
      (setq bibtex-entry (buffer-substring (string-match "@" (buffer-string)) (point)))
      (kill-buffer (current-buffer))))
  (insert (decode-coding-string bibtex-entry 'utf-8))
  (bibtex-fill-entry))

(defun doi-to-bib-bash (doi)
  (interactive "Mdoi: ")
  (shell-command (format "curl -LH \"Accept: application/x-bibtex\" http://dx.doi.org/%s" doi)))