125 lines
2.7 KiB
ReStructuredText
125 lines
2.7 KiB
ReStructuredText
===========================
|
|
Midnight Commander extfslib
|
|
===========================
|
|
|
|
.. image:: https://img.shields.io/pypi/v/extfslib.svg
|
|
:target: https://pypi.python.org/pypi/extfslib
|
|
|
|
Midnight Commander extfslib helper library for writing extfs archive plugins.
|
|
|
|
|
|
Description
|
|
===========
|
|
|
|
Extfslib help with building Midnight Commander extfs plugins, especially for
|
|
those which operates on different kind of archives.
|
|
|
|
Simplest plugin built on top of this lib would be:
|
|
|
|
.. code:: python
|
|
|
|
import extfslib
|
|
|
|
|
|
class MyArchive(extfslib.Archive):
|
|
|
|
ARCHIVER = "fancyarch"
|
|
|
|
def list(self):
|
|
if not self._contents:
|
|
return 1
|
|
|
|
for item in self._contents:
|
|
sys.stdout.buffer.write(self.ITEM % item)
|
|
|
|
|
|
arch = MyArchive('/path/to/file.fancyarch')
|
|
arch.list()
|
|
|
|
|
|
In this example class instance should be able to be called with ``list``
|
|
method. All methods:
|
|
|
|
- ``list``
|
|
- ``copyin``
|
|
- ``copyout``
|
|
- ``rm``
|
|
- ``mkdir``
|
|
- ``rmdir``
|
|
- ``run``
|
|
|
|
should be implemented if needed, since by default all of them are just defined,
|
|
but not implemented.
|
|
|
|
Of course, real life example can be a little bit more complicated, since there
|
|
would be possible need for adapting ``LINE_PAT`` which is regular expression
|
|
for getting attributes for the list compatible with MC along with the ``ITEM``
|
|
which holds the output pattern and utilizes dictionary from ``LINE_PAT``,
|
|
``CMD`` which maps between class and archiver commands. Possibly there might be
|
|
needed some other adjustments.
|
|
|
|
Additionally there is an optional ``Config`` class, which might be used for
|
|
reading Midnight Commander ini file (ususally located in ``~/.config/mc/ini``),
|
|
so that for the example above:
|
|
|
|
.. code:: python
|
|
|
|
import extfslib
|
|
|
|
|
|
class MyArchive(extfslib.Archive):
|
|
|
|
ARCHIVER = "fancyarch"
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.conf = extfslib.Config(self)
|
|
if self.conf,getint('config_key'):
|
|
# do something
|
|
|
|
where the ``ini`` config file would contain:
|
|
|
|
.. code:: ini
|
|
|
|
…
|
|
[myarchive]
|
|
config_key = 300
|
|
…
|
|
|
|
So, section name ``[myarchive]`` must match class name in lower case, and name
|
|
of the option is arbitrary string folowed by value. Note, the section and
|
|
options must be added manually.
|
|
|
|
|
|
Installation
|
|
============
|
|
|
|
Install from Pypi
|
|
|
|
.. code:: shell-session
|
|
|
|
# pip install extfslib
|
|
|
|
or, as a user:
|
|
|
|
.. code:: shell-session
|
|
|
|
$ pip install extfslib --user
|
|
|
|
or use virtualenv:
|
|
|
|
.. code:: shell-session
|
|
|
|
$ git clone https://github.com/gryf/mc_extfslib
|
|
$ cd mc_extfslib
|
|
$ virtualenv venv
|
|
$ source venv/bin/activate
|
|
(venv) $ pip install
|
|
|
|
|
|
License
|
|
=======
|
|
|
|
This software is licensed under 3-clause BSD license. See LICENSE file for
|
|
details.
|