LINUX.ORG.RU

Сообщения mosfet

 

Цикл по $PATH

for d in ${PATH//:/ }; do echo "* $d"; done
* /home/user/bin /usr/kerberos/bin /usr/local/bin /usr/bin /bin /usr/X11R6/bin


for d in $(echo ${PATH//:/ }); do echo "* $d"; done
* /home/user/bin
* /usr/kerberos/bin
* /usr/local/bin
* /usr/bin
* /bin
* /usr/X11R6/bin


Почему так? Про ${(s.:.)PATH} знаю, но хочется совместимости с bash.

 

mosfet
()

Написание функции, принимающей структуры разного типа

Пытаюсь сделать функцию, способную оперировать с различными структурами (на данный момент это struct netlist и struct subcircuit). Можно ли как-нибудь упростить этот код? Typedef тут поможет?

Пока объектов, которым можно сделать add_comment() всего два и достаточно if/else, но дальше ведь будет ещё хуже и кривее. Делать множество фактически дублирующихся функций?

struct comment *
add_comment(struct netlist *n, struct subcircuit *s, int lineno, char *text)
{
    struct comment *c = malloc(sizeof(struct comment));
    if(c == NULL)
        return NULL;

    c->lineno = lineno;
    c->text = text;
    c->next = NULL;

    if(n == NULL) {
        if(s->comments == NULL)
            s->comments = s->last_comment = c;
        else {
            s->last_comment->next = c;
            s->last_comment = c;
        }
        s->ncomments++;
    } else {
        if(n->comments == NULL)
            n->comments = n->last_comment = c;
        else {
            n->last_comment->next = c;
            n->last_comment = c;
        }
        n->ncomments++;
    }

    return c;
}

Естественно, struct netlist и struct subcircuit обе имеют поля comments, last_comment и ncomments.

Функцию вызываю так:

add_comment(curr_netlist, NULL, lineno, "abc");

add_comment(NULL, curr_subcircuit, lineno, "abc");

Си я последний раз видел в институте на первом курсе, если что.

 

mosfet
()

Взятие выражения в скобках

Есть такая, например, строка:

ABC X=(...) Y=a+b*(...) Z=123

X, Y, Z можно назвать параметрами.

Как бы так изловчиться, чтобы вылавливать эти параметры и всё содержимое каждого вместе со скобками (т.е от «=» до следующего параметра)? Внутри скобок может быть что угодно, в том числе другие выражения в скобках, но скобки обязательно сбалансированы.

Перерыл уже весь гуголь и документацию, но везде только примеры инфиксных калькуляторов, мне же не нужно вычислять выражение, а только убедиться в балансе скобок в нём и поместить куда-нибудь.

Пока имеется такое:

.l

name [a-zA-Z][a-zA-Z0-9]*

{name}"="  { yylval.sval = strdup(yytext); return PARAM; }
"("        { return LBRK; }
")"        { return RBRK; }

.y

param:
    PARAM expr { printf(" {%s%s}", $1, $2); }
    ;

 , ,

mosfet
()

[ion3] Переключение фокуса после закрытия плавающего окна

Пользуюсь ion3 уже несколько лет, и, вообще говоря, эта «фича» порядком достала:
после закрытия диалогового окна фокус переносится на следующее floating окно, а не к родителю закрытого. Приходится тянуться к мыши.

Может можно как-нибудь починить? Настройки перекопал, исходники ниасилил.
Не спрашивайте, зачем мне больше одного плавающего окна одновременно - так надо.

 

mosfet
()

[shell] Экспорт ZSH алиасов в другую оболочку

Делаю:

% alias ddd='date'
%
% bash
$ ddd
bash: command not found

Можно как-нибудь победить?

 

mosfet
()

[скриптота] Читать файл пословно

Лучше перлом.

Нужно читать файл не строками, а словами.
Про $/ в перле знаю, но между словами может быть пробелов больше одного.

Файл может быть очень большим, так что нужно считывать постепенно.
split строки тоже не годится.

mosfet
()

[Perl] Форматы (format)

Есть строка, допустим 'blabla'.

Можно ли с помощью format (perlform) получить такое:

/* -------------- *
 * Title : blabla *
 * -------------- */

Для строки другой длины будет соответственно:

/* -------------------- *
 * Title : blablablabla *
 * -------------------- */

Я понимаю, что можно нагородить всяких

$separator = "-" x length($title);

но хотелось бы разобраться из любопытства.

 

mosfet
()

[lisp] Полигон в набор линий

Полигон задаётся точками (x y):

points = '( (x1 y1) (x2 y2) (x3 y3) (x4 y4) )

Как бы из этого получить список составляющих полигон линий:

lines = '(   ((x1 y1) (x2 y2)) ((x2 y2) (x3 y3)) ((x3 y3) (x4 y4)) ((x4 y4) (x1 y1))   )

Может map-функциями можно как. Ничего кроме банального цикла в голову не приходит.

 

mosfet
()

[D-Bus] блокировка сообщений

Возможно ли вообще такое (извне)? Идея состоит в том, чтобы отлавливать сообщение с определённым содержимым и препятствовать его прохождению до получателя.

mosfet
()

[python] любителям алгоритмов

Есть список, например такой:

#    0  1   2   3  4  5   6   7  8  9
a = [0, 0, 'A', 1, 0, 1, 'A', 1, 1, 0]
#               ^>>>>>>>>>^

Нужна функция, получающая индекс элемента (например 3), и выдающая индекс следующего за ним элемента, который равен 'A'. Причем, если передать в функцию '7' для этого примера, она должна вернуть индекс с начала списка, т.е. '2'. А если список не содержит элементов 'A', функция должна вернуть что-то осмысленное типа '0' или 'None', а не зацикливаться.

Использование функций вроде map и filter всячески приветствуется.

Вопрос #2 (pygtk): можно ли как-то применить метод (напр. hide()) к списку виджетов? Или только for для этого годится?

 

mosfet
()

[shell] - процессы в саспенде

Можно ли сделать так, чтобы процессы с определенным basename изначально запускались в suspend? С условием, что их можно будет продолжить позднее. Спасибо.

 

mosfet
()

[pygtk] ScrolledWindow

Как простейшим образом перемотать ScrolledWindow со всем содержимым на определенную позицию (от 0 до 100 %)? Спасибо.

 

mosfet
()

Shell - переменные окружения

Можно ли shell-скриптом установить переменные окружения?

Здесь http://gazette.lrn.ru/rus/articles/abs-guide/x1676.html написано, что нельзя передать переменные из скрипта в оболочку, но, может быть, всё же существует какой-нибудь способ?

mosfet
()

Perl - объединение строк

Как перлом объединить две строки, если следующая начинается с определенного символа? Например:

11 11111 1
+ 222
333 33 333
44444 44 4
|
V
11 11111 1 222
333 33 333
44444 44 4

Хорошо бы без флагов и промежуточных буферов. Как вообще делать многострочный поиск типа /abc\ndef/ ?
Спасибо за внимание.

mosfet
()

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