Check-in [38c4e0baf0]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Updated milestones to reflect current idea of how to proceed.
Timelines: family | ancestors | descendants | both | dev1.x
Files: files | file ages | folders
SHA1:38c4e0baf08eee4c79bb8111ffec6e9d8d297d5e
User & Date: manuv 2013-08-03 01:51:26
Context
2013-08-04
08:43
Updated design notes. check-in: 3f11394238 user: manuv tags: dev1.x
2013-08-03
01:51
Updated milestones to reflect current idea of how to proceed. check-in: 38c4e0baf0 user: manuv tags: dev1.x
00:39
Added layouts section to main API page. check-in: 2c9b74f1ab user: manuv tags: dev1.x
Changes

Changes to wiki/design.wiki.

147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<h3>minxlib::window</h3>

This class encapsulates an X window. Note that whereas
<tt>minx.core.window</tt> is for top-level windows,
<tt>minxlib::window</tt> represents any kind of X window. The
<tt>minxlib::window</tt> class takes care of the details of specifying X
event masks. It also provides various window-related operations such as
showing, hiding, resizing, moving, focusing, etc. 

<h3>minxlib::event and minxlib::exception</h3>

These two classes provide an object-oriented interface to X events and
errors.  Different types of events are converted into instances of
subclasses of <tt>minxlib::event</tt>. Similarly, different kinds of
errors are converted into instances of classes derived from







|







147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<h3>minxlib::window</h3>

This class encapsulates an X window. Note that whereas
<tt>minx.core.window</tt> is for top-level windows,
<tt>minxlib::window</tt> represents any kind of X window. The
<tt>minxlib::window</tt> class takes care of the details of specifying X
event masks. It also provides various window-related operations such as
showing, hiding, resizing, moving, focusing, etc.

<h3>minxlib::event and minxlib::exception</h3>

These two classes provide an object-oriented interface to X events and
errors.  Different types of events are converted into instances of
subclasses of <tt>minxlib::event</tt>. Similarly, different kinds of
errors are converted into instances of classes derived from

Changes to wiki/faq.wiki.

297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
...
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
...
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
<hr>

<a name="how-launch-apps"></a>
<h3>How can I launch applications using custom key bindings?</h3>

The [/doc/rel1.x/api/classminx_1_1core_1_1wm_1_1wm.html|wm] class has a
<tt>spawn()</tt> function that you can use for this purpose. In fact,
there is a 
[/doc/rel1.x/wiki/hooks-list.wiki#launch_terminal|default key binding]
that calls <tt>wm.spawn()</tt> to launch a terminal window. In a similar
vein, you could define keys as shown below:

<verbatim>
    #!/usr/bin/env python

................................................................................
<verbatim>
   #!/usr/bin/env python

   import minx

   try:
      print('Minx version string: {}'.format(minx.version))
      print('Minx version: major = {}, minor = {}, patch = {}'.  
            format(minx.version.major, minx.version.minor, minx.version.patch))
   except AttributeError: # no version attribute in minx module
      pass # probably using development version of Minx
</verbatim>

Note that <tt>minx.version</tt> is not available in development versions
of Minx. Only officially released versions of Minx have a version number
................................................................................
<h3>Why are you using Doxygen to document the Minx API? Since Minx is
essentially a Python library, wouldn't it be better to use Sphinx, which
not only rhymes with Minx, but also seems to be a de facto standard now
for Python projects?</h3>

I did consider [http://sphinx-doc.org/|Sphinx]. In fact, originally, I
wanted to put the Minx API documentation on
[http://readthedocs.org/|ReadTheDocs].  However, I balked once I
realized that getting Sphinx to automatically generate the documentation
for [#what-is-minxlib|minxlib], the C++ part of Minx, would be
[http://michaeljones.github.com/breathe/|a hassle].

Setting up a bridge between [http://sphinx-doc.org/|Sphinx] and
[http://www.doxygen.org/|Doxygen] seems like too much work without
enough of a payoff especially because:

  *  Doxygen integrates well with [http://www.cmake.org/|CMake], which







|







 







|







 







|
|
|







297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
...
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
...
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
<hr>

<a name="how-launch-apps"></a>
<h3>How can I launch applications using custom key bindings?</h3>

The [/doc/rel1.x/api/classminx_1_1core_1_1wm_1_1wm.html|wm] class has a
<tt>spawn()</tt> function that you can use for this purpose. In fact,
there is a
[/doc/rel1.x/wiki/hooks-list.wiki#launch_terminal|default key binding]
that calls <tt>wm.spawn()</tt> to launch a terminal window. In a similar
vein, you could define keys as shown below:

<verbatim>
    #!/usr/bin/env python

................................................................................
<verbatim>
   #!/usr/bin/env python

   import minx

   try:
      print('Minx version string: {}'.format(minx.version))
      print('Minx version: major = {}, minor = {}, patch = {}'.
            format(minx.version.major, minx.version.minor, minx.version.patch))
   except AttributeError: # no version attribute in minx module
      pass # probably using development version of Minx
</verbatim>

Note that <tt>minx.version</tt> is not available in development versions
of Minx. Only officially released versions of Minx have a version number
................................................................................
<h3>Why are you using Doxygen to document the Minx API? Since Minx is
essentially a Python library, wouldn't it be better to use Sphinx, which
not only rhymes with Minx, but also seems to be a de facto standard now
for Python projects?</h3>

I did consider [http://sphinx-doc.org/|Sphinx]. In fact, originally, I
wanted to put the Minx API documentation on
[http://readthedocs.org/|ReadTheDocs]. However, I balked once I realized
that getting Sphinx to automatically generate the documentation for
[#what-is-minxlib|minxlib], the C++ part of Minx, would be
[http://michaeljones.github.com/breathe/|a hassle].

Setting up a bridge between [http://sphinx-doc.org/|Sphinx] and
[http://www.doxygen.org/|Doxygen] seems like too much work without
enough of a payoff especially because:

  *  Doxygen integrates well with [http://www.cmake.org/|CMake], which

Changes to wiki/milestones.wiki.

53
54
55
56
57
58
59
60

61
62
63
64



65











66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
     manage them.
  *  <b>Version 0.1.5</b>: Add support for ignoring windows based on their
     properties (class, name, etc.).
  *  <b>Version 0.1.6</b>: Allow users to customize key bindings.
  *  <b>Version 0.1.7</b>: Add function for killing windows.
  *  <b>Version 0.1.8</b>: Add function for launching new applications.

<h1>Remaining Milestones</h1>


  *  <b>Version 0.2.0</b>: The focused window should fill the entire screen.
  *  <b>Version 0.2.1</b>: Layout engine infrastructure plus the "fundamental"
     layout, viz., <tt>minx.layout.matrix</tt>.



  *  <b>Version 0.2.2</b>: Resizing tiled windows with the keyboard.











  *  <b>Version 0.3.0</b>: Bookmarks (aka workspaces) via custom user state.
  *  <b>Version 0.4.0</b>: Floating windows (with support for size hints).
  *  <b>Version 0.4.1</b>: <tt>gimp</tt> layout.
  *  <b>Version 0.5.0</b>: Mouse support, i.e., window moving and resizing;
     also, focus follows mouse.
  *  <b>Version 0.6.0</b>: Defaults (so out-of-box user experience with minimal
     config is sane).
  *  <b>Version 0.7.0</b>: Packaging for various systems (FreeBSD,
     Debian-based).
  *  <b>Version 0.8.0</b>: Documentation for users and hackers.
  *  <b>Version 0.9.0</b>: Session management (if feasible or to the extent
     feasible).
  *  <b>Version 1.0.0</b>: Various fixes/tweaks (e.g., equivalent of a --replace
     option, sending window manager commands over local socket, helper apps such
     as window switcher and resizer) and release into the wild as "ready for
     prime-time."







|
>

|
<
|
>
>
>

>
>
>
>
>
>
>
>
>
>
>
|
|
<
<
<
|

|
|
|
|





53
54
55
56
57
58
59
60
61
62
63

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81



82
83
84
85
86
87
88
89
90
91
92
     manage them.
  *  <b>Version 0.1.5</b>: Add support for ignoring windows based on their
     properties (class, name, etc.).
  *  <b>Version 0.1.6</b>: Allow users to customize key bindings.
  *  <b>Version 0.1.7</b>: Add function for killing windows.
  *  <b>Version 0.1.8</b>: Add function for launching new applications.

<a name="v02x"></a>
<h1>Version 0.2.x: Layouts and Related Functionality</h1>

  *  <b>Version 0.2.0</b>: The focused window should fill the entire

     screen, i.e., the full layout.
  *  <b>Version 0.2.1</b>: The manual layout, i.e., laying out windows by
     splitting horizontally or vertically (a la Emacs C-x 2 or C-x 3
     respectively).
  *  <b>Version 0.2.2</b>: Resizing tiled windows with the keyboard.
  *  <b>Version 0.2.3</b>: Laying out windows in rows and columns.
  *  <b>Version 0.2.4</b>: An implementation of XMonad's tall layout.
  *  <b>Version 0.2.5</b>: Laying out windows in a grid.
  *  <b>Version 0.2.6</b>: Support for moving windows between layouts.
  *  <b>Version 0.2.7</b>: Support for moving and resizing whole layouts.
  *  <b>Version 0.2.8</b>: Moving and resizing windows and layouts with
     the mouse.
  *  <b>Version 0.2.9</b>: A specialized layout for The GIMP.

<h1>Remaining Milestones</h1>

  *  <b>Version 0.3.0</b>: Snapshots (aka workspaces) via custom user state.
  *  <b>Version 0.4.0</b>: Focus policy infrastructure.



  *  <b>Version 0.5.0</b>: Defaults (so out-of-box user experience with minimal
     config is sane).
  *  <b>Version 0.6.0</b>: Packaging for various systems (FreeBSD,
     Debian-based, Arch).
  *  <b>Version 0.7.0</b>: Documentation for users and hackers.
  *  <b>Version 0.8.0</b>: Session management (if feasible or to the extent
     feasible).
  *  <b>Version 1.0.0</b>: Various fixes/tweaks (e.g., equivalent of a --replace
     option, sending window manager commands over local socket, helper apps such
     as window switcher and resizer) and release into the wild as "ready for
     prime-time."