branch: externals/idlwave commit f334f5294e063f3d3421ed10bf08a94f42485be3 Author: JD Smith <jdtsm...@gmail.com> Commit: JD Smith <jdtsm...@gmail.com>
Re-organize/simplify key man binding code. From upstream Emacs --- idlwave.el | 249 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 124 insertions(+), 125 deletions(-) diff --git a/idlwave.el b/idlwave.el index 93d557684f..dbf0a0d7e7 100644 --- a/idlwave.el +++ b/idlwave.el @@ -1419,43 +1419,133 @@ Otherwise ARGS forms a list that is evaluated." (progn (unexpand-abbrev) nil) ,(append args)))) -(defvar idlwave-mode-map (make-sparse-keymap) +(autoload 'idlwave-shell "idlw-shell" + "Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'." t) +(autoload 'idlwave-shell-send-command "idlw-shell") +(autoload 'idlwave-shell-recenter-shell-window "idlw-shell" + "Run `idlwave-shell' and switch back to current window" t) +(autoload 'idlwave-shell-save-and-run "idlw-shell" + "Save and run buffer under the shell." t) +(autoload 'idlwave-shell-break-here "idlw-shell" + "Set breakpoint in current line." t) +(autoload 'idlwave-shell-run-region "idlw-shell" + "Compile and run the region." t) + +(fset 'idlwave-debug-map (make-sparse-keymap)) + +(defvar idlwave-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-c " 'idlwave-hard-tab) + (define-key map [(control tab)] 'idlwave-hard-tab) + ;;(define-key map "\C-c\C- " 'idlwave-hard-tab) + (define-key map "'" 'idlwave-show-matching-quote) + (define-key map "\"" 'idlwave-show-matching-quote) + (define-key map "\C-g" 'idlwave-keyboard-quit) + (define-key map "\C-c;" 'idlwave-toggle-comment-region) + (define-key map "\C-\M-a" 'idlwave-beginning-of-subprogram) + (define-key map "\C-\M-e" 'idlwave-end-of-subprogram) + (define-key map "\C-c{" 'idlwave-beginning-of-block) + (define-key map "\C-c}" 'idlwave-end-of-block) + (define-key map "\C-c]" 'idlwave-close-block) + (define-key map [(meta control h)] 'idlwave-mark-subprogram) + (define-key map "\M-\C-n" 'idlwave-forward-block) + (define-key map "\M-\C-p" 'idlwave-backward-block) + (define-key map "\M-\C-d" 'idlwave-down-block) + (define-key map "\M-\C-u" 'idlwave-backward-up-block) + (define-key map "\M-\r" 'idlwave-split-line) + (define-key map "\M-\C-q" 'idlwave-indent-subprogram) + (define-key map "\C-c\C-p" 'idlwave-previous-statement) + (define-key map "\C-c\C-n" 'idlwave-next-statement) + ;; (define-key map "\r" 'idlwave-newline) + ;; (define-key map "\t" 'idlwave-indent-line) + (define-key map [(shift iso-lefttab)] 'idlwave-indent-statement) + (define-key map "\C-c\C-a" 'idlwave-auto-fill-mode) + (define-key map "\M-q" 'idlwave-fill-paragraph) + (define-key map "\M-s" 'idlwave-edit-in-idlde) + (define-key map "\C-c\C-h" 'idlwave-doc-header) + (define-key map "\C-c\C-m" 'idlwave-doc-modification) + (define-key map "\C-c\C-c" 'idlwave-case) + (define-key map "\C-c\C-d" 'idlwave-debug-map) + (when (and (listp idlwave-shell-debug-modifiers) + (not (equal idlwave-shell-debug-modifiers '()))) + ;; Bind the debug commands also with the special modifiers. + (let ((shift (memq 'shift idlwave-shell-debug-modifiers)) + (mods-noshift + (delq 'shift (copy-sequence idlwave-shell-debug-modifiers)))) + (define-key map + (vector (append mods-noshift (list (if shift ?C ?c)))) + 'idlwave-shell-save-and-run) + (define-key map + (vector (append mods-noshift (list (if shift ?B ?b)))) + 'idlwave-shell-break-here) + (define-key map + (vector (append mods-noshift (list (if shift ?E ?e)))) + 'idlwave-shell-run-region))) + (define-key map "\C-c\C-d\C-c" 'idlwave-shell-save-and-run) + (define-key map "\C-c\C-d\C-b" 'idlwave-shell-break-here) + (define-key map "\C-c\C-d\C-e" 'idlwave-shell-run-region) + (define-key map "\C-c\C-f" 'idlwave-for) + ;; (define-key map "\C-c\C-f" 'idlwave-function) + ;; (define-key map "\C-c\C-p" 'idlwave-procedure) + (define-key map "\C-c\C-r" 'idlwave-repeat) + (define-key map "\C-c\C-w" 'idlwave-while) + (define-key map "\C-c\C-k" 'idlwave-kill-autoloaded-buffers) + (define-key map "\C-c\C-s" 'idlwave-shell) + (define-key map "\C-c\C-l" 'idlwave-shell-recenter-shell-window) + (define-key map "\C-c\C-b" 'idlwave-list-buffer-load-path-shadows) + (define-key map "\C-c\C-v" 'idlwave-find-module) + (define-key map "\C-c\C-t" 'idlwave-find-module-this-file) + (define-key map "\C-c?" 'idlwave-routine-info) + (define-key map "\M-?" 'idlwave-context-help) + (define-key map [(control meta ?\?)] + 'idlwave-help-assistant-help-with-topic) + ;; Pickup both forms of Esc/Meta binding + (define-key map [(meta tab)] 'idlwave-complete) + (define-key map [?\e?\t] 'idlwave-complete) + (define-key map "\M-\C-i" 'idlwave-complete) + (define-key map "\C-c\C-i" 'idlwave-update-routine-info) + (define-key map "\C-c=" 'idlwave-resolve) + (define-key map + (if (featurep 'xemacs) [(shift button3)] [(shift mouse-3)]) + 'idlwave-mouse-context-help) + map) "Keymap used in IDL mode.") -(defvar idlwave-mode-syntax-table (make-syntax-table) +(defvar idlwave-mode-syntax-table + (let ((st (make-syntax-table))) + (modify-syntax-entry ?+ "." st) + (modify-syntax-entry ?- "." st) + (modify-syntax-entry ?* "." st) + (modify-syntax-entry ?/ "." st) + (modify-syntax-entry ?^ "." st) + (modify-syntax-entry ?# "." st) + (modify-syntax-entry ?= "." st) + (modify-syntax-entry ?% "." st) + (modify-syntax-entry ?< "." st) + (modify-syntax-entry ?> "." st) + (modify-syntax-entry ?\' "\"" st) + (modify-syntax-entry ?\" "\"" st) + (modify-syntax-entry ?\\ "." st) + (modify-syntax-entry ?_ "_" st) + (modify-syntax-entry ?{ "(}" st) + (modify-syntax-entry ?} "){" st) + (modify-syntax-entry ?$ "_" st) + (modify-syntax-entry ?. "." st) + (modify-syntax-entry ?\; "<" st) + (modify-syntax-entry ?\n ">" st) + (modify-syntax-entry ?\f ">" st) + st) "Syntax table in use in `idlwave-mode' buffers.") -(modify-syntax-entry ?+ "." idlwave-mode-syntax-table) -(modify-syntax-entry ?- "." idlwave-mode-syntax-table) -(modify-syntax-entry ?* "." idlwave-mode-syntax-table) -(modify-syntax-entry ?/ "." idlwave-mode-syntax-table) -(modify-syntax-entry ?^ "." idlwave-mode-syntax-table) -(modify-syntax-entry ?# "." idlwave-mode-syntax-table) -(modify-syntax-entry ?= "." idlwave-mode-syntax-table) -(modify-syntax-entry ?% "." idlwave-mode-syntax-table) -(modify-syntax-entry ?< "." idlwave-mode-syntax-table) -(modify-syntax-entry ?> "." idlwave-mode-syntax-table) -(modify-syntax-entry ?\' "\"" idlwave-mode-syntax-table) -(modify-syntax-entry ?\" "\"" idlwave-mode-syntax-table) -(modify-syntax-entry ?\\ "." idlwave-mode-syntax-table) -(modify-syntax-entry ?_ "_" idlwave-mode-syntax-table) -(modify-syntax-entry ?{ "(}" idlwave-mode-syntax-table) -(modify-syntax-entry ?} "){" idlwave-mode-syntax-table) -(modify-syntax-entry ?$ "_" idlwave-mode-syntax-table) -(modify-syntax-entry ?. "." idlwave-mode-syntax-table) -(modify-syntax-entry ?\; "<" idlwave-mode-syntax-table) -(modify-syntax-entry ?\n ">" idlwave-mode-syntax-table) -(modify-syntax-entry ?\f ">" idlwave-mode-syntax-table) - (defvar idlwave-find-symbol-syntax-table - (copy-syntax-table idlwave-mode-syntax-table) + (let ((st (copy-syntax-table idlwave-mode-syntax-table))) + (modify-syntax-entry ?$ "w" st) + (modify-syntax-entry ?_ "w" st) + (modify-syntax-entry ?! "w" st) + (modify-syntax-entry ?. "w" st) + st) "Syntax table that treats symbol characters as word characters.") -(modify-syntax-entry ?$ "w" idlwave-find-symbol-syntax-table) -(modify-syntax-entry ?_ "w" idlwave-find-symbol-syntax-table) -(modify-syntax-entry ?! "w" idlwave-find-symbol-syntax-table) -(modify-syntax-entry ?. "w" idlwave-find-symbol-syntax-table) - (defmacro idlwave-with-special-syntax (&rest body) "Execute BODY with a different syntax table." `(let ((saved-syntax (syntax-table))) @@ -1515,101 +1605,10 @@ Capitalize system variables - action only (equal select 'noaction) (equal select 'both)) (define-key idlwave-mode-map key - (append '(lambda () - (interactive) - (self-insert-command 1)) - (list (if (listp cmd) - cmd - (list cmd))))))) - -(fset 'idlwave-debug-map (make-sparse-keymap)) - -(define-key idlwave-mode-map "\C-c " 'idlwave-hard-tab) -(define-key idlwave-mode-map [(control tab)] 'idlwave-hard-tab) -;(define-key idlwave-mode-map "\C-c\C- " 'idlwave-hard-tab) -(define-key idlwave-mode-map "'" 'idlwave-show-matching-quote) -(define-key idlwave-mode-map "\"" 'idlwave-show-matching-quote) -(define-key idlwave-mode-map "\C-g" 'idlwave-keyboard-quit) -(define-key idlwave-mode-map "\C-c;" 'idlwave-toggle-comment-region) -(define-key idlwave-mode-map "\C-\M-a" 'idlwave-beginning-of-subprogram) -(define-key idlwave-mode-map "\C-\M-e" 'idlwave-end-of-subprogram) -(define-key idlwave-mode-map "\C-c{" 'idlwave-beginning-of-block) -(define-key idlwave-mode-map "\C-c}" 'idlwave-end-of-block) -(define-key idlwave-mode-map "\C-c]" 'idlwave-close-block) -(define-key idlwave-mode-map [(meta control h)] 'idlwave-mark-subprogram) -(define-key idlwave-mode-map "\M-\C-n" 'idlwave-forward-block) -(define-key idlwave-mode-map "\M-\C-p" 'idlwave-backward-block) -(define-key idlwave-mode-map "\M-\C-d" 'idlwave-down-block) -(define-key idlwave-mode-map "\M-\C-u" 'idlwave-backward-up-block) -(define-key idlwave-mode-map "\M-\r" 'idlwave-split-line) -(define-key idlwave-mode-map "\M-\C-q" 'idlwave-indent-subprogram) -(define-key idlwave-mode-map "\C-c\C-p" 'idlwave-previous-statement) -(define-key idlwave-mode-map "\C-c\C-n" 'idlwave-next-statement) -;; (define-key idlwave-mode-map "\r" 'idlwave-newline) -;; (define-key idlwave-mode-map "\t" 'idlwave-indent-line) -(define-key idlwave-mode-map [(shift iso-lefttab)] 'idlwave-indent-statement) -(define-key idlwave-mode-map "\C-c\C-a" 'idlwave-auto-fill-mode) -(define-key idlwave-mode-map "\M-q" 'idlwave-fill-paragraph) -(define-key idlwave-mode-map "\M-s" 'idlwave-edit-in-idlde) -(define-key idlwave-mode-map "\C-c\C-h" 'idlwave-doc-header) -(define-key idlwave-mode-map "\C-c\C-m" 'idlwave-doc-modification) -(define-key idlwave-mode-map "\C-c\C-c" 'idlwave-case) -(define-key idlwave-mode-map "\C-c\C-d" 'idlwave-debug-map) - -;; A few pre-bound debug commands (which can auto-launch the shell). -(when (and (boundp 'idlwave-shell-debug-modifiers) - (listp idlwave-shell-debug-modifiers) - (not (equal idlwave-shell-debug-modifiers '()))) - ;; Bind the debug commands also with the special modifiers. - (let ((shift (memq 'shift idlwave-shell-debug-modifiers)) - (mods-noshift (delq 'shift - (copy-sequence idlwave-shell-debug-modifiers)))) - (define-key idlwave-mode-map - (vector (append mods-noshift (list (if shift ?C ?c)))) - 'idlwave-shell-save-and-run) - (define-key idlwave-mode-map - (vector (append mods-noshift (list (if shift ?B ?b)))) - 'idlwave-shell-break-here) - (define-key idlwave-mode-map - (vector (append mods-noshift (list (if shift ?E ?e)))) - 'idlwave-shell-run-region))) -(define-key idlwave-mode-map "\C-c\C-d\C-c" 'idlwave-shell-save-and-run) -(define-key idlwave-mode-map "\C-c\C-d\C-b" 'idlwave-shell-break-here) -(define-key idlwave-mode-map "\C-c\C-d\C-e" 'idlwave-shell-run-region) -(define-key idlwave-mode-map "\C-c\C-f" 'idlwave-for) -;; (define-key idlwave-mode-map "\C-c\C-f" 'idlwave-function) -;; (define-key idlwave-mode-map "\C-c\C-p" 'idlwave-procedure) -(define-key idlwave-mode-map "\C-c\C-r" 'idlwave-repeat) -(define-key idlwave-mode-map "\C-c\C-w" 'idlwave-while) -(define-key idlwave-mode-map "\C-c\C-k" 'idlwave-kill-autoloaded-buffers) -(define-key idlwave-mode-map "\C-c\C-s" 'idlwave-shell) -(define-key idlwave-mode-map "\C-c\C-l" 'idlwave-shell-recenter-shell-window) -(define-key idlwave-mode-map "\C-c\C-b" 'idlwave-list-buffer-load-path-shadows) -(autoload 'idlwave-shell "idlw-shell" - "Run an inferior IDL, with I/O through buffer `(idlwave-shell-buffer)'." t) -(autoload 'idlwave-shell-send-command "idlw-shell") -(autoload 'idlwave-shell-recenter-shell-window "idlw-shell" - "Run `idlwave-shell' and switch back to current window" t) -(autoload 'idlwave-shell-save-and-run "idlw-shell" - "Save and run buffer under the shell." t) -(autoload 'idlwave-shell-break-here "idlw-shell" - "Set breakpoint in current line." t) -(autoload 'idlwave-shell-run-region "idlw-shell" - "Compile and run the region." t) -(define-key idlwave-mode-map "\C-c\C-v" 'idlwave-find-module) -(define-key idlwave-mode-map "\C-c\C-t" 'idlwave-find-module-this-file) -(define-key idlwave-mode-map "\C-c?" 'idlwave-routine-info) -(define-key idlwave-mode-map "\M-?" 'idlwave-context-help) -(define-key idlwave-mode-map [(control meta ?\?)] 'idlwave-help-with-topic) -;; Pickup both forms of Esc/Meta binding -(define-key idlwave-mode-map [(meta tab)] 'idlwave-complete) -(define-key idlwave-mode-map [?\e?\t] 'idlwave-complete) -(define-key idlwave-mode-map "\M-\C-i" 'idlwave-complete) -(define-key idlwave-mode-map "\C-c\C-i" 'idlwave-update-routine-info) -(define-key idlwave-mode-map "\C-c=" 'idlwave-resolve) -(define-key idlwave-mode-map - (if (featurep 'xemacs) [(shift button3)] [(shift mouse-3)]) - 'idlwave-mouse-context-help) + `(lambda () + (interactive) + (self-insert-command 1) + ,(if (listp cmd) cmd (list cmd)))))) ;; Set action and key bindings. ;; See description of the function `idlwave-action-and-binding'.