Org-Mode: Bagaimana cara membuat keybinding "org mode markup"?

11

Saya tahu saya dapat menggunakan *bold*, /italic/, _underline_, =verbatim=, ~code~, dan +strike-through+untuk menerapkan markup teks di org-mode. Tetapi bagaimana cara membuat ikatan utama untuk menerapkan perubahan ini ke wilayah teks? Misalnya, jika saya ingin membuat teks tebal, apakah ada cara yang lebih mudah daripada

  1. menavigasi ke bagian depan teks
  2. awalan dengan *
  3. menavigasi ke akhir teks
  4. menambahkan *?

Sepertinya saya tidak dapat menemukan perintah yang "tebal" pada teks, seperti org-make-region-bold. Apakah ada perintah seperti itu?

modulitos
sumber

Jawaban:

12
  1. Tandai wilayah Anda
  2. Klik C-c C-x C-f *untuk berani , C-c C-x C-f /untuk miring dll

org-penekanan adalah fungsi Lisp interaktif yang dikompilasi dalam `org.el '.

(menekankan org & CHAR opsional)

Sisipkan atau ubah penekanan, yaitu font seperti huruf tebal atau miring. Jika ada wilayah aktif, ubah wilayah itu ke penekanan baru. Jika tidak ada wilayah, cukup masukkan karakter penanda dan posisikan kursor di antara mereka. CHAR harus menjadi karakter penanda. Jika itu ruang, itu berarti menghilangkan penekanan wilayah yang dipilih. Jika CHAR tidak diberikan (misalnya dalam panggilan interaktif) itu akan diminta.

rasmus
sumber
8

Anda dapat menggunakan 1 untuk memfasilitasi penyisipan karakter mark-up di . Tambahkan kode berikut ke file init Anda:electric-pair-modeorg-mode

(electric-pair-mode 1)

(defvar org-electric-pairs '((?\* . ?\*) (?/ . ?/) (?= . ?=)
                             (?\_ . ?\_) (?~ . ?~) (?+ . ?+)) "Electric pairs for org-mode.")

(defun org-add-electric-pairs ()
  (setq-local electric-pair-pairs (append electric-pair-pairs org-electric-pairs))
  (setq-local electric-pair-text-pairs electric-pair-pairs))

(add-hook 'org-mode-hook 'org-add-electric-pairs)

Dengan ini di tempat, semua yang perlu Anda lakukan untuk membungkus daerah dengan karakter mark-up adalah pers yang sesuai karakter ( *, /, =, _, ~, atau +) sekali.

Sebagai manfaat tambahan, Emacs akan secara otomatis memasukkan pasangan karakter mark-up yang cocok di titik jika tidak ada wilayah. Misalnya, menekan *akan menyisipkan **dan meninggalkan titik di antara dua karakter sehingga Anda dapat terus mengetik tanpa harus memindahkan titik.


1 Mode ini bawaan; tidak perlu menginstal paket pihak ketiga apa pun untuk menggunakannya.

itu hanya
sumber
1
Terima kasih! Jujur, ini adalah jawaban yang paling bersih dan paling langsung. Kejutan manisnya adalah itu electric-pair-modejuga berlaku untuk pasangan ke wilayah yang dipilih. Saya selalu berpikir bahwa pasangan listrik hanya untuk memasukkan pasangan saja.
ephsmith
2
Masalah dengan pendekatan ini adalah bahwa *dan /biasanya digunakan dalam dokumen mode Org khas misalnya *memulai header. Demikian pula jika Anda mengetik garis miring dalam teks bentuk panjang misalnya ada garis miring tambahan yang perlu Anda hapus setiap kali.
PlagueHammer
5

Anda dapat menggunakan wrap-regionpaket (juga tersedia di Melpa) untuk membungkus suatu wilayah dengan karakter pilihan Anda. Ini tentu saja dapat dikonfigurasi per mode utama.

(require 'wrap-region)

(add-hook 'org-mode-hook #'wrap-region-mode)

(wrap-region-add-wrapper "=" "=" nil 'org-mode) ; select region, hit = then region -> =region= in org-mode
(wrap-region-add-wrapper "*" "*" nil 'org-mode) ; select region, hit * then region -> *region* in org-mode
(wrap-region-add-wrapper "/" "/" nil 'org-mode) ; select region, hit / then region -> /region/ in org-mode
(wrap-region-add-wrapper "_" "_" nil 'org-mode) ; select region, hit _ then region -> _region_ in org-mode
(wrap-region-add-wrapper "+" "+" nil 'org-mode) ; select region, hit + then region -> +region+ in org-mode

The expand-regionpaket melengkapi paket ini sangat baik (juga tersedia dalam Melpa).

Pemakaian

  • Anda memilih kata atau frasa menggunakan ikatan yang Anda pilih er/expand-region.
  • Hit *untuk menekankan wilayah itu sebagai huruf tebal org-mode.
Kaushal Modi
sumber