Disable population of `file-name-history', it causes calls to
abbreviate-file-name => file-name-case-insensitive-p => tramp-autoload-file-name-handler
taking 40% of startup time.
`ido-switch-buffer' doesn't depends on `file-name-history', nothing to lose.
Profiling data for startup:
- eval-buffer 4340 99%
- recentf-mode 1684 38%
- recentf-load-list 1684 38%
- mapcar 1684 38%
- abbreviate-file-name 1684 38%
- file-name-case-insensitive-p 1250 28%
+ tramp-autoload-file-name-handler 1172 26%
+ tramp-file-name-handler 78 1%
(require 'company)
(require 'cl-lib)
(require 'web-mode)
(unless (fboundp 'web-mode-language-at-pos)
(defun web-mode-language-at-pos (&optional pos)
(plist-get (web-mode-point-context (or pos (point))) :language)))
(defvar company-dom--document-methods
'("getElementById" "getElementsByClassName" "createElement" "createElementNS" "createEvent"))
(defvar company-dom--window-methods
'("console" "document" "location"))
(defun company-dom--prefix ()
(when (looking-back "\\<\\w+\\(?:\\.?\\w+\\>\\|\\.\\)")
(match-string 0)))
(defun company-dom--candidates (prefix)
(cond
((string-match "^window\\.\\(.*\\)" prefix)
(mapcar
(lambda (str) (concat "window." str))
(all-completions (match-string 1) company-dom--window-methods)))
((string-match "^document\\.\\(.*\\)" prefix)
(mapcar
(lambda (str) (concat "document." str))
(all-completions (match-string 1) company-dom--document-methods)))
(t
(all-completions prefix '("document" "window")))
))
(defun company-web (command &optional arg &rest ignored)
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-web))
(prefix
(pcase (plist-get (web-mode-point-context (point)) :language)
("css" (company-css 'prefix))
("javascript" (company-dom--prefix))))
(candidates
(pcase (plist-get (web-mode-point-context (point)) :language)
("css" (company-css 'candidates arg))
("javascript" (company-dom--candidates arg))))
(meta (format "This value is named %s" arg))))
(defun company-web-register ()
(set (make-local-variable 'company-backends) '(company-web)))
(add-hook 'web-mode-hook #'company-web-register)
;; Debug company with M-x company-diag.