Next: , Previous: HTML Help Browser Tips, Up: Top

Appendix C Configuration Examples

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"))))