;;; ravi-init-insertion.el --- inserting text ;; Copyright (C) 2013 ;; Author: ;; Keywords: ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; Automatic text insertion ;;; Code: (require 'autoinsert) (auto-insert-mode) (use-package yasnippet :init (progn (setq yas-snippet-dirs `(,(ravi/emacs-file "snippets") yas-installed-snippets-dir) ) ) :config (progn (yas-global-mode 1) ;; No dropdowns (setq yas/prompt-functions '(yas/ido-prompt yas/completing-prompt)) ;; Wrap around region (setq yas/wrap-around-region t) ;; Automatically create throw-away snippets (use-package auto-yasnippet :bind (("C-" . aya-create) ("" . aya-expand)) :ensure t) ) :diminish yas-minor-mode) ;; Default completion (some day via "M-/") (require 'hippie-exp) (setq hippie-expand-try-functions-list '(yas/hippie-try-expand try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs ) ) (use-package company :init (progn (add-hook 'after-init-hook 'global-company-mode)) :config (progn (setq company-tooltip-flip-when-above t company-idle-delay 0.1 company-show-numbers t company-tooltip-align-annotations t company-require-match nil company-minimum-prefix-length 2 company-occurrence-weight-function 'company-occurrence-prefer-any-closest company-dabbrev-downcase nil) (defun ravi/complete-or-indent () (interactive) (if (company-manual-begin) (company-complete-common) (indent-according-to-mode))) (bind-key "\t" 'ravi/complete-or-indent) (bind-keys :map company-active-map ("C-n" . company-select-next) ("C-p" . company-select-previous) ;; Swap filter and search since filter is more useful ("C-s" . company-filter-candidates) ("C-M-s" . company-search-candidates)) (bind-keys :map company-search-map ("C-n" . company-select-next) ("C-p" . company-select-previous)) (use-package company-c-headers :init (progn (add-to-list 'company-backends 'company-c-headers)) :config (progn (defun ravi/get-default-include-paths () (let* ((gcc-out (shell-command-to-string "g++ -E -x c++ - -v < /dev/null")) (gcc-list-match (string-match "#include <...> search starts here:\n\\(.*\\(?:\n.*\\)*?\\)End of search list.\n" gcc-out)) (combined-list (match-string 1 gcc-out)) ;; Need the following rigamarole to handle paths with spaces in them (path-list-with-spaces (and combined-list (split-string combined-list "\n" t))) (path-list (and path-list-with-spaces (mapcar 's-trim-left path-list-with-spaces)))) path-list)) (mapc (lambda (dir) (add-to-list 'company-c-headers-path-system dir)) (ravi/get-default-include-paths)))) ;; To do: enable when moving to emacs 26+ ;; (use-package company-box :hook (company-mode . company-box-mode) :ensure t) (use-package company-quickhelp :config (progn (company-quickhelp-mode 1) ;; Enable company-quickhelp only when company-mode is active ;; (unbind-key "M-h" company-quickhelp-mode-map) (bind-key "M-h" 'company-quickhelp-manual-begin company-active-map))) (use-package company-statistics :init (setq company-statistics-file (expand-file-name "company-statistics-cache.el" (ravi/emacs-file "past"))) :config (progn (company-statistics-mode))) ;; Get rid of company-semantic as it interferes with clang-based backends (setq company-backends (delete 'company-semantic company-backends)) ;; Get rid of company-clang since it is too noisy at this point (setq company-backends (delete 'company-clang company-backends)) (require 'company-yasnippet) (defun ravi/company-to-yasnippet () (interactive) (company-abort) (call-interactively 'company-yasnippet)) (bind-key "" 'ravi/company-to-yasnippet company-active-map) (bind-key "" 'company-yasnippet)) :diminish company-mode) (provide 'ravi-init-insertion) ;;; ravi-init-insertion.el ends here