Bug 27972 - losing information with talk(1)
Summary: losing information with talk(1)
Status: Closed Not Accepted
Alias: None
Product: Base System
Classification: Unclassified
Component: bin (show other bugs)
Version: 4.3-STABLE
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2001-06-08 20:30 UTC by sebster
Modified: 2019-01-29 04:51 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description sebster 2001-06-08 20:30:07 UTC
Using the talk utility it is possible to communicate to other users, however
if they have something to say that is longer than your buffer you lose the
information without any way to check what was said.

Fix: 

A very simple fix which would make talk about 1000 times more convenient
(IMHO) would be to flip the windows: put "me" in the bottom, and "him" in
the top window. That way, whether you are on the console or in an xterm,
you can scroll back to see what the other person said.
How-To-Repeat: Say a lot to somebody in a talk window in a short amount of time.
Comment 1 sebster 2001-06-08 21:46:21 UTC
Hi,

I patched talk running at home with the following patch to flip the 
"him" and "me" windows, tested it, and it semes to work.

There also seems to be a bug in init_disp.c with the line (around line 104):

        idlok(my_win.x_win, TRUE);

in the block where his_win is initialized... Shouldn't that read "his_win"?
As is, the original code contains the above statement twice.

Greetings,
Sebastiaan van Erk

----------------------------------->8---------------------------------------

diff -c -r talk.orig/init_disp.c talk/init_disp.c
*** talk.orig/init_disp.c	Fri Jun  8 22:26:26 2001
--- talk/init_disp.c	Fri Jun  8 22:26:00 2001
***************
*** 90,111 ****
  	signal(SIGINT, sig_sent);
  	signal(SIGPIPE, sig_sent);
  	/* curses takes care of ^Z */
! 	my_win.x_nlines = LINES / 2;
  	my_win.x_ncols = COLS;
! 	my_win.x_win = newwin(my_win.x_nlines, my_win.x_ncols, 0, 0);
  	idlok(my_win.x_win, TRUE);
  	scrollok(my_win.x_win, TRUE);
  	wclear(my_win.x_win);
  
! 	his_win.x_nlines = LINES / 2 - 1;
  	his_win.x_ncols = COLS;
! 	his_win.x_win = newwin(his_win.x_nlines, his_win.x_ncols,
! 	    my_win.x_nlines+1, 0);
! 	idlok(my_win.x_win, TRUE);
  	scrollok(his_win.x_win, TRUE);
  	wclear(his_win.x_win);
  
! 	line_win = newwin(1, COLS, my_win.x_nlines, 0);
  #if defined(hline) || defined(whline) || defined(NCURSES_VERSION)
  	whline(line_win, 0, COLS);
  #else
--- 90,111 ----
  	signal(SIGINT, sig_sent);
  	signal(SIGPIPE, sig_sent);
  	/* curses takes care of ^Z */
! 	my_win.x_nlines = LINES / 2 - 1;
  	my_win.x_ncols = COLS;
! 	my_win.x_win = newwin(my_win.x_nlines, my_win.x_ncols, 
! 	    his_win.x_nlines + 1, 0);
  	idlok(my_win.x_win, TRUE);
  	scrollok(my_win.x_win, TRUE);
  	wclear(my_win.x_win);
  
! 	his_win.x_nlines = LINES / 2;
  	his_win.x_ncols = COLS;
! 	his_win.x_win = newwin(his_win.x_nlines, his_win.x_ncols, 0, 0);
! 	idlok(his_win.x_win, TRUE);
  	scrollok(his_win.x_win, TRUE);
  	wclear(his_win.x_win);
  
! 	line_win = newwin(1, COLS, his_win.x_nlines, 0);
  #if defined(hline) || defined(whline) || defined(NCURSES_VERSION)
  	whline(line_win, 0, COLS);
  #else
diff -c -r talk.orig/io.c talk/io.c
*** talk.orig/io.c	Fri Jun  8 22:26:26 2001
--- talk/io.c	Fri Jun  8 22:14:35 2001
***************
*** 124,133 ****
  p_error(string)
  	char *string;
  {
! 	wmove(my_win.x_win, current_line, 0);
! 	wprintw(my_win.x_win, "[%s : %s (%d)]\n",
  	    string, strerror(errno), errno);
! 	wrefresh(my_win.x_win);
  	move(LINES-1, 0);
  	refresh();
  	quit();
--- 124,133 ----
  p_error(string)
  	char *string;
  {
! 	wmove(his_win.x_win, current_line, 0);
! 	wprintw(his_win.x_win, "[%s : %s (%d)]\n",
  	    string, strerror(errno), errno);
! 	wrefresh(his_win.x_win);
  	move(LINES-1, 0);
  	refresh();
  	quit();
***************
*** 140,148 ****
  message(string)
  	char *string;
  {
! 	wmove(my_win.x_win, current_line, 0);
! 	wprintw(my_win.x_win, "[%s]\n", string);
! 	if (current_line < my_win.x_nlines - 1)
  		current_line++;
! 	wrefresh(my_win.x_win);
  }
--- 140,148 ----
  message(string)
  	char *string;
  {
! 	wmove(his_win.x_win, current_line, 0);
! 	wprintw(his_win.x_win, "[%s]\n", string);
! 	if (current_line < his_win.x_nlines - 1)
  		current_line++;
! 	wrefresh(his_win.x_win);
  }
Comment 2 sebster 2001-06-08 22:02:33 UTC
Hi,

Sorry for my stupidity, but my previous patch was wrong.

Here is the final (and tested) patch.

Greetings,
Sebastiaan van Erk

--------------------------------->8------------------------------------------

diff -c -r talk/init_disp.c /usr/src/usr.bin/talk/init_disp.c
*** talk/init_disp.c	Mon Aug 30 10:21:17 1999
--- /usr/src/usr.bin/talk/init_disp.c	Fri Jun  8 22:55:24 2001
***************
*** 90,111 ****
  	signal(SIGINT, sig_sent);
  	signal(SIGPIPE, sig_sent);
  	/* curses takes care of ^Z */
! 	my_win.x_nlines = LINES / 2;
  	my_win.x_ncols = COLS;
! 	my_win.x_win = newwin(my_win.x_nlines, my_win.x_ncols, 0, 0);
  	idlok(my_win.x_win, TRUE);
  	scrollok(my_win.x_win, TRUE);
  	wclear(my_win.x_win);
  
! 	his_win.x_nlines = LINES / 2 - 1;
! 	his_win.x_ncols = COLS;
! 	his_win.x_win = newwin(his_win.x_nlines, his_win.x_ncols,
! 	    my_win.x_nlines+1, 0);
! 	idlok(my_win.x_win, TRUE);
! 	scrollok(his_win.x_win, TRUE);
! 	wclear(his_win.x_win);
! 
! 	line_win = newwin(1, COLS, my_win.x_nlines, 0);
  #if defined(hline) || defined(whline) || defined(NCURSES_VERSION)
  	whline(line_win, 0, COLS);
  #else
--- 90,111 ----
  	signal(SIGINT, sig_sent);
  	signal(SIGPIPE, sig_sent);
  	/* curses takes care of ^Z */
! 	his_win.x_nlines = LINES / 2;
! 	his_win.x_ncols = COLS;
! 	his_win.x_win = newwin(his_win.x_nlines, his_win.x_ncols, 0, 0);
! 	idlok(his_win.x_win, TRUE);
! 	scrollok(his_win.x_win, TRUE);
! 	wclear(his_win.x_win);
! 
! 	my_win.x_nlines = LINES / 2 - 1;
  	my_win.x_ncols = COLS;
! 	my_win.x_win = newwin(my_win.x_nlines, my_win.x_ncols, 
! 	    his_win.x_nlines + 1, 0);
  	idlok(my_win.x_win, TRUE);
  	scrollok(my_win.x_win, TRUE);
  	wclear(my_win.x_win);
  
! 	line_win = newwin(1, COLS, his_win.x_nlines, 0);
  #if defined(hline) || defined(whline) || defined(NCURSES_VERSION)
  	whline(line_win, 0, COLS);
  #else
diff -c -r talk/invite.c /usr/src/usr.bin/talk/invite.c
*** talk/invite.c	Sat Feb  3 11:27:57 2001
--- /usr/src/usr.bin/talk/invite.c	Fri Jun  8 22:12:23 2001
***************
*** 127,134 ****
  {
  
  	message("Ringing your party again");
! 	waddch(my_win.x_win, '\n');
! 	if (current_line < my_win.x_nlines - 1)
  		current_line++;
  	/* force a re-announce */
  	msg.id_num = htonl(remote_id + 1);
--- 127,134 ----
  {
  
  	message("Ringing your party again");
! 	waddch(his_win.x_win, '\n');
! 	if (current_line < his_win.x_nlines - 1)
  		current_line++;
  	/* force a re-announce */
  	msg.id_num = htonl(remote_id + 1);
diff -c -r talk/io.c /usr/src/usr.bin/talk/io.c
*** talk/io.c	Fri Aug 18 12:24:17 2000
--- /usr/src/usr.bin/talk/io.c	Fri Jun  8 22:14:35 2001
***************
*** 124,133 ****
  p_error(string)
  	char *string;
  {
! 	wmove(my_win.x_win, current_line, 0);
! 	wprintw(my_win.x_win, "[%s : %s (%d)]\n",
  	    string, strerror(errno), errno);
! 	wrefresh(my_win.x_win);
  	move(LINES-1, 0);
  	refresh();
  	quit();
--- 124,133 ----
  p_error(string)
  	char *string;
  {
! 	wmove(his_win.x_win, current_line, 0);
! 	wprintw(his_win.x_win, "[%s : %s (%d)]\n",
  	    string, strerror(errno), errno);
! 	wrefresh(his_win.x_win);
  	move(LINES-1, 0);
  	refresh();
  	quit();
***************
*** 140,148 ****
  message(string)
  	char *string;
  {
! 	wmove(my_win.x_win, current_line, 0);
! 	wprintw(my_win.x_win, "[%s]\n", string);
! 	if (current_line < my_win.x_nlines - 1)
  		current_line++;
! 	wrefresh(my_win.x_win);
  }
--- 140,148 ----
  message(string)
  	char *string;
  {
! 	wmove(his_win.x_win, current_line, 0);
! 	wprintw(his_win.x_win, "[%s]\n", string);
! 	if (current_line < his_win.x_nlines - 1)
  		current_line++;
! 	wrefresh(his_win.x_win);
  }
Comment 3 dima 2001-06-09 05:37:24 UTC
sebster@sebster.com writes:
> 
> >Number:         27972
> >Category:       bin
> >Synopsis:       losing information with talk
> >Description:
> Using the talk utility it is possible to communicate to other users, however
> if they have something to say that is longer than your buffer you lose the
> information without any way to check what was said.
> >How-To-Repeat:
> Say a lot to somebody in a talk window in a short amount of time.
> >Fix:
> A very simple fix which would make talk about 1000 times more convenient
> (IMHO) would be to flip the windows: put "me" in the bottom, and "him" in
> the top window. That way, whether you are on the console or in an xterm,
> you can scroll back to see what the other person said.

In general, I like this, and the second patch you posted looks good
upon visual inspection.  I haven't had time to investigate it further,
but already have a few questions:

  * Did you actually test that doing this will allow you to scroll up
and see your party's messages?  I haven't tested it myself, but have
an eerie feeling that it may not work.

  * What do you think of making this new behavior conditional on a
command-line option?  Some people may not care for this (e.g., they
only use talk for one or two line communications), but may get annoyed
at the sudden change of orientation.

Thanks,

					Dima Dorfman
					dima@unixfreak.org
Comment 4 ru freebsd_committer freebsd_triage 2001-06-09 12:00:29 UTC
On Fri, Jun 08, 2001 at 09:40:03PM -0700, Dima Dorfman wrote:
> The following reply was made to PR bin/27972; it has been noted by GNATS.
> 
> From: Dima Dorfman <dima@unixfreak.org>
> To: sebster@sebster.com
> Cc: FreeBSD-gnats-submit@freebsd.org
> Subject: Re: bin/27972: talk feature 
> Date: Fri, 08 Jun 2001 21:37:24 -0700
> 
>  sebster@sebster.com writes:
>  > 
>  > >Number:         27972
>  > >Category:       bin
>  > >Synopsis:       losing information with talk
>  > >Description:
>  > Using the talk utility it is possible to communicate to other users, however
>  > if they have something to say that is longer than your buffer you lose the
>  > information without any way to check what was said.
>  > >How-To-Repeat:
>  > Say a lot to somebody in a talk window in a short amount of time.
>  > >Fix:
>  > A very simple fix which would make talk about 1000 times more convenient
>  > (IMHO) would be to flip the windows: put "me" in the bottom, and "him" in
>  > the top window. That way, whether you are on the console or in an xterm,
>  > you can scroll back to see what the other person said.
>  
>  In general, I like this, and the second patch you posted looks good
>  upon visual inspection.  I haven't had time to investigate it further,
>  but already have a few questions:
>  
>    * Did you actually test that doing this will allow you to scroll up
>  and see your party's messages?  I haven't tested it myself, but have
>  an eerie feeling that it may not work.
>  
It doesn't work here, unfortunately, at least on a text VTY conversation.

>    * What do you think of making this new behavior conditional on a
>  command-line option?  Some people may not care for this (e.g., they
>  only use talk for one or two line communications), but may get annoyed
>  at the sudden change of orientation.
>  
I think this could be accomplished by putting the other's party address
from which the response (if we initiated a call) was made.


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age
Comment 5 mjt 2001-06-11 23:35:54 UTC
sebster@sebster.com wrote:
> 
[]
> >Description:
> Using the talk utility it is possible to communicate to other users, however
> if they have something to say that is longer than your buffer you lose the
> information without any way to check what was said.
> >How-To-Repeat:
> Say a lot to somebody in a talk window in a short amount of time.
> >Fix:
> A very simple fix which would make talk about 1000 times more convenient
> (IMHO) would be to flip the windows: put "me" in the bottom, and "him" in
> the top window. That way, whether you are on the console or in an xterm,
> you can scroll back to see what the other person said.

Please take a look to e.g. talk in linux's netkit package.  Talk there
has "slightly" different feature that is "the right thing(TM)" to do
IMHO: it can scroll both half-windows of its own, using ^P and ^N for
other window and M-P and M-N for my window.  Don't know how many lines
it remembers, maybe even all conversation...  I also saw a version of
talk that displays tiny scrollbars (all in textmode) and allows to
click to it with a mouse.

BTW, I don't know how to properly respond to such messages and
gnats... ;)

Regards,
 Michael.
Comment 6 Eitan Adler freebsd_committer freebsd_triage 2017-12-31 07:58:51 UTC
For bugs matching the following criteria:

Status: In Progress Changed: (is less than) 2014-06-01

Reset to default assignee and clear in-progress tags.

Mail being skipped
Comment 7 Oleksandr Tymoshenko freebsd_committer freebsd_triage 2019-01-29 04:51:18 UTC
Closing this feature request as "Reject" since nobody picked it up to work on.
Feel free to reopen if there are any plans to add it to the current version.