Jak przekonwertować linie na listę kontrolną w trybie org?

12

Załóżmy, że mam następującą listę. Chciałbym przekonwertować go na listę kontrolną.

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

Jak to zrobić?

(Zrobiłem to za pomocą makra kbd. Zastanawiam się, czy jest na to orgpolecenie?)

Nacięcie
źródło
Istnieje wiele sposobów, a szybkość jest subiektywna. Chciałbym użyć multiple cursorslub query-search-replace. Konwertując na listę kontrolną, oznacza to po prostu wstawienie wierszy [ ], prawda?
Kaushal Modi
Tak. Czy możesz krótko pokazać, jak używać multiple cursorslub query-search-replace?
Nick
Oto szczegółowe wyjaśnienie, jak korzystać multiple-cursorsz funkcji zamiany wyszukiwania. Odnosi się to również do tej sprawy.
Kaushal Modi
Szybkie wyszukiwanie w Internecie powoduje wyświetlenie linków multiple-cursorsi strony podręcznika w Query Replace . Wiele z tych rzeczy jest naprawdę dobrze udokumentowanych i można je znaleźć w Internecie.
Dan
Dziękuję Ci. Wydaje się być zaawansowany i trochę skomplikowany. Muszę się zapoznać z tymi poleceniami / narzędziami.
Nick

Odpowiedzi:

23

Najprostszy sposób, w jaki mogłem wymyślić:

  1. Wybierz listę.
  2. Przenieś punkt do pierwszej kolumny.
  3. C-x r t- [ ]RET

Gotowe.

wvxvw
źródło
1
Łał! Edycja prostokąta jest tak prosta, ale potężna! Dziękuję Ci!
Nick
Taki wspaniały. Bardzo przydatny do konwersji list kontrolnych.
OrgAddict
11

Po pierwsze, trochę semantyki dla jasności. W org-mode, zwykła lista jest uporządkowana lub nieuporządkowana, zaczynając od a -, +lub *(dla nieuporządkowanego), lub liczby po której następuje albo a .lub a )(dla uporządkowanego). Zatem: „lista” opisana w przykładzie nie jest jeszcze org-modelistą, ponieważ nie zaczyna się od żadnej z tych kul.

Po drugie, jak sądzę przez „lista kontrolna” masz na myśli pól wyboru , które org-modewykorzystuje w zwykły list, na przykład:

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

Oto bardzo prosta funkcja, która przekonwertuje wszystkie wiersze w wybranym regionie na nieuporządkowaną listę z polami wyboru (nie jest dokładnie testowana, ale działa na twoim przykładzie):

(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))))
Dan
źródło
7

Poniżej znajduje się inny fajny sposób na przekształcenie tekstu w org-modelistę kontrolną.

Użyj bloków kodu w trybie Org, aby przekonwertować tekst na listę pól wyboru

Uwaga: Aby wygenerować wyniki, użyj, C-c C-cgdy kursor znajduje się w bloku kodu.
Następnie odpowiedz na yesmonit.

  1. Zawiń listę w nazwanym bloku dynamicznym

    #+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. Napisz org-modeblok kodu w swoim ulubionym języku programowania.

    Przykład 1 - Korzystanie z elispbloku kodu

    #+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
    

    Przykład 2 - Korzystanie z perlbloku kodu

    #+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
    

    Przykład 3 - Korzystanie z bashbloku kodu

    #+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
    

    Przykład 4 - Korzystanie z pythonbloku kodu

    #+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
    

    Przykład 5 - Korzystanie z rubybloku kodu

    #+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
    

Dziękujemy za pytanie!

Mam nadzieję, że to pomogło!

Uwaga: ten kod został przetestowany przy użyciu następujących wersji emacsa i trybu org.

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)
Melioratus
źródło
6

Za pomocą wyszukiwania i zamień:

M-%Lec Enter - [] Lec Enter

Zauważ, że wokół pola wyboru są spacje, chociaż nie są tu dobrze widoczne.

użytkownik2699
źródło
Działa to również bardzo dobrze. Przepraszam, mogę zaznaczyć tylko jedną odpowiedź, więc mogę tylko głosować. Dziękuję Ci bardzo.
Nick
3

W trybie zła lub Spacemacs możesz to zrobić, zakładając, że nie zmieniłeś domyślnych przypisań klawiszy:

  1. W stanie normalnym (odpowiadającym trybowi normalnemu Vima) przesuń kursor na początek pierwszego wiersza na liście.

  2. Naciśnij Ctrl+ v.

  3. Naciśnij jraz dla każdej pozostałej linii na liście. (Alternatywnie wpisz liczbę pozostałych wierszy na liście, a następnie jklawisz. Np. Na przykład:. 24j)

  4. Naciśnij Shift+ i.

  5. Wpisz - [ ].

  6. Prasa Esc.

sampablokuper
źródło