Let's share init.org customizations

I suggest we use this topic to share the scheme code that we write in init.org to add cool stuff.

This will allow others to use it, give some new ideas, and maybe some gurus will suggest better ways to do things.

Here is what I have now:

  (define (insert-src-calc)
    (insert "src_calc{}")
    (backward-char))
  (define (insert-usual-table)
    (insert "|---------+---+---|\n| x | | |\n| x | | |\n|---------+---+---|\n| *Total* | | 0 |\n|---------+---+---|\n#+TBLFM: @>$3=vsum(@1$2..@-1$2)-vsum(@1$3..@-1$3)")
    (goto-char (- (point) 146)))

  

  (define (show-transform-commands)
    (if (string=? (region) "")
        (alert "" "No text is selected.")
        (sheet '(("Uppercase" (region-text-set (string-upcase (region))))
                 ("Lowercase" (region-text-set (string-downcase (region))))
                 ("Capitalize" (region-text-set (string-titlecase (region))))
                 ("Boldface" (region-text-set (string-append "*" (region) "*")))
                 ("Italic" (region-text-set (string-append "/" (region) "/")))
                 ("Underline" (region-text-set (string-append "_" (region) "_")))))))

 

  (define (increment-number)
    (if (string=? (region) "")
        (alert "" "No text is selected.")
        (region-text-set (number->string (+ (string->number (region)) 1)))))
  (define (decrement-number)
    (if (string=? (region) "")
        (alert "" "No text is selected.")
        (region-text-set (number->string (- (string->number (region)) 1)))))
  (define (forward-char-or-increment-number)
    (if (string=? (region) "")
        (forward-char)
        (region-text-set (number->string (+ (string->number (region)) 1)))))
  (define (backward-char-or-decrement-number)
    (if (string=? (region) "")
        (backward-char)
        (region-text-set (number->string (- (string->number (region)) 1)))))

 

I started with today, and then I am quite stuck, as I don’t know how to display a date choice dialog box, and as it seems that date functions such as add-duration or current-seconds, or most functions from SRFI section 19, are not implemented in BiwaScheme.

  (define (insert-some-date)
        (sheet '(("Today" (insert (date->string (current-date) "[~Y-~m-~d ~a]")))
                 ("Tomorrow" (insert (date->string (seconds->date (+ (current-seconds) 86400)) "[~Y-~m-~d ~a]"))))))

I do intend on (slowly!) improving BiwaScheme (and of course submitting pull requests to the project) to add missing functionality. I have a fork ready but haven’t yet made any improvements (https://github.com/mgkennard/biwascheme).

You might find it useful to see the JavaScript file I’ve built from the source which is then included in beorg. I’ve attached to this post. You can search in this for functions to see if they have been implemented - for example string-titlecase hasn’t (there are placeholders for most functions which are yet to be added).

There are also some additional functions defined in JavaScript which bridge to native code - I have attached the JavaScript for this also.

Documentation is lacking for both BiwaScheme and what beorg offers in terms of Scheme. Both of these I hope to address.

Also over time I hope to expose things such as the date dialog (I’ve added this to my possible future improvements list) via Scheme. Hopefully if I can see how people are using Scheme on the forum that will provide lots of ideas for improvement.


Clock in and clock out

  

#+BEGIN_SRC scheme

(define (clock-in)
  (insert ":LOGBOOK:\nCLOCK: \n:END:\n")
  (goto-char (- (point) (string-length "\n:END:\n")))
  (insert (date->string (current-date) "[~Y-~m-~d ~a ~H:~M]"))
  (goto-char (+ (point) (string-length "\n:END:\n")))
  )

(define (clock-out)
  (insert (date->string (current-date) "--[~Y-~m-~d ~a ~H:~M]"))
  (goto-char (point-max)))

(set! editor-toolbar-items '(("icon-time" (clock-in))
                             ("icon-clock" (clock-out))
                             ("icon-left" (backward-char))
                             ("icon-right" (forward-char))
                             ("icon-list" (insert "+ "))
                             ("icon-change" (show-transform-commands))
                             ("icon-settings" (insert-code-snippet))))
#+END_SRC

Back to the “inserting some date” function.

 Thanks to the date picker availability, that’s just too easy now 

  (define (insert-some-date-with-date-picker)
          (date-picker (current-date)
	               #f
		       (lambda (removed date includes-time)
		               (if (not removed)
			           (insert (date->string date "[~Y-~m-~d ~a]"))))))

Increment / decrement number: (…) then I realized that “>” and “<” can be used to move cursor if nothing is selected, or increment/decrement if a number is selected. I think I will soon do some pattern matching on (region), to be able to do other stuff (cycle between TODO status, change “Thu” to “Fri”, whatever).

About this one, I think rxmatch would be nice, but it doesn’t look implemented in BiwaScheme now (actually, there is some code but it is commented). So that will wait :)


Date insertion, final version:

 

  (define (insert-some-date-with-date-picker-from-selection)
    (let ((starting-date (if (string=? (region) "")
                         (current-date)
			 (parse-date (region)))))
         (date-picker starting-date
	               #f
		       (lambda (cancelled date includes-time)
		               (if (not cancelled)
			           (if (not includes-time)
			               (insert (date->string date "[~Y-~m-~d ~a]"))
			               (insert (date->string date "[~Y-~m-~d ~a ~H:~M]"))))))))

I love this init.org customization and manage it over GitHub!

Let me share mine here,

https://github.com/jsntn/beorg-init.org


Thanks for posting your init.org - a nice end to the working day to see this! (I’m in the UK!)

Download now for iPhone and iPad

Follow us on Mastodon and Bluesky

Privacy Policy | Press Kit