Comment compter les caractères dans le tampon, y compris les espaces?

12

J'ai besoin de voir combien de caractères contient mon texte pendant que je tape. J'ai trouvé ces pages d'Emacs Wiki: nombre de mots , et il existe une solution très proche de ce dont j'ai besoin: j'ai utilisé la deuxième solution de cette page (afficher le nombre de mots dans la ligne de mode), car elle indique la quantité de personnages aussi.

Mais cela ne compte pas les espaces. Existe-t-il une solution qui affichera la quantité de caractères, y compris les espaces dans la ligne de mode? Idéalement, avec la définition du nombre cible de caractères (mais ce n'est pas nécessaire).

Aglavra
la source

Réponses:

4

La mode-line-formatvariable a déjà cette capacité intégrée, l'extrait de code suivant devrait l'ajouter vers la fin de votre ligne de mode.

(add-to-list 'global-mode-string '(" %i"))

Du Doc:

% i - imprime la taille du tampon.

Techniquement, il s'agit de la taille en octets, il peut donc ne pas correspondre parfaitement au nombre de caractères en fonction de l'encodage que vous utilisez.

Vous pouvez également essayer, M-x size-indication-mode.


Si le nombre d'octets ne vous satisfait pas, vous pouvez utiliser l'extrait de code suivant, qui peut ou non provoquer un retard lorsque vous tapez sur des tampons très volumineux.

(add-to-list 'global-mode-string
             '(:eval (format " %s"
                       (let ((tab-width 1))
                         (string-width (buffer-string))))))
Malabarba
la source
10

Alternativement, comptez les mots et les caractères, y compris les espaces dans une sélection:

M-x count-words-region
Kirill Yunussov
la source
4

Ou vous pourriez simplement M->C-x =. Les informations pertinentes apparaîtront dans le mini-tampon. (Commandes utilisées: end-of-bufferet what-cursor-position).

wvxvw
la source
3

D'autres réponses vous ont fourni des informations utiles, je pense. Vous pouvez mettre tout ce que vous voulez dans la ligne de mode, et un point de départ est size-indication-modeet variable variable mode-line-position.

Les autres réponses vous indiquent généralement la position actuelle du tampon par rapport au début du tampon (ou le début de sa restriction actuelle, s'il est rétréci).

Parfois, vous voudrez peut-être la position par rapport à une autre position. Pour cela, la bibliothèque modeline-posn.elpeut vous aider (voir Position de la ligne de mode ).

Lorsque la région n'est pas active, elle vous montre les informations habituelles (enfin, un peu mieux). Mais lorsqu'il est actif, il vous montre (dans la ligne de mode) le nombre de caractères et de lignes dans la sélection (région). Donc, pour voir la position actuelle par rapport à une autre position, utilisez simplement C-SPCpour définir la marque à l'une des positions. C-x C-xactive la région, qui vous montre sa taille en caractères (et lignes) dans la ligne de mode.

A dessiné
la source
2

À moins que je ne comprenne mal, vous pouvez simplement utiliser point-maxpour obtenir le nombre de caractères dans le tampon:

(defun count-chars ()
  (interactive)
  (save-restriction
    (widen)
    (message "%s characters" (1- (point-max)))))
Dan
la source
1
Cela fonctionne, mais ce n'est pas exactement ce que je veux: je veux avoir toujours le nombre de caractères devant mes yeux, pendant que je tape, sans l'obtenir "à la demande".
Aglavra
@Aglavra l'ajoute à votre ligne de mode.
Jordon Biondo
Ah. Vous voudrez peut-être essayer size-indication-mode, ou modifier la mode-line-positionvariable à la place, alors.
Dan