(require 'dojo-imports) (require 'dojo-core-api) (require 'dojo-core-workspace) (defvar dojo-major-mode-map (let ((map (make-keymap)) ) ; (define-key map "\C-c\C-k" 'dojo-js-i18n-insert-i18n-at-point) (define-key map "\C-c\C-c\C-k" 'dojo-css-gen-insert-rule) (define-key map (kbd "C-c C-j C-f") 'dojo-jsgen-code-insert-for-loop) (define-key map (kbd "C-c C-j C-i") 'dojo-jsgen-code-insert-for-in-loop) (define-key map (kbd "C-c C-j C-j") 'dojo-js-navigation-jump-to-symbol-at-point) ; (define-key map (kbd "C-c C-j C-k") (lambda () (interactive) (dojo-js-symbols-populate-buffer-by-inspect-path-at-point 0))) (define-key map (kbd "C-c C-j C-k") (lambda () (interactive) (dojo-js-symbols-populate-and-jump-to-buffer 1))) (define-key map (kbd "C-c C-j C-l") (lambda () (interactive) (dojo-js-symbols-populate-buffer-by-inspect-path-at-point 1))) (define-key map (kbd "C-c C-j C-m") 'dojo-js-tree-show-class-members) (define-key map (kbd "C-c C-j C-n") 'dojo-js-navigation-jump-to-own-main-i18n) (define-key map (kbd "C-c C-j C-v") 'dojo-js-navigation-jump-to-own-main-css) (define-key map (kbd "C-c C-j C-w") 'dojo-jsgen-code-insert-construct-widget) ; Keys prefixed by C-c C-j call functions for generating pieces of js code map ) "Keymap for dojo-minor-mode" ) (define-derived-mode dojo-major-mode js2-mode "Dojo-Major" "A major mode to be active when editing (Dojo) Javascript files. Provides things like indentation. The concept of a workspace, and similar things is located in dojo-minor-mode, which can be active regardless of the currently visited file type." (set (make-local-variable 'indent-line-function) #'dojo-js-indent-line) (set (make-local-variable 'indent-region-function) #'dojo-js-indent-region) (use-local-map dojo-major-mode-map) ; See https://emacs.stackexchange.com/questions/220/how-to-bind-c-i-as-different-from-tab ; Short, usually emacs maps C-i and tab on the same key, which means if one changes the binging ; of tab, the binding of C-i is also changed, and vice versa. ; The below code works around this problem. (local-set-key [tab] #'indent-for-tab-command) (local-set-key (kbd "C-i") #'dojo-js-indent-indent-current-buffer) (add-hook 'js2-mode-hook (lambda () (company-mode))) (setq company-backends (list 'company-dojo-backend)) ) (provide 'dojo-major-mode)