Deblan blog

[Tips] Zoomer et dé-zoomer dans urxvt

Un billet court pour expliquer rapidement comment zoomer et dézoomer dans un terminal urxvt (rxvt-unicode).

L'objectif est le même que ctrl+/- dans un navigateur : modifier la taille des caractères dynamiquement.

Le code de base est le suivant :

printf '\33]50;%s\007' "xft:Terminus:pixelsize=XX"

Note : XX correspondant à la taille en pixels de la font (Terminus dans mon cas).

On va donc faire une première fonction qui va lancer cette commande à la volée. De mon coté j'utilise ZSH mais si vous préférez Bash ça sera sensiblement la même chose.

zoom() {
	printf '\33]50;%s\007' "xft:Terminus:pixelsize=$1"
}

Après avec recharger la conf de votre interpréteur de commande, vous pourrez la tester comme ça :

$ zoom 15
$ zoom 20

On va maintenant ajouter deux autres fonctions qui vont augmenter et diminuer progressivement la taille (à la manière d'un navigateur).

URXVT_SIZE=20
URXVT_PROGRESS_SIZE=5

zp() {
	URXVT_SIZE=$(echo "$URXVT_SIZE+$URXVT_PROGRESS_SIZE" | bc )
	zoom $URXVT_SIZE
}

zm() {
	URXVT_SIZE=$(echo "$URXVT_SIZE-$URXVT_PROGRESS_SIZE" | bc )
	zoom $URXVT_SIZE
}

Après rechargement de la conf, vous zoomerez avec la commande "zp" (zoom plus) et dé-zoomerez avec "zm" (zoom moins).

Pratique non ?


  • Ulhume
    • ,
    • Tu peux aussi faire mieux, et l'embarquer dans un plugin pour urxvt. C'est plutôt simple comme plugin :
      ----
      #!/usr/bin/perl

      sub on_user_command {
      my($term, $command) = @_;
      my $increment;
      if ($command eq "font-increase") {
      $increment = 1 ;
      } elsif ($command eq "font-decrease") {
      $increment = -1;
      } elsif ($command eq "font-reset") {
      $increment = 0;
      } else {
      return;
      }
      my $font = $term->resource('font');
      if ($font =~ /size\=(\d+)/) {
      my $original=$1;
      my $new=$original+$increment;
      if ($new<6) { $new = 6; }
      $font =~ s/size\=$original/size\=$new/;
      $term->cmd_parse( "\033]710;$font\007");
      }
      }
      -------------------
      Cela t'ajoute deux command font-increase, font-decrease et font-reset que tu peux mapper sur un alt-+/atl-- :
      URxvt.keysym.M-plus: perl:font-increase
      URxvt.keysym.M-minus: perl:font-decrease
      URxvt.keysym.M-equal: perl:font-reset

      Mon implémentation n'est pas nickelle, mais elle fait le job. Au passage, il est possible de définir des tonnes de choses par ce type de séquence dite "OSC" comme la palette, le curseur, etc, etc. Si cela t'intéresse j'ai écrit quelques papier sur mon site là dessus.
  • Simon
    • ,
    • Si tu veux donner le lien, fait comme chez toi ! :)

      Je vais tester ton code, merci pour le partage !
  • Hylobates
    • ,
    • Bien pratique ce petit script pour URxvt, mais malheureusement le font-reset ne fait pas grand chose :)

      À part relire le fichier .Xdefaults pour trouver la taille par défaut, je ne vois pas trop ce qu'on pourrait faire pour reset (et il resterait le souci du « le mec a rien mis dans le .Xdefaults» ).
  • Ulhume
    • ,
    • @Hylobates Mouais ok, j'avoue, j'ai jamais fini de le coder en fait, reste juste l'intention ;-) Pour prouver que je ne suis pas qu'un feignant, j'ai bricolé la version complète :
      #!/usr/bin/perl
      my %original_size = ();

      sub on_start {
      my($term) = @_;
      if ($term->resource('font') =~ /size\=(\d+)/) {
      $original_size{$term->vt} = $1;
      }
      }

      sub on_user_command {
      my($term, $command) = @_;

      my $font = $term->resource('font');
      if ($font =~ /size\=(\d+)/) {
      my $new_size = my $current_size = $1;
      if ($command eq "font-increase") {
      $new_size++;
      } elsif ($command eq "font-decrease") {
      $new_size--;
      } elsif ($command eq "font-reset") {
      $new_size=$original_size{$term->vt};
      } else {
      return;
      }
      if ($new_size<6) {
      $new_size = 6;
      }
      $font =~ s/size\=$current_size/size\=$new_size/;
      $term->cmd_parse( "\033]710;$font\007");
      }
      }
  • Simon
    • ,
    • Tu peux paster ton code sur http://wall.deblan.ft si tu veux (faudrait que j'implémente la colorisation auto dans les commentaires du coup).
  • Simon
    • ,
    • http://wall.deblan.fr *

      J'ai parcouru le site après ton premier commentaire et il y a une mine d'informations intéressante :) Tu n'aurais pas un flux RSS d'ailleurs ? J'aimerais pouvoir suivre un peu son actualité via mon butineur de flux ^^
  • Ulhume
    • ,
    • Cooaaaaa ? Tu n'utilises pas Pentadactyl ??? ;-) :pageinfo et tu aurais vu que l'url des feeds c'est : http://artisan.karma-lab.net/rss.xml

      En fait, le site a été construit à une époque où les navigateurs avaient le bon goût d'afficher une icône RSS lorsqu'un flux était renseigné dans le markup... Faudrait que je me décide à coller une icône comme on fait aujourd'hui (pas l'impression que ça régresse tout ça, non, pas du tout...)

      Sinon merci (pour la mine d'info :) J'ai commençé ce site je ne veux pas dire quant, en gros lorsque je suis passé de Windows à Linux, que je notais tout dans des fichiers textes, et qu'un pote a fini par me dire "t'es con, fou ça sur un site, ça peut servir " :) Du coup y'a un peu à boire et à manger :)
  • Simon
    • ,
    • J'ai utilisé un temps Pentadactyl mais il m'a viré des raccourcis type ^L, ^K, ^T donc ça m'a plus dérangé qu'autre chose =/ Cependant, si je n'avais pas eu ça, je l'aurais gardé, d'autant plus qu'il est pour moi le plus abouti des outils du genre.
  • Ulhume
    • ,
    • De loin oui, je ne saurais même plus m'en passer. Au passage tu peux redéfinir tes propres mapping et ainsi récupérer ce quui t'a été volé.

Ajouter un commentaire

Vous pouvez utiliser du markdown.Afficher l'aide.