public inbox for insight@sourceware.org
 help / color / mirror / Atom feed
* Patch: xterm for tty
@ 2000-12-05 16:44 Tom Tromey
  2000-12-05 18:45 ` Fernando Nasser
  0 siblings, 1 reply; 2+ messages in thread
From: Tom Tromey @ 2000-12-05 16:44 UTC (permalink / raw)
  To: Insight List

This patch makes it possible to use an xterm as the tty for the
inferior process.  This only works on Unix, and it is only used if you
select this option from the target selection dialog.

Ok to commit?

2000-12-05  Tom Tromey  <tromey@redhat.com>

	* targetselection.itb (TargetSelection::build_win): Add option to
	start xterm.
	* interface.tcl (run_executable): Call tty::create if requested.
	* tty.tcl: New file.

Tom

Index: targetselection.itb
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/targetselection.itb,v
retrieving revision 1.6
diff -u -r1.6 targetselection.itb
--- targetselection.itb	2000/10/31 20:21:48	1.6
+++ targetselection.itb	2000/12/06 00:42:29
@@ -432,6 +432,9 @@
   entry $f.fr.bp.func -textvariable [pref varname gdb/load/bp_func] -width 20
   checkbutton $f.fr.verb -text [gettext "Display Download Dialog"] \
     -variable [pref varname gdb/load/$target-verbose]
+  checkbutton $f.fr.xterm -text [gettext "Use xterm as inferior's tty"] \
+    -variable [pref varname gdb/process/xtermtty] \
+    -onvalue yes -offvalue no
 
   if {![pref get gdb/control_target]} {
     $f.fr.main configure -state disabled
@@ -457,6 +460,7 @@
   pack $f.fr.bp.at_func $f.fr.bp.func -side left
   grid $f.fr.bp -sticky w -padx 5 -pady 5
   grid $f.fr.verb -sticky w -padx 5 -pady 5
+  grid $f.fr.xterm -sticky w -padx 5 -pady 5
   if {![pref get gdb/control_target]} {
     grid $f.fr.check -sticky w -padx 5 -pady 5
   }
Index: interface.tcl
===================================================================
RCS file: /cvs/src/src/gdb/gdbtk/library/interface.tcl,v
retrieving revision 1.8
diff -u -r1.8 interface.tcl
--- interface.tcl	2000/11/30 22:49:46	1.8
+++ interface.tcl	2000/12/06 00:42:30
@@ -995,7 +1002,7 @@
 proc run_executable { {auto_start 1} } {
   global gdb_loaded gdb_downloading gdb_target_name
   global gdb_exe_changed gdb_target_changed gdb_program_has_run
-  global gdb_running gdb_exe_name
+  global gdb_running gdb_exe_name tcl_platform
 
 #  debug "auto_start=$auto_start gdb_target_name=$gdb_target_name"
 
@@ -1086,6 +1093,13 @@
 	debug "set args $gdb_args"
 	catch {gdb_cmd "set args $gdb_args"}
       }
+    }
+
+    # If the user requested it, start an xterm for use as the
+    # inferior's tty.
+    if {$tcl_platform(platform) != "windows"
+	&& [pref getd gdb/process/xtermtty] == "yes"} {
+      tty::create
     }
 
     # 
Index: tty.tcl
===================================================================
RCS file: tty.tcl
diff -N tty.tcl
--- /dev/null	Tue May  5 13:32:27 1998
+++ tty.tcl	Tue Dec  5 16:42:30 2000
@@ -0,0 +1,55 @@
+# tty.tcl - xterm as tty for the inferior
+# Copyright (C) 1996, 2000 Red Hat, Inc
+# Written by Tom Tromey <tromey@cygnus.com>
+#
+# Interface to the inferior's terminal.  This is very rough, and is
+# guaranteed to only work on Unix machines (if even there).
+#
+
+namespace eval tty {
+  namespace export create
+
+  variable _xterm_fd {}
+
+  proc create {} {
+    variable _xterm_fd
+
+    destroy
+
+    # Tricky: we exec /bin/cat so that the xterm will exit whenever we
+    # close the write end of the pipe.  Note that the stdin
+    # redirection must come after tty is run; tty looks at its stdin.
+    set shcmd {/bin/sh -c 'exec 1>&7; tty; exec /bin/cat 0<&6'}
+
+    set fg [option get . foreground Foreground]
+    if {$fg == ""} then {
+      set fg black
+    }
+
+    set bg [. cget -background]
+    if {$bg == ""} then {
+      set bg [lindex [. configure -background] 3]
+    }
+
+    set xterm [list /bin/sh -c "exec xterm -T 'Gdb Child' -n Gdb -bg '$bg' -fg '$fg' -e $shcmd 6<&0 7>&1"]
+
+    # Need both read and write access to xterm process.
+    set _xterm_fd [open "| $xterm" w+]
+    set tty [gets $_xterm_fd]
+
+    # On failure we don't try the tty command.
+    if {$tty != ""} {
+      gdb_cmd "tty $tty"
+    }
+  }
+
+  proc destroy {} {
+    variable _xterm_fd
+
+    if {$_xterm_fd != ""} then {
+      # We don't care if this fails.
+      catch {close $_xterm_fd}
+    }
+    set _xterm_fd {}
+  }
+}

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Patch: xterm for tty
  2000-12-05 16:44 Patch: xterm for tty Tom Tromey
@ 2000-12-05 18:45 ` Fernando Nasser
  0 siblings, 0 replies; 2+ messages in thread
From: Fernando Nasser @ 2000-12-05 18:45 UTC (permalink / raw)
  To: tromey; +Cc: Insight List

Tom Tromey wrote:
> 
> This patch makes it possible to use an xterm as the tty for the
> inferior process.  This only works on Unix, and it is only used if you
> select this option from the target selection dialog.
> 
> Ok to commit?
> 

Absolutely.

Thank you very much.

Fernando


> 2000-12-05  Tom Tromey  <tromey@redhat.com>
> 
>         * targetselection.itb (TargetSelection::build_win): Add option to
>         start xterm.
>         * interface.tcl (run_executable): Call tty::create if requested.
>         * tty.tcl: New file.
> 
> Tom
> 
> Index: targetselection.itb
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/library/targetselection.itb,v
> retrieving revision 1.6
> diff -u -r1.6 targetselection.itb
> --- targetselection.itb 2000/10/31 20:21:48     1.6
> +++ targetselection.itb 2000/12/06 00:42:29
> @@ -432,6 +432,9 @@
>    entry $f.fr.bp.func -textvariable [pref varname gdb/load/bp_func] -width 20
>    checkbutton $f.fr.verb -text [gettext "Display Download Dialog"] \
>      -variable [pref varname gdb/load/$target-verbose]
> +  checkbutton $f.fr.xterm -text [gettext "Use xterm as inferior's tty"] \
> +    -variable [pref varname gdb/process/xtermtty] \
> +    -onvalue yes -offvalue no
> 
>    if {![pref get gdb/control_target]} {
>      $f.fr.main configure -state disabled
> @@ -457,6 +460,7 @@
>    pack $f.fr.bp.at_func $f.fr.bp.func -side left
>    grid $f.fr.bp -sticky w -padx 5 -pady 5
>    grid $f.fr.verb -sticky w -padx 5 -pady 5
> +  grid $f.fr.xterm -sticky w -padx 5 -pady 5
>    if {![pref get gdb/control_target]} {
>      grid $f.fr.check -sticky w -padx 5 -pady 5
>    }
> Index: interface.tcl
> ===================================================================
> RCS file: /cvs/src/src/gdb/gdbtk/library/interface.tcl,v
> retrieving revision 1.8
> diff -u -r1.8 interface.tcl
> --- interface.tcl       2000/11/30 22:49:46     1.8
> +++ interface.tcl       2000/12/06 00:42:30
> @@ -995,7 +1002,7 @@
>  proc run_executable { {auto_start 1} } {
>    global gdb_loaded gdb_downloading gdb_target_name
>    global gdb_exe_changed gdb_target_changed gdb_program_has_run
> -  global gdb_running gdb_exe_name
> +  global gdb_running gdb_exe_name tcl_platform
> 
>  #  debug "auto_start=$auto_start gdb_target_name=$gdb_target_name"
> 
> @@ -1086,6 +1093,13 @@
>         debug "set args $gdb_args"
>         catch {gdb_cmd "set args $gdb_args"}
>        }
> +    }
> +
> +    # If the user requested it, start an xterm for use as the
> +    # inferior's tty.
> +    if {$tcl_platform(platform) != "windows"
> +       && [pref getd gdb/process/xtermtty] == "yes"} {
> +      tty::create
>      }
> 
>      #
> Index: tty.tcl
> ===================================================================
> RCS file: tty.tcl
> diff -N tty.tcl
> --- /dev/null   Tue May  5 13:32:27 1998
> +++ tty.tcl     Tue Dec  5 16:42:30 2000
> @@ -0,0 +1,55 @@
> +# tty.tcl - xterm as tty for the inferior
> +# Copyright (C) 1996, 2000 Red Hat, Inc
> +# Written by Tom Tromey <tromey@cygnus.com>
> +#
> +# Interface to the inferior's terminal.  This is very rough, and is
> +# guaranteed to only work on Unix machines (if even there).
> +#
> +
> +namespace eval tty {
> +  namespace export create
> +
> +  variable _xterm_fd {}
> +
> +  proc create {} {
> +    variable _xterm_fd
> +
> +    destroy
> +
> +    # Tricky: we exec /bin/cat so that the xterm will exit whenever we
> +    # close the write end of the pipe.  Note that the stdin
> +    # redirection must come after tty is run; tty looks at its stdin.
> +    set shcmd {/bin/sh -c 'exec 1>&7; tty; exec /bin/cat 0<&6'}
> +
> +    set fg [option get . foreground Foreground]
> +    if {$fg == ""} then {
> +      set fg black
> +    }
> +
> +    set bg [. cget -background]
> +    if {$bg == ""} then {
> +      set bg [lindex [. configure -background] 3]
> +    }
> +
> +    set xterm [list /bin/sh -c "exec xterm -T 'Gdb Child' -n Gdb -bg '$bg' -fg '$fg' -e $shcmd 6<&0 7>&1"]
> +
> +    # Need both read and write access to xterm process.
> +    set _xterm_fd [open "| $xterm" w+]
> +    set tty [gets $_xterm_fd]
> +
> +    # On failure we don't try the tty command.
> +    if {$tty != ""} {
> +      gdb_cmd "tty $tty"
> +    }
> +  }
> +
> +  proc destroy {} {
> +    variable _xterm_fd
> +
> +    if {$_xterm_fd != ""} then {
> +      # We don't care if this fails.
> +      catch {close $_xterm_fd}
> +    }
> +    set _xterm_fd {}
> +  }
> +}

-- 
Fernando Nasser
Red Hat Canada Ltd.                     E-Mail:  fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario   M4P 2C9

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2000-12-05 18:45 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-12-05 16:44 Patch: xterm for tty Tom Tromey
2000-12-05 18:45 ` Fernando Nasser

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).