LINUX.ORG.RU

Сообщения dissident

 

Alexandescu Modern C++... длинное название: странное противоречие

Форум — Development

Странное противоречие. Написанное на странице 92 (класс Functor) о том, что template class’ы с тем же названием не могут иметь разное количество template параметров противоречит коду на странице 57 (класс GenScatterHierarchy) и 60 (класс FieldHelper). Если не хотите не обращайте пожалуйста внимание на количество кода а на количество template параметров. Например тут их явно разное количество и это не специализация шаблона:

// Pass an atomic type (non-typelist) to Unit
template <class AtomicType, template <class> class Unit>
class GenScatterHierarchy : public Unit<AtomicType>
{
typedef Unit<AtomicType> LeftBase;
};
// Do nothing for NullType
template <template <class> class Unit>
class GenScatterHierarchy<NullType, Unit>
{
};

А на странице 92 о классе Functor написано, что так нельзя. Я, конечно, могу сам это все компилировать и проверять, но я не настолько хорошо знаю шаблоны. Может есть какая-то тонкость?

Страница 92:

Even after making this decision, life is not a lot easier. C++ does not allow templates with the same name and different numbers of parameters. That is, the following code is invalid:

// Functor with no arguments
template <typename ResultType>
class Functor
{
...
};
// Functor with one argument
template <typename ResultType, typename Parm1>
class Functor
{
...
};

С другой стороны страница 57:

template <class TList, template <class> class Unit>
class GenScatterHierarchy;
// GenScatterHierarchy specialization: Typelist to Unit
template <class T1, class T2, template <class> class Unit>
class GenScatterHierarchy<Typelist<T1, T2>, Unit>
: public GenScatterHierarchy<T1, Unit>
, public GenScatterHierarchy<T2, Unit>
{
public:
typedef Typelist<T1, T2> TList;
typedef GenScatterHierarchy<T1, Unit> LeftBase;
typedef GenScatterHierarchy<T2, Unit> RightBase;
};
// Pass an atomic type (non-typelist) to Unit
template <class AtomicType, template <class> class Unit>
class GenScatterHierarchy : public Unit<AtomicType>
{
typedef Unit<AtomicType> LeftBase;
};
// Do nothing for NullType
template <template <class> class Unit>
class GenScatterHierarchy<NullType, Unit>
{
};

Или страница 60:

template <class H, typename R>
inline R& FieldHelper(H& obj, Type2Type<R>, Int2Type<0>)
{
typename H::LeftBase& subobj = obj;
return subobj;
}
template <class H, typename R, int i>
inline R& FieldHelper(H& obj, Type2Type<R> tt, Int2Type<i>)
{
typename H::RightBase& subobj = obj;
return FieldHelper(subobj, tt, Int2Type<i- 1>());
}
//Refer to HierarchyGenerators.h for FieldTraits' definition
template <int i, class H>
typename Private::FieldTraits<H>::At<i>::Result&
Field(H& obj)
{
typedef typename Private::FieldTraits<H>::At<i>::Result
Result;
return FieldHelper(obj, Type2Type<Result>(), Int2type<i>());
}

Тут, например, опять разное количество template параметров:

template <class H, typename R>
inline R& FieldHelper(H& obj, Type2Type<R>, Int2Type<0>)
{
typename H::LeftBase& subobj = obj;
return subobj;
}
template <class H, typename R, int i>
inline R& FieldHelper(H& obj, Type2Type<R> tt, Int2Type<i>)
{
typename H::RightBase& subobj = obj;
return FieldHelper(subobj, tt, Int2Type<i- 1>());
}

 ,

dissident
()

запуск скрипта при открытии крышки лаптопа

Форум — Desktop

У меня awesomewm и в rc.lua вот такая строчка:

awful.util.spawn_with_shell("xbacklight -set 60")

Смысл в том, чтобы уменьшить яркость экрана при старте. Все работает чудесно, но когда я закрываю и открываю экран лаптопа backlight становится 100 и приходится руками писать эту команду.

Я даже создал баг на awesomewm github https://github.com/awesomeWM/awesome/issues/2965, но мне посоветовали каких-то монстров.

Locking жe я делаю так;

respawn_with_shell("xautolock", "xautolock -detectsleep -time 10 -notify 30 -notifier \"notify-send -u critical -t 10000 -- 'LOCKING screen in 30 seconds'\" -locker 'i3lock-fancy -g -n' &")

Все что я хочу это чтобы или:

  • При открытии крышки лаптопа запустить автомагически -set 60
  • Когда я ввожу пароль в это i3lock-fancy запустить автомагически -set 60
  • А может существует какой-то демон, который вовсе не занимается power management’ом (ведь он работет, а работает - не трогай), а просто позволяет запустить скрипт при открытии крышки? Я нашел xss-lock, но он вроде наоборот позволяет что-то запустить, когда крышка закрылась. Или я плохо читаю man?

Помогите пожалуйста. zsh конечно очень упрощает введение этого xbacklight, но все же некошерно. А иногда я забываю это ввести и выедает глаза

 , ,

dissident
()

awesome wm аналог win-m кнопки

Форум — Desktop

Добрый день,

Честно говоря я забыл, зачем мне это надо, наверное из-за того, что линукса месяц не видел, но все же есть ли в awesome wm шорткат, нажав который окна в данном таге минимизируются и я смогу посмотреть на голых женщин на обоях?

Гуглил, но понял только то, что самому в lua писать надо. А лень. Может уже написано?

Спасибо заранее за ответ!

 

dissident
()

GTK C *_new functions returning GtkWidgets

Форум — Development

Я нашел вот такую цитату:

https://book.huihoo.com/gtk+-gnome-application-development/cha-gtk.html

All of the _new() routines return a GtkWidget*, even though they allocate a subclass; this is for convenience.

И это действительно так, например gtk_search_bar_new() возвращает не GtkSearchBar* а GtkWidget*:

https://developer.gnome.org/gtk3/stable/GtkSearchBar.html#gtk-search-bar-new

Хотя eсли что-то не наследуется от GtkWidget, getter'ы, «newer'ы» уже возвращают указатель на то, что нужно например:

Далее, глядя на код gedit я вижу, что внутри *Private структур для класс GtkWidget* хранятся редко, чаще конкретные типы.

В коде, с которым я имею дело вообще бардак. Часть *_new() функций возвращает GtkWidget*, часть наследника. Внутри части *Private, часть лежит как GtkWidget* часть как SomethingDerivedFromGtkWidget*.

Я хочу навести в этом порядок, не переча конвенциям Gtk. Отсюда пару вопросов:

  1. Что за удобство такое возвращать base класс из «конструкторa»?
  2. Имеет ли смысл в своем коде возвращать GtkWidget* в my_derived_from_gtk_widget_new() или в не библиотечном коде все же лучше вернуть MyDerivedFromGtkWidget*?
  3. Какое такое удобство хранить widget'ы как GtkWidget* в *Private, это ведь сильно снижает читаемость - непонятно, что там действительно лежит. Отсутствие необходимости кастов когда это что-то передается например в gtk_container_add? Но ведь касты и так приходится добавлять в обратную сторону делая что-то вроде my_code_do_smth_with_my_derived_from_gtk_widget ((MY_DERIVED_FROM_GTK_WIGET_CLASS(widget_pointer)

У меня есть несколько опций: везде возвращать GtkWidget* и хранить как GtkWidget в *Private; везде возвращать GtkWidget* и хранить как Derived* в *Private; и возвращать и хранить Derived*. IMHO третье наиболее логично, несмотря на конценции GTK. Кто-то может прояснить жтот вопрос?

 

dissident
()

awesome wm: how to, temprorary, zoom windows with «bigger» with bigger fonts?

Форум — Desktop

For example I'm seing his: https://youtu.be/hraHAZ1-RaM?t=108 (starting frlom 1:48 and ending at 1:51 he just in i3 has a winddow with terminal and with some shortcuts we get's it bigger and bigger (the font).

Is it possible with some generic mechanizm in awesome WM or do I need to create my own shortcuts like Shift- or similar? Or is it done in i3 itself?

If the later, how to emulate the same behaivor fot gvim's open in let's day tiling window manager. Something had to added to ~/.vimrc or does there exist are simpler solution?

PD For firefox there already exist Ctrl-[-,+] to allow this thing. But how to enable it for other programs? Maynly xfc4-terminal

Thanks in advance

 , ,

dissident
()

C99 compound literals

Форум — Development

Здесь: https://web.archive.org/web/20171213133641/http://www.comeaucomputing.com:80/...

Есть пример:

What Are Compound Literals?

struct xyz { int i; int j; };
// skip
void baz(struct xyz* dummy_arg) { }

int main()
{
    // skip

    // Note the literal need not always just be an array
    p = &(int){ 1 }; // ok, but be careful

    // skip

    // Pass addr of literals:
    baz(&(struct xyz){ 456, 789 });
}

Даже не пытаясь проверять, что будет в C++ и веря цитате:

https://stackoverflow.com/questions/28116467/are-compound-literals-standard-c

In C++, a compound literal designates a temporary object, which only lives until the end of its full-expression. As a result, well-defined C code that takes the address of a subobject of a compound literal can be undefined in C++.

Таки непонятно, какое будет у структуры, адрес которой передан в baz время жизни (в C)? Она будет убрана из stack'а при выходе из scope main?

 

dissident
()

Как в Arch/Awesome сделать dark theme?

Форум — Desktop

Как-то в Ubuntu + awesome wm у меня вышло сделать примерно так:

https://i.imgur.com/RwEocZe.png

(ну или приблизительно так, мне важно, чтобы не было как в скриншоте ниже):

Ну и в частности, чтобы например не было так:

https://imagebin.ca/v/4ScRMlfcxU3I

Ну т.е., чтобы выше темным был и фон кода и фон file explorer'а. То же относится к разным другим программам. Я совершенно забыл как я это сделал. Глядя на картинку первую, я решил, что наверное я это сделал тулзой gnome-tweaks. Но когда я запускаю ее на Arch с awesome wm, то получаю:

$ gnome-tweaks 
WARNING : Shell not installed or running
WARNING : Error detecting shell
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/gtweak/tweaks/tweak_group_shell_extensions.py", line 217, in __init__
    raise Exception("Shell not running or DBus service not available")
Exception: Shell not running or DBus service not available
WARNING : Shell not running
NoneType: None
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/gtweak/app.py", line 30, in do_activate
    self.win = Window(self, model)
  File "/usr/lib/python3.7/site-packages/gtweak/tweakview.py", line 38, in __init__
    self._model.load_tweaks(self)
  File "/usr/lib/python3.7/site-packages/gtweak/tweakmodel.py", line 104, in load_tweaks
    mods = __import__("gtweak.tweaks", globals(), locals(), tweak_files, 0)
  File "/usr/lib/python3.7/site-packages/gtweak/tweaks/tweak_group_workspaces.py", line 170, in <module>
    sw = StaticWorkspaceTweak(size_group=sg, loaded=_shell_loaded)
  File "/usr/lib/python3.7/site-packages/gtweak/tweaks/tweak_group_workspaces.py", line 46, in __init__
    self.check1.set_visible(self.settings[self.key_name])
TypeError: 'GSettingsFakeSetting' object is not subscriptable

Впрос(ы):

  • Эта та тулза, что мне надо?
  • Если да, как ее взлететь?
  • А проще нельзя?

Спасибо заранее за ответ.

 , ,

dissident
()

очередная путаница в голове про move

Форум — Development

Начитавшись:

Я собственно попробовал и так и так:

#include <iostream>
#include <memory>
#include <utility>
using namespace std;

const int INCONSISTENT = 666;

struct A {
    int *p;

    A(): p(new int(42)) { cout << "A()" << endl; }

    A(const A& a): p(new int(*a.p)) { cout << "copy A()" << endl; }

    A(A&& a) {
        cout << "move A()" << endl;
        p = a.p;
        // asumming that move ctor steals A's resources leaving them in inconsistent state since:
        //
        // "While not mandated, move constructors usually leave the object that was moved out of in a valid state."
        // (c) https://stackoverflow.com/questions/27612289/move-constructor-not-calling-destructor/27612339
        // 
        // "not mandated" goes here
        a.p = (int*)INCONSISTENT; 
    }

    ~A() {
        cout << "~A()" << endl;
        if (p == (int*)INCONSISTENT) {
            cout << "oops, now will crash" << endl;
        }
        delete p;
     }
};

void sink1(unique_ptr<A> a)
{
    cout << "In sink1" << endl;
    unique_ptr<A> p(move(a));
}

void sink2(unique_ptr<A>&& a)
{
    cout << "In sink2" << endl;
    // Uncommenting this leads to same behavior as sink3 (i.e. no crashing)
    unique_ptr<A> p(move(a));
}

void sink3(A&& a)
{
    cout << "In sink3" << endl;
}

int main()
{
    unique_ptr<A> a1(new A());
    unique_ptr<A> a2(new A());
    A a3;

    cout << "--------------------" << endl;
    cout << "--------------------" << endl;
    cout << "--------------------" << endl;

    cout << "Before sink 1" << endl;
    sink1(move(a1));
    cout << "After sink 1" << endl;

    cout << "--------------------" << endl;
    cout << "--------------------" << endl;
    cout << "--------------------" << endl;

    cout << "Before sink 2" << endl;
    sink2(move(a2));
    cout << "After sink 2" << endl;    

    cout << "--------------------" << endl;
    cout << "--------------------" << endl;
    cout << "--------------------" << endl;

    cout << "Before sink 3" << endl;
    sink3(move(a3));
    cout << "After sink 3" << endl; 
}
  • В sink1 все правильно и хорошо, она «съедает» a1 и при этом даже сама его убивает, в случае чего
  • В sink2 оказывается, что само && ничего некуда не перемещает и если убрать вторую строчку, то деструктор a2 вызовется в конце scope main
  • Прочитав на stackoverflow, что move constructor не обязан оставлять объект, который ему передан в валидном состоянии, я попытался создать crash в sink3, но напоролся но простую штуку, которую не понял - то, что move ничего не перемещает, я понимаю, но оказывается что rvalue parameter тоже сам по себе не вызывает вовсе move конструктора!

Т.е. правильно ли я понимаю, что видя в коде:

void sink(A&& a);

я могу предположить, что автор f решает забрать ownership над a, но компилятор его вовсе не обязывает это делать? А где же тогда компилятор помогает здесь словить баг, например у меня есть указатель, я создал его с помощью new, я затем сделал move(*ptr), где ptr типа A и передал это нечто в функцию принимающую A&&, вроде sink(A&& a). Ну т.е.:

void sink(A&& a);
...
A* ptr = new A();
sink(move(*a));

По названию и сигнатуре я предпологаю, что таким образом, автор хочет забрать у меня A и не вызываю деструктора ptr образуя memory leak, ели внутри sink нету чего-то вроде:

A moved(move(a);

А я не знаю, есть оно там или нет (кода, например, у меня нет). Если бы было гарантировано, что деструкторы после конструктора move работают всегда, то я бы его вызвал, а так я боюсь, что sink() поломает мое содержимое ptr и не вызываю консруктора, а должен. Как же так?

Даже более того, вот еще более конкретный пример:

#include <iostream>
#include <memory>
#include <utility>
using namespace std;

const int INCONSISTENT = 666;

struct A {
    int *p;

    A(): p(new int(42)) { cout << "A()" << endl; }

    A(const A& a): p(new int(*a.p)) { cout << "copy A()" << endl; }

    A(A&& a) {
        cout << "move A()" << endl;
        p = a.p;
        // asumming that move ctor steals A's resources leaving them in inconsistent state since:
        //
        // "While not mandated, move constructors usually leave the object that was moved out of in a valid state."
        // (c) https://stackoverflow.com/questions/27612289/move-constructor-not-calling-destructor/27612339
        // 
        // while nullptr
        a.p = (int*)INCONSISTENT; 
    }

    ~A() {
        cout << "~A()" << endl;
        if (p == (int*)INCONSISTENT) {
            cout << "oops, now will crash" << endl;
        }
        delete p;
     }
};

void sink_fuckup(A&& a)
{
    cout << "In sink3" << endl;
    A my_a(move(a));
}

int main()
{
    A a3;

    cout << "Before sink_fuckup" << endl;
    sink_fuckup(move(a3));
    cout << "After sink_fuckup" << endl; 
}

Как же так? Автор же явно сказал мне, что он sink. А я не могу даже предотвратить вызов деструктора (из-за того, что a3 на stack). Более того, несмотря на то, что автор сказал мне, что он sink, компилятор этого не обеспечит (сама декларация sink_fuckup как принимающей A&& этого вовсе не гарантирует). Т.е. даже если бы a3 был pointer, проблема все равно осталась, так как передавая его в sink_fuckup, я не знал бы, вызывать delete a3 или нет. Кроме того, я иногда видел функции принимающие initializer_list<A>&& и затем делающие например move его членов в vector. Это ведь легальная оптимизация? Но при этом сам initializer_list останется «уничтожаем» и все хорошо. Но как я понял, гарантии, что он «уничтожаем» если он принят как rvalue reference нет никакой (ведь такая функция вполне может «забрать» его вызвав move конструктор, а ее деструктор оставит объект невалидным - ну может оставить). Получается, что не зная что делает объявленная где-то в хидере библиотеки функция sink(A&&), я, не имея комментария, о том, забирает ли она ownership не могу этого знать. Выходит это возвращение к sink(A*) // REMEMBER: sink takes ownership of a.

Или я туплю, как обычно?

 ,

dissident
()

rdesktop дурацкий курсор

Форум — Desktop

Добрый день,

Не знаю как показать проблему. scrot, делая скриншот, не показывает, как оно выглядит. Но суть в том, что если я делаю:

rdesktop -f -u <username> <IP>

То курсор мыши в окошке rdesktop вокруг себя имеет вырвиглазный черный квадрат. У меня нету под рукой телефона, чтобы показать, но я постараюсь, через пару часов это сделать.

Но может быть из самого описания понятно в чем проблема и как ее решить? Чтение man rdesktop не помогло.

 

dissident
()

vifm or ranger?

Форум — Desktop

Привет,

Посоветуйте, что лучше покурить (midnight commander надоел):

Второй выглядит привычнее (две панельки как в Norton Commander), а первый хард-корнее. Который удобней?

 , ,

dissident
()

f.. google: чем можно играть playlist'ы, каналы или чем бы это там не являлось

Форум — Multimedia

Это какой-то праздник. Я перепробовал почти все отсюда https://unix.stackexchange.com/questions/229787/audio-only-youtube-player и других линков, а именно:

  • QMPlay2
  • youtube-viewer
  • mps-youtube
  • smtube
  • totem
  • vlc

И видимо из-за того, что google постоянно что-то меняет ни в одном из них я не смог просто тупо открыть вот этот канал, плейлист или как это называется: https://www.youtube.com/watch?v=rQpZUjX8-jA&list=RDrQpZUjX8-jA&start_...

И так же со всеми остальными, которые я тупо хочу послушать, тупо не в браузере, тупо аудио, могу с видео, мне вообще все равно, я хочу URL вбить и получить playlist, вот например другой URL: https://www.youtube.com/watch?v=tvLG3eA1jH8&list=RDtvLG3eA1jH8&start_... тоже не работает нигде.

mpsyt при команде pl https://www.youtube.com/watch?v=rQpZUjX8-jA&list=RDrQpZUjX8-j (пришлось убрать &start_radio чтобы он понял) загрузил какие-то другие альбомы, ну ладно, нажимаю 1- он говорит Sorry this track is unavailable или еще-что похожее, vlс открывает только один url из этого плейлиста, микса, канала, складанки, блин мне все равно, я просто хочу, чтобы это работало, smtube вообще эти линки не открывает и так далее.

youtube-dl скачал с его сайта, он самый новый. Не помогает.

У меня уже 50 этих гребаных браузеров из-за этого гребаного вебдваноля, в котором всякие корпоративные чатики и прочая ОПХ (Очень-Полезная-Х..), еще для музыки браузер, я уже потерялся в этих браузерах, приходится для каждой ОПХ новый браузер заводить, чтобы не запутаться, opera для чатика, chromium для ютубика, это издевательство какое-то!

Кто-нибудь знает, как решить проблему, кроме как галоперидолом?

 , ,

dissident
()

arch + aur + upgrade existing packages ONLY from AUR

Форум — Admin

Добрый день,

У меня в $HOME/aur свалка разных AUR пакетов поставленных руками. Иногда некоторые из них говорят мне мол, доступна новая версия.

Идти по всем из них циклом в bash, выполнять git pull + makepkg -sri я не хочу, потому что часть из них я одинсталировал, а в $HOME/aur остались клоны репозиториев.

Я смотрю на: https://wiki.archlinux.org/index.php/AUR_helpers

Что хочется в идеале:

  1. Не wrapper над pacman.
  2. Не свистелки и перделки
  3. Чтобы умело искать + ставить + удалять + обновлять только то, что поставленно из AUR
  4. Самое главное: чтобы само нашло установленное ранее руками (или позднее руками или между использованиями руками) и умело его обновить вместе с тем, что само себе помнит как свое репо. Ну т.е. чтобы можно было одновременно пользоваться и тулзой и руками.

Судя по вики мне надо downloaders and builders.

Поставил aurutils. Сказал ему aurcheck. Висит до сих пор. Что делает, не знаю, может то, что я хочу (ищет по системе AUR)? А может просто висит?

Существует ли такая штука, которая удвлетворяет хотелкам и пункту 1? Ну т.е. чтобы и дальше pacman делал свое, а эта штука делала свое (мухи отдельно, котлеты отдельно), но чтобы была достаточно умна, чтобы позволить пользователю пользоваться и ею и руками и умела search/list/upgrade/install/uninstall все что поставлено из AUR все равно как (руками, штукой)?

 ,

dissident
()

почему move ctor был использован несмотря на throw()?

Форум — Development

Сабж.

#include <iostream>
#include <vector>
using namespace std;

struct A {
    A() { cout << "ctor" << endl; }
    A(const A& x) { cout << "copy ctor" << endl; }
    A(A&& x) throw() { cout << "move ctor" << endl; }
};

int main()
{
    vector<A> v;
    for (auto i = 0; i < 4; ++i)
    {
        cout << "Item: " << endl;
        cout << "Capacity: " << v.capacity() << endl;
        v.push_back(A());
    }
}

Output:

Item: 
Capacity: 0
ctor
move ctor
Item: 
Capacity: 1
ctor
move ctor
move ctor
Item: 
Capacity: 2
ctor
move ctor
move ctor
move ctor
Item: 
Capacity: 4
ctor
move ctor

Разве vector не обеспечивает strong exception safe guarantee? Ведь в данном случае move ctor мог сломаться и оставить vector в поломанном состоянии.

 ,

dissident
()

как избавиться от bind в данном конкретном примере?

Форум — Development

 , ,

dissident
()

google slash xxx - wtf?

Форум — General

Что он имеет ввиду?

https://youtu.be/2EWejmkKlxs?t=1373

На 22:56.

«like google slash benchmark»

Я попробовал в google /benchmark vs benchmark и ничего не понял. Это какое-то очень сильное колдунство? В гугле тоже не нашел (рекурсия?). Сорри за дурацкий вопрос, не знаю даже, в тот ли форум вопрос куда надо, но стало любопытно а в RTFM вроде https://support.google.com/websearch/answer/2466433?hl=en нету.

 

dissident
()

ebook reader on Linux and on device with Android

Форум — Desktop

Привет,

Disclaimer: Попука Amazon Kindle и оплачивание книг может и вариант, но:

  1. Пока нет денег
  2. А не компе чем читать купленное?
  3. Советский менталитет: есть бесплатно, надо брать

Проблема:

  • У меня есть InkBook Prime (польская поделка с Android для чтения книг).
  • И есть лаптоп, на котором Linux.
  • И я знаю, что есть libgen.io, на котором бессовестно лежат книнги в куче форматов, и я каждую ночь убиваю невиную девственницу, поливаю ею распятого ленивца и приношу в жертву макаронному монстру младенца, чтобы его не прикрыли.

И если на PC/Linux kchmviewer для CHM меня на 90% устраивает, то польская поделка на Android понимает by default S/W epub и иногда pdf (и наверное что-то еще, я с ней разобраться не могу).

Стандартные (и не только) программы в ней - г... InkReader не помнит, на какой странице ты остановился. Legimi помнит, но страшно долго запускается. Часть файлов PDF как-то криво показываются (в основнои code parts c monospace шрифтом).

Поставил себе APKPure на поделку, выбор г...а увеличился, рока вот нашел Moon+Reader, работает, страницу запоминает, но для, например, настройки шрифта надо ему платить.

А хотелось бы книгу в одном формате скачать (epub, pdf, chm - часто еще бывает, что epub на libgen.io нету, chm на поделке никто не умеет и надо pdf, который на поделке открывать то тем, то этим пока форматирование цитат кода не перестанет расползаться), чтоб и на ридер и на компьютер. И программу (конечно можно и, видимо нужно, две разные, на Linux и на поделкуу) и там и там которая ее (книгу в одном формате) поймет (а в идеале поймет как можно больше форматов на всякий случай).

Причем мне совсем неинтересно вот это бесполезное (для меня конечно) г.. типо полок и прочих библиотек и идиотских интерфейсов бесполезных фич (например как в calibre (справедлисти ради там есть скрипт ebook-viewer, в котором этого на счастье нет). Т.е. я вот, просто хочу узнать, мой readflow:

  • Скачать книгу желатиельно в chm и читать kchmviewer'ом на компе
  • Ее же скачать в epub, а если нету, то в pdf и читать moon+reader'ом или чем-то (при этом часто приходится выбирать разные форматы/программы и пробовать, какой более читабельный)

Можно превратить в readflow:

  • Скачать программу в одном формате и читать на компьютере программой X, на поделке программой Y

Опции вроде полок, синхронизация с облаком (https://github.com/panicsteve/cloud-to-butt), я для этого слишком тупой и не хочу. На поделке я нажимаю Apps -> Files -> EN > book.pdf -> Moon+Reader -> Just Once, а на компьютере kchmviewer book.chm.

Поскажите дураку plz.

 

dissident
()

Как грамотно перенести Ubuntu с одного компа на другой?

Форум — Linux-install

Есть Ubuntu, которой поставлено куча пакетов, настроена куча фигни, сделано пару кастомных изменений в /etc, большой /home/user и /root.

Приносят новый комп со свежей Ubuntu.

Как ее превратить в предыдущую?

Использовать https://github.com/teejee2008/aptik

Или того же автора https://github.com/teejee2008/timeshift

 

dissident
()

awesome wm wtf is urgent client

Форум — Desktop

Why are new clients urgent by default?

You can change this by redefining awful.ewmh.activate(c) in your rc.lua. If you don't want new clients to be urgent by default put this in your rc.lua:

client.disconnect_signal("request::activate", awful.ewmh.activate)
function awful.ewmh.activate(c)
    if c:isvisible() then
        client.focus = c
        c:raise()
    end
end
client.connect_signal("request::activate", awful.ewmh.activate)

(c) https://github.com/awesomeWM/awesome/blob/master/docs/90-FAQ.md

Что это за urgent client такие? Из документации разных awful.urgent.jumpto ничего не понятно. Что такое master window, например, разоабрался, а что за urgent client?

 ,

dissident
()

уведомления на e-mail

Форум — Linux-org-ru

А можно такое сделать? Или оно уже есть? Не нахожу в настройках

 ,

dissident
()

https://github.com/oguzhaninan/Stacer dashboard не тот disk, что надо

Форум — General

Disclaimer: Да, я в курсе, что есть htop, glances, а для любителей мышки gnome-system-monitor, lxtask, mate-system-monitor, xfce4-taskmanager, но этот stacer действительно красиво выглядит и мне нравится (не как чистилка логов или инсталятор/деинсталятор, а как task lister). Да и не знал я, что в Qt можно так красиво делать интерфейсы (без всяких Unity, Kanzi Studio и т.п.) Вот только, у меня LVM и df -h показывает:

[ss@arch ~]$ df -h
Filesystem           Size  Used Avail Use% Mounted on
dev                  1.9G     0  1.9G   0% /dev
run                  1.9G  820K  1.9G   1% /run
/dev/mapper/vg-root  213G  193G  8.8G  96% /
tmpfs                1.9G   39M  1.9G   3% /dev/shm
tmpfs                1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs                1.9G   27M  1.9G   2% /tmp
tmpfs           run                  1.9G  820K  1.9G   1% /run     382M   24K  382M   1% /run/user/1000

Т.е. по поводу «сколько осталось места» мне интересно вот это:

/dev/mapper/vg-root  213G  193G  8.8G  96% /

А dashboard мне показывает вот что https://user-images.githubusercontent.com/29346009/47948679-8b696100-df35-11e...

Т.е. явно это:

run                  1.9G  820K  1.9G   1% /run                1.9G  820K  1.9G   1% /run

И нигде в настройках не могу этого поменять.

Что это, баг, фича? И как сделать, чтобы было лучше (и чтобы варило кофе?)

 , , ,

dissident
()

RSS подписка на новые темы