aboutsummaryrefslogtreecommitdiff

Norg Keyboard Toolbar

This package provides a toolbar you can use whenever you need to edit norg files in SwiftUI or UIKit apps. The toolbar provides the following buttons:

The heading button creates a new heading, or increases the heading of the current level. See this table for examples.

Starting State Resulting State
* ⏐ ** ⏐
* ⏐ Hello ** ⏐ Hello
* Hello ⏐ * Hello\n* ⏐
Hello ⏐ Hello\n* ⏐

The task button creates a task on a new line, unless it's at the beginning of a heading or list, in which case it adds the task to the list.

Starting State Resulting State
* ⏐ * ( ) ⏐
* ⏐ Hello * ( ) ⏐ Hello
* Hello ⏐ * Hello\n- ( )⏐
Hello ⏐ Hello\n- ( ) ⏐
~ ⏐ ~ ( ) ⏐

The reverse heading buttons add --- or === in a new line.

The code button adds a @code and @end block.

Usage

SwiftUI

Add the package to your project by including the repo URL with Xcode's package manager, and import it:

import SwiftUI
import NorgKeyboardToolbar

struct EditorView: View {
    @State private var draft = ""
    @State private var selection: TextSelection?

    var body: some View {
        TextEditor(text: $draft, selection: $selection)
            .toolbar {
                NorgKeyboardToolbar(text: $draft, selection: $selection)
            }
    }
}

NorgKeyboardToolbar then places a toolbar above the keyboard (or the bottom of the screen if a hardware keyboard is connected.) with the buttons described above.

UIKit

Add the package to your project by including the repo URL with Xcode's package manager, and import it:

import UIKit
import NorgKeyboardToolbar

...

let textView = UITextView()
textView.installNorgKeyboardAccessory()

installNorgKeyboardAccessory then attaches a toolbar above the keyboard with the buttons described above.

Development

A Justfile is provided to run common tasks:

  • just build, build the code.
  • just test, run tests.
  • just coverage, view coverage information.
  • just format, format and apply lint fixes.
  • just lint, lint the code.