C++ 98/11/14 manual pages for Linux/MacOS

Overview
http://img.shields.io/travis/aitjcize/cppman.svg?style=flat http://img.shields.io/pypi/v/cppman.svg?style=flat

cppman

C++ 98/11/14/17/20 manual pages for Linux, with source from cplusplus.com and cppreference.com.

https://raw.github.com/aitjcize/cppman/master/wiki/screenshot.png

Features

  • Supports two backends (switch it with cppman -s):
  • Syntax highlighting support for sections and example source code.
  • Usage/Interface similar to the 'man' command
  • Hyperlink between manpages (only available when pager=vim)
    • Press Ctrl-] when cursor is on keyword to go forward and Ctrl-T to go backward.
    • You can also double-click on keyword to go forward and right-click to go backward.
  • Frequently update to support cplusplus.com.

Demo

Using vim as pager

https://raw.github.com/aitjcize/cppman/master/wiki/demo.gif

Installation

  1. Install from PyPI:
$ pip install cppman

Note that cppman requires Python 3. Make sure that either pip is configured for Python 3 installation, your default Python interpreter is version 3 or just use pip3 instead.

  1. Arch Linux users can find it on AUR or using Trizen:
$ trizen -S cppman

or install the git version

$ trizen -S cppman-git
  1. Debian / Ubuntu: cppman is available in Debian sid/unstable and Ubuntu vivid.
$ sudo apt-get install cppman
  1. MacOS X: cppman is available in Homebrew and MacPorts.
$ brew install cppman

or

$ sudo port install cppman

Package Maintainers

FAQ

  • Q: Can I use the system man command instead of cppman?
  • A: Yes, just execute cppman -m true and all cached man pages are exposed to the system man command. Note: You may want to download all available man pages with cppman -c.
  • Q: Why is bash completion is not working properly with ::?
  • A: It is because bash treats : like a white space. To fix this add export COMP_WORDBREAKS=" /\"\'><;|&(" to your ~/.bashrc.

Bugs

  • Please report bugs / mis-formatted pages to the github issue tracker.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Notes

  • manpages-cpp is renamed to cppman since September 19, 2012
Comments
  • Cannot install in Fedora 19/ Linux mint 15

    Cannot install in Fedora 19/ Linux mint 15

    I've tried to install cppman in Fedora 19 or Linux mint 15 and it installs successfully.

    pip install cppman -> succesfully installed

    But when I try to use it I get the error:

    cppman cout -> output is

    Python IOError: [Errno 13] Permission denied

    trying sudo will not help.

    I've installed it in Ubuntu 12.04 and had no problem.

    Bug 
    opened by Farzam 15
  • Unable to use `man` to access cpp man pages

    Unable to use `man` to access cpp man pages

    I ran cppman -c and then cppman -m true but man and apropos still cannot find any cpp man pages. I have verified that the man pages are indeed in my filesystem (i.e. the cppman -c command worked).

    opened by bbugyi200 12
  • Pager issues on OS X

    Pager issues on OS X

    When trying to double click, or press enter, on a function name in the page. The following error message is displayed in the vim buffer.

    Error Message: error: [Errno 19] Operation not supported by device.

    Relevant Software Versions:

    • usr/local/bin/cppman Ver 0.4.6
    • NVIM 0.1.1 (compiled Dec 27 2015 16:32:11)
    opened by superfunc 8
  • `q` does not quit

    `q` does not quit

    Pressing q does not quit cppman as in man. Instead, the command :q!<CR> appears at the bottom of the screen. To quit, you must delete the <CR> part and press Enter. Tested with:

    • cppman 0.4.5
    • vim 7.4

    Thanks for your attention.

    opened by fehmud 8
  • C vs C++ man pages

    C vs C++ man pages

    I did the cppman -m true command to be able to use the man command to view c++ man pages. However, I noticed that some pages related to C have been replaced by the version coming from cplusplus.com

    For example, the strtok "normal" man page is no longer available. With man strtok, I get the cplusplus.com version.

    Is there a way to add only the man pages specific to C++, and keep the man pages of C functions as they were before ?

    opened by jaja360 7
  • Doesn't work with vim 7.4 on Debian 7.4

    Doesn't work with vim 7.4 on Debian 7.4

    OS: Debian 7.4
    Vim version: 7.4.444

    %cppman std::vector
    col: Invalid or incomplete multibyte or wide character
    sed: couldn't write 568 items to stdout: Broken pipe
    
    Vim: Reading from stdin...
    

    Works alright when I change the pager to 'less'

    opened by pramodhegde 7
  • cppman can't download and parse pages from en.cppreference.com correctly

    cppman can't download and parse pages from en.cppreference.com correctly

    $ cppman -s cppreference.com std::cout
    Source set to `cppreference.com'.
    
    $ cppman std::cout
    error: bad escape \e at position 0
    
    $ cppman -C
    $ cppman -s cppreference.com -r
    Source set to `cppreference.com'.
    
    $ cppman -c -o 
    By default, cppman fetches pages on-the-fly if corresponding page is not found in the cache. The "cache-all" option is only useful if you want to view man pages offline. Caching all contents will take several minutes, do you want to contin
    ue [y/N]? y
    Caching manpages from cppreference.com ...
    Caching std::numeric_limits::round_error ...
    Retrying ...
    Retrying ...
    Retrying ...
    Error caching std::numeric_limits::round_error ...
    Caching C++ concepts: Destructible ...
    Retrying ...
    Retrying ...
    Retrying ...
    Error caching C++ concepts: Destructible ...
    Caching Move constructors ...
    Retrying ...
    Retrying ...
    Retrying ...
    Error caching Move constructors ...
    Caching std::pow(std::valarray) ...
    Retrying ...
    Retrying ...
    Retrying ...
    Error caching std::pow(std::valarray) ...
    Caching std::recursive_mutex::try_lock ...
    Retrying ...
    ^C
    Aborted.
    

    It seems that cppman is having problems parsing pages from cppreference, my browser can access cppreference fairly quickly

    $ ping en.cppreference.com                                                                                                                                                                                                   
    PING en.cppreference.com (74.114.90.46) 56(84) bytes of data.
    64 bytes from cppreference.com (74.114.90.46): icmp_seq=1 ttl=47 time=250 ms
    64 bytes from cppreference.com (74.114.90.46): icmp_seq=2 ttl=47 time=181 ms
    64 bytes from cppreference.com (74.114.90.46): icmp_seq=3 ttl=47 time=203 ms
    64 bytes from cppreference.com (74.114.90.46): icmp_seq=4 ttl=47 time=227 ms
    64 bytes from cppreference.com (74.114.90.46): icmp_seq=5 ttl=47 time=248 ms
    64 bytes from cppreference.com (74.114.90.46): icmp_seq=6 ttl=47 time=170 ms
    ^C
    --- en.cppreference.com ping statistics ---
    6 packets transmitted, 6 received, 0% packet loss, time 5005ms
    rtt min/avg/max/mdev = 169.600/213.190/250.107/31.174 ms
    

    Edit:

    $ cppman --version
    /usr/bin/cppman Ver 0.4.9
    Copyright (C) 2010 Wei-Ning Huang
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    Written by Wei-Ning Huang (AZ) <[email protected]>.
    
    opened by NobodyXu 6
  • cppman failed in python 3.3

    cppman failed in python 3.3

    cppman is not compatibility with python 3.3, there are two man issuses:

    1. print is function in python 3.3.
    2. except XXError, e: and except (XXError, YYError), e: should be change to except XXError as e: except (XXError, YYError) as e:
    opened by BrytonLee 6
  • No entry for the keyword

    No entry for the keyword

    $ cppman --version
    /usr/local/bin/cppman Ver 0.4.9
    Copyright (C) 2010 Wei-Ning Huang
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    Written by Wei-Ning Huang (AZ) <[email protected]>.
    $ cppman override
    No manual entry for override
    $ cppman final
    No manual entry for final
    
    Bug 
    opened by lidaobing 5
  • [Suggestion] Windows support

    [Suggestion] Windows support

    Currently, cppman fails on Windows (I use MSYS2) with the following error:

    Traceback (most recent call last):
      File "C:/msys64/mingw64/bin/cppman", line 40, in <module>
        from cppman.main import Cppman
      File "C:/msys64/mingw64/lib/python3.7/site-packages\cppman\main.py", line 36, in <module>
        from cppman import util
      File "C:/msys64/mingw64/lib/python3.7/site-packages\cppman\util.py", line 25, in <module>
        import fcntl
    ModuleNotFoundError: No module named 'fcntl'
    

    This answer on StackOverflow mentions a cross-platform module that could be used instead of fcntl, and could therefore make cppman compatible (or at least more compatible) with Windows (and by extension MSYS2).

    Feature 
    opened by williamjcm 5
  • make it work with offline version

    make it work with offline version

    Is there a way to point cppman to an offline version of cppreference locally? You can download offline archives via here : http://en.cppreference.com/w/Cppreference:Archives so that I don't have to cache all pages , and it works offline too.

    opened by agauniyal 5
  • gzip: stdout: Broken pipe

    gzip: stdout: Broken pipe

    Hi, all of a sudden I started getting broken pipe errors:

    /opt/homebrew/bin/cppman Ver 0.5.4
    Copyright (C) 2010 Wei-Ning Huang
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    Written by Wei-Ning Huang (AZ) <[email protected]>.
    

    From this command for example:

     cppman std::list
    
    gzip: stdout: Broken pipe
    

    I'm on MacOS 13.0.1 (22A400) on an M2 macbook

    opened by madskjeldgaard 0
  • Use less as default pager

    Use less as default pager

    Just downloaded and found that I was getting empty pages for everything. The solution was to switch to less for the pager. Apparently this has happened before, e.g. #32, #103. Because vim/neovim are a lot more complicated than less, not even counting all the plugins that may be installed, I think it would make more sense to use less by default, like man does. Unless there was a specific reason why vim was chosen as the default pager?

    Some info about my setup where I was getting empty pages:

    /bin/cppman Ver 0.5.3
    Copyright (C) 2010 Wei-Ning Huang
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    Written by Wei-Ning Huang (AZ) <[email protected]>.
    

    My vim was aliased to neovim:

    NVIM v0.8.1
    Build type: Release
    LuaJIT 2.1.0-beta3
    Compiled by void-buildslave@a-fsn-de
    
    Features: +acl +iconv +tui
    See ":help feature-compile"
    
       system vimrc file: "$VIM/sysinit.vim"
      fall-back for $VIM: "/usr/share/nvim"
    
    Run :checkhealth for more info
    
    opened by adigitoleo 0
  • error: [Errno 36] File name too long

    error: [Errno 36] File name too long

    occurs with two files (>255 characters) :

    • cppreference.com/std::experimental::ranges::input_iterator_tag, std::experimental::ranges::output_iterator_tag, std::experimental::ranges::forward_iterator_tag, std::experimental::ranges::bidirectional_iterator_tag, std::experimental::ranges::random_access_iterator_tag.3.gz
    • cppreference.com/std::filesystem::path::has_root_path, std::filesystem::path::has_root_name, std::filesystem::path::has_root_directory, std::filesystem::path::has_relative_path, std::filesystem::path::has_parent_path, std::filesystem::path::has_filename, std::filesystem::path::has_stem, std::filesystem::path::has_extension.3.gz
    opened by sub7zero 0
  • cppman std::ostream opens std::ostream_iterator?

    cppman std::ostream opens std::ostream_iterator?

    I installed on Ubuntu 20.04 via apt-get. I noticed that man -k --regex '[Ss]ame' didn't find std::same_as or std::Same, while man std::Same worked. So there may be something weird about my installation. In any case man std::ostream work as expected, cppman std::ostream did not. The name is an exact match, but I assume some kind of fuzzy matching or completion went wrong. Can anyone reproduce this?

    opened by jep-dev 1
  • error: no such column: title

    error: no such column: title

    cppman doesn't work in debian:

    $ cppman -v
    /usr/bin/cppman Ver 0.5.3
    Copyright (C) 2010 Wei-Ning Huang
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    Written by Wei-Ning Huang (AZ) <[email protected]>.
    
    $ cppman -c
    By default, cppman fetches pages on-the-fly if corresponding page is not found in the cache. The "cache-all" option is only useful if you want to view man pages offline. Caching all contents will take several minutes, do you want to continue [y/N]? y
    Caching manpages from cppreference.com ...
    error: no such column: title
    
    opened by dsyx 2
Releases(0.5.1)
Owner
Wei-Ning Huang
Co-founder, CEO of Byzantine Lab Fullstack Engineer: Firmware, Kernel, Backend, Frontend, Blockchain, Smart Contract.
Wei-Ning Huang
Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

John Davidson 1.3k Jan 8, 2023
Starting with OpenCV and Qt on MacOS is a bit of difficult if you haven't installed and used libraries in XCode.

OpenCV and Qt on MacOS Introduction Starting with OpenCV and Qt on MacOS is a bit of difficult if you haven't installed and used libraries in XCode. T

Martin Kersting 3 Oct 20, 2022
Background Music, a macOS audio utility: automatically pause your music, set individual apps' volumes and record system audio.

Background Music macOS audio utility Overview Auto-pause music Application volume Recording system audio Download Build and Install Uninstall Troubles

Kyle Neideck 12.8k Jan 2, 2023
Parsing the Linux procfs

Very easy to use, procfs parsing library in C++. Build Run cmake . && make Currently supported CMake configuration flags: BUILD_SHARED_LIBS=<ON|OFF>:

Daniel Trugman 69 Jan 5, 2023
Linux C/C++ 学习笔记、内含视频 + 电子书 + 项目等,专注于 C++ 技术栈!

programming-cpp C++ 方向 一、要不要选择 C++ 二、C++ 选择经历 2.1、上 2.2、下 个人履历 编程学习 C++ 学习笔记 一、汇编 二、Linux 三、C 语言基础 四、C 语言实战 五、数据结构实战 六、C++ 基础 七、STL 八、Boost 库 九、网络编程 十

null 106 Dec 22, 2022
A very small v8 javascript runtime for linux only

Just A very small v8 javascript runtime for linux only Build and Run Currently working on modern linux (debian/ubuntu and alpine teste

theanarkh 9 Nov 8, 2021
Linux 源码分析

alinux Linux 源码分析 本项目地址 欢迎大家以 Markdown 的形式提交有关硬件内容的 PR!!! 配置开发环境 克隆代码,执行命令 git clone https://github.com/StevenBaby/alinux.git 然后可以在 devel 目录执行 make b

Steven 28 Dec 20, 2022
Sysmon For Linux install and build instructions

The packages are available in the official Microsoft Linux repositories and instructions on how to install the packages for the different Linux distributions can be found in the Installation instructions.

Sysinternals 1.2k Jan 1, 2023
A simple floating clock for Linux

Hoverclock Hoverclock is a simple, yet customizable floating clock for Linux created with QT. Table of contents General info Technologies Quick note U

Kostoski Stefan 13 Sep 13, 2022
Linux Network Programming in Modern C++

Linux Network Programming in Modern C++ Starter code for network programming in the Linux environment, providing wrapper classes written in modern C++

Francis Y. Yan 13 Feb 7, 2022
A command-line tool to generate Linux manual pages from C source code.

mangen A command-line tool to generate Linux manual pages from C source code. Description mangen is, as said above, a program to generate Linux manual

null 2 Nov 15, 2021
Manual mapper that uses PTE manipulation, Virtual Address Descriptor (VAD) manipulation, and forceful memory allocation to hide executable pages. (VAD hide / NX bit swapping)

Stealthy Kernel-mode Injector Manual mapper that uses PTE manipulation, Virtual Address Descriptor (VAD) manipulation, and forceful memory allocation

Charlie Wolfe 137 Jan 3, 2023
Formatted C++20 stdlib man pages (cppreference)

C++ stdlib man pages stdman is a tool that parses archived HTML files from cppreference and generates groff-formatted manual pages for Unix-based syst

Jeaye Wilkerson 866 Dec 29, 2022
Formatted C++20 stdlib man pages (cppreference)

C++ stdlib man pages stdman is a tool that parses archived HTML files from cppreference and generates groff-formatted manual pages for Unix-based syst

Jeaye Wilkerson 865 Dec 28, 2022
PageBuster - dump all executable pages of packed processes.

PageBuster Ever wanted to dump all the executable pages of a process? Do you crave something capable of dealing with packed processes? We've got you c

rev.ng 188 Oct 10, 2022
Offical repo for "Moynihan, M., Ruano, S., Pagés, R. and Smolic, A., 2021. Autonomous Tracking For Volumetric Video Sequences"

MeshTracker A segmentation-based tracking algorithm for registering volumetric video meshes (ply/obj) in C++. This is the official implementation of t

V-Sense 22 Nov 7, 2022
This is kdmapper but it doesn't use ExAllocatePool instead it allocates pages to avoid being in BigPoolTable,

KDMapper without allocating memory in BigPoolTable Original creator https://github.com/z175 Improved by https://github.com/TheCruZ TheCruz has intergr

tygo lokum 36 Jan 3, 2023
Remap ELF LOAD segments to huge pages

Quick start Not recommended as a production solution, but it's a very fast way to benchmark if your application benefits from remapping your text and

null 19 Dec 21, 2022
Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

Minimal Linux Live (MLL) is a tiny educational Linux distribution, which is designed to be built from scratch by using a collection of automated shell scripts. Minimal Linux Live offers a core environment with just the Linux kernel, GNU C library, and Busybox userland utilities.

John Davidson 1.3k Jan 8, 2023
Utility to install kexts, Frameworks and PrivateFrameworks in the System of macOS. For macOS Monterey 12 and Big Sur 11

Command-Line-SnapShot-Mounter Credit: chris1111 Apple This utility uses the macOS terminal Command Line SnapShot Mounter is an utility that allows you

chris1111 23 Jan 8, 2023