diff --git a/CHANGELOG.md b/CHANGELOG.md index d35a150..7218b95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ folgen [Semantic Versioning](https://semver.org/lang/de/). Die Version steht in - README und `man/row.man` erklären, warum `select` in bash/zsh/ksh einen Syntaxfehler gibt und wie man es trotzdem aufruft. ### Behoben +- `rdb man dashline` (und `headline`, `backup`, `dbase`, `accounting_ter`) zeigte als Überschrift eine Makrozeile (`dashline -- .PP`). Themen-Seiten ohne Beschreibung nehmen jetzt den Titel aus der `.TH`-Zeile. - `splittable -0` und mehr als 676 Stücke endeten mit einem Ruby-Abbruch (im zweiten Fall nach 676 geschriebenen Dateien). Jetzt eine Fehlermeldung, und es wird vorher geprüft, damit nichts halb geschrieben wird. - `rdb man` zeigte `\\select` in den Man-Pages als `\elect`: ein doppelter Backslash wird jetzt zuerst geschützt. diff --git a/lib/rdb/cmd/term.rb b/lib/rdb/cmd/term.rb index 8dd6f55..1043402 100644 --- a/lib/rdb/cmd/term.rb +++ b/lib/rdb/cmd/term.rb @@ -148,8 +148,11 @@ Rdb.register('man', 'Display the manual page for a command', 'man [-g] command') args.each do |a| f = File.join(Rdb::ROOT, 'man', "#{a == 'Number' ? 'number.c' : a}.man") File.exist?(f) or die("no manual page for '#{a}'") - desc = File.read(f)[/^\.PC\s+"?(.*?)"?\s*$/, 1] - puts "#{a}#{desc ? " -- #{troff_clean(desc)}" : ''}", '=' * 60 + src = File.read(f) + desc = src[/^\.PC[ \t]+"?(.*?)"?[ \t]*$/, 1] + # topic pages (dash line, head line ...) have an empty .PC; their title is in .TH + title = desc.to_s.empty? && src =~ /^\.TH\s+(?:"([^"]*)"|(\S+))/ ? ($1 || $2) : nil + puts "#{title || a}#{desc.to_s.empty? ? '' : " -- #{troff_clean(desc)}"}", '=' * 60 puts render_man(File.read(f)), '' end end diff --git a/test/rdb_test.rb b/test/rdb_test.rb index 90bed2e..4ef46f3 100644 --- a/test/rdb_test.rb +++ b/test/rdb_test.rb @@ -481,6 +481,12 @@ class HelpTest < RdbCase assert_equal "\e[3;8H", rdb('cursor', '3', '8') end + def test_man_topic_pages_get_their_title + assert_equal 'dash line', rdb('man', 'dashline').lines.first.chomp + assert_equal 'head line', rdb('man', 'headline').lines.first.chomp + assert_match(/\Arow -- Make a new table/, rdb('man', 'row')) + end + def test_testall_mentions_every_command script = File.read(File.join(DEMO, 'testall.cmds')) names = data(rdb('commands')).map(&:first)