Bagaimana cara mengubah baris ke daftar periksa mode-org?


12

Misalkan saya memiliki daftar berikut. Saya ingin mengonversinya menjadi daftar periksa.

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

Bagaimana cara melakukannya?

(Saya melakukannya dengan menggunakan kbd-makro. Saya ingin tahu apakah ada orgperintah untuk melakukannya?)


Ada banyak cara dan kecepatannya subjektif. Saya akan menggunakan multiple cursorsatau query-search-replace. Dengan mengonversi ke daftar periksa, Anda bermaksud untuk hanya menambahkan baris [ ], benar?
Kaushal Modi

Iya. Bisakah Anda menunjukkan secara singkat cara menggunakan multiple cursorsatau query-search-replace?
Nick

Berikut adalah penjelasan terperinci tentang cara menggunakan multiple-cursorsuntuk melakukan pencarian-ganti. Itu akan berlaku untuk kasus ini juga.
Kaushal Modi

Pencarian web cepat memunculkan tautan ke multiple-cursorsdan halaman manual pada Query Replace . Banyak hal ini didokumentasikan dengan sangat baik, dan hanya berjarak pencarian web.
Dan

Terima kasih. Tampaknya maju dan sedikit rumit. Saya harus terbiasa dengan perintah / alat itu.
Nick

Jawaban:


23

Cara paling sederhana yang bisa saya pikirkan:

  1. Pilih daftar.
  2. Pindahkan titik ke kolom pertama.
  3. C-x r t- [ ]RET

Kamu selesai.


1
Wow! Pengeditan persegi panjang sangat mudah namun kuat! Terima kasih!
Nick

Mengagumkan. Sangat berguna untuk konversi daftar periksa.
OrgAddict

11

Pertama, beberapa semantik untuk kejelasan. Dalam org-mode, sebuah daftar polos adalah baik memerintahkan atau unordered, dimulai dengan baik -, +atau *(untuk unordered), atau nomor diikuti oleh salah satu .atau )(untuk memerintahkan). Jadi: "daftar" yang Anda gambarkan dalam contoh Anda belum merupakan org-modedaftar, karena itu tidak dimulai dengan peluru ini.

Kedua, saya kira dengan "daftar centang" yang Anda maksud adalah kotak centang yang org-modedigunakan dalam daftar polosnya, seperti pada:

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

Berikut adalah fungsi yang sangat sederhana yang akan mengonversi semua baris di wilayah yang dipilih ke daftar tidak berurutan dengan kotak centang (tidak diuji secara luas, tetapi berfungsi pada contoh Anda):

(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

Di bawah ini adalah cara lain yang menyenangkan untuk mengubah teks menjadi org-modedaftar periksa.

Gunakan Blok Kode Mode-Org untuk Mengubah Teks menjadi Daftar Kotak Centang

Catatan: Untuk menghasilkan hasil gunakan C-c C-csaat kursor berada dalam blok kode.
Kemudian jawab yesketika diminta.

  1. Bungkus daftar Anda di dalam blok dinamis bernama

    #+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. Tulis org-modeblok kode dalam bahasa pemrograman favorit Anda.

    Contoh 1 - Menggunakan elispBlok Kode

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

    Contoh 2 - Menggunakan perlBlok Kode

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

    Contoh 3 - Menggunakan bashBlok Kode

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

    Contoh 4 - Menggunakan pythonBlok Kode

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

    Contoh 5 - Menggunakan rubyBlok Kode

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

Terima kasih telah mengajukan pertanyaan Anda!

Harapan itu membantu!

Catatan: Kode ini diuji menggunakan versi emacs dan mode-org berikut.

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

Menggunakan pencarian dan ganti:

M-%Lec Enter - [] Lec Enter

Perhatikan bahwa ada ruang di sekitar kotak centang, meskipun tidak muncul dengan baik di sini.


Ini juga bekerja dengan sangat baik. Maaf saya hanya dapat menandai satu sebagai jawaban, jadi saya hanya dapat memilih. Terima kasih banyak.
Nick

3

Dalam mode Jahat atau Spacemacs Anda dapat melakukan ini, dengan asumsi Anda belum mengubah binding kunci default:

  1. Dalam kondisi Normal (setara dengan mode Normal Vim), pindahkan kursor ke awal baris pertama dalam daftar Anda.

  2. Tekan Ctrl+ v.

  3. Tekan jsatu kali untuk setiap baris yang tersisa dalam daftar Anda. (Atau, ketikkan jumlah baris yang tersisa dalam daftar Anda, diikuti dengan jkunci. Misalnya untuk contoh Anda:. 24j)

  4. Tekan Shift+ i.

  5. Jenis - [ ].

  6. Tekan Esc.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.