# Powering-up Special Blocks Musa Al-hassy Users will generally only make use of a few predefined \`special blocks', such as \`example, centre, quote', and will not bother with the effort required to make new ones. When new encapsulating notions are required, users will either fallback on HTML or LaTeX specific solutions, usually littered with \`#+ATTR' clauses to pass around configurations or parameters. Efforts have been exerted to mitigate the trouble of producing new special blocks. However, the issue of passing parameters is still handled in a clumsy fashion; e.g., by having parameters be expressed in a special block's content using specific keywords. We present a novel approach to making special blocks in a familiar fashion and their use also in a familiar fashion. We achieve the former by presenting \`\`defblock'', an anaphoric macro exceedingly similar to \`\`defun'', and for the latter we mimic the usual \`\`src''-block syntax for argument passing to support special blocks. For instance, here is a sample declaration. (defblock stutter () (reps 2) "Output the CONTENTS of the block REPS many times" (org-parse (s-repeat reps contents))) Here is an invocation that passes an *optional* argument; which defaults to 2 when not given.

Emacs for the win ⌣̈

Upon export, to HTML or LaTeX for instance, the contents of this block are repeated (\`stuttered') 5 times. The use of \`\`src''-like invocation may lead to a decrease in \`#+ATTR' clauses. In the presentation, we aim to show a few \`practical' special blocks that users may want: A block that … - translates *some selected* text —useful for multilingual blogs - hides *some selected* text —useful for learning, quizzes - folds/boxes text —useful in blogs for folding away details In particular, all of these examples will be around ~5 lines long! We also have a larger collection of more useful block types, already implemented. The notable features of the system are as follows. - Familiar \`\`defun'' syntax for making block —\`\`defblock'' - Familiar \`\`src'' syntax for passing arguments —e.g., \`\`:key value'' - Fine-grained control over export translation phases —c.f., \`\`org-parse'' above - **Modular**: New blocks can be made out of existing blocks really quickly using \`\`blockcall'' —similar to Lisp's \`\`funcall''. We will show how to fuse two blocks to make a new one, also within ~5 lines. It is hoped that the ease of creating custom special blocks will be a gateway for many Emacs users to start using Lisp.