瀏覽代碼

Add awesome-copycats files

master
Immanuel Onyeka 2 年之前
父節點
當前提交
04340135ea
共有 100 個檔案被更改,包括 1659 行新增0 行删除
  1. +55
    -0
      awesome/ISSUE_TEMPLATE.md
  2. +182
    -0
      awesome/README.rst
  3. +339
    -0
      awesome/freedesktop/LICENSE
  4. +52
    -0
      awesome/freedesktop/README.rst
  5. +20
    -0
      awesome/freedesktop/awesome-freedesktop-scm-1.rockspec
  6. +259
    -0
      awesome/freedesktop/desktop.lua
  7. +15
    -0
      awesome/freedesktop/init.lua
  8. +121
    -0
      awesome/freedesktop/menu.lua
  9. 二進制
      awesome/freedesktop/screenshot.png
  10. +3
    -0
      awesome/lain/.gitmodules
  11. +33
    -0
      awesome/lain/ISSUE_TEMPLATE.md
  12. +339
    -0
      awesome/lain/LICENSE
  13. +38
    -0
      awesome/lain/README.rst
  14. +203
    -0
      awesome/lain/helpers.lua
  15. 二進制
      awesome/lain/icons/cal/black/1.png
  16. 二進制
      awesome/lain/icons/cal/black/10.png
  17. 二進制
      awesome/lain/icons/cal/black/11.png
  18. 二進制
      awesome/lain/icons/cal/black/12.png
  19. 二進制
      awesome/lain/icons/cal/black/13.png
  20. 二進制
      awesome/lain/icons/cal/black/14.png
  21. 二進制
      awesome/lain/icons/cal/black/15.png
  22. 二進制
      awesome/lain/icons/cal/black/16.png
  23. 二進制
      awesome/lain/icons/cal/black/17.png
  24. 二進制
      awesome/lain/icons/cal/black/18.png
  25. 二進制
      awesome/lain/icons/cal/black/19.png
  26. 二進制
      awesome/lain/icons/cal/black/2.png
  27. 二進制
      awesome/lain/icons/cal/black/20.png
  28. 二進制
      awesome/lain/icons/cal/black/21.png
  29. 二進制
      awesome/lain/icons/cal/black/22.png
  30. 二進制
      awesome/lain/icons/cal/black/23.png
  31. 二進制
      awesome/lain/icons/cal/black/24.png
  32. 二進制
      awesome/lain/icons/cal/black/25.png
  33. 二進制
      awesome/lain/icons/cal/black/26.png
  34. 二進制
      awesome/lain/icons/cal/black/27.png
  35. 二進制
      awesome/lain/icons/cal/black/28.png
  36. 二進制
      awesome/lain/icons/cal/black/29.png
  37. 二進制
      awesome/lain/icons/cal/black/3.png
  38. 二進制
      awesome/lain/icons/cal/black/30.png
  39. 二進制
      awesome/lain/icons/cal/black/31.png
  40. 二進制
      awesome/lain/icons/cal/black/4.png
  41. 二進制
      awesome/lain/icons/cal/black/5.png
  42. 二進制
      awesome/lain/icons/cal/black/6.png
  43. 二進制
      awesome/lain/icons/cal/black/7.png
  44. 二進制
      awesome/lain/icons/cal/black/8.png
  45. 二進制
      awesome/lain/icons/cal/black/9.png
  46. 二進制
      awesome/lain/icons/cal/white/1.png
  47. 二進制
      awesome/lain/icons/cal/white/10.png
  48. 二進制
      awesome/lain/icons/cal/white/11.png
  49. 二進制
      awesome/lain/icons/cal/white/12.png
  50. 二進制
      awesome/lain/icons/cal/white/13.png
  51. 二進制
      awesome/lain/icons/cal/white/14.png
  52. 二進制
      awesome/lain/icons/cal/white/15.png
  53. 二進制
      awesome/lain/icons/cal/white/16.png
  54. 二進制
      awesome/lain/icons/cal/white/17.png
  55. 二進制
      awesome/lain/icons/cal/white/18.png
  56. 二進制
      awesome/lain/icons/cal/white/19.png
  57. 二進制
      awesome/lain/icons/cal/white/2.png
  58. 二進制
      awesome/lain/icons/cal/white/20.png
  59. 二進制
      awesome/lain/icons/cal/white/21.png
  60. 二進制
      awesome/lain/icons/cal/white/22.png
  61. 二進制
      awesome/lain/icons/cal/white/23.png
  62. 二進制
      awesome/lain/icons/cal/white/24.png
  63. 二進制
      awesome/lain/icons/cal/white/25.png
  64. 二進制
      awesome/lain/icons/cal/white/26.png
  65. 二進制
      awesome/lain/icons/cal/white/27.png
  66. 二進制
      awesome/lain/icons/cal/white/28.png
  67. 二進制
      awesome/lain/icons/cal/white/29.png
  68. 二進制
      awesome/lain/icons/cal/white/3.png
  69. 二進制
      awesome/lain/icons/cal/white/30.png
  70. 二進制
      awesome/lain/icons/cal/white/31.png
  71. 二進制
      awesome/lain/icons/cal/white/4.png
  72. 二進制
      awesome/lain/icons/cal/white/5.png
  73. 二進制
      awesome/lain/icons/cal/white/6.png
  74. 二進制
      awesome/lain/icons/cal/white/7.png
  75. 二進制
      awesome/lain/icons/cal/white/8.png
  76. 二進制
      awesome/lain/icons/cal/white/9.png
  77. 二進制
      awesome/lain/icons/layout/default/cascade.png
  78. 二進制
      awesome/lain/icons/layout/default/cascadetile.png
  79. 二進制
      awesome/lain/icons/layout/default/cascadetilew.png
  80. 二進制
      awesome/lain/icons/layout/default/cascadew.png
  81. 二進制
      awesome/lain/icons/layout/default/centerfair.png
  82. 二進制
      awesome/lain/icons/layout/default/centerfairw.png
  83. 二進制
      awesome/lain/icons/layout/default/centerwork.png
  84. 二進制
      awesome/lain/icons/layout/default/centerworkh.png
  85. 二進制
      awesome/lain/icons/layout/default/centerworkhw.png
  86. 二進制
      awesome/lain/icons/layout/default/centerworkw.png
  87. 二進制
      awesome/lain/icons/layout/default/termfair.png
  88. 二進制
      awesome/lain/icons/layout/default/termfairw.png
  89. 二進制
      awesome/lain/icons/layout/zenburn/cascade.png
  90. 二進制
      awesome/lain/icons/layout/zenburn/cascadetile.png
  91. 二進制
      awesome/lain/icons/layout/zenburn/centerfair.png
  92. 二進制
      awesome/lain/icons/layout/zenburn/centerwork.png
  93. 二進制
      awesome/lain/icons/layout/zenburn/centerworkh.png
  94. 二進制
      awesome/lain/icons/layout/zenburn/termfair.png
  95. 二進制
      awesome/lain/icons/mail.png
  96. 二進制
      awesome/lain/icons/no_net.png
  97. 二進制
      awesome/lain/icons/openweathermap/01d.png
  98. 二進制
      awesome/lain/icons/openweathermap/01n.png
  99. 二進制
      awesome/lain/icons/openweathermap/02d.png
  100. 二進制
      awesome/lain/icons/openweathermap/02n.png

+ 55
- 0
awesome/ISSUE_TEMPLATE.md 查看文件

@@ -0,0 +1,55 @@
# Please, read me!

So that I can help you quickly and without having to redirect you here.

# If you have a question

Take the following steps:

1. Use a web search engine
2. Search in [Awesome doc](https://awesomewm.org/doc)
3. Ask the [community](https://awesomewm.org/community)

and, if you still don't have an answer, you can ask here.

**Please be warned:** if your question is unrelated to this repository, a reply is only an act of kindness.

# If you have an issue <a name="issuesec"/>

First do

1. search the [issues section](https://github.com/lcpz/awesome-copycats/issues) and
2. search [lain issues section](https://github.com/lcpz/lain/issues) and
3. search [lain wiki](https://github.com/lcpz/lain/wiki) and
4. try with default Awesome configuration, usually located in `/etc/xdg/awesome/rc.lua` or `/usr/local/etc/xdg/awesome/rc.lua`.

If you can't find a solution and your issue doesn't happen with default configuration, then go ahead and provide:

* output of `awesome -v` and `lua -v`
* expected behavior and actual behavior
* steps to reproduce the problem
* X error log (if needed)

# If Awesome fails to start

Then something went wrong during its initialisation. You have to provide X error
log. There are two ways:

1. Restart X like this:
```shell
startx -- -keeptty -nolisten tcp > $HOME/.xorg.log 2>&1
```
the error log will be output into `$HOME/.xorg.log`.

2. Use [Xephyr](https://wikipedia.org/wiki/Xephyr):
```shell
# set screen size as you like
Xephyr :1 -screen 1280x800 2> stdout.txt & DISPLAY=:1 awesome
```
the error log will be output into the file `stdout.txt`.

Before reporting, read the log and see if you can solve it yourself. If you can't, then follow the [previous section](#issuesec).

# If you have a new feature or theme request

Write a detailed description of the desired design, preferably with screenshots or mockups.

+ 182
- 0
awesome/README.rst 查看文件

@@ -0,0 +1,182 @@
Awesome WM Copycats
===================

-------------------------
Themes for Awesome WM 4.x
-------------------------

:Author: Luca CPZ
:Version: git
:License: BY-NC-SA_
:Source: https://github.com/lcpz/awesome-copycats

Description
===========

A set of themes for the Awesome_ window manager, version 4.x.

See branches_ for previous versions.

Purpose
=======

The main purpose of this repository is to spread ready to use configurations, which can also serve as a cookbook for customisation.

A secondary aim is to add new themes only when they constitute different UI/UX designs.

Features
========

- Modularity
- Autohide widgets
- Autostart windowless processes
- Fast MPD and volume shortcuts (first time this trick has been used in Awesome)
- Shortcuts for copying to the clipboard, toggle wiboxes, widgets popups, screenshots capture, moving and magnifying clients
- Quake drop-down terminal
- Calendar with current day highlighted and months switch with a click/scroll
- Notifications for new mails, current song, volume level, hdd critical state, low battery
- OpenWeatherMap integration
- Net carrier status notifier
- Symbolic tag names
- DWM-like textual layoutbox
- Cairo wibar
- Custom layouts
- No borders when there's only one visible client
- Freedesktop.org compliant menu and desktop icons
- Vi-like client focus
- Non-empty tag browsing
- On-the-fly useless gaps resize
- Dynamic tagging

Gallery
=======

**Multicolor**, inspired by lucamanni_

.. image:: http://dotshare.it/public/images/uploads/650.png

**Powerarrow**, porting of romockee_'s

.. image:: http://dotshare.it/public/images/uploads/1453.png

**Powerarrow Dark**

.. image:: http://dotshare.it/public/images/uploads/649.jpg

**Steamburn**, porting of ok100_'s dwm

.. image:: http://dotshare.it/public/images/uploads/648.png

**Blackburn**

.. image:: http://dotshare.it/public/images/uploads/553.png

**Dremora**

.. image:: http://dotshare.it/public/images/uploads/652.png

**Rainbow**

.. image:: http://dotshare.it/public/images/uploads/606.png

**Holo**, requested by amouly_

.. image:: http://dotshare.it/public/images/uploads/651.jpg

**Copland**, inspired by foozer_

.. image:: http://dotshare.it/public/images/uploads/655.png

**Vertex**, requested by swordfischer_

.. image:: http://dotshare.it/public/images/uploads/1432.jpg

Installation
============

.. code-block:: shell

git clone --recurse-submodules --remote-submodules --depth 1 -j 2 https://github.com/lcpz/awesome-copycats.git
mv -bv awesome-copycats/{*,.[^.]*} ~/.config/awesome; rm -rf awesome-copycats

In case you do not want the Git files, use the following as the second command:

.. code-block:: shell

mv -bv awesome-copycats/* ~/.config/awesome; rm -rf awesome-copycats

Usage
=====

The modular structure allows to

* set variables
* define startup processes
* change keybindings and layouts
* set client properties

in ``rc.lua``, and

* configure widgets
* define wiboxes and screen settings

in ``theme.lua``, so that you just need to change ``chosen_theme`` variable in ``rc.lua`` to preserve your preferences *and* switch the theme, instead of having file redundancy.

Just do the following:

.. code-block:: shell

$ cd ~/.config/awesome
$ cp rc.lua.template rc.lua

Then, set the variable ``chosen_theme`` in ``rc.lua`` to your preferred theme, do your settings, and restart Awesome (``Mod4 + ctrl + r``).

To customize a theme, head over to ``themes/$chosen_theme/theme.lua``.

Otherwise, if you want to be synced with upstream, modify the theme path in ``rc.lua`` like this:

.. code-block:: diff

-beautiful.init(string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), chosen_theme))
+beautiful.init(string.format("%s/.config/awesome/themes/%s/theme-personal.lua", os.getenv("HOME"), chosen_theme))

then, copy ``theme.lua`` to ``theme-personal.lua`` and do your customizations there.

This way, you can safely ``git pull`` anytime.

Notes
=====

Complements are provided by lain_ and freedesktop_. **Be sure** to satisfy their dependencies_. In particular, mail_ and weather_ widgets have **mandatory** arguments.

The fonts used in the screenshots are: Terminus_ (Multicolor, Powerarrow, Powerarrow Dark), Roboto_ (Holo, Vertex) and Tamzen_ (other ones).

As taglist font, Blackburn and Dremora use Icons_, Vertex uses FontAwesome_: be sure to have bitmaps enabled if running under Debian or Ubuntu_.

Every theme has a colorscheme_.

Additional default software used: ::

amixer dmenu librewolf mpc mpd scrot unclutter xbacklight xsel slock

.. _BY-NC-SA: http://creativecommons.org/licenses/by-nc-sa/4.0
.. _Awesome: http://github.com/awesomeWM/awesome
.. _branches: https://github.com/lcpz/awesome-copycats/branches
.. _lucamanni: https://github.com/lucamanni/awesome
.. _romockee: https://github.com/romockee/powerarrow
.. _ok100: http://ok100.deviantart.com/art/DWM-January-2013-348656846
.. _amouly: https://bbs.archlinux.org/viewtopic.php?pid=1307158#p1307158
.. _swordfischer: https://github.com/lcpz/awesome-copycats/issues/53
.. _foozer: http://dotshare.it/dots/499
.. _lain: https://github.com/lcpz/lain
.. _freedesktop: https://github.com/lcpz/awesome-freedesktop
.. _Terminus: http://terminus-font.sourceforge.net
.. _Roboto: https://fonts.google.com/specimen/Roboto
.. _Tamzen: https://github.com/sunaku/tamzen-font
.. _Icons: https://github.com/lcpz/dots/tree/master/.fonts
.. _FontAwesome: https://github.com/FortAwesome/Font-Awesome
.. _Ubuntu: https://wiki.ubuntu.com/Fonts#Enabling_Bitmapped_Fonts
.. _colorscheme: https://github.com/lcpz/dots/tree/master/.colors
.. _dependencies: https://github.com/lcpz/lain/wiki#dependencies
.. _mail: https://github.com/lcpz/lain/wiki/mail
.. _weather: https://github.com/lcpz/lain/wiki/weather

+ 339
- 0
awesome/freedesktop/LICENSE 查看文件

@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.

GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

{description}
Copyright (C) {year} {fullname}

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.

{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

+ 52
- 0
awesome/freedesktop/README.rst 查看文件

@@ -0,0 +1,52 @@
Awesome-Freedesktop
===================

-------------------------------------------------------------------
Freedesktop.org menu and desktop icons support for Awesome WM 4.x
-------------------------------------------------------------------

:Original author: Antonio Terceiro
:Maintainer: Luca CPZ
:Version: git
:License: GNU-GPL2_
:Source: https://github.com/lcpz/awesome-freedesktop

Description
-----------

This is a port of awesome-freedesktop_ to Awesome_ 4.x.

See branches_ for previous versions.

Since the introduction of Menubar_ as core library for providing Freedesktop.org menu functionalities in Awesome,
we can now avoid all the dirty work by just exploiting ``menubar.utils`` functions.

At the initial status of this port, the menu is pretty much complete, while the desktop icons are very basic,
so the long term objective will be to complete functionalities on this part too.

More specifically, the todo list is:

- A better way to handle desktop icons path
- Ability to drag and line up icons
- Event-based signals, in particular:
- Updating trash icon according to its status
- Dynamic update (no need to restart Awesome to see changes on desktop)

Screenshot
----------

.. image:: screenshot.png
:align: center
:alt: Showcase of Freedesktop support in Awesome, using Adwaita icons

Installation and usage
----------------------

Read the wiki_.

.. _GNU-GPL2: http://www.gnu.org/licenses/gpl-2.0.html
.. _awesome-freedesktop: https://github.com/terceiro/awesome-freedesktop
.. _Awesome: https://github.com/awesomeWM/awesome
.. _branches: https://github.com/lcpz/awesome-freedesktop/branches
.. _Menubar: https://github.com/awesomeWM/awesome/tree/master/lib/menubar
.. _wiki: https://github.com/lcpz/awesome-freedesktop/wiki

+ 20
- 0
awesome/freedesktop/awesome-freedesktop-scm-1.rockspec 查看文件

@@ -0,0 +1,20 @@
package = "awesome-freedesktop"
version = "scm-1"
source = {
url = "git://github.com/lcpz/awesome-freedesktop",
tag = "master",
}
description = {
summary = "Freedesktop.org menu and desktop icons support for Awesome WM",
homepage = "https://github.com/lcpz/awesome-freedesktop",
license = "GPL v2"
}
dependencies = {
"lua >= 5.3",
"awesome >= 4.0"
}
supported_platforms = { "linux" }
build = {
type = "builtin",
modules = { freedesktop = "init.lua" }
}

+ 259
- 0
awesome/freedesktop/desktop.lua 查看文件

@@ -0,0 +1,259 @@
--[[

Awesome-Freedesktop
Freedesktop.org compliant desktop entries and menu

Desktop section

Licensed under GNU General Public License v2
* (c) 2016, Luke Bonham
* (c) 2009-2015, Antonio Terceiro

--]]

local awful = require("awful")
local theme = require("beautiful")
local utils = require("menubar.utils")
local wibox = require("wibox")

local io = io
local ipairs = ipairs
local mouse = mouse
local os = os
local string = string
local screen = screen
local table = table

-- Desktop icons
-- freedesktop.desktop
local desktop = {
-- Default desktop basic icons
baseicons = {
[1] = {
label = "This PC",
icon = "computer",
onclick = "computer://"
},
[2] = {
label = "Home",
icon = "user-home",
onclick = os.getenv("HOME")
},
[3] = {
label = "Trash",
icon = "user-trash",
onclick = "trash://"
}
},
-- Default parameters
iconsize = { width = 48, height = 48 },
labelsize = { width = 140, height = 20 },
margin = { x = 20, y = 20 },
}

-- MIME types list
local mime_types = {}

-- Icons positioning
desktop.current_pos = {}

-- @return iterator on input pipe
local function pipelines(...)
local f = assert(io.popen(...))
return function ()
local data = f:read()
if data == nil then f:close() end
return data
end
end

-- Adds an icon to desktop
-- @param args settings from desktop.add_icons
-- @param label icon string label
-- @param icon icon string file path
-- @param onclick function to execute on click
function desktop.add_single_icon(args, label, icon, onclick)
local s = args.screen
local dcp = desktop.current_pos

-- define icon dimensions and position
if not dcp[s] then
dcp[s] = { x = (screen[s].geometry.x + args.iconsize.width + args.margin.x), y = screen[s].geometry.y + 20 + args.margin.y }
end

local tot_height = (icon and args.iconsize.height or 0) + (label and args.labelsize.height or 0)
if tot_height == 0 then return end

if dcp[s].y + tot_height > screen[s].geometry.y + screen[s].geometry.height - 20 - args.margin.y then
dcp[s].x = dcp[s].x + args.labelsize.width + args.iconsize.width + args.margin.x
dcp[s].y = 20 + args.margin.y
end

local common = { screen = s, bg = "#00000000", visible = true, type = "desktop" }

-- create icon container
if icon then
common.width = args.iconsize.width
common.height = args.iconsize.height
common.x = dcp[s].x
common.y = dcp[s].y

icon = wibox.widget {
image = icon,
resize = false,
widget = wibox.widget.imagebox
}

icon:buttons(awful.button({ }, 1, nil, onclick))

icon_container = wibox(common)
icon_container:set_widget(icon)

dcp[s].y = dcp[s].y + args.iconsize.height + 5
end

-- create label container
if label then
common.width = args.labelsize.width
common.height = args.labelsize.height
common.x = dcp[s].x - (args.labelsize.width/2) + args.iconsize.width/2
common.y = dcp[s].y

caption = wibox.widget {
text = label,
align = "center",
forced_width = common.width,
forced_height = common.height,
ellipsize = "middle",
widget = wibox.widget.textbox
}

caption:buttons(awful.button({ }, 1, onclick))
caption_container = wibox(common)
caption_container:set_widget(caption)
end

dcp[s].y = dcp[s].y + args.labelsize.height + args.margin.y

desktop.current_pos = dcp

return dcp
end

-- Adds base icons (This PC, Trash, etc) to desktop
-- @param args settings from desktop.add_icons
function desktop.add_base_icons(args)
for _,base in ipairs(args.baseicons) do
desktop.add_single_icon(args, base.label, utils.lookup_icon(base.icon), function()
awful.spawn(string.format("%s '%s'", args.open_with, base.onclick))
end)
end
end

-- Looks up a suitable icon for filename
-- @param filename string file name
-- @return icon file path (string)
function desktop.lookup_file_icon(filename)
-- load system MIME types
if #mime_types == 0 then
for line in io.lines("/etc/mime.types") do
if not line:find("^#") then
local parsed = {}
for w in line:gmatch("[^%s]+") do
table.insert(parsed, w)
end
if #parsed > 1 then
for i = 2, #parsed do
mime_types[parsed[i]] = parsed[1]:gsub("/", "-")
end
end
end
end
end

-- try to search a possible icon among standards
local extension = filename:match("%a+$")
local mime = mime_types[extension] or ""
local mime_family = mime:match("^%a+") or ""

local possible_filenames = {
mime, "gnome-mime-" .. mime,
mime_family, "gnome-mime-" .. mime_family,
extension
}

for i, filename in ipairs(possible_filenames) do
local icon = utils.lookup_icon(filename)
if icon then return icon end
end

-- if we don"t find ad icon, then pretend is a plain text file
return utils.lookup_icon("text-x-generic")
end

-- Parse subdirectories and files list from input directory
-- @input dir directory to parse (string)
-- @return files table with found entries
function desktop.parse_dirs_and_files(dir)
local files = {}
local paths = pipelines('find '..dir..' -maxdepth 1 -type d |sort|tail -n +1')
for path in paths do
if path:match("[^/]+$") then
local file = {}
file.filename = path:match("[^/]+$")
file.path = path
file.show = true
file.icon = utils.lookup_icon("folder")
table.insert(files, file)
end
end
local paths = pipelines('find '..dir..' -maxdepth 1 -type f')
for path in paths do
if not path:find("%.desktop$") then
local file = {}
file.filename = path:match("[^/]+$")
file.path = path
file.show = true
file.icon = desktop.lookup_file_icon(file.filename)
table.insert(files, file)
end
end
return files
end

-- Adds subdirectories and files icons from args.dir
-- @param args settings from desktop.add_icons
function desktop.add_dirs_and_files_icons(args)
for _, file in ipairs(desktop.parse_dirs_and_files(args.dir)) do
if file.show then
local label = args.showlabels and file.filename or nil
local onclick = function () awful.spawn(string.format("%s '%s'", args.open_with, file.path)) end
desktop.add_single_icon(args, label, file.icon, onclick)
end
end
end

-- Main function, adds base, directory and files icons
-- @param args user defined settings, with fallback on defaults
function desktop.add_icons(args)
args = args or {}
args.screen = args.screen or mouse.screen
args.dir = args.dir or os.getenv("HOME") .. "/Desktop"
args.showlabels = args.showlabel or true
args.open_with = args.open_with or "xdg_open"
args.baseicons = args.baseicons or desktop.baseicons
args.iconsize = args.iconsize or desktop.iconsize
args.labelsize = args.labelsize or desktop.labelsize
args.margin = args.margin or desktop.margin

-- trying to fallback on Adwaita if theme.icon_theme is not defined
-- if Adwaita is missing too, no icons will be shown
if not theme.icon_theme then
theme.icon_theme = args.icon_theme or "Adwaita"
end

desktop.add_base_icons(args)
desktop.add_dirs_and_files_icons(args)
end

return desktop

+ 15
- 0
awesome/freedesktop/init.lua 查看文件

@@ -0,0 +1,15 @@
--[[

Awesome-Freedesktop
Freedesktop.org compliant desktop entries and menu

Licensed under GNU General Public License v2
* (c) 2016, Luke Bonham
* (c) 2009-2015, Antonio Terceiro

--]]

return {
desktop = require("freedesktop.desktop"),
menu = require("freedesktop.menu")
}

+ 121
- 0
awesome/freedesktop/menu.lua 查看文件

@@ -0,0 +1,121 @@

--[[

Awesome-Freedesktop
Freedesktop.org compliant desktop entries and menu

Menu section

Licensed under GNU General Public License v2
* (c) 2016, Luke Bonham
* (c) 2014, Harvey Mittens

--]]

local Gio = require("lgi").Gio
local awful_menu = require("awful.menu")
local menu_gen = require("menubar.menu_gen")
local menu_utils = require("menubar.utils")

local io, pairs, string, table, os = io, pairs, string, table, os

-- Expecting a wm_name of awesome omits too many applications and tools
menu_utils.wm_name = ""

-- Menu
-- freedesktop.menu
local menu = {}

-- Check if a path is a directory.
-- @tparam string path The directory path
-- @treturn boolean True if path exists and is a directory
function menu.is_dir(path)
return Gio.File.new_for_path(path):query_file_type({}) == "DIRECTORY"
end

-- Remove non existent paths in order to avoid issues
local existent_paths = {}
for k,v in pairs(menu_gen.all_menu_dirs) do
if menu.is_dir(v) then
table.insert(existent_paths, v)
end
end
menu_gen.all_menu_dirs = existent_paths

-- Determines whether an table includes a certain element
-- @param tab a given table
-- @param val the element to search for
-- @return true if the given string is found within the search table; otherwise, false if not
function menu.has_value (tab, val)
for index, value in pairs(tab) do
if val:find(value) then
return true
end
end
return false
end

-- Use MenuBar parsing utils to build a menu for Awesome
-- @return awful.menu
function menu.build(args)
local args = args or {}
local before = args.before or {}
local after = args.after or {}
local skip_items = args.skip_items or {}
local sub_menu = args.sub_menu or false

local result = {}
local _menu = awful_menu({ items = before })

menu_gen.generate(function(entries)
-- Add category icons
for k, v in pairs(menu_gen.all_categories) do
table.insert(result, { k, {}, v.icon })
end

-- Get items table
for k, v in pairs(entries) do
for _, cat in pairs(result) do
if cat[1] == v.category then
if not menu.has_value(skip_items, v.name) then
table.insert(cat[2], { v.name, v.cmdline, v.icon })
end
break
end
end
end

-- Cleanup things a bit
for i = #result, 1, -1 do
local v = result[i]
if #v[2] == 0 then
-- Remove unused categories
table.remove(result, i)
else
--Sort entries alphabetically (by name)
table.sort(v[2], function (a, b) return string.byte(a[1]) < string.byte(b[1]) end)
-- Replace category name with nice name
v[1] = menu_gen.all_categories[v[1]].name
end
end

-- Sort categories alphabetically also
table.sort(result, function(a, b) return string.byte(a[1]) < string.byte(b[1]) end)

-- Add menu item to hold the generated menu
if sub_menu then
result = {{sub_menu, result}}
end

-- Add items to menu
for _, v in pairs(result) do _menu:add(v) end
for _, v in pairs(after) do _menu:add(v) end
end)

-- Hold the menu in the module
menu.menu = _menu

return _menu
end

return menu

二進制
awesome/freedesktop/screenshot.png 查看文件

Before After
Width: 475  |  Height: 475  |  Size: 24 KiB

+ 3
- 0
awesome/lain/.gitmodules 查看文件

@@ -0,0 +1,3 @@
[submodule "lain.wiki"]
path = wiki
url = https://github.com/lcpz/lain.wiki.git

+ 33
- 0
awesome/lain/ISSUE_TEMPLATE.md 查看文件

@@ -0,0 +1,33 @@
# Please, read me!

So that I can help you quickly and without having to redirect you here.

# If you have an issue

**Please read the [wiki](https://github.com/lcpz/lain/wiki) and search the [Issues section](https://github.com/lcpz/lain/issues) first.**

If you can't find a solution there, then go ahead and provide:

* output of `awesome -v` and `lua -v`
* expected behavior and actual behavior
* steps to reproduce the problem
* X error log

# How to provide X error log

There are two ways:

* (Physically) Restart X like this:
```shell
startx -- -keeptty -nolisten tcp > $HOME/.xorg.log 2>&1
```
the error log will be output into `$HOME/.xorg.log`.

* (Virtually) Use [Xephyr](https://wikipedia.org/wiki/Xephyr):
```shell
# set screen size as you like
Xephyr :1 -screen 1280x800 2> stdout.txt & DISPLAY=:1 awesome
```
the error log will be output in the file `stdout.txt`.

Before reporting, read the log and see if you can solve it yourself.

+ 339
- 0
awesome/lain/LICENSE 查看文件

@@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.

We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and
modification follow.

GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.

c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

{description}
Copyright (C) {year} {fullname}

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:

Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.

{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

+ 38
- 0
awesome/lain/README.rst 查看文件

@@ -0,0 +1,38 @@
Lain
====

-------------------------------------------------
Layouts, widgets and utilities for Awesome WM 4.x
-------------------------------------------------

:Author: Luca CPZ
:Version: git
:License: GNU-GPL2_
:Source: https://github.com/lcpz/lain

Description
-----------

Successor of awesome-vain_, this module provides alternative layouts, asynchronous widgets and utility functions for Awesome_.

Contributions
-------------

Constructive criticism and suggestions are welcome.

If you want to create a pull request, make sure that:

- Your code fits with the general style of the module. In particular, you should use the same indentation pattern that the code uses, and also avoid adding space at the ends of lines.

- Your code its easy to understand, maintainable, and modularized. You should also avoid code duplication wherever possible by adding functions to or using lain.helpers_. If something is unclear, or you can not write it in such a way that it will be clear, explain it with a comment.

- You test your changes before submitting to make sure that your code works and does not break other parts of the module.

- You update ``wiki`` submodule with a thorough section, if necessary.

Contributed widgets have to be put in ``widget/contrib``.

.. _GNU-GPL2: http://www.gnu.org/licenses/gpl-2.0.html
.. _awesome-vain: https://github.com/vain/awesome-vain
.. _Awesome: https://github.com/awesomeWM/awesome
.. _lain.helpers: https://github.com/lcpz/lain/blob/master/helpers.lua

+ 203
- 0
awesome/lain/helpers.lua 查看文件

@@ -0,0 +1,203 @@
--[[

Licensed under GNU General Public License v2
* (c) 2013, Luca CPZ

--]]

local spawn = require("awful.spawn")
local timer = require("gears.timer")
local debug = require("debug")
local io = { lines = io.lines,
open = io.open }
local pairs = pairs
local rawget = rawget
local table = { sort = table.sort, unpack = table.unpack }
local unpack = unpack or table.unpack -- lua 5.1 retro-compatibility

-- Lain helper functions for internal use
-- lain.helpers
local helpers = {}

helpers.lain_dir = debug.getinfo(1, 'S').source:match[[^@(.*/).*$]]
helpers.icons_dir = helpers.lain_dir .. 'icons/'
helpers.scripts_dir = helpers.lain_dir .. 'scripts/'

-- {{{ Modules loader

function helpers.wrequire(t, k)
return rawget(t, k) or require(t._NAME .. '.' .. k)
end

-- }}}

-- {{{ File operations

-- check if the file exists and is readable
function helpers.file_exists(path)
local file = io.open(path, "rb")
if file then file:close() end
return file ~= nil
end

-- get a table with all lines from a file
function helpers.lines_from(path)
local lines = {}
for line in io.lines(path) do
lines[#lines + 1] = line
end
return lines
end

-- get a table with all lines from a file matching regexp
function helpers.lines_match(regexp, path)
local lines = {}
for line in io.lines(path) do
if string.match(line, regexp) then
lines[#lines + 1] = line
end
end
return lines
end

-- get first line of a file
function helpers.first_line(path)
local file, first = io.open(path, "rb"), nil
if file then
first = file:read("*l")
file:close()
end
return first
end

-- get first non empty line from a file
function helpers.first_nonempty_line(path)
for line in io.lines(path) do
if #line then return line end
end
return nil
end

-- }}}

-- {{{ Timer maker

helpers.timer_table = {}

function helpers.newtimer(name, timeout, fun, nostart, stoppable)
if not name or #name == 0 then return end
name = (stoppable and name) or timeout
if not helpers.timer_table[name] then
helpers.timer_table[name] = timer({ timeout = timeout })
helpers.timer_table[name]:start()
end
helpers.timer_table[name]:connect_signal("timeout", fun)
if not nostart then
helpers.timer_table[name]:emit_signal("timeout")
end
return stoppable and helpers.timer_table[name]
end

-- }}}

-- {{{ Pipe operations

-- run a command and execute a function on its output (asynchronous pipe)
-- @param cmd the input command
-- @param callback function to execute on cmd output
-- @return cmd PID
function helpers.async(cmd, callback)
return spawn.easy_async(cmd,
function (stdout, _, _, exit_code)
callback(stdout, exit_code)
end)
end

-- like above, but call spawn.easy_async with a shell
function helpers.async_with_shell(cmd, callback)
return spawn.easy_async_with_shell(cmd,
function (stdout, _, _, exit_code)
callback(stdout, exit_code)
end)
end

-- run a command and execute a function on its output line by line
function helpers.line_callback(cmd, callback)
return spawn.with_line_callback(cmd, {
stdout = function (line)
callback(line)
end,
})
end

-- }}}

-- {{{ A map utility

helpers.map_table = {}

function helpers.set_map(element, value)
helpers.map_table[element] = value
end

function helpers.get_map(element)
return helpers.map_table[element]
end

-- }}}

-- {{{ Misc

-- check if an element exist on a table
function helpers.element_in_table(element, tbl)
for _, i in pairs(tbl) do
if i == element then
return true
end
end
return false
end

-- iterate over table of records sorted by keys
function helpers.spairs(t)
-- collect the keys
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end

table.sort(keys)

-- return the iterator function
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end
end

-- create the partition of singletons of a given set
-- example: the trivial partition set of {a, b, c}, is {{a}, {b}, {c}}
function helpers.trivial_partition_set(set)
local ss = {}
for _,e in pairs(set) do
ss[#ss+1] = {e}
end
return ss
end

-- create the powerset of a given set
function helpers.powerset(s)
if not s then return {} end
local t = {{}}
for i = 1, #s do
for j = 1, #t do
t[#t+1] = {s[i],unpack(t[j])}
end
end
return t
end

-- }}}

return helpers

二進制
awesome/lain/icons/cal/black/1.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 836 B

二進制
awesome/lain/icons/cal/black/10.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.3 KiB

二進制
awesome/lain/icons/cal/black/11.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.7 KiB

二進制
awesome/lain/icons/cal/black/12.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.2 KiB

二進制
awesome/lain/icons/cal/black/13.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.4 KiB

二進制
awesome/lain/icons/cal/black/14.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.3 KiB

二進制
awesome/lain/icons/cal/black/15.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.8 KiB

二進制
awesome/lain/icons/cal/black/16.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/black/17.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.5 KiB

二進制
awesome/lain/icons/cal/black/18.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.1 KiB

二進制
awesome/lain/icons/cal/black/19.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.9 KiB

二進制
awesome/lain/icons/cal/black/2.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.4 KiB

二進制
awesome/lain/icons/cal/black/20.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.5 KiB

二進制
awesome/lain/icons/cal/black/21.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/black/22.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.8 KiB

二進制
awesome/lain/icons/cal/black/23.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.1 KiB

二進制
awesome/lain/icons/cal/black/24.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/black/25.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/black/26.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.2 KiB

二進制
awesome/lain/icons/cal/black/27.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.9 KiB

二進制
awesome/lain/icons/cal/black/28.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.3 KiB

二進制
awesome/lain/icons/cal/black/29.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.2 KiB

二進制
awesome/lain/icons/cal/black/3.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.6 KiB

二進制
awesome/lain/icons/cal/black/30.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.6 KiB

二進制
awesome/lain/icons/cal/black/31.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.1 KiB

二進制
awesome/lain/icons/cal/black/4.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.0 KiB

二進制
awesome/lain/icons/cal/black/5.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.4 KiB

二進制
awesome/lain/icons/cal/black/6.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.5 KiB

二進制
awesome/lain/icons/cal/black/7.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.2 KiB

二進制
awesome/lain/icons/cal/black/8.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.6 KiB

二進制
awesome/lain/icons/cal/black/9.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.6 KiB

二進制
awesome/lain/icons/cal/white/1.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 714 B

二進制
awesome/lain/icons/cal/white/10.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.3 KiB

二進制
awesome/lain/icons/cal/white/11.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.6 KiB

二進制
awesome/lain/icons/cal/white/12.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.3 KiB

二進制
awesome/lain/icons/cal/white/13.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/white/14.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.3 KiB

二進制
awesome/lain/icons/cal/white/15.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.7 KiB

二進制
awesome/lain/icons/cal/white/16.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/white/17.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.4 KiB

二進制
awesome/lain/icons/cal/white/18.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.1 KiB

二進制
awesome/lain/icons/cal/white/19.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/white/2.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.4 KiB

二進制
awesome/lain/icons/cal/white/20.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.6 KiB

二進制
awesome/lain/icons/cal/white/21.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/white/22.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.8 KiB

二進制
awesome/lain/icons/cal/white/23.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.2 KiB

二進制
awesome/lain/icons/cal/white/24.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.0 KiB

二進制
awesome/lain/icons/cal/white/25.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.1 KiB

二進制
awesome/lain/icons/cal/white/26.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.3 KiB

二進制
awesome/lain/icons/cal/white/27.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.9 KiB

二進制
awesome/lain/icons/cal/white/28.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.4 KiB

二進制
awesome/lain/icons/cal/white/29.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.3 KiB

二進制
awesome/lain/icons/cal/white/3.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.5 KiB

二進制
awesome/lain/icons/cal/white/30.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.7 KiB

二進制
awesome/lain/icons/cal/white/31.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 2.1 KiB

二進制
awesome/lain/icons/cal/white/4.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1000 B

二進制
awesome/lain/icons/cal/white/5.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.4 KiB

二進制
awesome/lain/icons/cal/white/6.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.7 KiB

二進制
awesome/lain/icons/cal/white/7.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.1 KiB

二進制
awesome/lain/icons/cal/white/8.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.8 KiB

二進制
awesome/lain/icons/cal/white/9.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 1.6 KiB

二進制
awesome/lain/icons/layout/default/cascade.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 233 B

二進制
awesome/lain/icons/layout/default/cascadetile.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 230 B

二進制
awesome/lain/icons/layout/default/cascadetilew.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 230 B

二進制
awesome/lain/icons/layout/default/cascadew.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 233 B

二進制
awesome/lain/icons/layout/default/centerfair.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 169 B

二進制
awesome/lain/icons/layout/default/centerfairw.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 169 B

二進制
awesome/lain/icons/layout/default/centerwork.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 204 B

二進制
awesome/lain/icons/layout/default/centerworkh.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 199 B

二進制
awesome/lain/icons/layout/default/centerworkhw.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 200 B

二進制
awesome/lain/icons/layout/default/centerworkw.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 195 B

二進制
awesome/lain/icons/layout/default/termfair.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 191 B

二進制
awesome/lain/icons/layout/default/termfairw.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 191 B

二進制
awesome/lain/icons/layout/zenburn/cascade.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 225 B

二進制
awesome/lain/icons/layout/zenburn/cascadetile.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 227 B

二進制
awesome/lain/icons/layout/zenburn/centerfair.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 361 B

二進制
awesome/lain/icons/layout/zenburn/centerwork.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 185 B

二進制
awesome/lain/icons/layout/zenburn/centerworkh.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 204 B

二進制
awesome/lain/icons/layout/zenburn/termfair.png 查看文件

Before After
Width: 64  |  Height: 64  |  Size: 237 B

二進制
awesome/lain/icons/mail.png 查看文件

Before After
Width: 32  |  Height: 32  |  Size: 526 B

二進制
awesome/lain/icons/no_net.png 查看文件

Before After
Width: 64  |  Height: 47  |  Size: 1.4 KiB

二進制
awesome/lain/icons/openweathermap/01d.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 3.9 KiB

二進制
awesome/lain/icons/openweathermap/01n.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 3.0 KiB

二進制
awesome/lain/icons/openweathermap/02d.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 4.8 KiB

二進制
awesome/lain/icons/openweathermap/02n.png 查看文件

Before After
Width: 128  |  Height: 128  |  Size: 4.4 KiB

部分文件因文件數量過多而無法顯示

Loading…
取消
儲存