All Projects → sulami → Literate Calc Mode.el

sulami / Literate Calc Mode.el

Licence: gpl-3.0
🧮 Literate programming for M-x calc

Projects that are alternatives of or similar to Literate Calc Mode.el

Emacs Dashboard
An extensible emacs dashboard
Stars: ✭ 694 (+245.27%)
Mutual labels:  hacktoberfest, emacs
Lsp Mode
Emacs client/library for the Language Server Protocol
Stars: ✭ 3,691 (+1736.32%)
Mutual labels:  hacktoberfest, emacs
Vscode Emacs Mcx
Awesome Emacs Keymap - VSCode emacs keybinding with multi cursor support
Stars: ✭ 135 (-32.84%)
Mutual labels:  hacktoberfest, emacs
Eva
a calculator REPL, similar to bc(1)
Stars: ✭ 405 (+101.49%)
Mutual labels:  hacktoberfest, calculator
Counsel Spotify
Control Spotify App through Emacs
Stars: ✭ 49 (-75.62%)
Mutual labels:  hacktoberfest, emacs
Emacs Doom Themes
A megapack of themes for GNU Emacs.
Stars: ✭ 1,706 (+748.76%)
Mutual labels:  hacktoberfest, emacs
Build Emacs For Macos
Somewhat hacky script to automate building of Emac.app on macOS.
Stars: ✭ 192 (-4.48%)
Mutual labels:  hacktoberfest, emacs
Hackernews.el
Hacker News client for Emacs
Stars: ✭ 200 (-0.5%)
Mutual labels:  emacs
Rikaikun
Translate Japanese by hovering over words.
Stars: ✭ 200 (-0.5%)
Mutual labels:  hacktoberfest
Pajbot
Twitch moderation bot
Stars: ✭ 198 (-1.49%)
Mutual labels:  hacktoberfest
Codeigniter Ion Auth
Simple and Lightweight Auth System for CodeIgniter
Stars: ✭ 2,290 (+1039.3%)
Mutual labels:  hacktoberfest
Windows Terminals
Repository with some awesome Windows Terminals themes
Stars: ✭ 199 (-1%)
Mutual labels:  hacktoberfest
Colaboradados.github.io
O VEÍCULO COLABORATIVO SOBRE TRANSPARÊNCIA E OPEN DATA NO BRASIL.
Stars: ✭ 201 (+0%)
Mutual labels:  hacktoberfest
Learn Python
List of resources useful for learning Python 🐍
Stars: ✭ 199 (-1%)
Mutual labels:  hacktoberfest
Insect
High precision scientific calculator with support for physical units
Stars: ✭ 2,469 (+1128.36%)
Mutual labels:  calculator
Cucumber Jvm
Cucumber for the JVM
Stars: ✭ 2,363 (+1075.62%)
Mutual labels:  hacktoberfest
Easybuild Easyconfigs
A collection of easyconfig files that describe which software to build using which build options with EasyBuild.
Stars: ✭ 200 (-0.5%)
Mutual labels:  hacktoberfest
Evil Multiedit
Multiple cursors for evil-mode, based on iedit
Stars: ✭ 200 (-0.5%)
Mutual labels:  emacs
Nanoutils
🌊 Tiniest FP-friendly JavaScript utils library
Stars: ✭ 200 (-0.5%)
Mutual labels:  hacktoberfest
Website
Techqueria is a nonprofit the serves the largest community of Latinx in Tech
Stars: ✭ 200 (-0.5%)
Mutual labels:  hacktoberfest

#+TITLE: Literate Calc Mode

[[https://melpa.org/#/literate-calc-mode][file:https://melpa.org/packages/literate-calc-mode-badge.svg]]

Literate programming for =M-x calc=. There is an [[http://sulami.github.io/posts/literate-calc-mode/][announcement blog post]].

Displays inline results for calculations, supports variables and updates as you type (if you want). Also works in your favourite markup mode.

#+caption: Demo [[file:./scrot.png]]

  • Installing

Simply grab it from [[https://melpa.org/][MELPA]].

** [[https://github.com/jwiegley/use-package][use-package]]

#+begin_src emacs-lisp (use-package literate-calc-mode :ensure t) #+end_src

** [[https://github.com/raxod502/straight.el][straight.el]]

#+begin_src emacs-lisp (straight-use-package 'literate-calc-mode) #+end_src

** package.el

[[https://melpa.org/#/getting-started][Ensure you have MELPA available.]]

=M-x package-install=, select =literate-calc-mode=.

** Manual

Just fetch [[file:literate-calc-mode.el][literate-calc-mode.el]], save it somewhere and load it into Emacs.

  • Configuration

There is a =M-x customize= group named after the mode which contains the following options:

| literate-calc-mode-idle-time | How long to wait after typing to recalculate results | | literate-calc-mode-inhibit-line-functions | Hook functions called for each line to test whether to inhibit calculation |

The idle time prevents lag due to constant recalculation in the middle of typing, defaulting to 1 second.

There is currently a single inhibitor, which comes installed by default:

  • literate-calc-mode-inhibit-in-src-blocks :: Prevents evaluation inside org-mode src blocks

Of course you can also just setq the options directly.

  • Use

There is both a major literate-calc-mode and a minor literate-calc-minor-mode. The major mode does some basic syntax highlighting, while the minor mode only evaluates all calc statements while typing.

The minor mode works quite well with org-/markdown mode or other markup language major modes.

There are also some functions which can be called without any mode being active:

| =M-x literate-calc-eval-line= | Evaluates a single line | | =M-x literate-calc-eval-buffer= | Evaluates the whole buffer | | =M-x literate-calc-insert-results= | Evaluates the whole buffer and inserts results | | =M-x literate-calc-clear-overlays= | Removes all overlays and clears variables | | =M-x literate-calc-remove-results= | Removes all results and clears variables |

** Using Units

You can simply append units to your values like so:

#+begin_src fundamental Flour = 500g => Flour: 500 g #+end_src

Unit conversion (and other complex functions) can be used by invoking the matching [[https://www.gnu.org/software/emacs/manual/html_node/calc/Function-Index.html][Algebraic Function]].

#+begin_src fundamental = usimplify(1m + 3mm) => 1.003 m #+end_src

You can also use unknown mathematical symbols:

#+begin_src fundamental = x*2 + x-3 => 3 x - 3 #+end_src

** Evaluation in Org

Org-mode source blocks can be evaluated (C-c C-c by default).

If :results is set to value, which is the default, a block returns its last result. If :results is set to output, it will return the entire block, annotated with results.

Local variables can be defined in header arguments as :var a=38 b=4.

  • Full Example

#+begin_src fundamental This is a literate calc file.

Lines without "=" are ignored.

All results starting with "=>" are an overlay generated by literate-calc-mode. That means they are displayed in Emacs, but not actually in the buffer/file contents.

We can calculate a value like so:

= 2 + 2 => 4

If there is any string on the left hand side, it becomes a bound variable.

Pi = 3.14159 => Pi: 3.14159

We can use this variable below the definiton.

Tau = Pi * 2 => Tau: 6.28318

Results are calculated using Emacs' own calc, so you can use formulas as well.

= round(Pi, 2) => 3.14

Later bindings shadow earlier ones:

Pi = 3 => Pi: 3

= Pi => 3

Variable names can have spaces as well:

Monthly Expenses = 500 => Monthly Expenses: 500

Monthly Income = 1000 => Monthly Income: 1000

Annual Savings = 12 * (Monthly Income - Monthly Expenses) => Annual Savings: 6000

All values are recalculated on every update in a spreadsheet-like fashion.

Calc also has a lot of advanced features, like arrays:

Numbers = [1 2 3] => Numbers: [1, 2, 3]

= 3 Numbers => [3, 6, 9]

#+end_src

  • Roadmap

There are some additional features I'm currently thinking about.

** Semantic Highlighting

One of the original inspirations was [[http://tydligapp.com/][Tydlig]], which does similar things, but also has semantic highlighting. That means, variables are highlighted in different colours, but always the same one for a given variable, so that you can see where it's used at a glance.

I might steal some code from [[https://github.com/Fanael/rainbow-identifiers][rainbow-identifiers]], which is one of the [[https://github.com/ankurdave/color-identifiers-mode][shorter existing implementations]] around, and adapt that to our needs.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].