Подробнее – xorg при старте ругается, что не может найти модули type1 и freetype. Почему так может быть, и как с этим бороться – просто отключить? Странно, что такие бока при простом обновлении. Хотя, может, и я что-то напортачил..
Вобщем, разобрался с псевдогаффикой и раскладкой, для qingy глючить характерно, но Xorg… 686: core;extra;community, что-то стоит изх aur, но не обновлялось. Работаю со сборным ядром 2.6.26-rt(и драйве рnvidia под него же). Параллельно стоит ванильное ядро с дефолтными дровами – обновлялись только они. Если причина в этом, то где?
Proshu proweniya za latinitsu. Voy na dosuge rewil obnowitsya (t.k. svejeustanovlenniy tmpaint rugalsya na ustarewshie bibleoteki). Rezul'tat - ne startuyet Xorg (drova nvidia-98x-rt), login-meneger qinki pri vvode parolya pri vvode odnogo simvola prinimaet srazu 2 (???!! kodirovka? no eto je latinitsa!), daje v konsoli ne rabotaet psevdograffika (links -g) i russkaya raskladka. chto ne tak obnovilos? do etogo ne obnovlyalsya mesyats. Vobshem, viruchayte!
Буду знать, спасибо :)
Ну, пусть будет CC-NC-SA
Я рад, что это кому-то показалось интересным 8)
Вот сегодня обновился с v 0.9.21 на 0.9.23
WM растёт и крепнет на глазах! Надеюсь, к версии 1.0 он станет стабильным и юзабельным.
Итак, плюсы – ман страница стала на порядок информативнее; появилась возможность “сворачивать окна”, после чего они исчезают из фрейма, если были видимы, и перестают всплывать при переборе окон группы. Восстановить можно командой switch window (обычно повешенной на хоткей ModN+w). Стало нормально работать отключение отображения границ текущего фрейма. В результате, дописал в конфиг:
# свернуть текущее окно
bind on Mod4+Escape shrink
# отключение отображения рамки текущего фрейма
bind on Mod4+b border flip
bind on Mod4+Shift+b border flip
По поводу скринсейвера в роли фона рабочего стола – из-за псевдопрозрачности, фреймы отображают только картинку, установленную в root окно любой утилитой, анимированное же видео видно лишь в stack mode, но выглядит потрясающе! Интересно, есть ли возможность сделать фреймы действительно прозрачными (что реализовано, например, в awesome)…
И, наконец, появилась поддержка wmctrl, чему я ообенно рад (ибо позволит реализовать задуманный мною text based pager без привязки к Musca), кот. обеспечивает стандартизированное управление X WM через pipe.
Минусы – замеченные мною баги не пофикшены. Если кому не сложно, и кто умеет – составьте баг-репорт – и Родина Вас не забудет!
Что касается wiki – я не против и даже за. Только я так и не разобрался с созданием статей в вики, потому разрешаю разместить статью тому, кто это умеет. Естественно, весь материал распространяется на условиях GPL. :)
Вобщем, давно пытаюсь собрать в ArchLinux SuperCollider – охота его изучить, раньше с ним дела не имел. Если кто собрал у себя – пожалуста, поделитесь опытом – как???
При попытке собрать supercollider-svn из AUR – получаю при сборке следущее:
==> Starting make...
scons: Reading SConscript files ...
classvar scVersionMajor=3, scVersionMinor=3, scVersionPostfix=1;
classvar scVersionMajor=3, scVersionMinor=3, scVersionPostfix=1;
scons: warning: The Options class is deprecated; use the Variables class instead.
File "/tmp/yaourt-tmp-archer/aur-supercollider-svn/supercollider-svn/src/SuperCollider3-build/SConstruct", line 273, in <module>
scons: warning: The BoolOption() function is deprecated; use the BoolVariable() function instead.
File "/tmp/yaourt-tmp-archer/aur-supercollider-svn/supercollider-svn/src/SuperCollider3-build/SConstruct", line 276, in <module>
scons: warning: The EnumOption() function is deprecated; use the EnumVariable() function instead.
File "/tmp/yaourt-tmp-archer/aur-supercollider-svn/supercollider-svn/src/SuperCollider3-build/SConstruct", line 282, in <module>
scons: warning: The PathOption() function is deprecated; use the PathVariable() function instead.
File "/tmp/yaourt-tmp-archer/aur-supercollider-svn/supercollider-svn/src/SuperCollider3-build/SConstruct", line 290, in <module>
scons: warning: The PackageOption() function is deprecated; use the PackageVariable() function instead.
File "/tmp/yaourt-tmp-archer/aur-supercollider-svn/supercollider-svn/src/SuperCollider3-build/SConstruct", line 326, in <module>
Checking for pkg-config... yes
Checking for sndfile >= 1.0.16... yes
Checking for sndfile >= 1.0.18... yes
Checking for libcurl >= 7... yes
Checking for fftw3f... yes
Checking for jack >= 0.100... yes
Checking for avahi-client... yes
Checking for alsa... yes
Checking for C header file /System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h... no
Checking for C header file linux/input.h... no
Checking for C header file cwiid.h... no
Checking for C header file altivec.h... no
Checking for C header file xmmintrin.h... no
NOTICE: CPU has SSE support
Checking for C header file X11/Intrinsic.h... yes
Checking for XQueryPointer() in C library X11... yes
Checking for C function strtod()... yes
----------------------------------------------------
To install SCVIM, please use scons in the directory editors/scvim/
------------------------------------------------------------------------
 ALTIVEC:                 no
 AUDIOAPI:                Jack
 MIDIAPI:                 ALSA
 DEBUG:                   no
 DEVELOPMENT:             no
 LANG:                    yes
 LID:                     no
 WII:                     no
 PREFIX:                  /usr
 RENDEZVOUS:              yes
 SCEL:                    yes
 SCVIM:                   yes
 SCED:                    no
 SSE:                     no
 STRIP:                   no
 CROSSCOMPILE:            no
 TERMINAL_CLIENT:         yes
 X11:                     yes
------------------------------------------------------------------------
scons: done reading SConscript files.
scons: Building targets ...
g++ -o Source/common/SC_AllocPool.o -c -Wno-deprecated -fPIC -Wno-unknown-pragmas -ffast-math -fstrength-reduce -march=i686 -fPIC -DSC_DATA_DIR=\"/usr/share/SuperCollider\" -D_REENTRANT -DSC_LINUX -DNDEBUG -DSC_MEMORY_ALIGNMENT=1 -DHAVE_STRTOD -IHeaders/common -IHeaders/plugin_interface -IHeaders/server Source/common/SC_AllocPool.cpp
In file included from Source/common/SC_AllocPool.cpp:21:
/usr/include/string.h:33:20: error: stddef.h: No such file or directory
Source/common/SC_AllocPool.cpp:22:21: error: stdexcept: No such file or directory
In file included from Source/common/SC_AllocPool.cpp:24:
Headers/plugin_interface/SC_BoundsMacros.h:24:47: error: cstdlib: No such file or directory
Headers/plugin_interface/SC_BoundsMacros.h:25:47: error: cmath: No such file or directory
In file included from Source/common/SC_AllocPool.cpp:21:
/usr/include/string.h:44: error: 'size_t' has not been declared
/usr/include/string.h:48: error: 'size_t' has not been declared
/usr/include/string.h:57: error: 'size_t' has not been declared
/usr/include/string.h:64: error: 'size_t' has not been declared
/usr/include/string.h:67: error: 'size_t' has not been declared
/usr/include/string.h:74: error: 'size_t' has not been declared
/usr/include/string.h:76: error: 'size_t' has not been declared
/usr/include/string.h:114: error: 'size_t' has not been declared
/usr/include/string.h:116: error: 'size_t' has not been declared
/usr/include/string.h:131: error: 'size_t' has not been declared
/usr/include/string.h:139: error: 'size_t' has not been declared
/usr/include/string.h:145: error: 'size_t' has not been declared
/usr/include/string.h:152: error: 'size_t' does not name a type
In file included from Source/common/SC_AllocPool.cpp:21:
/usr/include/string.h:167: error: 'size_t' does not name a type
/usr/include/string.h:181: error: 'size_t' has not been declared
/usr/include/string.h:282: error: 'size_t' does not name a type
/usr/include/string.h:286: error: 'size_t' does not name a type
/usr/include/string.h:380: error: 'size_t' has not been declared
/usr/include/string.h:381: error: 'size_t' has not been declared
/usr/include/string.h:387: error: 'size_t' has not been declared
/usr/include/string.h:390: error: 'size_t' has not been declared
/usr/include/string.h:397: error: 'size_t' does not name a type
/usr/include/string.h:404: error: 'size_t' does not name a type
/usr/include/string.h:436: error: 'size_t' has not been declared
/usr/include/string.h:449: error: 'size_t' has not been declared
/usr/include/string.h:453: error: 'size_t' has not been declared
/usr/include/string.h:457: error: 'size_t' has not been declared
/usr/include/string.h:460: error: 'size_t' has not been declared
/usr/include/string.h:538: error: 'size_t' has not been declared
/usr/include/string.h:550: error: 'size_t' has not been declared
/usr/include/string.h:575: error: 'size_t' has not been declared
/usr/include/string.h:578: error: 'size_t' has not been declared
/usr/include/string.h:591: error: 'size_t' has not been declared
In file included from Headers/common/SC_AllocPool.h:33,
                 from Source/common/SC_AllocPool.cpp:23:
Headers/server/SC_List.h: In member function 'bool Link<T>::SanityCheck()':
Headers/server/SC_List.h:214: error: 'runtime_error' is not a member of 'std'
Headers/server/SC_List.h:217: error: 'runtime_error' is not a member of 'std'
In file included from Headers/common/SC_AllocPool.h:35,
                 from Source/common/SC_AllocPool.cpp:23:
/usr/include/stdlib.h: At global scope:
/usr/include/stdlib.h:140: error: 'size_t' does not name a type
/usr/include/stdlib.h:337: error: 'size_t' has not been declared
/usr/include/stdlib.h:367: error: 'size_t' has not been declared
/usr/include/stdlib.h:471: error: 'size_t' was not declared in this scope
/usr/include/stdlib.h:471: error: expected ',' or ';' before 'throw'
/usr/include/stdlib.h:473: error: 'size_t' was not declared in this scope
/usr/include/stdlib.h:473: error: 'size_t' was not declared in this scope
/usr/include/stdlib.h:473: error: initializer expression list treated as compound expression
/usr/include/stdlib.h:474: error: expected ',' or ';' before 'throw'
/usr/include/stdlib.h:485: error: 'size_t' has not been declared
In file included from /usr/include/stdlib.h:497,
                 from Headers/common/SC_AllocPool.h:35,
                 from Source/common/SC_AllocPool.cpp:23:
/usr/include/alloca.h:33: error: 'size_t' was not declared in this scope
/usr/include/alloca.h:33: error: expected ',' or ';' before 'throw'
In file included from Headers/common/SC_AllocPool.h:35,
                 from Source/common/SC_AllocPool.cpp:23:
/usr/include/stdlib.h:502: error: 'size_t' was not declared in this scope
/usr/include/stdlib.h:502: error: expected ',' or ';' before 'throw'
/usr/include/stdlib.h:507: error: 'size_t' has not been declared
/usr/include/stdlib.h:507: error: 'size_t' has not been declared
/usr/include/stdlib.h:705: error: 'size_t' has not been declared
/usr/include/stdlib.h:705: error: 'size_t' has not been declared
/usr/include/stdlib.h:710: error: 'size_t' has not been declared
/usr/include/stdlib.h:710: error: 'size_t' has not been declared
/usr/include/stdlib.h:713: error: 'size_t' has not been declared
/usr/include/stdlib.h:713: error: 'size_t' has not been declared
/usr/include/stdlib.h:788: error: 'size_t' has not been declared
/usr/include/stdlib.h:791: error: 'size_t' has not been declared
/usr/include/stdlib.h:795: error: 'size_t' has not been declared
/usr/include/stdlib.h:799: error: 'size_t' has not been declared
/usr/include/stdlib.h:808: error: 'size_t' has not been declared
/usr/include/stdlib.h:812: error: 'size_t' has not been declared
/usr/include/stdlib.h:819: error: 'size_t' does not name a type
/usr/include/stdlib.h:822: error: 'size_t' does not name a type
/usr/include/stdlib.h:885: error: 'size_t' has not been declared
In file included from Source/common/SC_AllocPool.cpp:23:
Headers/common/SC_AllocPool.h:45: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:46: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:47: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:48: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:49: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:61: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:64: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:82: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:85: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:88: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:97: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:98: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h: In member function 'AllocChunk* AllocChunk::NextChunk()':
Headers/common/SC_AllocPool.h:71: error: 'Size' was not declared in this scope
Headers/common/SC_AllocPool.h: In member function 'AllocChunk* AllocChunk::PrevChunk()':
Headers/common/SC_AllocPool.h:74: error: 'PrevSize' was not declared in this scope
Headers/common/SC_AllocPool.h: In member function 'bool AllocChunk::InUse()':
Headers/common/SC_AllocPool.h:77: error: 'mSize' was not declared in this scope
Headers/common/SC_AllocPool.h:77: error: 'kChunkInUse' was not declared in this scope
Headers/common/SC_AllocPool.h: In member function 'bool AllocChunk::PrevInUse()':
Headers/common/SC_AllocPool.h:80: error: 'mPrevSize' was not declared in this scope
Headers/common/SC_AllocPool.h:80: error: 'kChunkInUse' was not declared in this scope
Headers/common/SC_AllocPool.h: In member function 'void AllocChunk::SetSizeFree(int)':
Headers/common/SC_AllocPool.h:83: error: 'mSize' was not declared in this scope
Headers/common/SC_AllocPool.h:83: error: 'class AllocChunk' has no member named 'mPrevSize'
Headers/common/SC_AllocPool.h: In member function 'void AllocChunk::SetSizeInUse(int)':
Headers/common/SC_AllocPool.h:86: error: 'mSize' was not declared in this scope
Headers/common/SC_AllocPool.h:86: error: 'class AllocChunk' has no member named 'mPrevSize'
Headers/common/SC_AllocPool.h:86: error: 'kChunkInUse' was not declared in this scope
Headers/common/SC_AllocPool.h: In member function 'void AllocChunk::SetNeighborsInUse(int)':
Headers/common/SC_AllocPool.h:89: error: 'mPrevSize' was not declared in this scope
Headers/common/SC_AllocPool.h:89: error: 'class AllocChunk' has no member named 'mSize'
Headers/common/SC_AllocPool.h:89: error: 'kChunkInUse' was not declared in this scope
Headers/common/SC_AllocPool.h: In member function 'bool AllocChunk::IsArea()':
Headers/common/SC_AllocPool.h:92: error: 'mPrevSize' was not declared in this scope
Headers/common/SC_AllocPool.h:92: error: 'kChunkInUse' was not declared in this scope
Headers/common/SC_AllocPool.h:92: error: 'class AllocChunk' has no member named 'mSize'
Headers/common/SC_AllocPool.h: At global scope:
Headers/common/SC_AllocPool.h:110: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:125: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:127: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:129: error: typedef 'NewAreaFunc' is initialized (use decltype instead)
Headers/common/SC_AllocPool.h:129: error: 'size_t' was not declared in this scope
Headers/common/SC_AllocPool.h:135: error: expected ')' before 'allocArea'
Headers/common/SC_AllocPool.h:141: error: expected ';' before '(' token
Headers/common/SC_AllocPool.h:142: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:148: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:149: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:160: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:168: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:174: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h:181: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:184: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:198: error: 'size_t' has not been declared
Headers/common/SC_AllocPool.h:272: error: 'NewAreaFunc' does not name a type
Headers/common/SC_AllocPool.h:274: error: 'size_t' does not name a type
Headers/common/SC_AllocPool.h: In member function 'void AllocPool::UnlinkFree(AllocChunk*)':
Headers/common/SC_AllocPool.h:264: error: 'size_t' was not declared in this scope
Headers/common/SC_AllocPool.h:264: error: expected ';' before 'size'
Headers/common/SC_AllocPool.h:265: error: 'size' was not declared in this scope
Source/common/SC_AllocPool.cpp: In member function 'void AllocPool::InitAlloc()':
Source/common/SC_AllocPool.cpp:70: error: 'mAreaInitSize' was not declared in this scope
Source/common/SC_AllocPool.cpp:73: error: 'mAreaInitSize' was not declared in this scope
Source/common/SC_AllocPool.cpp: At global scope:
Source/common/SC_AllocPool.cpp:92: error: expected ')' before 'inAllocArea'
Source/common/SC_AllocPool.cpp: In member function 'void AllocPool::FreeAll()':
Source/common/SC_AllocPool.cpp:122: error: 'NULL' was not declared in this scope
Source/common/SC_AllocPool.cpp: In member function 'void AllocPool::FreeAllInternal()':
Source/common/SC_AllocPool.cpp:138: error: 'size_t' was not declared in this scope
Source/common/SC_AllocPool.cpp:138: error: expected ';' before 'size'
Source/common/SC_AllocPool.cpp:140: error: 'size' was not declared in this scope
Source/common/SC_AllocPool.cpp: In member function 'void AllocPool::Free(void*)':
Source/common/SC_AllocPool.cpp:166: error: 'size_t' was not declared in this scope
Source/common/SC_AllocPool.cpp:166: error: expected ';' before 'size'
Source/common/SC_AllocPool.cpp:170: error: expected ';' before 'prevSize'
Source/common/SC_AllocPool.cpp:171: error: 'prevSize' was not declared in this scope
Source/common/SC_AllocPool.cpp:172: error: 'size' was not declared in this scope
Source/common/SC_AllocPool.cpp:176: error: 'size' was not declared in this scope
Source/common/SC_AllocPool.cpp:179: error: 'class AllocChunk' has no member named 'Size'
Source/common/SC_AllocPool.cpp:184: error: 'mAreaMoreSize' was not declared in this scope
Source/common/SC_AllocPool.cpp: At global scope:
Source/common/SC_AllocPool.cpp:195: error: 'AllocArea* AllocPool::NewArea' is not a static member of 'class AllocPool'
Source/common/SC_AllocPool.cpp:195: error: 'size_t' was not declared in this scope
Source/common/SC_AllocPool.cpp:196: error: expected ',' or ';' before '{' token
scons: *** [Source/common/SC_AllocPool.o] Error 1
scons: building terminated because of errors.
==> ОШИбКА: Сборка завершилась неудачно.
    Преждевременный выход...
Error: Makepkg was unable to build supercollider-svn package.
П. С. :
А это в качестве бонуса :-) вписать в конфиг .musca_start
# Очень рекомендую установить rss-glx -- подборка замечательных хранителей экрана, которые использовать вместо фона рабочего стола намного веселее X-)
exec plasma_rss -r --resolution 56 --speed 16
И обещанный мною скрипт :D

dmenfm
----------------------------------------------------------------
#!/bin/bash
about="Dmen File Manager\nversion 0.1.2.1\nby Scott Garrett\n<wintervenom [(a)] archlinux.us>\nre-edition\nby Yuriy Pitometsu\n<Pitometsu [(a)] gmail.com>"
### Changelog #####################################################
# 0.1.0   # * Initial version                                     #
# 0.1.1   # + Option 'Open last used dir'                         #
#         # + Options 'Always open dirs' and 'Always open files'  #
# 0.1.2   # + Config moved to $XDG_CONFIG_HOME                    #
#         # + Options for dmenu styling                           #
#         # + Option to change executor                           #
#         # + Option to open file manager in current directory    #
#         # + Plugins support                                     #
# 0.1.2.1 # + Font option for dmenu                               #
###################################################################
# TODO: UTF-8
function defaults {
    show_hidden=0
    show_backup=0
    always_open_files=0
    always_open_dirs=0
    open_last=1
    dmenu_caseinsens=1
    dmenu_onbottom=1
    dmenu_font='-*-ProggyClean-medium-r-normal-*-*-*-*-*-*-*-*'
    dmenu_bg='#228822'
    dmenu_fg='#000000'
    dmenu_sbg='#32CD32'
    dmenu_sfg='#000000'
    executor='exo-open'
    editor='geany'
    filemanager='thunar'
}
# initialization defaults
d_dmenu_font="$dmenu_font"
d_dmenu_bg="$dmenu_bg"
d_dmenu_fg="$dmenu_fg"
d_dmenu_sbg="$dmenu_sbg"
d_dmenu_sfg="$dmenu_sfg"
d_editor="$editor"
d_executor="$executor"
d_filemanager="$filemanager"
function saveconfig {
    echo "show_hidden=$show_hidden
show_backup=$show_backup
always_open_dirs=$always_open_dirs
always_open_files=$always_open_files
open_last=$open_last
dmenu_caseinsens=$dmenu_caseinsens
dmenu_onbottom=$dmenu_onbottom
dmenu_font=\"$dmenu_font\"
dmenu_bg='$dmenu_bg'
dmenu_fg='$dmenu_fg'
dmenu_sbg='$dmenu_sbg'
dmenu_sfg='$dmenu_sfg'
editor=\"$editor\"
executor=\"$executor\"
filemanager=\"$filemanager\"
last_dir=\"$(pwd)\"
" > "$config"
}
function setmenu {
    menu="$menu $([ "$dmenu_caseinsens" == '1' ] && echo '-i') $([ "$dmenu_onbottom" == '1' ] && echo '-b') -fn $dmenu_font -nb $dmenu_bg -nf $dmenu_fg -sb $dmenu_sbg -sf $dmenu_sfg"
}
file=1
config_file="preferences"
config_dir="$XDG_CONFIG_HOME/dmenfm"
config="$config_dir/$config_file"
plugins_dir="$XDG_CONFIG_HOME/dmenfm/plugins"
menu='dmenu'
[ ! -d "$config_dir" ] && mkdir "$config_dir"
[ ! -d "$plugins_dir" ] && mkdir "$plugins_dir"
[ ! -d "$plugins_dir/browser" ] && mkdir "$plugins_dir/browser"
[ ! -d "$plugins_dir/operations" ] && mkdir "$plugins_dir/operations"
[ ! -d "$plugins_dir/preferences" ] && mkdir "$plugins_dir/preferences"
[ -e "$HOME/.dmanfs" ] && mv "$HOME/.dmanfs" "$config"
defaults
touch "$config"
source "$config"
setmenu
[[ "$last_dir" && "$open_last" == 1 ]] && cd "$last_dir"
while [ "$file" ]; do
    file=$((echo -e '..\n.'; ls $([[ "$show_hidden" == '1' ]] && echo '-A') $([[ "$show_backup" == '1' ]] && echo '-B'); echo -e "[Preferences]\n[Open in $filemanager]"; ls -B "$plugins_dir/browser") | $menu -p "$(basename $(pwd))")
    if [ "$file" ]; then
        if [ -e "$file" ]; then
            if $([ -d "$file" ] && [[ "$always_open_dirs" != '1' && "$file" != "." && "$file" != ".." ]]) || $([ -f "$file" ] && [[ "$always_open_files" != '1' ]]); then
                owd=$(pwd)
                opt=$((echo 'Open'; ([ -f "$file" ] && echo 'Edit'); echo -e 'Copy\nMove\nRename\nDelete'; ls -B "$plugins_dir/operations") | $menu -p "<$file>")
            else
                opt='Open'
            fi
            case "$opt" in
                'Open')
                    if [ -d "$file" ]; then
                        cd "$file"
                    else
                        if [ "$executor" ] && which "$executor" &> /dev/null; then
                            exec "$executor" "$owd/$file" &
                            unset file
                        elif which "$d_executor" &> /dev/null; then
                            "$d_executor" "$owd/$file"
                            unset file
                        else
                            echo -e "No executor found.\nSet one in [Preferences]." | $menu -p 'Error:'
                        fi
                    fi
                ;;
                'Edit')
                    if [ "$editor" ] && which "$editor" &> /dev/null; then
                        exec "$editor" "$owd/$file" &
                        unset file
                    elif which "$d_editor" &> /dev/null; then
                        exec "$d_editor" "$owd/$file"
                        unset file
                    else
                        echo -e "No editor found.\nSet one in [Preferences]." | $menu -p 'Error:'
                    fi
                ;;
                'Copy')
                    cdir=1
                    while [ "$cdir" ]; do
                        cdir=$((echo -e '..\n.'; ls $([[ "$show_hidden" == 1 ]] && echo "-A") $([[ "$show_backup" == 1 ]] && echo "-B") -d */) | $menu -p "Copy <$file> to:")
                        if [[ "$cdir" ]]; then
                            opt=$(echo -e 'Open\nCopy' | $menu -p "Copy <$file> to <$cdir>:")
                            if [[ "$opt" == "Open" ]]; then
                                cd "$cdir"
                            elif [[ "$opt" == "Copy" ]]; then
                                echo "$file"
                                [ -e "$cdir/$file" ] && opt=$(echo -e "No\nYes" | $menu -p "Replace existing <$file>?")
                                [[ "$opt" == "Copy" || "$opt" == "Yes" ]] && cp -af "$owd/$file" "$cdir/$file"
                                unset cdir
                            fi
                        fi
                    done
                ;;
                'Move')
                    cdir=1
                    while [ "$cdir" ]; do
                        cdir=$((echo -e '..\n.' && ls $([[ "$show_hidden" == 1 ]] && echo "-A") $([[ "$show_backup" == 1 ]] && echo "-B") -d */) | $menu -p "Move <$file> to:")
                        if [[ "$cdir" ]]; then
                            opt=$(echo -e 'Open\nMove' | $menu -p "Move <$file> to <$cdir>:")
                            if [[ "$opt" == "Open" ]]; then
                                cd "$cdir"
                            elif [[ "$opt" == "Move" ]]; then
                                echo "$file"
                                [ -e "$cdir/$file" ] && opt=$(echo -e "No\nYes" | $menu -p "Replace existing <$file>?")
                                [[ "$opt" == "Move" || "$opt" == "Yes" ]] && mv -f "$owd/$file" "$cdir/$file"
                                unset cdir
                            fi
                        fi
                    done
                ;;
                'Rename')
                    opt=$(echo "" | $menu -p "Rename <$file> to:")
                    [ "$opt" ] && mv -f "$file" "$opt"
                ;;
                'Delete')
                    opt=$(echo -e "No\nYes" | $menu -p "Really delete <$file>?")
                    [[ "$opt" == "Yes" ]] && rm -rf "$file"
                ;;
                *) [ "$opt" ] && [ -e "$plugins_dir/operations/$opt" ] && source "$plugins_dir/operations/$opt" ;;
            esac
        elif [[ "$file" =~ '[Open in' ]]; then
            which "$filemanager" &> /dev/null && exec "$filemanager" . &
            unset file
        elif [[ "$file" == '[Preferences]' ]]; then
            opt=1
            while [ "$opt" ]; do
                opt=$((echo "Show hidden files [$show_hidden]
Show backup files [$show_backup]
Always open dirs [$always_open_dirs]
Always open files [$always_open_files]
Open last used dir [$open_last]
Case-insensitive [$dmenu_caseinsens]
Display on bottom [$dmenu_onbottom]
Font [$dmenu_font]
Background [$dmenu_bg]
Foreground [$dmenu_fg]
Selected background [$dmenu_sbg]
Selected foreground [$dmenu_sfg]
Executor [$executor]
Editor [$editor]
File manager [$filemanager]
Set defaults
About"; ls -B "$plugins_dir/preferences") | $menu -p "Preferences")
                case "$opt" in
                    *"Show hidden files [$show_hidden]") (('show_hidden=!show_hidden')) ;;
                    *"Show backup files [$show_backup]") (('show_backup=!show_backup')) ;;
                    *"Always open dirs [$always_open_dirs]") (('always_open_dirs=!always_open_dirs')) ;;
                    *"Always open files [$always_open_files]") (('always_open_files=!always_open_files')) ;;
                    *"Open last used dir [$open_last]") (('open_last=!open_last')) ;;
                    *"Case-insensitive [$dmenu_caseinsens]") (('dmenu_caseinsens=!dmenu_caseinsens')) ;;
                    *"Display on bottom [$dmenu_onbottom]") (('dmenu_onbottom=!dmenu_onbottom')) ;;
                    *"Font [$dmenu_font]")
                        opt=$(echo -e "$dmenu_font\n[Default]" | $menu -p "Font:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_dmenu_font"
                        [ "$opt" ] && dmenu_font="$opt"
                        dmenu_test=1
                    ;;
                    *"Background [$dmenu_bg]")
                        opt=$(echo -e "$dmenu_bg\n[Default]" | $menu -p "Background:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_dmenu_bg"
                        [ "$opt" ] && dmenu_bg="$opt"
                        dmenu_test=1
                    ;;
                    *"Foreground [$dmenu_fg]")
                        opt=$(echo -e "$dmenu_fg\n[Default]" | $menu -p "Foreground:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_dmenu_fg"
                        [ "$opt" ] && dmenu_fg="$opt"
                        dmenu_test=1
                    ;;
                    *"Selected background [$dmenu_sbg]")
                        opt=$(echo -e "$dmenu_sbg\n[Default]" | $menu -p "Selected background:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_dmenu_sbg"
                        [ "$opt" ] && dmenu_sbg="$opt"
                        dmenu_test=1
                    ;;
                    *"Selected foreground [$dmenu_sfg]")
                        opt=$(echo -e "$dmenu_sfg\n[Default]" | $menu -p "Selected foreground:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_dmenu_sfg"
                        [ "$opt" ] && dmenu_sfg="$opt"
                        dmenu_test=1
                    ;;
                    *"Executor [$executor]")
                        opt=$(echo -e "$executor\n[Default]" | $menu -p "Executor:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_executor"
                        [ "$opt" ] && executor="$opt"
                    ;;
                    *"Editor [$editor]")
                        opt=$(echo -e "$editor\n[Default]" | $menu -p "Editor:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_editor"
                        [ "$opt" ] && editor="$opt"
                    ;;
                    *"File manager [$filemanager]")
                        opt=$(echo -e "$filemanager\n[Default]" | $menu -p "File manager:")
                        [[ "$opt" == '[Default]' ]] && opt="$d_filemaneger"
                        [ "$opt" ] && filemanager="$opt"
                    ;;
                    *"Set defaults")
                        opt=$(echo -e "No\nYes" | $menu -p "Really set defaults?")
                        [[ "$opt" == "Yes" ]] && defaults
                    ;;
                    'About') echo -e "$about" | $menu -p "About:" ;;
                    *)
                        [ "$opt" ] && [ -e "$plugins_dir/preferences/$opt" ] && source "$plugins_dir/preferences/$opt"
                    ;;
                esac
            done
	    
            setmenu
            if [[ "$dmenu_test" == '1' ]]; then
                if [[ "OK" != "$(echo 'OK' | $menu -p 'Dmenu settings changed.')" ]]; then
                 defaults
                 source "$config"
                 setmenu
                 echo 'OK' | $menu -p 'Error in Dmenu settings.  Reverted.'
                fi
	    fi
            saveconfig
        elif [ -e "$plugins_dir/browser/$file" ]; then
            source "$plugins_dir/browser/$file"
        fi
    fi
    
done
saveconfig
----------------------------------------------------------------
Ну вот и всё, надеюсь, читающие нашли что-либо для себя интересное. :-D
И напоследок (опять повторяюсь?) приведу свой стартовый конфиг с комментариями, ибо лучше 1 раз увидеть, чем 128 раз услышать…

[~/.musca_start]
----------------------------------------------------------------
# Цветовая схема -- как я её себе представляю -- советую при настройке посмотреть man colors или showrgb | grep <нужный цвет>
set border_focus LimeGreen
set border_unfocus ForestGreen
set border_dedicate_focus #3283CD
set border_dedicate_unfocus #225888
set border_catchall_focus #CD327F
set border_catchall_unfocus #882255
# навешиваем команды на кейбиндинги
# стандартный терминал -- хотя нужно ли запускать больше одного экземпляра?
bind on Mod4+t exec urxvt
# хоткеем можно запустить скрипт dmenfm, создающий из dmenu минималистичный файловый менеджер. Жаль, что для него необходимо отдельно настраивать dmenu -- средств для более плотнойинтеграции я не нашел. Впрочем, создавать интегрированную среду из оконного и файлого менеджера -- это уже путь DE (Desktop environments -- рабочих столов). Чуть подправленный мной скрипт привожу в конце статьи
bind on Mod4+z exec dmenfm
bind on Mod4+Shift+z exec dmenfm
# деление фрейма хоткеями пополам -- горизонтально и вертикально, соответственно
bind on Mod4+Shift+h hsplit 1/2
bind on Mod4+Shift+v vsplit 1/2
# удаление фрейма
bind on Mod4+Shift+r remove
# удаление всех фреймов в группе кроме текущего, последний занимает место всей группы
bind on Mod4+Shift+o only
# аварийное завершение работы текущего окна
bind on Mod4+Shift+k kill
bind on Mod1+F4 kill
# переключение между окнами текущей группы в текущем фрейме; local переключает во фрейме только те окна, которые в нём ранее открывались
bind on Mod4+c cycle local next
bind on Mod4+Shift+c cycle local prev
# bind on Mod1+Shif+Tab cycle prev почему-то не работает :-\
bind on Control+Tab cycle prev
bind on Mod1+Shif+Tab cycle prev
# выбор текущего фрейма в группе
bind on Mod4+Left focus left
bind on Mod4+Right focus right
bind on Mod4+Up focus up
bind on Mod4+Down focus down
# Super+PgDn и Super+PgUp -- переключение между группами
bind on Mod4+Next use (next)
bind on Mod4+Prior use (prev)
# не знаю :) переписал на всякий случай. Возможно это нужно для поддержки работы нескольких экранов (но у меня только 1 монитор)
bind on Mod4+Tab screen (next)
# вызов dmenu с перечнем всех окон
bind on Mod4+Shift+w switch window
# вызов dmenu с перечнем всех групп
bind on Mod4+Shift+g switch group
#запуск dmenu с перечнем всех установленных программ -- штатное средство запуска программ
bind on Mod4+x shell
# Вызывает меню команд musca через dmenu, то же происходит по нажатию Super+M
bind on Mod4+Shift+x command
# пометить фрейм как занятый для открывающихся окон
bind on Mod4+Shift+d dedicate flip
# пометить фрейм для размещения в нём всех новых окон
bind on Mod4+Shift+a catchall flip
# отмена последней манипуляции с musca (!)
bind on Mod4+Shift+u undo
# переключение в режим плавающих окон
bind on Mod4+Shift+s stack flip
# перетаскивания окна между фреймами
bind on Mod4+Shift+Left swap left
bind on Mod4+Shift+Right swap right
bind on Mod4+Shift+Up swap up
bind on Mod4+Shift+Down swap down
# изменение размеров текущего фрейма
bind on Mod4+Control+Left resize left
bind on Mod4+Control+Right resize right
bind on Mod4+Control+Up resize up
bind on Mod4+Control+Down resize down
# выход из musca ;)
bind on Mod4+Shift+q quit
# вот примерно так осуществляются отдельные нефреймовые окна
#manage off stalonetray
#manage off Conky
# настройка переменных musca
# по умолчанию новое окно открывается в пустом фрейме, если такой есть, а не в текущем
set window_open_frame empty
# на вкус и цвет фломастеры разные -- я запускаю dmenu так
set dmenu dmenu -i -b -fn -*-ProggyClean-medium-r-normal-*-*-*-*-*-*-*-* -nb ForestGreen -nf black -sb LimeGreen -sf black
# а тут неплохо бы указать штатное средство вывода вербальной информации. Наверно, это всё-же будет dzen2, когда его освою :)
#set notify echo `cat` 
# размеры рабочей части группы -- можно ограничить при использовании панелей и прочих апплетов-котлетов -- я не использую
#pad 0 0 0 16
# место для приготовления котлетов
#exec stalonetray
#exec conky
# загружаю конфигурацию текущей группы, сохранённую ранее командой dump
load .musca_dump/term
# автозапуск всяких окон
exec emacs ~/.musca_start 
exec urxvt
# можно создать сколько-то групп для работы. я обычно создаю их в процессе работы. Впрочем, можно это дело также повесить на хоткеи. Т. к. я не знаю, как при запуске окно отправлять в конкретную группу -- при старте, чтобы окна не путались, использую только одну группу
# перерисовка текущего окна -- бывает, что некоторые окна болезненно реагируют на изменения размеров
bind on Mod4+f refresh
# создание группы с именем someone
bind on Mod4+Insert add someone
# удаление текущей или ближайшей из следующих группы с именем someone, все открытые в ней окна отправляются в следующую группу. Делаю так, потому, что не знаю, как удалять просто текущую группу без указания имени оной
bind on Mod4+Delete drop someone
# а вот так можно убрать рамку вокруг текущего фрейма, например. при просмотре фильма. Только я на знаю, как повесить переключатель включить/выключить рамку на 1 комбинацию, потому мспользую пару
bind on Mod4+b border on
bind on Mod4+Shift+b border off
# И, наконец, пример обьединения комманд. Данная строчка, если её раскоментировать, добавит в команду создания новой группы вызов команды, ограничивающей рабочую область, оставляя внизу полосу в 26 пикселей, напр., для панели
# hook ^add pad 0 0 0 26
# неудавшаяся попытка раскидывать окна по группам :-(
#load .musca_dump/work
#exec kazehakase file:///home/archer/Desktop/na_zapis_Uriel/Settings%20-%20Musca.htm
#exec kazehakase file:///home/archer/Desktop/na_zapis_Uriel/Commands%20-%20Musca.htm
----------------------------------------------------------------

За основу взят конфиг из ArchWiki на http://wiki.archlinux.org/index.php/Musca.
А теперь, собственно, критика и пожелания. По мере обнаружения. Первое – жаль, что хоткеями фреймы делятся только пополам (оч. нехватает комбинации вроде EMACSовского C-u для задания параметров, если кто подскажет рецепт – пишите) ; далее – по dmenu – нет так полюбившегося мне по zsh перебора TABом и автодополнения ключей и параметров (в т.ч. и пути к файлам) (надеюсь, что это настраиваемо). Также я не нашел, как раскидывать окна по группам при старте (внутри одной группы по фреймам они встают при загрузке файла-дампа этой группы) – окна запускаются с разной задержкой и все норовят влезть в текущую группу.
Еще, кажется, обнаружил пару небольших багов. Первый – делим группу на 4 равных фрейма, левый нижний, например, растягиваем немного вправо, правый верхний делим горизонтально, нижнюю часть – вертикально, нижний правый фрейм удаляем. По идеи, теперь фреймы должны заполнить пустое пространство, но вместо этого только правый нижний кусок правого верхнего изначального фрейма заполняет часть пространства, левый нижний же (изначальный) не изменился, и осталась незаполненная область. Теперь удаляем левую нижнюю часть правого верхнего изначального фрейма – опять только пустая, незаполняемая фреймами область! Удаляем оставшуюся верхнюю часть изначального левого верхнего фрейма – его оставшаяся правая нижняя часть заполняет часть пространства, но между ним и оставшимися левыми изначальными фреймами – пустая область, и переключиться теперь между фреймами штатными хоткеями не выйдет. Пути два – тыкать мышем, или ресайзить оставшиеся фреймы, чтобы те опять “сцепились”. Но это не есть нормально, и если кто знает лекарство от этого – буду очень благодарен. Если нет – пишите багрепорт, ибо ваш скромный слуга на буржуйском интернациональном не писатель. Второй баг также незначителен, но может доставлять некоторое неудобство. Пример – делим группу на 3 фрейма, 2 помечаем как dedicate и catchall соответственно, переходим на третий. Теперь переходим в stack режим и обратно. Все фреймы рисуются по умолчанию, без подсветки режима. Это может ввести в заблуждение, т. к. режимы по-прежниму включены – чтобы удостовериться, достаточно переключить фокус на неактивные фреймы – и те вновь подсветятся соответственно режимам. Думаю, об этом также стоит упомянуть в багрэпорте.
Ну, и, на последок, немного помечтаем. Во-первых, я не знаю, какое средство вывода информации сюда подойдёт (умолчательно все сообщения выводятся просто в stdout). Если есть идеи и варианты – буду рад услышать. Интересно было бы попробовать прикрутить conky или dzen как системный монитор, но отображать его только по нажатию соответствующего хоткея тонкой строчкой вверху или внизу – выводить дату/время, системный мониторинг, сюда же прикрутить какой-нибудь трэер (trayer или stalonetray) и средство визуализации раскиданных по группам окон. Обычно его называют пейджером и реализовывают в виде маленькой модели окошек в квадратиках воркспейсов. И правда, для пимпочкотыкательных интерфейсов что-то лучше того же ipager придумать сложно. Но я представляю себе это средство визуализации несколько иначе, благо это полность походит к musca. Хотелось бы видеть монитор в текстовом режиме, отображающий информацию примерно в следующем виде:
		*/term
		    +urxvt
		    -mirage
		   *+emacs
		 /work
		    +evince
		    -tkabber
		 /music
		    +snd
где / –перечисленые группы, в группах – окна, плюсами отмечены видимые во фреймах, * – означает текущее. Выводить можно в несколько строк во всплывающем меню, либо в ту же строку, экономя место, либо, для удобства восприятия – в отдельную строку (а по-хорошему, это должно задаваться опционально). Если бы это был еще и активный управляющий элемент (переименовывать группы, перетаскивать окна между ними, менять текущее и отображаемое) – было бы вообще здорово. Помимо того можно добавить сюда же следующий функционал – при при выборе одной из групп по нажатии ввода (или, как альтернативный вариант, тыканью мышем) – загружается и открывается для редактирования дамп текущей группы, по окончании редактирования, сделать возможность загрузить в musca сохранённый дамп, скорректировав текущую группу. Думаю, благодаря командной реализации musca, реалезовать всё это будет несложно, даже написанием простого скрипта. А вывести можно в тот же системный монитор или dmenu.

Также мне кажется неправильной связка с dmenu. Например, совместив функционал родного средства запуска программ dmemu shell с DmenFM (файловый менеджер – скрипт, работающий через dmenu), можно получить автодополнение/перебор имён файлов, как аргументов запускаемых программ – то, чего мне так не хватает после Ion3. Но переменная строки запуска dmenu инкапсулирована, и приходится настраивать такой запуск приложений независимо от Musca, отдельно настраивая параметры dmenu. Это не очень хорошо, и, надеюсь, этот архетектурный недочёт исправят.

И еще – уже просто пожелание – хотелось бы, чтобы указатель мыша следовал за фокусом окон, как в Ion3, а также исчезал при неактивности мыши, т. к. при работе только с клавиатуры – приходится изредка тянуться за мышем, чтобы только подвинуть его курсор :-)