Scribe.perl (link to the source) is a perl script for generating meeting minutes from an IRC, IM or other log file that follows some simple minuting conventions. It is easy to use and requires no installation. It was primarily designed for use in and around W3C, but can also be used in other environments. (For use in other environments, see the Input Formats section.)
Scribe.perl supports links, images, slides, subsections and even math!
Some sample outputs: default style, with option -member, with option -team and with option -fancy.
This manual documents scribe.perl version 2, revision 238 (dated 18 October 2024). See below for the differences with version 1.
Skip this step if you're not using W3C's IRC.
IRC Command | Explanation | Who? |
---|---|---|
/invite zakim | calls Zakim to your IRC channel | anybody |
zakim, start meeting | this makes Zakim invite RRSAgent and set up other things, depending on the channel | anybody |
IRC Command | Explanation | Who? |
---|---|---|
Scribe: dbooth | dbooth is the IRC nickname of the scribe. If you don't give this command scribe.perl will guess the scribe. Use the command again if the scribe changes. There are several useful variants of this command, see the scribe command below. | anybody |
Meeting: WS Arch Teleconference | Record meeting title. (On some channels, Zakim does this for you.) | anybody |
Chair: Mike | Record who chairs | anybody |
Previous meeting: http://example.org/20180918 | If you want a link to the previous meeting at the top of the minutes. | anybody |
Next meeting: http://example.org/20181002 | Ditto for the next meeting. | anybody |
Agenda: http://example.org/agenda | If you want a link to the agenda at the top of the minutes. | anybody |
rrsagent, make logs public | (For public minutes and logs) Change the permissions on the IRC logs. (On some channels, Zakim does this for you.) Note that the permission changes are queued and it may be a minute or so before they take effect. | anybody |
IRC Command | Explanation | Who? |
---|---|---|
Topic: Debate on Feature X | Use "Topic: …" at the start of each agenda topic. Alternatively, you can use Zakim bot's agenda control, which is recognized by default. (See the -useZakimTopics option below.) | anybody |
Subtopic: Intro to feature X | Use "Subtopic: …" for a subtopic. | anybody |
Mike: Feature X is great | Record what Mike said. | scribe |
… and easy to implement. | Mike's statement continues. Use either three periods or the ellipsis character ‘…’. (Some IRC clients automatically replace the former with the latter.) | scribe |
General agreement. | A description or summary, not attributed to a particular speaker. Only works when the scribe writes this. | scribe |
ACTION: Frank to order lunch | Record new action. | anybody |
Issue: Is it proven that 1+1=2? | Record new issue. | anybody |
RESOLUTION: Accept Frank's proposal | Indicate how an issue or topic was resolved. ‘RESOLVED’ is an alias for ‘RESOLUTION’. | anybody |
… with Pete's modified text | Resolutions can be more than one line long. This line is added to the resolution in the previous line. (Such continuation lines also work for topics, issues and actions.) | anybody |
s/Mary/Marie/ | Change most recent occurrence of ‘Mary’ to ‘Marie’. The old string is a literal string, not a regex. Alternate syntax: s|Mary|Marie| | anybody |
s/Mary/Marie/g | Change all previous occurrences of "Mary" to "Marie". | anybody |
s/Mary/Marie/G | Change all previous and future occurrences of ‘Mary’ to ‘Marie’ (within this document). | anybody |
i/Time to vote/Topic: Vote on Feature Y | Insert a ‘Topic: Vote on Feature Y’ line before the line containing the literal string ‘Time to vote’ (not a regex). Alternate syntax: i|Time to vote|Topic: Vote on Feature Y | anybody |
<dbooth> :-) | When dbooth is scribe and wants to add a remark on IRC as himself, rather than in his role of scribe, he can start the remark with his nick in angle brackets. (Hint: auto-completion in some IRC clients may reduce this to two or three keystrokes.) | scribe |
IRC Command | Explanation | Who? |
---|---|---|
zakim, end meeting | Dismiss zakim bot, which will generate a list of attendees and instruct RRSAgent to generate minutes. Use ‘Present: ...’ (described below) instead if you aren't using zakim bot. | anybody |
rrsagent, bye | Dismiss RRSAgent (if used). | anybody |
(Download and edit the generated minutes) | If you're using RRSAgent, then just edit the generated minutes and you are done. | anybody |
This step is only needed if you are not using RRSAgent, or you forgot step 4 and its too late to run RRSAgent now, or if you want to make edits that are best done locally.
Shell Command | Explanation |
---|---|
(Save a copy of the IRC log, such as http://www.w3.org/2002/04/05-arch-irc.txt) | (Hint: If RRSAgent wrote the minutes to http://...foo-minutes, then the IRC log will be at http://...foo-irc.txt.) |
(Download scribe.perl) | No installation is needed, but you must have perl. |
perl scribe.perl log.txt > minutes.html | Generate minutes. |
(Review and make adjustments.) | If the result isn't good enough, either: 1. edit your copy of the log file and regenerate the HTML; or 2. manually edit the resulting HTML. Option 1 is best if you forgot to indicate who is scribe (‘Scribe: …’), or if you forgot to mark a topic start (‘Topic: …’). |
Pros:
Cons:
Scribe.perl reads from the files given as arguments, or standard input if there are none; and writes to standard output:
perl scribe.perl [options] < log.txt > minutes.html
It can also be invoked by RRSAgent from IRC (provided you're using RRSAgent):
rrsagent, draft minutes
Options described below are grouped in several categories:
There are three ways to specify options, from highest to lowest priority:
Options can be written with two dashes (‘--final’) or a single one (‘-final’) and they can be abbreviated as long as the abbreviation is unambiguous (‘--embedDiagnostics’ can be written ‘--embed’, but not ‘--em’, because that clashes with ‘--emphasis’). Case doesn't matter: ‘--dashTopics’ is the same as ‘--dashtopics’.
Options that require an argument can be separated from the argument with either a space or an equals sign: ‘--scribenick jvm’ or ‘--scribenick=jvm’.
These options are used to accommodate the different input syntaxes and scribing styles.
Indicate that dash lines are used to indicate that the next line is the start of a new topic, such as:
<Philippe> --- <Philippe> Review of Action Items
instead of
<Philippe> Topic: Review of Action Items
Indicate that the scribe used implicit continuation lines like this:
<dbooth> Mary: Now is the time <dbooth> for all good men and women <dbooth> to come to the aid of their party.
instead of this:
<dbooth> Mary: Now is the time <dbooth> ... for all good men and women <dbooth> ... to come to the aid of their party.
The scribe can still add descriptive lines (lines not attributed to any speaker) by starting a line with a backslash (see ‘Escaped’ below). E.g.:
<dbooth> Mary: Now is the time <dbooth> for all good men and women <dbooth> to come to the aid of their party. <dbooth> \Everybody agrees
This option only applies to text assigned to a speaker. To continue topics, resolutions, actions or issues on the next line, you must still use ‘...’ or ‘…’.
By default, scribe.perl removes leading spaces on a line and
recognizes continuation lines because they start with three periods
(‘...’) or an ellipsis (‘…’). -allowSpaceContinuations
forces scribe.perl to treat lines that start with a space as
continuation lines (if there is a line to continue), even if they
don't start with ‘...’ For example, scribe.perl would normally
interpret this fragment
<jim-scribe> Anna: Is the 5th OK? <jim-scribe> Silence. <jim-scribe> Jen: maybe
as three separate items: Anna saying ‘Is the 5th OK?’, the scribe
giving a summary ‘Silence’ and Jen saying ‘maybe’. The extra spaces
are ignored. With -allowSpaceContinuations
, the three
lines become a single statement attributed to Anna (‘Anna: Is the
5th OK? Silence. Jen: maybe’)
The default is -noallowSpaceContinuations
.
This option only applies to text assigned to a speaker. To continue topics, resolutions, actions or issues on the next line, you must still use ‘...’ or ‘…’.
[Default] Recognize when Zakim bot is used to manage the agenda and the list of attendees. Specifically, treat Zakim statements like:
<Zakim> agendum 2. "UTF16 PR issue" taken up [from MSMscribe]
as equivalent to the command:
<scribe> Topic: UTF16 PR issue
and use Zakim's lines such as ‘As of this point the attendees were…’ as an additional source of names for the presence list.
Turn off the -useZakimTopics option. This also causes commands for Zakim (‘next agendum’, ‘q+’, ‘zakim, list participants’, etc.) and Zakim's answers to be treated as normal text for the minutes, rather than skipped.
These options control the output format.
-final
(or -nodraft
) omits the "- DRAFT
-" header.
In the formatted minutes, continuation lines are, by default, shown on a line of their own, starting with ‘…’. (The HTML output contains a <br> to force a new line to start.). E.g., input such as
<pdh> Camille: This works fine. <pdh> ... I tested it. <pdh> ... See the report.
Will produce output similar to this:
Camille: This works fine.
… I tested it.
… See the report.
With -nokeepLines
, the lines are instead shown as
a single paragraph, without any ‘…’:
Camille: This works fine. I tested it. See the report.
Default is -keeplines
.
Cause scribe.perl to interpret ‘ASCII highlighting’, arrows, smileys and mathematical formulas.
ASCII highlighting gives underlined, italic, bold and monospaced text:
Input | Output |
---|---|
_underlined_ | underlined |
/italic/ | italic |
*bold* | bold |
`monospace` | monospace
|
Highlighted phrases must be
surrounded by spaces to be recognized or be at the edge of the
line. They may be nested: this is */bold italics/*.
The option also causes the replacement of ASCII arrows and ASCII smileys:
Input | Output | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
<- | ← | ||||||||||||
<-- | ⟵ | ||||||||||||
<= | ⇐ | ||||||||||||
<== | ⟸ | ||||||||||||
==> | ⟹ | ||||||||||||
=> | ⇒ | ||||||||||||
--> | ⟶ | ||||||||||||
|
Mathematical formulas use LATEX notation, either between single $ signs (for inline math) or double $$ signs (display math), e.g.:
Then calculate $\frac{1}{x}$ and $$\sum_1^\inf{\frac{1}{x}}$$
yields:
Then calculate and
Put a backslash before the first $ to avoid starting math,
e.g.: from \$2.50 to $2.99 is no math
.
Math requires an external program called ‘latexmlmath’ (part of a suite of programs called ‘latexml’). If you run scribe.perl and do not have ‘latexmlmath’, the formulas will remain in LATEX notation.
Scribe.perl can generate HTML with a couple of different styles:
-team
or
-member
, use the 2004 style for team, resp. member
minutes.
<a
href="https://www.w3.org/"><img
src="https://www.w3.org/Icons/w3c_home\" alt=W3C border=0
height=48 width=72></a>
is replaced by
markup. To suppress the logo, use -nologo
(or -logo=""
).
-emphasis
and then only if there is any math in the minutes.
scribe
or
scribenick
command also applies to the lines before
that command.)
Underscores (‘_’) at the end of scribe nicks are ignored, because many IRC clients add them automatically, often after a network error when the original nickname still lingers on the server.
However, occasionally ‘foo’ and ‘foo_’ may actually be different people. So it is advisable to change your nickname back to one without an underscore.
Commands are interspersed with other minuted text in your IRC log, except that each command must be on a line by itself. Commands may be issued by anyone, not only the scribe. Syntax is shown below by example, with italicized portions variable.
These editing commands are usually the easiest way to correct simple mistakes or add clarifications. (Of course, they don't take effect until you run scribe.perl on your IRC log.)
s/old/new/ s/old/new s|old|new| s|old|new
Replace the most recent occurrence of old with new. Old is a literal string, not a regular expression. These commands are processed in order, first to last. (I.e., each command works on the text that results after the previous command.)
new may contain slashes and vertical bars. E.g., this works:
s/@@/http://example.org/path/
. But note that the last
slash is taken as part of the command, not of the new string. To
include a final slash, double it
(s/@@/http://example.org/path//
) or use the alternative
syntax: s|@@|http://example.org/path/
.
old cannot be empty, but new can
be. E.g.: s/some//
.
Unlike in Perl, backslashes are not special. E.g.,
s/and\/or/but
will try to replace ‘and\’ by ‘or/but’
Successful substitutions are removed from the minutes. Unsuccessful ones are left in the minutes, so they can be manually edited.
s/old/new/g s|old|new|g
Replace globally from this point backward.
s/old/new/G s|old|new|G
Replace globally, both forward and backward.
i/locationString/lineToInsert i/locationString/lineToInsert/ i|locationString|lineToInsert i|locationString|lineToInsert|
Insert lineToInsert before the line containing locationString, which is a literal string, not a regular expression. This is most helpful if you forgot to insert a ‘Topic: ’ command.
For example, the following use of the i// command:
<Arthur> Finished with issue LC71; on to LC82. <Arthur> Frank: This is about syntax <Arthur> ... Do we care about syntax? <dbooth> i/Frank: This is about/Topic: Issue LC82
is converted to:
<Arthur> Finished with issue LC71; on to LC82. <inserted> Topic: Issue LC82 <Arthur> Frank: This is about syntax <Arthur> ... Do we care about syntax?
The following commands may be written with any mix of uppercase and lowercase letters: ‘Meeting’, ‘MEETING’ and ‘mEeTiNg’ are all the same thing.
Meeting: Baking Club
Use "Baking Club" as the title of the meeting minutes. If used multiple times, only the last one has effect.
Chair: Jonathan
Jonathan was the meeting chair. If used multiple times, only the last one has effect.
chair: Jonathan, Louis Chair+ Mia chair+ Zoe, Pete, Annabel
If there are multiple chairs, you can separate their names with commas, or use the ‘chair+’ command. The combined result of the three lines above is that the meeting minutes will show that there were six chairs.
chair- Louis, Pete
If you made a mistake, you can remove individual names from the list of chairs.
chair+ chair-
And if you use ‘chair+’ or ‘chair-’ without any names, it means that you add, respectively remove, your own nickname from the list of chairs.
Scribe: MaryScr ScribeNick: MaryScr
Tells scribe.perl that the IRC name of the scribe is MaryScr. If somebody else takes over as scribe, just give the command again, with the nick name of the new scribe.
‘Scribenick’ is an alternative spelling. Whenever you use ‘scribe’, you can also use ‘scribenick’.
Scribe: jon2 = John Smith Scribe: jon2 / John Smith
You can add the scribe's real name, separated from the IRC name with a slash or an equals sign. This changes how the scribe will be called in the summary at the top of the minutes. Useful if the IRC name is cryptic.
Scribe: Adam, Teo, Ana Scribe:+ Adam/Adamsky, Teo, Ana=Jo-Ana
Multiple scribes can be active at the same time. Separate their names with commas. Of course, you can also add their real name after the nick name.
Scribe+ jon2 Scribe+: jon2 Scribe+ jon2/John Smith Scribe+ jon2, adam=Adamsky
Use ‘scribe+’ (with or without a ‘:’) if one or more scribes start taking minutes in addition to, rather than replacing, the previous scribes.
Scribe- adam Scribe- adam,teo
Indicates when some scribes stop taking minutes.
Scribe+ Scribe-
If there are no names after the ‘+’ or ‘-’, it means the person typing the command is adding or removing himself from the current list of scribes.
A scribe can, e.g., temporarily stop taking minutes
(scribe-
) and resume later (scribe+
).
Scribe: *
A ‘*’ as the scribenick means there is no designated
scribe, but everybody is taking notes together. This is useful,
e.g., when IRC is used for taking notes in a face-to-face meeting,
when IRC isn't needed as a second conversation channel. (But people
can still start their lines with their own nick, <nick>
...
, see above, to make remarks
outside the minutes.)
People cannot remove themselves from the scribe list with
scribe-
after this command.
Agenda: http://www.example.com/agenda.html
Specify the agenda URL (optional). If used multiple times, only the last one has effect.
Hint: If the agenda has been posted to the W3C Group Calendar or to a W3C mailing list, AgendaBot may be able to find the URL for you.
Present: Jonathan, Mary, Barbara, Steve
Indicate who was present.
Regrets: Nathan, Emma
Indicate who sent regrets (optional).
<frank> present+: Janine, Brian <frank> present- Nathan <frank> regrets+ Marja, Leonard <frank> Present+
Add or remove names from the present/regrets lists. The colon is optional after + or -. With no names, it adds or removes the speaker himself, i.e., the last line adds "frank".
Date: 05 Dec 2002
Specify the meeting date. Not usually needed, because the default is guessed from the log URL reported by RRSAgent.
ACTION: Frank, Mary and Kate to propose solution for issue 42 action Ann: publish report 17 Action Fred to do something
Three ways to give an action item: ‘action:’, ‘action name:’ and ‘action name to’. (Other bots, may require that only one of these syntaxes is used.)
RESOLUTION: Issue 42 closed as duplicate of issue 21 Resolved: next-object does not wrap
Indicate a decision that the group has made. Both keywords may be used interchangeably.
topic: Food and drink subtopic: Morning coffee
The first starts a new section with the heading ‘Food and drink’. The second starts a subsection with the heading ‘Morning coffee’. (See also -dashtopics and -useZakimTopics for alternative syntaxes.)
ScribeOptions: -dashTopics -embedDiagnostics
Specify options inline, as if they had been written on the
command line like:
perl scribe.perl -dashTopics -embedDiagnostics
. Can be
used multiple times and the options are added to previous ones.
NamedAnchorHere: foo
Cause a named anchor ‘foo’ to be generated at this point in the minutes. Leading and trailing spaces are ignored and other spaces are converted to underlines (‘_’). The name can be almost anything, except ‘xNN’, where N is a digit, because those are reserved for scribe.perl's internal use. A few other words (toc, meeting, attendees, links, resolutionsummary, and actionsummary) are also forbidden, because scribe.perl uses them itself.
Next meeting: http:///example.org/20180214/mins Previous meeting: http://example.org/20180228/mins
You can add a link to the previous and next meeting at the top of the minutes.
If you don't want a line to be interpreted by scribe.perl, start it with a backslash. E.g.:
<gigi> here are some words: <gigi> \Subject: a noun <gigi> \Topic: same as Subject <gigi> \Ben: a name <gigi> \Action: a noun
Even if gigi is the scribe, the above will not be taken as lines spoken by ‘Ben’ or by ‘Subject’ and will not create a new topic or a new action. A few more examples:
<jany> \s/week/month/ <jany> \scribe+ <jany> \present + Jan
Such an initial backslash is omitted from the minutes. If you happen to have a line that should start with a backslash, double it:
<jany> Here are some escapes used in C: <jany> \\n = newline <jany> \\t = tab
Backslashes elswhere than at the start are not special. E.g., you could write the above like this:
<jany> Here are some escapes used in C: <jany> * \n = newline <jany> * \t = tab
To include several lines of verbatim text, e.g., to copy-paste
program code into the minutes, start with three single backquotes
(```
) or two square brackets ([[
) on a
line by themselves, paste the text and end with a line containing
another three backquotes, resp. two square brackets
(]]
).
No commands are recognized inside verbatim text: ‘action:’ does not create an action, ‘present+’ does not record a participant. etc. Here are two examples:
<dbooth> ``` <dbooth> function factorial(n) { <dbooth> if (n == 1) return 1 <dbooth> else return n * factorial(n - 1) <dbooth> } <dbooth> ``` <momo> [[ <momo> January 45 <momo> February 250 <momo> March 2 <momo> ]]
Everybody can use verbatim text, but the effect is slightly different for scribes and for other participants. If the scribe enters verbatim text and other text interrupts the verbatim text, that other text is moved, to keep the scribe's text together. E.g.,
<scribe> [[ <scribe> sub add($$) { <scribe> my ($a, $b) = @_; <cecilia> Me too! <scribe> return $a + $b; <scribe> } <scribe> ]]
will yield:
sub add($$) { my ($a, $b) = @_; return $a + $b; }<cecilia> Me too!
(The verbatim text feature was suggested by David Booth.)
Scribe.perl automatically recognizes most URLs
(http://…
, mailto:…
, etc.) and turns them
into links. See the command line option -urlDisplay
for different ways
to format URLs.
You can provide anchor text for a link with
->
. This ->
must either come before
the URL and the anchor text or in between. (The idea to use
->
is due to Ralph Swick.) More precisely, you can
use any of the following:
A Ralph link has ->
followed by
a URL followed by anchor text, like this:
<dbooth> See -> https://www.example.org/ns/w2 wall 2 <dbooth> And -> https://www.example.org/ns/w2 "wall 2", too. <dbooth> -> https://www.example.org/ns/w2 'wall 2' also.
If the anchor text is quoted (as in the second and third lines above), scribe.perl uses only the quoted text as anchor, otherwise it takes all the text until the end of the line. Thus, all three lines contain the link wall 2.
A Xueyuan link has
the ->
between the anchor text and the URL:
<dbooth> wall 2 -> https://www.example.org/ns/w2
The anchor text is all the text leading up to the
->
. You should not put quotes around it, unless you
actually want quotes in the anchor text.
The anchor text and URL can also swap places. This is known as an inverted Xueyuan link:
<dbooth> See https://www.example.org/ns/w2 -> wall 2 <dbooth> And https://www.example.org/ns/w2 -> "wall 2", too. <dbooth> https://www.example.org/ns/w2 -> 'wall 2' also.
In this case, like with the Ralph links, you can use quotes to limit what goes into the anchor text.
An Ivan link is like a Ralph link, but with the anchor text and the URL swapped:
<dbooth> -> wall 2 https://www.example.org/ns/w2 <dbooth> And -> wall 2 https://www.example.org/ns/w2 too.
Like Xueyuan links, Ivan links should not have quotes around the text (unless you actually want the anchor text to contain quotes).
And finally, a Markdown link uses the popular markdown syntax to create links:
<dbooth> Some text with [an embedded link](https://www.example.org/ns/w2) and more text
You can also embed images in the minutes by means of Ralph,
(inverted) Xueyuan or Ivan links. The only difference is that
the ->
must be replaced by -->
. Some
examples:
<dbooth> See --> https://www.example.org/ns/w2.jpg wall 2 <dbooth> And --> https://www.example.org/ns/w2.jpg "wall 2", too. <dbooth> --> https://www.example.org/ns/w2,jpg 'wall 2' also. <dbooth> wall 2 --> https://www.example.org/ns/w2.jpg <dbooth> See https://www.example.org/ns/w2.jpg --> wall 2 <dbooth> And https://www.example.org/ns/w2.jpg --> "wall 2", too. <dbooth> https://www.example.org/ns/w2.jpg --> 'wall 2' also. <dbooth> --> wall 2 https://www.example.org/ns/w2.jpg <dbooth> And --> wall 2 https://www.example.org/ns/w2.jpg too.
The anchor text becomes the image's text alternative (‘alt text’). There is no way to specify a caption.
Markdown-style image links also work. They are like markdown links, but prefixed with a ‘!':
<dbooth> Here it as an image: ![a tree](https://example.org/tree.jpg)
Unless disabled (see -nogithubIssues), text that looks like a reference to a GitHub issue is replaced by a link to that issue:
<dbooth> Let's talk about w3c/scribe#3 <dbooth> And transitions#5
If the owner part is omitted, ‘w3c’ is assumed (thus,
‘transitions#5’ is the same as ‘w3c/transitions#5’). But you can
change that by explicitly listing the repositories to use, by means
of one or more repo:
(or repos
, repository
or repositories
) commands:
<dbooth> Repo: w3c/scribe, transitions, webn/drafts <dbooth> Repo: docs, w3c/scribe2 ... <dbooth> Let talk about #3, drafts#7 and tests#1
(A +
instead of a :
also works.) The
first line defines three repositories:
https://github.com/w3c/scribe (if no other web site is given,
github.com is assumed), https://github.com/w3c/transitions (the URL
and owner are copied from the preceding repository) and
https://github.com/webn/drafts (the URL is copied from the preceding
repo). The second line defines two additional repositories:
https://github.com/webn/docs (again, the initial part is copied from
the preceding repository) and https://github.com/w3c/scribe2.
The ‘#3’ is now a valid issue as well and refers to issue 3 in the last defined repository, which is https://github.com/w3c/scribe2; the ‘drafts#7’ refers to the most recently defined repository called ‘drafts’, i.e., https://github.com/webn/webn/drafts’; and the ‘test#1’, which does not match any defined repository, is assumed to have the same owner as the last repository, i.e., https://github.com/w3c/tests.
You can also give full URLs (which is necessary to refer to repositories that are not on GitHub):
<dbooth> Repo: https://gitlab.example.com/foo/bar, baz
This defines the repositories https://gitlab.example.com/foo/bar and https://gitlab.example.com/foo/baz.
Repositories that are mentioned in topic lines are also added to the defined repositories. This only works for repositories on github.com:
topic: Discuss https://github.com/w3c/scribe2
Remove repositories from the list with repo-
(or repos-
, repository-
or repositories-
):
Repo- w3c/scribe2
To remove all repositories, give an empty list:
<dbooth> Repo:
Scribe.perl also interprets the commands for ghurlbot that add or remove repositories, e.g:
<dbooth> ghurlbot, this is https://gitlab.example.com/foo/bar <dbooth> ghurlbot, drop baz
You can embed slides in the minutes if they are in a supported format. The list of supported formats depends on the i-slide library, and includes PDF, and the HTML-based Shower and b6+. Google Slides are also supported.
To use this, the slideset from which the slides will be embedded
needs to be set with a slideset
command and a URL,
e.g.:
<dbooth> Slideset: https://www.w3.org/Talks/Tools/b6plus/ <dbooth> Slideset: -> my slides https://www.w3.org/Talks/Tools/b6plus/
Then an individual slide can be embedded using the convention [Slide n]
where n is the slide number in the slideset.
<dbooth> [Slide 2] <dbooth> Dom: as this slide illustrates, scribing is awesome
Note: In the case of Google Slides, scribe.perl makes a snapshot in PDF. It is that snapshot that is shown in the minutes. For other slides, the minutes display the live version. Security rules (‘CORS’) may restrict the display of slides that reside on remote servers.
You can link to the video record of a meeting in the minutes. The video will be embedded at the top of the minutes and each topic and subtopic of the meeting will link to the approximate time in the video. (This only works for IRC logs that include time stamps, such as RRSAgent's.)
With JavaScript enabled, each topic and subtopic will also offer
a play button to launch the embedded video at the appropriate
offset. The video will float at the bottom of the page, if it is not
visible at the current scroll level. (Launching the video works for
video streaming services that use a
recognized postMessage
API. This includes YouTube,
CloudFlare Stream and StreamFizz).
To use this, the link to the recording needs to be set
with recording
and a URL, e.g.:
<dbooth> Recording: https://youtu.be/PjpACM_6IgM <dbooth> Recording: -> https://youtu.be/PjpACM_6IgM April meeting video
The point at which the recording starts also needs to be explicitly set. This can be done live, at the moment when recording is started with:
<dbooth> Recording is starting
It can also be documented after the fact, with:
<dbooth> Recording started at :05
where :05
means at 5 minutes from the top of the
hour.
If the recording ends before the end of the meeting, the end of that recording can be documented similarly with:
<dbooth> Recording ends <dbooth> Recording ended at :55
There can be only one recording. If the above commands are used multiple times, the last one wins.
In addition to the ‘realtime’ editing commands above, you may manually edit your IRC log with a text editor (by mimicking the log format) before running scribe.perl. This is most useful for commands that have a broad effect on the generated HTML. Scribe.perl also recognizes RRSAgent's log format without time stamps, so you can leave those off, rather than invent fake ones.
Here is an example snippet of an IRC log in which the commands ‘ScribeNick: tw’ and ‘Topic: Fire Alarms’ have been inserted using a text editor.
20:11:21 <tw> Scribe: TedWilliams <tw> ScribeNick: tw 20:11:34 <tw> Topic: Printers 20:11:49 <tw> alan: Printers are working now <tw> Topic: Fire Alarms 20:12:27 <tw> ralph: Fire marshall assured us that the system is working.
Note that the IRC name <tw> is required, though for most commands it does not matter what IRC name is specified.
Several log formats are recognized, and are described below:
Scribe.perl guesses which format you have used by trying each in turn until it finds one one that matches.
If you have a log format that is not recognized:
The plain text format (*.txt) produced by RRSAgent. Hint: add ".txt" to the RRSAgent log URL to get the text version, such as: http://www.w3.org/2002/11/07-ws-arch-irc.txt . The timestamps are ignored, so you can safely edit the log and add lines without having to fake timestamps. Example:
20:41:27 <dbooth> Mike: Feature X would benefit users. 20:41:37 <dbooth> ... and implementation would be easy. 20:41:47 <ericn> I agree.
Timestamped log format produced by mIRC. Example:
[19:35] <Zakim> Steven should now be muted [19:36] <ph> http://lists.w3.org/Archives/Member/w3c-html-cg/2004JanMar/0038.html [19:36] * Zakim hears Steven's hand up [19:36] * Zakim sees Steven on the speaker queue
The format produced by mIRC when you do Buffer→Save As. Example:
<dbooth> Mike: Feature X would benefit users. <dbooth> ... and implementation would be easy. <dbooth> This is pretending to be a long line that mIRC breaks in order to display, but scribe.perl will re-join into a single line. <ericn> I agree.
The format produced by Irssi logging with ISO8601 timestamp prefixes. Example:
2003-12-18T15:27:21-0500Z <dbooth> Mike: Feature X would benefit users. 2003-12-18T15:27:36-0500Z <dbooth> ... and implementation would be easy. 2003-12-18T15:27:36-0500Z <ericn> I agree. 2003-12-18T16:02:59Z -!- koalie [[email protected]] has joined &weum 2003-12-18T16:38:58Z * koalie hears Steve
The date, seconds and timezone are optional, so the following is also recognized:
15:27 <dbooth> Mike: Feature X would benefit users. 15:27 <dbooth> ... and implementation would be easy. 15:27 <ericn> I agree.
Bip is an IRC proxy. Its logs look like this:
27-02-2020 15:04:33 < [email protected]: zakim, take up agendum 1 27-02-2020 15:04:33 < [email protected]: agendum 1. "Agenda and Minutes" taken up [from agendabot] 27-02-2020 15:04:54 -!- [email protected] has joined #i18n 27-02-2020 15:04:54 < [email protected]: zakim, take up agendum 2 27-02-2020 15:04:54 < [email protected]: agendum 2. "Action Items" taken up [from agendabot] 27-02-2020 15:05:04 < [email protected]: https://www.w3.org/International/track/actions/open 27-02-2020 15:05:22 < [email protected]: action-856? 27-02-2020 15:05:22 < * [email protected] is looking up action-856. 27-02-2020 15:05:22 < [email protected]: action-856 -- Richard Ishida to Check the time planner -- due 2020-02-27 -- OPEN
The format produced when you save a Yahoo IM session. Example:
dbooth: Mike: Feature X would benefit users. dbooth: ... and implementation would be easy. ericn: I agree.
Line-oriented plain text format. This format is intended for occasions when the scribe doesn't have access to IRC, and simply takes notes in a text editor. Example:
Mike: Feature X would benefit users.... and implementation would be easy. Eric agrees.
Qwebirc is the software behind the web-based IRC client on https://irc.w3.org. Copy-pasting from the browser window gives a log that looks like this:
[09:59] == Wilco [[email protected]] has joined #act-r [10:00] <Wilco> agenda+ Update from the ACT Task Force [10:00] * Zakim notes agendum 1 added [10:04] <CarlosD> present+ [10:05] <CarlosD> Wilco: provides update on the TF
The format of text that is copy-pasted from a Quassel chat window. The line starts with a date & time in square brackets.
The format of the date & time can actually be configured by the user, but scribe.perl only accepts dates and times that consists of digits, dots, dashes and spaces, optionally with am and pm. Here is an example where the date & time is just hours and minutes:
[01:09] <-- borisjohn ([email protected]) has quit (Ping timeout: 180 seconds) [08:50] --> raul ([email protected]) has joined &fleague [09:02] --> borisjohn ([email protected]) has joined &fleague [09:09] <-- borisjohn ([email protected]) has quit (Ping timeout: 180 seconds) [10:02] --> borisjohn ([email protected]) has joined &fleague [11:00] -*- kolec still on another call; it may spill a lot [11:02] * zakim has been invited to &fleague [11:02] --> Zakim ([email protected]) has joined &fleague [11:02] <Gert> zakim, start meeting [11:02] <Zakim> inviting RRSAgent [11:02] --> RRSAgent ([email protected]) has joined &fleague [11:02] <RRSAgent> logging to https://www.w3.org/2021/04/20-fleague-irc [11:02] <Zakim> RRSAgent, make logs Team
The style of IRSSI logs as used by Bert Bos, characterized by a date & time at the start and a vertical bar separating the nick name and the message. This is almost identical to the elho theme for IRSSI, which should work here as well. Here is an example:
--- Log opened Thu Mar 19 12:57:23 2015 12:57 «Users» | 23 nicks (0 ops, 0 halfops, 0 voices, 23 normal 12:57 «Mode» | Channel &global was created on Fri Apr 11 21:35:25 2014 13:08 * | koalie veronica :D 13:08 --> | naomi_ ([email protected]) has joined &global 13:10 Zakim | +Plh 13:11 scribe | Angel: Short meeting. 13:13 «Quit» | naomi ([email protected]) has signed off (Ping timeout: 180 seconds) 13:14 veronica | q? 13:15 * | Zakim sees no one on the speaker queue 13:15 scribe | Veronica: Please everyone update the FTMS records.
Downloading a log from the IRCCloud server yields a file similar to this:
#wcag-act [2020-07-21 17:28:44] → Joined channel #wcag-act [2020-07-21 18:21:09] ⇐ shadi quit ([email protected]): "Leaving" [2020-07-23 14:57:43] → Wilco joined ([email protected]) [2020-07-23 14:57:51] → Zakim joined ([email protected]) [2020-07-23 14:57:56]zakim, start meeting [2020-07-23 14:58:28] — Zakim notes agendum 1 added [2020-07-27 16:55:24] * shadi_ → shadi [2020-07-30 14:53:38] Meeting: Accessibility Conformance Testing
The SCRIBEOPTIONS environment variable holds the default options that one wants to use. It is not required. Example for a Bourne-style shell:
export SCRIBEOPTIONS="-team"
Scribe.perl version 2 accepts most of the same options as version 1 and recognizes most of the same commands in the input. The following are different:
Status codes for actions are not supported. An action preceded
by a status code, such as ‘[PENDING] ACTION: Joe to write
text
’, is not recognized as an action. It will be
a simple text. A status cade after the action, such as
‘ACTION: Joe to write text [PENDING]
’, is simply
part of the action description.
There is no -template
option. Scribe.perl
version 2 does not accept external HTML templates.
A ‘scribeOptions’ command takes priority over command line options, instead of the other way round.
The ‘-inputFormat’ option is not supported. It is not possible to override the automatic selection of the input format.
The ‘-tidy’ option is not supported. Scribe.perl version 2 always generates valid HTML (HTML5, currently).
The ‘-trustRRSAgent’ option is not supported. When RSSAgent is dismissed, it summarizes the actions and resolutions it has seen, but scribe.perl version 2 does not use them.
The ‘-plain’, ‘-public’ and ‘-mit’ options are not supported. Scribe.perl version 2 does not currently have style sheets for ‘-plain’ and ‘-mit’. Note that the public style is the default.
The ‘-scribe’ option is not supported.
The ‘-sampleInput’ and ‘-sampleOutput’ options are not supported.
The ‘Log:’ command is not supported. It was rarely needed, because the URL of the IRC log, if any, can usually be inferred from the messages by RRSAgent.
The scribe can make IRC statements as himself by prefixing his text with his own nick in angle brackets (see example above).
The scribe
and scribenick
commands no
longer have different functions. Both of them set the IRC name
and the real name of the scribes. In order to set a real
name that is different from the IRC name, use the syntax with ‘/’ or ‘=’.
The ScribeNick command accepts multiple names (separated by commas), and also accepts ‘*’
The '-philippe' and '-plh' options are not supported. Use '-dashTopics' instead.
The option ‘-oldStyle’, ‘-fancy’, ‘-style’, ‘-logo’, ‘-keeplines’/‘-nokeeplines’ ‘-collapseLimit’, ‘-emphasis’ and ‘-mathjax’ are new.
Some new text patterns are recognized and marked up with special classes: Ralph/Xueyuan/Ivan links (for links with anchor text and images with text alternatives), messages from trackbot and the ‘slideset’ and ‘[slide N]’ commands.
The ability to escape a command with a backslash to remove its special meaning, and the ability to include verbatim text are new.
The XChat log format is not (yet) supported.
Support for embedded slides and embedded video is new.