aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/progmodes
diff options
context:
space:
mode:
authorTom Tromey2012-09-04 10:10:06 -0600
committerTom Tromey2012-09-04 10:10:06 -0600
commitbf69f522a9e135f9aa483cedd53e71e915f2bf75 (patch)
tree3f73c47fb863ef87f420de1d30858da821072bd9 /lisp/progmodes
parent303324a9232dbc89369faceb6b3530740d0fc1bd (diff)
parent6ec9a5a7b5efb129807f567709ca858211ed7840 (diff)
downloademacs-bf69f522a9e135f9aa483cedd53e71e915f2bf75.tar.gz
emacs-bf69f522a9e135f9aa483cedd53e71e915f2bf75.zip
merge from trunk
Diffstat (limited to 'lisp/progmodes')
-rw-r--r--lisp/progmodes/bug-reference.el13
-rw-r--r--lisp/progmodes/compile.el13
-rw-r--r--lisp/progmodes/executable.el3
-rw-r--r--lisp/progmodes/gdb-mi.el241
-rw-r--r--lisp/progmodes/gud.el6
-rw-r--r--lisp/progmodes/hideif.el2
-rw-r--r--lisp/progmodes/hideshow.el2
-rw-r--r--lisp/progmodes/js.el5
-rw-r--r--lisp/progmodes/ruby-mode.el26
-rw-r--r--lisp/progmodes/sh-script.el30
10 files changed, 155 insertions, 186 deletions
diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el
index 0a7d65c1fa4..97fcb6874dd 100644
--- a/lisp/progmodes/bug-reference.el
+++ b/lisp/progmodes/bug-reference.el
@@ -32,6 +32,11 @@
32 32
33;;; Code: 33;;; Code:
34 34
35(defgroup bug-reference nil
36 "Hyperlinking references to bug reports"
37 ;; Somewhat arbitrary, by analogy with eg goto-address.
38 :group 'comm)
39
35(defvar bug-reference-map 40(defvar bug-reference-map
36 (let ((map (make-sparse-keymap))) 41 (let ((map (make-sparse-keymap)))
37 (define-key map [mouse-2] 'bug-reference-push-button) 42 (define-key map [mouse-2] 'bug-reference-push-button)
@@ -63,9 +68,13 @@ so that it is considered safe, see `enable-local-variables'.")
63 (and (symbolp s) 68 (and (symbolp s)
64 (get s 'bug-reference-url-format))))) 69 (get s 'bug-reference-url-format)))))
65 70
66(defconst bug-reference-bug-regexp 71(defcustom bug-reference-bug-regexp
67 "\\([Bb]ug ?#\\|[Pp]atch ?#\\|RFE ?#\\|PR [a-z-+]+/\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)" 72 "\\([Bb]ug ?#\\|[Pp]atch ?#\\|RFE ?#\\|PR [a-z-+]+/\\)\\([0-9]+\\(?:#[0-9]+\\)?\\)"
68 "Regular expression which matches bug references.") 73 "Regular expression matching bug references.
74The second subexpression should match the bug reference (usually a number)."
75 :type 'string
76 :safe 'stringp
77 :group 'bug-reference)
69 78
70(defun bug-reference-set-overlay-properties () 79(defun bug-reference-set-overlay-properties ()
71 "Set properties of bug reference overlays." 80 "Set properties of bug reference overlays."
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index 21a323d8b45..fbb0c9e204a 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1503,6 +1503,13 @@ Otherwise, construct a buffer name from NAME-OF-MODE."
1503 (compilation-start command nil name-function highlight-regexp))) 1503 (compilation-start command nil name-function highlight-regexp)))
1504(make-obsolete 'compile-internal 'compilation-start "22.1") 1504(make-obsolete 'compile-internal 'compilation-start "22.1")
1505 1505
1506(defcustom compilation-always-kill nil
1507 "If t, always kill a running compilation process before starting a new one.
1508If nil, ask to kill it."
1509 :type 'boolean
1510 :version "24.3"
1511 :group 'compilation)
1512
1506;;;###autoload 1513;;;###autoload
1507(defun compilation-start (command &optional mode name-function highlight-regexp) 1514(defun compilation-start (command &optional mode name-function highlight-regexp)
1508 "Run compilation command COMMAND (low level interface). 1515 "Run compilation command COMMAND (low level interface).
@@ -1537,6 +1544,7 @@ Returns the compilation buffer created."
1537 (let ((comp-proc (get-buffer-process (current-buffer)))) 1544 (let ((comp-proc (get-buffer-process (current-buffer))))
1538 (if comp-proc 1545 (if comp-proc
1539 (if (or (not (eq (process-status comp-proc) 'run)) 1546 (if (or (not (eq (process-status comp-proc) 'run))
1547 compilation-always-kill
1540 (yes-or-no-p 1548 (yes-or-no-p
1541 (format "A %s process is running; kill it? " 1549 (format "A %s process is running; kill it? "
1542 name-of-mode))) 1550 name-of-mode)))
@@ -2461,10 +2469,7 @@ and overlay is highlighted between MK and END-MK."
2461 ;; the error location if the two buffers are in two 2469 ;; the error location if the two buffers are in two
2462 ;; different frames. So don't do it if it's not necessary. 2470 ;; different frames. So don't do it if it's not necessary.
2463 pre-existing 2471 pre-existing
2464 (let ((display-buffer-reuse-frames t) 2472 (display-buffer (marker-buffer msg))))
2465 (pop-up-windows t))
2466 ;; Pop up a window.
2467 (display-buffer (marker-buffer msg)))))
2468 (highlight-regexp (with-current-buffer (marker-buffer msg) 2473 (highlight-regexp (with-current-buffer (marker-buffer msg)
2469 ;; also do this while we change buffer 2474 ;; also do this while we change buffer
2470 (compilation-set-window w msg) 2475 (compilation-set-window w msg)
diff --git a/lisp/progmodes/executable.el b/lisp/progmodes/executable.el
index e5142571972..092e1a4d578 100644
--- a/lisp/progmodes/executable.el
+++ b/lisp/progmodes/executable.el
@@ -84,8 +84,9 @@ When this is `function', only ask when called non-interactively."
84 :group 'executable) 84 :group 'executable)
85 85
86 86
87(defcustom executable-prefix "#! " 87(defcustom executable-prefix "#!"
88 "Interpreter magic number prefix inserted when there was no magic number." 88 "Interpreter magic number prefix inserted when there was no magic number."
89 :version "24.3" ; "#! " -> "#!"
89 :type 'string 90 :type 'string
90 :group 'executable) 91 :group 'executable)
91 92
diff --git a/lisp/progmodes/gdb-mi.el b/lisp/progmodes/gdb-mi.el
index 0a99c2f5c24..59c419abfc3 100644
--- a/lisp/progmodes/gdb-mi.el
+++ b/lisp/progmodes/gdb-mi.el
@@ -1413,29 +1413,6 @@ this trigger is subscribed to `gdb-buf-publisher' and called with
1413 (with-current-buffer ,buffer 1413 (with-current-buffer ,buffer
1414 (apply ',expr args)))) 1414 (apply ',expr args))))
1415 1415
1416;; Used to define all gdb-frame-*-buffer functions except
1417;; `gdb-frame-io-buffer'
1418(defmacro def-gdb-frame-for-buffer (name buffer &optional doc)
1419 "Define a function NAME which shows gdb BUFFER in a separate frame.
1420
1421DOC is an optional documentation string."
1422 `(defun ,name (&optional thread)
1423 ,(when doc doc)
1424 (interactive)
1425 (let ((special-display-regexps (append special-display-regexps '(".*")))
1426 (special-display-frame-alist gdb-frame-parameters))
1427 (display-buffer (gdb-get-buffer-create ,buffer thread)))))
1428
1429(defmacro def-gdb-display-buffer (name buffer &optional doc)
1430 "Define a function NAME which shows gdb BUFFER.
1431
1432DOC is an optional documentation string."
1433 `(defun ,name (&optional thread)
1434 ,(when doc doc)
1435 (interactive)
1436 (gdb-display-buffer
1437 (gdb-get-buffer-create ,buffer thread) t)))
1438
1439;; Used to display windows with thread-bound buffers 1416;; Used to display windows with thread-bound buffers
1440(defmacro def-gdb-preempt-display-buffer (name buffer &optional doc 1417(defmacro def-gdb-preempt-display-buffer (name buffer &optional doc
1441 split-horizontal) 1418 split-horizontal)
@@ -1511,8 +1488,7 @@ DOC is an optional documentation string."
1511(defun gdb-display-io-buffer () 1488(defun gdb-display-io-buffer ()
1512 "Display IO of debugged program in a separate window." 1489 "Display IO of debugged program in a separate window."
1513 (interactive) 1490 (interactive)
1514 (gdb-display-buffer 1491 (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io)))
1515 (gdb-get-buffer-create 'gdb-inferior-io) t))
1516 1492
1517(defun gdb-inferior-io--init-proc (proc) 1493(defun gdb-inferior-io--init-proc (proc)
1518 ;; Set up inferior I/O. Needs GDB 6.4 onwards. 1494 ;; Set up inferior I/O. Needs GDB 6.4 onwards.
@@ -1540,19 +1516,24 @@ DOC is an optional documentation string."
1540 (comint-exec io-buffer "gdb-inferior" nil nil nil) 1516 (comint-exec io-buffer "gdb-inferior" nil nil nil)
1541 (gdb-inferior-io--init-proc (get-buffer-process io-buffer)))))) 1517 (gdb-inferior-io--init-proc (get-buffer-process io-buffer))))))
1542 1518
1543(defconst gdb-frame-parameters 1519(defvar gdb-display-buffer-other-frame-action
1544 '((height . 14) (width . 80) 1520 `((display-buffer-reuse-window display-buffer-pop-up-frame)
1545 (unsplittable . t) 1521 (reusable-frames . 0)
1546 (tool-bar-lines . nil) 1522 (inhibit-same-window . t)
1547 (menu-bar-lines . nil) 1523 (pop-up-frame-parameters (height . 14)
1548 (minibuffer . nil))) 1524 (width . 80)
1525 (unsplittable . t)
1526 (tool-bar-lines . nil)
1527 (menu-bar-lines . nil)
1528 (minibuffer . nil)))
1529 "A `display-buffer' action for displaying GDB utility frames.")
1530(put 'gdb-display-buffer-other-frame-action 'risky-local-variable t)
1549 1531
1550(defun gdb-frame-io-buffer () 1532(defun gdb-frame-io-buffer ()
1551 "Display IO of debugged program in a new frame." 1533 "Display IO of debugged program in another frame."
1552 (interactive) 1534 (interactive)
1553 (let ((special-display-regexps (append special-display-regexps '(".*"))) 1535 (display-buffer (gdb-get-buffer-create 'gdb-inferior-io)
1554 (special-display-frame-alist gdb-frame-parameters)) 1536 gdb-display-buffer-other-frame-action))
1555 (display-buffer (gdb-get-buffer-create 'gdb-inferior-io))))
1556 1537
1557(defvar gdb-inferior-io-mode-map 1538(defvar gdb-inferior-io-mode-map
1558 (let ((map (make-sparse-keymap))) 1539 (let ((map (make-sparse-keymap)))
@@ -1571,7 +1552,7 @@ DOC is an optional documentation string."
1571 1552
1572(defun gdb-inferior-filter (proc string) 1553(defun gdb-inferior-filter (proc string)
1573 (unless (string-equal string "") 1554 (unless (string-equal string "")
1574 (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io) t)) 1555 (gdb-display-buffer (gdb-get-buffer-create 'gdb-inferior-io)))
1575 (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io) 1556 (with-current-buffer (gdb-get-buffer-create 'gdb-inferior-io)
1576 (comint-output-filter proc string))) 1557 (comint-output-filter proc string)))
1577 1558
@@ -2615,15 +2596,16 @@ If not in a source or disassembly buffer just set point."
2615(defun gdb-breakpoints-buffer-name () 2596(defun gdb-breakpoints-buffer-name ()
2616 (concat "*breakpoints of " (gdb-get-target-string) "*")) 2597 (concat "*breakpoints of " (gdb-get-target-string) "*"))
2617 2598
2618(def-gdb-display-buffer 2599(defun gdb-display-breakpoints-buffer (&optional thread)
2619 gdb-display-breakpoints-buffer 2600 "Display GDB breakpoints."
2620 'gdb-breakpoints-buffer 2601 (interactive)
2621 "Display status of user-settable breakpoints.") 2602 (gdb-display-buffer (gdb-get-buffer-create 'gdb-breakpoints-buffer thread)))
2622 2603
2623(def-gdb-frame-for-buffer 2604(defun gdb-frame-breakpoints-buffer (&optional thread)
2624 gdb-frame-breakpoints-buffer 2605 "Display GDB breakpoints in another frame."
2625 'gdb-breakpoints-buffer 2606 (interactive)
2626 "Display status of user-settable breakpoints in a new frame.") 2607 (display-buffer (gdb-get-buffer-create 'gdb-breakpoints-buffer thread)
2608 gdb-display-buffer-other-frame-action))
2627 2609
2628(defvar gdb-breakpoints-mode-map 2610(defvar gdb-breakpoints-mode-map
2629 (let ((map (make-sparse-keymap)) 2611 (let ((map (make-sparse-keymap))
@@ -2684,15 +2666,16 @@ corresponding to the mode line clicked."
2684(defun gdb-threads-buffer-name () 2666(defun gdb-threads-buffer-name ()
2685 (concat "*threads of " (gdb-get-target-string) "*")) 2667 (concat "*threads of " (gdb-get-target-string) "*"))
2686 2668
2687(def-gdb-display-buffer 2669(defun gdb-display-threads-buffer (&optional thread)
2688 gdb-display-threads-buffer 2670 "Display GDB threads."
2689 'gdb-threads-buffer 2671 (interactive)
2690 "Display GDB threads.") 2672 (gdb-display-buffer (gdb-get-buffer-create 'gdb-threads-buffer thread)))
2691 2673
2692(def-gdb-frame-for-buffer 2674(defun gdb-frame-threads-buffer (&optional thread)
2693 gdb-frame-threads-buffer 2675 "Display GDB threads in another frame."
2694 'gdb-threads-buffer 2676 (interactive)
2695 "Display GDB threads in a new frame.") 2677 (display-buffer (gdb-get-buffer-create 'gdb-threads-buffer thread)
2678 gdb-display-buffer-other-frame-action))
2696 2679
2697(def-gdb-trigger-and-handler 2680(def-gdb-trigger-and-handler
2698 gdb-invalidate-threads (gdb-current-context-command "-thread-info") 2681 gdb-invalidate-threads (gdb-current-context-command "-thread-info")
@@ -2868,26 +2851,22 @@ on the current line."
2868(def-gdb-thread-buffer-simple-command 2851(def-gdb-thread-buffer-simple-command
2869 gdb-frame-stack-for-thread 2852 gdb-frame-stack-for-thread
2870 gdb-frame-stack-buffer 2853 gdb-frame-stack-buffer
2871 "Display a new frame with stack buffer for the thread at 2854 "Display another frame with stack buffer for thread at current line.")
2872current line.")
2873 2855
2874(def-gdb-thread-buffer-simple-command 2856(def-gdb-thread-buffer-simple-command
2875 gdb-frame-locals-for-thread 2857 gdb-frame-locals-for-thread
2876 gdb-frame-locals-buffer 2858 gdb-frame-locals-buffer
2877 "Display a new frame with locals buffer for the thread at 2859 "Display another frame with locals buffer for thread at current line.")
2878current line.")
2879 2860
2880(def-gdb-thread-buffer-simple-command 2861(def-gdb-thread-buffer-simple-command
2881 gdb-frame-registers-for-thread 2862 gdb-frame-registers-for-thread
2882 gdb-frame-registers-buffer 2863 gdb-frame-registers-buffer
2883 "Display a new frame with registers buffer for the thread at 2864 "Display another frame with registers buffer for the thread at current line.")
2884current line.")
2885 2865
2886(def-gdb-thread-buffer-simple-command 2866(def-gdb-thread-buffer-simple-command
2887 gdb-frame-disassembly-for-thread 2867 gdb-frame-disassembly-for-thread
2888 gdb-frame-disassembly-buffer 2868 gdb-frame-disassembly-buffer
2889 "Display a new frame with disassembly buffer for the thread at 2869 "Display another frame with disassembly buffer for the thread at current line.")
2890current line.")
2891 2870
2892(defmacro def-gdb-thread-buffer-gud-command (name gud-command &optional doc) 2871(defmacro def-gdb-thread-buffer-gud-command (name gud-command &optional doc)
2893 "Define a NAME which will execute GUD-COMMAND with 2872 "Define a NAME which will execute GUD-COMMAND with
@@ -3290,21 +3269,16 @@ DOC is an optional documentation string."
3290(defun gdb-memory-buffer-name () 3269(defun gdb-memory-buffer-name ()
3291 (concat "*memory of " (gdb-get-target-string) "*")) 3270 (concat "*memory of " (gdb-get-target-string) "*"))
3292 3271
3293(def-gdb-display-buffer 3272(defun gdb-display-memory-buffer (&optional thread)
3294 gdb-display-memory-buffer 3273 "Display GDB memory contents."
3295 'gdb-memory-buffer 3274 (interactive)
3296 "Display memory contents.") 3275 (gdb-display-buffer (gdb-get-buffer-create 'gdb-memory-buffer thread)))
3297 3276
3298(defun gdb-frame-memory-buffer () 3277(defun gdb-frame-memory-buffer ()
3299 "Display memory contents in a new frame." 3278 "Display memory contents in another frame."
3300 (interactive) 3279 (interactive)
3301 (let* ((special-display-regexps (append special-display-regexps '(".*"))) 3280 (display-buffer (gdb-get-buffer-create 'gdb-memory-buffer)
3302 (special-display-frame-alist 3281 gdb-display-buffer-other-frame-action))
3303 `((left-fringe . 0)
3304 (right-fringe . 0)
3305 (width . 83)
3306 ,@gdb-frame-parameters)))
3307 (display-buffer (gdb-get-buffer-create 'gdb-memory-buffer))))
3308 3282
3309 3283
3310;;; Disassembly view 3284;;; Disassembly view
@@ -3313,19 +3287,20 @@ DOC is an optional documentation string."
3313 (gdb-current-context-buffer-name 3287 (gdb-current-context-buffer-name
3314 (concat "disassembly of " (gdb-get-target-string)))) 3288 (concat "disassembly of " (gdb-get-target-string))))
3315 3289
3316(def-gdb-display-buffer 3290(defun gdb-display-disassembly-buffer (&optional thread)
3317 gdb-display-disassembly-buffer 3291 "Display GDB disassembly information."
3318 'gdb-disassembly-buffer 3292 (interactive)
3319 "Display disassembly for current stack frame.") 3293 (gdb-display-buffer (gdb-get-buffer-create 'gdb-disassembly-buffer thread)))
3320 3294
3321(def-gdb-preempt-display-buffer 3295(def-gdb-preempt-display-buffer
3322 gdb-preemptively-display-disassembly-buffer 3296 gdb-preemptively-display-disassembly-buffer
3323 'gdb-disassembly-buffer) 3297 'gdb-disassembly-buffer)
3324 3298
3325(def-gdb-frame-for-buffer 3299(defun gdb-frame-disassembly-buffer (&optional thread)
3326 gdb-frame-disassembly-buffer 3300 "Display GDB disassembly information in another frame."
3327 'gdb-disassembly-buffer 3301 (interactive)
3328 "Display disassembly in a new frame.") 3302 (display-buffer (gdb-get-buffer-create 'gdb-disassembly-buffer thread)
3303 gdb-display-buffer-other-frame-action))
3329 3304
3330(def-gdb-auto-update-trigger gdb-invalidate-disassembly 3305(def-gdb-auto-update-trigger gdb-invalidate-disassembly
3331 (let* ((frame (gdb-current-buffer-frame)) 3306 (let* ((frame (gdb-current-buffer-frame))
@@ -3560,19 +3535,20 @@ member."
3560 (gdb-current-context-buffer-name 3535 (gdb-current-context-buffer-name
3561 (concat "stack frames of " (gdb-get-target-string)))) 3536 (concat "stack frames of " (gdb-get-target-string))))
3562 3537
3563(def-gdb-display-buffer 3538(defun gdb-display-stack-buffer (&optional thread)
3564 gdb-display-stack-buffer 3539 "Display GDB backtrace for current stack."
3565 'gdb-stack-buffer 3540 (interactive)
3566 "Display backtrace of current stack.") 3541 (gdb-display-buffer (gdb-get-buffer-create 'gdb-stack-buffer thread)))
3567 3542
3568(def-gdb-preempt-display-buffer 3543(def-gdb-preempt-display-buffer
3569 gdb-preemptively-display-stack-buffer 3544 gdb-preemptively-display-stack-buffer
3570 'gdb-stack-buffer nil t) 3545 'gdb-stack-buffer nil t)
3571 3546
3572(def-gdb-frame-for-buffer 3547(defun gdb-frame-stack-buffer (&optional thread)
3573 gdb-frame-stack-buffer 3548 "Display GDB backtrace for current stack in another frame."
3574 'gdb-stack-buffer 3549 (interactive)
3575 "Display backtrace of current stack in a new frame.") 3550 (display-buffer (gdb-get-buffer-create 'gdb-stack-buffer thread)
3551 gdb-display-buffer-other-frame-action))
3576 3552
3577(defvar gdb-frames-mode-map 3553(defvar gdb-frames-mode-map
3578 (let ((map (make-sparse-keymap))) 3554 (let ((map (make-sparse-keymap)))
@@ -3719,19 +3695,20 @@ member."
3719 (gdb-current-context-buffer-name 3695 (gdb-current-context-buffer-name
3720 (concat "locals of " (gdb-get-target-string)))) 3696 (concat "locals of " (gdb-get-target-string))))
3721 3697
3722(def-gdb-display-buffer 3698(defun gdb-display-locals-buffer (&optional thread)
3723 gdb-display-locals-buffer 3699 "Display the local variables of current GDB stack."
3724 'gdb-locals-buffer 3700 (interactive)
3725 "Display local variables of current stack and their values.") 3701 (gdb-display-buffer (gdb-get-buffer-create 'gdb-locals-buffer thread)))
3726 3702
3727(def-gdb-preempt-display-buffer 3703(def-gdb-preempt-display-buffer
3728 gdb-preemptively-display-locals-buffer 3704 gdb-preemptively-display-locals-buffer
3729 'gdb-locals-buffer nil t) 3705 'gdb-locals-buffer nil t)
3730 3706
3731(def-gdb-frame-for-buffer 3707(defun gdb-frame-locals-buffer (&optional thread)
3732 gdb-frame-locals-buffer 3708 "Display the local variables of the current GDB stack in another frame."
3733 'gdb-locals-buffer 3709 (interactive)
3734 "Display local variables of current stack and their values in a new frame.") 3710 (display-buffer (gdb-get-buffer-create 'gdb-locals-buffer thread)
3711 gdb-display-buffer-other-frame-action))
3735 3712
3736 3713
3737;; Registers buffer. 3714;; Registers buffer.
@@ -3818,19 +3795,20 @@ member."
3818 (gdb-current-context-buffer-name 3795 (gdb-current-context-buffer-name
3819 (concat "registers of " (gdb-get-target-string)))) 3796 (concat "registers of " (gdb-get-target-string))))
3820 3797
3821(def-gdb-display-buffer 3798(defun gdb-display-registers-buffer (&optional thread)
3822 gdb-display-registers-buffer 3799 "Display GDB register contents."
3823 'gdb-registers-buffer 3800 (interactive)
3824 "Display integer register contents.") 3801 (gdb-display-buffer (gdb-get-buffer-create 'gdb-registers-buffer thread)))
3825 3802
3826(def-gdb-preempt-display-buffer 3803(def-gdb-preempt-display-buffer
3827 gdb-preemptively-display-registers-buffer 3804 gdb-preemptively-display-registers-buffer
3828 'gdb-registers-buffer nil t) 3805 'gdb-registers-buffer nil t)
3829 3806
3830(def-gdb-frame-for-buffer 3807(defun gdb-frame-registers-buffer (&optional thread)
3831 gdb-frame-registers-buffer 3808 "Display GDB register contents in another frame."
3832 'gdb-registers-buffer 3809 (interactive)
3833 "Display integer register contents in a new frame.") 3810 (display-buffer (gdb-get-buffer-create 'gdb-registers-buffer thread)
3811 gdb-display-buffer-other-frame-action))
3834 3812
3835;; Needs GDB 6.4 onwards (used to fail with no stack). 3813;; Needs GDB 6.4 onwards (used to fail with no stack).
3836(defun gdb-get-changed-registers () 3814(defun gdb-get-changed-registers ()
@@ -3917,26 +3895,26 @@ overlay arrow in source buffer."
3917 (setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name))) 3895 (setq gdb-filter-output (concat gdb-filter-output gdb-prompt-name)))
3918 3896
3919;;;; Window management 3897;;;; Window management
3920(defun gdb-display-buffer (buf dedicated &optional frame) 3898(defun gdb-display-buffer (buf)
3921 "Show buffer BUF. 3899 "Show buffer BUF, and make that window dedicated."
3922 3900 (let ((window (display-buffer buf)))
3923If BUF is already displayed in some window, show it, deiconifying 3901 (set-window-dedicated-p window t)
3924the frame if necessary. Otherwise, find least recently used 3902 window))
3925window and show BUF there, if the window is not used for GDB 3903
3926already, in which case that window is split first." 3904 ;; (let ((answer (get-buffer-window buf 0)))
3927 (let ((answer (get-buffer-window buf (or frame 0)))) 3905 ;; (if answer
3928 (if answer 3906 ;; (display-buffer buf nil 0) ;Deiconify frame if necessary.
3929 (display-buffer buf nil (or frame 0)) ;Deiconify frame if necessary. 3907 ;; (let ((window (get-lru-window)))
3930 (let ((window (get-lru-window))) 3908 ;; (if (eq (buffer-local-value 'gud-minor-mode (window-buffer window))
3931 (if (eq (buffer-local-value 'gud-minor-mode (window-buffer window)) 3909 ;; 'gdbmi)
3932 'gdbmi) 3910 ;; (let ((largest (get-largest-window)))
3933 (let ((largest (get-largest-window))) 3911 ;; (setq answer (split-window largest))
3934 (setq answer (split-window largest)) 3912 ;; (set-window-buffer answer buf)
3935 (set-window-buffer answer buf) 3913 ;; (set-window-dedicated-p answer t)
3936 (set-window-dedicated-p answer dedicated) 3914 ;; answer)
3937 answer) 3915 ;; (set-window-buffer window buf)
3938 (set-window-buffer window buf) 3916 ;; window)))))
3939 window))))) 3917
3940 3918
3941(defun gdb-preempt-existing-or-display-buffer (buf &optional split-horizontal) 3919(defun gdb-preempt-existing-or-display-buffer (buf &optional split-horizontal)
3942 "Find window displaying a buffer with the same 3920 "Find window displaying a buffer with the same
@@ -3963,7 +3941,7 @@ SPLIT-HORIZONTAL and show BUF in the new window."
3963 (if dedicated-window 3941 (if dedicated-window
3964 (set-window-buffer 3942 (set-window-buffer
3965 (split-window dedicated-window nil split-horizontal) buf) 3943 (split-window dedicated-window nil split-horizontal) buf)
3966 (gdb-display-buffer buf t)))))) 3944 (gdb-display-buffer buf))))))
3967 (error "Null buffer"))) 3945 (error "Null buffer")))
3968 3946
3969;;; Shared keymap initialization: 3947;;; Shared keymap initialization:
@@ -4067,7 +4045,7 @@ SPLIT-HORIZONTAL and show BUF in the new window."
4067 'all-threads) 4045 'all-threads)
4068 4046
4069(defun gdb-frame-gdb-buffer () 4047(defun gdb-frame-gdb-buffer ()
4070 "Display GUD buffer in a new frame." 4048 "Display GUD buffer in another frame."
4071 (interactive) 4049 (interactive)
4072 (display-buffer-other-frame gud-comint-buffer)) 4050 (display-buffer-other-frame gud-comint-buffer))
4073 4051
@@ -4089,13 +4067,12 @@ window is dedicated."
4089 4067
4090(defun gdb-setup-windows () 4068(defun gdb-setup-windows ()
4091 "Layout the window pattern for `gdb-many-windows'." 4069 "Layout the window pattern for `gdb-many-windows'."
4092 (gdb-display-locals-buffer) 4070 (gdb-get-buffer-create 'gdb-locals-buffer)
4093 (gdb-display-stack-buffer) 4071 (gdb-get-buffer-create 'gdb-stack-buffer)
4094 (delete-other-windows) 4072 (gdb-get-buffer-create 'gdb-breakpoints-buffer)
4095 (gdb-display-breakpoints-buffer) 4073 (set-window-dedicated-p (selected-window) nil)
4096 (delete-other-windows)
4097 ;; Don't dedicate.
4098 (switch-to-buffer gud-comint-buffer) 4074 (switch-to-buffer gud-comint-buffer)
4075 (delete-other-windows)
4099 (let ((win0 (selected-window)) 4076 (let ((win0 (selected-window))
4100 (win1 (split-window nil ( / ( * (window-height) 3) 4))) 4077 (win1 (split-window nil ( / ( * (window-height) 3) 4)))
4101 (win2 (split-window nil ( / (window-height) 3))) 4078 (win2 (split-window nil ( / (window-height) 3)))
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index 5946e93f34d..2e3858b2cc5 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -2685,7 +2685,6 @@ Obeying it means displaying in another window the specified file and line."
2685(declare-function global-hl-line-highlight "hl-line" ()) 2685(declare-function global-hl-line-highlight "hl-line" ())
2686(declare-function hl-line-highlight "hl-line" ()) 2686(declare-function hl-line-highlight "hl-line" ())
2687(declare-function gdb-display-source-buffer "gdb-mi" (buffer)) 2687(declare-function gdb-display-source-buffer "gdb-mi" (buffer))
2688(declare-function gdb-display-buffer "gdb-mi" (buf dedicated &optional size))
2689 2688
2690;; Make sure the file named TRUE-FILE is in a buffer that appears on the screen 2689;; Make sure the file named TRUE-FILE is in a buffer that appears on the screen
2691;; and that its line LINE is visible. 2690;; and that its line LINE is visible.
@@ -2702,10 +2701,7 @@ Obeying it means displaying in another window the specified file and line."
2702 (window (and buffer 2701 (window (and buffer
2703 (or (get-buffer-window buffer) 2702 (or (get-buffer-window buffer)
2704 (if (eq gud-minor-mode 'gdbmi) 2703 (if (eq gud-minor-mode 'gdbmi)
2705 (or (if (get-buffer-window buffer 'visible) 2704 (display-buffer buffer nil 'visible))
2706 (display-buffer buffer nil 'visible))
2707 (unless (gdb-display-source-buffer buffer)
2708 (gdb-display-buffer buffer nil 'visible))))
2709 (display-buffer buffer)))) 2705 (display-buffer buffer))))
2710 (pos)) 2706 (pos))
2711 (if buffer 2707 (if buffer
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 3e3d7adc0b6..4b77c6dab1a 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -1003,7 +1003,7 @@ Return as (TOP . BOTTOM) the extent of ifdef block."
1003 "Compress the define list ENV into a list of defined symbols only." 1003 "Compress the define list ENV into a list of defined symbols only."
1004 (let ((new-defs nil)) 1004 (let ((new-defs nil))
1005 (dolist (def env new-defs) 1005 (dolist (def env new-defs)
1006 (if (hif-lookup (car def)) (push (car env) new-defs))))) 1006 (if (hif-lookup (car def)) (push (car def) new-defs)))))
1007 1007
1008(defun hide-ifdef-set-define-alist (name) 1008(defun hide-ifdef-set-define-alist (name)
1009 "Set the association for NAME to `hide-ifdef-env'." 1009 "Set the association for NAME to `hide-ifdef-env'."
diff --git a/lisp/progmodes/hideshow.el b/lisp/progmodes/hideshow.el
index b6d2b5e319c..233b9a5212e 100644
--- a/lisp/progmodes/hideshow.el
+++ b/lisp/progmodes/hideshow.el
@@ -408,6 +408,8 @@ element (using `match-beginning') before calling `hs-forward-sexp-func'.")
408 408
409(defvar hs-block-end-regexp nil 409(defvar hs-block-end-regexp nil
410 "Regexp for end of block.") 410 "Regexp for end of block.")
411(make-variable-buffer-local 'hs-block-end-regexp)
412
411 413
412(defvar hs-forward-sexp-func 'forward-sexp 414(defvar hs-forward-sexp-func 'forward-sexp
413 "Function used to do a `forward-sexp'. 415 "Function used to do a `forward-sexp'.
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index 519e5aef2bc..d954cd53e0a 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -426,18 +426,21 @@ Match group 1 is the name of the macro.")
426(defcustom js-indent-level 4 426(defcustom js-indent-level 4
427 "Number of spaces for each indentation step in `js-mode'." 427 "Number of spaces for each indentation step in `js-mode'."
428 :type 'integer 428 :type 'integer
429 :safe 'integerp
429 :group 'js) 430 :group 'js)
430 431
431(defcustom js-expr-indent-offset 0 432(defcustom js-expr-indent-offset 0
432 "Number of additional spaces for indenting continued expressions. 433 "Number of additional spaces for indenting continued expressions.
433The value must be no less than minus `js-indent-level'." 434The value must be no less than minus `js-indent-level'."
434 :type 'integer 435 :type 'integer
436 :safe 'integerp
435 :group 'js) 437 :group 'js)
436 438
437(defcustom js-paren-indent-offset 0 439(defcustom js-paren-indent-offset 0
438 "Number of additional spaces for indenting expressions in parentheses. 440 "Number of additional spaces for indenting expressions in parentheses.
439The value must be no less than minus `js-indent-level'." 441The value must be no less than minus `js-indent-level'."
440 :type 'integer 442 :type 'integer
443 :safe 'integerp
441 :group 'js 444 :group 'js
442 :version "24.1") 445 :version "24.1")
443 446
@@ -445,6 +448,7 @@ The value must be no less than minus `js-indent-level'."
445 "Number of additional spaces for indenting expressions in square braces. 448 "Number of additional spaces for indenting expressions in square braces.
446The value must be no less than minus `js-indent-level'." 449The value must be no less than minus `js-indent-level'."
447 :type 'integer 450 :type 'integer
451 :safe 'integerp
448 :group 'js 452 :group 'js
449 :version "24.1") 453 :version "24.1")
450 454
@@ -452,6 +456,7 @@ The value must be no less than minus `js-indent-level'."
452 "Number of additional spaces for indenting expressions in curly braces. 456 "Number of additional spaces for indenting expressions in curly braces.
453The value must be no less than minus `js-indent-level'." 457The value must be no less than minus `js-indent-level'."
454 :type 'integer 458 :type 'integer
459 :safe 'integerp
455 :group 'js 460 :group 'js
456 :version "24.1") 461 :version "24.1")
457 462
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 457c7fee36c..3f93ffa84ba 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -138,18 +138,11 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
138 138
139(defvar ruby-mode-map 139(defvar ruby-mode-map
140 (let ((map (make-sparse-keymap))) 140 (let ((map (make-sparse-keymap)))
141 (define-key map "{" 'ruby-electric-brace)
142 (define-key map "}" 'ruby-electric-brace)
143 (define-key map (kbd "M-C-a") 'ruby-beginning-of-defun)
144 (define-key map (kbd "M-C-e") 'ruby-end-of-defun)
145 (define-key map (kbd "M-C-b") 'ruby-backward-sexp) 141 (define-key map (kbd "M-C-b") 'ruby-backward-sexp)
146 (define-key map (kbd "M-C-f") 'ruby-forward-sexp) 142 (define-key map (kbd "M-C-f") 'ruby-forward-sexp)
147 (define-key map (kbd "M-C-p") 'ruby-beginning-of-block) 143 (define-key map (kbd "M-C-p") 'ruby-beginning-of-block)
148 (define-key map (kbd "M-C-n") 'ruby-end-of-block) 144 (define-key map (kbd "M-C-n") 'ruby-end-of-block)
149 (define-key map (kbd "M-C-h") 'ruby-mark-defun)
150 (define-key map (kbd "M-C-q") 'ruby-indent-exp) 145 (define-key map (kbd "M-C-q") 'ruby-indent-exp)
151 (define-key map (kbd "C-M-h") 'backward-kill-word)
152 (define-key map (kbd "C-j") 'reindent-then-newline-and-indent)
153 (define-key map (kbd "C-c {") 'ruby-toggle-block) 146 (define-key map (kbd "C-c {") 'ruby-toggle-block)
154 map) 147 map)
155 "Keymap used in Ruby mode.") 148 "Keymap used in Ruby mode.")
@@ -840,12 +833,6 @@ and `\\' when preceded by `?'."
840 (+ indent ruby-indent-level) 833 (+ indent ruby-indent-level)
841 indent)))) 834 indent))))
842 835
843(defun ruby-electric-brace (arg)
844 "Insert a brace and re-indent the current line."
845 (interactive "P")
846 (self-insert-command (prefix-numeric-value arg))
847 (ruby-indent-line t))
848
849;; TODO: Why isn't one ruby-*-of-defun written in terms of the other? 836;; TODO: Why isn't one ruby-*-of-defun written in terms of the other?
850(defun ruby-beginning-of-defun (&optional arg) 837(defun ruby-beginning-of-defun (&optional arg)
851 "Move backward to the beginning of the current top-level defun. 838 "Move backward to the beginning of the current top-level defun.
@@ -1024,15 +1011,6 @@ With ARG, do it many times. Negative ARG means move forward."
1024 ((error))) 1011 ((error)))
1025 i))) 1012 i)))
1026 1013
1027(defun ruby-mark-defun ()
1028 "Put mark at end of this Ruby function, point at beginning."
1029 (interactive)
1030 (push-mark (point))
1031 (ruby-end-of-defun)
1032 (push-mark (point) nil t)
1033 (ruby-beginning-of-defun)
1034 (re-search-backward "^\n" (- (point) 1) t))
1035
1036(defun ruby-indent-exp (&optional ignored) 1014(defun ruby-indent-exp (&optional ignored)
1037 "Indent each line in the balanced expression following the point." 1015 "Indent each line in the balanced expression following the point."
1038 (interactive "*P") 1016 (interactive "*P")
@@ -1586,6 +1564,10 @@ The variable `ruby-indent-level' controls the amount of indentation.
1586 'ruby-imenu-create-index) 1564 'ruby-imenu-create-index)
1587 (set (make-local-variable 'add-log-current-defun-function) 1565 (set (make-local-variable 'add-log-current-defun-function)
1588 'ruby-add-log-current-method) 1566 'ruby-add-log-current-method)
1567 (set (make-local-variable 'beginning-of-defun-function)
1568 'ruby-beginning-of-defun)
1569 (set (make-local-variable 'end-of-defun-function)
1570 'ruby-end-of-defun)
1589 1571
1590 (add-hook 1572 (add-hook
1591 (cond ((boundp 'before-save-hook) 'before-save-hook) 1573 (cond ((boundp 'before-save-hook) 'before-save-hook)
diff --git a/lisp/progmodes/sh-script.el b/lisp/progmodes/sh-script.el
index a6089aabb04..a422462775d 100644
--- a/lisp/progmodes/sh-script.el
+++ b/lisp/progmodes/sh-script.el
@@ -202,6 +202,11 @@
202 (require 'comint)) 202 (require 'comint))
203(require 'executable) 203(require 'executable)
204 204
205(autoload 'comint-completion-at-point "comint")
206(autoload 'comint-filename-completion "comint")
207(autoload 'shell-command-completion "shell")
208(autoload 'shell-environment-variable-completion "shell")
209
205(defvar font-lock-comment-face) 210(defvar font-lock-comment-face)
206(defvar font-lock-set-defaults) 211(defvar font-lock-set-defaults)
207(defvar font-lock-string-face) 212(defvar font-lock-string-face)
@@ -470,7 +475,6 @@ This is buffer-local in every such buffer.")
470 (define-key map "\C-\M-x" 'sh-execute-region) 475 (define-key map "\C-\M-x" 'sh-execute-region)
471 (define-key map "\C-c\C-x" 'executable-interpret) 476 (define-key map "\C-c\C-x" 'executable-interpret)
472 477
473 (define-key map [remap complete-tag] 'comint-dynamic-complete)
474 (define-key map [remap delete-backward-char] 478 (define-key map [remap delete-backward-char]
475 'backward-delete-char-untabify) 479 'backward-delete-char-untabify)
476 (define-key map "\C-c:" 'sh-set-shell) 480 (define-key map "\C-c:" 'sh-set-shell)
@@ -553,9 +557,9 @@ This is buffer-local in every such buffer.")
553 "Value to use for `skeleton-pair-default-alist' in Shell-Script mode.") 557 "Value to use for `skeleton-pair-default-alist' in Shell-Script mode.")
554 558
555(defcustom sh-dynamic-complete-functions 559(defcustom sh-dynamic-complete-functions
556 '(shell-dynamic-complete-environment-variable 560 '(shell-environment-variable-completion
557 shell-dynamic-complete-command 561 shell-command-completion
558 comint-dynamic-complete-filename) 562 comint-filename-completion)
559 "Functions for doing TAB dynamic completion." 563 "Functions for doing TAB dynamic completion."
560 :type '(repeat function) 564 :type '(repeat function)
561 :group 'sh-script) 565 :group 'sh-script)
@@ -1187,7 +1191,7 @@ This value is used for the `+' and `-' symbols in an indentation variable."
1187 :group 'sh-indentation) 1191 :group 'sh-indentation)
1188(put 'sh-basic-offset 'safe-local-variable 'integerp) 1192(put 'sh-basic-offset 'safe-local-variable 'integerp)
1189 1193
1190(defcustom sh-indent-comment nil 1194(defcustom sh-indent-comment t
1191 "How a comment line is to be indented. 1195 "How a comment line is to be indented.
1192nil means leave it as it is; 1196nil means leave it as it is;
1193t means indent it as a normal line, aligning it to previous non-blank 1197t means indent it as a normal line, aligning it to previous non-blank
@@ -1198,6 +1202,7 @@ a number means align to that column, e.g. 0 means first column."
1198 (const :tag "Indent as a normal line." t) 1202 (const :tag "Indent as a normal line." t)
1199 (integer :menu-tag "Indent to this col (0 means first col)." 1203 (integer :menu-tag "Indent to this col (0 means first col)."
1200 :tag "Indent to column number.") ) 1204 :tag "Indent to column number.") )
1205 :version "24.3"
1201 :group 'sh-indentation) 1206 :group 'sh-indentation)
1202 1207
1203 1208
@@ -1485,6 +1490,7 @@ with your script for an edit-interpret-debug cycle."
1485 (set (make-local-variable 'local-abbrev-table) sh-mode-abbrev-table) 1490 (set (make-local-variable 'local-abbrev-table) sh-mode-abbrev-table)
1486 (set (make-local-variable 'comint-dynamic-complete-functions) 1491 (set (make-local-variable 'comint-dynamic-complete-functions)
1487 sh-dynamic-complete-functions) 1492 sh-dynamic-complete-functions)
1493 (add-hook 'completion-at-point-functions 'comint-completion-at-point nil t)
1488 ;; we can't look if previous line ended with `\' 1494 ;; we can't look if previous line ended with `\'
1489 (set (make-local-variable 'comint-prompt-regexp) "^[ \t]*") 1495 (set (make-local-variable 'comint-prompt-regexp) "^[ \t]*")
1490 (set (make-local-variable 'imenu-case-fold-search) nil) 1496 (set (make-local-variable 'imenu-case-fold-search) nil)
@@ -4109,20 +4115,6 @@ The document is bounded by `sh-here-document-word'."
4109 4115
4110;; various other commands 4116;; various other commands
4111 4117
4112(autoload 'comint-dynamic-complete "comint"
4113 "Dynamically perform completion at point." t)
4114
4115(autoload 'shell-dynamic-complete-command "shell"
4116 "Dynamically complete the command at point." t)
4117
4118(autoload 'comint-dynamic-complete-filename "comint"
4119 "Dynamically complete the filename at point." t)
4120
4121(autoload 'shell-dynamic-complete-environment-variable "shell"
4122 "Dynamically complete the environment variable at point." t)
4123
4124
4125
4126(defun sh-beginning-of-command () 4118(defun sh-beginning-of-command ()
4127 ;; FIXME: Redefine using SMIE. 4119 ;; FIXME: Redefine using SMIE.
4128 "Move point to successive beginnings of commands." 4120 "Move point to successive beginnings of commands."