Conky: if_match сравнение не выполняется, если в локали используется десятичный знак ","

Созданный на 15 июл. 2013  ·  19Комментарии  ·  Источник: brndnmtthws/conky

Из моего журнала:

conky: неверные аргументы: '0,0' и '10.0'
conky: сравнение не удалось для выражения '0,0 <10.0'

Все эти сравнения похожи на это:

$ {if_match $ {downspeedf enp2s0} <100,0}

Сравнение по-прежнему не удается, если аргумент записан с ",". Явная установка локали conky на en_US.UTF-8 пока работает.

(Этого не было в 1.9.0.)

Все 19 Комментарий

У меня та же проблема.

То же самое, подскажите, пожалуйста, как установить конкретный LOCALE для conky?

Вы вводите команду перед командой, например.

LC_ALL = C conky

Спасибо, однако оказывается, что сравнение с дробными числами в целом не работает:

conky: сравнение не удалось для выражения '12,61> = 10'

${if_match ${top cpu 1} >= 10 }${color red}\
${else}${color}\
${endif}\

Извините по моей вине, локаль не была установлена, теперь работает. Сейчас я использую следующий сценарий запуска:

#!/bin/bash

export LANG=en_US.UTF-8
export LC_ALL=C

sleep 5 && conky

Боковое примечание: похоже, что это находится в algebra.cc: enum arg_type get_arg_type. Я рекомендую использовать парсер чисел с учетом локали.

Эта проблема все еще не решена в текущей версии Conky? Если да, обновите проблему. В противном случае вопрос будет закрыт через 2 недели.

@lasers Вы можете посмотреть?

@ su8 Я пробовал. Не знаком с локалью. Пробовал Италию. Не удалось отобразить запятые. Может я ошибся.

@ su8 Я попробовал git bisect здесь, чтобы 1.9.0 . Предыдущие теги не содержали материала cmake . :-(

НАС.

0B // False
56.9K // True
16.9K // False
544B // False
74.9K // True
88.4K // True
13.9K // False

DK.

conky: Bad arguments: '0,0' and '50.0'
conky: compare failed for expression '0,0>50.0'
0B // True
conky: Bad arguments: '0,0' and '50.0'
conky: compare failed for expression '0,3>50.0'
307B // True
^Cconky: Bad arguments: '0,3' and '50.0'
conky: compare failed for expression '0,3>50.0'
350B // True

@ su8 На случай, если вы пропустили последний комментарий, я могу проверить это сейчас.

Можете ли вы проверить это:

diff --git a/src/algebra.cc b/src/algebra.cc
index 66dfd2d6..4e1d36e2 100644
--- a/src/algebra.cc
+++ b/src/algebra.cc
@@ -155,7 +155,7 @@ enum arg_type get_arg_type(const char *arg) {
   if (p == e + 1) {
     return ARG_LONG;
   }
-  if (*p == '.') {
+  if (*p == '.' || *p == ',') {
     p++;
     while (p <= e) {
       if (isdigit((unsigned char)*p) == 0) {

Оно работает. Цифры тоже печатаются с запятой. Ленивый скопировал приведенный выше пример.

56,9K // True
16,9K // False
544B // False
74,9K // True
88,4K // True
13,9K // False

Так бывает и в мастере. Хм. На самом деле, я думаю, что это нормально, как есть. Ага .

Откройте запрос на перенос с этим изменением, так как мне лень делать это: hamburger:

Вы не ленивы. Я лазеры ленивее. Мне что-то интересно. Если он содержит запятую, не следует ли сначала поменять местами символы?

  • Если запятая обнаружена ...

    • Заменить период на uniq char

    • Замените запятую на точку

    • Заменить uniq char запятой

    • Сравнить

Есть ли в этом смысл или я слишком много думаю?

Это текущий стандарт страны, зачем менять его на другой?

Идк. Нуб здесь. Сделаю пул-реквест по вашему запросу. Для чего нужен if (*p == '.') { ?

Закрыто через https://github.com/brndnmtthws/conky/pull/585 : wave:

Была ли эта страница полезной?
0 / 5 - 0 рейтинги