Sortowanie wierszy ze znakami akcentowanymi

9

Podczas sortowania linii według sort-lineslinii zaczynającej się od änastępuje po linii zaczynającej się od z. Byłoby miło, gdyby można było posortować wiersze ignorując akcenty, umlauty itp., Tak jak w słowniku. Idealnie linia zaczynająca się od ändernpowinna być następująca po linii zaczynającej się od anderen.

Istnieje proste rozwiązanie do wyszukiwania znaków akcentowanych wymienionych w https://superuser.com/a/675172/, ale nie można ich tutaj użyć. Zastanawiam się, czy to rozwiązanie można dostosować w tej sytuacji.

Imię
źródło
1
FYI, składanie i grupowanie na podstawie znaków rozszerzonych zostało zaimplementowane w isearchi query-replacew następnej wersji emacsa.
Użytkownik Emacsa,

Odpowiedzi:

5

Używam do tego tej funkcji

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

EDYCJA: Aby posortować region lub bufor:

  (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
źródło
Dzięki za udostępnienie! Co powiesz na zmianę nazwy my-sort-lines-buffer? Lub przepisać do (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: Edytuję mój post z twoją propozycją.
djangoliv
Podczas uruchamiania pojawia się błąd „LC_COLLATE” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne ani program wykonywalny.
Imię
@ Imię Może jesteś w systemie Windows. Przepraszamy, ta funkcja działa tylko na
systemie