Index: src/bin/psql/help.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/help.c,v
retrieving revision 1.124
diff -c -c -r1.124 help.c
*** src/bin/psql/help.c	29 Mar 2008 19:40:12 -0000	1.124
--- src/bin/psql/help.c	4 Apr 2008 17:39:05 -0000
***************
*** 188,193 ****
--- 188,194 ----
  			ON(pset.timing));
  	fprintf(output, _("  \\unset NAME    unset (delete) internal variable\n"));
  	fprintf(output, _("  \\! [COMMAND]   execute command in shell or start interactive shell\n"));
+ 	fprintf(output, _("  \\?             display this help output\n"));
  	fprintf(output, "\n");
  
  	fprintf(output, _("Query Buffer\n"));
Index: src/bin/psql/mainloop.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/psql/mainloop.c,v
retrieving revision 1.87
diff -c -c -r1.87 mainloop.c
*** src/bin/psql/mainloop.c	1 Jan 2008 19:45:56 -0000	1.87
--- src/bin/psql/mainloop.c	4 Apr 2008 17:39:05 -0000
***************
*** 11,16 ****
--- 11,17 ----
  
  #include "command.h"
  #include "common.h"
+ #include "help.h"
  #include "input.h"
  #include "settings.h"
  
***************
*** 171,176 ****
--- 172,187 ----
  			continue;
  		}
  
+ 		/* A request for help? Be friendly and show them the slash way of doing things */
+ 		if (pset.cur_cmd_interactive && query_buf->len == 0 &&
+ 			pg_strncasecmp(line, "help", 4) == 0 &&
+ 			(line[4] == '\0' || line[4] == ';' || isspace(line[4])))
+ 		{
+ 			free(line);
+ 			slashUsage(pset.popt.topt.pager);
+ 			continue;
+ 		}
+ 
  		/* echo back if flag is set */
  		if (pset.echo == PSQL_ECHO_ALL && !pset.cur_cmd_interactive)
  			puts(line);
