;; A few handy functions I use in init.el (or not, but they're nice to ;; have) (defun custom-download-theme (url filename) "Downloads a theme through HTTP and places it in ~/.emacs.d/themes" ;; Ensure the directory exists (unless (file-exists-p "~/.emacs.d/themes") (make-directory "~/.emacs.d/themes")) ;; Adds the themes folder to the theme load path (if not already ;; there) (unless (member "~/.emacs.d/themes" custom-theme-load-path) (add-to-list 'custom-theme-load-path "~/.emacs.d/themes")) ;; Download file if it doesn't exist. (let ((file (concat "~/.emacs.d/themes/" filename))) (unless (file-exists-p file) (url-copy-file url file)))) (defun custom-download-script (url filename) "Downloads an Elisp script, places it in ~/.emacs/other and then loads it" ;; Ensure the directory exists (unless (file-exists-p "~/.emacs.d/other") (make-directory "~/.emacs.d/other")) ;; Download file if it doesn't exist. (let ((file (concat "~/.emacs.d/" filename))) (unless (file-exists-p file) (url-copy-file url file)) (load file))) ;; This clones a git repository to 'foldername in .emacs.d ;; if there isn't already a folder with that name (defun custom-clone-git (url foldername) "Clones a git repository to .emacs.d/foldername" (let ((fullpath (concat "~/.emacs.d/" foldername))) (unless (file-exists-p fullpath) (shell-command (concat "git clone " url " " fullpath)))) ) ;; These come from the emacs starter kit (defun esk-pretty-lambdas () (font-lock-add-keywords nil `(("(?\\(lambda\\>\\)" (0 (progn (compose-region (match-beginning 1) (match-end 1) ,(make-char 'greek-iso8859-7 107)) nil)))))) (defun esk-add-watchwords () (font-lock-add-keywords nil '(("\\<\\(FIX\\(ME\\)?\\|TODO\\|HACK\\|REFACTOR\\|NOCOMMIT\\)" 1 font-lock-warning-face t)))) (defun esk-sudo-edit (&optional arg) (interactive "p") (if (or arg (not buffer-file-name)) (find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: "))) (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name)))) (defun esk-suck-it (suckee) "Insert a comment of appropriate length about what can suck it." (interactive "MWhat can suck it? ") (let ((prefix (concat ";; " suckee " can s")) (postfix "ck it!") (col (current-column))) (insert prefix) (dotimes (_ (- 80 col (length prefix) (length postfix))) (insert "u")) (insert postfix))) (defun speak (m &optional voice) (shell-command (if 'voice (concat "say " m) (concat "say -v " voice " " m)))) ;; Reconnect rcirc (eval-after-load 'rcirc '(defun-rcirc-command reconnect (arg) "Reconnect the server process." (interactive "i") (unless process (error "There's no process for this target")) (let* ((server (car (process-contact process))) (port (process-contact process :service)) (nick (rcirc-nick process)) channels query-buffers) (dolist (buf (buffer-list)) (with-current-buffer buf (when (eq process (rcirc-buffer-process)) (remove-hook 'change-major-mode-hook 'rcirc-change-major-mode-hook) (if (rcirc-channel-p rcirc-target) (setq channels (cons rcirc-target channels)) (setq query-buffers (cons buf query-buffers)))))) (delete-process process) (rcirc-connect server port nick rcirc-default-user-name rcirc-default-full-name channels))))