Eu tenho uma tabela na org-mode
qual tem o seguinte formato:
| Name | email | number |
|------------+-----------------+--------|
| Doe, John | [email protected] | 7 |
| Doe, Jane | [email protected] | |
|------------+-----------------+--------|
| Foo, Pete | [email protected] | 5 |
|------------+-----------------+--------|
| Bar, Mary | [email protected] | 3 |
| Quux, Mike | [email protected] | |
|------------+-----------------+--------|
Mas quero que a tabela seja formatada para ficar assim:
| Name | email | number |
|------------+-----------------+--------|
| Bar, Mary | [email protected] | 3 |
| Quux, Mike | [email protected] | |
|------------+-----------------+--------|
| Doe, John | [email protected] | 7 |
| Doe, Jane | [email protected] | |
|------------+-----------------+--------|
| Foo, Pete | [email protected] | 5 |
|------------+-----------------+--------|
Esta tabela deve ser classificada em ordem alfabética. Portanto, as duas últimas linhas devem ser as primeiras. A separação com as linhas horizontais deve permanecer. Se houver palavras diferentes nas colunas agrupadas, não importa como elas serão classificadas. Portanto, o último grupo da tabela acima pode ser Bar
seguido Baz
ou Baz
seguido por Bar
. Como posso fazer isso com o Emacs org-mode
?
Respostas:
Infelizmente,
org-mode
não mantém uma estrutura de dados ao redor que possa ser usada para executar modificações que são refletidas diretamente na tabela; portanto, temos que agrupar as linhas em uma lista, fazer algum processamento de lista e converter a lista resultante novamente em texto.Em geral, a abordagem é a seguinte:
org-table-hlines
; essa variável mantém os números de linha das linhas horizontaisarmazene as linhas relacionadas a cada grupo em uma lista e coloque cada grupo em uma lista
classifique esta lista pelo valor
car
de cada item, obtendo algo como isto:em seguida, recrie a tabela dessa lista iterando sobre cada grupo
EDITAR:
Aqui está algo para você começar. É um pouco estranho, mas é apenas para ilustrar a ideia. (
rows-by-group
na verdade, contém duplicatas, portanto, isso não está completamente correto.)fonte