comparison lisp/tutorial.el @ 75471:afea84ac9ef8

(tutorial--default-keys): Check M-DEL, not `M-backspace'. Don't check `backspace'. (tutorial--find-changed-keys): Look up bindings in a temp buffer in Fundamental mode.
author Richard M. Stallman <rms@gnu.org>
date Sun, 28 Jan 2007 07:08:51 +0000
parents e3694f1cb928
children 21cbf755a07c
comparison
equal deleted inserted replaced
75470:b391b0c782f4 75471:afea84ac9ef8
248 ;; C-u 0 C-l 248 ;; C-u 0 C-l
249 ;; Type CONTROL-h k CONTROL-f. 249 ;; Type CONTROL-h k CONTROL-f.
250 250
251 ;; * INSERTING AND DELETING 251 ;; * INSERTING AND DELETING
252 ;; C-u 8 * to insert ********. 252 ;; C-u 8 * to insert ********.
253 (delete-backward-char [backspace])
254 (delete-backward-char "\d") 253 (delete-backward-char "\d")
255 (delete-char [?\C-d]) 254 (delete-char [?\C-d])
256 (backward-kill-word [(meta backspace)]) 255 (backward-kill-word [?\M-\d])
257 (kill-word [?\M-d]) 256 (kill-word [?\M-d])
258 (kill-line [?\C-k]) 257 (kill-line [?\C-k])
259 (kill-sentence [?\M-k]) 258 (kill-sentence [?\M-k])
260 (set-mark-command [?\C-@]) 259 (set-mark-command [?\C-@])
261 (set-mark-command [?\C- ]) 260 (set-mark-command [?\C- ])
420 419
421 KEY-FUN is the actual binding for KEY. 420 KEY-FUN is the actual binding for KEY.
422 QUIET is t if this changed keybinding should be handled quietly. 421 QUIET is t if this changed keybinding should be handled quietly.
423 This is used by `tutorial--display-changes'." 422 This is used by `tutorial--display-changes'."
424 (let (changed-keys remark) 423 (let (changed-keys remark)
425 (dolist (kdf default-keys) 424 ;; Look up the bindings in a Fundamental mode buffer
426 ;; The variables below corresponds to those with the same names 425 ;; so we do not get fooled by some other major mode.
427 ;; described in the doc string. 426 (with-temp-buffer
428 (let* ((key (nth 1 kdf)) 427 (fundamental-mode)
429 (def-fun (nth 0 kdf)) 428 (dolist (kdf default-keys)
430 (def-fun-txt (format "%s" def-fun)) 429 ;; The variables below corresponds to those with the same names
431 (rem-fun (command-remapping def-fun)) 430 ;; described in the doc string.
432 (key-fun (if (eq def-fun 'ESC-prefix) 431 (let* ((key (nth 1 kdf))
433 (lookup-key global-map [27]) 432 (def-fun (nth 0 kdf))
434 (key-binding key))) 433 (def-fun-txt (format "%s" def-fun))
435 (where (where-is-internal (if rem-fun rem-fun def-fun)))) 434 (rem-fun (command-remapping def-fun))
436 (if where 435 (key-fun (if (eq def-fun 'ESC-prefix)
437 (progn 436 (lookup-key global-map [27])
438 (setq where (key-description (car where))) 437 (key-binding key)))
439 (when (and (< 10 (length where)) 438 (where (where-is-internal (if rem-fun rem-fun def-fun))))
440 (string= (substring where 0 (length "<menu-bar>")) 439 (if where
441 "<menu-bar>")) 440 (progn
442 (setq where "the menus"))) 441 (setq where (key-description (car where)))
443 (setq where "")) 442 (when (and (< 10 (length where))
444 (setq remark nil) 443 (string= (substring where 0 (length "<menu-bar>"))
445 (unless 444 "<menu-bar>"))
446 (cond ((eq key-fun def-fun) 445 (setq where "the menus")))
447 ;; No rebinding, return t 446 (setq where ""))
448 t) 447 (setq remark nil)
449 ((and key-fun 448 (unless
450 (eq key-fun (command-remapping def-fun))) 449 (cond ((eq key-fun def-fun)
451 ;; Just a remapping, return t 450 ;; No rebinding, return t
452 t) 451 t)
453 ;; cua-mode specials: 452 ((and key-fun
454 ((and cua-mode 453 (eq key-fun (command-remapping def-fun)))
455 (or (and 454 ;; Just a remapping, return t
456 (equal key [?\C-v]) 455 t)
457 (eq key-fun 'cua-paste)) 456 ;; cua-mode specials:
458 (and 457 ((and cua-mode
459 (equal key [?\C-z]) 458 (or (and
460 (eq key-fun 'undo)))) 459 (equal key [?\C-v])
461 (setq remark (list "cua-mode, more info" 'cua-mode)) 460 (eq key-fun 'cua-paste))
462 nil) 461 (and
463 ((and cua-mode 462 (equal key [?\C-z])
464 (or (and (eq def-fun 'ESC-prefix) 463 (eq key-fun 'undo))))
465 (equal key-fun 464 (setq remark (list "cua-mode, more info" 'cua-mode))
466 `(keymap 465 nil)
467 (118 . cua-repeat-replace-region))) 466 ((and cua-mode
468 (setq def-fun-txt "\"ESC prefix\"")) 467 (or (and (eq def-fun 'ESC-prefix)
469 (and (eq def-fun 'mode-specific-command-prefix) 468 (equal key-fun
470 (equal key-fun 469 `(keymap
471 '(keymap 470 (118 . cua-repeat-replace-region)))
472 (timeout . copy-region-as-kill))) 471 (setq def-fun-txt "\"ESC prefix\""))
473 (setq def-fun-txt "\"C-c prefix\"")) 472 (and (eq def-fun 'mode-specific-command-prefix)
474 (and (eq def-fun 'Control-X-prefix) 473 (equal key-fun
475 (equal key-fun 474 '(keymap
476 '(keymap (timeout . kill-region))) 475 (timeout . copy-region-as-kill)))
477 (setq def-fun-txt "\"C-x prefix\"")))) 476 (setq def-fun-txt "\"C-c prefix\""))
478 (setq remark (list "cua-mode replacement" 'cua-mode)) 477 (and (eq def-fun 'Control-X-prefix)
479 (setq where "Same key") 478 (equal key-fun
480 nil) 479 '(keymap (timeout . kill-region)))
481 ;; viper-mode specials: 480 (setq def-fun-txt "\"C-x prefix\""))))
482 ((and (boundp 'viper-mode-string) 481 (setq remark (list "cua-mode replacement" 'cua-mode))
483 (boundp 'viper-current-state) 482 (setq where "Same key")
484 (eq viper-current-state 'vi-state) 483 nil)
485 (or (and (eq def-fun 'isearch-forward) 484 ;; viper-mode specials:
486 (eq key-fun 'viper-isearch-forward)) 485 ((and (boundp 'viper-mode-string)
487 (and (eq def-fun 'isearch-backward) 486 (boundp 'viper-current-state)
488 (eq key-fun 'viper-isearch-backward)))) 487 (eq viper-current-state 'vi-state)
489 ;; These bindings works as the default bindings, 488 (or (and (eq def-fun 'isearch-forward)
490 ;; return t 489 (eq key-fun 'viper-isearch-forward))
491 t) 490 (and (eq def-fun 'isearch-backward)
492 ((when normal-erase-is-backspace 491 (eq key-fun 'viper-isearch-backward))))
493 (or (and (equal key [C-delete]) 492 ;; These bindings works as the default bindings,
494 (equal key-fun 'kill-word)) 493 ;; return t
495 (and (equal key [C-backspace]) 494 t)
496 (equal key-fun 'backward-kill-word)))) 495 ((when normal-erase-is-backspace
497 ;; This is the strange handling of C-delete and 496 (or (and (equal key [C-delete])
498 ;; C-backspace, return t 497 (equal key-fun 'kill-word))
499 t) 498 (and (equal key [C-backspace])
500 (t 499 (equal key-fun 'backward-kill-word))))
501 ;; This key has indeed been rebound. Put information 500 ;; This is the strange handling of C-delete and
502 ;; in `remark' and return nil 501 ;; C-backspace, return t
503 (setq remark 502 t)
504 (list "more info" 'current-binding 503 (t
505 key-fun def-fun key where)) 504 ;; This key has indeed been rebound. Put information
506 nil)) 505 ;; in `remark' and return nil
507 (add-to-list 'changed-keys 506 (setq remark
508 (list key def-fun def-fun-txt where remark nil))))) 507 (list "more info" 'current-binding
508 key-fun def-fun key where))
509 nil))
510 (add-to-list 'changed-keys
511 (list key def-fun def-fun-txt where remark nil))))))
509 changed-keys)) 512 changed-keys))
510 513
511 (defun tutorial--key-description (key) 514 (defun tutorial--key-description (key)
512 (let ((desc (key-description key))) 515 (let ((desc (key-description key)))
513 (cond ((string= "ESC" desc) "<ESC>") 516 (cond ((string= "ESC" desc) "<ESC>")
619 (when (or (not ext) 622 (when (or (not ext)
620 (string= ext "")) 623 (string= ext ""))
621 (setq file-name (concat file-name ".tut"))) 624 (setq file-name (concat file-name ".tut")))
622 (expand-file-name file-name (tutorial--saved-dir)))) 625 (expand-file-name file-name (tutorial--saved-dir))))
623 626
624 (defun tutorial--remove-remarks() 627 (defun tutorial--remove-remarks ()
625 "Remove the remark lines that was added to the tutorial buffer." 628 "Remove the remark lines that was added to the tutorial buffer."
626 (save-excursion 629 (save-excursion
627 (goto-char (point-min)) 630 (goto-char (point-min))
628 (let (prop-start 631 (let (prop-start
629 prop-end 632 prop-end
906 the list are themselves association lists with keys that are 909 the list are themselves association lists with keys that are
907 string ids and values that are the language specific strings. 910 string ids and values that are the language specific strings.
908 911
909 See `get-lang-string' for more information.") 912 See `get-lang-string' for more information.")
910 913
911 (defun get-lang-string(lang stringid &optional no-eng-fallback) 914 (defun get-lang-string (lang stringid &optional no-eng-fallback)
912 "Get a language specific string for Emacs. 915 "Get a language specific string for Emacs.
913 In certain places Emacs can replace a string showed to the user with a language specific string. 916 In certain places Emacs can replace a string showed to the user with a language specific string.
914 This function retrieves such strings. 917 This function retrieves such strings.
915 918
916 LANG is the language specification. It should be one of those 919 LANG is the language specification. It should be one of those