Files
website/source-code/index.html
2025-05-20 08:16:09 +00:00

954 lines
30 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Midnight Commander Development Center">
<meta name="author" content="Yury V. Zaytsev">
<link rel="canonical" href="https://midnight-commander.org/source-code/">
<link rel="prev" href="../other/">
<link rel="next" href="../coding-style/">
<link rel="icon" href="../img/mc-logo.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">
<title>Source code - Midnight Commander</title>
<link rel="stylesheet" href="../assets/stylesheets/main.342714a4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Fira+Mono:300,300i,400,400i,700,700i%7CFira+Code:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Fira Mono";--md-code-font:"Fira Code"}</style>
<link rel="stylesheet" href="../stylesheets/extra.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#source-code" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="Midnight Commander" class="md-header__button md-logo" aria-label="Midnight Commander" data-md-component="logo">
<img src="../img/mc-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Midnight Commander
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Source code
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/MidnightCommander/mc" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
MidnightCommander/mc
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="Midnight Commander" class="md-nav__button md-logo" aria-label="Midnight Commander" data-md-component="logo">
<img src="../img/mc-logo.png" alt="logo">
</a>
Midnight Commander
</label>
<div class="md-nav__source">
<a href="https://github.com/MidnightCommander/mc" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
MidnightCommander/mc
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maintainers/" class="md-nav__link">
<span class="md-ellipsis">
Maintainers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../communication/" class="md-nav__link">
<span class="md-ellipsis">
Communication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../other/" class="md-nav__link">
<span class="md-ellipsis">
Other resources
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
<span class="md-ellipsis">
Development
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Development
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Source code
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Source code
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#contributing" class="md-nav__link">
<span class="md-ellipsis">
Contributing
</span>
</a>
<nav class="md-nav" aria-label="Contributing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#version-control" class="md-nav__link">
<span class="md-ellipsis">
Version control
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#signing-off-commits" class="md-nav__link">
<span class="md-ellipsis">
Signing off commits
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#branch-lifecycle" class="md-nav__link">
<span class="md-ellipsis">
Branch lifecycle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code-review" class="md-nav__link">
<span class="md-ellipsis">
Code review
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#cleanup-branch" class="md-nav__link">
<span class="md-ellipsis">
Cleanup branch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#source-tour" class="md-nav__link">
<span class="md-ellipsis">
Source tour
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../coding-style/" class="md-nav__link">
<span class="md-ellipsis">
Coding style
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../translations/" class="md-nav__link">
<span class="md-ellipsis">
Translations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../release-process/" class="md-nav__link">
<span class="md-ellipsis">
Release process
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#contributing" class="md-nav__link">
<span class="md-ellipsis">
Contributing
</span>
</a>
<nav class="md-nav" aria-label="Contributing">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#version-control" class="md-nav__link">
<span class="md-ellipsis">
Version control
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#signing-off-commits" class="md-nav__link">
<span class="md-ellipsis">
Signing off commits
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#branch-lifecycle" class="md-nav__link">
<span class="md-ellipsis">
Branch lifecycle
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#code-review" class="md-nav__link">
<span class="md-ellipsis">
Code review
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#cleanup-branch" class="md-nav__link">
<span class="md-ellipsis">
Cleanup branch
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#source-tour" class="md-nav__link">
<span class="md-ellipsis">
Source tour
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="source-code">Source code</h1>
<ul>
<li>Our source releases are kindly mirrored by <a href="https://osuosl.org">OSU OSL</a>:<ul>
<li><a href="https://ftp.osuosl.org/pub/midnightcommander/?C=N;O=D">https://ftp.osuosl.org/pub/midnightcommander/</a></li>
</ul>
</li>
<li>Our repository is hosted <a href="https://github.com/MidnightCommander">on GitHub</a> and mirrored by <a href="https://repo.or.cz">repo.or.cz</a>:<ul>
<li><a href="https://github.com/MidnightCommander/mc">https://github.com/MidnightCommander/mc</a></li>
<li><a href="https://repo.or.cz/midnight-commander.git">https://repo.or.cz/midnight-commander.git</a> (mirror)</li>
</ul>
</li>
</ul>
<p>To compile from source, refer to the <a href="https://github.com/MidnightCommander/mc/blob/master/doc/INSTALL">installation instructions</a>.</p>
<h2 id="contributing">Contributing</h2>
<p>We require an issue (or pull request) and <a href="#code-review">code review</a> for any code contribution, except for the following, which can be committed directly to the development branch:</p>
<ul>
<li>Translations</li>
<li>Documentation</li>
<li>Infrastructure (<code>.github</code>)</li>
</ul>
<p>The commit message for the first patch in the series should begin with the following header:</p>
<div class="highlight"><pre><span></span><code>Ticket #&lt;github_issue_number&gt;: brief summary of the changes
</code></pre></div>
<h3 id="version-control">Version control</h3>
<ul>
<li>Our development branch is called <code>master</code></li>
<li>Prefix feature branch names with the issue ID (e.g. <code>4632_shift_fx</code>)</li>
<li>Rebase with <code>-i --autosquash</code> before merging to preserve linear history</li>
<li>Use non-fast forward (<code>--no-ff</code>) merges to track commit origin</li>
</ul>
<h3 id="signing-off-commits">Signing off commits</h3>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>DCO sign-off is different to "commit signing" using something like PGP or <code>gitsign</code>!</p>
</div>
<p>All contributors must acknowledge that they own the rights to the code they contribute by signing their commits with <code>git commit --amend -s</code> (adding a <code>Signed-off-by:</code> line to the commit message). This signifies that they abide by the <a href="https://developercertificate.org">Developer Certificate of Origin, Version 1.1</a>, which is also used by the Linux kernel.</p>
<h3 id="branch-lifecycle">Branch lifecycle</h3>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>Do not forget to update the changelog as tracked on the current <code>NEWS-4.8.XX</code> <a href="https://github.com/MidnightCommander/mc/wiki">wiki page</a>!</p>
</div>
<ol>
<li>Without PR<ul class="task-list">
<li class="task-list-item"><input type="checkbox"/> Assign issue to yourself</li>
<li class="task-list-item"><input type="checkbox"/> Update milestone</li>
<li class="task-list-item"><input type="checkbox"/> Link a branch</li>
<li class="task-list-item"><input type="checkbox"/> When ready for review:<ol>
<li>Add the label <code>state: in review</code></li>
<li><code>@mention</code> the reviewers</li>
</ol>
</li>
<li class="task-list-item"><input type="checkbox"/> Address comments with <code>git commit --fixup</code></li>
<li class="task-list-item"><input type="checkbox"/> When approved, add a <code>state: approved</code> label</li>
<li class="task-list-item"><input type="checkbox"/> Make sure that CI is green and <code>git rebase -i --autosquash</code></li>
<li class="task-list-item"><input type="checkbox"/> Proceed with the merge </li>
<li class="task-list-item"><input type="checkbox"/> Manually delete the feature branch <span class="twemoji"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2 1 21h22M12 6l7.53 13H4.47M11 10v4h2v-4m-2 6v2h2v-2"/></svg></span></li>
</ul>
</li>
<li>With PR<ul class="task-list">
<li class="task-list-item"><input type="checkbox"/> Open in draft mode if not ready yet</li>
<li class="task-list-item"><input type="checkbox"/> Switch to normal when ready for review</li>
<li class="task-list-item"><input type="checkbox"/> Update milestone</li>
<li class="task-list-item"><input type="checkbox"/> Invite reviewers</li>
<li class="task-list-item"><input type="checkbox"/> Address comments with <code>git commit --fixup</code></li>
<li class="task-list-item"><input type="checkbox"/> Secure approvals</li>
<li class="task-list-item"><input type="checkbox"/> Make sure that CI is green and <code>/rebase</code></li>
<li class="task-list-item"><input type="checkbox"/> Proceed with the merge </li>
<li class="task-list-item"><input type="checkbox"/> Feature branch is deleted automatically</li>
</ul>
</li>
</ol>
<h3 id="code-review">Code review</h3>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>To substantially increase the likelihood that your changes will be accepted, be sure to add <strong>tests</strong> for the code you touch.</p>
</div>
<p>Contributions should be reviewed according to the following criteria:</p>
<dl>
<dt><em>Motivation</em></dt>
<dd>It should be clear what the purpose of the proposed changes is.</dd>
<dt><em>Tests</em></dt>
<dd>Changes should be accompanied by tests that document that the desired goals have been achieved.</dd>
<dt><em>Code quality</em> (see <a href="../coding-style/">Coding style</a>)</dt>
<dd>
<ul>
<li>Code is split into logically independent commits</li>
<li>Changes are consistent with the rest of the code base</li>
<li>No large whitespace changes intermixed with logic changes</li>
</ul>
</dd>
<dt><em>Technical evaluation</em></dt>
<dd>The code is a valid approach to the problem.</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>A lot of great (and sometimes not so great) literature has been written about code review over the decades. We do not intend to cover code review in detail here, just highlight the points that are most relevant to our process.</p>
<p>A good place to start learning about code review in general is <a href="https://jml.io/your-code-sucks-and-i-hate-you/">Your code sucks, and I hate you</a> by Jonathan Lange.</p>
</div>
<h2 id="cleanup-branch">Cleanup branch</h2>
<p>For every release, we create a cleanup branch like <code>4633_cleanup</code> to aggregate small code changes, connected to the corresponding release ticket (e.g. <a href="https://github.com/MidnightCommander/mc/issues/4633">#4633</a>).</p>
<ul>
<li>The cleanup branch should be created as needed and merged back in periodically (currently about once a month).</li>
<li>Delete the cleanup branch after merging it into the main branch, and re-create it later with the same name if necessary.</li>
<li>The cleanup branch should be merged into the main branch no later than a few weeks before the release, to allow enough time for the changes to be tested by developers and users.</li>
</ul>
<p>Sometimes your patches might end up there. Do not worry, everything will be fine.</p>
<h2 id="source-tour">Source tour</h2>
<p>A cross-referenced source code tour of the development branch is available at the following URL:</p>
<ul>
<li><a href="https://source.midnight-commander.org">https://source.midnight-commander.org</a></li>
</ul>
<aside class="md-source-file">
<span class="md-source-file__fact">
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="May 10, 2025 10:07:36">May 10, 2025</span>
</span>
<span class="md-source-file__fact">
<span class="md-icon" title="Created">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="March 3, 2025 16:52:53">March 3, 2025</span>
</span>
</aside>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2025 <a href="https://www.linkedin.com/in/yuryzaytsev/">Yury V. Zaytsev</a>
&bull;
Revision: <a href="https://github.com/MidnightCommander/website/commit/729ab5f12113f964e9e5536b482132c4a9202012">g729ab5f12</a>
&bull;
<a
href="https://github.com/MidnightCommander/website/edit/master/docs/source-code.md"
title="Edit this page"
class="md-footer__copyright_button"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<a
href="https://github.com/MidnightCommander/website/raw/master/docs/source-code.md"
title="View source of this page"
class="md-footer__copyright_button"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg>
</a>
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://github.com/MidnightCommander" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</a>
<a href="https://ftp.osuosl.org/pub/midnightcommander" target="_blank" rel="noopener" title="ftp.osuosl.org" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32v242.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64h384c35.3 0 64-28.7 64-64v-32c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352zm368 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48"/></svg>
</a>
<a href="https://source.midnight-commander.org" target="_blank" rel="noopener" title="source.midnight-commander.org" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M96 0C43 0 0 43 0 96v320c0 53 43 96 96 96h320c17.7 0 32-14.3 32-32s-14.3-32-32-32v-64c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H96m0 384h256v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32m32-240c0-8.8 7.2-16 16-16h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16m16 48h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.copy", "navigation.sections"], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.13a4f30d.min.js"></script>
</body>
</html>