Conky: if_match compare échoue si les paramètres régionaux utilisent "," comme marque décimale

Créé le 15 juil. 2013  ·  19Commentaires  ·  Source: brndnmtthws/conky

De mon journal:

conky: Mauvais arguments: '0,0' et '10.0'
conky: échec de la comparaison pour l'expression '0,0 <10.0'

Ces comparaisons sont toutes similaires à celle-ci:

$ {if_match $ {downspeedf enp2s0} <100.0}

La comparaison échoue toujours si l'argument est écrit avec ",". La définition explicite de la locale de conky sur en_US.UTF-8 fonctionne pour le moment.

(Cela ne s'est pas produit dans la version 1.9.0.)

bug

Tous les 19 commentaires

J'ai le même problème.

Pareil ici, pouvez-vous dire s'il vous plaît comment définir un LOCALE spécifique pour conky?

Vous faites précéder la commande par exemple.

LC_ALL = C conky

Merci, mais il s'avère que la comparaison échoue en général avec les nombres de fractions:

conky: échec de la comparaison pour l'expression '12,61> = 10'

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

Désolé de ma faute, les paramètres régionaux n'étaient pas définis, ils fonctionnaient maintenant. J'utilise maintenant le script de démarrage suivant:

#!/bin/bash

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

sleep 5 && conky

Note latérale: il semble que ce soit dans algebra.cc: enum arg_type get_arg_type. Je recommande d'utiliser un analyseur de nombres prenant en charge les paramètres régionaux.

Ce problème est-il toujours en suspens dans la version actuelle de Conky? Si tel est le cas, veuillez mettre à jour le problème. Sinon, le problème sera clos dans 2 semaines.

@lasers Pouvez-vous jeter un oeil?

@ su8 J'ai essayé. Pas familier avec les paramètres régionaux. J'ai essayé l'Italie. Aucune virgule à afficher. Peut-être que je l'ai mal fait.

@ su8 J'ai essayé git bisect ici pour 1.9.0 . Les balises précédentes ne contiennent pas cmake trucs

NOUS.

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 Juste au cas où vous auriez manqué le dernier commentaire, je peux le tester maintenant.

Pouvez-vous tester ceci:

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) {

Ça marche. Les nombres sont également imprimés avec une virgule. Lazy a copié l'exemple ci-dessus.

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

Cela se produit également dans le maître. Hmm. En fait, je pense que c'est correct en l'état. Duh .

Ouvrez une pull request avec ce changement car je suis paresseux pour le faire: hamburger:

Vous n'êtes pas paresseux. Je suis des lasers plus paresseux. Je me demande quelque chose. Si cela contient une virgule, ne devriez-vous pas d'abord permuter les caractères?

  • Si une virgule est détectée ...

    • Remplacer le point par un caractère uniq

    • Remplacez la virgule par un point

    • Remplacez le caractère uniq par une virgule

    • Comparer

Est-ce que cela a du sens ou est-ce que je pense trop?

C'est la norme actuelle du pays, pourquoi la changer pour une autre?

Idk. Noob ici. Je vais faire une demande de tirage à votre demande. À quoi sert if (*p == '.') { ?

Cette page vous a été utile?
0 / 5 - 0 notes