<commit_before>![Logo](misc/logo.png)

# Go.el
Not a fan of Emacs Lisp? Hack Emacs in Go!

## Overview

#### What?

`Go.el` is Emacs package that makes it possible to use 
[Go](https://golang.org/) programming language instead
of Emacs Lisp inside Emacs. 

#### How?

Valid Go package is converted
into Emacs Lisp bytecode that can be used inside Emacs.

Emacs `Go` (first letter is capital, thats important) package
implements Go runtime, so translated code behaves as
close to the [specs](https://golang.org/ref/spec) as possible.

#### Go from Elisp

To run Go inside Emacs, you need to evaluate 
`(Go-load-package PKG-NAME)` and all package 
functions, types and variables become available.

Symbols from Go are loaded as: `"Go-" PKG-NAME "." SYM-NAME`.
For example, `foo` package function `Bar` 
is loaded as `Go-foo.Bar`.

#### Elisp from Go

When writing package specifically for Emacs, you
can use `emacs` and `emacs/lisp` packages.

**Lisp** package is very low-level. 
It defines Emacs object types and **intrinsic** functions.

**Emacs** package is a big, typesafe convenience
wrapper around `emacs/lisp` package. Most of the time
you should use `emacs` package functions. 

```go
// You can create and use Elisp objects:
list := lisp.Call("cons", lisp.Int(1), lisp.String("2"))

// Insert "hello, world!" into current buffer:
lisp.Call("insert", lisp.String("hello, world!"))
// Luckily, "emacs" package has a nice wrapper:
emacs.Insert("hello, world")
```

## Docs

* [Translation specification](docs/translation_spec.md)
* [Features that are not implemented](docs/unimplemented.md)
* [Go "emacs" package overview](docs/go_emacs.md)
* [Emacs "Go" library](docs/emacs_go.md)

To see what features are going to be implemented in near future,
check out [Projects](https://github.com/Quasilyte/Go.el/projects) tab.

[Roadmap 1](https://github.com/Quasilyte/Go.el/projects/1) is
the current stage.<commit_msg>adding tags to readme as well as stub for installation notes<commit_after>![Logo](misc/logo.png)

# Go.el
Not a fan of Emacs Lisp? Hack Emacs in Go!

## Overview

#### Description

`Go.el` is Emacs package that makes it possible to use 
[Go](https://golang.org/) programming language instead
of Emacs Lisp inside Emacs. 

#### How it works

Valid Go package is converted
into Emacs Lisp bytecode that can be used inside Emacs.

Emacs `Go` (first letter is capital, thats important) package
implements Go runtime, so translated code behaves as
close to the [specs](https://golang.org/ref/spec) as possible.

#### How to use it (install)

> TODO: emacs package installation

> TODO: document basic usage

#### Go from Elisp

To run Go inside Emacs, you need to evaluate 
`(Go-load-package PKG-NAME)` and all package 
functions, types and variables become available.

Symbols from Go are loaded as: `"Go-" PKG-NAME "." SYM-NAME`.
For example, `foo` package function `Bar` 
is loaded as `Go-foo.Bar`.

#### Elisp from Go

When writing package specifically for Emacs, you
can use `emacs` and `emacs/lisp` packages.

**Lisp** package is very low-level. 
It defines Emacs object types and **intrinsic** functions.

**Emacs** package is a big, typesafe convenience
wrapper around `emacs/lisp` package. Most of the time
you should use `emacs` package functions. 

```go
// You can create and use Elisp objects:
list := lisp.Call("cons", lisp.Int(1), lisp.String("2"))

// Insert "hello, world!" into current buffer:
lisp.Call("insert", lisp.String("hello, world!"))
// Luckily, "emacs" package has a nice wrapper:
emacs.Insert("hello, world")
```

## Docs

* [Translation specification](docs/translation_spec.md)
* [Features that are not implemented](docs/unimplemented.md)
* [Go "emacs" package overview](docs/go_emacs.md)
* [Emacs "Go" library](docs/emacs_go.md)

To see what features are going to be implemented in near future,
check out [Projects](https://github.com/Quasilyte/Go.el/projects) tab.

[Roadmap 1](https://github.com/Quasilyte/Go.el/projects/1) is
the current stage.

### Tags

* Compile Go to Emacs Lisp bytecode
* Go from Emacs
* Emacs Lisp alternative to extend Emacs
* Emacs Lisp as Go compilation target
* "Go" emacs package
{'fraction_non_alphanumeric': 0.12325469427058257, 'fraction_numerical': 0.0019258545979778526, 'mean_word_length': 4.474308300395257, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6212465', 'n_tokens_mistral': 1353, 'n_tokens_neox': 1314, 'n_words': 511}