462
+ − 1 ;; -*- Mode: Emacs-Lisp -*-
+ − 2
+ − 3 ;; Copyright (C) 2000, 2001 Ben Wing.
+ − 4
+ − 5 ;; Author: Mostly Ben Wing <ben@xemacs.org>
+ − 6 ;; Maintainer: XEmacs Development Team
+ − 7 ;; Keywords: sample, initialization
+ − 8
+ − 9 ;; This file is part of XEmacs.
+ − 10
+ − 11 ;; XEmacs is free software; you can redistribute it and/or modify it
+ − 12 ;; under the terms of the GNU General Public License as published by
+ − 13 ;; the Free Software Foundation; either version 2, or (at your option)
+ − 14 ;; any later version.
+ − 15
+ − 16 ;; XEmacs is distributed in the hope that it will be useful, but
+ − 17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
+ − 18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ − 19 ;; General Public License for more details.
+ − 20
+ − 21 ;; You should have received a copy of the GNU General Public License
+ − 22 ;; along with XEmacs; see the file COPYING. If not, write to the
+ − 23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 24 ;; Boston, MA 02111-1307, USA.
+ − 25
+ − 26 ;; #### to do:
863
+ − 27 ;; -- scan for #### markers and fix the problems noted there.
+ − 28 ;; -- #### maybe the setqs in this file should be changed to defvars
+ − 29 ;; to avoid tromping on customizations when custom.el is loaded
+ − 30 ;; early (dv and sjt at least favor making this the default)
+ − 31 ;; -- #### update documentation in (lispref)Starting Up XEmacs, in
+ − 32 ;; (xemacs)Entering Emacs, and in (custom), then point to them
+ − 33 ;; instead of going into detail here.
462
+ − 34
863
+ − 35 ;;; This is a sample init file. It can be used without modification
+ − 36 ;;; as your init.el or .emacs. In older versions of XEmacs, this file
+ − 37 ;;; was called .emacs and placed in your home directory. (Under MS
+ − 38 ;;; Windows, that directory is controlled by the HOME environment
+ − 39 ;;; variable and defaults to C:\. You can find out where XEmacs
+ − 40 ;;; thinks your home directory is using
462
+ − 41 ;;;
+ − 42 ;;; ESC : (expand-file-name "~")
+ − 43 ;;;
+ − 44 ;;; . This means type ESC, then colon, then the following text, then hit
+ − 45 ;;; return.) In more recent versions of XEmacs, this file has migrated to
+ − 46 ;;; the .xemacs/ subdirectory and is called init.el. Other files are
+ − 47 ;;; also located here, such as custom.el (the auto-generated file
+ − 48 ;;; containing Customization options that you saved when using
+ − 49 ;;; Options->Save Options).
+ − 50
+ − 51 ;;; Changes to your init.el file will not take effect until the next
+ − 52 ;;; time you start up XEmacs, unless you load it explicitly with
+ − 53 ;;;
+ − 54 ;;; M-x load-file RET ~/.xemacs/init.el RET
+ − 55
+ − 56 ;;; The language that this file (and most other XEmacs init files) is
+ − 57 ;;; written in is called "XEmacs Lisp" or more commonly "Elisp".
+ − 58
863
+ − 59 ;;; Brief descriptions of how the init process works and how to
+ − 60 ;;; accomplish many useful customizations are given below in this
+ − 61 ;;; file. There are many sources of further information:
462
+ − 62
+ − 63 ;;; -- the XEmacs User's Manual (Access using the online Info browser:
+ − 64 ;;; Use `Help->Info (Online Docs)->XEmacs User's Manual' (if
+ − 65 ;;; there is such an entry); or get to the Info contents page
+ − 66 ;;; using `Help->Info Contents' or `C-h i', and then
+ − 67 ;;; *middle-click* the XEmacs link or move the cursor into the
+ − 68 ;;; link and hit ENTER. This manual contains a great deal of
+ − 69 ;;; documentation on customization: Scroll down to the
+ − 70 ;;; Customization link and select it in the same fashion as for
+ − 71 ;;; the XEmacs link just mentioned.)
+ − 72
+ − 73 ;;; -- the XEmacs FAQ (`C-h F' for the local version; get either the
+ − 74 ;;; local version or the very latest version off the net using
+ − 75 ;;; the Help menu)
+ − 76
+ − 77 ;;; -- the XEmacs Lisp Reference Manual, containing detailed
+ − 78 ;;; documentation on Elisp. (Access using Info, just like for the
+ − 79 ;;; XEmacs User's Manual.)
+ − 80
+ − 81 ;;; -- the documentation strings for specific commands, functions,
+ − 82 ;;; key sequences, and variables. NOTE: This is *not* the same
+ − 83 ;;; information as in the XEmacs User's Manual or XEmacs Lisp
+ − 84 ;;; Reference Manual! In general, the doc strings are more
+ − 85 ;;; terse and more up-to-date than what is found in the manuals.
+ − 86 ;;; Once you understand the general concepts, these doc strings
+ − 87 ;;; should be your first point of reference for further
+ − 88 ;;; info. (Access using menu entries under `Help->Commands,
+ − 89 ;;; Variables, Keys' or using the keyboard: `C-h k' for a key
+ − 90 ;;; sequence, `C-h f' for a named command or Elisp function,
+ − 91 ;;; `C-h v' for a variable. There is various other useful
+ − 92 ;;; information accessible similarly, such as `C-h a'
+ − 93 ;;; ["Apropos", i.e. search for a command, function, or variable
+ − 94 ;;; by name]; `C-h C-a' ["Apropos Docs", i.e. search through the
+ − 95 ;;; text of the doc strings]; `C-h b' to list all key bindings;
+ − 96 ;;; `C-h m' to describe the current major and minor modes; etc.
+ − 97 ;;; Type `C-h ? ?' for a complete list.)
+ − 98
+ − 99 ;;; -- Getting Started with XEmacs [aka the "New User's Guide"], a
+ − 100 ;;; more introductory manual than the XEmacs User's Manual.
+ − 101 ;;; (Access using Info, just like for the XEmacs User's Manual.
+ − 102 ;;; There are some sections on customization here.)
+ − 103
+ − 104 ;;; -- the XEmacs tutorial, a very simple introduction to XEmacs for
+ − 105 ;;; total beginners. (`C-h t' for English; get the version in
+ − 106 ;;; various languages from the Help menu)
+ − 107
+ − 108 ;;; -- the XEmacs web site, www.xemacs.org.
+ − 109
+ − 110 ;;; -- the XEmacs mailing lists (xemacs-FOO@xemacs.org;
+ − 111 ;;; see http://www.xemacs.org/Lists/ for more info. Before
+ − 112 ;;; posting, consider looking through the archives -- they go back
+ − 113 ;;; years and there is a powerful searching interface. Currently
+ − 114 ;;; the archives are at http://list-archive.xemacs.org/, but if
+ − 115 ;;; this doesn't work, you can always access them through
+ − 116 ;;; www.xemacs.org.)
+ − 117
+ − 118 ;;; -- the XEmacs newsgroup, comp.emacs.xemacs. This is
+ − 119 ;;; bi-directionally gatewayed with xemacs@xemacs.org. WARNING:
+ − 120 ;;; The developers do not normally hang out on this newsgroup. If
+ − 121 ;;; you need to contact them, use xemacs-beta@xemacs.org.
+ − 122
+ − 123 ;;; -- the XEmacs internals manual, for those interested in working on
+ − 124 ;;; the XEmacs C code. (Available through Info.)
+ − 125
+ − 126 ;;; -- `Help->About XEmacs' to find out who the maintainers are.
+ − 127
+ − 128
+ − 129 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
863
+ − 130 ;; Theory of Operation ;;
+ − 131 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 132
+ − 133 ;;; XEmacs allows you to make persistent changes to editor behavior by
+ − 134 ;;; saving code in files which are by default loaded at startup.
+ − 135
+ − 136 ;; These files are just Lisp libraries with names built in to XEmacs.
+ − 137 ;; There are files for the use of the user (the init file and the
+ − 138 ;; custom file), for the site administrator (default.el and
+ − 139 ;; site-start.el), and for the XEmacs maintainers (auto-autoloads
+ − 140 ;; files). See the Lispref for user and site files (node Starting Up
+ − 141 ;; XEmacs, currently inaccurate (it doesn't describe the custom
+ − 142 ;; file)). Interactions among the files are complex; see
+ − 143 ;; lisp/startup.el for details.
+ − 144
+ − 145 ;; Briefly, after very basic initializations including processing a
+ − 146 ;; special command line options (including GUI toolkit options),
+ − 147 ;; setting up the terminal, and setting up `load-path', it executes
+ − 148 ;; customization code as follows:
+ − 149
+ − 150 ;; 1. It runs the normal hook `before-init-hook'.
+ − 151 ;; 2. It loads the library `site-start' (by default `site-start.el').
+ − 152 ;; 3. It loads the init file (by default `~/.xemacs/init.el').
+ − 153 ;; 4. It loads the custom file (by default `~/.xemacs/custom.el').
+ − 154 ;; 5. It loads the library `default' (by default `default.el').
+ − 155 ;; 6. It runs the normal hook `after-init-hook'.
+ − 156
+ − 157 ;; After this the *scratch* buffer is set up and the remaining command
+ − 158 ;; line arguments (actions and file names) are processed.
+ − 159
+ − 160 ;; N.B. Switching the order of steps 3 and 4 is under discussion and
+ − 161 ;; favored by several core developers.
+ − 162
+ − 163 ;; Step 2 is inhibited by the -no-site-file command line switch.
+ − 164 ;; Steps 3 and 4 are inhibited (as a unit) by the -no-init-file
+ − 165 ;; command line switch (-q is a convenient synonym). Step 5 is
+ − 166 ;; inhibited by -no-init-file or a non-nil value of
+ − 167 ;; `inhibit-default-init' (set it in the init file). From now on the
+ − 168 ;; hooks and the site initialization files will be ignored.
+ − 169
+ − 170 ;; The custom file and the init file contain customizations managed by
+ − 171 ;; XEmacs itself via the Custom subsystem and manual customizations,
+ − 172 ;; respectively. Originally both were placed in the same file,
+ − 173 ;; usually ~/.emacs, but occasionally XEmacs would trash user settings
+ − 174 ;; when automatically changing options, and more frequently users
+ − 175 ;; would trash the automatically generated code. So these functions
+ − 176 ;; have been reallocated to separate files, usually named custom.el
+ − 177 ;; and init.el, respectively.
+ − 178
+ − 179 ;; The Custom system is accessed most conveniently from the
+ − 180 ;; Options->Advanced (Customize) menu (also, the Options->Fonts and
+ − 181 ;; Options->Sizes menus are implicitly managed by Custom, and
+ − 182 ;; Options->Edit Faces explicitly invokes Custom). You can also use
+ − 183 ;; the suite of customize commands directly (cf C-h a customize RET).
+ − 184 ;; Currently, Custom possesses specialized facilities for setting
+ − 185 ;; ordinary variables of many types, and for customizing faces. As a
+ − 186 ;; general rule, variable and face initialization should be done using
+ − 187 ;; Custom, and other initializations should be done in the init file.
+ − 188
+ − 189 ;; A possible exception is a subsystem with its own complex init file,
+ − 190 ;; eg, Gnus and .gnus. In these cases it is often preferable to keep
+ − 191 ;; even simple variable initializations together, and you may wish to
+ − 192 ;; maintain these configurations by hand.
+ − 193
+ − 194 ;; You should avoid editing the custom file by hand. The syntax used
+ − 195 ;; is complex but concise, and it is easy to silently break the whole
+ − 196 ;; file with a single error that happens to result in a valid Lisp
+ − 197 ;; form. On the other hand, the init file is just a Lisp library that
+ − 198 ;; is loaded before starting the read-eval-redisplay loop.
+ − 199
+ − 200 ;; The interactions between the custom file and other init files are
+ − 201 ;; governed by a simple idea:
+ − 202
+ − 203 ;; Custom to User: ALL VARIABLES YOURS OURS NOW ARE.
+ − 204
+ − 205 ;; To be precise, Custom is pretty good about noticing and respecting
+ − 206 ;; existing settings in interactive use. However, it is weak in
+ − 207 ;; understanding advanced use of specifier variables (these are used
+ − 208 ;; for customizations which depend on display characteristics and
+ − 209 ;; configuration in complex ways), and can be quite brutal at
+ − 210 ;; initialization.
+ − 211
+ − 212 ;; Normal practice for Custom at initialization is to (1) reset all
+ − 213 ;; customized faces before applying customizations and (2) force all
+ − 214 ;; variables to the values specified in custom.el. For this reason,
+ − 215 ;; and because it is generally the case that the init file can
+ − 216 ;; usefully depend on customized variables, but Custom pays no
+ − 217 ;; attention to behavior of the init file, it is probably a good idea
+ − 218 ;; to force custom.el to be loaded before the init file. (As
+ − 219 ;; mentioned, this will probably become the default in future versions
+ − 220 ;; of XEmacs.)
+ − 221
+ − 222 ;; To enable early loading of custom.el, uncomment the following line:
+ − 223 ;(setq Init-inhibit-custom-file-p (not (assoc custom-file load-history)))
+ − 224
+ − 225 ;; Code to implement early loading where late loading is the default.
+ − 226 ;; A crucial snippet of code must be the last thing in this file.
+ − 227
+ − 228 ;; defvars only initialize uninitialized variables; if the setq above
+ − 229 ;; is active, the variable below is defined but the value will not be
+ − 230 ;; altered.
+ − 231 (defvar Init-inhibit-custom-file-p nil
+ − 232 "Internal user init flag. Don't use this yourself.
+ − 233
+ − 234 Non-nil if we need to inhibit XEmacs from loading custom.el after init.el.")
+ − 235
+ − 236 (when Init-inhibit-custom-file-p
+ − 237 ;; This is the default custom-file.
+ − 238 (let ((file (expand-file-name "~/.xemacs/custom.el")))
+ − 239 (add-one-shot-hook 'after-init-hook
+ − 240 `(lambda () (setq custom-file ,file)))
+ − 241 (cond ((file-readable-p file)
+ − 242 (load file))
+ − 243 ((file-exists-p file)
+ − 244 (warn "Existing custom file \"%s\" is not readable!" file)))
+ − 245 (cond ((not (file-exists-p file))
+ − 246 (display-warning ' resource
+ − 247 (format "Custom file \"%s\" not found." file)
+ − 248 'info))
+ − 249 ((not (file-writable-p file))
+ − 250 (warn "Existing custom file \"%s\" is not writable!" file)))))
+ − 251
+ − 252
+ − 253 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
462
+ − 254 ;; Basic Customization ;;
+ − 255 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 256
+ − 257 ;; TIP: Control-L characters are ignored in Lisp files and are the
+ − 258 ;; standard way of indicating major section divisions. You can enter
+ − 259 ;; such a character using C-q C-l.
+ − 260
+ − 261 ;; Define a variable to indicate whether we're running XEmacs/Lucid
+ − 262 ;; Emacs. (You do not have to defvar a global variable before using
+ − 263 ;; it -- you can just call `setq' directly. It's clearer this way,
+ − 264 ;; though. Note also how we check if this variable already exists
+ − 265 ;; using `boundp', because it's defined in recent versions of
+ − 266 ;; XEmacs.)
+ − 267
+ − 268 (or (boundp 'running-xemacs)
+ − 269 (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)))
+ − 270
+ − 271 ;; Define a function to make it easier to check which version we're
+ − 272 ;; running. This function already exists in recent XEmacs versions,
+ − 273 ;; and in fact all we've done is copied the definition. Note again
+ − 274 ;; how we check to avoid clobbering an existing definition. (It's good
+ − 275 ;; style to do this, in case some improvement was made to the
1959
+ − 276 ;; already-existing function -- otherwise we might substitute an older
462
+ − 277 ;; definition and possibly break some code elsewhere.)
+ − 278 ;;
+ − 279 ;; NOTE ALSO: It is in general *NOT* a good idea to do what we're
+ − 280 ;; doing -- i.e. provide a definition of a function that is present in
+ − 281 ;; newer versions of XEmacs but not older ones. The reason is that it
+ − 282 ;; may confuse code that notices the presence of the function and
+ − 283 ;; proceeds to use it and other functionality that goes along with it
+ − 284 ;; -- but which we may not have defined. What's better is to create
+ − 285 ;; the function with a different name -- typically, prefix it with the
+ − 286 ;; name of your module, which in this case might be `Init-'. For
+ − 287 ;; `emacs-version>=' we make an exception because (a) the function has
+ − 288 ;; been around a long time, (b) there isn't really any other
+ − 289 ;; functionality that is paired with it, (c) it's definition hasn't
+ − 290 ;; changed and isn't likely to, and (d) the calls to `emacs-version>='
+ − 291 ;; or its renamed replacement would be scattered throughout the code
+ − 292 ;; below, and with a replacement name the code would become
+ − 293 ;; significantly less portable into someone else's init.el file. (BUT
+ − 294 ;; NOTE BELOW: We do follow the procedure outlined above with renaming
+ − 295 ;; in a different case where the specifics are much different.)
+ − 296 ;;
+ − 297 ;; TIP: At this point you may be wondering how I wrote all these nice,
+ − 298 ;; long, nicely-justified textual stretches -- didn't I go crazy
+ − 299 ;; sticking in the semicolons everywhere and having to delete them and
+ − 300 ;; rearrange everything whenever I wanted to make any corrections to
+ − 301 ;; the text? The answer is -- of course not! Use M-q. This does all
+ − 302 ;; the magic for you, justifying and breaking lines appropriately and
+ − 303 ;; putting any necessary semicolons or whatever at the left (it
+ − 304 ;; figures out what this ought to be by looking in a very clever
+ − 305 ;; fashion at what's already at the beginning of each line in the
+ − 306 ;; paragraph). You may need `filladapt' set up (it's done below in
+ − 307 ;; this file) in order for this to work properly. Finally, if you
+ − 308 ;; want to turn on automatic filling (like in a word processor, but
+ − 309 ;; not quite as automatic), use M-x auto-fill-mode or the binding set
+ − 310 ;; up below in this file (Meta-F9).
+ − 311
+ − 312 (or (fboundp 'emacs-version>=)
+ − 313 (defun emacs-version>= (major &optional minor patch)
+ − 314 "Return true if the Emacs version is >= to the given MAJOR, MINOR,
+ − 315 and PATCH numbers.
+ − 316 The MAJOR version number argument is required, but the other arguments
+ − 317 argument are optional. Only the Non-nil arguments are used in the test."
+ − 318 (let ((emacs-patch (or emacs-patch-level emacs-beta-version -1)))
+ − 319 (cond ((> emacs-major-version major))
+ − 320 ((< emacs-major-version major) nil)
+ − 321 ((null minor))
+ − 322 ((> emacs-minor-version minor))
+ − 323 ((< emacs-minor-version minor) nil)
+ − 324 ((null patch))
+ − 325 ((>= emacs-patch patch))))))
+ − 326
+ − 327 ;; 19.13 was released ages ago (Sep. 1995), and lots of graphic and
+ − 328 ;; window-system stuff doesn't work before then.
+ − 329
+ − 330 (or (not running-xemacs)
+ − 331 (emacs-version>= 19 13)
+ − 332 (error "This init file does not support XEmacs before 19.13"))
+ − 333
+ − 334 ;; Here are some example code snippets that you can use if you need to
+ − 335 ;; conditionalize on a particular version of Emacs (in general, though,
+ − 336 ;; it is much better to use `fboundp', `featurep', or other such
+ − 337 ;; feature-specific checks rather than version-specific checks):
+ − 338
+ − 339 ; (cond ((and running-xemacs
+ − 340 ; (emacs-version>= 21 2))
+ − 341 ; ;;
+ − 342 ; ;; Code requiring XEmacs version 21.2 or newer goes here
+ − 343 ; ;;
+ − 344 ; ))
+ − 345
+ − 346 ; (cond ((emacs-version >= 19 0)
+ − 347 ; ;;
+ − 348 ; ;; Code for any vintage-19 Emacs goes here
+ − 349 ; ;;
+ − 350 ; ))
+ − 351
+ − 352 ; (cond ((and (not running-xemacs)
+ − 353 ; (emacs-version>= 20 0))
+ − 354 ; ;;
+ − 355 ; ;; Code specific to GNU Emacs 20 or newer (not XEmacs) goes here
+ − 356 ; ;;
+ − 357 ; ))
+ − 358
558
+ − 359 (defun Init-safe-require (feat)
+ − 360 "Try to REQUIRE the specified feature. Errors occurring are silenced.
+ − 361 \(Perhaps in the future there will be a way to get at the error.)
+ − 362 Returns t if the feature was successfully required."
+ − 363 (condition-case nil
+ − 364 (progn (require feat) t)
+ − 365 (error nil)))
+ − 366
462
+ − 367
+ − 368 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 369 ;; Key Definitions ;;
+ − 370 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 371
+ − 372 ;;; Set up the function keys to do common tasks to reduce Emacs pinky
+ − 373 ;;; and such.
+ − 374
+ − 375 ;; You can set a key sequence either to a command or to another key
+ − 376 ;; sequence. (Use `C-h k' to map a key sequence to its command. Use
+ − 377 ;; `C-h w' to go the other way.) In general, however, it works better
+ − 378 ;; to specify the command name. For example, it does not currently
+ − 379 ;; work to say
+ − 380
+ − 381 ;; (global-set-key 'f5 "\C-x\C-f")
+ − 382
+ − 383 ;; The reason is that macros (which is what the string on the right
+ − 384 ;; really is) can't currently use the minibuffer. This is an
+ − 385 ;; extremely longstanding bug in Emacs. Eventually, it will be
+ − 386 ;; fixed. (Hopefully ..)
+ − 387
+ − 388 ;; Note also that you may sometimes see the idiom
+ − 389
+ − 390 ;; (define-key global-map ...)
+ − 391
+ − 392 ;; in place of (global-set-key ...). These are exactly the same.
+ − 393
+ − 394 ;; Here I've tried to put all the most common commands on simple
+ − 395 ;; non-modifier function keys to take the pressure off your modifier
+ − 396 ;; fingers. Furthermore, on my keyboard at least, the function keys
+ − 397 ;; are grouped into three groups of four with spaces between them, and
+ − 398 ;; so it's easier to hit the keys at the edge of the groups --
+ − 399 ;; i.e. f1, f4, f5, f8, f9, and f12. Finally, you may note that f9,
+ − 400 ;; f11, and f12 are purposely left blank. [F6 is defined below.]
+ − 401 ;; That's because I use them for _, {, and } -- see below.
+ − 402
+ − 403 (global-set-key 'f1 'advertised-undo) ;; Undo
+ − 404 (global-set-key 'f2 'kill-primary-selection) ;; Cut
+ − 405 (global-set-key 'f3 'copy-primary-selection) ;; Copy
+ − 406 (global-set-key 'f4 'yank-clipboard-selection) ;; Paste
+ − 407 (global-set-key 'f5 'find-file) ;; C-x C-f
+ − 408 (global-set-key 'f7 'save-buffer) ;; C-x C-s
+ − 409
+ − 410 ;; I considered having this retain the current column after killing
+ − 411 ;; the line, but that messes up the common idiom `f8 move-cursor f4'.
+ − 412
+ − 413 (defun Init-kill-entire-line (&optional arg)
464
+ − 414 "Kill the entire line.
+ − 415 With prefix argument, kill that many lines from point. Negative
+ − 416 arguments kill lines backward.
+ − 417
+ − 418 When calling from a program, nil means \"no arg\",
+ − 419 a number counts as a prefix arg."
462
+ − 420 (interactive "*P")
+ − 421 (let ((kill-whole-line t))
+ − 422 (beginning-of-line)
+ − 423 (call-interactively 'kill-line)))
+ − 424
+ − 425 (global-set-key 'f8
+ − 426 (if (fboundp 'kill-entire-line) 'kill-entire-line 'Init-kill-entire-line))
+ − 427
+ − 428 ;; A keystroke repeated incredible amounts of times. We need to patch
+ − 429 ;; into the isearch keymap so that repeat searches while in isearch
+ − 430 ;; mode still work. Here we show how to make a key in a keymap have the
+ − 431 ;; same binding as another key in the keymap, without knowing what the
+ − 432 ;; binding is in advance; instead, we find it with `lookup-key'. This
+ − 433 ;; way, if the binding of C-s changes (e.g. to a different function) but
+ − 434 ;; the meaning is basically the same, we automatically do the right thing.
+ − 435 ;; If we put in the actual binding, which is 'isearch-repeat-forward,
+ − 436 ;; this automatic tracking wouldn't happen.
+ − 437 ;;
+ − 438 ;; TIP: To find out what the (lookup-key ...) expression evaluates to,
+ − 439 ;; move just to the right of the closing paren and type C-x C-e.
+ − 440
+ − 441 (global-set-key 'f10 'isearch-forward)
+ − 442 (define-key isearch-mode-map 'f10 (lookup-key isearch-mode-map "\C-s"))
+ − 443 (define-key minibuffer-local-isearch-map 'f10
+ − 444 (lookup-key minibuffer-local-isearch-map "\C-s"))
+ − 445 (global-set-key '(shift f10) 'isearch-backward)
+ − 446 (define-key isearch-mode-map '(shift f10) (lookup-key isearch-mode-map "\C-r"))
+ − 447 (define-key minibuffer-local-isearch-map '(shift f10)
+ − 448 (lookup-key minibuffer-local-isearch-map "\C-r"))
+ − 449
+ − 450 ;; Here we define our own function and then bind a key to it.
+ − 451
+ − 452 (defun start-or-end-kbd-macro ()
+ − 453 ;; A doc string. This is optional.
+ − 454 "Start defining a keyboard macro, or stop if we're already defining."
+ − 455 ;; IMPORTANT: Any function bound to a key MUST have an interactive spec,
+ − 456 ;; usually just the following line:
+ − 457 (interactive)
+ − 458 (if defining-kbd-macro
+ − 459 (end-kbd-macro)
+ − 460 (start-kbd-macro nil)))
+ − 461
+ − 462 ;; The macros used to have their place in the function keys, but I
+ − 463 ;; find that I use them significantly less than the really basic
+ − 464 ;; things on the function keys. When using a macro, you call the
+ − 465 ;; macro much more than define it, so the setup below makes some
+ − 466 ;; sense.
+ − 467
+ − 468 (global-set-key '(shift kp-multiply) 'start-or-end-kbd-macro)
+ − 469 (global-set-key 'kp-multiply 'call-last-kbd-macro) ;; C-x e
+ − 470
+ − 471 ;; Note that you can refer to a key sequence either using an ASCII
+ − 472 ;; string or the "long way", with vectors and conses. You saw above
+ − 473 ;; (in a comment) the string form for specifying the key sequence `C-x
+ − 474 ;; C-f', which is "\C-x\C-f". (For those curious, \C-x is just an
+ − 475 ;; escape sequence that puts a ^X character into the string. Thus,
+ − 476 ;; the string just mentioned really just contains two characters, a ^X
+ − 477 ;; and a ^F.) The long way to specify the sequence `C-x C-f' would be
+ − 478 ;;
+ − 479 ;; [(control x) (control f)]
+ − 480 ;;
+ − 481 ;; The long format lets you specify all possible key sequences, while the
+ − 482 ;; string form only lets you specify sequences involving ASCII characters
+ − 483 ;; and/or modifiers and in fact only a subset of them.
+ − 484 ;;
+ − 485 ;; Other examples are:
+ − 486 ;;
+ − 487 ;; [(control x) n]
+ − 488 ;;
+ − 489 ;; (You can leave out the parens when there is no modifier specified in
+ − 490 ;; the keystroke, and that's normally done.)
+ − 491 ;;
+ − 492 ;; [(shift control meta left)]
+ − 493 ;;
+ − 494 ;; (You can put more than one modifier in a keystroke.)
+ − 495 ;;
+ − 496 ;; (shift control meta left)
+ − 497 ;;
+ − 498 ;; (This is the same as the previous. when there's only one keystroke in
+ − 499 ;; the sequence, you can leave out the brackets, and that's normally
+ − 500 ;; done.)
+ − 501 ;;
+ − 502 ;; [(control x) (shift button3)]
+ − 503 ;;
+ − 504 ;; (You can refer to mouse buttons just like keys -- apply modifiers,
+ − 505 ;; intermingle them in key sequences, etc. But there's only problem
+ − 506 ;; here, which is that with the mouse you don't just have one possible
+ − 507 ;; gesture, like with keys. You'd really like to control button-down,
+ − 508 ;; button-up, button-click (down and up without selecting anything),
+ − 509 ;; button drag, button double-click, etc. This is normally done by
+ − 510 ;; binding your key sequence to `mouse-track', and then putting hooks
+ − 511 ;; onto `mouse-track-click-hook', `mouse-track-drag-up-hook', etc. to
+ − 512 ;; customize the specific behavior.)
+ − 513 ;;
+ − 514 ;; 'left
+ − 515 ;;
+ − 516 ;; (Ultimate reductionism -- no brackets, no parens. This is the form, in
+ − 517 ;; that, that the 'f1, 'f2, etc. took, which where in fact "long"
+ − 518 ;; forms.)
+ − 519 ;;
+ − 520 ;; '(control C)
+ − 521 ;;
+ − 522 ;; (You cannot use '(control shift c) here. This applies whenever Shift +
+ − 523 ;; key translates to a single character. Note also that you can't use
+ − 524 ;; "\C-C" either; this refers to the non-shifted C-c, just like "\C-c"
+ − 525 ;; would.)
+ − 526 ;;
+ − 527 ;; '(control \()
+ − 528 ;; (Put a backslash in front of characters used in Lisp syntax.)
+ − 529 ;;
+ − 530 ;; Also, you can find out the name of a key using C-h c. WARNING:
+ − 531 ;; This does not report the correct name of the keys named `delete',
+ − 532 ;; `backspace', `return', `tab', `space', `escape', and `linefeed'!
+ − 533 ;; (More correct results can be achieved using
+ − 534 ;;
+ − 535 ;; ESC : (read-key-sequence "foo: ")
+ − 536 ;;
+ − 537 ;; .)
+ − 538
+ − 539 ;;;;;;;;;;;;;;;;;;;;;;;;
+ − 540
+ − 541 ;; Keystrokes to conveniently switch buffers.
+ − 542
+ − 543 ;; F6 is invaluable for flipping back and forth between two buffers
+ − 544 ;; you're working with.
+ − 545
+ − 546 (global-set-key 'f6 'switch-to-other-buffer) ;; M-C-l
+ − 547
+ − 548 ;;;;;;;;;;;;;;;;;;;;;;;;
+ − 549
+ − 550 ;; Other text keystrokes.
+ − 551
+ − 552 ;; Make a keystroke to insert a literal TAB character. (`C-q TAB' is
+ − 553 ;; annoying because difficult to repeat.) Note that this does not work
+ − 554 ;; in TTY frames, where TAB and Shift-TAB are indistinguishable.
+ − 555 (define-key global-map '(shift tab) 'tab-to-tab-stop)
+ − 556
+ − 557 ;; Toggle auto-filling. Useful with text but annoying with code. You
+ − 558 ;; can manually fill with M-q.
+ − 559 (global-set-key '(meta f9) 'auto-fill-mode)
+ − 560
+ − 561 ;; You cannot say '(meta shift t) here -- see above.
+ − 562 (if (fboundp 'transpose-line-down)
+ − 563 (global-set-key '(meta T) 'transpose-line-down))
+ − 564 (if (fboundp 'transpose-line-up)
+ − 565 (global-set-key '(control T) 'transpose-line-up))
+ − 566
+ − 567 ;;;;;;;;;;;;;;;;;;;;;;;;
+ − 568
+ − 569 ;; Rearrange some inconvenient bindings.
+ − 570
+ − 571 ;; ESC ESC ESC is a useful command, but too long. ESC ESC would be
+ − 572 ;; much more logical, but interferes with Meta + keypad/arrow keys on
+ − 573 ;; TTY's. But most people only use window systems and no such problem
+ − 574 ;; exists there, so set up the more logical binding there.
+ − 575 ;;
+ − 576 ;; Note also the use of if vs. cond/when/unless/or/and to express
+ − 577 ;; conditional statements. The difference is purely stylistic.
+ − 578
+ − 579 (when (console-on-window-system-p)
+ − 580 (global-set-key '(meta escape) 'keyboard-escape-quit)
+ − 581 (define-key isearch-mode-map '(meta escape) 'isearch-cancel))
+ − 582
+ − 583 ;; The standard definition of C-z causes iconification on window
+ − 584 ;; systems, which is both useless and annoying. Instead, bind it to a
+ − 585 ;; useful command that's not on any keys. (This also makes a neat
+ − 586 ;; parallelism with M-z, which does zap-to-char.) Don't override the
+ − 587 ;; TTY binding, which does "Suspend". If you want this new binding on
+ − 588 ;; TTY's, and can train yourself to use C-x C-z to suspend, then
+ − 589 ;; remove or comment out the `when' statement. (Here's the proper way
+ − 590 ;; to comment out such a statement:
+ − 591 ;;
+ − 592 ;; ;(when (console-on-window-system-p)
+ − 593 ;; (global-set-key "\C-z" 'zap-up-to-char)
+ − 594 ;; ; )
+ − 595 ;;
+ − 596 ;; To do this, I first moved the closing paren to a new line,
+ − 597 ;; reindented with TAB, then added the semicolons.)
+ − 598
+ − 599 (when (console-on-window-system-p)
+ − 600 (global-set-key "\C-z" 'zap-up-to-char))
+ − 601
+ − 602 ;; When not on a TTY, remove the binding of C-x C-c, which normally
+ − 603 ;; exits XEmacs. It's easy to hit this by mistake, and that can be
+ − 604 ;; annoying. You can always quit with the "Exit XEmacs" option on the
+ − 605 ;; File menu.
+ − 606
+ − 607 (when (console-on-window-system-p)
771
+ − 608 (global-set-key "\C-x\C-c"
+ − 609 #'(lambda () (interactive)
+ − 610 (beep)
+ − 611 (message "Use the \"File/Exit XEmacs\" menu item to exit XEmacs"))))
462
+ − 612
+ − 613 ;; Make C-k always delete the whole line, which is what most people want,
+ − 614 ;; anyway.
+ − 615 (setq kill-whole-line 'always)
+ − 616 ;; M-k does the old behavior (kill to end of line).
+ − 617 (global-set-key '(meta k) #'(lambda ()
+ − 618 (interactive)
+ − 619 (if (fboundp 'historical-kill-line)
+ − 620 (call-interactively #'historical-kill-line)
+ − 621 (let ((kill-whole-line nil))
+ − 622 (call-interactively #'kill-line)))))
+ − 623 ;; and Meta-Shift-K does what used to be on M-k, and should
+ − 624 ;; (hopefully) even work under TTY's.
+ − 625 (global-set-key '(meta K) 'kill-sentence)
+ − 626
+ − 627 ;; Make sure we get Windows-like shifted-motion key selection behavior
+ − 628 ;; on recent XEmacs versions.
558
+ − 629 (cond ((boundp 'shifted-motion-keys-select-region)
+ − 630 (setq shifted-motion-keys-select-region t))
+ − 631 ;; otherwise, try the pc-select package --
+ − 632 ((Init-safe-require 'pc-select)
+ − 633 (pc-select-mode 1)))
462
+ − 634
+ − 635 ;; The following commented-out code rearranges the keymap in an
+ − 636 ;; unconventional but extremely useful way for programmers. Parens
+ − 637 ;; and braces are both available without using the shift key (using
+ − 638 ;; the bracket keys and f11/f12, respectively). Brackets (much less
+ − 639 ;; used) are the shifted versions of the new paren keys (i.e. where
+ − 640 ;; the braces normally are).
+ − 641 ;;
+ − 642 ;; The idea for this comes from Jamie Zawinski.
+ − 643 ;;
+ − 644 ;; Also make a convenient keystroke for _, used constantly in C code.
+ − 645 ;;
+ − 646 ;; NOTE: you can (semi-) conveniently uncomment a region using
+ − 647 ;; C-u M-x comment-region, or the "Uncomment Region" menu item on the
+ − 648 ;; Lisp menu in new enough versions of XEmacs.
+ − 649
+ − 650 ;(keyboard-translate ?[ ?()
+ − 651 ;(keyboard-translate ?] ?))
+ − 652 ;(keyboard-translate ?{ ?[)
+ − 653 ;(keyboard-translate ?} ?])
+ − 654 ;;; We don't use `keyboard-translate' for these because it messes up
+ − 655 ;;; bindings for M-F9 and the like.
+ − 656 ;(define-key key-translation-map 'f11 "{")
+ − 657 ;(define-key key-translation-map 'f12 "}")
+ − 658 ;(define-key key-translation-map 'f9 "_")
+ − 659
+ − 660
+ − 661 ;;;;;;;;;;;;;;;;;;;;;;;;
+ − 662
+ − 663 ;; Useful programming-related keystrokes.
+ − 664
+ − 665 (defun describe-foo-at-point ()
464
+ − 666 "Show the documentation of the Elisp function and variable near point.
+ − 667 This checks in turn:
+ − 668
+ − 669 -- for a function name where point is
+ − 670 -- for a variable name where point is
+ − 671 -- for a surrounding function call
+ − 672 "
462
+ − 673 (interactive)
+ − 674 (let (sym)
+ − 675 ;; sigh, function-at-point is too clever. we want only the first half.
+ − 676 (cond ((setq sym (ignore-errors
+ − 677 (with-syntax-table emacs-lisp-mode-syntax-table
+ − 678 (save-excursion
+ − 679 (or (not (zerop (skip-syntax-backward "_w")))
+ − 680 (eq (char-syntax (char-after (point))) ?w)
+ − 681 (eq (char-syntax (char-after (point))) ?_)
+ − 682 (forward-sexp -1))
+ − 683 (skip-chars-forward "`'")
+ − 684 (let ((obj (read (current-buffer))))
+ − 685 (and (symbolp obj) (fboundp obj) obj))))))
+ − 686 (describe-function sym))
+ − 687 ((setq sym (variable-at-point)) (describe-variable sym))
+ − 688 ;; now let it operate fully -- i.e. also check the
+ − 689 ;; surrounding sexp for a function call.
+ − 690 ((setq sym (function-at-point)) (describe-function sym)))))
+ − 691
+ − 692 (global-set-key '(shift f4) 'next-error) ;; C-x `
+ − 693 (global-set-key '(control f4) 'previous-error)
+ − 694 (global-set-key '(shift f5) 'find-library)
+ − 695 (global-set-key '(control f5) 'find-function)
+ − 696 (global-set-key '(meta f5) 'find-variable)
+ − 697 (global-set-key '(shift f11) 'describe-foo-at-point)
+ − 698 (global-set-key '(control f11) 'eval-last-sexp)
+ − 699 ;; Edebug is a source-level debugger for Emacs Lisp programs. Put
+ − 700 ;; the cursor at the end of a function definition and "instrument" it
+ − 701 ;; with this command; then, you can single step through it the next
+ − 702 ;; time it's run.
+ − 703 (global-set-key '(meta f11) 'edebug-defun)
+ − 704 (global-set-key '(meta f12) 'add-change-log-entry)
+ − 705
+ − 706 ;; This nicely parallels M-*, which pops the tag stack. See below for
+ − 707 ;; how to set up tags.
+ − 708 (global-set-key '(control *) 'find-tag-at-point)
+ − 709
+ − 710 ;; Define a function to conveniently determine where time is being
+ − 711 ;; spent when executing commands or Lisp code.
+ − 712 (defun toggle-profiling ()
+ − 713 "Start profiling, or stop it and print results.
+ − 714 This lets you figure out where time is being spent when executing Lisp code."
+ − 715 (interactive)
+ − 716 (if (profiling-active-p)
+ − 717 (progn
+ − 718 (stop-profiling)
+ − 719 (message "...Finished profiling")
+ − 720 (profile-results))
+ − 721 (message "Profiling...")
+ − 722 (clear-profiling-info)
+ − 723 (start-profiling)))
+ − 724
+ − 725 ;; Note that sequences of C-c plus a letter are specifically
+ − 726 ;; reserved for users and should never be bound by any packages.
+ − 727
+ − 728 (global-set-key "\C-cp" 'toggle-profiling)
+ − 729
+ − 730 ;; LISPM bindings of Control-Shift-C and Control-Shift-E.
+ − 731 ;; See comment above about bindings like this.
+ − 732 (define-key emacs-lisp-mode-map '(control C) 'compile-defun)
+ − 733 (define-key emacs-lisp-mode-map '(control E) 'eval-defun)
+ − 734
+ − 735 ;;;;;;;;;;;;;;;;;;;;;;;;
+ − 736
+ − 737 ;; Numeric keypad.
+ − 738
+ − 739 ;; The numeric keypad as a whole is underused, and it's a good source
+ − 740 ;; of keys to bind to commands. Here we add some useful bindings.
+ − 741 ;; Because this is a sample file and I want to avoid unpleasant
+ − 742 ;; surprises for novices, I don't actually bind the shared
+ − 743 ;; numeric/cursor-motion keys because
+ − 744 ;;
+ − 745 ;; (a) someone keypads don't have separate motion keys (e.g. laptops?), and
+ − 746 ;; (b) TTY's and some X servers might not distinguish the regular and
+ − 747 ;; numeric-keypad motion keys.
+ − 748
+ − 749 ;; `kill-current-buffer' (defined below) deletes the current
+ − 750 ;; buffer. (Don't worry, you will be prompted to save if it's
+ − 751 ;; modified.) By repeatedly pressing keypad-minus, you can
+ − 752 ;; conveniently reduce the number of open buffers to a manageable size
+ − 753 ;; after you've opened a whole bunch of files and finished working on
+ − 754 ;; them. Shift plus keypad-minus kills both the current buffer and
+ − 755 ;; its window, and Control plus keypad-minus kills just the current
+ − 756 ;; window.
+ − 757
+ − 758 (global-set-key 'kp-subtract 'kill-current-buffer)
+ − 759 (global-set-key '(shift kp-subtract) 'kill-current-buffer-and-window)
+ − 760 (global-set-key '(control kp-subtract) 'delete-window)
+ − 761 ;; Ugh, modes that use `suppress-keymap' and are dumped with XEmacs will
+ − 762 ;; need their own definition. There is no easy way to fix this.
+ − 763 (define-key help-mode-map 'kp-subtract 'kill-current-buffer)
+ − 764 (define-key help-mode-map '(shift kp-subtract)
+ − 765 'kill-current-buffer-and-window)
+ − 766 (define-key list-mode-map 'kp-subtract 'kill-current-buffer)
+ − 767 (define-key list-mode-map '(shift kp-subtract)
+ − 768 'kill-current-buffer-and-window)
+ − 769
+ − 770 (defun kill-current-buffer ()
464
+ − 771 "Kill the current buffer (prompting if it is modified)."
462
+ − 772 (interactive)
+ − 773 (kill-buffer (current-buffer)))
+ − 774
+ − 775 (defun kill-current-buffer-and-window ()
464
+ − 776 "Kill the current buffer (prompting if it is modified) and its window."
462
+ − 777 (interactive)
+ − 778 (kill-buffer (current-buffer))
+ − 779 (delete-window))
+ − 780
464
+ − 781 (defvar grep-all-files-history nil)
+ − 782
+ − 783 (defvar grep-all-files-omitted-expressions
+ − 784 '("*~" "#*" ".#*" ",*" "*.elc" "*.obj" "*.o" "*.exe" "*.dll" "*.lib" "*.a"
+ − 785 "*.dvi" "*.class" "*.bin")
+ − 786 "List of expressions matching files to be omitted in `grep-all-files-...'.
+ − 787 Each entry should be a simple name or a shell wildcard expression.")
+ − 788
+ − 789 (defvar grep-all-files-omitted-directories '("CVS" "RCS" "SCCS")
+ − 790 "List of directories not to recurse into in `grep-all-files-...'.
+ − 791 Each entry should be a simple name or a shell wildcard expression.")
+ − 792
+ − 793 (defun construct-grep-all-files-command (find-segment grep-segment)
+ − 794 (let ((omit-annoying
+ − 795 (mapconcat #'(lambda (wildcard)
+ − 796 (concat "-name '" wildcard "' -or "))
+ − 797 grep-all-files-omitted-expressions
+ − 798 "")))
+ − 799 (cond ((eq grep-find-use-xargs 'gnu)
+ − 800 (format "find . %s %s -type f -print0 | xargs -0 -e %s"
+ − 801 find-segment omit-annoying grep-segment))
+ − 802 (grep-find-use-xargs
+ − 803 (format "find . %s %s -type f -print | xargs %s"
+ − 804 find-segment omit-annoying grep-segment))
+ − 805 (t
+ − 806 (format "find . %s %s -type f -exec %s {} /dev/null \\;"
+ − 807 find-segment omit-annoying grep-segment)))))
462
+ − 808
464
+ − 809 (defun grep-all-files-in-current-directory (command)
+ − 810 "Run `grep' in all non-annoying files in the current directory.
+ − 811 `Non-annoying' excludes backup files, autosave files, CVS merge files, etc.
+ − 812 More specifically, this is controlled by `grep-all-files-omitted-expressions'.
+ − 813
+ − 814 This function does not recurse into subdirectories. If you want this,
+ − 815 use \\[grep-all-files-in-current-directory-and-below]."
+ − 816 (interactive
+ − 817 (progn
+ − 818 (require 'compile)
+ − 819 (list (read-shell-command "Run grep (like this): "
+ − 820 grep-command 'grep-all-files-history))))
462
+ − 821 (require 'compile)
464
+ − 822 (grep (construct-grep-all-files-command
+ − 823 "-name . -or -type d -prune -or" command)))
+ − 824
479
+ − 825 (defun grep-all-files-in-current-directory-and-below (command)
464
+ − 826 "Run `grep' in all non-annoying files in the current directory and below.
+ − 827 `Non-annoying' excludes backup files, autosave files, CVS merge files, etc.
+ − 828 More specifically, this is controlled by `grep-all-files-omitted-expressions'.
462
+ − 829
464
+ − 830 This function recurses into subdirectories. If you do not want this,
+ − 831 use \\[grep-all-files-in-current-directory]."
+ − 832 (interactive
+ − 833 (progn
+ − 834 (require 'compile)
+ − 835 (list (read-shell-command "Run grep (like this): "
+ − 836 grep-command 'grep-all-files-history))))
+ − 837 (require 'compile)
+ − 838 (grep (construct-grep-all-files-command
+ − 839 ;; prune all specified directories.
+ − 840 (mapconcat #'(lambda (wildcard)
+ − 841 (concat "-name '" wildcard "' -prune -or "))
+ − 842 grep-all-files-omitted-directories
+ − 843 "")
+ − 844 command)))
462
+ − 845
+ − 846 (defun clear-select ()
464
+ − 847 "Repeatedly select ever larger balanced expressions around the cursor.
+ − 848 Once you have such an expression marked, you can expand to the end of
+ − 849 the following expression with \\[mark-sexp] and to the beginning of the
+ − 850 previous with \\[backward-sexp]."
462
+ − 851 (interactive "_") ;this means "preserve the active region after this command"
+ − 852 (backward-up-list 1)
+ − 853 (let ((end (save-excursion (forward-sexp) (point))))
+ − 854 (push-mark end nil t)))
+ − 855
+ − 856 ;; #### no kp-divide because it doesn't (currently) work on MS Windows
+ − 857 ;; -- always reports as /. #### this should be fixable.
+ − 858 (global-set-key 'kp-add 'query-replace)
+ − 859 (global-set-key '(shift kp-add) 'query-replace-regexp)
464
+ − 860 (global-set-key '(control kp-add) 'grep-all-files-in-current-directory)
+ − 861 (global-set-key '(meta kp-add) 'grep-all-files-in-current-directory-and-below)
462
+ − 862 (global-set-key 'clear 'clear-select)
+ − 863 ;; Note that you can use a "lambda" expression (an anonymous function)
+ − 864 ;; in place of a function name. This function would be called
+ − 865 ;; `pop-local-mark' and lets you repeatedly cycle back through recent
+ − 866 ;; marks (marks are set whenever you begin a selection, begin a
+ − 867 ;; successful search, are about to jump to the beginning or end of the
+ − 868 ;; buffer, etc.).
+ − 869 (global-set-key 'kp-enter (lambda () (interactive) (set-mark-command t)))
+ − 870 (global-set-key '(shift kp-enter) 'repeat-complex-command)
464
+ − 871 (global-set-key 'pause 'repeat-complex-command) ;; useful on Windows-style kbds
462
+ − 872 (global-set-key '(control kp-enter) 'eval-expression)
+ − 873
+ − 874 ;;;;;;;;;;;;;;;;;;;;;;;;
+ − 875
+ − 876 ;; Misc.
+ − 877
+ − 878 ;; If you want button2 to insert the selected text
+ − 879 ;; at point (where the text cursor is), instead of at the
+ − 880 ;; position clicked, uncomment the following:
+ − 881
+ − 882 ;(setq mouse-yank-at-point t)
+ − 883
+ − 884 ;; If you like the FSF Emacs binding of button3 (single-click
+ − 885 ;; extends the selection, double-click kills the selection),
+ − 886 ;; uncomment the following:
+ − 887
+ − 888 ;(define-key global-map 'button3 'mouse-track-adjust)
+ − 889
+ − 890 ;(add-hook 'mouse-track-click-hook
+ − 891 ; (lambda (event count)
+ − 892 ; (if (or (/= (event-button event) 3)
+ − 893 ; (/= count 2))
+ − 894 ; nil ;; do the normal operation
+ − 895 ; (kill-region (point) (mark))
+ − 896 ; t ;; don't do the normal operations.
+ − 897 ; )))
+ − 898
+ − 899 ;; Uncomment this to enable "sticky modifier keys". With sticky
+ − 900 ;; modifier keys enabled, you can press and release a modifier key
+ − 901 ;; before pressing the key to be modified, like how the ESC key works
+ − 902 ;; always. If you hold the modifier key down, however, you still get
+ − 903 ;; the standard behavior. I personally think this is the best thing
+ − 904 ;; since sliced bread (and a *major* win when it comes to reducing
+ − 905 ;; Emacs pinky), but it's disorienting at first so I'm not enabling it
+ − 906 ;; here by default.
+ − 907
+ − 908 ;(setq modifier-keys-are-sticky t)
+ − 909
+ − 910 ;; Enable the command `narrow-to-region' ("C-x n n"). It's a useful
+ − 911 ;; command, but possibly confusing to a new user, so it's disabled by
+ − 912 ;; default.
+ − 913 (put 'narrow-to-region 'disabled nil)
+ − 914
+ − 915 ;; Enable obvious hyperlink following with button1.
+ − 916 (setq Info-button1-follows-hyperlink t)
+ − 917
+ − 918
+ − 919 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 920 ;; Change Some Basic Behaviors ;;
+ − 921 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 922
+ − 923 ;; Change the values of some variables.
+ − 924 ;; (t means true; nil means false.)
+ − 925 ;;
+ − 926 ;; Use C-h v or `Help->Commands, Variables, Keys->Describe Variable...'
+ − 927 ;; to find out what these variables mean.
+ − 928 (setq
+ − 929 find-file-compare-truenames t
+ − 930 minibuffer-max-depth nil
+ − 931 )
+ − 932
+ − 933 ;; When running ispell, consider all 1-3 character words as correct.
+ − 934 (setq ispell-extra-args '("-W" "3"))
+ − 935
+ − 936 ;;; pending-delete-mode causes typed text to replace a selection,
+ − 937 ;;; rather than append -- standard behavior under all window systems
+ − 938 ;;; nowadays.
+ − 939
558
+ − 940 (if (fboundp 'pending-delete-mode)
+ − 941 (pending-delete-mode 1))
462
+ − 942
+ − 943 ;;; NOTE: In this context, `windows-nt' actually refers to all MS
+ − 944 ;;; Windows operating systems!
+ − 945 (when (eq system-type 'windows-nt)
+ − 946 ;; Get mail working under Windows.
+ − 947 (setq send-mail-function 'smtpmail-send-it)
+ − 948 (setq smtpmail-debug-info t)
+ − 949 ;; Substitute your info here.
+ − 950 ;(setq user-mail-address "ben@xemacs.org")
+ − 951 ;(setq user-full-name "Ben Wing")
+ − 952 ;(setq smtpmail-smtp-server "pop.tcsn.uswest.net")
+ − 953
464
+ − 954 ;; Make Meta+accelerator traverse to the menu in new enough XEmacs
462
+ − 955 ;; versions. Note that this only overrides Meta bindings that would
464
+ − 956 ;; actually invoke a menu, and the most common commands that are
+ − 957 ;; overridden have preferred alternative bindings using the arrow
+ − 958 ;; keys. You can always access the overridden ones using
+ − 959 ;; Shift+Meta+Key. (Note that "Alt" and "Meta" normally refer to the
+ − 960 ;; same key, except on some Sun keyboards [where "Meta" is actually
+ − 961 ;; labelled with a diamond] or if you have explicitly made them
+ − 962 ;; different under X Windows using `xmodmap'.)
+ − 963 ;;
+ − 964 ;; More specifically, the following bindings are overridden:
+ − 965 ;;
+ − 966 ;; M-f (use C-right or Sh-M-f instead)
+ − 967 ;; M-e (use M-C-right or Sh-M-e instead)
+ − 968 ;; M-v (use Prior aka PgUp or Sh-M-v instead)
+ − 969 ;; M-m (use Sh-M-m instead)
+ − 970 ;; M-t (use Sh-M-t instead)
+ − 971 ;; M-o (normally undefined)
+ − 972 ;; M-b (use C-left or Sh-M-b instead)
+ − 973 ;; M-h (use M-e h or Sh-M-h instead)
+ − 974 ;; in Lisp mode, M-l (use Sh-M-l instead)
+ − 975 ;; in C mode, M-c (use Sh-M-c instead)
+ − 976
462
+ − 977 (setq menu-accelerator-enabled 'menu-force)
+ − 978
+ − 979 ;; Make Cygwin `make' work inside a shell buffer.
558
+ − 980 (if (boundp 'setenv) (setenv "MAKE_MODE" "UNIX")))
462
+ − 981
+ − 982 ;; This shows how to set up the XEmacs side of tags. (To create the
+ − 983 ;; TAGS table, use the `etags' program found in the XEmacs bin
+ − 984 ;; directory. Run it in the root directory of your source tree and
+ − 985 ;; specify all source and include files on the command line.)
+ − 986 ;(setq tag-table-alist
+ − 987 ; '(
+ − 988 ; ;; Everywhere in the /src/xemacs/gui/ source tree will use the TAGS
+ − 989 ; ;; file in /src/xemacs/gui/.
+ − 990 ; ("/src/xemacs/gui/" . "/src/xemacs/gui/")
+ − 991 ; ;; Everywhere in the /src/xemacs/mule/ source tree will use the TAGS
+ − 992 ; ;; file in /src/xemacs/mule/.
+ − 993 ; ("/src/xemacs/mule/" . "/src/xemacs/mule/")
+ − 994 ; ;; etc.
+ − 995 ; ("/src/xemacs/fixup/" . "/src/xemacs/fixup/")
+ − 996 ; ("/src/emacs/emacs-20.6/" . "/src/emacs/emacs-20.6/")
+ − 997 ; ("/src/xemacs/latest/" . "/src/xemacs/latest/")
+ − 998 ; ;; Everywhere else will use the TAGS file in
+ − 999 ; ;; /src/xemacs/fixup/.
+ − 1000 ; ("" . "/src/xemacs/fixup/")
+ − 1001 ; ))
+ − 1002
+ − 1003
+ − 1004 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 1005 ;; Change Some Aspects of GUI Appearance ;;
+ − 1006 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 1007
+ − 1008 ;; Changes the text in the window title bar, to switch to MS Windows
+ − 1009 ;; format (filename goes first, for best identification in icons) and
+ − 1010 ;; add the version and full executable path. (However, it is not
+ − 1011 ;; changed unless it currently has the default value, to avoid
+ − 1012 ;; interfering with a -wn command line argument I may have started
+ − 1013 ;; XEmacs with.)
+ − 1014
+ − 1015 (if (or (equal frame-title-format "%S: %b")
+ − 1016 (equal frame-title-format "%b - XEmacs"))
+ − 1017 (setq frame-title-format
+ − 1018 (concat "%b - XEmacs "
+ − 1019 (progn (string-match "\\(.*?\\)\\( XEmacs Lucid\\)?$"
+ − 1020 emacs-version)
+ − 1021 (match-string 1 emacs-version))
+ − 1022 " [" invocation-directory invocation-name "]")))
+ − 1023
+ − 1024 ;; Load some nifty sounds that will replace the default beep.
+ − 1025 ;;
+ − 1026 ;; (Note that sampled sounds only work if XEmacs was compiled with
+ − 1027 ;; sound support and we're running on MS Windows, on a machine which
+ − 1028 ;; has a NetAudio or ESD server, or on the console of a Linux, Sparc,
+ − 1029 ;; HP, or SGI machine. Otherwise, you just get the standard beep.)
+ − 1030
558
+ − 1031 (cond ((and (fboundp 'load-default-sounds)
+ − 1032 (or (and (getenv "DISPLAY")
+ − 1033 (string-match ":0" (getenv "DISPLAY")))
+ − 1034 (and (eq (console-type) 'mswindows)
+ − 1035 (device-sound-enabled-p))))
+ − 1036 (condition-case nil
+ − 1037 (progn
+ − 1038 (load-default-sounds)
+ − 1039 ;; On Windows, at least, the sound "quiet-beep", which is normally
+ − 1040 ;; given the symbolic name `quiet' and is used for Quit and such,
+ − 1041 ;; is just totally disgusting. So make this name correspond to a
+ − 1042 ;; more innocuous sound.
+ − 1043 (load-sound-file "drum-beep" 'quiet 80))
+ − 1044 (error nil)))
462
+ − 1045 (t
+ − 1046 (setq bell-volume 40)
+ − 1047 (setq sound-alist
+ − 1048 (append sound-alist '((no-completion :pitch 500))))
+ − 1049 ))
+ − 1050
+ − 1051 ;; Change the continuation glyph face so it stands out more
+ − 1052 (make-face-bold (glyph-face continuation-glyph))
+ − 1053
+ − 1054 ;; Change the pointer used during garbage collection.
+ − 1055 ;;
+ − 1056 ;; Note that this pointer image is rather large as pointers go,
+ − 1057 ;; and so it won't work on some X servers (such as the MIT
+ − 1058 ;; R5 Sun server) because servers may have lamentably small
+ − 1059 ;; upper limits on pointer size.
+ − 1060 ;;(if (featurep 'xpm)
+ − 1061 ;; (set-glyph-image gc-pointer-glyph
+ − 1062 ;; (expand-file-name "trash.xpm" data-directory)))
+ − 1063
+ − 1064 ;; Here's another way to do that: it first tries to load the
+ − 1065 ;; pointer once and traps the error, just to see if it's
+ − 1066 ;; possible to load that pointer on this system; if it is,
+ − 1067 ;; then it sets gc-pointer-glyph, because we know that
+ − 1068 ;; will work. Otherwise, it doesn't change that variable
+ − 1069 ;; because we know it will just cause some error messages.
+ − 1070 (if (featurep 'xpm)
+ − 1071 (let ((file (expand-file-name "recycle.xpm" data-directory)))
+ − 1072 (if (condition-case nil
+ − 1073 ;; check to make sure we can use the pointer.
+ − 1074 (make-image-instance file nil
+ − 1075 '(pointer))
+ − 1076 (error nil)) ; returns nil if an error occurred.
+ − 1077 (set-glyph-image gc-pointer-glyph file))))
+ − 1078
+ − 1079 ;(when (featurep 'menubar)
+ − 1080 ; ;; Add `dired' to the File menu
+ − 1081 ; (add-menu-button '("File") ["Edit Directory" dired])
+ − 1082
+ − 1083 ; ;; Here's a way to add scrollbar-like buttons to the menubar
+ − 1084 ; (add-menu-button nil ["Top" beginning-of-buffer])
+ − 1085 ; (add-menu-button nil ["<<<" scroll-down])
+ − 1086 ; (add-menu-button nil [" . " recenter])
+ − 1087 ; (add-menu-button nil [">>>" scroll-up])
+ − 1088 ; (add-menu-button nil ["Bot" end-of-buffer]))
+ − 1089
+ − 1090 ;; Here's a cute hack that shows how to programmatically change some
+ − 1091 ;; text colors. It changes the background color of the window if it's
+ − 1092 ;; not on the local machine, or if it's running as root:
+ − 1093
+ − 1094 ;; local emacs background: whitesmoke [i.e. the default color]
+ − 1095 ;; remote emacs background: palegreen1
+ − 1096 ;; root emacs background: coral2
+ − 1097
+ − 1098 ;; Uncomment to enable.
+ − 1099
+ − 1100 ;(cond
+ − 1101 ; ((and running-xemacs
+ − 1102 ; (console-on-window-system-p)
+ − 1103 ; ;; this does not make much sense on Windows.
+ − 1104 ; (not (eq system-type 'windows-nt)))
+ − 1105 ; (let* ((root-p (eq 0 (user-uid)))
+ − 1106 ; (dpy (or (getenv "DISPLAY") ""))
+ − 1107 ; (remote-p (not
+ − 1108 ; (or (string-match "^\\(\\|unix\\|localhost\\):" dpy)
+ − 1109 ; (let ((s (system-name)))
+ − 1110 ; (if (string-match "\\.\\(netscape\\|mcom\\)\\.com" s)
+ − 1111 ; (setq s (substring s 0 (match-beginning 0))))
+ − 1112 ; (string-match (concat "^" (regexp-quote s)) dpy)))))
+ − 1113 ; (bg (cond (root-p "coral2")
+ − 1114 ; (remote-p "palegreen1")
+ − 1115 ; (t nil))))
+ − 1116 ; (cond (bg
+ − 1117 ; (let ((def (color-name (face-background 'default)))
+ − 1118 ; (faces (face-list)))
+ − 1119 ; (while faces
+ − 1120 ; (let ((obg (face-background (car faces))))
+ − 1121 ; (if (and obg (equal def (color-name obg)))
+ − 1122 ; (set-face-background (car faces) bg)))
+ − 1123 ; (setq faces (cdr faces)))))))))
+ − 1124
+ − 1125
+ − 1126 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 1127 ;; Changing the Modeline ;;
+ − 1128 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 1129
+ − 1130 ;; Enable line numbers and column numbers. This is done in C code now
+ − 1131 ;; and is very fast.
+ − 1132 (line-number-mode 1)
+ − 1133 (column-number-mode 1)
+ − 1134
+ − 1135 ;; Rearrange the modeline so that everything is to the left of the
+ − 1136 ;; long list of minor modes, which is relatively unimportant but takes
+ − 1137 ;; up so much room that anything to the right is obliterated.
+ − 1138
+ − 1139 (setq-default
+ − 1140 modeline-format
+ − 1141 (list
+ − 1142 ""
+ − 1143 (if (boundp 'modeline-multibyte-status) 'modeline-multibyte-status "")
+ − 1144 (cons modeline-modified-extent 'modeline-modified)
+ − 1145 (cons modeline-buffer-id-extent
+ − 1146 (list (cons modeline-buffer-id-left-extent
+ − 1147 (cons 15 (list
+ − 1148 (list 'line-number-mode "L%l ")
+ − 1149 (list 'column-number-mode "C%c ")
+ − 1150 (cons -3 "%p"))))
+ − 1151 (cons modeline-buffer-id-right-extent "%17b")))
+ − 1152 " "
+ − 1153 'global-mode-string
+ − 1154 " %[("
+ − 1155 (cons modeline-minor-mode-extent
+ − 1156 (list "" 'mode-name 'minor-mode-alist))
+ − 1157 (cons modeline-narrowed-extent "%n")
+ − 1158 'modeline-process
+ − 1159 ")%]----"
+ − 1160 "%-"
+ − 1161 ))
+ − 1162
+ − 1163 ;; Get rid of modeline information taking up too much space -- in
+ − 1164 ;; particular, minor modes that are always enabled.
+ − 1165 (setq pending-delete-modeline-string "")
+ − 1166 (setq filladapt-mode-line-string "")
+ − 1167 ;; lazy-lock doesn't have a variable for its modeline name, so we have
+ − 1168 ;; to do a bit of surgery.
+ − 1169 (and (assoc 'lazy-lock-mode minor-mode-alist)
+ − 1170 (setcdr (cdr (cadr (assoc 'lazy-lock-mode minor-mode-alist))) ""))
+ − 1171
+ − 1172
+ − 1173
+ − 1174 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 1175 ;; Customization of Specific Packages ;;
+ − 1176 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ − 1177
+ − 1178
+ − 1179 ;;; ********************
+ − 1180 ;;; Load gnuserv, which will allow you to connect to XEmacs sessions
+ − 1181 ;;; using `gnuclient'.
+ − 1182
+ − 1183 ;; If you never run more than one XEmacs at a time, you might want to
+ − 1184 ;; always start gnuserv. Otherwise it is preferable to specify
+ − 1185 ;; `-f gnuserv-start' on the command line to one of the XEmacsen.
+ − 1186 ; (gnuserv-start)
+ − 1187
+ − 1188
+ − 1189 ;;; ********************
+ − 1190 ;;; Load efs, which uses the FTP protocol as a pseudo-filesystem.
+ − 1191 ;;; When this is loaded, the pathname syntax /user@host:/remote/path
+ − 1192 ;;; refers to files accessible through ftp.
+ − 1193 ;;;
558
+ − 1194 (Init-safe-require 'dired)
462
+ − 1195
558
+ − 1196 (or (Init-safe-require 'efs-auto) (Init-safe-require 'ange-ftp))
462
+ − 1197
+ − 1198 ;;; ********************
+ − 1199 ;;; Load the default-dir.el package which installs fancy handling of
+ − 1200 ;;; the initial contents in the minibuffer when reading file names.
558
+ − 1201 ;; #### but it seems to cause some breakage.
+ − 1202 ;(Init-safe-require 'default-dir))
462
+ − 1203
+ − 1204 ;;; ********************
+ − 1205 ;;; Put all of your autosave files in one place, instead of scattering
+ − 1206 ;;; them around the file system. This has many advantages -- e.g. it
+ − 1207 ;;; will eliminate slowdowns caused by editing files on a slow NFS
+ − 1208 ;;; server. (*Provided* that your home directory is local or on a
+ − 1209 ;;; fast server! If not, pick a value for `auto-save-directory' that
+ − 1210 ;;; is fast fast fast!)
+ − 1211 ;;;
+ − 1212 ;;; Unfortunately, the code that implements this (auto-save.el) is
558
+ − 1213 ;;; broken on Windows prior to 21.4.
462
+ − 1214 (unless (and (eq system-type 'windows-nt)
558
+ − 1215 (not (emacs-version>= 21 4)))
462
+ − 1216 (setq auto-save-directory (expand-file-name "~/.autosave/")
+ − 1217 auto-save-directory-fallback auto-save-directory
+ − 1218 auto-save-hash-p nil
+ − 1219 efs-auto-save t
+ − 1220 efs-auto-save-remotely nil
+ − 1221 ;; now that we have auto-save-timeout, let's crank this up
+ − 1222 ;; for better interactive response.
+ − 1223 auto-save-interval 2000
+ − 1224 )
+ − 1225 )
+ − 1226
+ − 1227
+ − 1228 ;;; ********************
+ − 1229 ;;; cc-mode (the mode you're in when editing C, C++, and Objective C files)
+ − 1230
+ − 1231 ;; Tell cc-mode not to check for old-style (K&R) function declarations.
+ − 1232 ;; This speeds up indenting a lot.
+ − 1233 (setq c-recognize-knr-p nil)
+ − 1234
+ − 1235 ;; Change the indentation amount to 4 spaces instead of 2.
+ − 1236 ;; You have to do it in this complicated way because of the
+ − 1237 ;; strange way the cc-mode initializes the value of `c-basic-offset'.
+ − 1238 ;; (add-hook 'c-mode-hook (lambda () (setq c-basic-offset 4)))
+ − 1239
+ − 1240
+ − 1241 ;;; ********************
+ − 1242 ;;; Load a partial-completion mechanism, which makes minibuffer completion
+ − 1243 ;;; search multiple words instead of just prefixes; for example, the command
+ − 1244 ;;; `M-x byte-compile-and-load-file RET' can be abbreviated as `M-x b-c-a RET'
+ − 1245 ;;; because there are no other commands whose first three words begin with
+ − 1246 ;;; the letters `b', `c', and `a' respectively.
+ − 1247 ;;;
558
+ − 1248 (Init-safe-require 'completer)
462
+ − 1249
+ − 1250
+ − 1251 ;;; ********************
+ − 1252 ;;; Load crypt, which is a package for automatically decoding and reencoding
+ − 1253 ;;; files by various methods - for example, you can visit a .Z or .gz file,
+ − 1254 ;;; edit it, and have it automatically re-compressed when you save it again.
+ − 1255 ;;;
+ − 1256 (setq crypt-encryption-type 'pgp ; default encryption mechanism
+ − 1257 crypt-confirm-password t ; make sure new passwords are correct
+ − 1258 ;crypt-never-ever-decrypt t ; if you don't encrypt anything, set this to
+ − 1259 ; tell it not to assume that "binary" files
+ − 1260 ; are encrypted and require a password.
+ − 1261 )
558
+ − 1262 (Init-safe-require 'crypt)
462
+ − 1263
+ − 1264
+ − 1265 ;;; ********************
1959
+ − 1266 ;;; Filladapt is an adaptive text-filling package. When it is enabled it
462
+ − 1267 ;;; makes filling (e.g. using M-q) much much smarter about paragraphs
+ − 1268 ;;; that are indented and/or are set off with semicolons, dashes, etc.
+ − 1269
558
+ − 1270 (Init-safe-require 'filladapt)
462
+ − 1271 (setq-default filladapt-mode t)
558
+ − 1272 (when (fboundp 'turn-off-filladapt-mode)
+ − 1273 (add-hook 'c-mode-hook 'turn-off-filladapt-mode)
+ − 1274 (add-hook 'outline-mode-hook 'turn-off-filladapt-mode))
462
+ − 1275
+ − 1276
+ − 1277 ;;; ********************
+ − 1278 ;;; Font-Lock is a syntax-highlighting package. When it is enabled and you
+ − 1279 ;;; are editing a program, different parts of your program will appear in
+ − 1280 ;;; different fonts or colors. For example, with the code below, comments
+ − 1281 ;;; appear in red italics, function names in function definitions appear in
+ − 1282 ;;; blue bold, etc. The code below will cause font-lock to automatically be
+ − 1283 ;;; enabled when you edit C, C++, Emacs-Lisp, and many other kinds of
+ − 1284 ;;; programs.
+ − 1285 ;;;
+ − 1286 ;;; The "Options" menu has some commands for controlling this as well.
+ − 1287 ;;;
+ − 1288 (cond (running-xemacs
+ − 1289
+ − 1290 ;; The commented-out code below is an example of setting up custom
+ − 1291 ;; font-lock colors.
+ − 1292
+ − 1293 ; ;; If you want the default colors, you could do this:
+ − 1294 ; ;; (setq font-lock-use-default-fonts nil)
+ − 1295 ; ;; (setq font-lock-use-default-colors t)
+ − 1296 ; ;; but I want to specify my own colors, so I turn off all
+ − 1297 ; ;; default values.
+ − 1298 ; (setq font-lock-use-default-fonts nil)
+ − 1299 ; (setq font-lock-use-default-colors nil)
+ − 1300
558
+ − 1301 (Init-safe-require 'font-lock)
462
+ − 1302
+ − 1303 ; ;; Mess around with the faces a bit. Note that you have
+ − 1304 ; ;; to change the font-lock-use-default-* variables *before*
+ − 1305 ; ;; loading font-lock, and wait till *after* loading font-lock
+ − 1306 ; ;; to customize the faces.
+ − 1307
+ − 1308 ; ;; string face is green
+ − 1309 ; (set-face-foreground 'font-lock-string-face "forest green")
+ − 1310
+ − 1311 ; ;; comments are italic and red; doc strings are italic
+ − 1312 ; (set-face-font 'font-lock-comment-face [italic])
+ − 1313 ; ;; Underlining comments looks terrible on tty's
+ − 1314 ; (set-face-underline-p 'font-lock-comment-face nil 'global 'tty)
+ − 1315 ; (set-face-highlight-p 'font-lock-comment-face t 'global 'tty)
+ − 1316 ; (copy-face 'font-lock-comment-face 'font-lock-doc-string-face)
+ − 1317 ; (set-face-foreground 'font-lock-comment-face "red")
+ − 1318
+ − 1319 ; ;; function names are bold and blue
+ − 1320 ; (set-face-font 'font-lock-function-name-face [bold])
+ − 1321 ; (set-face-foreground 'font-lock-function-name-face "blue")
+ − 1322
+ − 1323 ; ;; misc. faces
+ − 1324 ; (set-face-font 'font-lock-preprocessor-face [bold])
+ − 1325 ; (set-face-font 'font-lock-type-face [italic])
+ − 1326 ; (set-face-font 'font-lock-keyword-face [bold])
+ − 1327 ))
+ − 1328
+ − 1329
+ − 1330 ;;; ********************
+ − 1331 ;;; lazy-lock is a package which speeds up the highlighting of files
+ − 1332 ;;; by doing it "on-the-fly" -- only the visible portion of the
+ − 1333 ;;; buffer is fontified. The results may not always be quite as
+ − 1334 ;;; accurate as using full font-lock or fast-lock, but it's *much*
+ − 1335 ;;; faster. No more annoying pauses when you load files.
+ − 1336
558
+ − 1337 (if (fboundp 'turn-on-lazy-lock)
+ − 1338 (add-hook 'font-lock-mode-hook 'turn-on-lazy-lock))
+ − 1339
462
+ − 1340 ;; I personally don't like "stealth mode" (where lazy-lock starts
+ − 1341 ;; fontifying in the background if you're idle for 30 seconds)
558
+ − 1342 ;; because it takes too long to wake up again.
462
+ − 1343 (setq lazy-lock-stealth-time nil)
+ − 1344
+ − 1345
+ − 1346 ;;; ********************
+ − 1347 ;;; func-menu is a package that scans your source file for function
+ − 1348 ;;; definitions and makes a menubar entry that lets you jump to any
+ − 1349 ;;; particular function definition by selecting it from the menu. The
+ − 1350 ;;; following code turns this on for all of the recognized languages.
+ − 1351 ;;; Scanning the buffer takes some time, but not much.
+ − 1352 ;;;
+ − 1353 ;;; Send bug reports, enhancements etc to:
+ − 1354 ;;; David Hughes <ukchugd@ukpmr.cs.philips.nl>
+ − 1355 ;;;
558
+ − 1356 (cond ((and running-xemacs (Init-safe-require 'func-menu))
462
+ − 1357 (global-set-key '(shift f12) 'function-menu)
+ − 1358 (add-hook 'find-file-hooks 'fume-add-menubar-entry)
+ − 1359 (global-set-key "\C-cl" 'fume-list-functions)
+ − 1360 (global-set-key "\C-cg" 'fume-prompt-function-goto)
+ − 1361
+ − 1362 ;; The Hyperbole information manager package uses (shift button2) and
+ − 1363 ;; (shift button3) to provide context-sensitive mouse keys. If you
+ − 1364 ;; use this next binding, it will conflict with Hyperbole's setup.
+ − 1365 ;; Choose another mouse key if you use Hyperbole.
+ − 1366 (global-set-key '(shift button3) 'mouse-function-menu)
+ − 1367
+ − 1368 ;; For descriptions of the following user-customizable variables,
+ − 1369 ;; type C-h v <variable>
+ − 1370 (setq fume-max-items 25
+ − 1371 fume-fn-window-position 3
+ − 1372 fume-auto-position-popup t
+ − 1373 fume-display-in-modeline-p t
+ − 1374 fume-menubar-menu-name
+ − 1375 (if (fboundp 'submenu-generate-accelerator-spec)
+ − 1376 "Function%_s" "Functions")
+ − 1377 fume-buffer-name "*Function List*"
+ − 1378 fume-no-prompt-on-valid-default nil)
+ − 1379 ))
+ − 1380
+ − 1381
+ − 1382 ;;; ********************
+ − 1383 ;;; MH is a mail-reading system from the Rand Corporation that relies on a
+ − 1384 ;;; number of external filter programs (which do not come with emacs.)
+ − 1385 ;;; Emacs provides a nice front-end onto MH, called "mh-e".
+ − 1386 ;;;
+ − 1387 ;; Bindings that let you send or read mail using MH
+ − 1388 ;(global-set-key "\C-xm" 'mh-smail)
+ − 1389 ;(global-set-key "\C-x4m" 'mh-smail-other-window)
+ − 1390 ;(global-set-key "\C-cr" 'mh-rmail)
+ − 1391
+ − 1392 ;; Customization of MH behavior.
+ − 1393 (setq mh-delete-yanked-msg-window t)
+ − 1394 (setq mh-yank-from-start-of-msg 'body)
+ − 1395 (setq mh-summary-height 11)
+ − 1396
+ − 1397 ;; Use lines like the following if your version of MH
+ − 1398 ;; is in a special place.
+ − 1399 ;(setq mh-progs "/usr/dist/pkgs/mh/bin.svr4/")
+ − 1400 ;(setq mh-lib "/usr/dist/pkgs/mh/lib.svr4/")
+ − 1401
+ − 1402
+ − 1403 ;;; ********************
+ − 1404 ;;; resize-minibuffer-mode makes the minibuffer automatically
863
+ − 1405 ;;; resize as necessary when it's too small to hold its contents.
462
+ − 1406
558
+ − 1407 (when (fboundp 'resize-minibuffer-mode)
+ − 1408 (resize-minibuffer-mode)
+ − 1409 (setq resize-minibuffer-window-exactly nil))
462
+ − 1410
+ − 1411
+ − 1412 ;;; ********************
+ − 1413 ;;; scroll-in-place is a package that keeps the cursor on the same line (and in the same column) when scrolling by a page using PgUp/PgDn.
+ − 1414
558
+ − 1415 (if (Init-safe-require 'scroll-in-place)
+ − 1416 (turn-on-scroll-in-place))
462
+ − 1417
+ − 1418
+ − 1419 ;;; ********************
+ − 1420 ;;; W3 is a browser for the World Wide Web, and takes advantage of the very
+ − 1421 ;;; latest redisplay features in XEmacs. You can access it simply by typing
+ − 1422 ;;; 'M-x w3'; however, if you're unlucky enough to be on a machine that is
+ − 1423 ;;; behind a firewall, you will have to do something like this first:
+ − 1424
+ − 1425 ;(setq w3-use-telnet t
+ − 1426 ; ;;
+ − 1427 ; ;; If the Telnet program you use to access the outside world is
+ − 1428 ; ;; not called "telnet", specify its name like this.
+ − 1429 ; w3-telnet-prog "itelnet"
+ − 1430 ; ;;
+ − 1431 ; ;; If your Telnet program adds lines of junk at the beginning
+ − 1432 ; ;; of the session, specify the number of lines here.
+ − 1433 ; w3-telnet-header-length 4
+ − 1434 ; )
863
+ − 1435
+ − 1436 ;;; Inhibit loading of custom-file
+ − 1437
+ − 1438 ;; make-temp-name returns a name which does not refer to an existing file,
+ − 1439 ;; and thus the named file is unreadable.
+ − 1440 (when Init-inhibit-custom-file-p
+ − 1441 (setq custom-file (make-temp-name "/tmp/non-existent-")))
+ − 1442