Como contar caracteres no buffer, incluindo espaços?

12

Preciso ver quantos caracteres contém meu texto enquanto digito. Encontrei estas páginas do Emacs Wiki: Contagem de palavras e existe uma solução muito próxima do que eu preciso: usei a segunda solução desta página (mostre o número de palavras na linha de modo), porque mostra a quantidade de caracteres também.

Mas não conta espaços. Existe alguma solução que mostre a quantidade de caracteres, incluindo espaços na linha de modo? Idealmente, com a definição da quantidade alvo de caracteres (mas isso não é necessário).

Aglavra
fonte

Respostas:

4

A mode-line-formatvariável já possui esse recurso, o seguinte snippet deve adicioná-lo próximo ao final da sua linha de modo.

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

Do Doc:

% i - imprime o tamanho do buffer.

Tecnicamente, esse é o tamanho em bytes, portanto, pode não corresponder perfeitamente ao número de caracteres, dependendo da codificação usada.

Você também pode tentar M-x size-indication-mode.


Se o número de bytes não satisfizer você, você poderá usar o seguinte trecho, que pode ou não causar atraso ao digitar buffers muito grandes.

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

Como alternativa, conte palavras e caracteres, incluindo espaços em uma seleção:

M-x count-words-region
Kirill Yunussov
fonte
4

Ou você poderia simplesmente M->C-x =. As informações relevantes aparecerão no minibuffer. (Comandos usados: end-of-buffere what-cursor-position).

wvxvw
fonte
3

Outras respostas forneceram informações úteis, eu acho. Você pode colocar o que quiser na linha de modo, e um lugar para começar é uma size-indication-modevariável variável mode-line-position.

As outras respostas geralmente informam a posição atual do buffer em relação ao início do buffer (ou o início de sua restrição atual, se ele for reduzido).

Às vezes você pode querer a posição relativa a alguma outra posição. Para isso, a biblioteca modeline-posn.elpode ajudar (consulte Posição da linha de modo ).

Quando a região não está ativa, ela mostra as informações usuais (bem, um pouco melhor). Mas quando está ativo, mostra (na linha de modo) o número de caracteres e linhas na seleção (região). Portanto, para ver a posição atual em relação a outra posição, use apenas C-SPCpara definir a marca em uma das posições. C-x C-xativa a região, que mostra seu tamanho em caracteres (e linhas) na linha de modo.

Desenhou
fonte
2

A menos que eu esteja entendendo errado, você pode usar apenas point-maxpara obter o número de caracteres no buffer:

(defun count-chars ()
  (interactive)
  (save-restriction
    (widen)
    (message "%s characters" (1- (point-max)))))
Dan
fonte
1
Funciona, mas não é exatamente isso que eu quero: quero ter sempre um número de caracteres diante dos meus olhos enquanto digito, sem obtê-lo "sob demanda".
Aglavra
@Aglavra adicione-o à sua linha de modo.
Jordon Biondo
Ah Você pode tentar size-indication-mode, ou modificar a mode-line-positionvariável, então.
Dan