O que são essas páginas do manual '3cxx' e como posso removê-las / excluí-las das invocações do homem?

1

Tudo isso começou porque eu queria man pages em tipos / funções de C ++. Eu encontrei um repositório chamado Cppman que foi projetado para raspar essas páginas a partir do cplusplus ou cppreference. Neste momento, man std::cout exibiria a página de manual esperada, mas man -k cout diria "nada apropriado".

Desde então, removi tudo, exceto a pasta cplusplus.com, renomeiei como 'man3' e executei mandb (como root, e como eu), o que produziu uma pasta vazia 'cat3' e uma ' index.db '. Agora estou definindo o MANPATH da seguinte forma:

old_manpath=$(manpath 2>/dev/null)
export MANPATH=$HOME/.local/share/man:$old_manpath

O resultado:

> man -k std::cout
std::cout (3)        - Standard output stream
> man -k std::result_of
std::result_of (3)   - Result of call
std::result_of (3cxx) - (unknown subject)
> man 3 std::result_of # the page I expect
> man 3cxx std::result_of # scrawny and malformed manpage

Se eu pudesse esconder essas páginas '3cxx' de man [-k] , eu ficaria satisfeito. No entanto, eu prefiro excluir os arquivos e evitar gerá-los em primeiro lugar. Eu não pareço ter arquivos '* .3cxx.gz'.

Onde eu errei? Como e onde devo definir meu MANPATH, se esse é realmente o problema?

Editar 1 - Eu tirei muitos detalhes desta questão, mas o conteúdo das páginas man do 3cxx pode ser revelador. Por um lado, man 3cxx std::result_of tem o título std::result_of< _Signature >(3cxx) ( <_Signature> está faltando na manpage normal); o SINOPSE está vazio, seguido por "Descrição detalhada" em vez de DESCRIÇÃO. Eu tentei replicar o que parece abaixo (underscores representam recuo).

Detailed Description

____template<typename _Signature>

________class std::result_of< _Signature >" result_of

________Definition at line 2097 of file type_traits.

Esse stray " é como está escrito e aparece logo após o tipo principal em algumas outras páginas que eu verifiquei. As páginas que se desviaram ainda tinham algumas aspas incomparáveis depois de tipos mais abaixo na página, ou no fim de linhas nem mesmo envolvendo modelos.

Editar 2 - Não consigo descobrir como encontrar o arquivo associado à página de manual exibida ou posso inspecionar / excluir todo o lote. Usando lsof não vejo nada como uma página de manual aberta, não que eu espere que mantenha o arquivo aberto. Meu melhor palpite é que esses manpages curtos são colocados em index.db , um arquivo de banco de dados "dbm / ndbm"; Eu tenho o pacote python3-gdbm , então eu coloquei nele e descobri que ele tem o tipo 'dbm.gnu' e sua entrada "first" é b'std::list::cend\x00' => b'-\t3\t3\t1509183341\t749359924\tA\t-\t-\tgz\tReturn const_iterator to end\x00' . Isso sugeriria que index.db armazena apenas pares nome / descrição, e talvez alguns desses números na cabeça correspondam a um arquivo, mas, mesmo assim, como é mais do que posso esperar descobrir sem vê-lo em ação. Eu acho que isso é tanto quanto eu posso gerenciar sozinho.

Editar 3 - Eu decodifiquei as entradas:

>>> from dbm.gnu import *
>>> o=open('/home/john/.local/share/man/index.db', 'c')
>>> def nextn(i,n):
...     sum=""
...     for j in range(0,n):
...             sum += i.decode("utf-8") + "\n" + o[i].decode("utf-8")
...             i=o.nextkey(i)
...     return sum
>>> all=nextn(o.firstkey(), len(o.keys()))
>>> all.find('cxx')
-1

# Example entry for reference:
std::list::cend
-       3       3       1509183341      749359924       A       -       -       gz      Return const_iterator to end

As entradas estão em ordem hash (quase aleatória), portanto, uma boa amostra delas deve mostrar quantas entradas de tipo '3cxx' são do tipo '3'. Em vez disso, eles são literalmente todo tipo '3'. Index.db está fora do gancho, mas estou oficialmente fora de ideias.

    
por John P 28.08.2018 / 13:36

0 respostas