|
Программирование
On-line приложения
Почитать
Web-сервер Apache
Печать и форматирование
MySQL
Разные рецепты
Сборка/установка
Редактор vi
Справки
Философия
Мой опыт
Скачать
Программы на Tcl/Tk (GUI)
Программы на Python/Tk (GUI)
Программы (CLI)
Help
Хобби
Фракталы
on-line
Язык для рисования фракталов
Гиперкуб
Теория относительности
Ампуллярии
Преподавание
Студенту/абитуриенту
Мой опыт
Автора!
|
Сборка evilwmevilwm — лучший оконный менеджерЗа десять лет использования X Window System я перепробовал множество оконных менеджеров. Под какими-то работал годами, какие-то просто попробовал на один зуб. И общее направление моей «эволюции» практически всегда шло к упрощению оформления рабочего стола. В конце концов, я фактически сделал свой собственный оконный менеджер. Сделан он из evilwm 0.99.25 (http://www.6809.org.uk/evilwm/). Привожу здесь две модификации: простую, и «продвинутую». Замечания относительно версии 1.0.0В июне 2007 года вышел evilwm 1.0.0. Я подготовил для него набор патчей, соответстующий «продвинутой» версии (см. ниже). evilwm-1.0.0.patch.tgz Патчи для простой модификации evilwmПатч для файла events.c: 128c128 < case KEY_LOWER: case KEY_ALTLOWER: --- > case KEY_LOWER: 130a131,133 > case KEY_RAISE: > XRaiseWindow(dpy, c->parent); > break; 139a143,145 > case KEY_MAXHEIG: > maximise_client(c, MAXIMISE_HORZ); > break; 141c147 < case KEY_FIX: --- > case KEY_FIX: case KEY_FIXA: 164,165d169 < case Button2: < sweep(c); break; 166a171,172 > sweep(c); break; > case Button2: Для файла keymap.h: 3a4,12 > /* девять цифровых кнопок -- движения и информация > альт-цифровая -- размер > право/лево -- переключение десктопов > вверх/вниз -- вверх/вниз > PgUp/PgDn -- растянуть вертикально/горизонтально > ins -- приклеить > end -- во весь экран > */ > 6,23c15,32 < #define KEY_TOPLEFT XK_y < #define KEY_TOPRIGHT XK_u < #define KEY_BOTTOMLEFT XK_b < #define KEY_BOTTOMRIGHT XK_n < #define KEY_LEFT XK_h < #define KEY_RIGHT XK_l < #define KEY_DOWN XK_j < #define KEY_UP XK_k < #define KEY_LOWER XK_Insert < #define KEY_ALTLOWER XK_KP_Insert < #define KEY_INFO XK_i < #define KEY_MAXVERT XK_equal < #define KEY_MAX XK_x < #ifdef VWM < # define KEY_FIX XK_f < # define KEY_PREVDESK XK_Left < # define KEY_NEXTDESK XK_Right < #endif --- > #define KEY_TOPLEFT XK_KP_Home > #define KEY_TOPRIGHT XK_KP_Page_Up > #define KEY_BOTTOMLEFT XK_KP_End > #define KEY_BOTTOMRIGHT XK_KP_Page_Down > #define KEY_LEFT XK_KP_Left > #define KEY_RIGHT XK_KP_Right > #define KEY_DOWN XK_KP_Down > #define KEY_UP XK_KP_Up > #define KEY_FIX XK_Insert > #define KEY_FIXA XK_KP_Insert > #define KEY_LOWER XK_Down > #define KEY_INFO XK_KP_Begin > #define KEY_RAISE XK_Up > #define KEY_MAX XK_End > #define KEY_MAXVERT XK_Page_Up > #define KEY_MAXHEIG XK_Page_Down > #define KEY_PREVDESK XK_Left > #define KEY_NEXTDESK XK_Right Для файла screen.c: 454c454,455 < KEY_LOWER, KEY_ALTLOWER, KEY_INFO, KEY_MAXVERT, KEY_MAX, --- > KEY_LOWER, KEY_RAISE, KEY_INFO, > KEY_MAX, KEY_MAXVERT, KEY_MAXHEIG, 456c457 < KEY_FIX, KEY_PREVDESK, KEY_NEXTDESK, --- > KEY_FIX, KEY_FIXA, KEY_PREVDESK, KEY_NEXTDESK, Накладываем патчи, и собираем.
Для запуска прописываем в /home/a/bin/evilwm \ -mask1 mod4 \ -mask2 mod4 \ -altmask alt \ -snap 10 \ -fg \#999900 -bg \#000000 -fc \#000000 & # ..другие команды После этого основной управляющей кнопкой становится кнопка с логотипом-окошком. Буду называть её win. Управление с клавиатуры (пользователям SithWM сочетания клавиш будут знакомы):
Используя клавиши на цифровой клавиатуре можно выполнить дополнительные операции:
Мышь:
Получается очень удобный оконный менеджер, которому не хватает только панели для запуска приложений (см. ниже). «Продвинутый» evilwmПоследний год я пользуюсь более «продвинутой» модификацией evilwm. Полный набор патчей можно забрать единым архивом evilwm-0.99.25.patch.tgz. Они накладываются сразу на несколько файлов одной командой: patch <evilwm-0.99.25.patch После этого, как всегда: make; make install Продвинутая версия отличается тем, что в ней 36 виртуальных
столов, они привязаны ко всем цифрам и ко всем буквам латинского
алфавита (удобно держать, скажем на столе «M» — почтового клиента,
на столе «W» — vnc-клиента с открытым Windows и так далее).
Стрелки переключают рабочие столы в том порядке, в каком расположены
клавиши на клавиатуре (если вам это не подходит, поправьте
массив Кроме того, на клавишу еnter запускается не xterm, а evilwm-xterm. Это может быть скрипт, который запустит для вас что угодно. Простая и удобная панелькаЯ написал вот такую простенькую панель на Tcl/Tk: #!/bin/sh
# the next line restarts using wish \
exec wish8.4 "$0" "$@"
set menu { {
{#ffffff} xterm xterm
{#8888ff} mc {xterm -e mc}
} {
{#ffff00} gimp gimp
{#999999} xmms xmms
} {
{#9999ff} FF firefox
{#9999ff} mail thunderbird
} }
set font {-*-verdana-bold-r-*-*-9-*-*-*-*-*-*-r}
proc next_time_step {} {
global time
set time [clock format [clock seconds] -format {%H:%M}]
after 1000 next_time_step
}
proc hide_all {} {
global bottons
foreach {n p} [eval concat $bottons] { grid forget $n }
}
proc show_panel {btn} {
global bottons
foreach {n p} [lindex $bottons $btn] {
grid $n -column $p -row 0 -sticky news
}
}
proc click {b} {
raise .
hide_all
show_panel $b
}
proc execute {cmd} {
if {[catch "exec $cmd {&}" err]} {
tk_messageBox -default ok -icon error -message $err \
-title error -type ok
}
}
proc menu2bottons {menu} {
global font
set bottons {}
set c 0
foreach {m} $menu {
set i 1
set b {}
foreach {clr lab cmd} $m {
set n [label .u$c -text $lab -fg $clr -bg {#000000} -font $font \
-padx 2 -pady 0 -anchor w -borderwidth 1 -relief raised]
bind $n <Button-1> [list execute $cmd]
lappend b $n $i
incr i
incr c
}
lappend bottons $b
}
return $bottons
}
set bottons [menu2bottons $menu]
set time {00:00}
set n [label .l -textvariable time -fg {#999999} -bg #000000 -font $font \
-padx 2 -pady 0 -anchor w -borderwidth 1 -relief raised]
bind $n <Button-1> {click 0}
bind $n <Button-2> {click 1}
bind $n <Button-3> {click 2}
grid $n -sticky news -column 0 -row 0
bind . <Control-q> {exit}
bind . <FocusOut> {hide_all}
wm title . {ctrl-panel}
wm transient .
wm resizable . 0 0
next_time_stepВ нераскрытом состоянии это просто кнопка с часами. При нажатии на кнопку, выезжает панель с кнопками для запуска различных приложений. На каждую из трёх кнопок мыши можно «повесить» своё меню. Меню настраиваются прямо в коде панели в первых строках. Формат очевиден: указывается цвет надписи, надпись на кнопке и приложение, ассоциированное с кнопкой. Обратите внимание на переменную Когда панель теряет фокус ввода — меню автоматически убирается. Спустя четыре годая забросил evilwm и вернулся на fvwm. Предлагаю конфигурационный файл для fvwm: # fvwm -cmd 'FvwmM4 /root/.fvwm/.fvwm2rc-m4'
############################################ M4 MACRO
define(`MOD_KEY', `4')
define(`MMOD_KEY', `4M')
define(`CMOD_KEY', `4C')
define(`Window', `WTSF124')
define(`WindowI', `WTSF124I')
define(`WinRotCond', `(CurrentPage !Iconic !Shaded !FvwmPager !xclock)')
define(`jumpmap', `ifelse(`$#', `0', ,
`$#', `1', ,
`$#', `2', ,
`
Key `$3' A MOD_KEY GotoPage `$1' `$2'
Key `$3' A CMOD_KEY GotoPage `$1' `$2'
Key `$3' A MMOD_KEY MoveAndGoToPage `$1' `$2'
jumpmap(shift(shift(shift($@))))')')
define(`RenewFunc', `
DestroyFunc `$1'
AddToFunc `$1'')
define(`RenewMenu', `
DestroyMenu `$1'
AddToMenu `$1'')
############################################ Functions
RenewFunc(StartFunction)
+ I Module FvwmBacker
RenewFunc(MoveAndGoToPage)
+ I Raise
+ I MoveToPage $0 $1
+ I GotoPage $0 $1
RenewFunc(RaiseAndMove)
+ I Raise
+ C Iconify false
+ M Move
+ D Stick
RenewFunc(SelectWindow)
+ I Focus
+ I Iconify false
+ I Raise
+ I WarpToWindow -5px -5px
RenewFunc(RaiseAndStick)
+ I Raise
+ I Stick
############################################ Menu
RenewMenu(RDesktop)
# ...
RenewMenu(Apps)
+ "Firefox" Exec exec firefox3
# ...
+ "Xfontsel" Exec exec xfontsel
RenewMenu(Util)
+ "Utilities" Title
+ "Xterm" Exec exec xterm
+ "Root" Exec exec xterm -bg \#330000 -e sudo bash
+ "Apps" Popup Apps
+ "RDesktop" Popup RDesktop
+ "Xkill" Exec exec xkill
+ "" Nop
+ "Exit" Popup Quit-Verify
RenewMenu(Quit-Verify)
+ "Really Quit Fvwm?" Title
+ "No, Don't Quit" Nop
+ "Restart" Restart --dont-preserve-state
+ "" Nop
+ "Yes, Really Quit" Quit
RenewMenu(Window-Ops)
+ "Maximize" Maximize
+ "Maximize vertical" Maximize 0 100
+ "Maximize horizontal" Maximize 100 0
+ "" Nop
+ "Iconify" Iconify on
+ "Stick" RaiseAndStick
+ "" Nop
+ "Close window" Close
+ "Destroy window" Destroy
############################################ Misc
DeskTopSize 10x3
EdgeResistance 10000 20 # 10000ms -- motion is impossible
EdgeScroll 100 100
SnapAttraction 10 SameType
IgnoreModifiers L25 # ignore caps-lock num-lock scroll-lock
############################################ Window Title
ButtonStyle 1 Vector 5 40x60@0 40x40@1 60x40@1 60x60@0 40x60@0
ButtonStyle 2 Vector 5 20x80@0 20x20@1 80x20@1 80x80@0 20x80@0
ButtonStyle 4 Vector 4 50x75@0 80x25@0 20x25@1 50x75@1
ButtonStyle 6 Vector 10 45x65@0 45x80@0 20x80@0 20x50@1 35x50@1 \
35x65@1 35x20@1 80x20@1 80x65@0 35x65@0
ButtonStyle 8 Vector 10 20x20@0 80x20@1 \
80x40@0 65x40@0 65x70@0 50x90@0 \
35x70@0 35x40@1 20x40@0 20x20@1
ButtonStyle 1 - Clear
ButtonStyle 2 - Clear MWMDecorMax
ButtonStyle 4 - Clear
ButtonStyle 6 - Clear
ButtonStyle 8 - Clear MwmDecorStick
############################################ Mouse
Mouse 0 1 A Menu Window-Ops Nop
Mouse 0 2 A Maximize
Mouse 0 4 A Iconify on
Mouse 0 6 A Resize
Mouse 0 8 A RaiseAndStick
Mouse 1 T A RaiseAndMove
Mouse 2 T A Lower
Mouse 3 T A RaiseLower
Mouse 1 R A Menu Util
Mouse 3 R A Menu Util
Mouse 2 R A Module FvwmPager -transient 0 0
Mouse 1 I A RaiseAndMove
Mouse 2 I A Iconify off
Mouse 3 I A Iconify off
Mouse 1 Window MOD_KEY RaiseAndMove
Mouse 2 Window MOD_KEY RaiseLower
Mouse 2 Window MMOD_KEY Iconify on
Mouse 3 Window MOD_KEY Resize
############################################ Hot Keys
Key Right A CMOD_KEY Next WinRotCond SelectWindow
Key period A MOD_KEY Next WinRotCond SelectWindow
Key Left A CMOD_KEY Prev WinRotCond SelectWindow
Key comma A MOD_KEY Prev WinRotCond SelectWindow
Key Up A MOD_KEY Raise
Key Down A MOD_KEY Lower
Key Right A MOD_KEY GotoPage +1p +0p
Key Left A MOD_KEY GotoPage -1p +0p
Key Up A CMOD_KEY GotoPage +0p -1p
Key Down A CMOD_KEY GotoPage +0p +1p
Key Right WindowI MMOD_KEY MoveAndGoToPage +1p +0p
Key Left WindowI MMOD_KEY MoveAndGoToPage -1p +0p
Key Up WindowI MMOD_KEY MoveAndGoToPage +0p -1p
Key Down WindowI MMOD_KEY MoveAndGoToPage +0p +1p
Key grave A MOD_KEY GotoPage prev
Key End Window MOD_KEY Maximize
Key Page_Up Window MOD_KEY Maximize 0 100
Key Page_Down Window MOD_KEY Maximize 100 0
Key Delete Window MOD_KEY Iconify on
Key Home WindowI MOD_KEY RaiseAndStick
Key Escape WindowI MOD_KEY Close
Key Return A MOD_KEY Popup Util
Key Space A MMOD_KEY Exec xlock -mode swarm
Key Tab Window MOD_KEY RaiseLower
jumpmap(
0, 0, 1,
1, 0, 2,
2, 0, 3,
3, 0, 4,
4, 0, 5,
5, 0, 6,
6, 0, 7,
7, 0, 8,
8, 0, 9,
9, 0, 0,
0, 1, q,
1, 1, w,
2, 1, e,
3, 1, r,
4, 1, t,
5, 1, y,
6, 1, u,
7, 1, i,
8, 1, o,
9, 1, p,
0, 2, a,
1, 2, s,
2, 2, d,
3, 2, f,
4, 2, g,
5, 2, z,
6, 2, x,
7, 2, c,
8, 2, v,
9, 2, b)
############################################ Styles
Style * \
BorderWidth 0, \
HandleWidth 5, \
Font "-*-helvetica-medium-r-*-*-8-*-*-*-*-*-koi8-r", \
IconFont "-*-helvetica-medium-r-*-*-12-*-*-*-*-*-koi8-r", \
MWMFunctions, \
MWMDecor, \
HintOverride, \
MWMBorder, \
MWMButtons, \
IconBox 200x800+0+0
Style xterm BorderWidth 0, HandleWidth 3, NoTitle, \
IconBox 200x800-0+0, IconFill Right Top
Style xclock BorderWidth 0, HandleWidth 0, NoTitle, Sticky
Style xmms NoTitle
Style FvwmPager NoTitle, Sticky, BorderWidth 0, HandleWidth 0
############################################ Misc2
*FvwmBacker: Command (Desk 0, Page * 0) -solid gray30
*FvwmBacker: Command (Desk 0, Page * 1) -solid gray20
*FvwmBacker: Command (Desk 0, Page * 2) -solid gray10
*FvwmPager: Geometry +0-0
*FvwmPager: DeskTopScale 128
*FvwmPager: Label * Pager
############################################
# EOF |
|
|
|