Mercurial > dotfiles
view .elisp/settings/50.localfuncs.el @ 336:ea73ef5dc38c
emacs: avoid weird package.el breakage with newish packages
I've been toting around this package.el from 2009 or so, and something
in the package format seems to have changed that broke me. Thanks to
some related diagnostics by Lucas, I've grabbed the last package.el
that worked with emacs 23 and stashed it here. This seems to work,
modulo some things (notably js2-mode and smex) now seem to require
emacs 24 if you install them using package.el, so this will end up
being brittle on my last couple of emacs23 machines.
author | Augie Fackler <raf@durin42.com> |
---|---|
date | Thu, 29 May 2014 14:30:42 -0400 |
parents | 026344f083ef |
children |
line wrap: on
line source
;; advice to prevent ido from using flex matches on huge lists of files ;; with enough characters typed and blocking for an absurd amount of time ;; after a stupid typo ;; The value af-ido-flex-fuzzy-limit is the maximum value of the product ;; of the number of characters the user has entered and the number of ;; options in the ido list. ;; The default value was determined experimentally and seemed to be ;; the boundary of sane wait times when this was written. (defvar af-ido-flex-fuzzy-limit (* 2000 5)) (defadvice ido-set-matches-1 (around my-ido-set-matches-1 activate) "Conditionally disable flex matching if the list is huge. This is useful because when the ido list is huge, ido flex matching spends an eternity in a regex if you make a typo." (let ((ido-enable-flex-matching (< (* (length (ad-get-arg 0)) (length ido-text)) af-ido-flex-fuzzy-limit))) ad-do-it)) ;; Generic repository differ. Requires textmate.el and mercurial.el. ;; Will use monky or magit if either one is present. (defun af-generic-diff-repo () (interactive) (let ((root (textmate-project-root))) (cond ((and (string= (textmate-project-root-type root) "hg") (fboundp 'monky-status)) (monky-status)) ((and (string= (textmate-project-root-type root) "git") (fboundp 'magit-status)) (magit-status root)) (t (progn (cd root) (hg-view-output ((format "project diff for %s" root)) (call-process (textmate-project-root-type root) nil t nil "diff") (diff-mode) (setq diff (not (= (point-min) (point-max)))) (font-lock-fontify-buffer) (cd root))))))) (global-set-key [(control c)(t)(=)] 'af-generic-diff-repo) (global-set-key [(control c)(d)] 'af-generic-diff-repo) (defun af-rotate-list (l) "Move the head of l to the end of the list." (append (cdr l) (list (car l)))) (defun af-spacejoin (l) "Given list of strings l, join them with spaces and return. Returns the empty string if l is nil." (if l (reduce '(lambda (x &optional y) (concat x " " (if y y))) l) "")) (defun pyflakes-this-buffer () (interactive) (compilation-start (concat "cd " (file-name-directory buffer-file-name) "; pyflakes " (file-name-nondirectory buffer-file-name)) nil (lambda (mode) "*pyflakes*"))) (defun hg-check-code () (interactive) (textmate-start-compile-in-root "python contrib/check-code.py `hg man`" nil '(lambda (x) "*check-code*") )) (defun fullscreen () (interactive) (set-frame-parameter nil 'fullscreen (if (frame-parameter nil 'fullscreen) nil 'fullboth))) (defun hg-rm-this-file () (interactive) (shell-command-to-string (concat "hg rm " (shell-quote-argument buffer-file-name)))) ;; Lifted from http://code.google.com/p/ergoemacs/ (defun select-text-in-quote () "Select text between the nearest left and right delimiters. Delimiters are paired characters: ()[]<>«»“”‘’「」, including \"\"." (interactive) (let (b1 b2) (skip-chars-backward "^<>(“{[「«\"‘") (setq b1 (point)) (skip-chars-forward "^<>)”}]」»\"’") (setq b2 (point)) (set-mark b1) ) ) ;; Most of this was extracted from show-paren-function in paren.el from an emacs 23 nightly ;; Also, it seems like this really ought to be builtin, but I can't find it. (defun bounce-to-other-paren () (interactive) (let ((oldpos (point)) (dir (cond ((eq (syntax-class (syntax-after (1- (point)))) 5) -1) ((eq (syntax-class (syntax-after (point))) 4) 1))) pos mismatch face) ;; ;; Find the other end of the sexp. (when dir (save-excursion (save-restriction ;; Determine the range within which to look for a match. (when blink-matching-paren-distance (narrow-to-region (max (point-min) (- (point) blink-matching-paren-distance)) (min (point-max) (+ (point) blink-matching-paren-distance)))) ;; Scan across one sexp within that range. ;; Errors or nil mean there is a mismatch. (condition-case () (setq pos (scan-sexps (point) dir)) (error (setq pos t mismatch t))) ;; Move back the other way and verify we get back to the ;; starting point. If not, these two parens don't really match. ;; Maybe the one at point is escaped and doesn't really count. (when (integerp pos) (unless (condition-case () (eq (point) (scan-sexps pos (- dir))) (error nil)) (setq pos nil))) ))) ;; Highlight the other end of the sexp, or unhighlight if none. (if (and pos (integerp pos)) (goto-char pos) (message "No matching other paren found.") ))) (defun af-set-window-width (&optional columns) "Make selected window COLUMNS wide. Interactively, if no argument is given, make selected window 80 columns wide. " (interactive "p") (let* ((cols (if (or (not columns) (>= 0 columns)) 80 columns))) (shrink-window-horizontally (- (window-width) cols))))