123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- ;; Misc defuns go here
- ;; It wouldn't hurt to look for patterns and extract once in a while
- (defmacro create-simple-keybinding-command (name key)
- `(defmacro ,name (&rest fns)
- (list 'global-set-key (kbd ,key) `(lambda ()
- (interactive)
- ,@fns))))
- (create-simple-keybinding-command f2 "<f2>")
- (create-simple-keybinding-command f5 "<f5>")
- (create-simple-keybinding-command f6 "<f6>")
- (create-simple-keybinding-command f7 "<f7>")
- (create-simple-keybinding-command f8 "<f8>")
- (create-simple-keybinding-command f9 "<f9>")
- (create-simple-keybinding-command f10 "<f10>")
- (create-simple-keybinding-command f11 "<f11>")
- (create-simple-keybinding-command f12 "<f12>")
- (defun goto-line-with-feedback ()
- "Show line numbers temporarily, while prompting for the line number input"
- (interactive)
- (unwind-protect
- (progn
- (linum-mode 1)
- (call-interactively 'goto-line))
- (linum-mode -1)))
- (defun open-line-and-indent ()
- (interactive)
- (newline-and-indent)
- (end-of-line 0)
- (indent-for-tab-command))
- ;; start a httpd-server in current directory
- (defun httpd-start-here (directory port)
- (interactive (list (read-directory-name "Root directory: " default-directory nil t)
- (read-number "Port: " 8017)))
- (setq httpd-root directory)
- (setq httpd-port port)
- (httpd-start)
- (browse-url (concat "http://localhost:" (number-to-string port) "/")))
- ;; shorthand for interactive lambdas
- (defmacro λ (&rest body)
- `(lambda ()
- (interactive)
- ,@body))
- (global-set-key (kbd "s-l") (λ (insert "\u03bb")))
- ;; command to help set up magit-gh-pulls
- (defun magit-gh-pulls-setup (repoid)
- (interactive "suser/repo: ")
- (shell-command "git config --add magit.extension gh-pulls")
- (shell-command (concat "git config magit.gh-pulls-repo " repoid)))
- ;; Increase/decrease selective display
- (defun inc-selective-display (arg)
- (interactive "P")
- (if (numberp arg)
- (set-selective-display arg)
- (if (numberp selective-display)
- (set-selective-display (+ 2 selective-display))
- (set-selective-display 2)))
- (create-temp-selective-display-keymap))
- (defun dec-selective-display ()
- (interactive)
- (when (and (numberp selective-display)
- (> selective-display 2))
- (set-selective-display (- selective-display 2)))
- (create-temp-selective-display-keymap))
- (defun clear-selective-display ()
- (interactive)
- (when (numberp selective-display)
- (set-selective-display nil)))
- (defun create-temp-selective-display-keymap ()
- (set-temporary-overlay-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "+") 'inc-selective-display)
- (define-key map (kbd "-") 'dec-selective-display)
- (define-key map (kbd "0") 'clear-selective-display)
- map))
- (message "Type + to reveal more, - for less, 0 to reset."))
- ;; Add spaces and proper formatting to linum-mode. It uses more room than
- ;; necessary, but that's not a problem since it's only in use when going to
- ;; lines.
- (setq linum-format (lambda (line)
- (propertize
- (format (concat " %"
- (number-to-string
- (length (number-to-string
- (line-number-at-pos (point-max)))))
- "d ")
- line)
- 'face 'linum)))
- (defun isearch-yank-selection ()
- "Put selection from buffer into search string."
- (interactive)
- (when (region-active-p)
- (deactivate-mark))
- (isearch-yank-internal (lambda () (mark))))
- (defun region-as-string ()
- (buffer-substring (region-beginning)
- (region-end)))
- (defun isearch-forward-use-region ()
- (interactive)
- (when (region-active-p)
- (add-to-history 'search-ring (region-as-string))
- (deactivate-mark))
- (call-interactively 'isearch-forward))
- (defun isearch-backward-use-region ()
- (interactive)
- (when (region-active-p)
- (add-to-history 'search-ring (region-as-string))
- (deactivate-mark))
- (call-interactively 'isearch-backward))
- (eval-after-load "multiple-cursors"
- '(progn
- (unsupported-cmd isearch-forward-use-region ".")
- (unsupported-cmd isearch-backward-use-region ".")))
- (defun view-url ()
- "Open a new buffer containing the contents of URL."
- (interactive)
- (let* ((default (thing-at-point-url-at-point))
- (url (read-from-minibuffer "URL: " default)))
- (switch-to-buffer (url-retrieve-synchronously url))
- (rename-buffer url t)
- ;; TODO: switch to nxml/nxhtml mode
- (cond ((search-forward "<?xml" nil t) (xml-mode))
- ((search-forward "<html" nil t) (html-mode)))))
- (defun linkify-region-from-kill-ring (start end)
- (interactive "r")
- (let ((text (buffer-substring start end)))
- (delete-region start end)
- (insert "<a href=\"")
- (yank)
- (insert (concat "\">" text "</a>"))))
- (defun buffer-to-html (buffer)
- (with-current-buffer (htmlize-buffer buffer)
- (buffer-string)))
- (defun 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 add-file-find-hook-with-pattern (pattern fn &optional contents)
- "Add a find-file-hook that calls FN for files where PATTERN
- matches the file name, and optionally, where CONTENT matches file contents.
- Both PATTERN and CONTENTS are matched as regular expressions."
- (lexical-let ((re-pattern pattern)
- (fun fn)
- (re-content contents))
- (add-hook 'find-file-hook
- (lambda ()
- (if (and
- (string-match re-pattern (buffer-file-name))
- (or (null re-content)
- (string-match re-content
- (buffer-substring (point-min) (point-max)))))
- (apply fun ()))))))
- ;; Fix kmacro-edit-lossage, it's normal implementation
- ;; is bound tightly to C-h
- (defun kmacro-edit-lossage ()
- "Edit most recent 300 keystrokes as a keyboard macro."
- (interactive)
- (kmacro-push-ring)
- (edit-kbd-macro 'view-lossage))
|