Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

zsh-3.0.3: a problem in Src/jobs.c



Jo napot kivanok!

	I found a problem in zsh-3.0.3/Src/jobs.c: when you
invoke, say, "emacs with x-window" in background, and quit the
emacs, then the tty setting is modified unexpectedly.  This is
inconvenient; at least, the behavior is not the same as those of
ksh, csh nor older zsh.  The following is the sample session:

	ares% stty
	speed 9600 baud; line = 0;
	intr = ^G; erase = ^H;
	-brkint ixoff -imaxbel
	-iexten -echoctl
	ares% emacs &
	[1] 6524
	ares% 
	[1]  + done       emacs
	ares% stty
	speed 9600 baud; line = 0;
	intr = ^G; quit = <undef>; erase = ^H; susp = <undef>; lnext = <undef>;
	flush = <undef>;
	-brkint inlcr ixoff -imaxbel
	-iexten -echoctl

where "ares" is an i586 box with Linux-2.0.27/Slackware-3.1.0.

	I made a quick hack to fix it for the time being.  The
following is it.  I am hoping the problem will be fixed soon.
----------------------------------------------------------------
*** zsh-3.0.3/Src/jobs.c.ORIG	Tue Jun  3 05:11:27 1997
--- zsh-3.0.3/Src/jobs.c	Wed Jun 18 05:17:02 1997
***************
*** 154,170 ****
  	}
      }
  
!     if (shout && !ttyfrozen && !jn->stty_in_env)
! 	gettyinfo(&shttyinfo);
  
!     if (isset(MONITOR)) {
! 	pid_t pgrp = gettygrp();           /* get process group of tty      */
! 
! 	/* is this job in the foreground of an interactive shell? */
! 	if (mypgrp != pgrp && inforeground &&
! 	    (jn->gleader == pgrp || (pgrp > 1 && kill(-pgrp, 0) == -1))) {
! 	    attachtty(mypgrp);
! 	    adjustwinsize();   /* check window size and adjust if necessary */
  	}
      }
  
--- 154,181 ----
  	}
      }
  
!     {
! 	pid_t pgrp = -1;
! 	int is_foreground = 0;	/* is this job in the foreground actually? */
  
! 	if (shout && !ttyfrozen && !jn->stty_in_env) {
! 	    pgrp = gettygrp();	/* get process group of tty */
! 	    is_foreground = (jn->gleader == pgrp ||
! 			     (pgrp > 1 && kill(-pgrp, 0) == -1));
! 	    if (is_foreground)
! 		gettyinfo(&shttyinfo);
! 	}
! 	if (isset(MONITOR)) {
! 	    if (pgrp == -1) {
! 		pgrp = gettygrp();
! 		is_foreground = (jn->gleader == pgrp ||
! 				 (pgrp > 1 && kill(-pgrp, 0) == -1));
! 	    }
! 	    /* is this job in the foreground of an interactive shell? */
! 	    if (mypgrp != pgrp && inforeground && is_foreground) {
! 		attachtty(mypgrp);
! 		adjustwinsize(); /* check window size & adjust if necessary */
! 	    }
  	}
      }
  
----------------------------------------------------------------

Regards,

Hisao Suzuki <suzuki@xxxxxxxxxxxxxx>



Messages sorted by: Reverse Date, Date, Thread, Author