Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
new builtin 'help'
- X-seq: zsh-workers 19247
- From: Miek Gieben <miekg@xxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: new builtin 'help'
- Date: Fri, 14 Nov 2003 15:10:15 +0100
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
Hello,
after having used bash for 8 years i've switch to zsh. Boy, what a
difference :-)
But one of the things i missed was a 'help' builtin function.
So I took the liberty to add it to zsh, I used version 4.0.7 for it.
How it works:
It just prints out the files in /usr/share/zsh/help/ when the help
builtin is used. The path is currently hardcoded.
I've just looked at the sources for a few hours, so a lot of stuff
in my patch will be not in the zsh-way of doing it. If there is
interest in this patch I will of course fix that.
Todo:
o program more in zsh style (remove hardcoded paths)
o identation is wrong
o make a help help work
o write doc for help
o port it to latest development version of zsh
Patch is attached (against 4.0.7). Is this considered usefull?
thanks,
grtz
Miek
Oh btw, i'm not subscribed to the workers ML, only to the zsh-users ML.
--
"So long, and thanks for all the fish."
-- Hitchhikers Guide to the Galaxy
diff -u zsh-4.0.7/Src/builtin.c zsh-4.0.7-help/Src/builtin.c
--- zsh-4.0.7/Src/builtin.c 2003-05-07 11:28:23.000000000 +0200
+++ zsh-4.0.7-help/Src/builtin.c 2003-11-14 14:26:38.000000000 +0100
@@ -73,6 +73,7 @@
BUILTIN("hashinfo", 0, bin_hashinfo, 0, 0, 0, NULL, NULL),
#endif
+ BUILTIN("help", 0, bin_help, 0, -1, 0, NULL, NULL),
BUILTIN("history", 0, bin_fc, 0, -1, BIN_FC, "nrdDfEim", "l"),
BUILTIN("integer", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "Hghilrtux", "i"),
BUILTIN("jobs", 0, bin_fg, 0, -1, BIN_JOBS, "dlpZrs", NULL),
@@ -1202,6 +1203,50 @@
}
}
+/* bin_help */
+
+/**/
+int
+bin_help(char *nam, char **argv, char *ops, int func)
+{
+ /*
+ * look the explanation up in /usr/share/zsh/help
+ * and print it on stdout
+ */
+
+ char *helpfile = NULL;
+ char *line = NULL;
+ FILE *help = NULL;
+ size_t j = 0;
+
+ if ( argv[0] == NULL )
+ return 1;
+
+ helpfile = (char*)zalloc(strlen("/usr/share/zsh/help/") + strlen(argv[0]) + 1);
+ sprintf(helpfile,"/usr/share/zsh/help/%s",argv[0]);
+
+ /* open the file, if that works print out the contents to screen */
+ help = fopen(helpfile, "r");
+ zfree(helpfile, 0);
+ if ( help == NULL ) {
+ zwarnnam(nam, "no help available for: %s", argv[0], 0);
+ return 1;
+ }
+
+
+ line = (char*)zalloc(90); /* 90 bytes per line should be enough */
+
+ /* getline, does some resizing of its own --- *frown* */
+ while ( getline(&line, &j, help ) != 1 )
+ printf("%s",line);
+
+ zfree(line,90); /* this could be too little... */
+ fclose(help);
+
+ return 0;
+}
+
+
/**** history list functions ****/
/* fc, history, r */
diff -u zsh-4.0.7/Src/builtin.epro zsh-4.0.7-help/Src/builtin.epro
--- zsh-4.0.7/Src/builtin.epro 2003-11-14 14:42:45.000000000 +0100
+++ zsh-4.0.7-help/Src/builtin.epro 2003-11-14 14:40:36.000000000 +0100
@@ -17,6 +17,7 @@
extern int fixdir _((char*src));
extern mod_import_function void printqt _((char*str));
extern mod_import_function void printif _((char*str,int c));
+extern int bin_help _((char*nam,char**argv,char*ops,int func));
extern int bin_fc _((char*nam,char**argv,char*ops,int func));
extern Param typeset_single _((char*cname,char*pname,Param pm,int func,int on,int off,int roff,char*value,Param altpm));
extern int bin_typeset _((char*name,char**argv,char*ops,int func));
Binary files zsh-4.0.7/Src/builtin.o and zsh-4.0.7-help/Src/builtin.o differ
Common subdirectories: zsh-4.0.7/Src/Builtins and zsh-4.0.7-help/Src/Builtins
diff -u zsh-4.0.7/Src/builtin.syms zsh-4.0.7-help/Src/builtin.syms
--- zsh-4.0.7/Src/builtin.syms 2003-11-14 14:42:45.000000000 +0100
+++ zsh-4.0.7-help/Src/builtin.syms 2003-11-14 14:40:36.000000000 +0100
@@ -27,6 +27,7 @@
Eextern mod_import_function void printqt _((char*str));
Xprintif
Eextern mod_import_function void printif _((char*str,int c));
+Eextern int bin_help _((char*nam,char**argv,char*ops,int func));
Eextern int bin_fc _((char*nam,char**argv,char*ops,int func));
Lstatic int fcgetcomm _((char*s));
Lstatic int fcsubs _((char**sp,struct asgment*sub));
diff -u zsh-4.0.7/Src/hashtable.h zsh-4.0.7-help/Src/hashtable.h
--- zsh-4.0.7/Src/hashtable.h 1999-04-15 20:05:38.000000000 +0200
+++ zsh-4.0.7-help/Src/hashtable.h 2003-11-14 13:54:21.000000000 +0100
@@ -56,6 +56,7 @@
#define BIN_ECHO 22
#define BIN_DISABLE 23
#define BIN_ENABLE 24
+#define BIN_HELP 25
/* These currently depend on being 0 and 1. */
#define BIN_SETOPT 0
Common subdirectories: zsh-4.0.7/Src/Modules and zsh-4.0.7-help/Src/Modules
Common subdirectories: zsh-4.0.7/Src/Zle and zsh-4.0.7-help/Src/Zle
Binary files zsh-4.0.7/Src/zsh and zsh-4.0.7-help/Src/zsh differ
Messages sorted by:
Reverse Date,
Date,
Thread,
Author