Як перетворити рядки в контрольний список в режимі org?


12

Припустимо, у мене є такий список. Я хотів би перетворити його в контрольний список.

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

Як це зробити?

(Я робив це за допомогою kbd-macro. Цікаво, чи є orgкоманда це зробити?)


Існує багато способів, і швидкість є суб'єктивною. Я б використовував multiple cursorsабо query-search-replace. Перетворюючи на контрольний список, ви маєте на увазі просто додавати рядки [ ], чи не так?
Каушал Моді

Так. Ви можете коротко показати, як користуватися multiple cursorsабо query-search-replace?
Нік

Ось детальне пояснення, як використовувати multiple-cursorsдля пошуку-заміни. Це стосується і цієї справи.
Каушал Моді

Швидкий пошук в Інтернеті відображає посилання на multiple-cursorsта сторінку керівництва на Замінити запит . Багато цього матеріалу справді добре зафіксовано, і це лише пошук в Інтернеті.
Дан

Дякую. Це здається передовим і трохи складним. Мені потрібно ознайомитися з цими командами / інструментами.
Нік

Відповіді:


23

Найпростіший спосіб, про який я міг придумати:

  1. Виберіть список.
  2. Перемістіть точку до першого стовпця.
  3. C-x r t- [ ]RET

Ви закінчили.


1
Оце Так! Редагування прямокутника настільки прямо вперед, але потужне! Дякую!
Нік

Таке дивовижне. Дуже корисно для перетворення контрольних списків.
OrgAddict

11

По-перше, деяка семантика для наочності. В org-mode, А звичайний список або замовити або невпорядкований, починаючи з або -, +або *(для невпорядкованого), або номера з подальшим або .або )(для замовлення). Отже: "список", який ви описуєте у своєму прикладі, ще не є org-modeсписком, оскільки він не починається з жодної з цих куль.

По-друге, я припускаю, що під контрольним списком ви маєте на увазі прапорці, які org-modeвикористовуються у своїх простих списках, як у:

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

Ось дуже проста функція, яка буде перетворювати всі рядки у вибраному регіоні у не упорядкований список за допомогою прапорців (недостатньо перевірено, але працює на вашому прикладі):

(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

Нижче - ще один цікавий спосіб перетворити текст у org-modeконтрольний список.

Використовуйте кодові блоки блоків у форматі Org, щоб перетворити текст у список прапорців

Примітка. Для отримання результатів використовуйте, C-c C-cколи курсор знаходиться в блоці коду.
Потім відповідь, yesколи буде запропоновано.

  1. Оберніть свій список всередині названого динамічного блоку

    #+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. Напишіть org-modeблок коду улюбленою мовою програмування.

    Приклад 1 - Використання elispблоку коду

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

    Приклад 2 - Використання perlблоку коду

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

    Приклад 3 - Використання bashблоку коду

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

    Приклад 4 - Використання pythonкодового блоку

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

    Приклад 5 - Використання rubyблоку коду

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

Дякуємо за запитання!

Сподіваюся, що допомогло!

Примітка. Цей код був протестований за допомогою наступних версій emacs та org-mode.

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

Використання пошуку та заміни:

M-%Лек Enter - [] Лек Enter

Зауважте, що навколо цього прапорця є пробіли, хоча вони не відображаються добре.


Це також дуже добре працює. Вибачте, що я можу позначити лише одну як відповідь, тому можу лише проголосувати. Велике спасибі.
Нік

3

У режимі Evil або Spacemacs ви можете це зробити, якщо ви не змінили типові прив’язки клавіш:

  1. У звичайному стані (еквівалентно нормальному режиму Vim) перемістіть курсор на початок першого рядка у списку.

  2. Натисніть Ctrl+ v.

  3. Натисніть jодин раз для кожної що залишилася рядка в списку. (Крім того, введіть кількість рядків, що залишилися у вашому списку, а потім jключ. Наприклад, для вашого прикладу:. 24j)

  4. Натисніть Shift+ i.

  5. Тип - [ ].

  6. Натисніть Esc.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.