Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
;; Hippie expand. Groovy vans with tie-dyes.
;; Change the default hippie-expand order and add yasnippet to the front.
(setq hippie-expand-try-functions-list
;; Helps when debugging which try-function expanded
(setq hippie-expand-verbose t)
;; Smart Tab
(defvar smart-tab-using-hippie-expand t
"turn this on if you want to use hippie-expand completion.")
(defun smart-tab (prefix)
"Needs `transient-mark-mode' to be on. This smart tab is
minibuffer compliant: it acts as usual in the minibuffer.
In all other buffers: if PREFIX is \\[universal-argument], calls
`smart-indent'. Else if point is at the end of a symbol,
expands it. Else calls `smart-indent'."
(interactive "P")
(labels ((smart-tab-must-expand (&optional prefix)
(unless (or (consp prefix)
(looking-at "\\_>"))))
(cond ((minibufferp)
((smart-tab-must-expand prefix)
(if smart-tab-using-hippie-expand
(hippie-expand prefix)
(dabbrev-expand prefix)))
(defun smart-indent ()
"Indents region if mark is active, or current line otherwise."
(if mark-active
(indent-region (region-beginning)
;; Bind tab everywhere
(global-set-key (kbd "TAB") 'smart-tab)
;; Enables tab completion in the `eval-expression` minibuffer
(define-key read-expression-map [(tab)] 'hippie-expand)
(define-key read-expression-map [(shift tab)] 'unexpand)
;; YASnippet
;; Replace yasnippets's TAB
(add-hook 'yas/minor-mode-hook
(lambda () (define-key yas/minor-mode-map
(kbd "TAB") 'smart-tab))) ; was yas/expand
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment