Tri des lignes avec des caractères accentués

9

Lors du tri des lignes par sort-linesles lignes commençant par ävient après les lignes commençant par z. Ce serait bien si les lignes pouvaient être triées en ignorant les accents, les trémas, etc., comme dans un dictionnaire. Idéalement, une ligne commençant par änderndevrait être placée après une ligne commençant par anderen.

Il existe une solution simple pour rechercher des caractères accentués mentionnés dans https://superuser.com/a/675172/ mais ne peut pas être utilisée ici. Je me demande si cette solution peut être adaptée dans cette situation.

Nom
la source
1
Pour info, le pliage et le regroupement basés sur des caractères étendus ont été implémentés dans isearchet query-replacedans la prochaine version d'emacs.
Emacs User

Réponses:

5

J'utilise cette fonction pour ça

(defun my-sort-lines ()
    (interactive)
    (shell-command-on-region (point-min) (point-max) "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t ))

EDIT: Pour trier une région ou un tampon:

  (defun my-sort-lines-buffer ()
    (interactive)
    (shell-command-on-region (point-min) (point-max) "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t ))
  (defun my-sort-lines-region (start end) 
    (interactive "r") 
    (shell-command-on-region start end "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t))
  (defun my-sort-lines-region-or-buffer ()
    (interactive)
    (save-excursion
      (if (region-active-p)
          (progn
            (my-sort-lines-region (region-beginning) (region-end))
            (message "Sorted selected region"))
        (progn
          (my-sort-lines-buffer)
          (message "Sorted buffer")))))
djangoliv
la source
Merci d'avoir partagé! Et pour renommer my-sort-lines-buffer? Ou réécrire (defun my-sort-lines (start end) (interactive "r") (shell-command-on-region start end "LC_COLLATE=en_US.UTF-8 sort" (buffer-name) t))?
Marco Wahl
@Marco Wahl: Je modifie mon message avec votre proposition.
djangoliv
Lors de l'exécution, j'obtiens l'erreur «LC_COLLATE» qui n'est pas reconnue comme une commande interne ou externe ni comme un programme exécutable.
Nom du
@Name Peut-être que vous êtes sous Windows. Désolé cette fonction ne fonctionne que sur linux ...
djangoliv