From 202a8006e2b551ca909c7aa1b67720d699771df3 Mon Sep 17 00:00:00 2001 From: Jan Niklas Hasse Date: Wed, 13 Dec 2017 11:30:15 +0100 Subject: Use Markdown for formatting the README --- README | 441 ----------------------------------------------------------------- 1 file changed, 441 deletions(-) delete mode 100644 README (limited to 'README') diff --git a/README b/README deleted file mode 100644 index a5a7b6c5..00000000 --- a/README +++ /dev/null @@ -1,441 +0,0 @@ -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 in bugzilla. 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 Crux - gsettings set org.mate.Marco.general theme Gorilla - gsettings set org.mate.Marco.general theme Atlanta - gsettings set org.mate.Marco.general theme Bright - - 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: - - Alt-Tab forward cycle window focus - Alt-Shift-Tab backward cycle focus - Alt-Ctrl-Tab forward cycle focus among panels - Alt-Ctrl-Shift-Tab backward cycle focus among panels - Alt-Escape cycle window focus without a popup thingy - Ctrl-Alt-Left Arrow previous workspace - Ctrl-Alt-Right Arrow next workspace - Ctrl-Alt-D minimize/unminimize all, to show desktop - - Change keybindings for example: - - gsettings set org.mate.Marco.global-keybindings switch-to-workspace-1 'F1' - - Also try the MATE keyboard shortcuts control panel. - - See marco.schemas for all available bindings. - - - Window keybindings: - - Alt-space window menu - - Mnemonics work in the menu. That is, Alt-space 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 - usability@gnome.org. - - 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. -- cgit v1.2.1