summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md452
1 files changed, 452 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..cc3d2d79
--- /dev/null
+++ b/README.md
@@ -0,0 +1,452 @@
+MATE Marco is a fork of GNOME Metacity.
+
+COMPILING MARCO
+===
+
+You need GTK+ 3.14. For startup notification to work you need
+libstartup-notification at
+http://www.freedesktop.org/software/startup-notification/.
+
+REPORTING BUGS AND SUBMITTING PATCHES
+===
+
+Report new bugs on https://github.com/mate-desktop/marco.
+Please check for duplicates, *especially* if you are reporting a feature
+request.
+
+Please do *not* add "me too!" or "yes I really want this!" comments to
+feature requests on GitHub. Please read
+http://pobox.com/~hp/features.html prior to adding any kind of flame
+about missing features or misfeatures.
+
+Feel free to send patches too; Marco is relatively small and
+simple, so if you find a bug or want to add a feature it should be
+pretty easy. Send me mail, or put the patch in bugzilla.
+
+See the HACKING file for some notes on hacking Marco.
+
+SHRINKING MARCO
+===
+
+Not that marco is huge, but a substantial amount of code is in
+preferences handling, in static strings that aren't essential, and in
+the theme engine.
+
+You can strip about 70K from the marco binary by compiling with
+options such as:
+
+ ```
+ --disable-sm
+ --disable-verbose-mode
+ --disable-startup-notification
+ ```
+
+However the result is no good for desktop use, all prefs have to be
+hardcoded in the binary, for example. If you wanted to make a really
+small marco, here's some additional stuff you might consider
+implementing:
+
+ - add `--disable-themes`, which would replace theme.c and theme-parser.c
+ with a hardcoded implementation of the interface in theme.h,
+ should save about 80K. This should be fairly easy.
+
+ - add `--disable-gtk`, which would implement the interface in ui.h
+ without using GTK. This one is easier than you think because the
+ main part of the window manager doesn't use GTK directly, but is
+ still fairly hard to do. You would probably have to give up some
+ of the features, such as window menus, as menus are pretty complex
+ to implement well. So time may be better spent adding a GTK
+ configure script feature to build GTK with only a small core set of
+ functionality.
+
+MARCO FEATURES
+===
+
+ - Boring window manager for the adult in you. Many window managers
+ are like Marshmallow Froot Loops; Marco is like Cheerios.
+
+ - Uses GTK+ 3.0 for drawing window frames. This means colors, fonts,
+ etc. come from GTK+ theme.
+
+ - Does not expose the concept of "window manager" to the user. Some
+ of the features in the MATE control panel and other parts of the
+ desktop happen to be implemented in marco, such as changing your
+ window border theme, or changing your window navigation shortcuts,
+ but the user doesn't need to know this.
+
+ - Includes only the window manager; does not try to be a desktop
+ environment. The pager, configuration, etc. are all separate and
+ modular. The "libwnck" library (which I also wrote) is available
+ for writing marco extensions, pagers, and so on. (But libwnck
+ isn't marco specific, or MATE-dependent; it requires only GTK,
+ and should work with KWin, fvwm2, and other EWMH-compliant WMs.)
+
+ - Has a simple theme system and a couple of extra themes come with it.
+ Change themes via gsettings:
+ ```
+ gsettings set org.mate.Marco.general theme Menta
+ gsettings set org.mate.Marco.general theme BlackMATE
+ gsettings set org.mate.Marco.general theme TraditionalOk
+ ```
+
+ See theme-format.txt for docs on the theme format. Use
+ marco-theme-viewer to preview themes.
+
+ - Change number of workspaces via gsettings:
+ ```
+ gsettings set org.mate.Marco.general num-workspaces 5
+ ```
+
+ Can also change workspaces from MATE 2 pager.
+
+ - Change focus mode:
+ ```
+ gsettings set org.mate.Marco.general focus-mode mouse
+ gsettings set org.mate.Marco.general focus-mode sloppy
+ gsettings set org.mate.Marco.general focus-mode click
+ ```
+
+ - Global keybinding defaults include:
+
+ | | |
+ |------------------------------------------------------|-----------------------------------------|
+ | <kbd>Alt</kbd>-<kbd>Tab</kbd> |forward cycle window focus |
+ | <kbd>Alt</kbd>-<kbd>Shift</kbd>-<kbd>Tab</kbd> |backward cycle focus |
+ | <kbd>Alt</kbd>-<kbd>Ctrl</kbd>-<kbd>Tab</kbd> |forward cycle focus among panels |
+ | <kbd>Alt</kbd>-<kbd>Ctrl</kbd>-<kbd>Shift</kbd>-<kbd>Tab</kbd>|backward cycle focus among panels|
+ | <kbd>Alt</kbd>-<kbd>Escape</kbd> |cycle window focus without a popup thingy|
+ | <kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>Left Arrow</kbd> |previous workspace |
+ | <kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>Right Arrow</kbd>|next workspace |
+ | <kbd>Ctrl</kbd>-<kbd>Alt</kbd>-<kbd>D</kbd> |minimize/unminimize all, to show desktop |
+
+ Change keybindings for example:
+
+ ```
+ gsettings set org.mate.Marco.global-keybindings switch-to-workspace-1 '<Alt>F1'
+ ```
+
+ Also try the MATE keyboard shortcuts control panel.
+
+ See marco.schemas for all available bindings.
+
+ - Window keybindings:
+
+ <kbd>Alt</kbd>-<kbd>space</kbd> window menu
+
+ Mnemonics work in the menu. That is, <kbd>Alt</kbd>-<kbd>space</kbd> then underlined
+ letter in the menu item works.
+
+ Choose Move from menu, and arrow keys to move the window.
+
+ While moving, hold down Control to move slower, and
+ Shift to snap to edges.
+
+ Choose Resize from menu, and nothing happens yet, but
+ eventually I might implement something.
+
+ Keybindings for things like maximize window, vertical maximize,
+ etc. can be bound, but may not all exist by default. See
+ marco.schemas.
+
+ - Window mouse bindings:
+
+ Clicking anywhere on frame with button 1 will raise/focus window
+
+ If you click a window control, such as the close button, then the
+ control will activate on button release if you are still over it
+ on release (as with most GUI toolkits)
+
+ If you click and drag borders with button 1 it resizes the window
+
+ If you click and drag the titlebar with button 1 it moves the
+ window.
+
+ If you click anywhere on the frame with button 2 it lowers the
+ window.
+
+ If you click anywhere on the frame with button 3 it shows the
+ window menu.
+
+ If you hold down Super (windows key) and click inside a window, it
+ will move the window (buttons 1 and 2) or show menu (button 3).
+ Or you can configure a different modifier for this.
+
+ If you pick up a window with button 1 and then switch workspaces
+ the window will come with you to the new workspace, this is
+ a feature copied from Enlightenment.
+
+ If you hold down Shift while moving a window, the window snaps
+ to edges of other windows and the screen.
+
+ - Session management:
+
+ Marco connects to the session manager and will set itself up to
+ be respawned. It theoretically restores sizes/positions/workspace
+ for session-aware applications.
+
+ - Marco implements much of the EWMH window manager specification
+ from freedesktop.org, as well as the older ICCCM. Please refer to
+ the COMPLIANCE file for information on marco compliance with
+ these standards.
+
+ - Uses Pango to render text, so has cool i18n capabilities.
+ Supports UTF-8 window titles and such.
+
+ - There are simple animations for actions such as minimization,
+ to help users see what is happening. Should probably
+ have a few more of these and make them nicer.
+
+ - if you have the proper X setup, set the GDK_USE_XFT=1
+ environment variable to get antialiased window titles.
+
+ - considers the panel when placing windows and maximizing
+ them.
+
+ - handles the window manager selection from the ICCCM. Will exit if
+ another WM claims it, and can claim it from another WM if you pass
+ the --replace argument. So if you're running another
+ ICCCM-compliant WM, you can run "marco --replace" to replace it
+ with Marco.
+
+ - does basic colormap handling
+
+ - and much more! well, maybe not a lot more.
+
+HOW TO ADD EXTERNAL FEATURES
+===
+
+You can write a marco "plugin" such as a pager, window list, icon
+box, task menu, or even things like "window matching" using the
+Extended Window Manager Hints. See http://www.freedesktop.org for the
+EWMH specification. An easy-to-use library called "libwnck" is
+available that uses the EWMH and is specifically designed for writing
+WM accessories.
+
+You might be interested in existing accessories such as "Devil's Pie"
+by Ross Burton, which add features to Marco (or other
+EWMH-compliant WMs).
+
+MARCO BUGS, NON-FEATURES, AND CAVEATS
+===
+
+See github: https://github.com/mate-desktop/marco/issues
+
+FAQ
+===
+
+Q: Will you add my feature?
+
+A: If it makes sense to turn on unconditionally, or is genuinely a
+ harmless preference that I would not be embarrassed to put in a
+ simple, uncluttered, user-friendly configuration dialog.
+
+ If the only rationale for your feature is that other window
+ managers have it, or that you are personally used to it, or
+ something like that, then I will not be impressed. Marco is
+ firmly in the "choose good defaults" camp rather than the "offer 6
+ equally broken ways to do it, and let the user pick one" camp.
+
+ This is part of a "no crackrock" policy, despite some exceptions
+ I'm mildly embarrassed about. For example, multiple workspaces
+ probably constitute crackrock, they confuse most users and really
+ are not that useful if you have a decent tasklist and so on. But I
+ am too used to them to turn them off. Or alternatively
+ iconification/tasklist is crack, and workspaces/pager are good. But
+ having both is certainly a bit wrong. Sloppy focus is probably
+ crackrock too.
+
+ But don't think unlimited crack is OK just because I slipped up a
+ little. No slippery slope here.
+
+ Don't let this discourage patches and fixes - I love those. ;-)
+ Just be prepared to hear the above objections if your patch adds
+ some crack-ridden configuration option.
+
+ http://pobox.com/~hp/free-software-ui.html
+ http://pobox.com/~hp/features.html
+
+Q: Why does Marco remember the workspace/position of some apps
+ but not others across logout/login?
+
+A: Marco only stores sizes/positions for apps that are session
+ managed. As far as I can determine, there is no way to attempt to
+ remember workspace/position for non-session-aware apps without
+ causing a lot of weird effects.
+
+ The reason is that you don't know which non-SM-aware apps were
+ launched by the session. When you initially log in, Marco sees a
+ bunch of new windows appear. But it can't distinguish between
+ windows that were stored in your session, or windows you just
+ launched after logging in. If Marco tried to guess that a window
+ was from the session, it could e.g. end up maximizing a dialog, or
+ put a window you just launched on another desktop or in a weird
+ place. And in fact I see a lot of bugs like this in window managers
+ that try to handle non-session-aware apps.
+
+ However, for session-aware apps, Marco can tell that the
+ application instance is from the session and thus restore it
+ reliably, assuming the app properly restores the windows it had
+ open on session save.
+
+ So the correct way to fix the situation is to make apps
+ session-aware. libSM has come with X for years, it's very
+ standardized, it's shared by GNOME and KDE - even twm is
+ session-aware. So anyone who won't take a patch to add SM is more
+ archaic than twm - and you should flame them. ;-)
+
+ Docs on session management:
+ http://www.fifi.org/doc/xspecs/xsmp.txt.gz
+ http://www.fifi.org/doc/xspecs/SMlib.txt.gz
+
+ See also the ICCCM section on SM. For MATE apps, use the
+ MateClient object. For a simple example of using libSM directly,
+ twm/session.c in the twm source code is pretty easy to understand.
+
+Q: How about adding viewports in addition to workspaces?
+
+A: I could conceivably be convinced to use viewports _instead_ of
+ workspaces, though currently I'm not thinking that. But I don't
+ think it makes any sense to have both; it's just confusing. They
+ are functionally equivalent.
+
+ You may think this means that you won't have certain keybindings,
+ or something like that. This is a misconception. The only
+ _fundamental_ difference between viewports and workspaces is that
+ with viewports, windows can "overlap" and appear partially on
+ one and partially on another. All other differences that
+ traditionally exist in other window managers are accidental -
+ the features commonly associated with viewports can be implemented
+ for workspaces, and vice versa.
+
+ So I don't want to have two kinds of
+ workspace/desktop/viewport/whatever, but I'm willing to add
+ features traditionally associated with either kind if those
+ features make sense.
+
+Q: Why is the panel always on top?
+
+A: Because it's a better user interface, and until we made this not
+ configurable a bunch of apps were not getting fixed (the app
+ authors were just saying "put your panel on the bottom" instead of
+ properly supporting fullscreen mode, and such).
+
+ rationales.txt has the bugzilla URL for some flamefesting on this,
+ if you want to go back and relive the glory.
+ Read these and the bugzilla stuff before asking/commenting:
+ http://pobox.com/~hp/free-software-ui.html
+ http://pobox.com/~hp/features.html
+
+Q: Why is there no edge flipping?
+
+A: This one is also in rationales.txt. Because "ouija board" UI, where
+ you just move the mouse around and the computer guesses what you
+ mean, has a lot of issues. This includes mouse focus, shade-hover
+ mode, edge flipping, autoraise, etc. Marco has mouse focus and
+ autoraise as a compromise, but these features are all confusing for
+ many users, and cause problems with accessibility, fitt's law, and
+ so on.
+
+ Read these and the bugzilla stuff before asking/commenting:
+ http://pobox.com/~hp/free-software-ui.html
+ http://pobox.com/~hp/features.html
+
+Q: Why does wireframe move/resize suck?
+
+A: You can turn it on with the reduced_resources setting.
+
+ But: it has low usability, and is a pain
+ to implement, and there's no reason opaque move/resize should be a
+ problem on any setup that can run a modern desktop worth a darn to
+ begin with.
+
+ Read these and the bugzilla stuff before asking/commenting:
+ http://pobox.com/~hp/free-software-ui.html
+ http://pobox.com/~hp/features.html
+
+ The reason we had to add wireframe anyway was broken
+ proprietary apps that can't handle lots of resize events.
+
+Q: Why no XYZ?
+
+A: You are probably getting the idea by now - check rationales.txt,
+ query/search bugzilla, and read http://pobox.com/~hp/features.html
+ and http://pobox.com/~hp/free-software-ui.html
+
+ Then sit down and answer the question for yourself. Is the feature
+ good? What's the rationale for it? Answer "why" not just "why not."
+ Justify in terms of users as a whole, not just users like
+ yourself. How else can you solve the same problem? etc. If that
+ leads you to a strong opinion, then please, post the rationale for
+ discussion to an appropriate bugzilla bug, or to
+
+ Please don't just "me too!" on bugzilla bugs, please don't think
+ flames will get you anywhere, and please don't repeat rationale
+ that's already been offered.
+
+Q: Your dumb web pages you made me read talk about solving problems in
+ fundamental ways instead of adding preferences or workarounds.
+ What are some examples where marco has done this?
+
+A: There are quite a few, though many opportunities remain. Sometimes
+ the real fix involves application changes. The marco approach is
+ that it's OK to require apps to change, though there are also
+ plenty of workarounds in marco for battles considered too hard
+ to fight.
+
+ Here are some examples:
+
+ - fullscreen mode was introduced to allow position constraints,
+ panel-on-top, and other such things to apply to normal windows
+ while still allowing video players etc. to "just work"
+
+ - "whether to include minimized windows in Alt+Tab" was solved
+ by putting minimized windows at the *end* of the tab order.
+
+ - Whether to pop up a feedback display during Alt+Tab was solved by
+ having both Alt+Tab and Alt+Esc
+
+ - Whether to have a "kill" feature was solved by automatically
+ detecting and offering to kill stuck apps. Better, marco
+ actually does "kill -9" on the process, it doesn't just
+ disconnect the process from the X server. You'll appreciate this
+ if you ever did a "kill" on Netscape 4, and watched it keep
+ eating 100% CPU even though the X server had booted it.
+
+ - The workspaces vs. viewports mess was avoided by adding
+ directional navigation and such to workspaces, see discussion
+ earlier in this file.
+
+ - Instead of configurable placement algorithms, there's just one
+ that works fairly well most of the time.
+
+ - To avoid excess CPU use during opaque move/resize, we rate limit
+ the updates to the application window's size.
+
+ - Instead of configurable "show size of window while resizing,"
+ it's only shown for windows where it matters, such as terminals.
+ (Only use-case given for all windows is for web designers
+ choosing their web browser size, but there are web sites and
+ desktop backgrounds that do this for you.)
+
+ - Using startup notification, applications open on the workspace
+ where you launched them, not the active workspace when their
+ window is opened.
+
+ - and much more.
+
+Q: I think marco sucks.
+
+A: Feel free to use any WM you like. The reason marco follows the
+ ICCCM and EWMH specifications is that it makes marco a modular,
+ interchangeable part in the desktop. libwnck-based apps such as the
+ MATE window list will work just fine with any EWMH-compliant WM.
+
+Q: Did you spend a lot of time on this?
+
+A: Originally the answer was no. Sadly the answer is now yes.
+
+Q: How can you claim that you are anti-crack, while still
+ writing a window manager?
+
+A: I have no comment on that.