mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Merge pull request #1445 from profanity-im/feature/moremans
Create cmd to generate man pages for prof commands
This commit is contained in:
commit
f023d56b02
@ -213,7 +213,7 @@ icons_sources = $(top_srcdir)/icons/*
|
|||||||
|
|
||||||
script_sources = bootstrap.sh
|
script_sources = bootstrap.sh
|
||||||
|
|
||||||
man_sources = docs/profanity.1
|
man_sources = docs/profanity*.1
|
||||||
|
|
||||||
if BUILD_PGP
|
if BUILD_PGP
|
||||||
core_sources += $(pgp_sources)
|
core_sources += $(pgp_sources)
|
||||||
|
@ -15,6 +15,10 @@ Usually release candidates are tagged 0.6.0.rc1, 0.6.0.rc2 and tested for a week
|
|||||||
* Generate HTML docs (the docgen argument only works when package status is development)
|
* Generate HTML docs (the docgen argument only works when package status is development)
|
||||||
`./profanity docgen`
|
`./profanity docgen`
|
||||||
|
|
||||||
|
* Generate manpages for profanity commands (the mangen argument only works when package status is development)
|
||||||
|
`./profanity mangen`
|
||||||
|
These files should be added to the docs subfolder and added to git whenever a command changes.
|
||||||
|
|
||||||
* Determine if libprofanitys version needs to be [increased](https://github.com/profanity-im/profanity/issues/973)
|
* Determine if libprofanitys version needs to be [increased](https://github.com/profanity-im/profanity/issues/973)
|
||||||
* Update plugin API docs (./apidocs/c and ./apidocs/python) need to run the `gen.sh` and commit the results to the website git repo
|
* Update plugin API docs (./apidocs/c and ./apidocs/python) need to run the `gen.sh` and commit the results to the website git repo
|
||||||
* Update CHANGELOG
|
* Update CHANGELOG
|
||||||
|
@ -46,6 +46,7 @@ The user guide can be found at <https://profanity-im.github.io/userguide.html>.
|
|||||||
.B Profanity
|
.B Profanity
|
||||||
itself has a lot of built\-in help. Check the /help command for more information.
|
itself has a lot of built\-in help. Check the /help command for more information.
|
||||||
Type "/help help" for information on how to use help itself.
|
Type "/help help" for information on how to use help itself.
|
||||||
|
Profanity ships with one man page for each built-in command. For /account there is man profanity-account.
|
||||||
.SH CONFIGURATION
|
.SH CONFIGURATION
|
||||||
Configuration for
|
Configuration for
|
||||||
.B Profanity
|
.B Profanity
|
||||||
|
@ -2833,3 +2833,80 @@ command_docgen(void)
|
|||||||
printf("\nProcessed %d commands.\n\n", g_list_length(cmds));
|
printf("\nProcessed %d commands.\n\n", g_list_length(cmds));
|
||||||
g_list_free(cmds);
|
g_list_free(cmds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
command_mangen(void)
|
||||||
|
{
|
||||||
|
GList* cmds = NULL;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < ARRAY_SIZE(command_defs); i++) {
|
||||||
|
Command* pcmd = command_defs + i;
|
||||||
|
cmds = g_list_insert_sorted(cmds, pcmd, (GCompareFunc)_cmp_command);
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir_recursive("docs");
|
||||||
|
|
||||||
|
char* header = NULL;
|
||||||
|
GDateTime *now = g_date_time_new_now_local();
|
||||||
|
gchar *date = g_date_time_format(now, "%F");
|
||||||
|
if (asprintf(&header, ".TH man 1 \"%s\" \""PACKAGE_VERSION"\" \"Profanity XMPP client\"\n", date) == -1) {
|
||||||
|
// TODO: error
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
g_date_time_unref(now);
|
||||||
|
g_free(date);
|
||||||
|
|
||||||
|
GList* curr = cmds;
|
||||||
|
while (curr) {
|
||||||
|
Command* pcmd = curr->data;
|
||||||
|
|
||||||
|
char* filename = NULL;
|
||||||
|
if (asprintf(&filename, "docs/profanity-%s.1", &pcmd->cmd[1]) == -1) {
|
||||||
|
// TODO: error
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
FILE* manpage = fopen(filename, "w");
|
||||||
|
free(filename);
|
||||||
|
|
||||||
|
fprintf(manpage, "%s\n", header);
|
||||||
|
fputs(".SH NAME\n", manpage);
|
||||||
|
fprintf(manpage, "%s\n", pcmd->cmd);
|
||||||
|
|
||||||
|
fputs("\n.SH DESCRIPTION\n", manpage);
|
||||||
|
fprintf(manpage, "%s\n", pcmd->help.desc);
|
||||||
|
|
||||||
|
fputs("\n.SH SYNOPSIS\n", manpage);
|
||||||
|
int i = 0;
|
||||||
|
while (pcmd->help.synopsis[i]) {
|
||||||
|
fprintf(manpage, "%s\n", pcmd->help.synopsis[i]);
|
||||||
|
fputs("\n.LP\n", manpage);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pcmd->help.args[0][0] != NULL) {
|
||||||
|
fputs("\n.SH ARGUMENTS\n", manpage);
|
||||||
|
for (i = 0; pcmd->help.args[i][0] != NULL; i++) {
|
||||||
|
fprintf(manpage, ".PP\n\\fB%s\\fR\n", pcmd->help.args[i][0]);
|
||||||
|
fprintf(manpage, ".RS 4\n%s\n.RE\n", pcmd->help.args[i][1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pcmd->help.examples[0] != NULL) {
|
||||||
|
fputs("\n.SH EXAMPLES\n", manpage);
|
||||||
|
int i = 0;
|
||||||
|
while (pcmd->help.examples[i]) {
|
||||||
|
fprintf(manpage, "%s\n", pcmd->help.examples[i]);
|
||||||
|
fputs("\n.LP\n", manpage);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(manpage);
|
||||||
|
curr = g_list_next(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\nProcessed %d commands.\n\n", g_list_length(cmds));
|
||||||
|
|
||||||
|
free(header);
|
||||||
|
g_list_free(cmds);
|
||||||
|
}
|
||||||
|
@ -50,6 +50,7 @@ GList* cmd_get_ordered(const char* const tag);
|
|||||||
gboolean cmd_valid_tag(const char* const str);
|
gboolean cmd_valid_tag(const char* const str);
|
||||||
|
|
||||||
void command_docgen(void);
|
void command_docgen(void);
|
||||||
|
void command_mangen(void);
|
||||||
|
|
||||||
GList* cmd_search_index_all(char* term);
|
GList* cmd_search_index_all(char* term);
|
||||||
GList* cmd_search_index_any(char* term);
|
GList* cmd_search_index_any(char* term);
|
||||||
|
11
src/main.c
11
src/main.c
@ -69,9 +69,14 @@ static char* theme_name = NULL;
|
|||||||
int
|
int
|
||||||
main(int argc, char** argv)
|
main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
if (argc == 2 && g_strcmp0(argv[1], "docgen") == 0 && g_strcmp0(PACKAGE_STATUS, "development") == 0) {
|
if (argc == 2 && g_strcmp0(PACKAGE_STATUS, "development") == 0) {
|
||||||
command_docgen();
|
if (g_strcmp0(argv[1], "docgen") == 0) {
|
||||||
return 0;
|
command_docgen();
|
||||||
|
return 0;
|
||||||
|
} else if (g_strcmp0(argv[1], "mangen") == 0) {
|
||||||
|
command_mangen();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GOptionEntry entries[] = {
|
static GOptionEntry entries[] = {
|
||||||
|
Loading…
Reference in New Issue
Block a user