Yurii Puchkov 55e61b8743 Namecheap - Basic objects editing (move, remove, change color, change thickness) (#1539)
* Code refactoring - rename deleteToolwidgetOrClose to deleteToolWidgetOrClose

(cherry picked from commit cc9d71c660fd335e484b8c2c5a4c9ac939a5b643)

* Code refactoring - move part of code from CaptureWidget::paintEvent function into showInitialMessage

(cherry picked from commit 377b716dc4cdc460e385e9a953850c377283db73)

* Code refactoring - move part of code from CaptureWidget::paintEvent function into showInitialMessage

(cherry picked from commit 377b716dc4cdc460e385e9a953850c377283db73)

* Code refactoring - move part of code from CaptureWidget::paintEvent function into drawInactiveRegion, rename showInitialMessage -> drawInitialMessage

(cherry picked from commit 39bf83588db52b9e5b40fddb2b7a9939a64bd19b)

* Re-implement undo/redo feature with a future ability to work with it as with history with access by index (remove/edit not just for a last item)

(cherry picked from commit d6c6cf51c38b8dd8f51f443f3dcb162e96796a66)

* fix - No bubble border for CircleCountTool

(cherry picked from commit 6ef81efd91d9d8d169c1dafd2801fffd2a722ee8)

* fix - Restore Pen and Brush after the rectangle tool (effects Circle tool without it)

(cherry picked from commit 5239925fa5cf69b6755004f3ab8443d091d731c1)

* Tool objects history (undo) list on Utility Panel - added icon to the items

(cherry picked from commit 4181990f2677a9c8b62c844546f4ac708ecac076)

* Update Ukrainian and Russian translations

(cherry picked from commit eae2fe0f5826eda4d44d1616bbd12ff53a9254dd)

* Feature - remove any created object on CaptureWidget

(cherry picked from commit ed2073fa7c2d4e9067668d5a262a067d3ccf9c9a)

* Search tool object on CaptureWidget on mouse click and select it in UtilityPanel

(cherry picked from commit 5a997dd5608d0bf72af1b50bcfa1779336b842ac)

* Optimize tool object search on CaptureWidget

(cherry picked from commit 7cd4872cb4adb29e847c5e3adfdb3a24a240982b)

* Move selection with Ctrl modificator key only, set correct mouse cursor for dragging and selecting tool objects

(cherry picked from commit bf8e47ccbef33bc765820fe64c12168587117ea6)

* Move tool objects based on AbstractTwoPointTool class

(cherry picked from commit 3f041b76d2da9326f099b7109984b75a4ce0df28)

* Move Text tool objects on CaptureWidget

(cherry picked from commit b71b6db9e1a4c64e19a045096bd7df0d5a3f4b8f)

* Move Pencil tool objects on CaptureWidget

(cherry picked from commit 3a269a57bb38bdfea0596f2a8310de6bd5bdb119)

* Code refactoring - clean up unused and some refactoring

(cherry picked from commit af667f1e25c7c363a42952b20580620c0e6d7925)

* Remove - duplicate 'at' class member with int and uint types

(cherry picked from commit 4b5b2f7a75ce568bd23d170b8d8731f630d1bf48)

* Search for an active object BLUR/PIXELATE and activate it on mouse click

(cherry picked from commit 04cbbdd352e41e23edb4ae596173a6d3971ecdb5)

* Increase search radius for text objects

(cherry picked from commit 4f189bc40b71b82d0e1e5d3ff06e6641616abb8c)

* Code refactoring - remove old unused undo/redo backupPixmap

(cherry picked from commit 1b15b9acf514fce854d5e0f467c10a6e14a333a0)

* Add object selection arownd the object on select for tools based on AbstractTwoPointTool

(cherry picked from commit 26fab8ff365ed0d7ff3eee1191d48248e8a05dcd)

* Add object selection arownd the object on select for tools based on AbstractPathTool

(cherry picked from commit bbf53e4c35a58d313d0cd94b24b86c15f5841483)

* Add object selection arownd the object on select for the TextTool

(cherry picked from commit ec5780b5c1ec59fd8924834f67563df36590c0a6)

* Edit color for any selected object

(cherry picked from commit 465a183978f8e8ff0df0e2c5cf77ec3d3115fccc)

* Code refactoring - fix some missprints in MacOS CI

(cherry picked from commit 99ef8a55d4ca812b6217bd15934c276a2ed5aa57)

* Text object selection has wrong size

(cherry picked from commit cd365060f1bc607ee53a77482af50f71d5ffe674)

* Make more noticeable object selection for TwoPoints and Path tools (except arrows)

(cherry picked from commit 67e304474fd116d95ae6138a50c719186b71bf9a)

* Make more noticeable object selection for Arrows

(cherry picked from commit 066ff0a425ebfc2c235ef756057c086cd75a863f)

* Make more noticeable object selection for Text

(cherry picked from commit e5e0afd5853ae2e8169209a0d9a3a6b1ce42f6e1)

* fix - Make more noticeable object selection for Arrow tool

(cherry picked from commit e1028c7c786d7d8b92b2bd7561193ed5be9066c8)

* fix - add '#include <cmath>' for round function

(cherry picked from commit a043036627587d78bbc916a4590e4e0cb9a6173d)

* Add hotkey for removing objects

(cherry picked from commit 13059461d550fbdd7f43d157c3a87fad43989742)

* Add hotkey for removing objects

(cherry picked from commit 13059461d550fbdd7f43d157c3a87fad43989742)

* Code refactoring - remove outdated parts of undo/redo, some optimisation

(cherry picked from commit 8e08cea690dcbadb61efbab4139b4bd43a9dd91a)

* Add operator = for tool objects to be able to implement undo/redo stack based on the concept of full state saving for each step (just objects, not generated images and layers)

(cherry picked from commit 7ffc850883ea97d807514a15d89ac5dd0e45c9f5)

* Implement basic Undo/Redo step based on QUndoStack (without move and change color steps), some other fixes

(cherry picked from commit 818f3d2939fbe5153787612824e40b3b1997297b)

* Add undo/redo stack for changing color

(cherry picked from commit 2b8a4ffc4f5e39d8531611f516a222288f54224b)

* fix - save objects state before color update for undo/redo stack and do not save state until mouse release event

(cherry picked from commit 4ba79d6b96d89a3010f14d0d9759ff98ae407fd1)

* Add object movement to the undo/redo stack

(cherry picked from commit 1eacc35a15487a815a68db6b7ad5daf8bac7adcf)

* fix - undo/redo from first to the latest item (still with a brutal hack)

(cherry picked from commit 421f43ff5361da1d215465e133b52b407829340c)

* Do not close CaptureWidget if some tool object or selection is active

(cherry picked from commit 17fc95e167dd7ac3c17c8ed39c4bbde03301ea9b)

* Don't change color if right click is not in the object selection area

(cherry picked from commit d8ecead647ca0804c5e7555c8ffa3117abc8f3d1)

* Edit thickness for the existing objects

(cherry picked from commit 9ab45497e60b1316bf50d67ca7d29b84cd70f515)

* fix - restore CaptureWidget thickness on object select

(cherry picked from commit 9ff9de5a915eec65bed66a74e3a5ec7f1bee2719)

* Code refactoring - move repeated code to the function 'activeToolObject'

(cherry picked from commit c388d8c8ec2844c2426148a437f6aaad2a1f7923)

* Code refactoring - remove unused lines and many fixes based on Clang-Tidy

(cherry picked from commit 7e19019dbaa185387b90fe9f45c8a65f057cd582)

* Code refactoring - remove unused lines and many fixes based on Clang-Tidy

(cherry picked from commit 7e19019dbaa185387b90fe9f45c8a65f057cd582)

* fix - Circle Counter Bubble numeration can skip some items if CPU is high loaded at that moment

(cherry picked from commit 6242fe8620bd5a46a7291de41ea8ce5465950664)

* Code refactoring - make m_thickness variable in tool objects private and work with it as get/set methods

(cherry picked from commit f36e823864c1af35aa94809515f786a45915e180)

* fix - CircleTool doesn't place on CaptureWidget without mouse move
Code refactoring - make number of variables private for AbstractTwoPointTool and work with them as get/set methods

(cherry picked from commit 874ebc3afd3da77fcb954e83429e88016518cbca)

* CircleCount - make circles more contrast and mouse preview opaque

(cherry picked from commit cebf3b831cf5751cb0b4b9b83f6f63d60b18dc8c)

* fix - CircleCount selection and changing color for existing object

(cherry picked from commit 477c230194b57af9223a3d68c4ac4f5c1bf3566c)

* fix - Move selection area tool cannot be selected

(cherry picked from commit 38662ff86e6a858c02050de1caa37295bb25d574)

* fix - Selection area disappears on click on existing tool out of area

(cherry picked from commit e98c60e226c9883558718f1278879339dc528973)

* Change MacOS hotkey Command+Backspace -> Backspace

(cherry picked from commit aa96b956348a0192179f03a43a0ce5712ce1a965)

* Make rectangle tool with rounded borders (not cut), Make selection tool without rounded edges

(cherry picked from commit 2fd9c2ad9f5d00dcb9204b09989a66309b43f472)

* fix - Thickness doesn't changed for existing object on changing it in side panel

(cherry picked from commit 271731c89185b982a86bb27e3a7bc441a2942c10)

* fix - Sync selection on CaptureWidget when clicking on tool in panel

(cherry picked from commit 9db0c75ec0e92d5fad5bc3856f46f5ed87c6aefd)

* Change selection on mouse down instead of mouse up event

(cherry picked from commit 3e09778b701498498c144c5e5516f746f1c9088a)

* Code refactoring - remove variable m_rightClick from CaptureWidget, use another existing trigger to detect it

(cherry picked from commit 1abc595ce352b8445a943504a7c359cd0830a640)

* fix - Rectangle preview and final objects are not the same

(cherry picked from commit b31905892a60228cae5c8bcde1f71699eca63447)

* fix - Doesn't save image if the 'use fixed path' checkbox is checked

(cherry picked from commit 1470859aa2c4f28f2c45581891534f3fa4bd6f0a)

* fix - Latest Uploads max size value doesn't restore after reset/import settings

(cherry picked from commit fa72bacfc0bb12313dd351ee246dd567dfc3f3c8)

* fix - impossible to disable the keyboard shortcut by clicking Delete button

(cherry picked from commit 74d36e4b3a333cb81ffb4ad93a2bd5465e79cb94)

* fix - MacOS - Increase and Decrease Size tool icon colors are not changed (dark/light) when changing main tool background color

(cherry picked from commit e48b685c900540a9cd353f71290be04491621fc7)

* fix - Selected region control points cannot be dragged on the screen corners

(cherry picked from commit 08bf02b5ee096c14d10c15853543749d58c51ef4)

* fix - Object selects if mouse pointer above any object when TextTool is active

(cherry picked from commit b7a6a7efc8c3a77c55039721ab0cf388973c25d5)

* fix - Test Tool doesn't close editor on next text item, you can see two editors and one of them will be never closed

(cherry picked from commit eb12f76fd7121d1917659485673305684de523c8)

* Code refactoring - remove function in the CaptureToolObjects class with the same functional

(cherry picked from commit 1a108f7be48d5b4d89960ac4a5f4e82c03762cbc)

* Code refactoring - CaptureWidget::mousePressEvent function is split into a few, code became more readable

(cherry picked from commit dc850b3daa00fa173126d86403c35f3c67c448e6)

* optimization - remove unnecessary calls of CaptureWidget::drawToolsData

(cherry picked from commit c2432bd5602657233ee9506e84a7806bafeb6f68)

* fix - Move tool doesn't work if any object is selected
fix - Active tool stays active if existing object is selected in the Tool Settings panel

(cherry picked from commit 6154feba575f79a06082f72b5c45a869c8d08f42)

* fix - App freezes for a while when changing thickness of the pixelate to the minimal value

(cherry picked from commit 3a1c519c8309b831e4cc4f11b9014b1a9599ba93)

* fix - Text Tool doubles on press ESC when text editing field is active

(cherry picked from commit 00bdebff75a0178a46f38606eec4921fdf2f5917)

* fix - Image is pinned/saved with object selection frame if there is one

(cherry picked from commit 81871860720fa0527f8dcabe1b274b3f03818b7c)

* fix - Object line thickness changes according to previously modified object when switching between objects via object list

(cherry picked from commit a4a367d30e18a743f0df849e7db1aa2dc20af2a6)

* fix - Configuration: Filename doesn't set default value on clear

(cherry picked from commit 289663c0c85f4bae98c1a19a7a05fb1029738c12)

* Update README.md - Global shortcut for Ubuntu 20.04

(cherry picked from commit 3bee0aa0ac937c00113f2bcca818a9a57e6c5530)

* fix - Saved screenshot has selection if some object is selected on Save

(cherry picked from commit e53bb33e804cc7de1102a1ab3069bfb849174b73)

* fix - Saved screenshot has selection if some object is selected on Upload

* fix - Rename "Reset" to "Restore" in file settings for restoring saved file name rules in the configuration widget

(cherry picked from commit d2ac5a330fca902b832fce163e4f5f138dbbcc6b)

* Update Ukrainian and Russian translations

* fix - Shapes are displayed as semi-empty at the very beginning of drawing if the line is thick

(cherry picked from commit d8b09c5d5233fefe3181a69f5200198815bc3ec1)

* fix - MacOS - Button "Tool Settings" is not visible on some displays if displays are vertically aligned

(cherry picked from commit 6af590a859b2708177c34c3ff37725905f4c3bec)

* fix - Incorrect selection border for Rectangle/Pixelate tool

(cherry picked from commit c908d3b67c5d8e2188d2699ac11951110493b756)

* Code refactoring - replace magic numbers

(cherry picked from commit c8e1ce345adb1646659e4e90d314916532d5e67a)

* fix merge conflicts for Internationalization files

* fix - thickness shouldn't be less than one

(cherry picked from commit d8ea8a0db7fffcec601dd3139c57198ba15b64b7)

* Update copyright info

Co-authored-by: Yuriy Puchkov <yuriy.puchkov@namecheap.com>
2021-04-19 19:28:10 -05:00
2021-03-15 17:50:30 -05:00
2020-10-31 20:08:09 -05:00
2017-05-10 21:44:51 +02:00
2020-10-14 18:43:26 -05:00

Flameshot
Flameshot

Powerful yet simple to use screenshot software.

GNU/Linux Build Status Windows Build Status MacOS Build Status Latest Stable Release Total Downloads License Docs
Get it from the Snap Store Download on Flathub

Preview

image

Index

Features

  • Customizable appearance.
  • Easy to use.
  • In-app screenshot editing.
  • DBus interface.
  • Upload to Imgur.

Usage

Executing the command flameshot without parameters will launch a running instance of the program in background without taking actions. If your desktop environment provides tray area, a tray icon will also appear in the tray for users to perform configuration and management.

Example commands:

  • Capture with GUI:

    flameshot gui
    
  • Capture with GUI with custom save path:

    flameshot gui -p ~/myStuff/captures
    
  • Capture with GUI after 2 seconds delay (can be useful to take screenshots of mouse hover tooltips, etc.):

    flameshot gui -d 2000
    
  • Fullscreen capture with custom save path (no GUI) and delayed:

    flameshot full -p ~/myStuff/captures -d 5000
    
  • Fullscreen capture with custom save path copying to clipboard:

    flameshot full -c -p ~/myStuff/captures
    
  • Capture the screen containing the mouse and print the image (bytes) in PNG format:

    flameshot screen -r
    
  • Capture the screen number 1 and copy it to the clipboard:

    flameshot screen -n 1 -c
    

In case of doubt choose the first or the second command as shortcut in your favorite desktop environment.

A systray icon will be in your system's panel while Flameshot is running. Do a right click on the tray icon and you'll see some menu items to open the configuration window and the information window. Check out the About window to see all available shortcuts in the graphical capture mode.

CLI configuration

You can use the graphical menu to configure Flameshot, but alternatively you can use your terminal or scripts to do so.

  • Open the configuration menu:

    flameshot config
    
  • Show the initial help message in the capture mode:

    flameshot config --showhelp true
    
  • For more information about the available options use the help flag:

    flameshot config -h
    

Config file

You can also edit some of the settings (like overriding the default colors) in the configuration file located at ~/.config/flameshot/flameshot.ini.

Keyboard shortcuts

Local

These shortcuts are available in GUI mode:

Keys Description
P Set the Pencil as paint tool
D Set the Line as paint tool
A Set the Arrow as paint tool
S Set Selection as paint tool
R Set the Rectangle as paint tool
C Set the Circle as paint tool
M Set the Marker as paint tool
T Add text to your capture
B Set Pixalate as the paint tool
, , , Move selection 1px
Shift + , , , Resize selection 1px
Esc Quit capture
Ctrl + M Move the selection area
Ctrl + C Copy to clipboard
Ctrl + S Save selection as a file
Ctrl + Z Undo the last modification
Ctrl + Shift + Z Redo the next modification
Ctrl + Q Leave the capture screen
Ctrl + O Choose an app to open the capture
Return Upload the selection to Imgur
Spacebar Toggle visibility of sidebar with options of the selected tool, color picker for the drawing color and history menu
Right Click Show the color wheel
Mouse Wheel Change the tool's thickness
Print screen Capture Screen
Shift + Print Screenshot History

Shift + drag a handler of the selection area: mirror redimension in the opposite handler.

Global

If you want use Flameshot as a default screenshot utility, chances are you want to launch it using the Prt Sc key. Flameshot doesn't yet offer a fully-automated option to do so, but you can configure your system to do so.

On KDE Plasma desktop

To make configuration easier, there's a file in the repository that more or less automates this process. This file will assign the following keys to the following actions by default:

Keys Description
Prt Sc Start the Flameshot screenshot tool and take a screenshot
Ctrl + Prt Sc Wait for 3 seconds, then start the Flameshot screenshot tool and take a screenshot
Shift + Prt Sc Take a full-screen (all monitors) screenshot and save it
Ctrl + Shift + Prt Sc Take a full-screen (all monitors) screenshot and copy it to the clipboard

If you don't like the defaults, you can change them manually later.

Steps for using the configuration:

  1. The configuration file configures shortcuts so that Flameshot automatically saves (without opening the save dialog) screenshots to ~/Pictures/Screenshots folder. Make sure you have that folder by running the following command:

    mkdir -p ~/Pictures/Screenshots
    

    (If you don't like the default location, you can skip this step and configure your preferred directory later.)

  2. Download the configuration file:

    cd ~/Desktop
    wget https://raw.githubusercontent.com/flameshot-org/flameshot/master/docs/shortcuts-config/flameshot-shortcuts-kde
    
  3. Go to System SettingsShortcutsCustom Shortcuts.

  4. If there's one, you'll need to disable an entry for Spectacle, the default KDE screenshot utility first because its shortcuts might collide with Flameshot's ones; so, just uncheck the Spectacle entry.

  5. Click EditImport..., navigate to the Desktop folder (or wherever you saved the configuration file) and open the configuration file.

  6. Now the Flameshot entry should appear in the list. Click Apply to apply the changes.

  7. If you want to change the defaults, you can expand the entry, select the appropriate action and modify it as you wish; the process is pretty mush self-explanatory.

On Ubuntu (Tested on 18.04, 20.04)

To use Flameshot instead of the default screenshot application in Ubuntu we need to remove the binding on Prt Sc key, and then create a new binding for /usr/bin/flameshot gui (adaptated from Pavel's answer on AskUbuntu).

  1. Remove the binding on Prt Sc using the following command.
gsettings set org.gnome.settings-daemon.plugins.media-keys screenshot '[]'
  1. Ubuntu 18.04: Go to Settings > Device > Keyboard and press the '+' button at the bottom. Ubuntu 20.04: Go to Settings > Keyboard and press the '+' button at the bottom.

  2. Name the command as you like it, e.g. flameshot. And in the command insert /usr/bin/flameshot gui.

  3. Then click "Set Shortcut.." and press Prt Sc. This will show as "print".

Now every time you press Prt Sc, it will start the Flameshot GUI instead of the default application.

On XFCE 4

  1. Go to Keyboard settings

  2. Switch to the tab Application Shortcuts

  3. Find the entry

    Command                        Shortcut
    xfce4-screenshooter -fd 1      Print
    
  4. Replace xfce4-screenshooter -fd 1 with flameshot gui

Now every time you press Prt Sc it will start Flameshot GUI instead of the default application.

Considerations

  • Experimental Gnome Wayland and Plasma Wayland support.

  • If you are using Gnome you need to install the Gnome Shell Extension Appindicator extension in order to see the system tray icon.

  • Press Enter or Ctrl + C when you are in a capture mode and you don't have an active selection and the whole desktop will be copied to your clipboard. Pressing Ctrl + S will save your capture to a file. Check the Shortcuts for more information.

  • Flameshot works best with a desktop environment that includes D-Bus. See this article for tips on using Flameshot in a minimal window manager (dwm, i3, xmonad, etc).

  • In order to speed up the first launch of Flameshot (D-Bus init of the app can be slow), consider starting the application automatically on boot.

    • Quick tip: If you don't have Flameshot to autostart at boot and you want to set keyboard shortcut, use the following as the command for the keybinding:
    ( flameshot &; ) && ( sleep 0.5s && flameshot gui )
    

Installation

Flameshot can be installed on Linux, Microsoft Windows, and macOS.

Prebuilt packages

Some prebuilt packages are provided on the release page of the GitHub project repository.

Packages from Repository

There are packages available in the repository of some Linux distributions:

There are also options for installing on macOS:

  • MacPorts: sudo port selfupdate && sudo port install flameshot
Expand this section to see what distros are using an up to date version of flameshot Packaging status

Tray icon

Note that for the Flameshot icon to appear in your tray area, you should have a systray software installed. This is especially true for users who use minimal window managers such as dwm. In some Desktop Environment installations (e.g Gnome), the systray might be missing and you can install an application or plugin (e.g Gnome shell extension) to add the systray to your setup. It has been reported) that icon of some softwares, including Flameshot, does not show in gnome-shell-extension-appindicator.

Alternatively, in case you don't want to have a systray, you can always call Flameshot from the terminal. See Usage section.

Compilation

To build the application in your system, you'll need to install the dependencies needed for it and package names might be different for each distribution, see Dependencies below for more information. You can also install most of the Qt dependencies via their installer. If you were developing Qt apps before, you probably already have them.

This project uses CMake build system, so you need to install it in order to build the project (on most Linux distributions it is available in the standard repositories as a package called cmake). If your distribution provides too old version of CMake (e.g. Ubuntu 18.04) you can download it on the official website.

Also you can open and build/debug the project in a C++ IDE. For example, in Qt Creator you should be able to simply open CMakeLists.txt via Open File or Project in the menu after installing CMake into your system. More information about CMake projects in Qt Creator.

Dependencies

Compile-time

  • Qt >= 5.9
    • Development tools
  • GCC >= 7.4
  • CMake >= 3.13

Run-time

  • Qt
    • SVG

Optional

  • Git
  • OpenSSL
  • CA Certificates

Debian

# Compile-time
apt install g++ cmake build-essential qt5-default qttools5-dev-tools libqt5svg5-dev qttools5-dev

# Run-time
apt install libqt5dbus5 libqt5network5 libqt5core5a libqt5widgets5 libqt5gui5 libqt5svg5

# Optional
apt install git openssl ca-certificates

Fedora

# Compile-time
dnf install gcc-c++ cmake qt5-devel qt5-qtbase-devel qt5-linguist

# Run-time
dnf install qt5-qtbase qt5-qtsvg-devel

# Optional
dnf install git openssl ca-certificates

Arch

# Compile-time
pacman -S cmake base-devel git qt5-base qt5-tools

# Run-time
pacman -S qt5-svg

# Optional
pacman -S openssl ca-certificates

MacOS

First of all you need to install brew and than install dependencies

brew install qt5
brew install cmake

Build

After installing all the dependencies, finally run the following commands in the sources root directory:

mkdir build
cd build
cmake ../
make

NOTE: for macOS you should replace command

cmake ../

to

cmake ../ -DQt5_DIR=$(brew --prefix qt5)/lib/cmake/Qt5

When make command completed you can launch flameshot from project_folder/build/src folder

Install

Simply use make install with privileges. Note: If you install from source, there is no uninstaller, you will need to manually remove the files. Consider using CMAKE_INSTALL_PREFIX to install to a custom location for easy removal.

License

Info: If I take code from your project and that implies a relicense to GPLv3, you can reuse my changes with the original previous license of your project applied.

Privacy Policy

This program will not transfer any information to other networked systems unless specifically requested by the user or the person installing or operating it.

Code Signing Policy

Free code signing provided by SignPath.io, certificate by SignPath Foundation.

Code signing is currently a manual process so not every patch release will be signed.

Contribute

If you want to contribute check the CONTRIBUTING.md

Acknowledgment

Thanks to those who have shown interest in the early development process:

Thanks to sponsors:

  • JetBrains
  • SignPath
Description
No description provided
Readme GPL-3.0 25 MiB
Languages
C++ 89.7%
CMake 6.1%
Shell 2.8%
Roff 1.1%
C 0.2%
Other 0.1%