Como converter linhas em uma lista de verificação de modo organizacional?


12

Suponha que eu tenha a seguinte lista. Eu gostaria de convertê-lo em uma lista de verificação.

Lec 1 |         1:20:36
Lec 2 |         1:10:32
Lec 3 |         1:08:33
Lec 4 |         1:20:33
Lec 5 |         1:16:50
Lec 6 |         1:08:49
Lec 7 |         1:17:40
Lec 8 |         1:19:47
Lec 9 |         1:21:22
Lec 10 |        1:23:52
Lec 11 |        1:23:45
Lec 12 |        1:25:32
Lec 13 |        1:19:06
Lec 14 |        1:14:28
Lec 15 |        1:11:01
Lec 16 |        1:24:07
Lec 17 |        1:24:34
Lec 18 |        1:17:17
Lec 19 |        1:14:59
Lec 22 |        1:15:08
Lec 23 |        1:16:48
Lec 24 |        1:24:47
Lec 25 |        1:25:21

Como fazer isso?

(Eu fiz isso usando o kbd-macro. Gostaria de saber se existe algum orgcomando para fazer isso?)


Existem muitas maneiras e a rapidez é subjetiva. Eu usaria multiple cursorsou query-search-replace. Ao converter para lista de verificação, você quer simplesmente acrescentar as linhas com [ ], correto?
Kaushal Modi

Sim. Você pode mostrar brevemente como usar multiple cursorsou query-search-replace?
Nick

Aqui está uma explicação detalhada de como usar multiple-cursorspara substituir a pesquisa. Isso se aplicaria a este caso também.
precisa

As pesquisas rápidas na Web exibem os links multiple-cursorse a página do manual em Substituição de Consulta . Muitas dessas coisas estão realmente bem documentadas e estão a apenas uma pesquisa da Web.
Dan

Obrigado. Parece estar avançado e um pouco complexo. Eu preciso me familiarizar com esses comandos / ferramentas.
21414 Nick

Respostas:


23

A maneira mais simples de pensar:

  1. Selecione a lista.
  2. Mova o ponto para a primeira coluna.
  3. C-x r t- [ ]RET

Você terminou.


1
Uau! A edição do retângulo é tão direta e poderosa! Obrigado!
Nick

Que incrível. Muito útil para a conversão de listas de verificação.
OrgAddict

11

Primeiro, alguma semântica para maior clareza. Em org-mode, uma lista simples é ordenada ou desordenada, começando com a -, +ou *(para desordenada) ou um número seguido por a .ou a )(para ordenada). Então: a "lista" que você descreve no seu exemplo ainda não é uma org-modelista, porque não começa com nenhum desses marcadores.

Segundo, presumo que "lista de verificação" significa as caixas de seleção que são org-modeusadas em suas listas simples, como em:

- [X] A checked list item
- [ ] An unchecked list item

Aqui está uma função muito simples que converterá todas as linhas da região selecionada em uma lista não ordenada com caixas de seleção (não amplamente testadas, mas funciona no seu exemplo):

(defun org-convert-lines-to-checklist (beg end)
  "Convert all plain lines in region to a plain list with
checkboxes."
  (interactive "r")
  (save-excursion
    (goto-char beg)
    (dotimes (_ (- (line-number-at-pos end) (line-number-at-pos beg)))
      (insert "- [ ] ")
      (indent-according-to-mode)
      (forward-line 1))))

7

Abaixo está outra maneira divertida de transformar texto em uma org-modelista de verificação.

Use blocos de código no modo organizacional para converter texto em lista de caixas de seleção

Nota: Para gerar os resultados, use C-c C-cenquanto o cursor estiver dentro de um bloco de código.
Em seguida, responda yesquando solicitado.

  1. Agrupe sua lista dentro de um bloco dinâmico nomeado

    #+NAME: my-list-block  
    #+BEGIN:  
    Lec 1 |         1:20:36'  
    Lec 2 |         1:10:32  
    Lec 3 |         1:08:33  
    Lec 4 |         1:20:33  
         ... More ...  
    Lec 24 |        1:24:47  
    Lec 25 |        1:25:21  
    #+END:  
    
  2. Escreva um org-modebloco de código na sua linguagem de programação favorita.

    Exemplo 1 - Usando um elispbloco de código

    #+name: list-into-checklist-elisp
    #+header: :results list raw replace output 
    #+header: :var data=my-list-block()
    #+begin_src elisp
      (dolist (x (split-string data "\n"))
            (princ (format "[ ] %s\n" x)))
    #+end_src
    
    #+RESULTS: list-into-checklist-elisp
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    Exemplo 2 - Usando um perlbloco de código

    #+name: list-into-checklist-perl
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+begin_src perl
      map { printf qq([ ] %s\n), $_ } split(/\n/, $data); 
    #+end_src
    
    #+RESULTS: list-into-checklist-perl
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    Exemplo 3 - Usando um bashbloco de código

    #+name: list-into-checklist-bash
    #+header: :results list raw replace output
    #+header: :shebang #!/usr/bin/env bash
    #+header: :var data=my-list-block()
    #+begin_src sh
      while IFS="\n" read -ra ADDR; do
            for i in "${ADDR[@]}"; do
                echo "[X] $i"
            done
       done <<< "$data"
    #+end_src
    
    #+RESULTS: list-into-checklist-bash
    - [X] Lec 1 |         1:20:36
    - [X] Lec 2 |         1:10:32
    - [X] Lec 3 |         1:08:33
    - [X] Lec 4 |         1:20:33
    - [X]       ... More ...
    - [X] Lec 24 |        1:24:47
    - [X] Lec 25 |        1:25:21
    

    Exemplo 4 - Usando um pythonbloco de código

    #+name: list-into-checklist-python
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+Begin_src python
      l = ["[ ] {x}".format(x=row) for row in data.splitlines()]
      for i in l: print i
    #+end_src 
    
    #+RESULTS: list-into-checklist-python
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

    Exemplo 5 - Usando um rubybloco de código

    #+name: list-into-checklist-ruby
    #+header: :results list raw replace output
    #+header: :var data=my-list-block()
    #+Begin_src ruby
      for l in  data.split("\n")
        puts "[ ] #{l}"
      end
    #+end_src 
    
    #+RESULTS: list-into-checklist-ruby
    - [ ] Lec 1 |         1:20:36
    - [ ] Lec 2 |         1:10:32
    - [ ] Lec 3 |         1:08:33
    - [ ] Lec 4 |         1:20:33
    - [ ]       ... More ...
    - [ ] Lec 24 |        1:24:47
    - [ ] Lec 25 |        1:25:21
    

Obrigado por fazer sua pergunta!

Espero que tenha ajudado!

Nota: Este código foi testado usando as seguintes versões do emacs e do modo organizacional.

GNU Emacs 24.4.1 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14)
Org-mode version 8.2.10 (8.2.10-29-g89a0ac-elpa)

6

Usando pesquisar e substituir:

M-%Lec Enter - [] Lec Enter

Observe que existem espaços ao redor da caixa de seleção, embora eles não apareçam bem aqui.


Isso também funciona muito bem. Desculpe, eu só posso marcar uma como resposta, então só posso votar. Muito obrigado.
Nick

3

No modo Evil ou Spacemacs, você pode fazer isso, assumindo que não alterou as teclas padrão:

  1. No estado Normal (equivalente ao modo Normal do Vim), mova o cursor para o início da primeira linha da sua lista.

  2. Pressione Ctrl+ v.

  3. Pressione juma vez para cada linha restante da sua lista. (Como alternativa, digite o número de linhas restantes na sua lista, seguido pela jtecla. Por exemplo, para o seu exemplo:. 24j)

  4. Pressione Shift+ i.

  5. Digite - [ ].

  6. Pressione Esc.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.