FluxBox (Вопрос/Ответ)
Модератор: Модераторы разделов
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Почему Fluxbox сам наводит порядок в файле init и достаточно неадекватно реагирует на ручное редактирование файла?.. Вплоть до игнорирования изменений, сделанных вручную?
Я уж не говорю о попытке оставить там русскоязычныые комментарии...
Я уж не говорю о попытке оставить там русскоязычныые комментарии...
-
- Сообщения: 594
Re: FluxBox
Помогите новичку во Fluxbox. Указываю цвет шрифта заголовка окна:
А он всё равно чёрный, хотя указан цвет, близкий к белому. Почему?
Код: Выделить всё
window.label.focus.textColor: #F0F0F0
А он всё равно чёрный, хотя указан цвет, близкий к белому. Почему?
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: FluxBox
Конктретней пожалуйста.
Только что поменял длину панели. Все отлично работает.
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
-
- Сообщения: 594
Re: FluxBox
awua писал(а): ↑12.03.2011 18:00Помогите новичку во Fluxbox. Указываю цвет шрифта заголовка окна:
Код: Выделить всё
window.label.focus.textColor: #F0F0F0
А он всё равно чёрный, хотя указан цвет, близкий к белому. Почему?
Нашёл причину. Надо было перезапустить Fluxbox, хотя я и сделал "reload config".
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Stauffenberg писал(а): ↑12.03.2011 18:23Конктретней пожалуйста.
Только что поменял длину панели. Все отлично работает.
Конкретней - меня задолбало выискивать нужные строчки в конфиге, я сел и написал конфиг вручную, пользуясь описанием ресурсов в man'е. После этого флюксу стало дурно, его поведение не соответствовало ни дефолтному, ни описанному в конфиге. Пришлось удалять файл init вообще, чтобы он сам заполнил его по своему разумению.
-
- Сообщения: 271
- ОС: Debian, Ubuntu, Mint
Re: FluxBox
новая особо не нужная функция обновлённого флукса
ну и нужные связки
флукс развивается
Код: Выделить всё
ChangeWorkspace :Exec fbsetbg ~/.fluxbox/backgrounds/bg$(xprop -root _NET_CURRENT_DESKTOP | awk '{print $3}').jpg
ну и нужные связки
Код: Выделить всё
Mod1 t :ExecCommand xterm
Mod4 t :If {Some Matches (xterm)} {NextWindow (xterm)} {Exec xterm}
Mod1 m Mod1 c :ExecCommand xterm -geometry 100x45+1+300 -e mc
Код: Выделить всё
Mod4 Tab :NextWindow
Mod1 Tab :NextWindow (workspace=[current])
флукс развивается
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: FluxBox
LOL
И виноват конечно же Fluxbox
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Пардоньте, а с каких пор текстовые Unix-конфиги нельзя писать целиком вручную?..
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: FluxBox
Может дело в том, что новый конфиг был составлен не так как надо?
Можно взглянуть?
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Да, конечно.
Код: Выделить всё
# Рабочие столы
# количество рабочих столов
session.screen0.workspaces: 2
# разрешать перетаскивать окна через край экрана
session.screen0.workspacewarping: True
# наименования рабочих столов
session.screen0.workspaceNames: one, two
# Тулбар
# автоскрытие
session.screen0.toolbar.autoHide: false
# слой
session.screen0.toolbar.layer: Dock
# положение
session.screen0.toolbar.placement: BottomCenter
# высота (определяется стилем)
session.screen0.toolbar.height: 0
# видимость
session.screen0.toolbar.visible: True
# ширина в процентах
session.screen0.toolbar.widthPercent: 70
# не давать окнам максимизироваться поверх тулбара
session.screen0.toolbar.maxOver: False
# содержимое тулбара
session.screen0.toolbar.tools: workspacename, iconbar, systemtray, clock
# формат даты
session.screen0.strftimeFormat: %I:%M %p
# Окна
# прозрачность активного и неактивного окон
session.screen0.window.focus.alpha: 255
session.screen0.window.unfocus.alpha: 190
# показывать координаты окна при перетаскивании
session.screen0.showwindowposition: True
# обрамление окна
session.screen0.defaultDeco: NORMAL
# кнопки в заголовке окна
session.titlebar.left: Stick Maximize Minimize
session.titlebar.right: Close
# при перемещении перетаскивать всё окно, иначе - только его рамку
session.screen0.opaqueMove: True
# расстояние, при котором окно "прилипает" к краю экрана
session.screen0.edgeSnapThreshold: 10
#
session.screen0.fullMaximization: False
#
session.ignoreBorder: False
# Модель фокусировки
# по нажатию
session.screen0.focusModel: ClickToFocus
# автоматически поднимать окно, получившее фокус
session.screen0.autoRaise: True
# передавать фокус окну при клике в любой его точке
session.screen0.clickRaises: True
# давать фокус новым окнам
session.screen0.focusNewWindows: True
# Iconbar
# фильтр отображаемых приложений
session.screen0.iconbar.mode: {static groups} (workspace)
# отображение иконок
session.screen0.iconbar.usePixmap: True
# пространство между заголовком окна и краем кнопки
session.screen0.iconbar.iconTextPadding: 10
# выравнивание кнопок; в данном случае заполняют iconbar целиком
session.screen0.iconbar.alignment: Relative
# Табы
# табы в заголовке
session.screen0.tabs.intitlebar: True
# интервал между вкладками
session.tabPadding: 10
# группировка окон в табы при перетаскивании окна в произвольноо место другого окна
session.tabsAttachArea: Window
# Другое
# объём кэша в Кб
session.cacheMax: 10000
# псевдопрозрачность
session.forcePseudoTransparency: False
# размещать новые окна под курсором
session.screen0.windowPlacement: UnderMousePlacement
# задержка открытия подменю
session.screen0.menuDelay: 50
#стиль
session.styleFile: /home/shau-kote/.fluxbox/styles/darkmatter
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Я могу смирится, стиснув зубы, что FluxBox стирает все мои комментарии из файла и перемешивает строчки по-своему.
Я вполне могу принять то, что FluxBox дописывает свои строчки в конфиг, хотя полагаю это неразумным и странным.
Но то, что он, несмотря на явное указание в конфиге, размещает кнопки "Свернуть" и "Развернуть" справа заголовка.
Или то, что с таким конфигом он какого-то чёрта при сменен темы рандомно меняет цвета надписей наперекор теме.
Неадекват, однако.
Я вполне могу принять то, что FluxBox дописывает свои строчки в конфиг, хотя полагаю это неразумным и странным.
Но то, что он, несмотря на явное указание в конфиге, размещает кнопки "Свернуть" и "Развернуть" справа заголовка.
Или то, что с таким конфигом он какого-то чёрта при сменен темы рандомно меняет цвета надписей наперекор теме.
Неадекват, однако.
-
- Сообщения: 271
- ОС: Debian, Ubuntu, Mint
Re: FluxBox
только что попробовал комментировать init. все комментарии сохраняются даже при рестарте Х.
с кнопками в заголовке тоже самое, что написал - то и есть.
у вас кроме флукса никаких кде и гномов не стоит?
с кнопками в заголовке тоже самое, что написал - то и есть.
у вас кроме флукса никаких кде и гномов не стоит?
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Неа. Ни KDE, ни GNOME, ни каких-то иных WM.
-
- Сообщения: 271
- ОС: Debian, Ubuntu, Mint
Re: FluxBox
а gconf-editor открывается?
desktop-gnome-shell-windows button_layout не перебивает?
desktop-gnome-shell-windows button_layout не перебивает?
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Нету такого. Этож вроде GNOME'овская программа, откуда она у меня в системе?..
-
- Сообщения: 176
- ОС: Debian GNU/Linux testing
Re: FluxBox
Возник вопрос в fluxbox установил xxkb, флажок отображается на всех окнах и плюс еще на панели инструментов. Как зделать так чтобы на панели инструментов не было флажка? И как добавить плюс к этому всему значек в трей. Вот скрин.
http://imageshack.us.local/f/525/mysc.png/
вот мой конфиг
http://imageshack.us.local/f/525/mysc.png/
вот мой конфиг
Код: Выделить всё
XXkb.image.path: /usr/share/xxkb
XXkb.group.base: 1
XXkb.group.alt: 2
XXkb.mainwindow.enable: no
XXkb.mainwindow.geometry: 48x48
XXkb.mainwindow.image.1: en48.xpm
XXkb.mainwindow.image.2: ru48.xpm
XXkb.mainwindow.image.3: su48.xpm
XXkb.mainwindow.image.4:
XXkb.mainwindow.label.font: -misc-*-r-*-20-*
XXkb.*.border.color: black
XXkb.*.border.width: 0
XXkb.*.label.foreground: white
XXkb.*.label.background: blue4
XXkb.*.label.enable: no
XXkb.mainwindow.type: tray
! possible values - normal, top, tray, wmaker
XXkb.button.enable: yes
XXkb.button.geometry: 15x15-60+2
XXkb.button.image.1: en15.xpm
XXkb.button.image.2: ru15.xpm
XXkb.button.image.3: su15.xpm
XXkb.button.image.4:
XXkb.button.label.font: -misc-*-r-*-13-*
XXkb.controls.add_when_start: yes
XXkb.controls.add_when_create: yes
XXkb.controls.add_when_change: no
XXkb.controls.focusout: no
XXkb.controls.two_state: yes
XXkb.controls.button_delete: yes
XXkb.controls.button_delete_and_forget: yes
XXkb.controls.mainwindow_delete: yes
XXkb.mousebutton.1.reverse: no
XXkb.mousebutton.3.reverse: no
XXkb.bell.enable: no
XXkb.bell.percent: -50
XXkb.ignore.reverse: no
-
- Сообщения: 71
- ОС: XP
Re: FluxBox
Недавно прочел что мол флюк для панели использует tint2, где это можно посмотреть? и если это так то где тинт хранит файлы своих конфигов, а то я его собрался отдельно ставить к флюку).
-
- Бывший модератор
- Сообщения: 3491
- Статус: ...
- ОС: OS X, GNU_и_не_только/Linux
Re: FluxBox
CmndrAlexGreen писал(а): ↑20.10.2011 22:57Недавно прочел что мол флюк для панели использует tint2, где это можно посмотреть?
У флюкса собственная встроенная панелька, содержимое ее настраивается через ~/.fluxbox/init . tint2 с флюксом никак не связан.
По конфигурацию же tint2 можно почитать здесь: http://code.google.com/p/tint2/wiki/Configure .
My god... it's full of stars!...
-
- Сообщения: 417
- Статус: злобный хоббит
- ОС: Arch
Re: FluxBox
Подскажите, можно ли как-нибудь сделать так, чтобы при переключение окон по Alt-Tab показывалось окошко со всеми имеющимися окнами? А то при большом количестве окон неудобно "вслепую" переключать. :/
-
- Сообщения: 176
- ОС: Debian GNU/Linux testing
Re: FluxBox
Кто-нибудь использует wicd во fluxbox??? Не могу добится чтобы иконка wicd отображалась в системном трее.
в
~.fluxbox/startup пишу
wicd-client &
но при загрузке окно wicd появляется на рабочем столе и в трее видна иконка, при закрытии окна пропадает и окно, и иконка в трее. В кде иконка в трее висела всегда и пропадала если на ней кликнуть правой кнопкой мыши и выбрать выход. Хотелось бы добится от fluxbox такого же поведения.
в
~.fluxbox/startup пишу
wicd-client &
но при загрузке окно wicd появляется на рабочем столе и в трее видна иконка, при закрытии окна пропадает и окно, и иконка в трее. В кде иконка в трее висела всегда и пропадала если на ней кликнуть правой кнопкой мыши и выбрать выход. Хотелось бы добится от fluxbox такого же поведения.
-
- Сообщения: 281
- ОС: mint
Re: FluxBox
RDV1984
Это не надо писать, wicd - daemon - он сам в Вашей сессии появится, если Вы при установке согласились добавить демона wicd-daemon для существующих пользователей. Обычно четырех пакетов хватает, что-бы wicd запустился нормально python-wicd wicd wicd-daemon wicd-gtk.
Как вариант - wicd - daemon не сработал с dbus, по причине того, что Вы не добавили для существующих пользователей.
Для Ubuntu 11.04 все вышеперечисленное работает.
ALL
Если интересно - для Fluxbox - генератор вменяемого меню с иконками или без таковых.
Или можно воспользоваться моим файлом, где добавлен claws-mail & wallpaper.
в ~.fluxbox/startup пишу wicd-client &
Это не надо писать, wicd - daemon - он сам в Вашей сессии появится, если Вы при установке согласились добавить демона wicd-daemon для существующих пользователей. Обычно четырех пакетов хватает, что-бы wicd запустился нормально python-wicd wicd wicd-daemon wicd-gtk.
Как вариант - wicd - daemon не сработал с dbus, по причине того, что Вы не добавили для существующих пользователей.
Для Ubuntu 11.04 все вышеперечисленное работает.
ALL
Если интересно - для Fluxbox - генератор вменяемого меню с иконками или без таковых.
Или можно воспользоваться моим файлом, где добавлен claws-mail & wallpaper.
Spoiler
#!/usr/bin/perl
# Copyright © 2011-2012 Trizen <echo dHJpemVueEBnbWFpbC5jb20K | base64 -d>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Fluxbox Menu Generator
# A simple menu generator for the Fluxbox Window Manager
# Should be installed in $PATH before the first execution!
# License: GPLv3
# Created on: 01 August 2010
# Latest edit on: 11 February 2012
# Website: http://trizen.googlecode.com
use strict;
use autouse qw(File::Find find);
my $pkgname = 'fbmenugen';
my $version = '0.7.1';
my $icons = 0;
my $generate_menu = 0;
my $reconfigure = 0;
our ($CONFIG, $SCHEMA);
my $home_dir = $ENV{HOME} // $ENV{LOGDIR} // (getpwuid($<))[7] // `echo -n ~`;
my $xdg_config_home =
exists $ENV{XDG_CONFIG_HOME}
? $ENV{XDG_CONFIG_HOME}
: $home_dir . '/.config';
my $config_dir = "$xdg_config_home/$pkgname";
my $icons_dir = "$config_dir/icons";
my $config_file = "$config_dir/configuration.pl";
my $menufile = "$home_dir/.fluxbox/menu";
my $icons_path;
if (-d $icons_dir) {
$icons_path = $icons_dir;
}
elsif (-d './icons') {
require Cwd;
$icons_path = Cwd::abs_path('./icons');
}
else {
$icons_path = "/usr/share/$pkgname/icons";
}
unless (-e $config_dir) {
require File::Path;
File::Path::make_path($config_dir)
or die "Unable to create $config_dir: $!\n";
}
if (not -e $config_file or $reconfigure) {
open my $config_fh, '>', $config_file
or die "Unable to open for write $config_file: $!\n";
print {$config_fh} <<'CONFIG_FILE';
#!/usr/bin/perl
# fbmenugen config file
#
# SCHEMA supports the following keys: item, cat, config, exit, fluxbox, regenerate, raw, sep
#
# Posible values for each of this types are:
# For 'item': [COMMAND, NAME, ICON]
# For 'sep': undef - horizontal separator
# For 'cat': Any of the posible categories. 'cat => [CATEGORY, NAME, IMAGE]' - image is optional
# For 'raw': [COMMAND, NAME, ICON]
# Example: {raw => ' [exec] (Geeqie) {geeqie -r } </usr/share/pixmaps/geeqie.png>'},
# NOTE:
# * Keys and values are case sensitive. Keep all keys lowercase.
# * Category names are case insensitive. (ex: 'X-XFCE' is equivalent to 'x_xfce')
my %items = (
terminal => 'lxterminal',
editor => 'geany',
file_manager => 'pcmanfm',
web_browser => 'firefox',
mail_news => 'claws-mail',
instant_messaging => 'pidgin',
run_command => 'fbrun',
lock_command => 'xscreensaver-command -lock',
);
our $CONFIG = {
# Desktop files paths
desktop_files_paths => ['/usr/share/applications'],
# When 'Terminal=true'
open_in_terminal => "$items{terminal} -e %s",
# Editor command
open_in_editor => "$items{editor}",
# Menu title
title => 'Fluxbox',
};
our $SCHEMA = [
{item => [$items{file_manager}, 'File Manager', 'file-manager']},
{item => [$items{terminal}, 'Terminal', 'terminal']},
{item => [$items{editor}, 'Editor', 'text-editor']},
{item => [$items{web_browser}, 'Web Browser', 'web-browser']},
{item => [$items{mail_news}, 'Mail & News', 'mail_news']},
{item => [$items{run_command}, 'Run command', 'system-run']},
{item => [$items{instant_messaging}, 'Instant messaging', 'system-users']},
{item => [$items{lock_command}, 'Lock display', 'lock']},
{sep => undef},
{cat => ['utility', 'Accessories']},
{cat => ['development', 'Development']},
{cat => ['education', 'Education']},
{cat => ['games', 'Games']},
{cat => ['graphics', 'Graphics']},
{cat => ['audiovideo', 'Multimedia']},
{cat => ['network', 'Network']},
{cat => ['office', 'Office']},
{cat => ['settings', 'Settings']},
{cat => ['system', 'System']},
#{cat => ['qt', 'QT Applications']},
#{cat => ['gtk', 'GTK Applications']},
#{cat => ['x_xfce', 'XFCE Applications']},
#{cat => ['gnome', 'GNOME Applications']},
#{cat => ['consoleonly', 'CLI Applications']},
{config => 'Configure menu'},
{fluxbox => 'Fluxbox menu'},
{sep => undef},
{regenerate => 'Regenerate'},
{exit => 'Quit'},
];
CONFIG_FILE
close $config_fh;
}
foreach my $arg (@ARGV) {
if ($arg eq '-i') {
$icons = 1;
}
elsif ($arg eq '-g') {
$generate_menu = 1;
}
elsif ($arg eq '-r') {
$reconfigure = 1;
}
elsif ($arg eq '-v') {
print "$pkgname $version\n";
exit;
}
elsif ($arg =~ /^-+(?:h|help|usage|\?)$/) {
help();
}
}
if (-d "/usr/share/$pkgname/icons") {
if (not -d $icons_dir) {
mkdir $icons_dir or warn "(x_x) Unable to create dir: $icons_dir\n";
}
if (opendir(my $dir_h, "/usr/share/$pkgname/icons")) {
while (defined(my $filename = readdir $dir_h)) {
if ($filename ~~ [q{.}, q{..}]) { next }
next if -e "$icons_dir/$filename";
require File::Copy;
File::Copy::copy("/usr/share/$pkgname/icons/$filename", $icons_dir)
or warn "Unable to copy $filename: $!";
}
closedir $dir_h;
}
}
sub help {
print <<"HELP";
usage: $0 [options]\n
options :
-g : (re)generate a simple menu
-i : (re)generate a menu with icons
-r : rewrite the configuration file
* Menu : $menufile
* Icons : $icons_path
* Config : $config_file\n
HELP
exit;
}
help() unless @ARGV;
my @desktop_files;
sub push_more {
opendir(my $dir_h, $_[0]) or return;
while (defined(my $file = readdir $dir_h)) {
push @desktop_files, "$_[0]/$file" if substr($file, -8) eq '.desktop';
}
closedir $dir_h;
}
do $config_file; # load config
foreach my $dir (@{$CONFIG->{desktop_files_paths}}) {
opendir(my $dir_h, $dir);
while (defined(my $file = readdir $dir_h)) {
push @desktop_files, "$dir/$file" and next if substr($file, -8) eq '.desktop';
if ($file ~~ [q{.}, q{..}]) { next }
push_more("$dir/$file") if -d "$dir/$file";
}
closedir $dir_h;
}
unless (-e "$menufile.backup") {
if (-e $menufile) {
print "\n* Creating backup of menu at: $menufile.backup\n";
rename $menufile, "$menufile.backup" or warn "[!] Unable to rename menu to menu.backup: $!\n";
}
else {
warn "\n[!] Unable to find: $menufile\n";
}
}
my $icon_theme;
my $gtk_rc = "$home_dir/.gtkrc-2.0";
if (-r $gtk_rc) {
if (open my $gtkrc_fh, '<', $gtk_rc) {
while (defined(my $line = <$gtkrc_fh>)) {
if ($line =~ /^\s*gtk-icon-theme-name=["']?([^'"\r\n]+)/i) {
$icon_theme = $1;
last;
}
}
close $gtkrc_fh;
}
}
my ($generated_menu, @generated_menu, %icons, @locate, $icon_file);
if ($generate_menu or $icons) {
print "\n* Generating menu...\n";
generate_menu();
}
sub store_icons {
s/\.\w{3}$// or return;
return 1 if exists $icons{$_};
$icons{$_} = $File::Find::name;
return 1;
}
sub look_for_icons {
my ($icon_name) = @_;
if (defined $icon_name) {
$icon_name = unpack('A*', $icon_name);
}
if (length $icon_name) {
if (chr ord $icon_name eq '/') {
return $icon_name if -f $icon_name;
}
else {
$icon_name =~ s/\.\w{3}$//;
}
}
else {
return '';
}
return $icons{$icon_name} if exists $icons{$icon_name};
if ($icons and not keys %icons) {
my $personal_theme;
if (-d "/usr/share/icons/$icon_theme/") {
$personal_theme = "/usr/share/icons/$icon_theme/";
}
elsif (-d "$home_dir/.icons/$icon_theme/") {
$personal_theme = "$ENV{'HOME'}/.icons/$icon_theme/";
}
elsif (-d "$home_dir/.local/share/icons/$icon_theme/") {
$personal_theme = "$home_dir/.local/share/icons/$icon_theme/";
}
if (defined $icon_theme) {
if (defined $personal_theme) {
find(\&store_icons, $personal_theme);
}
find(
\&store_icons,
grep { -d }
('/usr/share/pixmaps/', '/usr/share/icons/hicolor/', "$home_dir/.local/share/icons", "$home_dir/.icons/")
);
if (-d '/usr/share/icons/gnome/' and not $icon_theme =~ /^gnome$/i) {
find(\&store_icons, '/usr/share/icons/gnome/');
}
}
else {
find(
\&store_icons,
grep { -d } (
'/usr/share/icons/hicolor/', '/usr/share/pixmaps/',
"$home_dir/.local/share/icons", "$home_dir/.icons/",
'/usr/share/icons/'
)
);
}
}
return $icons{$icon_name} // '';
}
sub add_item {
my ($command, $name, $icon) = @_;
$icon = look_for_icons($icon) unless -f $icon;
$name =~ s/\)/\\)/g;
$command =~ s/\}/\\}/g;
$generated_menu .= " [exec] ($name) {$command} <$icon>\n";
return 1;
}
sub push_app {
my ($array_ref, $cat_id, $cat_name, $icon) = @_;
if ($icons) {
$icon //= $cat_id;
$icon =
-f "$icons_dir/$icon.png" ? "$icons_dir/$icon.png"
: -f "$icons_dir/$cat_id.png" ? "$icons_dir/$cat_id.png"
: look_for_icons($icon);
}
$icon //= '';
$generated_menu .= qq[\n[submenu] ($cat_name) <$icon>\n];
$generated_menu .= join(
'',
(
sort { lc $a cmp lc $b }
map {
$_->[0] =~ s/\)/\\)/g;
$_->[1] =~ s/\}/\\}/g;
$_->[2] //= $icon;
qq[ [exec] ($_->[0]) {$_->[1]} <$_->[2]>\n];
} @{$array_ref}
)
);
$generated_menu .= "[end]\n";
return 1;
}
sub generate_menu {
my $date = localtime time;
$generated_menu = <<"HEADER";
# Fluxbox Right-Click Menu - Config file
# Generated on $date
# Generated with $pkgname (Fluxbox Menu Generator) v$version\n
[begin] ($CONFIG->{title})
[encoding] {UTF-8}
HEADER
my (@config_menu) = (
[q[Edit fluxbox's startup file], "$CONFIG->{open_in_editor} $ENV{'HOME'}/.fluxbox/startup"],
[q[Edit fluxbox's init file], "$CONFIG->{open_in_editor} $ENV{'HOME'}/.fluxbox/init"],
[q[Edit fluxbox's keys file], "$CONFIG->{open_in_editor} $ENV{'HOME'}/.fluxbox/keys"],
["Edit ${pkgname}'s menu", "$CONFIG->{open_in_editor} $menufile"],
["Edit ${pkgname}'s config", "$CONFIG->{open_in_editor} $config_file"],
);
my %categories;
foreach my $category (@$SCHEMA) {
next unless exists $category->{cat};
my $cat = lc $category->{cat}[0];
$cat =~ tr/_a-z/_/c;
$categories{$cat} = ();
$category->{cat}[0] = $cat;
}
my $desktop_fh;
foreach my $desktop_file (@desktop_files) {
my $file;
sysopen $desktop_fh, $desktop_file, 0;
sysread $desktop_fh, $file, -s $desktop_file;
next if index($file, "\nNoDisplay=true") != -1;
foreach my $category (
split(
';',
do { $file =~ /\nCategories=(.+)/ || next; lc $1 }
)
) {
$category =~ tr/_a-z/_/c;
next unless exists $categories{$category};
my ($execname) = $file =~ /\nExec=([^%\n]+)/;
if (index($file, "\nTerminal=true") != -1) {
$execname = sprintf($CONFIG->{open_in_terminal}, $execname);
}
my ($name) = $file =~ /\nName=(.+)/;
my $icon = '';
if ($icons) {
($icon) = $file =~ /\nIcon=(.+)/;
$icon = look_for_icons($icon);
}
push @{$categories{$category}}, [$name, $execname, $icon];
}
}
close $desktop_fh;
foreach my $schema (@$SCHEMA) {
if (exists $schema->{cat}) {
next unless defined $categories{$schema->{cat}[0]};
next unless @{$categories{$schema->{cat}[0]}};
push_app(\@{$categories{$schema->{cat}[0]}}, $schema->{cat}[0], $schema->{cat}[1], $schema->{cat}[2]);
@{$categories{$schema->{cat}[0]}} = ();
}
elsif (exists $schema->{item}) {
add_item(@{$schema->{item}});
}
elsif (exists $schema->{config}) {
push_app(\@config_menu, 'config', $schema->{config});
}
elsif (exists $schema->{exit}) {
$generated_menu .= $icons ? "[exit] ($schema->{exit}) <$icons_path/exit.png>\n" : "[exit] (Exit)\n";
}
elsif (exists $schema->{sep}) {
$generated_menu .= "[separator]\n";
}
elsif (exists $schema->{regenerate}) {
require Cwd;
my $regenerate_exec = "$^X " . Cwd::abs_path($0);
$regenerate_exec .= $icons ? ' -i' : ' -g';
$generated_menu .= "[exec] ($schema->{regenerate}) {";
if ($icons) {
$generated_menu .= "$regenerate_exec} <$icons_path/regenerate.png>\n";
}
else {
$generated_menu .= "$regenerate_exec}\n";
}
}
elsif (exists $schema->{raw}) {
$generated_menu .= "$schema->{raw}\n";
}
elsif (exists $schema->{fluxbox}) {
$generated_menu .=
$icons
? "[submenu] ($schema->{fluxbox}) <$icons_dir/fluxbox.png>\n"
: "[submenu] ($schema->{fluxbox})\n";
$generated_menu .= <<"FOOTER";
[config] (Configure)
[submenu] (System Styles) {Choose a style...}
[stylesdir] (/usr/share/fluxbox/styles)
[end]
[submenu] (User Styles) {Choose a style...}
[stylesdir] (~/.fluxbox/styles)
[end]
[workspaces] (Workspace List)
#[submenu] (Tools)
# [exec] (Screenshot - JPG) {import screenshot.jpg && display -resize 50% screenshot.jpg}
# [exec] (Screenshot - PNG) {import screenshot.png && display -resize 50% screenshot.png}
# [exec] (Run) {fbrun}
# [exec] (Regen Menu) {fluxbox-generate_menu}
#[end]
[submenu] (Window Managers)
[restart] (openbox) {openbox}
[end]
# [commanddialog] (Fluxbox Command)
[submenu] (Wallpaper)
[wallpapers] (/usr/share/backgrounds/) {feh --bg-scale}
[end]
[reconfig] (Reload config)
[restart] (Restart)
# [exec] (About) {(fluxbox -v; fluxbox -info | sed 1d) | xmessage -file - -center}
[separator]
[exit] (Exit)
[end]
FOOTER
}
}
$generated_menu .= "\n[endencoding]\n[end]\n";
open my $menu_fh, '>', $menufile or die "\nCannot open $menufile for write: $!\n";
print {$menu_fh} $generated_menu;
close $menu_fh;
print "\n* Menu successfully generated !\n\n";
exit 0;
}
# Copyright © 2011-2012 Trizen <echo dHJpemVueEBnbWFpbC5jb20K | base64 -d>.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Fluxbox Menu Generator
# A simple menu generator for the Fluxbox Window Manager
# Should be installed in $PATH before the first execution!
# License: GPLv3
# Created on: 01 August 2010
# Latest edit on: 11 February 2012
# Website: http://trizen.googlecode.com
use strict;
use autouse qw(File::Find find);
my $pkgname = 'fbmenugen';
my $version = '0.7.1';
my $icons = 0;
my $generate_menu = 0;
my $reconfigure = 0;
our ($CONFIG, $SCHEMA);
my $home_dir = $ENV{HOME} // $ENV{LOGDIR} // (getpwuid($<))[7] // `echo -n ~`;
my $xdg_config_home =
exists $ENV{XDG_CONFIG_HOME}
? $ENV{XDG_CONFIG_HOME}
: $home_dir . '/.config';
my $config_dir = "$xdg_config_home/$pkgname";
my $icons_dir = "$config_dir/icons";
my $config_file = "$config_dir/configuration.pl";
my $menufile = "$home_dir/.fluxbox/menu";
my $icons_path;
if (-d $icons_dir) {
$icons_path = $icons_dir;
}
elsif (-d './icons') {
require Cwd;
$icons_path = Cwd::abs_path('./icons');
}
else {
$icons_path = "/usr/share/$pkgname/icons";
}
unless (-e $config_dir) {
require File::Path;
File::Path::make_path($config_dir)
or die "Unable to create $config_dir: $!\n";
}
if (not -e $config_file or $reconfigure) {
open my $config_fh, '>', $config_file
or die "Unable to open for write $config_file: $!\n";
print {$config_fh} <<'CONFIG_FILE';
#!/usr/bin/perl
# fbmenugen config file
#
# SCHEMA supports the following keys: item, cat, config, exit, fluxbox, regenerate, raw, sep
#
# Posible values for each of this types are:
# For 'item': [COMMAND, NAME, ICON]
# For 'sep': undef - horizontal separator
# For 'cat': Any of the posible categories. 'cat => [CATEGORY, NAME, IMAGE]' - image is optional
# For 'raw': [COMMAND, NAME, ICON]
# Example: {raw => ' [exec] (Geeqie) {geeqie -r } </usr/share/pixmaps/geeqie.png>'},
# NOTE:
# * Keys and values are case sensitive. Keep all keys lowercase.
# * Category names are case insensitive. (ex: 'X-XFCE' is equivalent to 'x_xfce')
my %items = (
terminal => 'lxterminal',
editor => 'geany',
file_manager => 'pcmanfm',
web_browser => 'firefox',
mail_news => 'claws-mail',
instant_messaging => 'pidgin',
run_command => 'fbrun',
lock_command => 'xscreensaver-command -lock',
);
our $CONFIG = {
# Desktop files paths
desktop_files_paths => ['/usr/share/applications'],
# When 'Terminal=true'
open_in_terminal => "$items{terminal} -e %s",
# Editor command
open_in_editor => "$items{editor}",
# Menu title
title => 'Fluxbox',
};
our $SCHEMA = [
{item => [$items{file_manager}, 'File Manager', 'file-manager']},
{item => [$items{terminal}, 'Terminal', 'terminal']},
{item => [$items{editor}, 'Editor', 'text-editor']},
{item => [$items{web_browser}, 'Web Browser', 'web-browser']},
{item => [$items{mail_news}, 'Mail & News', 'mail_news']},
{item => [$items{run_command}, 'Run command', 'system-run']},
{item => [$items{instant_messaging}, 'Instant messaging', 'system-users']},
{item => [$items{lock_command}, 'Lock display', 'lock']},
{sep => undef},
{cat => ['utility', 'Accessories']},
{cat => ['development', 'Development']},
{cat => ['education', 'Education']},
{cat => ['games', 'Games']},
{cat => ['graphics', 'Graphics']},
{cat => ['audiovideo', 'Multimedia']},
{cat => ['network', 'Network']},
{cat => ['office', 'Office']},
{cat => ['settings', 'Settings']},
{cat => ['system', 'System']},
#{cat => ['qt', 'QT Applications']},
#{cat => ['gtk', 'GTK Applications']},
#{cat => ['x_xfce', 'XFCE Applications']},
#{cat => ['gnome', 'GNOME Applications']},
#{cat => ['consoleonly', 'CLI Applications']},
{config => 'Configure menu'},
{fluxbox => 'Fluxbox menu'},
{sep => undef},
{regenerate => 'Regenerate'},
{exit => 'Quit'},
];
CONFIG_FILE
close $config_fh;
}
foreach my $arg (@ARGV) {
if ($arg eq '-i') {
$icons = 1;
}
elsif ($arg eq '-g') {
$generate_menu = 1;
}
elsif ($arg eq '-r') {
$reconfigure = 1;
}
elsif ($arg eq '-v') {
print "$pkgname $version\n";
exit;
}
elsif ($arg =~ /^-+(?:h|help|usage|\?)$/) {
help();
}
}
if (-d "/usr/share/$pkgname/icons") {
if (not -d $icons_dir) {
mkdir $icons_dir or warn "(x_x) Unable to create dir: $icons_dir\n";
}
if (opendir(my $dir_h, "/usr/share/$pkgname/icons")) {
while (defined(my $filename = readdir $dir_h)) {
if ($filename ~~ [q{.}, q{..}]) { next }
next if -e "$icons_dir/$filename";
require File::Copy;
File::Copy::copy("/usr/share/$pkgname/icons/$filename", $icons_dir)
or warn "Unable to copy $filename: $!";
}
closedir $dir_h;
}
}
sub help {
print <<"HELP";
usage: $0 [options]\n
options :
-g : (re)generate a simple menu
-i : (re)generate a menu with icons
-r : rewrite the configuration file
* Menu : $menufile
* Icons : $icons_path
* Config : $config_file\n
HELP
exit;
}
help() unless @ARGV;
my @desktop_files;
sub push_more {
opendir(my $dir_h, $_[0]) or return;
while (defined(my $file = readdir $dir_h)) {
push @desktop_files, "$_[0]/$file" if substr($file, -8) eq '.desktop';
}
closedir $dir_h;
}
do $config_file; # load config
foreach my $dir (@{$CONFIG->{desktop_files_paths}}) {
opendir(my $dir_h, $dir);
while (defined(my $file = readdir $dir_h)) {
push @desktop_files, "$dir/$file" and next if substr($file, -8) eq '.desktop';
if ($file ~~ [q{.}, q{..}]) { next }
push_more("$dir/$file") if -d "$dir/$file";
}
closedir $dir_h;
}
unless (-e "$menufile.backup") {
if (-e $menufile) {
print "\n* Creating backup of menu at: $menufile.backup\n";
rename $menufile, "$menufile.backup" or warn "[!] Unable to rename menu to menu.backup: $!\n";
}
else {
warn "\n[!] Unable to find: $menufile\n";
}
}
my $icon_theme;
my $gtk_rc = "$home_dir/.gtkrc-2.0";
if (-r $gtk_rc) {
if (open my $gtkrc_fh, '<', $gtk_rc) {
while (defined(my $line = <$gtkrc_fh>)) {
if ($line =~ /^\s*gtk-icon-theme-name=["']?([^'"\r\n]+)/i) {
$icon_theme = $1;
last;
}
}
close $gtkrc_fh;
}
}
my ($generated_menu, @generated_menu, %icons, @locate, $icon_file);
if ($generate_menu or $icons) {
print "\n* Generating menu...\n";
generate_menu();
}
sub store_icons {
s/\.\w{3}$// or return;
return 1 if exists $icons{$_};
$icons{$_} = $File::Find::name;
return 1;
}
sub look_for_icons {
my ($icon_name) = @_;
if (defined $icon_name) {
$icon_name = unpack('A*', $icon_name);
}
if (length $icon_name) {
if (chr ord $icon_name eq '/') {
return $icon_name if -f $icon_name;
}
else {
$icon_name =~ s/\.\w{3}$//;
}
}
else {
return '';
}
return $icons{$icon_name} if exists $icons{$icon_name};
if ($icons and not keys %icons) {
my $personal_theme;
if (-d "/usr/share/icons/$icon_theme/") {
$personal_theme = "/usr/share/icons/$icon_theme/";
}
elsif (-d "$home_dir/.icons/$icon_theme/") {
$personal_theme = "$ENV{'HOME'}/.icons/$icon_theme/";
}
elsif (-d "$home_dir/.local/share/icons/$icon_theme/") {
$personal_theme = "$home_dir/.local/share/icons/$icon_theme/";
}
if (defined $icon_theme) {
if (defined $personal_theme) {
find(\&store_icons, $personal_theme);
}
find(
\&store_icons,
grep { -d }
('/usr/share/pixmaps/', '/usr/share/icons/hicolor/', "$home_dir/.local/share/icons", "$home_dir/.icons/")
);
if (-d '/usr/share/icons/gnome/' and not $icon_theme =~ /^gnome$/i) {
find(\&store_icons, '/usr/share/icons/gnome/');
}
}
else {
find(
\&store_icons,
grep { -d } (
'/usr/share/icons/hicolor/', '/usr/share/pixmaps/',
"$home_dir/.local/share/icons", "$home_dir/.icons/",
'/usr/share/icons/'
)
);
}
}
return $icons{$icon_name} // '';
}
sub add_item {
my ($command, $name, $icon) = @_;
$icon = look_for_icons($icon) unless -f $icon;
$name =~ s/\)/\\)/g;
$command =~ s/\}/\\}/g;
$generated_menu .= " [exec] ($name) {$command} <$icon>\n";
return 1;
}
sub push_app {
my ($array_ref, $cat_id, $cat_name, $icon) = @_;
if ($icons) {
$icon //= $cat_id;
$icon =
-f "$icons_dir/$icon.png" ? "$icons_dir/$icon.png"
: -f "$icons_dir/$cat_id.png" ? "$icons_dir/$cat_id.png"
: look_for_icons($icon);
}
$icon //= '';
$generated_menu .= qq[\n[submenu] ($cat_name) <$icon>\n];
$generated_menu .= join(
'',
(
sort { lc $a cmp lc $b }
map {
$_->[0] =~ s/\)/\\)/g;
$_->[1] =~ s/\}/\\}/g;
$_->[2] //= $icon;
qq[ [exec] ($_->[0]) {$_->[1]} <$_->[2]>\n];
} @{$array_ref}
)
);
$generated_menu .= "[end]\n";
return 1;
}
sub generate_menu {
my $date = localtime time;
$generated_menu = <<"HEADER";
# Fluxbox Right-Click Menu - Config file
# Generated on $date
# Generated with $pkgname (Fluxbox Menu Generator) v$version\n
[begin] ($CONFIG->{title})
[encoding] {UTF-8}
HEADER
my (@config_menu) = (
[q[Edit fluxbox's startup file], "$CONFIG->{open_in_editor} $ENV{'HOME'}/.fluxbox/startup"],
[q[Edit fluxbox's init file], "$CONFIG->{open_in_editor} $ENV{'HOME'}/.fluxbox/init"],
[q[Edit fluxbox's keys file], "$CONFIG->{open_in_editor} $ENV{'HOME'}/.fluxbox/keys"],
["Edit ${pkgname}'s menu", "$CONFIG->{open_in_editor} $menufile"],
["Edit ${pkgname}'s config", "$CONFIG->{open_in_editor} $config_file"],
);
my %categories;
foreach my $category (@$SCHEMA) {
next unless exists $category->{cat};
my $cat = lc $category->{cat}[0];
$cat =~ tr/_a-z/_/c;
$categories{$cat} = ();
$category->{cat}[0] = $cat;
}
my $desktop_fh;
foreach my $desktop_file (@desktop_files) {
my $file;
sysopen $desktop_fh, $desktop_file, 0;
sysread $desktop_fh, $file, -s $desktop_file;
next if index($file, "\nNoDisplay=true") != -1;
foreach my $category (
split(
';',
do { $file =~ /\nCategories=(.+)/ || next; lc $1 }
)
) {
$category =~ tr/_a-z/_/c;
next unless exists $categories{$category};
my ($execname) = $file =~ /\nExec=([^%\n]+)/;
if (index($file, "\nTerminal=true") != -1) {
$execname = sprintf($CONFIG->{open_in_terminal}, $execname);
}
my ($name) = $file =~ /\nName=(.+)/;
my $icon = '';
if ($icons) {
($icon) = $file =~ /\nIcon=(.+)/;
$icon = look_for_icons($icon);
}
push @{$categories{$category}}, [$name, $execname, $icon];
}
}
close $desktop_fh;
foreach my $schema (@$SCHEMA) {
if (exists $schema->{cat}) {
next unless defined $categories{$schema->{cat}[0]};
next unless @{$categories{$schema->{cat}[0]}};
push_app(\@{$categories{$schema->{cat}[0]}}, $schema->{cat}[0], $schema->{cat}[1], $schema->{cat}[2]);
@{$categories{$schema->{cat}[0]}} = ();
}
elsif (exists $schema->{item}) {
add_item(@{$schema->{item}});
}
elsif (exists $schema->{config}) {
push_app(\@config_menu, 'config', $schema->{config});
}
elsif (exists $schema->{exit}) {
$generated_menu .= $icons ? "[exit] ($schema->{exit}) <$icons_path/exit.png>\n" : "[exit] (Exit)\n";
}
elsif (exists $schema->{sep}) {
$generated_menu .= "[separator]\n";
}
elsif (exists $schema->{regenerate}) {
require Cwd;
my $regenerate_exec = "$^X " . Cwd::abs_path($0);
$regenerate_exec .= $icons ? ' -i' : ' -g';
$generated_menu .= "[exec] ($schema->{regenerate}) {";
if ($icons) {
$generated_menu .= "$regenerate_exec} <$icons_path/regenerate.png>\n";
}
else {
$generated_menu .= "$regenerate_exec}\n";
}
}
elsif (exists $schema->{raw}) {
$generated_menu .= "$schema->{raw}\n";
}
elsif (exists $schema->{fluxbox}) {
$generated_menu .=
$icons
? "[submenu] ($schema->{fluxbox}) <$icons_dir/fluxbox.png>\n"
: "[submenu] ($schema->{fluxbox})\n";
$generated_menu .= <<"FOOTER";
[config] (Configure)
[submenu] (System Styles) {Choose a style...}
[stylesdir] (/usr/share/fluxbox/styles)
[end]
[submenu] (User Styles) {Choose a style...}
[stylesdir] (~/.fluxbox/styles)
[end]
[workspaces] (Workspace List)
#[submenu] (Tools)
# [exec] (Screenshot - JPG) {import screenshot.jpg && display -resize 50% screenshot.jpg}
# [exec] (Screenshot - PNG) {import screenshot.png && display -resize 50% screenshot.png}
# [exec] (Run) {fbrun}
# [exec] (Regen Menu) {fluxbox-generate_menu}
#[end]
[submenu] (Window Managers)
[restart] (openbox) {openbox}
[end]
# [commanddialog] (Fluxbox Command)
[submenu] (Wallpaper)
[wallpapers] (/usr/share/backgrounds/) {feh --bg-scale}
[end]
[reconfig] (Reload config)
[restart] (Restart)
# [exec] (About) {(fluxbox -v; fluxbox -info | sed 1d) | xmessage -file - -center}
[separator]
[exit] (Exit)
[end]
FOOTER
}
}
$generated_menu .= "\n[endencoding]\n[end]\n";
open my $menu_fh, '>', $menufile or die "\nCannot open $menufile for write: $!\n";
print {$menu_fh} $generated_menu;
close $menu_fh;
print "\n* Menu successfully generated !\n\n";
exit 0;
}
-
- Сообщения: 147
- ОС: Windows,Linux,BSD
Re: FluxBox
как именуется параметр, с помощью которого задается цвет шрифта активного\неактивного таба окна(имеется ввиду таба окна в панели)
-
- Сообщения: 620
- ОС: Debian GNU/Linux
Re: FluxBox
Как сделать, чтобы тулбар не отбрасывал тень на окна с запущенным xcompmgr?
-
- Сообщения: 164
- ОС: разные
Re: FluxBox
Давненько не юзал флюкс, может подскажет кто — есть ли возможность отследить какое приложение задает фон рабочего стола, а то в ~/.fluxbox/startup закинул команду, которая юзает feh, а фон меняется только после того как введешь её в терминале или в лаунчпаде, вызываемом по alt+F2. Видать где-то ещё есть команда, задающая фон.
ps в ~/.fluxbox/log флюкс ничего интересного не пишет (
ps в ~/.fluxbox/log флюкс ничего интересного не пишет (
I'm just a bastard but at least i admit it.
-
- Сообщения: 2599
- ОС: gentoo fluxbox
Re: FluxBox
У меня в /home/globus/.fluxbox/overlay прописано:
! background: none - это коммент background: fullscreen background.pixmap: /home/ALLES/foto/norilsk/SAT/Map.jpg
И он сам своими силами рисует.
! background: none - это коммент background: fullscreen background.pixmap: /home/ALLES/foto/norilsk/SAT/Map.jpg
И он сам своими силами рисует.
-
- Сообщения: 164
- ОС: разные
Re: FluxBox
Возможно уже и не важно, но раз уж в кой-то веки зашел — отпишусь. Feh отрабатывал штатно, а потом background так же штатно меняла строка из темы оформления.
I'm just a bastard but at least i admit it.