Je sais que je peux faire le attron code> et
attrovation code> avec la couleur que j'ai choisi de, cependant, je voudrais savoir s'il est possible de le faire avec la couleur ANSI Codes d'échappement dans les ncurses:
#include <stdio.h>
#include <ncurses.h>
int main()
{
initscr();
char *s2 = NULL;
const char *s1 = "World";
int n = 10;
// What would be a good way to colour %d?
// seems it is not safe to us the ANSI color escape in here...
s2 = malloc (snprintf (NULL, 0, "Hello %s \033[22;31m%d", s1, n) + 2);
sprintf (s2, "Hello %s \033[22;31m%d", s1, n);
printw("%s", s2);
refresh();
getch();
endwin();
return 0;
}
4 Réponses :
Je pense que vous vous attachez probablement à un territoire dangereux là-bas. Les malédictions suivront presque certainement les positions de caractères sur la base de caractères de sortie et, étant donné qu'il fournit sa propre gestion des couleurs, il ne détectera probablement pas également les séquences d'échappement Ansi.
Si vous après une possible moyen d'autoriser les séquences d'échappement ANSI Dans vos chaînes, alors une façon (kludge si c'est) serait d'intercepter la chaîne et de le modifier. Avoir une fonction d'assistant comme ceci serait essentiellement décomposer la chaîne dans des séquences de caractères normales et des séquences d'ANSI et vous traiteriez chacun séparément. P> Il nécessiterait une table de recherche (ou des smarts si vous devez gérer des séquences ANSI avec des paramètres arbitraires) afin de Traduisez les séquences dans les appels de code myprintw () code> qui prend une chaîne et le casse en panne, quelque chose comme (pseudo-code): p>
attron / désactivé souhaité. p> p>
Oui, j'ai essayé, mais cela n'a pas fonctionné. Je me demande, quel serait un bon moyen de faire ce qui précède (j'ai mis à jour mon exemple de code)
J'aime l'approche, cependant, je me demande si la table de recherche est nécessaire?
Si vous pouvez trouver une formule i> pour convertir la séquence ANSI en ColorPair, ce serait mieux. Mais puisque je ne
Hé, cette solution paires vraiment bien avec les liens trouvés dans La réponse de @Ciro Santilli . Il semble que la voie à suivre écrit un analyseur. @paxdiablo vous avez la prime 🎉
Oui. Tout dépend de quel type de logiciel ou de microprogramme écoute la production du programme. Pour v3.3 msdos, non, cela ne fonctionnera pas à moins que le pilote de périphérique ANSI.SYS est chargé. P>
Les fenêtres de terminal modernes ont tendance à avoir sémantique ANSI X3.64 , donc ces séquences d'échappement travaillera souvent. Mais ne vous attendez pas à trop: des caractères extra larges et extra grands sont notoirement mal soutenus. P>
Ce ne sera pas trop sûr intégrer ANSI sur ncurses code>. Vous souhaitez utiliser
attron / off code> appels et peut-être diviser la chaîne en
% s code> et
% d code>. Pour> 2 conversions, vous devez implémenter votre propre
printw code> p>
Thread de la liste de diffusion 2008 Traduction de ceci: https: / /lists.gnu.org/archive/html/bug-ncurses/2008-11/msg00026.html P>
Les possibilités soulevées devaient: P>
Créez un analyseur pour les codes d'échappement ANSI (WTFIX dans la source). Mutt et écran Mettre en œuvre ceci: https: //lists.gnu .org / archive / html / bug-ncurses / 2008-11 / msg00028.html p> li>
Créer une terminaison d'entrée: https: //lists.gnu.org/archive/html/bug-ncurses/2008-11/msg00029.html P> LI> ul>
@schneiderfelipe Cette ancienne question ne mentionne rien de pourquoi i> op veut cela. Cela ressemble à un XY Problème pour moi. Pourquoi vous voulez ceci? Quel est le véritable objectif que vous ne pouvez pas réaliser avec des malédictions seules?
@Tedlyngmo Merci de demander! J'écris actuellement un cadre TUI basé sur des malédictions ( Github.com/schneiderfelipe/kay ). Il traduit des séquences d'échappement ANSI dans les appels de malédictions. Les réponses à cette question pourraient m'aider avec ce projet.
Merci, mais .. Pourquoi l'ancien cadre est-il une ligne directrice? Tu n'aurais pas pu partir ... de toute façon?
Qu'entendez-vous par «vieux framework»? ANSI Escape séquences? J'aime l'idée que c'est simplement une chaîne, ce qui facilite la propagation d'une petite bibliothèque principale.