Question: You have all these complicated configuration options in your package, but which ones do you as the maintainer actually set in your own configuration?
Answer: Not many, beyond custom key bindings. I set most defaults the way that seems best. However, the default settings do not turn on features which:
To see what I mean, here is the entire configuration the old maintainer had in his .emacs:
(setq idlwave-shell-debug-modifiers '(control shift) idlwave-store-inquired-class t idlwave-shell-automatic-start t idlwave-main-block-indent 2 idlwave-init-rinfo-when-idle-after 2 idlwave-help-dir "~/lib/emacs/idlwave" idlwave-special-lib-alist '(("/idl-astro/" . "AstroLib") ("/jhuapl/" . "JHUAPL-Lib") ("/dominik/lib/idl/" . "MyLib")))
However, if you are an Emacs power-user and want IDLWAVE to work completely differently, you can change almost every aspect of it. Here is an example of a much more extensive configuration of IDLWAVE. The user is King!
;;; Settings for IDLWAVE mode (setq idlwave-block-indent 3) ; Indentation settings (setq idlwave-main-block-indent 3) (setq idlwave-end-offset -3) (setq idlwave-continuation-indent 1) (setq idlwave-begin-line-comment "^;[^;]") ; Leave ";" but not ";;" ; anchored at start of line. (setq idlwave-surround-by-blank t) ; Turn on padding ops =,<,> (setq idlwave-pad-keyword nil) ; Remove spaces for keyword '=' (setq idlwave-expand-generic-end t) ; convert END to ENDIF etc... (setq idlwave-reserved-word-upcase t) ; Make reserved words upper case ; (with abbrevs only) (setq idlwave-abbrev-change-case nil) ; Don't force case of expansions (setq idlwave-hang-indent-regexp ": ") ; Change from "- " for auto-fill (setq idlwave-show-block nil) ; Turn off blinking to begin (setq idlwave-abbrev-move t) ; Allow abbrevs to move point (setq idlwave-query-class '((method-default . nil) ; No query for method (keyword-default . nil); or keyword completion ("INIT" . t) ; except for these ("CLEANUP" . t) ("SETPROPERTY" .t) ("GETPROPERTY" .t))) ;; Using w3m for help (must install w3m and emacs-w3m) (autoload 'w3m-browse-url "w3m" "Interface for w3m on Emacs." t) (setq idlwave-help-browser-function 'w3m-browse-url w3m-use-tab nil ; no tabs, location line, or toolbar w3m-use-header-line nil w3m-use-toolbar nil) ;; Close my help window or frame when w3m closes with `q' (defadvice w3m-close-window (after idlwave-close activate) (if (boundp 'idlwave-help-frame) (idlwave-help-quit))) ;; Some setting can only be done from a mode hook. Here is an example: (add-hook 'idlwave-mode-hook (lambda () (setq case-fold-search nil) ; Make searches case sensitive ;; Run other functions here (font-lock-mode 1) ; Turn on font-lock mode (idlwave-auto-fill-mode 0) ; Turn off auto filling (setq idlwave-help-browser-function 'browse-url-w3) ;; Pad with 1 space (if -n is used then make the ;; padding a minimum of n spaces.) The defaults use -1 ;; instead of 1. (idlwave-action-and-binding "=" '(idlwave-expand-equal 1 1)) (idlwave-action-and-binding "<" '(idlwave-surround 1 1)) (idlwave-action-and-binding ">" '(idlwave-surround 1 1 '(?-))) (idlwave-action-and-binding "&" '(idlwave-surround 1 1)) ;; Only pad after comma and with exactly 1 space (idlwave-action-and-binding "," '(idlwave-surround nil 1)) (idlwave-action-and-binding "&" '(idlwave-surround 1 1)) ;; Pad only after `->', remove any space before the arrow (idlwave-action-and-binding "->" '(idlwave-surround 0 -1 nil 2)) ;; Set some personal bindings ;; (In this case, makes `,' have the normal self-insert behavior.) (local-set-key "," 'self-insert-command) (local-set-key [f5] 'idlwave-shell-break-here) (local-set-key [f6] 'idlwave-shell-clear-current-bp) ;; Create a newline, indenting the original and new line. ;; A similar function that does _not_ reindent the original ;; line is on "\C-j" (The default for emacs programming modes). (local-set-key "\n" 'idlwave-newline) ;; (local-set-key "\C-j" 'idlwave-newline) ; My preference. ;; Some personal abbreviations (define-abbrev idlwave-mode-abbrev-table (concat idlwave-abbrev-start-char "wb") "widget_base()" (idlwave-keyword-abbrev 1)) (define-abbrev idlwave-mode-abbrev-table (concat idlwave-abbrev-start-char "on") "obj_new()" (idlwave-keyword-abbrev 1)) )) ;;; Settings for IDLWAVE SHELL mode (setq idlwave-shell-overlay-arrow "=>") ; default is ">" (setq idlwave-shell-use-dedicated-frame t) ; Make a dedicated frame (setq idlwave-shell-prompt-pattern "^WAVE> ") ; default is "^IDL> " (setq idlwave-shell-explicit-file-name "wave") (setq idlwave-shell-process-name "wave") (setq idlwave-shell-use-toolbar nil) ; No toolbar ;; Most shell interaction settings can be done from the shell-mode-hook. (add-hook 'idlwave-shell-mode-hook (lambda () ;; Set up some custom key and mouse examine commands (idlwave-shell-define-key-both [s-down-mouse-2] (idlwave-shell-mouse-examine "print, size(___,/DIMENSIONS)")) (idlwave-shell-define-key-both [f9] (idlwave-shell-examine "print, size(___,/DIMENSIONS)")) (idlwave-shell-define-key-both [f10] (idlwave-shell-examine "print,size(___,/TNAME)")) (idlwave-shell-define-key-both [f11] (idlwave-shell-examine "help,___,/STRUCTURE"))))