summaryrefslogtreecommitdiff
path: root/emacs.d
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2023-05-07 19:08:48 +0300
committerLars Wirzenius <liw@liw.fi>2023-05-07 19:08:48 +0300
commitba84e716d516686784ff2a759a284452e4f94291 (patch)
tree83d1d4a4bc0ea618c692de13a759de741ec8bb50 /emacs.d
parent0bfb96c42f786b5ed69ec729fc8e4010cbb7726d (diff)
downloadliw-dot-files-ba84e716d516686784ff2a759a284452e4f94291.tar.gz
drop elpa
Diffstat (limited to 'emacs.d')
-rw-r--r--emacs.d/elpa/archives/gnu/archive-contents4155
-rw-r--r--emacs.d/elpa/archives/gnu/archive-contents.signed1
-rw-r--r--emacs.d/elpa/archives/melpa/archive-contents5450
-rw-r--r--emacs.d/elpa/bind-key-20191110.416/bind-key-autoloads.el84
-rw-r--r--emacs.d/elpa/bind-key-20191110.416/bind-key-pkg.el2
-rw-r--r--emacs.d/elpa/bind-key-20191110.416/bind-key.el455
-rw-r--r--emacs.d/elpa/blacken-20191123.1547/blacken-autoloads.el34
-rw-r--r--emacs.d/elpa/blacken-20191123.1547/blacken-pkg.el2
-rw-r--r--emacs.d/elpa/blacken-20191123.1547/blacken.el176
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-abbrev.el50
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-autoloads.el377
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-bbdb.el63
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-capf.el208
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-clang.el400
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-cmake.el207
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-css.el446
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-dabbrev-code.el104
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-dabbrev.el206
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-elisp.el226
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-etags.el108
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-files.el151
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-gtags.el119
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-ispell.el82
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-keywords.el314
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-nxml.el143
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-oddmuse.el57
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-pkg.el12
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-semantic.el168
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-template.el272
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-tempo.el71
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-tng.el181
-rw-r--r--emacs.d/elpa/company-20201014.2251/company-yasnippet.el177
-rw-r--r--emacs.d/elpa/company-20201014.2251/company.el3325
-rw-r--r--emacs.d/elpa/dash-20210708.2009/dash-autoloads.el74
-rw-r--r--emacs.d/elpa/dash-20210708.2009/dash-pkg.el12
-rw-r--r--emacs.d/elpa/dash-20210708.2009/dash.el3533
-rw-r--r--emacs.d/elpa/dash-20210708.2009/dash.info4738
-rw-r--r--emacs.d/elpa/dash-20210708.2009/dir18
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/dir18
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig-autoloads.el159
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig-conf-mode.el95
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig-core-handle.el243
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig-core.el179
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig-fnmatch.el284
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig-pkg.el13
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig.el973
-rw-r--r--emacs.d/elpa/editorconfig-20230109.633/editorconfig.info353
-rw-r--r--emacs.d/elpa/epl-20180205.2049/epl-autoloads.el22
-rw-r--r--emacs.d/elpa/epl-20180205.2049/epl-pkg.el2
-rw-r--r--emacs.d/elpa/epl-20180205.2049/epl.el711
-rw-r--r--emacs.d/elpa/f-20191110.1357/f-autoloads.el22
-rw-r--r--emacs.d/elpa/f-20191110.1357/f-pkg.el2
-rw-r--r--emacs.d/elpa/f-20191110.1357/f.el625
-rw-r--r--emacs.d/elpa/flycheck-20200427.12/flycheck-autoloads.el274
-rw-r--r--emacs.d/elpa/flycheck-20200427.12/flycheck-buttercup.el157
-rw-r--r--emacs.d/elpa/flycheck-20200427.12/flycheck-ert.el495
-rw-r--r--emacs.d/elpa/flycheck-20200427.12/flycheck-pkg.el16
-rw-r--r--emacs.d/elpa/flycheck-20200427.12/flycheck.el11825
-rw-r--r--emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-autoloads.el39
-rw-r--r--emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-pkg.el2
-rw-r--r--emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line.el162
-rw-r--r--emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-autoloads.el30
-rw-r--r--emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-pkg.el2
-rw-r--r--emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust.el210
-rw-r--r--emacs.d/elpa/gnupg/pubring.kbxbin2413 -> 0 bytes
-rw-r--r--emacs.d/elpa/gnupg/pubring.kbx~bin1206 -> 0 bytes
-rw-r--r--emacs.d/elpa/gnupg/trustdb.gpgbin1200 -> 0 bytes
-rw-r--r--emacs.d/elpa/ht-20210119.741/ht-autoloads.el22
-rw-r--r--emacs.d/elpa/ht-20210119.741/ht-pkg.el2
-rw-r--r--emacs.d/elpa/ht-20210119.741/ht.el337
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-actionscript.el134
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-ada.el74
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-angular.el82
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-bash.el90
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-beancount.el71
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-clangd.el304
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-clojure.el308
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-cmake.el43
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-completion.el779
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-crystal.el48
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-csharp.el365
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-css.el254
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-d.el37
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-dhall.el43
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-diagnostics.el369
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-dired.el178
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-dockerfile.el66
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-elixir.el190
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-elm.el137
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-erlang.el67
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-eslint.el355
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-fortran.el61
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-fsharp.el305
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-gdscript.el61
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-go.el338
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-groovy.el66
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-hack.el54
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-haxe.el226
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-headerline.el473
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-html.el198
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-icons.el96
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-ido.el142
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-iedit.el101
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-javascript.el334
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-json.el131
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-kotlin.el121
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-lens.el425
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-lua.el678
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-markdown.el105
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-autoloads.el745
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-pkg.el18
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode.el8656
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-modeline.el354
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-nim.el45
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-nix.el48
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-ocaml.el84
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-perl.el117
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-php.el433
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-prolog.el55
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-protocol.el752
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-purescript.el72
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-pwsh.el360
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-pyls.el504
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-pylsp.el434
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-r.el49
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-racket.el77
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-rf.el147
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-rust.el1100
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-semantic-tokens.el758
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-solargraph.el166
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-sorbet.el59
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-sqls.el190
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-steep.el73
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-svelte.el307
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-terraform.el68
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-tex.el68
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-v.el50
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-vala.el51
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-verilog.el186
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-vetur.el869
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-vhdl.el121
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-vimscript.el75
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-xml.el245
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-yaml.el242
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp-zig.el50
-rw-r--r--emacs.d/elpa/lsp-mode-20210716.2233/lsp.el8
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-autoloads.el80
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.el1195
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.html43
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-flycheck.el171
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-imenu.el412
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-peek.el754
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-pkg.el15
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-sideline.el768
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-util.el71
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/lsp-ui.el177
-rw-r--r--emacs.d/elpa/lsp-ui-20210718.445/resources/lightbulb.pngbin2058 -> 0 bytes
-rw-r--r--emacs.d/elpa/lv-20200507.1518/lv-autoloads.el22
-rw-r--r--emacs.d/elpa/lv-20200507.1518/lv-pkg.el2
-rw-r--r--emacs.d/elpa/lv-20200507.1518/lv.el150
-rw-r--r--emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-autoloads.el25
-rw-r--r--emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-pkg.el2
-rw-r--r--emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme.el3315
-rw-r--r--emacs.d/elpa/pkg-info-20150517.1143/pkg-info-autoloads.el127
-rw-r--r--emacs.d/elpa/pkg-info-20150517.1143/pkg-info-pkg.el2
-rw-r--r--emacs.d/elpa/pkg-info-20150517.1143/pkg-info.el331
-rw-r--r--emacs.d/elpa/pos-tip-20191227.1356/pos-tip-autoloads.el22
-rw-r--r--emacs.d/elpa/pos-tip-20191227.1356/pos-tip-pkg.el2
-rw-r--r--emacs.d/elpa/pos-tip-20191227.1356/pos-tip.el982
-rw-r--r--emacs.d/elpa/project-0.6.0.signed1
-rw-r--r--emacs.d/elpa/project-0.6.0/project-autoloads.el234
-rw-r--r--emacs.d/elpa/project-0.6.0/project-pkg.el2
-rw-r--r--emacs.d/elpa/project-0.6.0/project.el1401
-rw-r--r--emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.el436
-rw-r--r--emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.py798
-rw-r--r--emacs.d/elpa/python-mode-20200508.1756/python-mode-autoloads.el137
-rw-r--r--emacs.d/elpa/python-mode-20200508.1756/python-mode-pkg.el4
-rw-r--r--emacs.d/elpa/python-mode-20200508.1756/python-mode.el28002
-rw-r--r--emacs.d/elpa/reformatter-20210510.522/reformatter-autoloads.el119
-rw-r--r--emacs.d/elpa/reformatter-20210510.522/reformatter-pkg.el2
-rw-r--r--emacs.d/elpa/reformatter-20210510.522/reformatter.el317
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-autoloads.el382
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-babel.el288
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-cargo.el530
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-compile.el540
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-doc.el385
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-flycheck.el201
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-interaction.el425
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-lsp.el170
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-pkg.el20
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-playpen.el61
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-popup.el241
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-racer.el515
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-rustfix.el33
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic-rustfmt.el301
-rw-r--r--emacs.d/elpa/rustic-20210609.1900/rustic.el1253
-rw-r--r--emacs.d/elpa/s-20180406.808/s-autoloads.el22
-rw-r--r--emacs.d/elpa/s-20180406.808/s-pkg.el2
-rw-r--r--emacs.d/elpa/s-20180406.808/s.el748
-rw-r--r--emacs.d/elpa/shfmt-20210803.222/shfmt-autoloads.el25
-rw-r--r--emacs.d/elpa/shfmt-20210803.222/shfmt-pkg.el2
-rw-r--r--emacs.d/elpa/shfmt-20210803.222/shfmt.el81
-rw-r--r--emacs.d/elpa/spinner-1.7.4.signed1
-rw-r--r--emacs.d/elpa/spinner-1.7.4/README.org76
-rw-r--r--emacs.d/elpa/spinner-1.7.4/all-spinners.gifbin18314 -> 0 bytes
-rw-r--r--emacs.d/elpa/spinner-1.7.4/some-spinners.gifbin1932043 -> 0 bytes
-rw-r--r--emacs.d/elpa/spinner-1.7.4/spinner-autoloads.el77
-rw-r--r--emacs.d/elpa/spinner-1.7.4/spinner-pkg.el2
-rw-r--r--emacs.d/elpa/spinner-1.7.4/spinner.el340
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/dir18
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-autoloads.el230
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-bind-key.el172
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-core.el1595
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-delight.el91
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-diminish.el80
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-ensure.el214
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-jump.el79
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-lint.el84
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package-pkg.el13
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package.el54
-rw-r--r--emacs.d/elpa/use-package-20200322.2110/use-package.info1048
-rw-r--r--emacs.d/elpa/xref-1.1.0.signed1
-rw-r--r--emacs.d/elpa/xref-1.1.0/xref-autoloads.el110
-rw-r--r--emacs.d/elpa/xref-1.1.0/xref-pkg.el2
-rw-r--r--emacs.d/elpa/xref-1.1.0/xref.el1744
-rw-r--r--emacs.d/elpa/xterm-color-20200605.2017/xterm-color-autoloads.el82
-rw-r--r--emacs.d/elpa/xterm-color-20200605.2017/xterm-color-pkg.el2
-rw-r--r--emacs.d/elpa/xterm-color-20200605.2017/xterm-color.el938
-rw-r--r--emacs.d/init.el2
229 files changed, 1 insertions, 122420 deletions
diff --git a/emacs.d/elpa/archives/gnu/archive-contents b/emacs.d/elpa/archives/gnu/archive-contents
deleted file mode 100644
index 569d7ce..0000000
--- a/emacs.d/elpa/archives/gnu/archive-contents
+++ /dev/null
@@ -1,4155 +0,0 @@
-(1
- (ace-window .
- [(0 10 0)
- ((avy
- (0 5 0)))
- "Quickly switch windows." tar
- ((:url . "https://github.com/abo-abo/ace-window")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:keywords "window" "location"))])
- (ack .
- [(1 11)
- nil "interface to ack-like tools" tar
- ((:url . "https://github.com/leoliu/ack-el")
- (:keywords "tools" "processes" "convenience")
- (:maintainer "João Távora" . "joaotavora@gmail.com")
- (:authors
- ("Leo Liu" . "sdl.web@gmail.com"))
- (:commit . "90c90a80322aa9f26ce88f2f24a224afc4c994b8"))])
- (ada-mode .
- [(8 0 5)
- ((uniquify-files
- (1 0 4))
- (wisi
- (4 2 2))
- (gnat-compiler
- (1 0 2))
- (emacs
- (25 3)))
- "major-mode for editing Ada sources" tar
- ((:url . "https://www.nongnu.org/ada-mode/")
- (:keywords "languages" "ada")
- (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@stephe-leake.org"))
- (:commit . "8660d5e9b2219208e5d43b979f5fb57fbb518924"))])
- (ada-ref-man .
- [(2020 1)
- nil "Ada Reference Manual 2012" tar
- ((:url . "http://stephe-leake.org/ada/arm.html")
- (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@member.fsf.org"))
- (:keywords "languages" "ada"))])
- (adaptive-wrap .
- [(0 8)
- nil "Smart line-wrapping with wrap-prefix" tar
- ((:maintainer "Stephen Berman" . "stephen.berman@gmx.net")
- (:authors
- ("Stephen Berman" . "stephen.berman@gmx.net")
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "https://elpa.gnu.org/packages/adaptive-wrap.html"))])
- (adjust-parens .
- [(3 1)
- nil "Indent and dedent Lisp code, automatically adjust close parens" tar
- ((:maintainer "Barry O'Reilly" . "gundaetiapo@gmail.com")
- (:authors
- ("Barry O'Reilly" . "gundaetiapo@gmail.com"))
- (:url . "http://elpa.gnu.org/packages/adjust-parens.html"))])
- (advice-patch .
- [(0 1)
- ((emacs
- (24 4)))
- "Use patches to advise the inside of functions" single
- ((:url . "http://elpa.gnu.org/packages/advice-patch.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (aggressive-completion .
- [(1 7)
- ((emacs
- (27 1)))
- "Automatic minibuffer completion" tar
- ((:keywords "minibuffer" "completion")
- (:maintainer "Tassilo Horn" . "tsdh@gnu.org")
- (:authors
- ("Tassilo Horn" . "tsdh@gnu.org"))
- (:url . "https://elpa.gnu.org/packages/aggressive-completion.html")
- (:commit . "d92bf2428133b6e261780e16b7030afe91d3668e"))])
- (aggressive-indent .
- [(1 10 0)
- ((emacs
- (24 3)))
- "Minor mode to aggressively keep your code always indented" tar
- ((:url . "https://github.com/Malabarba/aggressive-indent-mode")
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:keywords "indent" "lisp" "maint" "tools"))])
- (ahungry-theme .
- [(1 10 0)
- ((emacs
- (24)))
- "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)." tar
- ((:url . "https://github.com/ahungry/color-theme-ahungry")
- (:maintainer "Matthew Carter" . "m@ahungry.com")
- (:authors
- ("Matthew Carter" . "m@ahungry.com"))
- (:keywords "ahungry" "palette" "color" "theme" "emacs" "color-theme" "deftheme"))])
- (aircon-theme .
- [(0 0 6)
- ((emacs
- (24 4)))
- "Cool and legible light theme" tar
- ((:url . "https://git.sr.ht/~chambln/aircon-theme.el")
- (:keywords "faces")
- (:maintainer "Gregory Chamberlain" . "~chambln/public-inbox@lists.sr.ht")
- (:authors
- ("Gregory Chamberlain" . "greg@cosine.blue"))
- (:commit . "0cecd81e7f6631c91ed0437d801517677e018c1d"))])
- (all .
- [(1 0)
- nil "Edit all lines matching a given regexp" single
- ((:url . "http://elpa.gnu.org/packages/all.html")
- (:keywords "matching")
- (:authors
- ("Per Abrahamsen" . "per.abrahamsen@gmail.com"))
- (:maintainer "Per Abrahamsen" . "per.abrahamsen@gmail.com"))])
- (altcaps .
- [(1 1 0)
- ((emacs
- (27 1)))
- "Apply alternating letter casing to convey sarcasm or mockery" tar
- ((:url . "https://git.sr.ht/~protesilaos/altcaps")
- (:maintainer "Altcaps Development" . "~protesilaos/altcaps@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "05b78cc81b8ca92aebb80779c2a863fa5eb18eaf"))])
- (ampc .
- [(0 2)
- nil "Asynchronous Music Player Controller" single
- ((:url . "http://elpa.gnu.org/packages/ampc.html")
- (:keywords "ampc" "mpc" "mpd")
- (:authors
- ("Christopher Schmidt" . "christopher@ch.ristopher.com"))
- (:maintainer nil . "emacs-devel@gnu.org"))])
- (arbitools .
- [(0 977)
- ((cl-lib
- (0 5)))
- "Package for chess tournaments administration" single
- ((:url . "http://elpa.gnu.org/packages/arbitools.html")
- (:authors
- ("David Gonzalez Gandara" . "dggandara@member.fsf.org"))
- (:maintainer "David Gonzalez Gandara" . "dggandara@member.fsf.org"))])
- (ascii-art-to-unicode .
- [(1 13)
- nil "a small artist adjunct" single
- ((:keywords "ascii" "unicode" "box-drawing")
- (:authors
- ("Thien-Thi Nguyen" . "ttn@gnu.org"))
- (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org")
- (:url . "http://www.gnuvola.org/software/aa2u/"))])
- (async .
- [(1 9 7)
- ((emacs
- (24 4)))
- "Asynchronous processing in Emacs" tar
- ((:url . "https://github.com/jwiegley/emacs-async")
- (:keywords "async")
- (:maintainer "Thierry Volpiatto" . "thievol@posteo.net")
- (:authors
- ("John Wiegley" . "jwiegley@gmail.com"))
- (:commit . "53addd02fbad33765f508f8e6254ebd44e1f81e5"))])
- (auctex .
- [(13 2 0)
- ((emacs
- (25 1)))
- "Integrated environment for *TeX*" tar
- ((:url . "https://www.gnu.org/software/auctex/")
- (:keywords "tex" "latex" "texinfo" "context" "doctex" "preview-latex")
- (:maintainer nil . "auctex-devel@gnu.org")
- (:commit . "9d47b0a1bdffb8e01a83bf507dac7677ecca92f7"))])
- (aumix-mode .
- [(7)
- nil "run the aumix program in a buffer" single
- ((:keywords "multimedia" "mixer" "aumix")
- (:authors
- ("Kevin Ryde" . "user42_kevin@yahoo.com.au"))
- (:maintainer "Kevin Ryde" . "user42_kevin@yahoo.com.au")
- (:url . "http://user42.tuxfamily.org/aumix-mode/index.html"))])
- (auto-correct .
- [(1 1 4)
- nil "Remembers and automatically fixes past corrections" single
- ((:url . "http://elpa.gnu.org/packages/auto-correct.html")
- (:keywords "editing")
- (:authors
- ("Ian Dunn" . "dunni@gnu.org"))
- (:maintainer "Ian Dunn" . "dunni@gnu.org"))])
- (auto-header .
- [(0 1 2)
- nil "Automatically find the right C headers" tar
- ((:url . "https://git.sr.ht/~pkal/auto-header")
- (:keywords "c")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "f366c1bf15abd33a8c035438b68b6b854bf2bd1a"))])
- (auto-overlays .
- [(0 10 10)
- ((cl-lib
- (0 5)))
- "Automatic regexp-delimited overlays" tar
- ((:url . "http://www.dr-qubit.org/tags/computing-code-emacs.html")
- (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org")
- (:authors
- ("Toby Cubitt" . "toby-predictive@dr-qubit.org"))
- (:keywords "extensions"))])
- (autocrypt .
- [(0 4 1)
- ((emacs
- (24 3)))
- "Autocrypt implementation" tar
- ((:url . "https://git.sr.ht/~pkal/autocrypt")
- (:keywords "comm")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "a90aa6b644fe8cf72af9e1615a7c50b36b739e7c"))])
- (avy .
- [(0 5 0)
- ((emacs
- (24 1))
- (cl-lib
- (0 5)))
- "Jump to arbitrary positions in visible text and select text quickly." tar
- ((:url . "https://github.com/abo-abo/avy")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:keywords "point" "location"))])
- (bbdb .
- [(3 2 2 2)
- ((emacs
- (24))
- (cl-lib
- (0 5)))
- "Big Brother DataBase" tar
- ((:maintainer "Roland Winkler" . "winkler@gnu.org")
- (:url . "https://elpa.gnu.org/packages/bbdb.html")
- (:commit . "715f35b5f53d6bcdcb3754b4f98933df01b57c15"))])
- (beacon .
- [(1 3 4)
- ((emacs
- (25 1)))
- "Highlight the cursor whenever the window scrolls" tar
- ((:url . "https://github.com/Malabarba/beacon")
- (:keywords "convenience")
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:commit . "0cf8b60f62876f3e75653a5fb30d5d5cdd74c586"))])
- (beframe .
- [(0 2 0)
- ((emacs
- (28 1)))
- "Isolate buffers per frame" tar
- ((:url . "https://git.sr.ht/~protesilaos/beframe")
- (:maintainer "Protesilaos Stavrou General Issues" . "~protesilaos/general-issues@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "edfab6eefe4ac35cd8d1ed87fc7f670496d25e40"))])
- (bind-key .
- [(2 4 1)
- nil "A simple way to manage personal keybindings" tar
- ((:url . "https://github.com/jwiegley/use-package")
- (:keywords "keys" "keybinding" "config" "dotemacs")
- (:maintainer "John Wiegley" . "johnw@newartisans.com")
- (:authors
- ("John Wiegley" . "johnw@newartisans.com"))
- (:commit . "4932ed21d40f9e8ad48ad2a1f086fdf9b3847ac9"))])
- (blist .
- [(0 2)
- nil "Display bookmarks in an ibuffer way" tar
- ((:keywords "convenience")
- (:maintainer "Durand" . "mmemmew@gmail.com")
- (:authors
- ("Durand" . "mmemmew@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/blist.html")
- (:commit . "c5aadbce3b713a2a9e7dba8c3c0881c43ebb2b4d"))])
- (bluetooth .
- [(0 3 1)
- ((emacs
- (25 1))
- (dash
- (2 18 1)))
- "A Major mode for Bluetooth devices" tar
- ((:url . "https://gitlab.com/rstocker/emacs-bluetooth")
- (:keywords "hardware")
- (:maintainer "Raffael Stocker" . "r.stocker@mnet-mail.de")
- (:authors
- ("Raffael Stocker" . "r.stocker@mnet-mail.de")
- ("Etienne Prud’homme" . "e.e.f.prudhomme@gmail.com"))
- (:commit . "84488dfdd2355e512f9e9444a233448221b3d9cc"))])
- (bnf-mode .
- [(0 4 5)
- ((cl-lib
- (0 5))
- (emacs
- (24 3)))
- "Major mode for editing BNF grammars." tar
- ((:url . "https://github.com/sergeyklay/bnf-mode")
- (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch")
- (:authors
- ("Serghei Iakovlev" . "egrep@protonmail.ch"))
- (:keywords "languages"))])
- (boxy .
- [(1 1 3)
- ((emacs
- (26 1)))
- "A boxy layout framework" tar
- ((:url . "https://gitlab.com/tygrdev/boxy")
- (:keywords "tools")
- (:maintainer "Taylor Grinn" . "grinntaylor@gmail.com")
- (:authors
- ("Taylor Grinn" . "grinntaylor@gmail.com"))
- (:commit . "6567d846a06cdc75da8e88a5a961172cb3f77519"))])
- (boxy-headings .
- [(2 1 4)
- ((emacs
- (26 1))
- (boxy
- (1 0))
- (org
- (9 4)))
- "View org files in a boxy diagram" tar
- ((:url . "https://gitlab.com/tygrdev/boxy-headings")
- (:keywords "tools")
- (:maintainer "Taylor Grinn" . "grinntaylor@gmail.com")
- (:authors
- ("Taylor Grinn" . "grinntaylor@gmail.com"))
- (:commit . "a1b67d1b52a34084200c036f493e0110acea3a6d"))])
- (brief .
- [(5 88 22 2)
- ((nadvice
- (0 3))
- (cl-lib
- (0 5)))
- "Brief Editor Emulator (Brief Mode)" tar
- ((:keywords "brief" "emulations" "crisp")
- (:maintainer "Luke Lee" . "luke.yx.lee@gmail.com")
- (:authors
- ("Luke Lee" . "luke.yx.lee@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/brief.html")
- (:commit . "94471036e4fd356d6c8a7dd72622123e18c95e75"))])
- (buffer-env .
- [(0 4)
- ((emacs
- (27 1))
- (compat
- (28 1)))
- "Buffer-local process environments" tar
- ((:url . "https://github.com/astoff/buffer-env")
- (:keywords "processes" "tools")
- (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com")
- (:authors
- ("Augusto Stoffel" . "arstoffel@gmail.com"))
- (:commit . "7c176d043445ea94fe924a715158c25b91ec4776"))])
- (buffer-expose .
- [(0 4 3)
- ((emacs
- (25))
- (cl-lib
- (0 5)))
- "Visual buffer switching using a window grid" single
- ((:keywords "convenience")
- (:authors
- ("Clemens Radermacher" . "clemera@posteo.net"))
- (:maintainer "Clemens Radermacher" . "clemera@posteo.net")
- (:url . "https://github.com/clemera/buffer-expose"))])
- (bug-hunter .
- [(1 3 1)
- ((seq
- (1 3))
- (cl-lib
- (0 5)))
- "Hunt down errors by bisecting elisp files" tar
- ((:url . "https://github.com/Malabarba/elisp-bug-hunter")
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:keywords "lisp"))])
- (cape .
- [(0 15)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "Completion At Point Extensions" tar
- ((:url . "https://github.com/minad/cape")
- (:keywords "abbrev" "convenience" "matching" "completion" "wp")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "db3059af52718c7f55485ef183bdad3e40f58df9"))])
- (capf-autosuggest .
- [(0 3)
- ((emacs
- (25 1)))
- "History autosuggestions for comint and eshell" tar
- ((:url . "https://repo.or.cz/emacs-capf-autosuggest.git")
- (:maintainer "jakanakaevangeli" . "jakanakaevangeli@chiru.no")
- (:authors
- ("jakanakaevangeli" . "jakanakaevangeli@chiru.no")))])
- (caps-lock .
- [(1 0)
- nil "Caps-lock as a minor mode" single
- ((:url . "http://elpa.gnu.org/packages/caps-lock.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (captain .
- [(1 0 3)
- nil "CAPiTalization is Automatic IN emacs" single
- ((:url . "http://elpa.gnu.org/packages/captain.html")
- (:keywords "editing")
- (:authors
- ("Ian Dunn" . "dunni@gnu.org"))
- (:maintainer "Ian Dunn" . "dunni@gnu.org"))])
- (chess .
- [(2 0 5)
- ((cl-lib
- (0 5)))
- "Play chess in GNU Emacs" tar
- ((:maintainer "Mario Lang" . "mlang@delysid.org")
- (:authors
- ("John Wiegley" . "johnw@gnu.org"))
- (:keywords "games")
- (:url . "http://elpa.gnu.org/packages/chess.html"))])
- (cl-generic .
- [(0 3)
- nil "Forward cl-generic compatibility for Emacs<25" single
- ((:url . "http://elpa.gnu.org/packages/cl-generic.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (cl-lib .
- [(0 7 1)
- nil "Forward cl-lib compatibility library for Emacs<24.3" tar
- ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "https://elpa.gnu.org/packages/cl-lib.html")
- (:commit . "80dc6223f2e25db1f4b38d5c48365553abd793fc"))])
- (clipboard-collector .
- [(0 3)
- ((emacs
- (25)))
- "Collect clipboard entries according to regex rules" tar
- ((:url . "https://github.com/clemera/clipboard-collector")
- (:maintainer "Clemens Radermacher" . "clemera@posteo.net")
- (:authors
- ("Clemens Radermacher" . "clemera@posteo.net"))
- (:keywords "convenience"))])
- (cobol-mode .
- [(1 1)
- ((cl-lib
- (0 5)))
- "Mode for editing COBOL code" tar
- ((:keywords "languages")
- (:maintainer nil . "emacs-devel@gnu.org")
- (:authors
- ("Edward Hart" . "edward.dan.hart@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/cobol-mode.html")
- (:commit . "bd7879daa71908616277688ba51d27b60c88b0a2"))])
- (code-cells .
- [(0 3)
- ((emacs
- (27 1)))
- "Lightweight notebooks with support for ipynb files" tar
- ((:url . "https://github.com/astoff/code-cells.el")
- (:keywords "convenience" "outlines")
- (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com")
- (:authors
- ("Augusto Stoffel" . "arstoffel@gmail.com"))
- (:commit . "fd68a33eb43b3cbd44fed767f48e230382903592"))])
- (comint-mime .
- [(0 3)
- ((emacs
- (28 1)))
- "Display content of various MIME types in comint buffers" tar
- ((:url . "https://github.com/astoff/comint-mime")
- (:keywords "processes" "multimedia")
- (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com")
- (:authors
- ("Augusto Stoffel" . "arstoffel@gmail.com"))
- (:commit . "91b2926d2bf40a31a55fdb80c7dc21652bcf9417"))])
- (compact-docstrings .
- [(0 2)
- nil "Shrink blank lines in docstrings and doc comments" single
- ((:keywords "convenience" "faces" "lisp" "maint" "c")
- (:authors
- ("Clément Pit-Claudel" . "clement.pitclaudel@live.com"))
- (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com")
- (:url . "https://github.com/cpitclaudel/compact-docstrings"))])
- (company .
- [(0 9 13)
- ((emacs
- (24 3)))
- "Modular text completion framework" tar
- ((:url . "http://company-mode.github.io/")
- (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru")
- (:authors
- ("Nikolaj Schumacher"))
- (:keywords "abbrev" "convenience" "matching"))])
- (company-ebdb .
- [(1 1)
- ((company
- (0 9 4))
- (ebdb
- (0 2)))
- "company-mode completion backend for EBDB in message-mode" single
- ((:url . "http://elpa.gnu.org/packages/company-ebdb.html")
- (:authors
- ("Jan Tatarik" . "jan.tatarik@gmail.com"))
- (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net"))])
- (company-math .
- [(1 5 1)
- ((company
- (0 8 0))
- (math-symbol-lists
- (1 3)))
- "Completion backends for unicode math symbols and latex tags" tar
- ((:url . "https://github.com/vspinu/company-math")
- (:keywords "unicode" "symbols" "completion")
- (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com")
- (:authors
- ("Vitalie Spinu" . "spinuvit@gmail.com"))
- (:commit . "3eb006874e309ff4076d947fcbd61bb6806aa508"))])
- (company-statistics .
- [(0 2 3)
- ((emacs
- (24 3))
- (company
- (0 8 5)))
- "Sort candidates using completion history" tar
- ((:url . "https://github.com/company-mode/company-statistics")
- (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com")
- (:authors
- ("Ingo Lohmar" . "i.lohmar@gmail.com"))
- (:keywords "abbrev" "convenience" "matching"))])
- (compat .
- [(29 1 4 1)
- ((emacs
- (24 4))
- (seq
- (2 3)))
- "Emacs Lisp Compatibility Library" tar
- ((:url . "https://github.com/emacs-compat/compat")
- (:keywords "lisp")
- (:maintainer "Daniel Mendler <mail@daniel-mendler.de>, Compat Development" . "~pkal/compat-devel@lists.sr.ht")
- (:authors
- ("Philip Kaludercic <philipk@posteo.net>, Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "cb09942868d50e654f159f9614fe3f22af96e547"))])
- (consult .
- [(0 34)
- ((emacs
- (27 1))
- (compat
- (29 1 4 1)))
- "Consulting completing-read" tar
- ((:url . "https://github.com/minad/consult")
- (:keywords "matching" "files" "completion")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler and Consult contributors"))
- (:commit . "38af775c837ab09d9d2a77059386eb09c4254a4e"))])
- (consult-recoll .
- [(0 8)
- ((emacs
- (26 1))
- (consult
- (0 19)))
- "Recoll queries using consult" tar
- ((:url . "https://codeberg.org/jao/consult-recoll")
- (:keywords "docs" "convenience")
- (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org")
- (:authors
- ("Jose A Ortega Ruiz" . "jao@gnu.org"))
- (:commit . "1480027006df774ac3e2f38a6750a369263ea409"))])
- (context-coloring .
- [(8 1 0)
- ((emacs
- (24 3)))
- "Highlight by scope" tar
- ((:url . "https://github.com/jacksonrayhamilton/context-coloring")
- (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")
- (:authors
- ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com"))
- (:keywords "convenience" "faces" "tools"))])
- (corfu .
- [(0 36)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "Completion Overlay Region FUnction" tar
- ((:url . "https://github.com/minad/corfu")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "224f79b5f92d5a13a623a4cd7283a236b40dde81"))])
- (coterm .
- [(1 6)
- ((emacs
- (26 1))
- (compat
- (28 1 2 0)))
- "Terminal emulation for comint" tar
- ((:url . "https://repo.or.cz/emacs-coterm.git")
- (:keywords "processes")
- (:maintainer "jakanakaevangeli" . "jakanakaevangeli@chiru.no")
- (:authors
- ("jakanakaevangeli" . "jakanakaevangeli@chiru.no"))
- (:commit . "d8e1b04cd359d9f27ab7c6dbf8cae90dde834085"))])
- (counsel .
- [(0 14 0)
- ((emacs
- (24 5))
- (ivy
- (0 14 0))
- (swiper
- (0 14 0)))
- "Various completion functions using Ivy" tar
- ((:url . "https://github.com/abo-abo/swiper")
- (:keywords "convenience" "matching" "tools")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:commit . "603c29c64856ba7f32ca00affae64f2f5ae3fced"))])
- (cpio-mode .
- [(0 17)
- ((emacs
- (24 5)))
- "Handle cpio archives in the style of dired." tar
- ((:maintainer "Douglas Lewan" . "d.lewan2000@gmail.com")
- (:authors
- ("Douglas Lewan" . "d.lewan2000@gmail.com"))
- (:keywords "files")
- (:url . "http://elpa.gnu.org/packages/cpio-mode.html"))])
- (cpupower .
- [(1 0 5)
- nil "cpupower command interface" tar
- ((:url . "https://gitlab.com/steve-emacs-stuff/cpupower-el")
- (:keywords "hardware" "cpupower" "cpu" "frequency-scaling")
- (:maintainer "Stephen Meister" . "pallagun@gmail.com")
- (:authors
- ("Stephen Meister" . "pallagun@gmail.com"))
- (:commit . "fa979dfafa1beb374bf42e937f0b5b99ed06222e"))])
- (crdt .
- [(0 3 5)
- nil "Collaborative editing using Conflict-free Replicated Data Types" tar
- ((:url . "https://code.librehq.com/qhong/crdt.el")
- (:keywords "collaboration" "crdt")
- (:maintainer "Qiantan Hong" . "qhong@alum.mit.edu")
- (:authors
- ("Qiantan Hong" . "qhong@alum.mit.edu"))
- (:commit . "e6d42f42c5dedb73560048f4bf6263c63ffa21bb"))])
- (crisp .
- [(1 3 6)
- nil "CRiSP/Brief Emacs emulator" single
- ((:url . "http://elpa.gnu.org/packages/crisp.html")
- (:keywords "emulations" "brief" "crisp")
- (:authors
- ("Gary D. Foster" . "Gary.Foster@Corp.Sun.COM"))
- (:maintainer "Luke Lee" . "luke.yx.lee@gmail.com"))])
- (csharp-mode .
- [(2 0 0)
- ((emacs
- (26 1)))
- "C# mode derived mode" tar
- ((:url . "https://github.com/emacs-csharp/csharp-mode")
- (:keywords "c#" "languages" "oop" "mode")
- (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com")
- (:authors
- ("Theodor Thornhill" . "theo@thornhill.no"))
- (:commit . "d8b058c9e9d0429ea7e81d121ce19b064bd7e0f5"))])
- (csv-mode .
- [(1 22)
- ((emacs
- (27 1))
- (cl-lib
- (0 5)))
- "Major mode for editing comma/char separated values" tar
- ((:keywords "convenience")
- (:maintainer nil . "emacs-devel@gnu.org")
- (:authors
- ("\"Francis J. Wright\"" . "F.J.Wright@qmul.ac.uk"))
- (:url . "https://elpa.gnu.org/packages/csv-mode.html")
- (:commit . "db8a3e3aef31d35ce5bd1fd09127a3bbfdd0c340"))])
- (cursory .
- [(0 3 0)
- ((emacs
- (27 1)))
- "Manage cursor styles using presets" tar
- ((:url . "https://git.sr.ht/~protesilaos/cursory")
- (:keywords "convenience" "cursor")
- (:maintainer "Cursory Development" . "~protesilaos/cursory@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "568310b13dfeda471fa23c6aa9b88c2a410aed01"))])
- (cycle-quotes .
- [(0 1)
- nil "Cycle between quote styles" tar
- ((:maintainer "Simen Heggestøyl" . "simenheg@gmail.com")
- (:authors
- ("Simen Heggestøyl" . "simenheg@gmail.com"))
- (:keywords "convenience")
- (:url . "http://elpa.gnu.org/packages/cycle-quotes.html"))])
- (darkroom .
- [(0 3)
- ((cl-lib
- (0 5)))
- "Remove visual distractions and focus on writing" single
- ((:url . "http://elpa.gnu.org/packages/darkroom.html")
- (:keywords "convenience" "emulations")
- (:authors
- ("João Távora" . "joaotavora@gmail.com"))
- (:maintainer "João Távora" . "joaotavora@gmail.com"))])
- (dash .
- [(2 19 1)
- ((emacs
- (24)))
- "A modern list library for Emacs" tar
- ((:url . "https://github.com/magnars/dash.el")
- (:maintainer "Magnar Sveen" . "magnars@gmail.com")
- (:authors
- ("Magnar Sveen" . "magnars@gmail.com"))
- (:keywords "extensions" "lisp"))])
- (dbus-codegen .
- [(0 1)
- ((cl-lib
- (0 5)))
- "Lisp code generation for D-Bus." single
- ((:url . "http://elpa.gnu.org/packages/dbus-codegen.html")
- (:keywords "comm" "dbus" "convenience")
- (:authors
- ("Daiki Ueno" . "ueno@gnu.org"))
- (:maintainer nil . "emacs-devel@gnu.org"))])
- (debbugs .
- [(0 35)
- ((emacs
- (26 1))
- (soap-client
- (3 1 5)))
- "SOAP library to access debbugs servers" tar
- ((:keywords "comm" "hypermedia")
- (:maintainer "Michael Albinus" . "michael.albinus@gmx.de")
- (:authors
- ("Michael Albinus" . "michael.albinus@gmx.de"))
- (:url . "https://elpa.gnu.org/packages/debbugs.html")
- (:commit . "e1afc68cd15769e5cb970ef9da948bf46e8ad6dc"))])
- (delight .
- [(1 7)
- ((cl-lib
- (0 5))
- (nadvice
- (0 3)))
- "A dimmer switch for your lighter text" single
- ((:keywords "convenience")
- (:authors
- ("Phil Sainty" . "psainty@orcon.net.nz"))
- (:maintainer "Phil Sainty" . "psainty@orcon.net.nz")
- (:url . "https://savannah.nongnu.org/projects/delight"))])
- (denote .
- [(1 2 0)
- ((emacs
- (28 1)))
- "Simple notes with an efficient file-naming scheme" tar
- ((:url . "https://git.sr.ht/~protesilaos/denote")
- (:maintainer "Denote Development" . "~protesilaos/denote@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "7c425a2d0988f3fae603434c1f8044be8293d517"))])
- (denote-menu .
- [(1 1 1)
- ((emacs
- (28 1))
- (denote
- (1 2 0)))
- "View denote files in a tabulated list." tar
- ((:url . "https://github.com/namilus/denote-menu")
- (:maintainer "Mohamed Suliman" . "sulimanm@tcd.ie")
- (:authors
- ("Mohamed Suliman" . "sulimanm@tcd.ie"))
- (:commit . "8e67c1a326bda7b824252548a1e5e46c7f840c49"))])
- (detached .
- [(0 10 1)
- ((emacs
- (27 1)))
- "A package to launch, and manage, detached processes" tar
- ((:url . "https://sr.ht/~niklaseklund/detached.el/")
- (:keywords "convenience" "processes")
- (:maintainer "detached.el Development" . "~niklaseklund/detached.el@lists.sr.ht")
- (:authors
- ("Niklas Eklund" . "niklas.eklund@posteo.net"))
- (:commit . "fedb0df5b0fbba13c662107855fb07a922793096"))])
- (devdocs .
- [(0 5)
- ((emacs
- (27 1)))
- "Emacs viewer for DevDocs" tar
- ((:url . "https://github.com/astoff/devdocs.el")
- (:keywords "help")
- (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com")
- (:authors
- ("Augusto Stoffel" . "arstoffel@gmail.com"))
- (:commit . "60099be5fc5c90d5adc2795b3bfacb492a0adb88"))])
- (dict-tree .
- [(0 16)
- ((trie
- (0 3))
- (tNFA
- (0 1 1))
- (heap
- (0 3)))
- "Dictionary data structure" tar
- ((:url . "http://www.dr-qubit.org/emacs.php")
- (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org")
- (:authors
- ("Toby Cubitt" . "toby-predictive@dr-qubit.org"))
- (:keywords "extensions" "matching" "data structures trie" "tree" "dictionary" "completion" "regexp"))])
- (diff-hl .
- [(1 9 2)
- ((cl-lib
- (0 2))
- (emacs
- (25 1)))
- "Highlight uncommitted changes using VC" tar
- ((:url . "https://github.com/dgutov/diff-hl")
- (:keywords "vc" "diff")
- (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru")
- (:authors
- ("Dmitry Gutov" . "dgutov@yandex.ru"))
- (:commit . "d20f16bf5eadd66e775f215e800f25caddae8cb5"))])
- (diffview .
- [(1 0)
- nil "View diffs in side-by-side format" single
- ((:keywords "convenience" "diff")
- (:authors
- ("Mitchel Humpherys" . "mitch.special@gmail.com"))
- (:maintainer "Mitchel Humpherys" . "mitch.special@gmail.com")
- (:url . "https://github.com/mgalgs/diffview-mode"))])
- (diminish .
- [(0 46)
- ((emacs
- (24 3)))
- "Diminished modes are minor modes with no modeline display" tar
- ((:url . "https://github.com/myrjola/diminish.el")
- (:keywords "extensions" "diminish" "minor" "codeprose")
- (:maintainer "Martin Yrjölä" . "martin.yrjola@gmail.com")
- (:authors
- ("Will Mengarini" . "seldon@eskimo.com"))
- (:commit . "66b3902401059d161424b1b8d0abc3cb0a7d6df0"))])
- (dired-du .
- [(0 5 2)
- ((emacs
- (24 4))
- (cl-lib
- (0 5)))
- "Dired with recursive directory sizes" tar
- ((:maintainer "Tino Calancha" . "tino.calancha@gmail.com")
- (:authors
- ("Tino Calancha" . "tino.calancha@gmail.com"))
- (:keywords "files" "unix" "convenience")
- (:url . "http://elpa.gnu.org/packages/dired-du.html"))])
- (dired-git-info .
- [(0 3 1)
- ((emacs
- (25)))
- "Show git info in dired" single
- ((:keywords "dired" "files")
- (:authors
- ("Clemens Radermacher" . "clemera@posteo.net"))
- (:maintainer "Clemens Radermacher" . "clemera@posteo.net")
- (:url . "https://github.com/clemera/dired-git-info"))])
- (disk-usage .
- [(1 3 3)
- ((emacs
- (26 1)))
- "Sort and browse disk usage listings" single
- ((:keywords "files" "convenience" "tools")
- (:authors
- ("Pierre Neidhardt" . "mail@ambrevar.xyz"))
- (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz")
- (:url . "https://gitlab.com/Ambrevar/emacs-disk-usage"))])
- (dismal .
- [(1 5 2)
- ((cl-lib
- (0))
- (emacs
- (24 3)))
- "Dis Mode Ain't Lotus: Spreadsheet program Emacs" tar
- ((:maintainer "UnMaintainer" . "emacs-devel@gnu.org")
- (:authors
- (nil . "David Fox, fox@cs.nyu.edu")
- (nil . "Frank E. Ritter, ritter@cs.cmu.edu"))
- (:url . "https://elpa.gnu.org/packages/dismal.html"))])
- (djvu .
- [(1 1 2)
- nil "Edit and view Djvu files via djvused" tar
- ((:keywords "files" "wp")
- (:maintainer "Roland Winkler" . "winkler@gnu.org")
- (:authors
- ("Roland Winkler" . "winkler@gnu.org"))
- (:url . "https://elpa.gnu.org/packages/djvu.html")
- (:commit . "071c8ab168588897475899c46eaa16e70141db8c"))])
- (doc-toc .
- [(1 2)
- ((emacs
- (26 1)))
- "Manage outlines/table of contents of pdf and djvu documents" tar
- ((:url . "https://github.com/dalanicolai/doc-tools-toc")
- (:keywords "tools" "outlines" "convenience")
- (:maintainer "Daniel Laurens Nicolai" . "dalanicolai@gmail.com")
- (:authors
- ("Daniel Laurens Nicolai" . "dalanicolai@gmail.com"))
- (:commit . "4a179fbacd7bc9efbd6cfcdc8772d42935e6de29"))])
- (docbook .
- [(0 1)
- nil "Info-like viewer for DocBook" single
- ((:url . "http://elpa.gnu.org/packages/docbook.html")
- (:keywords "docs" "help")
- (:authors
- ("Chong Yidong" . "cyd@gnu.org"))
- (:maintainer "Chong Yidong" . "cyd@gnu.org"))])
- (dts-mode .
- [(1 0)
- ((emacs
- (24)))
- "Major mode for Device Tree source files" tar
- ((:keywords "languages")
- (:maintainer "Ben Gamari" . "ben@smart-cactus.org")
- (:authors
- ("Ben Gamari" . "ben@smart-cactus.org"))
- (:url . "https://elpa.gnu.org/packages/dts-mode.html")
- (:commit . "8413d2dc9b3347831aa9e8c8b2524af3ef005441"))])
- (easy-escape .
- [(0 2 1)
- nil "Improve readability of escape characters in regular expressions" tar
- ((:url . "https://github.com/cpitclaudel/easy-escape")
- (:keywords "convenience" "lisp" "tools")
- (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com")
- (:authors
- ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")))])
- (easy-kill .
- [(0 9 5)
- ((emacs
- (25))
- (cl-lib
- (0 5)))
- "kill & mark things easily" tar
- ((:url . "https://github.com/leoliu/easy-kill")
- (:keywords "killing" "convenience")
- (:maintainer "Leo Liu" . "sdl.web@gmail.com")
- (:authors
- ("Leo Liu" . "sdl.web@gmail.com"))
- (:commit . "f155d19c528e27f8f6c72f0d75f652edbdcab37f"))])
- (ebdb .
- [(0 8 17)
- ((emacs
- (25 1))
- (seq
- (2 15)))
- "Contact management package" tar
- ((:url . "https://github.com/girzel/ebdb")
- (:keywords "convenience" "mail")
- (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net")
- (:authors
- ("Eric Abrahamsen" . "eric@ericabrahamsen.net"))
- (:commit . "610d1ed5d4095936836102e1e48dc4416d0d260b"))])
- (ebdb-gnorb .
- [(1 0 2)
- ((gnorb
- (1 1 0))
- (ebdb
- (0 2)))
- "Utilities for connecting EBDB to Gnorb" single
- ((:url . "http://elpa.gnu.org/packages/ebdb-gnorb.html")
- (:authors
- ("Eric Abrahamsen" . "eric@ericabrahamsen.net"))
- (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net"))])
- (ebdb-i18n-chn .
- [(1 3 2)
- ((pyim
- (1 6 0))
- (ebdb
- (0 6 17)))
- "China-specific internationalization support for EBDB" tar
- ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net")
- (:authors
- ("Eric Abrahamsen" . "eric@ericabrahamsen.net"))
- (:url . "https://elpa.gnu.org/packages/ebdb-i18n-chn.html"))])
- (ediprolog .
- [(2 2)
- nil "Emacs Does Interactive Prolog" tar
- ((:url . "https://www.metalevel.at/ediprolog/")
- (:keywords "languages" "processes")
- (:maintainer "Markus Triska" . "triska@metalevel.at")
- (:authors
- ("Markus Triska" . "triska@metalevel.at"))
- (:commit . "cfcdf9e42821d246b7fbc84877aa4ecacc184a1c"))])
- (eev .
- [(20230127)
- ((emacs
- (24 4)))
- "Support for e-scripts (eepitch blocks, elisp hyperlinks, etc)" tar
- ((:url . "http://anggtwu.net/#eev")
- (:keywords "lisp" "e-scripts")
- (:maintainer "Eduardo Ochs" . "eduardoochs@gmail.com")
- (:authors
- ("Eduardo Ochs" . "eduardoochs@gmail.com"))
- (:commit . "16613c18c5ec17755f083f4839bca7e4e05dd4c7"))])
- (ef-themes .
- [(0 11 0)
- ((emacs
- (27 1)))
- "Colorful and legible themes" tar
- ((:url . "https://git.sr.ht/~protesilaos/ef-themes")
- (:keywords "faces" "theme" "accessibility")
- (:maintainer "Ef-Themes Development" . "~protesilaos/ef-themes@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "1d7e6e78df914e8829e6511a935616b0895403ae"))])
- (eglot .
- [(1 15)
- ((emacs
- (26 3))
- (jsonrpc
- (1 0 16))
- (flymake
- (1 2 1))
- (project
- (0 9 8))
- (xref
- (1 6 2))
- (eldoc
- (1 14 0))
- (seq
- (2 23))
- (external-completion
- (0 1)))
- "The Emacs Client for LSP servers" tar
- ((:url . "https://github.com/joaotavora/eglot")
- (:keywords "convenience" "languages")
- (:maintainer "João Távora" . "joaotavora@gmail.com")
- (:authors
- ("João Távora" . "joaotavora@gmail.com"))
- (:commit . "30892cbd330ace125454a056ca86d85e2a860bf5"))])
- (el-search .
- [(1 12 6 1)
- ((emacs
- (25))
- (stream
- (2 2 4))
- (cl-print
- (1 0)))
- "Expression based interactive search for Emacs Lisp" tar
- ((:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de")
- (:authors
- ("Michael Heerdegen" . "michael_heerdegen@web.de"))
- (:keywords "lisp")
- (:url . "http://elpa.gnu.org/packages/el-search.html"))])
- (eldoc .
- [(1 14 0)
- ((emacs
- (26 3)))
- "Show function arglist or variable docstring in echo area" tar
- ((:keywords "extensions")
- (:maintainer "Noah Friedman" . "friedman@splode.com")
- (:authors
- ("Noah Friedman" . "friedman@splode.com"))
- (:url . "https://elpa.gnu.org/packages/eldoc.html")
- (:commit . "f2357df91f0262949618bd4da571d3267c1b1dfa"))])
- (eldoc-eval .
- [(0 2)
- nil "Enable eldoc support when minibuffer is in use." tar
- ((:maintainer "Thierry Volpiatto" . "thievol@posteo.net")
- (:authors
- ("Thierry Volpiatto" . "thievol@posteo.net"))
- (:url . "https://elpa.gnu.org/packages/eldoc-eval.html")
- (:commit . "e91800503c90cb75dc70abe42f1d6ae499346cc1"))])
- (electric-spacing .
- [(5 0)
- nil "Insert operators with surrounding spaces smartly" single
- ((:url . "http://elpa.gnu.org/packages/electric-spacing.html")
- (:authors
- ("William Xu" . "william.xwl@gmail.com"))
- (:maintainer "William Xu" . "william.xwl@gmail.com"))])
- (elisp-benchmarks .
- [(1 14)
- nil "elisp benchmarks collection" tar
- ((:keywords "languages" "lisp")
- (:maintainer "Andrea Corallo" . "akrl@sdf.org")
- (:authors
- ("Andrea Corallo" . "akrl@sdf.org"))
- (:url . "https://elpa.gnu.org/packages/elisp-benchmarks.html")
- (:commit . "70e38dbfa8f4acbdebfd0f417410d99f5031e05f"))])
- (embark .
- [(0 22 1)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "Conveniently act on minibuffer completions" tar
- ((:url . "https://github.com/oantolin/embark")
- (:keywords "convenience")
- (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx")
- (:authors
- ("Omar Antolín Camarena" . "omar@matem.unam.mx"))
- (:commit . "c914efe881df2bc6a2bd35cc7ee975d3e9d4a418"))])
- (embark-consult .
- [(0 7)
- ((emacs
- (27 1))
- (embark
- (0 20))
- (consult
- (0 17)))
- "Consult integration for Embark" tar
- ((:url . "https://github.com/oantolin/embark")
- (:keywords "convenience")
- (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx")
- (:authors
- ("Omar Antolín Camarena" . "omar@matem.unam.mx"))
- (:commit . "127492fac048cecfdba145d496a902022a68d1d5"))])
- (ement .
- [(0 8 3)
- ((emacs
- (27 1))
- (map
- (2 1))
- (persist
- (0 5))
- (plz
- (0 2))
- (taxy
- (0 10))
- (taxy-magit-section
- (0 12 1))
- (svg-lib
- (0 2 5))
- (transient
- (0 3 7)))
- "Matrix client" tar
- ((:url . "https://github.com/alphapapa/ement.el")
- (:keywords "comm")
- (:maintainer "Adam Porter" . "adam@alphapapa.net")
- (:authors
- ("Adam Porter" . "adam@alphapapa.net"))
- (:commit . "b86a31700d1a382ad8da8cd2addd5dcad79d6dba"))])
- (emms .
- [(15)
- ((cl-lib
- (0 5))
- (nadvice
- (0 3))
- (seq
- (0)))
- "The Emacs Multimedia System" tar
- ((:url . "https://www.gnu.org/software/emms/")
- (:keywords "emms" "mp3" "ogg" "flac" "music" "mpeg" "video" "multimedia")
- (:maintainer "Yoni Rabkin" . "yrk@gnu.org")
- (:authors
- ("Jorgen Schäfer" . "forcer@forcix.cx"))
- (:commit . "0a35f30e9aedd09977412a459162eaf6736febac"))])
- (engrave-faces .
- [(0 3 1)
- ((emacs
- (27 1)))
- "Convert font-lock faces to other formats" tar
- ((:url . "https://github.com/tecosaur/engrave-faces")
- (:keywords "faces")
- (:maintainer "TEC" . "tec@tecosaur.com")
- (:authors
- ("TEC <https://github/tecosaur>"))
- (:commit . "fe29d9b593a0f7ada4df3f52dfb9f7f8c1bdaaa7"))])
- (enwc .
- [(2 0)
- ((emacs
- (25 1)))
- "The Emacs Network Client" tar
- ((:url . "https://savannah.nongnu.org/p/enwc")
- (:maintainer "Ian Dunn" . "dunni@gnu.org")
- (:authors
- ("Ian Dunn" . "dunni@gnu.org"))
- (:keywords "external" "network" "wicd" "manager" "nm"))])
- (epoch-view .
- [(0 0 1)
- nil "Minor mode to visualize epoch timestamps" single
- ((:url . "http://elpa.gnu.org/packages/epoch-view.html")
- (:keywords "data" "timestamp" "epoch" "unix")
- (:authors
- ("Ted Zlatanov" . "tzz@lifelogs.com"))
- (:maintainer "Ted Zlatanov" . "tzz@lifelogs.com"))])
- (erc .
- [(5 5)
- ((emacs
- (27 1))
- (compat
- (29 1 3 4)))
- "An Emacs Internet Relay Chat client" tar
- ((:url . "https://www.gnu.org/software/emacs/erc.html")
- (:keywords "irc" "chat" "client" "internet")
- (:maintainer "Amin Bandali <bandali@gnu.org>, F. Jason Park" . "jp@neverwas.me")
- (:authors
- ("Alexander L. Belikoff" . "alexander@belikoff.net"))
- (:commit . "7548446194afdd3cd26851001565294da2732e29"))])
- (ergoemacs-mode .
- [(5 16 10 12)
- ((emacs
- (24 1))
- (undo-tree
- (0 6 5))
- (cl-lib
- (0 5)))
- "Emacs mode based on common modern interface and ergonomics." tar
- ((:url . "https://github.com/ergoemacs/ergoemacs-mode")
- (:maintainer "Matthew L. Fidler" . "matthew.fidler@gmail.com")
- (:authors
- ("Xah Lee" . "xah@xahlee.org")
- ("David Capello" . "davidcapello@gmail.com")
- ("Matthew L. Fidler" . "matthew.fidler@gmail.com"))
- (:keywords "convenience"))])
- (excorporate .
- [(1 0 0)
- ((emacs
- (24 1))
- (cl-lib
- (0 6 1))
- (fsm
- (0 2 1))
- (soap-client
- (3 2 0))
- (url-http-ntlm
- (2 0 4))
- (nadvice
- (0 3)))
- "Exchange Web Services (EWS) integration" tar
- ((:url . "https://www.fitzsim.org/blog/")
- (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org")
- (:authors
- ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))
- (:keywords "calendar"))])
- (expand-region .
- [(0 11 0)
- nil "Increase selected region by semantic units." tar
- ((:url . "https://github.com/magnars/expand-region.el")
- (:maintainer "Magnar Sveen" . "magnars@gmail.com")
- (:authors
- ("Magnar Sveen" . "magnars@gmail.com"))
- (:keywords "marking" "region"))])
- (external-completion .
- [(0 1)
- nil "Let external tools control completion style" tar
- ((:maintainer "João Távora" . "joaotavora@gmail.com")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "https://elpa.gnu.org/packages/external-completion.html")
- (:commit . "4bc9c8972ac0a3dfa237a9c5704de89ef24ad82b"))])
- (exwm .
- [(0 27)
- ((xelb
- (0 18)))
- "Emacs X Window Manager" tar
- ((:url . "https://github.com/ch11ng/exwm")
- (:keywords "unix")
- (:maintainer "Adrián Medraño Calvo" . "adrian@medranocalvo.com")
- (:authors
- ("Chris Feng" . "chris.w.feng@gmail.com"))
- (:commit . "e9cc0962cc478640afe3001e39ff32577d73d6a0"))])
- (f90-interface-browser .
- [(1 1)
- nil "Parse and browse f90 interfaces" single
- ((:authors
- ("Lawrence Mitchell" . "wence@gmx.li"))
- (:maintainer "Lawrence Mitchell" . "wence@gmx.li")
- (:url . "http://github.com/wence-/f90-iface/"))])
- (face-shift .
- [(0 2 1)
- ((emacs
- (24 1)))
- "Shift the colour of certain faces" tar
- ((:url . "https://git.sr.ht/~pkal/face-shift")
- (:keywords "faces")
- (:maintainer "Philip Kaludercic" . "philipk@posteo.net")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "671e53fdef9ed3fdb9ee768216d05b90e3ce592a"))])
- (filladapt .
- [(2 12 2)
- ((emacs
- (24 4)))
- "Adaptive fill" single
- ((:url . "http://elpa.gnu.org/packages/filladapt.html")
- (:authors
- ("Kyle E. Jones" . "kyle_jones@wonderworks.com"))
- (:maintainer nil . "emacs-devel@gnu.org"))])
- (flylisp .
- [(0 2)
- ((emacs
- (24 1))
- (cl-lib
- (0 4)))
- "Color unbalanced parentheses and parentheses inconsistent with indentation" single
- ((:url . "http://elpa.gnu.org/packages/flylisp.html")
- (:authors
- ("Barry O'Reilly" . "gundaetiapo@gmail.com"))
- (:maintainer "Barry O'Reilly" . "gundaetiapo@gmail.com"))])
- (flymake .
- [(1 3 4)
- ((emacs
- (26 1))
- (eldoc
- (1 14 0))
- (project
- (0 7 1)))
- "A universal on-the-fly syntax checker" tar
- ((:keywords "c" "languages" "tools")
- (:maintainer "João Távora" . "joaotavora@gmail.com")
- (:authors
- ("Pavel Kobyakov" . "pk_at_work@yahoo.com"))
- (:url . "https://elpa.gnu.org/packages/flymake.html")
- (:commit . "d45f450cff757ed520a7ee36c632ab62387c7bc9"))])
- (flymake-proselint .
- [(0 3 0)
- ((emacs
- (27 1)))
- "Flymake backend for proselint" tar
- ((:url . "https://git.sr.ht/~manuel-uberti/flycheck-proselint")
- (:keywords "convenience")
- (:maintainer "Manuel Uberti" . "~manuel-uberti/flymake-proselint@lists.sr.ht")
- (:authors
- ("Manuel Uberti" . "manuel.uberti@inventati.org"))
- (:commit . "9c68ee881f18f554f0ab5bbf5bee1a4b753d792b"))])
- (fontaine .
- [(1 0 0)
- ((emacs
- (27 1)))
- "Set font configurations using presets" tar
- ((:url . "https://git.sr.ht/~protesilaos/fontaine")
- (:maintainer "Fontaine Development" . "~protesilaos/fontaine@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "10c4fa74e56edbb1e9c5209d8189cfa30cbd8512"))])
- (frame-tabs .
- [(1 1)
- nil "show buffer tabs in side window" single
- ((:url . "http://elpa.gnu.org/packages/frame-tabs.html")
- (:keywords "frames" "tabs")
- (:authors
- ("Martin Rudalics" . "rudalics@gmx.at"))
- (:maintainer "Martin Rudalics" . "rudalics@gmx.at"))])
- (frog-menu .
- [(0 2 11)
- ((emacs
- (26))
- (avy
- (0 4))
- (posframe
- (0 4)))
- "Quickly pick items from ad hoc menus" single
- ((:keywords "convenience")
- (:authors
- ("Clemens Radermacher" . "clemera@posteo.net"))
- (:maintainer "Clemens Radermacher" . "clemera@posteo.net")
- (:url . "https://github.com/clemera/frog-menu"))])
- (fsm .
- [(0 2 1)
- ((emacs
- (24 1))
- (cl-lib
- (0 5)))
- "state machine library" single
- ((:url . "http://elpa.gnu.org/packages/fsm.html")
- (:keywords "extensions")
- (:authors
- ("Magnus Henoch" . "magnus.henoch@gmail.com"))
- (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))])
- (ftable .
- [(1 1)
- ((emacs
- (26 0)))
- "Fill a table to fit in n columns" tar
- ((:url . "https://github.com/casouri/ftable")
- (:keywords "convenience" "text" "table")
- (:maintainer "Yuan Fu" . "casouri@gmail.com")
- (:authors
- ("Yuan Fu" . "casouri@gmail.com"))
- (:commit . "d7c243ac3be2a67986f53f3dc31ba1426e82b771"))])
- (gcmh .
- [(0 2 1)
- ((emacs
- (24)))
- "the Garbage Collector Magic Hack" single
- ((:keywords "internal")
- (:authors
- ("Andrea Corallo" . "akrl@sdf.org"))
- (:maintainer nil . "akrl@sdf.org")
- (:url . "https://gitlab.com/koral/gcmh"))])
- (ggtags .
- [(0 9 0)
- ((emacs
- (25)))
- "emacs frontend to GNU Global source code tagging system" tar
- ((:url . "https://github.com/leoliu/ggtags")
- (:maintainer "Leo Liu" . "sdl.web@gmail.com")
- (:authors
- ("Leo Liu" . "sdl.web@gmail.com"))
- (:keywords "tools" "convenience"))])
- (gited .
- [(0 6 0)
- ((emacs
- (24 4))
- (cl-lib
- (0 5)))
- "Operate on Git branches like dired" tar
- ((:maintainer "Tino Calancha" . "tino.calancha@gmail.com")
- (:authors
- ("Tino Calancha" . "tino.calancha@gmail.com"))
- (:keywords "git" "vc" "convenience")
- (:url . "http://elpa.gnu.org/packages/gited.html"))])
- (gle-mode .
- [(1 1)
- ((cl-lib
- (0 5)))
- "Major mode to edit Graphics Layout Engine files" single
- ((:url . "http://elpa.gnu.org/packages/gle-mode.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (gnat-compiler .
- [(1 0 2)
- ((emacs
- (25 3))
- (wisi
- (4 2 0)))
- "Support for running GNAT tools" tar
- ((:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@member.fsf.org"))
- (:url . "https://elpa.gnu.org/packages/gnat-compiler.html")
- (:commit . "49774d33dc26ee75944a7380180cd748881e3a3f"))])
- (gnome-c-style .
- [(0 1)
- nil "minor mode for editing GNOME-style C source code" tar
- ((:maintainer "Daiki Ueno" . "ueno@gnu.org")
- (:authors
- ("Daiki Ueno" . "ueno@gnu.org"))
- (:keywords "gnome" "c" "coding style")
- (:url . "http://elpa.gnu.org/packages/gnome-c-style.html"))])
- (gnorb .
- [(1 6 11)
- ((cl-lib
- (0 5)))
- "Glue code between Gnus, Org, and BBDB" tar
- ((:keywords "mail" "org" "gnus" "bbdb" "todo" "task")
- (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net")
- (:authors
- ("Eric Abrahamsen" . "eric@ericabrahamsen.net"))
- (:url . "https://elpa.gnu.org/packages/gnorb.html")
- (:commit . "409e4fc2c83f8406f362028dbcc3a1fc21182819"))])
- (gnu-elpa .
- [(1 1)
- nil "Advertize GNU ELPA packages" tar
- ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "http://elpa.gnu.org/packages/gnu-elpa.html"))])
- (gnu-elpa-keyring-update .
- [(2022 12)
- nil "Update Emacs's GPG keyring for GNU ELPA" tar
- ((:keywords "maint" "tools")
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "https://elpa.gnu.org/packages/gnu-elpa-keyring-update.html")
- (:commit . "685192692f809e3d8c336e27170a2b819925202f"))])
- (gnugo .
- [(3 1 2)
- ((ascii-art-to-unicode
- (1 5))
- (xpm
- (1 0 1))
- (cl-lib
- (0 5)))
- "play GNU Go in a buffer" tar
- ((:url . "https://www.gnuvola.org/software/gnugo/")
- (:keywords "games" "processes")
- (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org")
- (:authors
- ("Thien-Thi Nguyen" . "ttn@gnu.org")))])
- (gnus-mock .
- [(0 5)
- nil "Mock Gnus installation for testing" tar
- ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net")
- (:authors
- ("Eric Abrahamsen" . "eric@ericabrahamsen.net"))
- (:url . "https://elpa.gnu.org/packages/gnus-mock.html"))])
- (gpastel .
- [(0 5 0)
- ((emacs
- (25 1)))
- "Integrates GPaste with the kill-ring" single
- ((:keywords "tools")
- (:authors
- ("Damien Cassou" . "damien@cassou.me"))
- (:maintainer "Damien Cassou" . "damien@cassou.me")
- (:url . "https://gitlab.petton.fr/DamienCassou/desktop-environment"))])
- (gpr-mode .
- [(1 0 3)
- ((emacs
- (25 3))
- (wisi
- (4 2 2))
- (gnat-compiler
- (1 0 1)))
- "Major mode for editing GNAT project files" tar
- ((:url . "https://stephe-leake.org/ada/wisitoken.html")
- (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@member.fsf.org"))
- (:commit . "9676e6361ef38fd953835b405ccccdf0d0c5517b"))])
- (gpr-query .
- [(1 0 3)
- ((emacs
- (25 3))
- (wisi
- (4 2 2))
- (gnat-compiler
- (1 0 2)))
- "Minor mode for navigating sources using gpr_query" tar
- ((:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@member.fsf.org"))
- (:url . "https://elpa.gnu.org/packages/gpr-query.html")
- (:commit . "ada0d0afcefe88b66b9cc53de5d76db661bfb2d7"))])
- (graphql .
- [(0 1 2)
- ((emacs
- (25)))
- "GraphQL utilities" tar
- ((:url . "https://github.com/vermiculus/graphql.el")
- (:keywords "hypermedia" "tools" "lisp")
- (:maintainer "Sean Allred" . "code@seanallred.com")
- (:authors
- ("Sean Allred" . "code@seanallred.com"))
- (:commit . "b57b5ca5d2d0837e1fb4a4f30c051d5f3e643f0f"))])
- (greader .
- [(0 1)
- ((emacs
- (25)))
- "gnamù reader, a reader with espeak tts" tar
- ((:maintainer "Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com")
- (:authors
- ("Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com"))
- (:keywords "tools" "accessibility")
- (:url . "http://elpa.gnu.org/packages/greader.html"))])
- (greenbar .
- [(1 1)
- nil "Mark comint output with \"greenbar\" background" single
- ((:url . "http://elpa.gnu.org/packages/greenbar.html")
- (:keywords "faces" "terminals")
- (:authors
- ("Michael R. Mauger" . "michael@mauger.com"))
- (:maintainer "Michael R. Mauger" . "michael@mauger.com"))])
- (gtags-mode .
- [(1 0)
- ((emacs
- (28)))
- "GNU Global integration with xref, project and imenu." tar
- ((:url . "https://github.com/Ergus/gtags-mode")
- (:keywords "xref" "project" "imenu" "gtags" "global")
- (:maintainer "Jimmy Aguilar Mena")
- (:authors
- ("Jimmy Aguilar Mena"))
- (:commit . "f108a46c6c03eb5e18c73a908c655071aa153a14"))])
- (guess-language .
- [(0 0 1)
- ((cl-lib
- (0 5))
- (emacs
- (24))
- (nadvice
- (0 1)))
- "Robust automatic language detection" single
- ((:authors
- ("Titus von der Malsburg" . "malsburg@posteo.de"))
- (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de")
- (:url . "https://github.com/tmalsburg/guess-language.el"))])
- (hcel .
- [(1 0 0)
- ((emacs
- (28)))
- "Haskell codebase explorer / cross referencer" tar
- ((:url . "https://g.ypei.me/hc.el.git")
- (:keywords "haskell")
- (:maintainer "Yuchen Pei" . "id@ypei.org")
- (:authors
- ("Yuchen Pei" . "id@ypei.org"))
- (:commit . "a215df2f884fb445d8f159a2b4d84e6853ac9816"))])
- (heap .
- [(0 5)
- nil "Heap (a.k.a. priority queue) data structure" single
- ((:keywords "extensions" "data structures" "heap" "priority queue")
- (:authors
- ("Toby Cubitt" . "toby-predictive@dr-qubit.org"))
- (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org")
- (:url . "http://www.dr-qubit.org/emacs.php"))])
- (hiddenquote .
- [(1 2)
- ((emacs
- (25 1)))
- "Major mode for doing hidden quote puzzles" tar
- ((:url . "http://mauroaranda.com/puzzles/hidden-quote-puzzle/")
- (:keywords "games")
- (:maintainer "Mauro Aranda" . "maurooaranda@gmail.com")
- (:authors
- ("Mauro Aranda" . "maurooaranda@gmail.com"))
- (:commit . "856438ee2950fa998561f71d40355a88cdb078b4"))])
- (highlight-escape-sequences .
- [(0 4)
- nil "Highlight escape sequences" single
- ((:keywords "convenience")
- (:authors
- ("Dmitry Gutov" . "dgutov@yandex.ru")
- ("Pavel Matcula" . "dev.plvlml@gmail.com"))
- (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru")
- (:url . "https://github.com/dgutov/highlight-escape-sequences"))])
- (hook-helpers .
- [(1 1 1)
- ((emacs
- (25 1)))
- "Anonymous, modifiable hook functions" tar
- ((:url . "https://savannah.nongnu.org/projects/hook-helpers-el/")
- (:maintainer "Ian Dunn" . "dunni@gnu.org")
- (:authors
- ("Ian Dunn" . "dunni@gnu.org"))
- (:keywords "development" "hooks"))])
- (html5-schema .
- [(0 1)
- nil "Add HTML5 schemas for use by nXML" tar
- ((:url . "https://github.com/validator/validator")
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:keywords "html" "xml"))])
- (hydra .
- [(0 15 0)
- ((cl-lib
- (0 5))
- (lv
- (0)))
- "Make bindings that stick around." tar
- ((:url . "https://github.com/abo-abo/hydra")
- (:keywords "bindings")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:commit . "7081ee6d443dbf2b58e77fa7357c90e495173a2f"))])
- (hyperbole .
- [(8 0 0)
- ((emacs
- (27 0)))
- "GNU Hyperbole: The Everyday Hypertextual Information Manager" tar
- ((:url . "http://www.gnu.org/software/hyperbole")
- (:keywords "comm" "convenience" "files" "frames" "hypermedia" "languages" "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp")
- (:maintainer "Bob Weiner <rsw@gnu.org>, Mats Lidell" . "matsl@gnu.org")
- (:authors
- ("Bob Weiner"))
- (:commit . "4214716e06920a3e10db5811bd22a343ad6435d9"))])
- (ilist .
- [(0 1)
- nil "Display a list in an ibuffer way." tar
- ((:keywords "convenience")
- (:maintainer "Durand" . "mmemmew@gmail.com")
- (:authors
- ("Durand" . "mmemmew@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/ilist.html"))])
- (inspector .
- [(0 30)
- ((emacs
- (27 1)))
- "Tool for inspection of Emacs Lisp objects" tar
- ((:url . "https://github.com/mmontone/emacs-inspector")
- (:keywords "debugging" "tool" "lisp" "development")
- (:maintainer "Mariano Montone" . "marianomontone@gmail.com")
- (:authors
- ("Mariano Montone" . "marianomontone@gmail.com"))
- (:commit . "f06e3490cb3fba9335dfca9022d3cc8babaa8654"))])
- (ioccur .
- [(2 6)
- ((emacs
- (24))
- (cl-lib
- (0 5)))
- "Incremental occur" tar
- ((:url . "https://github.com/thierryvolpiatto/ioccur")
- (:maintainer "Thierry Volpiatto" . "thievol@posteo.net")
- (:authors
- ("Thierry Volpiatto" . "thievol@posteo.net")))])
- (isearch-mb .
- [(0 7)
- ((emacs
- (27 1)))
- "Control isearch from the minibuffer" tar
- ((:url . "https://github.com/astoff/isearch-mb")
- (:keywords "matching")
- (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com")
- (:authors
- ("Augusto Stoffel" . "arstoffel@gmail.com"))
- (:commit . "bf8f11dfeb532e186d9807394104741c7d7a1f1f"))])
- (iterators .
- [(0 1 1)
- ((emacs
- (25)))
- "Functions for working with iterators" single
- ((:url . "http://elpa.gnu.org/packages/iterators.html")
- (:keywords "extensions" "elisp")
- (:authors
- ("Michael Heerdegen" . "michael_heerdegen@web.de"))
- (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de"))])
- (ivy .
- [(0 14 0)
- ((emacs
- (24 5)))
- "Incremental Vertical completYon" tar
- ((:url . "https://github.com/abo-abo/swiper")
- (:keywords "matching")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:commit . "abc993c6d066a11f9ca6ec70d2c5c2e2b3e6b17a"))])
- (ivy-avy .
- [(0 14 0)
- ((emacs
- (24 5))
- (ivy
- (0 14 0))
- (avy
- (0 5 0)))
- "Avy integration for Ivy" tar
- ((:url . "https://github.com/abo-abo/swiper")
- (:keywords "convenience")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:commit . "522c2ed7a62d3c7ff9e7ea455ad3c5d63b3c4b54"))])
- (ivy-explorer .
- [(0 3 2)
- ((emacs
- (25))
- (ivy
- (0 10 0)))
- "Dynamic file browsing grid using ivy" single
- ((:keywords "convenience" "files" "matching")
- (:authors
- ("Clemens Radermacher" . "clemera@posteo.net"))
- (:maintainer "Clemens Radermacher" . "clemera@posteo.net")
- (:url . "https://github.com/clemera/ivy-explorer"))])
- (ivy-hydra .
- [(0 14 0)
- ((emacs
- (24 5))
- (ivy
- (0 14 0))
- (hydra
- (0 14 0)))
- "Additional key bindings for Ivy" tar
- ((:url . "https://github.com/abo-abo/swiper")
- (:keywords "convenience")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:commit . "1ee6eda9f632d66f5e6b582a0d565e52feb856ed"))])
- (ivy-posframe .
- [(0 6 3)
- ((emacs
- (26 0))
- (posframe
- (1 0 0))
- (ivy
- (0 13 0)))
- "Using posframe to show Ivy" tar
- ((:url . "https://github.com/tumashu/ivy-posframe")
- (:keywords "abbrev" "convenience" "matching" "ivy")
- (:maintainer "Feng Shu" . "tumashu@163.com")
- (:authors
- ("Feng Shu" . "tumashu@163.com")
- ("Naoya Yamashita" . "conao3@gmail.com")))])
- (jarchive .
- [(0 10 0)
- ((emacs
- (26 1)))
- "Open project dependencies in jar archives" tar
- ((:url . "https://git.sr.ht/~dannyfreeman/jarchive")
- (:keywords "tools" "languages" "jvm" "java" "clojure")
- (:maintainer "Danny Freeman" . "danny@dfreeman.email")
- (:commit . "2e4a4bee2ad2715f4c364706acd10c25009d8df5"))])
- (javaimp .
- [(0 9 1)
- nil "Add and reorder Java import statements in Maven/Gradle projects" tar
- ((:keywords "java" "maven" "gradle" "programming")
- (:maintainer "Filipp Gunbin" . "fgunbin@fastmail.fm")
- (:authors
- ("Filipp Gunbin" . "fgunbin@fastmail.fm"))
- (:url . "https://elpa.gnu.org/packages/javaimp.html")
- (:commit . "2ac7afce3c6f0b390c4b62c065a898883940d65a"))])
- (jgraph-mode .
- [(1 1)
- ((cl-lib
- (0 5)))
- "Major mode for Jgraph files" single
- ((:url . "http://elpa.gnu.org/packages/jgraph-mode.html")
- (:keywords "tex" "wp")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (jinx .
- [(0 8)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "Enchanted Spell Checker" tar
- ((:url . "https://github.com/minad/jinx")
- (:keywords "convenience" "wp")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "7fced90fdaca5a482cd08b80967e0eac5ee8d885"))])
- (jit-spell .
- [(0 3)
- ((emacs
- (27 1))
- (compat
- (29 1)))
- "Just-in-time spell checking" tar
- ((:url . "https://github.com/astoff/jit-spell")
- (:keywords "tools" "wp")
- (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com")
- (:authors
- ("Augusto Stoffel" . "arstoffel@gmail.com"))
- (:commit . "365003e6e3c25c5e6210a2a4ce0654fa28063a23"))])
- (js2-mode .
- [(20230408)
- ((emacs
- (24 1))
- (cl-lib
- (0 5)))
- "Improved JavaScript editing mode" tar
- ((:url . "https://github.com/mooz/js2-mode/")
- (:keywords "languages" "javascript")
- (:maintainer "Steve Yegge" . "steve.yegge@gmail.com")
- (:authors
- ("Steve Yegge" . "steve.yegge@gmail.com")
- ("mooz" . "stillpedant@gmail.com")
- ("Dmitry Gutov" . "dgutov@yandex.ru"))
- (:commit . "7d928272bc311b1dd6f38d3f6365c18153e28636"))])
- (json-mode .
- [(0 2)
- ((emacs
- (25 1)))
- "Major mode for editing JSON files" single
- ((:url . "http://elpa.gnu.org/packages/json-mode.html")
- (:keywords "data")
- (:authors
- ("Simen Heggestøyl" . "simenheg@gmail.com"))
- (:maintainer "Simen Heggestøyl" . "simenheg@gmail.com"))])
- (jsonrpc .
- [(1 0 17)
- ((emacs
- (25 2)))
- "JSON-RPC library" tar
- ((:keywords "processes" "languages" "extensions")
- (:maintainer "João Távora" . "joaotavora@gmail.com")
- (:authors
- ("João Távora" . "joaotavora@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/jsonrpc.html")
- (:commit . "2d835d64ba339bb375f0d55c4679149d6da3f209"))])
- (jumpc .
- [(3 0)
- nil "jump to previous insertion points" single
- ((:url . "http://elpa.gnu.org/packages/jumpc.html")
- (:authors
- ("Ivan Kanis" . "ivan@kanis.fr"))
- (:maintainer "Ivan Kanis" . "ivan@kanis.fr"))])
- (kind-icon .
- [(0 2 0)
- ((emacs
- (27 1))
- (svg-lib
- (0)))
- "Completion kind icons" tar
- ((:url . "https://github.com/jdtsmith/kind-icon")
- (:keywords "completion")
- (:maintainer "J.D. Smith" . "jdtsmith@gmail.com")
- (:authors
- ("J.D. Smith" . "jdtsmith@gmail.com"))
- (:commit . "47b72281e2d339926b192574ccade8e5ca14c282"))])
- (kiwix .
- [(1 1 5)
- ((emacs
- (25 1))
- (request
- (0 3 0)))
- "Searching offline Wikipedia through Kiwix." tar
- ((:url . "https://github.com/stardiviner/kiwix.el")
- (:keywords "kiwix" "wikipedia")
- (:maintainer "stardiviner" . "numbchild@gmail.com")
- (:authors
- ("stardiviner" . "numbchild@gmail.com")))])
- (kmb .
- [(0 1)
- ((emacs
- (24 1)))
- "Kill buffers matching a regexp w/o confirmation" single
- ((:url . "http://elpa.gnu.org/packages/kmb.html")
- (:keywords "lisp" "convenience")
- (:authors
- ("Tino Calancha" . "tino.calancha@gmail.com"))
- (:maintainer "Tino Calancha" . "tino.calancha@gmail.com"))])
- (landmark .
- [(1 0)
- nil "Neural-network robot that learns landmarks" single
- ((:url . "http://elpa.gnu.org/packages/landmark.html")
- (:keywords "games" "neural network" "adaptive search" "chemotaxis")
- (:authors
- ("Terrence Brannon" . "metaperl@gmail.com"))
- (:maintainer nil . "emacs-devel@gnu.org"))])
- (leaf .
- [(4 5 5)
- ((emacs
- (24 1)))
- "Simplify your init.el configuration, extended use-package" tar
- ((:url . "https://github.com/conao3/leaf.el")
- (:keywords "lisp" "settings")
- (:maintainer "Naoya Yamashita" . "conao3@gmail.com")
- (:authors
- ("Naoya Yamashita" . "conao3@gmail.com"))
- (:commit . "7cc38f9739eadc569b1179fabe7f7893167105da"))])
- (let-alist .
- [(1 0 6)
- ((emacs
- (24 1)))
- "Easily let-bind values of an assoc-list by their names" single
- ((:url . "http://elpa.gnu.org/packages/let-alist.html")
- (:keywords "extensions" "lisp")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))])
- (lex .
- [(1 1)
- nil "Lexical analyser construction" tar
- ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "http://elpa.gnu.org/packages/lex.html"))])
- (lin .
- [(1 0 0)
- ((emacs
- (27 1)))
- "Make `hl-line-mode' more suitable for selection UIs" tar
- ((:url . "https://git.sr.ht/~protesilaos/lin")
- (:keywords "convenience" "faces" "theme")
- (:maintainer "Lin Development" . "~protesilaos/lin@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "09cf249c78385502a2ead30c4fa1468cf96939f7"))])
- (lmc .
- [(1 4)
- ((emacs
- (24))
- (cl-lib
- (0 5)))
- "Little Man Computer in Elisp" single
- ((:url . "http://elpa.gnu.org/packages/lmc.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (load-dir .
- [(0 0 5)
- ((cl-lib
- (0 5)))
- "Load all Emacs Lisp files in a given directory" single
- ((:url . "http://elpa.gnu.org/packages/load-dir.html")
- (:keywords "lisp" "files" "convenience")
- (:maintainer "Teodor Zlatanov" . "tzz@lifelogs.com"))])
- (load-relative .
- [(1 3 2)
- nil "Relative file load (within a multi-file Emacs package)" tar
- ((:url . "https://github.com/rocky/emacs-load-relative")
- (:keywords "internal")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org"))
- (:commit . "e79d8f1581991381a9e3f1657af59dd0c35058fa"))])
- (loc-changes .
- [(1 2)
- nil "keep track of positions even after buffer changes" single
- ((:authors
- ("Rocky Bernstein" . "rocky@gnu.org"))
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:url . "http://github.com/rocky/emacs-loc-changes"))])
- (loccur .
- [(1 2 4)
- ((emacs
- (24 3)))
- "Perform an occur-like folding in current buffer" single
- ((:keywords "matching")
- (:authors
- ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com"))
- (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com")
- (:url . "https://github.com/fourier/loccur"))])
- (logos .
- [(1 0 1)
- ((emacs
- (27 1)))
- "Simple focus mode and extras" tar
- ((:url . "https://git.sr.ht/~protesilaos/logos")
- (:keywords "convenience" "focus" "writing" "presentation" "narrowing")
- (:maintainer "Logos Development" . "~protesilaos/logos@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "d8f18f74591ffcac6466409ac7cd29f90838b2fe"))])
- (luwak .
- [(1 0 0)
- ((emacs
- (28)))
- "Web browser based on lynx -dump." tar
- ((:url . "https://g.ypei.me/luwak.git")
- (:keywords "web-browser" "lynx" "html" "tor")
- (:maintainer "Yuchen Pei" . "id@ypei.org")
- (:authors
- ("Yuchen Pei" . "id@ypei.org"))
- (:commit . "37a36288c8d4cdba461812dbdf5da434ca156fee"))])
- (lv .
- [(0 15 0)
- nil "Other echo area" tar
- ((:maintainer "Oleh Krehel")
- (:authors
- ("Oleh Krehel"))
- (:url . "https://elpa.gnu.org/packages/lv.html")
- (:commit . "54e9db2b023e03b6f6b46aeec48ea74fd51d4e11"))])
- (map .
- [(3 3 1)
- ((emacs
- (26)))
- "Map manipulation functions" tar
- ((:keywords "extensions" "lisp")
- (:maintainer nil . "emacs-devel@gnu.org")
- (:authors
- ("Nicolas Petton" . "nicolas@petton.fr"))
- (:url . "https://elpa.gnu.org/packages/map.html")
- (:commit . "9da2efb670574b473ab864ae0456b4f1b38e680b"))])
- (marginalia .
- [(1 2)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "Enrich existing commands with completion annotations" tar
- ((:url . "https://github.com/minad/marginalia")
- (:keywords "docs" "help" "matching" "completion")
- (:maintainer "Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "4c7b852b183e10dc437c7e41a7ef37cf3ccd8db1"))])
- (markchars .
- [(0 2 2)
- nil "Mark chars fitting certain characteristics" single
- ((:url . "http://elpa.gnu.org/packages/markchars.html")
- (:authors
- ("Lennart Borgman" . "lennart.borgman@gmail.com"))
- (:maintainer "Lennart Borgman" . "lennart.borgman@gmail.com"))])
- (math-symbol-lists .
- [(1 3)
- nil "Lists of Unicode math symbols and latex commands" tar
- ((:url . "https://github.com/vspinu/math-symbol-lists")
- (:keywords "unicode" "symbols" "mathematics")
- (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com")
- (:authors
- ("Vitalie Spinu" . "spinuvit@gmail.com"))
- (:commit . "590d9f09f8ad9aab747b97f077396a2035dcf50f"))])
- (mct .
- [(0 5 0)
- ((emacs
- (27 1)))
- "Minibuffer and Completions in Tandem" tar
- ((:url . "https://gitlab.com/protesilaos/mct")
- (:maintainer "Protesilaos Stavrou" . "info@protesilaos.com")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "680d7727216ed05ba58e7d2f04a046d1f27cf3e9"))])
- (memory-usage .
- [(0 2)
- nil "Analyze the memory usage of Emacs in various ways" single
- ((:url . "http://elpa.gnu.org/packages/memory-usage.html")
- (:keywords "maint")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (metar .
- [(0 3)
- ((cl-lib
- (0 5)))
- "Retrieve and decode METAR weather information" single
- ((:url . "http://elpa.gnu.org/packages/metar.html")
- (:keywords "comm")
- (:authors
- ("Mario Lang" . "mlang@delysid.org"))
- (:maintainer "Mario Lang" . "mlang@delysid.org"))])
- (midi-kbd .
- [(0 2)
- ((emacs
- (25)))
- "Create keyboard events from Midi input" single
- ((:url . "http://elpa.gnu.org/packages/midi-kbd.html")
- (:keywords "convenience" "hardware" "multimedia")
- (:authors
- ("David Kastrup" . "dak@gnu.org"))
- (:maintainer "David Kastrup" . "dak@gnu.org"))])
- (mines .
- [(1 6)
- ((emacs
- (24 4))
- (cl-lib
- (0 5)))
- "Minesweeper game" tar
- ((:url . "https://github.com/calancha/Minesweeper")
- (:maintainer "Tino Calancha" . "tino.calancha@gmail.com")
- (:authors
- ("Tino Calancha" . "tino.calancha@gmail.com"))
- (:keywords "games"))])
- (minibuffer-header .
- [(0 5)
- ((emacs
- (27 1)))
- "Minibuffer header line" tar
- ((:url . "https://github.com/rougier/minibuffer-header")
- (:keywords "convenience")
- (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")
- (:commit . "fe5d90d3f13c0010eed3b5dd437b458f8bf3da5f"))])
- (minibuffer-line .
- [(0 1)
- nil "Display status info in the minibuffer window" single
- ((:url . "http://elpa.gnu.org/packages/minibuffer-line.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (minimap .
- [(1 4)
- nil "Sidebar showing a \"mini-map\" of a buffer" single
- ((:url . "http://elpa.gnu.org/packages/minimap.html")
- (:authors
- ("David Engster" . "deng@randomsample.de"))
- (:maintainer "David Engster" . "deng@randomsample.de"))])
- (mmm-mode .
- [(0 5 9)
- ((emacs
- (25 1))
- (cl-lib
- (0 2)))
- "Allow Multiple Major Modes in a buffer" tar
- ((:url . "https://github.com/purcell/mmm-mode")
- (:keywords "convenience" "faces" "languages" "tools")
- (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru")
- (:authors
- ("Michael Abraham Shulman" . "viritrilbia@gmail.com"))
- (:commit . "d1c85e5e2cfc0cff3f63409b0ac15dd230568609"))])
- (modus-themes .
- [(4 1 1)
- ((emacs
- (27 1)))
- "Elegant, highly legible and customizable themes" tar
- ((:url . "https://git.sr.ht/~protesilaos/modus-themes")
- (:keywords "faces" "theme" "accessibility")
- (:maintainer "Modus-Themes Development" . "~protesilaos/modus-themes@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "2942c77e30d8b89b609ff639e527e67813b6b067"))])
- (multi-mode .
- [(1 14)
- nil "support for multiple major modes" tar
- ((:url . "http://www.loveshack.ukfsn.org/emacs")
- (:keywords "languages" "extensions" "files")
- (:maintainer "Dave Love" . "fx@gnu.org")
- (:authors
- ("Dave Love" . "fx@gnu.org")))])
- (multishell .
- [(1 1 10)
- ((cl-lib
- (0 5)))
- "Organize use of multiple shell buffers, local and remote" tar
- ((:url . "https://github.com/kenmanheimer/EmacsMultishell")
- (:keywords "processes")
- (:maintainer "Ken Manheimer" . "ken.manheimer@gmail.com")
- (:authors
- ("Ken Manheimer" . "ken.manheimer@gmail.com"))
- (:commit . "aa1433b8df6d950e8592c7e878922b4ec5374569"))])
- (muse .
- [(3 20 2)
- nil "Authoring and publishing tool for Emacs" tar
- ((:url . "http://mwolson.org/projects/EmacsMuse.html")
- (:maintainer "Michael Olson" . "mwolson@gnu.org")
- (:authors
- ("John Wiegley" . "johnw@gnu.org"))
- (:keywords "hypermedia"))])
- (myers .
- [(0 1)
- ((emacs
- (25)))
- "Random-access singly-linked lists" single
- ((:url . "http://elpa.gnu.org/packages/myers.html")
- (:keywords "list" "containers")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (nadvice .
- [(0 4)
- nil "Forward compatibility for Emacs-24.4's nadvice" tar
- ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "https://elpa.gnu.org/packages/nadvice.html")
- (:commit . "d19e9ae649374a0f2fab1baa045ed192e0851750"))])
- (nameless .
- [(1 0 2)
- ((emacs
- (24 4)))
- "Hide package namespace in your emacs-lisp code" single
- ((:keywords "convenience" "lisp")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:url . "https://github.com/Malabarba/nameless"))])
- (names .
- [(20151201 0)
- ((emacs
- (24 1))
- (cl-lib
- (0 5))
- (nadvice
- (0 3)))
- "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." tar
- ((:url . "https://github.com/Malabarba/names")
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:keywords "extensions" "lisp"))])
- (nano-agenda .
- [(0 3)
- ((emacs
- (27 1)))
- "N Λ N O agenda" tar
- ((:url . "https://github.com/rougier/nano-agenda")
- (:keywords "convenience" "org-mode" "org-agenda")
- (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")
- (:commit . "6c38e95b8e846aceb88398c682fd283052924556"))])
- (nano-modeline .
- [(0 7 2)
- ((emacs
- (27 1)))
- "N Λ N O modeline" tar
- ((:url . "https://github.com/rougier/nano-modeline")
- (:keywords "convenience" "mode-line" "header-line")
- (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")
- (:commit . "61f62aa4716eae4fa89961955323d146e9791fca"))])
- (nano-theme .
- [(0 3 4)
- ((emacs
- (27 1)))
- "N Λ N O theme" tar
- ((:url . "https://github.com/rougier/nano-theme")
- (:keywords "theme" "dark" "light")
- (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")
- (:commit . "34a3efc37b329064a320225361ad833c57017485"))])
- (nftables-mode .
- [(1 1)
- ((emacs
- (25 1)))
- "Major mode for editing nftables" tar
- ((:keywords "convenience")
- (:maintainer nil . "emacs-devel@gnu.org")
- (:authors
- ("Trent W. Buck" . "trentbuck@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/nftables-mode.html")
- (:commit . "05600129ee8ea0774c6ac446a2bd18fc1dde54eb"))])
- (nhexl-mode .
- [(1 5)
- ((emacs
- (24 4))
- (cl-lib
- (0 5)))
- "Minor mode to edit files via hex-dump format" single
- ((:url . "http://elpa.gnu.org/packages/nhexl-mode.html")
- (:keywords "data")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (nlinum .
- [(1 9)
- nil "Show line numbers in the margin" single
- ((:url . "http://elpa.gnu.org/packages/nlinum.html")
- (:keywords "convenience")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (notes-mode .
- [(1 30)
- nil "Indexing system for on-line note-taking" tar
- ((:maintainer nil . "<johnh@isi.edu>.")
- (:authors
- (nil . "<johnh@isi.edu>."))
- (:url . "http://elpa.gnu.org/packages/notes-mode.html"))])
- (notmuch-indicator .
- [(0 2 2)
- ((emacs
- (27 1)))
- "Display mode line indicator with notmuch-count(1) output" tar
- ((:url . "https://git.sr.ht/~protesilaos/notmuch-indicator")
- (:keywords "convenience" "mail")
- (:maintainer "notmuch-indicator Development" . "~protesilaos/notmuch-indicator@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "9a0bf7d85cc80e6c4c05bfd4d794a86926b3a8a9"))])
- (ntlm .
- [(2 1 0)
- nil "NTLM (NT LanManager) authentication support" single
- ((:url . "http://elpa.gnu.org/packages/ntlm.html")
- (:keywords "ntlm" "sasl" "comm")
- (:authors
- ("Taro Kawagishi" . "tarok@transpulse.org"))
- (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))])
- (num3-mode .
- [(1 5)
- nil "highlight groups of digits in long numbers" tar
- ((:keywords "faces" "minor-mode")
- (:maintainer "Michal Nazarewicz" . "mina86@mina86.com")
- (:authors
- ("Felix Lee <felix8a@gmail.com>, Michal Nazarewicz" . "mina86@mina86.com"))
- (:url . "https://elpa.gnu.org/packages/num3-mode.html")
- (:commit . "fdf4d633e541875a6f765f5c3c8e0d4911122ed3"))])
- (oauth2 .
- [(0 16)
- ((cl-lib
- (0 5))
- (nadvice
- (0 3)))
- "OAuth 2.0 Authorization Protocol" tar
- ((:maintainer "Julien Danjou" . "julien@danjou.info")
- (:authors
- ("Julien Danjou" . "julien@danjou.info"))
- (:keywords "comm")
- (:url . "https://elpa.gnu.org/packages/oauth2.html"))])
- (ob-haxe .
- [(1 0)
- nil "org-babel functions for haxe evaluation" tar
- ((:url . "https://orgmode.org")
- (:maintainer "Ian Martins" . "ianxm@jhu.edu")
- (:authors
- ("Ian Martins" . "ianxm@jhu.edu"))
- (:keywords "literate programming" "reproducible research"))])
- (objed .
- [(0 8 3)
- ((emacs
- (25))
- (cl-lib
- (0 5)))
- "Navigate and edit text objects." tar
- ((:url . "https://github.com/clemera/objed")
- (:maintainer "Clemens Radermacher" . "clemera@posteo.net")
- (:authors
- ("Clemens Radermacher" . "clemera@posteo.net"))
- (:keywords "convenience"))])
- (omn-mode .
- [(1 2)
- nil "Support for OWL Manchester Notation" single
- ((:url . "http://elpa.gnu.org/packages/omn-mode.html")
- (:authors
- ("Phillip Lord" . "phillip.lord@newcastle.ac.uk"))
- (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))])
- (on-screen .
- [(1 3 3)
- ((cl-lib
- (0)))
- "guide your eyes while scrolling" single
- ((:keywords "convenience")
- (:authors
- ("Michael Heerdegen" . "michael_heerdegen@web.de"))
- (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de")
- (:url . "https://github.com/michael-heerdegen/on-screen.el"))])
- (openpgp .
- [(1 0 1)
- ((emacs
- (24 4)))
- "Client for keys.openpgp.org" tar
- ((:url . "https://git.sr.ht/~pkal/openpgp/")
- (:keywords "convenience")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "25babb1060622c1560c8be64cdbb009af535959a"))])
- (orderless .
- [(1 0)
- ((emacs
- (26 1)))
- "Completion style for matching regexps in any order" tar
- ((:url . "https://github.com/oantolin/orderless")
- (:keywords "extensions")
- (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx")
- (:authors
- ("Omar Antolín Camarena" . "omar@matem.unam.mx"))
- (:commit . "847694e78c12d903d5e3f6cb365a5d3b984db537"))])
- (org .
- [(9 6 5)
- ((emacs
- (26 1)))
- "Outline-based notes management and organizer" tar
- ((:url . "https://orgmode.org")
- (:keywords "outlines" "hypermedia" "calendar" "wp")
- (:maintainer "Bastien Guerry" . "bzg@gnu.org")
- (:authors
- ("Carsten Dominik" . "carsten.dominik@gmail.com"))
- (:commit . "921e0e8bc1158736313db77c2ebc503b50211b89"))])
- (org-contacts .
- [(1 1)
- ((emacs
- (27 1))
- (org
- (9 3 4)))
- "Contacts management system for Org Mode" tar
- ((:url . "https://repo.or.cz/org-contacts.git")
- (:keywords "contacts" "org-mode" "outlines" "hypermedia" "calendar")
- (:maintainer "stardiviner" . "numbchild@gmail.com")
- (:authors
- ("Julien Danjou" . "julien@danjou.info"))
- (:commit . "217ba04c9d638067a6ccb0829cf1885f54c1d568"))])
- (org-edna .
- [(1 1 2)
- ((emacs
- (25 1))
- (seq
- (2 19))
- (org
- (9 0 5)))
- "Extensible Dependencies 'N' Actions" tar
- ((:url . "https://savannah.nongnu.org/projects/org-edna-el/")
- (:maintainer "Ian Dunn" . "dunni@gnu.org")
- (:authors
- ("Ian Dunn" . "dunni@gnu.org"))
- (:keywords "convenience" "text" "org"))])
- (org-modern .
- [(0 9)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "Modern looks for Org" tar
- ((:url . "https://github.com/minad/org-modern")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "b614ad31d72c49f9eb29d3836995fd7fb0d1fd4a"))])
- (org-notify .
- [(0 1 0)
- ((emacs
- (25 1)))
- "Notifications for Org-mode" tar
- ((:url . "https://github.com/p-m/org-notify")
- (:keywords "notification" "todo-list" "alarm" "reminder" "pop-up" "calendar")
- (:maintainer "Peter Münster" . "pmrb@free.fr")
- (:authors
- ("Peter Münster" . "pmrb@free.fr"))
- (:commit . "3a9c55aabdd1204f032fc02fd64ef643e0f19ae6"))])
- (org-real .
- [(1 0 6)
- ((emacs
- (26 1))
- (boxy
- (1 0))
- (org
- (9 3)))
- "Keep track of real things as org-mode links" tar
- ((:url . "https://gitlab.com/tygrdev/org-real")
- (:keywords "tools")
- (:maintainer "Taylor Grinn" . "grinntaylor@gmail.com")
- (:authors
- ("Taylor Grinn" . "grinntaylor@gmail.com"))
- (:commit . "9ae5d4a2c576671e8f7ab20d202eefa65af51b25"))])
- (org-remark .
- [(1 0 5)
- ((emacs
- (27 1))
- (org
- (9 4)))
- "Highlight & annotate any text files" tar
- ((:url . "https://github.com/nobiot/org-remark")
- (:keywords "org-mode" "annotation" "writing" "note-taking" "marginal-notes")
- (:maintainer "Noboru Ota" . "me@nobiot.com")
- (:authors
- ("Noboru Ota" . "me@nobiot.com"))
- (:commit . "576e5680682bfb80a50b057b8752e0674d766f8d"))])
- (org-transclusion .
- [(1 3 2)
- ((emacs
- (27 1))
- (org
- (9 4)))
- "Transclude text content via links" tar
- ((:url . "https://github.com/nobiot/org-transclusion")
- (:keywords "org-mode" "transclusion" "writing")
- (:maintainer "Noboru Ota" . "me@nobiot.com")
- (:authors
- ("Noboru Ota" . "me@nobiot.com"))
- (:commit . "7f4ad67bf1944b814a8763d304d4d27325504eb4"))])
- (org-translate .
- [(0 1 4)
- ((emacs
- (27 1))
- (org
- (9 1)))
- "Org-based translation environment" tar
- ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net")
- (:authors
- ("Eric Abrahamsen" . "eric@ericabrahamsen.net"))
- (:url . "https://elpa.gnu.org/packages/org-translate.html")
- (:commit . "bdc5d169ef0c502f46aa673918ccf34fcc8415f2"))])
- (orgalist .
- [(1 13)
- ((emacs
- (24 4)))
- "Manage Org-like lists in non-Org buffers" single
- ((:url . "http://elpa.gnu.org/packages/orgalist.html")
- (:keywords "convenience")
- (:authors
- ("Nicolas Goaziou" . "mail@nicolasgoaziou.fr"))
- (:maintainer "Nicolas Goaziou" . "mail@nicolasgoaziou.fr"))])
- (osc .
- [(0 4)
- nil "Open Sound Control protocol library" tar
- ((:maintainer "Mario Lang" . "mlang@blind.guru")
- (:authors
- ("Mario Lang" . "mlang@blind.guru"))
- (:keywords "comm" "processes" "multimedia")
- (:url . "https://elpa.gnu.org/packages/osc.html"))])
- (osm .
- [(0 12)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "OpenStreetMap viewer" tar
- ((:url . "https://github.com/minad/osm")
- (:keywords "network" "multimedia" "hypermedia" "mouse")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "f08f03860021fa334708829d705370614e383880"))])
- (other-frame-window .
- [(1 0 6)
- ((emacs
- (24 4)))
- "Minor mode to enable global prefix keys for other frame/window buffer placement" single
- ((:url . "http://elpa.gnu.org/packages/other-frame-window.html")
- (:keywords "frame" "window")
- (:authors
- ("Stephen Leake" . "stephen_leake@member.fsf.org"))
- (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org"))])
- (pabbrev .
- [(4 2 2)
- nil "Predictive abbreviation expansion" tar
- ((:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk")
- (:authors
- ("Phillip Lord" . "phillip.lord@newcastle.ac.uk"))
- (:url . "https://elpa.gnu.org/packages/pabbrev.html")
- (:commit . "6de1b9e4b57b9e1a4d598d11f4476db9ee870637"))])
- (paced .
- [(1 1 3)
- ((emacs
- (25 1))
- (async
- (1 9 1)))
- "Predictive Abbreviation Completion and Expansion using Dictionaries" tar
- ((:url . "https://savannah.nongnu.org/projects/paced-el/")
- (:maintainer "Ian Dunn" . "dunni@gnu.org")
- (:authors
- ("Ian Dunn" . "dunni@gnu.org"))
- (:keywords "convenience" "completion"))])
- (parsec .
- [(0 1 3)
- ((emacs
- (24))
- (cl-lib
- (0 5)))
- "Parser combinator library" tar
- ((:url . "https://github.com/cute-jumper/parsec.el")
- (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com")
- (:authors
- ("Junpeng Qiu" . "qjpchmail@gmail.com"))
- (:keywords "extensions"))])
- (parser-generator .
- [(0 1 6)
- ((emacs
- (26)))
- "Parser Generator library" tar
- ((:url . "https://github.com/cjohansson/emacs-parser-generator")
- (:keywords "tools" "convenience")
- (:maintainer "Christian Johansson" . "christian@cvj.se")
- (:authors
- ("Christian Johansson" . "christian@cvj.se"))
- (:commit . "db91a5f203ac39bcdfcd5276d3488394361c7f90"))])
- (path-iterator .
- [(1 0)
- ((emacs
- (25 0)))
- "An iterator for traversing a directory path." tar
- ((:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@stephe-leake.org"))
- (:url . "http://elpa.gnu.org/packages/path-iterator.html"))])
- (peg .
- [(1 0 1)
- ((emacs
- (25)))
- "Parsing Expression Grammars in Emacs Lisp" tar
- ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Helmut Eller" . "eller.helmut@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/peg.html")
- (:commit . "90c9004a8347209f94a37c8d9506425721098402"))])
- (perl-doc .
- [(0 6)
- ((emacs
- (27)))
- "Read Perl documentation" tar
- ((:url . "https://github.com/HaraldJoerg/emacs-perl-doc")
- (:keywords "languages")
- (:maintainer "Harald Jörg" . "haj@posteo.de")
- (:authors
- ("Harald Jörg" . "haj@posteo.de"))
- (:commit . "eb329f2675e71d656e1512ba7ec5a37ada4603d6"))])
- (persist .
- [(0 5)
- nil "Persist Variables between Emacs Sessions" tar
- ((:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk")
- (:authors
- ("Phillip Lord" . "phillip.lord@russet.org.uk"))
- (:url . "https://elpa.gnu.org/packages/persist.html")
- (:commit . "25d675307c03f720e592c3dc9a5a0ae8db0836eb"))])
- (phps-mode .
- [(0 4 46)
- ((emacs
- (26)))
- "Major mode for PHP with code intelligence" tar
- ((:url . "https://github.com/cjohansson/emacs-phps-mode")
- (:keywords "tools" "convenience")
- (:maintainer "Christian Johansson" . "christian@cvj.se")
- (:authors
- ("Christian Johansson" . "christian@cvj.se"))
- (:commit . "378f886bdba484805e105e340e1880cc9ab7f3bc"))])
- (pinentry .
- [(0 1)
- nil "GnuPG Pinentry server implementation" single
- ((:url . "http://elpa.gnu.org/packages/pinentry.html")
- (:keywords "gnupg")
- (:authors
- ("Daiki Ueno" . "ueno@gnu.org"))
- (:maintainer "Daiki Ueno" . "ueno@gnu.org"))])
- (plz .
- [(0 5 4)
- ((emacs
- (26 3)))
- "HTTP library" tar
- ((:url . "https://github.com/alphapapa/plz.el")
- (:keywords "comm" "network" "http")
- (:maintainer "Adam Porter" . "adam@alphapapa.net")
- (:authors
- ("Adam Porter" . "adam@alphapapa.net"))
- (:commit . "367c6a5a9a4bf320dcccb54bdd80ac46aa8be06f"))])
- (poke .
- [(3 0)
- ((emacs
- (25)))
- "Emacs meets GNU poke!" tar
- ((:url . "https://www.jemarch.net/poke")
- (:maintainer "Jose E. Marchesi" . "jemarch@gnu.org")
- (:authors
- ("Jose E. Marchesi" . "jemarch@gnu.org"))
- (:commit . "bc0bd9e618a468bbb0d0a68cdc2462db43b5b689"))])
- (poke-mode .
- [(3 0)
- nil "Major mode for editing Poke programs" tar
- ((:maintainer "Jose E. Marchesi" . "jemarch@gnu.org")
- (:authors
- ("Aurelien Aptel" . "aaptel@suse.com"))
- (:url . "https://elpa.gnu.org/packages/poke-mode.html")
- (:commit . "488a44cf462b7c98a2e7f3146afcffc9ba208bb0"))])
- (poker .
- [(0 2)
- nil "Texas hold 'em poker" single
- ((:url . "http://elpa.gnu.org/packages/poker.html")
- (:keywords "games")
- (:authors
- ("Mario Lang" . "mlang@delysid.org"))
- (:maintainer "Mario Lang" . "mlang@delysid.org"))])
- (posframe .
- [(1 4 2)
- ((emacs
- (26 1)))
- "Pop a posframe (just a frame) at point" tar
- ((:url . "https://github.com/tumashu/posframe")
- (:keywords "convenience" "tooltip")
- (:maintainer "Feng Shu" . "tumashu@163.com")
- (:authors
- ("Feng Shu" . "tumashu@163.com"))
- (:commit . "3b97dc180b03498103cfcc7f44e64150df440bf0"))])
- (project .
- [(0 9 8)
- ((emacs
- (26 1))
- (xref
- (1 4 0)))
- "Operations on the current project" tar
- ((:url . "https://elpa.gnu.org/packages/project.html")
- (:commit . "6c0d8210175e72dcd7cef2ad77b8f8b680b240bc"))])
- (psgml .
- [(1 3 5)
- nil "SGML-editing mode with parsing support" tar
- ((:keywords "languages")
- (:maintainer "Lennart Staflin" . "lstaflin@gmail.com")
- (:authors
- ("Lennart Staflin" . "lenst@lysator.liu.se")
- ("James Clark" . "jjc@clark.com"))
- (:url . "https://elpa.gnu.org/packages/psgml.html")
- (:commit . "697fcf7d80513257d90b7331297495bb9e01003d"))])
- (pspp-mode .
- [(1 1)
- nil "Major mode for editing PSPP files" single
- ((:url . "http://elpa.gnu.org/packages/pspp-mode.html")
- (:keywords "pspp" "major-mode")
- (:authors
- ("Scott Andrew Borton" . "scott@pp.htv.fi"))
- (:maintainer "John Darrington" . "john@darrington.wattle.id.au"))])
- (pulsar .
- [(0 5 0)
- ((emacs
- (27 1)))
- "Pulse highlight on demand or after select functions" tar
- ((:url . "https://git.sr.ht/~protesilaos/pulsar")
- (:keywords "convenience" "pulse" "highlight")
- (:maintainer "Pulsar Development" . "~protesilaos/pulsar@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "e01a8f7e80c5c83dfcfb87b10e0213d4963e4d15"))])
- (pyim .
- [(5 3 2)
- ((emacs
- (27 1))
- (async
- (1 6))
- (xr
- (1 13)))
- "A Chinese input method support quanpin, shuangpin, wubi, cangjie and rime." tar
- ((:url . "https://github.com/tumashu/pyim")
- (:keywords "convenience" "chinese" "pinyin" "input-method")
- (:maintainer "Feng Shu" . "tumashu@163.com")
- (:authors
- ("Ye Wenbin" . "wenbinye@163.com")
- ("Feng Shu" . "tumashu@163.com"))
- (:commit . "4c953701a368e1433bf91fd19766d76c9b496825"))])
- (pyim-basedict .
- [(0 5 4)
- nil "The default pinyin dict of pyim" tar
- ((:url . "https://github.com/tumashu/pyim-basedict")
- (:keywords "convenience" "chinese" "pinyin" "input-method" "complete")
- (:maintainer "Feng Shu" . "tumashu@163.com")
- (:authors
- ("Feng Shu" . "tumashu@163.com"))
- (:commit . "d61af27686f7a39e6c138b7261a686e7ea7a0ef7"))])
- (python .
- [(0 28)
- ((emacs
- (24 4))
- (cl-lib
- (1 0)))
- "Python's flying circus support for Emacs" tar
- ((:url . "https://github.com/fgallina/python.el")
- (:keywords "languages")
- (:maintainer nil . "emacs-devel@gnu.org")
- (:authors
- ("Fabián E. Gallina" . "fgallina@gnu.org"))
- (:commit . "b3d0f53b296a0876ec7a55ae840868e65ed54e14"))])
- (quarter-plane .
- [(0 1)
- nil "Minor mode for quarter-plane style editing" single
- ((:url . "http://elpa.gnu.org/packages/quarter-plane.html")
- (:keywords "convenience" "wp")
- (:authors
- ("Peter J. Weisberg" . "pj@irregularexpressions.net"))
- (:maintainer "Peter J. Weisberg" . "pj@irregularexpressions.net"))])
- (queue .
- [(0 2)
- nil "Queue data structure" single
- ((:keywords "extensions" "data structures" "queue")
- (:authors
- ("Inge Wallin" . "inge@lysator.liu.se")
- ("Toby Cubitt" . "toby-predictive@dr-qubit.org"))
- (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org")
- (:url . "http://www.dr-qubit.org/emacs.php"))])
- (rainbow-mode .
- [(1 0 6)
- nil "Colorize color names in buffers" tar
- ((:keywords "faces")
- (:maintainer "Julien Danjou" . "julien@danjou.info")
- (:authors
- ("Julien Danjou" . "julien@danjou.info"))
- (:url . "https://elpa.gnu.org/packages/rainbow-mode.html")
- (:commit . "ac68593018ef3555e64ea592d72334f4e3e39209"))])
- (rbit .
- [(0 1)
- nil "Red-black persistent interval trees" single
- ((:url . "http://elpa.gnu.org/packages/rbit.html")
- (:keywords "data structures" "binary tree" "intervals")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (rcirc-color .
- [(0 4 5)
- ((emacs
- (24 4)))
- "color nicks" tar
- ((:keywords "comm")
- (:maintainer "Alex Schroeder" . "alex@gnu.org")
- (:authors
- ("Alex Schroeder" . "alex@gnu.org"))
- (:url . "https://elpa.gnu.org/packages/rcirc-color.html")
- (:commit . "79449152cb71ec4d719d4b1a95c1192fb9831ceb"))])
- (rcirc-menu .
- [(1 1)
- nil "A menu of all your rcirc connections" single
- ((:url . "http://elpa.gnu.org/packages/rcirc-menu.html")
- (:keywords "comm")
- (:authors
- ("Alex Schroeder" . "alex@gnu.org"))
- (:maintainer "Alex Schroeder" . "alex@gnu.org"))])
- (realgud .
- [(1 5 1)
- ((load-relative
- (1 3 1))
- (loc-changes
- (1 2))
- (test-simple
- (1 3 0))
- (emacs
- (25)))
- "A modular front-end for interacting with external debuggers" tar
- ((:url . "http://github.com/realgud/realgud/")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org"))
- (:keywords "debugger" "gdb" "python" "perl" "go" "bash" "zsh" "bashdb" "zshdb" "remake" "trepan" "perldb" "pdb"))])
- (realgud-ipdb .
- [(1 0 0)
- ((realgud
- (1 5 0))
- (load-relative
- (1 3 1))
- (emacs
- (25)))
- "Realgud front-end to ipdb" tar
- ((:url . "http://github.com/rocky/realgud-ipdb")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org")))])
- (realgud-jdb .
- [(1 0 0)
- ((realgud
- (1 4 5))
- (load-relative
- (1 2))
- (cl-lib
- (0 5))
- (emacs
- (25)))
- "Realgud front-end to Java's jdb debugger\"" tar
- ((:url . "http://github.com/realgud/realgud-jdb")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org")))])
- (realgud-lldb .
- [(1 0 2)
- ((load-relative
- (1 3 1))
- (realgud
- (1 5 0))
- (emacs
- (25)))
- "Realgud front-end to lldb" tar
- ((:url . "http://github.com/realgud/realgud-lldb")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org")))])
- (realgud-node-debug .
- [(1 0 0)
- ((realgud
- (1 4 5))
- (load-relative
- (1 2))
- (cl-lib
- (0 5))
- (emacs
- (25)))
- "Realgud front-end to older \"node debug\"" tar
- ((:url . "http://github.com/realgud/realgud-node-debug")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org")))])
- (realgud-node-inspect .
- [(1 0 0)
- ((realgud
- (1 4 5))
- (load-relative
- (1 2))
- (cl-lib
- (0 5))
- (emacs
- (24)))
- "Realgud front-end to newer \"node inspect\"" tar
- ((:url . "http://github.com/realgud/realgud-node-inspect")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org")))])
- (realgud-trepan-ni .
- [(1 0 1)
- ((load-relative
- (1 2))
- (realgud
- (1 5 0))
- (cl-lib
- (0 5))
- (emacs
- (25)))
- "Realgud front-end to trepan-ni" tar
- ((:url . "http://github.com/realgud/realgud-trepan-ni")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org")))])
- (realgud-trepan-xpy .
- [(1 0 1)
- ((realgud
- (1 5 0))
- (load-relative
- (1 3 1))
- (emacs
- (25)))
- "Realgud front-end to trepan-xpy" tar
- ((:url . "https://github.com/realgud/realgud-trepan-xpy")
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org"))
- (:commit . "f758f48266d90775643454e72214e40a4ed320b8"))])
- (rec-mode .
- [(1 9 1)
- ((emacs
- (25)))
- "Major mode for viewing/editing rec files" tar
- ((:url . "https://www.gnu.org/software/recutils/")
- (:maintainer "Antoine Kalmbach" . "ane@iki.fi")
- (:authors
- ("Jose E. Marchesi" . "jemarch@gnu.org"))
- (:commit . "faae27aeb71cc9397d0fc1a19bd0df8c9e11cc98"))])
- (register-list .
- [(0 1)
- nil "Interactively list/edit registers" single
- ((:url . "http://elpa.gnu.org/packages/register-list.html")
- (:keywords "register")
- (:authors
- ("Bastien Guerry" . "bzg@gnu.org"))
- (:maintainer "Bastien Guerry" . "bzg@gnu.org"))])
- (relint .
- [(1 22)
- ((xr
- (1 22))
- (emacs
- (26 1)))
- "Elisp regexp mistake finder" tar
- ((:url . "https://github.com/mattiase/relint")
- (:keywords "lisp" "regexps")
- (:maintainer "Mattias Engdegård" . "mattiase@acm.org")
- (:authors
- ("Mattias Engdegård" . "mattiase@acm.org"))
- (:commit . "011f4f10ee65fb698d4caf3c72ba8ee6b98e3de5"))])
- (repology .
- [(1 2 3)
- ((emacs
- (26 1)))
- "Repology API access via Elisp" tar
- ((:keywords "web")
- (:maintainer "Nicolas Goaziou" . "mail@nicolasgoaziou.fr")
- (:authors
- ("Nicolas Goaziou" . "mail@nicolasgoaziou.fr"))
- (:url . "https://elpa.gnu.org/packages/repology.html")
- (:commit . "b5829003decbdbe9002e7e1d29f45989a4659927"))])
- (rich-minority .
- [(1 0 3)
- ((cl-lib
- (0 5)))
- "Clean-up and Beautify the list of minor-modes." tar
- ((:url . "https://github.com/Malabarba/rich-minority")
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:keywords "mode-line" "faces"))])
- (rnc-mode .
- [(0 3)
- nil "Emacs mode to edit Relax-NG Compact files" tar
- ((:keywords "xml" "relaxng")
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:url . "https://elpa.gnu.org/packages/rnc-mode.html")
- (:commit . "dfee31d83208b734ed1d1fdc523565d7056db850"))])
- (rt-liberation .
- [(5)
- nil "Emacs interface to RT" tar
- ((:url . "http://www.nongnu.org/rtliber/")
- (:keywords "rt" "tickets")
- (:maintainer "Yoni Rabkin" . "yrk@gnu.org")
- (:authors
- ("Yoni Rabkin" . "yrk@gnu.org"))
- (:commit . "b76ae2828b12efc5f45f51ba873489e049a70924"))])
- (ruby-end .
- [(0 4 3)
- nil "Automatic insertion of end blocks for Ruby" tar
- ((:url . "http://github.com/rejeep/ruby-end")
- (:keywords "speed" "convenience" "ruby")
- (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru")
- (:authors
- ("Johan Andersson" . "johan.rejeep@gmail.com"))
- (:commit . "fe39d34ba7a43d522c7bdc47406935611e782ca3"))])
- (rudel .
- [(0 3 2)
- ((emacs
- (24))
- (cl-lib
- (0 5))
- (cl-generic
- (0 3))
- (cl-print
- (1 0)))
- "A collaborative editing framework for Emacs" tar
- ((:url . "http://rudel.sourceforge.net/")
- (:maintainer "Jan Moringen" . "scymtym@users.sourceforge.net")
- (:authors
- ("Jan Moringen" . "scymtym@users.sourceforge.net"))
- (:keywords "rudel" "collaboration"))])
- (satchel .
- [(0 2)
- ((emacs
- (27 2))
- (project
- (0 8 1)))
- "A bag for your files, separated by git branches" tar
- ((:keywords "tools" "languages")
- (:maintainer "Theodor Thornhill" . "theo@thornhill.no")
- (:authors
- ("Theodor Thornhill" . "theo@thornhill.no"))
- (:url . "https://elpa.gnu.org/packages/satchel.html")
- (:commit . "6e5613e203f6937202cb5d55249e7e6be939067b"))])
- (scanner .
- [(0 2)
- ((emacs
- (25 1))
- (dash
- (2 12 0)))
- "Scan documents and images" tar
- ((:url . "https://gitlab.com/rstocker/scanner.git")
- (:maintainer "Raffael Stocker" . "r.stocker@mnet-mail.de")
- (:authors
- ("Raffael Stocker" . "r.stocker@mnet-mail.de"))
- (:keywords "hardware" "multimedia"))])
- (scroll-restore .
- [(1 0)
- nil "restore original position after scrolling" single
- ((:url . "http://elpa.gnu.org/packages/scroll-restore.html")
- (:keywords "scrolling")
- (:authors
- ("Martin Rudalics" . "rudalics@gmx.at"))
- (:maintainer "Martin Rudalics" . "rudalics@gmx.at"))])
- (sed-mode .
- [(1 0)
- nil "Major mode to edit sed scripts" single
- ((:url . "http://elpa.gnu.org/packages/sed-mode.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (seq .
- [(2 23)
- nil "Sequence manipulation functions" tar
- ((:keywords "sequences")
- (:maintainer nil . "emacs-devel@gnu.org")
- (:authors
- ("Nicolas Petton" . "nicolas@petton.fr"))
- (:url . "https://elpa.gnu.org/packages/seq.html"))])
- (setup .
- [(1 3 2)
- ((emacs
- (26 1)))
- "Helpful Configuration Macro" tar
- ((:url . "https://git.sr.ht/~pkal/setup")
- (:keywords "lisp" "local")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "28926bd11eef6118f4e169d10c1c36b8c4e545ae"))])
- (shelisp .
- [(1 0 0)
- nil "execute elisp in shell" tar
- ((:keywords "terminals" "lisp" "processes")
- (:maintainer "Michael R. Mauger" . "michael@mauger.com")
- (:authors
- ("Michael R. Mauger" . "michael@mauger.com"))
- (:url . "https://elpa.gnu.org/packages/shelisp.html"))])
- (shell-command+ .
- [(2 4 2)
- ((emacs
- (24 3)))
- "An extended shell-command" tar
- ((:url . "https://git.sr.ht/~pkal/shell-command-plus")
- (:keywords "unix" "processes" "convenience")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "7121adb48e6fb5f03030701b9f1e25b929cb3cd3"))])
- (shen-mode .
- [(0 1)
- nil "A major mode for editing shen source code" tar
- ((:maintainer "Eric Schulte" . "schulte.eric@gmail.com")
- (:authors
- ("Eric Schulte" . "schulte.eric@gmail.com"))
- (:keywords "languages" "shen")
- (:url . "http://elpa.gnu.org/packages/shen-mode.html"))])
- (sisu-mode .
- [(7 1 8)
- nil "Major mode for SiSU markup text" single
- ((:keywords "text" "syntax" "processes" "tools")
- (:authors
- ("Ralph Amissah & Ambrose Kofi Laing"))
- (:maintainer "Ralph Amissah" . "ralph.amissah@gmail.com")
- (:url . "http://www.sisudoc.org/"))])
- (site-lisp .
- [(0 1 1)
- ((emacs
- (25 1)))
- "Manage site-lisp directories" tar
- ((:url . "https://git.sr.ht/~pkal/site-lisp")
- (:keywords "lisp" "local")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "f9898d50d956e86faf0eb27def8ccc7180efa928"))])
- (sketch-mode .
- [(1 0 4)
- nil "Quickly create svg sketches using keyboard and mouse" tar
- ((:url . "https://github.com/dalanicolai/sketch-mode")
- (:keywords "multimedia")
- (:maintainer "D.L. Nicolai" . "dalanicolai@gmail.com")
- (:authors
- ("D.L. Nicolai" . "dalanicolai@gmail.com")))])
- (slime-volleyball .
- [(1 2 0)
- ((cl-lib
- (0 5)))
- "An SVG Slime Volleyball Game" tar
- ((:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org")
- (:authors
- ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))
- (:keywords "games")
- (:url . "https://elpa.gnu.org/packages/slime-volleyball.html"))])
- (sm-c-mode .
- [(1 1)
- nil "C major mode based on SMIE" single
- ((:url . "http://elpa.gnu.org/packages/sm-c-mode.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (smalltalk-mode .
- [(4 0)
- nil "Major mode for the GNU Smalltalk programming language" tar
- ((:maintainer "Derek Zhou" . "derek@3qin.us")
- (:authors
- ("Steve Byrne"))
- (:url . "https://elpa.gnu.org/packages/smalltalk-mode.html"))])
- (smart-yank .
- [(0 1 1)
- ((emacs
- (24)))
- "A different approach of yank pointer handling" single
- ((:url . "http://elpa.gnu.org/packages/smart-yank.html")
- (:keywords "convenience")
- (:authors
- ("Michael Heerdegen" . "michael_heerdegen@web.de"))
- (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de"))])
- (sml-mode .
- [(6 12)
- ((emacs
- (24 3))
- (cl-lib
- (0 5)))
- "Major mode for editing (Standard) ML" tar
- ((:keywords "sml")
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca")
- (:authors
- ("Lars Bo Nielsen")
- (" Olin Shivers")
- (" Fritz Knabe (?)")
- (" Steven Gilmore (?)")
- (" Matthew Morley" . "mjm@scs.leeds.ac.uk")
- (" Matthias Blume" . "blume@cs.princeton.edu")
- (" (Stefan Monnier)" . "monnier@iro.umontreal.ca"))
- (:url . "https://elpa.gnu.org/packages/sml-mode.html")
- (:commit . "7ebf91114292eead967d1a9bb4f235d66f6dd525"))])
- (so-long .
- [(1 1 2)
- ((emacs
- (24 4)))
- "Say farewell to performance problems with minified code." tar
- ((:url . "https://savannah.nongnu.org/projects/so-long")
- (:keywords "convenience")
- (:maintainer "Phil Sainty" . "psainty@orcon.net.nz")
- (:authors
- ("Phil Sainty" . "psainty@orcon.net.nz"))
- (:commit . "045a4fe94c18cd36ef297e62a80cdff449af3aa5"))])
- (soap-client .
- [(3 2 1)
- ((emacs
- (24 1))
- (cl-lib
- (0 6 1)))
- "Access SOAP web services" tar
- ((:url . "https://github.com/alex-hhh/emacs-soap-client")
- (:keywords "soap" "web-services" "comm" "hypermedia")
- (:maintainer "Alexandru Harsanyi" . "AlexHarsanyi@gmail.com")
- (:authors
- ("Alexandru Harsanyi" . "AlexHarsanyi@gmail.com"))
- (:commit . "37eef19fd608ca81acb40f974b8d7bbe7fc27127"))])
- (sokoban .
- [(1 4 9)
- ((emacs
- (23 1))
- (cl-lib
- (0 5)))
- "Implementation of Sokoban for Emacs." tar
- ((:keywords "games")
- (:maintainer "Dieter Deyke" . "dieter.deyke@gmail.com")
- (:authors
- ("Glynn Clements" . "glynn.clements@xemacs.org"))
- (:url . "https://elpa.gnu.org/packages/sokoban.html")
- (:commit . "3043723a7c2557443aa28d871137c8d9c3b46edc"))])
- (sotlisp .
- [(1 6 2)
- ((emacs
- (24 1)))
- "Write lisp at the speed of thought." single
- ((:keywords "convenience" "lisp")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:url . "https://github.com/Malabarba/speed-of-thought-lisp"))])
- (spinner .
- [(1 7 4)
- ((emacs
- (24 3)))
- "Add spinners and progress-bars to the mode-line for ongoing operations" tar
- ((:url . "https://github.com/Malabarba/spinner.el")
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:keywords "processes" "mode-line"))])
- (sql-beeline .
- [(0 2)
- nil "Beeline support for sql.el" tar
- ((:keywords "sql" "hive" "beeline" "hiveserver2" "impala")
- (:maintainer "Filipp Gunbin" . "fgunbin@fastmail.fm")
- (:authors
- ("Filipp Gunbin" . "fgunbin@fastmail.fm"))
- (:url . "https://elpa.gnu.org/packages/sql-beeline.html")
- (:commit . "b7ffff9404d93f569e3c2bc59db1be6e848c894f"))])
- (sql-cassandra .
- [(0 2 2)
- ((emacs
- (29)))
- "Cassandra support for sql.el" tar
- ((:keywords "sql" "cassandra" "cql" "cqlsh")
- (:maintainer "Filipp Gunbin" . "fgunbin@fastmail.fm")
- (:authors
- ("Filipp Gunbin" . "fgunbin@fastmail.fm"))
- (:url . "https://elpa.gnu.org/packages/sql-cassandra.html")
- (:commit . "3e997c6ad82f4240bcd62630ad44b5f023bd16c1"))])
- (sql-indent .
- [(1 6)
- ((cl-lib
- (0 5)))
- "Support for indenting code in SQL files." tar
- ((:url . "https://github.com/alex-hhh/emacs-sql-indent")
- (:maintainer "Alex Harsanyi" . "AlexHarsanyi@gmail.com")
- (:authors
- ("Alex Harsanyi" . "AlexHarsanyi@gmail.com"))
- (:keywords "languages" "sql"))])
- (srht .
- [(0 2)
- ((emacs
- (27 1))
- (plz
- (0 1)))
- "Sourcehut" tar
- ((:url . "https://sr.ht/~akagi/srht.el/")
- (:keywords "comm" "vc")
- (:maintainer "Aleksandr Vityazev" . "avityazev@posteo.org")
- (:authors
- ("Aleksandr Vityazev" . "avityazev@posteo.org"))
- (:commit . "5605a75111a9b1a1e67bd012bbf78fc6cb54f96b"))])
- (ssh-deploy .
- [(3 1 14)
- ((emacs
- (25)))
- "Deployment via Tramp, global or per directory." tar
- ((:url . "https://github.com/cjohansson/emacs-ssh-deploy")
- (:keywords "tools" "convenience")
- (:maintainer "Christian Johansson" . "christian@cvj.se")
- (:authors
- ("Christian Johansson" . "christian@cvj.se"))
- (:commit . "94b56c0428fa0c788578161edc9e7992b13cd400"))])
- (standard-themes .
- [(1 2 0)
- ((emacs
- (27 1)))
- "Like the default theme but more consistent" tar
- ((:url . "https://git.sr.ht/~protesilaos/standard-themes")
- (:keywords "faces" "theme" "accessibility")
- (:maintainer "Standard-Themes Development" . "~protesilaos/standard-themes@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "b594df646b99d55acba3ccff3109bd322a3278f0"))])
- (stream .
- [(2 2 5)
- ((emacs
- (25)))
- "Implementation of streams" tar
- ((:maintainer nil . "nicolas@petton.fr")
- (:authors
- ("Nicolas Petton" . "nicolas@petton.fr"))
- (:keywords "stream" "laziness" "sequences")
- (:url . "http://elpa.gnu.org/packages/stream.html"))])
- (substitute .
- [(0 1 8)
- ((emacs
- (27 1)))
- "Efficiently replace targets in the buffer or context" tar
- ((:url . "https://git.sr.ht/~protesilaos/substitute")
- (:maintainer "Protesilaos Stavrou General Issues" . "~protesilaos/general-issues@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "b81bb7789847f3d1645a60422fa080c48b93dd47"))])
- (svg .
- [(1 1)
- ((emacs
- (25)))
- "SVG image creation functions" single
- ((:url . "http://elpa.gnu.org/packages/svg.html")
- (:keywords "image")
- (:authors
- ("Lars Magne Ingebrigtsen" . "larsi@gnus.org")
- ("Felix E. Klee" . "felix.klee@inka.de"))
- (:maintainer "Lars Magne Ingebrigtsen" . "larsi@gnus.org"))])
- (svg-clock .
- [(1 2)
- ((svg
- (1 0))
- (emacs
- (27 0)))
- "Analog clock using Scalable Vector Graphics" single
- ((:url . "http://elpa.gnu.org/packages/svg-clock.html")
- (:keywords "demo" "svg" "clock")
- (:authors
- ("Ulf Jasper" . "ulf.jasper@web.de"))
- (:maintainer "Ulf Jasper" . "ulf.jasper@web.de"))])
- (svg-lib .
- [(0 2 6)
- ((emacs
- (27 1)))
- "SVG tags, progress bars & icons" tar
- ((:url . "https://github.com/rougier/svg-lib")
- (:keywords "svg" "icons" "tags" "convenience")
- (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")
- (:commit . "5ba4e4ea2b5c66e8811beb53251dee13685b2cb2"))])
- (svg-tag-mode .
- [(0 3 2)
- ((emacs
- (27 1))
- (svg-lib
- (0 2)))
- "Replace keywords with SVG tags" tar
- ((:url . "https://github.com/rougier/svg-tag-mode")
- (:keywords "convenience")
- (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")
- (:authors
- ("Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")))])
- (swiper .
- [(0 14 0)
- ((emacs
- (24 5))
- (ivy
- (0 14 0)))
- "Isearch with an overview. Oh, man!" tar
- ((:url . "https://github.com/abo-abo/swiper")
- (:keywords "matching")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:commit . "4129750ab368c8bfd1ef2ad3df6ea11d79ad06b4"))])
- (switchy-window .
- [(1 3)
- ((emacs
- (25 1))
- (compat
- (29 1 4 1)))
- "A most-recently-used window switcher" tar
- ((:url . "https://sr.ht/~tsdh/switchy-window/")
- (:keywords "windows")
- (:maintainer "Tassilo Horn" . "tsdh@gnu.org")
- (:authors
- ("Tassilo Horn" . "tsdh@gnu.org"))
- (:commit . "c743c47b7b4326c411470ba98410b7bfe3685edc"))])
- (sxhkdrc-mode .
- [(1 0 0)
- ((emacs
- (27 1)))
- "Major mode for sxhkdrc files (Simple X Hot Key Daemon)" tar
- ((:url . "https://git.sr.ht/~protesilaos/sxhkdrc-mode")
- (:maintainer "Protesilaos Stavrou General Issues" . "~protesilaos/general-issues@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com"))
- (:commit . "112970f8d2355c0cfa0269bb92cd1ecc18790bc9"))])
- (system-packages .
- [(1 0 11)
- ((emacs
- (24 3)))
- "functions to manage system packages" tar
- ((:url . "https://gitlab.com/jabranham/system-packages")
- (:maintainer "J. Alexander Branham" . "alex.branham@gmail.com")
- (:authors
- ("J. Alexander Branham" . "alex.branham@gmail.com")))])
- (tNFA .
- [(0 1 1)
- ((queue
- (0 1)))
- "Tagged non-deterministic finite-state automata" single
- ((:keywords "extensions" "matching" "data structures tnfa" "nfa" "dfa" "finite state automata" "automata" "regexp")
- (:authors
- ("Toby Cubitt" . "toby-predictive@dr-qubit.org"))
- (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org")
- (:url . "http://www.dr-qubit.org/emacs.php"))])
- (taxy .
- [(0 10 1)
- ((emacs
- (26 3)))
- "Programmable taxonomical grouping for arbitrary objects" tar
- ((:url . "https://github.com/alphapapa/taxy.el")
- (:keywords "lisp")
- (:maintainer "Adam Porter" . "adam@alphapapa.net")
- (:authors
- ("Adam Porter" . "adam@alphapapa.net"))
- (:commit . "b27fa67ecf3f8954ce0d5c2747d1de4dc94ff09f"))])
- (taxy-magit-section .
- [(0 12 2)
- ((emacs
- (26 3))
- (magit-section
- (3 2 1))
- (taxy
- (0 10)))
- "View Taxy structs in a Magit Section buffer" tar
- ((:url . "https://github.com/alphapapa/taxy.el")
- (:keywords "lisp")
- (:maintainer "Adam Porter" . "adam@alphapapa.net")
- (:authors
- ("Adam Porter" . "adam@alphapapa.net"))
- (:commit . "594531569c03206cbc83b74d679ffd0e93edb4d0"))])
- (temp-buffer-browse .
- [(1 5)
- ((emacs
- (24)))
- "temp buffer browse mode" single
- ((:url . "http://elpa.gnu.org/packages/temp-buffer-browse.html")
- (:keywords "convenience")
- (:authors
- ("Leo Liu" . "sdl.web@gmail.com"))
- (:maintainer "Leo Liu" . "sdl.web@gmail.com"))])
- (tempel .
- [(0 7)
- ((emacs
- (27 1))
- (compat
- (29 1 3 4)))
- "Tempo templates/snippets with in-buffer field editing" tar
- ((:url . "https://github.com/minad/tempel")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "66e4763087f3e851956b9a77a00527b440737d03"))])
- (test-simple .
- [(1 3 0)
- ((cl-lib
- (0)))
- "Simple Unit Test Framework for Emacs Lisp" single
- ((:keywords "unit-test")
- (:authors
- ("Rocky Bernstein" . "rocky@gnu.org"))
- (:maintainer "Rocky Bernstein" . "rocky@gnu.org")
- (:url . "http://github.com/rocky/emacs-test-simple"))])
- (timerfunctions .
- [(1 4 2)
- ((cl-lib
- (0 5))
- (emacs
- (24)))
- "Enhanced versions of some timer.el functions" single
- ((:url . "http://elpa.gnu.org/packages/timerfunctions.html")
- (:authors
- ("Dave Goel" . "deego3@gmail.com"))
- (:maintainer "Dave Goel" . "deego3@gmail.com"))])
- (tiny .
- [(0 2 1)
- nil "Quickly generate linear ranges in Emacs" tar
- ((:url . "https://github.com/abo-abo/tiny")
- (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com")
- (:authors
- ("Oleh Krehel" . "ohwoeowho@gmail.com"))
- (:keywords "convenience"))])
- (tmr .
- [(0 4 0)
- ((emacs
- (27 1)))
- "Set timers using a convenient notation" tar
- ((:url . "https://git.sr.ht/~protesilaos/tmr")
- (:keywords "convenience" "timer")
- (:maintainer "TMR Development" . "~protesilaos/tmr@lists.sr.ht")
- (:authors
- ("Protesilaos Stavrou" . "info@protesilaos.com")
- ("Damien Cassou" . "damien@cassou.me")
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "0d6ce6979c980f0d61c61d1f6478f805612315b4"))])
- (tomelr .
- [(0 4 3)
- ((emacs
- (26 3))
- (map
- (3 2 1))
- (seq
- (2 23)))
- "Convert S-expressions to TOML" tar
- ((:url . "https://github.com/kaushalmodi/tomelr/")
- (:keywords "data" "tools" "toml" "serialization" "config")
- (:maintainer "Kaushal Modi" . "kaushal.modi@gmail.com")
- (:authors
- ("Kaushal Modi" . "kaushal.modi@gmail.com"))
- (:commit . "670e0a08f625175fd80137cf69e799619bf8a381"))])
- (topspace .
- [(0 3 1)
- ((emacs
- (25 1)))
- "Recenter line 1 with scrollable upper margin/padding" tar
- ((:url . "https://github.com/trevorpogue/topspace")
- (:keywords "convenience" "scrolling" "center" "cursor" "margin" "padding")
- (:maintainer "Trevor Edwin Pogue" . "trevor.pogue@gmail.com")
- (:authors
- ("Trevor Edwin Pogue" . "trevor.pogue@gmail.com"))
- (:commit . "33c2a6f0a11d1d88cdb2065c5a897e33507f4c86"))])
- (tramp .
- [(2 6 0 4)
- ((emacs
- (26 1)))
- "Transparent Remote Access, Multiple Protocol" tar
- ((:url . "https://www.gnu.org/software/tramp/")
- (:keywords "comm" "processes")
- (:maintainer "Michael Albinus" . "michael.albinus@gmx.de")
- (:authors
- ("Kai Großjohann" . "kai.grossjohann@gmx.net"))
- (:commit . "9f4a6ac09014318bc6283438574a411a034ff1a3"))])
- (tramp-nspawn .
- [(1 0 1)
- ((emacs
- (23)))
- "Tramp integration for systemd-nspawn containers" tar
- ((:url . "https://github.com/bjc/tramp-nspawn")
- (:keywords "tramp" "nspawn" "machinectl" "systemd" "systemd-nspawn")
- (:maintainer "Brian Cully" . "bjc@kublai.com")
- (:authors
- ("Brian Cully" . "bjc@kublai.com"))
- (:commit . "c35ade49754e051c84eaa2733447b4307968f200"))])
- (tramp-theme .
- [(0 2)
- ((emacs
- (24 1)))
- "Custom theme for remote buffers" single
- ((:url . "http://elpa.gnu.org/packages/tramp-theme.html")
- (:keywords "convenience" "faces")
- (:authors
- ("Michael Albinus" . "michael.albinus@gmx.de"))
- (:maintainer "Michael Albinus" . "michael.albinus@gmx.de"))])
- (transcribe .
- [(1 5 2)
- nil "Package for audio transcriptions" single
- ((:url . "http://elpa.gnu.org/packages/transcribe.html")
- (:authors
- ("David Gonzalez Gandara" . "dggandara@member.fsf.org"))
- (:maintainer "David Gonzalez Gandara" . "dggandara@member.fsf.org"))])
- (transient .
- [(0 3 7)
- ((emacs
- (25 1)))
- "Transient commands" tar
- ((:url . "https://github.com/magit/transient")
- (:keywords "bindings")
- (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li")
- (:authors
- ("Jonas Bernoulli" . "jonas@bernoul.li")))])
- (transient-cycles .
- [(1 0)
- ((emacs
- (27 1)))
- "Define command variants with transient cycling" tar
- ((:url . "https://git.spwhitton.name/dotfiles/tree/.emacs.d/site-lisp/transient-cycles.el")
- (:keywords "buffer" "window" "minor-mode" "convenience")
- (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name")
- (:authors
- ("Sean Whitton" . "spwhitton@spwhitton.name"))
- (:commit . "a5b86dd04e84e7ff1cf8c4062843fccb92991145"))])
- (tree-inspector .
- [(0 3)
- ((emacs
- (27 1))
- (treeview
- (1 1 0)))
- "Inspector tool for Emacs Lisp object that uses a treeview" tar
- ((:url . "https://github.com/mmontone/emacs-inspector")
- (:keywords "debugging" "tool" "lisp" "development")
- (:maintainer "Mariano Montone" . "marianomontone@gmail.com")
- (:authors
- ("Mariano Montone" . "marianomontone@gmail.com"))
- (:commit . "e76898353a16d0d7a53c76e3d9c44f989f439fc8"))])
- (trie .
- [(0 5)
- ((tNFA
- (0 1 1))
- (heap
- (0 3)))
- "Trie data structure" tar
- ((:url . "http://www.dr-qubit.org/emacs.php")
- (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org")
- (:authors
- ("Toby Cubitt" . "toby-predictive@dr-qubit.org"))
- (:keywords "extensions" "matching" "data structures trie" "ternary search tree" "tree" "completion" "regexp"))])
- (triples .
- [(0 2 7)
- ((seq
- (2 0))
- (emacs
- (28 1)))
- "A flexible triple-based database for use in apps" tar
- ((:url . "https://github.com/ahyatt/triples")
- (:keywords "triples" "kg" "data" "sqlite")
- (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com")
- (:authors
- ("Andrew Hyatt" . "ahyatt@gmail.com"))
- (:commit . "e4caebe696695be94a7d2c36a610990d61fed3ba"))])
- (typo .
- [(1 0 1)
- ((emacs
- (27 1)))
- "Completion style using typo analysis" tar
- ((:url . "https://git.sr.ht/~pkal/typo/")
- (:keywords "convenience")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "281c9049c1d08cf11c8a1957ea99e5c58795ed3c"))])
- (undo-tree .
- [(0 8 2)
- ((queue
- (0 2))
- (emacs
- (24 3)))
- "Treat undo history as a tree" tar
- ((:url . "https://www.dr-qubit.org/undo-tree.html")
- (:keywords "convenience" "files" "undo" "redo" "history" "tree")
- (:maintainer "Toby Cubitt" . "toby+undo-tree@dr-qubit.org")
- (:authors
- ("Toby Cubitt" . "toby+undo-tree@dr-qubit.org"))
- (:commit . "42aab056e37e033816b2d192f9121b89410b958e"))])
- (uni-confusables .
- [(0 3)
- nil "Unicode confusables table" tar
- ((:maintainer "Teodor Zlatanov" . "tzz@lifelogs.com")
- (:url . "https://elpa.gnu.org/packages/uni-confusables.html")
- (:commit . "393e1adeec5b0eb51f9606983655cfe2272c6e54"))])
- (uniquify-files .
- [(1 0 4)
- ((emacs
- (25 0)))
- "Completion style for files, minimizing directories" tar
- ((:keywords "completion" "table" "uniquify")
- (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@stephe-leake.org"))
- (:url . "https://elpa.gnu.org/packages/uniquify-files.html")
- (:commit . "1d76b4f0e283afaff2be053d85f8726ffc3abd6e"))])
- (url-http-ntlm .
- [(2 0 4)
- ((cl-lib
- (0 5))
- (ntlm
- (2 1 0)))
- "NTLM authentication for the url library" single
- ((:keywords "comm" "data" "processes" "hypermedia")
- (:authors
- ("Tom Schutzer-Weissmann" . "tom.weissmann@gmail.com"))
- (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org")
- (:url . "https://code.google.com/p/url-http-ntlm/"))])
- (url-scgi .
- [(0 9)
- ((emacs
- (24 3)))
- "SCGI support for url.el" tar
- ((:url . "https://github.com/skangas/url-scgi/")
- (:keywords "comm" "data" "processes" "scgi")
- (:maintainer "Stefan Kangas" . "stefankangas@gmail.com")
- (:authors
- ("Stefan Kangas" . "stefankangas@gmail.com"))
- (:commit . "ccf30c3647cd6a560cadc795bd92769c0a0c9de9"))])
- (use-package .
- [(2 4 5)
- ((emacs
- (24 3))
- (bind-key
- (2 4)))
- "A configuration macro for simplifying your .emacs" tar
- ((:url . "https://github.com/jwiegley/use-package")
- (:keywords "dotemacs" "startup" "speed" "config" "package" "extensions")
- (:maintainer "John Wiegley" . "johnw@newartisans.com")
- (:authors
- ("John Wiegley" . "johnw@newartisans.com"))
- (:commit . "c8d548097278683c94eced742a1a1bea387ced2d"))])
- (validate .
- [(1 0 4)
- ((emacs
- (24 1))
- (cl-lib
- (0 5))
- (seq
- (2 16)))
- "Schema validation for Emacs-lisp" single
- ((:url . "http://elpa.gnu.org/packages/validate.html")
- (:keywords "lisp")
- (:authors
- ("Artur Malabarba" . "emacs@endlessparentheses.com"))
- (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))])
- (valign .
- [(3 1 1)
- ((emacs
- (26 0)))
- "Visually align tables" tar
- ((:url . "https://github.com/casouri/valign")
- (:maintainer "Yuan Fu" . "casouri@gmail.com")
- (:authors
- ("Yuan Fu" . "casouri@gmail.com"))
- (:keywords "convenience" "text" "table"))])
- (vc-backup .
- [(1 1 0)
- nil "VC backend for versioned backups" tar
- ((:url . "https://git.sr.ht/~pkal/vc-backup")
- (:keywords "vc")
- (:maintainer "Philip Kaludercic" . "philipk@posteo.net")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net")))])
- (vc-got .
- [(1 2)
- ((emacs
- (25 1)))
- "VC backend for Game of Trees VCS" tar
- ((:url . "https://projects.omarpolo.com/vc-got.html")
- (:keywords "vc" "tools")
- (:maintainer "Omar Polo" . "op@omarpolo.com")
- (:authors
- ("Omar Polo" . "op@omarpolo.com")
- ("Timo Myyrä" . "timo.myyra@bittivirhe.fi"))
- (:commit . "bc158324418fd8bef96a7f62856679de2569030f"))])
- (vc-hgcmd .
- [(1 14 1)
- ((emacs
- (25 1)))
- "VC mercurial backend that uses hg command server" tar
- ((:url . "https://github.com/muffinmad/emacs-vc-hgcmd")
- (:keywords "vc")
- (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com")
- (:authors
- ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")))])
- (vcard .
- [(0 2 2)
- ((emacs
- (27 1)))
- "Package for handling vCard files" tar
- ((:keywords "vcard" "mail" "news")
- (:maintainer "Noah Friedman <friedman@splode.com>, Eric Abrahamsen" . "eric@ericabrahamsen.net")
- (:authors
- ("Noah Friedman" . "friedman@splode.com"))
- (:url . "https://elpa.gnu.org/packages/vcard.html")
- (:commit . "28b88fd8ed53ca12d9499175217af81f5ea161fc"))])
- (vcl-mode .
- [(1 1)
- nil "Major mode for Varnish Configuration Language" single
- ((:url . "http://elpa.gnu.org/packages/vcl-mode.html")
- (:keywords "varnish" "vcl")
- (:authors
- ("Sergey Poznyakoff" . "gray@gnu.org.ua"))
- (:maintainer "Sergey Poznyakoff" . "gray@gnu.org.ua"))])
- (vdiff .
- [(0 2 4)
- ((emacs
- (24 4))
- (hydra
- (0 13 0)))
- "A diff tool similar to vimdiff" tar
- ((:url . "https://github.com/justbur/emacs-vdiff")
- (:maintainer "Justin Burkett" . "justin@burkett.cc")
- (:authors
- ("Justin Burkett" . "justin@burkett.cc"))
- (:keywords "diff"))])
- (verilog-mode .
- [(2022 12 18 181110314)
- nil "major mode for editing verilog source in Emacs" tar
- ((:url . "https://www.veripool.org")
- (:keywords "languages")
- (:maintainer "Michael McNamara" . "mac@verilog.com")
- (:authors
- ("Michael McNamara" . "mac@verilog.com")
- ("Wilson Snyder" . "wsnyder@wsnyder.org"))
- (:commit . "2c2ecb46b0ad3e841ac9551e3a80d02893cdf6ec"))])
- (vertico .
- [(1 3)
- ((emacs
- (27 1))
- (compat
- (29 1 4 0)))
- "VERTical Interactive COmpletion" tar
- ((:url . "https://github.com/minad/vertico")
- (:keywords "convenience" "files" "matching" "completion")
- (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de")
- (:authors
- ("Daniel Mendler" . "mail@daniel-mendler.de"))
- (:commit . "5aeff1e3464dbede5d3969fff088191c1a6d84a3"))])
- (vertico-posframe .
- [(0 7 2)
- ((emacs
- (26 0))
- (posframe
- (1 4 0))
- (vertico
- (1 1)))
- "Using posframe to show Vertico" tar
- ((:url . "https://github.com/tumashu/vertico-posframe")
- (:keywords "abbrev" "convenience" "matching" "vertico")
- (:maintainer "Feng Shu" . "tumashu@163.com")
- (:authors
- ("Feng Shu" . "tumashu@163.com"))
- (:commit . "36123af44b28f77c0c4179aefff3afcf0e169160"))])
- (vigenere .
- [(1 0)
- ((emacs
- (25 1)))
- "Run a vigenere cipher on a block of text ;" single
- ((:keywords "data" "vigenere" "cipher")
- (:authors
- ("Ian Dunn" . "dunni@gnu.org"))
- (:maintainer "Ian Dunn" . "dunni@gnu.org")
- (:url . "https://elpa.gnu.org/packages/vigenere.html"))])
- (visual-filename-abbrev .
- [(1 2)
- ((emacs
- (26 1)))
- "Visually abbreviate filenames" tar
- ((:keywords "tools")
- (:maintainer "Tassilo Horn" . "tsdh@gnu.org")
- (:authors
- ("Tassilo Horn" . "tsdh@gnu.org"))
- (:url . "https://elpa.gnu.org/packages/visual-filename-abbrev.html")
- (:commit . "3c1a54e2cec935126a74e40920f2cb7929fa4e75"))])
- (visual-fill .
- [(0 1)
- nil "Auto-refill paragraphs without modifying the buffer" single
- ((:url . "http://elpa.gnu.org/packages/visual-fill.html")
- (:authors
- ("Stefan Monnier" . "monnier@iro.umontreal.ca"))
- (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))])
- (vlf .
- [(1 7 2)
- nil "View Large Files" tar
- ((:url . "https://github.com/m00natic/vlfi")
- (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com")
- (:keywords "large files" "utilities"))])
- (vundo .
- [(2 0 0)
- ((emacs
- (28 1)))
- "Visual undo tree" tar
- ((:url . "https://github.com/casouri/vundo")
- (:keywords "undo" "text" "editing")
- (:maintainer "Yuan Fu" . "casouri@gmail.com")
- (:authors
- ("Yuan Fu" . "casouri@gmail.com"))
- (:commit . "10d5debe317b2244d19085151040f955dda4a9ab"))])
- (wcheck-mode .
- [(2021)
- nil "General interface for text checkers" tar
- ((:url . "https://github.com/tlikonen/wcheck-mode")
- (:keywords "text" "spell" "check" "languages" "ispell")
- (:maintainer "Teemu Likonen" . "tlikonen@iki.fi")
- (:authors
- ("Teemu Likonen" . "tlikonen@iki.fi")))])
- (wconf .
- [(0 2 1)
- ((emacs
- (24 4)))
- "Minimal window layout manager" single
- ((:keywords "windows" "frames" "layout")
- (:authors
- ("Ingo Lohmar" . "i.lohmar@gmail.com"))
- (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com")
- (:url . "https://github.com/ilohmar/wconf"))])
- (web-server .
- [(0 1 2)
- ((emacs
- (24 3)))
- "Emacs Web Server" tar
- ((:url . "https://github.com/eschulte/emacs-web-server")
- (:maintainer "Eric Schulte" . "schulte.eric@gmail.com")
- (:authors
- ("Eric Schulte" . "schulte.eric@gmail.com"))
- (:keywords "http" "server" "network"))])
- (webfeeder .
- [(1 1 2)
- ((emacs
- (25 1)))
- "Build RSS and Atom webfeeds from HTML files" tar
- ((:url . "https://gitlab.com/Ambrevar/emacs-webfeeder")
- (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz")
- (:authors
- ("Pierre Neidhardt" . "mail@ambrevar.xyz"))
- (:keywords "news" "hypermedia" "blog" "feed" "rss" "atom"))])
- (websocket .
- [(1 14)
- ((cl-lib
- (0 5)))
- "Emacs WebSocket client and server" tar
- ((:url . "https://github.com/ahyatt/emacs-websocket")
- (:keywords "communication" "websocket" "server")
- (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com")
- (:authors
- ("Andrew Hyatt" . "ahyatt@gmail.com"))
- (:commit . "1f086f14f0f55f55eafd09f404f48e924157c1d1"))])
- (which-key .
- [(3 6 0)
- ((emacs
- (24 4)))
- "Display available keybindings in popup" tar
- ((:url . "https://github.com/justbur/emacs-which-key")
- (:maintainer "Justin Burkett" . "justin@burkett.cc")
- (:authors
- ("Justin Burkett" . "justin@burkett.cc"))
- (:commit . "1217db8c6356659e67b35dedd9f5f260c06f6e99"))])
- (windower .
- [(0 0 1)
- ((emacs
- (25)))
- "Helper functions for window manipulation." single
- ((:keywords "convenience" "tools")
- (:authors
- ("Pierre Neidhardt" . "mail@ambrevar.xyz"))
- (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz")
- (:url . "https://gitlab.com/ambrevar/windower"))])
- (windresize .
- [(0 1)
- nil "Resize windows interactively" single
- ((:url . "http://elpa.gnu.org/packages/windresize.html")
- (:keywords "window")
- (:authors
- ("Bastien" . "bzg@gnu.org"))
- (:maintainer "Bastien" . "bzg@gnu.org"))])
- (wisi .
- [(4 2 2)
- ((emacs
- (25 3))
- (seq
- (2 20)))
- "Utilities for implementing an indentation/navigation engine using a generalized LR parser" tar
- ((:url . "https://stephe-leake.org/ada/wisitoken.html")
- (:keywords "parser" "indentation" "navigation")
- (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@stephe-leake.org"))
- (:commit . "a12d5248783d9c98d46c66c8fd3607fceb47b36d"))])
- (wisitoken-grammar-mode .
- [(1 3 0)
- ((wisi
- (4 2 2))
- (emacs
- (25 3))
- (mmm-mode
- (0 5 7)))
- "Major mode for editing WisiToken grammar files" tar
- ((:url . "https://www.nongnu.org/ada-mode/")
- (:keywords "languages")
- (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org")
- (:authors
- ("Stephen Leake" . "stephen_leake@stephe-leake.org"))
- (:commit . "2d58879cea26b8a3b573d084d149dea94f93dfb8"))])
- (wpuzzle .
- [(1 1)
- nil "find as many word in a given time" single
- ((:url . "http://elpa.gnu.org/packages/wpuzzle.html")
- (:authors
- ("Ivan Kanis" . "ivan@kanis.fr"))
- (:maintainer "Ivan Kanis" . "ivan@kanis.fr"))])
- (xclip .
- [(1 11)
- nil "Copy&paste GUI clipboard from text terminal" tar
- ((:keywords "convenience" "tools")
- (:maintainer "Leo Liu" . "sdl.web@gmail.com")
- (:authors
- ("Leo Liu" . "sdl.web@gmail.com"))
- (:url . "https://elpa.gnu.org/packages/xclip.html")
- (:commit . "5b54645cab438e133e27b4690c57066f8271a992"))])
- (xeft .
- [(3 3)
- ((emacs
- (26 0)))
- "Deft feat. Xapian" tar
- ((:url . "https://sr.ht/~casouri/xeft")
- (:keywords "applications" "note" "searching")
- (:maintainer "Yuan Fu" . "casouri@gmail.com")
- (:authors
- ("Yuan Fu" . "casouri@gmail.com"))
- (:commit . "ea4fa859c1129243b15f259a10e67ea274c5ef63"))])
- (xelb .
- [(0 18)
- ((emacs
- (24 4))
- (cl-generic
- (0 2)))
- "X protocol Emacs Lisp Binding" tar
- ((:url . "https://github.com/ch11ng/xelb")
- (:maintainer "Chris Feng" . "chris.w.feng@gmail.com")
- (:authors
- ("Chris Feng" . "chris.w.feng@gmail.com"))
- (:keywords "unix"))])
- (xpm .
- [(1 0 5)
- ((cl-lib
- (0 5))
- (queue
- (0 2)))
- "edit XPM images" tar
- ((:url . "https://www.gnuvola.org/software/xpm/")
- (:keywords "multimedia" "xpm")
- (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org")
- (:authors
- ("Thien-Thi Nguyen" . "ttn@gnu.org")))])
- (xr .
- [(1 23)
- ((emacs
- (26 1)))
- "Convert string regexp to rx notation" tar
- ((:url . "https://github.com/mattiase/xr")
- (:keywords "lisp" "regexps")
- (:maintainer "Mattias Engdegård" . "mattiase@acm.org")
- (:authors
- ("Mattias Engdegård" . "mattiase@acm.org"))
- (:commit . "74906f6d104b7daae162dc32684e0443e80fdb03"))])
- (xref .
- [(1 6 3)
- ((emacs
- (26 1)))
- "Cross-referencing commands" tar
- ((:url . "https://elpa.gnu.org/packages/xref.html")
- (:commit . "4b6f2a7028b91128934a19f83572f24106782225"))])
- (xref-union .
- [(0 1 1)
- ((emacs
- (25 1)))
- "Combine multiple Xref backends" tar
- ((:url . "https://git.sr.ht/~pkal/xref-union/")
- (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")
- (:authors
- ("Philip Kaludercic" . "philipk@posteo.net"))
- (:commit . "0f98bea5948cee35aa9070b631bc0188159d5b3d"))])
- (yasnippet .
- [(0 14 0)
- ((cl-lib
- (0 5)))
- "Yet another snippet extension for Emacs" tar
- ((:url . "http://github.com/joaotavora/yasnippet")
- (:maintainer "Noam Postavsky" . "npostavs@gmail.com")
- (:keywords "convenience" "emulation"))])
- (yasnippet-classic-snippets .
- [(1 0 2)
- ((yasnippet
- (0 9 1)))
- "\"Classic\" yasnippet snippets" tar
- ((:maintainer "Noam Postavsky" . "npostavs@gmail.com")
- (:keywords "snippets")
- (:url . "http://elpa.gnu.org/packages/yasnippet-classic-snippets.html"))])
- (zones .
- [(2019 7 13)
- nil "Zones of text - like multiple regions" single
- ((:keywords "narrow" "restriction" "widen" "region" "zone")
- (:authors
- ("Drew Adams"))
- (:maintainer "Drew Adams" . "drew.adams@oracle.com")
- (:url . "https://elpa.gnu.org/packages/zones.html"))])
- (ztree .
- [(1 0 6)
- ((cl-lib
- (0)))
- "Text mode directory tree" tar
- ((:url . "https://github.com/fourier/ztree")
- (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com")
- (:authors
- ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com"))
- (:keywords "files" "tools"))])
- (zuul .
- [(0 4 0)
- ((emacs
- (27 1))
- (project
- (0 8 1)))
- "Interface to Zuul" tar
- ((:url . "https://sr.ht/~niklaseklund/zuul.el")
- (:keywords "convenience" "tools")
- (:maintainer "zuul.el Development" . "~niklaseklund/zuul.el@lists.sr.ht")
- (:authors
- ("Niklas Eklund" . "niklas.eklund@posteo.net"))
- (:commit . "c94886cb7abdea66ba1d0a064a4d93efed10fed4"))]))
diff --git a/emacs.d/elpa/archives/gnu/archive-contents.signed b/emacs.d/elpa/archives/gnu/archive-contents.signed
deleted file mode 100644
index ef4354c..0000000
--- a/emacs.d/elpa/archives/gnu/archive-contents.signed
+++ /dev/null
@@ -1 +0,0 @@
-Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2023-05-07T12:05:05+0300 using RSA \ No newline at end of file
diff --git a/emacs.d/elpa/archives/melpa/archive-contents b/emacs.d/elpa/archives/melpa/archive-contents
deleted file mode 100644
index 1caf5a7..0000000
--- a/emacs.d/elpa/archives/melpa/archive-contents
+++ /dev/null
@@ -1,5450 +0,0 @@
-(1
- (0blayout . [(20190703 527) nil "Layout grouping with ease" single ((:commit . "fd9a8f353dbd45b4628b5f84b8d8c2525ebf571d") (:authors ("Elis \"etu\" Axelsson")) (:maintainers ("Elis \"etu\" Axelsson")) (:maintainer "Elis \"etu\" Axelsson") (:keywords "convenience" "window-management") (:url . "https://github.com/etu/0blayout"))])
- (0x0 . [(20210701 839) ((emacs (26 1))) "Upload sharing to 0x0.st" single ((:commit . "ad9f84e6d39c620da381313b160667864a702fd6") (:authors ("William Vaughn <https://gitlab.com/willvaughn>")) (:maintainers ("William Vaughn" . "vaughnwilld@gmail.com")) (:maintainer "William Vaughn" . "vaughnwilld@gmail.com") (:url . "https://gitlab.com/willvaughn/emacs-0x0"))])
- (0xc . [(20201025 2105) ((emacs (24 4)) (s (1 11 0))) "Base conversion made easy" tar ((:commit . "5bd6c0c901d03d1f24a3ddcf3a62d3b6d2428c80") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:keywords "base" "conversion") (:url . "http://github.com/AdamNiederer/0xc"))])
- (2048-game . [(20200417 259) nil "play 2048 in Emacs" single ((:commit . "aad4a590ea91f9a3256233b9b345e9159c6993f2") (:authors ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainers ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainer "Zachary Kanfer" . "zkanfer@gmail.com") (:url . "https://hg.sr.ht/~zck/game-2048"))])
- (2bit . [(20200926 1418) ((emacs (24 3))) "Library for reading data from 2bit files" single ((:commit . "69b4ec1d6d2ad95c9e59dacb43224abbec7a8989") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "files" "data") (:url . "https://github.com/davep/2bit.el"))])
- (4clojure . [(20210102 459) ((request (0 2 0))) "Open and evaluate 4clojure.com questions." single ((:commit . "6f494d3905284ccdd57aae3d8ac16fc7ab431596") (:authors ("Joshua Hoff")) (:maintainers ("Sasha Kovar" . "sasha-git@arcocene.org")) (:maintainer "Sasha Kovar" . "sasha-git@arcocene.org") (:keywords "languages" "data") (:url . "https://github.com/abend/4clojure.el"))])
- (750words . [(20220625 1407) ((emacs (24 4))) "Emacs integration and Org exporter for 750words.com" single ((:commit . "43eee19428fc8f5a133192398510d7313eb33d97") (:authors ("Diego Zamboni <https://github.com/zzamboni>")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org") (:keywords "files" "org" "writing") (:url . "https://github.com/zzamboni/750words-client"))])
- (@ . [(20181225 1438) ((emacs (24 3))) "multiple-inheritance prototype-based objects DSL" tar ((:commit . "0a6189f8be42dbbc5d9358cbd447d471236135a2") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/at-el"))])
- (a . [(20210929 1510) ((emacs (25))) "Associative data structure functions" single ((:commit . "9ad2d18252b729174fe22ed0b2b7670c88f60c31") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:keywords "lisp") (:url . "https://github.com/plexus/a.el"))])
- (aa-edit-mode . [(20170119 320) ((emacs (24 3)) (navi2ch (2 0 0))) "Major mode for editing AA(S_JIS Art) and .mlt file" single ((:commit . "1dd801225b7ad3c23ad09698f5e77f0df7012a65") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "wp" "text" "shiftjis" "mlt" "yaruo"))])
- (aas . [(20230303 2214) ((emacs (26 3))) "Snippet expansions mid-typing" single ((:commit . "ddc2b7a58a2234477006af348b30e970f73bc2c1") (:authors ("Yoav Marco" . "yoavm448@gmail.com")) (:maintainers ("Yoav Marco" . "yoavm448@gmail.com")) (:maintainer "Yoav Marco" . "yoavm448@gmail.com") (:keywords "abbrev" "tools") (:url . "https://github.com/ymarco/auto-activating-snippets"))])
- (abc-mode . [(20220713 1359) nil "Major mode for editing abc music files" single ((:commit . "45193b67508861cf77da7e76b71711855c002caa") (:authors ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainers ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainer "Matthew K. Junker" . "junker@alum.mit.edu") (:keywords "local" "docs"))])
- (abgaben . [(20171119 646) ((pdf-tools (0 80)) (f (0 19 0)) (s (1 11 0))) "review and correct assignments received by mail" single ((:commit . "966bfcfdd3b2e288576ffe363d676ad282902090") (:authors ("Arne Köhn" . "arne@chark.eu")) (:maintainers ("Arne Köhn" . "arne@chark.eu")) (:maintainer "Arne Köhn" . "arne@chark.eu") (:keywords "mail" "outlines" "convenience") (:url . "http://arne.chark.eu/"))])
- (abl-mode . [(20210923 950) nil "Python TDD minor mode" single ((:commit . "7f692cf9bb263b26fda51bb56a58f6ac61febe3b") (:authors ("Ulas Tuerkmen <ulas.tuerkmen at gmail dot com>")) (:maintainers ("Ulas Tuerkmen <ulas.tuerkmen at gmail dot com>")) (:maintainer "Ulas Tuerkmen <ulas.tuerkmen at gmail dot com>") (:url . "http://github.com/afroisalreadyinu/abl-mode"))])
- (abridge-diff . [(20230307 2159) ((emacs (26 1))) "Abridge long line-based diff hunks, including in magit" single ((:commit . "31e0ccaa9d0bd4ad257f5de25cc3c0b3395fafa1") (:authors ("J.D. Smith <jdtsmith AT gmail>")) (:maintainers ("J.D. Smith <jdtsmith AT gmail>")) (:maintainer "J.D. Smith <jdtsmith AT gmail>") (:keywords "magit" "diffs" "tools") (:url . "https://github.com/jdtsmith/abridge-diff"))])
- (abs-mode . [(20230419 1429) ((emacs (26 1)) (erlang (2 8)) (maude-mode (0 3)) (flymake (1 0)) (yasnippet (0 14 0))) "Major mode for the modeling language Abs" tar ((:commit . "ce3bab5a6b2ec22810a20a6bd8aa2c014a5938a1") (:authors ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainers ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at") (:keywords "languages") (:url . "https://github.com/abstools/abs-mode"))])
- (abyss-theme . [(20170808 1345) ((emacs (24))) "A dark theme with contrasting colours." single ((:commit . "18791c6e8d9cc2b4815c9f08627a2e94fc0eeb14") (:authors ("Matt Russell" . "matt@mgrbyte.co.uk")) (:maintainers ("Matt Russell" . "matt@mgrbyte.co.uk")) (:maintainer "Matt Russell" . "matt@mgrbyte.co.uk") (:keywords "theme" "dark" "contrasting colours") (:url . "https://github.com/mgrbyte/emacs-abyss-theme"))])
- (ac-alchemist . [(20150908 656) ((auto-complete (1 5 0)) (alchemist (1 5 0)) (cl-lib (0 5))) "auto-complete source for alchemist" single ((:commit . "b1891c3d41aed83f61d78a609ea97be5cc2758d9") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-alchemist"))])
- (ac-c-headers . [(20200816 1007) ((auto-complete (1 3 1))) "auto-complete source for C headers" single ((:commit . "67e1e86a48c9bed57bc7ce5ce2553ad203f5752e") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.gitub.io/"))])
- (ac-capf . [(20151101 217) ((auto-complete (1 4)) (cl-lib (0 5))) "auto-complete source with completion-at-point" single ((:commit . "17571dba0a8f98111f2ab758e9bea285b263781b") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-capf"))])
- (ac-cider . [(20161006 719) ((cider (0 8 0)) (auto-complete (1 4)) (cl-lib (0 3))) "Clojure auto-complete sources using CIDER" single ((:commit . "d8670939bbf88079263d5ace2b8bc04cf325be36") (:authors ("Alex Yakushev" . "alex@bytopia.org") ("Steve Purcell" . "steve@sanityinc.com") ("Sam Aaron" . "samaaron@gmail.com")) (:maintainers ("Alex Yakushev" . "alex@bytopia.org")) (:maintainer "Alex Yakushev" . "alex@bytopia.org") (:keywords "languages" "clojure" "nrepl" "cider" "compliment") (:url . "https://github.com/clojure-emacs/ac-cider"))])
- (ac-clang . [(20180710 546) ((emacs (24)) (cl-lib (0 5)) (auto-complete (1 4 0)) (pos-tip (0 4 6)) (yasnippet (0 8 0))) "Auto Completion source by libclang for GNU Emacs" tar ((:commit . "3294b968eb1a8317049190940193f9da47c085ef") (:authors ("yaruopooner [https://github.com/yaruopooner]")) (:maintainers ("yaruopooner [https://github.com/yaruopooner]")) (:maintainer "yaruopooner [https://github.com/yaruopooner]") (:keywords "completion" "convenience" "intellisense") (:url . "https://github.com/yaruopooner/ac-clang"))])
- (ac-dcd . [(20210428 1556) ((auto-complete (1 3 1)) (flycheck-dmd-dub (0 7))) "Auto Completion source for dcd for GNU Emacs" single ((:commit . "56d9817159acdebdbb3d5499c7e9379d29af0cd4") (:authors (nil . "<atila.neves@gmail.com>")) (:maintainers (nil . "<atila.neves@gmail.com>")) (:maintainer nil . "<atila.neves@gmail.com>") (:keywords "languages") (:url . "http://github.com/atilaneves/ac-dcd"))])
- (ac-emacs-eclim . [(20180911 1121) ((eclim (0 3)) (auto-complete (1 5))) "auto-complete source for eclim" single ((:commit . "edff7e0e30c87036710d88fb0b7a4644750858e8"))])
- (ac-emmet . [(20131015 1558) ((emmet-mode (1 0 2)) (auto-complete (1 4))) "auto-complete sources for emmet-mode's snippets" single ((:commit . "88f24876ee3b759978d4614a758280b5d512d543") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "completion" "convenience" "emmet") (:url . "https://github.com/yasuyk/ac-emmet"))])
- (ac-emoji . [(20150823 711) ((auto-complete (1 5 0)) (cl-lib (0 5))) "auto-complete source of Emoji" tar ((:commit . "53677f754929ead403ccde64b714ebb6b8fc808e") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-emoji"))])
- (ac-etags . [(20161001 1507) ((auto-complete (1 4))) "etags/ctags completion source for auto-complete" single ((:commit . "7983e631c226fe0fa53af3b2d56bf4eca3d785ce") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-etags"))])
- (ac-geiser . [(20200318 824) ((geiser (0 5)) (auto-complete (1 4))) "Auto-complete backend for geiser" tar ((:commit . "93818c936ee7e2f1ba1b315578bde363a7d43d05"))])
- (ac-haskell-process . [(20150423 1402) ((auto-complete (1 4)) (haskell-mode (13))) "Haskell auto-complete source which uses the current haskell process" single ((:commit . "0362d4323511107ec70e7165cb612f3ab01b712f") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages"))])
- (ac-helm . [(20160319 233) ((helm (1 6 3)) (auto-complete (1 4 0)) (popup (0 5 0)) (cl-lib (0 5))) "Helm interface for auto-complete" single ((:commit . "baf2b1e04bcffa835084389c0fab415f26efbf32") (:authors ("rubikitch" . "rubikitch@ruby-lang.org") ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "completion" "convenience" "helm"))])
- (ac-html . [(20151005 731) ((auto-complete (1 4)) (s (1 9)) (f (0 17)) (dash (2 10))) "auto complete source for html tags and attributes" tar ((:commit . "3de94a46d8cb93e8e62a1b6bdebbde4d65dc7cc2") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com") (:keywords "html" "auto-complete" "slim" "haml" "jade") (:url . "https://github.com/cheunghy/ac-html"))])
- (ac-html-angular . [(20151225 719) ((web-completion-data (0 1))) "auto complete angular15 data for `ac-html' and `company-web'" tar ((:commit . "6bafe09afe03112ca4183d58461c1a6f6c2b3c67") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com") (:keywords "html" "auto-complete" "angular") (:url . "https://github.com/osv/ac-html-bootstrap"))])
- (ac-html-bootstrap . [(20160302 1701) ((web-completion-data (0 1))) "auto complete bootstrap3/fontawesome classes for `ac-html' and `company-web'" tar ((:commit . "481e6e441cd566554ce71cd8cb28c9e7ebb1c24b") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com") (:keywords "html" "auto-complete" "bootstrap" "cssx") (:url . "https://github.com/osv/ac-html-bootstrap"))])
- (ac-html-csswatcher . [(20151208 2113) ((web-completion-data (0 1))) "css/less class/id completion with `ac-html' or `company-web'" single ((:commit . "b0f3e7e1a3fe49e88b6eb6432377232fc715f221") (:authors ("Olexandr Sydorchuck " . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuck " . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuck " . "olexandr.syd@gmail.com") (:keywords "html" "css" "less" "auto-complete") (:url . "https://github.com/osv/ac-html-csswatcher"))])
- (ac-inf-ruby . [(20131115 1150) ((inf-ruby (2 3 2)) (auto-complete (1 4))) "Enable auto-complete in inf-ruby sessions" single ((:commit . "094d86761088ab0b16ddac75cf57eeb9c2afbee2") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages" "tools"))])
- (ac-ispell . [(20151101 226) ((auto-complete (1 4)) (cl-lib (0 5))) "ispell completion source for auto-complete" single ((:commit . "7e054793fe77f5fa1ced59d97da9c31df9807c48") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-ispell"))])
- (ac-js2 . [(20190101 933) ((js2-mode (20090723)) (skewer-mode (1 4))) "Auto-complete source for Js2-mode, with navigation" tar ((:commit . "2b56d09a16c1a0ce514cc1b85d64cb1be4502723") (:authors ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainers ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainer "Scott Barnett" . "scott.n.barnett@gmail.com") (:url . "https://github.com/ScottyB/ac-js2"))])
- (ac-math . [(20141116 2127) ((auto-complete (1 4)) (math-symbol-lists (1 0))) "Auto-complete sources for input of mathematical symbols and latex tags" single ((:commit . "89478063dead68894f0d27687b63896633048c6f") (:authors ("Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "latex" "auto-complete" "unicode" "symbols") (:url . "https://github.com/vitoshka/ac-math"))])
- (ac-mozc . [(20150227 1619) ((cl-lib (0 5)) (auto-complete (1 4)) (mozc (0))) "auto-complete sources for Japanese input using Mozc" single ((:commit . "4c6c8be4701010d9362184437c0f783e0335c631") (:authors ("igjit" . "igjit1@gmail.com")) (:maintainers ("igjit" . "igjit1@gmail.com")) (:maintainer "igjit" . "igjit1@gmail.com") (:url . "https://github.com/igjit/ac-mozc"))])
- (ac-octave . [(20180406 334) ((auto-complete (1 4 0))) "An auto-complete source for Octave" single ((:commit . "fe0f931f2024f43de3c4fff4b1ace672413adeae") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:keywords "octave" "auto-complete" "completion") (:url . "https://github.com/coldnew/ac-octave"))])
- (ac-php . [(20210820 1000) ((ac-php-core (2 0)) (auto-complete (1 4 0)) (yasnippet (0 8 0))) "Auto Completion source for PHP." single ((:commit . "e29075f810af73f6bf7803eebf15d96bffee7154") (:authors ("jim" . "xcwenn@qq.com")) (:maintainers ("jim")) (:maintainer "jim") (:keywords "completion" "convenience" "intellisense") (:url . "https://github.com/xcwen/ac-php"))])
- (ac-php-core . [(20230224 1507) ((emacs (24 4)) (dash (1)) (php-mode (1)) (s (1)) (f (0 17 0)) (popup (0 5 0)) (xcscope (1 0))) "The core library of the ac-php" tar ((:commit . "35eeaa3aaf1a38b183783dc693012242c7dd2053") (:authors ("jim" . "xcwenn@qq.com") ("Serghei Iakovlev" . "sadhooklay@gmail.com")) (:maintainers ("jim")) (:maintainer "jim") (:keywords "completion" "convenience" "intellisense") (:url . "https://github.com/xcwen/ac-php"))])
- (ac-racer . [(20170114 809) ((emacs (24 3)) (auto-complete (1 5 0)) (racer (0 0 2))) "auto-complete source of racer" single ((:commit . "4408c2d652dec0432e20c05e001db8222d778c6b") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-racer"))])
- (ac-rtags . [(20191222 920) ((auto-complete (1 4 0)) (rtags (2 10))) "auto-complete back-end for RTags" single ((:commit . "595055b5316a7c92ba1d638f324f98842a0f41a5") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "https://github.com/Andersbakken/rtags"))])
- (ac-skk . [(20141230 119) ((auto-complete (1 3 1)) (ddskk (16 0 50)) (tinysegmenter (0)) (cl-lib (0 5))) "auto-complete-mode source for DDSKK a.k.a Japanese input method" single ((:commit . "d25a265930430d080329789fb253d786c01dfa24") (:authors ("lugecy <https://twitter.com/lugecy>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience" "auto-complete") (:url . "https://github.com/myuhe/ac-skk.el"))])
- (ac-slime . [(20171027 2100) ((auto-complete (1 4)) (slime (2 9)) (cl-lib (0 5))) "An auto-complete source using slime completions" single ((:commit . "a91f664510d3da24b02e87e4aa59d049483a6529") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/ac-slime"))])
- (ac-sly . [(20170728 1027) ((sly (1 0 0 -3)) (auto-complete (1 4)) (cl-lib (0 5))) "An auto-complete source using sly completions" single ((:commit . "bf69c687c4ecf1994349d20c182e9b567399912e") (:authors ("Damian T. Dobroczy\\'nski" . "qoocku@gmail.com")) (:maintainers ("Damian T. Dobroczy\\'nski" . "qoocku@gmail.com")) (:maintainer "Damian T. Dobroczy\\'nski" . "qoocku@gmail.com") (:url . "https://github.com/qoocku/ac-sly"))])
- (academic-phrases . [(20180723 1021) ((dash (2 12 0)) (s (1 12 0)) (ht (2 0)) (emacs (24))) "Bypass that mental block when writing your papers." single ((:commit . "25d9cf67feac6359cb213f061735e2679c84187f") (:authors ("Nasser Alshammari" . "designernasser@gmail.com")) (:maintainers ("Nasser Alshammari" . "designernasser@gmail.com")) (:maintainer "Nasser Alshammari" . "designernasser@gmail.com") (:keywords "academic" "convenience" "papers" "writing" "wp") (:url . "https://github.com/nashamri/academic-phrases"))])
- (accent . [(20220202 1312) ((emacs (24 3)) (popup (0 5 8))) "Popup for accented characters (diacritics)" single ((:commit . "fba79570247411804af34e8b4bedad73ee75fac0") (:authors ("Elia Scotto" . "eliascotto94@gmail.com")) (:maintainers ("Elia Scotto" . "eliascotto94@gmail.com")) (:maintainer "Elia Scotto" . "eliascotto94@gmail.com") (:keywords "i18n") (:url . "https://github.com/elias94/accent"))])
- (ace-flyspell . [(20170309 509) ((avy (0 4 0))) "Jump to and correct spelling errors using `ace-jump-mode' and flyspell" single ((:commit . "538d4f8508d305262ba0228dfe7c819fb65b53c9") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/ace-flyspell"))])
- (ace-isearch . [(20220809 1748) ((emacs (24))) "A seamless bridge between isearch, ace-jump-mode, avy, helm-swoop and swiper" single ((:commit . "a24bfc626100f183dbad016bd7723eb12e238534") (:authors ("Akira Tamamori")) (:maintainers ("Akira Tamamori")) (:maintainer "Akira Tamamori") (:url . "https://github.com/tam17aki/ace-isearch"))])
- (ace-jump-buffer . [(20171031 1550) ((avy (0 4 0)) (dash (2 4 0))) "fast buffer switching extension to `avy'" single ((:commit . "ae5be0415c823f7bb66833aa4af2180d4cf99cef") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "https://github.com/waymondo/ace-jump-buffer"))])
- (ace-jump-helm-line . [(20160918 1836) ((avy (0 4 0)) (helm (1 6 3))) "Ace-jump to a candidate in helm window" single ((:commit . "1483055255df3f8ae349f7520f05b1e43ea3ed37") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/ace-jump-helm-line"))])
- (ace-jump-mode . [(20140616 815) nil "a quick cursor location minor mode for emacs" single ((:commit . "8351e2df4fbbeb2a4003f2fb39f46d33803f3dac") (:authors ("winterTTr" . "winterTTr@gmail.com")) (:maintainers ("winterTTr" . "winterTTr@gmail.com")) (:maintainer "winterTTr" . "winterTTr@gmail.com") (:keywords "motion" "location" "cursor") (:url . "https://github.com/winterTTr/ace-jump-mode/"))])
- (ace-jump-zap . [(20170717 1849) ((ace-jump-mode (1 0)) (dash (2 10 0))) "Character zapping, `ace-jump-mode` style" single ((:commit . "52b5d4c6c73bd0fc833a0dcb4e803a5287d8cae8") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainers ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com") (:keywords "convenience" "tools" "extensions") (:url . "https://github.com/waymondo/ace-jump-zap"))])
- (ace-link . [(20220901 1710) ((avy (0 4 0))) "Quickly follow links" single ((:commit . "06ab398df85e81d1dc763b3210732dd26cba60a1") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience" "links" "avy") (:url . "https://github.com/abo-abo/ace-link"))])
- (ace-mc . [(20190206 749) ((ace-jump-mode (1 0)) (multiple-cursors (1 0)) (dash (2 10 0))) "Add multiple cursors quickly using ace jump" single ((:commit . "6877880efd99e177e4e9116a364576def3da391b") (:authors ("Josh Moller-Mara" . "jmm@cns.nyu.edu")) (:maintainers ("Josh Moller-Mara" . "jmm@cns.nyu.edu")) (:maintainer "Josh Moller-Mara" . "jmm@cns.nyu.edu") (:keywords "motion" "location" "cursor") (:url . "https://github.com/mm--/ace-mc"))])
- (ace-pinyin . [(20210827 355) ((avy (0 2 0)) (pinyinlib (0 1 0))) "Jump to Chinese characters using avy or ace-jump-mode" single ((:commit . "47662c0b05775ba353464b44c0f1a037c85e746e") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/ace-pinyin"))])
- (ace-popup-menu . [(20221004 1115) ((emacs (24 3)) (avy-menu (0 1))) "Replace GUI popup menu with something more efficient" single ((:commit . "e91283271ca409d7f1a477337cc82fb8a74e75ac") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "convenience" "popup" "menu") (:url . "https://github.com/mrkkrp/ace-popup-menu"))])
- (ace-window . [(20220911 358) ((avy (0 5 0))) "Quickly switch windows." tar ((:commit . "77115afc1b0b9f633084cf7479c767988106c196") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "window" "location") (:url . "https://github.com/abo-abo/ace-window"))])
- (achievements . [(20150531 1317) ((keyfreq (0 0 3))) "Achievements for emacs usage." tar ((:commit . "5c3c430b21bcf685c412cf5ceb3769f630082e4f") (:authors ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainer "Ivan Andrus" . "darthandrus@gmail.com") (:keywords "games"))])
- (ack-menu . [(20150504 2022) ((mag-menu (0 1 0))) "A menu-based front-end for ack" single ((:commit . "f77be93a4697926ecf3195a355eb69580f695f4d") (:authors ("Steven Thomas") ("Nikolaj Schumacher")) (:maintainers ("Steven Thomas")) (:maintainer "Steven Thomas") (:keywords "tools" "matching" "convenience") (:url . "https://github.com/chumpage/ack-menu"))])
- (acme-theme . [(20210430 302) nil "A color theme based on Acme & Sam from Plan 9" single ((:commit . "ae8788b5851ea353fbb80ab586a3bbd5dc8e91aa") (:authors ("Ian Y.E. Pan")) (:maintainers ("Ian Y.E. Pan")) (:maintainer "Ian Y.E. Pan") (:url . "https://github.com/ianpan870102/acme-emacs-theme"))])
- (actionscript-mode . [(20180527 1701) nil "A simple mode for editing Actionscript 3 files" single ((:commit . "65abd58e198458a8e46748c5962c41d80d60c4ea") (:authors ("Austin Haas")) (:maintainers ("Austin Haas")) (:maintainer "Austin Haas") (:keywords "language" "modes"))])
- (activity-watch-mode . [(20220111 1121) ((emacs (25)) (request (0)) (json (0)) (cl-lib (0))) "Automatic time tracking extension." single ((:commit . "789ec3425623e43a29755e8daaa02305df8da8ed") (:authors ("Gabor Torok <gabor@20y.hu>, Alan Hamlett" . "alan@wakatime.com")) (:maintainers ("Paul d'Hubert" . "paul.dhubert@ya.ru")) (:maintainer "Paul d'Hubert" . "paul.dhubert@ya.ru") (:keywords "calendar" "comm") (:url . "https://github.com/pauldub/activity-watch-mode"))])
- (adafruit-wisdom . [(20200217 306) ((emacs (25 1)) (request (0 3 1))) "Get/display adafruit.com quotes" single ((:commit . "c4ae0db35d0be94f0e9c50977758224d7e00234a") (:authors ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:keywords "games") (:url . "https://github.com/gonewest818/adafruit-wisdom.el"))])
- (add-hooks . [(20171217 123) nil "Functions for setting multiple hooks" single ((:commit . "1845137703461fc44bd77cf24014ba58f19c369d") (:authors ("Nick McCurdy" . "nick@nickmccurdy.com")) (:maintainers ("Nick McCurdy" . "nick@nickmccurdy.com")) (:maintainer "Nick McCurdy" . "nick@nickmccurdy.com") (:keywords "lisp") (:url . "https://github.com/nickmccurdy/add-hooks"))])
- (add-node-modules-path . [(20230307 655) ((s (1 12 0))) "Add node_modules to your exec-path" single ((:commit . "841e93dfed50448da66c89a977c9182bb18796a1") (:authors ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainers ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainer "Neri Marschik" . "marschik_neri@cyberagent.co.jp") (:keywords "javascript" "node" "node_modules" "eslint") (:url . "https://github.com/codesuki/add-node-modules-path"))])
- (addressbook-bookmark . [(20190612 1638) ((emacs (24))) "An address book based on Standard Emacs bookmarks." single ((:commit . "d8e502fc2f3d3ab1508ce9e50ebf8a9addc6e5b3") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/addressbook-bookmark"))])
- (ado-mode . [(20221023 1422) ((emacs (25 1))) "Major mode for editing Stata-related files" tar ((:commit . "5610074e29ce08631c5210f1873938c3bcd9cbde") (:authors ("Bill Rising" . "brising@alum.mit.edu")) (:maintainers ("Bill Rising" . "brising@alum.mit.edu")) (:maintainer "Bill Rising" . "brising@alum.mit.edu") (:keywords "tools" "languages" "files" "convenience" "stata" "mata" "ado") (:url . "https://github.com/louabill/ado-mode"))])
- (adoc-mode . [(20230413 800) ((emacs (26))) "a major-mode for editing AsciiDoc files" single ((:commit . "a7691c8b9a738fd724007a2a283ed2c20684a7e5") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "docs" "wp") (:url . "https://github.com/bbatsov/adoc-mode"))])
- (adwaita-dark-theme . [(20230215 2027) ((emacs (27 1))) "A dark color scheme inspired by Adwaita" single ((:commit . "4792fed63a44a2337832644db909c1663100605e") (:authors ("Jessie Hildebrandt <jessieh.net>")) (:maintainers ("Jessie Hildebrandt <jessieh.net>")) (:maintainer "Jessie Hildebrandt <jessieh.net>") (:keywords "mode-line" "faces") (:url . "https://gitlab.com/jessieh/adwaita-dark-theme"))])
- (aes . [(20211204 2348) ((emacs (26 1))) "Implementation of AES" single ((:commit . "c9cd12d6c1dbc18603eb4703276132cea59d5c78") (:authors ("Markus Sauermann" . "emacs-aes@sauermann-consulting.de")) (:maintainers ("Markus Sauermann" . "emacs-aes@sauermann-consulting.de")) (:maintainer "Markus Sauermann" . "emacs-aes@sauermann-consulting.de") (:keywords "data" "tools") (:url . "https://github.com/Sauermann/emacs-aes"))])
- (affe . [(20230411 441) ((emacs (27 1)) (consult (0 33))) "Asynchronous Fuzzy Finder for Emacs" tar ((:commit . "ae3169ac4bbd64520d165b4ce4806b7a34b972dc") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "matching" "files" "completion") (:url . "https://github.com/minad/affe"))])
- (afternoon-theme . [(20140104 1859) ((emacs (24 1))) "Dark color theme with a deep blue background" single ((:commit . "89b1d778a1f8b385775c122f2bd1c62f0fbf931a") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainers ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com") (:keywords "themes") (:url . "http://github.com/osener/emacs-afternoon-theme"))])
- (ag . [(20201031 2202) ((dash (2 8 0)) (s (1 9 0)) (cl-lib (0 5))) "A front-end for ag ('the silver searcher'), the C ack replacement." single ((:commit . "ed7e32064f92f1315cecbfc43f120bbc7508672c") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:url . "https://github.com/Wilfred/ag.el"))])
- (agda-editor-tactics . [(20211024 2357) ((s (1 12 0)) (dash (2 16 0)) (emacs (27 1)) (org (9 1))) "An editor tactic to produce Σ-types from Agda records" single ((:commit . "06e374516cb2ab17018985f3dc4fccdc4acefd08") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com") (:keywords "abbrev" "convenience" "languages" "agda" "tools") (:url . "https://github.com/alhassy/next-700-module-systems"))])
- (age . [(20230115 1155) ((emacs (28 1))) "The Age Encryption Library" single ((:commit . "9e82487234c53e0fab2314aeab6479e62c68f0c7") (:authors ("Daiki Ueno" . "ueno@unixuser.org") ("Bas Alberts" . "bas@anti.computer")) (:maintainers ("Bas Alberts" . "bas@anti.computer")) (:maintainer "Bas Alberts" . "bas@anti.computer") (:keywords "data") (:url . "https://github.com/anticomputer/age.el"))])
- (aggressive-fill-paragraph . [(20180910 816) ((dash (2 10 0))) "A mode to automatically keep paragraphs filled" single ((:commit . "39eb7ac73976d4d4044ef3d750c3ade967d036e1") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:keywords "fill-paragraph" "automatic" "comments") (:url . "https://github.com/davidshepherd7/aggressive-fill-paragraph-mode"))])
- (aggressive-indent . [(20230112 1300) ((emacs (24 3))) "Minor mode to aggressively keep your code always indented" single ((:commit . "a437a45868f94b77362c6b913c5ee8e67b273c42") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "indent" "lisp" "maint" "tools") (:url . "https://github.com/Malabarba/aggressive-indent-mode"))])
- (agtags . [(20221026 904) ((emacs (25))) "A frontend to GNU Global" single ((:commit . "e8e04ece2f32d65b084974597bfe8077da3ddba0") (:authors ("Vietor Liu" . "vietor.liu@gmail.com")) (:maintainers ("Vietor Liu" . "vietor.liu@gmail.com")) (:maintainer "Vietor Liu" . "vietor.liu@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/vietor/agtags"))])
- (ah . [(20220730 1058) ((emacs (25 1))) "Additional hooks" single ((:commit . "8e12223f0f423e7fa882cc049a25af6db755902d") (:authors ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainers ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainer "Takaaki ISHIKAWA <takaxp at ieee dot org>") (:keywords "convenience") (:url . "https://github.com/takaxp/ah"))])
- (ahg . [(20221013 916) nil "Alberto's Emacs interface for Mercurial (Hg)" single ((:commit . "8f0dc52dedcf20e1662c964c6577cfb737381505") (:authors ("Alberto Griggio" . "agriggio@users.sourceforge.net")) (:maintainers ("Alberto Griggio" . "agriggio@users.sourceforge.net")) (:maintainer "Alberto Griggio" . "agriggio@users.sourceforge.net") (:url . "https://bitbucket.org/agriggio/ahg"))])
- (ahk-mode . [(20200412 1832) ((emacs (24 3))) "Major mode for editing AHK (AutoHotkey and AutoHotkey_L)" single ((:commit . "729007b5f22a49f5187ff47fca18c0d674e73047") (:authors ("Rich Alesi")) (:maintainers ("Rich Alesi")) (:maintainer "Rich Alesi") (:keywords "ahk" "autohotkey" "hotkey" "keyboard shortcut" "automation") (:url . "https://github.com/ralesi/ahk-mode"))])
- (ahungry-theme . [(20180131 328) ((emacs (24))) "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)." single ((:commit . "a038d91ec593d1f1b19ca66a0576d59bbc24c523") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "palette" "color" "theme" "emacs" "color-theme" "deftheme") (:url . "https://github.com/ahungry/color-theme-ahungry"))])
- (aio . [(20200610 1904) ((emacs (26 1))) "async/await for Emacs Lisp" tar ((:commit . "da93523e235529fa97d6f251319d9e1d6fc24a41") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/emacs-aio"))])
- (airline-themes . [(20211214 1749) ((powerline (2 3))) "vim-airline themes for emacs powerline" tar ((:commit . "6bd102e49a7d87af1a72eb86e953991ff7bc954e") (:authors ("Anthony DiGirolamo" . "anthony.digirolamo@gmail.com")) (:maintainers ("Anthony DiGirolamo" . "anthony.digirolamo@gmail.com")) (:maintainer "Anthony DiGirolamo" . "anthony.digirolamo@gmail.com") (:keywords "evil" "mode-line" "powerline" "airline" "themes") (:url . "http://github.com/AnthonyDiGirolamo/airline-themes"))])
- (airplay . [(20130212 1226) ((request (20130110 2144)) (simple-httpd (1 4 1)) (deferred (0 3 1))) "Airplay bindings to Emacs" tar ((:commit . "46fad71d293a3e18551cf464fe6c6208a7a32d9d") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:keywords "appletv" "airplay") (:url . "https://github.com/gongo/airplay-el"))])
- (alan-mode . [(20230216 857) ((flycheck (32)) (emacs (25 1)) (s (1 12))) "Major mode for editing Alan files" single ((:commit . "723cf8e8d7e00c1498935553c46f459aa1d26135") (:authors ("Paul van Dam" . "pvandam@kjerner.com")) (:maintainers ("Paul van Dam" . "pvandam@kjerner.com")) (:maintainer "Paul van Dam" . "pvandam@kjerner.com") (:keywords "alan" "languages") (:url . "https://github.com/Kjerner/AlanForEmacs"))])
- (alarm-clock . [(20230326 718) ((emacs (24 4))) "Alarm Clock" tar ((:commit . "bcd9158f18ead2aa25f10a48e4a38e2c3ed64217") (:authors ("Steve Lemuel" . "wlemuel@hotmail.com")) (:maintainers ("Steve Lemuel" . "wlemuel@hotmail.com")) (:maintainer "Steve Lemuel" . "wlemuel@hotmail.com") (:keywords "calendar" "tools" "convenience") (:url . "https://github.com/wlemuel/alarm-clock"))])
- (alchemist . [(20180312 1304) ((elixir-mode (2 2 5)) (dash (2 11 0)) (emacs (24 4)) (company (0 8 0)) (pkg-info (0 4)) (s (1 11 0))) "Elixir tooling integration into Emacs" tar ((:commit . "6f99367511ae209f8fe2c990779764bbb4ccb6ed") (:authors ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainers ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainer "Samuel Tonini" . "tonini.samuel@gmail.com") (:keywords "languages" "elixir" "elixirc" "mix" "hex" "alchemist") (:url . "http://www.github.com/tonini/alchemist.el"))])
- (alda-mode . [(20230406 1927) ((emacs (24 0))) "An Alda major mode" single ((:commit . "580f6e94c93aead91406d00a42ccf9040a898cb8") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com") (:keywords "alda" "highlight") (:url . "http://gitlab.com/jgkamat/alda-mode"))])
- (alect-themes . [(20211022 1651) ((emacs (24 0))) "Configurable light, dark and black themes for Emacs 24 or later" tar ((:commit . "89560047934c236d05ea6b911c0c63702a8e06f3") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "color" "theme") (:url . "https://github.com/alezost/alect-themes"))])
- (alectryon . [(20220925 2236) ((flycheck (31)) (emacs (25 1))) "Toggle between Coq and reStructuredText" tar ((:commit . "8a1f3054c97fc86d628413800cfef75577c43485") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/cpitclaudel/alectryon"))])
- (alert . [(20221213 1619) ((gntp (0 1)) (log4e (0 3 0)) (cl-lib (0 5))) "Growl-style notification system for Emacs" single ((:commit . "c762380ff71c429faf47552a83605b2578656380") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:keywords "notification" "emacs" "message") (:url . "https://github.com/jwiegley/alert"))])
- (alert-termux . [(20181119 951) ((emacs (24 4))) "alert.el notifications on Termux" single ((:commit . "8215cf1d86392738c35a90bbc0055359265dfc4d") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainers ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu") (:keywords "terminals") (:url . "https://github.com/gergelypolonkai/alert-termux"))])
- (alert-toast . [(20220312 229) ((emacs (25 1)) (alert (1 2)) (f (0 20 0)) (s (1 12 0))) "Windows 10 toast notifications" single ((:commit . "96c88c93c1084de681700f655223142ee0eb944a") (:authors ("Grzegorz Kowzan" . "grzegorz@kowzan.eu")) (:maintainers ("Grzegorz Kowzan" . "grzegorz@kowzan.eu")) (:maintainer "Grzegorz Kowzan" . "grzegorz@kowzan.eu") (:url . "https://github.com/gkowzan/alert-toast"))])
- (align-cljlet . [(20160112 2101) ((clojure-mode (1 11 5))) "Space align various Clojure forms" single ((:commit . "ebcf0a912e836579a3a9d386e22c1c4bef7fba17") (:url . "https://github.com/gstamp/align-cljlet"))])
- (all-ext . [(20200315 1443) ((emacs (24 4)) (all (1 0))) "M-x all with helm-swoop/anything/multiple-cursors/line-number" single ((:commit . "c865c62506af2c9edc7705a7c24dc8b70d5d4de2") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "matching" "all" "search" "replace" "anything" "helm" "helm-swoop" "occur") (:url . "https://github.com/rubikitch/all-ext"))])
- (all-the-icons . [(20230505 1635) ((emacs (24 3))) "A library for inserting Developer icons" tar ((:commit . "f75c1130b72c718bfaf18b56c445c4b58efc714f") (:authors ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainers ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dominic Charlesworth" . "dgc336@gmail.com") (:keywords "convenient" "lisp") (:url . "https://github.com/domtronn/all-the-icons.el"))])
- (all-the-icons-completion . [(20230224 1610) ((emacs (26 1)) (all-the-icons (5 0))) "Add icons to completion candidates" single ((:commit . "b08f053cee444546ab44a05fd541f59e8bc8983b") (:authors ("Itai Y. Efrat <https://github.com/iyefrat>")) (:maintainers ("Itai Y. Efrat" . "itai3397@gmail.com")) (:maintainer "Itai Y. Efrat" . "itai3397@gmail.com") (:keywords "convenient" "lisp") (:url . "https://github.com/iyefrat/all-the-icons-completion"))])
- (all-the-icons-dired . [(20220929 1135) ((emacs (26 1)) (all-the-icons (2 2 0))) "Shows icons for each file in dired mode" single ((:commit . "bcaed35bb3ad7fc46007f16e0d670beb82bb613e") (:authors ("jtbm37")) (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com") (:keywords "files" "icons" "dired") (:url . "https://github.com/wyuenho/all-the-icons-dired"))])
- (all-the-icons-gnus . [(20180511 654) ((emacs (24 4)) (dash (2 12 0)) (all-the-icons (3 1 0))) "Shows icons for in Gnus" single ((:commit . "27f78996da0725943bcfb2d18038e6f7bddfa9c7") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "mail" "tools"))])
- (all-the-icons-ibuffer . [(20230503 1625) ((emacs (24 4)) (all-the-icons (2 2 0))) "Display icons for all buffers in ibuffer" single ((:commit . "400860b2990529bd3a915e4d0a55fbc6d128a3ba") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:keywords "convenience" "icons" "ibuffer") (:url . "https://github.com/seagle0128/all-the-icons-ibuffer"))])
- (all-the-icons-ivy . [(20190508 1803) ((emacs (24 4)) (all-the-icons (2 4 0)) (ivy (0 8 0))) "Shows icons while using ivy and counsel" single ((:commit . "babea626db20773de4c408acb2788e2b9c8277e3") (:authors ("asok")) (:maintainers ("asok")) (:maintainer "asok") (:keywords "faces"))])
- (all-the-icons-ivy-rich . [(20230420 1234) ((emacs (25 1)) (ivy-rich (0 1 0)) (all-the-icons (2 2 0))) "Better experience with icons for ivy" single ((:commit . "c098cc85123a401b0ab8f2afd3a25853e61d7d28") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:keywords "convenience" "icons" "ivy") (:url . "https://github.com/seagle0128/all-the-icons-ivy-rich"))])
- (almost-mono-themes . [(20220422 1714) ((emacs (24))) "Almost monochromatic color themes" tar ((:commit . "0641bf565c113caef8d5c2a93f38cff32ebb62b7") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:keywords "faces") (:url . "https://github.com/cryon/almost-mono-themes"))])
- (alsamixer . [(20191002 1133) nil "Functions to call out to amixer." single ((:commit . "1bdb99e433acd38685f05408562746cfbf2bc820") (:authors ("R.W. van 't Veer")) (:maintainers ("R.W. van 't Veer")) (:maintainer "R.W. van 't Veer") (:keywords "convenience") (:url . "https://github.com/remvee/alsamixer-el"))])
- (alt-codes . [(20220704 644) ((emacs (26 1))) "Insert alt codes using meta key" single ((:commit . "36dbcbeb69525cd21caeb4c267421b69fa2fffcb") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "alt" "codes" "insertion" "meta") (:url . "https://github.com/jcs-elpa/alt-codes"))])
- (amd-mode . [(20180111 1402) ((emacs (25)) (projectile (20161008 47)) (s (1 9 0)) (f (0 16 2)) (seq (2 16)) (makey (0 3)) (js2-mode (20140114)) (js2-refactor (0 6 1))) "Minor mode for handling JavaScript AMD module requirements." single ((:commit . "01fd19e0d635ccaf8e812364d8720733f2e84126") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com") (:keywords "javascript" "amd" "projectile"))])
- (ameba . [(20200103 1454) ((emacs (24 4))) "An interface to Crystal Ameba linter" single ((:commit . "0c4925ae0e998818326adcb47ed27ddf9761c7dc") (:authors ("Vitalii Elenhaupt")) (:maintainers ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:keywords "convenience") (:url . "https://github.com/crystal-ameba/ameba.el"))])
- (ample-regexps . [(20200508 1021) nil "ample regular expressions for Emacs" tar ((:commit . "153969ce547afe410b8986f01c9ed4087c9cd20b") (:authors ("immerrr" . "immerrr@gmail.com")) (:maintainers ("immerrr" . "immerrr@gmail.com")) (:maintainer "immerrr" . "immerrr@gmail.com") (:keywords "regexps" "extensions" "tools"))])
- (ample-theme . [(20180207 1745) nil "Calm Dark Theme for Emacs" tar ((:commit . "366698400c555211c2082962a5d74f3dd79a78c8") (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainers ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com") (:keywords "theme" "dark") (:url . "https://github.com/jordonbiondo/ample-theme"))])
- (ample-zen-theme . [(20150119 2154) nil "AmpleZen Theme for Emacs 24" single ((:commit . "b277bb7abd4b6624e8d59f02474b79af50a007bd") (:authors ("Michael Wall")) (:maintainers ("Michael Wall")) (:maintainer "Michael Wall") (:keywords "theme" "dark" "emacs 24") (:url . "https://github.com/mjwall/ample-zen"))])
- (amread-mode . [(20230409 1018) ((emacs (24 3)) (cl-lib (0 6 1)) (pyim (5 2 8)) (hydra (0 15 0))) "A minor mode helper user speed-reading" single ((:commit . "b8622ae7b05f27d6f84c4e5d724bc79163ba9ce3") (:keywords "wp") (:url . "https://repo.or.cz/amread-mode.git"))])
- (amsreftex . [(20220115 1838) ((emacs (25 1))) "Add amsrefs bibliography support for reftex" single ((:commit . "facf47b82572e3f62bd8d9b8d4f4d5258f6c8a38") (:authors ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainers ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainer "Fran Burstall" . "fran.burstall@gmail.com") (:keywords "tex") (:url . "https://github.com/franburstall/amsreftex"))])
- (amx . [(20230413 1210) ((emacs (24 4)) (s (0))) "Alternative M-x with extra features." single ((:commit . "1c2428d21e9d2ee8bee944b572a39ca8c91ca13b") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org") ("Cornelius Mika" . "cornelius.mika@gmail.com")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org") (:keywords "convenience" "usability" "completion") (:url . "http://github.com/DarwinAwardWinner/amx/"))])
- (anaconda-mode . [(20230306 2112) ((emacs (25 1)) (pythonic (0 1 0)) (dash (2 6 0)) (s (1 9)) (f (0 16 2))) "Code navigation, documentation lookup and completion for Python" tar ((:commit . "e250596f5587129f55f446ef127d0dac5e9730a3") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/anaconda-mode"))])
- (anakondo . [(20210221 1727) ((emacs (26 3))) "Adds clj-kondo based Clojure[Script] editing facilities" single ((:commit . "16b0ba14d94a5d7e55655efc9e1d6d069a9306f2") (:authors ("Didier A." . "didibus@users.noreply.github.com")) (:maintainers ("Didier A." . "didibus@users.noreply.github.com")) (:maintainer "Didier A." . "didibus@users.noreply.github.com") (:keywords "clojure" "clojurescript" "cljc" "clj-kondo" "completion" "languages" "tools") (:url . "https://github.com/didibus/anakondo"))])
- (anaphora . [(20180618 2200) nil "anaphoric macros providing implicit temp variables" single ((:commit . "3b2da3f759b244975852e79721c4a2dbad3905cf") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/anaphora"))])
- (ancient-one-dark-theme . [(20211030 1358) ((emacs (24 1))) "A color theme based off uetchy's Ancient One Dark Theme" single ((:commit . "a0eaa8bce0ffc25d1469af48a74e80f820bab0ab") (:authors ("Daniils Petrovs")) (:maintainers ("Daniils Petrovs")) (:maintainer "Daniils Petrovs") (:url . "https://github.com/DaniruKun/ancient-one-dark-emacs-theme"))])
- (android-env . [(20220810 1449) ((emacs (24 3)) (s (1 12 0))) "Helper functions for working in android" single ((:commit . "d2890f1156ed184314adbfcf01cdceb6ea79b10d") (:authors ("Fernando Jascovich")) (:maintainers ("Fernando Jascovich")) (:maintainer "Fernando Jascovich") (:keywords "android" "gradle" "java" "tools" "convenience") (:url . "https://github.com/fernando-jascovich/android-env.el"))])
- (android-mode . [(20190903 811) nil "Minor mode for Android application development" single ((:commit . "d5332e339a1f5e30559a53feffb8442ca79265d6") (:authors ("R.W. van 't Veer")) (:maintainers ("R.W. van 't Veer")) (:maintainer "R.W. van 't Veer") (:keywords "tools" "processes") (:url . "https://github.com/remvee/android-mode"))])
- (angry-police-captain . [(20120829 1252) nil "Show quote from http://theangrypolicecaptain.com in the minibuffer" single ((:commit . "d11931c5cb63368dcc4a48797962428cca6d3e9d") (:authors ("Rolando Pereira" . "rolando_pereira@sapo.pt")) (:maintainers ("Rolando Pereira" . "rolando_pereira@sapo.pt")) (:maintainer "Rolando Pereira" . "rolando_pereira@sapo.pt") (:keywords "games" "web" "fun"))])
- (angular-mode . [(20151201 2127) nil "Major mode for Angular.js" tar ((:commit . "8720cde86af0f1859ccc8580571e8d0ad1c52cff") (:authors ("Rudolf Olah" . "omouse@gmail.com")) (:maintainers ("Rudolf Olah" . "omouse@gmail.com")) (:maintainer "Rudolf Olah" . "omouse@gmail.com") (:keywords "languages" "javascript") (:url . "https://github.com/omouse/angularjs-mode"))])
- (angular-snippets . [(20140514 523) ((s (1 4 0)) (dash (1 2 0))) "Yasnippets for AngularJS" tar ((:commit . "af5ae0a4a8603b040446c28afcf6ca01a8b4bd7b") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "snippets"))])
- (anki-connect . [(20191123 1858) ((emacs (24 3))) "AnkiConnect API" single ((:commit . "1324f0c248aa2c6e73d6cf93fad6119d699f7dae") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "lisp" "anki") (:url . "https://github.com/lujun9972/anki-connect.el"))])
- (anki-editor . [(20190922 1223) ((emacs (25)) (request (0 3 0)) (dash (2 12 0))) "Minor mode for making Anki cards with Org" tar ((:commit . "084ffad14fa700ad1ba95d8cbfe4a8f6052e2408") (:authors ("Lei Tan")) (:maintainers ("Lei Tan")) (:maintainer "Lei Tan") (:url . "https://github.com/louietan/anki-editor"))])
- (anki-mode . [(20201223 719) ((emacs (24 4)) (dash (2 12 0)) (markdown-mode (2 2)) (s (1 11 0)) (request (0 3 0))) "A major mode for creating anki cards" single ((:commit . "7cde5a68c9d0ef3811b0bd480274ea79909d2ddc") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:keywords "tools") (:url . "https://github.com/davidshepherd7/anki-mode"))])
- (anki-vocabulary . [(20200103 325) ((emacs (24 4)) (s (1 0)) (youdao-dictionary (0 4)) (anki-connect (1 0)) (s (1 10))) "Help you to create vocabulary cards in Anki" single ((:commit . "863fe0219577f996ab126f1b7902db3c2cc59b2b") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "lisp" "anki" "translator" "chinese") (:url . "https://github.com/lujun9972/anki-vocabulary.el"))])
- (annalist . [(20190929 207) ((emacs (24 4)) (cl-lib (0 5))) "Record and display information such as keybindings" tar ((:commit . "08df07e4530953a2c0b1aa553adcab37b7b614b0") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:keywords "convenience" "tools" "keybindings" "org") (:url . "https://github.com/noctuid/annalist.el"))])
- (annotate . [(20230401 1613) nil "annotate files without changing them" single ((:commit . "69d7e2138c35f8c8adb33cf27b440eee2591810d") (:authors ("Bastian Bechtold")) (:maintainers ("Bastian Bechtold <bastibe.dev@mailbox.org>, cage" . "cage-dev@twistfold.it")) (:maintainer "Bastian Bechtold <bastibe.dev@mailbox.org>, cage" . "cage-dev@twistfold.it") (:url . "https://github.com/bastibe/annotate.el"))])
- (annotate-depth . [(20160520 2040) nil "Annotate buffer if indentation depth is beyond threshold." single ((:commit . "fcb24fa36287250e40d195590c4ca4a8a696277b") (:authors ("Morten Slot Kristensen <msk AT nullpointer DOT dk>")) (:maintainers ("Morten Slot Kristensen <msk AT nullpointer DOT dk>")) (:maintainer "Morten Slot Kristensen <msk AT nullpointer DOT dk>") (:keywords "convenience") (:url . "https://github.com/netromdk/annotate-depth"))])
- (annotation . [(20200914 644) nil "Functions for annotating text with faces and help bubbles" single ((:commit . "aa5e3a127bf17a8c80d947f3c286758a36dadc36") (:url . "https://github.com/agda/agda"))])
- (annoying-arrows-mode . [(20161024 646) ((cl-lib (0 5))) "Ring the bell if using arrows too much" single ((:commit . "3c42e9807d7696da2da2a21b63beebf9cdb3f5dc") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))])
- (ansi . [(20230306 1823) ((emacs (24 1)) (cl-lib (0 6))) "Turn string into ansi strings" single ((:commit . "c79806eacdf96e061abf5334f4c3364a995705d4") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "terminals" "color" "ansi") (:url . "http://github.com/rejeep/ansi"))])
- (ansible . [(20220114 45) ((s (1 9 0)) (f (0 16 2))) "Ansible minor mode" tar ((:commit . "d89ac0ee57742cca0f0e0a3453d9dcc521575690") (:authors ("k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>")) (:maintainers ("k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>")) (:maintainer "k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>") (:url . "https://github.com/k1LoW/emacs-ansible"))])
- (ansible-doc . [(20160924 824) ((emacs (24 3))) "Ansible documentation Minor Mode" single ((:commit . "bc8128a85a79b14f4a121105d87a5eddc33975ad") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn") (:keywords "tools" "help") (:url . "https://github.com/lunaryorn/ansible-doc.el"))])
- (ansible-vault . [(20211119 1459) ((emacs (24 3))) "Minor mode for editing ansible vault files" single ((:commit . "9b3d82ee49d484a494f2d88927b37fcd6245d51e") (:maintainers ("Zachary Elliott" . "contact@zell.io")) (:maintainer "Zachary Elliott" . "contact@zell.io") (:keywords "ansible" "ansible-vault" "tools") (:url . "http://github.com/zellio/ansible-vault-mode"))])
- (ansilove . [(20230210 1338) ((emacs (26 1))) "Display buffers as PNG images using ansilove" single ((:commit . "abd64819dc67e1ababd38d39c7c7f6a2459987c0") (:authors ("Maciej Barć" . "xgqt@riseup.net")) (:maintainers ("Maciej Barć" . "xgqt@riseup.net")) (:maintainer "Maciej Barć" . "xgqt@riseup.net") (:keywords "multimedia") (:url . "https://gitlab.com/xgqt/emacs-ansilove/"))])
- (ant . [(20160211 1543) nil "helpers for compiling with ant" single ((:commit . "510b5a3f57ee4b2855422d88d359a28922c1ab70") (:keywords "compilation" "ant" "java"))])
- (anti-zenburn-theme . [(20180712 1838) nil "Low-contrast Zenburn-inverted theme" single ((:commit . "dbafbaa86be67c1d409873f57a5c0bbe1e7ca158") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainers ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:url . "https://github.com/m00natic/anti-zenburn-theme"))])
- (anx-api . [(20140208 1514) nil "Interact with the AppNexus API from Emacs." single ((:commit . "b2411ebc966ac32c3ffc61bc22bf183834df0fa0") (:authors ("Rich Loveland")) (:maintainers ("Rich Loveland")) (:maintainer "Rich Loveland") (:keywords "convenience" "json" "rest" "api" "appnexus"))])
- (anybar . [(20160816 1421) nil "Control AnyBar from Emacs" single ((:commit . "7a0743e0d31bcb36ab1bb2e351f3e7139c422ac5") (:authors ("Christopher Shea" . "cmshea@gmail.com")) (:maintainers ("Christopher Shea" . "cmshea@gmail.com")) (:maintainer "Christopher Shea" . "cmshea@gmail.com") (:keywords "anybar"))])
- (anyins . [(20131229 1041) nil "Insert content at multiple places from shell command or kill-ring" single ((:commit . "cd5e3c1abd471c8a67aafc42c4c985a2796f4b9f") (:authors ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainers ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainer "Anthony HAMON" . "hamon.anth@gmail.com") (:keywords "insert" "rectangular") (:url . "http://github.com/antham/anyins"))])
- (anzu . [(20211002 2255) ((emacs (25 1))) "Show number of matches in mode-line while searching" single ((:commit . "14e4483a5e708097870b22ac56ea693ec1d893bf") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:url . "https://github.com/emacsorphanage/anzu"))])
- (aozora-view . [(20140310 1317) nil "Aozora Bunko text Emacs viewer." tar ((:commit . "b0390616d19e45f15f9a2f5d5688274831e721fd") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "text") (:url . "https://github.com/kawabata/aozora-view"))])
- (apache-mode . [(20210519 1931) nil "Major mode for editing Apache httpd configuration files" single ((:commit . "f2c11aac2f5fc598123e04f4604bea248689a117") (:authors ("Karl Chen" . "quarl@nospam.quarl.org")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "languages" "faces") (:url . "https://github.com/emacs-php/apache-mode"))])
- (apdl-mode . [(20211023 1831) ((emacs (25 1))) "Major mode for the APDL programming language." tar ((:commit . "ba756eaa1d229c9bf6936fb8d2d4126ad073d488") (:authors ("H. Dieter Wilhelm" . "dieter@duenenhof-wilhelm.de")) (:maintainer "H. Dieter Wilhelm") (:keywords "languages" "convenience" "tools" "ansys" "apdl") (:url . "https://github.com/dieter-wilhelm/apdl-mode"))])
- (apel . [(20220720 1308) ((emacs (24 5))) "A Portable Emacs Library provides support for portable Emacs Lisp programs" tar ((:commit . "82eb2325bd149dc57b43a9ce9402c6c6183e4052"))])
- (apheleia . [(20230506 2226) ((emacs (26))) "Reformat buffer stably" tar ((:commit . "01f2f0da561e29b75c6b12933943a40850cf704c") (:authors ("Radian LLC" . "contact+apheleia@radian.codes")) (:maintainers ("Radian LLC" . "contact+apheleia@radian.codes")) (:maintainer "Radian LLC" . "contact+apheleia@radian.codes") (:keywords "tools") (:url . "https://github.com/raxod502/apheleia"))])
- (apib-mode . [(20200101 1017) ((markdown-mode (2 1))) "Major mode for API Blueprint files" single ((:commit . "c6dd05201f6eb9295736d8668a79a7510d11159e") (:authors ("Vilibald WanÄa" . "vilibald@wvi.cz")) (:maintainers ("Vilibald WanÄa" . "vilibald@wvi.cz")) (:maintainer "Vilibald WanÄa" . "vilibald@wvi.cz") (:keywords "tools" "api-blueprint") (:url . "http://github.com/w-vi/apib-mode"))])
- (apiwrap . [(20180602 2231) ((emacs (25))) "api-wrapping macros" single ((:commit . "e4c9c57d6620a788ec8a715ff1bb50542edea3a6") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:keywords "tools" "maint" "convenience") (:url . "https://github.com/vermiculus/apiwrap.el"))])
- (apparmor-mode . [(20230209 2325) ((emacs (26 1))) "Major mode for editing AppArmor policy files" single ((:commit . "3b641de4e34fb4a0594a461254f1454973b6b7aa") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/apparmor-mode"))])
- (apples-mode . [(20110121 418) nil "Major mode for editing and executing AppleScript code" tar ((:commit . "83a9ab0d6ba82496e2f7df386909b1a55701fccb") (:authors ("tequilasunset" . "tequilasunset.mac@gmail.com")) (:maintainers ("tequilasunset" . "tequilasunset.mac@gmail.com")) (:maintainer "tequilasunset" . "tequilasunset.mac@gmail.com") (:keywords "applescript" "languages"))])
- (applescript-mode . [(20210802 1715) ((emacs (24 3))) "major mode for editing AppleScript source" single ((:commit . "00c141bbff46c89a96598b605dee05dd1d89f624") (:authors ("sakito" . "sakito@users.sourceforge.jp")) (:maintainers ("sakito" . "sakito@users.sourceforge.jp")) (:maintainer "sakito" . "sakito@users.sourceforge.jp") (:keywords "languages" "tools") (:url . "https://github.com/emacsorphanage/applescript-mode"))])
- (aproject . [(20220410 541) nil "Basic project framework for Emacs" tar ((:commit . "13e176ee69851403bec6471c5cceed17b7912b6f") (:authors ("Vietor Liu" . "vietor.liu@gmail.com")) (:maintainers ("Vietor Liu" . "vietor.liu@gmail.com")) (:maintainer "Vietor Liu" . "vietor.liu@gmail.com") (:keywords "environment" "project") (:url . "https://github.com/vietor/aproject"))])
- (apropospriate-theme . [(20230507 545) nil "A colorful, low-contrast, light & dark theme set for Emacs with a fun name." tar ((:commit . "9fd52d4b0dec6e805097e7f216db47dc37bc3abc") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "http://github.com/waymondo/apropospriate-theme"))])
- (apt-sources-list . [(20180527 1241) ((emacs (24 4))) "Mode for editing APT source.list files" single ((:commit . "44112833b3fa7f4d7e43708e5996782e22bb2fa3") (:authors ("Dr. Rafael Sepúlveda" . "drs@gnulinux.org.mx")) (:maintainers ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com") (:url . "https://git.korewanetadesu.com/apt-sources-list.git"))])
- (aqi . [(20200215 1334) ((emacs (25 1)) (request (0 3)) (let-alist (0 0))) "Air quality data from the World Air Quality Index" single ((:commit . "265ab11044b527ca70762fc5d633227001dd4da6") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "air quality" "aqi" "pollution" "weather" "data") (:url . "https://github.com/zzkt/aqi"))])
- (arch-packer . [(20170730 1321) ((emacs (25 1)) (s (1 11 0)) (async (1 9 2)) (dash (2 12 0))) "Arch Linux package management frontend" single ((:commit . "940e96f7d357c6570b675a0f942181c787f1bfd7") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainers ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainer "Fritz Stelzer" . "brotzeitmacher@gmail.com") (:url . "https://github.com/brotzeitmacher/arch-packer"))])
- (archive-phar . [(20221009 2129) ((emacs (28 1)) (php-runtime (0 2)) (datetime-format (0 0 1))) "Phar file support for archive-mode" single ((:commit . "0bda3e338446d06dbe9d8c8837dee746de48632f") (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "files") (:url . "https://github.com/emacs-php/archive-phar.el"))])
- (archive-region . [(20200316 1425) ((emacs (24 4))) "Move region to archive file instead of killing" single ((:commit . "53cd2d96ea7c33f320353982b36854f25c900c2e") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "languages") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/archive-region.el"))])
- (archive-rpm . [(20220527 632) ((emacs (24 4))) "RPM and CPIO support for archive-mode" tar ((:commit . "cb48fee04cb0cbb26f760a3b95649f7dac78c6ec") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com") (:keywords "files"))])
- (arduino-cli-mode . [(20210511 653) ((emacs (25 1))) "Arduino-CLI command wrapper" single ((:commit . "9ff2c47a3b56cbffd41a62376f7c2ff16ccbf4e0") (:authors ("Love Lagerkvist")) (:maintainers ("Love Lagerkvist")) (:maintainer "Love Lagerkvist") (:keywords "processes" "tools") (:url . "https://github.com/motform/arduino-cli-mode"))])
- (arduino-mode . [(20220210 1355) ((emacs (25 1)) (spinner (1 7 3))) "Major mode for editing Arduino code" tar ((:commit . "652c6a328fa8f2db06534d5f231c6b6933be3edc") (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "languages" "arduino") (:url . "https://repo.or.cz/arduino-mode.git"))])
- (aria2 . [(20230314 2131) ((emacs (25 1))) "Control aria2c commandline tool from Emacs" single ((:commit . "1f2cbe624f3a4e0109b5dc123bb4bbed496b15a7") (:authors ("Åukasz Gruner" . "lukasz@gruner.lu")) (:maintainers ("Åukasz Gruner" . "lukasz@gruner.lu")) (:maintainer "Åukasz Gruner" . "lukasz@gruner.lu") (:keywords "download" "bittorrent" "aria2") (:url . "https://bitbucket.org/ukaszg/aria2-mode"))])
- (ariadne . [(20131117 1711) ((bert (0 1))) "Ariadne plugin for Emacs" single ((:commit . "6fe401c7f996bcbc2f685e7971324c6f5e5eaf15") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainer "Oleksandr Manzyuk" . "manzyuk@gmail.com") (:keywords "comm" "convenience" "processes"))])
- (arjen-grey-theme . [(20170522 2047) nil "A soothing dark grey theme" single ((:commit . "4cd0be72b65d42390e2105cfdaa408a1ead8d8d1") (:authors ("Arjen Wiersma" . "arjen@wiersma.org")) (:maintainers ("Arjen Wiersma" . "arjen@wiersma.org")) (:maintainer "Arjen Wiersma" . "arjen@wiersma.org") (:keywords "faces") (:url . "https://github.com/credmp/arjen-grey"))])
- (artbollocks-mode . [(20170524 422) nil "Improve your writing (especially about art)" single ((:commit . "4a907e470bf345b88c3802c1241ce2b8cf4123ee") (:authors ("Rob Myers <rob@robmyers.org>, Sacha Chua" . "sacha@sachachua.com")) (:maintainers ("Rob Myers <rob@robmyers.org>, Sacha Chua" . "sacha@sachachua.com")) (:maintainer "Rob Myers <rob@robmyers.org>, Sacha Chua" . "sacha@sachachua.com") (:url . "https://github.com/sachac/artbollocks-mode"))])
- (arview . [(20160419 2109) nil "extract and view archives in the temporary directory" single ((:commit . "5437b4221b64b238c273a651d4792c577dba6d45") (:authors ("Andrey Fainer" . "fandrey@gmx.com")) (:maintainers ("Andrey Fainer" . "fandrey@gmx.com")) (:maintainer "Andrey Fainer" . "fandrey@gmx.com") (:keywords "files") (:url . "https://github.com/afainer/arview"))])
- (arxiv-citation . [(20220816 542) ((emacs (25 1)) (dash (2 19 1)) (s (1 12 0))) "Utility functions for dealing with arXiv papers" single ((:commit . "e41d5b90a00b79849cd2fd405b2af75a53b15abe") (:authors ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainers ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainer "Tony Zorman" . "soliditsallgood@mailbox.org") (:keywords "convenience") (:url . "https://gitlab.com/slotThe/arXiv-citation"))])
- (arxiv-mode . [(20230121 842) ((emacs (27 1)) (hydra (0))) "Read and search for articles on arXiv.org" tar ((:commit . "06000ceb5a12b0f95bc7e89de03685f7ada4e8c3") (:authors ("Alex Chen (fizban007)" . "fizban007@gmail.com") ("Simon Lin (Simon-Lin)" . "n.sibetz@gmail.com")) (:maintainers ("Alex Chen (fizban007)" . "fizban007@gmail.com")) (:maintainer "Alex Chen (fizban007)" . "fizban007@gmail.com") (:keywords "bib" "convenience" "hypermedia") (:url . "https://github.com/fizban007/arxiv-mode"))])
- (ascii-table . [(20221230 1244) ((emacs (24 3))) "Interactive ASCII table" single ((:commit . "c71f54b85edc6bd42abdc79dd82248958c8a24f9") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "help" "tools") (:url . "https://github.com/lassik/emacs-ascii-table"))])
- (asilea . [(20150105 1525) ((emacs (24)) (cl-lib (0 5))) "Find best compiler options using simulated annealing" single ((:commit . "2aab1cc63b64ef08d12e84fd7ba5c94065f6039f") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/asilea"))])
- (asm-blox . [(20221220 1716) ((emacs (26 1)) (yaml (0 5 1))) "Programming game involving WAT" tar ((:commit . "5517efb1e186139197a2d348b7339a72dd379af8") (:authors ("Zachary Romero")) (:maintainers ("Zachary Romero")) (:maintainer "Zachary Romero") (:keywords "games") (:url . "https://github.com/zkry/asm-blox"))])
- (asn1-mode . [(20170729 226) ((emacs (24 3)) (s (1 10 0))) "ASN.1/GDMO mode for GNU Emacs" single ((:commit . "d5d4a8259daf708411699bcea85d322f18beb972") (:authors ("Taichi Kawabata <kawabata.taichi_at_gmail.com>")) (:maintainers ("Taichi Kawabata <kawabata.taichi_at_gmail.com>")) (:maintainer "Taichi Kawabata <kawabata.taichi_at_gmail.com>") (:keywords "languages" "processes" "tools") (:url . "https://github.com/kawabata/asn1-mode/"))])
- (assess . [(20220719 1904) ((emacs (24 4)) (m-buffer (0 15))) "Test support functions" tar ((:commit . "44083d94feb45d3636f7ee6c55e0ef6bbb32b938") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk"))])
- (astyle . [(20200328 616) ((emacs (24 4)) (reformatter (0 3))) "Astyle formatter functions" single ((:commit . "04ff2941f08c4b731fe6a18ee1697436d1ca1cc0") (:authors ("Petter Storvik")) (:maintainers ("Petter Storvik")) (:maintainer "Petter Storvik") (:keywords "astyle" "c" "c++" "cpp" "reformatter") (:url . "https://github.com/storvik/emacs-astyle"))])
- (asx . [(20191024 1100) ((emacs (26 1))) "Ask StackExchange/StackOverflow" single ((:commit . "5ca12cc51bb02b5926adf9a7976ba9ca08a1ea21") (:authors ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainers ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainer "Alex Ragone" . "ragonedk@gmail.com") (:keywords "convenience") (:url . "https://github.com/ragone/asx"))])
- (async . [(20230323 643) ((emacs (24 4))) "Asynchronous processing in Emacs" tar ((:commit . "34feabe1142863a2c96f75afda1a2ae4aa0813f6") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:keywords "async") (:url . "https://github.com/jwiegley/emacs-async"))])
- (async-await . [(20220827 437) ((emacs (25 1)) (promise (1 1)) (iter2 (0 9 10))) "Async/Await" single ((:commit . "e0d15e8057ed7520100bc50c5552278292ebcb07") (:authors ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainers ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainer "chuntaro" . "chuntaro@sakura-games.jp") (:keywords "async" "await" "convenience") (:url . "https://github.com/chuntaro/emacs-async-await"))])
- (async-backup . [(20220131 1438) ((emacs (24 4))) "Backup on each save without freezing Emacs" single ((:commit . "6ddb39fe77d66cdef48b87cb0d0554ad7d132308") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de") (:keywords "files") (:url . "https://tildegit.org/contrapunctus/async-backup"))])
- (async-job-queue . [(20230427 2122) ((async (1 4)) (emacs (25 1)) (queue (0 2))) "Dispatch queue of async jobs to a fixed number of slots" single ((:commit . "eeafcce7f960305666b2a51aec55cc6333f6af1b") (:authors ("Onnie Winebarger")) (:maintainers ("Onnie Winebarger")) (:maintainer "Onnie Winebarger") (:keywords "extensions" "lisp") (:url . "https://github.com/owinebar/emacs-async-job-queue"))])
- (atcoder-tools . [(20200109 1236) ((emacs (26)) (f (0 20)) (s (1 12))) "An atcoder-tools client" single ((:commit . "cfe61ed18ea9b3b1bfb6f9e7d80a47599680cd1f") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com") (:keywords "extensions" "tools") (:url . "https://github.com/sei40kr/atcoder-tools"))])
- (atl-long-lines . [(20220704 644) ((emacs (24 3))) "Turn off truncate-lines when the line is long" single ((:commit . "4b4abd242e9a8203dc70130b4ca65f809bd41ab7") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "truncate" "lines" "auto" "long") (:url . "https://github.com/jcs-elpa/atl-long-lines"))])
- (atl-markup . [(20220704 644) ((emacs (24 3))) "Automatically truncate lines for markup languages" single ((:commit . "8604cd6b0a2473595988d47f41623d2cd06d0a7b") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "automatic" "truncate" "visual" "lines") (:url . "https://github.com/jcs-elpa/atl-markup"))])
- (atom-dark-theme . [(20220114 1902) nil "An Emacs port of the Atom Dark theme from Atom.io." single ((:commit . "2b3c7ad42bbcab3214a131f8957b92e717b36ad3") (:authors ("Jeremy Whitlock" . "jwhitlock@apache.org")) (:maintainers ("Jeremy Whitlock" . "jwhitlock@apache.org")) (:maintainer "Jeremy Whitlock" . "jwhitlock@apache.org") (:keywords "themes" "atom" "dark") (:url . "https://github.com/whitlockjc/atom-dark-theme-emacs"))])
- (atom-one-dark-theme . [(20210128 1640) nil "Atom One Dark color theme" single ((:commit . "b34b62e85593812b55ee552a1cb0eecfb04767bb") (:authors ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainers ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainer "Jonathan Chu" . "me@jonathanchu.is") (:url . "https://github.com/jonathanchu/atom-one-dark-theme"))])
- (atomic-chrome . [(20230304 112) ((emacs (24 4)) (let-alist (1 0 4)) (websocket (1 4))) "Edit Chrome text area with Emacs using Atomic Chrome" single ((:commit . "f1b077be7e414f457191d72dcf5eedb4371f9309") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainers ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com") (:keywords "chrome" "edit" "textarea") (:url . "https://github.com/alpha22jp/atomic-chrome"))])
- (attrap . [(20230310 1555) ((dash (2 12 0)) (emacs (25 1)) (f (0 19 0)) (s (1 11 0))) "ATtempt To Repair At Point" single ((:commit . "2df105d0bd23a468e75fad0fed7d39013328526d") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:keywords "programming" "tools") (:url . "https://github.com/jyp/attrap"))])
- (auctex-cluttex . [(20220730 1100) ((emacs (24 4)) (auctex (13 1))) "ClutTeX support for AUCTeX" single ((:commit . "f4012ac86e612eac7662c62afd946e59b3b405bd") (:authors ("Masahiro Nakamura" . "tsuucat@icloud.com")) (:maintainers ("Masahiro Nakamura" . "tsuucat@icloud.com")) (:maintainer "Masahiro Nakamura" . "tsuucat@icloud.com") (:keywords "tex") (:url . "https://github.com/tsuu32/auctex-cluttex"))])
- (auctex-latexmk . [(20221025 1219) ((auctex (11 87))) "Add LatexMk support to AUCTeX" single ((:commit . "b00a95e6b34c94987fda5a57c20cfe2f064b1c7a") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "tex") (:url . "https://github.com/tom-tan/auctex-latexmk/"))])
- (auctex-lua . [(20151121 1610) ((auctex (11 86)) (lua-mode (20130419))) "Lua editing support for AUCTeX" single ((:commit . "799cd8ac10c96991bb63d9aa60528ae5d8c786b5") (:authors ("Sean Allred" . "seallred@smcm.edu")) (:maintainers ("Sean Allred" . "seallred@smcm.edu")) (:maintainer "Sean Allred" . "seallred@smcm.edu") (:keywords "latex" "lua") (:url . "http://github.com/vermiculus/auctex-lua"))])
- (audacious . [(20210917 51) ((helm (3 6 2)) (emacs (24 4))) "Emacs interface to control audacious" single ((:commit . "65c37f12a5c774a0ae434beee27ff7737006dd2f") (:authors ("Hitoshi Uchida" . "hitoshi.uchida@gmail.com")) (:maintainers ("Hitoshi Uchida" . "hitoshi.uchida@gmail.com")) (:maintainer "Hitoshi Uchida" . "hitoshi.uchida@gmail.com") (:url . "https://github.com/shishimaru/audacious.el"))])
- (audio-notes-mode . [(20170611 2159) nil "Play audio notes synced from somewhere else." single ((:commit . "fa38350829c7e97257efc746a010471d33748a68") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "hypermedia" "convenience") (:url . "http://github.com/Bruce-Connor/audio-notes-mode"))])
- (aurel . [(20170114 937) ((emacs (24 3)) (bui (1 1 0)) (dash (2 11 0))) "Search, get info, vote for and download AUR packages" single ((:commit . "fc7ad208f43f8525f84a18941c9b55f956df8961") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "tools") (:url . "https://github.com/alezost/aurel"))])
- (aurora-config-mode . [(20180216 2302) nil "Major mode for Apache Aurora configuration files" single ((:commit . "8273ec7937a21b469b9dbb6c11714255b890f410") (:authors ("Berk D. Demir" . "bdd@mindcast.org")) (:maintainers ("Berk D. Demir" . "bdd@mindcast.org")) (:maintainer "Berk D. Demir" . "bdd@mindcast.org") (:keywords "languages" "configuration") (:url . "https://github.com/bdd/aurora-config.el"))])
- (auth-source-gopass . [(20230109 1213) ((emacs (24 4))) "Gopass integration for auth-source" single ((:commit . "6f7f0cc0d682f66d11f7fac4fa5c1e79904232da") (:authors ("Markus M. May" . "mmay@javafreedom.org")) (:maintainers ("Markus M. May" . "mmay@javafreedom.org")) (:maintainer "Markus M. May" . "mmay@javafreedom.org") (:url . "https://github.com/"))])
- (auth-source-keytar . [(20221231 1654) ((emacs (24 4)) (keytar (0 1 2)) (s (1 12 0))) "Integrate auth-source with keytar" single ((:commit . "8fcd935ee131174a1ed7f132614257411ed441bc") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "keytar" "password" "credential" "secret" "security") (:url . "https://github.com/emacs-grammarly/auth-source-keytar"))])
- (auth-source-kwallet . [(20210605 1032) ((emacs (24 4))) "KWallet integration for auth-source" single ((:commit . "57335d80876a526adb63a5ab57b83f55e8d79953") (:authors ("Ekaterina Vaartis" . "vaartis@kotobank.ch")) (:maintainers ("Ekaterina Vaartis" . "vaartis@kotobank.ch")) (:maintainer "Ekaterina Vaartis" . "vaartis@kotobank.ch") (:url . "https://github.com/vaartis/auth-source-kwallet"))])
- (auth-source-xoauth2 . [(20220804 2219) ((emacs (26 1))) "Integrate auth-source with XOAUTH2" single ((:commit . "99a03f8ce835412943d311b2746e77fcf5a1b500") (:authors ("Cesar Crusius" . "ccrusius@google.com")) (:maintainers ("Cesar Crusius" . "ccrusius@google.com")) (:maintainer "Cesar Crusius" . "ccrusius@google.com") (:url . "https://github.com/ccrusius/auth-source-xoauth2"))])
- (auto-async-byte-compile . [(20160916 454) nil "Automatically byte-compile when saved" single ((:commit . "8681e74ddb8481789c5dbb3cafabb327db4c4484") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "lisp" "convenience") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/auto-async-byte-compile.el"))])
- (auto-auto-indent . [(20131106 1903) ((es-lib (0 1)) (cl-lib (1 0))) "Indents code as you type" single ((:commit . "0139378577f936d34b20276af6f022fb457af490") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/auto-auto-indent"))])
- (auto-compile . [(20230312 1636) ((emacs (25 1))) "Automatically compile Emacs Lisp libraries" single ((:commit . "cdb60240000aff141fbe26f1487fbfe499ff64dc") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "compile" "convenience" "lisp") (:url . "https://github.com/emacscollective/auto-compile"))])
- (auto-complete . [(20221231 1633) ((popup (0 5 0)) (cl-lib (0 5))) "Auto Completion for GNU Emacs" tar ((:commit . "59c11c453bfa0794302848a004d1be3b1684f17b") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com") (:keywords "completion" "convenience") (:url . "https://github.com/auto-complete/auto-complete"))])
- (auto-complete-auctex . [(20140223 1758) ((yasnippet (0 6 1)) (auto-complete (1 4))) "auto-completion for auctex" single ((:commit . "855633f668bcc4b9408396742a7cb84e0c4a2f77") (:authors ("Christopher Monsanto" . "chris@monsan.to")) (:maintainers ("Christopher Monsanto" . "chris@monsan.to")) (:maintainer "Christopher Monsanto" . "chris@monsan.to"))])
- (auto-complete-c-headers . [(20150912 323) ((auto-complete (1 4))) "An auto-complete source for C/C++ header files" single ((:commit . "52fef720c6f274ad8de52bef39a343421006c511") (:authors ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainers ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainer "Masafumi Oyamada" . "stillpedant@gmail.com") (:keywords "c"))])
- (auto-complete-chunk . [(20140225 946) ((auto-complete (1 4))) "Auto-completion for dot.separated.words." single ((:commit . "a9aa77ffb84a1037984a7ce4dda25074272f13fe") (:authors ("ARAKAKI, Takafumi")) (:maintainers ("ARAKAKI, Takafumi")) (:maintainer "ARAKAKI, Takafumi") (:url . "https://github.com/tkf/auto-complete-chunk"))])
- (auto-complete-clang . [(20140409 752) ((auto-complete (1 3 1))) "Auto Completion source for clang for GNU Emacs" single ((:commit . "a195db1d0593b4fb97efe50885e12aa6764d998c") (:authors ("Brian Jiang" . "brianjcj@gmail.com")) (:maintainers ("Brian Jiang" . "brianjcj@gmail.com")) (:maintainer "Brian Jiang" . "brianjcj@gmail.com") (:keywords "completion" "convenience") (:url . "https://github.com/brianjcj/auto-complete-clang"))])
- (auto-complete-clang-async . [(20130526 1527) nil "Auto Completion source for clang for GNU Emacs" single ((:commit . "a5114e3477793ccb9420acc5cd6a1cb26be65964") (:keywords "completion" "convenience"))])
- (auto-complete-distel . [(20180827 1344) ((auto-complete (1 4)) (distel-completion-lib (1 0 0))) "Erlang/distel completion backend for auto-complete-mode" single ((:commit . "acc4c0a5521904203d797fe96b08e5fae4233c7e") (:authors ("Sebastian Weddmark Olsson")) (:maintainers ("Sebastian Weddmark Olsson")) (:maintainer "Sebastian Weddmark Olsson") (:keywords "erlang" "distel" "auto-complete") (:url . "github.com/sebastiw/distel-completion"))])
- (auto-complete-exuberant-ctags . [(20140320 724) ((auto-complete (1 4 0))) "Exuberant ctags auto-complete.el source" single ((:commit . "ff6121ff8b71beb5aa606d28fd389c484ed49765") (:authors ("Kenichirou Oyama" . "k1lowxb@gmail.com")) (:maintainers ("Kenichirou Oyama" . "k1lowxb@gmail.com")) (:maintainer "Kenichirou Oyama" . "k1lowxb@gmail.com") (:keywords "anto-complete" "exuberant ctags") (:url . "http://code.101000lab.org"))])
- (auto-complete-nxml . [(20140221 458) ((auto-complete (1 4))) "do completion by auto-complete.el on nXML-mode" single ((:commit . "ac7b09a23e45f9bd02affb31847263de4180163a") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "completion" "html" "xml") (:url . "https://github.com/aki2o/auto-complete-nxml"))])
- (auto-complete-pcmp . [(20140303 255) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 1))) "Provide auto-complete sources using pcomplete results" single ((:commit . "2595d3dab1ef3549271ca922f212928e9d830eec") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "completion") (:url . "https://github.com/aki2o/auto-complete-pcmp"))])
- (auto-complete-rst . [(20140225 944) ((auto-complete (1 4))) "Auto-complete extension for ReST and Sphinx" tar ((:commit . "4803ce41a96224e6fa54e6741a5b5f40ebed7351") (:authors ("ARAKAKI, Takafumi")) (:maintainers ("ARAKAKI, Takafumi")) (:maintainer "ARAKAKI, Takafumi") (:url . "https://github.com/tkf/auto-complete-rst"))])
- (auto-complete-sage . [(20160514 751) ((auto-complete (1 5 1)) (sage-shell-mode (0 1 0))) "An auto-complete source for sage-shell-mode." single ((:commit . "51b8e3905196d266e1f8aa47881189833151b398") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainers ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com") (:keywords "sage" "math" "auto-complete") (:url . "https://github.com/stakemori/auto-complete-sage"))])
- (auto-dark . [(20230307 17) ((emacs (24 4))) "Automatically sets the dark-mode theme based on macOS/Linux/Windows status" single ((:commit . "dcb5b4e6da8553c43b8ad7aff51de477980e23d8") (:authors ("Rahul M. Juliato") ("Tim Harper <timcharper at gmail dot com>") ("Vincent Zhang" . "seagle0128@gmail.com") ("Jonathan Arnett" . "jonathan.arnett@protonmail.com")) (:maintainers ("Rahul M. Juliato")) (:maintainer "Rahul M. Juliato") (:keywords "macos" "windows" "linux" "themes" "tools" "faces") (:url . "https://github.com/LionyxML/auto-dark-emacs"))])
- (auto-dictionary . [(20150410 1610) nil "automatic dictionary switcher for flyspell" single ((:commit . "b364e08009fe0062cf0927d8a0582fad5a12b8e7") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "wp") (:url . "http://nschum.de/src/emacs/auto-dictionary/"))])
- (auto-dim-other-buffers . [(20220209 2101) nil "Makes windows without focus less prominent" single ((:commit . "33b5f88b799a17947c266b04ad59462c5aeb4ed7") (:authors ("Michal Nazarewicz" . "mina86@mina86.com")) (:maintainers ("Michal Nazarewicz" . "mina86@mina86.com")) (:maintainer "Michal Nazarewicz" . "mina86@mina86.com") (:url . "https://github.com/mina86/auto-dim-other-buffers.el"))])
- (auto-highlight-symbol . [(20221231 1631) ((emacs (26 1)) (ht (2 3))) "Automatic highlighting current symbol minor mode" single ((:commit . "ece5e2c722efa5c9ea32a809b484afc222ebebe5") (:authors ("Mitsuo Saito" . "arch320@NOSPAM.gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "highlight" "face" "match" "convenience") (:url . "http://github.com/jcs-elpa/auto-highlight-symbol"))])
- (auto-indent-mode . [(20211029 11) nil "Auto indent Minor mode" tar ((:commit . "664006b67329a8e27330541547f8c2187dab947c") (:authors ("Matthew L. Fidler, Le Wang & Others")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "auto" "indentation") (:url . "https://github.com/mlf176f2/auto-indent-mode.el/"))])
- (auto-minor-mode . [(20180527 1123) ((emacs (24 4))) "Enable minor modes by file name and contents" single ((:commit . "c62f4e04c7b73835c399f0348bea0ade2720bcbb") (:authors ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainers ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com") (:keywords "convenience") (:url . "https://github.com/joewreschnig/auto-minor-mode"))])
- (auto-org-md . [(20180213 2343) ((emacs (24 4))) "export a markdown file automatically when you save an org-file" single ((:commit . "9318338bdb7fe8bd698d88f3af89b2d6413efdd2") (:authors ("jamcha" . "jamcha.aa@gmail.com")) (:maintainers ("jamcha" . "jamcha.aa@gmail.com")) (:maintainer "jamcha" . "jamcha.aa@gmail.com") (:keywords "org" "markdown") (:url . "https://github.com/jamcha-aa/auto-org-md"))])
- (auto-package-update . [(20211108 2025) ((emacs (24 4)) (dash (2 1 0))) "Automatically update Emacs packages." single ((:commit . "ad95435fefe2bb501d1d787b08272f9c1b7df488") (:authors ("Renan Ranelli")) (:maintainers ("Renan Ranelli")) (:maintainer "Renan Ranelli") (:keywords "package" "update") (:url . "http://github.com/rranelli/auto-package-update.el"))])
- (auto-pause . [(20160426 1216) ((emacs (24 4))) "Run processes which will be paused when Emacs is idle" single ((:commit . "a4d778de774ca3895542cb559a953e0d98657338") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "menu") (:url . "https://github.com/lujun9972/auto-pause"))])
- (auto-read-only . [(20200827 1754) ((emacs (25 1)) (cl-lib (0 5))) "Automatically make the buffer to read-only" single ((:commit . "db209bf5b7f76f4c3dc4d0892fc6a24430779f29") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "files" "convenience") (:url . "https://github.com/zonuexe/auto-read-only.el"))])
- (auto-rename-tag . [(20220704 639) ((emacs (24 4))) "Automatically rename paired HTML/XML tag" single ((:commit . "58ef595757350f4d8c1cea30d6902b26afaf8743") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "auto-complete" "html" "rename" "tag" "xml") (:url . "https://github.com/jcs-elpa/auto-rename-tag"))])
- (auto-save-buffers-enhanced . [(20161109 710) nil "Automatically save buffers in a decent way" single ((:commit . "461e8c816c1b7c650be5f209078b381fe55da8c6") (:authors ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainers ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainer "Kentaro Kuribayashi" . "kentarok@gmail.com"))])
- (auto-shell-command . [(20180817 1502) ((deferred (20130312)) (popwin (20130329))) "Run the shell command asynchronously that you specified when you save the file." single ((:commit . "a8f9213e3c773b5687b81881240e6e648f2f56ba") (:authors ("ongaeshi")) (:maintainers ("ongaeshi")) (:maintainer "ongaeshi") (:keywords "shell" "save" "async" "deferred" "auto"))])
- (auto-sudoedit . [(20230323 650) ((emacs (26 1)) (f (0 19 0))) "Auto sudo edit by tramp" single ((:commit . "7ee72f31e762e225595e330c6108f3a69dbb0187") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainers ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net") (:url . "https://github.com/ncaq/auto-sudoedit"))])
- (auto-virtualenv . [(20220712 1612) ((cl-lib (0 5)) (pyvenv (1 9)) (s (1 10 0))) "Auto activate python virtualenvs" single ((:commit . "1e58a878984dbd2c91b4f128ded03fd954336907") (:authors ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainers ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com") (:keywords "python" "virtualenv" "tools") (:url . "http://github.com/marcwebbie/auto-virtualenv"))])
- (auto-virtualenvwrapper . [(20230317 1313) ((cl-lib (1 0)) (s (1 13 0)) (virtualenvwrapper (0))) "Lightweight auto activate python virtualenvs" single ((:commit . "8cc2616af46d7e26c1d9ecea5fffd8974e5b1acb") (:authors ("Marcwebbie" . "marcwebbie@gmail.com") ("Robert Zaremba" . "robert-zaremba@scale-it.pl")) (:maintainers ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com") (:keywords "python" "virtualenv" "tools"))])
- (auto-yasnippet . [(20230208 331) ((yasnippet (0 14 0)) (emacs (25 1))) "Quickly create disposable yasnippets" single ((:commit . "6a9e406d0d7f9dfd6dff7647f358cb05a0b1637e") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com") ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/abo-abo/auto-yasnippet"))])
- (autobookmarks . [(20220509 1712) ((dash (2 10 0)) (cl-lib (0 5))) "Save recently visited files and buffers" single ((:commit . "8acd6f182181e23257e01c1b5cf90b872507a74d") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (autobuild . [(20230428 2118) ((cl-lib (0 3)) (emacs (26 1))) "Define and execute build rules and compilation pipelines" single ((:commit . "c9ed2424afebba8fe72af85b10e8890ca277fe4a") (:authors ("Ernesto Alfonso")) (:maintainers (nil . "(concat \"erjoalgo\" \"@\" \"gmail\" \".com\")")) (:maintainer nil . "(concat \"erjoalgo\" \"@\" \"gmail\" \".com\")") (:keywords "compile" "build" "pipeline" "autobuild" "extensions" "processes" "tools") (:url . "https://github.com/erjoalgo/autobuild"))])
- (autodisass-java-bytecode . [(20211005 1920) nil "Automatically disassemble Java bytecode" tar ((:commit . "9eaddd63645e64825b2d07805999c5a645248c53") (:authors ("George Balatsouras <gbalats(at)gmail(dot)com>")) (:maintainer "George Balatsouras <gbalats(at)gmail(dot)com>") (:keywords "convenience" "data" "files"))])
- (autodisass-llvm-bitcode . [(20150411 125) nil "Automatically disassemble LLVM bitcode" tar ((:commit . "14bb1bfe2be3b04d6e0c87a7a9d1e88ce15506d0") (:authors ("George Balatsouras <gbalats(at)gmail(dot)com>")) (:maintainer "George Balatsouras <gbalats(at)gmail(dot)com>") (:keywords "convenience" "data" "files"))])
- (autotetris-mode . [(20141114 1646) ((cl-lib (0 5))) "automatically play tetris" single ((:commit . "7d348d33829bc89ddbd2b4d5cfe5073c3b0cbaaa") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/autotetris-mode"))])
- (autothemer . [(20230414 1419) ((dash (2 10 0)) (emacs (26 1))) "Conveniently define themes" single ((:commit . "8f72afc6dba5ad7cc3a201a084fd20571f945d2e") (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/autothemer"))])
- (autumn-light-theme . [(20150515 1447) nil "A light color theme with muted, autumnal colors." single ((:commit . "26a52a79e7fff401af6d24c4365bb4a250c1136a") (:authors ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainers ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainer "Adam Alpern" . "adam.alpern@gmail.com") (:keywords "color" "theme") (:url . "http://github.com/aalpern/emacs-color-theme-autumn-light"))])
- (avandu . [(20221106 834) nil "Gateway to Tiny Tiny RSS" tar ((:commit . "f064cd62f878d945cc2f202cda9a1a82b39d9e22") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:keywords "net"))])
- (avk-emacs-themes . [(20220908 1022) nil "Collection of avk themes" tar ((:commit . "598a2a56601db1f474ed3f34a1cc4fb37921c21a") (:authors ("Alex V. Koval" . "alex@koval.kharkov.ua")) (:maintainer "Alex V. Koval" . "alex@koval.kharkov.ua") (:keywords "theme") (:url . "https://github.com/avkoval/avk-emacs-themes"))])
- (avy . [(20230420 404) ((emacs (24 1)) (cl-lib (0 5))) "Jump to arbitrary positions in visible text and select text quickly." single ((:commit . "be612110cb116a38b8603df367942e2bb3d9bdbe") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "point" "location") (:url . "https://github.com/abo-abo/avy"))])
- (avy-embark-collect . [(20230130 1454) ((emacs (25 1)) (embark (0 9)) (avy (0 5))) "Use avy to jump to Embark Collect entries" single ((:commit . "784ce24a1ad37459041418182af49565cad4974b") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx") (:keywords "convenience") (:url . "https://github.com/oantolin/embark"))])
- (avy-flycheck . [(20160720 1500) ((emacs (24 1)) (flycheck (0 14)) (seq (1 11)) (avy (0 4 0))) "Jump to and fix syntax errors using `flycheck' with `avy' interface" single ((:commit . "5522f3bbbed1801d9278ed696ec0cbba38352985") (:authors ("Xu Ma" . "magicdirac@gmail.com")) (:maintainers ("Xu Ma" . "magicdirac@gmail.com")) (:maintainer "Xu Ma" . "magicdirac@gmail.com") (:keywords "tools" "convenience" "avy" "flycheck") (:url . "https://github.com/magicdirac/avy-flycheck"))])
- (avy-menu . [(20210321 1732) ((emacs (24 3)) (avy (0 4 0))) "Library providing avy-powered popup menu" single ((:commit . "2c5e0c08d6cb27c213a8eda5c7033e3ff2aa9661") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "popup" "menu") (:url . "https://github.com/mrkkrp/avy-menu"))])
- (avy-migemo . [(20180716 1455) ((emacs (24 4)) (avy (0 4 0)) (migemo (1 9))) "avy with migemo" tar ((:commit . "922a6dd82c0bfa316b0fbb56a9d4dd4ffa5707e7") (:authors ("momomo5717")) (:maintainers ("momomo5717")) (:maintainer "momomo5717") (:keywords "avy" "migemo") (:url . "https://github.com/momomo5717/avy-migemo"))])
- (avy-zap . [(20190801 329) ((avy (0 2 0))) "Zap to char using `avy'" single ((:commit . "7c8d1f40e43d03e2f6c1696bfa547526528ce8cb") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/avy-zap"))])
- (aws-ec2 . [(20221011 538) ((emacs (24 4)) (dash (2 12 1)) (tblui (0 1 0))) "Manage AWS EC2 instances" single ((:commit . "7b500097ac3c2addbe1644f78595dc2ea4eb87c4") (:authors ("Yuki Inoue <inouetakahiroki _at_ gmail.com>")) (:maintainers ("Yuki Inoue <inouetakahiroki _at_ gmail.com>")) (:maintainer "Yuki Inoue <inouetakahiroki _at_ gmail.com>") (:url . "https://github.com/Yuki-Inoue/aws.el"))])
- (aws-snippets . [(20191203 1553) ((yasnippet (0 8 0))) "Yasnippets for AWS" tar ((:commit . "557d19a0bc486e0fddb597b2be5087769d9bd47e") (:keywords "snippets"))])
- (awscli-capf . [(20190930 1517) ((emacs (26))) "Completion at point function for the AWS CLI" single ((:commit . "1a75f88f53a2969fe821c31e6857861d0a0c0a5e") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com") (:keywords "tools" "convenience" "abbrev") (:url . "https://github.com/sebasmonia/awscli-capf.git"))])
- (axe . [(20230120 1915) ((emacs (25 1)) (hmac (0 0)) (request (0 3 2)) (s (1 12 0)) (xmlgen (0 5)) (dash (2 17 0)) (mimetypes (1 0))) "AWS Extensions" tar ((:commit . "5168d4f4c33861a071285df34f17fce92137d497") (:authors ("Craig Niles <niles.c at gmail.com>")) (:maintainers ("Craig Niles <niles.c at gmail.com>")) (:maintainer "Craig Niles <niles.c at gmail.com>") (:url . "https://github.com/cniles/axe"))])
- (axiom-environment . [(20220612 1535) ((emacs (24 2))) "An environment for using Axiom/OpenAxiom/FriCAS" tar ((:commit . "01d88daa0c864af9918db5a147fbb5e435dec199") (:authors ("Paul Onions" . "paul.onions@acm.org")) (:maintainers ("Paul Onions" . "paul.onions@acm.org")) (:maintainer "Paul Onions" . "paul.onions@acm.org") (:keywords "axiom" "openaxiom" "fricas"))])
- (ayu-theme . [(20230306 1924) ((emacs (24 1))) "Ayu theme" tar ((:commit . "dc325520c1202463a0f05d4ece1644109830fef4") (:authors ("Tran Anh Vu")) (:maintainers ("Tran Anh Vu")) (:maintainer "Tran Anh Vu") (:keywords "lisp" "theme" "emacs") (:url . "https://github.com/vutran1710/Ayu-Theme-Emacs"))])
- (babel . [(20210612 640) nil "interface to web translation services such as Babelfish" single ((:commit . "946e69c61188bc41793402ac48466d8967ddb43d") (:authors ("Juergen Hoetzel" . "juergen@hoetzel.info") ("Eric Marsden" . "emarsden@laas.fr")) (:maintainers ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainer "Juergen Hoetzel" . "juergen@hoetzel.info") (:keywords "translation" "web") (:url . "http://github.com/juergenhoetzel/babel"))])
- (babel-repl . [(20160504 2201) ((emacs (24))) "Run babel REPL" single ((:commit . "0faa2f6518a2b46236f116ca1736a314f7d9c034") (:authors ("Hung Phan")) (:maintainers ("Hung Phan")) (:maintainer "Hung Phan") (:keywords "babel" "javascript" "es6") (:url . "https://github.com/hung-phan/babel-repl/"))])
- (back-button . [(20220827 1733) ((nav-flash (1 0 0)) (smartrep (0 0 3)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Visual navigation through mark rings" single ((:commit . "f8783c98a7fefc1d0419959c1b462c7dcadce5a8") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "convenience" "navigation" "interface") (:url . "http://github.com/rolandwalker/back-button"))])
- (backlight . [(20210513 129) ((emacs (24 3))) "backlight brightness adjustment on GNU/Linux" single ((:commit . "b6826a60440d8bf440618e3cdafb40158de920e6") (:authors ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com") (:keywords "hardware") (:url . "https://github.com/mschuldt/backlight.el"))])
- (backline . [(20230212 2020) ((emacs (25 1)) (compat (29 1 3 4)) (outline-minor-faces (0 1 2))) "Preserve appearance of outline headings" single ((:commit . "f6c235259052a69b70a1410d06f2f400eeb26a8d") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "outlines") (:url . "https://github.com/tarsius/backline"))])
- (backup-each-save . [(20180227 557) nil "backup each savepoint of a file" single ((:commit . "3c414b9d6b278911c95c5b8b71819e6af6f8a02a") (:authors ("Benjamin Rutt" . "brutt@bloomington.in.us")) (:maintainers ("Conor Nash" . "conor@nashcobusinessservicesllc.com")) (:maintainer "Conor Nash" . "conor@nashcobusinessservicesllc.com"))])
- (backup-walker . [(20130720 1516) nil "quickly traverse all backups of a file" single ((:commit . "934a4128c122972ac32bb9952addf279a60a94da") (:authors ("Le Wang")) (:maintainers ("Le Wang")) (:maintainer "Le Wang") (:keywords "backup") (:url . "https://github.com/lewang/backup-walker"))])
- (backward-forward . [(20161229 550) ((emacs (24 5))) "navigation backwards and forwards across marks" single ((:commit . "58489957a62a0da25dfb5df902624d2548d800b4") (:authors ("Currell Berry" . "currellberry@gmail.com")) (:maintainers ("Currell Berry" . "currellberry@gmail.com")) (:maintainer "Currell Berry" . "currellberry@gmail.com") (:keywords "navigation" "convenience" "backward" "forward") (:url . "https://gitlab.com/vancan1ty/emacs-backward-forward/tree/master"))])
- (badger-theme . [(20140717 232) nil "A dark theme for Emacs 24." single ((:commit . "80fb9f8ace37b2e8807da639f7da499a53ffefd4") (:authors ("Cody Canning" . "cocanning11@gmail.com")) (:maintainers ("Cody Canning" . "cocanning11@gmail.com")) (:maintainer "Cody Canning" . "cocanning11@gmail.com") (:url . "https://github.com/ccann/badger-theme"))])
- (badwolf-theme . [(20161004 715) ((emacs (24))) "Bad Wolf color theme" single ((:commit . "ea01a3d9358e968f75e3ed15dec6a2a96ce3d9a1") (:authors ("bkruczyk" . "bartlomiej.kruczyk@gmail.com")) (:maintainers ("bkruczyk" . "bartlomiej.kruczyk@gmail.com")) (:maintainer "bkruczyk" . "bartlomiej.kruczyk@gmail.com") (:keywords "themes") (:url . "https://github.com/bkruczyk/badwolf-emacs"))])
- (baff . [(20200824 1807) ((emacs (24 3)) (f (0 20 0))) "Create a byte array from a file" single ((:commit . "52a8508e2300ee810ce7806cb78a2b294f2630f2") (:authors ("Dave Footitt" . "dave.footitt@gmail.com")) (:maintainers ("Dave Footitt" . "dave.footitt@gmail.com")) (:maintainer "Dave Footitt" . "dave.footitt@gmail.com") (:keywords "convenience" "usability") (:url . "https://github.com/dave-f/baff/"))])
- (baidu-translate . [(20211130 1235) ((unicode-escape (1 1))) "A plugin using baidu-translate-api" single ((:commit . "16101d5e6ce19bbcc8badf4422a95db457160999") (:authors (nil . "<LiShizhen gsu4017@gmail.com>")) (:maintainers (nil . "<LiShizhen gsu4017@gmail.com>")) (:maintainer nil . "<LiShizhen gsu4017@gmail.com>") (:keywords "docs") (:url . "https://github.com/liShiZhensPi/baidu-translate"))])
- (balanced-windows . [(20190903 1120) ((emacs (25))) "Keep windows balanced" single ((:commit . "1da5354ad8a9235d13928e2ee0863f3642ccdd13") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "convenience") (:url . "https://github.com/wbolster/emacs-balanced-windows"))])
- (banner-comment . [(20190606 1809) ((emacs (24 4))) "For producing banner comments." single ((:commit . "35d3315683d3f97605207691b77e9f447af18fe2") (:authors ("James Ferguson" . "james@faff.org")) (:maintainers ("James Ferguson" . "james@faff.org")) (:maintainer "James Ferguson" . "james@faff.org") (:keywords "convenience") (:url . "https://github.com/WJCFerguson/banner-comment"))])
- (bap-mode . [(20200128 1354) nil "Major-mode for BAP's IR" single ((:commit . "8969679f60db0aa918d35f40d959c0a9c723b111") (:authors ("Thomas Barabosch <http://github/tbarabosch>")) (:maintainers ("Thomas Barabosch" . "thomas.barabosch@fkie.fraunhofer.de")) (:maintainer "Thomas Barabosch" . "thomas.barabosch@fkie.fraunhofer.de") (:keywords "languages") (:url . "https://github.com/fkie-cad/bap-mode"))])
- (bar-cursor . [(20201204 2244) nil "package used to switch block cursor to a bar" single ((:commit . "78f195b6db63459033c4f1c7e7add5d82f3ce424") (:authors ("Joe Casadonte" . "emacs@northbound-train.com")) (:maintainers ("Andrew Johnson" . "andrew@andrewjamesjohnson.com")) (:maintainer "Andrew Johnson" . "andrew@andrewjamesjohnson.com") (:keywords "files") (:url . "https://github.com/ajsquared/bar-cursor"))])
- (bart-mode . [(20190601 1004) ((emacs (24 3))) "Real time BART departures info." single ((:commit . "f70b6c42452e47c0c6b3ebd4c90e555a9bedeec7") (:authors ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com") (:keywords "convenience" "transit") (:url . "https://github.com/mschuldt/bart-mode"))])
- (base16-theme . [(20230502 2156) nil "Collection of themes built on combinations of 16 base colors" tar ((:commit . "111de0722f13e15f406806e43ae1dbc97251912c") (:authors ("Kaleb Elwert" . "belak@coded.io") ("Neil Bhakta")) (:maintainer "Kaleb Elwert" . "belak@coded.io") (:url . "https://github.com/tinted-theming/base16-emacs"))])
- (bash-completion . [(20230315 1918) ((emacs (25 3))) "Bash completion for the shell buffer" single ((:commit . "ae6560fe897ab6fcc0b1c4aac1ac084be5bc632e") (:authors ("Stephane Zermatten" . "szermatt@gmx.net")) (:maintainers ("Stephane Zermatten" . "szermatt@gmail.com")) (:maintainer "Stephane Zermatten" . "szermatt@gmail.com") (:keywords "convenience" "unix") (:url . "http://github.com/szermatt/emacs-bash-completion"))])
- (basic-c-compile . [(20170302 1112) ((cl-lib (0 5)) (f (0 19 0))) "Quickly create a Makefile, compile and run C." single ((:commit . "335e96e19647ad7245fb68cf7e68cf86c5023d23") (:authors ("Nick Spain" . "nicholas.spain96@gmail.com")) (:maintainers ("Nick Spain" . "nicholas.spain96@gmail.com")) (:maintainer "Nick Spain" . "nicholas.spain96@gmail.com") (:keywords "c" "makefile" "compilation" "convenience") (:url . "https://github.com/nick96/basic-c-compile"))])
- (basic-ide . [(20230118 1040) ((emacs (25)) (basic-mode (0 4 2)) (company (0 9 12)) (flycheck (0 22)) (dash (2 12 0)) (f (0 17 0))) "BASIC IDE c64" single ((:commit . "e33036f838e61b647927165e81be5d5b855e0518") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net") (:keywords "languages" "basic") (:url . "https://gitlab.com/sasanidas/emacs-c64-basic-ide"))])
- (basic-mode . [(20230401 845) ((seq (2 20)) (emacs (25 1))) "Major mode for editing BASIC code" single ((:commit . "2971591510f08ab1645ed8a238b6ad086750f994") (:authors ("Johan Dykstrom")) (:maintainers ("Johan Dykstrom")) (:maintainer "Johan Dykstrom") (:keywords "basic" "languages") (:url . "https://github.com/dykstrom/basic-mode"))])
- (basic-theme . [(20160817 827) ((emacs (24))) "Minimalistic light color theme" single ((:commit . "9d0fd5f56898a5237c1de3363ad416aeab7f880e") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com") (:keywords "theme" "basic" "minimal" "colors") (:url . "http://github.com/fgeller/basic-theme.el"))])
- (bats-mode . [(20230325 7) nil "Emacs mode for editing and running Bats tests" single ((:commit . "fa88930b1baba101ae6474f289a239a236a7d19f") (:authors ("Doug MacEachern")) (:maintainers ("Doug MacEachern")) (:maintainer "Doug MacEachern") (:keywords "bats" "tests") (:url . "https://github.com/dougm/bats-mode"))])
- (battery-notifier . [(20220705 2030) ((alert (1 3))) "Notify when battery capacity is low" single ((:commit . "b7301d3633afff78609afd45dcf78268f98d52d3") (:authors ("Jason Johnson" . "jason@fullsteamlabs.com")) (:maintainers ("Jason Johnson" . "jason@fullsteamlabs.com")) (:maintainer "Jason Johnson" . "jason@fullsteamlabs.com") (:keywords "hardware" "battery") (:url . "https://github.com/jasonmj/battery-notifier"))])
- (battle-haxe . [(20210219 354) ((emacs (25)) (company (0 9 9)) (helm (3 0)) (async (1 9 3)) (cl-lib (0 5)) (dash (2 18 0)) (s (1 10 0)) (f (0 19 0))) "A Haxe development system, with code completion and more" single ((:commit . "2f32c81dcecfc68fd410cb9d2aca303d6e3028c7") (:authors ("Alon Tzarafi " . "alontzarafi@gmail.com")) (:maintainers ("Alon Tzarafi " . "alontzarafi@gmail.com")) (:maintainer "Alon Tzarafi " . "alontzarafi@gmail.com") (:keywords "programming" "languages" "completion") (:url . "https://github.com/AlonTzarafi/battle-haxe"))])
- (bazel . [(20230417 1342) ((emacs (27 1))) "Bazel support for Emacs" single ((:commit . "4f084ed7988a6d178e0659e16ae0ce60ba3c7ea7") (:keywords "build tools" "languages") (:url . "https://github.com/bazelbuild/emacs-bazel-mode"))])
- (bbcode-mode . [(20190304 2122) ((emacs (24)) (cl-lib (0 5))) "Major mode for phpBB posts (BBCode markup)" single ((:commit . "e16619c80ea21154b4a4ccc2e13d0077e97c9caf") (:authors ("Eric James Michael Ritz" . "lobbyjones@gmail.com")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "bbcode" "languages") (:url . "https://github.com/lassik/emacs-bbcode-mode"))])
- (bbdb . [(20220706 433) ((emacs (24)) (cl-lib (0 5))) "Big Brother DataBase" tar ((:commit . "1b121e94871f5d931c75793257db732ba82fdddb") (:maintainers ("Roland Winkler" . "winkler@gnu.org")) (:maintainer "Roland Winkler" . "winkler@gnu.org"))])
- (bbdb- . [(20140221 2354) ((bbdb (20140123 1541)) (log4e (0 2 0)) (yaxception (0 1))) "provide interface for more easily search/choice than BBDB." single ((:commit . "2839e84c894de2513af41053e80a277a1b483d22") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "bbdb" "news" "mail") (:url . "https://github.com/aki2o/bbdb-"))])
- (bbdb-csv-import . [(20140802 1142) ((pcsv (1 3 3)) (dash (2 5 0)) (bbdb (20140412 1949))) "import csv to bbdb version 3+" single ((:commit . "7739d10ebe1787a72aa74085e9baedd0f4988b00") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainers ("Ian Kelling" . "ian@iankelling.org")) (:maintainer "Ian Kelling" . "ian@iankelling.org") (:keywords "csv" "util" "bbdb") (:url . "https://gitlab.com/iankelling/bbdb-csv-import"))])
- (bbdb-ext . [(20151220 2013) ((bbdb (2 36))) "Extra commands for BBDB" single ((:commit . "fee97b1b3faa83edaea00fbc5ad3cbca5e791a55") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "extensions") (:url . "https://github.com/vapniks/bbdb-ext"))])
- (bbdb-vcard . [(20210325 2208) ((bbdb (3 0))) "vCard import/export for BBDB" tar ((:commit . "113c66115ce68316e209f51ebce56de8dded3606") (:authors ("Bert Burgemeister" . "trebbu@googlemail.com") ("Toke Høiland-Jørgensen") ("Kevin Brubeck Unhammer") ("Steve Purcell") ("Vincent Geddes" . "vincent.geddes@gmail.com")) (:maintainers ("Bert Burgemeister" . "trebbu@googlemail.com")) (:maintainer "Bert Burgemeister" . "trebbu@googlemail.com") (:keywords "data" "calendar" "mail" "news") (:url . "https://github.com/tohojo/bbdb-vcard"))])
- (bbdb2erc . [(20190822 907) ((bbdb (3 0))) "make bbdb show if pal is online with ERC, click i to chat" single ((:commit . "40b89e961762af3e7ade3a1844a9fbcd4084ac65") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "irc" "contacts" "chat" "client" "internet"))])
- (bbww . [(20230502 2239) ((mwim (1 0)) (emacs (24 3))) "Improved word-jumping functions" single ((:commit . "9b4430f757e9c7fc7178541009676af1262c486b") (:authors ("Nathan Nichols")) (:maintainers ("Nathan Nichols")) (:maintainer "Nathan Nichols") (:keywords "convenience" "files") (:url . "http://chud.wtf"))])
- (bbyac . [(20180206 1441) ((browse-kill-ring (1 3)) (cl-lib (0 5))) "Type a little Bit, and Bang! You Are Completed." tar ((:commit . "9f0de9cad13801891ffb590dc09f51ff9a7cb225") (:authors ("Bao Haojun" . "baohaojun@gmail.com")) (:maintainers ("Bao Haojun" . "baohaojun@gmail.com")) (:maintainer "Bao Haojun" . "baohaojun@gmail.com") (:keywords "abbrev") (:url . "https://github.com/baohaojun/bbyac"))])
- (beacon . [(20220730 100) ((emacs (25 1))) "Highlight the cursor whenever the window scrolls" single ((:commit . "85261a928ae0ec3b41e639f05291ffd6bf7c231c") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "convenience") (:url . "https://github.com/Malabarba/beacon"))])
- (beans . [(20221114 1634) ((emacs (24 3))) "Major mode for Beans grammar" single ((:commit . "0d04b79222812aa4978b6486a9ccac461850fe7a") (:url . "https://github.com/TheBlackBeans/emacs-beans"))])
- (bech32 . [(20221210 1154) ((emacs (26 1))) "Bech32 library" single ((:commit . "badbf267fa488df1cb87809ed234ebd67786f2f8") (:authors ("Oscar Najera <https://oscarnajera.com>")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com") (:url . "https://github.com/Titan-C/cardano.el"))])
- (beef-mode . [(20221227 203) ((emacs (24 3))) "A major mode for the Beef programming language" single ((:commit . "20906b41630d74eba56504fbb9fabb79562e0d6e") (:authors ("XXIV")) (:maintainers ("XXIV")) (:maintainer "XXIV") (:keywords "files" "beef") (:url . "https://github.com/thechampagne/beef-mode"))])
- (beeminder . [(20201227 2024) ((emacs (24 3)) (seq (2 16)) (org (7))) "Emacs interface for Beeminder" tar ((:commit . "161d9c94c594614a01cb08219693d9e000af4f69") (:authors ("Phil Newton" . "phil@sodaware.net")) (:maintainers ("Phil Newton" . "phil@sodaware.net")) (:maintainer "Phil Newton" . "phil@sodaware.net") (:keywords "tools" "beeminder") (:url . "http://www.philnewton.net/code/beeminder-el/"))])
- (beginend . [(20230303 754) ((emacs (25 3))) "Redefine M-< and M-> for some modes" single ((:commit . "61f1eb22718fcd9796b47a98702d161ff323a532") (:url . "https://github.com/DamienCassou/beginend"))])
- (belarus-holidays . [(20190102 1343) nil "Belarus holidays whith transfers" single ((:commit . "35a18273e19edc3b4c761030ffbd11116483b83e") (:authors ("Yauhen Makei" . "yauhen.makei@gmail.com")) (:maintainers ("Yauhen Makei" . "yauhen.makei@gmail.com")) (:maintainer "Yauhen Makei" . "yauhen.makei@gmail.com") (:url . "http://bitbucket.org/EugeneMakei/belarus-holidays.el"))])
- (benchmark-init . [(20220414 1612) ((emacs (24 3))) "Benchmarks for require and load calls" tar ((:commit . "02435560415bbadbcf5051fb7042880549170e7e") (:authors ("Steve Purcell")) (:maintainers ("David Holm" . "dholmster@gmail.com")) (:maintainer "David Holm" . "dholmster@gmail.com") (:keywords "convenience" "benchmark") (:url . "https://github.com/dholm/benchmark-init-el"))])
- (benchstat . [(20171014 312) nil "proper benchmarking made simple" single ((:commit . "fee86f521f22ef0f99564903d63e2023b591fc7f") (:authors ("Iskander Sharipov" . "quasilyte@gmail.com")) (:maintainers ("Iskander Sharipov" . "quasilyte@gmail.com")) (:maintainer "Iskander Sharipov" . "quasilyte@gmail.com") (:keywords "lisp") (:url . "https://github.com/Quasilyte/benchstat.el"))])
- (bencoding . [(20200331 1102) ((emacs (25 1))) "Bencoding decoding and encoding" single ((:commit . "409836f2cf4883826600de42519ee9cffeb48a11") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "tools") (:url . "https://github.com/xuchunyang/bencoding.el"))])
- (berrys-theme . [(20191201 1609) ((emacs (24 1))) "A light, clean and elegant theme" single ((:commit . "888a14206b2fb3dc45b5273aeb05075f3e0b5f60") (:authors ("Slava Buzin" . "v8v.buzin@gmail.com")) (:maintainers ("Slava Buzin" . "v8v.buzin@gmail.com")) (:maintainer "Slava Buzin" . "v8v.buzin@gmail.com") (:url . "https://github.com/vbuzin/berrys-theme"))])
- (bert . [(20131117 1014) nil "BERT serialization library for Emacs" single ((:commit . "a3eec6980a725aa4abd2019e4c00246450260490") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainer "Oleksandr Manzyuk" . "manzyuk@gmail.com") (:keywords "comm" "data"))])
- (better-defaults . [(20221125 1725) ((emacs (25 1))) "Fixing weird quirks and poor defaults" single ((:commit . "a45aecec0cf223984bc8649cd1dc81a5004932b4") (:authors ("Phil Hagelberg")) (:maintainers ("Phil Hagelberg")) (:maintainer "Phil Hagelberg") (:keywords "convenience") (:url . "https://github.com/technomancy/better-defaults"))])
- (better-jumper . [(20220110 118) ((emacs (25 1))) "configurable jump list" single ((:commit . "205e7a539d1611dbe50f003ddf52890360f87597") (:authors ("Bryan Gilbert <http://github/gilbertw1>")) (:maintainers ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainer "Bryan Gilbert" . "bryan@bryan.sh") (:keywords "convenience" "jump" "history" "evil") (:url . "https://github.com/gilbertw1/better-jumper"))])
- (better-scroll . [(20221020 430) ((emacs (24 3))) "Improve user experience when scrolling window" single ((:commit . "e7b3196f437f690028aeea414aaf71ca3779c175") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "scrolling" "scroll" "window" "better" "improvement") (:url . "https://github.com/jcs-elpa/better-scroll"))])
- (better-shell . [(20191025 1737) ((emacs (24 4))) "Better shell management" single ((:commit . "70c787b981caeef8c5f8012b170eb7b9f167cd13") (:authors ("Russell Black" . "killdash9@github")) (:maintainers ("Russell Black" . "killdash9@github")) (:maintainer "Russell Black" . "killdash9@github") (:keywords "convenience") (:url . "https://github.com/killdash9/better-shell"))])
- (bf-mode . [(20130403 1442) nil "Browse file persistently on dired" single ((:commit . "7cc4d09aed64d9db6be95646f5f5067de68f8895") (:authors ("isojin")) (:maintainers ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainer "myuhe <yuhei.maeda_at_gmail.com>") (:keywords "convenience") (:url . "https://github.com/emacs-jp/bf-mode"))])
- (bfbuilder . [(20210228 1740) ((cl-lib (0 3)) (emacs (24 4))) "A brainfuck development environment with interactive debugger" single ((:commit . "689f320a9a1326cdeff43b8538e0d739f8519c4b") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.gitub.io/"))])
- (bibclean-format . [(20190302 2017) ((emacs (24 3)) (reformatter (0 3))) "Reformat BibTeX and Scribe using bibclean" single ((:commit . "b4003950a925d1c659bc359ab5e88e4441775d77") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:keywords "languages") (:url . "https://github.com/peterwvj/bibclean-format"))])
- (biblio . [(20230202 1721) ((emacs (24 3)) (biblio-core (0 2))) "Browse and import bibliographic references from CrossRef, arXiv, DBLP, HAL, Dissemin, and doi.org" tar ((:commit . "ee52f6cda82ea6fbc3b400e7b12132595cc0374c") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "bib" "tex" "convenience" "hypermedia") (:url . "https://github.com/cpitclaudel/biblio.el"))])
- (biblio-bibsonomy . [(20190105 1200) ((emacs (24 4)) (biblio-core (0 2))) "Lookup bibliographic entries from Bibsonomy" single ((:commit . "fbdb3ecfcd88c179a2358d7967f7ecafef725835") (:authors ("Andreas Jansson and contributors")) (:maintainers ("Andreas Jansson and contributors")) (:maintainer "Andreas Jansson and contributors") (:keywords "bib" "tex" "bibsonomy") (:url . "http://github.com/andreasjansson/biblio-bibsonomy/"))])
- (biblio-core . [(20230202 1721) ((emacs (24 3)) (let-alist (1 0 4)) (seq (1 11)) (dash (2 12 1))) "A framework for looking up and displaying bibliographic entries" single ((:commit . "ee52f6cda82ea6fbc3b400e7b12132595cc0374c") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "bib" "tex" "convenience" "hypermedia") (:url . "https://github.com/cpitclaudel/biblio.el"))])
- (bibliothek . [(20190124 1828) ((emacs (24 4)) (pdf-tools (0 70)) (a (0 1 0 -3 4))) "Managing a digital library of PDFs" single ((:commit . "b19b37be332bada6b18d4d895edf6ce78ab420c4") (:authors ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainers ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainer "Göktuğ Kayaalp" . "self@gkayaalp.com") (:keywords "tools") (:url . "https://dev.gkayaalp.com/elisp/index.html#bibliothek-el"))])
- (bibretrieve . [(20191124 1855) ((auctex (11 87)) (emacs (24 3))) "Retrieve BibTeX entries from the internet" tar ((:commit . "81dc8e0db3629cc180eafb2bc34b60dcd8980316") (:authors ("Antonio Sartori")) (:maintainers ("Pavel Zorin-Kranich" . "pzorin@uni-bonn.de")) (:maintainer "Pavel Zorin-Kranich" . "pzorin@uni-bonn.de") (:keywords "bibtex" "bibliography" "mathscinet" "arxiv" "zbmath") (:url . "https://github.com/pzorin/bibretrieve"))])
- (bibslurp . [(20151202 2346) ((s (1 6 0)) (dash (1 5 0))) "retrieve BibTeX entries from NASA ADS" single ((:commit . "aeba96368f2a06959e4fe945375ce2a54d34b189") (:keywords "bibliography" "nasa ads") (:url . "https://github.com/mkmcc/bibslurp"))])
- (bibtex-capf . [(20230226 2331) ((emacs (27 1)) (parsebib (3 0)) (org (9 5))) "Completion at point for bibtex --- *- lexical-binding: t -*-" single ((:commit . "7635fec3bc565acafbb6e1bff1cc711844f869ce") (:authors ("Colin McLear")) (:maintainers ("Colin McLear")) (:maintainer "Colin McLear") (:keywords "bibtex" "convenience") (:url . "https://github.com/mclear-tools/bibtex-capf"))])
- (bibtex-completion . [(20221024 857) ((parsebib (1 0)) (s (1 9 0)) (dash (2 6 0)) (f (0 16 2)) (cl-lib (0 5)) (biblio (0 2)) (emacs (26 1))) "A BibTeX backend for completion frameworks" single ((:commit . "78f5931e1cc82e7ae2bcf0508cf31d0d1629a8dd") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de") ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/tmalsburg/helm-bibtex"))])
- (bibtex-utils . [(20190703 2117) nil "Provides utilities for extending BibTeX mode" single ((:commit . "26a8f0909b6adbf545a2b5e57ce7f779bf7a65af") (:authors ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainers ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainer "Tyler Smith" . "tyler@plantarum.ca") (:keywords "bibtex") (:url . "https://github.com/plantarum/bibtex-utils"))])
- (bicycle . [(20230212 2019) ((emacs (25 1)) (compat (29 1 3 4))) "Cycle outline and code visibility" single ((:commit . "20f0637365a9bf0a899a7663b1f8caec609de19a") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "outlines") (:url . "https://github.com/tarsius/bicycle"))])
- (bifocal . [(20200325 539) ((emacs (24 4))) "Split-screen scrolling for comint-mode buffers" single ((:commit . "773a6dde790c4a240e643a9071e4c7bce09d40de") (:keywords "frames" "processes") (:url . "https://github.com/riscy/bifocal-mode"))])
- (binclock . [(20170802 1116) ((cl-lib (0 5))) "Display the current time using a binary clock." single ((:commit . "87042230d7f3fe3e9a77fae0dbab7d8f7e7794ad") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "games" "time" "display") (:url . "https://github.com/davep/binclock.el"))])
- (bind . [(20230503 1914) ((emacs (25 1))) "Bind commands to keys" single ((:commit . "646d979e8834de513eb36adce165050088634100") (:authors ("repelliuss <https://github.com/repelliuss>")) (:maintainers ("repelliuss" . "repelliuss@gmail.com")) (:maintainer "repelliuss" . "repelliuss@gmail.com") (:url . "https://github.com/repelliuss/bind"))])
- (bind-chord . [(20221117 1610) ((emacs (24 3)) (bind-key (1 0)) (key-chord (0 6))) "key-chord binding helper for use-package-chords" single ((:commit . "9090080b15486c3e337be254226efe7e5fde4c99") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:keywords "convenience" "tools" "extensions") (:url . "https://github.com/jwiegley/use-package"))])
- (bind-key . [(20230203 2004) ((emacs (24 3))) "A simple way to manage personal keybindings" single ((:commit . "77945e002f11440eae72d8730d3de218163d551e") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainers ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:keywords "keys" "keybinding" "config" "dotemacs" "extensions") (:url . "https://github.com/jwiegley/use-package"))])
- (bind-map . [(20220108 228) ((emacs (24 3))) "Bind personal keymaps in multiple locations" single ((:commit . "510a24138d8de3b8df0783f1ac493a551fc9bd74") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-bind-map"))])
- (binder . [(20221224 1132) ((emacs (24 4)) (seq (2 20))) "Global minor mode to facilitate multi-file writing projects" tar ((:commit . "828f2fd079769e5a2c50f8998e84d63a9a95e797") (:authors ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainers ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainer "Paul W. Rankin" . "pwr@bydasein.com") (:keywords "files" "outlines" "wp" "text") (:url . "https://github.com/rnkn/binder"))])
- (bing-dict . [(20200216 110) nil "Minimalists' English-Chinese Bing dictionary" tar ((:commit . "1d581aaa9622b34f8fb83af5579fa252aa24cfef") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/bing-dict.el"))])
- (binky-mode . [(20230120 1708) ((emacs (26 3))) "Jump between points like a rabbit" single ((:commit . "04f1132ea1945861da0081cb2ad08076d20cea57") (:authors ("liuyinz" . "liuyinz95@gmail.com")) (:maintainers ("liuyinz" . "liuyinz95@gmail.com")) (:maintainer "liuyinz" . "liuyinz95@gmail.com") (:keywords "convenience") (:url . "https://github.com/liuyinz/binky-mode"))])
- (birds-of-paradise-plus-theme . [(20130419 2129) nil "A brown/orange light-on-dark theme for Emacs 24 (deftheme)." single ((:commit . "bb9f9d4ef7f7872a388ec4eee1253069adcadb6f") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainers ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me") (:keywords "themes") (:url . "https://github.com/jimeh/birds-of-paradise-plus-theme.el"))])
- (bison-mode . [(20210527 717) nil "Major mode for editing bison, yacc and lex files." single ((:commit . "4f2e20394a475931409618c1635e9c9f1cf07d9c") (:authors ("Eric Beuscher" . "beuscher@eecs.tulane.edu")) (:maintainers ("Eric Beuscher" . "beuscher@eecs.tulane.edu")) (:maintainer "Eric Beuscher" . "beuscher@eecs.tulane.edu") (:keywords "bison-mode" "yacc-mode"))])
- (bitbake . [(20220509 1236) ((emacs (24 1)) (dash (2 6 0)) (mmm-mode (0 5 4)) (s (1 10 0))) "Running bitbake from emacs" single ((:commit . "434b088ab8715731d62978264cb934e34c75c4b3") (:authors ("Damien Merenne")) (:maintainers ("Damien Merenne")) (:maintainer "Damien Merenne") (:keywords "convenience") (:url . "https://github.com/canatella/bitbake-el"))])
- (bitbucket . [(20170405 446) ((emacs (24)) (request (0 1 0)) (s (1 9 0))) "Bitbucket API wrapper" tar ((:commit . "db001a9d936e6b5c3cc5d5ec22794e234e0d162d") (:authors ("2017 Tjaart van der Walt" . "tjaart@tjaart.co.za")) (:maintainers ("2017 Tjaart van der Walt" . "tjaart@tjaart.co.za")) (:maintainer "2017 Tjaart van der Walt" . "tjaart@tjaart.co.za") (:keywords "bitbucket") (:url . "http://github.com/tjaartvdwalt/bitbucket.el/"))])
- (bitlbee . [(20151203 0) nil "Help get Bitlbee (http://www.bitlbee.org) up and running." single ((:commit . "f3342da46b0864ae8db4e82b553d9e617b090534"))])
- (bitpack . [(20230417 2032) ((emacs (24 3))) "Bit packing functions" single ((:commit . "38d000646b81ce52fcb90a0747059a15264e112b") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:keywords "c" "comm") (:url . "https://github.com/skeeto/bitpack"))])
- (blackboard-bold-mode . [(20160813 206) ((cl-lib (0 5))) "Easily insert Unicode mathematical double-struck characters" single ((:commit . "5299cb064ba71baa3e331b8560bf8dd38cbbc4ed") (:authors ("Grant Rettke" . "gcr@wisdomandwonder.com")) (:maintainers (nil . "<gcr@wisdomandwonder.com>")) (:maintainer nil . "<gcr@wisdomandwonder.com>") (:keywords "unicode" "double struck" "blackboard bold" "math" "mathematical") (:url . "https://github.com/grettke/blackboard-bold-mode"))])
- (blackboard-theme . [(20161216 656) ((emacs (24))) "TextMate Blackboard Theme" single ((:commit . "d8b984f2541bb86eb4363a2b4c94631e49843d4a") (:authors ("Dong Zheng")) (:maintainers ("Dong Zheng")) (:maintainer "Dong Zheng") (:url . "https://github.com/don9z/blackboard-theme"))])
- (blacken . [(20230224 1336) ((emacs (25 2))) "Reformat python buffers using the \"black\" formatter" single ((:commit . "1e80b970b130d5c33031f2539c89eb2f13da2572") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/blacken"))])
- (blackjack . [(20230507 22) ((emacs (26 2))) "The game of Blackjack" single ((:commit . "f17adacb386d83988b925f5d4cc61375df09443a") (:authors ("Greg Donald" . "gdonald@gmail.com")) (:maintainers ("Greg Donald" . "gdonald@gmail.com")) (:maintainer "Greg Donald" . "gdonald@gmail.com") (:keywords "card" "game" "games" "blackjack" "21") (:url . "https://github.com/gdonald/blackjack-el"))])
- (blackout . [(20220509 2350) ((emacs (26))) "Better mode lighter overriding" single ((:commit . "7707211370f03f03a2f74df15f42ac24a1e99300") (:authors ("Radian LLC" . "contact+blackout@radian.codes")) (:maintainers ("Radian LLC" . "contact+blackout@radian.codes")) (:maintainer "Radian LLC" . "contact+blackout@radian.codes") (:keywords "extensions") (:url . "https://github.com/radian-software/blackout"))])
- (blamer . [(20230424 2112) ((emacs (27 1)) (posframe (1 1 7))) "Show git blame info about current line" single ((:commit . "3d9d12f5a7f31018efdb17a77da8277a3f5da0a6") (:authors ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainers ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainer "Artur Yaroshenko" . "artawower@protonmail.com") (:url . "https://github.com/artawower/blamer.el"))])
- (blgrep . [(20150401 1416) ((clmemo (20140321 715))) "Block grep" tar ((:commit . "605beda210610a5829750a987f5fcebea97af546") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com") (:keywords "tools" "convenience"))])
- (blimp . [(20180903 2240) ((emacs (25)) (eimp (1 4 0))) "Bustling Image Manipulation Package" single ((:commit . "b048b037129b68674b99310bcc08fb96d44fdbb4") (:authors ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainer "Sebastian WÃ¥linder" . "s.walinder@gmail.com") (:keywords "multimedia" "unix") (:url . "https://github.com/walseb/blimp"))])
- (bliss-theme . [(20170808 1307) ((emacs (24 0))) "an Emacs 24 theme based on Bliss (tmTheme)" single ((:commit . "c3cf6d8a666ab26909b7da158f9e94df71a5fbbf") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (blitzmax-mode . [(20211128 2028) ((emacs (24 1))) "A major mode for editing BlitzMax source code" single ((:commit . "080d66c80f8350f3981bb97bc45c91b683cafdc0") (:authors ("Phil Newton")) (:maintainers ("Phil Newton")) (:maintainer "Phil Newton") (:keywords "languages" "blitzmax") (:url . "https://www.sodaware.net/dev/tools/blitzmax-mode/"))])
- (bln-mode . [(20181121 918) nil "binary line navigation minor mode for cursor movement in long lines" single ((:commit . "a601b0bf975dd1432f6552ab6afe3f4f71133b4a") (:authors ("Maarten Grachten")) (:maintainers ("Maarten Grachten")) (:maintainer "Maarten Grachten") (:keywords "motion" "location" "cursor" "convenience") (:url . "https://github.com/mgrachten/bln-mode"))])
- (block-nav . [(20201005 202) ((emacs (25 1))) "Jump across indentation levels for quick navigation" single ((:commit . "bc02e545cfd9a048a8df777669a426a8edc2321f") (:maintainers ("Philip Dumaresq" . "phdumaresq@protonmail.com")) (:maintainer "Philip Dumaresq" . "phdumaresq@protonmail.com") (:keywords "convenience") (:url . "https://github.com/nixin72/block-nav.el"))])
- (blockdiag-mode . [(20160427 524) ((emacs (24 3))) "Major mode for editing blockdiag files" single ((:commit . "f3b21ba433d60327cebd103ae4492200750e24a9") (:authors ("xcezx" . "main.xcezx@gmail.com")) (:maintainers ("xcezx" . "main.xcezx@gmail.com")) (:maintainer "xcezx" . "main.xcezx@gmail.com") (:url . "https://github.com/xcezx/xdiag-mode"))])
- (blog-admin . [(20170923 1409) ((ctable (0 1 1)) (s (1 10 0)) (f (0 17 3)) (names (20151201 0)) (cl-lib (0 5))) "Blog admin for emacs with hexo/org-page supported" tar ((:commit . "b5f2e1dad7d68ec903619f7280bb0bcb7e398a1e") (:authors (nil . "code.falling@gmail.com")) (:maintainers (nil . "code.falling@gmail.com")) (:maintainer nil . "code.falling@gmail.com") (:keywords "tools" "blog" "org" "hexo" "org-page"))])
- (blog-minimal . [(20181021 849) ((ht (1 5)) (simple-httpd (1 4 6)) (mustache (0 22)) (s (1 11 0)) (org (9 0 3))) "a simple static site generator based on org mode" tar ((:commit . "a634a2db0b80cb445ef0b072d1a1482ced91f9ad") (:authors ("Thank Fly" . "thiefuniverses@gmail.com")) (:maintainers ("Thank Fly" . "thiefuniverses@gmail.com")) (:maintainer "Thank Fly" . "thiefuniverses@gmail.com") (:keywords "tools") (:url . "https://github.com/thiefuniverse/blog-minimal"))])
- (blox . [(20220521 807) ((emacs (25 1))) "Interaction with Roblox tooling" single ((:commit . "9ebebb65fb38b5570ba8dfbb5ec835633c06b67d") (:authors ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainers ("Kenneth Loeffler" . "kenloef@gmail.com")) (:maintainer "Kenneth Loeffler" . "kenloef@gmail.com") (:keywords "roblox" "rojo" "tools") (:url . "https://github.com/kennethloeffler/blox"))])
- (bluesound . [(20230328 1430) ((emacs (26 1))) "Play, pause, resume music on a Bluesound player" single ((:commit . "f6a43dbe8b5a3d4541170717571c793ae3313c98") (:authors ("R.W. van 't Veer")) (:maintainers ("R.W. van 't Veer")) (:maintainer "R.W. van 't Veer") (:keywords "convenience" "multimedia") (:url . "https://git.sr.ht/~rwv/bluesound-el/"))])
- (bm . [(20210421 1351) nil "Visible bookmarks in buffer." tar ((:commit . "da9735f8b3f833a21b39a7bbfa7f563ba96429f3") (:authors ("Jo Odland <jo.odland(at)gmail.com>")) (:maintainers ("Jo Odland <jo.odland(at)gmail.com>")) (:maintainer "Jo Odland <jo.odland(at)gmail.com>") (:keywords "bookmark" "highlight" "faces" "persistent") (:url . "https://github.com/joodland/bm"))])
- (bmx-mode . [(20210319 620) ((emacs (25 1)) (cl-lib (0 5)) (company (0 9 4)) (dash (2 13 0)) (s (1 12 0))) "Batch Mode eXtras" single ((:commit . "6f008707efe0bb5646f0c1b0d6f57f0a8800e200") (:authors ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainers ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com") (:keywords "c" "convenience" "tools") (:url . "http://github.com/josteink/bmx-mode"))])
- (bnf-mode . [(20221205 1451) ((cl-lib (0 5)) (emacs (25 1))) "Major mode for editing BNF grammars." tar ((:commit . "dcdb422e219b29d53a9385e19083441c57f0beb3") (:authors ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainers ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch") (:keywords "languages") (:url . "https://github.com/sergeyklay/bnf-mode"))])
- (bnfc . [(20160605 1927) ((emacs (24 3))) "Define context-free grammars for the BNFC tool" single ((:commit . "1b58df1dd0cb9b81900632fb2843a03b94f56fdb") (:authors ("Jacob Mitchell" . "jmitchell@member.fsf.org")) (:maintainers ("Jacob Mitchell" . "jmitchell@member.fsf.org")) (:maintainer "Jacob Mitchell" . "jmitchell@member.fsf.org") (:keywords "languages" "tools") (:url . "https://github.com/jmitchell/bnfc-mode"))])
- (bog . [(20230411 644) ((cl-lib (0 5))) "Extensions for research notes in Org mode" single ((:commit . "006fe4d345b70a896213322871ccf08073b14c85") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:keywords "bib" "outlines") (:url . "https://github.com/kyleam/bog"))])
- (bolt-mode . [(20180310 810) ((emacs (24 3))) "Editing support for Bolt language" single ((:commit . "85a5a752bfbebb4aed884326c25db64c000e9934") (:authors ("Mikhail Pontus" . "mpontus@gmail.com")) (:maintainers ("Mikhail Pontus" . "mpontus@gmail.com")) (:maintainer "Mikhail Pontus" . "mpontus@gmail.com") (:keywords "languages") (:url . "https://github.com/mpontus/bolt-mode"))])
- (bongo . [(20201002 1020) ((cl-lib (0 5)) (emacs (24 1))) "play music with Emacs" tar ((:commit . "9e9629090262bba6d0003dabe5a375e47a4477f1"))])
- (bonjourmadame . [(20170919 1134) nil "Say \"Hello ma'am!\"" single ((:commit . "d3df185fce78aefa689fded8e56a654f0fde4ac0"))])
- (boogie-friends . [(20221115 658) ((cl-lib (0 5)) (dash (2 10 0)) (flycheck (0 23)) (yasnippet (0 9 0 1)) (company (0 8 12))) "A collection of programming modes for Boogie, Dafny, and Z3 (SMTLIB v2)." tar ((:commit . "5b32e4859823ed7f5e70fd5d2eac5d813a8e3e51") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "convenience" "languages") (:url . "https://github.com/boogie-org/boogie-friends/"))])
- (bookmark-in-project . [(20230116 1206) ((emacs (27 1))) "Bookmark access within a project" single ((:commit . "a1630443887c7fa190411c45269bde575f0807c5") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-bookmark-in-project"))])
- (bookmark-view . [(20220403 2204) ((emacs (27 1))) "Bookmark views" single ((:commit . "0d40ac67f53b7fa75fe65c38a5ef65701ce4c3da") (:authors ("Daniel Mendler")) (:maintainers ("Daniel Mendler")) (:maintainer "Daniel Mendler") (:url . "https://github.com/minad/bookmark-view"))])
- (bool-flip . [(20161215 1539) ((emacs (24 3))) "flip the boolean under the point" single ((:commit . "0f7cc9b387429239fb929896511727d4e49a795b") (:authors ("Michael Brandt" . "michaelbrandt5@gmail.com")) (:maintainers ("Michael Brandt" . "michaelbrandt5@gmail.com")) (:maintainer "Michael Brandt" . "michaelbrandt5@gmail.com") (:keywords "boolean" "convenience" "usability") (:url . "http://github.com/michaeljb/bool-flip/"))])
- (boon . [(20230410 1115) ((emacs (26 1)) (dash (2 12 0)) (expand-region (0 10 0)) (multiple-cursors (1 3 0))) "Ergonomic Command Mode for Emacs." tar ((:commit . "9b4260fbab2d3cc6f58a5c1360a235a03de4f0e1"))])
- (borg . [(20230319 1956) ((emacs (27 1)) (epkg (3 3 3)) (magit (3 3 0))) "Assimilate Emacs packages as Git submodules" tar ((:commit . "723ffe760d535618794d9e90ff17c18f66120131") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/emacscollective/borg"))])
- (borland-blue-theme . [(20160117 1321) ((emacs (24 1))) "Blue/yellow theme based on old DOS Borland/Turbo C IDE" single ((:commit . "db74eefebbc89d3c62575f8f50b319e87b4a3470") (:authors ("Alexey Veretennikov <alexey dot veretennikov at gmail dot com>")) (:maintainers ("Alexey Veretennikov <alexey dot veretennikov at gmail dot com>")) (:maintainer "Alexey Veretennikov <alexey dot veretennikov at gmail dot com>") (:keywords "themes") (:url . "http://github.com/fourier/borland-blue-theme"))])
- (boron-theme . [(20170808 1308) ((emacs (24 0))) "an Emacs 24 theme based on Boron (tmTheme)" single ((:commit . "87ae1a765e07429fec25d2f29b004f84b52d2e0a") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (boxes . [(20230326 1932) ((emacs (24 3))) "ASCII boxes unlimited!" single ((:commit . "77d02890a749a30bc228c848ec1d4bc9b09ac6c0") (:authors ("Jason L. Shiffer" . "jshiffer@zerotao.com")) (:maintainers ("Jason L. Shiffer" . "jshiffer@zerotao.com")) (:maintainer "Jason L. Shiffer" . "jshiffer@zerotao.com") (:keywords "extensions") (:url . "https://boxes.thomasjensen.com"))])
- (boxquote . [(20220919 714) ((cl-lib (0 5))) "Quote text with a semi-box." single ((:commit . "fe676396fa7e4372e01bf2c3d9a62e8d53615d46") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "quoting") (:url . "https://github.com/davep/boxquote.el"))])
- (bpe . [(20141228 2205) ((emacs (24 1))) "Blog from Org mode to Blogger" single ((:commit . "7b5b25f83506e6c9f4075d3803fa32404943a189") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "blogger" "blog") (:url . "https://github.com/yuutayamada/bpe"))])
- (bpftrace-mode . [(20190608 2201) ((emacs (24 0))) "Major mode for editing bpftrace script files" single ((:commit . "587b39ea7a1d786df5c04796d51bf2a5a4eda0d7") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com") (:keywords "highlight" "c") (:url . "http://gitlab.com/jgkamat/bpftrace-mode"))])
- (bpr . [(20180220 1844) ((emacs (24))) "Background Process Runner" tar ((:commit . "af84a83dea09d86e77d87ac30604f2c5b4bf4117") (:authors ("Ilya Babanov" . "ilya-babanov@ya.ru")) (:maintainers ("Ilya Babanov" . "ilya-babanov@ya.ru")) (:maintainer "Ilya Babanov" . "ilya-babanov@ya.ru") (:keywords "background" "async" "process" "management") (:url . "https://github.com/ilya-babanov/emacs-bpr"))])
- (bqn-mode . [(20230423 1816) ((emacs (26 1))) "Emacs mode for BQN" tar ((:commit . "b459f30498bf33efb73d095e1ff0ae98423c0e47") (:authors ("Marshall Lochbaum" . "mwlochbaum@gmail.com")) (:maintainers ("Marshall Lochbaum" . "mwlochbaum@gmail.com")) (:maintainer "Marshall Lochbaum" . "mwlochbaum@gmail.com") (:url . "https://github.com/museoa/bqn-mode"))])
- (bracketed-paste . [(20160407 2348) ((emacs (24 3))) "bracketed paste mode support within emacs -nw" single ((:commit . "843ce3bbb63d560face889e13a57a2f7543957d5") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net") (:keywords "terminals"))])
- (brainfuck-mode . [(20150113 842) ((langdoc (20130601 1450))) "Brainfuck mode for Emacs" single ((:commit . "36e69552bb3b97a4f888d362c59845651bd0d492") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "brainfuck" "langdoc") (:url . "https://github.com/tom-tan/brainfuck-mode/"))])
- (brazilian-holidays . [(20220828 2348) ((emacs (26))) "Brazilian holidays" single ((:commit . "03206ea673df49c91a8f924db799620713d86240") (:authors ("Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com")) (:maintainers ("Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com")) (:maintainer "Jaguaraquem A. Reinaldo" . "jaguar.adler@gmail.com") (:keywords "calendar" "holidays" "brazilian") (:url . "https://github.com/jadler/brazilian-holidays"))])
- (brec-mode . [(20230406 1547) ((emacs (24 3))) "A major mode for editing Breccian text" single ((:commit . "a1d519bd592d34c05f3fbaa2c209249969823fb6") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca") (:keywords "outlines" "wp") (:url . "http://reluk.ca/project/Breccia/Emacs/"))])
- (brf . [(20230428 1402) ((fringe-helper (0 1 1)) (emacs (24 3))) "Brf-mode provides features from the legendary editor Brief" tar ((:commit . "ca6f9869707dab5929e1da9e13bdf602207bc7f9") (:authors ("Mike Woolley" . "mike@bulsara.com")) (:maintainers ("Mike Woolley" . "mike@bulsara.com")) (:maintainer "Mike Woolley" . "mike@bulsara.com") (:keywords "brief" "crisp" "emulations") (:url . "https://bitbucket.org/MikeWoolley/brf-mode"))])
- (brightscript-mode . [(20220906 827) ((emacs (26 3))) "Major mode for editing Brightscript files" single ((:commit . "025d6f5a70752c62a28d4f86c053a283b3898a49") (:authors ("Daniel Mircea" . "daniel@viseztrance.com")) (:maintainers (nil . "daniel@viseztrance.com")) (:maintainer nil . "daniel@viseztrance.com") (:keywords "languages") (:url . "https://github.com/viseztrance/brightscript-mode"))])
- (broadcast . [(20151205 212) ((emacs (24 4))) "Links buffers together for simultaneous editing." single ((:commit . "f6f9cd2e0e3f8c31d6b8e7446c27eb0e50b25f16") (:authors ("Russell Black" . "killdash9@github")) (:maintainers ("Russell Black" . "killdash9@github")) (:maintainer "Russell Black" . "killdash9@github") (:keywords "convenience" "frames" "link" "cursors") (:url . "https://github.com/killdash9/broadcast.el"))])
- (browse-at-remote . [(20230223 554) ((f (0 20 0)) (s (1 9 0)) (cl-lib (0 5))) "Open github/gitlab/bitbucket/stash/gist/phab/sourcehut page from Emacs" single ((:commit . "1c2a565bb7275bf78f23d471e32dd8c696523b8c") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainers ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com") (:keywords "github" "gitlab" "bitbucket" "gist" "stash" "phabricator" "sourcehut" "pagure") (:url . "https://github.com/rmuslimov/browse-at-remote"))])
- (browse-kill-ring . [(20220410 1509) nil "interactively insert items from kill-ring" single ((:commit . "6e06736a8245a8cdf436f6585c71439239219836") (:authors ("Colin Walters" . "walters@verbum.org")) (:maintainers ("browse-kill-ring" . "browse-kill-ring@tonotdo.com")) (:maintainer "browse-kill-ring" . "browse-kill-ring@tonotdo.com") (:keywords "convenience") (:url . "https://github.com/browse-kill-ring/browse-kill-ring"))])
- (browse-url-dwim . [(20140731 1922) ((string-utils (0 3 2))) "Context-sensitive external browse URL or Internet search" single ((:commit . "11f1c53126619c7ef1bb5f5d6914ce0b3cce0e30") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "hypermedia") (:url . "http://github.com/rolandwalker/browse-url-dwim"))])
- (brutalist-theme . [(20220507 909) nil "Brutalist theme" tar ((:commit . "bee6cb25819007e20cde2782a6fcb577028dd038") (:authors ("Gergely Nagy")) (:maintainers ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://git.madhouse-project.org/algernon/brutalist-theme.el"))])
- (bshell . [(20201219 139) ((emacs (26)) (buffer-manage (0 11))) "Manage and track multiple inferior shells" single ((:commit . "469c841f19f28c271b4f172b40f3f9ca830254df") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "unix" "interactive" "shell" "management") (:url . "https://github.com/plandes/bshell"))])
- (btc-ticker . [(20220409 1647) ((json (1 2)) (request (0 2 0))) "Shows latest bitcoin price" single ((:commit . "2ed18ac6338d5fe98c578f0875840af07f0bc42a") (:authors ("Jorge Niedbalski R." . "jnr@metaklass.org")) (:maintainers ("Jorge Niedbalski R." . "jnr@metaklass.org")) (:maintainer "Jorge Niedbalski R." . "jnr@metaklass.org") (:keywords "news"))])
- (bts . [(20151109 1333) ((widget-mvc (0 0 2)) (log4e (0 3 0)) (yaxception (0 3 3)) (dash (2 9 0)) (s (1 9 0)) (pos-tip (0 4 5))) "A unified UI for various bug tracking systems" single ((:commit . "df42d58a36447697f93b56e69f5e700b2baef1f9") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "convenience") (:url . "https://github.com/aki2o/emacs-bts"))])
- (bts-github . [(20170401 1249) ((bts (0 0 1)) (gh (0 8 2))) "A plugin of bts.el for GitHub" single ((:commit . "ef2cf9202dc2128e5efdb613bfde9276a8cd95ad") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "convenience" "git" "github") (:url . "https://github.com/aki2o/emacs-bts-github"))])
- (bubbleberry-theme . [(20141017 944) ((emacs (24 1))) "A theme based on LightTable for Emacs24" single ((:commit . "22e9adf4586414024e4592972022ec297321b320") (:authors ("Jason Milkins" . "jasonm23@gmail.com") ("Gaurav Giri github.com/grvgr")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-bubbleberry-theme"))])
- (buckwalter . [(20191119 1950) nil "Write arabic using Buckwalter transliteration" single ((:commit . "1ef6f210f38c0686bc5b445b9704190f168f30ea") (:authors ("Joe HAKIM RAHME" . "joehakimrahme@gmail.com")) (:maintainers ("Joe HAKIM RAHME" . "joehakimrahme@gmail.com")) (:maintainer "Joe HAKIM RAHME" . "joehakimrahme@gmail.com") (:keywords "arabic" "transliteration" "i18n") (:url . "https://github.com/joehakimrahme/buckwalter-arabic"))])
- (buffer-buttons . [(20150106 1439) nil "Define, save, and load code-safe buttons in files for emacs" single ((:commit . "2feb8494fa7863b98256bc85da670d74a3a8a975") (:authors ("Ryan Pavlik" . "rpavlik@gmail.com")) (:maintainers ("Ryan Pavlik" . "rpavlik@gmail.com")) (:maintainer "Ryan Pavlik" . "rpavlik@gmail.com") (:url . "https://github.com/rpav/buffer-buttons"))])
- (buffer-env . [(20221110 2137) ((emacs (27 1)) (compat (28 1))) "Buffer-local process environments" single ((:commit . "1817692a5a7751601e8a96d905dc94bfa6b1d485") (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainers ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") (:keywords "processes" "tools") (:url . "https://github.com/astoff/buffer-env"))])
- (buffer-flip . [(20220718 10) ((cl-lib (0 5))) "Cycle through buffers like Alt-Tab in Windows" single ((:commit . "dda0cbcd202cdadf322942f9637a11ed92525756") (:authors ("Russell Black" . "killdash9@github")) (:maintainers ("Russell Black" . "killdash9@github")) (:maintainer "Russell Black" . "killdash9@github") (:keywords "convenience") (:url . "https://github.com/killdash9/buffer-flip.el"))])
- (buffer-manage . [(20211122 1957) ((emacs (26 1)) (choice-program (0 13)) (dash (2 17 0))) "Manage buffers" tar ((:commit . "819bbfd9ae2f028361f484bc3b60d751623a2df5") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "internal" "maint") (:url . "https://github.com/plandes/buffer-manage"))])
- (buffer-move . [(20220512 755) ((emacs (24 1))) "easily swap buffers" single ((:commit . "e7800b3ab1bd76ee475ef35507ec51ecd5a3f065") (:keywords "convenience") (:url . "https://github.com/lukhas/buffer-move/"))])
- (buffer-ring . [(20220120 124) ((emacs (25 1)) (dynaring (0 3)) (s (1 12 0)) (ht (2 0))) "Rings and tori for buffer navigation" single ((:commit . "177d67238c4d126a0270585e21c0f03ae750ca2a") (:authors ("Mike Mattie" . "codermattie@gmail.com") ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com") (:url . "https://github.com/countvajhula/buffer-ring"))])
- (buffer-sets . [(20230319 1822) ((cl-lib (0 5))) "Sets of Buffers for Buffer Management" single ((:commit . "951e894ef96d533324f7f24c2a0def45ae89d558") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "buffer-management") (:url . "https://git.sr.ht/~swflint/buffer-sets"))])
- (buffer-utils . [(20140512 1400) nil "Buffer-manipulation utility functions" single ((:commit . "32e1f23817b9c6caedb53e5359baad29e99eaa2b") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/buffer-utils"))])
- (buffer-watcher . [(20170913 839) ((f (0 16 2)) (cl-lib (0 5))) "Easily run shell scripts per filetype/directory when a buffer is saved" single ((:commit . "b32c67c8a5d724257d759f4c903d0dedc32246ef") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))])
- (buffer-wrap . [(20220704 646) ((emacs (24 4))) "Wrap the beginning and the end of buffer" single ((:commit . "b6b2118f59b8152fa02bd0b09d65a1f8ade4141b") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "buffer" "tool" "wrap") (:url . "https://github.com/jcs-elpa/buffer-wrap"))])
- (bufler . [(20221031 1852) ((emacs (26 3)) (dash (2 18)) (f (0 17)) (pretty-hydra (0 2 2)) (magit-section (0 1)) (map (2 1))) "Group buffers into workspaces with programmable rules" tar ((:commit . "bf5fdccbae6bb6dc51e31dc282805e32bb41e412") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/bufler.el"))])
- (bufshow . [(20130726 1838) ((emacs (24 1))) "A simple presentation tool for Emacs." single ((:commit . "42d7fb74c3f914e127d5447c63d209bf19f5d517") (:authors ("Peter Jones" . "pjones@pmade.com")) (:maintainers ("Peter Jones" . "pjones@pmade.com")) (:maintainer "Peter Jones" . "pjones@pmade.com") (:url . "https://github.com/pjones/bufshow"))])
- (bug-reference-github . [(20200206 2158) nil "Set `bug-reference-url-format' in Github repos" tar ((:commit . "4e848472a5be464a3bc10a3c917322d1e344951a") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk") (:keywords "programming" "tools") (:url . "https://github.com/arnested/bug-reference-github"))])
- (bui . [(20210108 1141) ((emacs (24 3)) (dash (2 11 0))) "Buffer interface library" tar ((:commit . "ab62fcefc3c7ddf5e5d64c18045148a3c297592d") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "tools") (:url . "https://github.com/alezost/bui.el"))])
- (build-farm . [(20181218 2002) ((emacs (24 4)) (bui (1 2 1)) (magit-popup (2 1 0))) "Interface for Nix and Guix build farms (Hydra and Cuirass)" tar ((:commit . "5c268a3c235ace0d79ef1ec82c440120317e06f5") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "tools") (:url . "https://gitlab.com/alezost-emacs/build-farm"))])
- (build-helper . [(20161009 1755) ((projectile (0 9 0))) "Utilities to help build code" single ((:commit . "d1962858734253eca791721ccf62d1c4a10719f5") (:authors ("Afonso Bordado" . "afonsobordado@az8.co")) (:maintainers ("Afonso Bordado" . "afonsobordado@az8.co")) (:maintainer "Afonso Bordado" . "afonsobordado@az8.co") (:keywords "convenience") (:url . "http://github.com/afonso360/build-helper"))])
- (build-status . [(20190807 1231) ((cl-lib (0 5))) "Mode line build status indicator" single ((:commit . "1a1d2473aa62f2fdda47d8bfeb9fe352d2579b48") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:keywords "mode-line" "ci" "circleci" "travis-ci") (:url . "http://github.com/sshaw/build-status"))])
- (bundler . [(20200129 1338) ((inf-ruby (2 1)) (cl-lib (0 5))) "Interact with Bundler from Emacs" single ((:commit . "43efb6be4ed118b06d787ce7fbcffd68a31732a7") (:authors ("Tobias Svensson" . "tob@tobiassvensson.co.uk")) (:maintainers ("Tobias Svensson" . "tob@tobiassvensson.co.uk")) (:maintainer "Tobias Svensson" . "tob@tobiassvensson.co.uk") (:keywords "bundler" "ruby") (:url . "http://github.com/endofunky/bundler.el"))])
- (burly . [(20221024 2019) ((emacs (27 1)) (map (2 1))) "Save and restore frame/window configurations with buffers" tar ((:commit . "f570fa87ee72a451f535cfb038d81798a01a7e20") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/burly.el"))])
- (burnt-toast . [(20201113 814) ((emacs (25 1)) (dash (2 10)) (alert (1 2))) "Elisp integration with the BurntToast PowerShell module" tar ((:commit . "e9cf41928b7b502fdfa43718c35a24e503db32e2") (:authors ("Sam Cedarbaum" . "scedarbaum@gmail.com")) (:maintainers ("Sam Cedarbaum" . "scedarbaum@gmail.com")) (:maintainer "Sam Cedarbaum" . "scedarbaum@gmail.com") (:keywords "alert" "notifications" "powershell" "comm") (:url . "https://github.com/cedarbaum/burnt-toast.el"))])
- (bury-successful-compilation . [(20181106 403) nil "Bury the *compilation* buffer after successful compilation" single ((:commit . "674644c844184605a1bb4f9487a60f7a780a6fe7") (:authors ("Eric Crosson" . "esc@ericcrosson.com")) (:maintainers ("Eric Crosson" . "esc@ericcrosson.com")) (:maintainer "Eric Crosson" . "esc@ericcrosson.com") (:keywords "compilation"))])
- (buster-mode . [(20140928 1213) nil "Minor mode to speed up development when writing tests with Buster.js" single ((:commit . "de6958ef8369400922618b8d1e99abfa91b97ac5") (:keywords "buster" "testing" "javascript"))])
- (buster-snippets . [(20151125 1010) ((yasnippet (0 8 0))) "Yasnippets for the Buster javascript testing framework" tar ((:commit . "bb8769dae132659858e74d52f3f4e8790399423a") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "snippets"))])
- (busybee-theme . [(20170719 928) nil "port of vim's mustang theme" single ((:commit . "66b2315b030582d0ebee605cf455d386d8c30fcd") (:authors ("martin haesler")) (:maintainers ("martin haesler")) (:maintainer "martin haesler") (:url . "http://github.com/mswift42/busybee-theme"))])
- (butler . [(20210928 230) ((deferred (0 3 2)) (json (1 2)) (emacs (24))) "Emacs client for Jenkins" tar ((:commit . "10943ccdf2030187b2f7bd97337d78acb7fd31c9") (:authors ("Ashton Kemerling" . "ashtonkemerling@gmail.com")) (:maintainer "Ashton Kemerling" . "ashtonkemerling@gmail.com") (:keywords "jenkins" "hudson" "ci") (:url . "http://www.github.com/AshtonKem/Butler.git"))])
- (buttercup . [(20230418 819) ((emacs (24 3))) "Behavior-Driven Emacs Lisp Testing" tar ((:commit . "30c703d215b075aaede936a2c424f65b5f7b6391") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainers ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainer "Ola Nilsson" . "ola.nilsson@gmail.com") (:url . "https://github.com/jorgenschaefer/emacs-buttercup"))])
- (buttercup-junit . [(20190802 2258) ((emacs (24 3)) (buttercup (1 15))) "JUnit reporting for Buttercup" single ((:commit . "6bc28b6b0f36fb71b0915c9e45963c840c64a8df") (:authors ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainers ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainer "Ola Nilsson" . "ola.nilsson@gmail.com") (:keywords "tools" "test" "unittest" "buttercup" "ci") (:url . "https://bitbucket.org/olanilsson/buttercup-junit"))])
- (button-lock . [(20230304 2212) nil "Clickable text defined by regular expression" single ((:commit . "1f7a89ca05b6167af7d1337ad23a5d923486caac") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "mouse" "button" "hypermedia" "extensions") (:url . "http://github.com/rolandwalker/button-lock"))])
- (buttons . [(20201123 2333) ((cl-lib (0 3))) "Define and visualize hierarchies of keymaps" single ((:commit . "de41b48244574a13000c4289fdb4216a2b0490ff") (:authors ("Ernesto Alfonso")) (:maintainers (nil . "(concat \"erjoalgo\" \"@\" \"gmail\" \".com\")")) (:maintainer nil . "(concat \"erjoalgo\" \"@\" \"gmail\" \".com\")") (:keywords "keymap" "template" "snippet") (:url . "http://github.com/erjoalgo/emacs-buttons"))])
- (c-c-combo . [(20151224 255) nil "Make stuff happen when you reach a target wpm" tar ((:commit . "a261a833499a7fdc29610863b3aafc74818770ba") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:url . "https://www.github.com/CestDiego/c-c-combo.el"))])
- (c-eldoc . [(20201004 2347) nil "helpful description of the arguments to C functions" single ((:commit . "f4ede1f37f6de583376669735326367d84a0a917") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:url . "http://github.com/nflath/c-eldoc"))])
- (c-eval . [(20210611 705) ((emacs (24 5))) "Compile and run one-off C code snippets" single ((:commit . "fd129bfcb75475ac6820cc33862bd8efb8097fae") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "c" "languages") (:url . "https://github.com/lassik/emacs-c-eval"))])
- (c0-mode . [(20151110 1852) nil "Major mode for editing C0 files" tar ((:commit . "c214093c36864d6208fcb9e6a72413ed17ed5d60") (:authors ("Jakob Max Uecker")) (:maintainers ("Jakob Max Uecker")) (:maintainer "Jakob Max Uecker") (:keywords "c0" "languages") (:url . "http://c0.typesafety.net/"))])
- (ca65-mode . [(20210218 106) ((emacs (26 1))) "Major mode for ca65 assembly files" single ((:commit . "590d90cc0e1c1864dd7ce03df99b741ba866d52a") (:authors ("Wendel Scardua" . "wendel@scardua.net")) (:maintainers ("Wendel Scardua" . "wendel@scardua.net")) (:maintainer "Wendel Scardua" . "wendel@scardua.net") (:keywords "languages" "assembly" "ca65" "6502") (:url . "https://github.com/wendelscardua/ca65-mode"))])
- (cabledolphin . [(20160204 938) ((emacs (24 4)) (seq (1 0))) "capture Emacs network traffic" single ((:commit . "fffc192cafa61558e924323d6da8166fe5f2a6f9") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainers ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com") (:keywords "comm"))])
- (cache . [(20111019 2300) nil "implementation of a hash table whose key-value pairs expire" single ((:commit . "7499586b6c8224df9f5c5bc4dec96b008258d580") (:authors ("Nathaniel Flath")) (:maintainers ("Nathaniel Flath")) (:maintainer "Nathaniel Flath"))])
- (cacoo . [(20120319 2359) ((concurrent (0 3 1))) "Minor mode for Cacoo : http://cacoo.com" tar ((:commit . "c9fa04fbe97639b24698709530361c2bb5f3273c") (:authors ("SAKURAI Masashi <m.sakurai atmark kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai atmark kiwanami.net>") (:keywords "convenience" "diagram") (:url . "https://github.com/kiwanami/emacs-cacoo/"))])
- (caddyfile-mode . [(20220626 945) ((emacs (25)) (loop (1 3))) "Major mode for Caddy configuration files" single ((:commit . "fc41148f5a7eb320f070666f046fb9d88cf17680") (:authors ("Thomas Jost" . "schnouki@schnouki.net")) (:maintainers ("Thomas Jost" . "schnouki@schnouki.net")) (:maintainer "Thomas Jost" . "schnouki@schnouki.net") (:keywords "languages") (:url . "https://github.com/Schnouki/caddyfile-mode/"))])
- (cake-inflector . [(20140415 858) ((s (1 9 0))) "Lazy porting CakePHP infrector.php to el" single ((:commit . "d9c6298fbca53efeb6f0f37140395659d9a6d7cc") (:authors ("k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>")) (:maintainers ("k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>")) (:maintainer "k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>") (:url . "https://github.com/k1LoW/emacs-cake-inflector"))])
- (cakecrumbs . [(20180929 139) ((emacs (24 4))) "Show parents on header for HTML/Jade/Sass/Stylus" single ((:commit . "cf8c1df885eee004602f73c4f841301e200e5850") (:authors ("ono hiroko <kuanyui.github.io>")) (:maintainers ("ono hiroko <kuanyui.github.io>")) (:maintainer "ono hiroko <kuanyui.github.io>") (:keywords "languages" "html" "jade" "pug" "sass" "scss" "stylus") (:url . "https://github.com/kuanyui/cakecrumbs.el"))])
- (cal-china-x . [(20200924 1837) ((cl-lib (0 5))) "Chinese localization, lunar/horoscope/zodiac info and more..." tar ((:commit . "94005e678a1d2522b7a00299779f40c5c77286b8") (:authors ("William Xu" . "william.xwl@gmail.com")) (:maintainers ("William Xu" . "william.xwl@gmail.com")) (:maintainer "William Xu" . "william.xwl@gmail.com") (:url . "https://github.com/xwl/cal-china-x"))])
- (calc-at-point . [(20210219 1252) ((emacs (26)) (dash (2 18 0))) "Perform calculations at point or over selection" single ((:commit . "0c1a9e94b519b0edb0abcbacdf6101eea2f2a524") (:authors ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainer "Sebastian WÃ¥linder" . "s.walinder@gmail.com") (:keywords "convenience") (:url . "https://github.com/walseb/calc-at-point"))])
- (calc-prog-utils . [(20220820 1855) ((emacs (24 1))) "Calc programmers utilities" single ((:commit . "190acfda56660a2d75df2d9eac5b14edaccccd80") (:authors ("Jesse Millwood")) (:maintainers ("Jesse Millwood")) (:maintainer "Jesse Millwood") (:keywords "tools" "convenience") (:url . "https://github.com/Jesse-Millwood/calc-prog"))])
- (calendar-norway . [(20220211 1129) nil "Norwegian calendar" single ((:commit . "0db0ea63365f4ff5f7d18fb8335fa88af194a2cc") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "calendar" "norwegian" "localization"))])
- (calfw . [(20180118 45) nil "Calendar view framework on Emacs" single ((:commit . "03abce97620a4a7f7ec5f911e669da9031ab9088") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "calendar") (:url . "https://github.com/kiwanami/emacs-calfw"))])
- (calfw-cal . [(20170411 220) nil "calendar view for emacs diary" single ((:commit . "c538d3746449b4f0e16b16aad3073d4f7379d805") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "calendar"))])
- (calfw-gcal . [(20120111 1000) nil "edit Google calendar for calfw.el." tar ((:commit . "14aab20687d6cc9e6c5ddb9e11984c4e14c3d870") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience" "calendar" "calfw.el") (:url . "https://github.com/myuhe/calfw-gcal.el"))])
- (calfw-howm . [(20170704 4) nil "calendar view for howm" single ((:commit . "bcfc0c546c3c58e1f635a9a29efdf56c9421a3ce") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "calendar"))])
- (calfw-ical . [(20170411 220) nil "calendar view for ical format" single ((:commit . "c538d3746449b4f0e16b16aad3073d4f7379d805") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "calendar"))])
- (calfw-org . [(20170411 220) nil "calendar view for org-agenda" single ((:commit . "c538d3746449b4f0e16b16aad3073d4f7379d805") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "calendar" "org"))])
- (calibredb . [(20230118 954) ((emacs (25 1)) (org (9 3)) (transient (0 1 0)) (s (1 12 0)) (dash (2 17 0)) (request (0 3 3)) (esxml (0 3 7))) "Yet another calibre client" tar ((:commit . "0ea8ccc41bbf4c6d105d9d2eddffa25d040f0e8d") (:authors ("Damon Chan" . "elecming@gmail.com")) (:maintainers ("Damon Chan" . "elecming@gmail.com")) (:maintainer "Damon Chan" . "elecming@gmail.com") (:keywords "tools") (:url . "https://github.com/chenyanming/calibredb.el"))])
- (call-graph . [(20230222 525) ((emacs (25 1)) (hierarchy (0 7 0)) (tree-mode (1 0 0)) (ivy (0 10 0)) (beacon (1 3 4))) "Generate call graph for c/c++ functions" tar ((:commit . "5fd5f3aad35e3561c253870e4d7fa34353b70b7b") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:keywords "programming" "convenience") (:url . "https://github.com/beacoder/call-graph"))])
- (calmer-forest-theme . [(20230302 2149) nil "Darkish theme with green/orange tint" single ((:commit . "09fc50730ea386d3589863f8809e02e5bdd459cf") (:authors ("Artur Hefczyc, created 2003-04-18") ("David Caldwell" . "david@porkrind.org")) (:maintainers ("Artur Hefczyc, created 2003-04-18")) (:maintainer "Artur Hefczyc, created 2003-04-18") (:url . "https://github.com/caldwell/calmer-forest-theme"))])
- (camcorder . [(20190317 2138) ((emacs (24)) (names (20150000)) (cl-lib (0 5))) "Record screencasts in gif or other formats." single ((:commit . "b11ca61491a27681bb3131b72b51c105fd996bed") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "multimedia" "screencast") (:url . "http://github.com/Bruce-Connor/camcorder.el"))])
- (caml . [(20230129 1145) ((emacs (24 3))) "Caml mode for GNU Emacs" tar ((:commit . "959a5a27bfdbaa43a9ff99be136d62e0798f5e01") (:authors ("Jacques Garrigue" . "garrigue@kurims.kyoto-u.ac.jp") ("Ian T Zimmerman" . "itz@rahul.net") ("Damien Doligez" . "damien.doligez@inria.fr")) (:maintainers ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be")) (:maintainer "Christophe Troestler" . "Christophe.Troestler@umons.ac.be") (:keywords "ocaml") (:url . "https://github.com/ocaml/caml-mode"))])
- (cangjie . [(20230219 1150) ((emacs (24 4)) (s (1 12 0)) (dash (2 14 1)) (f (0 2 0))) "Retrieve cangjie code for han characters" tar ((:commit . "d6882e15f47fdde37e9f739dde604d77d25f11db") (:keywords "convenience" "writing") (:url . "https://github.com/kisaragi-hiu/cangjie.el"))])
- (cape . [(20230417 1825) ((emacs (27 1)) (compat (29 1 4 0))) "Completion At Point Extensions" tar ((:commit . "db3059af52718c7f55485ef183bdad3e40f58df9") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "abbrev" "convenience" "matching" "completion" "wp") (:url . "https://github.com/minad/cape"))])
- (capnp-mode . [(20210707 2310) nil "Major mode for editing Capn' Proto Files" single ((:commit . "f7fccad7d737f77896211bec1173117497634143") (:authors ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainers ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainer "Brian Taylor" . "el.wubo@gmail.com") (:url . "https://github.com/capnproto/capnproto"))])
- (capture . [(20130828 1644) nil "screencasting with \"avconv\" or \"ffmpeg\"" tar ((:commit . "9140c207b48b3520a2f06674b3e1bee2fc92b80c") (:authors ("Sergey Pashinin <sergey at pashinin dot com>")) (:maintainers ("Sergey Pashinin <sergey at pashinin dot com>")) (:maintainer "Sergey Pashinin <sergey at pashinin dot com>"))])
- (carbon-now-sh . [(20220701 332) ((emacs (24 4))) "https://carbon.now.sh integration." single ((:commit . "e66f2e43e288f35ad9075f5fc84d59ad348efc88") (:authors ("Vitalii Elenhaupt")) (:maintainers ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:keywords "convenience") (:url . "https://github.com/veelenga/carbon-now-sh.el"))])
- (cardano-tx . [(20230429 1542) ((emacs (27 1)) (f (0 20 0)) (yasnippet (0 14 0)) (yaml-mode (0 0 15)) (yaml (0 1 0)) (helm (3 6 2)) (cbor (0 2 4)) (bech32 (0 2 1)) (readable-numbers (0 1 0)) (emacsql (3 0 0)) (emacsql-sqlite (3 1 1))) "Cardano transaction editor" tar ((:commit . "8bb16c729003a6ef0d9505caefd6611c4a7f05f6") (:authors ("Oscar Najera <https://oscarnajera.com>")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com") (:url . "https://github.com/Titan-C/cardano.el"))])
- (cardano-wallet . [(20230429 1542) ((emacs (27 1)) (yaml (0 1 0)) (dash (2 19 0)) (yaml-mode (0 0 15)) (readable-numbers (0 1 0)) (cardano-tx (0 1 1))) "Interact with cardano wallet" single ((:commit . "8bb16c729003a6ef0d9505caefd6611c4a7f05f6") (:authors ("Oscar Najera <https://github.com/titan>")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com") (:url . "https://github.com/Titan-C/cardano.el"))])
- (cargo . [(20230125 1253) ((emacs (24 3)) (markdown-mode (2 4))) "Emacs Minor Mode for Cargo, Rust's Package Manager." tar ((:commit . "225fdb846c702a193e58a98c1585bb3586a9aa86") (:authors ("Kevin W. van Rooijen")) (:maintainers ("Kevin W. van Rooijen")) (:maintainer "Kevin W. van Rooijen") (:keywords "tools"))])
- (cargo-mode . [(20230213 401) ((emacs (25 1))) "Cargo Major Mode. Cargo is the Rust package manager" single ((:commit . "6e128f08692aae5723122e039e8871a57141e868") (:authors ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainers ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainer "Ayrat Badykov" . "ayratin555@gmail.com") (:keywords "tools") (:url . "https://github.com/ayrat555/cargo-mode"))])
- (cargo-transient . [(20230421 1252) ((emacs (28 1))) "A transient UI for Cargo, Rust's package manager" single ((:commit . "30ed1c8abcfd949cf2620c73061ef741ee0ada3d") (:authors ("Peter Stuart" . "peter@peterstuart.org")) (:maintainers ("Peter Stuart" . "peter@peterstuart.org")) (:maintainer "Peter Stuart" . "peter@peterstuart.org") (:url . "https://github.com/peterstuart/cargo-transient"))])
- (caroline-theme . [(20160318 520) ((emacs (24))) "A trip down to New Orleans..." single ((:commit . "222fd483db304509f9e422dc82883d808e023ceb") (:authors ("Jack Killilea" . "jaaacckz1@gmail.com")) (:maintainers ("Jack Killilea" . "jaaacckz1@gmail.com")) (:maintainer "Jack Killilea" . "jaaacckz1@gmail.com") (:url . "https://github.com/xjackk/carolines-theme"))])
- (cascading-dir-locals . [(20211013 1955) ((emacs (26 1))) "Apply all (!) .dir-locals.el from root to current directory" single ((:commit . "345d4b70e837d45ee84014684127e7399932d5e6") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "convenience") (:url . "https://github.com/fritzgrabo/cascading-dir-locals"))])
- (caseformat . [(20160115 1615) ((emacs (24)) (cl-lib (0 5)) (dash (2 12 1)) (s (1 10 0))) "Format based letter case converter" single ((:commit . "e4961889309408b3425da9b69c16ddfadd17a674") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:keywords "convenience") (:url . "https://github.com/HKey/caseformat"))])
- (cask-mode . [(20160410 1449) ((emacs (24 3))) "major mode for editing Cask files" single ((:commit . "c97755267b7215f02df7b0c16b4210c04aee6566") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))])
- (cask-package-toolset . [(20170921 2256) ((emacs (24)) (cl-lib (0 3)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0)) (commander (0 2 0)) (ansi (0 1 0)) (shut-up (0 1 0))) "Toolsettize your package" tar ((:commit . "2c74cd827e88c7f8360581a841e45f0b794510e7") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:keywords "convenience" "tools") (:url . "http://github.com/AdrieanKhisbe/cask-package-toolset.el"))])
- (caskxy . [(20140513 1539) ((log4e (0 2 0)) (yaxception (0 1))) "Control Cask in Emacs" single ((:commit . "279f3ab79bd77fe69cb3148a79896b9bf118a9b3") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "convenience") (:url . "https://github.com/aki2o/caskxy"))])
- (catmacs . [(20170826 1157) ((emacs (24))) "Simple CAT interface for Yaesu Transceivers." single ((:commit . "6ea9ee195661fe95355413856476c45dcc8e24e8") (:authors ("Frank Singleton" . "b17flyboy@gmail.com")) (:maintainers ("Frank Singleton" . "b17flyboy@gmail.com")) (:maintainer "Frank Singleton" . "b17flyboy@gmail.com") (:keywords "comm" "hardware") (:url . "https://bitbucket.org/pymaximus/catmacs"))])
- (catppuccin-theme . [(20230503 1544) ((emacs (25 1))) "Catppuccin for Emacs - 🄠Soothing pastel theme for Emacs" tar ((:commit . "6806fa31bdd366fb539e875ada80fe90acc377af") (:authors ("nyxkrage")) (:maintainers ("Carsten Kragelund" . "carsten@kragelund.me")) (:maintainer "Carsten Kragelund" . "carsten@kragelund.me") (:url . "https://github.com/catppuccin/emacs"))])
- (cats . [(20230407 1316) ((emacs (26 1))) "Monads for Elisp" tar ((:commit . "7fc70db0eeb2c33ffba5c13c4cdc0f31c7b95537") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/emacs-cats"))])
- (cbm . [(20171116 1240) ((cl-lib (0 5))) "Switch to similar buffers." single ((:commit . "5b41c936ba9f6d170309a85ffebc9939c1050b31") (:authors ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainers ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainer "Lukas Fürmetz" . "fuermetz@mailbox.org") (:keywords "buffers") (:url . "http://github.com/akermu/cbm.el"))])
- (cbor . [(20230429 1542) ((emacs (25 1))) "CBOR utilities" single ((:commit . "8bb16c729003a6ef0d9505caefd6611c4a7f05f6") (:authors ("Oscar Najera <https://oscarnajera.com>")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com") (:url . "https://github.com/Titan-C/cardano.el"))])
- (cc-cedict . [(20210814 819) ((emacs (26 1))) "Interface to CC-CEDICT (a Chinese-English dictionary)" single ((:commit . "03fbe7d1589d36f627ef9fe7b86f9fe6f623cbb3") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:url . "https://github.com/xuchunyang/cc-cedict.el"))])
- (ccc . [(20210501 820) nil "buffer local cursor color control library" single ((:commit . "36fb9f7e527f975d333887fd0cca4d611ae1ab23") (:authors ("Masatake YAMATO" . "masata-y@is.aist-nara.ac.jp")) (:maintainers ("SKK Development Team")) (:maintainer "SKK Development Team") (:keywords "cursor") (:url . "https://github.com/skk-dev/ddskk"))])
- (ccls . [(20230111 1754) ((emacs (25 1)) (lsp-mode (6 3 1)) (dash (2 14 1))) "ccls client for lsp-mode" tar ((:commit . "29d231590fad39b4d658d9262859e60669edb9b0") (:authors ("Tobias Pisani, Fangrui Song")) (:maintainers ("Tobias Pisani, Fangrui Song")) (:maintainer "Tobias Pisani, Fangrui Song") (:keywords "languages" "lsp" "c++") (:url . "https://github.com/MaskRay/emacs-ccls"))])
- (cd-compile . [(20141108 1957) nil "run compile in a specific directory" single ((:commit . "10284ccae86afda4a37b09ba90acd1e2efedec9f") (:authors ("Jamie Nicol" . "jamie@thenicols.net")) (:maintainers ("Jamie Nicol" . "jamie@thenicols.net")) (:maintainer "Jamie Nicol" . "jamie@thenicols.net"))])
- (cdb . [(20230318 2152) nil "constant database (cdb) reader for Emacs Lisp" single ((:commit . "3820fa6bb0d53132aafb611a643c1e41e444052b") (:authors ("Yusuke Shinyama <yusuke at cs . nyu . edu>")) (:maintainers ("SKK Development Team")) (:maintainer "SKK Development Team") (:keywords "cdb") (:url . "https://github.com/skk-dev/ddskk"))])
- (cdlatex . [(20230411 748) nil "Fast input methods for LaTeX environments and math" single ((:commit . "692142603c6229e5aa5c8285eb797e401cef9ac3") (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainers ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com") (:keywords "tex"))])
- (cdnjs . [(20161031 1522) ((dash (2 13 0)) (deferred (0 4)) (f (0 17 2)) (pkg-info (0 5))) "A front end for http://cdnjs.com" single ((:commit . "ce19880d3ec3d81e6c665d0b1dfea99cc7a3f908") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "tools") (:url . "https://github.com/yasuyk/cdnjs.el"))])
- (cedit . [(20200816 526) nil "paredit-like commands for c-like languages" single ((:commit . "cb38316903e6cfa8b8c978defa7e1dafcd4e0c12") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.gitub.io/"))])
- (celery . [(20170225 924) ((emacs (24)) (dash-functional (2 11 0)) (s (1 9 0)) (deferred (0 3 2))) "a minor mode to draw stats from celery and more?" single ((:commit . "b3378dd81e5a717432123fb13d70201da5dc841a") (:authors ("ardumont" . "eniotna.t@gmail.com")) (:maintainers ("ardumont" . "eniotna.t@gmail.com")) (:maintainer "ardumont" . "eniotna.t@gmail.com") (:keywords "celery" "convenience") (:url . "https://github.com/ardumont/emacs-celery"))])
- (celestial-mode-line . [(20230323 737) ((emacs (24))) "Show lunar phase and sunrise/-set time in modeline" single ((:commit . "90056322d6664e2e2b593912e4d5e68f1468cafc") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net") (:keywords "extensions") (:url . "https://github.com/ecraven/celestial-mode-line"))])
- (centaur-tabs . [(20230109 457) ((emacs (24 4)) (powerline (2 4)) (cl-lib (0 5))) "Aesthetic, modern looking customizable tabs plugin" tar ((:commit . "a2890d968d877b269a814a691356fc5877833c39") (:authors ("Emmanuel Bustos" . "ema2159@gmail.com")) (:maintainers ("Emmanuel Bustos" . "ema2159@gmail.com")) (:maintainer "Emmanuel Bustos" . "ema2159@gmail.com") (:url . "https://github.com/ema2159/centaur-tabs"))])
- (centered-cursor-mode . [(20200507 1529) nil "cursor stays vertically centered" single ((:commit . "e9ee518d314ef7fb105a1e0cdc33dbb4dfe9d9e4") (:authors ("André Riemann" . "andre.riemann@web.de")) (:maintainers ("André Riemann" . "andre.riemann@web.de")) (:maintainer "André Riemann" . "andre.riemann@web.de") (:keywords "convenience") (:url . "https://github.com/andre-r/centered-cursor-mode.el"))])
- (centered-window . [(20220125 804) ((emacs (24 4))) "Center the text when there's only one window" single ((:commit . "80965f6c6afe8d918481433984b493de72af5399") (:authors ("Anler Hernández Peral" . "inbox+emacs@anler.me")) (:maintainers ("Anler Hernández Peral" . "inbox+emacs@anler.me")) (:maintainer "Anler Hernández Peral" . "inbox+emacs@anler.me") (:keywords "faces" "windows") (:url . "https://github.com/anler/centered-window-mode"))])
- (centimacro . [(20201225 1132) nil "Assign multiple macros as global key bindings" single ((:commit . "0149877584b333c4f1953f0767f0cae23881b0df") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "macros") (:url . "https://github.com/abo-abo/centimacro"))])
- (cerbere . [(20181113 1641) ((pkg-info (0 5))) "Unit testing in Emacs for several programming languages" tar ((:commit . "bb18d932b16541105d41a668dbf6fc4e833a6dc2") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "python" "go" "php" "phpunit" "elisp" "ert" "tests" "tdd") (:url . "https://github.com/nlamirault/cerbere"))])
- (cern-ldap . [(20230418 1249) ((emacs (27 1))) "Library to interact with CERN's LDAP servers" single ((:commit . "7a2dfa4c5ec9d05ec0c4e90caedae8508a96196c") (:authors ("Nacho Barrientos" . "nacho.barrientos@cern.ch")) (:maintainers ("Nacho Barrientos" . "nacho.barrientos@cern.ch")) (:maintainer "Nacho Barrientos" . "nacho.barrientos@cern.ch") (:keywords "tools" "convenience") (:url . "https://git.sr.ht/~nbarrientos/cern-ldap.el"))])
- (cern-root-mode . [(20220905 2016) ((emacs (26 1))) "Major-mode for running C++ code with ROOT" single ((:commit . "a54241681012b00b514fd20ff894e3c4c83b45c7") (:authors ("Jay Morgan" . "jay@morganwastaken.com")) (:maintainers ("Jay Morgan" . "jay@morganwastaken.com")) (:maintainer "Jay Morgan" . "jay@morganwastaken.com") (:keywords "languages" "tools") (:url . "https://github.com/jaypmorgan/cern-root-mode"))])
- (ceylon-mode . [(20180606 1324) ((emacs (25))) "Major mode for editing Ceylon source code" single ((:commit . "948515672bc596dc118e8e3ede3ede5ec6a3c95a") (:authors ("Lucas Werkmeister" . "mail@lucaswerkmeister.de")) (:maintainers ("Lucas Werkmeister" . "mail@lucaswerkmeister.de")) (:maintainer "Lucas Werkmeister" . "mail@lucaswerkmeister.de") (:keywords "languages" "ceylon") (:url . "https://github.com/lucaswerkmeister/ceylon-mode"))])
- (cfengine-code-style . [(20171111 1027) nil "C code style for CFEngine project." single ((:commit . "92a25872a6d1de00c5bfc2b9455ccb0082bf6569") (:authors ("Mikhail Gusarov" . "mikhail.gusarov@cfengine.com")) (:maintainers ("Mikhail Gusarov" . "mikhail.gusarov@cfengine.com")) (:maintainer "Mikhail Gusarov" . "mikhail.gusarov@cfengine.com") (:url . "https://github.com/cfengine/core"))])
- (cff . [(20160118 2018) ((cl-lib (0 5)) (emacs (24))) "Search of the C/C++ file header by the source and vice versa" single ((:commit . "b6ab2a28e64ef06f281ec74cfe3114e450644dfa") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainers ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com") (:keywords "find-file") (:url . "https://github.com/fourier/cff"))])
- (cfml-mode . [(20190617 1130) ((emacs (25))) "Emacs mode for editing CFML files" single ((:commit . "b06d7cee2af0ed5d55a94f0db80fc1f429a1829a") (:authors ("Andrew Myers" . "am2605@gmail.com")) (:maintainers ("Andrew Myers" . "am2605@gmail.com")) (:maintainer "Andrew Myers" . "am2605@gmail.com") (:url . "https://github.com/am2605/cfml-mode"))])
- (cfn-mode . [(20220221 1029) ((emacs (26 0)) (f (0 20 0)) (s (1 12 0)) (yaml-mode (0 0 13))) "AWS cloudformation mode" tar ((:commit . "4cf56affe3035fda364109836e26499431095185") (:authors ("William Orr" . "will@worrbase.com")) (:maintainers ("William Orr" . "will@worrbase.com")) (:maintainer "William Orr" . "will@worrbase.com") (:keywords "convenience" "languages" "tools") (:url . "https://gitlab.com/worr/cfn-mode"))])
- (cframe . [(20201222 1930) ((emacs (26)) (buffer-manage (0 11)) (dash (2 17 0))) "Customize a frame and fast switch size and positions" single ((:commit . "38544521e82befc06e397123a118dd96dda2c6b6") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "frames") (:url . "https://github.com/plandes/cframe"))])
- (cfrs . [(20220129 1149) ((emacs (26 1)) (dash (2 11 0)) (s (1 10 0)) (posframe (0 6 0))) "Child-frame based read-string" single ((:commit . "f3a21f237b2a54e6b9f8a420a9da42b4f0a63121") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/cfrs"))])
- (cg . [(20230329 1235) ((emacs (26 1))) "Major mode for editing Constraint Grammar files" single ((:commit . "1a727582f4e929b9850e36adb8a52d6b4fb45075") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "languages") (:url . "https://visl.sdu.dk/constraint_grammar.html"))])
- (challenger-deep-theme . [(20210120 941) ((emacs (24))) "challenger-deep Theme" single ((:commit . "2a799259406a8b96a688873093ffab6630a3ad3b") (:authors ("MaxSt")) (:maintainers ("MaxSt")) (:maintainer "MaxSt") (:url . "https://github.com/challenger-deep-theme/emacs"))])
- (change-inner . [(20210126 1456) ((expand-region (0 7))) "Change contents based on semantic units" single ((:commit . "42cad58aed2caec260f8e8ff61f78a7d3db72d1b") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "convenience" "extensions"))])
- (chaos-mode . [(20221227 223) ((emacs (24 3))) "A major mode for the Chaos programming language" single ((:commit . "801d869c461166eb2face2554b9b7883a26374c6") (:authors ("XXIV")) (:maintainers ("XXIV")) (:maintainer "XXIV") (:keywords "files" "chaos") (:url . "https://github.com/thechampagne/chaos-mode"))])
- (chapel-mode . [(20210513 457) ((emacs (25 1)) (hydra (0 15 0))) "A major mode for the Chapel programming language" single ((:commit . "39fd24bb7cf44808200354ac0496be4fc4fddd9a") (:keywords "chapel" "chpl" "programming" "languages") (:url . "https://github.com/damon-kwok/chapel-mode"))])
- (char-menu . [(20210321 1657) ((emacs (24 3)) (avy-menu (0 1))) "Create your own menu for fast insertion of arbitrary symbols" single ((:commit . "d77c4d64fc8acc386a0fb9727d346c838e75f011") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "convenience" "editing") (:url . "https://github.com/mrkkrp/char-menu"))])
- (charmap . [(20200616 1418) nil "Unicode table for Emacs" single ((:commit . "feac50b87d2a596c5e5b7b82b79ddd65b6dedd8c") (:authors ("Anan Mikami" . "lateau@gmail.com")) (:maintainers ("Anan Mikami" . "lateau@gmail.com")) (:maintainer "Anan Mikami" . "lateau@gmail.com") (:keywords "unicode" "character" "ucs") (:url . "https://github.com/lateau/charmap"))])
- (chatgpt-shell . [(20230506 2203) ((emacs (27 1)) (shell-maker (0 17 1))) "Interaction mode for ChatGPT" single ((:commit . "eed5b5aeaa96914e2f6d34fec06c5b71442e2d34") (:authors ("Alvaro Ramirez https://xenodium.com")) (:maintainers ("Alvaro Ramirez https://xenodium.com")) (:maintainer "Alvaro Ramirez https://xenodium.com") (:url . "https://github.com/xenodium/chatgpt-shell"))])
- (chatwork . [(20170511 442) nil "ChatWork client for Emacs" single ((:commit . "fea231d479f06bf40dbfcf45de143eecc9ed744c") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com") (:keywords "web") (:url . "https://github.com/ataka/chatwork"))])
- (cheat-sh . [(20210607 1307) ((emacs (25 1))) "Interact with cheat.sh" single ((:commit . "33bae22feae8d3375739c6bdef08d0dcdf47ee42") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "docs" "help") (:url . "https://github.com/davep/cheat-sh.el"))])
- (cheatsheet . [(20170126 2150) ((emacs (24)) (cl-lib (0 5))) "create your own cheatsheet" single ((:commit . "e4f8e0110167ea16a17a74517d1f10cb7ff805b8") (:authors ("Shirin Nikita" . "shirin.nikita@gmail.com")) (:maintainers ("Shirin Nikita" . "shirin.nikita@gmail.com")) (:maintainer "Shirin Nikita" . "shirin.nikita@gmail.com") (:keywords "convenience" "usability") (:url . "http://github.com/darksmile/cheatsheet/"))])
- (checkbox . [(20141117 58) ((emacs (24)) (cl-lib (0 5))) "Quick manipulation of textual checkboxes" single ((:commit . "2afc2011fa35ccfa0ce9ef46cb1896911fa340d1") (:authors ("Cameron Desautels" . "camdez@gmail.com")) (:maintainers ("Cameron Desautels" . "camdez@gmail.com")) (:maintainer "Cameron Desautels" . "camdez@gmail.com") (:keywords "convenience") (:url . "http://github.com/camdez/checkbox.el"))])
- (chee . [(20171123 2233) ((dash (2 12 1)) (s (1 10 0)) (f (0 18 2))) "Interface to chee using dired and image-dired" tar ((:commit . "669ff9ee429f24c3c2d03b83d9cb9aec5f86bb8b") (:url . "https://github.com/eikek/chee/tree/release/0.3.0/emacs"))])
- (cheerilee . [(20160313 1835) ((xelb (0 1))) "Toolkit library" tar ((:commit . "41bd81b5b0bb657241ceda5be6af5e07254d7376") (:authors ("Alessio Vanni" . "vannilla@firemail.cc")) (:maintainer "Alessio Vanni" . "vannilla@firemail.cc") (:keywords "multimedia" "tools") (:url . "https://github.com/Vannil/cheerilee.el"))])
- (chef-mode . [(20180628 1453) nil "minor mode for editing an opscode chef repository" single ((:commit . "048d691cb63981ae235763d4a6ced4af5c729924") (:authors ("Maciej Pasternacki" . "maciej@pasternacki.net")) (:maintainers ("Maciej Pasternacki" . "maciej@pasternacki.net")) (:maintainer "Maciej Pasternacki" . "maciej@pasternacki.net") (:keywords "chef" "knife"))])
- (chembalance . [(20210601 1653) ((emacs (24 4))) "Balance chemical equations" single ((:commit . "ae36c823ca151f1dc6144ec96b2f5e98181c0dbb") (:authors ("Sergi Ruiz Trepat")) (:maintainers ("Sergi Ruiz Trepat")) (:maintainer "Sergi Ruiz Trepat") (:keywords "convenience" "chemistry") (:url . "https://github.com/sergiruiztrepat/chembalance"))])
- (chemtable . [(20230314 1825) ((emacs (24 1))) "Periodic table of the elements" single ((:commit . "ca0fea2f28162e90a93be242279ec6aee9046475") (:authors ("Sergi Ruiz Trepat")) (:maintainers ("Sergi Ruiz Trepat")) (:maintainer "Sergi Ruiz Trepat") (:keywords "convenience" "chemistry") (:url . "https://github.com/sergiruiztrepat/chemtable"))])
- (cherry-blossom-theme . [(20150622 342) ((emacs (24 0))) "a soothing color theme for Emacs24." single ((:commit . "e5ea23694c0f20ab670c0aa87214c27f2232d922") (:authors ("Ben Yelsey" . "byelsey1@gmail.com")) (:maintainers ("Ben Yelsey" . "byelsey1@gmail.com")) (:maintainer "Ben Yelsey" . "byelsey1@gmail.com") (:url . "https://github.com/inlinestyle/emacs-cherry-blossom-theme"))])
- (chezmoi . [(20230106 1716) ((emacs (26 1))) "A package for interacting with chezmoi" tar ((:commit . "0578f81ab01f5280e6c68d7a8a70ae4b4ba29755") (:authors ("Harrison Pielke-Lombardo")) (:maintainers ("Harrison Pielke-Lombardo")) (:maintainer "Harrison Pielke-Lombardo") (:keywords "vc") (:url . "http://www.github.com/tuh8888/chezmoi.el"))])
- (chinese-conv . [(20170807 2128) ((cl-lib (0 5))) "Conversion between Chinese Characters with opencc or cconv" single ((:commit . "b56815bbb163d642e97fa73093b5a7e87cc32574") (:authors ("gucong" . "gucong43216@gmail.com")) (:maintainers ("gucong" . "gucong43216@gmail.com")) (:maintainer "gucong" . "gucong43216@gmail.com") (:url . "https://github.com/gucong/emacs-chinese-conv"))])
- (chinese-number . [(20161008 509) nil "Convert numbers between Arabic and Chinese formats" single ((:commit . "1d0c440181848dfcd1d1e618b2650fb0562a32ac") (:authors (nil . "zhcosin<zhcosin@163.com>")) (:maintainers (nil . "zhcosin<zhcosin@163.com>")) (:maintainer nil . "zhcosin<zhcosin@163.com>") (:url . "https://github.com/zhcosin/chinese-number"))])
- (chinese-wbim . [(20190727 854) nil "Enable Wubi Input Method in Emacs." tar ((:commit . "5d496364b0b6bbaaf0f9b37e5a6d260d4994f260") (:authors (nil . "Guanghui Qu<guanghui8827@gmail.com>")) (:maintainer nil . "Guanghui Qu<guanghui8827@gmail.com>") (:keywords "wubi" "input" "method.") (:url . "https://github.com/andyque/chinese-wbim"))])
- (chinese-word-at-point . [(20170811 941) ((cl-lib (0 5))) "Add `chinese-word' thing to `thing-at-point'" single ((:commit . "8223d7439e005555b86995a005b225ae042f0538") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "convenience" "chinese") (:url . "https://github.com/xuchunyang/chinese-word-at-point.el"))])
- (chinese-yasdcv . [(20171015 144) ((cl-lib (0 5)) (pyim (1 6 0))) "Yet another StarDict frontend" tar ((:commit . "5ab830daf1273d5a5cddcb94b56a9737f12d996f") (:authors ("Feng Shu" . "tumashu@gmail.com")) (:maintainers ("Feng Shu" . "tumashu@gmail.com")) (:maintainer "Feng Shu" . "tumashu@gmail.com") (:keywords "convenience" "chinese" "dictionary") (:url . "https://github.com/tumashu/chinese-yasdcv"))])
- (chocolate-theme . [(20210128 1647) ((emacs (24 1)) (autothemer (0 2))) "A dark chocolaty theme" single ((:commit . "ccc05f7ad96d3d1332727689bf6250443adc7ec0") (:url . "http://github.com/SavchenkoValeriy/emacs-chocolate-theme"))])
- (choice-program . [(20201217 1751) ((emacs (26)) (dash (2 17 0))) "Parameter based program" tar ((:commit . "b8b1b6c5568f8778783454d5747912487c8e69b8") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "execution" "processes" "unix" "lisp") (:url . "https://github.com/plandes/choice-program"))])
- (chroma . [(20230503 1210) ((emacs (24 1))) "Color manipulation library" single ((:commit . "e6ebe08ce439b0dd8cfd2a0a78abf34f195feb3c") (:authors ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainers ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainer "Nicolas Martyanoff" . "nicolas@n16f.net") (:url . "https://github.com/galdor/chroma"))])
- (chronometer . [(20190304 1528) ((emacs (24))) "a [not so] simple chronometer" single ((:commit . "8457b296ef87be339cbe47730b922757d60bdcd5") (:authors ("Marcelo Toledo" . "marcelo@marcelotoledo.com")) (:maintainers ("Marcelo Toledo" . "marcelo@marcelotoledo.com")) (:maintainer "Marcelo Toledo" . "marcelo@marcelotoledo.com") (:keywords "tools" "convenience") (:url . "https://github.com/marcelotoledo/chronometer"))])
- (chronometrist . [(20230302 700) ((emacs (27 1)) (dash (2 16 0)) (seq (2 20)) (ts (0 2))) "Friendly and powerful personal time tracker and analyzer" tar ((:commit . "015524bbeb4a112db7bb2af813408cc3c5c93240") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de") (:keywords "calendar") (:url . "https://tildegit.org/contrapunctus/chronometrist"))])
- (chronometrist-goal . [(20210510 1831) ((emacs (25 1)) (alert (1 2)) (chronometrist (0 7 0))) "Adds support for time goals to Chronometrist" single ((:commit . "6cb939d160f5d5966d7853aa23f3ed7c7ef9df44") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabber.fr") (:keywords "calendar") (:url . "https://tildegit.org/contrapunctus/chronometrist-goal"))])
- (chronometrist-key-values . [(20220414 726) ((chronometrist (0 7 0))) "add key-values to Chronometrist data" tar ((:commit . "9f970ebb637d57b3234b6e1e85840dcf524037e6") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de") (:keywords "calendar") (:url . "https://tildegit.org/contrapunctus/chronometrist"))])
- (chronometrist-spark . [(20220321 349) ((emacs (25 1)) (chronometrist (0 7 0)) (spark (0 1))) "Show sparklines in Chronometrist buffers" tar ((:commit . "239f733dd8f784a5251ae253d350a99fb739da6e") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabjab.de")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabjab.de") (:keywords "calendar") (:url . "https://tildegit.org/contrapunctus/chronometrist"))])
- (chronos . [(20150602 1529) nil "multiple simultaneous countdown / countup timers" tar ((:commit . "b360d9dae57aa553cf2a14ffa0756a51ad71de09") (:authors ("David Knight" . "dxknight@opmbx.org")) (:maintainers ("David Knight" . "dxknight@opmbx.org")) (:maintainer "David Knight" . "dxknight@opmbx.org") (:keywords "calendar") (:url . "http://github.com/dxknight/chronos"))])
- (chruby . [(20180114 1652) ((cl-lib (0 5))) "Emacs integration for chruby" single ((:commit . "42bc6d521f832eca8e2ba210f30d03ad5529788f") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:keywords "languages") (:url . "https://github.com/plexus/chruby.el"))])
- (chyla-theme . [(20221213 1012) nil "chyla.org - green color theme." single ((:commit . "b24d0379516857ccf75caff9ae1d00b820c9a6f6") (:authors ("Adam Chyła" . "adam@chyla.org")) (:maintainers ("Adam Chyła" . "adam@chyla.org")) (:maintainer "Adam Chyła" . "adam@chyla.org") (:url . "https://github.com/chyla/ChylaThemeForEmacs"))])
- (cider . [(20230426 1815) ((emacs (26)) (clojure-mode (5 16 0)) (parseedn (1 0 6)) (queue (0 2)) (spinner (1 7)) (seq (2 22)) (sesman (0 3 2))) "Clojure Interactive Development Environment that Rocks" tar ((:commit . "3b8e5396ac8fc60fb9284aece1fc8c325516f745") (:authors ("Tim King" . "kingtim@gmail.com") ("Phil Hagelberg" . "technomancy@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.dev") ("Artur Malabarba" . "bruce.connor.am@gmail.com") ("Hugo Duncan" . "hugo@hugoduncan.org") ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "languages" "clojure" "cider") (:url . "http://www.github.com/clojure-emacs/cider"))])
- (cider-decompile . [(20151122 537) ((cider (0 3 0)) (javap-mode (9))) "decompilation extension for cider" single ((:commit . "5d87035f3c3c14025e8f01c0c53d0ce2c8f56651") (:authors ("Dmitry Bushenko")) (:maintainers ("Dmitry Bushenko")) (:maintainer "Dmitry Bushenko") (:keywords "languages" "clojure" "cider") (:url . "http://www.github.com/clojure-emacs/cider-decompile"))])
- (cider-eval-sexp-fu . [(20190311 2152) ((emacs (24)) (eval-sexp-fu (0 5 0))) "Briefly highlights an evaluated sexp." single ((:commit . "7fd229f1441356866aedba611fd0cf4e89b50921") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:keywords "languages" "clojure" "cider"))])
- (cider-hydra . [(20190816 1121) ((cider (0 22 0)) (hydra (0 13 0))) "Hydras for CIDER." single ((:commit . "c3b8a15d72dddfbc390ab6a454bd7e4c765a2c95") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/clojure-emacs/cider-hydra"))])
- (ciel . [(20180914 815) ((emacs (24))) "A command that is clone of \"ci\" in vim." single ((:commit . "429773a3c551691a463ecfddd634b8bae2f48503") (:authors ("Takuma Matsushita" . "cs14095@gmail.com")) (:maintainers ("Takuma Matsushita" . "cs14095@gmail.com")) (:maintainer "Takuma Matsushita" . "cs14095@gmail.com") (:keywords "convinience") (:url . "https://github.com/cs14095/ciel.el"))])
- (cil-mode . [(20160622 1431) nil "Common Intermediate Language mode" single ((:commit . "a78a88ca9a66a82f069329a96e34b67478ae2d9b") (:authors ("Friedrich von Never" . "friedrich@fornever.me")) (:maintainers ("Friedrich von Never" . "friedrich@fornever.me")) (:maintainer "Friedrich von Never" . "friedrich@fornever.me") (:keywords "languages") (:url . "https://github.com/ForNeVeR/cil-mode"))])
- (cilk-mode . [(20220807 1629) ((emacs (25 1)) (flycheck (32 -4))) "Minor mode for Cilk code editing" single ((:commit . "d5ba732a5a313a97a96085943cd7840b8e2d9c7c") (:authors ("Alexandros-Stavros Iliopoulos <https://github.com/ailiop>")) (:maintainers ("Alexandros-Stavros Iliopoulos" . "1577182+ailiop@users.noreply.github.com")) (:maintainer "Alexandros-Stavros Iliopoulos" . "1577182+ailiop@users.noreply.github.com") (:keywords "c" "convenience" "faces" "languages") (:url . "https://github.com/ailiop/cilk-mode"))])
- (cinspect . [(20150716 233) ((emacs (24)) (cl-lib (0 5)) (deferred (0 3 1)) (python-environment (0 0 2))) "Use cinspect to look at the CPython source of builtins and other C objects!" single ((:commit . "4e199a90f89b335cccda1518aa0963e0a1d4fbab") (:authors ("Ben Yelsey" . "ben.yelsey@gmail.com")) (:maintainers ("Ben Yelsey" . "ben.yelsey@gmail.com")) (:maintainer "Ben Yelsey" . "ben.yelsey@gmail.com") (:keywords "python") (:url . "https://github.com/inlinestyle/cinspect-mode"))])
- (circadian . [(20221223 1734) ((emacs (24 4))) "Theme-switching based on daytime" single ((:commit . "9959e4b9d2ed9920b668fc229aab1f5fa5bd8584") (:authors ("Guido Schmidt")) (:maintainers ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc") (:keywords "themes") (:url . "https://github.com/GuidoSchmidt/circadian"))])
- (circe . [(20221126 1508) ((emacs (25 1)) (cl-lib (0 5))) "Client for IRC in Emacs" tar ((:commit . "57fe189d7c0b98b9b1b5a59767cea1c7e2c22b13") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:keywords "irc" "chat" "comm") (:url . "https://github.com/emacs-circe/circe"))])
- (circe-notifications . [(20180102 2318) ((emacs (24 4)) (circe (2 3)) (alert (1 2))) "Add desktop notifications to Circe." single ((:commit . "291149ac12877bbd062da993479d3533a26862b0") (:authors ("Ruben Maher" . "r@rkm.id.au")) (:maintainers ("Ruben Maher" . "r@rkm.id.au")) (:maintainer "Ruben Maher" . "r@rkm.id.au") (:url . "https://github.com/eqyiel/circe-notifications"))])
- (circleci-api . [(20210227 1607) ((emacs (27)) (request (0 3 2))) "Bindings for the CircleCI API" single ((:commit . "1432b0ad0f32b03fec564c0815951d5e096c2f6a") (:authors ("Robin Schroer")) (:maintainers ("Robin Schroer")) (:maintainer "Robin Schroer") (:url . "https://github.com/sulami/circleci-api"))])
- (citar . [(20230325 136) ((emacs (27 1)) (parsebib (4 2)) (org (9 5)) (citeproc (0 9))) "Citation-related commands for org, latex, markdown" tar ((:commit . "02034795f4c3bb46e782f8bd34dd486ce1fb9244") (:authors ("Bruce D'Arcus <https://github.com/bdarcus>")) (:maintainers ("Bruce D'Arcus <https://github.com/bdarcus>")) (:maintainer "Bruce D'Arcus <https://github.com/bdarcus>") (:url . "https://github.com/emacs-citar/citar"))])
- (citar-denote . [(20230403 1038) ((emacs (28 1)) (citar (1 1)) (denote (1 2 0)) (dash (2 19 1))) "Minor mode to integrate Citar and Denote" single ((:commit . "327c7f386e8660c63b48568d23315cbebf95d151") (:authors ("Peter Prevos" . "peter@prevos.net")) (:maintainers ("Peter Prevos" . "peter@prevos.net")) (:maintainer "Peter Prevos" . "peter@prevos.net") (:url . "https://github.com/pprevos/citar-denote"))])
- (citar-embark . [(20230323 1926) ((emacs (27 1)) (embark (0 17)) (citar (0 9 7))) "Citar/Embark integration" single ((:commit . "0c6a8038e9b7f72c2e6837bd3342eab942c08d0d") (:authors ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainers ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainer "Bruce D'Arcus" . "bdarcus@gmail.com") (:keywords "bib" "extensions") (:url . "https://github.com/emacs-citar/citar-embark"))])
- (citar-org-roam . [(20230404 1225) ((emacs (27 1)) (org-roam (2 2)) (citar (1 2 0))) "Citar/org-roam integration" single ((:commit . "761eed66782fdbb6d65749098caa42ba43e8441d") (:authors ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainers ("Bruce D'Arcus" . "bdarcus@gmail.com")) (:maintainer "Bruce D'Arcus" . "bdarcus@gmail.com") (:url . "https://github.com/emacs-citar/citar-org-roam"))])
- (citeproc . [(20230228 1414) ((emacs (26)) (dash (2 13 0)) (s (1 12 0)) (f (0 18 0)) (queue (0 2)) (string-inflection (1 0)) (org (9)) (parsebib (2 4))) "A CSL 1.0.2 Citation Processor" tar ((:commit . "290320fc579f886255f00d7268600df7fa5cc7e8") (:authors ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainers ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainer "András Simonyi" . "andras.simonyi@gmail.com") (:keywords "bib") (:url . "https://github.com/andras-simonyi/citeproc-el"))])
- (citeproc-org . [(20200915 2009) ((emacs (25 1)) (dash (2 12 0)) (org (9)) (f (0 18 0)) (citeproc (0 1)) (org-ref (1 1 1))) "Render org-mode references in CSL styles" tar ((:commit . "22a759c4f0ec80075014dcc594baa4d1b470d995") (:authors ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainers ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainer "András Simonyi" . "andras.simonyi@gmail.com") (:keywords "org-ref" "org-mode" "cite" "bib") (:url . "https://github.com/andras-simonyi/citeproc-org"))])
- (citre . [(20230217 1202) ((emacs (26 1))) "Ctags IDE on the True Editor" tar ((:commit . "4626ada80fabea6b62935567acc1cb8dad607016") (:authors ("Hao Wang" . "amaikinono@gmail.com")) (:maintainers ("Hao Wang" . "amaikinono@gmail.com")) (:maintainer "Hao Wang" . "amaikinono@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/universal-ctags/citre"))])
- (cl-format . [(20210831 530) nil "CL format routine." tar ((:commit . "ad1a4fb6bc91e65ea90bcf6792cc5a1be5380f9d") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "akater" . "nuclearspace@gmail.com") (:keywords "extensions") (:url . "https://gitlab.com/akater/elisp-cl-format"))])
- (cl-libify . [(20181130 230) ((emacs (25))) "Update elisp code to use cl-lib instead of cl" single ((:commit . "e205b96f944a4f312fd523804cbbaf00027a3c8b") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "lisp") (:url . "https://github.com/purcell/cl-libify"))])
- (clang-capf . [(20221030 1830) ((emacs (24 4))) "Completion-at-point backend for c/c++ using clang" single ((:commit . "5e4dfba90ce86bbc7ee61805edfca04fff93c291") (:authors ("Philip K. <philipk [at] posteo [dot] net>")) (:maintainers ("Philip K. <philipk [at] posteo [dot] net>")) (:maintainer "Philip K. <philipk [at] posteo [dot] net>") (:keywords "c" "abbrev" "convenience") (:url . "https://git.sr.ht/~pkal/clang-capf"))])
- (clang-format . [(20191106 950) ((cl-lib (0 3))) "Format code using clang-format" single ((:commit . "e48ff8ae18dc7ab6118c1f6752deb48cb1fc83ac") (:keywords "tools" "c"))])
- (clang-format+ . [(20190824 2216) ((emacs (25 1)) (clang-format (20180406 1514))) "Minor mode for automatic clang-format application" single ((:commit . "ddd4bfe1a13c2fd494ce339a320a51124c1d2f68") (:keywords "c" "c++" "clang-format") (:url . "https://github.com/SavchenkoValeriy/emacs-clang-format-plus"))])
- (clause . [(20230405 1235) ((emacs (27 1)) (mark-thing-at (0 3))) "Functions to move, mark, kill by clause" single ((:commit . "0ea166fa218618c1b80b60c995f927310c25b02a") (:authors ("Marty Hiatt <martianhiatus [a t] riseup [dot] net>")) (:maintainers ("Marty Hiatt <martianhiatus [a t] riseup [dot] net>")) (:maintainer "Marty Hiatt <martianhiatus [a t] riseup [dot] net>") (:keywords "wp" "convenience" "sentences" "text") (:url . "https://codeberg.org/martianh/clause.el"))])
- (clean-aindent-mode . [(20171017 2043) nil "Simple indent and unindent, trims indent white-space" single ((:commit . "a97bcae8f43a9ff64e95473e4ef0d8bafe829211") (:authors ("peter marinov" . "efravia@gmail.com")) (:maintainers ("peter marinov" . "efravia@gmail.com")) (:maintainer "peter marinov" . "efravia@gmail.com") (:keywords "indentation" "whitespace" "backspace") (:url . "https://github.com/pmarinov/clean-aindent-mode"))])
- (clean-buffers . [(20160529 2259) ((cl-lib (0 5))) "clean useless buffers" single ((:commit . "1be6c54e3095761b6b64bf749faae3dfce94e72a") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "usability" "buffers"))])
- (clean-kill-ring . [(20230115 2153) ((emacs (24 4))) "Keep the kill ring clean" single ((:commit . "d05fa7ee97e760d21d533261c7b63eecf223f612") (:authors ("Nicholas Hubbard" . "nicholashubbard@posteo.net")) (:maintainers ("Nicholas Hubbard" . "nicholashubbard@posteo.net")) (:maintainer "Nicholas Hubbard" . "nicholashubbard@posteo.net") (:keywords "kill-ring" "convenience") (:url . "http://github.com/NicholasBHubbard/clean-kill-ring.el"))])
- (clear-text . [(20160406 2043) nil "Make you use clear text" tar ((:commit . "b50669b6077d6948f72cb3c649281d206e0c2f2b") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "convenience") (:url . "https://github.com/xuchunyang/clear-text.el"))])
- (clevercss . [(20131229 155) nil "A major mode for editing CleverCSS files" single ((:commit . "b8a3c0dd674367c62b1a1ffec84d88fe0c0219bc") (:authors ("Joe Schafer" . "joesmoe10@gmail.com")) (:maintainers ("Joe Schafer" . "joesmoe10@gmail.com")) (:maintainer "Joe Schafer" . "joesmoe10@gmail.com") (:keywords "languages" "css"))])
- (clhs . [(20210428 1911) nil "Access the Common Lisp HyperSpec (CLHS)" single ((:commit . "7b106c4fb5a6388ab753f94740f6dfadcdeedcbb") (:maintainers ("Sam Steingold" . "sds@gnu.org")) (:maintainer "Sam Steingold" . "sds@gnu.org") (:keywords "lisp" "common lisp" "emacs" "ansi cl" "hyperspec") (:url . "https://gitlab.com/sam-s/clhs"))])
- (click-mode . [(20180611 44) ((emacs (24))) "Major mode for the Click Modular Router Project" single ((:commit . "b94ea8cce89cf0e753b2ab915202d49ffc470fb6") (:authors ("Brian Malehorn" . "bmalehorn@gmail.com")) (:maintainers ("Brian Malehorn" . "bmalehorn@gmail.com")) (:maintainer "Brian Malehorn" . "bmalehorn@gmail.com") (:keywords "click" "router") (:url . "https://github.com/bmalehorn/click-mode"))])
- (clingo-mode . [(20220502 2020) ((emacs (24 3))) "A major mode for editing Answer Set Programs" single ((:commit . "cf56ce6b5c50506f6cea27e1dde0441dd8d15ee9") (:authors ("Ivan Uemlianin" . "ivan@llaisdy.com")) (:maintainers ("Ivan Uemlianin" . "ivan@llaisdy.com")) (:maintainer "Ivan Uemlianin" . "ivan@llaisdy.com") (:keywords "asp" "clingo" "answer set programs" "potassco" "major mode" "languages") (:url . "https://github.com/llaisdy/clingo-mode"))])
- (clipetty . [(20200327 2241) ((emacs (25 1))) "Send every kill from a TTY frame to the system clipboard" single ((:commit . "7ee3f9c52f70f80820a8c66fb6f796d6e01dd92d") (:authors ("Mike Hamrick" . "mikeh@muppetlabs.com")) (:maintainers ("Mike Hamrick" . "mikeh@muppetlabs.com")) (:maintainer "Mike Hamrick" . "mikeh@muppetlabs.com") (:keywords "terminals" "convenience") (:url . "https://github.com/spudlyo/clipetty"))])
- (cliphist . [(20220525 1034) ((emacs (25 1))) "paste from clipboard managers" tar ((:commit . "d02b97a2aa0da13711d9a6f845649115de8ac11b") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "clipboard" "manager" "history") (:url . "http://github.com/redguardtoo/cliphist"))])
- (clipmon . [(20180129 1054) nil "Clipboard monitor - watch system clipboard, add changes to kill ring/autoinsert" tar ((:commit . "95dc56c7ed84a654ec90f4740eb6df1050de8cf1") (:authors ("Brian Burns" . "bburns.km@gmail.com")) (:maintainers ("Brian Burns" . "bburns.km@gmail.com")) (:maintainer "Brian Burns" . "bburns.km@gmail.com") (:keywords "convenience") (:url . "https://github.com/bburns/clipmon"))])
- (clippy . [(20230118 1924) ((pos-tip (1 0))) "Show tooltip with function documentation at point" single ((:commit . "85aec3129ff17f71ea4541cfadbb7b56b31a7474") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "docs") (:url . "https://github.com/Fuco1/clippy.el"))])
- (clips-mode . [(20170909 823) nil "Major mode for editing CLIPS code and REPL" tar ((:commit . "dd38e2822640a38f7d8bfec4f69d8dd24be27074") (:authors ("David E. Young" . "david.young@fnc.fujitsu.com") ("Andrey Kotlarski" . "m00naticus@gmail.com") ("Grant Rettke" . "grettke@acm.org")) (:maintainer "Grant Rettke" . "grettke@acm.org") (:keywords "clips"))])
- (clj-decompiler . [(20220103 1746) ((emacs (26 1)) (clojure-mode (5 12)) (cider (1 2 0))) "Clojure Java decompiler expansion" single ((:commit . "8c0c53f87e6e33f2be7e7aff6095eb586b50be1a") (:authors ("Ben Sless" . "ben.sless@gmail.com")) (:maintainers ("Ben Sless" . "ben.sless@gmail.com")) (:maintainer "Ben Sless" . "ben.sless@gmail.com") (:keywords "languages" "clojure" "cider" "java" "decompiler") (:url . "https://www.github.com/bsless/clj-decompiler.el"))])
- (clj-deps-new . [(20230413 1833) ((emacs (25 1)) (transient (0 3 7))) "Create clojure projects from templates" single ((:commit . "72f25d86bbd9cd6cb4aa431e70bda38f35b19262") (:authors ("jpe90" . "eskinjp@gmail.com")) (:maintainers ("jpe90" . "eskinjp@gmail.com")) (:maintainer "jpe90" . "eskinjp@gmail.com") (:url . "https://github.com/jpe90/emacs-deps-new"))])
- (clj-refactor . [(20230423 2147) ((emacs (26 1)) (seq (2 19)) (yasnippet (0 6 1)) (paredit (24)) (multiple-cursors (1 2 2)) (clojure-mode (5 14)) (cider (1 4 1)) (parseedn (1 1 0)) (inflections (2 6)) (hydra (0 13 2))) "A collection of commands for refactoring Clojure code" tar ((:commit . "ffc6be1ef170402d25b068fb98a5a934cc5a5c36") (:authors ("Magnar Sveen" . "magnars@gmail.com") ("Lars Andersen" . "expez@expez.com") ("Benedek Fazekas" . "benedek.fazekas@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "convenience" "clojure" "cider"))])
- (cljr-helm . [(20220721 824) ((clj-refactor (0 13 0)) (helm-core (3 6 0)) (cl-lib (0 5))) "Wraps clojure refactor commands with helm" single ((:commit . "2c1f9cbd892ec03335f671ea3f974ee2ff6078dc") (:authors ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Phil Jackson" . "phil@shellarchive.co.uk") (:keywords "helm" "clojure" "refactor") (:url . "https://github.com/philjackson/cljr-helm"))])
- (cljr-ivy . [(20200602 1607) ((clj-refactor (2 5 0)) (ivy (0 13 0)) (emacs (24 3)) (cl-lib (0 6 1))) "Access clojure refactor with ivy completion" single ((:commit . "18e6e3526e872010a643c91aa71ff1d429431b83") (:authors ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainers ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainer "Wanderson Ferreira" . "iagwanderson@gmail.com") (:keywords "convenience" "matching") (:url . "https://github.com/wandersoncferreira/cljr-ivy"))])
- (cljsbuild-mode . [(20160402 1700) nil "A minor mode for the ClojureScript 'lein cljsbuild' command" single ((:commit . "fa2315660cb3ce944b5e16c679dcf5afd6a97f4c") (:keywords "clojure" "clojurescript" "leiningen" "compilation") (:url . "http://github.com/kototama/cljsbuild-mode"))])
- (cljstyle-format . [(20220706 309) ((emacs (24)) (reformatter (0 3))) "Reformat Clojure code using cljstyle" single ((:commit . "31a43dfbeea12bbd4639dcec4fbb043cc0ff86d3") (:authors ("Derek Passen" . "dpassen1@gmail.com")) (:maintainers ("Derek Passen" . "dpassen1@gmail.com")) (:maintainer "Derek Passen" . "dpassen1@gmail.com") (:keywords "clojure" "cljstyle" "tools" "languages") (:url . "http://www.github.com/dpassen/cljstyle-format"))])
- (clmemo . [(20220204 1345) nil "Change Log MEMO" tar ((:commit . "f695c38c551f72f6ac5e1a82badc540c80d3b33b") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com") (:keywords "convenience") (:url . "https://github.com/ataka/clmemo"))])
- (cloak-mode . [(20230130 613) ((emacs (27 1))) "A minor mode to cloak sensitive values" single ((:commit . "ca0896dfd0a0ee549150233ebd96aa0f65b56afb") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io") (:url . "https://github.com/erickgnavar/cloak-mode"))])
- (cloc . [(20170728 1824) ((cl-lib (0 5))) "count lines of code over emacs buffers" single ((:commit . "f30f0472e465cc8d433d2473e9d3b8dfe2c94491") (:authors ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainers ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Danny McClanahan" . "danieldmcclanahan@gmail.com") (:keywords "cloc" "count" "source" "code" "lines") (:url . "https://github.com/cosmicexplorer/cloc-emacs"))])
- (clocker . [(20190214 1833) ((projectile (0 11 0)) (dash (2 10)) (spaceline (2 0 1))) "Note taker and clock-in enforcer" single ((:commit . "c4d76968a49287ce3bac0832bb5d5d076054c96f") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") (:keywords "org"))])
- (clockodo . [(20220604 2049) ((emacs (26 1)) (request (0 3 2)) (ts (0 2 2)) (org (8))) "A small integration for the clockodo api" single ((:commit . "6329aaebc4373edaa4cd1d046582a4cc36db4888") (:authors ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainers ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainer "Henrik Jürges" . "juerges.henrik@gmail.com") (:keywords "tools" "clockodo") (:url . "https://github.com/santifa/clockodo-el"))])
- (clojars . [(20180825 1951) ((request-deferred (0 2 0))) "clojars.org search interface" single ((:commit . "c78e4d5ddacda064c253e2b38d1c35188aa1ad71") (:authors ("Joshua Miller" . "josh@joshmiller.io")) (:maintainers ("Joshua Miller" . "josh@joshmiller.io")) (:maintainer "Joshua Miller" . "josh@joshmiller.io") (:keywords "docs" "help" "tools") (:url . "https://github.com/joshuamiller/clojars.el"))])
- (clojure-essential-ref . [(20221215 1427) ((emacs (24)) (cider (0 24 0))) "Cider-doc to \"Clojure, The Essential Reference\"" single ((:commit . "6741bf65cf9b9bc896ab1cc3c384573e8ffe5f96") (:url . "https://github.com/p3r7/clojure-essential-ref"))])
- (clojure-essential-ref-nov . [(20221215 1427) ((emacs (24)) (dash (2 16 0)) (nov (0 3 1)) (clojure-essential-ref (0 1 0))) "Cider-doc to \"Clojure, The Essential Reference\" (EPUB)" single ((:commit . "6741bf65cf9b9bc896ab1cc3c384573e8ffe5f96") (:url . "https://github.com/p3r7/clojure-essential-ref"))])
- (clojure-mode . [(20230314 758) ((emacs (25 1))) "Major mode for Clojure code" single ((:commit . "906d6a47a646d1191eaead6f8e1ae0810aa9b626") (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "languages" "clojure" "clojurescript" "lisp") (:url . "http://github.com/clojure-emacs/clojure-mode"))])
- (clojure-mode-extra-font-locking . [(20221214 915) ((clojure-mode (3 0))) "Extra font-locking for Clojure mode" single ((:commit . "3453cd229b412227aaffd1dc2870fa8fa213c5b1") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "languages" "lisp") (:url . "http://github.com/clojure-emacs/clojure-mode"))])
- (clojure-quick-repls . [(20150814 736) ((cider (0 8 1)) (dash (2 9 0))) "Quickly create Clojure and ClojureScript repls for a project." single ((:commit . "8fe4e44939e8a01a4cdf60c0001d9a6abf8a73c3") (:keywords "languages" "clojure" "cider" "clojurescript") (:url . "https://github.com/symfrog/clojure-quick-repls"))])
- (clojure-snippets . [(20220914 950) ((yasnippet (0 10 0))) "Yasnippets for clojure" tar ((:commit . "66d23f0ffedf2cc2be0387c3504b5f89d7300cfa") (:authors ("Max Penet" . "m@qbits.cc")) (:maintainer "Max Penet" . "m@qbits.cc") (:keywords "snippets"))])
- (clomacs . [(20220415 1035) ((emacs (24 3)) (cider (0 22 1)) (s (1 12 0)) (simple-httpd (1 4 6)) (dash (2 19 1))) "Simplifies Emacs Lisp interaction with Clojure." single ((:commit . "9cd7c9fd86bc7bc627a31275d1ef131378b90a49") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:keywords "clojure" "interaction") (:url . "https://github.com/clojure-emacs/clomacs"))])
- (closql . [(20230425 1334) ((emacs (25 1)) (compat (29 1 3 4)) (emacsql (20230220))) "Store EIEIO objects using EmacSQL" single ((:commit . "618c94dba7666e8c55c0094ee21fa0381d3536df") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "extensions") (:url . "https://github.com/emacscollective/closql"))])
- (closure-lint-mode . [(20101118 2124) nil "minor mode for the Closure Linter" single ((:commit . "bc3d2fd5c35580bf1b8af43b12484c95a343b4b5") (:authors ("Roman Scherer" . "roman@burningswell.com")) (:maintainers ("Roman Scherer" . "roman@burningswell.com")) (:maintainer "Roman Scherer" . "roman@burningswell.com") (:keywords "tools" "closure" "javascript" "lint" "flymake") (:url . "https://github.com/r0man/closure-lint-mode"))])
- (cloud-theme . [(20220205 1336) ((emacs (24))) "A light colored theme" single ((:commit . "16ef7fbf0a423b29e3c3a0a2d9525afaf265aaed") (:authors ("Valerii Lysenko" . "vallyscode@gmail.com")) (:maintainers ("Valerii Lysenko" . "vallyscode@gmail.com")) (:maintainer "Valerii Lysenko" . "vallyscode@gmail.com") (:keywords "color" "theme") (:url . "https://github.com/vallyscode/cloud-theme"))])
- (cloud-to-butt-erc . [(20130627 2308) nil "Replace 'the cloud' with 'my butt'" single ((:commit . "6710c03d1bc91736435cbfe845924940cae34e5c") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/cloud-to-butt-erc"))])
- (clues-theme . [(20161213 1127) ((emacs (24 0))) "an Emacs 24 theme which may well be fully awesome..." single ((:commit . "abd61f2b7f3e98de58ca26e6d1230e70c6406cc7") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/emacsfodder/emacs-clues-theme"))])
- (cm-mode . [(20170203 2107) ((cl-lib (0 5))) "Minor mode for CriticMarkup" single ((:commit . "276d49c859822265070ae5dfbb403fd7d8d06436") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:keywords "text" "markdown"))])
- (cmake-font-lock . [(20230304 2223) ((cmake-mode (0 0))) "Advanced, type aware, highlight support for CMake" single ((:commit . "a6038e916bcca807ae695f7d7e5c300c3f38f415") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces" "languages") (:url . "https://github.com/Lindydancer/cmake-font-lock"))])
- (cmake-ide . [(20210610 1525) ((emacs (24 4)) (cl-lib (0 5)) (seq (1 11)) (levenshtein (0)) (s (1 11 0))) "Calls CMake to find out include paths and other compiler flags" single ((:commit . "28dc4ab5bd01d99553901b4efeb7234280928b18") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainers ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com") (:keywords "languages") (:url . "http://github.com/atilaneves/cmake-ide"))])
- (cmake-mode . [(20230422 828) ((emacs (24 1))) "major-mode for editing CMake sources" single ((:commit . "a2fc16510ce3f89e34bd802c808d10951cfc94f5"))])
- (cmake-project . [(20171121 1115) nil "Integrates CMake build process with Emacs" single ((:commit . "d3f408f226eff3f77f7e00dd519f4efc78fd292d") (:authors ("Alexander Lamaison" . "alexander.lamaison@gmail")) (:maintainers ("Alexander Lamaison" . "alexander.lamaison@gmail")) (:maintainer "Alexander Lamaison" . "alexander.lamaison@gmail") (:keywords "c" "cmake" "languages" "tools") (:url . "http://github.com/alamaison/emacs-cmake-project"))])
- (cmd-to-echo . [(20161203 2133) ((emacs (24 4)) (s (1 11 0)) (shell-split-string (20151224 208))) "Show the output of long-running commands in the echo area" single ((:commit . "e0e874fc0e1ad6d291e39ed76023445297ad438a") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))])
- (cmm-mode . [(20150225 746) nil "Major mode for C-- source code" single ((:commit . "c3ad514dff3eb30434f6b20d953276d4c00de1ee"))])
- (cnfonts . [(20230412 132) ((emacs (24))) "A simple Chinese fonts config tool" tar ((:commit . "5115f53366bd6118dce3673ddec5ff428534ce67") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience" "chinese" "font") (:url . "https://github.com/tumashu/cnfonts"))])
- (cobalt . [(20180304 1155) ((emacs (24))) "Easily use the Cobalt.rs static site generator" single ((:commit . "634ace275697e188746ca22a30ff94380ec756be") (:authors ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainers ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainer "Juan Karlo Licudine" . "accidentalrebel@gmail.com") (:keywords "convenience") (:url . "https://github.com/cobalt-org/cobalt.el"))])
- (cobra-mode . [(20140116 2116) nil "Major mode for .NET-based Cobra language" single ((:commit . "acd6e53f6286af5176471d01f25257e5ddb6dd01") (:authors ("Taylor \"Nekroze\" Lawson")) (:maintainers ("Taylor \"Nekroze\" Lawson")) (:maintainer "Taylor \"Nekroze\" Lawson") (:keywords "languages") (:url . "http://github.com/Nekroze/cobra-mode"))])
- (codcut . [(20190915 1009) nil "Share pieces of code to Codcut" single ((:commit . "bf07c3db3900e36b0b87423f3b715d6378f86393") (:authors ("Diego Pasquali" . "hello@dgopsq.space")) (:maintainers ("Diego Pasquali" . "hello@dgopsq.space")) (:maintainer "Diego Pasquali" . "hello@dgopsq.space") (:keywords "comm" "tools" "codcut" "share") (:url . "https://github.com/codcut/codcut-emacs"))])
- (code-archive . [(20190612 308) ((emacs (24 3))) "git supported code archive and reference for org-mode" single ((:commit . "1ad9af6679d0294c3056eab9cad673f29c562721") (:authors ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com") (:url . "https://github.com/mschuldt/code-archive"))])
- (code-cells . [(20220917 1431) ((emacs (27 1))) "Lightweight notebooks with support for ipynb files" single ((:commit . "fd68a33eb43b3cbd44fed767f48e230382903592") (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainers ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") (:keywords "convenience" "outlines") (:url . "https://github.com/astoff/code-cells.el"))])
- (code-compass . [(20230411 1032) ((emacs (26 1)) (s (1 12 0)) (dash (2 13)) (async (1 9 7)) (simple-httpd (1 5 1))) "Navigate software aided by metrics and visualization" tar ((:commit . "ffd26ff116d18c4459eb491824553668ba1227b3") (:authors ("Andrea" . "andrea-dev@hotmail.com")) (:maintainers ("Andrea" . "andrea-dev@hotmail.com")) (:maintainer "Andrea" . "andrea-dev@hotmail.com") (:keywords "tools" "extensions" "help") (:url . "https://github.com/ag91/code-compass"))])
- (code-library . [(20160426 1218) ((gist (1 3 1))) "use org-mode to collect code snippets" single ((:commit . "3c79338eae5c892bfb4e4882298422d9fd65d2d7") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "lisp" "code"))])
- (code-review . [(20221206 113) ((emacs (25 1)) (closql (1 2 0)) (magit (3 0 0)) (transient (0 3 7)) (a (1 0 0)) (ghub (3 5 1)) (uuidgen (1 2)) (deferred (0 5 1)) (markdown-mode (2 4)) (forge (0 3 0)) (emojify (1 2))) "Perform code review from Github, Gitlab, and Bitbucket Cloud" tar ((:commit . "a8bb63b53f2a1fd31302c110e668ad7b5c871b34") (:authors ("Wanderson Ferreira <https://github.com/wandersoncferreira>")) (:maintainers ("Wanderson Ferreira" . "wand@hey.com")) (:maintainer "Wanderson Ferreira" . "wand@hey.com") (:keywords "git" "tools" "vc") (:url . "https://github.com/wandersoncferreira/code-review"))])
- (code-stats . [(20201209 2135) ((emacs (25)) (request (0 3 0))) "Code::Stats plugin" single ((:commit . "9a467dfd6a3cef849468623e1c085cbf59dac154") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/code-stats-emacs"))])
- (codebug . [(20140929 2137) nil "Interact with codebug" single ((:commit . "d95e5182fa1465406964873d9db1fdac77206f5b") (:authors ("Shane Dowling")) (:maintainers ("Shane Dowling")) (:maintainer "Shane Dowling") (:url . "http://www.shanedowling.com/"))])
- (codesearch . [(20181006 1431) ((log4e (0 3 1))) "Core support for managing codesearch tools" tar ((:commit . "f6eb96f034a925444412cfa03e45e0ccbbafe3f2") (:authors ("Austin Bingham" . "austin.bingham@gmail.com") ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:keywords "tools" "development" "search") (:url . "https://github.com/abingham/emacs-codesearch"))])
- (codespaces . [(20221018 1831) ((emacs (28 1))) "Connect to GitHub Codespaces via TRAMP" single ((:commit . "8e0843684ea685c2b25b8f5601cf02553bab4b08") (:authors ("Patrick Thomson" . "patrickt@github.com")) (:maintainers ("Patrick Thomson" . "patrickt@github.com")) (:maintainer "Patrick Thomson" . "patrickt@github.com") (:keywords "comm") (:url . "https://github.com/patrickt/codespaces.el"))])
- (codic . [(20150926 1127) ((emacs (24)) (cl-lib (0 5))) "Search Codic (codic.jp) naming dictionaries" tar ((:commit . "52bbb6997ef4ab9fb7fea43bbfff7f04671aa557") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-codic"))])
- (coffee-fof . [(20131012 1230) ((coffee-mode (0 4 1))) "A coffee-mode configuration for `ff-find-other-file'." single ((:commit . "211529594bc074721c6cbc4edb73a63cc05f89ac") (:authors ("Yasuyki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyki Oka" . "yasuyk@gmail.com") (:keywords "coffee-mode") (:url . "http://github.com/yasuyk/coffee-fof"))])
- (coffee-mode . [(20200315 1133) ((emacs (24 3))) "Major mode for CoffeeScript code" single ((:commit . "35a41c7d8233eac0b267d9593e67fb8b6235e134") (:authors ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainers ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainer "Chris Wanstrath" . "chris@ozmm.org") (:keywords "coffeescript" "major" "mode") (:url . "http://github.com/defunkt/coffee-mode"))])
- (coin-ticker . [(20170611 727) ((request (0 3 0)) (emacs (25))) "Show a cryptocurrency price ticker" single ((:commit . "45108e239e1d129c0cc1ff37f2870cf73087780b") (:authors ("Evan Klitzke" . "evan@eklitzke.org")) (:maintainers ("Evan Klitzke" . "evan@eklitzke.org")) (:maintainer "Evan Klitzke" . "evan@eklitzke.org") (:keywords "news") (:url . "https://github.com/eklitzke/coin-ticker-mode"))])
- (colonoscopy-theme . [(20170808 1309) ((emacs (24 0))) "an Emacs 24 theme based on Colonoscopy (tmTheme)" single ((:commit . "64bbb322b13dae91ce9f1e3581f836f94f800ead") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (color-identifiers-mode . [(20230405 527) ((dash (2 5 0)) (emacs (24))) "Color identifiers based on their names" single ((:commit . "c4060d1bca6fa2acfe449e086171d4efee62863f") (:authors ("Ankur Dave" . "ankurdave@gmail.com")) (:maintainers ("Ankur Dave" . "ankurdave@gmail.com")) (:maintainer "Ankur Dave" . "ankurdave@gmail.com") (:keywords "faces" "languages") (:url . "https://github.com/ankurdave/color-identifiers-mode"))])
- (color-moccur . [(20141223 35) nil "multi-buffer occur (grep) mode" single ((:commit . "4f1c59ffd1ccc2ab1a171cd6b721e8cb9e002fb7") (:keywords "convenience") (:url . "http://www.bookshelf.jp/elc/color-moccur.el"))])
- (color-theme . [(20190220 1115) nil "An OBSOLETE color-theme implementation" tar ((:commit . "3a2f6b615f5e2401e30d93a3e0adc210bbb4b7aa") (:authors ("Jonadab the Unsightly One" . "jonadab@bright.net")) (:maintainers ("Xavier Maillard" . "zedek@gnu.org")) (:maintainer "Xavier Maillard" . "zedek@gnu.org") (:keywords "faces") (:url . "http://www.emacswiki.org/cgi-bin/wiki.pl?ColorTheme"))])
- (color-theme-approximate . [(20140228 436) nil "Makes Emacs theme works on terminal transparently" single ((:commit . "f54301ca39bc5d2ffb000f233f8114184a3e7d71") (:authors ("Tung Dao" . "me@tungdao.com")) (:maintainers ("Tung Dao" . "me@tungdao.com")) (:maintainer "Tung Dao" . "me@tungdao.com"))])
- (color-theme-buffer-local . [(20170126 601) ((color-theme (0))) "Install color-themes by buffer." single ((:commit . "faf7415c99e132094f1f09c6b6974ec118a18d87") (:authors ("Victor Borja" . "vic.borja@gmail.com")) (:maintainers ("Victor Borja" . "vic.borja@gmail.com")) (:maintainer "Victor Borja" . "vic.borja@gmail.com") (:keywords "faces") (:url . "http://github.com/vic/color-theme-buffer-local"))])
- (color-theme-modern . [(20220506 858) ((emacs (24))) "Reimplement colortheme with Emacs 24 theme framework." tar ((:commit . "74ad69bbca6fcfff3c0960d888c7c9c1f9f3e2e8") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/emacs-jp/replace-colorthemes"))])
- (color-theme-sanityinc-solarized . [(20220917 1350) ((emacs (24 1)) (cl-lib (0 6))) "A version of Ethan Schoonover's Solarized themes" tar ((:commit . "b8f4a65bd53b97b56b93fff2fb14f71b2831aa6f") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "faces" "themes") (:url . "https://github.com/purcell/color-theme-sanityinc-solarized"))])
- (color-theme-sanityinc-tomorrow . [(20220917 1349) nil "A version of Chris Kempson's \"tomorrow\" themes" tar ((:commit . "96dbaa43ff1326879e76a7943b8ae27265ae84e8") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "faces" "themes") (:url . "https://github.com/purcell/color-theme-sanityinc-tomorrow"))])
- (color-theme-x . [(20201204 2245) ((cl-lib (0 5))) "convert color themes to X11 resource settings" single ((:commit . "ec853dd931d625e07116fbc91d8829bd15f90889") (:authors ("Matthew Kennedy" . "mkennedy@killr.ath.cx")) (:maintainers ("Andrew Johnson" . "andrew@andrewjamesjohnson.com")) (:maintainer "Andrew Johnson" . "andrew@andrewjamesjohnson.com") (:keywords "convenience" "faces" "frames") (:url . "https://github.com/ajsquared/color-theme-x"))])
- (colorless-themes . [(20210102 1035) ((emacs (24 1))) "A macro to generate mostly colorless themes" single ((:commit . "95fff8b4e313bdd2073454fd5be9420d95dab267") (:authors ("Thomas Letan" . "contact@thomasletan.fr")) (:maintainers ("Thomas Letan" . "contact@thomasletan.fr")) (:maintainer "Thomas Letan" . "contact@thomasletan.fr") (:keywords "faces themes" "faces") (:url . "https://git.sr.ht/~lthms/colorless-themes.el"))])
- (colormaps . [(20171008 2224) ((emacs (25))) "Hex colormaps" single ((:commit . "3a88961ba66b09a49ea5aa92b2b8776b2c92d68c") (:authors ("Abhinav Tushar" . "lepisma@fastmail.com")) (:maintainers ("Abhinav Tushar" . "lepisma@fastmail.com")) (:maintainer "Abhinav Tushar" . "lepisma@fastmail.com") (:keywords "tools") (:url . "https://github.com/lepisma/colormaps.el"))])
- (column-enforce-mode . [(20200605 1933) nil "Highlight text that extends beyond a column" single ((:commit . "14a7622f2268890e33536ccd29510024d51ee96f") (:authors ("Jordon Biondo")) (:maintainers ("Jordon Biondo")) (:maintainer "Jordon Biondo") (:url . "www.github.com/jordonbiondo/column-enforce-mode"))])
- (com-css-sort . [(20220704 647) ((emacs (25 1)) (s (1 12 0))) "Common way of sorting the CSS attributes" single ((:commit . "eba4ecbb52aeca7b7d0f6b80ad21e0d2c70d0685") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "matching" "css" "sort") (:url . "https://github.com/jcs-elpa/com-css-sort"))])
- (comb . [(20201010 1147) ((emacs (25 1))) "Interactive code auditing and grep tool" tar ((:commit . "31f3e94afb2a7f7d18d30c2468a0c683700f7a66") (:authors ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainers ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainer "Andrea Cardaci" . "cyrus.and@gmail.com") (:keywords "matching") (:url . "https://github.com/cyrus-and/comb"))])
- (comby . [(20200629 140) ((emacs (25 1))) "Emacs comby integration" single ((:commit . "928b8b8959a2556aba5526f2a25801341eb59dc3") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:keywords "languages") (:url . "https://github.com/s-kostyaev/comby.el"))])
- (comint-hyperlink . [(20211026 100) ((emacs (24 3))) "Create hyperlinks in comint for SGR URL control sequences" single ((:commit . "905f2db1f95950899301b9f71faed9e9362cf5dc") (:authors ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainers ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:keywords "comint" "shell" "processes" "hypermedia" "terminals") (:url . "https://github.com/matthewbauer/comint-hyperlink"))])
- (comint-intercept . [(20200106 454) ((emacs (24 3))) "Intercept input in comint-mode" single ((:commit . "3c9a6125e450435b79ab5e6466f830e57c5e0a30") (:authors ("\"Huang, Ying\"" . "huang.ying.caritas@gmail.com")) (:maintainers ("\"Huang, Ying\"" . "huang.ying.caritas@gmail.com")) (:maintainer "\"Huang, Ying\"" . "huang.ying.caritas@gmail.com") (:keywords "processes" "terminals") (:url . "https://github.com/hying-caritas/comint-intercept"))])
- (command-log-mode . [(20160413 447) nil "log keyboard commands to buffer" single ((:commit . "af600e6b4129c8115f464af576505ea8e789db27") (:authors ("Michael Weber" . "michaelw@foldr.org")) (:maintainers ("Michael Weber" . "michaelw@foldr.org")) (:maintainer "Michael Weber" . "michaelw@foldr.org") (:keywords "help") (:url . "https://github.com/lewang/command-log-mode"))])
- (command-queue . [(20160328 1725) ((emacs (24 3))) "shell command queue" single ((:commit . "f327c6f852592229a755ec6de0c62c6aeafd6659") (:authors ("Yuki INOUE <inouetakahiroki at gmail.com>")) (:maintainers ("Yuki INOUE <inouetakahiroki at gmail.com>")) (:maintainer "Yuki INOUE <inouetakahiroki at gmail.com>") (:url . "https://github.com/Yuki-Inoue/command-queue"))])
- (commander . [(20140120 1852) ((s (1 6 0)) (dash (2 0 0)) (cl-lib (0 3)) (f (0 6 1))) "Emacs command line parser" single ((:commit . "2c8a57b9c619e29ccbe2d5a85921b9c689e95bf9") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "cli" "argv") (:url . "http://github.com/rejeep/commander.el"))])
- (comment-dwim-2 . [(20210101 1820) ((emacs (24 4))) "An all-in-one comment command to rule them all" single ((:commit . "b4d6bf4be5a159c4bcc7d43bea287315a16114ce") (:authors ("Rémy Ferré" . "dev@remyferre.net")) (:maintainers ("Rémy Ferré" . "dev@remyferre.net")) (:maintainer "Rémy Ferré" . "dev@remyferre.net") (:keywords "convenience") (:url . "https://github.com/remyferre/comment-dwim-2"))])
- (comment-or-uncomment-sexp . [(20190225 1122) ((emacs (24))) "Command for commenting the sexp under point." single ((:commit . "bec730d3fc1e6c17ff1339eb134af16c034a4d95") (:authors ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "artur@endlessparentheses.com") (:keywords "convenience") (:url . "https://github.com/Malabarba/comment-or-uncomment-sexp"))])
- (comment-tags . [(20170910 1735) ((emacs (24 5))) "Highlight & navigate comment tags like 'TODO'." single ((:commit . "7ae64a8d7aca098f360e03e9a3e780e27715c6e3") (:authors ("Vincent Dumas" . "vincekd@gmail.com")) (:maintainers ("Vincent Dumas" . "vincekd@gmail.com")) (:maintainer "Vincent Dumas" . "vincekd@gmail.com") (:keywords "convenience" "comments" "tags") (:url . "https://github.com/vincekd/comment-tags"))])
- (commentary-theme . [(20210714 1757) ((emacs (24))) "A minimal theme with contrasting comments" single ((:commit . "a73e1256f667065933e96bd6032c463cb115201d") (:url . "https://github.com/pzel/commentary-theme"))])
- (commenter . [(20160219 1627) ((emacs (24 4)) (let-alist (1 0 4))) "multiline-comment support package" single ((:commit . "6d1885419434ba779270c6fda0e30d390bb074bd") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "comment") (:url . "https://github.com/yuutayamada/commenter"))])
- (commify . [(20220531 1301) ((s (1 9 0))) "Toggle grouping commas in numbers" single ((:commit . "c4aeccae5b4a073fc3f4e8bd780a2ebbb7d5e533") (:authors ("Daniel E. Doherty" . "ded-commify@ddoherty.net")) (:maintainers ("Daniel E. Doherty" . "ded-commify@ddoherty.net")) (:maintainer "Daniel E. Doherty" . "ded-commify@ddoherty.net") (:keywords "convenience" "editing" "numbers" "grouping" "commas") (:url . "https://github.com/ddoherty03/commify"))])
- (common-lisp-snippets . [(20180226 1523) ((yasnippet (0 8 0))) "Yasnippets for Common Lisp" tar ((:commit . "1ddf808311ba4d9e8444a1cb50bd5ee75e4111f6") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "snippets") (:url . "https://github.com/mrkkrp/common-lisp-snippets"))])
- (company . [(20230416 2034) ((emacs (25 1))) "Modular text completion framework" tar ((:commit . "8a78f320019574bc35b5727f95b052b27918da20") (:authors ("Nikolaj Schumacher")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:keywords "abbrev" "convenience" "matching") (:url . "http://company-mode.github.io/"))])
- (company-anaconda . [(20200404 1859) ((company (0 8 0)) (anaconda-mode (0 1 1)) (cl-lib (0 5 0)) (dash (2 6 0)) (s (1 9))) "Anaconda backend for company-mode" single ((:commit . "da1566db41a68809ef7f91ebf2de28118067c89b") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/anaconda-mode"))])
- (company-ansible . [(20200306 1441) ((emacs (24 4)) (company (0 8 12))) "A company back-end for ansible" tar ((:commit . "79dd421b161efa49fbdffad57fa40edb41f484a3") (:authors ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainers ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainer "Krzysztof Magosa" . "krzysztof@magosa.pl") (:keywords "ansible") (:url . "https://github.com/krzysztof-magosa/company-ansible"))])
- (company-arduino . [(20160306 1739) ((emacs (24 1)) (company (0 8 0)) (irony (0 1 0)) (cl-lib (0 5)) (company-irony (0 1 0)) (company-c-headers (20140930)) (arduino-mode (1 0))) "company-mode for Arduino" single ((:commit . "5958b917cc5cc729dc64d74d947da5ee91c48980") (:authors ("Yuta Yamada" . "sleepboy.zzz@gmail.com")) (:maintainers ("Yuta Yamada" . "sleepboy.zzz@gmail.com")) (:maintainer "Yuta Yamada" . "sleepboy.zzz@gmail.com") (:keywords "convenience" "development" "company") (:url . "https://github.com/yuutayamada/company-arduino"))])
- (company-auctex . [(20200529 1835) ((yasnippet (0 8 0)) (company (0 8 0)) (auctex (11 87))) "Company-mode auto-completion for AUCTeX" single ((:commit . "9400a2ec7459dde8cbf1a5d50dfee4e300ed7e18") (:authors ("Christopher Monsanto <chris@monsan.to>, Alexey Romanov" . "alexey.v.romanov@gmail.com")) (:maintainers ("Christopher Monsanto <chris@monsan.to>, Alexey Romanov" . "alexey.v.romanov@gmail.com")) (:maintainer "Christopher Monsanto <chris@monsan.to>, Alexey Romanov" . "alexey.v.romanov@gmail.com") (:url . "https://github.com/alexeyr/company-auctex/"))])
- (company-axiom . [(20220612 1535) ((emacs (24)) (company (0 9)) (axiom-environment (20171021))) "A company-mode backend for the axiom-environment system" single ((:commit . "01d88daa0c864af9918db5a147fbb5e435dec199") (:authors ("Paul Onions" . "paul.onions@acm.org")) (:maintainers ("Paul Onions" . "paul.onions@acm.org")) (:maintainer "Paul Onions" . "paul.onions@acm.org") (:keywords "axiom" "openaxiom" "fricas" "axiom-environment"))])
- (company-bibtex . [(20171105 644) ((company (0 9 0)) (cl-lib (0 5)) (parsebib (1 0))) "Company completion for bibtex keys" single ((:commit . "225c6f5c0c070c94c8cdbbd452ea548cd94d76f4") (:authors ("GB Gardner" . "gbgar@users.noreply.github.com")) (:maintainers ("GB Gardner" . "gbgar@users.noreply.github.com")) (:maintainer "GB Gardner" . "gbgar@users.noreply.github.com") (:keywords "company-mode" "bibtex") (:url . "https://github.com/gbgar/company-bibtex"))])
- (company-box . [(20230312 1028) ((emacs (26 0 91)) (dash (2 19 0)) (company (0 9 6)) (frame-local (0 0 1))) "Company front-end with icons" tar ((:commit . "b6f53e26adf948aca55c3ff6c22c21a6a6614253") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainers ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is") (:keywords "company" "completion" "front-end" "convenience") (:url . "https://github.com/sebastiencs/company-box"))])
- (company-c-headers . [(20190825 1631) ((emacs (24 1)) (company (0 8))) "Company mode backend for C/C++ header files" single ((:commit . "5e676ab0c2f287c868b1e3931afd4c78895910cd") (:authors ("Alastair Rankine" . "alastair@girtby.net")) (:maintainers ("Alastair Rankine" . "alastair@girtby.net")) (:maintainer "Alastair Rankine" . "alastair@girtby.net") (:keywords "development" "company"))])
- (company-cabal . [(20170917 1317) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24))) "company-mode cabal backend" tar ((:commit . "62112a7259e24bd6c08885629a185afe512b7d3d") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-cabal"))])
- (company-coq . [(20221130 536) ((cl-lib (0 5)) (dash (2 12 1)) (yasnippet (0 11 0)) (company (0 8 12)) (company-math (1 1))) "A collection of extensions for Proof General's Coq mode" tar ((:commit . "5affe7a96a25df9101f9e44bac8a828d8292c2fa") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "convenience" "languages") (:url . "https://github.com/cpitclaudel/company-coq"))])
- (company-ctags . [(20211211 338) ((emacs (25 1)) (company (0 9 0))) "Fastest company-mode completion backend for ctags" single ((:commit . "313508ba5d4f1e4b5d5d554faaa74076201c3248") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "convenience") (:url . "https://github.com/redguardtoo/company-ctags"))])
- (company-dcd . [(20210307 649) ((company (0 9)) (flycheck-dmd-dub (0 7)) (yasnippet (0 8)) (popwin (0 7)) (cl-lib (0 5)) (ivy (20160804 326))) "Company backend for Dlang using DCD." single ((:commit . "858500115d4f0285f963698ede9492f409a90e52") (:authors ("tsukimizake <shomasd_at_gmail.com>")) (:maintainers ("tsukimizake <shomasd_at_gmail.com>")) (:maintainer "tsukimizake <shomasd_at_gmail.com>") (:keywords "languages") (:url . "http://github.com/tsukimizake/company-dcd"))])
- (company-dict . [(20190302 5) ((emacs (24 4)) (company (0 8 12)) (parent-mode (2 3))) "A backend that emulates ac-source-dictionary" single ((:commit . "cd7b8394f6014c57897f65d335d6b2bd65dab1f4") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "henrik@lissner.net")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:keywords "company" "dictionary" "ac-source-dictionary") (:url . "https://github.com/hlissner/emacs-company-dict"))])
- (company-distel . [(20180827 1344) ((distel-completion-lib (1 0 0))) "Erlang/distel completion backend for company-mode" single ((:commit . "acc4c0a5521904203d797fe96b08e5fae4233c7e") (:authors ("Sebastian Weddmark Olsson")) (:maintainers ("Sebastian Weddmark Olsson")) (:maintainer "Sebastian Weddmark Olsson") (:keywords "erlang" "distel" "company") (:url . "github.com/sebastiw/distel-completion"))])
- (company-emacs-eclim . [(20180911 1121) ((eclim (0 3)) (company (0 7)) (cl-lib (0 5))) "Eclim company backend" single ((:commit . "edff7e0e30c87036710d88fb0b7a4644750858e8"))])
- (company-emoji . [(20221208 2344) ((cl-lib (0 5)) (company (0 8 0))) "company-mode backend for emoji" tar ((:commit . "9e2816ce9b5795bd0066f92d4f80d15ccf94ef36") (:authors ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainers ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainer "Alex Dunn" . "dunn.alex@gmail.com") (:keywords "emoji" "company") (:url . "https://github.com/dunn/company-emoji.git"))])
- (company-emojify . [(20221231 1708) ((emacs (26 1)) (company (0 8 0)) (emojify (1 2 1)) (ht (2 0))) "Company completion for Emojify" single ((:commit . "89652ee1a5488fbbe7b73c03ac316b895bb3fc19") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "emoji" "company" "emojify") (:url . "https://github.com/jcs-elpa/company-emojify"))])
- (company-erlang . [(20170123 538) ((emacs (24 4)) (ivy-erlang-complete (0 1)) (company (0 9 2))) "company backend based on ivy-erlang-complete" single ((:commit . "bc0524a16f17b66c7397690e4ca0e004f09ea6c5") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:keywords "tools"))])
- (company-flow . [(20180225 2159) ((company (0 8 0)) (dash (2 13 0))) "Flow backend for company-mode" single ((:commit . "76ef585c70d2a3206c2eadf24ba61e59124c3a16") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/company-flow"))])
- (company-flx . [(20180103 518) ((emacs (24)) (company (0 8 12)) (flx (0 5))) "flx based fuzzy matching for company" single ((:commit . "05efcafb488f587bb6e60923078d97227462eb68") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience" "company" "fuzzy" "flx") (:url . "https://github.com/PythonNut/company-flx"))])
- (company-fuzzy . [(20230501 656) ((emacs (26 1)) (company (0 8 12)) (s (1 12 0)) (ht (2 0))) "Fuzzy matching for `company-mode'" single ((:commit . "6f8941f97f050a844dc22d2b1e02f976b558a35c") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "matching" "auto-complete" "complete" "fuzzy") (:url . "https://github.com/jcs-elpa/company-fuzzy"))])
- (company-ghci . [(20190707 311) ((company (0 8 11)) (haskell-mode (13))) "company backend which uses the current ghci process." single ((:commit . "a1d25652583ab4666c5a78cac18cd8039776b50d") (:authors ("Hector Orellana" . "hofm92@gmail.com")) (:maintainers ("Hector Orellana" . "hofm92@gmail.com")) (:maintainer "Hector Orellana" . "hofm92@gmail.com"))])
- (company-glsl . [(20210109 1403) ((company (0 9 4)) (glsl-mode (2 4)) (emacs (24 4))) "Support glsl in company-mode" single ((:commit . "3a40501ba831a30a7fd3e8529b20d1305d0454aa") (:authors ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainers ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc") (:url . "https://github.com/guidoschmidt/company-glsl"))])
- (company-go . [(20170825 1643) ((company (0 8 0)) (go-mode (1 0 0))) "company-mode backend for Go (using gocode)" single ((:commit . "31948b463f2fc18f8801e5a8fe511fef300eb3dd") (:authors ("nsf" . "no.smile.face@gmail.com")) (:maintainers ("nsf" . "no.smile.face@gmail.com")) (:maintainer "nsf" . "no.smile.face@gmail.com") (:keywords "languages"))])
- (company-inf-ruby . [(20140805 2054) ((company (0 6 10)) (inf-ruby (2 2 7)) (emacs (24 1))) "company-mode completion back-end for inf-ruby" single ((:commit . "9c2eab3bb82e8838c54013026e6ffb51cccbd37e") (:authors ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:url . "https://github.com/company-mode/company-inf-ruby"))])
- (company-ipa . [(20210307 1838) ((emacs (24 3)) (company (0 8 12))) "IPA backend for company" single ((:commit . "8634021cac885f53f3274ef6dcce7eab19321046") (:authors ("Matías Guzmán Naranjo" . "mguzmann89@gmail.com")) (:maintainers ("Matías Guzmán Naranjo" . "mguzmann89@gmail.com")) (:maintainer "Matías Guzmán Naranjo" . "mguzmann89@gmail.com") (:keywords "convenience" "company" "ipa") (:url . "https://github.com/mguzmann/company-ipa"))])
- (company-irony . [(20190124 2346) ((emacs (24 1)) (company (0 8 0)) (irony (1 1 0)) (cl-lib (0 5))) "company-mode completion back-end for irony-mode" single ((:commit . "b44711dfce445610c1ffaec4951c6ff3882b216a") (:authors ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainers ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainer "Guillaume Papin" . "guillaume.papin@epitech.eu") (:keywords "convenience") (:url . "https://github.com/Sarcasm/company-irony/"))])
- (company-irony-c-headers . [(20151018 909) ((cl-lib (0 5)) (company (0 9 0)) (irony (0 2 0))) "Company mode backend for C/C++ header files with Irony" single ((:commit . "ba304fe7eebdff90bbc7dea063b45b82638427fa") (:authors ("Yutian Li" . "hotpxless@gmail.com")) (:maintainers ("Yutian Li" . "hotpxless@gmail.com")) (:maintainer "Yutian Li" . "hotpxless@gmail.com") (:keywords "c" "company") (:url . "https://github.com/hotpxl/company-irony-c-headers"))])
- (company-jedi . [(20200324 25) ((emacs (24)) (cl-lib (0 5)) (company (0 8 11)) (jedi-core (0 2 7))) "Company-mode completion back-end for Python JEDI" single ((:commit . "a5a9f7ddf2770bbfad9e39a275053923fe82a200") (:authors ("Boy" . "boyw165@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:url . "https://github.com/emacsorphanage/company-jedi"))])
- (company-lean . [(20210305 1705) ((emacs (24 3)) (dash (2 18 0)) (s (1 10 0)) (f (0 19 0)) (company (0 9 3)) (lean-mode (3 3 0))) "A company backend for lean-mode" single ((:commit . "5c50338ac149ca5225fc737be291db1f63c45f1d") (:authors ("Leonardo de Moura" . "leonardo@microsoft.com") ("Soonho Kong " . "soonhok@cs.cmu.edu") ("Gabriel Ebner " . "gebner@gebner.org") ("Sebastian Ullrich" . "sebasti@nullri.ch")) (:maintainers ("Sebastian Ullrich" . "sebasti@nullri.ch")) (:maintainer "Sebastian Ullrich" . "sebasti@nullri.ch") (:keywords "languages") (:url . "https://github.com/leanprover/lean-mode"))])
- (company-ledger . [(20210910 250) ((emacs (24 3)) (company (0 8 0))) "Fuzzy auto-completion for Ledger & friends" single ((:commit . "55fdddd6c5e9c061c685b474ef5e148a4ac9b576") (:authors ("Debanjum Singh Solanky <debanjum AT gmail DOT com>")) (:maintainers ("Debanjum Singh Solanky <debanjum AT gmail DOT com>")) (:maintainer "Debanjum Singh Solanky <debanjum AT gmail DOT com>") (:keywords "abbrev" "matching" "auto-complete" "beancount" "ledger" "company") (:url . "https://github.com/debanjum/company-ledger"))])
- (company-lua . [(20171108 2306) ((company (0 8 12)) (s (1 10 0)) (f (0 17 0)) (lua-mode (20151025))) "Company backend for Lua" tar ((:commit . "29f6819de4d691e5fd0b62893a9f4fbc1c6fcb52") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))])
- (company-manually . [(20200721 1903) ((emacs (24 3)) (company (0 9 0)) (ivy (0 13 0))) "A company backend that lets you manually build candidates" single ((:commit . "b922318da821fc3cf1d3155f21d543ea8470c881") (:authors ("Yanghao Xie")) (:maintainers ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com") (:keywords "convenience" "company-mode" "manually build candidates") (:url . "https://github.com/yanghaoxie/company-manually"))])
- (company-math . [(20221227 1329) ((company (0 8 0)) (math-symbol-lists (1 3))) "Completion backends for unicode math symbols and latex tags" single ((:commit . "3eb006874e309ff4076d947fcbd61bb6806aa508") (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:keywords "unicode" "symbols" "completion") (:url . "https://github.com/vspinu/company-math"))])
- (company-maxima . [(20220531 1847) ((emacs (25 1)) (maxima (0 6 1)) (seq (2 20)) (company (0 9 13))) "Maxima company integration" single ((:commit . "1334f44725bd80a265de858d652f3fde4ae401fa") (:authors ("Fermin Munoz")) (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net") (:keywords "languages" "tools" "convenience") (:url . "https://gitlab.com/sasanidas/maxima"))])
- (company-nand2tetris . [(20171201 1813) ((nand2tetris (1 1 0)) (company (0 5)) (cl-lib (0 5 0))) "Company backend for nand2tetris major mode" single ((:commit . "fe37ee41367ceff6f7d7a472a5f80cf1285e1e01") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:keywords "nand2tetris" "hdl" "company") (:url . "http://www.github.com/CestDiego/nand2tetris.el/"))])
- (company-native-complete . [(20220103 1622) ((emacs (26 1)) (company (0 9 0)) (native-complete (0 1 0))) "Company completion using native-complete" single ((:commit . "1bf5e24069e543953602a3aee67336d8e0e7d817") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com") (:url . "https://github.com/CeleritasCelery/emacs-native-shell-complete"))])
- (company-nginx . [(20220210 1411) ((emacs (24)) (cl-lib (0)) (company (0))) "company-mode keywords support for nginx-mode" single ((:commit . "8a9f1a5653fe2d9a5042bfb9377d54f37fcc64c8") (:keywords "company" "nginx") (:url . "https://repo.or.cz/company-nginx.git"))])
- (company-ngram . [(20170129 1913) ((cl-lib (0 5)) (company (0 8 0))) "N-gram based completion" tar ((:commit . "d15182df3eac72b29772802759b77c9eafef5066") (:authors ("kshramt")) (:maintainers ("kshramt")) (:maintainer "kshramt") (:url . "https://github.com/kshramt/company-ngram"))])
- (company-nixos-options . [(20160215 857) ((company (0 8 0)) (nixos-options (0 0 1)) (cl-lib (0 5 0))) "Company Backend for nixos-options" single ((:commit . "a4e1d9ea9f2e773170caa3afbe54ecdf73d04ec8") (:authors ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:keywords "unix") (:url . "http://www.github.com/travisbhartwell/nix-emacs/"))])
- (company-org-block . [(20230115 1202) ((emacs (25 1)) (company (0 8 0)) (org (9 2 0))) "Org blocks company backend" single ((:commit . "aee601a2bfcc86d26e762eeb84e5e42573f8c5ca") (:authors ("Alvaro Ramirez")) (:maintainers ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/company-org-block"))])
- (company-php . [(20211204 558) ((cl-lib (0 5)) (ac-php-core (2 0)) (company (0 9))) "A company back-end for PHP." single ((:commit . "1c8a81932533bd0b25b11e80834b9a7ff5751a98") (:authors ("jim" . "xcwenn@qq.com")) (:maintainers ("jim")) (:maintainer "jim") (:keywords "completion" "convenience" "intellisense") (:url . "https://github.com/xcwen/ac-php"))])
- (company-phpactor . [(20221023 608) ((emacs (24 3)) (company (0 9 6)) (phpactor (0 1 0))) "A company-mode backend for Phpactor" single ((:commit . "c652439afd052910d322a8fb9249e09d278a3f37") (:authors ("Martin Tang" . "martin.tang365@gmail.com") ("Mikael Kermorgant" . "mikael@kgtech.fi")) (:maintainers ("Martin Tang" . "martin.tang365@gmail.com")) (:maintainer "Martin Tang" . "martin.tang365@gmail.com") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/phpactor.el"))])
- (company-plisp . [(20200531 1927) ((emacs (25)) (s (1 2 0)) (company (0 8 12)) (dash (2 12 0)) (cl-lib (0 5))) "Company mode backend for PicoLisp language" tar ((:commit . "0e6941e1832faafb2176238339667edd482acd95") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net") (:keywords "company" "plisp" "convenience" "auto-completion") (:url . "https://gitlab.com/sasanidas/company-plisp"))])
- (company-plsense . [(20180118 58) ((company (0 9 3)) (cl-lib (0 5 0)) (dash (2 12 0)) (s (1 12)) (emacs (24))) "Company backend for Perl" single ((:commit . "b48e3181e08ec597269621d621aa06636f02d883") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com") (:url . "https://github.com/CeleritasCelery/company-plsense"))])
- (company-pollen . [(20160812 1510) ((company (0 9 0)) (pollen-mode (1 0))) "company-mode completion backend for pollen" single ((:commit . "9779f7f13b1e0cfb58af01af5d8ee9e783bb8a43") (:authors ("Junsong Li <ljs.darkfish AT GMAIL>")) (:maintainers ("Junsong Li")) (:maintainer "Junsong Li") (:keywords "languages" "pollen" "pollenpub" "company") (:url . "https://github.com/lijunsong/pollen-mode"))])
- (company-posframe . [(20230104 1229) ((emacs (26 0)) (company (0 9 0)) (posframe (0 9 0))) "Use a posframe as company candidate menu" single ((:commit . "18d6641bba72cba3c00018cee737ea8b454f64a8") (:authors ("Clément Pit-Claudel, Feng Shu, Lars Andersen" . "expez@expez.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "abbrev" "convenience" "matching") (:url . "https://github.com/tumashu/company-posframe"))])
- (company-prescient . [(20221216 112) ((emacs (25 1)) (prescient (6 1 0)) (company (0 9 6))) "prescient.el + Company" single ((:commit . "72b023f5fc1ae2bbf2f51f1786cc012d40671bf4") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes") (:keywords "extensions") (:url . "https://github.com/raxod502/prescient.el"))])
- (company-qml . [(20170428 1708) ((qml-mode (0 1)) (company (0 8 12))) "Company backend for QML files" tar ((:commit . "4af4f32a7ad86d86bb9293fb0b675aec513b5736") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (company-quickhelp . [(20221212 534) ((emacs (24 3)) (company (0 8 9)) (pos-tip (0 4 6))) "Popup documentation for completion candidates" single ((:commit . "9505fb09d064581da142d75c139d48b5cf695bd5") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainers ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com") (:keywords "company" "popup" "documentation" "quickhelp") (:url . "https://www.github.com/expez/company-quickhelp"))])
- (company-quickhelp-terminal . [(20220704 647) ((emacs (24 4)) (company-quickhelp (2 2 0)) (popup (0 5 3))) "Terminal support for `company-quickhelp'" single ((:commit . "08925e9dfe97482795dfe2f14542cfa2fd8895dd") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "terminal" "extends" "support" "tip" "help") (:url . "https://github.com/jcs-elpa/company-quickhelp-terminal"))])
- (company-racer . [(20171205 310) ((emacs (24 4)) (cl-lib (0 5)) (company (0 8 0)) (deferred (0 3 1))) "Company integration for racer" single ((:commit . "a00381c9d416f375f783fcb6ae8d40669ce1f567") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/company-racer"))])
- (company-reftex . [(20210418 1316) ((emacs (25 1)) (s (1 12)) (company (0 8))) "Company backend based on RefTeX." single ((:commit . "42eb98c6504e65989635d95ab81b65b9d5798e76") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainers ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:keywords "bib" "tex" "company" "latex" "reftex" "references" "labels" "citations") (:url . "https://github.com/TheBB/company-reftex"))])
- (company-restclient . [(20190426 1312) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24)) (know-your-http-well (0 2 0)) (restclient (0 0 0))) "company-mode completion back-end for restclient-mode" single ((:commit . "e5a3ec54edb44776738c13e13e34c85b3085277b") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-restclient"))])
- (company-rtags . [(20191222 920) ((emacs (24 3)) (company (0 8 1)) (rtags (2 10))) "RTags back-end for company" single ((:commit . "595055b5316a7c92ba1d638f324f98842a0f41a5") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "https://github.com/Andersbakken/rtags"))])
- (company-shell . [(20230106 1532) ((emacs (24 4)) (company (0 8 12)) (dash (2 12 0)) (cl-lib (0 5))) "Company mode backend for shell functions" single ((:commit . "5f959a63a6e66eb0cbdac3168cad523a62cc2ccd") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:keywords "company" "shell" "auto-completion") (:url . "https://github.com/Alexander-Miller/company-shell"))])
- (company-solidity . [(20200113 1721) ((company (0 9 0)) (cl-lib (0 5 0)) (solidity-mode (0 1 9))) "Company-mode back-end for solidity-mode" single ((:commit . "93412f211fad7dfc3b02aa226856fc52b6a15c22") (:authors ("Samuel Smolkin" . "sam@future-precedent.org")) (:maintainers ("Samuel Smolkin" . "sam@future-precedent.org")) (:maintainer "Samuel Smolkin" . "sam@future-precedent.org") (:keywords "solidity" "completion" "company") (:url . "https://github.com/ethereum/emacs-solidity"))])
- (company-sourcekit . [(20210430 2155) ((emacs (24 3)) (company (0 8 12)) (dash (2 18 0)) (sourcekit (0 2 0))) "company-mode completion backend for SourceKit" single ((:commit . "a1860ad4dd3a542acd2fa0dfac2a388cbdf4af0c") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainers ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com") (:keywords "abbrev") (:url . "https://github.com/nathankot/company-sourcekit"))])
- (company-stan . [(20211129 2051) ((emacs (24 3)) (company (0 9 10)) (stan-mode (10 3 0))) "A company-mode completion backend for stan" single ((:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:authors ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu") (:keywords "languages") (:url . "https://github.com/stan-dev/stan-mode/tree/master/company-stan"))])
- (company-statistics . [(20170210 1933) ((emacs (24 3)) (company (0 8 5))) "Sort candidates using completion history" single ((:commit . "e62157d43b2c874d2edbd547c3bdfb05d0a7ae5c") (:authors ("Ingo Lohmar" . "i.lohmar@gmail.com")) (:maintainers ("Ingo Lohmar" . "i.lohmar@gmail.com")) (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com") (:keywords "abbrev" "convenience" "matching") (:url . "https://github.com/company-mode/company-statistics"))])
- (company-suggest . [(20200911 1845) ((company (0 9 0)) (emacs (25 1))) "Company-mode back-end for search engine suggests" single ((:commit . "1c89c9de3852f07ce28b0bedf1fbf56fe6eedcdc") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainers ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org") (:keywords "completion" "convenience") (:url . "https://github.com/juergenhoetzel/company-suggest"))])
- (company-tabnine . [(20230216 817) ((emacs (25)) (company (0 9 3)) (cl-lib (0 5)) (dash (2 16 0)) (s (1 12 0))) "A company-mode backend for TabNine" single ((:commit . "96d0c2c05450359ce90ee99a474991391988d2e6") (:authors ("Tommy Xiang" . "tommyx058@gmail.com")) (:maintainers ("Tommy Xiang" . "tommyx058@gmail.com")) (:maintainer "Tommy Xiang" . "tommyx058@gmail.com") (:keywords "convenience") (:url . "https://github.com/TommyX12/company-tabnine/"))])
- (company-terraform . [(20220509 1759) ((emacs (24 4)) (company (0 8 12)) (terraform-mode (0 6))) "A company backend for terraform" tar ((:commit . "8d5a16d1bbeeb18ca49a8fd57b5d8cd30c8b8dc7") (:authors ("Rafał Cieślak" . "rafalcieslak256@gmail.com")) (:maintainers ("Rafał Cieślak" . "rafalcieslak256@gmail.com")) (:maintainer "Rafał Cieślak" . "rafalcieslak256@gmail.com") (:keywords "abbrev" "convenience" "terraform" "company") (:url . "https://github.com/rafalcieslak/emacs-company-terraform"))])
- (company-try-hard . [(20200417 1603) ((emacs (24 3)) (company (0 8 0)) (dash (2 0))) "get all completions from company backends" single ((:commit . "2b41136b5ed6e02032d99bcdb0599ecf00394fa5") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "matching") (:url . "https://github.com/Wilfred/company-try-hard"))])
- (company-web . [(20220115 2146) ((company (0 8 0)) (dash (2 8 0)) (cl-lib (0 5 0)) (web-completion-data (0 1 0))) "Company version of ac-html, complete for web,html,emmet,jade,slim modes" tar ((:commit . "e0c6bfa3ae7006c73d0fdfc0fdb69816309baf1b") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com") (:keywords "html" "company") (:url . "https://github.com/osv/company-web"))])
- (company-wordfreq . [(20220405 2000) ((emacs (27 1)) (company (0 9))) "Company backend for human language texts" single ((:commit . "83569cf346c2320ef22f6a858e3424f771c4324e") (:authors ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainers ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainer "Johannes Mueller" . "github@johannes-mueller.org") (:keywords "company" "convenience" "matching") (:url . "https://github.com/johannes-mueller/company-wordfreq.el"))])
- (company-ycm . [(20140904 1817) ((ycm (0 1))) "company-ycm" single ((:commit . "b2cb611503cf8d256fa19fc76362d7d5d9449d01") (:authors ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainers ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainer "Ajay Gopinathan" . "ajay@gopinathan.net") (:keywords "abbrev"))])
- (company-ycmd . [(20180520 1053) ((ycmd (1 3)) (company (0 9 3)) (deferred (0 5 1)) (s (1 11 0)) (dash (2 13 0)) (let-alist (1 0 5)) (f (0 19 0))) "company-mode backend for ycmd" single ((:commit . "966594701c1eef1f6d4dad0c71c6d43a029977d7") (:url . "https://github.com/abingham/emacs-ycmd"))])
- (compdef . [(20200304 611) ((emacs (24 4))) "A local completion definer" single ((:commit . "30fb5846ed851efee641ce8c5d8879ad36cd7ac6") (:authors ("Uros Perisic")) (:maintainers ("Uros Perisic")) (:maintainer "Uros Perisic") (:keywords "convenience") (:url . "https://gitlab.com/jjzmajic/compdef"))])
- (competitive-programming-snippets . [(20201115 1702) ((emacs (26)) (yasnippet (0 8 0))) "Competitive Programming snippets for yasnippet" tar ((:commit . "3b43c1aeaa6676d1d3d0c47e78790db9bee150b6") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com") (:keywords "tools") (:url . "https://github.com/sei40kr/competitive-programming-snippets"))])
- (compile-multi . [(20230311 1951) ((emacs (28 0))) "A multi target interface to compile" single ((:commit . "e475a0477e49d5ca48703bea874dfeea786b9af5") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe") (:keywords "tools" "compile" "build") (:url . "https://github.com/mohkale/compile-multi"))])
- (compiler-explorer . [(20221108 825) ((emacs (26 1)) (request (0 3 0))) "Compiler explorer client (godbolt.org)" single ((:commit . "36a2cbf0863d4563096546c38ff26db3d7a3e18c") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com") (:keywords "c" "tools") (:url . "https://github.com/mkcms/compiler-explorer.el"))])
- (composable . [(20220608 1148) ((emacs (25 1))) "composable editing" tar ((:commit . "205a69c64ea95ef67070423c31ed70ec44ec980c") (:authors ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainers ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainer "Simon Friis Vindum" . "simon@vindum.io") (:keywords "lisp"))])
- (composer . [(20221120 202) ((emacs (25 1)) (seq (1 9)) (php-runtime (0 1 0))) "Interface to PHP Composer" single ((:commit . "2299cd731205906350d615021f99a66d7a8905c2") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php" "dependency" "manager") (:url . "https://github.com/zonuexe/composer.el"))])
- (comware-router-mode . [(20230107 1624) ((dash (2 16 0)) (emacs (24 3))) "Major mode for editing Comware configuration files" single ((:commit . "cc0c1937e02f84ca8182b2de3ce5cc0982308ab8") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainers ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it") (:keywords "convenience" "faces") (:url . "https://github.com/daviderestivo/comware-router-mode"))])
- (concurrent . [(20170601 435) ((emacs (24 3)) (deferred (0 5 0))) "Concurrent utility functions for emacs lisp" single ((:commit . "d012a1ab50edcc2c44e3e49006f054dbff47cb6c") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "deferred" "async" "concurrent") (:url . "https://github.com/kiwanami/emacs-deferred/blob/master/README-concurrent.markdown"))])
- (conda . [(20230228 322) ((emacs (25 1)) (pythonic (0 1 0)) (dash (2 13 0)) (s (1 11 0)) (f (0 18 2))) "Work with your conda environments" single ((:commit . "f90598f54af78469e61497560ddad05344810a35") (:authors ("Rami Chowdhury" . "rami.chowdhury@gmail.com")) (:maintainers ("Rami Chowdhury" . "rami.chowdhury@gmail.com")) (:maintainer "Rami Chowdhury" . "rami.chowdhury@gmail.com") (:keywords "languages" "local" "tools" "python" "environment" "conda") (:url . "http://github.com/necaris/conda.el"))])
- (config-general-mode . [(20171024 1840) nil "Config::General config file mode" single ((:commit . "b4a8e6ba0bb027a77e4a0f701409f3e57bb2e4c0") (:authors ("T.v.Dein" . "tlinden@cpan.org")) (:maintainers ("T.v.Dein" . "tlinden@cpan.org")) (:maintainer "T.v.Dein" . "tlinden@cpan.org") (:keywords "files") (:url . "https://github.com/tlinden/config-general-mode"))])
- (config-parser . [(20160426 1219) ((emacs (24 4))) "a library for parsing config file" single ((:commit . "85d559e7889d8f5b98b8794b79426ae25ec3caa5") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "config") (:url . "https://github.com/lujun9972/el-config-parser"))])
- (conkeror-minor-mode . [(20150114 1604) nil "Mode for editing conkeror javascript files." single ((:commit . "476e81c27b056e21c192391fe674a2bf875466b0") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com>")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com>")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com>") (:keywords "programming" "tools") (:url . "http://github.com/Bruce-Connor/conkeror-minor-mode"))])
- (conllu-mode . [(20200501 2328) ((emacs (25)) (cl-lib (0 5)) (flycheck (30)) (hydra (0 13 0)) (s (1 0))) "editing mode for CoNLL-U files" tar ((:commit . "0db3063572b0de08874822e20570bb153747e6ed") (:authors ("bruno cuconato" . "bcclaro+emacs@gmail.com")) (:maintainers ("bruno cuconato" . "bcclaro+emacs@gmail.com")) (:maintainer "bruno cuconato" . "bcclaro+emacs@gmail.com") (:keywords "extensions") (:url . "https://github.com/odanoburu/conllu-mode"))])
- (connection . [(20191111 446) nil "TCP-based client connection" single ((:commit . "c9cad101100975e88873636bfd426b7a19304ebd") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainers ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net") (:keywords "network"))])
- (constant-theme . [(20180921 1012) ((emacs (24 1))) "A calm, dark, almost monochrome color theme." tar ((:commit . "0feb9f99d708633d62fa548c953ebbe68fd70de0") (:authors ("Jannis Pohlmann" . "contact@jannispohlmann.de")) (:maintainers ("Jannis Pohlmann" . "contact@jannispohlmann.de")) (:maintainer "Jannis Pohlmann" . "contact@jannispohlmann.de") (:keywords "themes") (:url . "https://github.com/jannis/emacs-constant-theme"))])
- (consult . [(20230503 749) ((emacs (27 1)) (compat (29 1 4 1))) "Consulting completing-read" tar ((:commit . "aadb912e126a143c60e6ece92b163a7356bd4730") (:authors ("Daniel Mendler and Consult contributors")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "matching" "files" "completion") (:url . "https://github.com/minad/consult"))])
- (consult-ag . [(20230227 406) ((emacs (27 1)) (consult (0 32))) "The silver searcher integration using Consult" single ((:commit . "9eb4df265aedf2628a714610c2ade6d2f21de053") (:authors ("Kanon Kakuno" . "yadex205@outlook.jp")) (:maintainers ("Kanon Kakuno" . "yadex205@outlook.jp")) (:maintainer "Kanon Kakuno" . "yadex205@outlook.jp") (:url . "https://github.com/yadex205/consult-ag"))])
- (consult-codesearch . [(20230315 1424) ((emacs (27 1)) (consult (0 20))) "Consult interface for codesearch" single ((:commit . "51df545bb57b468058245950322ae15f6c3a0ce2") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com") (:keywords "tools") (:url . "https://github.com/youngker/consult-codesearch"))])
- (consult-company . [(20230403 1911) ((emacs (27 1)) (company (0 9)) (consult (0 9))) "Consult frontend for company" single ((:commit . "24559103a77210c0178b95a842ad13b555be3d43") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe") (:url . "https://github.com/mohkale/consult-company"))])
- (consult-dash . [(20220621 226) ((emacs (27 2)) (dash-docs (1 4 0)) (consult (0 16))) "Consult front-end for dash-docs" single ((:commit . "0eb8e133a12570f482efcf367dcc7887c15def32") (:authors ("Ravi R Kiran" . "lists.ravi@gmail.com")) (:maintainers ("Ravi R Kiran" . "lists.ravi@gmail.com")) (:maintainer "Ravi R Kiran" . "lists.ravi@gmail.com") (:keywords "consult" "dash" "docs") (:url . "https://codeberg.org/ravi/consult-dash"))])
- (consult-dir . [(20221001 1748) ((emacs (26 1)) (consult (0 9)) (project (0 6 0))) "Insert paths into the minibuffer prompt" single ((:commit . "ed8f0874d26f10f5c5b181ab9f2cf4107df8a0eb") (:authors ("Karthik Chikmagalur")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com") (:keywords "convenience") (:url . "https://github.com/karthink/consult-dir"))])
- (consult-eglot . [(20230423 1505) ((emacs (27 1)) (eglot (1 7)) (consult (0 31)) (project (0 3 0))) "A consulting-read interface for eglot" single ((:commit . "db9d41c9812a5a8a7b9a22fa7f3c314e37584d41") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem")) (:maintainer "Mohsin Kaleem") (:keywords "tools" "completion" "lsp") (:url . "https://github.com/mohkale/consult-eglot"))])
- (consult-flycheck . [(20230411 445) ((emacs (27 1)) (consult (0 32)) (flycheck (32))) "Provides the command `consult-flycheck'" single ((:commit . "fda630411ad9219f45136310f671b44eaefafcab") (:authors ("Daniel Mendler and Consult contributors")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "languages" "tools" "completion") (:url . "https://github.com/minad/consult"))])
- (consult-flyspell . [(20230322 204) ((emacs (25 1)) (consult (0 12))) "Consult integration for flyspell" single ((:commit . "7011e6634598530ea2d874e7e7389dc1bb94e1ca") (:authors ("Marco Pawłowski")) (:maintainers ("Marco Pawłowski")) (:maintainer "Marco Pawłowski") (:keywords "convenience") (:url . "https://gitlab.com/OlMon/consult-flyspell"))])
- (consult-ghq . [(20210606 2047) ((emacs (26 1)) (consult (0 8)) (affe (0 1))) "Ghq interface using consult" single ((:commit . "c8619d66bd8f8728e43ed15096078b89eb4d2083") (:authors ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainers ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainer "Tomoya Otake" . "tomoya.ton@gmail.com") (:keywords "convenience" "usability" "consult" "ghq") (:url . "https://github.com/tomoya/consult-ghq"))])
- (consult-git-log-grep . [(20230204 1753) ((emacs (27 1)) (consult (0 16))) "Consult integration for git log grep" single ((:commit . "30dfcad5745a6b9882d94fec75d38c345a1eff89") (:authors ("Ghosty")) (:maintainers ("Ghosty")) (:maintainer "Ghosty") (:keywords "git" "convenience") (:url . "https://github.com/Ghosty141/consult-git-log-grep"))])
- (consult-hatena-bookmark . [(20221125 109) ((emacs (27 1)) (consult (0 9)) (async-await (1 1))) "Consult commands for the Hatena Bookmark" single ((:commit . "b85484b11705ebd896878d3ac7fdb12bc8c9637a") (:authors ("Yukinori Kitadai")) (:maintainers ("Yukinori Kitadai")) (:maintainer "Yukinori Kitadai") (:url . "https://github.com/Nyoho/consult-hatena-bookmark"))])
- (consult-ls-git . [(20230120 1500) ((emacs (27 1)) (consult (0 16))) "Consult integration for git" single ((:commit . "7ba583abc16f70c497d038bfcbddbadd6894bd3d") (:authors ("Robin Joy")) (:maintainers ("Robin Joy")) (:maintainer "Robin Joy") (:keywords "convenience") (:url . "https://github.com/rcj/consult-ls-git"))])
- (consult-lsp . [(20230209 714) ((emacs (27 1)) (lsp-mode (5 0)) (consult (0 16)) (f (0 20 0))) "LSP-mode Consult integration" single ((:commit . "f8db3252c0daa41225ba4ed1c0d178b281cd3e90") (:authors ("Gerry Agbobada")) (:maintainers ("Gerry Agbobada")) (:maintainer "Gerry Agbobada") (:keywords "tools" "completion" "lsp") (:url . "https://github.com/gagbo/consult-lsp"))])
- (consult-notes . [(20230419 357) ((emacs (27 1)) (consult (0 17)) (s (1 12 0)) (dash (2 19))) "Manage notes with consult" tar ((:commit . "4fce058f668945a0a532c49d585be763fa29deda") (:authors ("Colin McLear" . "mclear@fastmail.com")) (:maintainers ("Colin McLear")) (:maintainer "Colin McLear") (:keywords "convenience") (:url . "https://github.com/mclear-tools/consult-notes"))])
- (consult-notmuch . [(20221216 1701) ((emacs (26 1)) (consult (0 9)) (notmuch (0 31))) "Notmuch search using consult" single ((:commit . "d0d4129d45ccceddaeeaa3631eb42d5dd09a758b") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose A Ortega Ruiz")) (:maintainer "Jose A Ortega Ruiz") (:keywords "mail") (:url . "https://codeberg.org/jao/consult-notmuch"))])
- (consult-org-roam . [(20230301 1555) ((emacs (27 1)) (org-roam (2 2 0)) (consult (0 16))) "Consult integration for org-roam" tar ((:commit . "ede01c2710836f055351d2ef0d9fac70b885ac65") (:authors ("jgru <https://github.com/jgru>")) (:maintainers ("jgru <https://github.com/jgru>")) (:maintainer "jgru <https://github.com/jgru>") (:url . "https://github.com/jgru/consult-org-roam"))])
- (consult-project-extra . [(20221013 1014) ((emacs (27 1)) (consult (0 17)) (project (0 8 1))) "Consult integration for project.el" single ((:commit . "9fdf45fa40471900b0b158d73c4b1521a13d47ef") (:authors ("Enrique Kessler Martínez")) (:maintainers ("Enrique Kessler Martínez")) (:maintainer "Enrique Kessler Martínez") (:keywords "convenience" "project" "management") (:url . "https://github.com/Qkessler/consult-project-extra"))])
- (consult-projectile . [(20220617 1042) ((emacs (25 1)) (consult (0 12)) (projectile (2 5 0))) "Consult integration for projectile" single ((:commit . "5ef1ada3be767ea766255801050210f5d796deec") (:authors ("Marco Pawłowski")) (:maintainers ("Marco Pawłowski")) (:maintainer "Marco Pawłowski") (:keywords "convenience") (:url . "https://gitlab.com/OlMon/consult-projectile"))])
- (consult-recoll . [(20221014 2002) ((emacs (26 1)) (consult (0 19))) "Recoll queries using consult" single ((:commit . "8d506e2d01f46fc6b0a0825efb90b062ad6fe3d4") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") (:keywords "docs" "convenience") (:url . "https://codeberg.org/jao/consult-recoll"))])
- (consult-spotify . [(20211114 2258) ((emacs (26 1)) (consult (0 8)) (espotify (0 1))) "Spotify queries using consult" single ((:commit . "5c1dcf0182135cda4191d4ba206fe2f265100293") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose A Ortega Ruiz")) (:maintainer "Jose A Ortega Ruiz") (:keywords "multimedia") (:url . "https://codeberg.org/jao/espotify"))])
- (consult-yasnippet . [(20220724 1338) ((emacs (27 1)) (yasnippet (0 14)) (consult (0 16))) "A consulting-read interface for yasnippet" single ((:commit . "ae0450889484f23dc4ec37518852a2c61b89f184") (:authors ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainers ("mohsin kaleem" . "mohkale@kisara.moe")) (:maintainer "mohsin kaleem" . "mohkale@kisara.moe") (:url . "https://github.com/mohkale/consult-yasnippet"))])
- (contextual . [(20180726 800) ((emacs (24)) (dash (2 12 1)) (cl-lib (0 5))) "Contextual profile management system" single ((:commit . "7ad2bb36426fd182d4d5ee7fd9be1cc0db8c7a84") (:authors ("Alexander Kahl" . "ak@sodosopa.io")) (:maintainers ("Alexander Kahl" . "ak@sodosopa.io")) (:maintainer "Alexander Kahl" . "ak@sodosopa.io") (:keywords "convenience" "tools") (:url . "https://github.com/lshift-de/contextual"))])
- (contextual-menubar . [(20180205 709) nil "display the menubar only on a graphical display" single ((:commit . "f76f55232ac07df76ef9a334a0c527dfab97c40b") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/contextual-menubar"))])
- (contrast-color . [(20160903 1807) ((emacs (24 3)) (cl-lib (0 5))) "Pick best contrast color for you" single ((:commit . "6ff1b807e09ef6a775e4ab1032bb2ea3fc442d9e") (:authors ("Yuta Yamada <cokesboy[at]gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy[at]gmail.com>")) (:maintainer "Yuta Yamada <cokesboy[at]gmail.com>") (:keywords "color" "convenience") (:url . "https://github.com/yuutayamada/contrast-color-el"))])
- (control-mode . [(20160624 1710) nil "A \"control\" mode, similar to vim's \"normal\" mode" single ((:commit . "6bf487144119b03f9cc54168f70e3d7d8d84e22b") (:authors ("Stephen Marsh" . "stephen.david.marsh@gmail.com")) (:maintainers ("Stephen Marsh" . "stephen.david.marsh@gmail.com")) (:maintainer "Stephen Marsh" . "stephen.david.marsh@gmail.com") (:keywords "convenience" "emulations") (:url . "https://github.com/stephendavidmarsh/control-mode"))])
- (conventional-changelog . [(20230101 1656) ((emacs (26 3)) (transient (0 3 7))) "Conventional Changelog Generator" single ((:commit . "56f0e134f0edc1964965575dea259b186d34155a") (:authors ("liuyinz" . "liuyinz95@gmail.com")) (:maintainers ("liuyinz" . "liuyinz95@gmail.com")) (:maintainer "liuyinz" . "liuyinz95@gmail.com") (:keywords "tools") (:url . "https://github.com/liuyinz/emacs-conventional-changelog"))])
- (cool-mode . [(20220612 1904) ((emacs (25))) "Major mode for cool compiler language" tar ((:commit . "961e66956412a1dd63f79473a8273da8853f7179") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com") (:url . "https://github.com/nverno/cool-mode"))])
- (copy-as-format . [(20190523 258) ((cl-lib (0 5))) "Copy buffer locations as GitHub/Slack/JIRA etc... formatted code" single ((:commit . "a0962b670e26b723ce304b14e3397da453aef84e") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:keywords "github" "slack" "jira" "hipchat" "gitlab" "bitbucket" "org-mode" "pod" "rst" "asciidoc" "tools" "convenience") (:url . "https://github.com/sshaw/copy-as-format"))])
- (copy-file-on-save . [(20230402 1829) ((emacs (24 3)) (compat (29))) "Copy file on save, automatic deployment it" single ((:commit . "370b1586feb2690d3c72185bd4f17c31ce03673a") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "files" "comm" "deploy") (:url . "https://github.com/emacs-php/emacs-auto-deployment"))])
- (copyit . [(20190919 1258) ((emacs (24 3)) (s (1 9 0))) "Copy it, yank anything!" single ((:commit . "c4f2c28e5b6270e8e3364341619f1154bb4e682e") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "convenience" "yank" "clipboard") (:url . "https://github.com/zonuexe/emacs-copyit"))])
- (copyit-pandoc . [(20190919 1258) ((emacs (24 3)) (copyit (0 1 0)) (pandoc (0 0 1))) "Copy it, yank anything!" single ((:commit . "c4f2c28e5b6270e8e3364341619f1154bb4e682e") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "convenience" "yank" "clipboard") (:url . "https://github.com/zonuexe/emacs-copyit"))])
- (coq-commenter . [(20170822 2309) ((dash (2 13 0)) (s (1 11 0)) (cl-lib (0 5))) "Coq commenting minor mode for proof" single ((:commit . "7fe9a2cc0ebdb0b1e54a24eb7971d757fb588ac3") (:authors ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainers ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainer "Junyoung Clare Jang" . "jjc9310@gmail.com") (:keywords "comment" "coq" "proof") (:url . "http://github.com/ailrun/coq-commenter"))])
- (corfu-prescient . [(20221216 112) ((emacs (27 1)) (prescient (6 1 0)) (corfu (0 28))) "prescient.el + Corfu" single ((:commit . "72b023f5fc1ae2bbf2f51f1786cc012d40671bf4") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes") (:keywords "extensions") (:url . "https://github.com/radian-software/prescient.el"))])
- (corral . [(20160502 948) nil "Quickly surround text with delimiters" single ((:commit . "e7ab6aa118e46b93d4933d1364bc273f57cd6911") (:authors ("Kevin Liu" . "mail@nivekuil.com")) (:maintainers ("Kevin Liu" . "mail@nivekuil.com")) (:maintainer "Kevin Liu" . "mail@nivekuil.com") (:url . "http://github.com/nivekuil/corral"))])
- (cort . [(20211020 18) ((emacs (24 1)) (ansi (0 4)) (cl-lib (0 6))) "Simplify extended unit test framework" single ((:commit . "3f64a7b03a4c5b768ec21fd5987acd0d62d16c7b") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "test" "lisp") (:url . "https://github.com/conao3/cort.el"))])
- (cosmo . [(20170922 744) ((emacs (24 4))) "Cosmological Calculator" single ((:commit . "dd83b09a49a2843606b28279b674b2207040b36b") (:authors ("Francesco Montanari" . "fmnt@fmnt.info")) (:maintainers ("Francesco Montanari" . "fmnt@fmnt.info")) (:maintainer "Francesco Montanari" . "fmnt@fmnt.info") (:keywords "tools") (:url . "https://gitlab.com/montanari/cosmo-el"))])
- (counsel . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0)) (swiper (0 14 0))) "Various completion functions using Ivy" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience" "matching" "tools") (:url . "https://github.com/abo-abo/swiper"))])
- (counsel-ag-popup . [(20210121 805) ((emacs (26 1)) (counsel (0 13 0)) (transient (0 3 0))) "Interactive search with counsel-ag" single ((:commit . "41d85fe36edd72da68f5009ad9cf9013cd19960d") (:authors ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainers ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainer "Eder Elorriaga" . "gexplorer8@gmail.com") (:keywords "convenience" "matching" "tools") (:url . "https://github.com/gexplorer/counsel-ag-popup"))])
- (counsel-at-point . [(20230116 951) ((emacs (26 2)) (counsel (0 13 0))) "Context sensitive project search" single ((:commit . "a84cc0e409325d051208c43dfcabcebaa0d98ba3") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-counsel-at-point"))])
- (counsel-bbdb . [(20220909 727) ((emacs (24 3)) (bbdb (3 2 2 2))) "Quick search&input email from BBDB based on Emacs API `completing-read'" single ((:commit . "ccae56b0551abb305cad087d85f1b6a97adb7c0f") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "mail" "abbrev" "convenience" "matching") (:url . "https://github.com/redguard/counsel-bbdb"))])
- (counsel-chrome-bm . [(20211022 1427) ((emacs (25 1)) (counsel (0 13 0))) "Browse Chrom(e/ium) bookmarks with Ivy" single ((:commit . "3321bf78231e443cb98520dbb30a6c49e004c6a7") (:authors ("BlueBoxWare" . "BlueBoxWare@users.noreply.github.com")) (:maintainers ("BlueBoxWare" . "BlueBoxWare@users.noreply.github.com")) (:maintainer "BlueBoxWare" . "BlueBoxWare@users.noreply.github.com") (:keywords "hypermedia") (:url . "https://github.com/BlueBoxWare/counsel-chrome-bm"))])
- (counsel-codesearch . [(20180925 803) ((codesearch (1)) (counsel (0 10 0)) (emacs (24)) (ivy (0 10 0))) "Counsel interface for codesearch.el" single ((:commit . "b7989fad3e06f301c31d5e896c42b6cc549a0e0c") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:keywords "tools") (:url . "https://github.com/abingham/emacs-counsel-codesearch"))])
- (counsel-css . [(20211115 1755) ((emacs (24 4)) (counsel (0 7 0)) (cl-lib (0 5))) "stylesheet-selector-aware swiper" single ((:commit . "8e9c0515fc952452eee786d8ebb43d48ea86c9f8") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io") (:keywords "convenience" "tools" "counsel" "swiper" "selector" "css" "less" "scss") (:url . "https://github.com/hlissner/emacs-counsel-css"))])
- (counsel-dash . [(20221217 419) ((emacs (24 4)) (dash-docs (1 4 0)) (counsel (0 8 0)) (cl-lib (0 5))) "Browse dash docsets using Ivy" single ((:commit . "04117bffc8badd85c9f4fdb17648fd56e83fe832") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainers ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com") (:keywords "dash" "ivy" "counsel") (:url . "https://github.com/nathankot/counsel-dash"))])
- (counsel-edit-mode . [(20230411 1740) ((emacs (26 1)) (ht (2 3)) (s (1 12 0)) (counsel (0 10 0))) "Edit results of counsel commands in-place" single ((:commit . "8ff508a864d0fe4cac32c6868420df2ad77f041b") (:authors ("Tyler Dodge")) (:maintainers ("Tyler Dodge")) (:maintainer "Tyler Dodge") (:keywords "convenience" "matching") (:url . "https://github.com/tyler-dodge/counsel-edit-mode"))])
- (counsel-etags . [(20221213 209) ((emacs (26 1)) (counsel (0 13 4))) "Fast and complete Ctags/Etags solution using ivy" single ((:commit . "a65c03d2a82bae2571993b77b980f2f27c138ecb") (:authors ("Chen Bin <chenbin dot sh AT gmail dot com>")) (:maintainers ("Chen Bin <chenbin dot sh AT gmail dot com>")) (:maintainer "Chen Bin <chenbin dot sh AT gmail dot com>") (:keywords "tools" "convenience") (:url . "http://github.com/redguardtoo/counsel-etags"))])
- (counsel-fd . [(20221011 1853) ((counsel (0 12 0))) "counsel interface for fd" single ((:commit . "7c1e413e4ce44df2232c19ebe3357ac8ec33cb3b") (:keywords "tools") (:url . "https://github.com/CsBigDataHub/counsel-fd"))])
- (counsel-ffdata . [(20191017 1237) ((emacs (25 1)) (counsel (0 11 0)) (emacsql (3 0 0))) "Use ivy to access firefox data" single ((:commit . "913cb1b8cd5e4ca2ba6613eab56d52040e08a0a5") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Zhu Zihao" . "all_but_last@163.com")) (:maintainer "Zhu Zihao" . "all_but_last@163.com") (:keywords "convenience" "tools" "matching") (:url . "https://github.com/cireu/counsel-ffdata"))])
- (counsel-gtags . [(20210222 1803) ((emacs (25 1)) (counsel (0 8 0)) (seq (1 0))) "ivy for GNU global" single ((:commit . "1d52eaeffeb60266434d4f7416a108ca058fde91") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Felipe Lema" . "felipelema@mortemale.org") ("Jimmy Aguilar Mena" . "spacibba@aol.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/FelipeLema/emacs-counsel-gtags"))])
- (counsel-jq . [(20210329 749) ((swiper (0 12 0)) (ivy (0 12 0)) (emacs (24 1))) "Live preview of \"jq\" queries using counsel" single ((:commit . "8cadd2e96470402ede4881b4e955872976443689") (:authors ("Alain M. Lafon" . "alain@200ok.ch")) (:maintainers ("Alain M. Lafon" . "alain@200ok.ch")) (:maintainer "Alain M. Lafon" . "alain@200ok.ch") (:keywords "convenience" "data" "matching") (:url . "https://github.com/200ok-ch/counsel-jq"))])
- (counsel-mairix . [(20210422 649) ((emacs (26 3)) (ivy (0 13 1))) "Counsel interface for Mairix" single ((:commit . "39fa2ad10a5f899cb3f3275f9a6ebd166c51216a") (:authors ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainers ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainer "Antoine Kalmbach" . "ane@iki.fi") (:keywords "mail") (:url . "https://sr.ht/~ane/counsel-mairix"))])
- (counsel-notmuch . [(20181203 935) ((emacs (24)) (ivy (0 10 0)) (notmuch (0 21)) (s (1 12 0))) "Search emails in Notmuch asynchronously with Ivy" single ((:commit . "a4a1562935e4180c42524c51609d1283e9be0688") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainers ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexander@gmail.com") (:keywords "mail") (:url . "https://github.com/fuxialexander/counsel-notmuch"))])
- (counsel-org-capture-string . [(20200810 1114) ((emacs (25 1)) (ivy (0 13))) "Counsel for org-capture-string" single ((:commit . "f47de69458c9fceeecd7c69264f645c0cfeb2cd2") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "outlines") (:url . "https://github.com/akirak/counsel-org-capture-string"))])
- (counsel-org-clock . [(20200810 1109) ((emacs (25 1)) (ivy (0 10 0)) (dash (2 0))) "Counsel commands for org-clock" single ((:commit . "a32bb85205e877cc57f62765c225e8b288536918") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/counsel-org-clock"))])
- (counsel-osx-app . [(20160821 809) ((ivy (0 8 0)) (emacs (24 3))) "launch osx applications via ivy interface" single ((:commit . "5cc93ec684f837dc31ce20e7625407f2c0445691") (:authors ("Boris Buliga" . "d12frosted@gmail.com")) (:maintainers ("Boris Buliga" . "d12frosted@gmail.com")) (:maintainer "Boris Buliga" . "d12frosted@gmail.com") (:url . "https://github.com/d12frosted/counsel-osx-app"))])
- (counsel-projectile . [(20211004 2003) ((counsel (0 13 4)) (projectile (2 5 0))) "Ivy integration for Projectile" single ((:commit . "e30150792a96968f55f34638cbfe63eaa30839cc") (:authors ("Eric Danan")) (:maintainers ("Eric Danan")) (:maintainer "Eric Danan") (:keywords "project" "convenience") (:url . "https://github.com/ericdanan/counsel-projectile"))])
- (counsel-pydoc . [(20171018 2042) ((emacs (24 3)) (ivy (0 9 1))) "run pydoc with counsel" single ((:commit . "08a4a1020da3d06604156303024c8a5e31ec36e4") (:authors (nil . "Hao Deng(denghao8888@gmail.com)")) (:maintainers (nil . "Hao Deng(denghao8888@gmail.com)")) (:maintainer nil . "Hao Deng(denghao8888@gmail.com)") (:keywords "completion" "matching") (:url . "https://github.com/co-dh/pydoc_utils"))])
- (counsel-spotify . [(20200818 2055) ((emacs (25 1)) (ivy (0 13 0))) "Control Spotify search and select music with Ivy" tar ((:commit . "2743ad52a9def53534fd505397fbe1ac49e53015") (:authors ("Lautaro García <https://github.com/Lautaro-Garcia>")) (:maintainers ("Lautaro García <https://github.com/Lautaro-Garcia>")) (:maintainer "Lautaro García <https://github.com/Lautaro-Garcia>") (:url . "https://github.com/Lautaro-Garcia/counsel-spotify"))])
- (counsel-test . [(20190819 1920) ((emacs (25 1)) (ivy (0 11 0)) (s (1 12 0))) "Browse and execute tests with ivy" tar ((:commit . "f0ea446def59a3a8ca40e868fe9d82de268b2abe") (:keywords "tools" "ivy" "counsel" "testing" "ctest" "pytest") (:url . "http://github.com/xmagpie/counsel-test"))])
- (counsel-tramp . [(20221228 1403) ((emacs (24 3)) (counsel (0 10))) "Tramp ivy interface for ssh, docker, vagrant" single ((:commit . "f63bf0bc765480676094102013218254ea17727f") (:authors ("Masashi Miyaura")) (:maintainers ("Masashi Miyaura")) (:maintainer "Masashi Miyaura") (:url . "https://github.com/masasam/emacs-counsel-tramp"))])
- (counsel-web . [(20210609 2156) ((emacs (25 1)) (counsel (0 13 0)) (request (0 3 0))) "Search the Web using Ivy" single ((:commit . "1359b3b204fcdac7a3d6664c7d540a88b5acecfd") (:authors ("Matthew Sojourner Newton" . "matt@mnewton.com")) (:maintainers ("Matthew Sojourner Newton" . "matt@mnewton.com")) (:maintainer "Matthew Sojourner Newton" . "matt@mnewton.com") (:keywords "convenience" "hypermedia") (:url . "https://github.com/mnewt/counsel-web"))])
- (counsel-world-clock . [(20190709 2211) ((ivy (0 9 0)) (s (1 12 0))) "Display world clock using Ivy." single ((:commit . "674e4c6b82a92ea765af97cc5f017b357284c7dc") (:authors ("Kuang Chen <http://github.com/kchenphy>")) (:maintainers ("Kuang Chen <http://github.com/kchenphy>")) (:maintainer "Kuang Chen <http://github.com/kchenphy>") (:url . "https://github.com/kchenphy/counsel-world-clock"))])
- (countdown . [(20190626 244) ((emacs (25 1)) (stream (2 2 4))) "Countdown using big LCD-like digits" single ((:commit . "139dea91fc818d65944aca5f16c9626abbdfbf04") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "tools") (:url . "https://github.com/xuchunyang/countdown.el"))])
- (cov . [(20220727 31) ((emacs (24 4)) (f (0 18 2)) (s (1 11 0)) (elquery (0))) "Show coverage stats in the fringe." single ((:commit . "cd3e1995c596cc227124db9537792d8329ffb696") (:authors ("Adam Niederer")) (:maintainers ("Adam Niederer")) (:maintainer "Adam Niederer") (:keywords "coverage" "gcov" "c" "lcov" "coveralls" "clover") (:url . "https://github.com/AdamNiederer/cov"))])
- (coverage . [(20191113 1958) ((ov (1 0)) (cl-lib (0 5))) "Code coverage line highlighting" single ((:commit . "6e3c6f2dcb759a76086adeeb1fdfe83e4f082482") (:authors ("Kieran Trezona-le Comte" . "trezona.lecomte@gmail.com")) (:maintainers ("Kieran Trezona-le Comte" . "trezona.lecomte@gmail.com")) (:maintainer "Kieran Trezona-le Comte" . "trezona.lecomte@gmail.com") (:keywords "coverage" "metrics" "simplecov" "ruby" "rspec") (:url . "https://github.com/trezona-lecomte/coverage"))])
- (coverlay . [(20190414 940) ((emacs (24 1)) (cl-lib (0 5))) "Test coverage overlays" single ((:commit . "0beae208d0e7d746a94385428bd61aa5cd7ea828") (:authors ("Takuto Wada <takuto.wada at gmail com>")) (:maintainers ("Takuto Wada <takuto.wada at gmail com>")) (:maintainer "Takuto Wada <takuto.wada at gmail com>") (:keywords "coverage" "overlay") (:url . "https://github.com/twada/coverlay.el"))])
- (cowsay . [(20210510 1540) ((emacs (24 5))) "Poorly drawn ASCII cartoons saying things" single ((:commit . "d8a72a311c6875f1aef6a30b3d23a1b02df75941") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "games") (:url . "https://github.com/lassik/emacs-cowsay"))])
- (cp5022x . [(20120323 2335) nil "cp50220, cp50221, cp50222 coding system" single ((:commit . "ea7327dd75e54539576916f592ae1be98179ae35") (:authors ("ARISAWA Akihiro" . "ari@mbf.ocn.ne.jp")) (:maintainers ("ARISAWA Akihiro" . "ari@mbf.ocn.ne.jp")) (:maintainer "ARISAWA Akihiro" . "ari@mbf.ocn.ne.jp") (:keywords "languages" "cp50220" "cp50221" "cp50222" "cp51932" "cp932"))])
- (cpanfile-mode . [(20161001 710) ((emacs (24 4))) "Major mode for cpanfiles" single ((:commit . "b09908b4342b3aa97940159dbe91ac074ec98e0b") (:authors ("Zak B. Elep" . "zakame@zakame.net")) (:maintainers ("Zak B. Elep" . "zakame@zakame.net")) (:maintainer "Zak B. Elep" . "zakame@zakame.net") (:keywords "perl") (:url . "https://github.com/zakame/cpanfile-mode"))])
- (cpp-auto-include . [(20210318 2217) ((cl-lib (0 5))) "Insert and delete C++ header files automatically" single ((:commit . "0ce829f27d466c083e78b9fe210dcfa61fb417f4") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/emacsorphanage/cpp-auto-include"))])
- (cpputils-cmake . [(20181006 328) nil "Easy realtime C++ syntax check and IntelliSense with CMake." single ((:commit . "64b2b05eff5398b4cd522e66efaf14553ab18ff4") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "cmake" "intellisense" "flymake" "flycheck") (:url . "http://github.com/redguardtoo/cpputils-cmake"))])
- (cpu-sos . [(20200409 2356) ((emacs (25 1))) "S.O.S. from a CPU in distress" single ((:commit . "1594b76d4ad3a6e3c471d82da366226d156e6226") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org") (:keywords "processes") (:url . "https://github.com/oitofelix/cpu-sos"))])
- (cql-mode . [(20190315 225) ((emacs (24))) "Major mode for editting CQLs" single ((:commit . "d400c046850d3cf404778b2c47d6be4ff84ca04b") (:authors ("Yuki Inoue <inouetakahiroki at gmail.com>")) (:maintainers ("Yuki Inoue <inouetakahiroki at gmail.com>")) (:maintainer "Yuki Inoue <inouetakahiroki at gmail.com>") (:keywords "cql" "cassandra") (:url . "https://github.com/Yuki-Inoue/cql-mode"))])
- (cquery . [(20190118 542) ((emacs (25 1)) (lsp-mode (3 4)) (dash (0 13))) "cquery client for lsp-mode" tar ((:commit . "555e50984ebda177421fdcdc8c76cb29235d9694") (:authors ("Tobias Pisani")) (:maintainers ("Tobias Pisani")) (:maintainer "Tobias Pisani") (:keywords "languages" "lsp" "c++") (:url . "https://github.com/jacobdufault/cquery"))])
- (crappy-jsp-mode . [(20140311 931) nil "A pretty crappy major-mode for jsp." single ((:commit . "6c45ab92b452411cc0fab9bcee2f456276b4fc40") (:keywords "jsp" "major" "mode"))])
- (creamsody-theme . [(20220912 851) ((autothemer (0 2)) (emacs (24))) "Straight from the soda fountain" tar ((:commit . "ac27451f395d1718a05de636dde9a69a2f0cd558") (:url . "http://github.com/emacsfodder/emacs-theme-creamsody"))])
- (create-link . [(20220621 1440) ((emacs (25 1))) "Smart format link generator" single ((:commit . "276fafcc6fb568ede256c8d459c3beb408ad9b46") (:authors ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainers ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainer "Kijima Daigo" . "norimaking777@gmail.com") (:keywords "link" "format" "browser" "convenience") (:url . "https://github.com/kijimaD/create-link"))])
- (creds . [(20140510 1706) ((s (1 9 0)) (dash (2 5 0))) "A parser credentials file library (not limited to credentials entries)" tar ((:commit . "00ebefd10005c170b790a01380cb6a98f798ce5c") (:authors ("Antoine R. Dumont <eniotna.t AT gmail.com>")) (:maintainer "Antoine R. Dumont <eniotna.t AT gmail.com>") (:keywords "credentials") (:url . "https://github.com/ardumont/emacs-creds"))])
- (creole . [(20140924 1500) ((noflet (0 0 3)) (kv (0 0 17))) "A parser for the Creole Wiki language" single ((:commit . "7d5cffe93857f6c75ca09ac79c0e47b8d4410e53") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp" "creole" "wiki"))])
- (creole-mode . [(20130722 50) nil "a markup mode for creole" single ((:commit . "b5e79b2ec5f19fb5aacf689b5febc3e0b61515c4") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "hypermedia" "wp") (:url . "https://github.com/nicferrier/creole-mode"))])
- (cricbuzz . [(20180804 2254) ((enlive (0 0 1)) (f (0 19 0)) (dash (2 13 0)) (s (1 11 0))) "Cricket scores from cricbuzz in emacs" single ((:commit . "0b95d45991bbcd2fa58d96ce921f6a57ba42c153") (:authors ("Abhinav Tushar" . "abhinav.tushar.vs@gmail.com")) (:maintainers ("Abhinav Tushar" . "abhinav.tushar.vs@gmail.com")) (:maintainer "Abhinav Tushar" . "abhinav.tushar.vs@gmail.com") (:keywords "cricket" "score") (:url . "https://github.com/lepisma/cricbuzz.el"))])
- (crm-custom . [(20160117 6) ((cl-lib (0 5))) "Alternate `completing-read-multiple' that uses `completing-read'" single ((:commit . "f1aaccf64306a5f99d9bf7ba815d7ea41c15518d") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org") (:keywords "completion" "minibuffer" "multiple elements") (:url . "https://github.com/DarwinAwardWinner/crm-custom"))])
- (crontab-mode . [(20210715 133) ((emacs (24 3))) "Major mode for crontab(5)" single ((:commit . "7412f3df0958812bfcacd5875a409fa795fa8ecc") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "languages") (:url . "https://github.com/emacs-pe/crontab-mode"))])
- (crossword . [(20210614 633) ((emacs (26 1))) "Download and play crossword puzzles" single ((:commit . "e462de8ef15d1f979207a95b224e68d7feead92f") (:keywords "games") (:url . "https://github.com/Boruch-Baum/emacs-crossword"))])
- (crux . [(20221121 859) ((seq (1 11))) "A Collection of Ridiculously Useful eXtensions" single ((:commit . "f8789f67a9d2e1eb31a0e4531aec9bb6d6ec1282") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "convenience") (:url . "https://github.com/bbatsov/crux"))])
- (cryptol-mode . [(20190531 2051) nil "Cryptol major mode for Emacs" single ((:commit . "81ebbde83f7cb75b2dfaefc09de6a1703068c769") (:authors (nil . "Austin Seipp <aseipp [@at] pobox [dot] com>")) (:maintainers (nil . "Austin Seipp <aseipp [@at] pobox [dot] com>")) (:maintainer nil . "Austin Seipp <aseipp [@at] pobox [dot] com>") (:keywords "cryptol" "cryptography") (:url . "http://github.com/thoughtpolice/cryptol-mode"))])
- (crystal-mode . [(20230223 2257) ((emacs (24 4))) "Major mode for editing Crystal files" single ((:commit . "ea2da3c7701542ca4cf703c7c29eb783269d18f6") (:keywords "languages" "crystal") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode"))])
- (crystal-playground . [(20180830 501) ((emacs (25)) (crystal-mode (0 1 2))) "Local crystal playground for short code snippets." single ((:commit . "532dc7e4239eb4bdd241bc4347d34760344c1ebb") (:authors ("Jason Howell")) (:maintainers ("Jason Howell")) (:maintainer "Jason Howell") (:keywords "tools" "crystal") (:url . "https://github.com/jasonrobot/crystal-playground"))])
- (csgo-conf-mode . [(20161209 1619) nil "CS:GO Configuration files syntax highlighting" single ((:commit . "df45ca833eb68c394dd03acce5733a33c3b06bf8") (:authors ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainers ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainer "Guillermo Robles" . "guillerobles1995@gmail.com") (:keywords "languages") (:url . "https://github.com/wynro/emacs-csgo-conf-mode"))])
- (csharp-mode . [(20221126 2005) ((emacs (26 1))) "C# mode derived mode" tar ((:commit . "d8b058c9e9d0429ea7e81d121ce19b064bd7e0f5") (:authors ("Theodor Thornhill" . "theo@thornhill.no")) (:maintainers ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com") (:keywords "c#" "languages" "oop" "mode") (:url . "https://github.com/emacs-csharp/csharp-mode"))])
- (csound-mode . [(20230217 853) ((emacs (25)) (shut-up (0 3 2)) (multi (2 0 1)) (dash (2 16 0)) (highlight (0))) "A major mode for interacting and coding Csound" tar ((:commit . "a4dceb1febd3e7587e89158caf207d5da5624f51") (:authors ("Hlöðver Sigurðsson" . "hlolli@gmail.com")) (:maintainers ("Hlöðver Sigurðsson" . "hlolli@gmail.com")) (:maintainer "Hlöðver Sigurðsson" . "hlolli@gmail.com") (:url . "https://github.com/hlolli/csound-mode"))])
- (csproj-mode . [(20200801 1732) ((emacs (24))) "Work with .NET project files (csproj, vbproj)" tar ((:commit . "a7f0f4610c976a28c41b9b8299892f88b5d0336c") (:authors ("Omair Majid" . "omair.majid@gmail.com")) (:maintainers ("Omair Majid" . "omair.majid@gmail.com")) (:maintainer "Omair Majid" . "omair.majid@gmail.com") (:keywords "languages" "tools") (:url . "https://github.com/omajid/csproj-mode"))])
- (css-autoprefixer . [(20180311 1600) ((emacs (24))) "Adds autoprefix to CSS" single ((:commit . "386a5defc8543a3b87820f1761c075c7d1d93b38") (:authors (nil . "Kyung Mo Kweon<kkweon@gmail.com> and contributors")) (:maintainers (nil . "Kyung Mo Kweon<kkweon@gmail.com> and contributors")) (:maintainer nil . "Kyung Mo Kweon<kkweon@gmail.com> and contributors") (:keywords "convenience" "usability" "css") (:url . "https://github.com/kkweon/emacs-css-autoprefixer"))])
- (css-comb . [(20160416 559) nil "Sort CSS properties in a particular order using CSS Comb" single ((:commit . "6fa45e5af8a8bd3af6c1154cde3540e32c4206ee") (:authors ("Charanjit Singh" . "ckhabra@gmail.com")) (:maintainers ("Charanjit Singh" . "ckhabra@gmail.com")) (:maintainer "Charanjit Singh" . "ckhabra@gmail.com") (:url . "https://github.com/channikhabra/css-comb.el"))])
- (css-eldoc . [(20220415 1629) nil "an eldoc-mode plugin for CSS source code" tar ((:commit . "73ebf9757a043b56b7d3b5befec5a38e6754b9e5") (:authors ("Zeno Zeng" . "zenoes@qq.com")) (:maintainers ("Zeno Zeng" . "zenoes@qq.com")) (:maintainer "Zeno Zeng" . "zenoes@qq.com"))])
- (cssh . [(20150810 1709) nil "clusterssh implementation for emacs" single ((:commit . "2fe2754235225a59b63f08b130cfd4352e2e1c3f") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:keywords "clusterssh" "ssh" "cssh") (:url . "http://tapoueh.org/emacs/cssh.html"))])
- (csv . [(20161113 1510) nil "Functions for reading and parsing CSV files." single ((:commit . "aa1dfa1263565d5fac3879c21d8ddf5f8915e411") (:authors ("Ulf Jasper" . "ulf.jasper@web.de")) (:maintainers ("Ulf Jasper" . "ulf.jasper@web.de")) (:maintainer "Ulf Jasper" . "ulf.jasper@web.de") (:keywords "extensions" "data" "csv"))])
- (ct . [(20230410 233) ((emacs (26 1)) (dash (2 18 0)) (hsluv (1 0 0))) "Color Tools - a color api" tar ((:commit . "86fe88af88b4accef559e8ae6e2bf2400e68a5ee") (:authors ("neeasade")) (:maintainers ("neeasade")) (:maintainer "neeasade") (:keywords "convenience" "color" "theming" "rgb" "hsv" "hsl" "cie-lab" "background") (:url . "https://github.com/neeasade/ct.el"))])
- (ctable . [(20210128 629) ((emacs (24 3)) (cl-lib (0 5))) "Table component for Emacs Lisp" single ((:commit . "48b73742757a3ae5736d825fe49e00034cc453b5") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "table") (:url . "https://github.com/kiwanami/emacs-ctable"))])
- (ctags-update . [(20190609 613) nil "(auto) update TAGS in parent directory using exuberant-ctags" single ((:commit . "67faf248b92388442958a069263c62a345425a1b") (:authors (nil . "Joseph(纪秀峰) jixiuf@gmail.com")) (:maintainers (nil . "Joseph(纪秀峰) jixiuf@gmail.com")) (:maintainer nil . "Joseph(纪秀峰) jixiuf@gmail.com") (:keywords "exuberant-ctags" "etags") (:url . "https://github.com/jixiuf/ctags-update"))])
- (ctl-mode . [(20151202 1006) nil "Major mode for editing GrADS script files" single ((:commit . "1a13051db21b999c7682a015b33a03096ff9d891") (:authors ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainers ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainer "Joe Wielgosz" . "joew@cola.iges.org") (:keywords "grads" "script" "major-mode"))])
- (ctrlf . [(20221112 340) ((emacs (25 1))) "Emacs finally learns how to ctrl+F" single ((:commit . "9b4cf6c79a961f2bfbb949805aa300fcf1eb40a6") (:authors ("Radian LLC" . "contact+ctrlf@radian.codes")) (:maintainers ("Radian LLC" . "contact+ctrlf@radian.codes")) (:maintainer "Radian LLC" . "contact+ctrlf@radian.codes") (:keywords "extensions") (:url . "https://github.com/radian-software/ctrlf"))])
- (ctrlxo . [(20201021 701) ((emacs (25 1))) "Switch to the most recently used window" single ((:commit . "8ad95a81bd1ece06ebe40e2a83490775db64b419") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:keywords "frames") (:url . "https://github.com/muffinmad/emacs-ctrlxo"))])
- (ctune . [(20210205 1428) ((emacs (26 1))) "Tune out CC Mode Noise Macros" tar ((:commit . "3f7abc6e74d4e5954b476ba9a1dc652f96b10c05") (:authors ("Mauro Aranda" . "maurooaranda@gmail.com")) (:maintainers ("Mauro Aranda" . "maurooaranda@gmail.com")) (:maintainer "Mauro Aranda" . "maurooaranda@gmail.com") (:keywords "c" "convenience") (:url . "https://github.com/maurooaranda/ctune"))])
- (ctxmenu . [(20140303 2142) ((popup (20140205 103)) (log4e (0 2 0)) (yaxception (0 1))) "Provide a context menu like right-click." tar ((:commit . "5c2376859562b98c07c985d2b483658e4c0e888e") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "popup") (:url . "https://github.com/aki2o/emacs-ctxmenu"))])
- (cubicaltt . [(20171108 1402) ((emacs (24 1)) (cl-lib (0 5))) "Mode for cubical type theory" single ((:commit . "a867f3d66172020e30dd0614bd7b50f90b6fddd7") (:keywords "languages") (:url . "https://github.com/mortberg/cubicaltt"))])
- (cubicle-mode . [(20221031 2122) nil "Major mode for the Cubicle model checker" single ((:commit . "7679c8452051ed5c89f891c72c6ada76757fc935") (:authors ("Alain Mebsout")) (:maintainers ("Alain Mebsout")) (:maintainer "Alain Mebsout"))])
- (cucumber-goto-step . [(20131210 519) ((pcre2el (1 5))) "Jump to cucumber step definition" single ((:commit . "f2713ffb26ebe1b757d1f2ea80e900b55e5895aa") (:authors ("Glen Stampoultzis" . "gstamp@gmail.com")) (:maintainers ("Glen Stampoultzis" . "gstamp@gmail.com")) (:maintainer "Glen Stampoultzis" . "gstamp@gmail.com") (:url . "http://orthogonal.me"))])
- (cuda-mode . [(20201013 2230) nil "NVIDIA CUDA Major Mode" single ((:commit . "7f593518fd135fc6af994024bcb47986dfa502d2") (:authors ("Jack Morrison" . "jackmorrison1@gmail.com")) (:maintainers ("Jack Morrison" . "jackmorrison1@gmail.com")) (:maintainer "Jack Morrison" . "jackmorrison1@gmail.com") (:keywords "c" "languages"))])
- (cue-mode . [(20220811 1938) ((emacs (25 1))) "Major mode for CUE language files" single ((:commit . "31c671d56e7884fa87ad0f1d27d0bb439dc65380") (:authors ("Russell Sim" . "russell.sim@gmail.com")) (:maintainers ("Russell Sim" . "russell.sim@gmail.com")) (:maintainer "Russell Sim" . "russell.sim@gmail.com") (:keywords "data" "languages") (:url . "https://github.com/russell/cue-mode"))])
- (curl-to-elisp . [(20201124 1012) ((emacs (25 1))) "Convert cURL command to Emacs Lisp code" single ((:commit . "63d8d9c6d5efb8af8aa88042bfc0690ba699ef64") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "lisp") (:url . "https://github.com/xuchunyang/curl-to-elisp"))])
- (currency-convert . [(20210427 2032) ((emacs (24 4))) "Currency converter" single ((:commit . "12805ea66aa8421de5eedda39d23f709de634460") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "comm" "convenience" "i18n") (:url . "https://github.com/lassik/emacs-currency-convert"))])
- (current-word-highlight . [(20210323 1401) nil "Highlight the current word minor mode" single ((:commit . "d860f4e170ffa4cef840da93647f458cc409d554") (:authors ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainers ("Kijima Daigo" . "norimaking777@gmail.com")) (:maintainer "Kijima Daigo" . "norimaking777@gmail.com") (:keywords "highlight" "face" "convenience" "word") (:url . "https://github.com/kijimaD/current-word-highlight"))])
- (curry-on-theme . [(20210322 1717) ((emacs (24 1))) "A low contrast color theme" single ((:commit . "b53a61d443cc75906d9f97e19f19be71f1e19bc4") (:authors ("Martín Varela" . "martin@varela.fi")) (:maintainers ("Martín Varela" . "martin@varela.fi")) (:maintainer "Martín Varela" . "martin@varela.fi") (:url . "https://github.com/mvarela/Curry-On-Theme"))])
- (cursor-flash . [(20210722 445) ((emacs (24 3))) "Highlight the cursor on buffer/window-switch" single ((:commit . "6bb54a1e2e1bf9df80926718b1b8b9ee49080484") (:keywords "convenience" "faces" "maint") (:url . "https://github.com/Boruch-Baum/emacs-cursor-flash"))])
- (cursor-test . [(20131207 1732) ((emacs (24))) "testing library for cursor position in emacs." single ((:commit . "e09956e048b88fd2ee8dd90b5678baed8b04d31b") (:authors ("ainame")) (:maintainers ("ainame")) (:maintainer "ainame") (:url . "https://github.com/ainame/cursor-test.el"))])
- (cwl-mode . [(20210510 1150) ((yaml-mode (0 0 13)) (emacs (24 4))) "A major mode for editing CWL" single ((:commit . "23a333119efaac78453cba95d316109805bd6aec") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "languages" "cwl" "common workflow language") (:url . "https://github.com/tom-tan/cwl-mode"))])
- (cyanometric-theme . [(20220822 301) ((autothemer (0 2)) (emacs (24))) "A Theme with overwhelming bias towards cyan" single ((:commit . "9b20e33a8cc2c76bfe6ad45916be6881386707f5") (:url . "http://github.com/emacsfodder/emacs-theme-cyanometric"))])
- (cyberpunk-2019-theme . [(20191008 1133) ((emacs (24 1))) "A retina-scorching cyberpunk theme" single ((:commit . "7e40c37210c363b2819fd9bb98a73101d7a3c206") (:authors ("Alex Lynham" . "alex@lynh.am")) (:maintainers ("Alex Lynham" . "alex@lynh.am")) (:maintainer "Alex Lynham" . "alex@lynh.am") (:keywords "cyberpunk" "theme" "themes") (:url . "https://github.com/the-frey/cyberpunk-2019"))])
- (cyberpunk-theme . [(20200601 1632) nil "Cyberpunk Color Theme" single ((:commit . "81004fc774d373777d426926fc11abcf1e7ab334") (:authors ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")) (:maintainers ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")) (:maintainer "Nicholas M. Van Horn" . "nvanhorn@protonmail.com") (:keywords "color" "theme" "cyberpunk") (:url . "https://github.com/n3mo/cyberpunk-theme.el"))])
- (cycbuf . [(20131203 2037) nil "Cycle buffers, inspired by swbuff.el, swbuff-x.el, and bs.el" single ((:commit . "1079b41c3eb27d65b66d4399959bb6253f84858e") (:authors ("Martin Pohlack martinp (at) gmx.de")) (:maintainers ("Martin Pohlack martinp (at) gmx.de")) (:maintainer "Martin Pohlack martinp (at) gmx.de") (:keywords "files" "convenience" "buffer switching") (:url . "https://github.com/martinp26/cycbuf"))])
- (cycle-at-point . [(20230116 951) ((emacs (28 1)) (recomplete (0 2))) "Cycle (rotate) the thing under the cursor" tar ((:commit . "3c1471362d6cb947daf6373e8def8169c21222fc") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-cycle-at-point"))])
- (cycle-resize . [(20160521 1557) nil "Cycle resize the current window horizontally or vertically" single ((:commit . "7d255d6fe85f12c967a0f7fcfcf18633be194c88") (:authors ("Pierre Lecocq")) (:maintainers ("Pierre Lecocq")) (:maintainer "Pierre Lecocq") (:url . "https://github.com/pierre-lecocq/cycle-resize"))])
- (cycle-themes . [(20150403 309) ((cl-lib (0 5))) "A global minor mode to make switching themes easier" single ((:commit . "2660c3178be7b28c2cb5dde2dd70a4bd51dae3a2") (:keywords "themes" "utility" "global minor mode") (:url . "http://github.com/toroidal-code/cycle-themes.el"))])
- (cyphejor . [(20221004 1118) ((emacs (24 4))) "Shorten major mode names using user-defined rules" single ((:commit . "0ba2e60589f485bf1bb2540617c970ed00c70266") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "mode-line" "major-mode") (:url . "https://github.com/mrkkrp/cyphejor"))])
- (cypher-mode . [(20151110 1142) nil "major mode for editing cypher scripts" single ((:commit . "ce8543d7877c736c574a17b49874c9dcdc7a06d6") (:authors ("François-Xavier Bois <fxbois AT Google Mail Service>")) (:maintainers ("François-Xavier Bois")) (:maintainer "François-Xavier Bois") (:keywords "cypher" "graph") (:url . "http://github.com/fxbois/cypher-mode"))])
- (cython-mode . [(20221130 1257) nil "Major mode for editing Cython files" single ((:commit . "3e4790559d3168fe992cf2aa62f01423038cedb5"))])
- (czech-holidays . [(20160113 1752) nil "Adds a list of Czech public holidays to Emacs calendar" single ((:commit . "d19828122cf3322bcf50601cefa4ac385d2d8f82") (:authors ("David Chkhikvadze" . "david.chk@outlook.com")) (:maintainers ("David Chkhikvadze" . "david.chk@outlook.com")) (:maintainer "David Chkhikvadze" . "david.chk@outlook.com") (:keywords "calendar"))])
- (d-mode . [(20220602 649) ((emacs (25 1))) "D Programming Language major mode for (X)Emacs" single ((:commit . "024aca97d07e72bf3500fb6bf0cdf50c4992a741") (:authors ("William Baxter")) (:maintainers ("Russel Winder" . "russel@winder.org.uk")) (:maintainer "Russel Winder" . "russel@winder.org.uk") (:keywords "d" "programming" "language" "emacs" "cc-mode"))])
- (d2-mode . [(20230210 1130) ((emacs (26 1))) "Major mode for working with d2 graphs" single ((:commit . "cbe7b16141bd80fe4344f0403e61fd7ee4e0fd89") (:authors ("Andor Kesselman" . "andor@henosisknot.com")) (:maintainers ("Andor Kesselman" . "andor@henosisknot.com")) (:maintainer "Andor Kesselman" . "andor@henosisknot.com") (:keywords "d2" "graphs" "tools" "processes") (:url . "https://github.com/andorsk/d2-mode"))])
- (dactyl-mode . [(20140906 1725) nil "Major mode for editing Pentadactyl config files" single ((:commit . "cc55fe6b987271d9647492b8df4c812d884f661f") (:keywords "languages" "vim") (:url . "https://github.com/luxbock/dactyl-mode"))])
- (dad-joke . [(20170928 658) ((emacs (24))) "Get/display dad jokes" single ((:commit . "bee47e7b746b403228fa7d7361cb095de19ac9ba") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "games") (:url . "https://github.com/davep/dad-joke.el"))])
- (daemons . [(20211214 1251) ((emacs (25 1))) "UI for managing init system daemons (services)" tar ((:commit . "e18e84ccc13101f1609c213029cf011ae0ad1178") (:authors ("Chris Bowdon")) (:maintainers ("Chris Bowdon")) (:maintainer "Chris Bowdon") (:keywords "unix" "convenience") (:url . "https://github.com/cbowdon/daemons.el"))])
- (dakrone-light-theme . [(20170808 2140) nil "dakrone's custom light theme" single ((:commit . "06f198dc8b4ca7421990b30a23d89c8e0b8c5de4") (:authors ("Lee Hinman <lee _AT_ writequit.org>")) (:maintainers ("Lee Hinman <lee _AT_ writequit.org>")) (:maintainer "Lee Hinman <lee _AT_ writequit.org>") (:keywords "color" "themes" "faces") (:url . "https://github.com/dakrone/dakrone-light-theme"))])
- (dakrone-theme . [(20170801 1933) nil "dakrone's custom dark theme" single ((:commit . "232ad1be5f3572dcbdf528f1655109aa355a6937") (:authors ("Lee Hinman <lee _AT_ writequit.org>")) (:maintainers ("Lee Hinman <lee _AT_ writequit.org>")) (:maintainer "Lee Hinman <lee _AT_ writequit.org>") (:keywords "color" "themes") (:url . "https://github.com/dakrone/dakrone-theme"))])
- (dall-e-shell . [(20230430 1944) ((emacs (27 1)) (shell-maker (0 17 1))) "Interaction mode for DALL-E" single ((:commit . "04beccbb29aeeb8a6b670432cba11da2138085a1") (:authors ("Alvaro Ramirez https://xenodium.com")) (:maintainers ("Alvaro Ramirez https://xenodium.com")) (:maintainer "Alvaro Ramirez https://xenodium.com") (:url . "https://github.com/xenodium/chatgpt-shell"))])
- (danneskjold-theme . [(20221121 634) nil "Beautiful high-contrast Emacs theme." tar ((:commit . "39ff00f8a40bcab96afd9450195124b57becd625") (:authors ("Dmitry Akatov" . "akatovda@yandex.com")) (:maintainer "Dmitry Akatov" . "akatovda@yandex.com") (:url . "https://github.com/rails-to-cosmos/"))])
- (dante . [(20221116 840) ((dash (2 12 0)) (emacs (27 1)) (f (0 19 0)) (flycheck (0 30)) (company (0 9)) (flymake (1 0)) (s (1 11 0)) (lcr (1 5))) "Development mode for Haskell" single ((:commit . "914d4f21252a66fe526abedebe24703bc73397d9") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:keywords "haskell" "tools") (:url . "https://github.com/jyp/dante"))])
- (dap-mode . [(20230425 1859) ((emacs (26 1)) (dash (2 18 0)) (lsp-mode (6 0)) (bui (1 1 0)) (f (0 20 0)) (s (1 12 0)) (lsp-treemacs (0 1)) (posframe (0 7 0)) (ht (2 3)) (lsp-docker (1 0 0))) "Debug Adapter Protocol mode" tar ((:commit . "24892f9e30aa9645d51b0a15dfebd75861e6c97f") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "languages" "debug") (:url . "https://github.com/emacs-lsp/dap-mode"))])
- (darcsum . [(20190316 2215) nil "a pcl-cvs like interface for managing darcs patches" single ((:commit . "6a8b690539d133c5e3d17cb23fe4365fbb6fb493") (:authors ("John Wiegley" . "johnw@gnu.org")) (:maintainers ("John Wiegley" . "johnw@gnu.org")) (:maintainer "John Wiegley" . "johnw@gnu.org") (:keywords "completion" "convenience" "tools" "vc"))])
- (darcula-theme . [(20171227 1845) nil "Inspired by IntelliJ's Darcula theme" single ((:commit . "d9b82b58ded9014985be6658f4ab17e26ed9e93e") (:authors ("Sam Halliday" . "Sam.Halliday@gmail.com")) (:maintainers ("Sam Halliday" . "Sam.Halliday@gmail.com")) (:maintainer "Sam Halliday" . "Sam.Halliday@gmail.com") (:keywords "faces") (:url . "https://gitlab.com/fommil/emacs-darcula-theme"))])
- (dark-krystal-theme . [(20170808 1300) ((emacs (24 0))) "an Emacs 24 theme based on Dark Krystal (tmTheme)" single ((:commit . "79084b99665dc9ffb0ec62cc092349a5ecebebbc") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (dark-mint-theme . [(20160302 642) nil "dark & minty fresh theme" single ((:commit . "c8ad39b7115baf889b54c3e9bffe32daeab93c29"))])
- (dark-souls . [(20140314 1128) nil "Prepare to die" single ((:commit . "2c9437265b52f966b2fb13a410a12f3b1e167cb7") (:authors ("Tom Jakubowski" . "tom@crystae.net")) (:maintainers ("Tom Jakubowski" . "tom@crystae.net")) (:maintainer "Tom Jakubowski" . "tom@crystae.net") (:keywords "games") (:url . "http://github.com/tomjakubowski/dark-souls.el"))])
- (darkman . [(20230327 113) ((emacs (28 1))) "Seamless integration with Darkman" tar ((:commit . "3960a534781368c82737ee5d2c4c9e0cef22bf8f") (:authors ("Aziz Ben Ali" . "tahaaziz.benali@esprit.tn")) (:maintainers ("Aziz Ben Ali" . "tahaaziz.benali@esprit.tn")) (:maintainer "Aziz Ben Ali" . "tahaaziz.benali@esprit.tn") (:keywords "convenience") (:url . "https://grtcdr.tn/darkman.el/"))])
- (darkmine-theme . [(20160406 624) nil "Yet another emacs dark color theme." single ((:commit . "7f7e82ca03bcad52911fa41fb3e204e32d6ee63e") (:authors ("Pierre Lecocq" . "pierre.lecocq@gmail.com")) (:maintainers ("Pierre Lecocq" . "pierre.lecocq@gmail.com")) (:maintainer "Pierre Lecocq" . "pierre.lecocq@gmail.com") (:url . "https://github.com/pierre-lecocq/darkmine-theme"))])
- (darkokai-theme . [(20200614 1452) nil "A darker variant on Monokai." single ((:commit . "5820aeddfc8c869ba840cc534eba776936656a66") (:url . "http://github.com/sjrmanning/darkokai"))])
- (darktooth-theme . [(20221014 1418) ((emacs (27 1)) (autothemer (0 2))) "From the darkness... it watches" tar ((:commit . "fd3df73a4d937fa9e12f0b18acb009a9d40f245e") (:url . "http://github.com/emacsfodder/emacs-theme-darktooth"))])
- (dart-mode . [(20220401 0) ((emacs (24 3))) "Major mode for editing Dart files" single ((:commit . "ae032b9b30ebadfe1b8a48a4cf278417e506d100") (:authors ("https://github.com/bradyt/dart-mode/issues")) (:maintainers ("https://github.com/bradyt/dart-mode/issues")) (:maintainer "https://github.com/bradyt/dart-mode/issues") (:keywords "languages") (:url . "https://github.com/bradyt/dart-mode"))])
- (dart-server . [(20210501 1445) ((emacs (24 5)) (cl-lib (0 5)) (dash (2 10 0)) (flycheck (0 23)) (s (1 10))) "Minor mode for editing Dart files" single ((:commit . "75562baf9a89b7e314bc2f795f6ecdc5d1f2cc8c") (:authors ("Natalie Weizenbaum") ("Brady Trainor" . "mail@bradyt.com")) (:maintainers ("Brady Trainor" . "mail@bradyt.com")) (:maintainer "Brady Trainor" . "mail@bradyt.com") (:keywords "languages") (:url . "https://github.com/bradyt/dart-server"))])
- (dash . [(20230502 1324) ((emacs (24))) "A modern list library for Emacs" tar ((:commit . "96eaba028ac069ea0e5cc70de15b0229126a054a") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "extensions" "lisp") (:url . "https://github.com/magnars/dash.el"))])
- (dash-alfred . [(20191024 450) ((emacs (25 1))) "Search Dash documentation via Dash-Alfred-Workflow" single ((:commit . "fcd21bd6c7eb5cd31377be970406ff3d2454bd5c") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "docs") (:url . "https://github.com/xuchunyang/dash-alfred.el"))])
- (dash-at-point . [(20211023 104) nil "Search the word at point with Dash" single ((:commit . "fba1a6f42ea51d05110e12c62bdced664059eb55") (:authors ("Shinji Tanaka" . "shinji.tanaka@gmail.com")) (:maintainers ("Shinji Tanaka" . "shinji.tanaka@gmail.com")) (:maintainer "Shinji Tanaka" . "shinji.tanaka@gmail.com") (:url . "https://github.com/stanaka/dash-at-point"))])
- (dash-docs . [(20210830 926) ((emacs (24 4)) (cl-lib (0 5)) (async (1 9 3))) "Offline documentation browser using Dash docsets." tar ((:commit . "29848b6b347ac520f7646c200ed2ec36cea3feda") (:authors ("Raimon Grau" . "raimonster@gmail.com") ("Toni Reina " . "areina0@gmail.com") ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:keywords "docs") (:url . "http://github.com/areina/helm-dash"))])
- (dash-functional . [(20210826 1149) ((dash (2 18 0))) "Collection of useful combinators for Emacs Lisp" single ((:commit . "39d067b9fbb2db65fc7a6938bfb21489ad990cb4") (:authors ("Matus Goljer" . "matus.goljer@gmail.com") ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "extensions" "lisp") (:url . "https://github.com/magnars/dash.el"))])
- (dashboard . [(20230503 1851) ((emacs (26 1))) "A startup screen extracted from Spacemacs" tar ((:commit . "3fce60c285ed4d22a00d6f5b49335d038aa9cd41") (:authors ("Rakan Al-Hneiti" . "rakan.alhneiti@gmail.com")) (:maintainers ("Jesús Martínez" . "jesusmartinez93@gmail.com")) (:maintainer "Jesús Martínez" . "jesusmartinez93@gmail.com") (:keywords "startup" "screen" "tools" "dashboard") (:url . "https://github.com/emacs-dashboard/emacs-dashboard"))])
- (dashboard-hackernews . [(20220516 1809) ((emacs (24)) (dashboard (1 2 5)) (request (0 3 0))) "Display Hacker News on dashboard" single ((:commit . "34d86bffcde7e6d10ffa7c5080a71a144f01f3aa") (:authors ("Hayato KAJIYAMA" . "kaji1216@gmail.com")) (:maintainers ("Hayato KAJIYAMA" . "kaji1216@gmail.com")) (:maintainer "Hayato KAJIYAMA" . "kaji1216@gmail.com") (:url . "https://github.com/hyakt/emacs-dashboard-hackernews"))])
- (dashboard-ls . [(20221231 1629) ((emacs (26 1)) (dashboard (1 2 5))) "Display files/directories in current directory on Dashboard" single ((:commit . "b24e0bcb87e20ffcc71efb83a97f9516255fa8e4") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "directory" "file" "show") (:url . "https://github.com/emacs-dashboard/dashboard-ls"))])
- (dashboard-project-status . [(20190202 1354) ((emacs (24)) (git (0 1 1)) (dashboard (1 2 5))) "Display a git project status in a dashboard widget." single ((:commit . "7675c138e9df8fe2c626e7ba9bbb8b6717671a41") (:authors ("Jason Duncan" . "jasond496@msn.com")) (:maintainers ("Jason Duncan" . "jasond496@msn.com")) (:maintainer "Jason Duncan" . "jasond496@msn.com") (:url . "https://github.com/functionreturnfunction/dashboard-project-status"))])
- (date-at-point . [(20150308 1243) nil "Add `date' to `thing-at-point' function" single ((:commit . "258c0268cc4357640c2af78774ba9667beff28ee") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "convenience") (:url . "https://github.com/alezost/date-at-point.el"))])
- (date-field . [(20141129 1539) ((dash (2 9 0)) (log4e (0 2 0)) (yaxception (0 3 2))) "Date widget" single ((:commit . "11c9170d1f7b343233f7716d4c0a62be024c1654") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "widgets") (:url . "https://github.com/aki2o/emacs-date-field"))])
- (date2name . [(20190630 933) ((emacs (24 4))) "Package to prepend ISO Timestamps to files" single ((:commit . "1d239e4d647ad8ba5cd23a8d4012a9f10bcf7d7d") (:authors ("Max Beutelspacher")) (:maintainers ("Max Beutelspacher")) (:maintainer "Max Beutelspacher") (:keywords "files" "convenience") (:url . "https://github.com/DerBeutlin/date2name.el"))])
- (datetime . [(20220629 1806) ((emacs (24 4)) (extmap (1 1 1))) "Parsing, formatting and matching timestamps" tar ((:commit . "3505de8bd176056083a1da73226f9e77cc50c4b7") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:keywords "lisp" "i18n") (:url . "https://github.com/doublep/datetime"))])
- (datetime-format . [(20160612 1715) nil "Datetime functions" single ((:commit . "e6427538b547cbe02e1bd6ed4b765c73620bdae8") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "datetime" "calendar") (:url . "https://github.com/zonuexe/emacs-datetime"))])
- (datomic-snippets . [(20180817 1045) ((s (1 4 0)) (dash (1 2 0)) (yasnippet (0 6 1))) "Yasnippets for Datomic" tar ((:commit . "4a14228840d5252e13d2bf6209670f26345bbb84") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "snippets"))])
- (dayone . [(20160105 1240) ((uuid (0 0 3)) (mustache (0 22)) (ht (1 5))) "Utility script for Day One" tar ((:commit . "ab628274f0806451f23bce16f62a6a11cbf91a2b") (:authors ("mori-dev" . "mori.dev.asdf@gmail.com")) (:maintainers ("mori-dev" . "mori.dev.asdf@gmail.com")) (:maintainer "mori-dev" . "mori.dev.asdf@gmail.com") (:keywords "day one" "tools" "convenience") (:url . "https://github.com/mori-dev/emacs-dayone"))])
- (db . [(20140421 2111) ((kv (0 0 11))) "A database for EmacsLisp" single ((:commit . "b3a423fb8e72f9013009cbe033d654df2ce31438") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "data" "lisp"))])
- (db-pg . [(20130131 1902) ((pg (0 12)) (db (0 0 6))) "A PostgreSQL adapter for emacs-db" single ((:commit . "7d5ab86b74b05fe003b3b434d4835f37f3f3eded") (:authors ("Nic Ferrier" . "nic@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nic@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nic@ferrier.me.uk") (:keywords "data" "comm" "database" "postgresql"))])
- (dbc . [(20201001 1452) ((emacs (24 4)) (cl-lib (0 5)) (ht (2 3))) "Control how to open buffers" single ((:commit . "6728e72f72347d098b7d75ac4c29a7d687cc9ed3") (:authors ("Matsievskiy S.V.")) (:maintainers ("Matsievskiy S.V.")) (:maintainer "Matsievskiy S.V.") (:keywords "convenience") (:url . "https://gitlab.com/matsievskiysv/display-buffer-control"))])
- (ddate . [(20221031 1611) ((emacs (24 4))) "Manage Discordian dates with ddate" single ((:commit . "31576a62792743c614e362688b3752b7a959814e") (:authors ("Erik L. Arneson" . "earneson@arnesonium.com")) (:maintainers ("Erik L. Arneson" . "earneson@arnesonium.com")) (:maintainer "Erik L. Arneson" . "earneson@arnesonium.com") (:keywords "lisp" "dates" "tools" "dashboard") (:url . "https://git.sr.ht/~earneson/emacs-ddate"))])
- (ddskk . [(20230328 1058) ((ccc (1 43)) (cdb (20141201 754))) "Simple Kana to Kanji conversion program." tar ((:commit . "98c103ed697e461439401f731c13b3bda02e5128") (:authors ("Masahiko Sato" . "masahiko@kuis.kyoto-u.ac.jp")) (:maintainer "SKK Development Team") (:keywords "japanese" "mule" "input method") (:url . "https://github.com/skk-dev/ddskk"))])
- (ddskk-posframe . [(20200812 917) ((emacs (26 1)) (posframe (0 4 3)) (ddskk (16 2 50))) "Show Henkan tooltip for ddskk via posframe" single ((:commit . "299493dd951e5a0b43b8213321e3dc0bac10f762") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tooltip" "convenience" "posframe") (:url . "https://github.com/conao3/ddskk-posframe.el"))])
- (deadgrep . [(20230429 429) ((emacs (25 1)) (dash (2 12 0)) (s (1 11 0)) (spinner (1 7 3))) "fast, friendly searching with ripgrep" single ((:commit . "0313e17a4df7bc8a344b2bc23a319c45d14f9689") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "tools") (:url . "https://github.com/Wilfred/deadgrep"))])
- (debian-el . [(20211006 1939) nil "Emacs helpers specific to Debian users" tar ((:commit . "a3ef20c269b9192710567571b20718f572942bc4"))])
- (debpaste . [(20161214 2023) ((xml-rpc (1 6 7))) "Interface for getting/posting/deleting pastes from paste.debian.net" single ((:commit . "6f2a400665062468ebd03a2ce1de2a73d9084958") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "paste") (:url . "http://github.com/alezost/debpaste.el"))])
- (debug-print . [(20140126 19) ((emacs (24))) "A nice printf debugging environment by the way Gauche do" single ((:commit . "d817fd9ea2d3f8d2c1ace4d8af155684f3a99dc5") (:authors ("Ken Okada" . "keno.ss57@gmail.com")) (:maintainers ("Ken Okada" . "keno.ss57@gmail.com")) (:maintainer "Ken Okada" . "keno.ss57@gmail.com") (:keywords "extensions" "lisp" "tools" "maint") (:url . "https://github.com/kenoss/debug-print"))])
- (decide . [(20230424 1647) nil "rolling dice and other random things" single ((:commit . "9c0e4c4493f9af9a981627d0630ac6cb2d8c98f0") (:authors ("Pelle Nilsson" . "perni@lysator.liu.se")) (:maintainers ("Pelle Nilsson" . "perni@lysator.liu.se")) (:maintainer "Pelle Nilsson" . "perni@lysator.liu.se"))])
- (decl . [(20221027 1823) ((dash (2 5 0)) (emacs (24 3)) (cl-lib (0 3))) "Library for organizing code declaratively" single ((:commit . "1b11ee91c4b2a2d30b236debf65538fbe4bf10a9") (:authors ("Preetpal S. Sohal")) (:maintainers ("Preetpal S. Sohal")) (:maintainer "Preetpal S. Sohal") (:url . "https://github.com/preetpalS/decl.el"))])
- (declutter . [(20220310 2101) ((emacs (25 1))) "Read html content and (some) paywall sites without clutter" single ((:commit . "0b2ca86fa716dfc2fb3bc3425019f049dd65eda2") (:authors ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainers ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainer "Sanel Zukan" . "sanelz@gmail.com") (:keywords "html" "hypermedia" "terminals") (:url . "http://www.github.com/sanel/declutter"))])
- (dedicated . [(20151202 110) nil "A very simple minor mode for dedicated buffers" single ((:commit . "f47b504c0c56fa5ab9d1028417ca1f65a713a2f0") (:authors ("Eric Crampton" . "eric@atdesk.com")) (:maintainers ("Eric Crampton" . "eric@atdesk.com")) (:maintainer "Eric Crampton" . "eric@atdesk.com") (:keywords "dedicated" "buffer"))])
- (dedukti-mode . [(20171103 1212) nil "Major mode for Dedukti files" single ((:commit . "d7c3505a1046187de3c3aeb144455078d514594e") (:authors ("Raphaël Cauderlier")) (:maintainers ("Raphaël Cauderlier")) (:maintainer "Raphaël Cauderlier") (:keywords "languages" "dedukti") (:url . "https://github.com/rafoo/dedukti-mode"))])
- (default-font-presets . [(20230116 951) ((emacs (26 1))) "Support selecting fonts from a list of presets" single ((:commit . "d52a31ba0860188ab27c58d1a3e2de62346700d5") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-default-font-presets"))])
- (default-text-scale . [(20191226 2234) ((emacs (24))) "Easily adjust the font size in all frames" single ((:commit . "bfc0987c37e93742255d3b23d86c17096fda8e7e") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "frames" "faces") (:url . "https://github.com/purcell/default-text-scale"))])
- (deferred . [(20170901 1330) ((emacs (24 4))) "Simple asynchronous functions for emacs lisp" single ((:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "deferred" "async") (:url . "https://github.com/kiwanami/emacs-deferred"))])
- (define-it . [(20220713 750) ((emacs (25 1)) (s (1 12 0)) (popup (0 5 3)) (pos-tip (0 4 6)) (posframe (1 1 7)) (define-word (0 1 0)) (google-translate (0 11 18)) (wiki-summary (0 1))) "Define, translate, wiki the word" single ((:commit . "de026f399d5b7fa9286f7733b2e3416c6f234372") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "dictionary" "explanation" "search" "wiki") (:url . "https://github.com/jcs-elpa/define-it"))])
- (define-scratch . [(20221220 946) ((emacs (24 3))) "Define new commands to make scratch buffers" single ((:commit . "26cf11f801c2b5df0fbd56d2c4f7ac41b3ccd1c6") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-define-scratch"))])
- (define-word . [(20220104 1848) ((emacs (24 3))) "display the definition of word at point." single ((:commit . "31a8c67405afa99d0e25e7c86a4ee7ef84a808fe") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "dictionary" "convenience") (:url . "https://github.com/abo-abo/define-word"))])
- (defproject . [(20151201 2219) ((emacs (24))) "Manager dir-locals and project specific variables" single ((:commit . "674d48a5e34cb4bba76faa38ee901322ec649086") (:authors (nil . "<kotfic@gmail.com>")) (:maintainers (nil . "<kotfic@gmail.com>")) (:maintainer nil . "<kotfic@gmail.com>") (:keywords "convenience") (:url . "https://github.com/kotfic/defproject"))])
- (defrepeater . [(20180830 410) ((emacs (25 2)) (s (1 12 0))) "Easily make commands repeatable" single ((:commit . "62b00ede57d2e115b9ef9f21268c021ae1186873") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "http://github.com/alphapapa/defrepeater.el"))])
- (deft . [(20210707 1633) nil "quickly browse, filter, and edit plain text notes" single ((:commit . "28be94d89bff2e1c7edef7244d7c5ba0636b1296") (:authors ("Jason R. Blevins" . "jrblevin@xbeta.org")) (:maintainers ("Jason R. Blevins" . "jrblevin@xbeta.org")) (:maintainer "Jason R. Blevins" . "jrblevin@xbeta.org") (:keywords "plain text" "notes" "simplenote" "notational velocity") (:url . "https://jblevins.org/projects/deft/"))])
- (delim-kill . [(20100517 620) nil "Kill text between delimiters." single ((:commit . "1dbe47344f2d2cbc8c54beedf0cf0bf10fd203c1") (:authors ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainers ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainer "Thomas Kappler" . "tkappler@gmail.com") (:keywords "convenience" "languages") (:url . "http://github.com/thomas11/delim-kill/tree/master"))])
- (demangle-mode . [(20210822 2210) ((cl-lib (0 1)) (emacs (24 3))) "Automatically demangle C++, D, and Rust symbols" single ((:commit . "04f545adab066708d6151f13da65aaf519f8ac4e") (:authors ("Ben Liblit" . "liblit@acm.org")) (:maintainers ("Ben Liblit" . "liblit@acm.org")) (:maintainer "Ben Liblit" . "liblit@acm.org") (:keywords "c" "tools") (:url . "https://github.com/liblit/demangle-mode"))])
- (demap . [(20220322 2309) ((emacs (25 1))) "Detachable minimap package" tar ((:commit . "c42ec4752544f80ca7c172ff65e705a56089bc96") (:authors ("Sawyer Gardner <https://gitlab.com/sawyerjgardner>")) (:maintainers ("Sawyer Gardner <https://gitlab.com/sawyerjgardner>")) (:maintainer "Sawyer Gardner <https://gitlab.com/sawyerjgardner>") (:keywords "lisp" "tools" "convenience") (:url . "https://gitlab.com/sawyerjgardner/demap.el"))])
- (demo-it . [(20211221 2152) nil "Create demonstrations" tar ((:commit . "8ade739bb2605275f1f56128a0a9a8c6b55bab6a") (:authors ("Howard Abrams" . "howard.abrams@gmail.com")) (:maintainers ("Howard Abrams" . "howard.abrams@gmail.com")) (:maintainer "Howard Abrams" . "howard.abrams@gmail.com") (:keywords "demonstration" "presentation" "test"))])
- (deno-fmt . [(20230117 1117) ((emacs (24))) "Minor mode for using deno fmt on save" single ((:commit . "6378966f448a3b9b5ae98af58cd13a031bd26702") (:authors ("Russell Clarey <http://github/rclarey>")) (:maintainers ("Russell Clarey <http://github/rclarey>")) (:maintainer "Russell Clarey <http://github/rclarey>") (:url . "https://github.com/russell/deno-emacs"))])
- (describe-hash . [(20200718 1556) nil "Help function for examining a hash map" single ((:commit . "20dbbbea630055b2401f13a55fbb21216960dc46") (:url . "https://github.com/Junker/describe-hash"))])
- (describe-number . [(20151101 55) ((yabin (1 1))) "Describe arbitrarily large number at point." single ((:commit . "40618345a37831804b29589849a785ef5aa5ac24") (:authors ("Morten Slot Kristensen <msk AT nullpointer DOT dk>")) (:maintainers ("Morten Slot Kristensen <msk AT nullpointer DOT dk>")) (:maintainer "Morten Slot Kristensen <msk AT nullpointer DOT dk>") (:keywords "describe" "value" "help") (:url . "https://github.com/netromdk/describe-number"))])
- (desktop+ . [(20170107 2132) ((emacs (24 4)) (dash (2 11 0)) (f (0 17 2))) "Handle special buffers when saving & restoring sessions" single ((:commit . "d26f369bda96860eef18365cdb5c79f39a2c765c") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainers ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com") (:url . "https://github.com/ffevotte/desktop-plus"))])
- (desktop-environment . [(20230403 1823) ((emacs (25 1))) "Helps you control your GNU/Linux computer" single ((:commit . "530035e567a95830f1a8b265e026b76d163c7367") (:authors ("Damien Cassou <damien@cassou.me>, Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Damien Cassou <damien@cassou.me>, Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Damien Cassou <damien@cassou.me>, Nicolas Petton" . "nicolas@petton.fr") (:url . "https://gitlab.petton.fr/DamienCassou/desktop-environment"))])
- (desktop-mail-user-agent . [(20210519 1008) ((emacs (24 3))) "Call OS default mail program to compose mail" single ((:commit . "caac672ef7e4ddced960fa31cef3a6ba5d7ab451") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "mail") (:url . "https://github.com/lassik/emacs-desktop-mail-user-agent"))])
- (desktop-registry . [(20140119 2143) nil "Keep a central registry of desktop files" single ((:commit . "244c2e7f9f0a1050aa8a47ad0b38f4e4584682dd") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:keywords "convenience") (:url . "http://projects.ryuslash.org/desktop-registry/"))])
- (detached . [(20221129 1430) ((emacs (27 1))) "A package to launch, and manage, detached processes" tar ((:commit . "6b64d4d8064cee781e071e825857b442ea96c3d9") (:authors ("Niklas Eklund" . "niklas.eklund@posteo.net")) (:maintainers ("detached.el Development" . "~niklaseklund/detached.el@lists.sr.ht")) (:maintainer "detached.el Development" . "~niklaseklund/detached.el@lists.sr.ht") (:keywords "convenience" "processes") (:url . "https://sr.ht/~niklaseklund/detached.el/"))])
- (detour . [(20181122 2138) ((emacs (24 4))) "Take a quick detour and return" single ((:commit . "f41f17cf1cf4f3db41563ff011786b6567596fb4") (:authors ("Stefan Kamphausen <www.skamphausen.de>")) (:maintainers ("Stefan Kamphausen <www.skamphausen.de>")) (:maintainer "Stefan Kamphausen <www.skamphausen.de>") (:keywords "convenience" "abbrev") (:url . "https://github.com/ska2342/detour/"))])
- (devdocs . [(20230220 2042) ((emacs (27 1))) "Emacs viewer for DevDocs" single ((:commit . "2988d4d201df16d72c3bea465d2b93b554dbddfc") (:authors ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainers ("Augusto Stoffel" . "arstoffel@gmail.com")) (:maintainer "Augusto Stoffel" . "arstoffel@gmail.com") (:keywords "help") (:url . "https://github.com/astoff/devdocs.el"))])
- (devdocs-browser . [(20230423 444) ((emacs (27 1))) "Browse devdocs.io documents using EWW" single ((:commit . "ef7686e4ff4ecab42e1b4a1a5d079bcf947a5b71") (:authors ("blahgeek" . "i@blahgeek.com")) (:maintainers ("blahgeek" . "i@blahgeek.com")) (:maintainer "blahgeek" . "i@blahgeek.com") (:keywords "docs" "help" "tools") (:url . "https://github.com/blahgeek/emacs-devdocs-browser"))])
- (dfmt . [(20170728 1023) nil "Emacs Interface to D indenting/formatting tool dfmt." single ((:commit . "21b9094e907b7ac53f5ecb4ff4539613a9d12434") (:authors ("Per Nordlöw")) (:maintainers ("Kirill Babikhin <qsimpleq>")) (:maintainer "Kirill Babikhin <qsimpleq>") (:keywords "tools" "convenience" "languages" "dlang") (:url . "https://github.com/qsimpleq/elisp-dfmt"))])
- (dhall-mode . [(20230228 1005) ((emacs (24 4)) (reformatter (0 3))) "Major mode for the dhall configuration language" single ((:commit . "87ab69fe765d87b3bb1604a306a8c44d6887681d") (:authors ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainers ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainer "Sibi Prabakaran" . "sibi@psibi.in") (:keywords "languages") (:url . "https://github.com/psibi/dhall-mode"))])
- (dianyou . [(20210525 1517) ((emacs (24 4))) "Search and analyze mails in Gnus" single ((:commit . "f77d9e76be5d8022fa6ee5426144f13f38dd09f2") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "mail") (:url . "http://github.com/redguardtoo/dianyou"))])
- (diary-manager . [(20220929 2042) ((emacs (25))) "Simple personal diary" single ((:commit . "56c739224e5bb845d275bfe3f4e420285de3a929") (:authors ("Radian LLC" . "contact+diary-manager@radian.codes")) (:maintainers ("Radian LLC" . "contact+diary-manager@radian.codes")) (:maintainer "Radian LLC" . "contact+diary-manager@radian.codes") (:keywords "extensions") (:url . "https://github.com/radian-software/diary-manager"))])
- (dic-lookup-w3m . [(20180526 1621) ((w3m (20120723 324)) (stem (20120826))) "look up dictionaries on the Internet" tar ((:commit . "3254ab10cbf0078c7162557dd1f68dac28459cf9") (:authors ("mcprvmec")) (:maintainers ("mcprvmec")) (:maintainer "mcprvmec") (:keywords "emacs-w3m" "w3m" "dictionary"))])
- (dictcc . [(20221231 1703) ((emacs (24 4)) (cl-lib (0 5))) "Look up translations on dict.cc" single ((:commit . "30b505759e5a97c2aaa8b0e8ea5e187fdf625c65") (:authors ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainers ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainer "Marten Lienen" . "marten.lienen@gmail.com") (:keywords "convenience"))])
- (dictionary . [(20201001 1727) ((connection (1 11)) (link (1 11))) "Client for rfc2229 dictionary servers" single ((:commit . "bdf0aa7761d1c1a3bc0652b2fdc4a54b3acdb06a") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainers ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net") (:keywords "interface" "dictionary"))])
- (didyoumean . [(20200905 1843) ((emacs (24 4))) "Did you mean to open another file?" single ((:commit . "ce5edcce160b86e7f6480f0381be785d43f97e19") (:keywords "convenience") (:url . "https://gitlab.com/kisaragi-hiu/didyoumean.el"))])
- (diff-ansi . [(20230501 2304) ((emacs (27 1))) "Display diff's using alternative diffing tools" single ((:commit . "9992b0be2eac8c1bd8051f2ca8de4dc593dc6ff8") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-diff-ansi"))])
- (diff-at-point . [(20230320 2355) ((emacs (26 2))) "Diff navigation" single ((:commit . "0a4815a364b636eadf2f9ca6f468fb5996ff8d6f") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-diff-at-point"))])
- (diff-hl . [(20230423 1837) ((cl-lib (0 2)) (emacs (25 1))) "Highlight uncommitted changes using VC" tar ((:commit . "ac746a6e27e04a077c68a2ebe4f8750399286107") (:authors ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:keywords "vc" "diff") (:url . "https://github.com/dgutov/diff-hl"))])
- (diffed . [(20230208 1546) ((emacs (27 1))) "Diffed is for recursive diff like Dired is for ls" single ((:commit . "f7dc37f13a4f1660212c41a6e9faba61eb8cc078") (:authors ("Bernhard Rotter" . "bernhard@b-rotter.de")) (:maintainers ("Bernhard Rotter" . "bernhard@b-rotter.de")) (:maintainer "Bernhard Rotter" . "bernhard@b-rotter.de") (:keywords "tools") (:url . "https://github.com/ber-ro/diffed"))])
- (difflib . [(20210224 2242) ((emacs (24 4)) (cl-generic (0 3)) (ht (2 2)) (s (1 12 0))) "Helpers for computing deltas between sequences." single ((:commit . "646fc4388274fe765bbf4661e17a24e4d081250c") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me") (:keywords "matching" "tools" "string") (:url . "http://github.com/dieggsy/difflib.el"))])
- (diffpdf . [(20210626 1447) ((emacs (25 1)) (transient (0 3 0))) "Transient diffpdf" single ((:commit . "a5b203b549e373cb9b0ef3f00c0010bd34dd644a") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/diffpdf.el"))])
- (diffscuss-mode . [(20141014 2357) nil "Major mode for diffscuss files." single ((:commit . "bbc6dbed4b97d1eb9ae5dae021ed1e066129bd98") (:authors ("Edmund Jorgensen" . "edmund@hut8labs.com")) (:maintainers ("Edmund Jorgensen" . "edmund@hut8labs.com")) (:maintainer "Edmund Jorgensen" . "edmund@hut8labs.com") (:keywords "tools"))])
- (diffview . [(20230224 1916) nil "View diffs in side-by-side format" single ((:commit . "8f07c0ff4a1acef990589df0d3e32288f19c9d71") (:authors ("Mitchel Humpherys" . "mitch.special@gmail.com")) (:maintainers ("Mitchel Humpherys" . "mitch.special@gmail.com")) (:maintainer "Mitchel Humpherys" . "mitch.special@gmail.com") (:keywords "convenience" "diff") (:url . "https://github.com/mgalgs/diffview-mode"))])
- (digistar-mode . [(20230313 1256) nil "major mode for Digistar scripts" single ((:commit . "2bb1076778468d90a132c04f7b8455fb887b6bfe") (:authors ("John Foerch" . "jjfoerch@gmail.com")) (:maintainers ("John Foerch" . "jjfoerch@gmail.com")) (:maintainer "John Foerch" . "jjfoerch@gmail.com") (:keywords "languages"))])
- (digit-groups . [(20200506 37) ((dash (2 11 0))) "Highlight place-value positions in numbers" single ((:commit . "7b81930cad19b8b7913b7eedbcb498964bfdcbdb") (:authors ("Michael D. Adams <http://michaeldadams.org>")) (:maintainers ("Michael D. Adams <http://michaeldadams.org>")) (:maintainer "Michael D. Adams <http://michaeldadams.org>") (:url . "https://github.com/adamsmd/digit-groups/"))])
- (digitalocean . [(20190607 726) ((request (2 5)) (emacs (24 4))) "Create and manipulate digitalocean droplets" single ((:commit . "6c32d3593286e2a62d9afab0057c829407b0d1e8") (:authors ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainers ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainer "Oliver Marks" . "oly@digitaloctave.com") (:keywords "processes" "tools") (:url . "https://github.com/olymk2/emacs-digitalocean"))])
- (digitalocean-helm . [(20180610 746) ((emacs (24 3)) (helm (2 5)) (digitalocean (0 1))) "Create and manipulate digitalocean droplets" single ((:commit . "b125c9882eded7d73ec109d152b26625f333440b") (:authors ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainers ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainer "Oliver Marks" . "oly@digitaloctave.com") (:keywords "processes" "tools") (:url . "https://gitlab.com/olymk2/digitalocean-api"))])
- (dilbert . [(20211118 1512) ((emacs (26 1)) (enlive (0 0 1)) (dash (2 19 1))) "View Dilbert comics" single ((:commit . "d8c586f1bac58c334822b64bce671dde5e25a27f") (:authors ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainers ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainer "Daniils Petrovs" . "thedanpetrov@gmail.com") (:keywords "multimedia" "news") (:url . "https://github.com/DaniruKun/dilbert-el"))])
- (dim . [(20160818 949) ((emacs (24 4))) "Change mode-line names of major/minor modes" single ((:commit . "110624657fec0c8a7b3589108230e6a635302ae0") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "convenience") (:url . "https://github.com/alezost/dim.el"))])
- (dim-autoload . [(20230212 2019) ((emacs (25 1)) (compat (29 1 3 4))) "Dim or hide autoload cookie lines" single ((:commit . "d9c2b592cef9dfbbebe066919a79d4ef9c31db80") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/dim-autoload"))])
- (dime . [(20210613 1431) ((emacs (25 1)) (dylan (3 0))) "Dylan interaction mode" tar ((:commit . "d85409dc3cba57a390ca85da95822f8078ecbfa2") (:url . "https://opendylan.org/"))])
- (diminish . [(20220909 847) ((emacs (24 3))) "Diminished modes are minor modes with no modeline display" single ((:commit . "fbd5d846611bad828e336b25d2e131d1bc06b83d") (:authors ("Will Mengarini" . "seldon@eskimo.com")) (:maintainers ("Martin Yrjölä" . "martin.yrjola@gmail.com")) (:maintainer "Martin Yrjölä" . "martin.yrjola@gmail.com") (:keywords "extensions" "diminish" "minor" "codeprose") (:url . "https://github.com/myrjola/diminish.el"))])
- (diminish-buffer . [(20221028 1921) ((emacs (24 4))) "Diminish (hide) buffers from buffer-menu" single ((:commit . "983854a90ae39ef5d4d7aecaea108dc64aa2a593") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "diminish" "hide" "buffer" "menu") (:url . "https://github.com/jcs-elpa/diminish-buffer"))])
- (dimmer . [(20220817 122) ((emacs (25 1))) "Visually highlight the selected buffer" single ((:commit . "a5b697580e5aed6168b571ae3d925753428284f8") (:authors ("Neil Okamoto")) (:maintainers ("Neil Okamoto")) (:maintainer "Neil Okamoto") (:keywords "faces" "editing") (:url . "https://github.com/gonewest818/dimmer.el"))])
- (dionysos . [(20160810 1056) ((libmpdee (2 1 0)) (alert (1 2)) (s (1 11 0)) (dash (2 12 1)) (pkg-info (0 5 0)) (cl-lib (0 5))) "Dionysos, a music player for Emacs" tar ((:commit . "98bc789d20e41020d6e62d63d3c78f8032fa4bf2") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "music") (:url . "https://github.com/nlamirault/dionysos"))])
- (dir-treeview . [(20221103 35) ((emacs (24 4)) (treeview (1 1 1))) "A directory tree browser and simple file manager" tar ((:commit . "bdcce576c4e8e8da7f82192cecc650e76d068958") (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainers ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com") (:keywords "tools" "convenience" "files") (:url . "https://github.com/tilmanrassy/emacs-dir-treeview"))])
- (dir-treeview-themes . [(20230112 134) ((emacs (24 4)) (dir-treeview (1 3 3))) "Themes for dir-treeview" tar ((:commit . "8e28c2501a978e6ff733fc9cf43a826fd8e7b87e") (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainers ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com") (:keywords "tools" "convenience" "files") (:url . "https://github.com/tilmanrassy/emacs-dir-treeview-themes"))])
- (dircmp . [(20141204 1756) nil "Compare and sync directories." tar ((:commit . "558ee0b601c2de9d247612085aafe2926f56a09f") (:authors ("Matt McClure -- http://matthewlmcclure.com")) (:maintainers ("Matt McClure -- http://matthewlmcclure.com")) (:maintainer "Matt McClure -- http://matthewlmcclure.com") (:keywords "unix" "tools") (:url . "https://github.com/matthewlmcclure/dircmp-mode"))])
- (director . [(20230213 1201) ((emacs (27 1))) "Simulate user sessions" single ((:commit . "16afdbbd91b451fab44c68c8f7d0b810f5283f28") (:authors ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainers ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainer "Massimiliano Mirra" . "hyperstruct@gmail.com") (:keywords "maint" "tools") (:url . "https://bard.github.io/emacs-director"))])
- (dired-atool . [(20210719 404) ((emacs (24))) "Pack/unpack files with atool on dired." single ((:commit . "01416fd5961b901c50686c91cb59b3833adc831b") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:keywords "files") (:url . "https://github.com/HKey/dired-atool"))])
- (dired-avfs . [(20221127 1247) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "AVFS support for dired" single ((:commit . "41d3eb42195d9f0894c20d18cc8e722b099aa1c1") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-collapse . [(20221127 1247) ((dash (2 10 0)) (f (0 19 0)) (dired-hacks-utils (0 0 1))) "Collapse unique nested paths in dired listing" single ((:commit . "41d3eb42195d9f0894c20d18cc8e722b099aa1c1") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-duplicates . [(20221007 703) ((emacs (27 1))) "Find duplicate files locally and remotely" single ((:commit . "3c16f563880453ad65e1b19ec92d7c4c5a6269f2") (:authors ("Harald Judt" . "h.judt@gmx.at")) (:maintainers ("Harald Judt" . "h.judt@gmx.at")) (:maintainer "Harald Judt" . "h.judt@gmx.at") (:keywords "files") (:url . "https://codeberg.org/hjudt/dired-duplicates"))])
- (dired-dups . [(20130527 2125) nil "Find duplicate files and display them in a dired buffer" single ((:commit . "694ad128c822c59348ced16c4a0c1356d43da47a") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "unix") (:url . "https://github.com/vapniks/dired-dups"))])
- (dired-efap . [(20220421 1535) nil "Edit Filename At Point in a dired buffer" single ((:commit . "360b369cb19998c6730ee1debfbec3edb7f349a9") (:authors ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainers ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainer "Juan-Leon Lahoz" . "juanleon1@gmail.com") (:keywords "dired" "environment" "files" "renaming") (:url . "https://github.com/juan-leon/dired-efap"))])
- (dired-explorer . [(20180607 221) ((cl-lib (0 5))) "minor-mode provides Explorer like select file at dired." single ((:commit . "3ade0a31b5340271d05e9bf443f2504960f6c6dd") (:maintainers ("jidaikobo-shibata")) (:maintainer "jidaikobo-shibata") (:keywords "dired" "explorer"))])
- (dired-fdclone . [(20220119 717) nil "dired functions and settings to mimic FDclone" single ((:commit . "66e337012e72cebd2485f1efca0b2f78dc9c6252") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "unix" "directories" "dired") (:url . "https://github.com/knu/dired-fdclone.el"))])
- (dired-filetype-face . [(20180907 1339) nil "Set different faces for different filetypes in dired" single ((:commit . "7ade7f7e8c2d7518c65f3f0343a10c272da0f47e") (:authors ("纪秀峰 <jixiuf at gmail dot com>")) (:maintainers ("纪秀峰 <jixiuf at gmail dot com>")) (:maintainer "纪秀峰 <jixiuf at gmail dot com>") (:keywords "dired" "filetype" "face") (:url . "https://github.com/jixiuf/dired-filetype-face"))])
- (dired-filter . [(20221127 1247) ((dash (2 10 0)) (dired-hacks-utils (0 0 1)) (f (0 17 0)) (cl-lib (0 3))) "Ibuffer-like filtering for dired" single ((:commit . "41d3eb42195d9f0894c20d18cc8e722b099aa1c1") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-git . [(20220828 6) ((emacs (26 1)) (async-await (1 0)) (async (1 9 4)) (all-the-icons (2 2 0)) (ppp (1 0 0))) "Git integration for dired" single ((:commit . "e84387b947cd707d3ff0c039ddef753a468f88e7") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tools") (:url . "https://github.com/conao3/dired-git.el"))])
- (dired-gitignore . [(20230425 1223) ((emacs (27 1))) "A minor mode to hide gitignored files in a dired buffer" single ((:commit . "9e7678533b132f73057f2cb3839a9f00aff97ac3") (:authors ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainers ("Johannes Mueller" . "github@johannes-mueller.org")) (:maintainer "Johannes Mueller" . "github@johannes-mueller.org") (:keywords "dired" "convenience" "git") (:url . "https://github.com/johannes-mueller/dired-gitignore.el"))])
- (dired-hacks-utils . [(20221127 1247) ((dash (2 5 0))) "Utilities and helpers for dired-hacks collection" single ((:commit . "41d3eb42195d9f0894c20d18cc8e722b099aa1c1") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-hide-dotfiles . [(20210222 1919) ((emacs (25 1))) "Hide dotfiles in dired" single ((:commit . "6a379f23f64045f5950d229254ce6f32dbbf5364") (:authors ("Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com")) (:maintainers ("Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com")) (:maintainer "Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com") (:keywords "files") (:url . "https://github.com/mattiasb/dired-hide-dotfiles"))])
- (dired-icon . [(20170223 526) ((emacs (24 3))) "A minor mode to display a list of associated icons in dired buffers." tar ((:commit . "f60e10757a5011235b519231ad35974ff25963ed") (:authors ("Hong Xu" . "hong@topbug.net")) (:maintainers ("Hong Xu" . "hong@topbug.net")) (:maintainer "Hong Xu" . "hong@topbug.net") (:keywords "dired" "files") (:url . "https://gitlab.com/xuhdev/dired-icon"))])
- (dired-imenu . [(20140109 1610) nil "imenu binding for dired mode" single ((:commit . "610e21fe0988c85931d34894d3eee2442c79ab0a") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:keywords "dired" "imenu") (:url . "https://github.com/DamienCassou/dired-imenu"))])
- (dired-k . [(20211002 2358) ((emacs (24 3))) "Highlight dired by size, date, git status" tar ((:commit . "b9507bac79fc8c030abbec389267262bc671f58b") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:url . "https://github.com/emacsorphanage/dired-k"))])
- (dired-launch . [(20220916 1836) ((emacs (24 3))) "Use dired as a launcher" single ((:commit . "519a6a49b56978b53e88a005490175cb913ec7fa") (:authors ("David Thompson")) (:maintainers ("David Thompson")) (:maintainer "David Thompson") (:keywords "dired" "launch") (:url . "https://github.com/thomp/dired-launch"))])
- (dired-list . [(20230316 901) ((dash (2 10 0)) (emacs (24 3)) (dired-hacks-utils (0 0 1))) "Create dired listings from sources" single ((:commit . "10f636d45c94cdc0a724ebb9d5b62a16401c1a74") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files") (:url . "https://github.com/Fuco1/dired-hacks"))])
- (dired-lsi . [(20200812 929) ((emacs (26 1))) "Add memo to directory and show it in dired" single ((:commit . "0f4038c8b47f6cfc70f82062800700c14c9912c2") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/dired-lsi.el"))])
- (dired-narrow . [(20230318 2146) ((dash (2 7 0)) (dired-hacks-utils (0 0 1))) "Live-narrowing of search results for dired" single ((:commit . "1596e516835099b96cb65d1dc372cfbdff6aea96") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-open . [(20221127 1247) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "Open files from dired using using custom actions" single ((:commit . "41d3eb42195d9f0894c20d18cc8e722b099aa1c1") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-posframe . [(20200817 420) ((emacs (26 1)) (posframe (0 7))) "Peep dired items using posframe" single ((:commit . "1a21eb9ad956a0371dd3c9e1bec53407d685f705") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/dired-posframe.el"))])
- (dired-quick-sort . [(20201221 403) ((hydra (0 13 0)) (emacs (24))) "Persistent quick sorting of dired buffers in various ways." single ((:commit . "69b06f306a5fc2b38e707bae3ff1e35db2b39b6b") (:authors ("Hong Xu" . "hong@topbug.net")) (:maintainers ("Hong Xu" . "hong@topbug.net")) (:maintainer "Hong Xu" . "hong@topbug.net") (:keywords "convenience" "files") (:url . "https://gitlab.com/xuhdev/dired-quick-sort#dired-quick-sort"))])
- (dired-rainbow . [(20221127 1247) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "Extended file highlighting according to its type" single ((:commit . "41d3eb42195d9f0894c20d18cc8e722b099aa1c1") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-ranger . [(20230118 1948) ((dash (2 7 0))) "Implementation of useful ranger features for dired" single ((:commit . "69185bc355c1a8968b8a2851304707e081402458") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-recent . [(20211004 1924) ((emacs (24))) "Dired visited paths history" single ((:commit . "a376f53e42fdca80c3286e8111578c65c64b0711") (:authors ("Wojciech Siewierski <wojciech dot siewierski at onet dot pl>")) (:maintainers ("Wojciech Siewierski <wojciech dot siewierski at onet dot pl>")) (:maintainer "Wojciech Siewierski <wojciech dot siewierski at onet dot pl>") (:keywords "files") (:url . "https://github.com/vifon/dired-recent.el"))])
- (dired-rifle . [(20210316 1452) nil "Call rifle(1) from dired" single ((:commit . "cc1af692bbac651f5e5111d9ab1c0805989d65e5") (:authors ("Wojciech Siewierski <wojciech dot siewierski at onet dot pl>")) (:maintainers ("Wojciech Siewierski <wojciech dot siewierski at onet dot pl>")) (:maintainer "Wojciech Siewierski <wojciech dot siewierski at onet dot pl>") (:keywords "files" "convenience") (:url . "https://github.com/vifon/dired-rifle.el"))])
- (dired-rmjunk . [(20191007 1232) nil "A home directory cleanup utility for Dired." single ((:commit . "0e890a41fa680a45b4b4aad2c28f9d6dca999cee") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainers ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org") (:keywords "files" "matching") (:url . "https://git.sr.ht/~jakob/dired-rmjunk"))])
- (dired-rsync . [(20230126 1144) ((s (1 12 0)) (dash (2 0 0)) (emacs (25 1))) "Allow rsync from dired buffers" single ((:commit . "5496bc00f7a32a9d3e54e395f29d44e9df771567") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/dired-rsync"))])
- (dired-rsync-transient . [(20221214 1215) ((dired-rsync (0 6)) (transient (0 3 0)) (emacs (24 4))) "Transient command for dired-rsync" single ((:commit . "c0e2168b80df00116ab9071bb214cf05ed943d73") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/dired-rsync"))])
- (dired-sidebar . [(20230216 432) ((emacs (25 1)) (dired-subtree (0 0 1))) "Tree browser leveraging dired" single ((:commit . "5569d3b53585f5413cf87a694650d0fd6e040803") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "dired" "files" "tools") (:url . "https://github.com/jojojames/dired-sidebar"))])
- (dired-single . [(20230306 626) ((emacs (25 1))) "Reuse the current dired buffer" single ((:commit . "c781b7dcff6e7f9a5060b067d2cdb0acbc840c49") (:url . "https://codeberg.org/amano.kenji/dired-single"))])
- (dired-subtree . [(20230118 1953) ((dash (2 5 0)) (dired-hacks-utils (0 0 1))) "Insert subdirectories in a tree-like fashion" single ((:commit . "1382acb219c5e3b179662bcacd9c57463802718a") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "files"))])
- (dired-toggle . [(20190616 303) nil "Show dired as sidebar and will not create new buffers when changing dir" single ((:commit . "b694ba91a45d0762bd032ff1bb4109e4c62ca686") (:authors ("Xu FaSheng <fasheng[AT]fasheng.info>")) (:maintainers ("Xu FaSheng")) (:maintainer "Xu FaSheng") (:keywords "dired" "sidebar") (:url . "https://github.com/fasheng/dired-toggle"))])
- (dired-toggle-sudo . [(20211216 102) nil "Browse directory with sudo privileges." single ((:commit . "9f86cdf858225b15c20affb97ed105e4109047bf") (:authors ("Sebastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>")) (:maintainers ("Sebastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>")) (:maintainer "Sebastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>") (:keywords "emacs" "dired"))])
- (dired-view-data . [(20220129 339) ((emacs (26 1)) (ess (18 10 1)) (ess-view-data (1 0))) "View data from dired via ESS and R" single ((:commit . "96d4cb6569fd2be90a516dedd98263374bbc6ead") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/dired-view-data"))])
- (diredc . [(20220113 332) ((emacs (26 1)) (key-assist (1 0))) "Extensions for dired" single ((:commit . "7ee68f6b1c87f8ab86cf23416472747e88860717") (:keywords "files") (:url . "https://github.com/Boruch-Baum/emacs-diredc"))])
- (diredfl . [(20230224 1302) ((emacs (24))) "Extra font lock rules for a more colourful dired" single ((:commit . "17e805763d57370c4eff2c92ed257b72eeb9f94a") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "faces") (:url . "https://github.com/purcell/diredfl"))])
- (diredful . [(20160529 2017) nil "colorful file names in dired buffers" single ((:commit . "b17b3087e0084a5571a9ac4d47ccfc36d96b109e") (:authors ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainers ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainer "Thamer Mahmoud" . "thamer.mahmoud@gmail.com") (:keywords "dired" "colors" "extension" "widget") (:url . "https://github.com/thamer/diredful"))])
- (direnv . [(20220812 956) ((emacs (25 1)) (dash (2 12 0))) "direnv integration" single ((:commit . "268536f564b7eba99264a89a9149268eb4bc67ac") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "direnv" "environment" "processes" "unix" "tools") (:url . "https://github.com/wbolster/emacs-direnv"))])
- (direx . [(20170422 1327) nil "Simple Directory Explorer" tar ((:commit . "a79bfdb5980cf6ed7bfb3b41ddc471a7b6c0ede4") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com") (:keywords "convenience"))])
- (direx-grep . [(20140515 1506) ((direx (0 1 -3))) "Grep node of direx.el using incremental search like anything.el/helm.el" single ((:commit . "1109a512a80b2673a70b18b8568514049017faad") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "convenience") (:url . "https://github.com/aki2o/direx-grep"))])
- (dirtree . [(20140129 832) ((tree-mode (1 1 1 1)) (windata (0))) "Directory tree views" single ((:commit . "ba55f1e716e386fdd37cb8e7f48616e405dc7251") (:authors ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainers ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainer "Ye Wenbin" . "wenbinye@gmail.com"))])
- (dirtree-prosjekt . [(20140129 904) ((prosjekt (0 3)) (dirtree (0 1))) "dirtree integration for prosjekt." single ((:commit . "03e06910589ba5cd736868793eb436b3233c6a26") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/prosjekt"))])
- (dirvish . [(20230123 1201) ((emacs (27 1)) (transient (0 3 7))) "A modern file manager based on dired mode" tar ((:commit . "65954585a9e16a06f6ec1f0dec475b27ec4c218c") (:authors ("Alex Lu <https://github.com/alexluigit>")) (:maintainers ("Alex Lu <https://github.com/alexluigit>")) (:maintainer "Alex Lu <https://github.com/alexluigit>") (:keywords "files" "convenience") (:url . "https://github.com/alexluigit/dirvish"))])
- (disable-mouse . [(20210512 2114) ((emacs (24 1))) "Disable mouse commands globally" single ((:commit . "cae3be9dd012727b40ad3b511731191f79cebe42") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "mouse") (:url . "https://github.com/purcell/disable-mouse"))])
- (disaster . [(20230311 2324) ((emacs (27))) "Disassemble C, C++ or Fortran code under cursor" single ((:commit . "16bba9afb92aacf06c088c29ba47813b65a80d87") (:authors ("Justine Tunney" . "jtunney@gmail.com") ("Abdelhak Bougouffa" . "abougouffa@fedoraproject.org")) (:maintainers ("Abdelhak Bougouffa" . "abougouffa@fedoraproject.org")) (:maintainer "Abdelhak Bougouffa" . "abougouffa@fedoraproject.org") (:keywords "tools" "c") (:url . "https://github.com/jart/disaster"))])
- (discourse . [(20160911 819) ((cl-lib (0 5)) (request (0 2)) (s (1 11 0))) "discourse api" single ((:commit . "a86c7e608851e186fe12e892a573994f08c8e65e") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "lisp" "discourse") (:url . "https://github.com/lujun9972/discourse-api"))])
- (discover . [(20140103 2139) ((makey (0 3))) "discover more of Emacs" single ((:commit . "bbfda2b4e429985a8fa7971d264c942767cfa816") (:authors ("Mickey Petersen" . "mickey@fyeah.org")) (:maintainers ("Mickey Petersen" . "mickey@fyeah.org")) (:maintainer "Mickey Petersen" . "mickey@fyeah.org"))])
- (discover-clj-refactor . [(20150328 1459) ((clj-refactor (0 14 0)) (discover (0 3))) "Adds discover context menu for clj-refactor" single ((:commit . "3fbd5c1162739e606d7cf5d4f5d7426547d99647") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:keywords "clj-refactor" "discover" "convenience"))])
- (discover-js2-refactor . [(20140129 1552) ((js2-refactor (20131221 501)) (discover (20140103 1339))) "Adds discover context menu for js2-refactor" single ((:commit . "3812abf61f39f3e73a9f3daefa6fed4f21a429ba") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com") (:keywords "js2-refactor" "discover"))])
- (discover-my-major . [(20180606 511) ((makey (0 2))) "Discover key bindings and their meaning for the current Emacs major mode" single ((:commit . "66081546eac360c83a9c3270db92a2164288b0d0") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "discover" "help" "major-mode" "keys") (:url . "https://framagit.org/steckerhalter/discover-my-major"))])
- (disk . [(20171116 731) nil "simplified find-file, revert-file, save-buffer interface" single ((:commit . "283e54e3be7d08f959076240b2ab324e25632137") (:authors ("Alex Schroeder" . "alex@gnu.org") ("Peter Barabas" . "peter.barabas+disk@gmail.com")) (:maintainers ("Alex Schroeder" . "alex@gnu.org")) (:maintainer "Alex Schroeder" . "alex@gnu.org") (:keywords "convenience") (:url . "http://www.emacswiki.org/emacs/DiskKey"))])
- (dispass . [(20140202 1531) ((dash (1 0 0))) "Emacs wrapper for DisPass" single ((:commit . "b6e8f89040ebaaf0e7609b04bc27a8979f0ae861") (:authors ("Tom Willemsen" . "tom@ryuslash.org")) (:maintainers ("Tom Willemsen" . "tom@ryuslash.org")) (:maintainer "Tom Willemsen" . "tom@ryuslash.org") (:keywords "processes") (:url . "http://projects.ryuslash.org/dispass.el/"))])
- (display-theme . [(20140115 1556) ((emacs (24))) "display current theme(s) at mode-line" single ((:commit . "b180b3be7a74ae4799a14e7e4bc2fe10e3ff7a15") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "tools") (:url . "https://github.com/kawabata/emacs-display-theme/"))])
- (display-wttr . [(20221102 1426) ((emacs (27 1))) "Display wttr(weather) in the mode line" single ((:commit . "7062953d034e27c297d58748cf74dad552aa2873") (:authors ("Jose G Perez Taveras" . "josegpt27@gmail.com")) (:maintainers ("Jose G Perez Taveras" . "josegpt27@gmail.com")) (:maintainer "Jose G Perez Taveras" . "josegpt27@gmail.com") (:url . "https://github.com/josegpt/display-wttr"))])
- (dispwatch . [(20210305 342) ((emacs (24 4))) "Watch displays for configuration changes" single ((:commit . "03abbac89a9f625aaa1a808dd49ae4906f466421") (:authors ("Mitchell Perilstein" . "mitchell.perilstein@gmail.com")) (:maintainers ("Mitchell Perilstein" . "mitchell.perilstein@gmail.com")) (:maintainer "Mitchell Perilstein" . "mitchell.perilstein@gmail.com") (:keywords "frames") (:url . "https://github.com/mnp/dispwatch"))])
- (dist-file-mode . [(20180830 418) ((emacs (24)) (cl-lib (0 5)) (s (1 9 0))) "Dispatch major mode for *.dist files" single ((:commit . "e1ce8f592bc5d4d86d2f09e334728ac0d524c761") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "files" "convenience") (:url . "https://github.com/emacs-php/dist-file-mode.el"))])
- (distel-completion-lib . [(20180827 1344) nil "Completion library for Erlang/Distel" single ((:commit . "acc4c0a5521904203d797fe96b08e5fae4233c7e") (:authors ("Sebastian Weddmark Olsson")) (:maintainers ("Sebastian Weddmark Olsson")) (:maintainer "Sebastian Weddmark Olsson") (:keywords "erlang" "distel" "completion") (:url . "github.com/sebastiw/distel-completion"))])
- (distinguished-theme . [(20151216 2015) nil "A dark and elegant theme for emacs." single ((:commit . "9b1d25ac59465a5016d187ea84b7614c95a29b3b") (:authors ("Kim Silkebækken" . "kim.silkebaekken@gmail.com")) (:maintainers ("Kim Silkebækken" . "kim.silkebaekken@gmail.com")) (:maintainer "Kim Silkebækken" . "kim.silkebaekken@gmail.com") (:url . "https://github.com/Lokaltog/distinguished-theme"))])
- (ditz-mode . [(20150729 940) nil "Emacs interface to Ditz issue tracking system" single ((:commit . "56668844acd91c3d15a08ba406dbb1ba0c2fe9b4") (:authors ("Glenn Hutchings" . "zondo42@gmail.com")) (:maintainers ("Glenn Hutchings" . "zondo42@gmail.com")) (:maintainer "Glenn Hutchings" . "zondo42@gmail.com") (:keywords "tools"))])
- (dix . [(20230126 1017) ((cl-lib (0 5)) (emacs (26 2))) "Apertium XML editing minor mode" tar ((:commit . "5eeed9362fbeaf5a032bccd69b861b8a36877516") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "languages") (:url . "http://wiki.apertium.org/wiki/Emacs"))])
- (dix-evil . [(20181210 1200) ((dix (0 3 0)) (evil (1 0 7))) "optional evil-integration with dix.el" single ((:commit . "b973de948deb7aa2995b1895e1e62bbe3129b5a5") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "languages") (:url . "http://wiki.apertium.org/wiki/Emacs"))])
- (dizzee . [(20171201 916) nil "A more pleasant way to manage your project's subprocesses in Emacs." tar ((:commit . "e3cf1c2ea5d0fc00747524b6f3c5b905d0a8c8e1") (:authors ("David Miller" . "david@deadpansincerity.com")) (:maintainer "David Miller" . "david@deadpansincerity.com") (:keywords "emacs" "processes") (:url . "https://github.com/davidmiller/dizzee"))])
- (django-commands . [(20220314 1545) ((emacs (25 1))) "Run django commands" single ((:commit . "7510c0f068bf214ad012c203d68e03ff4262efdf") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:keywords "tools") (:url . "https://github.com/muffinmad/emacs-django-commands"))])
- (django-manage . [(20160819 212) ((hydra (0 13 2))) "Django minor mode for commanding manage.py" single ((:commit . "e72b1cf2fdbb5c624d19169176e60467b4918fe2") (:authors ("Daniel Gopar" . "gopardaniel@yahoo.com")) (:maintainers ("Daniel Gopar" . "gopardaniel@yahoo.com")) (:maintainer "Daniel Gopar" . "gopardaniel@yahoo.com") (:keywords "languages"))])
- (django-mode . [(20170522 714) ((projectile (0)) (s (0)) (helm-make (0))) "Major mode for Django web framework." tar ((:commit . "a71b8dd984e7f724b8321246e5c353a4ae5c986e") (:authors ("Greg V" . "floatboth@me.com")) (:maintainers ("Greg V" . "floatboth@me.com")) (:maintainer "Greg V" . "floatboth@me.com") (:keywords "languages"))])
- (django-snippets . [(20131229 1611) ((yasnippet (0 8 0))) "Yasnippets for django" tar ((:commit . "f1e6fea8878bebc9bc0b761376a14cd5c9feda0f") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:url . "https://github.com/myfreeweb/django-mode"))])
- (django-theme . [(20131022 902) nil "Custom face theme for Emacs" single ((:commit . "86c8142b3eb1addd94a43aa6f1d98dab06401af0") (:authors ("Andrzej Sliwa")) (:maintainers ("Andrzej Sliwa")) (:maintainer "Andrzej Sliwa") (:url . "http://github/anrzejsliwa/django-theme"))])
- (djangonaut . [(20200503 921) ((emacs (25 2)) (magit-popup (2 6 0)) (pythonic (0 1 0)) (f (0 20 0)) (s (1 12 0))) "Minor mode to interact with Django projects" single ((:commit . "75f642114e3997308a1e7e67c3025738cecee0fe") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/djangonaut"))])
- (djinni-mode . [(20190303 139) ((emacs (24 4))) "Major-mode for editing Djinni files." single ((:commit . "f0da31d8f45c4b1b2341cf88ec7f2d2e7d16267f") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainers ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es") (:keywords "languages") (:url . "https://github.com/danielmartin/djinni-mode"))])
- (dkdo . [(20131110 1119) ((dkmisc (0 50)) (emacs (24 1))) "Do List major mode based on org-mode." tar ((:commit . "fd6bb105e8331fafb6385c5238c988c4c5bbe2da") (:authors ("David Keegan" . "dksw@eircom.net")) (:maintainer "David Keegan" . "dksw@eircom.net") (:keywords "dolist" "task" "productivity") (:url . "https://github.com/davidkeegan/dkdo"))])
- (dkl . [(20161005 7) nil "Display keyboard layout." tar ((:commit . "6b4584f86037bda3383960c678d51f340229fb91") (:authors ("Alexis" . "flexibeast@gmail.com")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:keywords "input" "keyboard" "layout") (:url . "https://github.com/flexibeast/dkl"))])
- (dklrt . [(20131110 1341) ((dkmisc (0 50)) (ledger-mode (20130908 1357)) (emacs (24 1))) "Ledger Recurring Transactions." tar ((:commit . "4eceed270015b41d24a62a8b71bd239224a63063") (:authors ("David Keegan" . "dksw@eircom.net")) (:maintainer "David Keegan" . "dksw@eircom.net") (:keywords "ledger" "ledger-cli" "recurring" "periodic" "automatic") (:url . "https://github.com/davidkeegan/dklrt"))])
- (dkmisc . [(20131110 1115) ((emacs (24 1))) "Miscellaneous functions required by dk* packages." tar ((:commit . "fe3d49c6f8322b6f89466361acd97585bdfe0608") (:authors ("David Keegan" . "dksw@eircom.net")) (:maintainer "David Keegan" . "dksw@eircom.net") (:keywords "utility" "time" "date" "file") (:url . "https://github.com/davidkeegan/dkmisc"))])
- (dmacro . [(20200803 633) ((emacs (24 1)) (cl-lib (0 6))) "Repeated detection and execution of key operation" single ((:commit . "0008e7d2403a20f444b29a63fad65819aefabe18") (:authors ("Toshiyuki Masui" . "masui@ptiecan.com") ("Makoto Owada") ("Eiji Obata") ("Nobuyuki Mine")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "convenience") (:url . "https://github.com/emacs-jp/dmacro"))])
- (dmenu . [(20190908 44) ((cl-lib (0 5))) "simulate the dmenu command line program" single ((:commit . "e8cc9b27c79d3ecc252267c082ab8e9c82eab264") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "usability"))])
- (dna-mode . [(20191001 2108) nil "a major mode for editing dna sequences" tar ((:commit . "7a48393fcf0015eed2368fcb89b3091c9d029dc4") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainers ("Harley Gorrell" . "harley@panix.com")) (:maintainer "Harley Gorrell" . "harley@panix.com") (:keywords "dna" "emacs" "editing") (:url . "http://www.mahalito.net/~harley/elisp/dna-mode.el"))])
- (doc-show-inline . [(20230319 528) ((emacs (27 1))) "Show doc-strings found in external files" single ((:commit . "261554a788e9cc6c0ba538a732667e514fab70c6") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-doc-show-inline"))])
- (docbook-snippets . [(20150714 1625) ((yasnippet (0 8 0))) "Yasnippets for DocBook" tar ((:commit . "b06297fdec039a541aaa6312cb328a11062cfab4") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainers ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com") (:keywords "snippets" "docbook") (:url . "https://github.com/jhradilek/emacs-docbook-snippets"))])
- (docean . [(20180605 1744) ((emacs (24)) (cl-lib (0 5)) (request (0 2 0))) "Interact with DigitalOcean from Emacs." single ((:commit . "bbe2298fd21f7876fc2d5c52a69b931ff59df979") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/docean.el"))])
- (docker . [(20230302 2046) ((aio (1 0)) (dash (2 19 1)) (emacs (26 1)) (s (1 12 0)) (tablist (1 0)) (transient (0 3 7))) "Interface to Docker" tar ((:commit . "4a308e6b2184a1b7745df5a8b8adafb29b3f7157") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:keywords "filename" "convenience") (:url . "https://github.com/Silex/docker.el"))])
- (docker-api . [(20160525 720) ((dash (2 12 1)) (request (0 2 0)) (s (1 11 0))) "Emacs interface to the Docker API" tar ((:commit . "206144346b7fa4165223349cfeb64a75d47ddd1b") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:url . "https://github.com/Silex/docker-api.el"))])
- (docker-cli . [(20190524 1624) nil "Running various commands in docker containers" single ((:commit . "328429219574555c5fb831a421b4b5d9a2338561") (:authors ("Boško Ivanišević" . "bosko.ivanisevic@gmail.com")) (:maintainers ("Boško Ivanišević" . "bosko.ivanisevic@gmail.com")) (:maintainer "Boško Ivanišević" . "bosko.ivanisevic@gmail.com") (:keywords "processes") (:url . "https://github.com/bosko/docker-cli"))])
- (docker-compose-mode . [(20200830 1336) ((emacs (24 3)) (dash (2 12 0)) (yaml-mode (0 0 12))) "Major mode for editing docker-compose files" single ((:commit . "abaa4f3aeb5c62d7d16e186dd7d77f4e846e126a") (:authors ("Ricardo Martins")) (:maintainers ("Ricardo Martins")) (:maintainer "Ricardo Martins") (:keywords "convenience") (:url . "https://github.com/meqif/docker-compose-mode"))])
- (docker-tramp . [(20220219 420) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for docker containers" tar ((:commit . "930d7b46c180d8a13240a028c1b40af84f2a3219") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "docker" "convenience") (:url . "https://github.com/emacs-pe/docker-tramp.el"))])
- (dockerfile-mode . [(20220822 2021) ((emacs (24))) "Major mode for editing Docker's Dockerfiles" single ((:commit . "52c6c00da1d31c0b6c29c74335b3af63ed6bf06c") (:keywords "docker" "languages" "processes" "tools") (:url . "https://github.com/spotify/dockerfile-mode"))])
- (docopt . [(20230216 957) ((emacs (26 3)) (dash (2 17 0)) (emacs (26 1)) (f (0 20 0)) (parsec (0 1 3)) (s (1 12 0)) (transient (0 3 7))) "A Docopt implementation in Elisp" tar ((:commit . "21c575db68d4ccadb3125241a62136a0f8b76f63") (:authors ("r0man" . "roman@burningswell.com")) (:maintainers ("r0man" . "roman@burningswell.com")) (:maintainer "r0man" . "roman@burningswell.com") (:keywords "docopt" "tools" "processes") (:url . "https://github.com/r0man/docopt.el"))])
- (docstr . [(20221231 1701) ((emacs (27 1)) (s (1 9 0))) "A document string minor mode" tar ((:commit . "68a72e8a9abac28d8451769cab3846c342f657bc") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "document" "string") (:url . "https://github.com/emacs-vs/docstr"))])
- (doct . [(20230108 1507) ((emacs (25 1))) "DOCT: Declarative Org capture templates" single ((:commit . "69bfe30317c7fa7a5a51f2763515dfe9c989ebf1") (:authors ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainers ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainer "Nicholas Vollmer" . "progfolio@protonmail.com") (:keywords "org" "convenience") (:url . "https://github.com/progfolio/doct"))])
- (dogears . [(20220829 441) ((emacs (26 3)) (map (2 1))) "Never lose your place again" single ((:commit . "5b8a85d03ca17d8b8185868fdbacf320784026d5") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/dogears.el"))])
- (dokuwiki . [(20180102 59) ((emacs (24 3)) (xml-rpc (1 6 8))) "Edit Remote DokuWiki Pages Using XML-RPC" single ((:commit . "594c4d4904dcc2796bbbd2c0845d9e7c09ccf6f7") (:authors ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainers ("Juan Karlo Licudine" . "accidentalrebel@gmail.com")) (:maintainer "Juan Karlo Licudine" . "accidentalrebel@gmail.com") (:keywords "convenience") (:url . "http://www.github.com/accidentalrebel/emacs-dokuwiki"))])
- (dokuwiki-mode . [(20170223 1301) nil "Major mode for DokuWiki document" single ((:commit . "e4e116f6fcc373e3f5937c1a7daa5c2c9c6d3fa1") (:authors ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainers ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainer "Tsunenobu Kai" . "kai2nenobu@gmail.com") (:keywords "hypermedia" "text" "dokuwiki") (:url . "https://github.com/kai2nenobu/emacs-dokuwiki-mode"))])
- (dollaro . [(20151123 1302) ((s (1 6 0))) "simple text templates" single ((:commit . "500127f0172ac7a1eec627e026b59136580a74ac") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com") (:keywords "tools" "convenience"))])
- (doom . [(20180301 2308) ((cl-lib (0 5))) "DOM implementation and manipulation library" single ((:commit . "e59040aefc92dd9b3134eb623624307fb9e4327b") (:authors ("Alex Schroeder" . "alex@gnu.org") ("Henrik.Motakef" . "elisp@henrik-motakef.de") ("Katherine Whitlock" . "toroidal-code@gmail.com") ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Alex Schroeder")) (:maintainer "Alex Schroeder") (:keywords "xml" "dom") (:url . "http://www.github.com/kensanata/doom.el/"))])
- (doom-modeline . [(20230506 1112) ((emacs (25 1)) (compat (28 1 1 1)) (nerd-icons (0 0 1)) (shrink-path (0 2 0))) "A minimal and modern mode-line" tar ((:commit . "3612082bc5cba712c07860ce37865f938beb9002") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:keywords "faces" "mode-line") (:url . "https://github.com/seagle0128/doom-modeline"))])
- (doom-modeline-now-playing . [(20210831 1442) ((emacs (24 4)) (doom-modeline (3 0 0)) (async (1 9 3))) "Segment for Doom Modeline to show playerctl information" single ((:commit . "ef9158dfdf32e8eb789b69e7394d0bddaa68f42c") (:authors ("Ellis Kenyő" . "me@elken.dev")) (:maintainers ("Ellis Kenyő" . "me@elken.dev")) (:maintainer "Ellis Kenyő" . "me@elken.dev") (:url . "https://github.com/elken/doom-modeline-now-playing"))])
- (doom-themes . [(20230221 610) ((emacs (25 1)) (cl-lib (0 5))) "an opinionated pack of modern color-themes" tar ((:commit . "4c239dbe42232e81c28901000f435746de2a55ab") (:authors ("Henrik Lissner" . "contact@henrik.io")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io") (:keywords "themes" "faces") (:url . "https://github.com/doomemacs/themes"))])
- (dot-mode . [(20180312 2300) ((emacs (24 3))) "minor mode to repeat typing or commands" single ((:commit . "6ca22b73bcdae2363ee9641b822a60685df16a3e") (:authors ("Robert Wyrick" . "rob@wyrick.org")) (:maintainers ("Robert Wyrick" . "rob@wyrick.org")) (:maintainer "Robert Wyrick" . "rob@wyrick.org") (:keywords "convenience") (:url . "https://github.com/wyrickre/dot-mode"))])
- (dotenv-mode . [(20191027 2129) ((emacs (24 3))) "Major mode for .env files" single ((:commit . "e3701bf739bde44f6484eb7753deadaf691b73fb") (:authors ("Preetpal S. Sohal")) (:maintainers ("Preetpal S. Sohal")) (:maintainer "Preetpal S. Sohal") (:url . "https://github.com/preetpalS/emacs-dotenv-mode"))])
- (dotnet . [(20200803 1032) nil "Interact with dotnet CLI tool" single ((:commit . "83ba1305d7895b03f3dffb2d3458b7ec75e6909f") (:authors ("Julien BLANCHARD" . "julien@sideburns.eu")) (:maintainers ("Julien BLANCHARD" . "julien@sideburns.eu")) (:maintainer "Julien BLANCHARD" . "julien@sideburns.eu") (:keywords ".net" "tools") (:url . "https://github.com/julienXX/dotnet.el"))])
- (double-saber . [(20190325 1917) ((emacs (24 4))) "Narrow and delete in search buffers." single ((:commit . "5555dc28cbaa228fa8f9390738a4200e071380b8") (:authors ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainers ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainer "Daniel Ting" . "deep.paren.12@gmail.com") (:keywords "double-saber" "narrow" "delete" "sort" "tools" "convenience" "matching") (:url . "https://github.com/dp12/double-saber.git"))])
- (download-region . [(20210306 415) ((cl-lib (0 3))) "Simple in-buffer download manager" single ((:commit . "e0a721858a22896fa1d7f1d5689dd0878dbc58fa") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.github.io/"))])
- (downplay-mode . [(20151125 2009) nil "focus attention on a region of the buffer" single ((:commit . "4a2c3addc73c8ca3816345c3c11c08af265baedb") (:authors ("Toby Crawley" . "toby@tcrawley.org")) (:maintainers ("Toby Crawley" . "toby@tcrawley.org")) (:maintainer "Toby Crawley" . "toby@tcrawley.org") (:url . "https://github.com/tobias/downplay-mode/"))])
- (doxy-graph-mode . [(20210604 723) ((emacs (26 3))) "Links source code editing with doxygen call graphs" single ((:commit . "88af6ef4bc9c8918b66c7774f0a115b2addc310e") (:authors ("Gustavo Puche" . "gustavo.puche@gmail.com")) (:maintainers ("Gustavo Puche" . "gustavo.puche@gmail.com")) (:maintainer "Gustavo Puche" . "gustavo.puche@gmail.com") (:keywords "languages" "all") (:url . "https://github.com/gustavopuche/doxy-graph-mode"))])
- (dpaste . [(20160303 2112) nil "Emacs integration for dpaste.com" single ((:commit . "e7a1a18de77f752eb0dbb4b878925f2265538d0b") (:authors ("Greg Newman" . "greg@gregnewman.org") ("Guilherme Gondim" . "semente@taurinus.org")) (:maintainers ("Greg Newman" . "greg@gregnewman.org")) (:maintainer "Greg Newman" . "greg@gregnewman.org") (:keywords "paste" "pastie" "pastebin" "dpaste" "python"))])
- (dpaste_de . [(20131015 1225) ((web (0 3 7))) "Emacs mode to paste to dpaste.de" single ((:commit . "ab041443884a7a4bfdc81b055688821e8efc9b02") (:authors ("Thejaswi Puthraya" . "thejaswi.puthraya@gmail.com")) (:maintainers ("Thejaswi Puthraya" . "thejaswi.puthraya@gmail.com")) (:maintainer "Thejaswi Puthraya" . "thejaswi.puthraya@gmail.com") (:keywords "pastebin"))])
- (dpkg-dev-el . [(20230220 1635) ((debian-el (37))) "Emacs modes for debian packaging" tar ((:commit . "af9aad721cb263e495e2f77df458e9496549c04b") (:authors ("Peter S Galbraith" . "psg@debian.org")) (:maintainer "Peter S Galbraith" . "psg@debian.org"))])
- (dr-racket-like-unicode . [(20220810 2000) ((emacs (24 3))) "DrRacket-style unicode input" single ((:commit . "d09b9be289e91e25c941107be5e8f52e7c8f0065") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk") (:keywords "i18n" "tools") (:url . "https://github.com/david-christiansen/dr-racket-like-unicode"))])
- (dracula-theme . [(20230405 1844) ((emacs (24 3))) "Dracula Theme" single ((:commit . "54c26402555ab5b8b7cfd8ee2488c57b2fa5d32a") (:authors ("film42")) (:maintainers ("Étienne Deparis" . "etienne@depar.is")) (:maintainer "Étienne Deparis" . "etienne@depar.is") (:url . "https://github.com/dracula/emacs"))])
- (draft-mode . [(20160106 859) nil "Rough drafting for Emacs." single ((:commit . "4779fb32daf53746459da2def7e08004492d4f18") (:authors ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainers ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainer "Eeli Reilin" . "gaudecker@fea.st") (:keywords "draft" "drafting") (:url . "https://github.com/gaudecker/draft-mode"))])
- (drag-stuff . [(20161108 749) nil "Drag stuff (lines, words, region, etc...) around" tar ((:commit . "d49fe376d24f0f8ac5ade67b6d7fccc2487c81db") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "speed" "convenience") (:url . "http://github.com/rejeep/drag-stuff"))])
- (drawille . [(20160418 1838) ((cl-lib (0 5))) "Drawille implementation in elisp" tar ((:commit . "d582b455c01432bc80933650c52a1f586bd1b5ad") (:authors ("Josuah Demangeon" . "josuah.demangeon@gmail.com")) (:maintainers ("Josuah Demangeon" . "josuah.demangeon@gmail.com")) (:maintainer "Josuah Demangeon" . "josuah.demangeon@gmail.com") (:keywords "graphics") (:url . "https://github.com/sshbio/elisp-drawille"))])
- (dream-theme . [(20210419 605) ((emacs (26 1))) "Maximalist Nordic/Zenburn-inspired color theme" single ((:commit . "0c27f05544b90e41338f79ea923044b358a323c6") (:authors ("Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl")) (:maintainers ("Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl")) (:maintainer "Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl") (:keywords "faces" "theme") (:url . "https://github.com/djcb/dream-theme"))])
- (drill-instructor-AZIK-force . [(20151123 514) ((popup (0 5))) "Support AZIK input" tar ((:commit . "008cea202dc31d7d6fb1e7d8e6334d516403b7a5") (:authors ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainer "Yuhei Maeda") (:keywords "convenience") (:url . "https://github.com/myuhe/drill-instructor-AZIK-force.el"))])
- (drone . [(20161106 918) nil "Launch your drone test suite if drone.yml is present" single ((:commit . "1d4ee037ad3208847a4235426edf0c4a3e7b1899") (:authors ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainers ("Oliver Marks" . "oly@digitaloctave.com")) (:maintainer "Oliver Marks" . "oly@digitaloctave.com") (:keywords "drone" "tests" "ci") (:url . "https://github.com/olymk2/emacs-drone"))])
- (dropbox . [(20220314 1638) ((request (0 3 0)) (json (1 2)) (oauth (1 0 3))) "Emacs backend for dropbox" single ((:commit . "c048faad0be24e8fa31974f08b710a87cf5b668c") (:authors ("Pavel Panchekha" . "me@pavpanchekha.com")) (:maintainers ("Pavel Panchekha" . "me@pavpanchekha.com")) (:maintainer "Pavel Panchekha" . "me@pavpanchekha.com") (:keywords "dropbox"))])
- (drupal-mode . [(20220125 1044) ((php-mode (1 5 0))) "Advanced minor mode for Drupal development" tar ((:commit . "17927723adc5921e8058f7c29e5e50e88b975639") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk") (:keywords "programming" "php" "drupal") (:url . "https://github.com/arnested/drupal-mode"))])
- (drupal-spell . [(20130520 1655) nil "Aspell extra dictionary for Drupal" tar ((:commit . "a69f5e3b62c4c0da74ce26c1d00d5b8f7395e4ae") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk") (:keywords "wp") (:url . "https://github.com/arnested/drupal-spell"))])
- (dsvn . [(20221102 1416) nil "Subversion interface" single ((:commit . "36ecd5219584e46dcf6bd252e2ea1ec517d2fc05") (:authors ("David Kågedal" . "davidk@lysator.liu.se") (" Mattias Engdegård" . "mattiase@acm.org")) (:maintainers ("Mattias Engdegård" . "mattiase@acm.org")) (:maintainer "Mattias Engdegård" . "mattiase@acm.org") (:keywords "docs"))])
- (dtb-mode . [(20210105 1132) ((emacs (25))) "Show device tree souce in dtbs" single ((:commit . "d5bca7d1afaac5615c586b60c7314a1d0e2514dc") (:authors ("Schspa Shi" . "schspa@gmail.com")) (:maintainers ("Schspa Shi" . "schspa@gmail.com")) (:maintainer "Schspa Shi" . "schspa@gmail.com") (:keywords "dtb" "dts" "convenience") (:url . "https://github.com/schspa/dtb-mode"))])
- (dtk . [(20230406 1321) ((emacs (24 4)) (cl-lib (0 6 1)) (dash (2 12 0)) (seq (1 9)) (s (1 9))) "access SWORD content via diatheke" single ((:commit . "3fc8f3bb8f39840cc5030aca3e3f5c74346d77f2") (:authors ("David Thompson")) (:maintainers ("David Thompson")) (:maintainer "David Thompson") (:keywords "hypermedia") (:url . "https://github.com/dtk01/dtk.el"))])
- (dtrace-script-mode . [(20150214 623) nil "DTrace code editing commands for Emacs" single ((:commit . "a92f76c65b9fb64d448e503b4ea7ff06085be8ee"))])
- (dtrt-indent . [(20230302 2151) nil "Adapt to foreign indentation offsets" tar ((:commit . "07364ae07301f6f0a1713a8dff520c813849ffb3") (:authors ("Julian Scheid" . "julians37@googlemail.com")) (:maintainers ("Reuben Thomas" . "rrt@sc3d.org")) (:maintainer "Reuben Thomas" . "rrt@sc3d.org") (:keywords "convenience" "files" "languages" "c"))])
- (dts-mode . [(20211202 18) nil "Major mode for Devicetree source code" single ((:commit . "32517e7eeeccc785b7c669fd5e93c5df45597ef1") (:authors ("Ben Gamari" . "ben@smart-cactus.org")) (:maintainers ("Ben Gamari" . "ben@smart-cactus.org")) (:maintainer "Ben Gamari" . "ben@smart-cactus.org") (:keywords "languages"))])
- (ducpel . [(20140702 1154) ((cl-lib (0 5))) "Logic game with sokoban elements" tar ((:commit . "2f2ce2df269d99261c808a5c4ebc00d6d2cddabc") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "games") (:url . "https://github.com/alezost/ducpel"))])
- (dumb-diff . [(20171211 2122) ((emacs (24 3))) "fast arbitrary diffs" single ((:commit . "1a2331d283049b71a07c1b06b1e0627a950d55f4") (:authors ("jack angers")) (:maintainers ("jack angers")) (:maintainer "jack angers") (:keywords "programming" "diff"))])
- (dumb-jump . [(20220620 2325) ((emacs (24 3)) (s (1 11 0)) (dash (2 9 0)) (popup (0 5 3))) "Jump to definition for 50+ languages without configuration" single ((:commit . "ba4127336d897f5656032694bbe22c490ecbb000") (:authors ("jack angers and contributors")) (:maintainers ("jack angers and contributors")) (:maintainer "jack angers and contributors") (:keywords "programming") (:url . "https://github.com/jacktasia/dumb-jump"))])
- (dummyparens . [(20141009 1024) nil "parenthesis auto-pairing and wrapping" single ((:commit . "9798ef1d0eaa24e4fe66f8aa6022a8c62714cc89") (:authors ("Sergei Nosov <sergei.nosov [at] gmail.com>")) (:maintainers ("Sergei Nosov <sergei.nosov [at] gmail.com>")) (:maintainer "Sergei Nosov <sergei.nosov [at] gmail.com>") (:keywords "dummyparens" "auto-pair" "wrapping") (:url . "https://github.com/snosov1/dummyparens"))])
- (dune . [(20230402 1815) nil "Integration with the dune build system" tar ((:commit . "e53368337be3c353fd654bdbead322605fc875c5") (:url . "https://github.com/ocaml/dune"))])
- (dune-format . [(20210505 108) ((reformatter (0 6)) (emacs (24 1))) "Reformat OCaml's dune files automatically" single ((:commit . "eda7a16ae378e7c482c11228c43ef32b893a1520") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages") (:url . "https://github.com/purcell/emacs-dune-format"))])
- (duplicate-thing . [(20181031 1500) nil "Duplicate current line & selection" single ((:commit . "9d8fd05e3e5caa35d3f2a0c0032c92f0c0908e21") (:authors ("ongaeshi")) (:maintainers ("ongaeshi")) (:maintainer "ongaeshi") (:keywords "convenience" "command" "duplicate" "line" "selection") (:url . "https://github.com/ongaeshi/duplicate-thing"))])
- (dut-mode . [(20170729 2111) ((emacs (24))) "Major mode for the Dut programming language" single ((:commit . "9235c7acaa6690942e9de8b7acd1e4be0c859dc1") (:authors ("The dut-mode Authors")) (:maintainers ("The dut-mode Authors")) (:maintainer "The dut-mode Authors") (:keywords "languages" "gut") (:url . "https://github.com/dut-lang/dut-mode"))])
- (dw . [(20210331 2311) ((emacs (25 1))) "Diceware passphrase generation commands" single ((:commit . "61c5718ba64ace4c9e29de18aa2690ecc3f0f258") (:authors ("D. Williams" . "d.williams@posteo.net")) (:maintainers ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net") (:keywords "convenience" "games") (:url . "https://github.com/integral-dw/dw-passphrase-generator"))])
- (dwim-shell-command . [(20230421 2305) ((emacs (28 1))) "Shell commands with DWIM behaviour" tar ((:commit . "79bf3ff2c7f6c4cd055d2cc9680ac94dd7beaba3") (:authors ("Alvaro Ramirez")) (:maintainers ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/dwim-shell-command"))])
- (dyalog-mode . [(20230214 1027) ((cl-lib (0 2)) (emacs (24 3))) "Major mode for editing Dyalog APL source code" tar ((:commit . "13c0d391aa878a1609259a89fe3e6db8d21935e8") (:authors ("Joakim HÃ¥rsman" . "joakim.harsman@gmail.com")) (:maintainers ("Joakim HÃ¥rsman" . "joakim.harsman@gmail.com")) (:maintainer "Joakim HÃ¥rsman" . "joakim.harsman@gmail.com") (:keywords "languages") (:url . "https://github.com/harsman/dyalog-mode.git"))])
- (dylan . [(20220115 1804) ((emacs (25 1))) "Dylan editing modes" tar ((:commit . "9d2891e3e06405b75072d296f385fa795aeb9835") (:url . "https://opendylan.org/"))])
- (dynamic-fonts . [(20140731 1226) ((font-utils (0 7 0)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Set faces based on available fonts" single ((:commit . "004ee6014dc7dbff8f14d26015c91d9229f6eac0") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "faces" "frames") (:url . "http://github.com/rolandwalker/dynamic-fonts"))])
- (dynamic-graphs . [(20210908 2010) ((emacs (26 1))) "Manipulation with graphviz graphs" single ((:commit . "64ca58dffecdecb636f7fe61c0c86e9c3c64d4dd") (:authors ("Tomas Zellerin" . "tomas@zellerin.cz")) (:maintainers ("Tomas Zellerin" . "tomas@zellerin.cz")) (:maintainer "Tomas Zellerin" . "tomas@zellerin.cz") (:keywords "tools") (:url . "https://github.com/zellerin/dynamic-graphs"))])
- (dynamic-ruler . [(20160602 808) nil "Displays a dynamic ruler at point." single ((:commit . "c9c0de6fe5721f06b50e01d9b4684b519c71b367") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com") (:keywords "ruler" "tools" "convenience") (:url . "http://rocher.github.io/dynamic-ruler"))])
- (dynamic-spaces . [(20171027 1851) nil "When editing, don't move text separated by spaces" single ((:commit . "97ae8480c257ba573ca3d06dbf602f9b23c41d38") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "convenience") (:url . "https://github.com/Lindydancer/dynamic-spaces"))])
- (dynaring . [(20210924 2026) ((emacs (25 1))) "A dynamically sized ring structure" single ((:commit . "76142cf100d9e611024638a761e62bd82af156cd") (:authors ("Mike Mattie" . "codermattie@gmail.com") ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Sid Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Sid Kasivajhula" . "sid@countvajhula.com") (:url . "https://github.com/countvajhula/dynaring"))])
- (dyncloze . [(20210712 145) ((emacs (25 1)) (dash (2 18))) "Language alternatives self-testing" tar ((:commit . "aafc5adc25c7f714b619109bccf92e475d6c84ef") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainers ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") (:url . "https://github.com/ahyatt/emacs-dyncloze"))])
- (e2ansi . [(20190517 1902) ((face-explorer (0 0 4))) "Syntax highlighting support for `less', powered by Emacs." tar ((:commit . "6e1bb4e4e27885d1786db08b091cfa13b184fb54") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces" "languages") (:url . "https://github.com/Lindydancer/e2ansi"))])
- (e2wm . [(20170215 36) ((window-layout (1 4))) "simple window manager for emacs" tar ((:commit . "4353d3394c77a49f8f0291c239858c8c5e877549") (:authors ("SAKURAI Masashi <m.sakurai atmark kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai atmark kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai atmark kiwanami.net>") (:keywords "tools" "window manager"))])
- (e2wm-R . [(20151230 926) ((e2wm (1 3)) (inlineR (1 0)) (ess (15 3))) "some e2wm plugin and perspective for GNU R" single ((:commit . "4350601ee1a96bf89777b3f09f1b79b88e2e6e4d") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience" "e2wm") (:url . "https://github.com/myuhe/e2wm-R.el"))])
- (e2wm-bookmark . [(20151123 521) ((e2wm (1 2))) "Bookmark plugin for e2wm.el" single ((:commit . "bad816b6d8049984d69bcd277b7d325fb84d55eb") (:authors ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainers ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainer "Yuhei Maeda <yuhei.maeda_at_gmail.com>") (:keywords "convenience"))])
- (e2wm-direx . [(20200805 1414) ((e2wm (1 2)) (direx (0 1 -3))) "Plugin of e2wm.el for direx.el" single ((:commit . "5672bc44d8e5cea6bc3b84c3b58e522050ffae0e") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "tools" "window manager" "convenience") (:url . "https://github.com/aki2o/e2wm-direx"))])
- (e2wm-pkgex4pl . [(20140525 2211) ((e2wm (1 2)) (plsense-direx (0 2 0))) "Plugin of e2wm.el for package explorer of Perl" single ((:commit . "7ea994450727190c4f3cb46cb429ba41b692ecc0") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "tools" "window manager" "perl") (:url . "https://github.com/aki2o/e2wm-pkgex4pl"))])
- (e2wm-svg-clock . [(20150106 1306) ((e2wm (20130225 1602)) (svg-clock (0 4))) "e2wm plugin for svg-clock" single ((:commit . "d425925e3afffcbe2ff74edc80b714e4319d4c94") (:authors ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainers ("Yuhei Maeda")) (:maintainer "Yuhei Maeda") (:keywords "convenience" "e2wm") (:url . "https://github.com/myuhe/e2wm-svg-clock.el"))])
- (e2wm-sww . [(20200805 1339) ((e2wm (1 2))) "Plugin of e2wm.el to switch plugin quickly" single ((:commit . "8926d0c70be05c7b4ef821e22e411e8813973687") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "tools" "window manager") (:url . "https://github.com/aki2o/e2wm-sww"))])
- (e2wm-term . [(20200322 729) ((e2wm (1 2)) (log4e (0 2 0)) (yaxception (0 3 2))) "Perspective of e2wm.el for work in terminal" single ((:commit . "74362d6271e736272df32ea807c5a22e4df54a50") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "tools" "window manager") (:url . "https://github.com/aki2o/e2wm-term"))])
- (eacl . [(20220526 1434) ((emacs (25 1))) "Auto-complete lines by grepping project" single ((:commit . "4fe2cafbfeb73d806ebea8801c3522ff2886f30b") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "abbrev" "convenience" "matching") (:url . "http://github.com/redguardtoo/eacl"))])
- (earthfile-mode . [(20230302 1709) ((emacs (26))) "Major mode for editing Earthly file" single ((:commit . "a242a4d68ebefce81879823c54155e0a04d3ea4a") (:authors ("Thanabodee Charoenpiriyakij" . "wingyminus@gmail.com")) (:maintainers ("Thanabodee Charoenpiriyakij" . "wingyminus@gmail.com")) (:maintainer "Thanabodee Charoenpiriyakij" . "wingyminus@gmail.com") (:url . "https://github.com/earthly/earthly-mode"))])
- (easy-after-load . [(20170817 1231) nil "eval-after-load for all files in a directory" single ((:commit . "29e20145da49ac9ea40463c552130777408040de") (:authors ("Kyle Hargraves")) (:maintainers ("Kyle Hargraves")) (:maintainer "Kyle Hargraves") (:url . "https://github.com/pd/easy-after-load"))])
- (easy-escape . [(20210917 1254) nil "Improve readability of escape characters in regular expressions" single ((:commit . "938497a21e65ba6b3ff8ec90e93a6d0ab18dc9b4") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "convenience" "lisp" "tools") (:url . "https://github.com/cpitclaudel/easy-escape"))])
- (easy-hugo . [(20230314 2338) ((emacs (25 1)) (popup (0 5 3)) (request (0 3 0)) (transient (0 3 6))) "Write blogs made with hugo by markdown or org-mode" tar ((:commit . "a26364acba671e2891ce3aa457103691e10e244e") (:authors ("Masashi Miyaura")) (:maintainers ("Masashi Miyaura")) (:maintainer "Masashi Miyaura") (:url . "https://github.com/masasam/emacs-easy-hugo"))])
- (easy-jekyll . [(20211217 2311) ((emacs (25 1)) (request (0 3 0))) "Major mode managing jekyll blogs" single ((:commit . "7f19af310162464956f2bc4c38c6b7e95cb20321") (:authors ("Masashi Miyaura")) (:maintainers ("Masashi Miyaura")) (:maintainer "Masashi Miyaura") (:url . "https://github.com/masasam/emacs-easy-jekyll"))])
- (easy-kill . [(20220511 557) ((emacs (25)) (cl-lib (0 5))) "kill & mark things easily" single ((:commit . "de7d66c3c864a4722a973ee9bc228a14be49ba0c") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainers ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com") (:keywords "killing" "convenience") (:url . "https://github.com/leoliu/easy-kill"))])
- (easy-kill-extras . [(20210529 945) ((easy-kill (0 9 4))) "Extra functions for easy-kill." tar ((:commit . "74e9d0fcafc38d5f24e6209671a552bc1ba5a867") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "killing" "convenience") (:url . "https://github.com/knu/easy-kill-extras.el"))])
- (easy-repeat . [(20150516 848) ((emacs (24 4))) "Repeat easily" single ((:commit . "060f0e6801c82c40c06961dc0528a00e18947a8c") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "repeat" "convenience") (:url . "https://github.com/xuchunyang/easy-repeat.el"))])
- (ebf . [(20210225 1211) ((dash (2 18 0)) (cl-lib (0 5))) "brainfuck language transpiler to Emacs Lisp" tar ((:commit . "6cbeb4d62416f4cfd5be8906667342af8ecc44a6") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/rexim/ebf"))])
- (ebib . [(20230221 2204) ((parsebib (4 0)) (emacs (26 1))) "a BibTeX database manager" tar ((:commit . "5a03e4662dccbffe63605bb8e88bfb691ebe0afa") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:keywords "text" "bibtex") (:url . "http://joostkremers.github.io/ebib/"))])
- (ebnf-mode . [(20220606 1846) ((emacs (25 1))) "Major mode for EBNF files" single ((:commit . "9bc7242557dcef797afdcb4a50c70bf153aa221d") (:authors ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainers ("Noah Peart" . "noah.v.peart@gmail.com")) (:maintainer "Noah Peart" . "noah.v.peart@gmail.com") (:url . "https://github.com/nverno/ebnf-mode"))])
- (ebuku . [(20221122 427) ((emacs (25 1))) "Interface to the buku Web bookmark manager" single ((:commit . "0c6cf404a49bd68800221446df186fffa0139325") (:authors ("Alexis <flexibeast@gmail.com>, Erik Sjöstrand <sjostrand.erik@gmail.com>, Junji Zhi [https://github.com/junjizhi], Hilton Chain" . "hako@ultrarare.space")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:keywords "bookmarks" "buku" "data" "web" "www") (:url . "https://github.com/flexibeast/ebuku"))])
- (ecb . [(20170728 1921) nil "a code browser for Emacs" tar ((:commit . "1330a44cf3c171781083b0b926ab7622f64e6e81") (:authors ("Jesper Nordenberg" . "mayhem@home.se") ("Klaus Berndl" . "klaus.berndl@sdm.de") ("Kevin A. Burton" . "burton@openprivacy.org")) (:maintainers ("Klaus Berndl" . "klaus.berndl@sdm.de")) (:maintainer "Klaus Berndl" . "klaus.berndl@sdm.de") (:keywords "browser" "code" "programming" "tools"))])
- (echo-bar . [(20230209 1350) nil "Turn the echo area into a custom status bar" single ((:commit . "03cae6d045636948d8b47979d85774e39556f9e1") (:authors ("Adam Tillou" . "qaiviq@gmail.com")) (:maintainers ("Adam Tillou" . "qaiviq@gmail.com")) (:maintainer "Adam Tillou" . "qaiviq@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/qaiviq/echo-bar.el"))])
- (eclim . [(20181108 1134) ((dash (2 11 0)) (json (1 2)) (popup (0 5 2)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (0 10 0))) "An interface to the Eclipse IDE." tar ((:commit . "23f5b294f833ce58516d7b9ae08a7792d70022a1"))])
- (eclipse-theme . [(20191113 1518) nil "Theme based on Eclipse circa 2010" single ((:commit . "dcf97865512ed450f9d5137c1a05e12edb5b7f80") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "themes") (:url . "https://github.com/abo-abo/eclipse-theme"))])
- (ecukes . [(20230220 456) ((emacs (25)) (commander (0 6 1)) (espuds (0 2 2)) (ansi (0 3 0)) (dash (2 2 0)) (s (1 8 0)) (f (0 11 0))) "Cucumber for Emacs" tar ((:commit . "6bc1feb33d44bda7a7ccf06f8748050ffa1dc23c"))])
- (edbi . [(20160225 141) ((concurrent (0 3 1)) (ctable (0 1 2)) (epc (0 1 1))) "Emacs Database Interface" tar ((:commit . "6f50aaf4bde75255221f2292c7a4ad3fa9d918c0") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "database" "epc") (:url . "https://github.com/kiwanami/emacs-edbi"))])
- (ede-compdb . [(20150920 2033) ((ede (1 2)) (semantic (2 2)) (cl-lib (0 4))) "Support for compilation database projects in EDE" single ((:commit . "23c91082270fcef24ea791b848f1604e36888ff0") (:authors ("Alastair Rankine" . "alastair@girtby.net")) (:maintainers ("Alastair Rankine" . "alastair@girtby.net")) (:maintainer "Alastair Rankine" . "alastair@girtby.net") (:keywords "development" "ninja" "build" "cedet" "ede"))])
- (ede-php-autoload . [(20180901 1255) nil "Simple EDE PHP Project" tar ((:commit . "8a4eeeaa93b8d87b65a107c4ebcbeb14528d9449") (:authors ("Steven Rémot" . "steven.remot@gmail.com") ("original code for C++ by Eric M. Ludlam" . "eric@siege-engine.com")) (:maintainers ("Steven Rémot" . "steven.remot@gmail.com")) (:maintainer "Steven Rémot" . "steven.remot@gmail.com") (:keywords "php" "project" "ede") (:url . "https://github.com/emacs-php/ede-php-autoload"))])
- (ede-php-autoload-composer-installers . [(20170221 2026) ((ede-php-autoload (1 0 0)) (f (0 19 0)) (s (1 7 0))) "Composer installers support for ede-php-autoload" single ((:commit . "3e2fde975a06757b363e235c67e6341ebe668f60") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainers ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk") (:keywords "programming" "php") (:url . "https://github.com/xendk/ede-php-autoload-composer-installers"))])
- (ede-php-autoload-drupal . [(20170316 2158) ((ede-php-autoload (1 0 0)) (f (0 19 0)) (s (1 7 0))) "Drupal support for ede-php-autoload" single ((:commit . "54a04241d94fabc4f4d16ae4dc8ba4f0c6e3b435") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainers ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk") (:keywords "programming" "php" "drupal"))])
- (edebug-inline-result . [(20220820 2240) ((emacs (25 1))) "Show Edebug result inline" single ((:commit . "90e401ae3e7b3c85da8b24af940fd97f5e744625") (:keywords "extensions" "lisp" "tools") (:url . "https://repo.or.cz/edebug-inline-result.git"))])
- (edebug-x . [(20130616 625) nil "Extensions for Edebug" single ((:commit . "a2c2c42553d3bcbd5ac11898554865acbed1bc46") (:authors ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainers ("Scott Barnett" . "scott.n.barnett@gmail.com")) (:maintainer "Scott Barnett" . "scott.n.barnett@gmail.com") (:keywords "extensions") (:url . "https://github.com/ScottyB/edebug-x"))])
- (edit-as-format . [(20220221 1312) ((emacs (26 1)) (edit-indirect (0 1 5))) "Edit document as other format" tar ((:commit . "59c6f439683846d994a7a2110b9b00cc16c08c40") (:authors ("Xiaobing Jing" . "jingxiaobing@gmail.com")) (:maintainers ("Xiaobing Jing" . "jingxiaobing@gmail.com")) (:maintainer "Xiaobing Jing" . "jingxiaobing@gmail.com") (:keywords "files" "outlines" "convenience") (:url . "https://github.com/etern/edit-as-format"))])
- (edit-at-point . [(20191013 1218) nil "edit(copy,cut..) current things(word,symbol..) under cursor" single ((:commit . "28c85a65c9c61f2aff50bc5e93f61cde26a5d9c0") (:authors (nil . "<e.enoson@gmail.com>")) (:maintainers (nil . "<e.enoson@gmail.com>")) (:maintainer nil . "<e.enoson@gmail.com>") (:url . "http://github.com/enoson/edit-at-point.el"))])
- (edit-chrome-textarea . [(20200324 1513) ((emacs (25 1)) (websocket (1 4))) "Edit Chrome Textarea" single ((:commit . "302659e92b7ef88824691905df3f926766f64729") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "tools") (:url . "https://github.com/xuchunyang/edit-chrome-textarea.el"))])
- (edit-color-stamp . [(20130529 1733) ((es-lib (0 2)) (cl-lib (1 0))) "Edit a hex color stamp, using a QT or the internal color picker" tar ((:commit . "32dc1ca5bcf3dcf83fad5e39b55dc5b77becb3d3") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/edit-color-stamp"))])
- (edit-indirect . [(20220511 1124) ((emacs (24 3))) "Edit regions in separate buffers" single ((:commit . "f80f63822ffae78de38dbe72cacaeb1aaa96c732") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/edit-indirect"))])
- (edit-indirect-region-latex . [(20161129 645) ((emacs (24 3)) (ht (2 2)) (edit-indirect (0 1 4))) "Edit LaTeX regions in separate buffers, e.g. for English grammar checks" single ((:commit . "05043f2c0c9838947d3ca4b51b695deb7c47612e") (:authors ("Hirotaka Niitsuma" . "hirotaka.niitsuma@gmail.com")) (:maintainers ("Hirotaka Niitsuma" . "hirotaka.niitsuma@gmail.com")) (:maintainer "Hirotaka Niitsuma" . "hirotaka.niitsuma@gmail.com") (:url . "https://github.com/niitsuma/edit-indirect-region-latex"))])
- (edit-list . [(20100930 1443) nil "edit a single list" single ((:commit . "f460d3f9e208a4e606fe6ded307f1b011916ca71") (:authors ("Michael Olson" . "mwolson@gnu.org")) (:maintainers ("Michael Olson" . "mwolson@gnu.org")) (:maintainer "Michael Olson" . "mwolson@gnu.org") (:url . "http://mwolson.org/static/dist/elisp/edit-list.el"))])
- (edit-server . [(20220908 1014) nil "server that responds to edit requests from Chrome" single ((:commit . "3ce09c6eb2919d56ef052b1584bba6abb12f7e99") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/emacs_chrome"))])
- (edit-server-htmlize . [(20130329 2248) ((edit-server (1 9))) "(de)HTMLization hooks for edit-server.el" single ((:commit . "e7f8dadfabe869c77ca241cd6fbd4c52bd908392") (:authors ("Roland McGrath" . "roland@hack.frob.com")) (:maintainers ("Roland McGrath" . "roland@hack.frob.com")) (:maintainer "Roland McGrath" . "roland@hack.frob.com") (:url . "https://github.com/frobtech/edit-server-htmlize"))])
- (editorconfig . [(20230426 1925) ((emacs (26 1)) (nadvice (0 3))) "EditorConfig Emacs Plugin" tar ((:commit . "ed3defaad8d83f77cfee581cfaa19aaea016664d") (:authors ("EditorConfig Team" . "editorconfig@googlegroups.com")) (:maintainers ("EditorConfig Team" . "editorconfig@googlegroups.com")) (:maintainer "EditorConfig Team" . "editorconfig@googlegroups.com") (:keywords "convenience" "editorconfig") (:url . "https://github.com/editorconfig/editorconfig-emacs#readme"))])
- (editorconfig-charset-extras . [(20180223 457) ((editorconfig (0 6 0))) "Extra EditorConfig Charset Support" single ((:commit . "ddf60923c6f4841cb593b2ea04c9c710a01d262f") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com") (:keywords "tools") (:url . "https://github.com/10sr/editorconfig-charset-extras-el"))])
- (editorconfig-custom-majormode . [(20180816 244) ((editorconfig (0 6 0))) "Decide major-mode and mmm-mode from EditorConfig" single ((:commit . "13ad1c83f847bedd4b3a19f9df7fd925853b19de") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainers ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:keywords "editorconfig" "util") (:url . "https://github.com/10sr/editorconfig-custom-majormode-el"))])
- (editorconfig-domain-specific . [(20180505 924) ((cl-lib (0 5)) (editorconfig (0 6 0))) "Apply brace style and other \"domain-specific\" EditorConfig properties" single ((:commit . "e9824160fb2e466afa755240ee3ab7cc5657fb04") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "editorconfig" "util") (:url . "https://github.com/lassik/editorconfig-emacs-domain-specific"))])
- (editorconfig-generate . [(20190513 433) ((emacs (24))) "Generate .editorconfig" single ((:commit . "47a31f928f46d2a0188db8e2cffa5d6354a81573") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com") (:keywords "tools") (:url . "https://github.com/10sr/editorconfig-generate-el"))])
- (edn . [(20160215 1219) ((cl-lib (0 3)) (emacs (24 1)) (peg (0 6))) "Support for reading and writing the edn data format from elisp" single ((:commit . "be9e32d1b49e35247b263b0243df7cfdc8d413ab") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainers ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com") (:keywords "edn" "clojure") (:url . "https://www.github.com/expez/edn.el"))])
- (ednc . [(20221201 1624) ((emacs (26 1))) "Emacs Desktop Notification Center" single ((:commit . "bf17d22fa9bd1711709d84bb75ad49f746bfc9b7") (:authors ("Simon Nicolussi" . "sinic@sinic.name")) (:maintainers ("Simon Nicolussi" . "sinic@sinic.name")) (:maintainer "Simon Nicolussi" . "sinic@sinic.name") (:keywords "unix") (:url . "https://github.com/sinic/ednc"))])
- (edts . [(20220521 1345) ((auto-complete (20201213 1255)) (auto-highlight-symbol (20211106 638)) (dash (20210609 1330)) (emacs (24 3)) (erlang (20210315 1640)) (f (20191110 1357)) (popup (20210317 138)) (s (20210603 736))) "Erlang Development Tool Suite" tar ((:commit . "77e0dc91f603e8bedebfdccc90352ebbfd217c99"))])
- (edwina . [(20221206 1610) ((emacs (25))) "Dynamic window manager" tar ((:commit . "f95c31b1de95df7e83338a5d4daf3363df325862") (:authors ("Alex Griffin" . "a@ajgrf.com")) (:maintainers ("Alex Griffin" . "a@ajgrf.com")) (:maintainer "Alex Griffin" . "a@ajgrf.com") (:keywords "convenience") (:url . "https://gitlab.com/ajgrf/edwina"))])
- (efar . [(20230216 1213) ((emacs (26 1))) "FAR-like file manager" single ((:commit . "78618a6cd9fe7d46c3728db3589d1fe50f7c1c6b") (:authors ("\"Vladimir Suntsov\"" . "vladimir@suntsov.online")) (:maintainers (nil . "vladimir@suntsov.online")) (:maintainer nil . "vladimir@suntsov.online") (:keywords "files") (:url . "https://github.com/suntsov/efar"))])
- (efire . [(20151009 2031) ((circe (1 2))) "Use campfire from Emacs" single ((:commit . "d38dd6dd7974b7cb11bff6fd84846fd01163211a") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/capitaomorte/efire"))])
- (eg . [(20170830 815) ((cl-lib (0 5)) (emacs (24 3))) "Norton Guide reader" single ((:commit . "1c7f1613d2aaae728ef540305f6ba030616f86bd") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "docs") (:url . "https://github.com/davep/eg.el"))])
- (egalgo . [(20211105 1657) ((emacs (24 3))) "Genetic algorithm" single ((:commit . "a56a86591351d53ca2add7c651757bfb0064fb22") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "data") (:url . "https://github.com/ROCKTAKEY/egalgo"))])
- (egg . [(20181126 500) nil "Emacs Got Git - Emacs interface to Git" tar ((:commit . "00e768a78ac3d25f457eed667d02cac568480bf9") (:authors ("Bogolisk" . "bogolisk@gmail.com")) (:maintainers ("Bogolisk" . "bogolisk@gmail.com")) (:maintainer "Bogolisk" . "bogolisk@gmail.com") (:keywords "git" "version control" "release management"))])
- (egg-timer . [(20200217 1650) ((emacs (25 1))) "Commonly used intervals for setting timers while working" single ((:commit . "53a9e9d20453ea4b0198ca413b8b5069a0b30b38") (:authors ("William Carroll" . "wpcarro@gmail.com")) (:maintainers ("William Carroll" . "wpcarro@gmail.com")) (:maintainer "William Carroll" . "wpcarro@gmail.com") (:url . "https://github.com/wpcarro/egg-timer.el"))])
- (egison-mode . [(20211218 1115) nil "Egison editing mode" tar ((:commit . "dbb395b41a4e4eb69f3f045cbfbe95a1575ac45b") (:authors ("Satoshi Egi" . "egisatoshi@gmail.com")) (:maintainers ("Satoshi Egi" . "egisatoshi@gmail.com")) (:maintainer "Satoshi Egi" . "egisatoshi@gmail.com") (:url . "https://github.com/egisatoshi/egison3/blob/master/elisp/egison-mode.el"))])
- (eglot-fsharp . [(20230324 1942) ((emacs (27 1)) (eglot (1 4)) (fsharp-mode (1 10)) (jsonrpc (1 0 14))) "fsharp-mode eglot integration" single ((:commit . "0ce19f272949f9ed335ab7a9fd9454c01f07eb8f") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info") (:keywords "languages") (:url . "https://github.com/fsharp/emacs-fsharp-mode"))])
- (eglot-java . [(20230213 218) ((emacs (26 1)) (eglot (1 0)) (jsonrpc (1 0 0))) "Java extension for the eglot LSP client" single ((:commit . "ff0f9515d78f94b8dfe158bf9a2c4f52216504c0") (:authors ("Yves Zoundi" . "yves_zoundi@hotmail.com")) (:maintainers ("Yves Zoundi" . "yves_zoundi@hotmail.com")) (:maintainer "Yves Zoundi" . "yves_zoundi@hotmail.com") (:keywords "convenience" "languages") (:url . "https://github.com/yveszoundi/eglot-java"))])
- (eglot-jl . [(20230117 1243) ((emacs (25 1)) (eglot (1 4)) (project (0 8 1)) (cl-generic (1 0))) "Julia support for eglot" tar ((:commit . "2e04597223553a369dd5b6520b6365b41e6ea508") (:authors ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz")) (:maintainers ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz")) (:maintainer "Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz") (:keywords "convenience" "languages") (:url . "https://github.com/non-Jedi/eglot-jl"))])
- (ego . [(20200803 1101) ((emacs (24 5)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0))) "a static site generator based on org mode, forked from org-page." tar ((:commit . "211c4cb2af2582849d9df984fb2346deecaf79be") (:authors ("Feng Shu <tumashu AT 163.com>") ("Kelvin Hu <ini DOT kelvin AT gmail DOT com>") ("Kuangdash <kuangdash AT 163.com>")) (:maintainer "Feng Shu <tumashu AT 163.com>") (:keywords "org-mode" "convenience" "beautify") (:url . "https://github.com/emacs-china/EGO"))])
- (eide . [(20221204 2104) nil "IDE interface" tar ((:commit . "ccddbb7b893c9b2439c19832aeb2c4d7dd8f5d90") (:authors ("Cédric Marie" . "cedric@hjuvi.fr.eu.org")) (:maintainer "Cédric Marie" . "cedric@hjuvi.fr.eu.org") (:url . "https://software.hjuvi.fr.eu.org/eide/"))])
- (eimp . [(20120826 2039) nil "Emacs Image Manipulation Package" single ((:commit . "2e7536fe6d8f7faf1bad7a8ae37faba0162c3b4f") (:authors ("Matthew P. Hodges" . "MPHodges@member.fsf.org")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "files" "frames"))])
- (ein . [(20230426 1857) ((emacs (25)) (websocket (1 12)) (anaphora (1 0 4)) (request (0 3 3)) (deferred (0 5)) (polymode (0 2 2)) (dash (2 13 0)) (with-editor (0 -1))) "Emacs IPython Notebook" tar ((:commit . "87f444838f076b6926ff02ffab3fd5b0f67af2bc") (:keywords "jupyter" "literate programming" "reproducible research") (:url . "https://github.com/dickmao/emacs-ipython-notebook"))])
- (eink-theme . [(20190219 858) nil "E Ink color theme" single ((:commit . "326b07523dcb076d6209cdbc7fdbb73df296dbdb") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:url . "http://github.com/maio/eink-emacs"))])
- (ejc-sql . [(20230228 102) ((emacs (26 3)) (clomacs (0 0 5)) (dash (2 16 0)) (spinner (1 7 3))) "Emacs SQL client uses Clojure JDBC." tar ((:commit . "29308faad38e9cabd98fb5a8450df15db1e4a4cb") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:keywords "sql" "jdbc") (:url . "https://github.com/kostafey/ejc-sql"))])
- (ejson-mode . [(20190720 2138) ((emacs (25))) "Major mode for editing ejson files." single ((:commit . "9630dfac9549779711dbe89e621f516bb4b3a354") (:authors ("Dante Catalfamo")) (:maintainers ("Dante Catalfamo")) (:maintainer "Dante Catalfamo") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/dantecatalfamo/ejson-mode"))])
- (ekg . [(20230413 32) ((triples (0 2 5)) (emacs (28 1))) "A system for recording and linking information" tar ((:commit . "4d86dac060439f5197dbfcaebd18a227bdce5e1d") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainers ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") (:keywords "outlines" "hypermedia") (:url . "https://github.com/ahyatt/ekg"))])
- (el-autoyas . [(20120918 1317) nil "Automatically create Emacs-Lisp Yasnippets" tar ((:commit . "bde0251ecb504f585dfa27c205c8e312655310cc") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "emacs" "lisp" "mode" "yasnippet") (:url . "https://github.com/mlf176f2/el-autoyas.el"))])
- (el-fetch . [(20230210 1311) ((emacs (25 1))) "Show system information in Neofetch-like style (eg CPU, RAM)" single ((:commit . "0142f58f075ea39aa6cc7ed35dd599afc4b6b450") (:authors ("Maciej Barć" . "xgqt@riseup.net")) (:maintainers ("Maciej Barć" . "xgqt@riseup.net")) (:maintainer "Maciej Barć" . "xgqt@riseup.net") (:url . "https://gitlab.com/xgqt/emacs-el-fetch"))])
- (el-fly-indent-mode . [(20180422 243) ((emacs (25))) "Indent Emacs Lisp on the fly" single ((:commit . "1dd4b907ff4d9581c18b4e38e8719e83ba0dace1") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainers ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com") (:keywords "lisp" "languages") (:url . "https://github.com/jiahaowork/el-fly-indent-mode.el"))])
- (el-get . [(20230101 1231) nil "Manage the external elisp bits and pieces you depend upon" tar ((:commit . "3969e02b2755d11224b80d2db9d2b8fc5ae73711") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:keywords "emacs" "package" "elisp" "install" "elpa" "git" "git-svn" "bzr" "cvs" "svn" "darcs" "hg" "apt-get" "fink" "pacman" "http" "http-tar" "emacswiki") (:url . "http://www.emacswiki.org/emacs/el-get"))])
- (el-init . [(20150728 920) ((emacs (24)) (cl-lib (0 5)) (anaphora (1 0 0))) "A loader inspired by init-loader" single ((:commit . "25fd21d820bca1cf576b8f70c8d5a3bc76792597") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/el-init"))])
- (el-init-viewer . [(20150303 828) ((emacs (24)) (cl-lib (0 5)) (ctable (0 1 2)) (dash (2 10 0)) (anaphora (1 0 0)) (el-init (0 1 4))) "Record viewer for el-init" single ((:commit . "c40417db7808c8b8c9b2f196a69de5da7eee84a2") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/el-init-viewer"))])
- (el-mock . [(20220625 1949) nil "Tiny Mock and Stub framework in Emacs Lisp" single ((:commit . "6cfbc9de8f1927295dca6864907fe4156bd71910") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "lisp" "testing" "unittest") (:url . "http://github.com/rejeep/el-mock.el"))])
- (el-patch . [(20230409 2156) ((emacs (26))) "Future-proof your Elisp" tar ((:commit . "7dfbd374f9de256de03516d777146e7f8aba1cef") (:authors ("Radian LLC" . "contact+el-patch@radian.codes")) (:maintainers ("Radian LLC" . "contact+el-patch@radian.codes")) (:maintainer "Radian LLC" . "contact+el-patch@radian.codes") (:keywords "extensions") (:url . "https://github.com/radian-software/el-patch"))])
- (el-secretario . [(20220426 1905) ((emacs (27 1)) (org-ql (0 6 -1)) (hercules (0 3))) "Unify all your inboxes with the Emacs secretary" tar ((:commit . "575396ca689065188ad0f90c379d9bcf7ff6fc0b") (:authors ("Leo Okawa Ericson <http://github/Zetagon>")) (:maintainers ("Leo" . "github@relevant-information.com")) (:maintainer "Leo" . "github@relevant-information.com") (:keywords "convenience") (:url . "https://git.sr.ht/~zetagon/el-secretario"))])
- (el-secretario-elfeed . [(20211214 1851) ((emacs (27 1)) (el-secretario (0 0 1)) (elfeed (3 4 1))) "Add notmuch email inboxes to el-secretario" single ((:commit . "2a5290ad57d9800d4b56896a768e37631bef06b0") (:authors ("Leo Okawa Ericson <http://github/Zetagon>")) (:maintainers ("Leo" . "github@relevant-information.com")) (:maintainer "Leo" . "github@relevant-information.com") (:keywords "convenience") (:url . "https://git.sr.ht/~zetagon/el-secretario"))])
- (el-secretario-mu4e . [(20220422 2006) ((emacs (27 1)) (org-ql (0 6 -1)) (el-secretario (0 0 1))) "Add mu4e inboxes to el-secretario" single ((:commit . "78a811f02c7104a39b908f9e4c8436abde4b9620") (:authors ("Leo Okawa Ericson <http://github/Zetagon>")) (:maintainers ("Leo" . "github@relevant-information.com")) (:maintainer "Leo" . "github@relevant-information.com") (:keywords "convenience" "mail") (:url . "https://git.sr.ht/~zetagon/el-secretario"))])
- (el-secretario-notmuch . [(20220428 1058) ((emacs (27 1)) (el-secretario (0 0 1)) (notmuch (0 3 1))) "Add notmuch inboxes to el-secretario" single ((:commit . "c4e21ac5a9be2b2ea6cf7c153a6fae48c78a61b9") (:authors ("Leo Okawa Ericson <http://github/Zetagon>")) (:maintainers ("Leo" . "github@relevant-information.com")) (:maintainer "Leo" . "github@relevant-information.com") (:keywords "convenience" "mail") (:url . "https://git.sr.ht/~zetagon/el-secretario"))])
- (el-secretario-org . [(20220411 1419) ((emacs (27 1)) (org-ql (0 6 -1)) (dash (2 18 1)) (el-secretario (0 0 1))) "Create inboxes out of org-mode files for el-secretario" single ((:commit . "fe6fc69d298368ae24a6aac27a325ee03ad9e64c") (:authors ("Leo Okawa Ericson <http://github/Zetagon>")) (:maintainers ("Leo" . "github@relevant-information.com")) (:maintainer "Leo" . "github@relevant-information.com") (:keywords "convenience") (:url . "https://git.sr.ht/~zetagon/el-secretario"))])
- (el-spec . [(20121018 704) nil "ruby's rspec like syntax test frame work" single ((:commit . "1dbc465401d4aea5560318c4f13ff30920a0718d") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com") (:keywords "test") (:url . "https://github.com/uk-ar/el-spec"))])
- (el-spice . [(20201013 1729) nil "Extra spice for emacs lisp programming" tar ((:commit . "a1adde201ee10881b522e67aa2c605378943a28d") (:authors ("Vedang Manerikar" . "vedang.manerikar@gmail.com")) (:maintainers ("Vedang Manerikar" . "vedang.manerikar@gmail.com")) (:maintainer "Vedang Manerikar" . "vedang.manerikar@gmail.com") (:keywords "languages" "extensions") (:url . "https://github.com/vedang/el-spice"))])
- (el-sprunge . [(20200312 1212) ((web-server (20140105 2246)) (htmlize (20130207 1202)) (emacs (24 3))) "Command line paste server with Emacs highlighting" tar ((:commit . "e4365ea0bdf60969817619376bdcc98003fec33d") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") (:keywords "http" "html" "server" "sprunge" "paste"))])
- (el-spy . [(20131226 2008) nil "Mocking framework for Emacs lisp. It also support spy, proxy." single ((:commit . "b1dead9d1877660856ada22d906ac4e54695aec7") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com") (:keywords "test") (:url . "https://github.com/uk-ar/el-spy"))])
- (el2markdown . [(20170630 1858) nil "Convert commentary section of elisp files to markdown." single ((:commit . "368d99313683cd943c99feaffca356be60bdb636") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/el2markdown"))])
- (el2org . [(20200408 146) ((emacs (25 1))) "Convert elisp file to org file" single ((:commit . "7db77fdd73f378d4e60e34c11bbdf00677adc32c") (:authors ("Feng Shu " . "tumashu@163.com")) (:maintainers ("Feng Shu " . "tumashu@163.com")) (:maintainer "Feng Shu " . "tumashu@163.com") (:keywords "convenience") (:url . "https://github.com/tumashu/el2org"))])
- (elbank . [(20180316 1343) ((emacs (25)) (seq (2 16))) "Personal finances reporting application" tar ((:commit . "6dbd21e31fdf7cf62491f6d24b8198d4f91a031b") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:keywords "tools" "personal-finances"))])
- (elcontext . [(20210109 1238) ((ht (2 3)) (hydra (0 14 0)) (emacs (24 3)) (f (0 20 0)) (osx-location (0 4)) (uuidgen (0 3))) "Create context specific actions" tar ((:commit . "2efd3dd8c5176c4f071bb048be6cb069b05d6e9e") (:authors ("Thomas Sojka")) (:maintainers ("Thomas Sojka")) (:maintainer "Thomas Sojka") (:keywords "calendar" "convenience") (:url . "https://github.com/rollacaster/elcontext"))])
- (elcord . [(20230428 1334) ((emacs (25 1))) "Allows you to integrate Rich Presence from Discord" tar ((:commit . "78a1a900471a9c6ce938506f5fa7de93ba7df8eb") (:authors ("heatingdevice") ("Wilfredo Velázquez-Rodríguez" . "zulu.inuoe@gmail.com")) (:maintainers ("heatingdevice")) (:maintainer "heatingdevice") (:keywords "games") (:url . "https://github.com/Mstrodl/elcord"))])
- (elcouch . [(20201108 955) ((emacs (25 1)) (json-mode (1 0 0)) (libelcouch (0 11 0)) (navigel (0 3 0))) "View and manipulate CouchDB databases" single ((:commit . "3d162dda14411349e12509029d2b621c5d1edea2") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "data" "tools") (:url . "https://gitlab.petton.fr/DamienCassou/elcouch"))])
- (eldev . [(20230502 1936) ((emacs (24 4))) "Elisp development tool" tar ((:commit . "9fefb32f0cfd7c4d3fb5cfed8d777e12218271c3") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:keywords "maint" "tools") (:url . "https://github.com/doublep/eldev"))])
- (eldoc-box . [(20230502 600) ((emacs (27 1))) "Display documentation in childframe" single ((:commit . "24c216ea3a2d369b814047271a8edf0c7c404b39") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainers ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com") (:url . "https://github.com/casouri/eldoc-box"))])
- (eldoc-cmake . [(20190419 2244) ((emacs (25 1))) "Eldoc support for CMake" single ((:commit . "4453c03b5c95ff32842f13db2fc317fb0fe2f79e") (:authors ("Kirill Ignatiev")) (:maintainers ("Kirill Ignatiev")) (:maintainer "Kirill Ignatiev") (:url . "https://github.com/ikirill/eldoc-cmake"))])
- (eldoc-eval . [(20220106 1951) nil "Enable eldoc support when minibuffer is in use." single ((:commit . "e91800503c90cb75dc70abe42f1d6ae499346cc1") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net"))])
- (eldoc-overlay . [(20230406 959) ((emacs (24 4)) (inline-docs (1 0 1)) (quick-peek (1 0))) "Display eldoc with contextual documentation overlay" single ((:commit . "14a9e141918c2e18a107920e8631e622c580b3ef") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "docs" "eldoc" "overlay") (:url . "https://repo.or.cz/eldoc-overlay.git"))])
- (eldoc-stan . [(20211129 2051) ((emacs (25)) (stan-mode (10 3 0))) "Eldoc support for stan functions" tar ((:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:authors ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu") (:keywords "help" "tools") (:url . "https://github.com/stan-dev/stan-mode/tree/master/eldoc-stan"))])
- (eldoc-toml . [(20211026 1122) ((emacs (24 4))) "TOML table name at point for ElDoc" single ((:commit . "61106be3c3f3a5b293c3f285eec8c6f400142b6d") (:authors ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainers ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainer "Maor Kadosh" . "git@avocadosh.xyz") (:keywords "data") (:url . "https://github.com/it-is-wednesday/eldoc-toml"))])
- (electric-case . [(20150417 1112) nil "insert camelCase, snake_case words without \"Shift\"ing" single ((:commit . "984b6a4c6c4cdcefeecb59e941f5f184cc1dedff") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (electric-cursor . [(20221221 438) ((emacs (25 1))) "Change cursor automatically depending on mode" single ((:commit . "bc09aa8c5d3cc32e3e6452cbf8018fc1ea772b73") (:authors ("Case Duckworth" . "acdw@acdw.net")) (:maintainers ("Case Duckworth" . "acdw@acdw.net")) (:maintainer "Case Duckworth" . "acdw@acdw.net") (:keywords "terminals" "frames") (:url . "https://github.com/duckwork/electric-cursor"))])
- (electric-operator . [(20220814 1439) ((dash (2 10 0)) (emacs (24 4))) "Automatically add spaces around operators" tar ((:commit . "281abdae033559fa9a8878ed1dd05a7ade118cfd") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:keywords "electric") (:url . "https://github.com/davidshepherd7/electric-operator"))])
- (electric-ospl . [(20230325 1518) ((emacs (26 1))) "Electric OSPL Mode" single ((:commit . "55fa59592d0d3e929bd8646ea691a592965a167a") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "convenience" "text") (:url . "https://git.sr.ht/~swflint/electric-ospl-mode"))])
- (electric-spacing . [(20220220 1540) nil "Insert operators with surrounding spaces smartly" tar ((:commit . "c37b2502512dd49a8311d7c34e9bfd1af3d4dbcd") (:authors ("William Xu" . "william.xwl@gmail.com")) (:maintainers ("William Xu" . "william.xwl@gmail.com")) (:maintainer "William Xu" . "william.xwl@gmail.com"))])
- (elegant-agenda-mode . [(20210115 353) ((emacs (26 1))) "An elegant theme for your org-agenda" single ((:commit . "5cbc688584ba103ea3be7d7b30e5d94e52f59eb6") (:authors ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainers ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainer "Justin Barclay" . "justinbarclay@gmail.com") (:keywords "faces") (:url . "https://github.com/justinbarclay/elegant-agenda-mode"))])
- (elein . [(20120120 1116) nil "running leiningen commands from emacs" single ((:commit . "d4c0c0491dbb7c90e953d7a16172107c37103605") (:authors ("R.W. van 't Veer")) (:maintainers ("R.W. van 't Veer")) (:maintainer "R.W. van 't Veer") (:keywords "tools" "processes") (:url . "https://github.com/remvee/elein"))])
- (elescope . [(20210312 1147) ((emacs (25 1)) (ivy (0 10)) (request (0 3)) (seq (2 0))) "Seach and clone projects from the minibuffer" single ((:commit . "36566c8c1f5f993f67eadc85d18539ff375c0f98") (:authors ("Stéphane Maniaci" . "stephane.maniaci@gmail.com")) (:maintainers ("Stéphane Maniaci" . "stephane.maniaci@gmail.com")) (:maintainer "Stéphane Maniaci" . "stephane.maniaci@gmail.com") (:keywords "vc") (:url . "https://github.com/freesteph/elescope"))])
- (elf-mode . [(20161009 748) ((emacs (24 3))) "Show symbols in binaries" single ((:commit . "cd280d683cd3341d8bb31af6db7e3b74a133e6ab") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/elf-mode"))])
- (elfeed . [(20210822 2129) ((emacs (24 3))) "an Emacs Atom/RSS feed reader" tar ((:commit . "162d7d545ed41c27967d108c04aa31f5a61c8e16") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/elfeed"))])
- (elfeed-autotag . [(20210607 637) ((emacs (27 1)) (elfeed (3 4 1)) (elfeed-protocol (0 8 0)) (org (8 2 7)) (dash (2 10 0)) (s (1 9 0))) "Easy auto-tagging for elfeed" single ((:commit . "bc62c37fb79b720ff8b6d67f04f2268841306dcd") (:authors ("Paul Elms <https://paul.elms.pro>")) (:maintainers ("Paul Elms" . "paul@elms.pro")) (:maintainer "Paul Elms" . "paul@elms.pro") (:keywords "news") (:url . "https://github.com/paulelms/elfeed-autotag"))])
- (elfeed-dashboard . [(20210727 603) ((emacs (25 1)) (elfeed (3 3 0))) "An extensible frontend for elfeed using org-mode" single ((:commit . "b143f8453aed2053e8fc6f05cef6233797408546") (:authors ("Manoj Kumar Manikchand" . "manojm321@protonmail.com")) (:maintainers ("Manoj Kumar Manikchand" . "manojm321@protonmail.com")) (:maintainer "Manoj Kumar Manikchand" . "manojm321@protonmail.com") (:keywords "convenience") (:url . "https://github.com/Manoj321/elfeed-dashboard"))])
- (elfeed-goodies . [(20221003 1406) ((popwin (1 0 0)) (powerline (2 2)) (elfeed (2 0 0)) (cl-lib (0 5)) (link-hint (0 1))) "Elfeed goodies" tar ((:commit . "544ef42ead011d960a0ad1c1d34df5d222461a6b") (:authors ("Gergely Nagy")) (:maintainers ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://github.com/algernon/elfeed-goodies"))])
- (elfeed-org . [(20221118 852) ((elfeed (1 1 1)) (org (8 2 7)) (dash (2 10 0)) (s (1 9 0)) (cl-lib (0 5))) "Configure elfeed with one or more org-mode files" single ((:commit . "3242ec0519800a58f20480c8a6e3b3337d137084") (:authors ("Remy Honig" . "remyhonig@gmail.com")) (:maintainers ("Remy Honig" . "remyhonig@gmail.com")) (:maintainer "Remy Honig" . "remyhonig@gmail.com") (:keywords "news") (:url . "https://github.com/remyhonig/elfeed-org"))])
- (elfeed-protocol . [(20230413 443) ((emacs (24 4)) (elfeed (2 1 1)) (cl-lib (0 5))) "Provide fever/newsblur/owncloud/ttrss protocols for elfeed" tar ((:commit . "557841e122fe0dd50ec0bdd3ba4b657e16edb779") (:authors ("Xu Fasheng <fasheng[AT]fasheng.info>")) (:maintainers ("Xu Fasheng <fasheng[AT]fasheng.info>")) (:maintainer "Xu Fasheng <fasheng[AT]fasheng.info>") (:keywords "news") (:url . "https://github.com/fasheng/elfeed-protocol"))])
- (elfeed-score . [(20230506 1524) ((emacs (26 1)) (elfeed (3 3 0))) "Gnus-style scoring for Elfeed" tar ((:commit . "640ffe17730b0024e873c634a1ef83966a45a018") (:authors ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainer "Michael Herstine" . "sp1ff@pobox.com") (:keywords "news") (:url . "https://github.com/sp1ff/elfeed-score"))])
- (elfeed-summary . [(20221210 1349) ((emacs (27 1)) (magit-section (3 3 0)) (elfeed (3 4 1))) "Feed summary interface for elfeed" single ((:commit . "ccbaf85d9ea442203027e784a42b21686f3a87d8") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/elfeed-summary.el"))])
- (elfeed-tube . [(20230430 546) ((emacs (27 1)) (elfeed (3 4 1)) (aio (1 0))) "YouTube integration for Elfeed" tar ((:commit . "3ac12d76402bf192de8ae3b18997f9a52726379f") (:authors ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com") (:keywords "news" "hypermedia" "convenience") (:url . "https://github.com/karthink/elfeed-tube"))])
- (elfeed-tube-mpv . [(20230425 2330) ((emacs (27 1)) (elfeed-tube (0 10)) (mpv (0 2 0))) "Control mpv from Elfeed" single ((:commit . "3842d564f8bf53ee1ee8906dc3fcf442de8aea0a") (:authors ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthikchikmagalur@gmail.com") (:keywords "news" "hypermedia") (:url . "https://github.com/karthink/elfeed-tube"))])
- (elfeed-web . [(20210226 258) ((simple-httpd (1 5 1)) (elfeed (3 2 0)) (emacs (24 3))) "web interface to Elfeed" tar ((:commit . "0ccd59aaace34546017a1a0d7c393749747d5bc6") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/elfeed"))])
- (elforth . [(20210522 928) ((emacs (26 1))) "Do you have what it takes to hack Emacs Lisp in Forth?" single ((:commit . "2d8540434a28e7edaa04a992c3c362832b2fd61e") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "games") (:url . "https://github.com/lassik/elforth"))])
- (elgrep . [(20211221 852) ((emacs (26 2)) (async (1 5))) "Searching files for regular expressions" single ((:commit . "f8124c699b6a4abfb471269bc26afbcc8136f476") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainers ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de") (:keywords "tools" "matching" "files" "unix") (:url . "https://github.com/TobiasZawada/elgrep"))])
- (elhome . [(20161025 2042) ((initsplit (20120630))) "A framework for a \"home\" Emacs configuration" tar ((:commit . "e789e806469af3e9705f72298683c21f6c3a516d") (:authors ("Dave Abrahams" . "dave@boostpro.com")) (:maintainers ("Demyan Rogozhin" . "demyan.rogozhin@gmail.com")) (:maintainer "Demyan Rogozhin" . "demyan.rogozhin@gmail.com") (:keywords "lisp") (:url . "http://github.com/demyanrogozhin/elhome"))])
- (elisp-autofmt . [(20230307 230) ((emacs (28 1))) "Emacs lisp auto-format" tar ((:commit . "13a434ff5a4888fbadd3653f4fe892a55fb51045") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-elisp-autofmt"))])
- (elisp-def . [(20220803 1647) ((dash (2 12 0)) (f (0 19 0)) (s (1 11 0)) (emacs (24 3))) "macro-aware go-to-definition for elisp" single ((:commit . "1d2e88a232ec16bce036b49577c4d4d96035f9f7") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "lisp"))])
- (elisp-demos . [(20220903 1232) ((emacs (24 4))) "Elisp API Demos" tar ((:commit . "792be709c82101aea0585ece7429e2fdded74494") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "lisp" "docs") (:url . "https://github.com/xuchunyang/elisp-demos"))])
- (elisp-depend . [(20190325 1114) nil "Parse depend libraries of elisp file." single ((:commit . "6679da9a6be5a845bb4804224c8394a9bc62168f"))])
- (elisp-depmap . [(20220223 1131) ((emacs (26 1)) (dash (2 17 0))) "Generate an elisp dependency map in graphviz" tar ((:commit . "15909462e3f7daf445d3cecf402ee16c7e3263ed") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://gitlab.com/mtekman/elisp-depmap.el"))])
- (elisp-docstring-mode . [(20170304 1615) nil "Major mode for editing elisp docstrings." single ((:commit . "b135d95b158048927f12184e5cfb8fe01fc44713") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "languages"))])
- (elisp-format . [(20160508 952) nil "Format elisp code" single ((:commit . "9fe516d39b349070537099a01fe34e47fbded2c8") (:authors (nil . "Andy Stewart lazycat.manatee@gmail.com")) (:maintainers ("Yuki Inoue inouetakahiroki _at_ gmail.com")) (:maintainer "Yuki Inoue inouetakahiroki _at_ gmail.com") (:url . "https://github.com/Yuki-Inoue/elisp-format"))])
- (elisp-lint . [(20220419 252) ((emacs (24 4)) (dash (2 15 0)) (package-lint (0 11))) "Basic linting for Emacs Lisp" single ((:commit . "c5765abf75fd1ad22505b349ae1e6be5303426c2") (:authors ("Nikolaj Schumacher <bugs * nschum de>,")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:keywords "lisp" "maint" "tools") (:url . "http://github.com/gonewest818/elisp-lint/"))])
- (elisp-refs . [(20230419 405) ((dash (2 12 0)) (s (1 11 0))) "find callers of elisp functions or macros" single ((:commit . "bf3cca8f74065b1b31036f461e3a093b162311bd") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "lisp"))])
- (elisp-sandbox . [(20131116 1842) nil "Evaluate EmacsLisp expressions in a sandbox" single ((:commit . "ddd669266ca36d7e4ebba73eb1ab42523787e042") (:authors ("Joel McCracken <mccracken.joel@gmail.com>, D. Goel" . "deego@gnufans.org")) (:maintainers ("Joel McCracken <mccracken.joel@gmail.com>, D. Goel" . "deego@gnufans.org")) (:maintainer "Joel McCracken <mccracken.joel@gmail.com>, D. Goel" . "deego@gnufans.org") (:keywords "lisp") (:url . "https://github.com/joelmccracken/elisp-sandbox"))])
- (elisp-slime-nav . [(20210510 528) ((emacs (24 1)) (cl-lib (0 2))) "Make M-. and M-, work in elisp like they do in slime" single ((:commit . "8588d80d414aee1fafce5b9da0e913612ee0bcdd") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages" "navigation" "slime" "elisp" "emacs-lisp") (:url . "https://github.com/purcell/elisp-slime-nav"))])
- (elixir-mode . [(20221017 2044) ((emacs (25))) "Major mode for editing Elixir files" tar ((:commit . "4974ff9a83daf50f2f03dc0d6d00871296e088b0") (:keywords "languages" "elixir") (:url . "https://github.com/elixir-editors/emacs-elixir"))])
- (elixir-ts-mode . [(20230403 823) ((emacs (29)) (heex-ts-mode (1 2))) "Major mode for Elixir with tree-sitter support" single ((:commit . "6671c0ffe0e59d82b99948b08d200bd744cc9d26") (:authors ("Wilhelm H Kirschbaum")) (:maintainers ("Wilhelm H Kirschbaum")) (:maintainer "Wilhelm H Kirschbaum") (:keywords "elixir" "languages" "tree-sitter") (:url . "https://github.com/wkirschbaum/elixir-ts-mode"))])
- (elixir-yasnippets . [(20150417 1239) ((yasnippet (0 8 0))) "Yasnippets for Elixir" tar ((:commit . "980ca7626c14ef0573bec0035ec7942796062783") (:authors ("Yinghai Zhao" . "zyinghai@gmail.com")) (:maintainer "Yinghai Zhao" . "zyinghai@gmail.com") (:keywords "snippets"))])
- (ellocate . [(20200112 1931) ((emacs (25 1)) (s (1 12 0)) (f (0 20 0))) "The locate command reimplemented in Emacs Lisp" single ((:commit . "81405082f68f0577c9f176d3d4f034a7142aba59") (:authors ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainer "Sebastian WÃ¥linder" . "s.walinder@gmail.com") (:keywords "matching") (:url . "https://github.com/walseb/ellocate"))])
- (elm-mode . [(20230315 1122) ((f (0 17)) (s (1 7 0)) (emacs (25 1)) (seq (2 23)) (reformatter (0 3))) "Major mode for Elm" tar ((:commit . "699841865e1bd5b7f2077baa7121510b6bcad3c7") (:authors ("Joseph Collard")) (:maintainers ("Joseph Collard")) (:maintainer "Joseph Collard") (:url . "https://github.com/jcollard/elm-mode"))])
- (elm-test-runner . [(20190105 1923) ((emacs (24 4))) "Enhanced support for running elm-test" single ((:commit . "a31d567a64d86d36e3675347abd696824a731e0c") (:authors ("Juan Edi")) (:maintainers ("Juan Edi")) (:maintainer "Juan Edi") (:url . "https://github.com/juanedi/elm-test-runner"))])
- (elm-yasnippets . [(20160401 524) ((yasnippet (0 8 0))) "Yasnippets for Elm" tar ((:commit . "45a11a0cef0c36633fb3477d3dc4167e82779ba4") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:keywords "snippets"))])
- (elmacro . [(20210716 639) ((s (1 11 0)) (dash (2 13 0))) "Convert keyboard macros to emacs lisp" single ((:commit . "d2e05012cee4f54fab6d8d8d6aced6e5eeef4f31") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:keywords "macro" "elisp" "convenience") (:url . "https://github.com/Silex/elmacro"))])
- (elmine . [(20200520 1237) ((s (1 10 0))) "Redmine API access via elisp." single ((:commit . "d42e328634828e0c1770b72d5e8b87671d081693") (:authors ("Arthur Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Andersen" . "leoc.git@gmail.com") (:keywords "tools") (:url . "http://github.com/leoc/elmine"))])
- (elmpd . [(20210904 1340) ((emacs (25 1))) "A tight, ergonomic, async client library for mpd" single ((:commit . "4b42a90610fdb05ac1a2811da5acd55493715795") (:authors ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainers ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainer "Michael Herstine" . "sp1ff@pobox.com") (:keywords "comm") (:url . "https://github.com/sp1ff/elmpd"))])
- (elnode . [(20190702 1509) ((web (0 1 4)) (dash (1 1 0)) (noflet (0 0 7)) (s (1 5 0)) (creole (0 8 14)) (fakir (0 1 6)) (db (0 0 5)) (kv (0 0 17))) "The Emacs webserver." tar ((:commit . "29ef0f51a65a24fca7fdcdb4140d2e4556e4bb29") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "GitHub user \"Jcaw\"") (:keywords "lisp" "http" "hypermedia"))])
- (elog . [(20221207 643) ((eieio (1 3))) "logging library extended from logito" single ((:commit . "e171d0ff0a21011124204d77111e5992b50b7007") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "lisp" "tool" "log"))])
- (elogcat . [(20230121 459) ((s (1 9 0)) (dash (2 10 0))) "logcat interface" single ((:commit . "f2f19d7ab6b77b8fec55cb67524df629fe967891") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com") (:keywords "tools"))])
- (eloud . [(20190706 1707) ((emacs (24 4))) "A lightweight, interactive screen reader" single ((:commit . "b8f4af1f652268d73281de91fb333b5984970847") (:authors ("Patrick Smyth" . "patricksmyth01@gmail.com")) (:maintainers ("Patrick Smyth" . "patricksmyth01@gmail.com")) (:maintainer "Patrick Smyth" . "patricksmyth01@gmail.com") (:keywords "extensions") (:url . "https://github.com/smythp/eloud"))])
- (elpa-audit . [(20141023 1331) nil "Handy functions for inspecting and comparing package archives" single ((:commit . "1ca4e6073f8c4cbb41688b69d3b3feaa1a392efc") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "maint") (:url . "https://github.com/purcell/elpa-audit"))])
- (elpa-clone . [(20221201 1227) ((emacs (24 4))) "Clone ELPA archive" single ((:commit . "1d130c251690f24c23b77a4e4570157fca881d8f") (:authors ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainers ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainer "ZHANG Weiyi" . "dochang@gmail.com") (:keywords "comm" "elpa" "clone" "mirror") (:url . "https://github.com/dochang/elpa-clone"))])
- (elpa-deploy . [(20191022 718) ((emacs (24 4)) (f (0 0))) "ELPA deployment library" single ((:commit . "f5126a2da1e0e52981fad9c12028814be80328c2") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org") (:keywords "tools") (:url . "https://github.com/oitofelix/elpa-deploy"))])
- (elpa-mirror . [(20230208 1148) ((emacs (25 1))) "Create local package repository from installed packages" single ((:commit . "9d7cfbf72ef8c7cd014c91e5bb3d8fbebda56140") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "tools") (:url . "http://github.com/redguardtoo/elpa-mirror"))])
- (elpher . [(20230505 817) ((emacs (27 1))) "A friendly gopher and gemini client" tar ((:commit . "81f2883614c303184116449ec3583ef5c136ec2f") (:authors ("Tim Vaughan" . "plugd@thelambdalab.xyz")) (:maintainer "Tim Vaughan" . "plugd@thelambdalab.xyz") (:keywords "comm" "gopher" "gemini") (:url . "https://thelambdalab.xyz/elpher"))])
- (elpl . [(20220328 316) ((emacs (24 4))) "Emacs Lisp REPL" single ((:commit . "501871ab543b9967bfe87a8a82f83ab96b7f909e") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:keywords "lisp" "tool") (:url . "https://github.com/twlz0ne/elpl"))])
- (elpy . [(20230402 1946) ((company (0 9 2)) (emacs (24 4)) (highlight-indentation (0 5 0)) (pyvenv (1 3)) (yasnippet (0 8 0)) (s (1 11 0))) "Emacs Python Development Environment" tar ((:commit . "840713f23af99b83d04034c3703f7e73c3baa7dc") (:authors ("Jorgen Schaefer <contact@jorgenschaefer.de>, Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainer "Jorgen Schaefer <contact@jorgenschaefer.de>, Gaby Launay" . "gaby.launay@protonmail.com") (:keywords "python" "ide" "languages" "tools") (:url . "https://github.com/jorgenschaefer/elpy"))])
- (elpygen . [(20171225 1736) ((emacs (25)) (yasnippet (0 8 0))) "Generate a Python function/method using a symbol under point" single ((:commit . "21929c997a05968f9eefe52b85a76ceaab3b0d81") (:authors ("Vladimir Kazanov" . "vkazanov@inbox.ru")) (:maintainers ("Vladimir Kazanov" . "vkazanov@inbox.ru")) (:maintainer "Vladimir Kazanov" . "vkazanov@inbox.ru") (:keywords "python" "languages" "tools") (:url . "https://github.com/vkazanov/elpygen"))])
- (elquery . [(20220331 143) ((emacs (25 1)) (dash (2 13 0))) "The HTML library for elisp" tar ((:commit . "38f3bd41096cb270919b06095da0b9ac1add4598") (:authors ("Adam Niederer")) (:maintainers ("Adam Niederer")) (:maintainer "Adam Niederer") (:keywords "html" "hypermedia" "tools" "webscale") (:url . "https://github.com/AdamNiederer/elquery"))])
- (elsa . [(20230318 2024) ((emacs (25 1)) (trinary (0)) (f (0)) (dash (2 14)) (cl-lib (0 3)) (lsp-mode (0))) "Emacs Lisp Static Analyser" tar ((:commit . "2aa912dcc7d3732ba04eb96ab1cd186565a48f98") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "languages" "lisp") (:url . "https://github.com/emacs-elsa/Elsa"))])
- (elscreen . [(20181009 451) ((emacs (24))) "Emacs window session manager" tar ((:commit . "cc58337faf5ba1eae7e87f75f6ff3758675688f2") (:authors ("Naoto Morishima" . "naoto@morishima.net")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "window" "convenience") (:url . "https://github.com/knu/elscreen"))])
- (elscreen-buffer-group . [(20200109 2338) ((emacs (24 4)) (elscreen (0)) (cl-lib (0 5))) "elscreen buffer group" single ((:commit . "b48e71d4782adfeb2958f227d78c04164d26e4bd") (:authors ("Jeff Gran" . "jeff@jeffgran.com") ("Author: Ryan C. Thompson")) (:maintainers ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainer "Jeff Gran" . "jeff@jeffgran.com") (:keywords "buffer") (:url . "https://github.com/jeffgran/elscreen-buffer-group"))])
- (elscreen-fr . [(20160920 953) ((elscreen (0)) (seq (1 11))) "Use frame title as screen tab" single ((:commit . "b9c11f80d277086d5d5bf88623e15fc7adbbbe3c") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com") (:url . "http://github.com/rocher/elscreen-fr"))])
- (elscreen-mew . [(20160504 1835) ((elscreen (20120413 807))) "ElScreen Add-On for Mew" single ((:commit . "89871fad690ae161dc076e16ef481b1965612077") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com") (:url . "https://github.com/masutaka/elscreen-mew"))])
- (elscreen-multi-term . [(20200417 821) ((emacs (24 4)) (elscreen (1 4 6)) (multi-term (1 3))) "Multi term for elscreen" single ((:commit . "4ea89bae0444d9d4377515929f76cb3e98140f1f") (:authors ("wamei" . "wamei.cho@gmail.com")) (:maintainers ("wamei" . "wamei.cho@gmail.com")) (:maintainer "wamei" . "wamei.cho@gmail.com") (:keywords "elscreen" "multi term"))])
- (elscreen-separate-buffer-list . [(20200807 1324) ((emacs (24 4)) (elscreen (1 4 6))) "Separate buffer list manager for elscreen" single ((:commit . "88d8850108947949431425a2d938a09d941454e8") (:authors ("wamei" . "wamei.cho@gmail.com")) (:maintainers ("wamei" . "wamei.cho@gmail.com")) (:maintainer "wamei" . "wamei.cho@gmail.com") (:keywords "elscreen"))])
- (elscreen-tab . [(20201229 1428) ((emacs (26)) (elscreen (20180321)) (dash (2 14 1))) "minor mode to display tabs of elscreen in a dedicated buffer" tar ((:commit . "6ad77f972bde05e4e3d44f0d33b68ac41655e5f1") (:authors ("Aki Syunsuke" . "sunny.day.dev@gmail.com")) (:maintainers ("Aki Syunsuke" . "sunny.day.dev@gmail.com")) (:maintainer "Aki Syunsuke" . "sunny.day.dev@gmail.com") (:keywords "tools" "extensions") (:url . "https://github.com/aki-s/elscreen-tab"))])
- (elvish-mode . [(20180809 1612) ((emacs (24 3))) "Defines a major mode for Elvish" single ((:commit . "c3a7e31564256b9755b1ab9fb40d32ad78cd1ad2") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainers ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com") (:url . "https://github.com/ALSchwalm/elvish-mode"))])
- (elwm . [(20150817 1007) ((dash (1 1 0))) "Minimalistic window manager for emacs" single ((:commit . "c33b183f006ad476c3a44dab316f580f8b369930") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "docs") (:url . "https://github.com/Fuco1/elwm"))])
- (elx . [(20230212 2019) ((emacs (25 1)) (compat (29 1 3 4)) (llama (0 2 0))) "Extract information from Emacs Lisp libraries" single ((:commit . "9daf56b1b11ca267f263f70823ade6f1a92d307c") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "docs" "libraries" "packages") (:url . "https://github.com/emacscollective/elx"))])
- (emacs-everywhere . [(20220831 1636) ((emacs (26 3))) "System-wide popup windows for quick edits" single ((:commit . "e1b701894196b0e0aaf18ab88c778877ec87d0c9") (:authors ("TEC <https://github.com/tecosaur>")) (:maintainers ("TEC" . "contact@tecosaur.net")) (:maintainer "TEC" . "contact@tecosaur.net") (:keywords "conenience" "frames") (:url . "https://github.com/tecosaur/emacs-everywhere"))])
- (emacsc . [(20230326 1852) nil "helper for emacsc(1)" tar ((:commit . "b4afd616c4ef160c58fc9a9682d3431b30a9d434") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "tools") (:url . "https://github.com/knu/emacsc"))])
- (emacsist-view . [(20160426 1223) nil "Mode for viewing emacsist.com" single ((:commit . "f67761259ed779a9bc95c9a4e0474522990c5c6b") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "usability") (:url . "https://github.com/lujun9972/emacsist-view"))])
- (emacsql . [(20230417 1448) ((emacs (25 1))) "High-level SQL database front-end" tar ((:commit . "64012261f65fcdd7ea137d1973ef051af1dced42") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/emacsql"))])
- (emacsql-mysql . [(20230225 2205) ((emacs (25 1)) (emacsql (20230220))) "EmacSQL back-end for MySQL" single ((:commit . "b436adf09ebe058c28e0f473bed90ccd7084f6aa") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/emacsql"))])
- (emacsql-pg . [(20230224 1201) ((emacs (25 1)) (emacsql (20230220)) (pg (0 16))) "EmacSQL back-end for PostgreSQL via pg" single ((:commit . "7c533fb6c27c3a10b6ab05bddf663e37c109e459") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/emacsql"))])
- (emacsql-psql . [(20230225 2205) ((emacs (25 1)) (emacsql (20230220))) "EmacSQL back-end for PostgreSQL via psql" single ((:commit . "b436adf09ebe058c28e0f473bed90ccd7084f6aa") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/emacsql"))])
- (emacsql-sqlite . [(20230225 2205) ((emacs (25 1)) (emacsql (20230220))) "EmacSQL back-end for SQLite" tar ((:commit . "b436adf09ebe058c28e0f473bed90ccd7084f6aa") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/emacsql"))])
- (emacsql-sqlite-builtin . [(20230409 1847) ((emacs (29)) (emacsql (20230220))) "EmacSQL back-end for SQLite using builtin support" single ((:commit . "f25de357fee74aae7a538e8eae3d9be5eb55c20e") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/emacsql"))])
- (emacsql-sqlite-module . [(20230409 1847) ((emacs (25)) (emacsql (20230220)) (sqlite3 (0 16))) "EmacSQL back-end for SQLite using a module" single ((:commit . "f25de357fee74aae7a538e8eae3d9be5eb55c20e") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/emacsql"))])
- (emacsshot . [(20191206 944) ((emacs (24 4))) "Snapshot a frame or window from within" tar ((:commit . "fe958b11056f3c671ebdd604d5aa574323284ca5") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl")) (:maintainer "Marco Wahl") (:keywords "convenience") (:url . "https://gitlab.com/marcowahl/emacsshot"))])
- (emamux . [(20200315 1220) ((emacs (24 3))) "Interact with tmux" single ((:commit . "6172131d78038f0b1490e24bac60534bf4ad3b30") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-emamux"))])
- (emamux-ruby-test . [(20130812 1639) ((emamux (0 1)) (projectile (0 9 1))) "Ruby test with emamux" single ((:commit . "785bfd44d097a46bb2ebe1e62ac7595fd4dc9ab5") (:url . "https://github.com/syohex/emamux-ruby-test"))])
- (emaps . [(20200508 1759) ((dash (2 17 0)) (emacs (24))) "Utilities for working with keymaps" single ((:commit . "7c561f3ded2015ed3774e5784059d6601082743e") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com") (:keywords "convenience" "keyboard" "keymap" "utility") (:url . "https://github.com/GuiltyDolphin/emaps"))])
- (embark . [(20230507 524) ((emacs (27 1)) (compat (29 1 4 0))) "Conveniently act on minibuffer completions" tar ((:commit . "7b3feefa7eeb1e4b0a3e0e5a5a3ed7f6c06af12d") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx") (:keywords "convenience") (:url . "https://github.com/oantolin/embark"))])
- (embark-consult . [(20230503 1055) ((emacs (27 1)) (embark (0 20)) (consult (0 17))) "Consult integration for Embark" single ((:commit . "6bacd160032f1ff59812268df9d215ae04f3d02b") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx") (:keywords "convenience") (:url . "https://github.com/oantolin/embark"))])
- (embark-vc . [(20230212 1920) ((emacs (27 1)) (embark (0 21 1)) (forge (0 3)) (compat (29 1 3 0))) "Embark actions for various version control integrations" single ((:commit . "070666b0de8fc2832aa2510b9ba492565cb5e35e") (:authors ("Ellis Kenyő <https://github.com/elken>")) (:maintainers ("Ellis Kenyő" . "me@elken.dev")) (:maintainer "Ellis Kenyő" . "me@elken.dev") (:keywords "convenience" "matching" "terminals" "tools" "unix" "vc") (:url . "https://github.com/elken/embark-vc"))])
- (ember-mode . [(20200208 1423) ((cl-lib (0 5))) "Ember navigation mode for emacs" single ((:commit . "a587c423041b2fcb065fd5b6a03b2899b764e462") (:authors ("Aad Versteden" . "madnificent@gmail.com")) (:maintainers ("Aad Versteden" . "madnificent@gmail.com")) (:maintainer "Aad Versteden" . "madnificent@gmail.com") (:keywords "ember" "ember.js" "emberjs"))])
- (ember-yasnippets . [(20160526 1658) ((yasnippet (0 8 0))) "Snippets for Ember.js development" tar ((:commit . "3b5bd01569646237bf1b540d097e12f9118b67f4") (:authors ("Ron White" . "ronco@costite.com")) (:maintainers ("Ron White" . "ronco@costite.com")) (:maintainer "Ron White" . "ronco@costite.com") (:keywords "tools" "abbrev" "languages"))])
- (embrace . [(20171031 1833) ((cl-lib (0 5)) (expand-region (0 10 0))) "Add/Change/Delete pairs based on `expand-region'" single ((:commit . "dd5da196e5bcc5e6d87e1937eca0c21da4334ef2") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (emidje . [(20190209 1726) ((emacs (25)) (cider (0 17 0)) (seq (2 16)) (magit-popup (2 4 0))) "Test runner and report viewer for Midje" single ((:commit . "7e92f053964d925c97dc8cca8d4d70a3030021db") (:authors ("Alan Ghelardi" . "alan.ghelardi@nubank.com.br")) (:maintainers ("Alan Ghelardi" . "alan.ghelardi@nubank.com.br")) (:maintainer "Alan Ghelardi" . "alan.ghelardi@nubank.com.br") (:keywords "tools") (:url . "https://github.com/nubank/emidje"))])
- (emmet-mode . [(20221111 329) nil "Unofficial Emmet's support for emacs" single ((:commit . "63b6932603184956b5ea8919036d2b307b48d7fd") (:authors ("Shin Aoyama" . "smihica@gmail.com")) (:maintainers ("Shin Aoyama" . "smihica@gmail.com")) (:maintainer "Shin Aoyama" . "smihica@gmail.com") (:keywords "convenience") (:url . "https://github.com/smihica/emmet-mode"))])
- (emms . [(20230421 1501) ((cl-lib (0 5)) (nadvice (0 3)) (seq (0))) "The Emacs Multimedia System" tar ((:commit . "ff7221a367d326d023db523c2602969206d6027a") (:authors ("Jorgen Schäfer" . "forcer@forcix.cx")) (:maintainers ("Yoni Rabkin" . "yrk@gnu.org")) (:maintainer "Yoni Rabkin" . "yrk@gnu.org") (:keywords "emms" "mp3" "ogg" "flac" "music" "mpeg" "video" "multimedia") (:url . "https://www.gnu.org/software/emms/"))])
- (emms-info-mediainfo . [(20131223 1300) ((emms (0))) "Info-method for EMMS using medianfo" single ((:commit . "bce16eae9eacd38719fea62a9755225a888da59d") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainers ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org") (:keywords "multimedia" "processes"))])
- (emms-mark-ext . [(20130529 327) ((emms (3 0))) "Extra functions for emms-mark-mode and emms-tag-edit-mode" single ((:commit . "ec68129e3e9e469e5bf160c6a1b7030e322f3541") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "convenience" "multimedia") (:url . "https://github.com/vapniks/emms-mark-ext"))])
- (emms-mode-line-cycle . [(20160221 1120) ((emacs (24)) (emms (4 0))) "Display the emms mode line as a ticker" single ((:commit . "2c2f395e484a1d345050ddd61ff5fab71a92a6bc") (:authors ("momomo5717")) (:maintainers ("momomo5717")) (:maintainer "momomo5717") (:keywords "emms" "mode-line") (:url . "https://github.com/momomo5717/emms-mode-line-cycle"))])
- (emms-player-mpv-jp-radios . [(20180325 1117) ((emacs (24)) (cl-lib (0 5)) (emms (4 0)) (emms-player-simple-mpv (0 1 7))) "EMMS players and stream lists of Japan radio stations" tar ((:commit . "f6b37f5878c741124d5fca43c5b80af873541edd") (:keywords "emms" "mpv" "radio") (:url . "https://github.com/momomo5717/emms-player-mpv-jp-radios"))])
- (emms-player-simple-mpv . [(20180316 1549) ((emacs (24)) (cl-lib (0 5)) (emms (4 0))) "An extension of emms-player-simple.el for mpv JSON IPC" tar ((:commit . "101d120ccdee1c2c213fd2f0423c858b21649c00") (:authors ("momomo5717")) (:maintainers ("momomo5717")) (:maintainer "momomo5717") (:keywords "emms" "mpv") (:url . "https://github.com/momomo5717/emms-player-simple-mpv"))])
- (emms-soundcloud . [(20131221 1145) ((emms (20131016)) (json (1 2))) "EMMS source for Soundcloud audio sharing platform" single ((:commit . "87e5cbf9609d1f26c24dc834fdeb78b33d453c2b") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainers ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com") (:keywords "emms" "soundcloud") (:url . "http://github.com/osener/emms-soundcloud"))])
- (emms-state . [(20211023 1942) ((emms (0))) "Display track description and playing time in the mode line" single ((:commit . "cdb3ee85369758727b3c082e4ade1ae2b559b334") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "emms") (:url . "https://github.com/alezost/emms-state.el"))])
- (emoji-cheat-sheet-plus . [(20200202 1412) ((emacs (24)) (helm (1 6 4))) "emoji-cheat-sheet for emacs" tar ((:commit . "ffcc84d7060dfa000148e7f8be4fd6701593a74f") (:authors ("Sylvain Benner (based on the work of Shingo Fukuyama)")) (:maintainers ("Sylvain Benner (based on the work of Shingo Fukuyama)")) (:maintainer "Sylvain Benner (based on the work of Shingo Fukuyama)") (:keywords "emacs" "emoji") (:url . "https://github.com/syl20bnr/emacs-emoji-cheat-sheet-plus"))])
- (emoji-display . [(20140117 1013) nil "emoji displaying module" single ((:commit . "bb4217f6400151a9cfa6d4524b8427f01feb5193") (:authors ("Kazuhiro Ito" . "kzhr@d1.dion.ne.jp")) (:maintainers ("Kazuhiro Ito" . "kzhr@d1.dion.ne.jp")) (:maintainer "Kazuhiro Ito" . "kzhr@d1.dion.ne.jp") (:keywords "emoji") (:url . "https://github.com/ikazuhiro/emoji-display"))])
- (emoji-fontset . [(20160726 1924) nil "Set font face for Emoji." single ((:commit . "e460c9a08e48ec4103e38a7a04acae20880149a9") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "emoji" "font" "config"))])
- (emoji-github . [(20220704 648) ((emacs (24 4)) (emojify (1 0)) (request (0 3 0))) "Display list of GitHub's emoji. (cheat sheet)" single ((:commit . "a25c5e4e41c32ee7b3f7707b3d1281929f810d92") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "list" "github" "emoji" "display") (:url . "https://github.com/jcs-elpa/emoji-github"))])
- (emoji-recall . [(20160723 2208) ((emacs (24))) "How many emoji can you recall from memory?" tar ((:commit . "1c12d18e5592eaa2138dd3034012dced277e6d99") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "game") (:url . "https://github.com/lujun9972/emoji-recall.el"))])
- (emojify . [(20210108 1111) ((seq (1 11)) (ht (2 0)) (emacs (24 3))) "Display emojis in Emacs" tar ((:commit . "cfa00865388809363df3f884b4dd554a5d44f835") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainers ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com") (:keywords "multimedia" "convenience") (:url . "https://github.com/iqbalansari/emacs-emojify"))])
- (emojify-logos . [(20180814 917) ((emojify (0 4))) "Add logos to emojify" tar ((:commit . "a3e78bcbdf863092d4c9b026ac08bf7d1c7c0e8b") (:authors ("mxgoldstein" . "m_goldstein@gmx.net")) (:maintainers ("mxgoldstein" . "m_goldstein@gmx.net")) (:maintainer "mxgoldstein" . "m_goldstein@gmx.net") (:url . "https://github.com/mxgoldstein/emojify-logos"))])
- (empos . [(20151011 1916) nil "Locate bibtex citations from within emacs" single ((:commit . "7b99ad30e56937adb7e6349777e5a2045597d564") (:authors ("Dimitris Alikaniotis <da352 [at] cam.ac.uk>")) (:maintainers ("Dimitris Alikaniotis <da352 [at] cam.ac.uk>")) (:maintainer "Dimitris Alikaniotis <da352 [at] cam.ac.uk>") (:keywords "citations" "reference" "bibtex" "reftex") (:url . "http://github.com/dimalik/empos/"))])
- (empv . [(20230501 1047) ((emacs (28 1)) (s (1 13 0))) "A multimedia player/manager, YouTube interface" single ((:commit . "4da1febbf792d0ff81e7c2f450bef4e2a239f0a4") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com") (:url . "https://github.com/isamert/empv.el"))])
- (emr . [(20220108 548) ((s (1 3 1)) (dash (1 2 0)) (cl-lib (0 2)) (popup (0 5 0)) (emacs (24 1)) (list-utils (0 3 0)) (paredit (24 0 0)) (projectile (0 9 1)) (clang-format (0 0 1)) (iedit (0 97))) "Emacs refactoring system." tar ((:commit . "cac1b52932926f56d7f6d2923732d20bbd20670d") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com") (:keywords "tools" "convenience" "refactoring") (:url . "https://github.com/Wilfred/emacs-refactor"))])
- (enclose . [(20121008 1614) nil "Enclose cursor within punctuation pairs." tar ((:commit . "2fff3d4fcc1089f87647042d7164ba04282766ae") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "speed" "convenience") (:url . "http://github.com/rejeep/enclose"))])
- (encourage-mode . [(20151128 905) ((emacs (24 4))) "Encourages you in your work. :D" single ((:commit . "ca411e6bfd3d0edffe95852127bd995730b942e3") (:authors ("Patrick Mosby" . "patrick@schreiblogade.de")) (:maintainers ("Patrick Mosby" . "patrick@schreiblogade.de")) (:maintainer "Patrick Mosby" . "patrick@schreiblogade.de") (:keywords "fun") (:url . "https://github.com/halbtuerke/encourage-mode.el"))])
- (encrypt-region . [(20220802 918) ((emacs (26 1))) "Encrypts and decrypts regions" single ((:commit . "8ff5704bc6f4c57f935a8b7680129e599bbe474f") (:authors ("Carlton Shepherd" . "carlton@linux.com")) (:maintainers ("Carlton Shepherd" . "carlton@linux.com")) (:maintainer "Carlton Shepherd" . "carlton@linux.com") (:keywords "tools" "convenience") (:url . "https://github.com/cgshep/encrypt-region"))])
- (engine-mode . [(20221217 2101) ((cl-lib (0 5))) "Define and query search engines from within Emacs" single ((:commit . "a5f1ae2b087109f37a704c496942cec9d9f48698") (:authors ("Harry R. Schwartz" . "hello@harryrschwartz.com")) (:maintainers ("Harry R. Schwartz" . "hello@harryrschwartz.com")) (:maintainer "Harry R. Schwartz" . "hello@harryrschwartz.com") (:url . "https://github.com/hrs/engine-mode"))])
- (enh-ruby-mode . [(20221011 1957) ((emacs (25 1))) "Major mode for editing Ruby files" tar ((:commit . "7e76d754e1632b4fc9a024fa393c3fc837bcc86b") (:authors ("Geoff Jacobsen")) (:maintainers ("Ryan Davis")) (:maintainer "Ryan Davis") (:keywords "languages" "elisp" "ruby") (:url . "https://github.com/zenspider/Enhanced-Ruby-Mode"))])
- (enlightened-theme . [(20210220 2327) nil "A theme based on enlightened" single ((:commit . "1bfebd8f47e8a8357c9e557cf6e95d7027861e6d") (:url . "https://hg.sr.ht/~slondr/enlightened"))])
- (enlive . [(20170725 1417) nil "query html document with css selectors" single ((:commit . "604a8ca272b6889f114e2b5a13adb5b1dc4bae86") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "css" "selector" "query") (:url . "http://github.com/zweifisch/enlive"))])
- (eno . [(20191013 1239) ((dash (2 12 1)) (edit-at-point (1 0))) "Goto/copy/cut any word/symbol/line in view, similar to ace-jump/easymotion" single ((:commit . "c5c6193687c0bede1ddf507c430cf8b0a6d272d9") (:authors (nil . "<e.enoson@gmail.com>")) (:maintainers (nil . "<e.enoson@gmail.com>")) (:maintainer nil . "<e.enoson@gmail.com>") (:url . "http://github.com/enoson/eno.el"))])
- (enotify . [(20130407 1348) nil "A networked notification system for emacs" tar ((:commit . "7fd2f48ef4ff32c8f013c634ea2dd6b1d1409f80") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com") (:keywords "tools"))])
- (environ . [(20230409 2033) ((emacs (24 1)) (dash (2 17 0)) (f (0 20 0)) (s (1 12 0))) "API for environment variables and env files" single ((:commit . "8d48e206f72471c376bc874e1583661f651bccaa") (:authors ("Chris Clark" . "cfclrk@gmail.com")) (:maintainers ("Chris Clark" . "cfclrk@gmail.com")) (:maintainer "Chris Clark" . "cfclrk@gmail.com") (:keywords "tools") (:url . "https://github.com/cfclrk/environ"))])
- (envrc . [(20230105 719) ((seq (2)) (emacs (25 1)) (inheritenv (0 1))) "Support for `direnv' that operates buffer-locally" single ((:commit . "1954e8c0b5c8440ea9852eeb7c046a677fa544f6") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "processes" "tools") (:url . "https://github.com/purcell/envrc"))])
- (eopengrok . [(20230114 1413) ((s (1 9 0)) (dash (2 10 0)) (magit (2 1 0)) (cl-lib (0 5))) "opengrok interface for emacs" single ((:commit . "83b1695774f8bdc322e528ade9dffe9b2e93f32a") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com") (:keywords "tools"))])
- (epc . [(20140610 534) ((concurrent (0 3 1)) (ctable (0 1 2))) "A RPC stack for the Emacs Lisp" tar ((:commit . "94cd36a3bec752263ac9b1b3a9dd2def329d2af7") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "lisp" "rpc") (:url . "https://github.com/kiwanami/emacs-epc"))])
- (epic . [(20170210 23) ((htmlize (1 47))) "Evernote Picker for Cocoa Emacs" single ((:commit . "a41826c330eb0ea061d58a08cc861b0c4ac8ec4e") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net") (:keywords "evernote" "applescript") (:url . "https://github.com/yoshinari-nomura/epic"))])
- (eping . [(20201027 2149) ((emacs (25 1))) "Ping websites to check internet connectivity" tar ((:commit . "004496ee06c0b8ead4a4f49e17109e8eb32eb49d") (:authors ("Sean Hutchings" . "seanhut@yandex.com")) (:maintainers ("Sean Hutchings" . "seanhut@yandex.com")) (:maintainer "Sean Hutchings" . "seanhut@yandex.com") (:keywords "comm" "processes" "terminals" "unix") (:url . "https://github.com/sean-hut/eping"))])
- (epkg . [(20230410 1928) ((emacs (25 1)) (compat (29 1 3 4)) (closql (20230407)) (emacsql (20230409)) (llama (0 2 0))) "Browse the Emacsmirror package database" tar ((:commit . "c5a29ca7cb816f94153efe3d9c48ab2b566f7506") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/emacscollective/epkg"))])
- (epkg-marginalia . [(20230212 2018) ((emacs (27 1)) (compat (29 1 3 4)) (epkg (3 3 1)) (llama (0 2 0)) (marginalia (0 12))) "Show Epkg information in completion annotations" single ((:commit . "4f3a66946b1be11c40d1635b60ea21941c882e8f") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/emacscollective/epkg-marginalia"))])
- (epl . [(20180205 2049) ((cl-lib (0 3))) "Emacs Package Library" single ((:commit . "78ab7a85c08222cd15582a298a364774e3282ce6") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "convenience") (:url . "http://github.com/cask/epl"))])
- (epm . [(20190509 443) ((emacs (24 3)) (epl (0 8))) "Emacs Package Manager" tar ((:commit . "6375ddbf93c5f25647f6ebb25b54045b3c93a5be") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:url . "https://github.com/xuchunyang/epm"))])
- (epresent . [(20160411 201) ((org (8)) (cl-lib (0 5))) "Simple presentation mode for Emacs Org-mode" single ((:commit . "bc3443879bb0111dcde2abd2f9c578e2cd438186") (:keywords "gui") (:url . "https://github.com/dakrone/epresent"))])
- (eproject . [(20180312 1642) ((helm (1 6 4))) "assign files to projects, programatically" tar ((:commit . "068218d2cf2138cb2e8fc29b57e773a0097a7e8b") (:authors ("Jonathan Rockway" . "jon@jrock.us")) (:maintainers ("Jonathan Rockway" . "jon@jrock.us")) (:maintainer "Jonathan Rockway" . "jon@jrock.us") (:keywords "programming" "projects"))])
- (equake . [(20220627 2248) ((emacs (26 1)) (dash (2 14 1))) "Drop-down console for (e)shell & terminal emulation" single ((:commit . "7aa2e1715e6ea286b08bb446d2d9915afa0fdf03") (:authors ("Benjamin Slade" . "slade@lambda-y.net")) (:maintainers ("Benjamin Slade" . "slade@lambda-y.net")) (:maintainer "Benjamin Slade" . "slade@lambda-y.net") (:keywords "convenience" "frames" "terminals" "tools" "window-system") (:url . "https://gitlab.com/emacsomancer/equake"))])
- (eradio . [(20210327 1000) ((emacs (24 1))) "A simple Internet radio player" single ((:commit . "47769986c79def84307921f0277e9bb2714756c2") (:authors ("Olav Fosse" . "mail@olavfosse.no")) (:maintainers ("Olav Fosse" . "mail@olavfosse.no")) (:maintainer "Olav Fosse" . "mail@olavfosse.no") (:url . "https://github.com/fossegrim/eradio"))])
- (erblint . [(20200622 5) ((emacs (24))) "An interface for checking HTML ERB files using Erblint" single ((:commit . "43706afb09ec8de91651a832b703c81ced10ec4e") (:authors ("Leonardo Santos")) (:maintainers ("Leonardo Santos")) (:maintainer "Leonardo Santos") (:keywords "project" "convenience") (:url . "https://github.com/leodcs/erblint-emacs"))])
- (erc-colorize . [(20170107 1339) nil "Per user colorization of whole message" single ((:commit . "d026a016dcb9d63d9ac66d30627a92a8f1681bbd") (:authors ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainers ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainer "Sylvain Rousseau <thisirs at gmail dot com>") (:keywords "erc" "convenience") (:url . "https://github.com/thisirs/erc-colorize.git"))])
- (erc-crypt . [(20200516 2054) ((cl-lib (0 5))) "Symmetric Encryption for ERC" single ((:commit . "aea33aed864dca2866ae951161d15de0b2366e99") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org") (:keywords "comm") (:url . "https://github.com/atomontage/erc-crypt"))])
- (erc-hl-nicks . [(20200317 16) nil "ERC nick highlighter that ignores uniquifying chars when colorizing" single ((:commit . "a67fe361c8f2aa20fc235447fbb898f424b51439") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/erc-hl-nicks"))])
- (erc-image . [(20210604 753) nil "Show received image urls in the ERC buffer" single ((:commit . "883084f0801d46a5ccf183e51ae9a734755bbb97") (:authors ("Jon de Andrés Frías" . "jondeandres@gmail.com") ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainers ("Jon de Andrés Frías" . "jondeandres@gmail.com")) (:maintainer "Jon de Andrés Frías" . "jondeandres@gmail.com") (:keywords "multimedia"))])
- (erc-matterircd . [(20210804 504) ((emacs (27 1))) "Integrate matterircd with ERC" single ((:commit . "e3a59267c044474f9ca066d36517e9a3d872759c") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/erc-matterircd"))])
- (erc-scrolltoplace . [(20180608 606) ((emacs (24 0)) (switch-buffer-functions (0 0 1))) "An Erc module to scrolltobottom better with keep-place" single ((:commit . "feb0fbf1fd4bdf220ae2d31ea7c066d8e62089f9") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com") (:keywords "erc" "module" "comm" "scrolltobottom" "keep-place") (:url . "http://gitlab.com/jgkamat/erc-scrolltoplace"))])
- (erc-social-graph . [(20150508 1204) nil "A social network graph module for ERC." single ((:commit . "e6ef3416a1c5064054bf054d9f0c1c7bf54a9cd0") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:keywords "erc" "graph") (:url . "https://github.com/vibhavp/erc-social-graph"))])
- (erc-terminal-notifier . [(20140115 1024) nil "OSX notifications via the terminal-notifier gem for Emacs ERC." single ((:commit . "a3dacb935845e4a20031212bbd82b2170f68d2a8") (:authors ("Julien Blanchard" . "julien@sideburns.eu")) (:maintainers ("Julien Blanchard" . "julien@sideburns.eu")) (:maintainer "Julien Blanchard" . "julien@sideburns.eu") (:keywords "erc" "terminal-notifier" "nick") (:url . "http://github.com/julienXX/"))])
- (erc-track-score . [(20130328 1215) nil "Add score support to tracked channel buffers" single ((:commit . "5b27531ea6b1a4c4b703b270dfa9128cb5bfdaa3") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info") (:url . "http://julien.danjou.info/erc-track-score.html"))])
- (erc-tweet . [(20150920 1258) nil "shows text of a tweet when an url is posted in erc buffers" single ((:commit . "91fed61e139fa788d66a7358f0d50acc896414b8") (:authors ("Raimon Grau" . "raimonster@gmail.com")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:keywords "extensions"))])
- (erc-twitch . [(20170427 606) ((json (1 3)) (erc (5 0))) "Support for Twitch emotes for ERC." single ((:commit . "53c6af0cb72e56d897d30a40e7e5066668d6b5ec") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:keywords "twitch" "erc" "emotes") (:url . "https://github.com/vibhavp/erc-twitch"))])
- (erc-view-log . [(20140227 2039) nil "Major mode for viewing ERC logs" single ((:commit . "c5a25f0cbca84ed2e4f72068c02b66bd0ea3b266") (:authors ("Antoine Levitt") ("Thomas Riccardi" . "riccardi.thomas@gmail.com")) (:maintainers ("Antoine Levitt")) (:maintainer "Antoine Levitt") (:keywords "erc" "viewer" "logs" "colors") (:url . "http://github.com/Niluge-KiWi/erc-view-log/raw/master/erc-view-log.el"))])
- (erc-yank . [(20210220 1815) nil "Automagically create a Gist if pasting more than 5 lines" single ((:commit . "55d96f18c5df9d8fce51fa073d7a12c47a46ac80") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:keywords "comm" "erc" "chat" "irc" "yank" "gist") (:url . "https://github.com/jwiegley/erc-yank"))])
- (erc-youtube . [(20150603 2136) nil "Show info about a YouTube URL in an ERC buffer." single ((:commit . "97054ba8475b442e2aa81e5a291f668b7f28697f") (:authors ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainers ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainer "Raimon Grau Cuscó" . "raimonster@gmail.com") (:keywords "multimedia"))])
- (erc-yt . [(20150426 1249) ((dash (2 10 0))) "An erc module to display youtube links nicely" single ((:commit . "43e7d49325b17a3217a6ffb4a9daf75c5ff4e6f8") (:authors ("William Stevenson" . "yhvh2000@gmail.com")) (:maintainers ("William Stevenson" . "yhvh2000@gmail.com")) (:maintainer "William Stevenson" . "yhvh2000@gmail.com") (:keywords "multimedia"))])
- (ercn . [(20150523 1503) nil "Flexible ERC notifications" single ((:commit . "8f2493fb40753b9c3699322c205f4dcf0a5bd67b") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/ercn"))])
- (ereader . [(20170810 501) ((emacs (24 4)) (dash (2 12 1)) (s (1 10 0)) (xml+ (0 0 0))) "Major mode for reading ebooks with org-mode integration" tar ((:commit . "f3bbd3f13195f8fba3e3c880aab0e4c60430dcf3") (:authors ("Ben Dean" . "bendean837@gmail.com")) (:maintainers ("Ben Dean" . "bendean837@gmail.com")) (:maintainer "Ben Dean" . "bendean837@gmail.com") (:keywords "epub" "ebook") (:url . "https://github.com/bddean/emacs-ereader"))])
- (eredis . [(20181119 131) ((dash (0))) "eredis, a Redis client in emacs lisp" single ((:commit . "cfbfc25832f6fbc507bdd56b02e3a0b851a3c368") (:authors ("Justin Heyes-Jones" . "justinhj@gmail.com")) (:maintainers ("Justin Heyes-Jones" . "justinhj@gmail.com")) (:maintainer "Justin Heyes-Jones" . "justinhj@gmail.com") (:keywords "redis" "api" "tools" "org") (:url . "http://github.com/justinhj/eredis/"))])
- (erefactor . [(20200513 1252) ((cl-lib (0 3))) "Emacs-Lisp refactoring utilities" single ((:commit . "bfe27a1b8c7cac0fe054e76113e941efa3775fe8") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "extensions" "tools" "maint") (:url . "https://github.com/mhayashi1120/Emacs-erefactor"))])
- (ergoemacs-mode . [(20230207 1551) ((emacs (24 1)) (cl-lib (0 5)) (nadvice (0 4))) "Emacs mode based on common modern interface and ergonomics." tar ((:commit . "c2a918c6ab13e29dba2caf2bd06496babd0dfca6") (:authors ("Xah Lee" . "xah@xahlee.org") ("David Capello" . "davidcapello@gmail.com") ("Matthew L. Fidler" . "matthew.fidler@gmail.com") ("Kim F. Storm" . "storm@cua.dk")) (:maintainers ("Matthew L. Fidler" . "matthew.fidler@gmail.com")) (:maintainer "Matthew L. Fidler" . "matthew.fidler@gmail.com") (:keywords "convenience") (:url . "https://github.com/ergoemacs/ergoemacs-mode"))])
- (ergoemacs-status . [(20160318 538) ((powerline (2 3)) (mode-icons (0 1 0))) "Adaptive Status Bar / Mode Line" single ((:commit . "d952cc2361adf6eb4d6af60950ad4ab699c81320") (:authors ("Matthew Fidler")) (:maintainers ("Matthew Fidler")) (:maintainer "Matthew Fidler"))])
- (eri . [(20200914 644) nil "Enhanced relative indentation (eri)" single ((:commit . "aa5e3a127bf17a8c80d947f3c286758a36dadc36") (:url . "https://github.com/agda/agda"))])
- (erk . [(20230120 622) ((emacs (28 1)) (auto-compile (1 2 0)) (dash (2 18 0))) "Elisp (GitHub) Repository Kit" single ((:commit . "6ca1aabc6c60c8722bc5dca4aedbc033b1d9fff5") (:authors ("<author>")) (:maintainers ("<author>")) (:maintainer "<author>") (:keywords "convenience") (:url . "http://github.com/positron-solutions/elisp-repo-kit"))])
- (erlang . [(20230412 849) ((emacs (24 1))) "Erlang major mode" tar ((:commit . "1f897adc9df5e0de5d5a85633a8629a7e45ddeab") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "erlang" "languages" "processes"))])
- (erlstack-mode . [(20230202 1955) ((emacs (25 1)) (dash (2 12 0))) "Minor mode for analysing Erlang stacktraces" single ((:commit . "b0fa450da826b7b9fcfe9b0b209955735830eb38") (:authors ("k32")) (:maintainers ("k32")) (:maintainer "k32") (:keywords "tools" "erlang") (:url . "https://github.com/k32/erlstack-mode"))])
- (eros . [(20230309 615) ((emacs (24 4))) "Evaluation Result OverlayS for Emacs Lisp" single ((:commit . "a9a92bdc6be0521a6a06eb464be55ed61946639c") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com") (:keywords "convenience" "lisp") (:url . "https://github.com/xiongtx/eros"))])
- (ert-async . [(20200105 1031) ((emacs (24 1))) "Async support for ERT" single ((:commit . "948cf2faa10e085bda3739034ca5ea1912893433") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "lisp" "test") (:url . "http://github.com/rejeep/ert-async.el"))])
- (ert-expectations . [(20121009 734) nil "The simplest unit test framework in the world" single ((:commit . "aed70e002c4305b66aed7f6d0d48e9addd2dc1e6") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "test" "unittest" "ert" "expectations") (:url . "http://www.emacswiki.org/emacs/download/ert-expectations.el"))])
- (ert-junit . [(20190802 2232) ((ert (0)) (emacs (23 4))) "JUnit XML reports from ert results" single ((:commit . "65f91c35b088b87943dbbbe7e1ce354bc9bc0992") (:authors ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainers ("Ola Nilsson" . "ola.nilsson@gmail.com")) (:maintainer "Ola Nilsson" . "ola.nilsson@gmail.com") (:keywords "tools" "test" "unittest" "ert") (:url . "http://bitbucket.org/olanilsson/ert-junit"))])
- (ert-modeline . [(20140115 1015) ((s (1 3 1)) (dash (1 2 0)) (emacs (24 1)) (projectile (0 9 1))) "displays ert test results in the modeline." single ((:commit . "7c6340834387f749519616f9601821cb73fd657b") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com") (:keywords "tools" "tests" "convenience"))])
- (ert-runner . [(20220513 1142) ((s (1 6 1)) (dash (1 8 0)) (f (0 10 0)) (commander (0 2 0)) (ansi (0 1 0)) (shut-up (0 1 0))) "Opinionated Ert testing workflow" tar ((:commit . "69d66b934223d5f1801ba3a4c8dbfb3453f2a041") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "test") (:url . "http://github.com/rejeep/ert-runner.el"))])
- (es-lib . [(20141111 1830) ((cl-lib (0 3))) "A collection of emacs utilities" tar ((:commit . "753b27363e39c10edc9e4e452bdbbbe4d190df4a") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/es-lib"))])
- (es-mode . [(20221026 1103) ((dash (2 11 0)) (cl-lib (0 5)) (spark (1 0)) (s (1 11 0)) (request (0 3 0))) "A major mode for editing and executing Elasticsearch queries" tar ((:commit . "e82465fd785688bb58918ea62ca4de06a2a23a1e") (:authors ("Lee Hinman" . "lee@writequit.org")) (:maintainers ("Lee Hinman" . "lee@writequit.org")) (:maintainer "Lee Hinman" . "lee@writequit.org") (:keywords "elasticsearch") (:url . "http://www.github.com/dakrone/es-mode"))])
- (es-windows . [(20140211 904) ((cl-lib (0 3)) (emacs (24))) "Window-management utilities" single ((:commit . "7ebe6c6e0831373847d7adbedeaa2e506b54b2af") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/es-windows"))])
- (esa . [(20180403 1525) ((cl-lib (0 5))) "Interface to esa.io" single ((:commit . "417e0ac55abe9b17e0b7165d0df26bc018aff42e") (:authors ("Nab Inno" . "nab@blahfe.com")) (:maintainers ("Nab Inno" . "nab@blahfe.com")) (:maintainer "Nab Inno" . "nab@blahfe.com") (:keywords "tools" "esa") (:url . "https://github.com/nabinno/esa.el"))])
- (esh-autosuggest . [(20210906 1446) ((emacs (24 4)) (company (0 9 4))) "History autosuggestions for eshell" single ((:commit . "bf676b137d35553debe32ff134dbec25f3978ae7") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me") (:keywords "completion" "company" "matching" "convenience" "abbrev") (:url . "http://github.com/dieggsy/esh-autosuggest"))])
- (esh-buf-stack . [(20140107 1018) nil "Add a buffer stack feature to Eshell" single ((:commit . "ea5da9ce8566ffe2e013f0e588701cb0825258b6") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "eshell" "extensions"))])
- (esh-help . [(20190905 22) ((dash (1 4 0))) "Add some help functions and support for Eshell" single ((:commit . "417673ed18a983930a66a6692dbfb288a995cb80") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "eshell" "extensions") (:url . "https://github.com/tom-tan/esh-help/"))])
- (eshell-autojump . [(20201117 235) nil "autojump command for Eshell" single ((:commit . "c1056bfc6b46646ae1e606247689fef9aee621af") (:authors ("Alex Schroeder")) (:maintainers ("Yen-Chin, Lee" . "coldnew.tw@gmail.com")) (:maintainer "Yen-Chin, Lee" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/eshell-autojump"))])
- (eshell-bookmark . [(20170922 1514) ((emacs (24 3))) "Integrate bookmarks with eshell." single ((:commit . "deda4b848b2fb979dbe73ead2cb866610e3596ed") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "convenience" "files") (:url . "https://github.com/Fuco1/eshell-bookmark"))])
- (eshell-did-you-mean . [(20211104 237) ((emacs (24 1)) (cl-lib (0 5))) "command not found (\"did you mean…\" feature) in Eshell" single ((:commit . "80cd8c4b186a2fb29621cf634bcf2bcd914f1e3d") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "eshell") (:url . "https://github.com/xuchunyang/eshell-did-you-mean"))])
- (eshell-fixed-prompt . [(20220104 1535) ((emacs (25)) (s (1 11 0))) "Restrict eshell to a single fixed prompt" single ((:commit . "302c241b42764bd6b4ed6d3c6ea360b5a2292fbc") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))])
- (eshell-fringe-status . [(20170117 2316) nil "Show last status in fringe" single ((:commit . "adc6997c68e39c0d52a2af1b2fd5cf2057783797") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:url . "http://projects.ryuslash.org/eshell-fringe-status/"))])
- (eshell-git-prompt . [(20220830 2000) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 11 0))) "Some Eshell prompt for Git users" single ((:commit . "dfcf9cd93add6763e2c46603b0323274d4c22906") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "eshell" "git") (:url . "https://github.com/xuchunyang/eshell-git-prompt"))])
- (eshell-info-banner . [(20220728 1006) ((emacs (25 1)) (s (1))) "System information as your Eshell banner" single ((:commit . "987e69a66276ca057798896c606e5c5d5fb9ee5c") (:authors ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainers ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainer "Lucien Cartier-Tilet" . "lucien@phundrak.com") (:url . "https://github.com/Phundrak/eshell-info-banner.el"))])
- (eshell-outline . [(20201121 620) ((emacs (25 1))) "Enhanced outline-mode for Eshell" single ((:commit . "6f917afa5b3d36764d76d7864589094647d8c3b4") (:authors ("Jamie Beardslee" . "jdb@jamzattack.xyz")) (:maintainers ("Jamie Beardslee" . "jdb@jamzattack.xyz")) (:maintainer "Jamie Beardslee" . "jdb@jamzattack.xyz") (:keywords "unix" "eshell" "outline" "convenience") (:url . "https://git.jamzattack.xyz/eshell-outline"))])
- (eshell-prompt-extras . [(20210925 110) ((emacs (25))) "Display extra information for your eshell prompt." single ((:commit . "c2078093323206b91a1b1f5786d79faa00b76be7") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "eshell" "prompt") (:url . "https://github.com/zwild/eshell-prompt-extras"))])
- (eshell-syntax-highlighting . [(20230427 147) ((emacs (25 1))) "Highlight eshell commands" single ((:commit . "6825a6ce3a5b5200f982ed390656cc0a622c0eba") (:authors ("Alex Kreisher" . "akreisher18@gmail.com")) (:maintainers ("Alex Kreisher" . "akreisher18@gmail.com")) (:maintainer "Alex Kreisher" . "akreisher18@gmail.com") (:keywords "convenience") (:url . "https://github.com/akreisher/eshell-syntax-highlighting"))])
- (eshell-toggle . [(20220718 729) ((emacs (25 1)) (dash (2 11 0))) "Show/hide eshell under active window." single ((:commit . "d4e884624f02e68b267b0044322ad17baa6780f8") (:authors ("Dmitry Cherkassov" . "dcherkassov@gmail.com")) (:maintainers ("Dmitry Cherkassov" . "dcherkassov@gmail.com")) (:maintainer "Dmitry Cherkassov" . "dcherkassov@gmail.com") (:keywords "processes") (:url . "https://github.com/4da/eshell-toggle"))])
- (eshell-up . [(20170425 1737) ((emacs (24))) "Quickly go to a specific parent directory in eshell" single ((:commit . "b00e447ad7941ab31bcbb6bc0205fd492e887e7d") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:keywords "eshell") (:url . "https://github.com/peterwvj/eshell-up"))])
- (eshell-vterm . [(20221229 1328) ((emacs (27 1)) (vterm (0 0 1))) "Vterm for visual commands in eshell" single ((:commit . "e96c30ad5e7d63b778fc3232e81b090b63b13277") (:authors ("Illia Ostapyshyn" . "ilya.ostapyshyn@gmail.com")) (:maintainers ("Illia Ostapyshyn" . "ilya.ostapyshyn@gmail.com")) (:maintainer "Illia Ostapyshyn" . "ilya.ostapyshyn@gmail.com") (:keywords "eshell" "vterm" "terminals" "shell" "visual" "tools" "processes") (:url . "https://github.com/iostapyshyn/eshell-vterm"))])
- (eshell-z . [(20191116 333) ((cl-lib (0 5))) "cd to frequent directory in eshell" single ((:commit . "337cb241e17bd472bd3677ff166a0800f684213c") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "convenience") (:url . "https://github.com/xuchunyang/eshell-z"))])
- (eslint-disable-rule . [(20220811 1006) ((emacs (27 2))) "Commands to add JS comments disabling eslint rules" tar ((:commit . "642ead124172dd470e8ab59fd0645597dc9d8e66") (:url . "https://github.com/DamienCassou/eslint-disable-rule"))])
- (eslint-fix . [(20211005 221) nil "Fix JavaScript files using ESLint" single ((:commit . "636bf8d8797bdd58f1b543c9d3f4910e3ce879ab") (:authors ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainers ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainer "Neri Marschik" . "marschik_neri@cyberagent.co.jp") (:keywords "tools" "javascript" "eslint" "lint" "formatting" "style") (:url . "https://github.com/codesuki/eslint-fix"))])
- (eslint-rc . [(20220328 800) ((emacs (24 3)) (eslint-fix (0 1 0))) "Use local rc rules with ESLint" single ((:commit . "eb6f3e715792952bc957d5dc8ab1a607f3dbbd55") (:authors ("Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>")) (:maintainers ("Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>")) (:maintainer "Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>") (:keywords "convenience" "edit" "js" "ts" "rc" "eslintrc" "eslint-rc" "eslint" "eslint-fix") (:url . "https://github.com/jjuliano/eslint-rc-emacs"))])
- (eslintd-fix . [(20210731 1649) ((dash (2 12 0)) (emacs (26 3))) "use eslint_d to automatically fix js files" single ((:commit . "3897d8a679a6e98e3f5054aaefe07f6b55f8f128") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/eslintd-fix"))])
- (esonify . [(20190110 1621) ((deferred (0 3 1)) (cl-lib (0 5))) "Sonify your code" tar ((:commit . "bdc79d4ab2e3c449b5bef46e5cabc552beeed5c6") (:authors ("Oliver Flatt" . "oflatt@gmail.com")) (:maintainers ("Oliver Flatt" . "oflatt@gmail.com")) (:maintainer "Oliver Flatt" . "oflatt@gmail.com") (:url . "https://github.com/oflatt/esonify"))])
- (espotify . [(20220121 2057) ((emacs (26 1))) "Spotify access library" single ((:commit . "ea6d6021e5acc550560325db2f09198839ee702f") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose A Ortega Ruiz")) (:maintainer "Jose A Ortega Ruiz") (:keywords "multimedia") (:url . "https://codeberg.org/jao/espotify"))])
- (espresso-theme . [(20210505 1957) nil "Espresso Tutti Colori port for Emacs" single ((:commit . "580f673729f02aa07070c5300bedf24733d56e74") (:authors ("Martin Kühl <purl.org/net/mkhl>")) (:maintainers ("Martin Kühl <purl.org/net/mkhl>")) (:maintainer "Martin Kühl <purl.org/net/mkhl>") (:url . "https://github.com/dgutov/espresso-theme"))])
- (espuds . [(20230218 910) ((emacs (25)) (s (1 7 0)) (dash (2 2 0)) (f (0 12 1))) "Ecukes step definitions" single ((:commit . "57c18a48f1a01d8174298eaab4fcf3b2c6549291") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "test") (:url . "http://github.com/ecukes/espuds"))])
- (espy . [(20200317 2333) ((emacs (24))) "Emacs Simple Password Yielder" single ((:commit . "2c01be937a5e5bde62921684a0b27300705fb4e0") (:authors ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainer "Sebastian WÃ¥linder" . "s.walinder@gmail.com") (:keywords "convenience") (:url . "https://github.com/walseb/espy"))])
- (esqlite . [(20151206 1206) ((pcsv (1 3 3))) "Manipulate sqlite file from Emacs" single ((:commit . "fae9826cbc255b0f0686a801288f1441bda5f631") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "data") (:url . "https://github.com/mhayashi1120/Emacs-esqlite"))])
- (esqlite-helm . [(20151116 850) ((esqlite (0 2 0)) (helm (20131207 845))) "Define helm source for sqlite database" single ((:commit . "84d5b16198f30949c544affba751ee0d58a000d9") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "data") (:url . "https://github.com/mhayashi1120/Emacs-esqlite"))])
- (ess . [(20230419 1527) ((emacs (25 1))) "Emacs Speaks Statistics" tar ((:commit . "5c4ae91cefa5c56fd13b204a9a996825af836a67") (:authors ("David Smith" . "dsmith@stats.adelaide.edu.au") ("A.J. Rossini" . "blindglobe@gmail.com") ("Richard M. Heiberger" . "rmh@temple.edu") ("Kurt Hornik" . "Kurt.Hornik@R-project.org") ("Martin Maechler" . "maechler@stat.math.ethz.ch") ("Rodney A. Sparapani" . "rsparapa@mcw.edu") ("Stephen Eglen" . "stephen@gnu.org") ("Sebastian P. Luque" . "spluque@gmail.com") ("Henning Redestig" . "henning.red@googlemail.com") ("Vitalie Spinu" . "spinuvit@gmail.com") ("Lionel Henry" . "lionel.hry@gmail.com") ("J. Alexander Branham" . "alex.branham@gmail.com")) (:maintainers ("ESS Core Team" . "ESS-core@r-project.org")) (:maintainer "ESS Core Team" . "ESS-core@r-project.org") (:url . "https://ess.r-project.org/"))])
- (ess-R-data-view . [(20130509 1158) ((ctable (20130313 1743)) (popup (20130324 1305)) (ess (20130225 1754))) "Data viewer for GNU R" single ((:commit . "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience") (:url . "https://github.com/myuhe/ess-R-data-view.el"))])
- (ess-r-insert-obj . [(20220610 1406) ((emacs (26 1)) (ess (18 10 1))) "Insert objects in ESS-R" single ((:commit . "2ded9c23d0af2a7f6c0e02f9ea4af0e5b3cb7fb4") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/ess-r-insert-obj"))])
- (ess-smart-equals . [(20210411 1333) ((emacs (25 1)) (ess (18 10))) "flexible, context-sensitive assignment key for R/S" single ((:commit . "fea9eea4b59c3e9559b379508e3500076ca99ef1") (:authors ("Christopher R. Genovese" . "genovese@cmu.edu")) (:maintainers ("Christopher R. Genovese" . "genovese@cmu.edu")) (:maintainer "Christopher R. Genovese" . "genovese@cmu.edu") (:keywords "r" "s" "ess" "convenience") (:url . "https://github.com/genovese/ess-smart-equals"))])
- (ess-smart-underscore . [(20190309 101) ((ess (0))) "Ess Smart Underscore" tar ((:commit . "aa871c5b0448515db439ea9bed6a8574e82ddb47") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew Fidler")) (:maintainer "Matthew Fidler") (:keywords "ess" "underscore") (:url . "http://github.com/mlf176f2/ess-smart-underscore.el"))])
- (ess-view . [(20181001 1730) ((ess (15)) (s (1 8 0)) (f (0 16 0))) "View R dataframes in a spreadsheet software" single ((:commit . "d4e5a340b7bcc58c434867b97923094bd0680283") (:authors ("Bocci Gionata" . "boccigionata@gmail.com")) (:maintainers ("Bocci Gionata" . "boccigionata@gmail.com")) (:maintainer "Bocci Gionata" . "boccigionata@gmail.com") (:keywords "extensions" "ess") (:url . "https://github.com/GioBo/ess-view"))])
- (ess-view-data . [(20230503 643) ((emacs (26 1)) (ess (18 10 1)) (csv-mode (1 12))) "View Data" single ((:commit . "c0b20e503c772eebbef6bbc6c89a707ba6ec42ec") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/ess-view-data"))])
- (esup . [(20220202 2335) ((cl-lib (0 5)) (s (1 2)) (emacs (25 1))) "The Emacs StartUp Profiler (ESUP)" tar ((:commit . "4b49c8d599d4cc0fbf994e9e54a9c78e5ab62a5f") (:authors ("Joe Schafer" . "joe@jschaf.com")) (:maintainers ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch") (:keywords "convenience" "processes") (:url . "https://github.com/jschaf/esup"))])
- (esxml . [(20230308 2254) ((emacs (24 1)) (kv (0 0 5)) (cl-lib (0 5))) "Library for working with xml via esxml and sxml" tar ((:commit . "225693096a587492d76bf696d1f0c25c61f7d531") (:authors ("Vanya Izaksonas-Smith <izak0002 at umn dot edu>")) (:maintainer "Vanya Izaksonas-Smith") (:keywords "tools" "lisp" "comm") (:url . "https://github.com/tali713/esxml"))])
- (eta . [(20210115 1655) ((emacs (25 1)) (ht (2 2)) (dash (2 17))) "standard and multi dispatch key bind" single ((:commit . "651f96c46eeb7ff8a0f0efcfacad5b4d25bfaa4b") (:authors ("Chris Zheng")) (:maintainers ("Chris Zheng")) (:maintainer "Chris Zheng") (:keywords "convenience" "usability") (:url . "https://www.github.com/zcaudate/eta"))])
- (etable . [(20161028 2009) ((dash (2 9 0)) (interval-list (0 1)) (emacs (24 4))) "Implementation of javax.swing.JTable for Emacs." tar ((:commit . "d502141f0c69bf95256ba5cb9cd15350c7e942d2") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "convenience") (:url . "https://github.com/Fuco1/ETable"))])
- (etc-sudoers-mode . [(20201102 1707) ((sudo-edit (0)) (with-editor (0))) "Edit Sudo security policies" single ((:commit . "74c66c58c9578a0d841206d5dec04d81e7b3d741") (:authors ("Peter Oliver" . "git@mavit.org.uk")) (:maintainers ("Peter Oliver" . "git@mavit.org.uk")) (:maintainer "Peter Oliver" . "git@mavit.org.uk") (:keywords "languages") (:url . "https://gitlab.com/mavit/etc-sudoers-mode/"))])
- (etd . [(20221003 114) ((emacs (24 4))) "Examples to Tests and Docs" single ((:commit . "f26f603d088631ce0466aa529de7156fa94ffbc5") (:authors ("Jason M23" . "jasonm23@gmail.com")) (:maintainers ("Jason M23" . "jasonm23@gmail.com")) (:maintainer "Jason M23" . "jasonm23@gmail.com") (:keywords "lisp" "tools" "extensions") (:url . "https://github.com/emacsfodder/kurecolor"))])
- (eterm-256color . [(20210224 2241) ((emacs (24 4)) (xterm-color (1 7)) (f (0 19 0))) "Customizable 256 colors for term." tar ((:commit . "05fdbd336a888a0f4068578a6d385d8bf812a4e8") (:authors ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainers ("Diego A. Mundo" . "dieggsy@pm.me")) (:maintainer "Diego A. Mundo" . "dieggsy@pm.me") (:keywords "faces") (:url . "http://github.com/dieggsy/eterm-256color"))])
- (eterm-fn . [(20191010 2331) ((term (0))) "Function keys (F1--F12) for term." tar ((:commit . "66f3b2f6308fa2ac4d8a32be5a7e35a96e08a9ee") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org") (:keywords "terminals") (:url . "https://github.com/oitofelix/eterm-fn"))])
- (ethan-wspace . [(20201106 2059) nil "whitespace customizations for emacs" single ((:commit . "035c7d698c99e3891a522d6e6f8fde23c6267c15") (:authors ("Ethan Glasser-Camp" . "ethan@betacantrips.com")) (:maintainers ("Ethan Glasser-Camp" . "ethan@betacantrips.com")) (:maintainer "Ethan Glasser-Camp" . "ethan@betacantrips.com") (:keywords "whitespace" "tab" "newline" "trailing" "clean"))])
- (etherpad . [(20211128 106) ((emacs (26 3)) (request (0 3)) (let-alist (0 0)) (websocket (1 12)) (parsec (0 1)) (0xc (0 1))) "Interface to the Etherpad API" tar ((:commit . "1fae6a03084e0794e09ac036838b53aaae1dbd63") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "comm" "etherpad" "collaborative editing") (:url . "https://github.com/zzkt/ethermacs"))])
- (euslisp-mode . [(20170830 1929) ((emacs (24 3)) (s (1 9)) (exec-path-from-shell (0)) (helm-ag (0 58))) "Major mode for Euslisp-formatted text" single ((:commit . "db62a2d148482317794727982576494596365a55") (:authors ("iory" . "ab.ioryz@gmail.com")) (:maintainers ("iory" . "ab.ioryz@gmail.com")) (:maintainer "iory" . "ab.ioryz@gmail.com") (:keywords "euslisp" "euslisp" "github") (:url . "https://github.com/iory/euslisp-mode"))])
- (eval-expr . [(20120619 647) nil "enhanced eval-expression command" single ((:commit . "a0e69e83de41df8dbccefc1962ab4f02206a3328") (:authors ("Noah Friedman" . "friedman@splode.com")) (:maintainers (nil . "friedman@splode.com")) (:maintainer nil . "friedman@splode.com") (:keywords "lisp" "extensions"))])
- (eval-in-repl . [(20201121 1341) ((dash (0 0 0)) (paredit (0 0 0)) (ace-window (0 0 0))) "Consistent ESS-like eval interface for various REPLs" tar ((:commit . "2abb9ccf6f08ae3a5ab504f0b3fd81ce0345b766") (:authors ("Kazuki YOSHIDA" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki YOSHIDA" . "kazukiyoshida@mail.harvard.edu") (:keywords "tools" "convenience") (:url . "https://github.com/kaz-yos/eval-in-repl"))])
- (eval-sexp-fu . [(20191128 825) ((cl-lib (0))) "Tiny functionality enhancements for evaluating sexps." single ((:commit . "36d2fe3bcf602e15ca10a7f487da103515ef391a") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net") (:keywords "lisp" "highlight" "convenience"))])
- (evalator . [(20160213 128) ((helm-core (1 9 1))) "Package for interactive transformation of data with helm" tar ((:commit . "f30da4da48c0b3f3cfa1fc1c7cfdb53ffe79df36") (:authors ("Sean Irby")) (:maintainers ("Sean Irby" . "sean.t.irby@gmail.com")) (:maintainer "Sean Irby" . "sean.t.irby@gmail.com") (:keywords "languages" "elisp" "helm") (:url . "http://www.github.com/seanirby/evalator"))])
- (evalator-clojure . [(20160208 2148) ((cider (0 10 0)) (evalator (1 0 0))) "Clojure evaluation context for evalator via CIDER." tar ((:commit . "caa4e0a137bdfada86593128a654e16aa617ad50") (:authors ("Sean Irby")) (:maintainers ("Sean Irby" . "sean.t.irby@gmail.com")) (:maintainer "Sean Irby" . "sean.t.irby@gmail.com") (:keywords "languages" "clojure" "cider" "helm") (:url . "http://www.github.com/seanirby/evalator-clojure"))])
- (eve-mode . [(20170822 2231) ((emacs (25)) (polymode (1 0)) (markdown-mode (2 0))) "Major mode for editing Eve documents." single ((:commit . "a4661114d9c18725691b76321d72167ca5a9070a") (:authors ("Joshua Cole" . "joshuafcole@gmail.com")) (:maintainers ("Joshua Cole" . "joshuafcole@gmail.com")) (:maintainer "Joshua Cole" . "joshuafcole@gmail.com") (:keywords "languages" "wp" "tools") (:url . "https://github.com/witheve/emacs-eve-mode"))])
- (everlasting-scratch . [(20230105 507) ((emacs (25 1))) "The *scratch* that lasts forever" single ((:commit . "1b7dac779501dcd988552aa6455a5be89e8b0562") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:keywords "convenience" "tool") (:url . "https://github.com/beacoder/everlasting-scratch"))])
- (evil . [(20230421 1417) ((emacs (24 1)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "23a20e364cb151d73373d886355508cb8a0d4539") (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com") (:keywords "emulations") (:url . "https://github.com/emacs-evil/evil"))])
- (evil-anzu . [(20220911 1939) ((evil (1 0 0)) (anzu (0 46))) "anzu for evil-mode" single ((:commit . "d1e98ee6976437164627542909a25c6946497899") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Fredrik Bergroth" . "fbergroth@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-evil-anzu"))])
- (evil-args . [(20220125 1626) ((evil (1 0 8))) "Motions and text objects for delimited arguments in Evil." single ((:commit . "2671071a4a57eaee7cc8c27b9e4b6fc60fd2ccd3") (:authors ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainers ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainer "Connor Smith" . "wconnorsmith@gmail.com") (:keywords "evil" "vim-emulation") (:url . "http://github.com/wcsmith/evil-args"))])
- (evil-avy . [(20150908 748) ((emacs (24 1)) (cl-lib (0 5)) (avy (0 3 0)) (evil (1 2 3))) "set-based completion" single ((:commit . "2dd955cc3ecaa7ddeb67b295298abdc6d16dd3a5") (:authors ("Yufan Lou" . "loganlyf@gmail.com")) (:maintainers ("Yufan Lou" . "loganlyf@gmail.com")) (:maintainer "Yufan Lou" . "loganlyf@gmail.com") (:keywords "point" "location" "evil" "vim") (:url . "https://github.com/louy2/evil-avy"))])
- (evil-better-visual-line . [(20200123 2045) ((evil (1 2 13))) "gj and gk visual line mode fix" single ((:commit . "7a65dfb17ab93857eb4c7a39d4018d9399705293") (:authors ("<nuckollsp at gmail.com>")) (:maintainers ("<nuckollsp at gmail.com>")) (:maintainer "<nuckollsp at gmail.com>") (:keywords "evil" "vim" "motion") (:url . "https://github.com/yourfin/evil-better-visual-line"))])
- (evil-cleverparens . [(20230216 2148) ((evil (1 0)) (paredit (1)) (smartparens (1 6 1)) (emacs (24 4)) (dash (2 12 0))) "Evil friendly minor-mode for editing lisp." tar ((:commit . "8d92bd47f07ca2dcf15835cfc3cb6e3a29c6146d") (:authors ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainers ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainer "Olli Piepponen" . "opieppo@gmail.com") (:keywords "convenience" "emulations") (:url . "https://github.com/emacs-evil/evil-cleverparens"))])
- (evil-colemak-basics . [(20221230 1443) ((emacs (24 3)) (evil (1 2 12)) (evil-snipe (2 0 3))) "Basic Colemak key bindings for evil-mode" single ((:commit . "ea519b962f051cabced8aadaf6ed0134b861225c") (:authors ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "Wouter Bolsterlee" . "wouter@bolsterl.ee") (:keywords "convenience" "emulations" "colemak" "evil") (:url . "https://github.com/wbolster/evil-colemak-basics"))])
- (evil-colemak-minimal . [(20171006 1317) ((emacs (24)) (evil (1 2 12))) "Minimal Colemak key bindings for evil-mode" single ((:commit . "6d98b6da60f414524a0d718f76024c26dce742b3") (:authors ("Bryan Allred" . "bryan@revolvingcow.com")) (:maintainers ("Bryan Allred" . "bryan@revolvingcow.com")) (:maintainer "Bryan Allred" . "bryan@revolvingcow.com") (:keywords "colemak" "evil") (:url . "https://github.com/bmallred/evil-colemak-minimal"))])
- (evil-collection . [(20230502 409) ((emacs (26 3)) (evil (1 2 13)) (annalist (1 0))) "A set of keybindings for Evil mode" tar ((:commit . "0df5c4815d7be01ab52e9f957c56e6318c871217") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "evil" "tools") (:url . "https://github.com/emacs-evil/evil-collection"))])
- (evil-commentary . [(20210210 1702) ((evil (1 0 0))) "Comment stuff out. A port of vim-commentary." tar ((:commit . "ca182e27156198db533bf6d48b7e5f6f54081397") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:keywords "evil" "comment" "commentary" "evil-commentary") (:url . "http://github.com/linktohack/evil-commentary"))])
- (evil-dvorak . [(20160416 1841) ((evil (1 0 8))) "evil keybindings for that work with dvorak mode" tar ((:commit . "e7b80077d6f332452049eb3d7ea51f6c8fbf5947") (:authors ("Joshua Branson")) (:maintainer "Joshua Branson") (:keywords "dvorak" "evil" "vim"))])
- (evil-easymotion . [(20200424 135) ((emacs (24)) (avy (0 3 0)) (cl-lib (0 5))) "A port of vim's easymotion to emacs" single ((:commit . "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience" "evil") (:url . "https://github.com/pythonnut/evil-easymotion"))])
- (evil-embrace . [(20220211 606) ((emacs (24 4)) (embrace (0 1 0)) (evil-surround (0))) "Evil integration of embrace.el" single ((:commit . "7b5a539cfe7db238d860122c793a0cb2d329cc6e") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (evil-escape . [(20221010 2116) ((emacs (24)) (evil (1 0 9)) (cl-lib (0 5))) "Escape from anything with a customizable key sequence" single ((:commit . "3c335a5709b1abb08687960038746b36add465f9") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:keywords "convenience" "editing" "evil") (:url . "https://github.com/emacsorphanage/evil-escape"))])
- (evil-ex-fasd . [(20180903 612) ((emacs (24 4)) (evil (1 1 0)) (fasd (0))) "using fasd right from evil-ex" single ((:commit . "ed8fbbe23a8a268d9dcbf1a6132e928ba2c655c5") (:authors ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainers ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainer "Rashawn Zhang" . "namy.19@gmail.com") (:keywords "tools" "fasd" "evil" "navigation") (:url . "https://github.com/yqrashawn/evil-ex-fasd"))])
- (evil-ex-shell-command . [(20181226 226) ((emacs (24 4)) (evil (1 1 0))) "invoke shell-command right from evil-ex" single ((:commit . "a6ca6d27c07f6a0807abfb5b8f8865f1d17f54aa") (:authors ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainers ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainer "Rashawn Zhang" . "namy.19@gmail.com") (:keywords "tools" "shell-command" "evil") (:url . "https://github.com/yqrashawn/evil-ex-shell-command"))])
- (evil-exchange . [(20200118 252) ((evil (1 2 8)) (cl-lib (0 3))) "Exchange text more easily within Evil" single ((:commit . "3030e21ee16a42dfce7f7cf86147b778b3f5d8c1") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:keywords "evil" "plugin") (:url . "http://github.com/Dewdrops/evil-exchange"))])
- (evil-expat . [(20190521 714) ((emacs (24 3)) (evil (1 0 0))) "Evil ex commands" single ((:commit . "f4fcd0aa3edc359adb5c986b5dd9188d220d84e2") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainers ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com") (:keywords "emulations" "evil" "vim") (:url . "http://github.com/edkolev/evil-expat"))])
- (evil-extra-operator . [(20210225 1239) ((evil (1 0 7))) "Evil operator for evaluating codes, taking notes, searching via google, etc." single ((:commit . "49c2dae224705f05dcfa03868b9fbbb72f2b5a8d") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:keywords "evil" "plugin") (:url . "http://github.com/Dewdrops/evil-extra-operator"))])
- (evil-find-char-pinyin . [(20160514 2041) ((evil (1 2 12)) (pinyinlib (0 1 0))) "Evil's f/F/t/T/evil-snipe commands with Pinyin support" single ((:commit . "04e277946d658f1a73c68dcbbadea9c21097a31c") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (evil-fringe-mark . [(20190320 453) ((emacs (24 3)) (evil (1 0 0)) (fringe-helper (0 1 1)) (goto-chg (1 6))) "Display evil-mode marks in the fringe" tar ((:commit . "a1689fddb7ee79aaa720a77aada1208b8afd5c20") (:authors ("Andrew Smith" . "andy.bill.smith@gmail.com")) (:maintainers ("Andrew Smith" . "andy.bill.smith@gmail.com")) (:maintainer "Andrew Smith" . "andy.bill.smith@gmail.com") (:url . "https://github.com/Andrew-William-Smith/evil-fringe-mark"))])
- (evil-god-state . [(20141117 255) ((evil (1 0 8)) (god-mode (2 12 0))) "use god-mode keybindings in evil-mode" single ((:commit . "3d44197dc0a1fb40e7b7ff8717f8a8c339ce1d40") (:authors ("Eric Seidel")) (:maintainers ("Eric Seidel")) (:maintainer "Eric Seidel") (:keywords "evil" "leader" "god-mode") (:url . "https://github.com/gridaphobe/evil-god-state"))])
- (evil-goggles . [(20220112 1302) ((emacs (24 4)) (evil (1 0 0))) "Add a visual hint to evil operations" single ((:commit . "1b66053ea5f06b08a52bebdd42bffd8eff82032b") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainers ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com") (:keywords "emulations" "evil" "vim" "visual") (:url . "http://github.com/edkolev/evil-goggles"))])
- (evil-iedit-state . [(20220219 1432) ((evil (1 0 9)) (iedit (0 9 9 9))) "Evil states to interface iedit mode." single ((:commit . "44c64c71692e5b2f608ad3e3c537ec0a0e0ea0f8") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:keywords "convenience" "editing" "evil" "iedit" "mnemonic") (:url . "https://github.com/syl20bnr/evil-iedit-state"))])
- (evil-indent-plus . [(20220106 931) ((evil (0)) (cl-lib (0 5))) "Evil textobjects based on indentation" single ((:commit . "b4dacbfdb57f474f798bfbf5026d434d549eb65c") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainers ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:keywords "convenience" "evil") (:url . "http://github.com/TheBB/evil-indent-plus"))])
- (evil-indent-textobject . [(20130831 2219) ((evil (0))) "evil textobjects based on indentation" single ((:commit . "70a1154a531b7cfdbb9a31d6922482791e20a3a7") (:authors ("Michael Markert" . "markert.michael@gmail.com")) (:maintainers ("Michael Markert" . "markert.michael@gmail.com")) (:maintainer "Michael Markert" . "markert.michael@gmail.com") (:keywords "convenience" "evil") (:url . "http://github.com/cofi/evil-indent-textobject"))])
- (evil-leader . [(20140606 1243) ((evil (0))) "let there be <leader>" single ((:commit . "39f7014bcf8b36463e0c7512c638bda4bac6c2cf") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainers ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainer "Michael Markert" . "markert.michael@googlemail.com") (:keywords "evil" "vim-emulation" "leader") (:url . "http://github.com/cofi/evil-leader"))])
- (evil-ledger . [(20180802 1612) ((emacs (24 4)) (evil (1 2 12)) (ledger-mode (0))) "Make `ledger-mode' more `evil'." single ((:commit . "7a9f9f5d39c42fffdba8004f8982642351f2b233") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainers ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com") (:keywords "convenience" "evil" "languages" "ledger" "vim-emulation") (:url . "https://github.com/atheriel/evil-ledger"))])
- (evil-lion . [(20220317 1030) ((emacs (24 3)) (evil (1 0 0))) "Evil align operator, port of vim-lion" single ((:commit . "4da660e124731ed65e7aaa6c067c30e876619429") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainers ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com") (:keywords "emulations" "evil" "vim") (:url . "http://github.com/edkolev/evil-lion"))])
- (evil-lisp-state . [(20160404 248) ((evil (1 0 9)) (bind-map (0)) (smartparens (1 6 1))) "An evil state to edit Lisp code" single ((:commit . "3c65fecd9917a41eaf6460f22187e2323821f3ce") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:keywords "convenience" "editing" "evil" "smartparens" "lisp" "mnemonic") (:url . "https://github.com/syl20bnr/evil-lisp-state"))])
- (evil-lispy . [(20190502 739) ((lispy (0 26 0)) (evil (1 2 12)) (hydra (0 13 5))) "precision Lisp editing with Evil and Lispy" tar ((:commit . "ed317f7fccbdbeea8aa04a91b1b1f48a0e2ddc4e") (:authors ("Brandon Carrell <brandoncarrell@gmail.com>, Mika Vilpas" . "mika.vilpas@gmail.com")) (:maintainers ("Brandon Carrell <brandoncarrell@gmail.com>, Mika Vilpas" . "mika.vilpas@gmail.com")) (:maintainer "Brandon Carrell <brandoncarrell@gmail.com>, Mika Vilpas" . "mika.vilpas@gmail.com") (:keywords "lisp") (:url . "https://github.com/sp3ctum/evil-lispy"))])
- (evil-mark-replace . [(20200630 940) ((evil (1 14 0))) "replace the thing in marked area" single ((:commit . "d4fec7b10e93cca149163324cd2b2b2dcc211047") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "convenience") (:url . "http://github.com/redguardtoo/evil-mark-replace"))])
- (evil-matchit . [(20230325 618) ((emacs (25 1))) "Vim matchit ported to Evil" tar ((:commit . "3b12ed55d67bb70e8957c0c7fdad4ab4ad79eb2f") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "matchit" "vim" "evil") (:url . "http://github.com/redguardtoo/evil-matchit"))])
- (evil-mc . [(20220118 122) ((emacs (24 3)) (evil (1 2 14)) (cl-lib (0 5))) "Multiple cursors for evil-mode" tar ((:commit . "63fd2fe0c213a4cc31c464d246f92931c4cb720f") (:authors ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainers ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainer "Gabriel Adomnicai" . "gabesoft@gmail.com") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc") (:url . "https://github.com/gabesoft/evil-mc"))])
- (evil-mc-extras . [(20170202 1649) ((emacs (24 3)) (evil (1 2 12)) (cl-lib (0 5)) (evil-mc (0 0 2)) (evil-numbers (0 4))) "Extra functionality for evil-mc" tar ((:commit . "ba3252ae129c3b79aeb70ec3d276cbda32b00421") (:authors ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainers ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainer "Gabriel Adomnicai" . "gabesoft@gmail.com") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc-extras") (:url . "https://github.com/gabesoft/evil-mc-extras"))])
- (evil-mu4e . [(20180613 1039) ((emacs (24 4)) (evil (1 2 10))) "evil-based key bindings for mu4e" single ((:commit . "f4b387ccbd2c49f3bbb5401e93bfcc050ca128ef") (:authors ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainers ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainer "Joris Engbers" . "info@jorisengbers.nl") (:url . "https://github.com/JorisE/evil-mu4e"))])
- (evil-multiedit . [(20211121 1650) ((emacs (25 1)) (evil (1 14 0)) (iedit (0 9 9)) (cl-lib (0 5))) "multiple cursors for evil-mode" single ((:commit . "23b53bc8743fb82a8854ba907b1d277374c93a79") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io") (:keywords "multiple cursors" "editing" "iedit") (:url . "https://github.com/hlissner/evil-multiedit"))])
- (evil-nerd-commenter . [(20221207 1245) ((emacs (26 1))) "Comment/uncomment lines efficiently. Like Nerd Commenter in Vim" tar ((:commit . "8c0f23d46a3927b9f83c1c2c4590be53d0b740db") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "convenience" "evil") (:url . "http://github.com/redguardtoo/evil-nerd-commenter"))])
- (evil-nl-break-undo . [(20181125 2054) nil "Break evil's undo sequence on CR" single ((:commit . "8acaecadd32937f6f1d8c3f8141fcee0de7d324e") (:authors ("VanLaser" . "Gabriel.Lazar@com.utcluj.ro")) (:maintainers ("VanLaser" . "Gabriel.Lazar@com.utcluj.ro")) (:maintainer "VanLaser" . "Gabriel.Lazar@com.utcluj.ro") (:url . "https://github.com/VanLaser/evil-nl-break-undo"))])
- (evil-numbers . [(20230117 53) ((emacs (24 1)) (evil (1 2 0))) "Increment/decrement numbers like in VIM" single ((:commit . "8724645c84dc310f6155eec452913bb79c0c44b3") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainers ("Julia Path" . "julia@jpath.de")) (:maintainer "Julia Path" . "julia@jpath.de") (:keywords "convenience" "tools") (:url . "http://github.com/juliapath/evil-numbers"))])
- (evil-opener . [(20161207 1810) ((evil (1 2 12)) (opener (0 2 2))) "opening urls as buffers in evil" tar ((:commit . "c384f67278046fdcd220275fdd212ab85672cbeb") (:authors ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainers ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainer "Tim Reddehase" . "tr@rightsrestricted.com") (:keywords "url" "http" "files") (:url . "https://github.com/0robustus1/opener.el"))])
- (evil-org . [(20221001 2335) ((emacs (24 4)) (evil (1 0))) "evil keybindings for org-mode" tar ((:commit . "b1f309726b1326e1a103742524ec331789f2bf94") (:maintainers ("Somelauw")) (:maintainer "Somelauw") (:keywords "evil" "vim-emulation" "org-mode" "key-bindings" "presets") (:url . "https://github.com/Somelauw/evil-org-mode.git"))])
- (evil-owl . [(20210416 1700) ((emacs (25 1)) (evil (1 2 13))) "Preview evil registers and marks before using them" single ((:commit . "a41a6d28e26052b25f3d21da37ccf1d8fde1e6aa") (:authors ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainers ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainer "Daniel Phan" . "daniel.phan36@gmail.com") (:keywords "emulations" "evil" "visual") (:url . "https://github.com/mamapanda/evil-owl"))])
- (evil-paredit . [(20150413 2048) ((evil (1 0 9)) (paredit (25 -2))) "Paredit support for evil keybindings" single ((:commit . "e058fbdcf9dbf7ad6cc77f0172d7517ef233d55f") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") (:keywords "paredit" "evil") (:url . "https://github.com/roman/evil-paredit"))])
- (evil-pinyin . [(20200927 849) ((emacs (25)) (names (0 5)) (evil (1))) "Evil search Chinese characters by pinyin" tar ((:commit . "3e9e501ded86f88e01a4edec5d526ab0fab879d7") (:keywords "extensions") (:url . "https://github.com/laishulu/evil-pinyin"))])
- (evil-python-movement . [(20180724 1420) ((emacs (25 1)) (cl-lib (0 5)) (dash (2 13 0)) (evil (1 0)) (s (1 12 0))) "Port Neovim's python movement to Evil" single ((:commit . "9936b3b7f8d96415d517c1f3604637889484a637") (:authors ("Felipe Lema <felipelema en mortemale punto org>")) (:maintainers ("Felipe Lema <felipelema en mortemale punto org>")) (:maintainer "Felipe Lema <felipelema en mortemale punto org>") (:url . "https://bitbucket.org/FelipeLema/evil-python-movement.el/"))])
- (evil-quickscope . [(20160202 1924) ((evil (0))) "Highlight unique characters in words for f,F,t,T navigation" single ((:commit . "37a20e4c56c6058abf186ad4013c155e695e876f") (:authors ("Michael Chen" . "blorbx@gmail.com")) (:maintainers ("Michael Chen" . "blorbx@gmail.com")) (:maintainer "Michael Chen" . "blorbx@gmail.com") (:keywords "faces" "emulation" "vim" "evil") (:url . "http://github.com/blorbx/evil-quickscope"))])
- (evil-rails . [(20190512 1517) ((evil (1 0)) (projectile-rails (1 0))) "Rails support for Evil Mode" single ((:commit . "b0f1c5de6720714febeb76c4b569b71bb891938c") (:authors ("Antono Vasiljev" . "antono.vasiljev@gmail.com")) (:maintainers ("Antono Vasiljev" . "antono.vasiljev@gmail.com")) (:maintainer "Antono Vasiljev" . "antono.vasiljev@gmail.com") (:keywords "ruby" "rails" "vim" "project" "convenience" "web" "evil" "projectile") (:url . "https://github.com/antono/evil-rails"))])
- (evil-replace-with-char . [(20180324 2206) ((evil (1 2 13)) (emacs (24))) "replace chars of a text object with a char" single ((:commit . "ed4a12d5bff11163eb03ad2826c52fd30f51a8d3") (:authors ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainers ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainer "Filipe Silva" . "filipe.silva@gmail.com") (:url . "https://github.com/ninrod/evil-replace-with-char"))])
- (evil-replace-with-register . [(20170713 925) ((evil (1 0 8))) "Port of vim plugin ReplaceWithRegister" single ((:commit . "91cc7bf21a94703c441cc9212214075b226b7f67") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:keywords "evil" "plugin") (:url . "https://github.com/Dewdrops/evil-ReplaceWithRegister"))])
- (evil-rsi . [(20160221 2104) ((evil (1 0 0))) "Use emacs motion keys in evil, inspired by vim-rsi" single ((:commit . "236bf6ed1e2285698db808463e5f2f69f5f5e7c0") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:keywords "evil" "rsi" "evil-rsi") (:url . "http://github.com/linktohack/evil-rsi"))])
- (evil-ruby-text-objects . [(20221130 1832) ((emacs (25 1)) (evil (1 2 0))) "Evil text objects for Ruby code" single ((:commit . "41c8b3eddb610206626a8a03e69857f903209e86") (:authors ("Sergio Gil" . "sgilperez@gmail.com")) (:maintainers ("Sergio Gil" . "sgilperez@gmail.com")) (:maintainer "Sergio Gil" . "sgilperez@gmail.com") (:keywords "languages") (:url . "https://github.com/porras/evil-ruby-text-objects"))])
- (evil-search-highlight-persist . [(20170523 334) ((highlight (0))) "Persistent highlights after search" single ((:commit . "6e04a8c075f5fd62526d222447048faab8bfa187") (:authors ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainers ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainer "Juanjo Alvarez" . "juanjo@juanjoalvarez.net"))])
- (evil-smartparens . [(20171210 1513) ((evil (1 0)) (emacs (24 4)) (smartparens (1 10 1))) "Evil support for smartparens" single ((:commit . "026d4a3cfce415a4dfae1457f871b385386e61d3") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainers ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com") (:keywords "evil" "smartparens") (:url . "https://www.github.com/expez/evil-smartparens"))])
- (evil-snipe . [(20220428 1432) ((emacs (24 4)) (evil (1 2 12)) (cl-lib (0 5))) "emulate vim-sneak & vim-seek" single ((:commit . "c07788c35cf8cd8e652a494322fdc0643e30a89f") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io") (:keywords "emulation" "vim" "evil" "sneak" "seek") (:url . "https://github.com/hlissner/evil-snipe"))])
- (evil-space . [(20151208 1228) ((evil (1 0 0))) "Repeat motion in Evil. Correct the behaviour of what SPC should do." single ((:commit . "a9c07284d308425deee134c9d88a2d538dd229e6") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:keywords "space" "repeat" "motion") (:url . "http://github.com/linktohack/evil-space"))])
- (evil-string-inflection . [(20200524 1402) ((emacs (24)) (evil (1 2 13)) (string-inflection (1 0 6))) "snake_case -> CamelCase -> etc. for text objects" single ((:commit . "d22a90ab807afa7f27f3815b5b5ea47d52d05218") (:authors ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainers ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainer "Filipe Silva" . "filipe.silva@gmail.com") (:url . "https://github.com/ninrod/evil-string-inflection"))])
- (evil-surround . [(20221229 1650) ((evil (1 2 12))) "emulate surround.vim from Vim" single ((:commit . "f273821f575ace519066fb106ee45a5b8577475f") (:authors ("Tim Harper <timcharper at gmail dot com>") ("Vegard Øye <vegard_oye at hotmail dot com>")) (:maintainers ("Tom Dalziel" . "tom.dalziel@gmail.com")) (:maintainer "Tom Dalziel" . "tom.dalziel@gmail.com") (:keywords "emulation" "vi" "evil"))])
- (evil-swap-keys . [(20191105 1426) ((emacs (24 4))) "Intelligently swap keys on text input with evil" single ((:commit . "b5ef105499f998b5667da40da30c073229a213ea") (:authors ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "Wouter Bolsterlee" . "wouter@bolsterl.ee") (:keywords "convenience" "data" "languages" "tools") (:url . "https://github.com/wbolster/evil-swap-keys"))])
- (evil-tabs . [(20160217 1520) ((evil (0 0 0)) (elscreen (0 0 0))) "Integrating Vim-style tabs for Evil mode users." single ((:commit . "53d3314a810017b6056ab6796aef671f5ea1c063") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:keywords "evil" "tab" "tabs" "vim") (:url . "https://github.com/krisajenkins/evil-tabs"))])
- (evil-terminal-cursor-changer . [(20220628 1831) nil "Change cursor shape and color by evil state in terminal" single ((:commit . "12ea9c0438c67e560b3866dc78b5c7d1d93f8cc5") (:authors ("7696122")) (:maintainers ("7696122")) (:maintainer "7696122") (:keywords "evil" "terminal" "cursor") (:url . "https://github.com/7696122/evil-terminal-cursor-changer"))])
- (evil-test-helpers . [(20220425 2132) ((evil (1 15 0))) "unit test helpers for Evil" single ((:commit . "008a6cdb12f15e748979a7d1c2f26c34c84dedbf") (:authors ("Vegard Øye <vegard_oye at hotmail.com>")) (:maintainers ("Vegard Øye <vegard_oye at hotmail.com>")) (:maintainer "Vegard Øye <vegard_oye at hotmail.com>"))])
- (evil-tex . [(20221127 2033) ((emacs (26 1)) (evil (1 0)) (auctex (11 88))) "Useful features for editing LaTeX in evil-mode" single ((:commit . "3e0a26b91a1a56b0f35cbd450d01431057551750") (:keywords "tex" "emulation" "vi" "evil" "wp") (:url . "https://github.com/iyefrat/evil-tex"))])
- (evil-text-object-python . [(20191010 1328) ((emacs (25)) (evil (1 2 14)) (dash (2 16 0))) "Python specific evil text objects" single ((:commit . "39d22fc524f0413763f291267eaab7f4e7984318") (:authors ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("Wouter Bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "Wouter Bolsterlee" . "wouter@bolsterl.ee") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/wbolster/evil-text-object-python"))])
- (evil-textobj-anyblock . [(20170905 1907) ((cl-lib (0 5)) (evil (1 1 0))) "Textobject for the closest user-defined blocks." single ((:commit . "ff00980f0634f95bf2ad9956b615a155ea8743be") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainers ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org") (:keywords "evil") (:url . "https://github.com/noctuid/evil-textobj-anyblock"))])
- (evil-textobj-column . [(20170905 1905) ((names (0 5)) (emacs (24)) (evil (0))) "Provides column text objects." single ((:commit . "835d7036d0bc9a6e44fc9b7c54ccf2a7c01428cd") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainers ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org") (:keywords "evil" "column" "text-object") (:url . "https://github.com/noctuid/evil-textobj-column"))])
- (evil-textobj-entire . [(20150422 1254) ((emacs (24)) (evil (1 0 0))) "text object for entire lines of buffer for evil" single ((:commit . "5b3a98f3a69edc3a788f539f6ffef4a0ef5e853d") (:authors ("supermomonga")) (:maintainers ("supermomonga")) (:maintainer "supermomonga") (:keywords "convenience" "emulations") (:url . "https://github.com/supermomonga/evil-textobj-entire"))])
- (evil-textobj-line . [(20211101 1429) ((evil (1 0 0))) "Line text object for Evil" single ((:commit . "9eaf9a5485c2b5c05e16552b34632ca520cd681d") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com"))])
- (evil-textobj-syntax . [(20181210 1213) ((names (0 5)) (emacs (24)) (evil (0))) "Provides syntax text objects." single ((:commit . "2d9ba8c75c754b409aea7469f46a5cfa52a872f3") (:keywords "evil" "syntax" "highlight" "text-object") (:url . "https://github.com/laishulu/evil-textobj-syntax"))])
- (evil-textobj-tree-sitter . [(20230506 937) ((emacs (25 1)) (tree-sitter (0 15 0))) "Provides evil textobjects using tree-sitter" tar ((:commit . "9cd23a7aae91f07e26ea45912f4d351b5660a7fc") (:keywords "evil" "tree-sitter" "text-object" "convenience") (:url . "https://github.com/meain/evil-textobj-tree-sitter"))])
- (evil-traces . [(20191214 558) ((emacs (25 1)) (evil (1 2 13))) "Visual hints for `evil-ex'" single ((:commit . "05e201cd63b549e3c88b5c3fc9b264bd6fe5a42c") (:authors ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainers ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainer "Daniel Phan" . "daniel.phan36@gmail.com") (:keywords "emulations" "evil" "visual") (:url . "https://github.com/mamapanda/evil-traces"))])
- (evil-tree-edit . [(20230419 1753) ((emacs (27 1)) (tree-edit (0 1 0)) (tree-sitter (0 15 0)) (evil (1 0 0)) (avy (0 5 0)) (s (0 0 0))) "Evil structural editing for any language!" single ((:commit . "96631e26d96645172934011abb2a53ab1e5861d4") (:authors ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainers ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainer "Ethan Leba" . "ethanleba5@gmail.com") (:url . "https://github.com/ethan-leba/tree-edit"))])
- (evil-tutor . [(20150103 653) ((evil (1 0 9))) "Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "909273bac88b98a565f1b89bbb13d523b7edce2b") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:keywords "convenience" "editing" "evil") (:url . "https://github.com/syl20bnr/evil-tutor"))])
- (evil-tutor-ja . [(20160917 132) ((evil (1 0 9)) (evil-tutor (0 1))) "Japanese Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "06b9ad853a15ce6f2c53c2cf379b9ff358369f2d") (:authors ("Kenji Miyazaki" . "kenjizmyzk@gmail.com")) (:maintainers ("Kenji Miyazaki" . "kenjizmyzk@gmail.com")) (:maintainer "Kenji Miyazaki" . "kenjizmyzk@gmail.com") (:keywords "convenience" "editing" "evil" "japanese") (:url . "https://github.com/kenjimyzk/evil-tutor-ja"))])
- (evil-vimish-fold . [(20200122 117) ((emacs (24 4)) (evil (1 0 0)) (vimish-fold (0 2 0))) "Integrate vimish-fold with evil" single ((:commit . "b6e0e6b91b8cd047e80debef1a536d9d49eef31a") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/evil-vimish-fold"))])
- (evil-visual-mark-mode . [(20230202 318) ((evil (1 0 9)) (dash (2 10))) "Display evil marks on buffer" single ((:commit . "2bbaaae56ae53e68a8bcc7bc2cfe830a14843b4d") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") (:keywords "evil"))])
- (evil-visual-replace . [(20171016 613) ((evil (1 0 0))) "search/replace commands for evil visual state, inc. blocks" single ((:commit . "163fc827a1ffc106475da470c37fb26f4cc9b008") (:authors ("Troy Pracy")) (:maintainers ("Troy Pracy")) (:maintainer "Troy Pracy") (:keywords "evil" "search" "replace" "regexp" "block" "rectangular" "region" "visual") (:url . "https://github.com/troyp/evil-visual-replace"))])
- (evil-visualstar . [(20160223 48) ((evil (0))) "Starts a * or # search from the visual selection" single ((:commit . "06c053d8f7381f91c53311b1234872ca96ced752") (:authors ("Bailey Ling")) (:maintainers ("Bailey Ling")) (:maintainer "Bailey Ling") (:keywords "evil" "vim" "visualstar") (:url . "https://github.com/bling/evil-visualstar"))])
- (evm . [(20141007 1156) ((dash (2 3 0)) (f (0 13 0))) "Emacs Version Manager" single ((:commit . "d0623b2355436a5fd9f7238b419782080c79196b") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/evm"))])
- (evm-mode . [(20220911 1647) nil "Major mode for editing Ethereum EVM bytecode" single ((:commit . "422b65cfd04854072bf6b9238c49e3d40577ef98") (:authors ("Ta Quang Trung")) (:maintainers ("Ta Quang Trung")) (:maintainer "Ta Quang Trung") (:keywords "languages") (:url . "https://github.com/taquangtrung/emacs-evm-mode"))])
- (ewal . [(20200305 230) ((emacs (25 1))) "A pywal-based theme generator" tar ((:commit . "4ecc355dae9c7d648cd2874e01a15dfa02b9350d") (:authors ("Uros Perisic")) (:maintainers ("Uros Perisic")) (:maintainer "Uros Perisic") (:keywords "faces") (:url . "https://gitlab.com/jjzmajic/ewal"))])
- (ewal-doom-themes . [(20200922 325) ((emacs (25)) (ewal (0 1)) (doom-themes (0 1))) "Dread the colors of darkness" tar ((:commit . "e2a04f5c97b7d5e087af26e646c0b45a24522e56") (:authors ("Uros Perisic")) (:maintainers ("Uros Perisic")) (:maintainer "Uros Perisic") (:keywords "faces") (:url . "https://gitlab.com/jjzmajic/ewal"))])
- (ewal-evil-cursors . [(20200301 839) ((emacs (25)) (ewal (0 1))) "`ewal'-colored evil cursor for Emacs and Spacemacs" single ((:commit . "732a2f4abb480f9f5a3249af822d8eb1e90324e3") (:authors ("Uros Perisic")) (:maintainers ("Uros Perisic")) (:maintainer "Uros Perisic") (:keywords "faces") (:url . "https://gitlab.com/jjzmajic/ewal"))])
- (ewal-spacemacs-themes . [(20230505 609) ((emacs (25)) (ewal (0 1)) (spacemacs-theme (0 1))) "Ride the rainbow spaceship" tar ((:commit . "0d245edcfcd9cc5766d37b270214fb9da9b4336d") (:authors ("Uros Perisic")) (:maintainers ("Uros Perisic")) (:maintainer "Uros Perisic") (:keywords "faces") (:url . "https://gitlab.com/jjzmajic/ewal"))])
- (ewmctrl . [(20170922 217) nil "Use `wmctrl' to manage desktop windows via EWMH/NetWM." single ((:commit . "3d0217c4d6cdb5c308b6cb4293574f470d4faacf") (:authors ("Alexis" . "flexibeast@gmail.com") ("Adam Plaice" . "plaice.adam@gmail.com")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:keywords "desktop" "windows" "ewmh" "netwm") (:url . "https://github.com/flexibeast/ewmctrl"))])
- (eww-lnum . [(20150102 1512) nil "Conkeror-like functionality for eww" single ((:commit . "4b0ecec769919ecb05ca4fb15ec51911ba589929") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainers ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:keywords "eww" "browse" "conkeror") (:url . "https://github.com/m00natic/eww-lnum"))])
- (exato . [(20200524 1319) ((evil (1 2 13)) (emacs (24))) "EXATO: Evil XML/HTML Attributes Text Object" single ((:commit . "5e7b5721bf48aa49c6cdb5d41b908ef7d513b2a8") (:authors ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainers ("Filipe Silva" . "filipe.silva@gmail.com")) (:maintainer "Filipe Silva" . "filipe.silva@gmail.com") (:url . "https://github.com/ninrod/exato"))])
- (exec-path-from-shell . [(20220826 1535) ((emacs (24 1)) (cl-lib (0 6))) "Get environment variables such as $PATH from the shell" single ((:commit . "dff9ce3577bf3f2938d9bde8ec8aa4fef3b061f3") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "unix" "environment") (:url . "https://github.com/purcell/exec-path-from-shell"))])
- (execline . [(20190711 2010) ((emacs (26 1)) (s (1 6 0))) "Major mode for editing execline scripts" single ((:commit . "c75dd9b2c54d8e59fc35fd4bd98d8e213948a3f5") (:authors ("Dmitry Bogatov" . "KAction@debian.org")) (:maintainers ("Dmitry Bogatov" . "KAction@debian.org")) (:maintainer "Dmitry Bogatov" . "KAction@debian.org") (:keywords "tools" "unix" "languages") (:url . "https://gitlab.com/KAction/emacs-execline"))])
- (exercism . [(20230313 2027) ((emacs (27 1)) (dash (2 19 1)) (a (1 0 0)) (s (1 13 1)) (request (0 3 2)) (async (1 9 6)) (async-await (1 1)) (persist (0 5)) (transient (0 3 7))) "Unofficial https://exercism.org integration" single ((:commit . "1dfee3d12e4bf76647bcaed7ccf36fb0815f068f") (:authors ("Rafael Nicdao <https://github.com/anonimito>")) (:maintainers ("Rafael Nicdao" . "nicdaoraf@gmail.com")) (:maintainer "Rafael Nicdao" . "nicdaoraf@gmail.com") (:keywords "exercism" "convenience") (:url . "https://github.com/anonimitoraf/exercism.el"))])
- (exiftool . [(20190520 1106) ((emacs (25))) "Elisp wrapper around ExifTool" single ((:commit . "e043df1bcef40cd5934a74c210e1e35d5eb0e5a6") (:authors ("Arun I" . "arunisaac@systemreboot.net")) (:maintainers ("Arun I" . "arunisaac@systemreboot.net")) (:maintainer "Arun I" . "arunisaac@systemreboot.net") (:keywords "data") (:url . "https://git.systemreboot.net/exiftool.el"))])
- (exotica-theme . [(20180212 2329) ((emacs (24))) "A dark theme with vibrant colors" single ((:commit . "ff3ef4f6fa38c93b99becad977c7810c990a4d2f") (:authors ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainers ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainer "Bharat Joshi" . "jbharat@outlook.com") (:keywords "faces" "theme" "dark" "vibrant colors") (:url . "https://github.com/jbharat/exotica-theme"))])
- (expand-line . [(20151006 207) nil "Expand selection by line" single ((:commit . "75a5d0241f35dd0748ab8ecb4ff16891535be372") (:authors ("Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Kai Yu" . "yeannylam@gmail.com"))])
- (expand-region . [(20221030 957) nil "Increase selected region by semantic units." tar ((:commit . "b70feaa644310dc2d599dc277cd20a1f2b6446ac") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "marking" "region"))])
- (expenses . [(20230503 622) ((emacs (28 1)) (dash (2 19 1)) (ht (2 3))) "Record and view expenses" tar ((:commit . "4b3e5839cb70e44bb6db20b2826c4cb41d01c33f") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com") (:keywords "expense tracking" "convenience") (:url . "https://github.com/md-arif-shaikh/expenses"))])
- (express . [(20140508 2041) ((string-utils (0 3 2))) "Alternatives to `message'" single ((:commit . "6c301e8a4b6b58a5fe59ba607865238e38cee8fd") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions" "message" "interface") (:url . "http://github.com/rolandwalker/express"))])
- (exsqlaim-mode . [(20170607 1003) ((s (1 10 0))) "Use variables inside sql queries" single ((:commit . "a2e0a62ec8b87193d8eaa695774bfd689324b06c") (:authors ("Ahmad Nazir Raja" . "ahmadnazir@gmail.com")) (:maintainers ("Ahmad Nazir Raja" . "ahmadnazir@gmail.com")) (:maintainer "Ahmad Nazir Raja" . "ahmadnazir@gmail.com") (:url . "https://github.com/ahmadnazir/exsqlaim-mode"))])
- (extempore-mode . [(20220704 2241) ((emacs (24 4))) "Emacs major mode for Extempore source files" single ((:commit . "92e0fff482a0a4dc2971c39581c5ea9e84ae5e1c") (:authors ("Ben Swift" . "ben@benswift.me")) (:maintainers ("Ben Swift" . "ben@benswift.me")) (:maintainer "Ben Swift" . "ben@benswift.me") (:keywords "extempore") (:url . "http://github.com/extemporelang/extempore-emacs-mode"))])
- (extend-dnd . [(20151122 1850) nil "R drag and Drop" tar ((:commit . "80c966c93b82c9bb5c6225a432557c39144fc602") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "extend" "drag and drop") (:url . "https://github.com/mlf176f2/extend-dnd"))])
- (external-dict . [(20230313 118) ((emacs (25 1))) "Query external dictionary like goldendict, Bob.app etc" single ((:commit . "7ef87709c09792dfa6332fb41a6ec1edd917120a") (:keywords "wp" "processes") (:url . "https://repo.or.cz/external-dict.el.git"))])
- (extmap . [(20211023 1904) ((emacs (24 1))) "Externally-stored constant mapping for Elisp" single ((:commit . "5875a4ab27831eb81af6246b12a174c765d52a78") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:keywords "lisp") (:url . "https://github.com/doublep/extmap"))])
- (exunit . [(20221019 1320) ((s (1 11 0)) (emacs (24 3)) (f (0 20 0)) (transient (0 3 6))) "ExUnit test runner" single ((:commit . "e0a8c2b81f3d53885ed753b911b3cb6ee9229bec") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "processes" "elixir" "exunit") (:url . "http://github.com/ananthakumaran/exunit.el"))])
- (exwm-edit . [(20220414 106) ((emacs (25 1))) "Edit mode for EXWM" single ((:commit . "b5b7e950f57e30befd68d51df34540b70e6ac28f") (:authors ("Ag Ibragimov")) (:maintainers ("Ag Ibragimov")) (:maintainer "Ag Ibragimov") (:keywords "convenience") (:url . "https://github.com/agzam/exwm-edit"))])
- (exwm-firefox-core . [(20190812 2110) ((emacs (24 4)) (exwm (0 16))) "Firefox hotkeys to functions" single ((:commit . "e2fe2a895e8f973307ef52f8c9976b26e701cbd0") (:authors ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainer "Sebastian WÃ¥linder" . "s.walinder@gmail.com") (:keywords "extensions") (:url . "https://github.com/walseb/exwm-firefox-core"))])
- (exwm-firefox-evil . [(20220318 1958) ((emacs (24 4)) (exwm (0 16)) (evil (1 0 0)) (exwm-firefox-core (1 0))) "evil-mode implementation of exwm-firefox-core" single ((:commit . "a377326e2e4ac386a0abb3fc9b1b356a0d955b61") (:authors ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainer "Sebastian WÃ¥linder" . "s.walinder@gmail.com") (:keywords "extensions") (:url . "https://github.com/walseb/exwm-firefox-evil"))])
- (exwm-float . [(20210207 2035) ((emacs (25 1)) (xelb (0 18)) (exwm (0 24)) (popwin (1 0 2))) "Convenient modes and bindings for floating EXWM frames" single ((:commit . "047c83aa6b54bfb6ca8cac4d3ea18542611cef77") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://gitlab.com/mtekman/exwm-float.el"))])
- (exwm-mff . [(20210603 1723) ((emacs (25 1))) "Mouse Follows Focus" single ((:commit . "89206f2e3189f589c27c56bd2b6203e906ee7100") (:authors ("Ian Eure" . "public@lowbar.fyi")) (:maintainers ("Ian Eure" . "public@lowbar.fyi")) (:maintainer "Ian Eure" . "public@lowbar.fyi") (:keywords "unix") (:url . "https://github.com/ieure/exwm-mff"))])
- (exwm-modeline . [(20230331 1747) ((emacs (27 1)) (exwm (0 26))) "A modeline segment for EXWM workspaces" single ((:commit . "852a88a58714e3e59675b79b185f036f7b0300e8") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/exwm-modeline"))])
- (exwm-surf . [(20171204 1140) ((emacs (24 4)) (exwm (0 16))) "Interface for Surf (surf.suckless.org) under exwm" single ((:commit . "6c17e2c1597fe4b7b454a1dac23b9127ac951e94") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net") (:keywords "extensions") (:url . "https://github.com/ecraven/exwm-surf"))])
- (exwm-x . [(20230119 624) ((cl-lib (0 5)) (async (1 6)) (exwm (0 22))) "A derivative wm based on EXWM (emacs x window manager)" tar ((:commit . "1e2bbfca872ad76eaa8f1c00d17762bed256881a") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "window-manager" "exwm") (:url . "https://github.com/tumashu/exwm-x"))])
- (eyebrowse . [(20201107 955) ((dash (2 7 0)) (emacs (24 3 1))) "Easy window config switching" single ((:commit . "bdc626f88ab8e3d88bf5bf2e929707606675ef92") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "convenience") (:url . "https://depp.brause.cc/eyebrowse"))])
- (eyebrowse-restore . [(20230312 1821) ((emacs (26 3)) (eyebrowse (0 7 8)) (dash (2 19 1)) (s (1 13 0))) "Persistent Eyebrowse for all frames" single ((:commit . "50e8a2cb3c4a64f7fadd0303d178de8a57bb37db") (:authors ("Jakub KadlÄík" . "frostyx@email.cz")) (:maintainers ("Jakub KadlÄík" . "frostyx@email.cz")) (:maintainer "Jakub KadlÄík" . "frostyx@email.cz") (:keywords "convenience" "eyebrowse" "helm" "persistent") (:url . "https://github.com/FrostyX/eyebrowse-restore"))])
- (eyuml . [(20141028 2227) ((request (0 2 0)) (s (1 8 0))) "Write textual uml diagram from emacs using yuml.me" single ((:commit . "2f259c201c6cc63ee608f75cd85c1ae27f9d2532") (:authors ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainers ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainer "Anthony HAMON" . "hamon.anth@gmail.com") (:keywords "uml") (:url . "http://github.com/antham/eyuml"))])
- (ez-query-replace . [(20210724 2247) ((dash (1 2 0)) (s (1 11 0))) "a smarter context-sensitive query-replace that can be reapplied" single ((:commit . "2b68472f4007a73908c3b242e83ac5a7587967ff") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))])
- (eziam-themes . [(20221121 1609) nil "The mostly monochrome Eziam theme family." tar ((:commit . "7fba717293072d0afdbd1c45351ddf47b26b3064") (:authors ("Thibault Polge" . "thibault@thb.lt")) (:maintainer "Thibault Polge" . "thibault@thb.lt") (:keywords "faces") (:url . "https://github.com/thblt/eziam-theme-emacs"))])
- (f . [(20230116 1032) ((emacs (24 1)) (s (1 7 0)) (dash (2 2 0))) "Modern API for working with files and directories" tar ((:commit . "8a70ba3002197e3c6421181492b60b37d4d4af7b") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainer "Lucien Cartier-Tilet" . "lucien@phundrak.com") (:keywords "files" "directories") (:url . "http://github.com/rejeep/f.el"))])
- (f3 . [(20180130 1158) ((emacs (24 3)) (helm (2 8 8)) (cl-lib (0 5))) "a helm interface to find" tar ((:commit . "000009ce4adf7a57eae80512f29c4ec2a1391ce5") (:authors ("Danny McClanahan")) (:maintainers ("Danny McClanahan")) (:maintainer "Danny McClanahan") (:keywords "find" "file" "files" "helm" "fast" "finder") (:url . "https://github.com/cosmicexplorer/f3"))])
- (fabric . [(20171116 656) nil "Launch Fabric using Emacs" tar ((:commit . "df79be341d0b34ed23850f9894136092fa5fea8c") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@chmouel.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@chmouel.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@chmouel.com") (:keywords "python" "fabric") (:url . "https://github.com/nlamirault/fabric.el"))])
- (face-explorer . [(20190517 1857) nil "Library and tools for faces and text properties" single ((:commit . "ad1300e13e5643e4c246cabfd91f833d39113052") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces") (:url . "https://github.com/Lindydancer/face-explorer"))])
- (faceup . [(20170925 1946) nil "Markup language for faces and font-lock regression testing" single ((:commit . "6c92dad56a133e14e7b27831e1bcf9b3a71ff154") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces" "languages") (:url . "https://github.com/Lindydancer/faceup"))])
- (factlog . [(20130210 140) ((deferred (0 3 1))) "File activity logger" single ((:commit . "38f78132ae311faffba98ed5dd18d661af68678e") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>") (:url . "https://github.com/tkf/factlog"))])
- (faff-theme . [(20220629 1216) nil "Light Emacs color theme on cornsilk3 background" single ((:commit . "5d3c7e2f32f4dcdb22865c385ec48ababe5f293a") (:authors ("James Ferguson <(concat \"wjcferguson\" at-sign \"gmail.com\")>")) (:maintainers ("James Ferguson <(concat \"wjcferguson\" at-sign \"gmail.com\")>")) (:maintainer "James Ferguson <(concat \"wjcferguson\" at-sign \"gmail.com\")>") (:keywords "color" "theme") (:url . "https://github.com/WJCFerguson/emacs-faff-theme"))])
- (fakir . [(20140729 1652) ((noflet (0 0 8)) (dash (1 3 2)) (kv (0 0 19))) "fakeing bits of Emacs" single ((:commit . "1fca406ad7de80fece6319ff75d4230b648534b0") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp" "tools") (:url . "http://github.com/nicferrier/emacs-fakir"))])
- (fancy-battery . [(20150101 1204) ((emacs (24 1))) "Fancy battery display" single ((:commit . "bcc2d7960ba207b5b4db96fe40f7d72670fdbb68") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "convenience" "tools" "hardware") (:url . "https://github.com/lunaryorn/fancy-battery.el"))])
- (fancy-compilation . [(20230223 2309) ((emacs (26 1))) "Enhanced compilation output" single ((:commit . "d5d790dee6b07f866d203c5c174440ec8a2b2215") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-fancy-compilation"))])
- (fancy-dabbrev . [(20220211 633) ((emacs (25 1)) (popup (0 5 3))) "Like dabbrev-expand with preview and popup menu" single ((:commit . "cf4a2f7e3e43e07ab9aa9db16532a21010e9fc8c") (:authors ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainers ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainer "Joel Rosdahl" . "joel@rosdahl.net") (:url . "https://github.com/jrosdahl/fancy-dabbrev"))])
- (fancy-narrow . [(20171031 16) nil "narrow-to-region with more eye candy." single ((:commit . "9f4a587f6a5a387271fb665e13f59d41fd42504c") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "faces" "convenience") (:url . "http://github.com/Bruce-Connor/fancy-narrow"))])
- (fantom-mode . [(20221227 218) ((emacs (24 3))) "A major mode for the Fantom programming language" single ((:commit . "51cd82d29a7dca7bfd043971ba1d0fd21ed11693") (:authors ("XXIV")) (:maintainers ("XXIV")) (:maintainer "XXIV") (:keywords "files" "fantom") (:url . "https://github.com/thechampagne/fantom-mode"))])
- (fantom-theme . [(20200328 604) ((emacs (24 1))) "Dark theme based on Phantom Code for VSCode" single ((:commit . "2c1c7fd53086c2ff86ee0961642c3b58e2343c08") (:authors ("Adam Svanberg")) (:maintainers ("Adam Svanberg")) (:maintainer "Adam Svanberg") (:url . "https://github.com/adsva/fantom-emacs-theme"))])
- (fanyi . [(20221117 1821) ((emacs (27 1)) (s (1 12 0))) "Not only English-Chinese translator" tar ((:commit . "7181af0d848226ecdb9f517d8e4cf219d00f9000") (:authors ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainers ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainer "Zhiwei Chen" . "condy0919@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/condy0919/fanyi.el"))])
- (farmhouse-themes . [(20221025 2054) nil "Farmhouse Themes, dark and light versions" tar ((:commit . "30c763d01611dad88f1a1ff88451431e2629016d") (:authors ("Matthew Lyon" . "matthew@lyonheart.us")) (:maintainers ("Matthew Lyon" . "matthew@lyonheart.us")) (:maintainer "Matthew Lyon" . "matthew@lyonheart.us"))])
- (fasd . [(20210104 738) nil "Emacs integration for the command-line productivity booster `fasd'" single ((:commit . "c1d92553f33ebb018135c698db1a6d7f86731a26") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "cli" "bash" "zsh" "autojump") (:url . "https://framagit.org/steckerhalter/emacs-fasd"))])
- (fast-scroll . [(20191016 327) ((emacs (25 1)) (cl-lib (0 6 1))) "Some utilities for faster scrolling over large buffers." single ((:commit . "3f6ca0d5556fe9795b74714304564f2295dcfa24") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "convenience" "fast" "scroll" "scrolling") (:url . "https://github.com/ahungry/fast-scroll"))])
- (fastdef . [(20160713 1329) ((ivy (0 7 0)) (w3m (0 0))) "Insert terminology from Google top search results" single ((:commit . "0696f41dc150d35ce31fe8d2ea74f4173818bb55") (:authors ("Chen Bin <chenin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenin DOT sh AT gmail DOT com>") (:keywords "terminology" "org-mode" "markdown") (:url . "http://github.com/redguardtoo/fastdef"))])
- (fastnav . [(20120211 1457) nil "Fast navigation and editing routines." single ((:commit . "1019ba2b61d1a070204099b23da347278a61bc89") (:authors ("Zsolt Terek" . "zsolt@google.com")) (:maintainers ("Zsolt Terek" . "zsolt@google.com")) (:maintainer "Zsolt Terek" . "zsolt@google.com") (:keywords "nav" "fast" "fastnav" "navigation"))])
- (faust-mode . [(20201004 1353) nil "Faust syntax colorizer for Emacs." single ((:commit . "2a56cda14b152d5471f21a5d82f23c141dc7134c") (:authors ("rukano" . "rukano@gmail.com")) (:maintainers ("Yassin Philip" . "xaccrocheur@gmail.com")) (:maintainer "Yassin Philip" . "xaccrocheur@gmail.com") (:keywords "languages" "faust") (:url . "https://github.com/rukano/emacs-faust-mode"))])
- (faustine . [(20171122 1202) ((emacs (24 3)) (faust-mode (0 3))) "Edit, visualize, build and run Faust code" single ((:commit . "07a38963111518f86123802f9d477be0d4689a3f") (:authors ("Yassin Philip" . "xaccrocheur@gmail.com")) (:maintainers ("Yassin Philip" . "xaccrocheur@gmail.com")) (:maintainer "Yassin Philip" . "xaccrocheur@gmail.com") (:keywords "languages" "faust") (:url . "https://bitbucket.org/yphil/faustine"))])
- (fb2-reader . [(20230305 2309) ((emacs (26 2)) (f (0 17)) (s (1 11 0)) (dash (2 12 0)) (visual-fill-column (2 2)) (async (1 9 4))) "Read FB2 and FB2.ZIP documents" single ((:commit . "9836db284749e0cef4c43c2cb5358c82ae9b8589") (:authors ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainers ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainer "Dmitriy Pshonko" . "jumper047@gmail.com") (:keywords "multimedia" "ebook" "fb2") (:url . "https://github.com/jumper047/fb2-reader"))])
- (fcitx . [(20190806 1923) nil "Make fcitx better in Emacs" single ((:commit . "12dc2638ddd15c8f6cfaecb20e1f428ab2bb5624") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/fcitx.el"))])
- (fcopy . [(20150304 1403) nil "Funny Copy, set past point HERE then search copy text" single ((:commit . "e355f6ec889d8ecbdb096019c2dc660b1cec4941") (:authors ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainers ("Masayuki Ataka" . "masayuki.ataka@gmail.com")) (:maintainer "Masayuki Ataka" . "masayuki.ataka@gmail.com") (:keywords "convenience") (:url . "https://github.com/ataka/fcopy"))])
- (fd-dired . [(20210723 549) ((emacs (25))) "find-dired alternative using fd" single ((:commit . "458464771bb220b6eb87ccfd4c985c436e57dc7e") (:authors ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainers ("Rashawn Zhang" . "namy.19@gmail.com")) (:maintainer "Rashawn Zhang" . "namy.19@gmail.com") (:keywords "tools" "fd" "find" "dired") (:url . "https://github.com/yqrashawn/fd-dired"))])
- (feather . [(20200321 1237) ((emacs (26 3)) (async (1 9)) (async-await (1 0)) (ppp (1 0)) (page-break-lines (0 1))) "Parallel thread modern package manager" tar ((:commit . "529b7ec69f1694d7dc8aacb5066cf4ddcf24cc58") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience" "package") (:url . "https://github.com/conao3/feather.el"))])
- (feature-mode . [(20220418 848) nil "Major mode for editing Gherkin (i.e. Cucumber) user stories" tar ((:commit . "e204d9e204b767cf95d6a051ff283f05dc51e9d3") (:authors ("Michael Klishin")) (:maintainer "Michael Klishin") (:url . "https://github.com/michaelklishin/cucumber.el"))])
- (feebleline . [(20190822 1401) nil "Replace modeline with a slimmer proxy" single ((:commit . "b2f2db25cac77817bf0c49ea2cea6383556faea0") (:authors ("Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com")) (:maintainers ("Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com")) (:maintainer "Benjamin Lindqvist" . "benjamin.lindqvist@gmail.com") (:url . "https://github.com/tautologyclub/feebleline"))])
- (feed-discovery . [(20200714 1118) ((emacs (25 1)) (dash (2 16 0))) "Discover feed url by RSS/Atom autodiscovery" single ((:commit . "3812439c845c184eaf164d3ac8935de135259855") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/feed-discovery"))])
- (feline . [(20230315 1821) ((emacs (28 1))) "A modeline with very little" single ((:commit . "3f9247f48058285d3e03957680e011ecf58d6feb") (:authors ("chee" . "emacs@chee.party")) (:maintainers ("chee" . "emacs@chee.party")) (:maintainer "chee" . "emacs@chee.party") (:url . "https://opensource.chee.party/chee/feline-mode"))])
- (fennel-mode . [(20230423 1916) ((emacs (26 1))) "A major-mode for editing Fennel code" tar ((:commit . "94c1af291f44be00f08ff2cb0cc39e6f3edf8076") (:authors ("Phil Hagelberg")) (:maintainers ("Phil Hagelberg")) (:maintainer "Phil Hagelberg") (:keywords "languages" "tools") (:url . "https://git.sr.ht/~technomancy/fennel-mode"))])
- (fetch . [(20131201 730) nil "Fetch and unpack resources" single ((:commit . "3f2793afcbbc32f320e572453166f9354ecc6d06") (:authors ("Christian 'crshd' Brassat" . "christian.brassat@gmail.com")) (:maintainers ("Christian 'crshd' Brassat" . "christian.brassat@gmail.com")) (:maintainer "Christian 'crshd' Brassat" . "christian.brassat@gmail.com") (:url . "https://github.com/crshd/fetch.el"))])
- (ffmpeg-player . [(20220704 641) ((emacs (24 4)) (s (1 12 0)) (f (0 20 0))) "Play video using ffmpeg" single ((:commit . "2c41d715b012f399e661a816376824a8dea0b941") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "multimedia" "video" "ffmpeg" "buffering" "images") (:url . "https://github.com/jcs-elpa/ffmpeg-player"))])
- (ffmpeg-utils . [(20230305 709) ((emacs (25 1)) (alert (1 2)) (transient (0 1 0))) "FFmpeg command utilities wrappers" single ((:commit . "064d61527bc6b6a1d0fb0065f8a7bae3bbd4cefc") (:keywords "multimedia") (:url . "https://repo.or.cz/ffmpeg-utils.git"))])
- (fic-mode . [(20180603 2035) nil "Show FIXME/TODO/BUG(...) in special face only in comments and strings" single ((:commit . "a05fc36ed54ba0c6dc22ac216a6a72cf191ca13d") (:url . "https://github.com/lewang/fic-mode"))])
- (fifo-class . [(20160425 558) nil "First in first out abstract class" single ((:commit . "8fe4cf690727f4ac7b67f29c55f845df023c3f21") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:keywords "lisp") (:url . "https://github.com/mola-T/fifo-class"))])
- (figlet . [(20160218 2237) nil "Annoy people with big, ascii art text" single ((:commit . "19a38783a90e151faf047ff233a21a729db0cea9") (:authors ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Philip Jackson" . "phil@shellarchive.co.uk"))])
- (file-info . [(20230427 714) ((emacs (28 1)) (hydra (0 15 0)) (browse-at-remote (0 15 0))) "Show pretty information about current file" single ((:commit . "cb06d793b7e1ba769189f2002236305eba002660") (:authors ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainers ("Artur Yaroshenko" . "artawower@protonmail.com")) (:maintainer "Artur Yaroshenko" . "artawower@protonmail.com") (:url . "https://github.com/artawower/file-info.el"))])
- (filelock . [(20180524 2215) ((emacs (24)) (cl-lib (0)) (f (0))) "Functions for manipulating file locks" single ((:commit . "17a5ca6e0dee14d2e7d92c84be91143bca9d9663") (:authors ("Ryan C. Thompson")) (:maintainers ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:keywords "extensions" "files" "tools") (:url . "https://github.com/DarwinAwardWinner/emacs-filelock"))])
- (filetags . [(20190706 804) ((emacs (24 4))) "Package to manage filetags in filename" single ((:commit . "71667a819e46eb1f6e30e2fa61321acb7c6ccb3d") (:authors ("Max Beutelspacher")) (:maintainers ("Max Beutelspacher")) (:maintainer "Max Beutelspacher") (:keywords "convenience" "files") (:url . "https://github.com/DerBeutlin/filetags.el"))])
- (filetree . [(20221108 236) ((dash (2 12 0)) (helm (3 7 0)) (seq (2 23)) (transient (0 3 6))) "File tree view/manipulatation package" single ((:commit . "1c48ef63a639bfe1ae4d5095725ef88a3f2c590d") (:authors ("Ketan Patel" . "knpatel401@gmail.com")) (:maintainers ("Ketan Patel" . "knpatel401@gmail.com")) (:maintainer "Ketan Patel" . "knpatel401@gmail.com") (:url . "https://github.com/knpatel401/filetree"))])
- (fill-column-indicator . [(20200806 2239) nil "Graphically indicate the fill column" single ((:commit . "c35f9de072c241699b57bcb46da84bed5af29cfe") (:authors ("Alp Aker" . "alp.tekin.aker@gmail.com")) (:maintainers ("Alp Aker" . "alp.tekin.aker@gmail.com")) (:maintainer "Alp Aker" . "alp.tekin.aker@gmail.com") (:keywords "convenience"))])
- (fill-function-arguments . [(20210617 1538) ((emacs (24 4))) "Convert function arguments to/from single line" single ((:commit . "60a5a3c3004cffa111202b42217d604f63d72e70") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:keywords "convenience") (:url . "https://github.com/davidshepherd7/fill-function-arguments"))])
- (fill-page . [(20220704 650) ((emacs (24 4))) "Fill buffer so you don't see empty lines at the end" single ((:commit . "916f4ee74d4290575795042ed09a1c81eb66ba8f") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "fill" "page" "buffer") (:url . "https://github.com/jcs-elpa/fill-page"))])
- (fillcode . [(20200524 2226) nil "Fill (wrap) function calls and expressions in source code" single ((:commit . "4d206982b6aaa493d709c84aea206cabb8b4038c") (:authors ("Ryan Barrett" . "fillcode@ryanb.org")) (:maintainers ("Ryan Barrett" . "fillcode@ryanb.org")) (:maintainer "Ryan Barrett" . "fillcode@ryanb.org") (:url . "https://snarfed.org/fillcode"))])
- (filldent . [(20220423 2216) ((emacs (24 1))) "Fill or indent" single ((:commit . "2f32e0cf5e27c613f962fa41bf3427bbdc04e6c0") (:authors ("Case Duckworth" . "acdw@acdw.net")) (:maintainers ("Case Duckworth" . "acdw@acdw.net")) (:maintainer "Case Duckworth" . "acdw@acdw.net") (:url . "https://github.com/duckwork/filldent.el"))])
- (finalize . [(20170418 1945) ((emacs (24 1)) (cl-generic (0 3)) (cl-lib (0 3)) (eieio (1 4))) "finalizers for Emacs Lisp" tar ((:commit . "0f7d47c4d50f1c76fc3b43bfc2d4886dd3e8ca27") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/elisp-finalize"))])
- (find-by-pinyin-dired . [(20180210 218) ((pinyinlib (0 1 0))) "Find file by first PinYin character of Chinese Hanzi" single ((:commit . "3b4781148dddc84a701ad76c0934ed991ecd59d5") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "hanzi" "chinese" "dired" "find" "file" "pinyin") (:url . "http://github.com/redguardtoo/find-by-pinyin-dired"))])
- (find-dupes-dired . [(20210426 835) ((emacs (26 1))) "Find dupes and handle in dired" single ((:commit . "af56f75afc240d8121c8944a614a272be811830c") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/find-dupes-dired"))])
- (find-file-in-project . [(20230506 544) ((emacs (25 1))) "Find file/directory and review Diff/Patch/Commit efficiently" single ((:commit . "889466d047ee93ab33fa8eaa4e1ef279d884f1da") (:authors ("Phil Hagelberg, Doug Alcorn, and Will Farrington")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "project" "convenience") (:url . "https://github.com/redguardtoo/find-file-in-project"))])
- (find-file-in-repository . [(20210301 2202) nil "Quickly find files in a git, mercurial or other repository" single ((:commit . "10f5bd919ce35691addc5ce0d281597a46813a79") (:authors ("Samuel Hoffstaetter" . "samuel@hoffstaetter.com")) (:maintainers ("Samuel Hoffstaetter" . "samuel@hoffstaetter.com")) (:maintainer "Samuel Hoffstaetter" . "samuel@hoffstaetter.com") (:keywords "files" "convenience" "repository" "project" "source control") (:url . "https://github.com/hoffstaetter/find-file-in-repository"))])
- (find-file-rg . [(20220314 1540) ((emacs (25 1))) "Find file in project using ripgrep" single ((:commit . "404b1cc97c2f700d3dc1c66b640f96ed5a268dc3") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:keywords "tools") (:url . "https://github.com/muffinmad/emacs-find-file-rg"))])
- (find-temp-file . [(20221119 1350) nil "Open quickly a temporary file" single ((:commit . "601e39b052c66df4cd928cf7e308dd6a54769a99") (:authors ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainers ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainer "Sylvain Rousseau <thisirs at gmail dot com>") (:keywords "convenience") (:url . "https://github.com/thisirs/find-temp-file.git"))])
- (find-things-fast . [(20150519 2226) nil "Find things fast, leveraging the power of git" single ((:commit . "281dcb5a2e2db1013246dcac5111808352a8ea95") (:authors ("Elvio Toccalino and Elliot Glaysher and Phil Hagelberg and Doug Alcorn")) (:maintainers ("Elvio Toccalino and Elliot Glaysher and Phil Hagelberg and Doug Alcorn")) (:maintainer "Elvio Toccalino and Elliot Glaysher and Phil Hagelberg and Doug Alcorn") (:keywords "project" "convenience"))])
- (findr . [(20130127 2032) nil "Breadth-first file-finding facility for (X)Emacs" single ((:commit . "1ddbc0464bb05dcda392b62666ad17239a2152d3") (:authors ("David Bakhash" . "cadet@bu.edu")) (:maintainers ("David Bakhash" . "cadet@bu.edu")) (:maintainer "David Bakhash" . "cadet@bu.edu") (:keywords "files"))])
- (fingers . [(20160817 829) nil "Modal editing with universal text manipulation helpers." tar ((:commit . "7de351448a6f5ea7aa7a25db6c90d5138f87eb16") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com") (:keywords "fingers" "modal" "editing" "workman") (:url . "http://github.com/fgeller/fingers.el"))])
- (finito . [(20230225 1326) ((emacs (27 1)) (dash (2 17 0)) (request (0 3 2)) (f (0 2 0)) (s (1 12 0)) (transient (0 3 0)) (graphql (0 1 1)) (async (1 9 3))) "View and collect books" tar ((:commit . "c8143ff6d32d13f809688800e761250b113d1b0f") (:authors ("Laurence Warne")) (:maintainers ("Laurence Warne")) (:maintainer "Laurence Warne") (:keywords "outlines") (:url . "https://github.com/LaurenceWarne/finito.el"))])
- (fiplr . [(20140724 645) ((grizzl (0 1 0)) (cl-lib (0 1))) "Fuzzy Search for Files in Projects" tar ((:commit . "bb6b90ba3c558988c195048c4c40140b2ee17530") (:authors ("Chris Corbyn" . "chris@w3style.co.uk")) (:maintainer "Chris Corbyn" . "chris@w3style.co.uk") (:keywords "convenience" "usability" "project") (:url . "https://github.com/d11wtq/fiplr"))])
- (fira-code-mode . [(20220531 1555) ((emacs (24 4))) "Minor mode for Fira Code ligatures using prettify-symbols" single ((:commit . "7b469ca0c22b7e6a907cd65eebdfa9723998a131") (:authors ("Jonathan Ming" . "jming422@gmail.com")) (:maintainers ("Jonathan Ming" . "jming422@gmail.com")) (:maintainer "Jonathan Ming" . "jming422@gmail.com") (:keywords "faces" "ligatures" "fonts" "programming-ligatures") (:url . "https://github.com/jming422/fira-code-mode"))])
- (firecode-theme . [(20170808 1311) ((emacs (24 0))) "an Emacs 24 theme based on FireCode (tmTheme)" single ((:commit . "8b7b03ecdd41e70dab145b98906017e1392eaef4") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (fireplace . [(20200402 2206) nil "A cozy fireplace for emacs" single ((:commit . "f6c23e259349922aae25cf2898ba815a7d8f2527") (:authors ("Johan Sivertsen" . "johanvts@gmail.com")) (:maintainers ("Johan Sivertsen" . "johanvts@gmail.com")) (:maintainer "Johan Sivertsen" . "johanvts@gmail.com") (:keywords "games") (:url . "https://github.com/johanvts/emacs-fireplace"))])
- (firestarter . [(20210508 1626) ((emacs (24 1))) "Execute (shell) commands on save" single ((:commit . "76070c9074aa363350abe6ad06143e90b3e12ab1") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "convenience") (:url . "https://depp.brause.cc/firestarter"))])
- (firrtl-mode . [(20200329 2002) ((emacs (24 3))) "mode for working with FIRRTL files" single ((:commit . "fa40141411a876ce7a1a9d6d3fe47134bc1fa954") (:authors ("Schuyler Eldridge" . "schuyler.eldridge@ibm.com")) (:maintainers ("Schuyler Eldridge" . "schuyler.eldridge@ibm.com")) (:maintainer "Schuyler Eldridge" . "schuyler.eldridge@ibm.com") (:keywords "languages" "firrtl") (:url . "https://github.com/ibm/firrtl-mode"))])
- (fish-completion . [(20191103 1210) ((emacs (25 1))) "Fish completion for pcomplete (shell and Eshell)" single ((:commit . "10384881817b5ae38cf6197a077a663420090d2c") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:url . "https://gitlab.com/Ambrevar/emacs-fish-completion"))])
- (fish-mode . [(20230326 1604) ((emacs (24))) "Major mode for fish shell scripts" single ((:commit . "6869efbc05cdb628209338bf57fe52742e53d956") (:authors ("Tony Wang" . "wwwjfy@gmail.com")) (:maintainers ("Tony Wang" . "wwwjfy@gmail.com")) (:maintainer "Tony Wang" . "wwwjfy@gmail.com") (:keywords "fish" "shell"))])
- (fit-text-scale . [(20211230 2002) ((emacs (25 1))) "Fit text by scaling" single ((:commit . "c53c8ce606380088643463848a9ee3502b0c64f4") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com") (:keywords "convenience") (:url . "https://gitlab.com/marcowahl/fit-text-scale"))])
- (fix-input . [(20210320 1244) ((emacs (24 4))) "Make input methods play nicely with alternative keyboard layout on OS level" single ((:commit . "10b3aebc3d4411e6889f3428e8f097c0fbf8585c") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "input" "method") (:url . "https://github.com/mrkkrp/fix-input"))])
- (fix-muscle-memory . [(20210702 1755) nil "Simple hacks to fix muscle memory problems" single ((:commit . "b8d4b8025d758762f4459c70c3a7a209ead865ed") (:authors ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainers ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainer "Jonathan Arkell" . "jonnay@jonnay.net") (:keywords "spelling" "typing"))])
- (fix-word . [(20210319 1414) ((emacs (24 1)) (cl-lib (0 5))) "Convenient word transformation" single ((:commit . "80cf4529915c34d2d39b4d3410781a19ef264e9f") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "word" "convenience") (:url . "https://github.com/mrkkrp/fix-word"))])
- (fixmee . [(20230415 2027) ((button-lock (1 0 2)) (nav-flash (1 0 0)) (back-button (0 6 0)) (smartrep (0 0 3)) (string-utils (0 3 2)) (tabulated-list (0))) "Quickly navigate to FIXME notices in code" single ((:commit . "54500aaa8ae019034dc170af33f43465f5f03123") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "navigation" "convenience") (:url . "http://github.com/rolandwalker/fixmee"))])
- (flame . [(20180303 2016) ((emacs (24))) "automatic generation of flamage, as if we needed more." single ((:commit . "2cfb860a483197e92a4c20d7b9b055d586e76fe0") (:authors ("Ian G. Batten" . "batten@uk.ac.bham.multics") ("Noah Friedman" . "friedman@splode.com")) (:maintainers ("Noah Friedman" . "friedman@splode.com")) (:maintainer "Noah Friedman" . "friedman@splode.com") (:keywords "games") (:url . "https://github.com/mschuldt/flame"))])
- (flames-of-freedom . [(20191202 1637) ((emacs (25 1))) "The flames of freedom" single ((:commit . "5e47ff27cfa2f7c06081be2ffefe91a731efd012") (:authors ("Stéphane Champailler" . "schampailler@skynet.be")) (:maintainers ("Stéphane Champailler" . "schampailler@skynet.be")) (:maintainer "Stéphane Champailler" . "schampailler@skynet.be") (:keywords "multimedia") (:url . "https://github.com/wiz21b/FlamesOfFreedom"))])
- (flappymacs . [(20171023 1004) nil "flappybird clone for emacs" single ((:commit . "fac0011983251d5c44f4ed1eacac03f5de3caac4") (:authors ("Takayuki Sato")) (:maintainers ("Takayuki Sato")) (:maintainer "Takayuki Sato") (:keywords "games") (:url . "https://github.com/taksatou/flappymacs"))])
- (flash-region . [(20130923 1817) nil "Flash a region" single ((:commit . "261b3597b23cdd40e5c14262a5687bcc6c1d0901") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "utility"))])
- (flatbuffers-mode . [(20210710 1004) ((emacs (24 3))) "Major mode for editing flatbuffers" single ((:commit . "8e7783db45a64c9456130fd0c108ac12d45a7789") (:authors ("Asal Mirzaieva" . "asalle.kim@gmail.com")) (:maintainers ("Asal Mirzaieva" . "asalle.kim@gmail.com")) (:maintainer "Asal Mirzaieva" . "asalle.kim@gmail.com") (:keywords "flatbuffers" "languages") (:url . "https://github.com/Asalle/flatbuffers-mode"))])
- (flatfluc-theme . [(20221204 939) ((emacs (26 1))) "Custom merge of flucui and flatui themes" single ((:commit . "553167d27725d078f5c66ed7a31ca8ec9376dfd0") (:authors ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainers ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainer "Sébastien Le Maguer" . "lemagues@tcd.ie") (:keywords "lisp") (:url . "https://github.com/seblemaguer/flatfluc-theme"))])
- (flatland-black-theme . [(20170808 1312) ((emacs (24 0))) "an Emacs 24 theme based on Flatland Black (tmTheme)" single ((:commit . "348c5d5fe615e6ea13cadc17f046e506e789ce07") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/flatland-black-theme"))])
- (flatland-theme . [(20171113 1521) nil "A simple theme for Emacs based on the Flatland theme for Sublime Text" single ((:commit . "a98a6f19ad4dff0fa3fad1ea487b7d0ef634a19a") (:authors ("Greg Chapple" . "info@gregchapple.com")) (:maintainers ("Greg Chapple" . "info@gregchapple.com")) (:maintainer "Greg Chapple" . "info@gregchapple.com") (:url . "http://github.com/gregchapple/flatland-emacs"))])
- (flatui-dark-theme . [(20170513 1422) ((emacs (24))) "Dark color theme with colors from https://flatuicolors.com/" single ((:commit . "5b959a9f743f891e4660b1b432086417947872ea") (:authors ("Andrew Phillips" . "theasp@gmail.com")) (:maintainers ("Andrew Phillips" . "theasp@gmail.com")) (:maintainer "Andrew Phillips" . "theasp@gmail.com") (:keywords "color" "theme" "dark" "flatui" "faces") (:url . "https://github.com/theasp/flatui-dark-theme"))])
- (flatui-theme . [(20160619 127) nil "A color theme for Emacs based on flatuicolors.com" single ((:commit . "9c15db5526c15c8dba55023f5698372b19c2a780") (:authors ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainer "John Louis Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/flatui-theme.el"))])
- (fleetish-theme . [(20230407 1438) ((emacs (24))) "A take on the JetBrains Fleet theme" single ((:commit . "482513562b6691c7f3440b62a31033d22378ed96") (:authors ("Scott Raine" . "scott@raine.sh")) (:maintainers ("Scott Raine" . "scott@raine.sh")) (:maintainer "Scott Raine" . "scott@raine.sh") (:url . "https://github.com/nylar/fleetish-emacs-theme"))])
- (flex-autopair . [(20120809 1218) nil "Automatically insert pair braces and quotes, insertion conditions & actions are highly customizable." single ((:commit . "55d128749cc070551a1624a4508d1c4f6d76f7cf") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com") (:keywords "keyboard" "input") (:url . "https://github.com/uk-ar/flex-autopair.el"))])
- (flex-compile . [(20230116 1638) ((emacs (26 1)) (dash (2 17 0)) (buffer-manage (1 1))) "Run, evaluate and compile across many languages" tar ((:commit . "791e297048e02ef1649ad17a5a2bd9d78e766c03") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "compilation" "integration" "processes") (:url . "https://github.com/plandes/flex-compile"))])
- (flex-isearch . [(20170308 2010) nil "Flex matching (like ido) in isearch." single ((:commit . "b1f7e04de762282c276343cc2709af9ff4abc9d2") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com") (:keywords "convenience" "search") (:url . "https://bitbucket.org/jpkotta/flex-isearch"))])
- (flim . [(20230205 1423) ((emacs (24 5)) (apel (10 8)) (oauth2 (0 11))) "A library to provide basic features about message representation or encoding." tar ((:commit . "2cf5a7891090faca8de725b1d3743dcedf233ea2"))])
- (flimenu . [(20200810 1510) ((emacs (24 4))) "Flatten imenu automatically" single ((:commit . "4c0ff37cf3bd6c836bd136b5f6c450560a6c92b9") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "imenu" "browse" "structure" "hook" "mode" "matching" "tools" "convenience" "files") (:url . "https://github.com/IvanMalison/flimenu"))])
- (fliptext . [(20171124 2056) nil "Input method for flipping characters upside down" single ((:commit . "fd821f645ffebae6ae3894afa7ba7fc06f91afc6") (:authors ("André Riemann" . "andre.riemann@web.de")) (:maintainers ("André Riemann" . "andre.riemann@web.de")) (:maintainer "André Riemann" . "andre.riemann@web.de") (:keywords "games" "i18n"))])
- (floobits . [(20211018 550) ((json (1 2)) (highlight (0))) "Floobits plugin for real-time collaborative editing" tar ((:commit . "93b3317fb6c842efe165e54c8a32bf51d436837d") (:authors ("Matt Kaniaris") ("Geoff Greer")) (:maintainers ("Matt Kaniaris")) (:maintainer "Matt Kaniaris") (:keywords "comm" "tools") (:url . "http://github.com/Floobits/floobits-emacs"))])
- (flow-js2-mode . [(20191213 1004) ((flow-minor-mode (0)) (js2-mode (0)) (emacs (25 1))) "Support for flow annotations in js2-mode" single ((:commit . "7520bdda70287e8d57b3f41033b1e0ca59a3be95") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "languages" "extensions"))])
- (flow-minor-mode . [(20200905 1730) ((emacs (25 1))) "Flow type mode based on web-mode." single ((:commit . "804217a15a28f6918fba93c91d495ed7d50b0495") (:url . "https://github.com/an-sh/flow-minor-mode"))])
- (flower . [(20220416 1744) ((emacs (24 4)) (clomacs (0 0 4))) "Emacs task tracker client." tar ((:commit . "047846409867b2dd0ba4e2047a414b498680cd9c") (:authors ("Sergey Sobko" . "flower@tpg.am")) (:maintainers ("Sergey Sobko" . "flower@tpg.am")) (:maintainer "Sergey Sobko" . "flower@tpg.am") (:keywords "hypermedia" "outlines" "tools" "vc") (:url . "https://github.com/FlowerAutomation/flower"))])
- (flucui-themes . [(20200815 2103) ((emacs (24))) "Custom theme inspired by the Flat UI palette" tar ((:commit . "6591b5093e6e8f0e720e3995a16a91835b2e7a48") (:authors ("MetroWind" . "chris.corsair@gmail.com")) (:maintainers ("MetroWind" . "chris.corsair@gmail.com")) (:maintainer "MetroWind" . "chris.corsair@gmail.com") (:keywords "lisp") (:url . "https://github.com/MetroWind/flucui-theme"))])
- (flutter . [(20221225 944) ((emacs (25 1))) "Tools for working with Flutter SDK" tar ((:commit . "684f15ea19c4a7947eda945cb6e58a67baec8e90") (:authors ("Aaron Madlon-Kay")) (:maintainers ("Aaron Madlon-Kay")) (:maintainer "Aaron Madlon-Kay") (:keywords "languages") (:url . "https://github.com/amake/flutter.el"))])
- (flutter-l10n-flycheck . [(20220502 50) ((emacs (25 1)) (flycheck (30)) (flutter (0 1 0))) "Flycheck checker for intl_translation" single ((:commit . "a2cb56015f5716d6dc0e38fecb7c5b4906a5ba74") (:authors ("Aaron Madlon-Kay")) (:maintainers ("Aaron Madlon-Kay")) (:maintainer "Aaron Madlon-Kay") (:keywords "languages") (:url . "https://github.com/amake/flutter.el"))])
- (fluxus-mode . [(20210715 58) ((osc (0 1)) (emacs (24 4))) "Major mode for interfacing with Fluxus" single ((:commit . "a14578640c578a4fd09cb7e25da1e87d637719ae") (:authors ("modula t." . "defaultxr@gmail.com")) (:maintainers ("modula t." . "defaultxr@gmail.com")) (:maintainer "modula t." . "defaultxr@gmail.com") (:keywords "languages") (:url . "https://github.com/defaultxr/fluxus-mode"))])
- (flx . [(20221213 542) ((cl-lib (0 3))) "fuzzy matching with good sorting" single ((:commit . "7b44a5abb254bbfbeca7a29336f7f4ebd8aabbf2") (:authors ("Le Wang")) (:maintainers ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/flx"))])
- (flx-ido . [(20221213 542) ((flx (0 1)) (cl-lib (0 3))) "flx integration for ido" single ((:commit . "7b44a5abb254bbfbeca7a29336f7f4ebd8aabbf2") (:authors ("Le Wang")) (:maintainers ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/flx"))])
- (flx-isearch . [(20191119 515) ((emacs (24)) (flx (20140821)) (cl-lib (0 5))) "Fuzzy incremental searching for emacs" single ((:commit . "a44097fb8f539a193c2f09a37ea52a68f2c51839") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience" "search" "flx") (:url . "https://github.com/pythonnut/flx-isearch"))])
- (flycheck . [(20230306 414) ((emacs (25 1)) (dash (2 12 1)) (pkg-info (0 4)) (let-alist (1 0 4)) (seq (1 11))) "On-the-fly syntax checking" tar ((:commit . "5f2ef177cb21ae8b73714575802beef04abd0f5e") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "convenience" "languages" "tools") (:url . "http://www.flycheck.org"))])
- (flycheck-ameba . [(20191226 1011) ((emacs (24 4)) (flycheck (30))) "Add support for Ameba to Flycheck" single ((:commit . "b129dbd8e4c43077521d1c77cc94bb3d52d5ee6d") (:keywords "tools" "crystal" "ameba") (:url . "https://github.com/crystal-ameba/ameba.el"))])
- (flycheck-apertium . [(20181211 1038) ((flycheck (0 25))) "Apertium checkers in flycheck" tar ((:commit . "22b60a17836477ac1edd15dc85b14f88ca871ba9") (:authors ("Kevin Brubeck Unhammer" . "unhammer+apertium@mm.st")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer+apertium@mm.st")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer+apertium@mm.st") (:keywords "convenience" "tools" "xml") (:url . "http://wiki.apertium.org/wiki/Emacs"))])
- (flycheck-aspell . [(20230408 957) ((flycheck (28 0)) (emacs (25 1))) "Aspell checker for flycheck" single ((:commit . "45cd22c52b676abbdf405d9fe16b7073b954ed77") (:authors ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainers ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainer "Leo Gaskin" . "leo.gaskin@le0.gs") (:keywords "wp" "flycheck" "spell" "aspell") (:url . "https://github.com/leotaku/flycheck-aspell"))])
- (flycheck-ats2 . [(20170225 1636) ((emacs (24 1)) (flycheck (0 22))) "Flycheck: ATS2 support" single ((:commit . "9f77add8408462af35bdddf87e37a661880255e3") (:authors ("Mark Laws" . "mdl@60hz.org")) (:maintainers ("Mark Laws" . "mdl@60hz.org")) (:maintainer "Mark Laws" . "mdl@60hz.org") (:keywords "convenience" "tools" "languages") (:url . "http://github.com/drvink/flycheck-ats2"))])
- (flycheck-bashate . [(20200625 642) ((flycheck (0 24)) (emacs (24 4))) "Integrate bashate with flycheck" single ((:commit . "69e53e84f712bafffd785d84d9304598c2df5615") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-bashate"))])
- (flycheck-cask . [(20200926 1502) ((emacs (24 3)) (flycheck (0 14)) (dash (2 4 0))) "Cask support in Flycheck" single ((:commit . "4b2ede6362ded4a45678dfbef1876faa42edbd58") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "tools" "convenience") (:url . "https://github.com/flycheck/flycheck-cask"))])
- (flycheck-cfn . [(20220221 1029) ((emacs (26 1)) (flycheck (31))) "Flycheck backend for AWS cloudformation" single ((:commit . "4cf56affe3035fda364109836e26499431095185") (:authors ("William Orr" . "will@worrbase.com")) (:maintainers ("William Orr" . "will@worrbase.com")) (:maintainer "William Orr" . "will@worrbase.com") (:keywords "convenience") (:url . "https://gitlab.com/worr/cfn-mode"))])
- (flycheck-checkbashisms . [(20230313 1418) ((emacs (24)) (flycheck (0 25))) "checkbashisms checker for flycheck" single ((:commit . "ca8f11679c77d6702f34e773bdde185ceb47a05d") (:authors ("Cuong Le" . "cuong.manhle.vn@gmail.com")) (:maintainers ("Cuong Le" . "cuong.manhle.vn@gmail.com")) (:maintainer "Cuong Le" . "cuong.manhle.vn@gmail.com") (:keywords "convenience" "tools" "sh" "unix") (:url . "https://github.com/cuonglm/flycheck-checkbashisms"))])
- (flycheck-checkpatch . [(20170217 1025) ((emacs (25)) (flycheck (30))) "Flycheck support for checkpatch.pl tool" single ((:commit . "6461fc7b0d493eb9863814055f8bce5fa35739de") (:authors ("Alexander Yarygin" . "yarygin.alexander@gmail.com")) (:maintainers ("Alexander Yarygin" . "yarygin.alexander@gmail.com")) (:maintainer "Alexander Yarygin" . "yarygin.alexander@gmail.com") (:url . "https://github.com/zpp0/flycheck-checkpatch"))])
- (flycheck-clang-analyzer . [(20211214 648) ((flycheck (0 24)) (emacs (24 4))) "Integrate Clang Analyzer with flycheck" single ((:commit . "646d9f3a80046ab231a07526778695d5decad92d") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-clang-analyzer"))])
- (flycheck-clang-tidy . [(20201115 1232) ((flycheck (0 30))) "Flycheck syntax checker using clang-tidy" single ((:commit . "3bd947fb0dcc1e97617eab7be9e1b6e57db5e091") (:authors (nil . "Sebastian Nagel<sebastian.nagel@ncoding.at>")) (:maintainers ("tastytea" . "tastytea@tastytea.de")) (:maintainer "tastytea" . "tastytea@tastytea.de") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/ch1bo/flycheck-clang-tidy"))])
- (flycheck-clangcheck . [(20150712 710) ((cl-lib (0 5)) (seq (1 7)) (flycheck (0 17))) "A Flycheck checker difinition for ClangCheck." single ((:commit . "24a9424c484420073a24443a829fd5779752362b") (:authors ("kumar8600" . "kumar8600@gmail.com")) (:maintainers ("kumar8600" . "kumar8600@gmail.com")) (:maintainer "kumar8600" . "kumar8600@gmail.com") (:url . "https://github.com/kumar8600/flycheck-clangcheck"))])
- (flycheck-clj-kondo . [(20211227 2226) ((emacs (24 3)) (flycheck (0 18))) "Add clj-kondo linter to flycheck" single ((:commit . "d8a6ee9a16aa24b5be01f1edf9843d41bdc75555") (:authors ("Michiel Borkent" . "michielborkent@gmail.com")) (:maintainers ("Michiel Borkent" . "michielborkent@gmail.com")) (:maintainer "Michiel Borkent" . "michielborkent@gmail.com") (:url . "https://github.com/borkdude/flycheck-clj-kondo"))])
- (flycheck-clojure . [(20191215 2227) ((cider (0 22 0)) (flycheck (32 -4)) (let-alist (1 0 1)) (emacs (25))) "Flycheck: Clojure support" single ((:commit . "bc85f9dfe1bcfa66a98d2ca5da955e7eab4ae00d") (:authors ("Peter Fraenkel" . "pnf@podsnap.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Peter Fraenkel" . "pnf@podsnap.com")) (:maintainer "Peter Fraenkel" . "pnf@podsnap.com") (:url . "https://github.com/clojure-emacs/squiggly-clojure"))])
- (flycheck-clolyze . [(20190422 2134) ((flycheck (0 25)) (emacs (24))) "Add Clolyze to to flycheck" single ((:commit . "9a3300eac22a7ff96accf37fa2d761c13cc38020") (:authors ("Daniel Laps" . "daniel.laps@hhu.de")) (:maintainers ("Daniel Laps" . "daniel.laps@hhu.de")) (:maintainer "Daniel Laps" . "daniel.laps@hhu.de") (:url . "https://github.com/DLaps/flycheck-clolyze"))])
- (flycheck-color-mode-line . [(20230106 1829) ((flycheck (0 15)) (emacs (24 3))) "Change mode line color with Flycheck status" single ((:commit . "df9be4c5bf26c4dc5ddaeed8179c4d66bdaa91f5") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:keywords "convenience" "language" "tools") (:url . "https://github.com/flycheck/flycheck-color-mode-line"))])
- (flycheck-coverity . [(20170704 59) ((flycheck (0 24)) (dash (2 12 0)) (emacs (24 4))) "Integrate Coverity with flycheck" single ((:commit . "cb211e3dd50413a5042eb20175be518214591c9d") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-coverity"))])
- (flycheck-credo . [(20170526 1545) ((flycheck (29))) "flycheck checker for elixir credo" single ((:commit . "e88f11ead53805c361ec7706e44c3dfee1daa19f") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/flycheck-credo"))])
- (flycheck-crystal . [(20200805 2344) ((flycheck (30))) "Add support for Crystal to Flycheck" single ((:commit . "f9e4db16ff9fdc6a296363aa35d19cfb4926e472") (:keywords "tools" "crystal") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode"))])
- (flycheck-css-colorguard . [(20161031 1122) ((flycheck (0 22)) (emacs (24))) "Detect similar colors in CSS" single ((:commit . "ae94fa0396acd99f9ec36d9572459df793f37fe8") (:authors ("Saša Jovanić" . "info@simplify.ba")) (:maintainers ("Saša Jovanić" . "info@simplify.ba")) (:maintainer "Saša Jovanić" . "info@simplify.ba") (:keywords "flycheck" "css" "colorguard") (:url . "https://github.com/Simplify/flycheck-css-colorguard/"))])
- (flycheck-cstyle . [(20160905 2341) ((flycheck (0 24)) (emacs (24 4))) "Integrate cstyle with flycheck" single ((:commit . "002699f83253ea8e1a509a9ab6d0fce1a1650f73") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-cstyle"))])
- (flycheck-cython . [(20170724 958) ((flycheck (0 25))) "Support Cython in flycheck" single ((:commit . "ecc4454d35ab5317ab66a04406f36f0c1dbc0b76") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))])
- (flycheck-d-unittest . [(20160522 417) ((flycheck (0 21 -4 1)) (dash (1 4 0))) "Add D unittest support to flycheck" single ((:commit . "3e614f23cb4a5566fd7988dbcaaf254af81c7718") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "flycheck" "d") (:url . "https://github.com/tom-tan/flycheck-d-unittest/"))])
- (flycheck-dedukti . [(20171103 1212) ((flycheck (0 19)) (dedukti-mode (0 1))) "Flycheck integration of Dedukti" single ((:commit . "3dbff5646355f39d57a3ec514f560a6b0082a1cd") (:authors ("Raphaël Cauderlier")) (:maintainers ("Raphaël Cauderlier")) (:maintainer "Raphaël Cauderlier") (:keywords "convenience" "languages" "tools" "flycheck" "dedukti") (:url . "https://github.com/rafoo/flycheck-dedukti"))])
- (flycheck-deno . [(20230212 1754) ((emacs (26 1)) (flycheck (0 14))) "Flycheck for deno-lint" single ((:commit . "e7cd15a6a05be73d1f83a16d2efa6b49a105a9cd") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "lisp" "deno") (:url . "https://github.com/flycheck/flycheck-deno"))])
- (flycheck-dialyxir . [(20170515 1525) ((flycheck (29))) "flycheck checker for elixir dialyxir" single ((:commit . "adfb73374cb2bee75724822972f405f2ec371199") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/flycheck-dialyxir"))])
- (flycheck-dialyzer . [(20160326 1430) ((flycheck (0 18))) "Support dialyzer in flycheck" single ((:commit . "a5df0db95ac69f397b5f85d325a6d88cf8974f64") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))])
- (flycheck-dmd-dub . [(20210412 1608) ((flycheck (0 24)) (f (0 18 2))) "Sets flycheck-dmd-include-paths from dub package information" single ((:commit . "818bfed45ac8597b6ad568c71eb9428138a125c8") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainers ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com") (:keywords "languages") (:url . "http://github.com/atilaneves/flycheck-dmd-dub"))])
- (flycheck-dogma . [(20170125 721) ((flycheck (29))) "flycheck checker for elixir dogma" single ((:commit . "7e14207a7da67dc5524a8949cb37a3d11de1db6e") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/flycheck-dogma"))])
- (flycheck-drstring . [(20200210 1903) ((emacs (25 1)) (flycheck (0 25)) (swift-mode (8 0))) "Doc linting for Swift using DrString" single ((:commit . "d8d5a560e792a6657ef5ac69934c74f1ed51372d") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainers ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es") (:keywords "tools" "flycheck") (:url . "https://github.com/danielmartin/flycheck-drstring"))])
- (flycheck-dtrace . [(20180903 1630) ((emacs (25 1)) (flycheck (0 22))) "Flycheck: DTrace support" single ((:commit . "951fab3a15c11d92b9fac1ea4791a80dfe034a00") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info") (:keywords "languages" "convenience" "tools"))])
- (flycheck-eglot . [(20230202 1844) ((emacs (28 1)) (eglot (1 9)) (flycheck (32))) "Flycheck support for eglot" single ((:commit . "31905ad676d67fb2967a3b6d907312380696615f") (:authors ("Sergey Firsov" . "intramurz@gmail.com")) (:maintainers ("Sergey Firsov" . "intramurz@gmail.com")) (:maintainer "Sergey Firsov" . "intramurz@gmail.com") (:keywords "convenience" "language" "tools") (:url . "https://github.com/intramurz/flycheck-eglot"))])
- (flycheck-eldev . [(20210305 2231) ((flycheck (32)) (dash (2 17)) (emacs (24 4))) "Eldev support in Flycheck" single ((:commit . "9c605a579186a27ba0ff2b0486d84381a9b73f49") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/flycheck/flycheck-eldev"))])
- (flycheck-elixir . [(20210413 612) ((flycheck (0 25))) "Support Elixir in flycheck" single ((:commit . "b57a77a21d6cf9621b3387831cba34135c4fa35d") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))])
- (flycheck-elm . [(20181107 146) ((flycheck (0 29 -4)) (emacs (24 4)) (let-alist (1 0 5)) (seq (2 20))) "Flycheck support for the elm language" single ((:commit . "debd0af563cb6c2944367a691c7fa3021d9378c1") (:authors ("Brian Sermons")) (:maintainers ("Brian Sermons")) (:maintainer "Brian Sermons") (:url . "https://github.com/bsermons/flycheck-elm"))])
- (flycheck-elsa . [(20230217 1640) ((emacs (25)) (flycheck (0 14)) (seq (2 0))) "Flycheck for Elsa" tar ((:commit . "d60db9544d0c4213f2478bcea0fd0e668e31cf34") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "convenience") (:url . "https://github.com/emacs-elsa/flycheck-elsa"))])
- (flycheck-falco-rules . [(20230302 2340) ((emacs (24 3)) (flycheck (0 25)) (let-alist (1 0 1))) "On-the-fly syntax checking for falco rules files" single ((:commit . "1ad301d497ade9556327053ca571ee51bf0c0633") (:authors ("The Falco Developers (https://falco.org)")) (:maintainers ("The Falco Developers (https://falco.org)")) (:maintainer "The Falco Developers (https://falco.org)") (:keywords "tools" "convenience") (:url . "https://github.com/falcosecurity/flycheck-falco-rules"))])
- (flycheck-flawfinder . [(20211214 647) ((flycheck (0 24)) (emacs (24 4))) "Integrate flawfinder with flycheck" single ((:commit . "85701b849ea1ed8438ed4b7ae236e99d0f5528c7") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-flawfinder"))])
- (flycheck-flow . [(20190304 1459) ((flycheck (0 18)) (json (1 4))) "Support Flow in flycheck" single ((:commit . "9e8e52cfc98af6a23fd906f9cb5d5d470d8cf82d") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))])
- (flycheck-ghcmod . [(20150114 632) ((flycheck (0 21 -4 1)) (dash (2 0))) "A flycheck checker for Haskell using ghcmod" single ((:commit . "6bb7b7d879f05bbae54e99eb04806c877adf3ccc") (:authors ("Shen Chao" . "scturtle@gmail.com")) (:maintainers ("Shen Chao" . "scturtle@gmail.com")) (:maintainer "Shen Chao" . "scturtle@gmail.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/scturtle/flycheck-ghcmod"))])
- (flycheck-golangci-lint . [(20190330 1412) ((emacs (24)) (flycheck (0 22))) "Flycheck checker for golangci-lint" single ((:commit . "8e446c68311048f0b87febf8ef0379e29d358851") (:authors ("Wei Jian Gan" . "weijiangan@outlook.com")) (:maintainers ("Wei Jian Gan" . "weijiangan@outlook.com")) (:maintainer "Wei Jian Gan" . "weijiangan@outlook.com") (:keywords "convenience" "tools" "go") (:url . "https://github.com/weijiangan/flycheck-golangci-lint"))])
- (flycheck-gometalinter . [(20180424 941) ((emacs (24)) (flycheck (0 22))) "flycheck checker for gometalinter" single ((:commit . "422f6e4b77b27fd7370f0c88437ac5072c9d3413") (:authors ("Diep Pham" . "me@favadi.com")) (:maintainers ("Diep Pham" . "me@favadi.com")) (:maintainer "Diep Pham" . "me@favadi.com") (:keywords "convenience" "tools" "go") (:url . "https://github.com/favadi/flycheck-gometalinter"))])
- (flycheck-google-cpplint . [(20220616 1802) ((flycheck (0 20 -4 1))) "Help to comply with the Google C++ Style Guide" single ((:commit . "93c5b26ec55d0df54bc230e2de0890fe074f35d3") (:authors ("Akiha Senda" . "senda.akiha@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com") (:keywords "flycheck" "c" "c++") (:url . "https://github.com/flycheck/flycheck-google-cpplint/"))])
- (flycheck-gradle . [(20190315 234) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Gradle." single ((:commit . "1ca08bbc343362a923cbdc2010f66e41655e92ab") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "languages" "gradle") (:url . "https://github.com/jojojames/flycheck-gradle"))])
- (flycheck-grammalecte . [(20221216 1904) ((emacs (26 1)) (flycheck (26))) "Integrate Grammalecte with Flycheck" tar ((:commit . "68c5087c8b31cf10fb9df77478edd24200fb4108") (:authors ("Guilhem Doulcier" . "guilhem.doulcier@espci.fr") ("Étienne Deparis" . "etienne@depar.is")) (:maintainers ("Étienne Deparis" . "etienne@depar.is")) (:maintainer "Étienne Deparis" . "etienne@depar.is") (:keywords "i18n" "text") (:url . "https://git.umaneti.net/flycheck-grammalecte/"))])
- (flycheck-grammarly . [(20221231 1654) ((emacs (25 1)) (flycheck (0 14)) (grammarly (0 3 0)) (s (1 12 0))) "Grammarly support for Flycheck" single ((:commit . "d4a788acc3875a1ffdd7460ab3377a887413c582") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "grammar" "check") (:url . "https://github.com/emacs-grammarly/flycheck-grammarly"))])
- (flycheck-guile . [(20230405 1154) ((emacs (25 1)) (flycheck (0 22)) (geiser (0 20))) "A Flycheck checker for GNU Guile" single ((:commit . "dd7bbdc48fd21cf8d270c913c56cd580f8ec3d03") (:authors ("Ricardo Wurmus" . "rekado@elephly.net")) (:maintainers ("Andrew Whatson" . "whatson@tailcall.au")) (:maintainer "Andrew Whatson" . "whatson@tailcall.au") (:url . "https://notabug.org/flatwhatson/flycheck-guile"))])
- (flycheck-haskell . [(20221111 59) ((emacs (24 3)) (flycheck (0 25)) (haskell-mode (13 7)) (dash (2 4 0)) (seq (1 11)) (let-alist (1 0 1))) "Flycheck: Automatic Haskell configuration" tar ((:commit . "50425a8b96fea84ea15940a4a07b184e43bb8e7a") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "tools" "convenience") (:url . "https://github.com/flycheck/flycheck-haskell"))])
- (flycheck-hdevtools . [(20160926 702) ((flycheck (0 21 -4 1)) (dash (2 0))) "A flycheck checker for Haskell using hdevtools" single ((:commit . "53829f0c57800615718cfce27ffa16d8ba286cee") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/flycheck/flycheck-hdevtools"))])
- (flycheck-hledger . [(20220715 1115) ((emacs (27 1)) (flycheck (31))) "Flycheck module to check hledger journals" single ((:commit . "c360025b8433abc4da89b0bfcc7ed1ff27004c64") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/flycheck-hledger/"))])
- (flycheck-indent . [(20200129 2046) ((emacs (25 1)) (indent-lint (1 0 0)) (flycheck (31))) "Indent-lint frontend for flycheck" single ((:commit . "23ef4bab5509e2e7fb1f4a194895a9510fa7c797") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tools") (:url . "https://github.com/conao3/indent-lint.el"))])
- (flycheck-indicator . [(20200331 1142) ((flycheck (0 15))) "A fancy mode line indicator for `flycheck-mode'" single ((:commit . "e00d9a20cbc21d6814c27cc9206296da394478e8") (:authors ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainers ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainer "Eder Elorriaga" . "gexplorer8@gmail.com") (:keywords "convenience" "language" "tools") (:url . "https://github.com/gexplorer/flycheck-indicator"))])
- (flycheck-ini-pyinilint . [(20190312 1931) ((flycheck (31))) "Flycheck integration for PyINILint" single ((:commit . "54744a78d06373404933fedc3ca836916e83de51") (:authors ("Daniel J. R. May" . "daniel.may@danieljrmay.com")) (:maintainers ("Daniel J. R. May" . "daniel.may@danieljrmay.com")) (:maintainer "Daniel J. R. May" . "daniel.may@danieljrmay.com") (:keywords "convenience" "files" "tools") (:url . "https://gitlab.com/danieljrmay/flycheck-ini-pyinilint"))])
- (flycheck-inline . [(20200808 1019) ((emacs (25 1)) (flycheck (32))) "Display Flycheck errors inline" single ((:commit . "0662c314bd819f9b46f8b2b13f0c650445b3a8c5") (:authors ("fmdkdd")) (:maintainers ("fmdkdd")) (:maintainer "fmdkdd") (:keywords "tools" "convenience") (:url . "https://github.com/flycheck/flycheck-inline"))])
- (flycheck-irony . [(20180604 2152) ((emacs (24 1)) (flycheck (0 22)) (irony (0 2 0))) "Flycheck: C/C++ support via Irony" single ((:commit . "42dbecd4a865cabeb301193bb4d660e26ae3befe") (:authors ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainers ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainer "Guillaume Papin" . "guillaume.papin@epitech.eu") (:keywords "convenience" "tools" "c") (:url . "https://github.com/Sarcasm/flycheck-irony/"))])
- (flycheck-jest . [(20220530 1418) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Jest." single ((:commit . "8181c5d2e1318c6ddcff21c6f3f6d76413545645") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "languages" "jest") (:url . "https://github.com/jojojames/flycheck-jest"))])
- (flycheck-joker . [(20200412 2346) ((flycheck (0 18))) "Add Clojure syntax checker (via Joker) to flycheck" single ((:commit . "93576295fef7a749bf779eeece5edd85e21868e2") (:authors ("Roman Bataev" . "roman.bataev@gmail.com")) (:maintainers ("Roman Bataev" . "roman.bataev@gmail.com")) (:maintainer "Roman Bataev" . "roman.bataev@gmail.com"))])
- (flycheck-julia . [(20170729 2141) ((emacs (24)) (flycheck (0 22))) "Julia support for Flycheck" single ((:commit . "213b60a5a9a1cb7887260e1d159b5bb27167cbb6") (:authors ("Guido Kraemer" . "guido.kraemer@gmx.de")) (:maintainers ("Guido Kraemer" . "guido.kraemer@gmx.de")) (:maintainer "Guido Kraemer" . "guido.kraemer@gmx.de") (:keywords "convenience" "tools" "languages") (:url . "https://github.com/gdkrmr/flycheck-julia"))])
- (flycheck-keg . [(20200726 218) ((emacs (24 3)) (keg (0 1)) (flycheck (0 1))) "Flycheck for Keg projects" single ((:commit . "926de8f43842380e7150d99971eb73ff84cb59cb") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/keg.el"))])
- (flycheck-kotlin . [(20230111 1907) ((flycheck (0 20))) "Support kotlin in flycheck" single ((:commit . "a2a6abb9a7f85c6fb15ce327459ec3c8ff780188") (:authors ("Elric Milon" . "whirm_REMOVETHIS__@gmx.com")) (:maintainers ("Elric Milon" . "whirm_REMOVETHIS__@gmx.com")) (:maintainer "Elric Milon" . "whirm_REMOVETHIS__@gmx.com"))])
- (flycheck-languagetool . [(20230329 1246) ((emacs (25 1)) (flycheck (0 14))) "Flycheck support for LanguageTool" single ((:commit . "04195838e21da84ec46d2940c2b3ee82d8beda70") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com") ("Peter Oliver" . "git@mavit.org.uk")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "grammar" "check") (:url . "https://github.com/emacs-languagetool/flycheck-languagetool"))])
- (flycheck-ledger . [(20200304 2204) ((emacs (24 1)) (flycheck (0 15))) "Flycheck integration for ledger files" single ((:commit . "628e25ba66604946085571652a94a54f4d1ad96f") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/purcell/flycheck-ledger"))])
- (flycheck-lilypond . [(20211006 2102) ((emacs (24 3)) (flycheck (0 22))) "LilyPond support in Flycheck" single ((:commit . "78f8c16cd67f9f6d3f1806e1fd403222723ba400") (:authors ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainers ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/hinrik/flycheck-lilypond"))])
- (flycheck-liquidhs . [(20170412 2326) ((flycheck (0 15))) "A flycheck checker for Haskell using liquid (i.e. liquidhaskell)" single ((:commit . "c27252ac24d77f4b6eec76a4ba9cd61761a3fba9") (:authors ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainers ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainer "Ranjit Jhala" . "jhala@cs.ucsd.edu") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/ucsd-progsys/liquidhaskell/flycheck-liquid.el"))])
- (flycheck-mercury . [(20181118 1952) ((flycheck (0 22)) (s (1 9 0)) (dash (2 4 0))) "Mercury support in Flycheck" single ((:commit . "b6807a8db70981e21a91a93324c31e49de85c89f") (:authors ("Matthias Güdemann" . "matthias.gudemann@gmail.com")) (:maintainers ("Matthias Güdemann" . "matthias.gudemann@gmail.com")) (:maintainer "Matthias Güdemann" . "matthias.gudemann@gmail.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/flycheck/flycheck-mercury"))])
- (flycheck-mmark . [(20190713 1323) ((emacs (24 4)) (flycheck (0 29))) "Flycheck checker for the MMark markdown processor" single ((:commit . "c796a2f18884bfc2afeec1fb2060da0f4044ddee") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "convenience" "text") (:url . "https://github.com/mmark-md/flycheck-mmark"))])
- (flycheck-mypy . [(20200113 1336) ((flycheck (0 18))) "Support mypy in flycheck" single ((:commit . "12a77ee8ee3f6e774365f63be3cd5aede6462dd5") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainers ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com"))])
- (flycheck-nim . [(20190927 1514) ((dash (2 4 0)) (flycheck (0 20))) "Defines a flycheck syntax checker for nim" single ((:commit . "ddfade51001571c2399f78bcc509e0aa8eb752a4") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainers ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com") (:url . "https://github.com/ALSchwalm/flycheck-nim"))])
- (flycheck-nimsuggest . [(20171027 2208) ((flycheck (0 23)) (emacs (24 3))) "flycheck backend for Nim using nimsuggest" single ((:commit . "dc9a5de1cb3ee05db5794d824610959a1f603bc9") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:url . "https://github.com/yuutayamada/flycheck-nimsuggest"))])
- (flycheck-objc-clang . [(20210911 1023) ((emacs (24 4)) (flycheck (26))) "Flycheck: Objective-C support using Clang" single ((:commit . "5a441a31e58de17da94f933277150be39198d98c") (:authors ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainers ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainer "Goichi Hirakawa" . "gooichi@gyazsquare.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/GyazSquare/flycheck-objc-clang"))])
- (flycheck-ocaml . [(20220730 542) ((emacs (24 3)) (flycheck (32)) (merlin (3 0 1)) (let-alist (1 0 3))) "Flycheck: OCaml support" single ((:commit . "7d7b969cba6ff75fd0e5694aa0ffd6be05beb390") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "convenience" "tools" "languages" "ocaml") (:url . "https://github.com/flycheck/flycheck-ocaml"))])
- (flycheck-package . [(20210509 2325) ((emacs (24 1)) (flycheck (0 22)) (package-lint (0 2))) "A Flycheck checker for elisp package authors" single ((:commit . "ecd03f83790611888d693c684d719e033f69cb40") (:authors ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "lisp") (:url . "https://github.com/purcell/flycheck-package"))])
- (flycheck-pact . [(20180920 2052) ((emacs (24 3)) (flycheck (0 25)) (pact-mode (0 0 4))) "Flycheck support for pact-mode" single ((:commit . "0e10045064ef89ec8b6f5a473073d47b976a2ca3") (:authors ("Stuart Popejoy")) (:maintainers ("Stuart Popejoy" . "stuart@kadena.io")) (:maintainer "Stuart Popejoy" . "stuart@kadena.io") (:keywords "pact" "lisp" "languages" "blockchain" "smartcontracts" "tools" "linting") (:url . "http://github.com/kadena-io/flycheck-pact"))])
- (flycheck-pest . [(20200710 2327) ((emacs (26 3)) (flycheck (31)) (pest-mode (0 1))) "Flycheck integration for Pest -" single ((:commit . "43447a2c70f98edd1139005e32f437d3f142442b") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience" "flycheck") (:url . "https://github.com/ksqsf/pest-mode"))])
- (flycheck-php-noverify . [(20211005 401) ((flycheck (0 22))) "Flycheck checker for PHP Noverify linter" single ((:commit . "3aa3035c637eb0476f05bd0fbc66c058aa67ffb7") (:url . "https://github.com/Junker/flycheck-php-noverify"))])
- (flycheck-phpstan . [(20230417 1142) ((emacs (24 3)) (flycheck (26)) (phpstan (0 7 2))) "Flycheck integration for PHPStan" single ((:commit . "2dc25cb2f3d83484ea0eb063c9ffca8148828a2b") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/phpstan.el"))])
- (flycheck-pkg-config . [(20230119 1721) ((dash (2 8 0)) (s (1 9 0)) (flycheck (29))) "configure flycheck using pkg-config" single ((:commit . "c4e4028f6621187365b7362566ac2786206765a1") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "flycheck"))])
- (flycheck-plantuml . [(20171018 111) ((flycheck (0 24)) (emacs (24 4)) (plantuml-mode (1 2 2))) "Integrate plantuml with flycheck" single ((:commit . "183be89e1dbba0b38237dd198dff600e0790309d") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-plantuml"))])
- (flycheck-pony . [(20210118 1327) ((flycheck (0 25 1))) "Pony support in Flycheck" single ((:commit . "22787cf8223ca9ec309e30a42c20a8e706d8bfbe") (:keywords "tools" "convenience") (:url . "https://github.com/seantallen/flycheck-pony"))])
- (flycheck-popup-tip . [(20170812 2351) ((flycheck (0 22)) (popup (0 5)) (emacs (24))) "Display Flycheck error messages using popup.el" single ((:commit . "ef86aad907f27ca076859d8d9416f4f7727619c6") (:authors ("Saša Jovanić" . "sasa@simplify.ba")) (:maintainers ("Saša Jovanić" . "sasa@simplify.ba")) (:maintainer "Saša Jovanić" . "sasa@simplify.ba") (:keywords "convenience" "tools" "flycheck" "tooltip") (:url . "https://github.com/flycheck/flycheck-popup-tip/"))])
- (flycheck-pos-tip . [(20200516 1600) ((emacs (24 1)) (flycheck (0 22)) (pos-tip (0 4 6))) "Display Flycheck errors in GUI tooltips" single ((:commit . "dc57beac0e59669926ad720c7af38b27c3a30467") (:authors ("Akiha Senda" . "senda.akiha@gmail.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "tools" "convenience") (:url . "https://github.com/flycheck/flycheck-pos-tip"))])
- (flycheck-posframe . [(20220715 133) ((flycheck (0 24)) (emacs (26)) (posframe (0 7 0))) "Show flycheck error messages using posframe.el" single ((:commit . "19896b922c76a0f460bf3fe8d8ebc2f9ac9028d8") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-posframe"))])
- (flycheck-projectile . [(20201031 1952) ((emacs (25 1)) (flycheck (31)) (projectile (2 2))) "Project-wide errors" single ((:commit . "ce6e9e8793a55dace13d5fa13badab2dca3b5ddb") (:authors ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainer "Nikita Bloshchanevich" . "nikblos@outlook.com") (:url . "https://github.com/nbfalcon/flycheck-projectile"))])
- (flycheck-prospector . [(20180524 450) ((flycheck (0 22))) "Support prospector in flycheck" single ((:commit . "d5b81adb5c8261b935baf0a614dd4b776280392e") (:authors ("Carlos Coelho" . "carlospecter@gmail.com")) (:maintainers ("Carlos Coelho" . "carlospecter@gmail.com")) (:maintainer "Carlos Coelho" . "carlospecter@gmail.com") (:url . "https://github.com/chocoelho/flycheck-prospector"))])
- (flycheck-psalm . [(20211002 1555) ((emacs (24 3)) (flycheck (26)) (psalm (0 6 0))) "Flycheck integration for Psalm" single ((:commit . "28d546a79cb865a78b94cd7e929d66d720505faa") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/psalm.el"))])
- (flycheck-pycheckers . [(20220923 2250) ((flycheck (0 18))) "multiple syntax checker for Python, using Flycheck" tar ((:commit . "897fba15787df94c1ce6a48551f1b149940ffc25") (:keywords "convenience" "tools" "languages") (:url . "https://github.com/msherry/flycheck-pycheckers"))])
- (flycheck-pyflakes . [(20170330 2311) ((flycheck (0 18))) "Support pyflakes in flycheck" single ((:commit . "61b045939e3743b2162b7e4e73249c66fc2b8f65") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))])
- (flycheck-pyre . [(20190215 1222) ((emacs (24)) (flycheck (29)) (cl-lib (0 6))) "Support Pyre in flycheck" tar ((:commit . "0560122caae207d99d8af1ac2b4e5d6f6a1ce444") (:authors ("Vyacheslav Linnik" . "vyacheslav.linnik@gmail.com")) (:maintainers ("Vyacheslav Linnik" . "vyacheslav.linnik@gmail.com")) (:maintainer "Vyacheslav Linnik" . "vyacheslav.linnik@gmail.com") (:url . "https://github.com/linnik/flycheck-pyre"))])
- (flycheck-raku . [(20220420 732) ((emacs (26 3)) (flycheck (0 22))) "Raku support in Flycheck" single ((:commit . "4da1970a75396aff1957b07f7579c1de6b817e6b") (:authors ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com") ("Johnathon Weare" . "jrweare@gmail.com") ("Siavash Askari Nasr" . "siavash.askari.nasr@gmail.com")) (:maintainers ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/Raku/flycheck-raku"))])
- (flycheck-relint . [(20200721 2217) ((emacs (26 1)) (flycheck (0 22)) (relint (1 15))) "A Flycheck checker for elisp regular expressions" single ((:commit . "d1e54d4bfdb12d0b60a1b9a8c2b11799426ddc57") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "lisp") (:url . "https://github.com/purcell/flycheck-relint"))])
- (flycheck-rtags . [(20191222 920) ((emacs (24)) (flycheck (0 23)) (rtags (2 10))) "RTags Flycheck integration" single ((:commit . "595055b5316a7c92ba1d638f324f98842a0f41a5") (:authors ("Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com")) (:maintainers ("Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com")) (:maintainer "Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com") (:url . "https://github.com/Andersbakken/rtags"))])
- (flycheck-rust . [(20190319 1546) ((emacs (24 1)) (flycheck (28)) (dash (2 13 0)) (seq (2 3)) (let-alist (1 0 4))) "Flycheck: Rust additions and Cargo support" single ((:commit . "a139cd53c5062697e9ed94ad80b803c37d999600") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "tools" "convenience") (:url . "https://github.com/flycheck/flycheck-rust"))])
- (flycheck-stan . [(20211129 2051) ((emacs (25 1)) (flycheck (0 16 0)) (stan-mode (10 3 0))) "Add Stan support for Flycheck" tar ((:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu") (:keywords "c" "languages") (:url . "https://github.com/stan-dev/stan-mode/tree/master/flycheck-stan"))])
- (flycheck-status-emoji . [(20180516 229) ((cl-lib (0 1)) (emacs (24)) (flycheck (0 20)) (let-alist (1 0))) "Show flycheck status using cute, compact emoji" single ((:commit . "4bd113ab42dec9544b66e0a27ed9008ce8148433") (:authors ("Ben Liblit" . "liblit@acm.org")) (:maintainers ("Ben Liblit" . "liblit@acm.org")) (:maintainer "Ben Liblit" . "liblit@acm.org") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/liblit/flycheck-status-emoji"))])
- (flycheck-swift . [(20170129 549) ((emacs (24 4)) (flycheck (0 25))) "Flycheck extension for Apple's Swift." single ((:commit . "c6c416a1b7a7d346e5c040e4e4065abc68d3a844") (:keywords "languages" "swift"))])
- (flycheck-swift3 . [(20221227 1307) ((emacs (25 1)) (flycheck (26))) "Flycheck: Swift support for Apple swift-mode" single ((:commit . "14cb83c71a03bb7ae0952ee1707783219fda980e") (:authors ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainers ("Goichi Hirakawa" . "gooichi@gyazsquare.com")) (:maintainer "Goichi Hirakawa" . "gooichi@gyazsquare.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/GyazSquare/flycheck-swift3"))])
- (flycheck-swiftlint . [(20180830 340) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Swiftlint." single ((:commit . "65101873c4c9f8e7eac9471188b161eeddda1555") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "languages" "swiftlint" "swift" "emacs") (:url . "https://github.com/jojojames/flycheck-swiftlint"))])
- (flycheck-swiftx . [(20200814 845) ((emacs (26 1)) (flycheck (26)) (xcode-project (1 0))) "Flycheck: Swift backend" single ((:commit . "4d0c8ca0540b06fb947a83f1a38a6003a5abe0d4") (:authors ("John Buckley" . "john@olivetoast.com")) (:maintainers ("John Buckley" . "john@olivetoast.com")) (:maintainer "John Buckley" . "john@olivetoast.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/nhojb/flycheck-swiftx"))])
- (flycheck-tcl . [(20180327 1259) ((emacs (24 4)) (flycheck (0 22))) "A flycheck checker for Tcl using tclchecker" single ((:commit . "7ca23f4673e178b9f5dcc8a82b86cf05b15d7236") (:authors ("Niels Widger" . "niels.widger@gmail.com")) (:maintainers ("Niels Widger" . "niels.widger@gmail.com")) (:maintainer "Niels Widger" . "niels.widger@gmail.com") (:url . "https://github.com/nwidger/flycheck-tcl"))])
- (flycheck-tip . [(20171020 1048) ((flycheck (29)) (emacs (24 1)) (popup (0 5 0))) "Show flycheck/flymake errors by tooltip" tar ((:commit . "a8ea6c905e8ad2d0684a17f7e78ba11e8598e85d") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "flycheck") (:url . "https://github.com/yuutayamada/flycheck-tip"))])
- (flycheck-title . [(20210321 558) ((flycheck (30)) (emacs (24))) "show flycheck errors in the frame title" single ((:commit . "74e4375f372f7b9ce0fdfa34dc74a048376679ae") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))])
- (flycheck-vale . [(20220929 608) ((emacs (24 4)) (flycheck (0 22)) (let-alist (1 0 4))) "flycheck integration for vale" single ((:commit . "7c7ebc3de058a321cb76348a01f45f02dc55d2f0") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/flycheck-vale"))])
- (flycheck-vdm . [(20190304 839) ((emacs (24)) (flycheck (32 -4)) (vdm-mode (0 0 4))) "Syntax checking for vdm-mode" single ((:commit . "103993147b24325ef68099d087dce9ac501f02f9") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:keywords "languages") (:url . "https://github.com/peterwvj/vdm-mode"))])
- (flycheck-xcode . [(20180122 651) ((emacs (25 1)) (flycheck (0 25))) "Flycheck extension for Apple's Xcode." single ((:commit . "6147ab777e2c08e4f5ffdbd85d3013ca700fa835") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "languages" "xcode") (:url . "https://github.com/jojojames/flycheck-xcode"))])
- (flycheck-yamllint . [(20170326 1309) ((flycheck (30))) "Flycheck integration for YAMLLint" single ((:commit . "aa211b1243168a4f752888c0014c5b9d2da178b1") (:authors ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainers ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainer "Krzysztof Magosa" . "krzysztof@magosa.pl") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/krzysztof-magosa/flycheck-yamllint"))])
- (flycheck-yang . [(20180312 1831) ((yang-mode (0 9 4)) (flycheck (0 18))) "YANG flycheck checker" single ((:commit . "47881fc42ef0163c47064b72b5d6dbef4f83d778") (:authors (nil . "Andrew Fort (@andaru)")) (:maintainers (nil . "Andrew Fort (@andaru)")) (:maintainer nil . "Andrew Fort (@andaru)"))])
- (flycheck-ycmd . [(20181016 618) ((emacs (24)) (dash (2 13 0)) (flycheck (0 22)) (ycmd (1 2)) (let-alist (1 0 5))) "flycheck integration for ycmd" single ((:commit . "ef87d020d3314efbac2e8925c115d0ac5c128c2a") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/emacs-ycmd"))])
- (flymake-aspell . [(20230408 957) ((emacs (26 1))) "Aspell checker for flymake" single ((:commit . "45cd22c52b676abbdf405d9fe16b7073b954ed77") (:authors ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainers ("Leo Gaskin" . "leo.gaskin@le0.gs")) (:maintainer "Leo Gaskin" . "leo.gaskin@le0.gs") (:keywords "wp" "flymake" "spell" "aspell") (:url . "https://github.com/leotaku/flycheck-aspell"))])
- (flymake-coffee . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for coffee script" single ((:commit . "dee295acf30820ed15fe0de17137d50bc27fc80c") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-coffee"))])
- (flymake-collection . [(20230420 849) ((emacs (28 1)) (let-alist (1 0)) (flymake (1 2 1))) "Collection of checkers for flymake, bringing flymake to the level of flycheck" tar ((:commit . "16a41c45ea1837b96425dcb906b9209611e21280") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe") (:keywords "language" "tools") (:url . "https://github.com/mohkale/flymake-collection"))])
- (flymake-cspell . [(20230208 2155) ((emacs (26 1))) "A Flymake backend for CSpell" single ((:commit . "c68bf7eef99ddb2fbd780f175e869df2db5d768f") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "wp") (:url . "https://github.com/fritzgrabo/flymake-cspell"))])
- (flymake-css . [(20170723 146) ((flymake-easy (0 1))) "Flymake support for css using csslint" single ((:commit . "de090163ba289910ceeb61b13368ce42d0f2dfd8") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-css"))])
- (flymake-cursor . [(20220506 1458) ((flymake (0 3))) "Show flymake messages in the minibuffer after delay" single ((:commit . "95806594cacddbbc0c3aa2351a6a7cf28e73a8bf") (:authors ("Unknown Original Author") ("Dino Chiesa" . "dpchiesa@hotmail.com") ("Sam Graham <libflymake-emacs BLAHBLAH illusori.co.uk>")) (:maintainers ("Sam Graham <libflymake-emacs BLAHBLAH illusori.co.uk>")) (:maintainer "Sam Graham <libflymake-emacs BLAHBLAH illusori.co.uk>") (:keywords "languages" "mode" "flymake") (:url . "https://github.com/flymake/emacs-flymake-cursor"))])
- (flymake-diagnostic-at-point . [(20180815 1004) ((emacs (26 1)) (popup (0 5 3))) "Display flymake diagnostics at point" single ((:commit . "379616b1c6f5ebeaf08fbe54ae765008a78b3be7") (:authors ("Ricardo Martins" . "ricardo@scarybox.net")) (:maintainers ("Ricardo Martins" . "ricardo@scarybox.net")) (:maintainer "Ricardo Martins" . "ricardo@scarybox.net") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/meqif/flymake-diagnostic-at-point"))])
- (flymake-easy . [(20141022 1828) nil "Helpers for easily building flymake checkers" single ((:commit . "2a24f260cdc3b9c8f9263b653a475d90efa1d392") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "internal") (:url . "https://github.com/purcell/flymake-easy"))])
- (flymake-elisp-config . [(20221110 1626) ((emacs (28 1))) "Setup load-path for flymake on Emacs Lisp mode" single ((:commit . "e946d9a761a8427dfdd0ae634bcfce4d56111947") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "lisp") (:url . "https://github.com/ROCKTAKEY/flymake-elisp-config"))])
- (flymake-elixir . [(20130810 1417) nil "A flymake handler for elixir-mode .ex files." single ((:commit . "3810566cffe35d04cc3f01e27fe397d68d52f802") (:authors ("Sylvain Benner" . "syl20bnr@gmail.com")) (:maintainers ("Sylvain Benner" . "syl20bnr@gmail.com")) (:maintainer "Sylvain Benner" . "syl20bnr@gmail.com"))])
- (flymake-eslint . [(20230301 1441) ((emacs (26 1))) "A Flymake backend for Javascript using eslint" single ((:commit . "82b1345c699172b6092e13be2c4cc10551d88b90") (:authors ("Dan Orzechowski")) (:maintainers ("Dan Orzechowski")) (:maintainer "Dan Orzechowski") (:keywords "languages" "tools") (:url . "https://github.com/orzechowskid/flymake-eslint"))])
- (flymake-flycheck . [(20220313 924) ((flycheck (31)) (emacs (26 1))) "Use flycheck checkers as flymake backends" single ((:commit . "850a3f2f6908db5d4a3739e385b2c9fb3ad488f9") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/purcell/flymake-flycheck"))])
- (flymake-gjshint . [(20130327 1232) nil "A flymake handler for javascript using both jshint and gjslint" single ((:commit . "71495ee5303de18293decd57ab9f9abdbaabfa05") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "flymake" "javascript" "jshint" "gjslint"))])
- (flymake-go . [(20150714 733) nil "A flymake handler for go-mode files" single ((:commit . "ae83761aa908c1a50ff34af04f00dcc46bca2ce9") (:authors ("Michael Fellinger" . "michael@iron.io") ("Robert Zaremba" . "robert.marek.zaremba@wp.eu")) (:maintainers ("Michael Fellinger" . "michael@iron.io")) (:maintainer "Michael Fellinger" . "michael@iron.io") (:keywords "go" "flymake") (:url . "https://github.com/robert-zaremba/flymake-go"))])
- (flymake-go-staticcheck . [(20220804 1907) ((emacs (26 1))) "Go staticcheck linter for flymake" single ((:commit . "9098f7e07ea6513667dc6af6d9ad2fa854464d20") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:keywords "languages" "tools") (:url . "https://github.com/s-kostyaev/flymake-go-staticcheck"))])
- (flymake-golangci . [(20191028 1927) ((flymake-easy (0 1)) (emacs (24))) "A flymake handler for go-mode files using Golang CI lint" single ((:commit . "dfc31a1a6ae3f087b49fe6f5f21b3866780aa91c") (:authors ("Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx")) (:maintainers ("Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx")) (:maintainer "Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx") (:url . "https://gitlab.com/shackra/flymake-golangci"))])
- (flymake-gradle . [(20190315 233) ((emacs (26 1))) "Flymake extension for Gradle." single ((:commit . "dbedd29b78d4828ef57d4de20867be5df3eaab99") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "languages" "gradle") (:url . "https://github.com/jojojames/flymake-gradle"))])
- (flymake-grammarly . [(20221231 1655) ((emacs (26 1)) (grammarly (0 3 0)) (s (1 12 0))) "Flymake support for Grammarly" single ((:commit . "078edd6e083067f2ad3b3beaa0098c16cebe3994") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "grammar" "check") (:url . "https://github.com/emacs-grammarly/flymake-grammarly"))])
- (flymake-hadolint . [(20220328 823) ((emacs (26 1))) "Flymake backend for hadolint, a Dockerfile linter" single ((:commit . "82a6df7f6cc95e1ab95c5d28f2edcd8c1d4c7382") (:authors ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainer "Taiki Sugawara" . "buzz.taiki@gmail.com") (:keywords "convenience" "processes" "docker" "flymake") (:url . "https://github.com/buzztaiki/flymake-hadolint"))])
- (flymake-haml . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for haml files" single ((:commit . "22a81e8484734552d461e7ae7305664dc244447e") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-haml"))])
- (flymake-haskell-multi . [(20170723 146) ((flymake-easy (0 1))) "Syntax-check haskell-mode using both ghc and hlint" tar ((:commit . "b564a94312259885b1380272eb867bf52a164020") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-haskell-multi"))])
- (flymake-hlint . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for haskell-mode files using hlint" single ((:commit . "f910736b26784efc9a2fa29503f45c1f1dd0aa38") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-hlint"))])
- (flymake-joker . [(20200315 1429) ((emacs (26 1)) (flymake-quickdef (0 1 1))) "Add Clojure syntax checker (via Joker) to flymake" single ((:commit . "fc132beedac9e6f415b72e578e77318fd13af9ee") (:authors ("Mateusz Probachta" . "mateusz.probachta@gmail.com")) (:maintainers ("Mateusz Probachta" . "mateusz.probachta@gmail.com")) (:maintainer "Mateusz Probachta" . "mateusz.probachta@gmail.com") (:url . "https://github.com/beetleman/flymake-joker"))])
- (flymake-jshint . [(20140319 2200) ((flymake-easy (0 8))) "making flymake work with JSHint" single ((:commit . "79dd554c227883c487db38ac111306c8d5382c95") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "flymake" "jshint" "javascript"))])
- (flymake-jslint . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for javascript using jslint" single ((:commit . "8edb82be605542b0ef62d38d818adcdde335eecb") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-jslint"))])
- (flymake-json . [(20180511 911) ((flymake-easy (0 1))) "A flymake handler for json using jsonlint" single ((:commit . "ae58795f948402e987cda4c15f10354f8ec2d0fd") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-json"))])
- (flymake-kondor . [(20211026 501) ((emacs (26 1))) "Linter with clj-kondo" single ((:commit . "784e57f36812a37e323409b90b935ef3c6920a22") (:authors ("https://turbocafe.keybase.pub")) (:maintainers ("https://turbocafe.keybase.pub")) (:maintainer "https://turbocafe.keybase.pub") (:url . "https://github.com/turbo-cafe/flymake-kondor"))])
- (flymake-ktlint . [(20180831 346) ((emacs (26 1))) "Flymake extension for Ktlint." single ((:commit . "bea8bf350802c06756efd4e6dfba65f31dc41d78") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "languages" "ktlint") (:url . "https://github.com/jojojames/flymake-ktlint"))])
- (flymake-languagetool . [(20230122 1609) ((emacs (27 1))) "Flymake support for LanguageTool" single ((:commit . "ad8c724147d5a3a9f6ee59e0c7581e68fba4a2f8") (:keywords "convenience" "grammar" "check") (:url . "https://github.com/emacs-languagetool/flymake-languagetool"))])
- (flymake-less . [(20151111 738) ((less-css-mode (0 15)) (flymake-easy (0 1))) "Flymake handler for LESS stylesheets (lesscss.org)" single ((:commit . "32d3c28a9a5c52b82d1741ff9d715013b6498421") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages"))])
- (flymake-lua . [(20170129 154) nil "Flymake for Lua" single ((:commit . "dcc32b62a285215898ae774ba63dbda0656f6f53") (:authors (nil . "Sébastien Roccaserra (format \"<%s%s@%s.%s>\" \"s\" \"roccaserra\" \"yahoo\" \"com\")")) (:maintainers (nil . "Sébastien Roccaserra (format \"<%s%s@%s.%s>\" \"s\" \"roccaserra\" \"yahoo\" \"com\")")) (:maintainer nil . "Sébastien Roccaserra (format \"<%s%s@%s.%s>\" \"s\" \"roccaserra\" \"yahoo\" \"com\")") (:keywords "lua"))])
- (flymake-markdownlint . [(20220320 1208) ((emacs (27 1))) "Markdown linter with markdownlint" single ((:commit . "59e3520668d9394c573e07b7980a2d48d9f6086c") (:authors ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainers ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainer "Martin Kjær Jørgensen" . "mkj@gotu.dk") (:url . "https://github.com/shaohme/flymake-markdownlint"))])
- (flymake-nasm . [(20210310 1540) ((flymake-quickdef (1 0 0)) (emacs (26 1))) "A flymake handler for asm-mode files using nasm" single ((:commit . "27e58d7f3a48ca6fc12238fe6c888a3fdffc3f75") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel")) (:maintainer "Jürgen Hötzel") (:keywords "tools" "languages") (:url . "http://github.com/juergenhoetzel/flymake-nasm"))])
- (flymake-perlcritic . [(20120328 814) ((flymake (0 3))) "Flymake handler for Perl to invoke Perl::Critic" tar ((:commit . "0692d6ad5495f6e5438bde0a10345829b8e1def8") (:authors ("Sam Graham <libflymake-perlcritic-emacs BLAHBLAH illusori.co.uk>")) (:maintainers ("Sam Graham <libflymake-perlcritic-emacs BLAHBLAH illusori.co.uk>")) (:maintainer "Sam Graham <libflymake-perlcritic-emacs BLAHBLAH illusori.co.uk>") (:url . "https://github.com/illusori/emacs-flymake-perlcritic"))])
- (flymake-pest . [(20200710 2327) ((emacs (26 3)) (pest-mode (0 1))) "A flymake handler for Pest files" single ((:commit . "43447a2c70f98edd1139005e32f437d3f142442b") (:authors ("ksqsf" . "i@ksqsf.moe") ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("ksqsf" . "i@ksqsf.moe")) (:maintainer "ksqsf" . "i@ksqsf.moe") (:keywords "languages" "flymake") (:url . "https://github.com/ksqsf/pest-mode"))])
- (flymake-php . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for php-mode files" single ((:commit . "c045d01e002ba5e09b05f40e25bf5068d02126bc") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-php"))])
- (flymake-phpcs . [(20210213 732) ((flymake-easy (0 9))) "making flymake work with PHP CodeSniffer" single ((:commit . "f947ba3066c1fa903d2ec69d67bf84413f51eb3f") (:authors ("Akiha Senda")) (:maintainers ("Akiha Senda")) (:maintainer "Akiha Senda") (:keywords "flymake" "phpcs" "php") (:url . "https://github.com/senda-akiha/flymake-phpcs/"))])
- (flymake-phpstan . [(20230417 1142) ((emacs (26 1)) (phpstan (0 7 2))) "Flymake backend for PHP using PHPStan" single ((:commit . "2dc25cb2f3d83484ea0eb063c9ffca8148828a2b") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/phpstan.el"))])
- (flymake-puppet . [(20170801 554) ((flymake-easy (0 9))) "Flymake handler using puppet-lint" single ((:commit . "9579e5c736cb890195464fabf51df113313de88d") (:authors ("Ben Prew")) (:maintainers ("Ben Prew")) (:maintainer "Ben Prew") (:url . "https://github.com/benprew/flymake-puppet"))])
- (flymake-python-pyflakes . [(20170723 146) ((flymake-easy (0 8))) "A flymake handler for python-mode files using pyflakes (or flake8)" single ((:commit . "1d65c26bf65a5dcbd29fcd967e2feb90e1e7a33d") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-python-pyflakes"))])
- (flymake-quickdef . [(20200308 2342) ((emacs (26 1))) "Quickly define a new Flymake backend" single ((:commit . "150c5839768a3d32f988f9dc08052978a68f2ad7") (:authors ("Karl Otness")) (:maintainers ("Karl Otness")) (:maintainer "Karl Otness") (:keywords "languages" "tools" "convenience" "lisp") (:url . "https://github.com/karlotness/flymake-quickdef"))])
- (flymake-racket . [(20210105 606) ((emacs (26 1))) "Flymake extension for Racket." single ((:commit . "3d3e5f2a9ab696670f9e52baa4dde7b84b7542df") (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "languages" "racket" "scheme") (:url . "https://github.com/jojojames/flymake-racket"))])
- (flymake-rakudo . [(20220424 637) ((emacs (28 1)) (flymake-collection (2 0 0)) (let-alist (1 0))) "Flymake syntax checker for Rakudo" single ((:commit . "f8e3d03a7207876cd891174702efd572d74f2e49") (:authors ("Siavash Askari Nasr" . "ciavash@proton.me")) (:maintainers ("Siavash Askari Nasr" . "ciavash@proton.me")) (:maintainer "Siavash Askari Nasr" . "ciavash@proton.me") (:keywords "language" "tools" "convenience") (:url . "https://github.com/Raku/flymake-rakudo"))])
- (flymake-ruby . [(20170723 146) ((flymake-easy (0 1))) "A flymake handler for ruby-mode files" single ((:commit . "6c320c6fb686c5223bf975cc35178ad6b195e073") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-ruby"))])
- (flymake-ruff . [(20230128 1739) ((emacs (26 1))) "A flymake plugin for python files using ruff" single ((:commit . "1567685414c81a24303058631d6ee81fb78eee73") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io") (:url . "https://github.com/erickgnavar/flymake-ruff"))])
- (flymake-sass . [(20170723 146) ((flymake-easy (0 1))) "Flymake handler for sass and scss files" single ((:commit . "2de28148e92deb93bff3d55fe14e7c67ac476056") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-sass"))])
- (flymake-shell . [(20170723 146) ((flymake-easy (0 1))) "A flymake syntax-checker for shell scripts" single ((:commit . "a16cf453056b9849cc7c912bb127fb0b08fc6dab") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/flymake-shell"))])
- (flymake-shellcheck . [(20220308 2218) ((emacs (26))) "A bash/sh Flymake backend powered by ShellCheck" single ((:commit . "1ad9acb599e6be6aac57280b7c918b0e4a0f07de") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com") (:url . "https://github.com/federicotdn/flymake-shellcheck"))])
- (flymake-solidity . [(20170805 644) ((flymake-easy (0 10))) "A flymake handler for solidity using solc" single ((:commit . "48bfe9525f764d8a68cc0270905dbf45bfd00bb8") (:authors ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainers ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainer "Pascal van Kooten" . "kootenpv@gmail.com") (:url . "https://github.com/kootenvp/flymake-solidity"))])
- (flymake-sqlfluff . [(20230129 2035) ((emacs (27 1))) "A flymake plugin for SQL files using sqlfluff" single ((:commit . "f7921a5b762eb0675b8fca7cfb00273a76eaee5b") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io") (:url . "https://github.com/erickgnavar/flymake-sqlfluff"))])
- (flymake-swi-prolog . [(20220404 950) ((emacs (26 1))) "A Flymake backend for SWI-Prolog" single ((:commit . "ae0e4b706a40b71c007ed6cb0ec5425d49bea4c3") (:authors ("Eshel Yaron")) (:maintainers ("Eshel Yaron")) (:maintainer "Eshel Yaron") (:keywords "languages") (:url . "https://git.sr.ht/~eshel/flymake-swi-prolog"))])
- (flymake-vala . [(20150326 531) ((flymake-easy (0 1))) "A flymake handler for vala-mode files" single ((:commit . "c3674f461fc84fb0300cd3a562fb903a59782745") (:authors ("Daniel Lawrence" . "dannyla@linux.com")) (:maintainers ("Daniel Lawrence" . "dannyla@linux.com")) (:maintainer "Daniel Lawrence" . "dannyla@linux.com") (:keywords "convenience" "vala") (:url . "https://github.com/daniellawrence/flymake-vala"))])
- (flymake-vnu . [(20230310 440) ((emacs (26 1))) "Flymake extension for the v.Nu HTML validator." single ((:commit . "e9c6038f69ad1523e603026155d9acd5fc3d5aac") (:maintainers ("Stefan Kuznetsov" . "skuznetsov@posteo.net")) (:maintainer "Stefan Kuznetsov" . "skuznetsov@posteo.net") (:keywords "languages") (:url . "https://github.com/theneosloth/flymake-vnu"))])
- (flymake-yaml . [(20130423 1548) ((flymake-easy (0 1))) "A flymake handler for YAML" single ((:commit . "0dd11eed29fe4054ff5b4e06e2c39b4d925d6aae") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "yaml") (:url . "https://github.com/yasuyk/flymake-yaml"))])
- (flymake-yamllint . [(20230226 1024) ((emacs (26 1))) "YAML linter with yamllint" single ((:commit . "020d2a33568c8069801db9dd6992b8961a58de8d") (:authors ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainers ("Martin Kjær Jørgensen" . "mkj@gotu.dk")) (:maintainer "Martin Kjær Jørgensen" . "mkj@gotu.dk") (:url . "https://github.com/shaohme/flymake-yamllint"))])
- (flymd . [(20160617 1214) ((cl-lib (0 5))) "On the fly markdown preview" tar ((:commit . "84d5a68bcfed4a295952c33ffcd11e880978d9d7") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:keywords "markdown" "convenience") (:url . "https://github.com/mola-T/flymd"))])
- (flyparens . [(20140723 1846) nil "Check for unbalanced parens on the fly" tar ((:commit . "af9b8cfd647d0e5f97684d613dc2eea7cfc19398") (:authors ("Jisang Yoo")) (:maintainers ("Jisang Yoo")) (:maintainer "Jisang Yoo") (:keywords "faces" "convenience" "lisp" "matching" "parentheses" "parens"))])
- (flyspell-correct . [(20220520 630) ((emacs (24))) "Correcting words with flyspell via custom interface" tar ((:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))])
- (flyspell-correct-avy-menu . [(20220520 630) ((flyspell-correct (0 6 1)) (avy-menu (0 1 1)) (emacs (24))) "Correcting words with flyspell via avy-menu interface" single ((:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:authors ("Boris Buliga" . "boris@d12frosted.io") ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))])
- (flyspell-correct-helm . [(20220520 630) ((flyspell-correct (0 6 1)) (helm (1 9 0)) (emacs (24))) "Correcting words with flyspell via helm interface" single ((:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))])
- (flyspell-correct-ivy . [(20220520 630) ((flyspell-correct (0 6 1)) (ivy (0 8 0)) (emacs (24 4))) "Correcting words with flyspell via ivy interface" single ((:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))])
- (flyspell-correct-popup . [(20220520 630) ((flyspell-correct (0 6 1)) (popup (0 5 3)) (emacs (24))) "Correcting words with flyspell via popup interface" single ((:commit . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))])
- (flyspell-lazy . [(20210308 1253) nil "Improve flyspell responsiveness using idle timers" single ((:commit . "0fc5996bcee20b46cbd227ae948d343c3bef7339") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "spelling") (:url . "http://github.com/rolandwalker/flyspell-lazy"))])
- (flyspell-popup . [(20170529 815) ((popup (0 5 0))) "Correcting words with Flyspell in popup menus" single ((:commit . "29311849bfd253b9b689bf331860b4c4d3bd4dde") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "convenience") (:url . "https://github.com/xuchunyang/flyspell-popup"))])
- (fm-bookmarks . [(20170104 1716) ((emacs (24 3)) (cl-lib (0 5))) "Use file manager bookmarks (eg Dolphin, Nautilus, PCManFM) in Dired" single ((:commit . "11dacfd16a926bfecba96a94c6b13e162c7717f7") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainers ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com") (:keywords "files" "convenience") (:url . "http://github.com/kuanyui/fm-bookmarks.el"))])
- (fn . [(20210304 1812) ((emacs (24)) (cl-lib (0 5)) (dash (2 18 0))) "Concise anonymous functions for Emacs Lisp" single ((:commit . "98e3fe1b4785e162d9aca978a2db106baa79260f") (:authors ("Troy Pracy")) (:maintainers ("Troy Pracy")) (:maintainer "Troy Pracy") (:keywords "functional"))])
- (focus . [(20221016 1846) ((emacs (24 3)) (cl-lib (0 5))) "Dim the font color of text in surrounding sections" single ((:commit . "2507ec4ec5a9402647ef85540669db1815520c15") (:authors ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainers ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainer "Lars Tveito" . "larstvei@ifi.uio.no") (:url . "http://github.com/larstvei/Focus"))])
- (focus-autosave-mode . [(20160519 2116) ((emacs (24 4))) "Automatically save files in focus-out-hook." single ((:commit . "e89ed22aa4dfc76e1b844b202aedd468ad58814a") (:authors ("Wojciech Siewierski" . "wojciech.siewierski@onet.pl")) (:maintainers ("Wojciech Siewierski" . "wojciech.siewierski@onet.pl")) (:maintainer "Wojciech Siewierski" . "wojciech.siewierski@onet.pl") (:keywords "convenience" "files" "frames" "mouse"))])
- (foggy-night-theme . [(20190123 1614) ((emacs (24))) "Dark low contrast theme with soft and muted colors." single ((:commit . "14894e06ee5c6e14db36f2cb07387ee971c1736f") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler"))])
- (fold-dwim . [(20140208 1637) nil "Unified user interface for Emacs folding modes" single ((:commit . "c46f4bb2ce91b4e307136320e72c28dd50b6cd8b") (:authors ("Peter Heslin" . "p.j.heslin@dur.ac.uk")) (:maintainers ("Peter Heslin" . "p.j.heslin@dur.ac.uk")) (:maintainer "Peter Heslin" . "p.j.heslin@dur.ac.uk") (:url . "http://www.dur.ac.uk/p.j.heslin/Software/Emacs"))])
- (fold-dwim-org . [(20131203 1351) ((fold-dwim (1 2))) "Fold DWIM bound to org key-strokes." single ((:commit . "c09bb2b46d65afbd1d0febc6fded7495be7a3037") (:authors ("Matthew L. Fidler & Shane Celis")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "folding" "emacs" "org-mode") (:url . "https://github.com/mlf176f2/fold-dwim-org"))])
- (fold-this . [(20191107 1816) nil "Just fold this region please" single ((:commit . "c3912c738cf0515f65162479c55999e2992afce5") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "convenience") (:url . "https://github.com/magnars/fold-this.el"))])
- (folding . [(20220110 1718) nil "A folding-editor-like minor mode." tar ((:commit . "1ce338b991c69358a607c37bfb16ffb7de7e91c4") (:maintainers ("Jari Aalto <jari aalto A T cante dt net>")) (:maintainer "Jari Aalto <jari aalto A T cante dt net>") (:keywords "tools"))])
- (font-lock-profiler . [(20170208 2008) ((emacs (24 3))) "Coverage and timing tool for font-lock keywords." single ((:commit . "6e096458416888a4f63cca0d6bc5965a052753c8") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces" "tools") (:url . "https://github.com/Lindydancer/font-lock-profiler"))])
- (font-lock-studio . [(20220629 1909) ((emacs (24 3))) "interactive debugger for Font Lock keywords." single ((:commit . "78472ae1f65721b4da17756ee7e506f3d0487033") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces" "tools") (:url . "https://github.com/Lindydancer/font-lock-studio"))])
- (font-utils . [(20210405 1149) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Utility functions for working with fonts" single ((:commit . "abc572eb0dc30a26584c0058c3fe6c7273a10003") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/font-utils"))])
- (fontawesome . [(20170305 1356) ((emacs (24 4))) "fontawesome utility" tar ((:commit . "a743f80bfd53767ca9ee32da34c5ca032172a480") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-fontawesome"))])
- (fontify-face . [(20210503 1956) ((emacs (24))) "Fontify symbols representing faces with that face." single ((:commit . "d1386c88ccc77ccfb40b888ff90d6181325d14f8") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "faces") (:url . "https://github.com/Fuco1/fontify-face"))])
- (fontsloth . [(20211118 2018) ((f (0 20 0)) (logito (0 1)) (pcache (0 5)) (stream (2 2 5)) (emacs (28 0))) "Elisp otf/ttf font loader/renderer" tar ((:commit . "615dd846cb80701cda4b34bc1dfb43bf695318b6") (:authors ("Jo Gay" . "jo.gay@mailfence.com")) (:maintainers ("Jo Gay" . "jo.gay@mailfence.com")) (:maintainer "Jo Gay" . "jo.gay@mailfence.com") (:keywords "data" "font" "rasterization" "ttf" "otf") (:url . "https://github.com/jollm/fontsloth"))])
- (for . [(20230504 1607) ((emacs (28 1))) "Iteration and sequence" tar ((:commit . "08f65ee62cc4d5fcf5c6eeed5971c43709ff9e00") (:authors ("Wing Hei Chan" . "whmunkchan@outlook.com")) (:maintainers ("Wing Hei Chan" . "whmunkchan@outlook.com")) (:maintainer "Wing Hei Chan" . "whmunkchan@outlook.com") (:keywords "extensions") (:url . "https://github.com/usaoc/elisp-for"))])
- (forecast . [(20191004 1850) ((emacs (24 4))) "Weather forecasts" single ((:commit . "5f3e67448cc98fe2875115163849acae4d9e8526") (:authors ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainers ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainer "Göktuğ Kayaalp" . "self@gkayaalp.com") (:keywords "weather" "forecast") (:url . "https://dev.gkayaalp.com/elisp/index.html#forecast-el"))])
- (foreign-regexp . [(20200325 50) nil "search and replace by foreign regexp." tar ((:commit . "e2dd47f2160cadc194eb156e7c76c3c869e6706e") (:authors ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainers ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainer "K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>") (:keywords "convenience" "emulations" "matching" "tools" "unix" "wp"))])
- (foreman-mode . [(20170725 1422) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "View and manage Procfile-based applications" single ((:commit . "22b3bb13134b617870ed1e888af739f4818be929") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "foreman") (:url . "http://github.com/zweifisch/foreman-mode"))])
- (forest-blue-theme . [(20160627 842) ((emacs (24))) "Emacs theme with a dark background." single ((:commit . "58096ce1a25615d2bae806c3775bae3e2775019d") (:authors ("olkinn")) (:maintainers ("olkinn")) (:maintainer "olkinn"))])
- (forge . [(20230505 926) ((emacs (25 1)) (compat (29 1 3 4)) (closql (20230407)) (dash (2 19 1)) (emacsql (20230409)) (ghub (20220621)) (let-alist (1 0 6)) (magit (20230319)) (markdown-mode (2 4)) (transient (0 3 6)) (yaml (0 3 5))) "Access Git forges from Magit." tar ((:commit . "12428a702fc6c9b2b36896803e6022baafcad3cd") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/forge"))])
- (form-feed . [(20210508 1627) ((emacs (24 1))) "Display ^L glyphs as horizontal lines" single ((:commit . "ac1f0ef30a11979f5dfe12d8c05a666739e486ff") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "faces") (:url . "https://depp.brause.cc/form-feed"))])
- (format-all . [(20230428 1823) ((emacs (24 4)) (inheritenv (0 1)) (language-id (0 19))) "Auto-format C, C++, JS, Python, Ruby and 50 other languages" single ((:commit . "332b61a49490925cd2895eda9a4254a5fbc9b3a4") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-format-all-the-code"))])
- (format-sql . [(20150422 1333) nil "Use format-sql to make your SQL readable in directly Emacs." single ((:commit . "97f475c245cd6c81a72a265678e2087cee66ac7b") (:authors ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainers ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainer "Friedrich Paetzke" . "paetzke@fastmail.fm") (:url . "https://github.com/paetzke/format-sql.el"))])
- (format-table . [(20181223 1616) ((emacs (25)) (dash (2 14 1))) "Parse and reformat tabular data." single ((:commit . "dfcae3a867e574577fc09a43b045889ff155b58f") (:authors ("Jason Duncan" . "jasond496@msn.com")) (:maintainers ("Jason Duncan" . "jasond496@msn.com")) (:maintainer "Jason Duncan" . "jasond496@msn.com") (:keywords "data") (:url . "https://github.com/functionreturnfunction/format-table"))])
- (forth-mode . [(20220629 519) nil "Programming language mode for Forth" tar ((:commit . "162b79f005a64b1f91e60b8f4c022d1d90cd3d95") (:authors ("Lars Brinkhoff" . "lars@nocrew.org")) (:maintainers ("Lars Brinkhoff" . "lars@nocrew.org")) (:maintainer "Lars Brinkhoff" . "lars@nocrew.org") (:keywords "languages" "forth") (:url . "http://github.com/larsbrinkhoff/forth-mode"))])
- (fortpy . [(20150715 2032) ((epc (0 1 0)) (auto-complete (1 4)) (python-environment (0 0 2)) (pos-tip (0 4 5))) "a Fortran auto-completion for Emacs" tar ((:commit . "c614517e9396ef7a78be3b8786fbf303879cf43b") (:authors ("Conrad Rosenbrock <rosenbrockc at gmail.com>")) (:maintainers ("Conrad Rosenbrock <rosenbrockc at gmail.com>")) (:maintainer "Conrad Rosenbrock <rosenbrockc at gmail.com>"))])
- (fortune-cookie . [(20181223 842) nil "Print a fortune in your scratch buffer." single ((:commit . "6c1c08f5be83822c0b762872ab25e3dbee96f333") (:authors ("Andrew Schwartzmeyer" . "andrew@schwartzmeyer.com")) (:maintainers ("Andrew Schwartzmeyer" . "andrew@schwartzmeyer.com")) (:maintainer "Andrew Schwartzmeyer" . "andrew@schwartzmeyer.com") (:keywords "fortune" "cowsay" "scratch" "startup") (:url . "https://github.com/andschwa/fortune-cookie"))])
- (fountain-mode . [(20230421 909) ((emacs (24 4)) (seq (2 20))) "Major mode for screenwriting in Fountain markup" tar ((:commit . "9b132767e209a558eed57206297c8a11e5eb1e98") (:authors ("Paul W. Rankin" . "hello@paulwrankin.com")) (:maintainers ("Paul W. Rankin" . "hello@paulwrankin.com")) (:maintainer "Paul W. Rankin" . "hello@paulwrankin.com") (:keywords "wp" "text") (:url . "https://github.com/rnkn/fountain-mode"))])
- (fraktur-mode . [(20160815 227) ((cl-lib (0 5))) "Easily insert Unicode mathematical Fraktur characters" single ((:commit . "514baf5546aed12a0d9fa0fe66e87cdcc7843b08") (:authors ("Grant Rettke" . "gcr@wisdomandwonder.com")) (:maintainers (nil . "<gcr@wisdomandwonder.com>")) (:maintainer nil . "<gcr@wisdomandwonder.com>") (:keywords "unicode" "fraktur" "math" "mathematical") (:url . "https://github.com/grettke/fraktur-mode"))])
- (frame-local . [(20180330 940) ((emacs (25 1))) "Variables local to a frame" single ((:commit . "51c0889602626e2dcc6f1c1a812b058bc96df03c") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainers ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is") (:keywords "frames" "tools" "local" "lisp") (:url . "https://github.com/sebastiencs/frame-local"))])
- (frame-mode . [(20190710 2030) ((s (1 9 0)) (emacs (24 4))) "Use frames instead of windows" single ((:commit . "ae2366969927c9f89ea07c999bef382b0b47cac1") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "frames") (:url . "https://github.com/IvanMalison/frame-mode"))])
- (frame-purpose . [(20211011 1518) ((emacs (25 1)) (dash (2 18))) "Purpose-specific frames" single ((:commit . "7d498147445cc0afb87b922a8225d2e163e5ed5a") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "buffers" "convenience" "frames") (:url . "http://github.com/alphapapa/frame-purpose.el"))])
- (frame-tag . [(20170111 6) ((cl-lib (0 5))) "Minor mode that assigns a unique number to each frame for easy switching" single ((:commit . "73d6163568c7d32952175e663318b872f995a4e5") (:authors ("Wong Liang Zan" . "zan@liangzan.net")) (:maintainers ("Wong Liang Zan" . "zan@liangzan.net")) (:maintainer "Wong Liang Zan" . "zan@liangzan.net") (:keywords "frame" "movement") (:url . "http://github.com/liangzan/frame-tag.el"))])
- (frames-only-mode . [(20210107 918) ((emacs (24 4)) (dash (2 13 0)) (s (1 11 0))) "Use frames instead of Emacs windows" single ((:commit . "27a5116f36af14df39b92ee2ea1f8583f22484cf") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:keywords "frames" "windows") (:url . "https://github.com/davidshepherd7/frames-only-mode"))])
- (frameshot . [(20230212 2017) ((emacs (25 3)) (compat (29 1 3 4))) "Take screenshots of a frame" single ((:commit . "96f2cc9a0cb672b1989022caa290218c8024a376") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "multimedia") (:url . "https://github.com/tarsius/frameshot"))])
- (framesize . [(20131017 2132) ((key-chord (0 5 20080915))) "change the size of frames in Emacs" single ((:commit . "f2dbf5d2513b2bc45f2085370a55c1754b6025da") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "frames") (:url . "http://github.com/nicferrier/emacs-framesize"))])
- (frecency . [(20170909 631) ((emacs (25 1)) (a (0 1)) (dash (2 13 0))) "Library for sorting items by frequency and recency of access" single ((:commit . "132130088ef5695cffed6fcacfa219cb0c389026") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "libraries" "recency" "recent" "frequency" "frequent") (:url . "http://github.com/alphapapa/frecency.el"))])
- (frecentf . [(20210330 1521) ((emacs (26 1)) (frecency (0 1 -1)) (persist (0 4)) (async (1 9 4))) "Pervasive recentf using frecency" single ((:commit . "19e2c48a8b8c8ee8cae5c93b58b57a0aa81a8c46") (:authors ("Felipe Lema" . "felipel@mortemale.org")) (:maintainers ("Felipe Lema" . "felipel@mortemale.org")) (:maintainer "Felipe Lema" . "felipel@mortemale.org") (:keywords "files" "maint") (:url . "https://launchpad.net/frecentf.el"))])
- (free-keys . [(20211116 1501) ((cl-lib (0 3))) "Show free keybindings for modkeys or prefixes" single ((:commit . "7348ce68192871b8a69b687ec124d9f816d493ca") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "convenience") (:url . "https://github.com/Fuco1/free-keys"))])
- (freeradius-mode . [(20190401 1743) ((emacs (24 4))) "major mode for FreeRadius server config files" single ((:commit . "cf8bf0359cf6c77848facbd24b764b3e111b4c2d") (:url . "https://github.com/VersBinarii/freeradius-mode"))])
- (freeze-it . [(20220301 148) ((emacs (24 4))) "Minor mode to make your previous writing read-only" single ((:commit . "ad92e33a7ebd860905da60d194833516bf61cbf5") (:authors ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainers ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainer "Paul W. Rankin" . "pwr@bydasein.com") (:keywords "wp" "text") (:url . "https://github.com/rnkn/freeze-it"))])
- (friendly-remote-shell . [(20200828 1218) ((emacs (24 1)) (cl-lib (0 6 1)) (with-shell-interpreter (0 2 3)) (friendly-tramp-path (0 1 0)) (friendly-shell (0 2 0))) "Human-friendly remote interactive shells" single ((:commit . "1b1ba2033e59e5968380640280bd853701fbbb21") (:keywords "processes" "terminals") (:url . "https://github.com/p3r7/friendly-shell"))])
- (friendly-shell . [(20220309 1711) ((emacs (24 1)) (cl-lib (0 6 1)) (dash (2 17 0)) (with-shell-interpreter (0 2 4))) "Better shell-mode API" single ((:commit . "e530e359848e8bdad09d26529f17eb25e5558b3e") (:keywords "processes" "terminals") (:url . "https://github.com/p3r7/friendly-shell"))])
- (friendly-shell-command . [(20200828 1218) ((emacs (24 1)) (cl-lib (0 6 1)) (dash (2 17 0)) (with-shell-interpreter (0 2 3))) "Better shell-command API" single ((:commit . "1b1ba2033e59e5968380640280bd853701fbbb21") (:keywords "processes" "terminals") (:url . "https://github.com/p3r7/friendly-shell"))])
- (friendly-tramp-path . [(20200502 1032) ((cl-lib (0 6 1))) "Human-friendly TRAMP path construction" single ((:commit . "be572b8953b9e5a3a35c30bb64c2936d3e9802ba") (:url . "https://github.com/p3r7/prf-tramp"))])
- (frimacs . [(20230409 1041) ((emacs (26 1))) "An environment for the FriCAS computer algebra system" tar ((:commit . "dfba4a1ca94b5f1d29659c3f786647dcdc315672") (:authors ("Paul Onions" . "paul.onions@acm.org")) (:maintainers ("Paul Onions" . "paul.onions@acm.org")) (:maintainer "Paul Onions" . "paul.onions@acm.org") (:keywords "fricas" "computer algebra" "extensions" "tools") (:url . "https://github.com/pdo/frimacs"))])
- (fringe-current-line . [(20140111 411) nil "show current line on the fringe." single ((:commit . "0ef000bac76abae30601222e6f06c7d133ab4942") (:authors ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainers ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainer "Kouhei Yanagita" . "yanagi@shakenbu.org") (:url . "http://github.com/kyanagi/fringe-current-line/raw/master/fringe-current-line.el"))])
- (fringe-helper . [(20140620 2109) nil "helper functions for fringe bitmaps" single ((:commit . "9bc3d3e82c9cc3937aa090248dc4dd2e289fc55c") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "lisp") (:url . "http://nschum.de/src/emacs/fringe-helper/"))])
- (frog-jump-buffer . [(20221114 141) ((emacs (24)) (avy (0 4 0)) (dash (2 4 0)) (frog-menu (0 2 8))) "The fastest buffer-jumping Emacs lisp package around." single ((:commit . "ab830cb7a5af9429866ba88fb37589a0366d8bf2") (:authors ("Justin Talbott")) (:maintainers ("Justin Talbott")) (:maintainer "Justin Talbott") (:keywords "convenience" "tools") (:url . "https://github.com/waymondo/frog-jump-buffer"))])
- (frontside-javascript . [(20220315 1057) ((emacs (25 1)) (add-node-modules-path (1 2 0)) (company (0 9 2)) (flycheck (20201228 2104)) (js2-mode (20201220)) (js2-refactor (0 9 0)) (rjsx-mode (0 5 0)) (tide (4 0 2)) (web-mode (17)) (lsp-mode (20220124))) "JS development that just workâ„¢ï¸" tar ((:commit . "18816534a977fbd28848389b58c22b6538cfdeec") (:authors ("Frontside Engineering" . "engineering@frontside.com")) (:maintainers ("Frontside Engineering" . "engineering@frontside.com")) (:maintainer "Frontside Engineering" . "engineering@frontside.com") (:keywords "files" "tools") (:url . "https://github.com/thefrontside/frontmacs"))])
- (fsbot-data-browser . [(20220830 230) nil "browse the fsbot database using tabulated-list-mode" single ((:commit . "27455860fec01ca47bf98b85f093cc24b9852bef") (:authors ("Benaiah Mischenko")) (:maintainers ("Benaiah Mischenko")) (:maintainer "Benaiah Mischenko") (:keywords "fsbot" "irc" "tabulated-list-mode") (:url . "http://github.com/benaiah/fsbot-data-browser"))])
- (fsharp-mode . [(20230219 1511) ((emacs (25))) "Support for the F# programming language" tar ((:commit . "09fec6c91f9c18173f145e28c55d6f21be678231") (:authors ("1993-1997 Xavier Leroy, Jacques Garrigue and Ian T Zimmerman") ("2010-2011 Laurent Le Brun" . "laurent@le-brun.eu") ("2012-2014 Robin Neatherway" . "robin.neatherway@gmail.com") ("2017-2023 Jürgen Hötzel")) (:maintainers ("Jürgen Hötzel")) (:maintainer "Jürgen Hötzel") (:keywords "languages"))])
- (fstar-mode . [(20230506 1606) ((emacs (24 3)) (dash (2 11)) (company (0 8 12)) (quick-peek (1 0)) (yasnippet (0 11 0)) (flycheck (30 0)) (company-quickhelp (2 2 0))) "Support for F* programming" tar ((:commit . "56039769454d3b71cad7248d144d04bb6f97a522") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "convenience" "languages") (:url . "https://github.com/FStarLang/fstar-mode.el"))])
- (fuel . [(20230120 1737) ((cl-lib (0 2)) (emacs (24 2))) "Major mode for the Factor programming language." tar ((:commit . "25236d56df9b39c607a6af75d4e16273201031bd"))])
- (fuff . [(20170202 1503) ((seq (2 3))) "Find files with findutils, recursively" single ((:commit . "278e849913df87bd8756c59382282d87474802c3") (:authors ("Joel Moberg")) (:maintainers ("Joel Moberg")) (:maintainer "Joel Moberg") (:keywords "files" "project" "convenience") (:url . "https://github.com/joelmo/fuff"))])
- (full-ack . [(20140223 1732) nil "a front-end for ack" single ((:commit . "8345753e9569dabf6426a837f29387557e32f2af") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "tools" "matching") (:url . "http://nschum.de/src/emacs/full-ack/"))])
- (fullframe . [(20210226 1057) ((cl-lib (0 5))) "Generalized automatic execution in a single frame" single ((:commit . "886b831c001b44ec95aec4ff36e8bc1b3003c786") (:authors ("Tom Regner" . "tom@goochesa.de")) (:maintainers ("Tom Regner" . "tom@goochesa.de")) (:maintainer "Tom Regner" . "tom@goochesa.de") (:keywords "fullscreen"))])
- (function-args . [(20220516 1226) ((ivy (0 9 1))) "C++ completion for GNU Emacs" tar ((:commit . "beba049751fed78666c87bd146a6f1cf149bb819") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/function-args"))])
- (fuo . [(20190812 927) ((emacs (24 4))) "feeluown client." single ((:commit . "0e4122f94a336a50c02bc96652d25ac3d74bedeb") (:authors ("cosven" . "yinshaowen241@gmail.com")) (:maintainers ("cosven" . "yinshaowen241@gmail.com")) (:maintainer "cosven" . "yinshaowen241@gmail.com") (:keywords "feeluown" "multimedia" "unix") (:url . "http://github.com/cosven/emacs-fuo"))])
- (furl . [(20150509 316) nil "Friendly URL retrieval" single ((:commit . "014438271e0ef27333dfcd599cb247f12a20d870") (:authors ("Natalie Weizenbaum" . "nweiz@google.com")) (:maintainers ("Natalie Weizenbaum" . "nweiz@google.com")) (:maintainer "Natalie Weizenbaum" . "nweiz@google.com"))])
- (fussy . [(20221010 2026) ((emacs (27 2)) (flx (0 5))) "Fuzzy completion style using `flx'" single ((:commit . "0fbfcbace0729dba685da9b9a74566639b840ec3") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "matching") (:url . "https://github.com/jojojames/fussy"))])
- (futhark-mode . [(20221223 1440) ((emacs (24 3)) (cl-lib (0 5))) "major mode for editing Futhark source files" tar ((:commit . "942450534547e2081a3ce6c13b6ccfbb4d6c05f4") (:keywords "languages") (:url . "https://github.com/diku-dk/futhark-mode"))])
- (fuz . [(20200104 524) ((emacs (25 1))) "Fast and precise fuzzy scoring/matching utils" tar ((:commit . "0b6b64cebde5675be3a28520ee16234db48d3b8b") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Zhu Zihao" . "all_but_last@163.com")) (:maintainer "Zhu Zihao" . "all_but_last@163.com") (:keywords "lisp") (:url . "https://github.com/cireu/fuz.el"))])
- (fuzzy . [(20221231 1634) ((emacs (24 3))) "Fuzzy Matching" single ((:commit . "fc7ca5bc81f1798596bc1d254d74a5ea95edc432") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com") (:keywords "convenience") (:url . "https://github.com/auto-complete/fuzzy-el"))])
- (fuzzy-finder . [(20210906 217) ((emacs (24 4))) "Fuzzy Finder App Integration" single ((:commit . "915a281fc8e50df84dcc205f9357e8314d60fa54") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com") (:keywords "matching") (:url . "https://github.com/10sr/fuzzy-finder-el"))])
- (fvwm-mode . [(20230214 2149) nil "A major mode for editing Fvwm configuration files" single ((:commit . "574c0370f6199c9a1492923bf0d35fdd26738d24") (:authors ("Bert Geens" . "bert@lair.be")) (:maintainers ("Bert Geens" . "bert@lair.be")) (:maintainer "Bert Geens" . "bert@lair.be") (:keywords "files") (:url . "https://github.com/theBlackDragon/fvwm-mode"))])
- (fwb-cmds . [(20230213 1143) ((emacs (25 1)) (compat (29 1 3 4))) "misc frame, window and buffer commands" single ((:commit . "1b375c6890de61eaccc97c92f2b46de6f9205417") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/fwb-cmds"))])
- (fxrd-mode . [(20170728 1801) ((s (1 2))) "Major mode for editing fixed field width files" tar ((:commit . "795b969346982b75e24b5c8619b46197982fbb4d") (:authors ("Marc Sherry" . "msherry@gmail.com")) (:maintainers ("Marc Sherry" . "msherry@gmail.com")) (:maintainer "Marc Sherry" . "msherry@gmail.com") (:keywords "convenience") (:url . "https://github.com/msherry/fxrd-mode"))])
- (fyure . [(20130216 1314) nil "An interface to fix Japanese hyoki-yure" tar ((:commit . "b6977f1eb148e8b63259f7233b55bb050e44d9b8") (:authors ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainers ("Masafumi Oyamada" . "stillpedant@gmail.com")) (:maintainer "Masafumi Oyamada" . "stillpedant@gmail.com") (:keywords "languages"))])
- (fzf . [(20230403 1304) ((emacs (24 4))) "A front-end for fzf." single ((:commit . "3a55b983921c620fb5a2cc811f42aa4daaad8266") (:authors ("Bailey Ling")) (:maintainers ("Bailey Ling")) (:maintainer "Bailey Ling") (:keywords "fzf" "fuzzy" "search") (:url . "https://github.com/bling/fzf.el"))])
- (gameoflife . [(20200614 1814) nil "Screensaver running Conway's Game of Life" single ((:commit . "2483f3d98dbcf7f1633f551cc3691f5659b4b942") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "games") (:url . "https://github.com/Lindydancer/gameoflife"))])
- (gams-ac . [(20180423 926) ((emacs (24)) (auto-complete (1 0)) (gams-mode (4 0))) "auto-complete source file for GAMS mode" single ((:commit . "66d04ff36033f54205c19bc1d893e926d4dbf02e") (:authors ("Shiro Takeda")) (:maintainers ("Shiro Takeda")) (:maintainer "Shiro Takeda") (:keywords "languages" "tools" "gams-mode" "auto-complete") (:url . "https://github.com/ShiroTakeda/gams-ac"))])
- (gams-mode . [(20230413 1331) ((emacs (24 3))) "Major mode for General Algebraic Modeling System (GAMS)" tar ((:commit . "246c0bea5764e5d9d5607a1f76b4602109e66ba9") (:authors ("Shiro Takeda")) (:maintainers ("Shiro Takeda")) (:maintainer "Shiro Takeda") (:keywords "languages" "tools" "gams") (:url . "http://shirotakeda.org/en/gams/gams-mode/"))])
- (gandalf-theme . [(20130809 947) nil "Gandalf color theme" single ((:commit . "4e472fc851431458537d458d09c1f5895e338536") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net") (:keywords "color" "theme"))])
- (gap-mode . [(20220815 2355) nil "Major mode for editing files in the GAP programing language." tar ((:commit . "afa70e8e396ce15f348612f09146650795fe58f8") (:authors ("Michael Smith" . "smith@pell.anu.edu.au") ("Gary Zablackis") ("Goetz Pfeiffer") ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainers ("Ivan Andrus" . "darthandrus@gmail.com")) (:maintainer "Ivan Andrus" . "darthandrus@gmail.com") (:keywords "gap") (:url . "https://gitlab.com/gvol/gap-mode"))])
- (gather . [(20141230 1338) nil "Gather string in buffer." single ((:commit . "8909c886d72a682710bb79ccfcfe4df54a399b7e") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "matching" "convenience" "tools") (:url . "https://github.com/mhayashi1120/Emacs-gather/raw/master/gather.el"))])
- (gcmh . [(20201116 2251) ((emacs (24))) "the Garbage Collector Magic Hack" single ((:commit . "0089f9c3a6d4e9a310d0791cf6fa8f35642ecfd9") (:authors ("Andrea Corallo" . "akrl@sdf.org")) (:maintainers (nil . "akrl@sdf.org")) (:maintainer nil . "akrl@sdf.org") (:keywords "internal") (:url . "https://gitlab.com/koral/gcmh"))])
- (gcode-mode . [(20221205 116) ((emacs (24 4))) "Simple G-Code major mode" tar ((:commit . "3b17b5ba85e5a05dac79b15b5231ad41f0a0fce5") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:keywords "gcode" "languages" "highlight" "syntax") (:url . "https://gitlab.com/wavexx/gcode-mode.el"))])
- (gdscript-mode . [(20230426 1923) ((emacs (26 3))) "Major mode for Godot's GDScript language" tar ((:commit . "a48ad045024d34aee28607ee0afc572308b6e1f6") (:authors ("Nathan Lovato <nathan@gdquest.com>, Fabián E. Gallina" . "fgallina@gnu.org")) (:maintainers (nil . "nathan@gdquest.com")) (:maintainer nil . "nathan@gdquest.com") (:keywords "languages") (:url . "https://github.com/godotengine/emacs-gdscript-mode/"))])
- (geben . [(20220827 105) ((emacs (24 3)) (cl-lib (0 5))) "DBGp protocol frontend, a script debugger" tar ((:commit . "8df1ed2c8ff13b0ca4ef241c95c46f60a5a4fe3c") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "c" "comm" "tools") (:url . "https://github.com/ahungry/geben"))])
- (geben-helm-projectile . [(20170524 334) ((emacs (24)) (geben (0 26)) (helm-projectile (0 13 0))) "Integrate helm-projectile with geben" single ((:commit . "31ce0faca5dcc71924884f03fd5a7a25d00ccd9b") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "emacs" "geben" "helm" "projectile" "debug") (:url . "https://github.com/ahungry/geben-helm-projectile"))])
- (geeknote . [(20220213 612) ((emacs (24))) "Use Evernote in Emacs through geeknote" single ((:commit . "ce2738aebeeda35f9d31027e9b7bad0813b975c3") (:authors ("Evan Dale Aromin")) (:maintainers ("Evan Dale Aromin")) (:maintainer "Evan Dale Aromin") (:keywords "evernote" "geeknote" "note" "emacs-evernote" "evernote-mode") (:url . "http://github.com/avendael/emacs-geeknote"))])
- (geiser . [(20230503 1044) ((emacs (25 1)) (project (0 8 1))) "GNU Emacs and Scheme talk to each other" tar ((:commit . "83305e6bb5f13d68f8e31d457605b02d2a10c014") (:authors ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose Antonio Ortega Ruiz" . "jao@gnu.org") (:keywords "languages" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/"))])
- (geiser-chez . [(20230228 2253) ((emacs (26 1)) (geiser (0 19))) "Chez and Geiser talk to each other" tar ((:commit . "04ab4387fed68659f21377dbe74513edac2fd134") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") (:keywords "languages" "chez" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/chez"))])
- (geiser-chibi . [(20211204 1938) ((emacs (24 4)) (geiser (0 18))) "Chibi Scheme's implementation of the geiser protocols" tar ((:commit . "5a6a5a580ea45cd4974df21629a8d50cbe3d6e99") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") (:keywords "languages" "chibi" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/chibi"))])
- (geiser-chicken . [(20220717 1130) ((emacs (24 4)) (geiser (0 19))) "Chicken's implementation of the geiser protocols" tar ((:commit . "a480598b5908c95bc8d3178a48f13e9072a9235b") (:authors ("Daniel Leslie")) (:maintainers ("Daniel Leslie")) (:maintainer "Daniel Leslie") (:keywords "languages" "chicken" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/chicken"))])
- (geiser-gambit . [(20220208 1356) ((emacs (26 1)) (geiser (0 18))) "Gambit's implementation of the geiser protocols" tar ((:commit . "381d74ca5059b44fe3d8b5daf42214019c6d1a88") (:authors ("Daniel Leslie")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") (:keywords "languages" "gambit" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/gambit"))])
- (geiser-gauche . [(20220503 1700) ((emacs (26 1)) (geiser (0 11 2))) "Gauche scheme support for Geiser" tar ((:commit . "8ff743f6416f00751e24aef8b9791501a40f5421") (:authors ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainers ("András Simonyi" . "andras.simonyi@gmail.com")) (:maintainer "András Simonyi" . "andras.simonyi@gmail.com") (:keywords "languages" "gauche" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/gauche"))])
- (geiser-guile . [(20230425 1523) ((emacs (25 1)) (transient (0 3)) (geiser (0 28 1))) "Guile and Geiser talk to each other" tar ((:commit . "ee33af6b4ef8fdaccbdf93c62b50fe17c07a1ade") (:authors ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose Antonio Ortega Ruiz" . "jao@gnu.org") (:keywords "languages" "guile" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/guile"))])
- (geiser-kawa . [(20210920 1607) ((emacs (26 1)) (geiser (0 16))) "Kawa scheme support for Geiser" tar ((:commit . "5896b19642923f74f718eb68d447560b2d26d797") (:authors ("spellcard199" . "spellcard199@protonmail.com")) (:maintainers ("spellcard199" . "spellcard199@protonmail.com")) (:maintainer "spellcard199" . "spellcard199@protonmail.com") (:keywords "languages" "kawa" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/kawa"))])
- (geiser-mit . [(20211204 1935) ((emacs (24 4)) (geiser (0 18))) "MIT/GNU Scheme's implementation of the geiser protocols" tar ((:commit . "4e90e9ae815e89f3540fb9644e6016c663ef5765") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose A Ortega Ruiz" . "jao@gnu.org") (:keywords "languages" "mit" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/mit"))])
- (geiser-racket . [(20210421 125) ((emacs (26 1)) (geiser (0 16))) "Support for Racket in Geiser" tar ((:commit . "22e56ce80389544d3872cf4beb4008fb514b2218") (:authors ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose Antonio Ortega Ruiz" . "jao@gnu.org")) (:maintainer "Jose Antonio Ortega Ruiz" . "jao@gnu.org") (:keywords "languages" "racket" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/racket"))])
- (geiser-stklos . [(20230504 1639) ((emacs (24 4)) (geiser (0 16))) "STklos Scheme implementation of the geiser protocols" single ((:commit . "6ae96bfb96f47a75eb882d0d1dac938e4992e952") (:authors ("Jeronimo Pellegrini" . "j_p@aleph0.info")) (:maintainers ("Jeronimo Pellegrini" . "j_p@aleph0.info")) (:maintainer "Jeronimo Pellegrini" . "j_p@aleph0.info") (:keywords "languages" "stklos" "scheme" "geiser") (:url . "https://gitlab.com/emacs-geiser/stklos"))])
- (gemini-mode . [(20221127 1619) ((emacs (24 4))) "A simple highlighting package for text/gemini" single ((:commit . "a7dd7c6ea4e036d0d5ecc4a5d284874c400f10ba") (:authors ("Jason McBrayer <jmcbray@carcosa.net>, tastytea <tastytea@tastytea.de>, Étienne Deparis" . "etienne@depar.is")) (:maintainers ("Jason McBrayer <jmcbray@carcosa.net>, tastytea <tastytea@tastytea.de>, Étienne Deparis" . "etienne@depar.is")) (:maintainer "Jason McBrayer <jmcbray@carcosa.net>, tastytea <tastytea@tastytea.de>, Étienne Deparis" . "etienne@depar.is") (:keywords "languages") (:url . "https://git.carcosa.net/jmcbray/gemini.el"))])
- (gemini-write . [(20211114 1032) ((emacs (26)) (elpher (2 8 0)) (gemini-mode (1 0 0))) "Elpher for Titan" single ((:commit . "2a7d07d0ce4c5b8750f3ff1182ad94ee616734c8") (:authors ("Alex Schroeder" . "alex@gnu.org")) (:maintainers ("Alex Schroeder" . "alex@gnu.org")) (:maintainer "Alex Schroeder" . "alex@gnu.org") (:keywords "comm" "gemini") (:url . "https://alexschroeder.ch/cgit/gemini-write"))])
- (general . [(20230311 1229) ((emacs (24 4)) (cl-lib (0 5))) "Convenience wrappers for keybindings." tar ((:commit . "7ce8db297e3de258ec43802269438ac7f1918707") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:keywords "vim" "evil" "leader" "keybindings" "keys") (:url . "https://github.com/noctuid/general.el"))])
- (genrnc . [(20140612 1237) ((deferred (0 3 1)) (concurrent (0 3)) (log4e (0 2 0)) (yaxception (0 1))) "generate RELAX NG Compact Schema from RELAX NG Schema, XML Schema and DTD." tar ((:commit . "da75b1966a73ad215ec2ced4522c25f4d0bf1f9a") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "xml") (:url . "https://github.com/aki2o/emacs-genrnc"))])
- (geoip . [(20200310 911) ((emacs (25 1))) "Find out where an IP address is located via GeoIP2" single ((:commit . "b4952890993642c7055f4bbbf05b0384740f8f51") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "tools") (:url . "https://github.com/xuchunyang/geoip.el"))])
- (geolocation . [(20200317 1559) ((request-deferred (0 3 2)) (deferred (0 5 1)) (emacs (25 1))) "Get your location on Earth" single ((:commit . "08e3569024659f6f04cb269ad213d144fd8e2a95") (:authors ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:keywords "hardware") (:url . "https://github.com/gonewest818/geolocation.el"))])
- (german-holidays . [(20181213 644) nil "German holidays for Emacs calendar" single ((:commit . "a8462dffccaf2b665f2032e646b5370e993a386a") (:authors ("Sebastian Christ" . "rudolfo.christ@gmail.com")) (:maintainers ("Sebastian Christ" . "rudolfo.christ@gmail.com")) (:maintainer "Sebastian Christ" . "rudolfo.christ@gmail.com") (:url . "https://github.com/rudolfochrist/german-holidays"))])
- (germanium . [(20220716 1500) ((emacs (26 1))) "Generate image from source code using germanium" single ((:commit . "7292aa6870cf8b0acb34a8750da32b44d83cd65c") (:authors ("Masaya Watanabe")) (:maintainers ("Masaya Watanabe")) (:maintainer "Masaya Watanabe") (:keywords "convenience") (:url . "https://github.com/matsuyoshi30/germanium-el"))])
- (gerrit . [(20230102 1714) ((emacs (25 1)) (magit (2 13 1)) (s (1 12 0)) (dash (0 2 15))) "Gerrit client" tar ((:commit . "76cc426d62f1b4964159706eafa8f5b50b8427ea") (:authors ("Thomas Hisch" . "t.hisch@gmail.com")) (:maintainers ("Thomas Hisch" . "t.hisch@gmail.com")) (:maintainer "Thomas Hisch" . "t.hisch@gmail.com") (:keywords "extensions") (:url . "https://github.com/thisch/gerrit.el"))])
- (gerrit-download . [(20150714 1408) ((emacs (24 0)) (magit (2 1 0))) "Show gerrit reviews in a diff buffer." single ((:commit . "d568acc7c5935188c9bc19ba72719a6092d9f6fd") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainers ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com") (:keywords "tools" "gerrit" "git") (:url . "https://github.com/chmouel/gerrit-download.el"))])
- (gf . [(20181028 1542) ((s (1 0)) (ht (2 0))) "Major mode for editing GF code" single ((:commit . "49fa46db67634530499be969ffd3c436a22d4404") (:authors ("Johan Bockgård" . "bojohan+mail@dd.chalmers.se")) (:maintainers ("bruno cuconato" . "bcclaro+emacs@gmail.com")) (:maintainer "bruno cuconato" . "bcclaro+emacs@gmail.com") (:keywords "languages") (:url . "https://github.com/GrammaticalFramework/gf-emacs-mode"))])
- (ggo-mode . [(20210310 1345) nil "Gengetopt major mode" single ((:commit . "6a7617b5af3d13029e4d680a375e8107c40d0fac") (:authors ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainers ("Matthew K. Junker" . "junker@alum.mit.edu")) (:maintainer "Matthew K. Junker" . "junker@alum.mit.edu") (:keywords "extensions" "convenience" "local"))])
- (ggtags . [(20220511 610) ((emacs (25))) "emacs frontend to GNU Global source code tagging system" single ((:commit . "40635a1effd3a9c2adef63c4760010c9468a7a4d") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainers ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/leoliu/ggtags"))])
- (gh . [(20221204 1817) ((emacs (25 1)) (pcache (0 4 2)) (logito (0 1)) (marshal (0 9 0)) (cl-lib (0 3))) "A GitHub library for Emacs" tar ((:commit . "e1423a54fc97924e75d1fde27911c3c678a7d6c3") (:authors ("Yann Hodique" . "yhodique@gmail.com")) (:maintainer "Yann Hodique" . "yhodique@gmail.com") (:url . "https://github.com/sigma/gh.el"))])
- (gh-md . [(20220316 1432) ((emacs (24 3))) "Render markdown using the Github api" single ((:commit . "e721fd5e41e682f47f2dd4ce26ef2ba28c7fa0b5") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/gh-md.el"))])
- (gh-notify . [(20230117 317) ((emacs (27 1)) (magit (3 0 0)) (forge (0 2 0))) "A veneer for Magit/Forge GitHub notifications" single ((:commit . "e1afdd49deb8ddf1a988e8d3fa699b06dfa92f5f") (:authors ("Bas Alberts" . "bas@anti.computer") ("xristos" . "xristos@sdf.org")) (:maintainers ("Bas Alberts" . "bas@anti.computer")) (:maintainer "Bas Alberts" . "bas@anti.computer") (:keywords "comm") (:url . "https://github.com/anticomputer/gh-notify"))])
- (ghc-imported-from . [(20141124 1932) ((emacs (24 1))) "Haskell documentation lookup with ghc-imported-from" single ((:commit . "fcff08628a19f5d26151564659218cc677779b79") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk") (:keywords "languages"))])
- (ghci-completion . [(20151125 1257) ((emacs (24 1)) (cl-lib (0 5))) "Completion for GHCi commands in inferior-haskell buffers" single ((:commit . "c47e23d585d2a3c7b13aac163693fdc4f2bb90e5") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainer "Oleksandr Manzyuk" . "manzyuk@gmail.com") (:keywords "convenience"))])
- (gherkin-mode . [(20171224 1353) nil "An emacs major mode for editing gherkin files." single ((:commit . "0313492e7da152f0aa73ddf96c0287ded8f51253") (:authors ("Craig Andera")) (:maintainers ("Craig Andera")) (:maintainer "Craig Andera") (:keywords "languages"))])
- (ghost-blog . [(20171023 742) ((markdown-mode (1 0))) "A package to manage Ghost blog" single ((:commit . "71b358643cc9a2db1bf752281ff94aba9b59e4cc") (:authors ("Javier Aguirre" . "hello@javaguirre.net")) (:maintainers ("Javier Aguirre" . "hello@javaguirre.net")) (:maintainer "Javier Aguirre" . "hello@javaguirre.net") (:keywords "ghost" "blog") (:url . "https://github.com/javaguirre/ghost-blog"))])
- (ghq . [(20210504 902) nil "Ghq interface for emacs" single ((:commit . "582bd6daa505d04c7cc06d6c82ed8aee0624bfbe") (:authors ("Roman Coedo" . "romancoedo@gmail.com")) (:maintainers ("Roman Coedo" . "romancoedo@gmail.com")) (:maintainer "Roman Coedo" . "romancoedo@gmail.com") (:keywords "ghq"))])
- (ghub . [(20230301 1402) ((emacs (25 1)) (compat (29 1 3 4)) (let-alist (1 0 6)) (treepy (0 1 1))) "Client libraries for Git forge APIs." tar ((:commit . "6a5de97649ff3eca9aa20b79f3526b4b3ab86b13") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/magit/ghub"))])
- (ghub+ . [(20191229 1748) ((emacs (25)) (ghub (2 0)) (apiwrap (0 5))) "a thick GitHub API client built on ghub" single ((:commit . "b1adef2402d7599911d4dd447a987a0cea04e6fe") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:keywords "extensions" "multimedia" "tools") (:url . "https://github.com/vermiculus/ghub-plus"))])
- (gif-screencast . [(20220714 1300) ((emacs (25 1))) "One-frame-per-action GIF recording" single ((:commit . "adec408e6adab2e8e057fe0ad828749f473bfb83") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:keywords "multimedia" "screencast") (:url . "https://gitlab.com/ambrevar/emacs-gif-screencast"))])
- (gift-mode . [(20210528 1459) nil "major mode for editing GIFT format quizzes" single ((:commit . "c93354e8fe1173b22f398f17b127875807f15b87") (:authors ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainers ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainer "Christophe Rhodes" . "christophe@rhodes.io") (:url . "https://github.com/csrhodes/gift-mode"))])
- (gildas-mode . [(20181022 649) ((polymode (0 1 5)) (emacs (25))) "Major mode for Gildas" single ((:commit . "d0c9e997e2aa0bcd9b8b7db082d69100448cb1b2") (:authors ("Sébastien Maret" . "sebastien.maret@icloud.com")) (:maintainers ("Sébastien Maret" . "sebastien.maret@icloud.com")) (:maintainer "Sébastien Maret" . "sebastien.maret@icloud.com") (:keywords "languages" "gildas") (:url . "https://github.com/smaret/gildas-mode"))])
- (gist . [(20171128 406) ((emacs (24 1)) (gh (0 10 0))) "Emacs integration for gist.github.com" single ((:commit . "b2712a61d04af98a05cc2556d85479803b6626be") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:keywords "tools") (:url . "https://github.com/defunkt/gist.el"))])
- (git . [(20140128 1041) ((s (1 7 0)) (dash (2 2 0)) (f (0 10 0))) "An Elisp API for programmatically using Git" single ((:commit . "8b7f1477ef367b5b7de452589dd9a8ab30150d0a") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "git") (:url . "http://github.com/rejeep/git.el"))])
- (git-annex . [(20220807 1542) nil "Mode for easy editing of git-annex'd files" single ((:commit . "92f2d97c89980d2cea85850353836c68903514a1") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:keywords "files" "data" "git" "annex") (:url . "https://github.com/jwiegley/git-annex-el"))])
- (git-assembler-mode . [(20221205 1014) ((emacs (24 4))) "git-assembler major mode" single ((:commit . "e88d69d1fd93f166d8b31e02790a1d241fea44aa") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:keywords "git" "git-assembler" "languages" "highlight" "syntax") (:url . "https://gitlab.com/wavexx/git-assembler-mode.el"))])
- (git-attr . [(20180925 2003) ((emacs (24 3))) "Git attributes of buffer file" tar ((:commit . "3e43a0cf616b00a4bbd3c6b49fd2397f3103796f") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainers ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk") (:keywords "vc") (:url . "https://github.com/arnested/emacs-git-attr"))])
- (git-auto-commit-mode . [(20200828 653) nil "Emacs Minor mode to automatically commit and push" single ((:commit . "df07899acdb3f9c114b72fdab77107c924b3172c") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:keywords "vc") (:url . "https://github.com/ryuslash/git-auto-commit-mode"))])
- (git-backup . [(20191209 2144) ((emacs (24 3)) (s (1 8 0))) "Backup each file change using git" single ((:commit . "e28d7af2d1c58fa5b8068223eb83a73f044e6a6c") (:authors ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainers ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainer "Anthony HAMON" . "hamon.anth@gmail.com") (:keywords "backup" "files" "tools" "git") (:url . "http://github.com/antham/git-backup"))])
- (git-backup-ivy . [(20221015 431) ((ivy (0 12 0)) (git-backup (0 0 1)) (emacs (25 1))) "An ivy interface to git-backup" single ((:commit . "e54a3c4b95023c58664a2c59b95a95a07759a1f8") (:authors ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainers ("Sebastian WÃ¥linder" . "s.walinder@gmail.com")) (:maintainer "Sebastian WÃ¥linder" . "s.walinder@gmail.com") (:keywords "backup" "convenience" "files" "tools" "vc") (:url . "https://github.com/walseb/git-backup-ivy"))])
- (git-blamed . [(20161028 1926) nil "Minor mode for incremental blame for Git" single ((:commit . "cef196abf398e2dd11f775d1e6cd8690567408aa") (:keywords "git" "version control" "release management"))])
- (git-command . [(20191028 333) ((term-run (0 1 4)) (with-editor (2 3 1))) "A Git Command-Line interface" single ((:commit . "a773d40da39dfb1c6ecf2b0758aa370ddea8f06d") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainers ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:keywords "utility" "git") (:url . "https://github.com/10sr/git-command-el"))])
- (git-commit . [(20230313 1724) ((emacs (25 1)) (compat (29 1 3 4)) (transient (20230201)) (with-editor (20230118))) "Edit Git commit messages." tar ((:commit . "a8c92cc35d306c895cd5d9b9b0cbf95d8c7381e8") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li") ("Sebastian Wiesner" . "lunaryorn@gmail.com") ("Florian Ragwitz" . "rafl@debian.org") ("Marius Vollmer" . "marius.vollmer@gmail.com")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/magit"))])
- (git-commit-insert-issue . [(20230314 1504) ((emacs (25)) (projectile (0)) (s (0)) (ghub (0)) (bitbucket (0))) "Get issues list when typing \"Fixes #\"" single ((:commit . "3de5dbb6335a245bb5137e5ad0f3ddb09ac8f183") (:authors ("Vindarel")) (:maintainers ("Vindarel")) (:maintainer "Vindarel") (:keywords "tools" "vc" "github" "gitlab" "bitbucket" "commit" "issues") (:url . "https://gitlab.com/emacs-stuff/git-commit-insert-issue/"))])
- (git-dwim . [(20170126 1214) nil "Context-aware git commands such as branch handling" single ((:commit . "485c732130686c2f28a026e385366006435394b9") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "git" "tools" "convenience") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/git-dwim.el"))])
- (git-grep . [(20200920 1751) ((projectile (0 10 0))) "Search tools using git grep" single ((:commit . "12ff6045e9b6aa42f98abd4ddc44d670268a0849") (:authors ("Sam Kleinman")) (:maintainers ("tychoish" . "garen@tychoish.com")) (:maintainer "tychoish" . "garen@tychoish.com") (:keywords "matching" "files" "grep" "search" "using" "git-grep") (:url . "https://github.com/tychoish/git-grep.el"))])
- (git-gutter . [(20220922 256) ((emacs (25 1))) "Port of Sublime Text plugin GitGutter" single ((:commit . "ec28e85d237065cb3c28db4b66d129da6d309f9c") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:url . "https://github.com/emacsorphanage/git-gutter"))])
- (git-gutter+ . [(20151204 1723) ((git-commit (0)) (dash (0))) "Manage Git hunks straight from the buffer" single ((:commit . "b7726997806d9a2da9fe84ff00ecf21d62b6f975") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:keywords "git" "vc") (:url . "https://github.com/nonsequitur/git-gutter-plus"))])
- (git-gutter-fringe . [(20211003 2228) ((git-gutter (0 88)) (fringe-helper (0 1 1)) (cl-lib (0 5)) (emacs (24))) "Fringe version of git-gutter.el" single ((:commit . "648cb5b57faec55711803cdc9434e55a733c3eba") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:url . "https://github.com/emacsorphanage/git-gutter-fringe"))])
- (git-gutter-fringe+ . [(20140729 1103) ((git-gutter+ (0 1)) (fringe-helper (1 0 1))) "Fringe version of git-gutter+.el" single ((:commit . "3857d486e5b3eca9281fba1c76756cb39a9f9866") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/nonsequitur/git-gutter-fringe-plus"))])
- (git-identity . [(20220721 912) ((emacs (25 1)) (dash (2 10)) (hydra (0 14)) (f (0 20))) "Identity management for (ma)git" single ((:commit . "f920916a92fad0c551cd0739e48fc09d8709bd8d") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "git" "vc" "convenience") (:url . "https://github.com/akirak/git-identity.el"))])
- (git-io . [(20230322 1038) ((emacs (24 4))) "Integration for git.io URL shortening in buffer" single ((:commit . "fb25f9432e6454edd621a7512ee7abc6220151a5") (:authors ("Tejas Bubane" . "tejasbubane@gmail.com")) (:maintainers ("Tejas Bubane" . "tejasbubane@gmail.com")) (:maintainer "Tejas Bubane" . "tejasbubane@gmail.com") (:keywords "convenience" "files") (:url . "https://github.com/tejasbubane/emacs-git-io"))])
- (git-lens . [(20220922 710) ((emacs (24 4))) "Show new, deleted or modified files in branch" single ((:commit . "347832fbdb75a0930aa3eef628ec0069a335f3b7") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainers ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se") (:keywords "vc" "convenience") (:url . "https://github.com/pidu/git-lens"))])
- (git-link . [(20230420 48) ((emacs (24 3))) "Get the GitHub/Bitbucket/GitLab URL for a buffer location" single ((:commit . "1727e9b7ec41a234a2cc14151b9ffd9c1c4f4b14") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:keywords "git" "vc" "github" "bitbucket" "gitlab" "sourcehut" "aws" "azure" "convenience") (:url . "http://github.com/sshaw/git-link"))])
- (git-messenger . [(20201202 1637) ((emacs (24 3)) (popup (0 5 3))) "Popup last commit of current line" single ((:commit . "fb9a049ac3b5fba7369ef1f027b97881f1e377ec") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto")) (:maintainer "Neil Okamoto") (:url . "https://github.com/emacsorphanage/git-messenger"))])
- (git-modes . [(20230212 2212) ((emacs (25 1)) (compat (29 1 3 4))) "Major modes for editing Git configuration files" tar ((:commit . "f0a0154bf48dd1c0c587596cf4cfd3c90f673a05") (:authors ("Sebastian Wiesner" . "lunaryorn@gmail.com") ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net") ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience" "vc" "git") (:url . "https://github.com/magit/git-modes"))])
- (git-msg-prefix . [(20191031 1304) ((emacs (24)) (s (1 10 0)) (dash (2 9 0))) "Insert commit message prefix (issue number)" single ((:commit . "43f6b31c1090371260a2f15b2117a7666920bee7") (:authors ("Raimon Grau" . "raimonster@gmail.com")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:keywords "vc" "tools") (:url . "http://github.com/kidd/git-msg-prefix.el"))])
- (git-ps1-mode . [(20200113 704) nil "Global minor-mode to print __git_ps1 in mode-line" single ((:commit . "6762a309bd593d26258dfbf43e7bc21254a70fbf") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainers ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:keywords "utility" "mode-line" "git") (:url . "https://github.com/10sr/git-ps1-mode-el"))])
- (git-time-metric . [(20181116 2011) nil "Provide function to record time with gtm ( git time metric )" single ((:commit . "287108ed1d6885dc795eb3bad4476aa08c626186") (:authors ("Anton Sivolapov" . "anton.sivolapov@gmail.com")) (:maintainers ("Anton Sivolapov" . "anton.sivolapov@gmail.com")) (:maintainer "Anton Sivolapov" . "anton.sivolapov@gmail.com") (:keywords "tools" "gtm" "productivity" "time") (:url . "https://github.com/c301/gtm-emacs-plugin"))])
- (git-timemachine . [(20230413 620) ((emacs (24 3)) (transient (0 1 0))) "Walk through git revisions of a file" single ((:commit . "13769fb603ae88c64566529eae4525ce88026e86") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainers ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se") (:keywords "vc") (:url . "https://gitlab.com/pidu/git-timemachine"))])
- (git-walktree . [(20191101 302) ((emacs (26 1)) (git (0 1 1)) (cl-lib (0 5))) "Browse Git tree and blob objects" tar ((:commit . "a1a5490b89d193724ec637818baf2d8edf97c638") (:authors ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainers ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainer "10sr <8.slashes [at] gmail [dot] com>") (:keywords "vc" "utility" "git") (:url . "https://github.com/10sr/git-walktree-el"))])
- (git-wip-timemachine . [(20150408 1006) ((s (1 9 0))) "Walk through git-wip revisions of a file" single ((:commit . "1ce257e6c25117b01f1b899aca21e07eae084d40") (:authors ("Tim Krones" . "t.krones@gmx.net")) (:maintainers ("Tim Krones" . "t.krones@gmx.net")) (:maintainer "Tim Krones" . "t.krones@gmx.net") (:keywords "git") (:url . "https://github.com/itsjeyd/git-wip-timemachine"))])
- (gitconfig . [(20130718 935) nil "Emacs lisp interface to work with git-config variables" single ((:commit . "6c313a39e20702ddcebc12d146f69db1ce668901") (:authors ("Samuel Tonini")) (:maintainers ("Samuel Tonini")) (:maintainer "Samuel Tonini") (:keywords "git" "gitconfig" "git-config"))])
- (github-browse-file . [(20160205 1427) ((cl-lib (0 5))) "View the file you're editing on GitHub" single ((:commit . "177667b8dac640f3dabacc4395e09451c5e88c53") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainers ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com") (:keywords "convenience" "vc" "git" "github") (:url . "https://github.com/osener/github-browse-file"))])
- (github-clone . [(20210108 1920) ((gh (1 0 1)) (magit (3 0 0)) (emacs (25 1))) "Fork and clone github repos" single ((:commit . "7b2ce0109f5aac0b65f3e6a5ba761e18bd86f093") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:keywords "vc" "tools") (:url . "https://github.com/dgtized/github-clone.el"))])
- (github-dark-vscode-theme . [(20220313 2040) ((emacs (24 1))) "The GitHub Dark Theme from Visual Studio Code" single ((:commit . "2123bcd08fe42094b07180632be2cd2af606ee21") (:authors ("Justintime50")) (:maintainers ("Justintime50")) (:maintainer "Justintime50") (:keywords "faces") (:url . "https://github.com/justintime50/github-dark-vscode-emacs-theme"))])
- (github-elpa . [(20200129 417) ((package-build (1 0)) (commander (0 7 0)) (git (0 1 1))) "Build and publish ELPA repositories with GitHub Pages" tar ((:commit . "0e0fdbdd774b0866beccff6be7f302e5c8ee71da") (:authors (nil . "10sr<8slashes+el@gmail.com>")) (:maintainers (nil . "10sr<8slashes+el@gmail.com>")) (:maintainer nil . "10sr<8slashes+el@gmail.com>") (:url . "https://github.com/10sr/github-elpa"))])
- (github-explorer . [(20220305 1450) ((emacs (25)) (graphql (0))) "Explore a GitHub repository on the fly" single ((:commit . "49e5c350169b556deaabdcb67e9440bd4d5b4f8b") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:keywords "comm") (:url . "https://github.com/TxGVNN/github-explorer"))])
- (github-linguist . [(20220928 2013) ((emacs (27 1)) (project (0 8)) (async (1 9)) (map (3))) "Run GitHub Linguist on projects to collect information" single ((:commit . "73f9f52e1f626e866d8becc7a3671630449764c2") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "processes") (:url . "https://github.com/akirak/github-linguist.el"))])
- (github-modern-theme . [(20171109 1251) nil "The GitHub color theme for Emacs." single ((:commit . "a7e7b8e5e9c122138e79e837caf9b7299e748d44") (:authors ("Philip Arvidsson" . "philip@philiparvidsson.com")) (:maintainers ("Philip Arvidsson" . "philip@philiparvidsson.com")) (:maintainer "Philip Arvidsson" . "philip@philiparvidsson.com") (:url . "https://github.com/philiparvidsson/GitHub-Theme-for-Emacs"))])
- (github-notifier . [(20180421 316) ((emacs (24))) "Displays your GitHub notifications unread count in mode-line" single ((:commit . "274f3812926ea371346f639fcee98066f6e8c96f") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "github" "mode-line") (:url . "https://github.com/xuchunyang/github-notifier.el"))])
- (github-pullrequest . [(20170116 616) ((emacs (24 4)) (request (0 2 0)) (dash (2 11 0)) (magit (2 10 0))) "Create and fetch Github Pull requests with ease" single ((:commit . "471816e09d1e140a0975911fe020c6c659f71209") (:authors ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainers ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainer "Jakob Lind" . "karl.jakob.lind@gmail.com") (:keywords "tools") (:url . "https://github.com/jakoblind/github-pullrequest"))])
- (github-review . [(20211029 243) ((emacs (25 1)) (s (1 12 0)) (ghub (2 0)) (dash (2 11 0)) (deferred (0 5 1)) (a (0 1 1))) "GitHub based code review" single ((:commit . "725fbc7b385228f53a7ddc46a92c1276bab4aea8") (:authors ("Laurent Charignon" . "l.charignon@gmail.com")) (:maintainers ("Laurent Charignon" . "l.charignon@gmail.com")) (:maintainer "Laurent Charignon" . "l.charignon@gmail.com") (:keywords "git" "tools" "vc" "github") (:url . "https://github.com/charignon/github-review"))])
- (github-search . [(20190624 436) ((magit (0 8 1)) (gh (1 0 0))) "Clone repositories by searching github" single ((:commit . "b73efaf19491010522b09db35bb0f1bad1620e63") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "github" "search" "clone" "api" "gh" "magit" "vc" "tools") (:url . "https://github.com/IvanMalison/github-search"))])
- (github-stars . [(20190517 1319) ((emacs (25 1)) (ghub (2 0 0))) "Browse your Github Stars" single ((:commit . "bb79c80574cfff865342b6e262f2c9762edb4c15") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "tools") (:url . "https://github.com/xuchunyang/github-stars.el"))])
- (github-theme . [(20170630 2201) nil "The GitHub color theme for Emacs." single ((:commit . "29f00a51d949a248a5f6355a97131e216747c797") (:authors ("Philip Arvidsson" . "philip@philiparvidsson.com")) (:maintainers ("Philip Arvidsson" . "philip@philiparvidsson.com")) (:maintainer "Philip Arvidsson" . "philip@philiparvidsson.com") (:url . "https://github.com/philiparvidsson/GitHub-Theme-for-Emacs"))])
- (gitignore-snippets . [(20201118 1551) ((emacs (26)) (yasnippet (0 8 0))) "Gitignore.io templates for Yasnippet" tar ((:commit . "f91b3397526fe09d2e4a1f507a73b06bc7542cf7") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com") (:keywords "tools") (:url . "https://github.com/sei40kr/gitignore-snippets"))])
- (gitignore-templates . [(20210814 144) ((emacs (24 3))) "Create .gitignore using GitHub or gitignore.io API" single ((:commit . "d28cd1cec00242b688861648d36d086818b06099") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "tools") (:url . "https://github.com/xuchunyang/gitignore-templates.el"))])
- (gitlab . [(20180312 1647) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client for Gitlab" tar ((:commit . "68318aca3206d50701039c9aae39734ca29a49f9") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "gitlab") (:url . "https://github.com/nlamirault/emacs-gitlab"))])
- (gitlab-ci-mode . [(20191022 2017) ((emacs (25 1)) (yaml-mode (0 0 12))) "Mode for editing GitLab CI files" single ((:commit . "c861dc5fa17d380d5c3aca99dc3bbec5eee623bc") (:authors ("Joe Wreschnig")) (:maintainers ("Joe Wreschnig")) (:maintainer "Joe Wreschnig") (:keywords "tools" "vc") (:url . "https://gitlab.com/joewreschnig/gitlab-ci-mode/"))])
- (gitlab-ci-mode-flycheck . [(20190323 1829) ((emacs (25)) (flycheck (31)) (gitlab-ci-mode (1))) "Flycheck support for ‘gitlab-ci-mode’" single ((:commit . "eba81cfb7224fd1fa4e4da90d11729cc7ea12f72") (:authors ("Joe Wreschnig")) (:maintainers ("Joe Wreschnig")) (:maintainer "Joe Wreschnig") (:keywords "tools" "vc" "convenience") (:url . "https://gitlab.com/joewreschnig/gitlab-ci-mode-flycheck/"))])
- (gitlab-pipeline . [(20220921 1044) ((emacs (25 1)) (ghub (3 3 0))) "Get infomation about Gitlab pipelines" single ((:commit . "8cc070c156d6e45583074ef4eb110b8d1511b0c4") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:keywords "comm" "tools" "git") (:url . "https://github.com/TxGVNN/gitlab-pipeline"))])
- (gitlab-snip-helm . [(20200427 2014) ((emacs (25)) (dash (2 12 0)) (helm (3 2))) "Gitlab snippets api helm package" single ((:commit . "5fe0a66642da6f4e7ba9e1e3a96572c7f1876e37") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net") (:keywords "tools" "files" "convenience") (:url . "https://gitlab.com/sasanidas/gitlab-snip-helm"))])
- (gitolite-clone . [(20160609 2355) ((dash (2 10 0)) (s (1 9 0)) (pcache (0 3 1)) (emacs (24))) "Clone gitolite repositories from a completing list" single ((:commit . "d8a4c2875c984e51137c980b5773f42703602721") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "gitolite" "clone" "git") (:url . "https://github.com/IvanMalison/gitolite-clone"))])
- (gitpatch . [(20170722 410) ((emacs (24 3))) "Git-format patch toolkit" single ((:commit . "577d5adf65c8133caa325c10e89e1e2fc323c907") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience") (:url . "https://github.com/tumashu/gitpatch"))])
- (gitstatus . [(20221113 1951) ((emacs (25 1))) "Common front-end for `gitstatusd'" tar ((:commit . "c3e30341d0add9728010e566b9eb031c76414b47") (:authors ("Igor Epstein" . "igorepst@gmail.com")) (:maintainers ("Igor Epstein" . "igorepst@gmail.com")) (:maintainer "Igor Epstein" . "igorepst@gmail.com") (:keywords "tools" "processes") (:url . "https://github.com/igorepst/gitstatus-el"))])
- (gitter . [(20220316 138) ((emacs (24 4)) (let-alist (1 0 4))) "An Emacs Gitter client" single ((:commit . "49327c91eb50cfea633af8fd32b0643691d75cb7") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "gitter" "chat" "client" "internet") (:url . "https://github.com/xuchunyang/gitter.el"))])
- (gkroam . [(20220923 1018) ((emacs (26 3)) (db (0 0 6)) (company (0 9 10))) "A lightweight org-mode Roam Research replica" single ((:commit . "7a6f2899e676ce4720b102cd9eb4410e05613958") (:authors ("Kinney Zhang" . "kinneyzhang666@gmail.com")) (:maintainers ("Kinney Zhang" . "kinneyzhang666@gmail.com")) (:maintainer "Kinney Zhang" . "kinneyzhang666@gmail.com") (:keywords "org" "convenience") (:url . "https://github.com/Kinneyzhang/gkroam"))])
- (gl-conf-mode . [(20170714 1310) ((emacs (24 3))) "Mode for editing gitolite config files" single ((:commit . "9136a9b737e0a5b6471a91571d104c487c43f35b") (:authors ("Luis Lloret")) (:maintainers ("Luis Lloret")) (:maintainer "Luis Lloret") (:keywords "git" "gitolite" "languages") (:url . "https://github.com/llloret/gitolite-emacs"))])
- (global-tags . [(20211120 347) ((emacs (26 1)) (async (1 9 4)) (project (0 5 2)) (ht (2 3))) "Elisp API and editor integration for GNU global" single ((:commit . "aaa37da4c538f35a90149ef4ad3d8b0922af54ab") (:authors ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainer "Felipe Lema" . "felipelema@mortemale.org") (:keywords "convenience" "matching" "tools") (:url . "https://launchpad.net/global-tags.el"))])
- (glsl-mode . [(20210808 1945) nil "major mode for Open GLSL shader files" single ((:commit . "9b2e5f28e489a1f73c4aed734105618ac0dc0c43") (:keywords "languages" "opengl" "gpu" "spir-v" "vulkan") (:url . "https://github.com/jimhourihan/glsl-mode"))])
- (glue . [(20230112 2159) ((emacs (24 1))) "Emacs - Common Lisp interop using SLIME or SLY" single ((:commit . "dcdf8a69db87acea4fa61d4b4b9b1265c7e025db") (:authors ("Gabor Poczkodi" . "hajovonta@gmail.com")) (:maintainers ("Gabor Poczkodi" . "hajovonta@gmail.com")) (:maintainer "Gabor Poczkodi" . "hajovonta@gmail.com") (:keywords "lisp" "emacs" "common" "lisp" "cl") (:url . "https://git.sr.ht/~hajovonta/glue/"))])
- (gmail-message-mode . [(20160627 1847) ((ham-mode (1 0))) "A major-mode for editing gmail messages using markdown syntax." single ((:commit . "ec36672a9dc93c09ebe2f77597b498d11883d008") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "mail" "convenience" "emulation") (:url . "http://github.com/Bruce-Connor/gmail-message-mode"))])
- (gmail2bbdb . [(20170423 1144) nil "import email and name into bbdb from vcard." single ((:commit . "a84fa385cfaec7fc5f1518c368e52722da139f99") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "vcard" "bbdb" "email" "contact" "gmail") (:url . "http://github.com/redguardtoo/gmail2bbdb"))])
- (gmpl-mode . [(20220121 631) ((emacs (24))) "Major mode for editing GMPL(MathProg) files" single ((:commit . "97b103eea8b18f7e27b0f0be6cb4809a4156c032") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (gmsh-mode . [(20211204 826) ((emacs (26 1))) "Highlight GMSH mesh generator script syntax" single ((:commit . "2b7c573f378f7e9210400115d4d9dfd879f8a4ad") (:authors ("Matsievskiy S.V.")) (:maintainers ("Matsievskiy S.V.")) (:maintainer "Matsievskiy S.V.") (:keywords "languages") (:url . "https://gitlab.com/matsievskiysv/gmsh-mode"))])
- (gn-mode . [(20190428 1812) ((emacs (24)) (cl-lib (0 5))) "major mode for editing GN (generate ninja) files" single ((:commit . "fcf8e1e500d953364e97e7ebc5708a2c00fa3cd2") (:authors ("Emily Backes" . "lucca@accela.net")) (:maintainers ("Emily Backes" . "lucca@accela.net")) (:maintainer "Emily Backes" . "lucca@accela.net") (:keywords "data") (:url . "http://github.com/lashtear/gn-mode"))])
- (gnome-calendar . [(20161110 1256) nil "Integration with the GNOME Shell calendar" single ((:commit . "668591bec95c23934c5e1ef100cec4824e7cb25d") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:keywords "gnome" "calendar"))])
- (gnome-screencast . [(20210125 2001) ((emacs (25))) "Use Gnome screen recording functionality using elisp" single ((:commit . "1f4ef60fe9d452320dc02f89e289bac04ef2ad1c") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info") (:keywords "tools" "multimedia") (:url . "https://github.com/juergenhoetzel/emacs-gnome-screencast"))])
- (gnomenm . [(20150316 1918) ((s (1 9 0)) (dash (2 3 0)) (kv (0 0 19))) "Emacs interface to Gnome nmcli command" single ((:commit . "9065cda44ffc9e06239b8189a0154d31314c3b4d") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "processes" "hardware") (:url . "http://github.com/nicferrier/emacs-nm"))])
- (gntp . [(20141025 250) nil "Growl Notification Protocol for Emacs" single ((:commit . "767571135e2c0985944017dc59b0be79af222ef5") (:authors ("Engelke Eschner" . "tekai@gmx.li")) (:maintainers ("Engelke Eschner" . "tekai@gmx.li")) (:maintainer "Engelke Eschner" . "tekai@gmx.li"))])
- (gnu-apl-mode . [(20220404 341) ((emacs (27))) "Integrate GNU APL with Emacs" tar ((:commit . "c8695b0d55b5167263a843252ffd21a589018427") (:authors ("Elias MÃ¥rtenson" . "lokedhs@gmail.com")) (:maintainer "Elias MÃ¥rtenson" . "lokedhs@gmail.com") (:keywords "languages") (:url . "http://www.gnu.org/software/apl/"))])
- (gnu-indent . [(20221127 2112) ((emacs (25 1))) "Indent your code with GNU Indent" single ((:commit . "f31dbe60478b6270bb57b6b05998df8eec56f801") (:authors ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainers ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainer "Akib Azmain Turja" . "akib@disroot.org") (:keywords "tools" "c") (:url . "https://codeberg.org/akib/emacs-gnu-indent"))])
- (gnuplot . [(20230323 1400) ((emacs (25 1))) "Major-mode and interactive frontend for gnuplot" tar ((:commit . "f99effa21f85a4c0963fec6a38e9112a8157d27e") (:authors ("Jon Oddie, Bruce Ravel, Phil Type")) (:maintainers ("Maxime Tréca <maxime@gmail.com>, Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Maxime Tréca <maxime@gmail.com>, Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "data" "gnuplot" "plotting") (:url . "https://github.com/emacs-gnuplot/gnuplot"))])
- (gnuplot-mode . [(20171013 1616) nil "Major mode for editing gnuplot scripts" single ((:commit . "601f6392986f0cba332c87678d31ae0d0a496ce7") (:keywords "gnuplot" "plotting") (:url . "https://github.com/mkmcc/gnuplot-mode"))])
- (gnus-alias . [(20150316 42) nil "an alternative to gnus-posting-styles" single ((:commit . "9447d3ccb4c0e75d0468899cccff7aa249657bac") (:authors ("Joe Casadonte" . "emacs@northbound-train.com")) (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org") (:keywords "personality" "identity" "news" "mail" "gnus"))])
- (gnus-desktop-notify . [(20180623 1538) ((gnus (1 0))) "Gnus Desktop Notification global minor mode" single ((:commit . "44ebe0241a19f4052cd427dff408206542aa3c8f") (:authors ("Yuri D'Elia <wavexx AT thregr.org>")) (:maintainers ("Yuri D'Elia <wavexx AT thregr.org>")) (:maintainer "Yuri D'Elia <wavexx AT thregr.org>") (:url . "http://www.thregr.org/~wavexx/software/gnus-desktop-notify.el/"))])
- (gnus-notes . [(20221206 616) ((emacs (27 1)) (bbdb (3 1)) (helm (3 1)) (hydra (0 13 0)) (org (8 3)) (s (0 0)) (lv (0 0)) (async (1 9 1))) "Keep handy notes of read Gnus articles with helm and org" tar ((:commit . "9996b382c5c7b4f944a716baac69b556ef181462") (:authors ("Deus Max" . "deusmax@gmx.com")) (:maintainers ("Deus Max" . "deusmax@gmx.com")) (:maintainer "Deus Max" . "deusmax@gmx.com") (:keywords "convenience" "mail" "bbdb" "gnus" "helm" "org" "hydra") (:url . "https://github.com/deusmax/gnus-notes"))])
- (gnus-recent . [(20230104 1924) ((emacs (25 3 2))) "Article breadcrumbs for Gnus" single ((:commit . "5a4a28710dedef939dd8f1a743c5626e40271842") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "convenience" "mail") (:url . "https://github.com/unhammer/gnus-recent"))])
- (gnus-select-account . [(20170722 511) nil "Select an account before writing a mail in gnus" single ((:commit . "ddc8c135eeaf90f5b6692a033af2badae36e68ce") (:authors ("Feng Shu " . "tumashu@163.com")) (:maintainers ("Feng Shu " . "tumashu@163.com")) (:maintainer "Feng Shu " . "tumashu@163.com") (:keywords "convenience") (:url . "https://github.com/tumashu/gnus-select-account"))])
- (gnus-summary-ext . [(20180113 1316) nil "Extra limit and process mark commands for the gnus summary buffer" single ((:commit . "025fd853fe9280ae696a89ec2c2cac9befd010aa") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "comm") (:url . "https://github.com/vapniks/gnus-summary-ext"))])
- (gnus-summary-repo . [(20190617 1419) ((emacs (25))) "Import and export files between IMAP and local by using GNUS" single ((:commit . "3968667bfded60fbbf33f2fba3170e2b6501ec43") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:keywords "gnus" "repository") (:url . "https://github.com/TxGVNN/gnus-summary-repo"))])
- (gnus-x-gm-raw . [(20140610 2156) ((log4e (0 2 0)) (yaxception (0 1))) "Search mail of Gmail using X-GM-RAW as web interface" single ((:commit . "978bdfcecc8844465b71641c2e909fcdc66b22be") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "gnus") (:url . "https://github.com/aki2o/gnus-x-gm-raw"))])
- (go . [(20220414 1956) ((emacs (24))) "Play GO, translate and transfer between GO back ends" tar ((:commit . "79690579496b0df85a1c94199aca968371b58b3c") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainers ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") (:keywords "game" "go" "sgf") (:url . "http://eschulte.github.io/el-go/"))])
- (go-add-tags . [(20161123 1227) ((emacs (24 3)) (s (1 11 0))) "Add field tags for struct fields" single ((:commit . "54879945e46a0884c5f93d7fd6c866a9cdf401ac") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-add-tags"))])
- (go-autocomplete . [(20170626 1023) ((auto-complete (1 4 0))) "auto-complete-mode backend for go-mode" single ((:commit . "5327738ec1be51061a3f31010c89bdd4924ca496") (:authors ("Mikhail" . "tensai@cirno.in")) (:maintainers ("Mikhail" . "tensai@cirno.in")) (:maintainer "Mikhail" . "tensai@cirno.in") (:keywords "languages"))])
- (go-complete . [(20190409 516) ((go-mode (0)) (cl-lib (0 5))) "Native code completion for Go" single ((:commit . "056294014f37a1004958ec17ebd6748deed63502") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:keywords "go" "golang" "completion") (:url . "https://github.com/vibhavp/go-complete"))])
- (go-direx . [(20150316 143) ((direx (1 0 0)) (cl-lib (0 5))) "Tree style source code viewer for Go language" single ((:commit . "aecb9fef4d56d04d230d37c75c260c8392b5ad9f") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-direx"))])
- (go-dlv . [(20220126 1436) ((go-mode (1 3 1))) "Go Delve - Debug Go programs interactively with the GUD." single ((:commit . "0a296bc3b7b4dcf0c140a78c5ca3e1a8c6b7ea1a") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainers ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com") (:keywords "go" "debug" "debugger" "delve" "interactive" "gud") (:url . "https://github.com/benma/go-dlv.el/"))])
- (go-eldoc . [(20170305 1427) ((emacs (24 3)) (go-mode (1 0 0))) "eldoc for go-mode" single ((:commit . "cbbd2ea1e94a36004432a9ac61414cb5a95a39bd") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-eldoc"))])
- (go-errcheck . [(20160723 43) nil "errcheck integration for go-mode" single ((:commit . "9db21eccecedc2490793f176246094167164af31") (:authors ("Dominik Honnef" . "dominikh@fork-bomb.org")) (:maintainers ("Dominik Honnef" . "dominikh@fork-bomb.org")) (:maintainer "Dominik Honnef" . "dominikh@fork-bomb.org"))])
- (go-expr-completion . [(20200817 1750) ((emacs (24 1))) "Complement the return values for Go" single ((:commit . "66bba78f52a732b978848e3a4c99fa2afeb6c25f") (:authors ("Ryo Fujimoto" . "fujimisakri@gmail.com")) (:maintainers ("Ryo Fujimoto" . "fujimisakri@gmail.com")) (:maintainer "Ryo Fujimoto" . "fujimisakri@gmail.com") (:url . "https://github.com/fujimisakari/emacs-go-expr-completion"))])
- (go-fill-struct . [(20230308 1034) ((emacs (24))) "Fill struct for golang." single ((:commit . "9e2e4be5af716ecadba809e73ddc95d4c772b2d9") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:keywords "tools") (:url . "https://github.com/s-kostyaev/go-fill-struct"))])
- (go-gen-test . [(20230127 1422) ((emacs (24 4))) "Generate tests for go code with gotests" single ((:commit . "f84f4177af7fcbe10ce2116d5417ad5f0485034b") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainers ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:keywords "languages") (:url . "https://github.com/s-kostyaev/go-gen-test"))])
- (go-gopath . [(20160705 1034) ((cl-lib (0 5))) "Will guess GOPATH using gb and projectile." single ((:commit . "5172fc53f21edbf9347d5ee7d1d745da1ec88a15") (:authors ("Andrew Kirilenko" . "andrew.kirilenko.main@gmail.com")) (:maintainers ("Andrew Kirilenko" . "andrew.kirilenko.main@gmail.com")) (:maintainer "Andrew Kirilenko" . "andrew.kirilenko.main@gmail.com") (:url . "http://github.com/iced/go-gopath/"))])
- (go-guru . [(20220114 2239) ((go-mode (1 3 1)) (cl-lib (0 5))) "Integration of the Go 'guru' analysis tool into Emacs." single ((:commit . "3273fcece5d9ab7edd4f15b2d6bce61f4e5a0666") (:keywords "tools"))])
- (go-imenu . [(20181029 1029) ((emacs (24 3))) "Enhance imenu for go language" single ((:commit . "00bb69c1c71453f43ab2d6622a74e3c8e6b454b9") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:keywords "tools") (:url . "https://github.com/brantou/go-imenu.el"))])
- (go-impl . [(20210621 743) ((emacs (24 3)) (go-mode (1 3 0))) "impl integration for go-mode" single ((:commit . "1eebba6ccd02d11a5a82ad4540a8d562797bc3b3") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-impl"))])
- (go-imports . [(20190715 1647) nil "Insert go import statement given package name" tar ((:commit . "55681e815da93b6f927213c4aa352ae33db97c37") (:authors ("Yaz Saito")) (:maintainers ("Yaz Saito")) (:maintainer "Yaz Saito") (:keywords "tools" "go" "import") (:url . "https://github.com/yasushi-saito/go-imports"))])
- (go-mode . [(20221228 1706) ((emacs (26 1))) "Major mode for the Go programming language" single ((:commit . "166dfb1e090233c4609a50c2ec9f57f113c1da72") (:authors ("The go-mode Authors")) (:maintainers ("The go-mode Authors")) (:maintainer "The go-mode Authors") (:keywords "languages" "go") (:url . "https://github.com/dominikh/go-mode.el"))])
- (go-noisegate . [(20200502 703) ((emacs (24 4))) "Run Golang tests with Noise Gate" single ((:commit . "825d1fb05ec329f938c4c5bed23592f54d326f80") (:authors ("The Noise Gate Authors")) (:maintainers ("The Noise Gate Authors")) (:maintainer "The Noise Gate Authors") (:keywords "languages" "go" "test") (:url . "https://github.com/go-noisegate/go-noisegate.el"))])
- (go-playground . [(20221127 1342) ((emacs (24)) (go-mode (1 4 0)) (gotest (0 13 0))) "Local Golang playground for short snippets." single ((:commit . "e70aeb111fbb4487b464a813feb8ecad1542dc1c") (:authors ("Alexander I.Grafov" . "grafov@gmail.com")) (:maintainers ("Alexander I.Grafov" . "grafov@gmail.com")) (:maintainer "Alexander I.Grafov" . "grafov@gmail.com") (:keywords "tools" "golang") (:url . "https://github.com/grafov/go-playground"))])
- (go-playground-cli . [(20160503 914) ((emacs (24)) (request (0 2 0)) (deferred (0 3 2)) (names (20151201 404)) (s (1 10 0)) (f (0 17 2)) (let-alist (1 0 4)) (cl-lib (0 5))) "Go Playground client tool" single ((:commit . "60beebd98e3930641d41cee0189c579626f223bc") (:authors ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainers ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com") (:url . "https://github.com/kosh04/go-playground-cli"))])
- (go-projectile . [(20200609 131) ((projectile (0 10 0)) (go-mode (0)) (go-eldoc (0 16)) (go-rename (0)) (go-guru (0)) (dash (2 17 0))) "Go add-ons for Projectile" single ((:commit . "ad4ca3b5695a0e31e95e3cc4ccab498f87d68303") (:authors ("Doug MacEachern" . "dougm@vmware.com")) (:maintainers ("Doug MacEachern" . "dougm@vmware.com")) (:maintainer "Doug MacEachern" . "dougm@vmware.com") (:keywords "project" "convenience") (:url . "https://github.com/dougm/go-projectile"))])
- (go-rename . [(20220114 2239) ((go-mode (1 3 1))) "Integration of the 'gorename' tool into Emacs." single ((:commit . "3273fcece5d9ab7edd4f15b2d6bce61f4e5a0666") (:keywords "tools"))])
- (go-scratch . [(20150810 440) ((go-mode (1 3 1)) (emacs (24))) "*scratch* buffer for Go" single ((:commit . "3f68cbcce04f59eb8e83af109164731ec0454be0") (:authors ("Emanuel Evans" . "mail@emanuel.industries")) (:maintainers ("Emanuel Evans" . "mail@emanuel.industries")) (:maintainer "Emanuel Evans" . "mail@emanuel.industries") (:keywords "languages" "go"))])
- (go-snippets . [(20180113 611) ((yasnippet (0 8 0))) "Yasnippets for go" tar ((:commit . "d437df148879566ffe7f2e503a3cf2602aa9fb28") (:keywords "snippets"))])
- (go-stacktracer . [(20150430 2142) nil "parse Go stack traces" single ((:commit . "a2ac6d801b389f80ca4e2fcc1ab44513a9e55976") (:authors ("Samer Masterson" . "samer@samertm.com")) (:maintainers ("Samer Masterson" . "samer@samertm.com")) (:maintainer "Samer Masterson" . "samer@samertm.com") (:keywords "tools") (:url . "https://github.com/samertm/go-stacktracer.el"))])
- (go-tag . [(20230111 651) ((emacs (24 0)) (go-mode (1 5 0))) "Edit Golang struct field tag" single ((:commit . "33f2059551d5298ca228d90f525b99d1a8d70364") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:keywords "tools") (:url . "https://github.com/brantou/emacs-go-tag"))])
- (go-translate . [(20230503 303) ((emacs (27 1))) "Translation framework supports multiple engines such as Google/Bing/DeepL" tar ((:commit . "59506f69503cca65291fa5ccd0a326e716338c23") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com") (:keywords "convenience") (:url . "https://github.com/lorniu/go-translate"))])
- (gobgen . [(20161020 1523) ((emacs (24 4))) "Generate GObject descendants using a detailed form" single ((:commit . "ed2c2b0d217deae293096f3cf14aa492791ddd4f") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainers ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu") (:keywords "gobject" "glib" "gtk" "helper" "utilities"))])
- (god-mode . [(20221230 708) ((emacs (25 1))) "Minor mode for God-like command entering" tar ((:commit . "607aff10a7b27a8aa0c1a15c2c39337ab17cfda7") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainers ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:url . "https://github.com/emacsorphanage/god-mode"))])
- (godoctor . [(20180710 2152) nil "Frontend for godoctor" single ((:commit . "4b45ff3d0572f0e84056e4c3ba91fcc178199859") (:authors ("Sangho Na" . "microamp@protonmail.com")) (:maintainers ("Sangho Na" . "microamp@protonmail.com")) (:maintainer "Sangho Na" . "microamp@protonmail.com") (:keywords "go" "golang" "refactoring") (:url . "https://github.com/microamp/godoctor.el"))])
- (goggles . [(20230428 1547) ((emacs (27 1))) "Pulse modified regions" single ((:commit . "4a22853a4ff18c1c1a2149945de9a5ed0a23a2c9") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience" "wp") (:url . "https://github.com/minad/goggles"))])
- (gold-mode . [(20140607 206) ((sws-mode (0))) "Major mode for editing .gold files" single ((:commit . "6d3aa59602b1b835495271c8c9741ac344c2eab1") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "golang" "template" "gold") (:url . "https://github.com/yuutayamada/gold-mode-el"))])
- (golden-ratio . [(20191028 1732) nil "Automatic resizing of Emacs windows to the golden ratio" single ((:commit . "007911d8a431b72670f5fe5f0e5b4380c2777a31") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") (:keywords "window" "resizing"))])
- (golden-ratio-scroll-screen . [(20221102 240) nil "Scroll half screen down or up, and highlight current line" single ((:commit . "ed82ac7e9129c7be5983b44def0b9239b54d4dcf") (:authors ("纪秀峰 <jixiuf at gmail dot com>")) (:maintainers ("纪秀峰 <jixiuf at gmail dot com>")) (:maintainer "纪秀峰 <jixiuf at gmail dot com>") (:keywords "scroll" "screen" "highlight") (:url . "https://github.com/jixiuf/golden-ratio-scroll-screen"))])
- (golint . [(20180221 2015) nil "lint for the Go source code" single ((:commit . "0562613f16a6ec439a4a68e817e69e0f7c405c87") (:url . "https://github.com/golang/lint"))])
- (gom-mode . [(20131008 253) nil "Major mode for Gomfile" single ((:commit . "972e33df1d38ff323bc97de87477305826013701") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-gom-mode"))])
- (gomacro-mode . [(20200326 1103) ((emacs (24 4)) (go-mode (1 5 0))) "Gomacro mode and Go REPL integration" single ((:commit . "66b77efebb9654aa60383a1014f716f8cd74e3fc") (:authors ("Petter Storvik")) (:maintainers ("Petter Storvik")) (:maintainer "Petter Storvik") (:keywords "gomacro" "repl" "languages" "tools" "processes") (:url . "https://github.com/storvik/gomacro-mode"))])
- (good-scroll . [(20211101 942) ((emacs (27 1))) "Good pixel line scrolling" tar ((:commit . "a7ffd5c0e5935cebd545a0570f64949077f71ee3") (:authors ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainers ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainer "Benjamin Levy" . "blevy@protonmail.com") (:url . "https://github.com/io12/good-scroll.el"))])
- (google . [(20140416 1748) nil "Emacs interface to the Google API" single ((:commit . "3b3189a8b201c8d36fed6e61496274e530dd40bd") (:authors ("Edward O'Connor" . "ted@oconnor.cx")) (:maintainers ("Edward O'Connor" . "ted@oconnor.cx")) (:maintainer "Edward O'Connor" . "ted@oconnor.cx") (:keywords "comm" "processes" "tools"))])
- (google-c-style . [(20220210 1659) nil "Google's C/C++ style for c-mode" single ((:commit . "af78b49ac4fef8083094d5105f72528ee7d09073") (:keywords "c" "tools"))])
- (google-contacts . [(20201012 1056) ((oauth2 (0 10)) (cl-lib (0 5))) "Support for Google Contacts in Emacs" tar ((:commit . "8923c238fe0906184d2254b33ba72792ed12cd47") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info") (:keywords "comm") (:url . "https://github.com/jd/google-contacts.el"))])
- (google-maps . [(20181121 1532) ((emacs (24 3))) "Access Google Maps from Emacs" tar ((:commit . "2eb16ff609f5a9f8d02c15238a111fbb7db6c146") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info") (:keywords "comm") (:url . "https://julien.danjou.info/projects/emacs-packages#google-maps"))])
- (google-this . [(20170810 1215) ((emacs (24 1))) "A set of functions and bindings to google under point." single ((:commit . "8a2e3ca5da6a8c89bfe99a21486c6c7db125dc84") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "convenience" "hypermedia") (:url . "http://github.com/Malabarba/emacs-google-this"))])
- (google-translate . [(20220921 245) ((emacs (24 3)) (popup (0 5 8))) "Emacs interface to Google Translate" tar ((:commit . "e60dd6eeb9cdb931d9d8bfbefc29a48ef9a21bd9") (:authors ("Oleksandr Manzyuk" . "manzyuk@gmail.com")) (:maintainers ("Andrey Tykhonov" . "atykhonov@gmail.com")) (:maintainer "Andrey Tykhonov" . "atykhonov@gmail.com") (:keywords "convenience") (:url . "https://github.com/atykhonov/google-translate"))])
- (goose-theme . [(20160828 1245) ((emacs (24 1))) "A gray color theme" single ((:commit . "acd017b50ab25a75fd1331eb3de66467e2042e9c") (:authors ("Stephen Whipple" . "shw@wicdmedia.org")) (:maintainers ("Stephen Whipple" . "shw@wicdmedia.org")) (:maintainer "Stephen Whipple" . "shw@wicdmedia.org") (:url . "https://github.com/thwg/goose-theme"))])
- (gore-mode . [(20151123 1927) ((go-mode (1 0 0))) "Simple mode for gore, a command-line evaluator for golang." single ((:commit . "94d7f3e99104e06167967c98fdc201049c433c2d") (:authors ("Sergey Pashaev" . "sergey.pashaev@gmail.com")) (:maintainers ("Sergey Pashaev" . "sergey.pashaev@gmail.com")) (:maintainer "Sergey Pashaev" . "sergey.pashaev@gmail.com") (:keywords "go" "repl"))])
- (gorepl-mode . [(20170905 945) ((emacs (24)) (s (1 11 0)) (f (0 19 0)) (hydra (0 13 0))) "Go REPL Interactive Development in top of Gore" single ((:commit . "bbd27f6a0a77f484e2a3f082d70dc69da63ae52a") (:authors ("Manuel Alonso" . "manuteali@gmail.com")) (:maintainers ("Manuel Alonso" . "manuteali@gmail.com")) (:maintainer "Manuel Alonso" . "manuteali@gmail.com") (:keywords "languages" "go" "golang" "gorepl") (:url . "http://www.github.com/manute/gorepl-mode"))])
- (gotest . [(20230221 945) ((emacs (24 3)) (s (1 11 0)) (f (0 19 0))) "Launch GO unit tests" single ((:commit . "490189e68d743a851bfb42d0017428a7550e8615") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "languages" "go" "tests") (:url . "https://github.com/nlamirault/gotest.el"))])
- (gotham-theme . [(20220107 1730) ((emacs (24 1))) "A very dark Emacs color theme" single ((:commit . "4b8214df0851bb69b44c3e864568b7e0030a95d2") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:url . "https://depp.brause.cc/gotham-theme"))])
- (goto-char-preview . [(20230111 1525) ((emacs (24 3))) "Preview character when executing `goto-char` command" single ((:commit . "feee79f83194155e67f5b16ca57b51b2d941b2ee") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "character" "navigation") (:url . "https://github.com/emacs-vs/goto-char-preview"))])
- (goto-chg . [(20220107 1733) ((emacs (24 1))) "Go to last change" single ((:commit . "278cd3e6d5107693aa2bb33189ca503f22f227d0") (:authors ("David Andersson <l.david.andersson(at)sverige.nu>")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "convenience" "matching") (:url . "https://github.com/emacs-evil/goto-chg"))])
- (goto-last-change . [(20150109 1823) nil "Move point through buffer-undo-list positions" single ((:commit . "58b0928bc255b47aad318cd183a5dce8f62199cc") (:authors ("Kevin Rodgers" . "ihs_4664@yahoo.com")) (:maintainers ("Kevin Rodgers" . "ihs_4664@yahoo.com")) (:maintainer "Kevin Rodgers" . "ihs_4664@yahoo.com") (:keywords "convenience") (:url . "https://github.com/camdez/goto-last-change.el"))])
- (goto-last-point . [(20230406 1822) ((emacs (24 3))) "Record and jump to the last point in the buffer" single ((:commit . "2ad8ff095bc34b433803c824ec4f500ff51cd1b2") (:authors ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainers ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainer "Manuel Uberti" . "manuel.uberti@inventati.org") (:keywords "convenience") (:url . "https://github.com/manuel-uberti/goto-last-point"))])
- (goto-line-preview . [(20230111 1531) ((emacs (25))) "Preview line when executing `goto-line` command" single ((:commit . "c6db484cf401351f7f2f57496b0466b774435947") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "line" "navigation") (:url . "https://github.com/emacs-vs/goto-line-preview"))])
- (govc . [(20221216 1712) ((emacs (24 3)) (dash (1 5 0)) (s (1 9 0)) (magit-popup (2 0 50)) (json-mode (1 6 0))) "Interface to govc for managing VMware ESXi and vCenter" single ((:commit . "c82a709c50c0cd1ae560dd4c8da2d5b266114c50") (:authors ("The govc developers")) (:maintainers ("The govc developers")) (:maintainer "The govc developers") (:keywords "convenience") (:url . "https://github.com/vmware/govmomi/tree/main/govc/emacs"))])
- (govet . [(20170808 1724) nil "linter/problem finder for the Go source code" single ((:commit . "1b8c044aa856f4b62a682bc57494af19d22a6053") (:url . "https://godoc.org/golang.org/x/tools/cmd/vet"))])
- (gpastel . [(20181229 1404) ((emacs (25 1))) "Integrates GPaste with the kill-ring" single ((:commit . "8a5522b274f79d55d7c9a0b2aaf062526f9253c7") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "tools") (:url . "https://gitlab.petton.fr/DamienCassou/desktop-environment"))])
- (gpt . [(20230502 2319) ((emacs (24 4))) "Run instruction-following language models" tar ((:commit . "a38c152caa99ca30af86040907f70b027173c19d") (:authors ("Andreas Stuhlmueller" . "andreas@ought.org")) (:maintainers ("Andreas Stuhlmueller" . "andreas@ought.org")) (:maintainer "Andreas Stuhlmueller" . "andreas@ought.org") (:keywords "gpt3" "language" "copilot" "convenience" "tools") (:url . "https://github.com/stuhlmueller/gpt.el"))])
- (gptai . [(20230430 1823) ((emacs (24 1))) "Integrate with the OpenAI API" tar ((:commit . "a2e84a9936fb7dee82024082bc38e6f7564506e4") (:authors ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainers ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainer "Anton Hibl" . "antonhibl11@gmail.com") (:keywords "comm" "convenience") (:url . "https://github.com/antonhibl/gptai"))])
- (gptel . [(20230503 2129) ((emacs (27 1)) (transient (0 3 7))) "A simple ChatGPT client" tar ((:commit . "d13b0c4ab76d9611e3c8886f73ec44bf104d59d4") (:authors ("Karthik Chikmagalur")) (:maintainers ("Karthik Chikmagalur")) (:maintainer "Karthik Chikmagalur") (:keywords "convenience") (:url . "https://github.com/karthink/gptel"))])
- (grab-mac-link . [(20210511 1303) ((emacs (24))) "Grab link from Mac Apps and insert it into Emacs" single ((:commit . "5fdb03bf57bc4a530374b896e0f8b5139dc794e3") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "mac" "hyperlink") (:url . "https://github.com/xuchunyang/grab-mac-link.el"))])
- (grab-x-link . [(20191113 848) ((emacs (24)) (cl-lib (0 5))) "Grab links from X11 apps and insert into Emacs" single ((:commit . "d898db46e4864118359fdedfe915e180de3fe290") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "hyperlink") (:url . "https://github.com/xuchunyang/grab-x-link"))])
- (gradle-mode . [(20150313 1905) ((s (1 8 0))) "Gradle integration with Emacs' compile" single ((:commit . "579de06674551919cddac9cfe42129f4fb0155c9") (:authors ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainers ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainer "Daniel Mijares" . "daniel.j.mijares@gmail.com") (:keywords "gradle") (:url . "http://github.com/jacobono/emacs-gradle-mode"))])
- (grails . [(20221110 929) ((emacs (24))) "Minor mode for Grails projects" single ((:commit . "3019f86e555ee94388795a0475cfa213e3897bbb") (:url . "https://github.com/lifeisfoo/emacs-grails"))])
- (grails-mode . [(20220407 1954) nil "minor-mode that adds some Grails project management to a grails project" single ((:commit . "29210e5a969c02169b68e04f2e28e3bf2fc13363") (:authors ("Jim Morris" . "morris@wolfman.com")) (:maintainers ("Russel Winder" . "russel@winder.org.uk")) (:maintainer "Russel Winder" . "russel@winder.org.uk") (:keywords "languages") (:url . "http://blog.wolfman.com"))])
- (grammarly . [(20221231 1655) ((emacs (26 1)) (s (1 12 0)) (request (0 3 0)) (websocket (1 6))) "Grammarly API interface" single ((:commit . "0d9fbee337cb8dd316e5dcf0bff91e44c115dd0d") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "grammar" "api" "interface" "english") (:url . "https://github.com/emacs-grammarly/grammarly"))])
- (grandshell-theme . [(20180606 517) nil "Dark color theme for Emacs > 24 with intensive colors." tar ((:commit . "0ed8e4273607dd4fcaa742b4097259233b09eda6") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "color" "theme" "grand" "shell" "faces") (:url . "https://framagit.org/steckerhalter/grandshell-theme"))])
- (graphene . [(20180529 1112) ((dash (2 10 0)) (exec-path-from-shell (1 9)) (ppd-sr-speedbar (0 0 6)) (sr-speedbar (20140505)) (ido-completing-read+ (4 3)) (smex (3 0)) (web-mode (11 2)) (smartparens (1 8 0)) (graphene-meta-theme (0 0 2)) (flycheck (0 23)) (company (0 8 12))) "Friendly Emacs defaults" tar ((:commit . "cc8477fcfb7771ea4e5bbaf3c01f9e679234c1c1") (:authors ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainer "Robert Dallas Gray" . "mail@robertdallasgray.com") (:keywords "defaults") (:url . "https://github.com/rdallasgray/graphene"))])
- (graphene-meta-theme . [(20161204 1607) nil "Integrated theming for common packages" single ((:commit . "62cc73fee31f1bd9474027b83a249feee050271e") (:authors ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainers ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainer "Robert Dallas Gray" . "mail@robertdallasgray.com") (:keywords "defaults") (:url . "https://github.com/rdallasgray/graphene"))])
- (graphql . [(20221128 1106) ((emacs (25))) "GraphQL utilities" tar ((:commit . "b57b5ca5d2d0837e1fb4a4f30c051d5f3e643f0f") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:keywords "hypermedia" "tools" "lisp") (:url . "https://github.com/vermiculus/graphql.el"))])
- (graphql-doc . [(20220527 1721) ((emacs (26 1)) (request (0 3 2)) (promise (1 1))) "GraphQL Documentation Explorer" single ((:commit . "d37140267e0c426c7c18aff31900aa1650257394") (:authors ("Ian Fitzpatrick")) (:maintainers ("Ian Fitzpatrick")) (:maintainer "Ian Fitzpatrick") (:url . "https://github.com/ifitzpatrick/graphql-doc.el"))])
- (graphql-mode . [(20230411 1943) ((emacs (24 3))) "Major mode for editing GraphQL schemas" single ((:commit . "0ad4ae0160cabad46109dfbb394297a185eb2525") (:authors ("David Vazquez Pua" . "davazp@gmail.com")) (:maintainers ("David Vazquez Pua" . "davazp@gmail.com")) (:maintainer "David Vazquez Pua" . "davazp@gmail.com") (:keywords "languages") (:url . "https://github.com/davazp/graphql-mode"))])
- (graphviz-dot-mode . [(20230325 1050) ((emacs (25 0))) "Mode for the dot-language used by graphviz (att)." single ((:commit . "8ff793b13707cb511875f56e167ff7f980a31136") (:maintainers ("Pieter Pareit" . "pieter.pareit@gmail.com")) (:maintainer "Pieter Pareit" . "pieter.pareit@gmail.com") (:keywords "mode" "dot" "dot-language" "dotlanguage" "graphviz" "graphs" "att") (:url . "https://ppareit.github.io/graphviz-dot-mode/"))])
- (grapnel . [(20131001 1534) nil "HTTP request lib with flexible callback dispatch" single ((:commit . "7387234eb3f0285a490fddb1e06a4bf029719fb7") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/grapnel"))])
- (grass-mode . [(20170503 1500) ((cl-lib (0 2)) (dash (2 8 0))) "Provides Emacs modes for interacting with the GRASS GIS program" single ((:commit . "f17e330dfde6a1b81a9b33d019fc0dff890f482d") (:authors ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainers ("Tyler Smith" . "tyler@plantarum.ca")) (:maintainer "Tyler Smith" . "tyler@plantarum.ca") (:keywords "grass" "gis"))])
- (grayscale-theme . [(20171005 802) nil "A simple grayscale theme" single ((:commit . "917d63c0effc8459502a41e0cad5822d2b200499") (:authors ("Kaleb Elwert" . "belak@coded.io")) (:maintainers ("Kaleb Elwert" . "belak@coded.io")) (:maintainer "Kaleb Elwert" . "belak@coded.io") (:keywords "lisp") (:url . "https://github.com/belak/emacs-grayscale-theme"))])
- (greek-polytonic . [(20190303 1358) ((emacs (24))) "Quail package for inputting polytonic Greek" single ((:commit . "114cba0f57cc077871693c799b807df2292341ec") (:authors ("Johannes Choo" . "jhanschoo@gmail.com")) (:maintainers ("Johannes Choo" . "jhanschoo@gmail.com")) (:maintainer "Johannes Choo" . "jhanschoo@gmail.com") (:keywords "i18n" "multilingual" "input method" "greek") (:url . "https://github.com/jhanschoo/greek-polytonic"))])
- (green-is-the-new-black-theme . [(20210203 1511) nil "A cool and minimalist green blackened theme engine" single ((:commit . "09f6908064dd1854379a072d7cdd706959256299") (:authors ("Fred Campos" . "fred.tecnologia@gmail.com")) (:maintainers ("Fred Campos" . "fred.tecnologia@gmail.com")) (:maintainer "Fred Campos" . "fred.tecnologia@gmail.com") (:keywords "faces" "themes") (:url . "https://github.com/fredcamps/green-is-the-new-black-emacs"))])
- (green-phosphor-theme . [(20150515 1447) nil "A light color theme with muted, autumnal colors." single ((:commit . "5549781559ff5daa85c1d6c635c94524c1c5f644") (:authors ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainers ("Adam Alpern" . "adam.alpern@gmail.com")) (:maintainer "Adam Alpern" . "adam.alpern@gmail.com") (:keywords "color" "theme") (:url . "http://github.com/aalpern/emacs-color-theme-green-phosphor"))])
- (green-screen-theme . [(20180816 1502) nil "A nice color theme for those who miss green CRTs" single ((:commit . "774e8f6c033786406267f71ec07319d906a30b75") (:authors ("Ricardo Banffy" . "rbanffy@gmail.com")) (:maintainers ("Ricardo Banffy" . "rbanffy@gmail.com")) (:maintainer "Ricardo Banffy" . "rbanffy@gmail.com") (:keywords "faces" "theme") (:url . "https://github.com/rbanffy/green-screen-emacs"))])
- (gregorio-mode . [(20170705 1451) nil "Gregorio Mode for .gabc files" single ((:commit . "2b45f91246286abc449cb71f28583403181051c2") (:authors ("Fr. John Jenkins" . "jenkins@sspx.ng")) (:maintainers ("Fr. John Jenkins" . "jenkins@sspx.ng")) (:maintainer "Fr. John Jenkins" . "jenkins@sspx.ng") (:keywords "gregorio" "chant") (:url . "https://jsrjenkins.github.io/gregorio-mode/"))])
- (grep-a-lot . [(20210618 1420) nil "manages multiple search results buffers for grep.el" single ((:commit . "223819dbea049bdeb5f97f9849fce139a5f16a75") (:authors ("Avi Rozen" . "avi.rozen@gmail.com")) (:maintainers ("Avi Rozen" . "avi.rozen@gmail.com")) (:maintainer "Avi Rozen" . "avi.rozen@gmail.com") (:keywords "tools" "convenience" "search") (:url . "https://github.com/ZungBang/emacs-grep-a-lot"))])
- (grey-paper-theme . [(20230415 1115) ((emacs (24 1))) "A greyscale theme with look-n-feel of an eink display" single ((:commit . "4e5b8a31f586e2aa5c5d9bd939f0f518d919522e") (:authors ("Kang-min Liu" . "gugod@gugod.org")) (:maintainers ("Kang-min Liu" . "gugod@gugod.org")) (:maintainer "Kang-min Liu" . "gugod@gugod.org") (:keywords "faces") (:url . "https://github.com/gugod/grey-paper-theme"))])
- (greymatters-theme . [(20150621 1123) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "a7220a8c6cf18ccae2b76946b6f01188a7c9d5d1") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler"))])
- (grip-mode . [(20230206 323) ((emacs (24 4))) "Instant GitHub-flavored Markdown/Org preview using grip." single ((:commit . "bdee160db6ab8c988bb0de95ad306ff8b793ec67") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:keywords "convenience" "markdown" "preview") (:url . "https://github.com/seagle0128/grip-mode"))])
- (grizzl . [(20160818 737) ((cl-lib (0 5)) (emacs (24 3))) "Fast fuzzy search index for Emacs." single ((:commit . "d554d93afa8519ee3a41340ec8aa6b4555065446") (:authors ("Chris Corbyn" . "chris@w3style.co.uk")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:keywords "convenience" "usability") (:url . "https://github.com/grizzl/grizzl"))])
- (groovy-imports . [(20210505 1807) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Groovy imports" single ((:commit . "a60c3202973e3185091db623d960f71840a22205") (:authors ("Miro Bezjak")) (:maintainers ("Miro Bezjak")) (:maintainer "Miro Bezjak") (:keywords "groovy") (:url . "http://www.github.com/mbezjak/emacs-groovy-imports"))])
- (groovy-mode . [(20230318 533) ((s (1 12 0)) (emacs (24 3)) (dash (2 13 0))) "Major mode for Groovy source files" tar ((:commit . "7b8520b2e2d3ab1d62b35c426e17ac25ed0120bb") (:authors ("Russel Winder" . "russel@winder.org.uk") ("Jim Morris" . "morris@wolfman.com") ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Russel Winder" . "russel@winder.org.uk")) (:maintainer "Russel Winder" . "russel@winder.org.uk") (:keywords "languages") (:url . "https://github.com/Groovy-Emacs-Modes/groovy-emacs-modes"))])
- (gruber-darker-theme . [(20221122 1143) nil "Gruber Darker color theme for Emacs 24." single ((:commit . "6de7a37d7b18cf3f0ec51db799f4f2aa6e3e89ff") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/rexim/gruber-darker-theme"))])
- (grugru . [(20230121 1825) ((emacs (24 4))) "Rotate text at point" tar ((:commit . "088f26330be161cfad4835e155595ec60dcb335a") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "convenience" "abbrev" "tools") (:url . "https://github.com/ROCKTAKEY/grugru"))])
- (grunt . [(20160316 1528) ((dash (2 9 0)) (ansi-color (3 4 2)) (emacs (24 3))) "Some glue to stick Emacs and Gruntfiles together" single ((:commit . "4c269e2738658643ec2ed9ef61a2a3d71b08d304") (:authors ("Daniel Gempesaw" . "dgempesaw@sharecare.com")) (:maintainers ("Daniel Gempesaw" . "dgempesaw@sharecare.com")) (:maintainer "Daniel Gempesaw" . "dgempesaw@sharecare.com") (:keywords "convenience" "grunt") (:url . "https://github.com/gempesaw/grunt.el"))])
- (gruvbox-theme . [(20230506 432) ((autothemer (0 2))) "A retro-groove colour theme for Emacs" tar ((:commit . "3d5e0a0b1e007f7faf1bc8414575262057d52dd8") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "http://github.com/greduan/emacs-theme-gruvbox"))])
- (gs-mode . [(20151202 1006) nil "Major mode for editing GrADS script files" single ((:commit . "1a13051db21b999c7682a015b33a03096ff9d891") (:authors ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainers ("Joe Wielgosz" . "joew@cola.iges.org")) (:maintainer "Joe Wielgosz" . "joew@cola.iges.org") (:keywords "grads" "script" "major-mode"))])
- (gscholar-bibtex . [(20190130 555) nil "Retrieve BibTeX from Google Scholar and other online sources(ACM, IEEE, DBLP)" single ((:commit . "3b651e3de116860eb1f1aef9b547a561784871fe") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (gsettings . [(20210407 2045) ((emacs (24 3)) (dash (2 16 0)) (gvariant (1 0 0)) (s (1 12 0))) "GSettings (Gnome) helpers" single ((:commit . "9f9fb1fe946bbba46307c26355f355225ea7262a") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "languages") (:url . "https://github.com/wbolster/emacs-gsettings"))])
- (gsnip . [(20220206 1526) ((emacs (26)) (aio (1 0)) (log4e (0 3 3))) "A gitlab snippet client" single ((:commit . "4d473b726b3f3b6bb7d1b5f66a9d368588ce0f86") (:authors ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainers ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainer "Wang Kai" . "kaiwkx@gmail.com") (:keywords "extensions" "tools") (:url . "https://github.com/kaiwk/gitlab-snippet"))])
- (gtk-pomodoro-indicator . [(20191007 1500) nil "A pomodoro indicator for the GTK tray" tar ((:commit . "cb026a595de8a9244b16e06876f10c60dce18676") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience" "pomodoro") (:url . "https://github.com/abo-abo/gtk-pomodoro-indicator"))])
- (gtk-variant . [(20200416 2136) ((emacs (25 1))) "Set the GTK theme variant (titlebar color)" single ((:commit . "a60af277fbb52306c17663074cf9954dd6cea024") (:authors ("Paul Oppenheimer")) (:maintainers ("Paul Oppenheimer")) (:maintainer "Paul Oppenheimer") (:keywords "frames" "gtk" "titlebar") (:url . "https://github.com/bepvte/gtk-variant.el"))])
- (guake . [(20221029 1811) ((emacs (27 1))) "Interact with Guake via DBus" single ((:commit . "2753ce833b95bd1f042ac0e4b7adfe34975a88ed") (:authors ("Jürgen Hötzel" . "juergen.hoetzel@hr.de")) (:maintainers ("Jürgen Hötzel" . "juergen.hoetzel@hr.de")) (:maintainer "Jürgen Hötzel" . "juergen.hoetzel@hr.de") (:keywords "convenience") (:url . "https://github.com/juergenhoetzel/emacs-guake"))])
- (guess-language . [(20220408 1545) ((cl-lib (0 5)) (emacs (24))) "Robust automatic language detection" tar ((:commit . "b1fc363ca2c30b8a8ddaf2e366bca7770c8cfbec") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:keywords "wp") (:url . "https://github.com/tmalsburg/guess-language.el"))])
- (guide-key . [(20150108 635) ((dash (2 10 0)) (popwin (0 3 0)) (s (1 9 0))) "Guide the following key bindings automatically and dynamically" single ((:commit . "9236d287a7272e307fb941237390a96037c8c0a2") (:authors ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainers ("Tsunenobu Kai" . "kai2nenobu@gmail.com")) (:maintainer "Tsunenobu Kai" . "kai2nenobu@gmail.com") (:keywords "help" "convenience") (:url . "https://github.com/kai2nenobu/guide-key"))])
- (guide-key-tip . [(20161011 823) ((guide-key (1 2 3)) (pos-tip (0 4 5))) "Show guide-key.el hints using pos-tip.el" single ((:commit . "02c5d4b0b65f3e91be5a47f0ff1ae5e86e00c64e") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "help" "convenience" "tooltip") (:url . "https://github.com/aki2o/guide-key-tip"))])
- (guix . [(20230309 955) ((emacs (24 3)) (dash (2 11 0)) (geiser (0 8)) (bui (1 2 0)) (magit-popup (2 1 0)) (edit-indirect (0 1 4))) "Interface for GNU Guix" tar ((:commit . "a85f070c18b915ec50f12cf5375b7a32830d66f9") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "tools") (:url . "https://emacs-guix.gitlab.io/website/"))])
- (gulp-task-runner . [(20170718 2041) nil "Gulp task runner" single ((:commit . "877990e956b1d71e2d9c7c3e5a129ad199b9debb") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:keywords "convenience" "javascript"))])
- (gumshoe . [(20230302 457) ((emacs (25 1))) "Scoped spatial and temporal POINT movement tracking" tar ((:commit . "3b65ee2496d6de3c7c47a821b38a5a19e0b64c2a") (:authors ("overdr0ne")) (:maintainers ("overdr0ne")) (:maintainer "overdr0ne") (:keywords "tools") (:url . "https://github.com/Overdr0ne/gumshoe"))])
- (guru-mode . [(20211025 1157) nil "Become an Emacs guru" single ((:commit . "a3370e547eab260d24774cd50ccbe865373c8631") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "convenience") (:url . "https://github.com/bbatsov/guru-mode"))])
- (gvariant . [(20210507 1310) ((emacs (24)) (parsec (0 1 4))) "GVariant (GLib) helpers" single ((:commit . "f2e87076845800cbaaeed67f175ad4e4a9c01e37") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "languages") (:url . "https://github.com/wbolster/emacs-gvariant"))])
- (gvpr-mode . [(20201007 2054) nil "A major mode offering basic syntax coloring for gvpr scripts." single ((:commit . "a729fa4623a6d846ab860778842b38f685246c95") (:authors ("Rod Waldhoff" . "r.waldhoff@gmail.com")) (:maintainers ("Rod Waldhoff" . "r.waldhoff@gmail.com")) (:maintainer "Rod Waldhoff" . "r.waldhoff@gmail.com") (:keywords "graphviz" "gv" "dot" "gvpr" "graph") (:url . "https://raw.github.com/rodw/gvpr-lib/master/extra/gvpr-mode.el"))])
- (gxref . [(20170411 1753) ((emacs (25))) "xref backend using GNU Global." single ((:commit . "380b02c3c3c2586c828456716eef6a6392bb043b") (:authors ("Dedi Hirschfeld")) (:maintainers ("Dedi Hirschfeld")) (:maintainer "Dedi Hirschfeld") (:keywords "xref" "global" "tools") (:url . "https://github.com/dedi/gxref"))])
- (h5dump-mode . [(20221128 1935) ((emacs (25 1))) "Major mode for navigating h5dump output" single ((:commit . "3c9e4608112da91db76bf316417023bed0422ef3") (:authors ("Eric Berquist")) (:maintainers ("Eric Berquist")) (:maintainer "Eric Berquist") (:keywords "languages" "hdf5") (:url . "https://github.com/berquist/h5dump-mode"))])
- (habamax-theme . [(20181001 850) ((emacs (24))) "Boring white background color that gets the job done." single ((:commit . "6e86a1b23b6e2aaf40d4374b5673da00a28be447") (:authors ("Maxim Kim" . "habamax@gmail.com")) (:maintainers ("Maxim Kim" . "habamax@gmail.com")) (:maintainer "Maxim Kim" . "habamax@gmail.com") (:url . "https://github.com/habamax/habamax-theme"))])
- (habitica . [(20220215 1758) ((org (8 3 5)) (emacs (24 3))) "Interface for habitica.com" single ((:commit . "9e1fde7f359f7f6a6976b857fbbdbc8dd4fd3327") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "habitica" "todo") (:url . "https://github.com/abrochard/emacs-habitica"))])
- (hack-mode . [(20230227 1950) ((emacs (25 1)) (s (1 11 0))) "Major mode for the Hack programming language" single ((:commit . "278e4cc4032bff92060496cf1179643cfc6f9c0f") (:authors ("John Allen <jallen@fb.com>, Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("John Allen <jallen@fb.com>, Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "John Allen <jallen@fb.com>, Wilfred Hughes" . "me@wilfred.me.uk") (:url . "https://github.com/hhvm/hack-mode"))])
- (hacker-typer . [(20170206 1520) ((emacs (24))) "Pretend to write code like a pro" tar ((:commit . "d5a23714a4ccc5071580622f278597d5973f40bd") (:authors ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainers ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainer "Diego A. Mundo" . "diegoamundo@gmail.com") (:keywords "hacker" "typer" "multimedia" "games") (:url . "http://github.com/therockmandolinist/emacs-hacker-typer"))])
- (hackernews . [(20230127 1918) nil "Hacker News Client for Emacs" single ((:commit . "dcb312194b60e9841a63455ba893d60856099c79") (:authors ("Lincoln de Sousa" . "lincoln@comum.org")) (:maintainers ("Basil L. Contovounesios" . "contovob@tcd.ie")) (:maintainer "Basil L. Contovounesios" . "contovob@tcd.ie") (:keywords "comm" "hypermedia" "news") (:url . "https://github.com/clarete/hackernews.el"))])
- (hal-mode . [(20160704 1746) nil "Major mode for editing HAL files" single ((:commit . "cd2f66f219ee520198d4586fb6b169cef7ad3f21") (:authors ("Alexander Rössler")) (:maintainers ("Alexander Rössler")) (:maintainer "Alexander Rössler") (:keywords "language") (:url . "https://github.com/strahlex/hal-mode/"))])
- (ham-mode . [(20150811 1306) ((html-to-markdown (1 2)) (markdown-mode (2 0))) "Html As Markdown. Transparently edit an html file using markdown" single ((:commit . "3a141986a21c2aa6eefb428983352abb8b7907d2") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "convenience" "emulation" "wp") (:url . "http://github.com/Bruce-Connor/ham-mode"))])
- (hamburg-theme . [(20160123 740) ((emacs (24))) "Color Theme with a dark blue background." single ((:commit . "a05bf090e0c57c34cc59e301f95d9961280db244") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler"))])
- (hamburger-menu . [(20220509 1341) ((emacs (28 1))) "Mode line hamburger menu" single ((:commit . "06bc9d6872007a31226d7410d497a0acd98b272b") (:authors ("Iain Nicol")) (:maintainers ("Iain Nicol")) (:maintainer "Iain Nicol") (:keywords "hamburger" "menu") (:url . "https://gitlab.com/iain/hamburger-menu-mode"))])
- (haml-mode . [(20230322 1744) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing Haml files" single ((:commit . "45a0b23db0b8f827c78f7749457f3427263e6ffd") (:authors ("Natalie Weizenbaum")) (:maintainers ("Natalie Weizenbaum")) (:maintainer "Natalie Weizenbaum") (:keywords "markup" "languages" "html") (:url . "https://github.com/nex3/haml-mode"))])
- (hamlet-mode . [(20131208 724) ((cl-lib (0 3)) (dash (2 3 0)) (s (1 7 0))) "Hamlet editing mode" single ((:commit . "7362b955e556a3d007fa06945a27e5b99349527d") (:authors (nil . "Kata <lightquake@amateurtopologist.com")) (:maintainers (nil . "Kata <lightquake@amateurtopologist.com")) (:maintainer nil . "Kata <lightquake@amateurtopologist.com") (:keywords "wp" "languages" "comm") (:url . "https://github.com/lightquake/hamlet-mode"))])
- (hammy . [(20221106 2041) ((emacs (28 1)) (ts (0 2 2))) "Programmable, interactive interval timers" single ((:commit . "84c0f14e2fcbaa36dfbf2986d44e672d028fa2e6") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/hammy.el"))])
- (handle . [(20191029 856) ((emacs (25 1)) (parent-mode (2 3))) "A handle for major-mode generic functions." single ((:commit . "e27b2d0b229923f81a2c8afa3e9c65ae9e84a0da") (:authors ("Uros Perisic")) (:maintainers ("Uros Perisic")) (:maintainer "Uros Perisic") (:keywords "convenience") (:url . "https://gitlab.com/jjzmajic/handle"))])
- (handlebars-mode . [(20150211 1749) nil "A major mode for editing Handlebars files." single ((:commit . "81f6b73fea8f397807781a1b51568397af21a6ef") (:authors ("Tony Gentilcore") ("Chris Wanstrath") ("Daniel Hackney") ("Daniel Evans")) (:maintainers ("Tony Gentilcore")) (:maintainer "Tony Gentilcore"))])
- (handlebars-sgml-mode . [(20130623 2333) nil "Add Handlebars contextual indenting support to sgml-mode" single ((:commit . "005282c33dfb6dbd2cfd46a4147d261504e8323c") (:authors ("Geoff Jacobsen" . "geoffjacobsen@gmail.com")) (:maintainers ("Geoff Jacobsen" . "geoffjacobsen@gmail.com")) (:maintainer "Geoff Jacobsen" . "geoffjacobsen@gmail.com") (:url . "http://github.com/jacott/handlebars-sgml-mode"))])
- (handoff . [(20150917 600) nil "Get your hand off that mouse, damn it!" single ((:commit . "75dc7a7e352f38679f65d0ca80ad158798e168bd") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/handoff.el"))])
- (hardcore-mode . [(20151114 701) nil "Disable arrow keys + optionally backspace and return" single ((:commit . "b1dda19692b4a7a58a689e81784a9b35be39e70d") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))])
- (hardhat . [(20210515 1422) ((emacs (24 3)) (ignoramus (0 7 0))) "Protect against clobbering user-writable files" single ((:commit . "908cb130be3d56921a3687a00b974ba5eef3a11f") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "convenience") (:url . "http://github.com/rolandwalker/hardhat"))])
- (harpoon . [(20220604 50) ((emacs (27 2)) (f (0 20 0)) (hydra (0 14 0)) (project (0 8 1))) "Bookmarks on steroids" single ((:commit . "b08d4af6e4ab404c8a1031ff8cbfff49d5c8aec4") (:authors ("Otávio Schwanck" . "otavioschwanck@gmail.com")) (:maintainers ("Otávio Schwanck" . "otavioschwanck@gmail.com")) (:maintainer "Otávio Schwanck" . "otavioschwanck@gmail.com") (:keywords "tools" "languages") (:url . "https://github.com/otavioschwanck/harpoon.el"))])
- (harvest . [(20170822 1746) ((swiper (0 7 0)) (hydra (0 13 0)) (s (1 11 0))) "Harvest integration" single ((:commit . "7acbc0564b250521b67131ee2a0a92720239454f") (:authors ("Kosta Harlan" . "kosta@kostaharlan.net")) (:maintainers ("Kosta Harlan" . "kosta@kostaharlan.net")) (:maintainer "Kosta Harlan" . "kosta@kostaharlan.net") (:keywords "harvest") (:url . "https://github.com/kostajh/harvest.el"))])
- (haskell-emacs . [(20160904 2026) nil "Write emacs extensions in haskell" tar ((:commit . "a2c6a079175904689eed7c6c200754bfa85d1ed9") (:authors ("Florian Knupfer")) (:maintainers ("Florian Knupfer")) (:maintainer "Florian Knupfer") (:keywords "haskell" "emacs" "ffi") (:url . "https://github.com/knupfer/haskell-emacs"))])
- (haskell-emacs-base . [(20160904 2026) ((haskell-emacs (2 4 0))) "Haskell functions from Prelude" tar ((:commit . "a2c6a079175904689eed7c6c200754bfa85d1ed9") (:authors ("Florian Knupfer")) (:maintainers ("Florian Knupfer")) (:maintainer "Florian Knupfer") (:keywords "haskell" "emacs" "ffi") (:url . "https://github.com/knupfer/haskell-emacs/modules/base"))])
- (haskell-emacs-text . [(20160904 2026) ((haskell-emacs (2 4 0))) "Haskell functions from Data.Text" tar ((:commit . "a2c6a079175904689eed7c6c200754bfa85d1ed9") (:authors ("Florian Knupfer")) (:maintainers ("Florian Knupfer")) (:maintainer "Florian Knupfer") (:keywords "haskell" "emacs" "ffi") (:url . "https://github.com/knupfer/haskell-emacs/modules/text"))])
- (haskell-mode . [(20230304 921) ((emacs (25 1))) "A Haskell editing mode" tar ((:commit . "20d4e2300302a9af673e82d0185d3f489bfb0f59") (:authors ("1992 Simon Marlow") ("1997-1998 Graeme E Moss" . "gem@cs.york.ac.uk") ("Tommy Thorn" . "thorn@irisa.fr") ("2001-2002 Reuben Thomas (>=v1.4)") ("2003 Dave Love" . "fx@gnu.org") ("2016 Arthur Fayzrakhmanov")) (:maintainer "1992 Simon Marlow") (:keywords "faces" "files" "haskell") (:url . "https://github.com/haskell/haskell-mode"))])
- (haskell-snippets . [(20210228 344) ((cl-lib (0 5)) (yasnippet (0 8 0))) "Yasnippets for Haskell" tar ((:commit . "1c29c4a68ce89848b8d371c6510d1de3b586c8b3") (:authors ("Luke Hoersten" . "luke@hoersten.org")) (:maintainers ("Luke Hoersten" . "luke@hoersten.org")) (:maintainer "Luke Hoersten" . "luke@hoersten.org") (:keywords "snippets" "haskell") (:url . "https://github.com/haskell/haskell-snippets"))])
- (haskell-tab-indent . [(20200514 1424) nil "tab-based indentation for haskell-mode" single ((:commit . "1127f46eca40a48be9cd2380df2cfc5f0b694e63") (:authors ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainers ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name") (:keywords "indentation" "haskell") (:url . "https://spwhitton.name/tech/code/haskell-tab-indent/"))])
- (hasklig-mode . [(20211017 1730) ((emacs (25))) "Hasklig ligatures" single ((:commit . "4b73d61f4ef1c73733f7201fbf0b49ba9e3395b6") (:authors ("Daniel Mendler")) (:maintainers ("Daniel Mendler")) (:maintainer "Daniel Mendler") (:url . "https://github.com/minad/hasklig-mode"))])
- (hass . [(20230116 2220) ((emacs (25 1)) (request (0 3 3)) (websocket (1 13))) "Interact with Home Assistant" tar ((:commit . "033d11b07e0f8bb68b348a12d5ae13fabea56c73") (:authors ("Ben Whitley")) (:maintainers ("Ben Whitley")) (:maintainer "Ben Whitley") (:url . "https://github.com/purplg/hass"))])
- (haste . [(20141030 2034) ((json (1 2))) "Emacs client for hastebin (http://hastebin.com/about.md)" single ((:commit . "f1099c6296fc9575675e281402b89854739114bb") (:authors ("Ric Lister")) (:maintainers ("Ric Lister")) (:maintainer "Ric Lister") (:url . "http://github.com/rlister/emacs-haste-client"))])
- (haxe-imports . [(20170330 2304) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 1))) "Code for dealing with Haxe imports" single ((:commit . "a4ab31759bd237e78c055dda73e808a4ee1b5fde") (:authors ("Juan Karlo Licudine" . "karlo@accidentalrebel.com")) (:maintainers ("Juan Karlo Licudine" . "karlo@accidentalrebel.com")) (:maintainer "Juan Karlo Licudine" . "karlo@accidentalrebel.com") (:keywords "haxe") (:url . "http://www.github.com/accidentalrebel/emacs-haxe-imports"))])
- (haxe-mode . [(20220930 251) nil "Major mode for editing Haxe files" single ((:commit . "4d51bd4bf75aef53d1671e22ce6555e4daf883db") (:authors ("Jens Peter Secher (original)")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com") (:url . "https://github.com/emacsorphanage/haxe-mode"))])
- (haxor-mode . [(20160618 1129) ((emacs (24 0))) "Major mode for editing Haxor Assembly Files" single ((:commit . "6fa25a8e6b6a59481bc0354c2fe1e0ed53cbdc91") (:authors ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainers ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainer "Krzysztof Magosa" . "krzysztof@magosa.pl") (:keywords "haxor") (:url . "https://github.com/krzysztof-magosa/haxor-mode"))])
- (hayoo . [(20140831 1221) ((emacs (24)) (json (1 3))) "Query hayoo and show results in a tabulated buffer." single ((:commit . "3ca2fb0c4d5f337d0410c21b2702dd147014e984") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainers ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com") (:keywords "hayoo" "haskell") (:url . "https://github.com/benma/hayoo.el/"))])
- (hc-zenburn-theme . [(20150928 1633) nil "An higher contrast version of the Zenburn theme." single ((:commit . "fd0024a5191cdce204d91c8f1db99ba31640f6e9") (:authors ("Nantas Nardelli" . "nantas.nardelli@gmail.com")) (:maintainers ("Nantas Nardelli" . "nantas.nardelli@gmail.com")) (:maintainer "Nantas Nardelli" . "nantas.nardelli@gmail.com") (:url . "https:github.com/edran/hc-zenburn-emacs"))])
- (hcl-mode . [(20230302 1029) ((emacs (24 3))) "Major mode for Hashicorp" single ((:commit . "35784854efd29fa8c9fe827654d747a2ace5cb19") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/emacs-hcl-mode"))])
- (headlong . [(20150417 1526) nil "reckless completion" single ((:commit . "f6830f87f236eee88263cb6976125f72422abe72") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "completion") (:url . "https://github.com/abo-abo/headlong"))])
- (heaven-and-hell . [(20190713 1830) ((emacs (24 4))) "easy toggle light/dark themes" single ((:commit . "e1febfd60d060c110a1e43c5f093cd8537251308") (:authors ("Valentin Ignatev" . "valentignatev@gmail.com")) (:maintainers ("Valentin Ignatev" . "valentignatev@gmail.com")) (:maintainer "Valentin Ignatev" . "valentignatev@gmail.com") (:keywords "faces") (:url . "https://github.com/valignatev/heaven-and-hell"))])
- (heex-ts-mode . [(20230316 553) ((emacs (29))) "Major mode for Heex with tree-sitter support" single ((:commit . "a61a4b6f158c19c1d583722bc35d95b09152551e") (:authors ("Wilhelm H Kirschbaum")) (:maintainers ("Wilhelm H Kirschbaum")) (:maintainer "Wilhelm H Kirschbaum") (:keywords "heex" "languages" "tree-sitter") (:url . "https://github.com/wkirschbaum/elixir-ts-mode"))])
- (helm . [(20230501 1445) ((helm-core (3 9 0)) (popup (0 5 3))) "Helm is an Emacs incremental and narrowing framework" tar ((:commit . "3c2c20a17dd343bfa20567cf0b764e56777f9fab") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:url . "https://emacs-helm.github.io/helm/"))])
- (helm-R . [(20120820 14) ((helm (20120517)) (ess (20120509))) "helm-sources and some utilities for GNU R." single ((:commit . "b0eb9d5f6a483a9dbe6eb6cf1f2024d4f5938bc2") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience") (:url . "https://github.com/myuhe/helm-R.el"))])
- (helm-ack . [(20141030 1226) ((helm (1 0)) (cl-lib (0 5))) "Ack command with helm interface" single ((:commit . "5982f3cb6ec9f460ebbe06ec0ce7b3590bca3118") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-ack"))])
- (helm-ad . [(20151209 1015) ((dash (2 8 0)) (helm (1 6 2))) "helm source for Active Directory" single ((:commit . "8ac044705d8620ee354a9cfa8cc1b865e83c0d55") (:authors ("Takahiro Noda" . "takahiro.noda+github@gmail.com")) (:maintainers ("Takahiro Noda" . "takahiro.noda+github@gmail.com")) (:maintainer "Takahiro Noda" . "takahiro.noda+github@gmail.com") (:keywords "comm"))])
- (helm-ag . [(20221017 1528) ((emacs (25 1)) (helm (2 0))) "The silver searcher with helm interface" single ((:commit . "2f5e41ae979394208989c25f4cdc73a0532fede9") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-ag"))])
- (helm-apt . [(20210324 1929) ((helm (3 6)) (emacs (25 1))) "Helm interface for Debian/Ubuntu packages (apt-*)" single ((:commit . "c952b5dc26015bc9c947973df99246212d276b63") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/emacs-helm/helm-apt"))])
- (helm-atoms . [(20201013 1723) ((emacs (25 1)) (helm (2 0))) "Reverse variable lookup using Helm" single ((:commit . "7e6f91a16f556c96ae1b0d1f965ea56861bb6372") (:authors ("Dante Catalfamo")) (:maintainers ("Dante Catalfamo")) (:maintainer "Dante Catalfamo") (:keywords "help" "lisp" "maint" "helm" "tools" "matching") (:url . "https://github.com/dantecatalfamo/helm-atoms"))])
- (helm-aws . [(20180514 1032) ((helm (1 5 3)) (cl-lib (0 5)) (s (1 9 0))) "Manage AWS EC2 server instances directly from Emacs" single ((:commit . "b36c744b3f00f458635a91d1f5158fccbb5baef6") (:authors ("istib")) (:maintainers ("istib")) (:maintainer "istib") (:url . "https://github.com/istib/helm-aws"))])
- (helm-backup . [(20180911 614) ((helm (1 5 5)) (s (1 8 0)) (cl-lib (0))) "Backup each file change using git" single ((:commit . "691fe542f38fc7c8cca409997f6a0ff5d76ad6c2") (:authors ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainers ("Anthony HAMON" . "hamon.anth@gmail.com")) (:maintainer "Anthony HAMON" . "hamon.anth@gmail.com") (:keywords "backup" "convenience" "files" "tools" "vc") (:url . "http://github.com/antham/helm-backup"))])
- (helm-bbdb . [(20190728 1325) ((emacs (24 3)) (helm (1 5)) (bbdb (3 1 2))) "Helm interface for bbdb" single ((:commit . "db69114ff1af8bf48b5a222242e3a8dd6e101e67") (:url . "https://github.com/emacs-helm/helm-bbdb"))])
- (helm-bibtex . [(20221114 1204) ((bibtex-completion (1 0 0)) (helm (1 5 5)) (cl-lib (0 5)) (emacs (24 1))) "A bibliography manager based on Helm" single ((:commit . "8ebf50d5bd368082d0b7ab79d26a52f372cdef98") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/tmalsburg/helm-bibtex"))])
- (helm-bibtexkey . [(20140214 1504) ((helm (1 5 8))) "Bibtexkey source for helm" tar ((:commit . "aa1637ea5c8c5f1817e480fc2a3750cafab3d99f") (:authors ("TAKAGI Kentaro <kentaro0910_at_gmail.com>")) (:maintainers ("TAKAGI Kentaro <kentaro0910_at_gmail.com>")) (:maintainer "TAKAGI Kentaro <kentaro0910_at_gmail.com>") (:keywords "bib" "tex") (:url . "https://github.com/kenbeese/helm-bibtexkey"))])
- (helm-bind-key . [(20141109 515) ((bind-key (1 0)) (helm (1 6 4))) "helm-source for for bind-key." single ((:commit . "9da6ad8b7530e72fb4ac67be8c6a482898dddc25") (:authors ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience" "emulation"))])
- (helm-bitbucket . [(20220722 1538) ((emacs (24)) (helm-core (3 6 0))) "Search Bitbucket with Helm" single ((:commit . "9d07a274584ad364a2620c6389f86d90502f2640") (:authors ("Peter Urbak" . "tolowercase@gmail.com")) (:maintainers ("Peter Urbak" . "tolowercase@gmail.com")) (:maintainer "Peter Urbak" . "tolowercase@gmail.com") (:keywords "matching") (:url . "https://github.com/dragonwasrobot/helm-bitbucket"))])
- (helm-bm . [(20160321 1331) ((bm (1 0)) (cl-lib (0 5)) (helm (1 9 3)) (s (1 11 0))) "helm sources for bm.el" single ((:commit . "d66341f5646c23178d4d8bffb6cfebe3fb73f1d7") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "helm" "bookmark") (:url . "https://github.com/yasuyk/helm-bm"))])
- (helm-books . [(20170325 631) ((helm (1 7 7))) "Helm interface for searching books" single ((:commit . "6735e1787f99b5ef77b276fa5c43e565b4d3e792") (:authors ("grugrut" . "grugruglut+github@gmail.com")) (:maintainers ("grugrut" . "grugruglut+github@gmail.com")) (:maintainer "grugrut" . "grugruglut+github@gmail.com") (:url . "https://github.com/grugrut/helm-books"))])
- (helm-bufler . [(20210708 2217) ((emacs (26 3)) (bufler (0 2 -1)) (helm (1 9 4))) "Helm source for Bufler" single ((:commit . "cb10234bc35fb3f2489c8bfd5b4e80fd1dc05c5e") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/bufler.el"))])
- (helm-bundle-show . [(20190526 1401) ((emacs (24)) (helm (1 8 0))) "Bundle show with helm interface" single ((:commit . "70f1ca7d1847c7d5cd5a3e488562cd4a295b809f") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com") (:url . "https://github.com/masutaka/emacs-helm-bundle-show"))])
- (helm-c-moccur . [(20151230 924) ((helm (20120811)) (color-moccur (2 71))) "helm source for color-moccur.el" single ((:commit . "b0a906f85fa352db091f88b91a9c510de607dfe9") (:authors ("Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com")) (:maintainers ("Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com")) (:maintainer "Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com") (:keywords "convenience" "emulation"))])
- (helm-c-yasnippet . [(20210330 16) ((emacs (25 1)) (helm (1 7 7)) (yasnippet (0 8 0))) "helm source for yasnippet.el" single ((:commit . "e214eec8b2875d8a7cd09006dfb6a8e15e9e4079") (:authors ("Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com")) (:maintainers ("Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com")) (:maintainer "Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com") (:keywords "convenience" "emulation"))])
- (helm-catkin . [(20190425 1520) ((emacs (24 3)) (helm (0)) (xterm-color (0))) "Package for compile ROS workspaces with catkin-tools" single ((:commit . "a3422346eb46e66a947a75f9e1b9975a672036be") (:authors ("Thore Goll" . "thoregoll@googlemail.com")) (:maintainers ("Thore Goll" . "thoregoll@googlemail.com")) (:maintainer "Thore Goll" . "thoregoll@googlemail.com") (:keywords "catkin" "helm" "build" "tools" "ros") (:url . "https://github.com/gollth/helm-catkin"))])
- (helm-charinfo . [(20170810 1231) ((emacs (24)) (helm (1 7 0)) (cl-lib (0 5))) "A helm source for character information" single ((:commit . "91798a49dc115342a7e01e48b264e9a0bf5ea414") (:authors ("Christian Wittern" . "cwittern@gmail.com")) (:maintainers ("Christian Wittern" . "cwittern@gmail.com")) (:maintainer "Christian Wittern" . "cwittern@gmail.com") (:keywords "convenience") (:url . "https://github.com/cwittern/helm-charinfo"))])
- (helm-chrome . [(20160719 520) ((helm (1 5)) (cl-lib (0 3)) (emacs (24))) "Helm interface for Chrome bookmarks" single ((:commit . "fd630ace4b4b4f33355a973743bbfe0c90ce4830") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "tools") (:url . "https://github.com/kawabata/helm-chrome"))])
- (helm-chrome-control . [(20190707 1807) ((emacs (25 1)) (helm-core (3 0))) "Control Chrome tabs with Helm (macOS only)" tar ((:commit . "85c1473ef9baa43b6babe3a785a2742271069244") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:url . "https://github.com/xuchunyang/helm-chrome-control"))])
- (helm-chrome-history . [(20191031 1233) ((emacs (25 1)) (helm-core (3 0))) "Browse Chrome History with Helm" single ((:commit . "f9002d4c12df65a99830376b126dbbeae3ef2148") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "tools") (:url . "https://github.com/xuchunyang/helm-chrome-history"))])
- (helm-chronos . [(20150528 2036) ((chronos (1 2)) (helm (1 7 1))) "helm interface for chronos timers" tar ((:commit . "a14fc3d65dd96ce6616234b3f7b8b08b4c1817ef") (:authors ("David Knight" . "dxknight@opmbx.org")) (:maintainers ("David Knight" . "dxknight@opmbx.org")) (:maintainer "David Knight" . "dxknight@opmbx.org") (:keywords "calendar") (:url . "http://github.com/dxknight/helm-chronos"))])
- (helm-cider . [(20220706 944) ((emacs (26)) (cider (1 0)) (helm-core (3 7 0))) "Helm interface to CIDER" tar ((:commit . "fe7e48befdb0b20ea1b0fb3626a8a725e54ae626") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com") (:keywords "cider" "clojure" "helm" "languages") (:url . "https://github.com/clojure-emacs/helm-cider"))])
- (helm-cider-history . [(20150719 2120) ((helm (1 4 0)) (cider (0 9 0))) "Helm interface for cider history" single ((:commit . "c391fcb2e162a02001605a0b9449783575a831fd") (:authors ("Andreas Klein" . "git@kungi.org")) (:maintainers ("Andreas Klein" . "git@kungi.org")) (:maintainer "Andreas Klein" . "git@kungi.org") (:keywords "convenience") (:url . "https://github.com/Kungi/helm-cider-history"))])
- (helm-circe . [(20160207 652) ((emacs (24)) (helm (0 0)) (circe (0 0)) (cl-lib (0 5))) "helm circe buffer management." single ((:commit . "9091651d9fdd8d49d8ff6f9dcf3a2ae416c9f15a") (:authors ("Les Harris" . "les@lesharris.com")) (:maintainers ("Les Harris" . "les@lesharris.com")) (:maintainer "Les Harris" . "les@lesharris.com") (:keywords "helm" "circe") (:url . "https://github.com/lesharris/helm-circe"))])
- (helm-clojuredocs . [(20160405 723) ((edn (1 1 2)) (helm (1 5 7))) "search for help in clojuredocs.org" single ((:commit . "5a7f0f2cb401be0b09e73262a1c18265ab9a3cea") (:authors ("Michal Buczko" . "michal.buczko@gmail.com")) (:maintainers ("Michal Buczko" . "michal.buczko@gmail.com")) (:maintainer "Michal Buczko" . "michal.buczko@gmail.com") (:keywords "helm" "clojure") (:url . "https://github.com/mbuczko/helm-clojuredocs"))])
- (helm-codesearch . [(20221219 1219) ((emacs (25 1)) (s (1 11 0)) (dash (2 12 0)) (helm (1 7 7)) (cl-lib (0 5))) "helm interface for codesearch" single ((:commit . "bd5a7e3ece98f2940cb09be56d3e56da97d4c865") (:authors ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainers ("Youngjoo Lee" . "youngker@gmail.com")) (:maintainer "Youngjoo Lee" . "youngker@gmail.com") (:keywords "tools"))])
- (helm-commandlinefu . [(20150611 545) ((emacs (24 1)) (helm (1 7 0)) (json (1 3)) (let-alist (1 0 3))) "Search and browse commandlinefu.com from helm" single ((:commit . "9ee7e018c5db23ae9c8d1c8fa969876f15b7280d") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "commandlinefu.com") (:url . "https://github.com/xuchunyang/helm-commandlinefu"))])
- (helm-company . [(20190812 1429) ((helm (1 5 9)) (company (0 6 13))) "Helm interface for company-mode" single ((:commit . "6eb5c2d730a60e394e005b47c1db018697094dde") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Daniel Ralston" . "Sodel-the-Vociferous@users.noreply.github.com")) (:maintainer "Daniel Ralston" . "Sodel-the-Vociferous@users.noreply.github.com") (:url . "https://github.com/Sodel-the-Vociferous/helm-company"))])
- (helm-core . [(20230505 802) ((emacs (25 1)) (async (1 9 7))) "Development files for Helm" tar ((:commit . "be98c8ea014ae8c6e8b66c2b61fb4267aa2b252c") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:url . "https://emacs-helm.github.io/helm/"))])
- (helm-cscope . [(20190615 41) ((xcscope (1 0)) (helm (1 6 7)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface for xcscope.el." single ((:commit . "af1d9e7f4460a88d7400b5a74d5da68084089ac1") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainers ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com") (:keywords "cscope" "helm") (:url . "https://github.com/alpha22jp/helm-cscope.el"))])
- (helm-css-scss . [(20191230 1549) ((emacs (24 3)) (helm (1 0))) "CSS/SCSS/LESS Selectors with helm interface" single ((:commit . "48b996f73af1fef8d6e88a1c545d98f8c50b0cf3") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainers ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:keywords "convenience" "scss" "css" "less" "selector" "helm") (:url . "https://github.com/ShingoFukuyama/helm-css-scss"))])
- (helm-ctest . [(20220721 400) ((s (1 9 0)) (dash (2 11 0)) (helm-core (3 6 0))) "Run ctest from within emacs" single ((:commit . "48edc9fa862219da34feb423c06c33d8f6d43722") (:authors ("Dan LaManna" . "me@danlamanna.com")) (:maintainers ("Dan LaManna" . "me@danlamanna.com")) (:maintainer "Dan LaManna" . "me@danlamanna.com") (:keywords "helm" "ctest"))])
- (helm-dash . [(20190527 1118) ((emacs (24 4)) (dash-docs (1 4 0)) (helm (1 9 2)) (cl-lib (0 5))) "Offline documentation browser for +150 APIs using Dash docsets." single ((:commit . "6c76c794fec95586028633f24773451812af5df4") (:authors ("Raimon Grau" . "raimonster@gmail.com") ("Toni Reina " . "areina0@gmail.com") ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainers ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:keywords "docs") (:url . "https://github.com/dash-docs-el/helm-dash"))])
- (helm-descbinds . [(20190501 935) ((helm (1 5))) "A convenient `describe-bindings' with `helm'" single ((:commit . "b72515982396b6e336ad7beb6767e95a80fca192") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com") (:keywords "helm" "help") (:url . "https://github.com/emacs-helm/helm-descbinds"))])
- (helm-describe-modes . [(20160212 518) ((helm (1 9)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface to major and minor modes." single ((:commit . "d2253c7c2bf4f28b9ff8a2d281bd7527c0106527") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com") (:keywords "docs" "convenience") (:url . "https://github.com/emacs-helm/helm-describe-modes"))])
- (helm-dictionary . [(20220514 714) ((helm (1 5 5))) "Helm source for looking up dictionaries" single ((:commit . "65fdf36e9a5c6dd8dffa71dfb6c65bc03879abe2") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de") ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/emacs-helm/helm-dictionary"))])
- (helm-directory . [(20170709 1103) ((emacs (24 4)) (helm (2 0))) "selecting directory before select the file" single ((:commit . "2c6d45404506ba744888dcdb65e9f63878f2da16") (:authors ("Masashı Mıyaura")) (:maintainers ("Masashı Mıyaura")) (:maintainer "Masashı Mıyaura") (:url . "https://github.com/masasam/emacs-helm-directory"))])
- (helm-dired-history . [(20170524 1046) ((helm (1 9 8)) (cl-lib (0 5))) "Show dired history with helm.el support." single ((:commit . "281523f9fc46cf00fafd670ba5cd16552a607212") (:authors ("Joseph(纪秀峰)" . "jixiuf@gmail.com")) (:maintainers ("Joseph(纪秀峰)" . "jixiuf@gmail.com")) (:maintainer "Joseph(纪秀峰)" . "jixiuf@gmail.com") (:keywords "helm" "dired history") (:url . "https://github.com/jixiuf/helm-dired-history"))])
- (helm-dired-recent-dirs . [(20131228 1414) ((helm (1 0))) "Show recent dirs with helm.el support." single ((:commit . "3bcd125b44f5a707588ae3868777d91192351523") (:authors ("Akisute" . "akisute3@gmail.com")) (:maintainers ("Akisute" . "akisute3@gmail.com")) (:maintainer "Akisute" . "akisute3@gmail.com") (:keywords "helm" "dired" "zsh"))])
- (helm-dogears . [(20210822 2106) ((emacs (26 3)) (dogears (0 1 -1)) (helm (3 6))) "Helm source for Dogears" single ((:commit . "a6bc2d578dfd1641d8c99bf7bf17dc5842ba688f") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/dogears.el"))])
- (helm-emmet . [(20160713 1231) ((helm (1 0)) (emmet-mode (1 0 2))) "helm sources for emmet-mode's snippets" single ((:commit . "f0364e736b10cf44232053a78de04133a88185ae") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "convenience" "helm" "emmet") (:url . "https://github.com/yasuyk/helm-emmet"))])
- (helm-emms . [(20220314 1633) ((helm (1 5)) (emms (6 0)) (cl-lib (0 5)) (emacs (24 1))) "Emms for Helm." single ((:commit . "aefa44ab77808626c4951be2df49a2eab7820805") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:keywords "multimedia" "emms") (:url . "https://github.com/emacs-helm/helm-emms"))])
- (helm-esa . [(20190721 1429) ((emacs (26 2)) (helm (3 2)) (request (0 3 0))) "Esa with helm interface" single ((:commit . "d93b4af404346870cb2cf9c257d055332ef3f577") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com") (:url . "https://github.com/masutaka/emacs-helm-esa"))])
- (helm-etags-plus . [(20201003 1424) ((helm (1 7 8))) "Another Etags helm.el interface" single ((:commit . "52598fe69636add4b62cd9873041de5c6db9b7ac") (:authors ("纪秀峰(Joseph)" . "jixiuf@gmail.com")) (:maintainers ("纪秀峰(Joseph)" . "jixiuf@gmail.com")) (:maintainer "纪秀峰(Joseph)" . "jixiuf@gmail.com") (:keywords "helm" "etags") (:url . "https://github.com/jixiuf/helm-etags-plus"))])
- (helm-evil-markers . [(20200506 715) ((emacs (25 1)) (helm (2 0 0)) (evil (1 2 10))) "Show evil markers with helm" single ((:commit . "0245f0c268e0eaec85df51ab2deba7ac961f6770") (:authors ("Bill Xue")) (:maintainers ("Bill Xue")) (:maintainer "Bill Xue") (:keywords "extensions") (:url . "https://github.com/xueeinstein/helm-evil-markers"))])
- (helm-eww . [(20190315 907) ((emacs (24 4)) (helm (2 8 6)) (seq (1 8))) "Helm UI wrapper for EWW." single ((:commit . "76ba59fda8dd6f32a1bc7c6df0b43c6f76169911") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:keywords "helm" "packages") (:url . "https://github.com/emacs-helm/helm-eww"))])
- (helm-ext . [(20200722 107) ((emacs (24 4)) (helm (2 5 3))) "A few extensions to Helm" tar ((:commit . "c30f7772ec577a5ce1de3215f0507826e0725a69") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (helm-exwm . [(20210215 858) ((emacs (25 2)) (helm (2 8 5)) (exwm (0 15))) "Helm for EXWM buffers" single ((:commit . "5b35a42ff10fbcbf673268987df700ea6b6288e8") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:keywords "helm" "exwm") (:url . "https://github.com/emacs-helm/helm-exwm"))])
- (helm-file-preview . [(20220720 531) ((emacs (25 1)) (helm (2 0))) "Preview the current helm file selection" single ((:commit . "bebd4e9c42543c9003984442701db2c384c21f3e") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "file" "helm" "preview" "select" "selection") (:url . "https://github.com/jcs-elpa/helm-file-preview"))])
- (helm-filesets . [(20140929 1835) ((helm (1 6 3)) (filesets+ (0))) "A helm source for emacs filesets" single ((:commit . "b352910af4c3099267a8aa0169c7f743b35bb1fa") (:authors ("Graham Clark" . "grclark@gmail.com")) (:maintainers ("Graham Clark" . "grclark@gmail.com")) (:maintainer "Graham Clark" . "grclark@gmail.com") (:keywords "filesets") (:url . "https://github.com/gcla/helm-filesets"))])
- (helm-firefox . [(20220420 1346) ((helm (1 5)) (cl-lib (0 5)) (emacs (24 1))) "Firefox bookmarks" single ((:commit . "571cf8dfcbe43d91f9890eebefc88d7572c62e75") (:url . "https://github.com/emacs-helm/helm-firefox"))])
- (helm-fish-completion . [(20200908 1504) ((emacs (25)) (helm (3)) (fish-completion (1 2))) "Helm interface for fish completion" single ((:commit . "2a2001b3a876da3c468ffec8935572509c485aac") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:url . "https://github.com/emacs-helm/helm-fish-completion"))])
- (helm-flx . [(20221020 1739) ((emacs (24 4)) (helm (1 7 9)) (flx (0 5))) "Sort helm candidates by flx score" single ((:commit . "5220099e695a3586dba2d59640217fe378e66310") (:authors ("Jonathan Hayase" . "jonathan.hayase@gmail.com")) (:maintainers ("Jonathan Hayase" . "jonathan.hayase@gmail.com")) (:maintainer "Jonathan Hayase" . "jonathan.hayase@gmail.com") (:keywords "convenience" "helm" "fuzzy" "flx") (:url . "https://github.com/PythonNut/helm-flx"))])
- (helm-flycheck . [(20160710 829) ((dash (2 12 1)) (flycheck (28)) (helm-core (1 9 8))) "Show flycheck errors with helm" single ((:commit . "a15e62a6432c165c4f2c17388686873383400d7d") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "helm" "flycheck") (:url . "https://github.com/yasuyk/helm-flycheck"))])
- (helm-flymake . [(20160610 2) ((helm (1 0))) "helm interface for flymake" single ((:commit . "72cf18a1a1f843db9bb5d58301739ea9ccb1655b") (:authors ("Akira Tamamori" . "tamamori5917@gmail.com")) (:maintainers ("Akira Tamamori" . "tamamori5917@gmail.com")) (:maintainer "Akira Tamamori" . "tamamori5917@gmail.com") (:url . "https://github.com/tam17aki"))])
- (helm-flyspell . [(20170210 1901) ((helm (1 6 5))) "Helm extension for correcting words with flyspell" single ((:commit . "8d4d947c687cb650cb149aa2271ad5201ea92594") (:authors ("Andrzej Pronobis")) (:maintainers ("Andrzej Pronobis")) (:maintainer "Andrzej Pronobis") (:keywords "convenience") (:url . "https://github.com/pronobis/helm-flyspell"))])
- (helm-frame . [(20220803 1528) ((emacs (24 4))) "open helm buffers in a dedicated frame" single ((:commit . "1b5e895e9199deeea049010e5fe4de7a338f41f3") (:authors ("chee" . "yay@chee.party")) (:maintainers ("chee" . "yay@chee.party")) (:maintainer "chee" . "yay@chee.party") (:keywords "lisp" "helm" "popup" "frame"))])
- (helm-fuz . [(20200812 1222) ((emacs (25 1)) (fuz (1 4 0)) (helm (3 6))) "Integrate Helm and Fuz" single ((:commit . "fee874aa35d2ee6b12b836290b5c8eaa44175a28") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Zhu Zihao" . "all_but_last@163.com")) (:maintainer "Zhu Zihao" . "all_but_last@163.com") (:keywords "convenience") (:url . "https://github.com/cireu/fuz.el"))])
- (helm-fuzzier . [(20160605 2145) ((emacs (24 3)) (helm (1 7 0))) "Better fuzzy matching for Helm" single ((:commit . "8798dcf3583b863df5b9dea7fe3b0179ba1c35bc") (:authors ("Ephram Perdition")) (:maintainers ("Ephram Perdition")) (:maintainer "Ephram Perdition") (:keywords "convenience" "helm" "fuzzy") (:url . "http://github.com/EphramPerdition/helm-fuzzier"))])
- (helm-fuzzy . [(20220704 651) ((emacs (24 4)) (helm (1 7 9)) (flx (0 5))) "Fuzzy matching for helm source" single ((:commit . "f04b0023534e41c1399b74de393e6915a5f95ba5") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "matching" "fuzzy" "helm" "source") (:url . "https://github.com/jcs-elpa/helm-fuzzy"))])
- (helm-fuzzy-find . [(20171106 400) ((emacs (24 1)) (helm (1 7 0))) "Find file using Fuzzy Search" single ((:commit . "de2abbf7ca13609587325bacd4a1ed4376b5c927") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "helm" "fuzzy" "find" "file") (:url . "https://github.com/xuchunyang/helm-fuzzy-find"))])
- (helm-ghq . [(20210724 744) ((emacs (24)) (helm (3 8 0))) "Ghq with helm interface" single ((:commit . "7b47ac91e42762f2ecbbceeaadc05b86c9fe5f14") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com") (:url . "https://github.com/masutaka/emacs-helm-ghq"))])
- (helm-ghs . [(20170715 541) ((emacs (24)) (helm (2 2 0))) "ghs with helm interface" single ((:commit . "f9d4ab80e8a33b21cd635285289ec5779bbe629f") (:authors ("iory" . "ab.ioryz@gmail.com")) (:maintainers ("iory" . "ab.ioryz@gmail.com")) (:maintainer "iory" . "ab.ioryz@gmail.com") (:url . "https://github.com/iory/emacs-helm-ghs"))])
- (helm-git . [(20120630 2103) nil "Helm extension for Git." single ((:commit . "5b4a6eb7a97b2583236a1f919b75249957918e29") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:keywords "helm" "git") (:url . "https://github.com/maio/helm-git"))])
- (helm-git-grep . [(20170614 1411) ((helm-core (2 2 0))) "helm for git grep, an incremental git-grep(1)" single ((:commit . "744cea07dba6e6a5effbdba83f1b786c78fd86d3") (:authors ("mechairoi")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:url . "https://github.com/yasuyk/helm-git-grep"))])
- (helm-github-stars . [(20190428 1047) ((helm (1 6 8)) (emacs (24 4))) "Helm interface for your github's stars" single ((:commit . "c891690218b0d8b957ea6cb45b1b6cffd15a6950") (:authors ("Sliim" . "sliim@mailoo.org") ("xuchunyang" . "xuchunyang56@gmail.com")) (:maintainers ("Sliim" . "sliim@mailoo.org")) (:maintainer "Sliim" . "sliim@mailoo.org") (:keywords "helm" "github" "stars") (:url . "https://github.com/Sliim/helm-github-stars"))])
- (helm-gitignore . [(20230310 1829) ((git-modes (1 4 0)) (helm (1 7 0)) (request (0 1 0)) (cl-lib (0 5))) "Generate .gitignore files with gitignore.io." single ((:commit . "85c34065e6fceac8fa7287e6ec79ea3d1182d654") (:authors ("Juan Placencia")) (:maintainers ("Juan Placencia")) (:maintainer "Juan Placencia") (:keywords "helm" "gitignore" "gitignore.io") (:url . "https://github.com/jupl/helm-gitignore"))])
- (helm-gitlab . [(20180312 1647) ((s (1 9 0)) (dash (2 9 0)) (helm (1 0)) (gitlab (0 8 0))) "Helm interface to Gitlab" single ((:commit . "68318aca3206d50701039c9aae39734ca29a49f9") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "gitlab" "helm") (:url . "https://github.com/nlamirault/emacs-gitlab"))])
- (helm-go-package . [(20161103 153) ((emacs (24 4)) (helm-core (2 2 1)) (go-mode (1 4 0)) (deferred (0 4 0))) "helm sources for Go programming language's package" single ((:commit . "bf741f4a455fcb129c1a9dcec710a52621f9719d") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:url . "https://github.com/yasuyk/helm-go-package"))])
- (helm-google . [(20210527 900) ((helm (0))) "Emacs Helm Interface for quick Google searches" single ((:commit . "27834161391c350ef790062391cb7eab1d59fb62") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "helm" "google" "search" "browse" "searx") (:url . "https://framagit.org/steckerhalter/helm-google"))])
- (helm-grepint . [(20200811 1616) ((helm (2 9 7)) (emacs (24 4))) "Generic helm interface to grep" single ((:commit . "9aec98428823b749eb14d2c8512b46b59ca9f8ca") (:authors ("Kalle Kankare" . "kalle.kankare@iki.fi")) (:maintainers ("Kalle Kankare" . "kalle.kankare@iki.fi")) (:maintainer "Kalle Kankare" . "kalle.kankare@iki.fi") (:keywords "grep" "grepping" "searching" "helm" "tools" "convenience") (:url . "https://github.com/kopoli/helm-grepint"))])
- (helm-growthforecast . [(20140120 344) ((helm (1 5 9))) "helm extensions for growthforecast." single ((:commit . "0f94ac090d6c354058ad89a86e5c18385c136d9b") (:authors ("Daichi Hirata" . "daichi.hirat@gmail.com")) (:maintainers ("Daichi Hirata" . "daichi.hirat@gmail.com")) (:maintainer "Daichi Hirata" . "daichi.hirat@gmail.com") (:url . "https://github.com/daic-h/helm-growthforecast"))])
- (helm-gtags . [(20200602 1610) ((emacs (24 4)) (helm (2 0))) "GNU GLOBAL helm interface" single ((:commit . "a15fe1dd272d252ad933d8129db1dce02fd41adb") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-gtags"))])
- (helm-hatena-bookmark . [(20210724 732) ((emacs (24)) (helm (2 8 2))) "Hatena::Bookmark with helm interface" single ((:commit . "a6a2b37370ac84ca2cae5ef65b2b144a010b1584") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com") (:url . "https://github.com/masutaka/emacs-helm-hatena-bookmark"))])
- (helm-hayoo . [(20151014 651) ((helm (1 6 0)) (json (1 2)) (haskell-mode (13 7))) "Source and configured helm for searching hayoo" single ((:commit . "dd4c0c8c87521026edf1b808c4de01fa19b7c693") (:authors ("Markus Hauck" . "markus1189@gmail.com")) (:maintainers ("Markus Hauck" . "markus1189@gmail.com")) (:maintainer "Markus Hauck" . "markus1189@gmail.com") (:keywords "helm"))])
- (helm-helm-commands . [(20130902 1748) ((helm (1 5 4))) "List all helm commands with helm" single ((:commit . "1c37bb0d4cda6877162603cd1ddc9f596a7a5cb9") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "convenience") (:url . "https://github.com/vapniks/helm-helm-commands"))])
- (helm-hoogle . [(20161027 534) ((helm (1 6 2)) (emacs (24 4))) "Use helm to navigate query results from Hoogle" single ((:commit . "73969a9d46d2121a849a01a9f7ed3636d01f7bbc") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:keywords "haskell" "programming" "hoogle") (:url . "https://github.com/jwiegley/haskell-config"))])
- (helm-hunks . [(20171217 1933) ((emacs (24 4)) (helm (1 9 8))) "A helm interface for git hunks - browsing, staging, unstaging and killing" single ((:commit . "6392bf716f618eac23ce81140aceb0dfacb9c6d0") (:authors ("@torgeir")) (:maintainers ("@torgeir")) (:maintainer "@torgeir") (:keywords "helm" "git" "hunks" "vc"))])
- (helm-icons . [(20230506 432) ((emacs (25 1)) (dash (2 14 1)) (f (0 20 0)) (treemacs (2 7))) "Helm icons" single ((:commit . "dfefdb41c63217a1d6f57d4c8761b68f3def1a31") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "convenience") (:url . "https://github.com/yyoncho/helm-icons"))])
- (helm-idris . [(20141202 1757) ((helm (0 0 0)) (idris-mode (0 9 14))) "A Helm datasource for Idris documentation, queried from the compiler" single ((:commit . "a2f45d6817974f318b55ad9b7fd19d5df132d47e") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk") (:keywords "languages" "helm"))])
- (helm-img . [(20151224 2321) ((helm (1 7 7)) (cl-lib (0 5))) "Utilities for making image sources for helm." tar ((:commit . "aa3f8a5dce8d0413bf07584f07153a39015c2bfc") (:authors ("Sho Matsumoto <l3msh0_at_gmail.com>")) (:maintainers ("l3msh0")) (:maintainer "l3msh0") (:keywords "convenience") (:url . "https://github.com/l3msh0/helm-img"))])
- (helm-img-tiqav . [(20151224 2322) ((helm-img (0 0 1))) "An helm-source for joking." single ((:commit . "33a7e9508bc8f37d53320b56c92b53d321a57bb0") (:authors ("Sho Matsumoto <l3msh0_at_gmail.com>")) (:maintainers ("l3msh0")) (:maintainer "l3msh0") (:keywords "convenience") (:url . "https://github.com/l3msh0/helm-img"))])
- (helm-ispell . [(20151231 853) ((helm-core (1 7 7))) "ispell-complete-word with helm interface" single ((:commit . "cb735695ab3a0e66c123c2f3f3e8911fb1c2d5fc") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-ispell"))])
- (helm-itunes . [(20151013 648) ((helm (1 6 1))) "Play local iTunes and Spotify tracks" single ((:commit . "966de755a5aadbe02311a6cef77bd4790e84c263") (:authors ("Adam Schwartz" . "adam@adamschwartz.io")) (:maintainers ("Adam Schwartz" . "adam@adamschwartz.io")) (:maintainer "Adam Schwartz" . "adam@adamschwartz.io") (:url . "https://github.com/daschwa/helm-itunes"))])
- (helm-j-cheatsheet . [(20170217 829) ((helm (1 5 3))) "Quick J reference for Emacs" single ((:commit . "6c47e7162b9ba2de4b41221d01180146973d860b") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/helm-j-cheatsheet"))])
- (helm-jira . [(20180802 815) ((emacs (25)) (cl-lib (0 5)) (helm (1 9 9))) "Helm bindings for JIRA/Bitbucket/stash" single ((:commit . "75d6ed5bd7a041fa8c1adb21cbbbe57b5a7c7cc7") (:authors ("Roman Decker <roman dot decker at gmail dot com>")) (:maintainers ("Roman Decker <roman dot decker at gmail dot com>")) (:maintainer "Roman Decker <roman dot decker at gmail dot com>") (:keywords "tools" "helm" "jira" "bitbucket" "stash") (:url . "https://github.com/DeX3/helm-jira"))])
- (helm-js-codemod . [(20190921 942) ((emacs (24 4)) (helm-core (1 9 8)) (js-codemod (1 0 0))) "A helm interface for running js-codemods" single ((:commit . "1df8583fafadf8c8c5ceb2aecaa815a2a4152686") (:authors (nil . "Torgeir Thoresen <@torgeir>")) (:maintainers (nil . "Torgeir Thoresen <@torgeir>")) (:maintainer nil . "Torgeir Thoresen <@torgeir>") (:keywords "helm" "js" "codemod" "region"))])
- (helm-jstack . [(20150603 422) ((emacs (24)) (helm (1 7 0)) (cl-lib (0 5))) "Helm interface to Jps & Jstack for Java/JVM processes" single ((:commit . "aab0fd9f14794ae3a6e7cfbe7f6a81842ce4c23b") (:authors ("Raghav Kumar Gautam" . "rgautam@apache.com")) (:maintainers ("Raghav Kumar Gautam" . "rgautam@apache.com")) (:maintainer "Raghav Kumar Gautam" . "rgautam@apache.com") (:keywords "java" "jps" "jstack" "jvm" "emacs" "elisp" "helm"))])
- (helm-kythe . [(20170709 726) ((emacs (25)) (dash (2 12 0)) (helm (2 0))) "Google Kythe helm interface" single ((:commit . "eabbef4948f8ec7c7b2fac498e9145dfdb10ca82") (:authors ("Fangrui Song" . "i@maskray.me")) (:maintainers ("Fangrui Song" . "i@maskray.me")) (:maintainer "Fangrui Song" . "i@maskray.me") (:url . "https://github.com/MaskRay/emacs-helm-kythe"))])
- (helm-lastpass . [(20180722 806) ((emacs (25 1)) (helm (2 0)) (csv (2 1))) "Helm interface of LastPass" single ((:commit . "82e1ffb6ae77d9d9e29c398eb013cd20ce963f77") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/helm-lastpass"))])
- (helm-lean . [(20210305 1705) ((emacs (24 3)) (dash (2 18 0)) (helm (2 8 0)) (lean-mode (3 3 0))) "Helm interfaces for lean-mode" single ((:commit . "5c50338ac149ca5225fc737be291db1f63c45f1d") (:authors ("Leonardo de Moura" . "leonardo@microsoft.com") ("Soonho Kong " . "soonhok@cs.cmu.edu") ("Gabriel Ebner " . "gebner@gebner.org") ("Sebastian Ullrich" . "sebasti@nullri.ch")) (:maintainers ("Sebastian Ullrich" . "sebasti@nullri.ch")) (:maintainer "Sebastian Ullrich" . "sebasti@nullri.ch") (:keywords "languages") (:url . "https://github.com/leanprover/lean-mode"))])
- (helm-lib-babel . [(20180510 1324) ((cl-lib (0 5)) (helm (1 9 2)) (emacs (24 4))) "helm insertion of babel function references" single ((:commit . "41bc0cdea8a604c6c8dc83ed5066644d33688fad") (:authors ("Derek Feichtinger" . "dfeich@gmail.com")) (:maintainers ("Derek Feichtinger" . "dfeich@gmail.com")) (:maintainer "Derek Feichtinger" . "dfeich@gmail.com") (:keywords "convenience") (:url . "https://github.com/dfeich/helm-lib-babel.el"))])
- (helm-lines . [(20220103 1909) ((emacs (24 4)) (helm (1 9 8))) "A helm interface for completing by lines" single ((:commit . "f5ad178818d223f32a0bf60d370b50c01df5f3da") (:authors ("@torgeir")) (:maintainers ("@torgeir")) (:maintainer "@torgeir") (:keywords "files" "helm" "rg" "ag" "pt" "vc" "git" "lines" "complete" "tools" "languages") (:url . "https://github.com/torgeir/helm-lines.el/"))])
- (helm-lobsters . [(20150213 1546) ((helm (1 0)) (cl-lib (0 5))) "helm front-end for lobste.rs" single ((:commit . "4121b232aeded2f82ad2c8a85c7dda17ef9d97bb") (:authors ("Julien BLANCHARD" . "julien@sideburns.eu")) (:maintainers ("Julien BLANCHARD" . "julien@sideburns.eu")) (:maintainer "Julien BLANCHARD" . "julien@sideburns.eu") (:url . "https://github.com/julienXX/helm-lobste.rs"))])
- (helm-ls-git . [(20230505 1437) ((helm (1 7 8))) "list git files." single ((:commit . "771b9add5259613a4b402a5972574d24dd121d7c"))])
- (helm-ls-hg . [(20150909 543) ((helm (1 7 8))) "List hg files in hg project." single ((:commit . "61b91a22fcfb62d0fc56e361ec01ce96973c7165"))])
- (helm-ls-svn . [(20190316 2203) ((emacs (24 1)) (helm (1 7 0)) (cl-lib (0 5))) "helm extension to list svn files" single ((:commit . "a6043e1187282f649e2cb9f0e722a42daf41294b") (:authors ("Chunyang Xu" . "chunyang@macports.org")) (:maintainers ("Chunyang Xu" . "chunyang@macports.org")) (:maintainer "Chunyang Xu" . "chunyang@macports.org") (:keywords "helm" "svn") (:url . "https://svn.macports.org/repository/macports/users/chunyang/helm-ls-svn.el/helm-ls-svn.el"))])
- (helm-lsp . [(20210419 2014) ((emacs (25 1)) (dash (2 14 1)) (lsp-mode (5 0)) (helm (2 0))) "LSP helm integration" single ((:commit . "c2c6974dadfac459b1a69a1217441283874cea92") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "languages" "debug") (:url . "https://github.com/yyoncho/helm-lsp"))])
- (helm-lxc . [(20200323 816) ((emacs (25)) (cl-lib (0 5)) (helm (2 9 4)) (lxc-tramp (0 2 0))) "Helm interface to manage LXC containers" single ((:commit . "37fe2d7ed97967edf59a3b68b1434910516ae24f") (:authors ("montag451")) (:maintainers ("montag451")) (:maintainer "montag451") (:keywords "helm" "lxc" "convenience") (:url . "https://github.com/montag451/helm-lxc"))])
- (helm-make . [(20200620 27) nil "Select a Makefile target with helm" single ((:commit . "ebd71e85046d59b37f6a96535e01993b6962c559") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "makefile") (:url . "https://github.com/abo-abo/helm-make"))])
- (helm-migemo . [(20151010 356) ((emacs (24 4)) (helm-core (1 7 8)) (migemo (1 9)) (cl-lib (0 5))) "Migemo plug-in for helm" single ((:commit . "66c6a19d07c6a385daefd2090d0709d26b608b4e") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainer "Yuhei Maeda <yuhei.maeda_at_gmail.com>") (:keywords "matching" "convenience" "tools" "i18n") (:url . "https://github.com/emacs-jp/helm-migemo"))])
- (helm-mode-manager . [(20210108 2330) ((helm (1 5 3))) "Select and toggle major and minor modes with helm" single ((:commit . "7df8ed3ddd46a0402838b748d317c01454346164") (:authors ("istib")) (:maintainers ("istib")) (:maintainer "istib") (:url . "https://github.com/istib/helm-mode-manager"))])
- (helm-mt . [(20160918 452) ((emacs (24)) (helm (0 0)) (multi-term (0 0)) (cl-lib (0 5))) "helm multi-term management" single ((:commit . "d2bff4100118483bc398c56d0ff095294209265b") (:authors ("Didier Deshommes" . "dfdeshom@gmail.com")) (:maintainers ("Didier Deshommes" . "dfdeshom@gmail.com")) (:maintainer "Didier Deshommes" . "dfdeshom@gmail.com") (:keywords "helm" "multi-term") (:url . "https://github.com/dfdeshom/helm-mt"))])
- (helm-mu . [(20230408 2126) ((helm (1 5 5))) "Helm search for e-mails and contacts in mu4e" single ((:commit . "d3c23b63281ae7d1be7bd6ac0ea66dd0739deed3") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/emacs-helm/helm-mu"))])
- (helm-navi . [(20201220 1823) ((emacs (24 4)) (helm (1 9 4)) (helm-org (1 0)) (navi-mode (2 0)) (s (1 10 0))) "Helm for navi-mode" single ((:commit . "c5666cc171288d1fa892900ee66fba2a1c892c81") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "navigation" "outlines") (:url . "http://github.com/emacs-helm/helm-navi"))])
- (helm-nixos-options . [(20151013 2309) ((nixos-options (0 0 1)) (helm (1 5 6))) "Helm Interface for nixos-options" single ((:commit . "f7709bb007ebafb4d6b32778c7764e2c44e0420d") (:authors ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:keywords "unix") (:url . "http://www.github.com/travisbhartwell/nix-emacs/"))])
- (helm-notmuch . [(20190320 1048) ((helm (1 9 3)) (notmuch (0 21))) "Search emails with Notmuch and Helm" single ((:commit . "97a01497e079a7b6505987e9feba6b603bbec288") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "mail") (:url . "https://github.com/emacs-helm/helm-notmuch"))])
- (helm-open-github . [(20170220 159) ((emacs (24 4)) (helm-core (1 7 7)) (gh (0 8 2))) "Utilities of Opening Github Page" single ((:commit . "2f03d97552a1233db7694116d5f80ecde7612756") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-open-github"))])
- (helm-org . [(20210324 1927) ((helm (3 3)) (emacs (24 4))) "Helm for org headlines and keywords completion" single ((:commit . "d67186d3a64e610c03a5f3d583488f018fb032e4") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/emacs-helm/helm-org"))])
- (helm-org-multi-wiki . [(20210228 1853) ((emacs (26 1)) (org (9 3)) (org-multi-wiki (0 4)) (org-ql (0 5)) (dash (2 18)) (helm-org-ql (0 5)) (helm (3 5))) "Helm interface to org-multi-wiki" single ((:commit . "c85bcaafed749de3efa5e1f4d256e7ac9c5678e2") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "org" "outlines") (:url . "https://github.com/akirak/org-multi-wiki"))])
- (helm-org-ql . [(20230310 1225) ((emacs (26 1)) (dash (2 18 1)) (s (1 12 0)) (helm-org (1 0)) (org-ql (0 6 -1))) "Helm support for org-ql" single ((:commit . "aadddc4d84a72fa80d3bf909c9a3a4cbce53cd93") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/org-ql"))])
- (helm-org-recent-headings . [(20211011 1519) ((emacs (26 1)) (org (9 0 5)) (dash (2 18 0)) (helm (1 9 4)) (org-recent-headings (0 2 -1)) (s (1 12 0))) "Helm source for org-recent-headings" single ((:commit . "97418d581ea030f0718794e50b005e9bae44582e") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org") (:url . "http://github.com/alphapapa/org-recent-headings"))])
- (helm-org-rifle . [(20221024 1943) ((emacs (24 4)) (dash (2 12)) (f (0 18 1)) (helm (1 9 4)) (s (1 10 0))) "Rifle through your Org files" single ((:commit . "74725b63e71b1c941f354e6c8a2cf8b5ee7ef563") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines") (:url . "http://github.com/alphapapa/helm-org-rifle"))])
- (helm-orgcard . [(20220721 756) ((helm-core (3 6 0))) "browse the orgcard by helm" single ((:commit . "d58d35627bb1714bb2cb095f696706b6881233ed") (:authors ("Yuhei Maeda <yuhei.maeda_at_gmail.com>")) (:maintainers ("Yuhei Maeda")) (:maintainer "Yuhei Maeda") (:keywords "convenience" "helm" "org") (:url . "https://github.com/emacs-jp/helm-orgcard"))])
- (helm-osx-app . [(20190717 958) ((emacs (25 1)) (helm-core (3 0))) "Launch macOS apps with helm" single ((:commit . "634ed5d721a20af265825a018e9df3ee6640daee") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:url . "https://github.com/xuchunyang/helm-osx-app"))])
- (helm-pages . [(20161121 226) ((helm (1 6 5)) (emacs (24)) (cl-lib (0 5))) "Pages in current buffer as Helm datasource" single ((:commit . "51dcb9374d1df9feaae85e60cfb39b970554ecba") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk") (:keywords "convenience" "helm" "outlines"))])
- (helm-pass . [(20210221 1655) ((emacs (25)) (helm (0)) (password-store (0)) (auth-source-pass (4 0 0))) "helm interface of pass, the standard Unix password manager" single ((:commit . "4ce46f1801f2e76e53482c65aa0619d427a3fbf9") (:authors ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:url . "https://github.com/emacs-helm/helm-pass"))])
- (helm-perldoc . [(20200315 1716) ((helm-core (2 0)) (deferred (0 3 1)) (emacs (24 4))) "perldoc with helm interface" tar ((:commit . "6f3526f07f3df3059dbde779f8e681f5f1fee6ea") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-perldoc"))])
- (helm-perspeen . [(20170228 1345) ((perspeen (0 1 0)) (helm (2 5 0))) "Helm interface for perspeen." single ((:commit . "7fe2922d85608bfa9e18269fc44181428b8849ff") (:authors ("Yoshinobu Fujimoto")) (:maintainers ("Yoshinobu Fujimoto")) (:maintainer "Yoshinobu Fujimoto") (:keywords "projects" "lisp") (:url . "https://github.com/jimo1001/helm-perspeen"))])
- (helm-phpunit . [(20160513 853) ((helm (1 9 5)) (phpunit (0 7 0))) "Helm integration for phpunit.el" single ((:commit . "739f26204ad2ba76c25f45e8eab1e5216f7c3518") (:authors ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainers ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainer "Eric Hansen" . "hansen.c.eric@gmail.com") (:keywords "phpunit" "helm" "php") (:url . "https://github.com/eric-hansen/phpunit-helm"))])
- (helm-posframe . [(20211103 236) ((emacs (26 0)) (posframe (1 0 0)) (helm (0 1))) "Using posframe to show helm window" single ((:commit . "87461b52b6f3f378c63642a33f584d4a4ba28351") (:authors ("Feng Shu")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "abbrev" "convenience" "matching" "helm") (:url . "https://github.com/tumashu/helm-posframe"))])
- (helm-proc . [(20161006 305) ((helm (1 6 0))) "Helm interface for managing system processes" tar ((:commit . "576d31c2d74ba3897d56e2acd2b0993f52c2547c") (:authors ("Markus Hauck" . "markus1189@gmail.com")) (:maintainer "Markus Hauck" . "markus1189@gmail.com") (:keywords "helm"))])
- (helm-project-persist . [(20151210 1543) ((helm (1 5 2)) (project-persist (0 1 4))) "Helm integration for project-persist package" single ((:commit . "357950fbac18090985a750e40d5d8b10ee9dcd53") (:authors ("Sliim" . "sliim@mailoo.org")) (:maintainers ("Sliim" . "sliim@mailoo.org")) (:maintainer "Sliim" . "sliim@mailoo.org") (:keywords "project-persist" "project" "helm"))])
- (helm-projectile . [(20221215 613) ((helm (1 9 9)) (projectile (2 2 0)) (cl-lib (0 3))) "Helm integration for Projectile" single ((:commit . "35a2111d00c0c0c9d8743280d3f1243bb217118a") (:authors ("Bozhidar Batsov")) (:maintainers ("Bozhidar Batsov")) (:maintainer "Bozhidar Batsov") (:keywords "project" "convenience") (:url . "https://github.com/bbatsov/helm-projectile"))])
- (helm-prosjekt . [(20140129 717) ((prosjekt (0 3)) (helm (1 5 9))) "Helm integration for prosjekt." single ((:commit . "f94f970c2d375e0973b66ba99b29c7aa42fd550f") (:authors ("Sohail Somani" . "sohail@taggedtype.net")) (:maintainers ("Sohail Somani" . "sohail@taggedtype.net")) (:maintainer "Sohail Somani" . "sohail@taggedtype.net") (:url . "https://github.com/abingham/prosjekt"))])
- (helm-pt . [(20160214 2342) ((helm (1 5 6))) "Helm interface to the platinum searcher" tar ((:commit . "8acc52911dad1ed0c3975f134a468762afe0b76b") (:authors ("Rich Alesi")) (:maintainer "Rich Alesi") (:url . "https://github.com/ralesi/helm-pt"))])
- (helm-purpose . [(20170114 1636) ((emacs (24)) (helm (1 9 2)) (window-purpose (1 4))) "Helm Interface for Purpose" single ((:commit . "9ff4c21c1e9ebc7afb851b738f815df7343bb287") (:authors ("Bar Magal (2016)")) (:maintainers ("Bar Magal (2016)")) (:maintainer "Bar Magal (2016)") (:url . "https://github.com/bmag/helm-purpose"))])
- (helm-pydoc . [(20160918 542) ((helm-core (2 0)) (emacs (24 4))) "pydoc with helm interface" tar ((:commit . "85480a29b56dacde425655bc8f5a597c785afdf5") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-pydoc"))])
- (helm-qiita . [(20190526 1359) ((emacs (24)) (helm (2 8 2))) "Qiita with helm interface" single ((:commit . "5f82010c595f8e122aa3f68148ba8d8ccb1333d8") (:authors ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainers ("Takashi Masuda" . "masutaka.net@gmail.com")) (:maintainer "Takashi Masuda" . "masutaka.net@gmail.com") (:url . "https://github.com/masutaka/emacs-helm-qiita"))])
- (helm-rage . [(20180118 1532) ((helm (1 9 8)) (emacs (24 4)) (dash (2 13 0)) (s (1 11 0))) "Helm command for rage characters." tar ((:commit . "5d0aefb53d859186181d4bdcfeff7d315339c7b8") (:keywords "helm" "rage" "meme") (:url . "https://github.com/bomgar/helm-rage"))])
- (helm-rails . [(20130424 1519) ((helm (1 5 1)) (inflections (1 1))) "Helm extension for Rails projects." single ((:commit . "723c2a27f3843570ec1039e3c526953e48b4ed40") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainers ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:keywords "helm" "rails" "git") (:url . "https://github.com/asok/helm-rails"))])
- (helm-rdefs . [(20161130 536) ((emacs (24)) (helm (1 6 4))) "rdefs with helm interface" single ((:commit . "cd3a6b3af3015ee58ef30cb7c81c79ebe5fc867b") (:authors ("Hiroshi Saito" . "monodie@gmail.com")) (:maintainers ("Hiroshi Saito" . "monodie@gmail.com")) (:maintainer "Hiroshi Saito" . "monodie@gmail.com") (:keywords "matching" "tools") (:url . "https://github.com/saidie/helm-rdefs"))])
- (helm-recoll . [(20220920 1206) ((helm (3 3)) (emacs (24 4))) "helm interface for the recoll desktop search tool." single ((:commit . "c054047ecca360c3e02281d8d0c021f654e63f37") (:authors ("Thierry Volpiatto <thierry.volpiatto at gmail.com>")) (:maintainers ("Thierry Volpiatto <thierry.volpiatto at gmail.com>")) (:maintainer "Thierry Volpiatto <thierry.volpiatto at gmail.com>") (:keywords "convenience") (:url . "https://github.com/emacs-helm/helm-recoll"))])
- (helm-rg . [(20200721 725) ((emacs (25)) (cl-lib (0 5)) (dash (2 13 0)) (helm (2 8 8))) "a helm interface to ripgrep" single ((:commit . "ee0a3c09da0c843715344919400ab0a0190cc9dc") (:authors ("Danny McClanahan")) (:maintainers ("Danny McClanahan")) (:maintainer "Danny McClanahan") (:keywords "find" "file" "files" "helm" "fast" "rg" "ripgrep" "grep" "search" "match") (:url . "https://github.com/cosmicexplorer/helm-rg"))])
- (helm-rhythmbox . [(20160524 1158) ((helm (1 5 0)) (cl-lib (0 5))) "control Rhythmbox's play queue via Helm" single ((:commit . "c92e1ded34ddd4e62e7e9a558259c232e05193fa") (:authors ("Thomas Winant" . "dewinant@gmail.com")) (:maintainers ("Thomas Winant" . "dewinant@gmail.com")) (:maintainer "Thomas Winant" . "dewinant@gmail.com") (:url . "https://github.com/mrBliss/helm-rhythmbox"))])
- (helm-robe . [(20151209 355) ((helm (1 7 7))) "completing read function for robe" single ((:commit . "7348d0bc0251b51979554ea678b970fd01c0efe9") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-robe"))])
- (helm-ros . [(20160812 1752) ((helm (1 9 9)) (xterm-color (1 0)) (cl-lib (0 5))) "Interfaces ROS with helm" single ((:commit . "92b0b215f6a017f0f57f1af15466cc0b2a5a0135") (:authors ("David Landry" . "davidlandry93@gmail.com")) (:maintainers ("David Landry" . "davidlandry93@gmail.com")) (:maintainer "David Landry" . "davidlandry93@gmail.com") (:keywords "helm" "ros") (:url . "https://www.github.com/davidlandry93/helm-ros"))])
- (helm-rtags . [(20191222 920) ((helm (2 0)) (rtags (2 10))) "A front-end for rtags" single ((:commit . "595055b5316a7c92ba1d638f324f98842a0f41a5") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "https://github.com/Andersbakken/rtags"))])
- (helm-rubygems-local . [(20130712 111) ((helm (1 5 3))) "Installed local rubygems find-file for helm" single ((:commit . "289cb33d41c703af9791d6da46b55f070013c2e3") (:authors ("hadashiA" . "dev@hadashikick.jp")) (:maintainers ("hadashiA" . "dev@hadashikick.jp")) (:maintainer "hadashiA" . "dev@hadashikick.jp") (:url . "https://github.com/f-kubotar/helm-rubygems-local"))])
- (helm-rubygems-org . [(20140826 1156) ((emacs (24)) (helm (1 6 3)) (cl-lib (0 5))) "Use helm to search rubygems.org" single ((:commit . "6aaed984f698cbdf9f9aceb0221404563e28764d") (:authors ("Chad Albers" . "calbers@neomantic.com")) (:maintainers ("Chad Albers" . "calbers@neomantic.com")) (:maintainer "Chad Albers" . "calbers@neomantic.com") (:keywords "ruby" "rubygems" "gemfile" "helm") (:url . "https://github.com/neomantic/helm-rubygems-org"))])
- (helm-safari . [(20160404 324) ((helm (1 9 1)) (emacs (24))) "Browse your Safari bookmarks and history" single ((:commit . "664c7f4488829228eed7e90cd53002e14bec555b") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "tools") (:url . "https://github.com/xuchunyang/helm-safari"))])
- (helm-sage . [(20160514 745) ((cl-lib (0 5)) (helm (1 5 6)) (sage-shell-mode (0 1 0))) "A helm extension for sage-shell-mode." single ((:commit . "f14e9281d8f2162df7d8f9c2ad9ad1248a24803b") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainers ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com") (:keywords "sage" "math" "helm") (:url . "https://github.com/stakemori/helm-sage"))])
- (helm-searcher . [(20221231 1632) ((emacs (25 1)) (helm (2 0)) (searcher (0 1 8)) (s (1 12 0)) (f (0 20 0))) "Helm interface to use searcher" single ((:commit . "225480fa89d73eb53478576610f48d035b77cda9") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "replace" "grep" "ag" "rg") (:url . "https://github.com/emacs-helm/helm-searcher"))])
- (helm-selected . [(20171223 210) ((emacs (24 4)) (helm (2 8 6)) (selected (1 1))) "helm extension for selected.el" single ((:commit . "d2609cdfce14052ab2d9c23761d4fe56966a8ed1") (:authors ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainers ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainer "Takaaki ISHIKAWA <takaxp at ieee dot org>") (:keywords "extensions" "convenience") (:url . "https://github.com/takaxp/helm-selected"))])
- (helm-selector . [(20210125 857) ((emacs (26 1)) (helm (3))) "Helm buffer selector" tar ((:commit . "4da4711c4cfd14527abe20d66787beeb49171b26") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:url . "https://github.com/emacs-helm/helm-selector"))])
- (helm-sheet . [(20130630 1239) ((helm (1 0))) "helm sources for sheet" single ((:commit . "d360b68d0ddb09aa1854e7b2f3cb39caeee26463") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "helm" "sheet") (:url . "https://github.com/yasuyk/helm-sheet"))])
- (helm-shell-history . [(20210214 948) ((helm (3 7)) (emacs (24 3))) "Find shell history from helm" single ((:commit . "dfa657ae76ef1ba768e970a557739efdf0436cb0") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "helm" "terminals" "shell") (:url . "https://github.com/yuutayamada/helm-shell-history"))])
- (helm-slime . [(20191016 1601) ((emacs (25)) (helm (3 2)) (slime (2 18)) (cl-lib (0 5))) "helm-sources and some utilities for SLIME." single ((:commit . "7886cc49906a87ebd73be3b71f5dd6b1433a9b7b") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net") (:keywords "convenience" "helm" "slime") (:url . "https://github.com/emacs-helm/helm-slime"))])
- (helm-sly . [(20210205 1424) ((emacs (25 1)) (helm (3 2)) (cl-lib (0 5)) (sly (0 0))) "Helm sources and some utilities for SLY." single ((:commit . "3691626c80620e992a338c3222283d9149f1ecb5") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:keywords "convenience" "helm" "sly" "lisp") (:url . "https://github.com/emacs-helm/helm-sly"))])
- (helm-smex . [(20171004 2008) ((emacs (24)) (smex (3 0)) (helm (1 7 7))) "Helm interface for smex" single ((:commit . "2269375dfa452b88b5170d1a5d5849ebb2c1e413") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net") (:keywords "convenience"))])
- (helm-spaces . [(20161001 1409) ((helm-core (2 2)) (spaces (0 1 0))) "helm sources for spaces" single ((:commit . "877e2b5178926308d6a7c2a37477bb12c33a96d4") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:keywords "helm" "frames" "convenience") (:url . "https://github.com/yasuyk/helm-spaces"))])
- (helm-spotify . [(20160905 2147) ((helm (0 0 0)) (multi (2 0 0))) "Control Spotify with Helm." single ((:commit . "f7a62d1ff88e3127de9be7cd3e818b0a92268ab3") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:keywords "helm" "spotify") (:url . "https://github.com/krisajenkins/helm-spotify"))])
- (helm-spotify-plus . [(20190913 2236) ((emacs (24 4)) (helm (2 0 0)) (multi (2 0 1))) "Control Spotify search and select music with Helm." single ((:commit . "c3922ec368250965e483876cde5880d88a40a71b") (:authors ("Wanderson Ferreira <https://github.com/wandersoncferreira> and Luis Moneda <https://github.com/lgmoneda>")) (:maintainers ("Wanderson Ferreira <https://github.com/wandersoncferreira> and Luis Moneda <https://github.com/lgmoneda>")) (:maintainer "Wanderson Ferreira <https://github.com/wandersoncferreira> and Luis Moneda <https://github.com/lgmoneda>") (:url . "https://github.com/wandersoncferreira/helm-spotify-plus"))])
- (helm-sql-connect . [(20170319 1251) ((helm (0 0 0))) "Choose a database to connect to via Helm." single ((:commit . "5aead55b6f8636140945714d8c332b287ab9ef10") (:authors ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainers ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainer "Eric Hansen" . "hansen.c.eric@gmail.com") (:keywords "tools" "convenience" "comm") (:url . "https://github.com/eric-hansen/helm-sql-connect"))])
- (helm-switch-shell . [(20210713 1440) ((emacs (25 1)) (helm (2 8 8))) "A Helm source for switching between shell buffers" single ((:commit . "8d7ba1d99ff12a8f1d6ce3b9684ae8aebf494cf3") (:authors ("James N. V. Cash" . "james.cash@occasionallycogent.com")) (:maintainers ("James N. V. Cash" . "james.cash@occasionallycogent.com")) (:maintainer "James N. V. Cash" . "james.cash@occasionallycogent.com") (:keywords "matching" "processes" "terminals" "tools") (:url . "https://github.com/jamesnvc/helm-switch-shell"))])
- (helm-switch-to-repl . [(20210206 844) ((emacs (26 1)) (helm (3))) "Helm action to switch directory in REPLs" single ((:commit . "f0e732e7217fc0373b0805245fa15920cf676619") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:url . "https://github.com/emacs-helm/helm-switch-to-repl"))])
- (helm-swoop . [(20210426 547) ((emacs (25 1)) (helm (3 6))) "Efficiently hopping squeezed lines powered by helm interface" single ((:commit . "1b3285791f1dc1fde548fe67aec07214d698fd57") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainers ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:keywords "convenience" "helm" "swoop" "inner" "buffer" "search") (:url . "https://github.com/emacsorphanage/helm-swoop"))])
- (helm-system-packages . [(20220515 812) ((emacs (24 4)) (helm (2 8 7)) (seq (1 8))) "Helm UI wrapper for system package managers." tar ((:commit . "e93f4aeaa77b73c6e529141c3fa0ac49b40b6306") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:keywords "helm" "packages") (:url . "https://github.com/emacs-helm/helm-system-packages"))])
- (helm-systemd . [(20210105 542) ((emacs (24 4)) (helm (1 9 2)) (with-editor (2 5 0))) "helm's systemd interface" single ((:commit . "8b26ab2d3a5b08c1e03c9312818512d7492bbc9a") (:authors (nil . "<lompik@oriontabArch>")) (:maintainers (nil . "<lompik@oriontabArch>")) (:maintainer nil . "<lompik@oriontabArch>") (:keywords "convenience"))])
- (helm-tail . [(20220726 947) ((emacs (25 1)) (helm (2 7 0))) "Read recent output from various sources" single ((:commit . "8dc44a87fa1a52199e43b73b55c8ef8fe8069e79") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "maint" "tools") (:url . "https://github.com/akirak/helm-tail"))])
- (helm-taskswitch . [(20221019 1542) ((emacs (24)) (helm (3 0))) "Use helm to switch windows and buffers" single ((:commit . "6e8b62702376c1d30ab52a419dd72cb2a40fd76e") (:authors ("Brian Caruso" . "briancaruso@gmail.com")) (:maintainers ("Brian Caruso" . "briancaruso@gmail.com")) (:maintainer "Brian Caruso" . "briancaruso@gmail.com") (:keywords "frames") (:url . "https://github.com/bdc34/helm-taskswitch"))])
- (helm-themes . [(20220721 330) ((helm-core (3 6 0)) (emacs (24 4))) "Color theme selection with helm interface" single ((:commit . "12e856c0346fa69d13d941f27bd3cddb3a3deed2") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-themes"))])
- (helm-tramp . [(20221228 1444) ((emacs (24 3)) (helm (2 0))) "Tramp helm interface for ssh, docker, vagrant" single ((:commit . "10711393c05272112e1585dca87ebeb0ea5b114d") (:authors ("Masashi Miyaura")) (:maintainers ("Masashi Miyaura")) (:maintainer "Masashi Miyaura") (:url . "https://github.com/masasam/emacs-helm-tramp"))])
- (helm-tree-sitter . [(20220328 1345) ((emacs (25 1)) (helm (3 6 2)) (tree-sitter (0 16 1))) "Helm interface for tree-sitter" tar ((:commit . "ef5209bd1deb56d6cab7a26e6d55615161f2115a") (:authors ("Giedrius Jonikas" . "giedriusj1@gmail.com")) (:maintainers ("Giedrius Jonikas" . "giedriusj1@gmail.com")) (:maintainer "Giedrius Jonikas" . "giedriusj1@gmail.com") (:url . "https://github.com/Giedriusj1/helm-tree-sitter"))])
- (helm-twitch . [(20220420 1625) ((dash (2 11 0)) (helm (1 5)) (emacs (24)) (twitch-api (20210809 1641)) (streamlink (20210811 1429))) "Navigate Twitch.tv via `helm'" single ((:commit . "27fbec24cc250d508cd2f4286da16262752908eb") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainers ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com") (:keywords "helm" "twitch" "games") (:url . "https://github.com/BenediktBroich/helm-twitch"))])
- (helm-unicode . [(20180608 1407) ((helm (1 9 8)) (emacs (24 4))) "Helm command for unicode characters." single ((:commit . "b7092ed6a7191805651efae40947e4781c453211"))])
- (helm-w32-launcher . [(20141223 2014) ((emacs (24)) (helm (1 6 5)) (cl-lib (0 5))) "Start Menu entry launcher using Helm" tar ((:commit . "3e59ad62b89dd21d334af0203d445a83eb25dc5b") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/helm-w32-launcher"))])
- (helm-w3m . [(20210315 723) ((helm (1 5)) (w3m (0 0)) (cl-lib (0 5)) (emacs (24 1))) "W3m bookmark - helm interface." single ((:commit . "0a25a2b1df9bc660a90d633beb301b3815556e4e"))])
- (helm-wikipedia . [(20221113 824) ((helm (3 6)) (emacs (25 1))) "Wikipedia suggestions" single ((:commit . "ab040154f2efab9b5eea36b3bd368a66f62efbfb") (:url . "https://github.com/emacs-helm/helm-wikipedia"))])
- (helm-wordnet . [(20160128 1507) ((emacs (24)) (helm (1 7 0)) (cl-lib (0 5))) "Helm interface to local wordnet dictionary" single ((:commit . "a36dbc6fcb570b812870bc1e190f203e0a0042fc") (:authors ("Raghav Kumar Gautam" . "rgautam@apache.com")) (:maintainers ("Raghav Kumar Gautam" . "rgautam@apache.com")) (:maintainer "Raghav Kumar Gautam" . "rgautam@apache.com") (:keywords "dictionary" "wordnet" "emacs" "elisp" "helm") (:url . "https://github.com/raghavgautam/helm-wordnet"))])
- (helm-xcdoc . [(20160116 1018) ((helm (1 5)) (emacs (24 4))) "Search Xcode Document by docsetutil and eww with helm interface" single ((:commit . "a85612149a6d8e18ab309b3db2d222ce39c42049") (:authors ("Ryo Fujimoto" . "fujimisakri@gmail.com")) (:maintainers ("Ryo Fujimoto" . "fujimisakri@gmail.com")) (:maintainer "Ryo Fujimoto" . "fujimisakri@gmail.com") (:url . "https://github.com/fujimisakari/emacs-helm-xcdoc"))])
- (helm-xref . [(20211017 1334) ((emacs (25 1)) (helm (1 9 4))) "Helm interface for xref results" single ((:commit . "ea0e4ed8a9baf236e4085cbc7178241f109a53fa") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainers ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainer "Fritz Stelzer" . "brotzeitmacher@gmail.com") (:url . "https://github.com/brotzeit/helm-xref"))])
- (helm-youtube . [(20190101 1733) ((request (0 2 0)) (helm (2 3 1)) (cl-lib (0 5))) "Query YouTube and play videos in your browser" single ((:commit . "e7272f1648c7fa836ea5ac1a61770b4931ab4709") (:authors ("Maximilian Roquemore" . "maximus12793@gmail.com")) (:maintainers ("Maximilian Roquemore" . "maximus12793@gmail.com")) (:maintainer "Maximilian Roquemore" . "maximus12793@gmail.com") (:keywords "youtube" "multimedia") (:url . "https://github.com/maximus12793/helm-youtube"))])
- (helm-z . [(20171204 325) ((helm (1 0))) "Show z directory list with helm.el support." single ((:commit . "37212220bebea8b9c238cb1bbacd8332b7f26c03") (:authors ("yynozk" . "yynozk@gmail.com")) (:maintainers ("yynozk" . "yynozk@gmail.com")) (:maintainer "yynozk" . "yynozk@gmail.com") (:url . "https://github.com/yynozk/helm-z"))])
- (helm-zhihu-daily . [(20160625 1145) ((helm (1 0)) (cl-lib (0 5)) (emacs (24 4))) "Helm interface for 知乎日报 (http://daily.zhihu.com)" single ((:commit . "be27dcc6be1eb97663b65581a9a5c0fc81cfaba7") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:url . "https://github.com/xuchunyang/helm-zhihu-daily"))])
- (help-find . [(20220929 822) ((emacs (25 2)) (dash (2 12))) "Additional help functions for working with keymaps" single ((:commit . "ef7266fc480367c12bff64817c875af940d0c9c0") (:authors ("Duncan Burke" . "duncankburke@gmail.com")) (:maintainers ("Duncan Burke" . "duncankburke@gmail.com")) (:maintainer "Duncan Burke" . "duncankburke@gmail.com") (:keywords "help") (:url . "https://github.com/duncanburke/help-find"))])
- (help-find-org-mode . [(20181204 234) ((emacs (24 4))) "Advise help to find org source over tangled code" single ((:commit . "c6fa2c8a8e9381572190010a9fa01f2be78f2790") (:authors ("Eric Crosson" . "eric.s.crosson@utexas.com")) (:maintainers ("Eric Crosson" . "eric.s.crosson@utexas.com")) (:maintainer "Eric Crosson" . "eric.s.crosson@utexas.com") (:keywords "convenience") (:url . "https://github.com/EricCrosson/help-find-org-mode"))])
- (helpful . [(20230504 1546) ((emacs (25)) (dash (2 18 0)) (s (1 11 0)) (f (0 20 0)) (elisp-refs (1 2))) "A better *help* buffer" single ((:commit . "32cb28b50b3366ad35e2cb936367268ddeec745f") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "help" "lisp") (:url . "https://github.com/Wilfred/helpful"))])
- (hemera-theme . [(20180916 924) ((emacs (24))) "Light theme" single ((:commit . "b67c902b210b37b00cac68726822404543147ba8") (:authors ("Guido Schmidt")) (:maintainers ("Guido Schmidt" . "guido.schmidt.2912@gmail.com")) (:maintainer "Guido Schmidt" . "guido.schmidt.2912@gmail.com") (:keywords "themes" "light-theme") (:url . "https://github.com/GuidoSchmidt/emacs-hemera-theme"))])
- (hemisu-theme . [(20130508 1844) nil "Hemisu for Emacs." tar ((:commit . "ae593ac58e6bffef97467259c1d1472840385e84") (:authors ("Andrzej Sliwa")) (:maintainers ("Andrzej Sliwa")) (:maintainer "Andrzej Sliwa") (:url . "http://github/anrzejsliwa/django-theme"))])
- (hercules . [(20200420 747) ((emacs (24 4)) (which-key (3 3 2))) "An auto-magical, which-key-based hydra banisher." single ((:commit . "557da39878d0637395fdded91243b340c37eff7b") (:authors ("Uros Perisic")) (:maintainers ("Uros Perisic")) (:maintainer "Uros Perisic") (:keywords "convenience") (:url . "https://gitlab.com/jjzmajic/hercules"))])
- (heroku-theme . [(20150523 219) nil "Heroku color theme" single ((:commit . "7c1e80f8b5087c37008fec687070344638cd4752") (:authors ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainers ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainer "Jonathan Chu" . "me@jonathanchu.is") (:url . "https://github.com/jonathanchu/color-theme-heroku"))])
- (hexo . [(20221130 1642) ((emacs (24 3))) "Major mode & tools for Hexo" single ((:commit . "709c069ec0f9ffd8bc2f8fff18a66d80bc205f6d") (:authors ("Ono Hiroko (kuanyui)" . "azazabc123@gmail.com")) (:maintainers ("Ono Hiroko (kuanyui)" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko (kuanyui)" . "azazabc123@gmail.com") (:keywords "tools" "hexo") (:url . "https://github.com/kuanyui/hexo.el"))])
- (hfst-mode . [(20160708 1202) nil "major mode for editing HFST files" single ((:commit . "ac1bb9dd92545d3e7fdc05c83996c227cc15c6b8") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "languages") (:url . "http://wiki.apertium.org/wiki/Emacs"))])
- (hg-histedit . [(20210302 2334) ((emacs (25 1)) (with-editor (2 8 3))) "Edit HG histedit files" single ((:commit . "a05149483b9c5f7848ece0ba6028c900595a6a25") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "mercurial" "hg" "emacs" "tools") (:url . "https://github.com/jojojames/hg-histedit"))])
- (hgignore-mode . [(20220804 1326) nil "a major mode for editing hgignore files" single ((:commit . "c65810347f39904b985187c5e2aaf27b184f3cae") (:authors ("Omair Majid" . "omair.majid@gmail.com")) (:maintainers ("Omair Majid" . "omair.majid@gmail.com")) (:maintainer "Omair Majid" . "omair.majid@gmail.com") (:keywords "convenience" "vc" "hg") (:url . "http://github.com/omajid/hgignore-mode"))])
- (hgrc-mode . [(20150409 2043) nil "major mode for editing hgrc files" single ((:commit . "314e8320b82cc1ce74b1bd372f296252e7a23090") (:authors ("Omair Majid" . "omair.majid@gmail.com")) (:maintainers ("Omair Majid" . "omair.majid@gmail.com")) (:maintainer "Omair Majid" . "omair.majid@gmail.com") (:keywords "convenience" "vc" "hg") (:url . "http://github.com/omajid/hgrc-mode"))])
- (hi2 . [(20141005 1931) nil "indentation module for Haskell Mode" single ((:commit . "c9d199727b5cdcb9e36a972b38131ce4611fd6c8") (:authors ("Gergely Risko" . "gergely@risko.hu")) (:maintainers ("Gergely Risko" . "gergely@risko.hu")) (:maintainer "Gergely Risko" . "gergely@risko.hu") (:keywords "indentation" "haskell") (:url . "https://github.com/errge/hi2"))])
- (hiccup-cli . [(20210211 2127) ((emacs (26 1))) "Convert HTML to Hiccup syntax" single ((:commit . "cfbb957a1f86bc1d28e778bfdffdeaaa2ae79286") (:authors ("Kevin W. van Rooijen")) (:maintainers ("Kevin W. van Rooijen")) (:maintainer "Kevin W. van Rooijen") (:keywords "tools") (:url . "https://github.com/kwrooijen/hiccup-cli"))])
- (hide-lines . [(20210513 1636) nil "Commands for hiding lines based on a regexp" single ((:commit . "f0828c15e50db5eddb905de783e7683b04d1eca3") (:authors ("Mark Hulme-Jones <ture at plig cucumber dot net>")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "convenience") (:url . "https://github.com/vapniks/hide-lines"))])
- (hide-mode-line . [(20211112 1400) ((emacs (24 4))) "minor mode that hides/masks your modeline" single ((:commit . "bc5d293576c5e08c29e694078b96a5ed85631942") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "git@henrik.io")) (:maintainer "Henrik Lissner" . "git@henrik.io") (:keywords "frames" "mode-line") (:url . "https://github.com/hlissner/emacs-hide-mode-line"))])
- (hidepw . [(20200326 112) nil "Minor mode to hide passwords" single ((:commit . "73f099da79d73fe4087472df3469d8b9b20a59f2") (:authors ("Chris Forno" . "jekor@jekor.com")) (:maintainers ("Chris Forno" . "jekor@jekor.com")) (:maintainer "Chris Forno" . "jekor@jekor.com") (:keywords "hide" "hidden" "password" "faces") (:url . "https://github.com/jekor/hidepw"))])
- (hideshow-org . [(20120223 2250) nil "Provides org-mode like hide and show for hideshow.el" single ((:commit . "16419e52e6cdd2f46f755144c0ab11ce00d1a626") (:authors ("Shane Celis <shane (at) gnufoo (dot) org>")) (:maintainers ("Shane Celis <shane (at) gnufoo (dot) org>")) (:maintainer "Shane Celis <shane (at) gnufoo (dot) org>") (:keywords "c" "c++" "java" "lisp" "tools" "editing" "comments" "blocks" "hiding" "outlines" "org-mode"))])
- (hierarchy . [(20190425 842) ((emacs (25 1))) "Library to create and display hierarchy structures" single ((:commit . "a5bc6bf2e1bbd48cc17c508043134f24abb41944") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/hierarchy"))])
- (highlight . [(20210318 2248) nil "Highlighting commands." single ((:commit . "28557cb8d99b96eb509aaec1334c7cdda162517f") (:authors ("Drew Adams")) (:maintainers (nil . "Drew Adams (concat \"drew.adams\" \"@\" \"oracle\" \".com\")")) (:maintainer nil . "Drew Adams (concat \"drew.adams\" \"@\" \"oracle\" \".com\")") (:keywords "faces" "help" "local") (:url . "https://www.emacswiki.org/emacs/download/highlight.el"))])
- (highlight-blocks . [(20190318 1557) ((emacs (24))) "Highlight the blocks point is in" single ((:commit . "33cf3d36662faa36c86c8d53e4d5a3922efa3eb8") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/highlight-blocks"))])
- (highlight-context-line . [(20181122 2203) nil "Improve orientation when scrolling" single ((:commit . "c3257c0ca9dba76167bbd7e0718a65ecd26ef26f") (:authors ("Stefan Kamphausen <www.skamphausen.de>")) (:maintainers ("Stefan Kamphausen <www.skamphausen.de>")) (:maintainer "Stefan Kamphausen <www.skamphausen.de>") (:keywords "faces" "services" "user") (:url . "https://github.com/ska2342/highlight-context-line/"))])
- (highlight-defined . [(20210411 222) ((emacs (24))) "Syntax highlighting of known Elisp symbols" single ((:commit . "4420bdda419875dacb065468aafe273b2022580e") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/highlight-defined"))])
- (highlight-doxygen . [(20200520 1713) nil "Highlight Doxygen comments" single ((:commit . "eec4874e2e89d4eb39091aad89a67dff8f8ec84c") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces") (:url . "https://github.com/Lindydancer/highlight-doxygen"))])
- (highlight-escape-sequences . [(20201214 1730) nil "Highlight escape sequences" single ((:commit . "fae976568c04b6fe8a9f2d854c8fe23b357a6878") (:authors ("Dmitry Gutov" . "dgutov@yandex.ru") ("Pavel Matcula" . "dev.plvlml@gmail.com")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:keywords "convenience") (:url . "https://github.com/dgutov/highlight-escape-sequences"))])
- (highlight-function-calls . [(20230416 445) ((emacs (24 4))) "Highlight function/macro calls" single ((:commit . "e2ed2da188aea5879b59ffffefdc5eca10e7ba83") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "faces" "highlighting") (:url . "http://github.com/alphapapa/highlight-function-calls"))])
- (highlight-indent-guides . [(20200820 2328) ((emacs (24 1))) "Minor mode to highlight indentation" single ((:commit . "cf352c85cd15dd18aa096ba9d9ab9b7ab493e8f6") (:authors ("DarthFennec" . "darthfennec@derpymail.org")) (:maintainers ("DarthFennec" . "darthfennec@derpymail.org")) (:maintainer "DarthFennec" . "darthfennec@derpymail.org") (:url . "https://github.com/DarthFennec/highlight-indent-guides"))])
- (highlight-indentation . [(20210221 1418) nil "Minor modes for highlighting indentation" single ((:commit . "d88db4248882da2d4316e76ed673b4ac1fa99ce3") (:authors ("Anton Johansson" . "anton.johansson@gmail.com")) (:maintainers ("Anton Johansson" . "anton.johansson@gmail.com")) (:maintainer "Anton Johansson" . "anton.johansson@gmail.com") (:url . "https://github.com/antonj/Highlight-Indentation-for-Emacs"))])
- (highlight-leading-spaces . [(20151216 1222) ((emacs (24 4))) "Highlight leading spaces" single ((:commit . "840db19d863dd97993fd9f893f5be501627b6354") (:authors ("Thomas Winant" . "dewinant@gmail.com")) (:maintainers ("Thomas Winant" . "dewinant@gmail.com")) (:maintainer "Thomas Winant" . "dewinant@gmail.com") (:url . "https://github.com/mrBliss/highlight-leading-spaces"))])
- (highlight-numbers . [(20181013 1744) ((emacs (24)) (parent-mode (2 0))) "Highlight numbers in source code" single ((:commit . "8b4744c7f46c72b1d3d599d4fb75ef8183dee307") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/highlight-numbers"))])
- (highlight-operators . [(20170213 2220) nil "a face for operators in programming modes" single ((:commit . "7696b43419505d6e3511ad2781f9f1dd3c55ef8c") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))])
- (highlight-parentheses . [(20220408 845) ((emacs (24 3))) "Highlight surrounding parentheses" single ((:commit . "438a1cb2563e2a2496be4678cc0df8d5b22caf5d") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Tassilo Horn" . "tsdh@gnu.org")) (:maintainer "Tassilo Horn" . "tsdh@gnu.org") (:keywords "faces" "matching") (:url . "https://sr.ht/~tsdh/highlight-parentheses.el/"))])
- (highlight-quoted . [(20140916 1822) ((emacs (24))) "Highlight Lisp quotes and quoted symbols" single ((:commit . "ec9108486cf7f21f9a0b13f81369849b3b525f1f") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/highlight-quoted"))])
- (highlight-refontification . [(20170211 2024) nil "Visualize font-lock refontification." single ((:commit . "32632897d88c4611fadb08517ca00ef5cbc989b6") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces" "tools") (:url . "https://github.com/Lindydancer/highlight-refontification"))])
- (highlight-stages . [(20210306 418) nil "highlight staged (quasi-quoted) expressions" single ((:commit . "95daa710f3d8fc83f42c5da38003fc71ae0da1fc") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (highlight-symbol . [(20160102 2009) nil "automatic and manual symbol highlighting" single ((:commit . "7a789c779648c55b16e43278e51be5898c121b3a") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "faces" "matching") (:url . "http://nschum.de/src/emacs/highlight-symbol/"))])
- (highlight-thing . [(20230217 728) nil "Minimalistic minor mode to highlight current thing under point." single ((:commit . "ad788d7a7ee9eb287a8cca3adb21510b89270dca") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com") (:keywords "highlight" "thing" "symbol") (:url . "https://github.com/fgeller/highlight-thing.el"))])
- (highlight-unique-symbol . [(20130612 542) ((deferred (0 3 2))) "highlight symbols which not appear in the repository" single ((:commit . "d760015b4a5ce31d6da5a30890b599a8e1312be5") (:authors ("hitode909" . "hitode909@gmail.com")) (:maintainers ("hitode909" . "hitode909@gmail.com")) (:maintainer "hitode909" . "hitode909@gmail.com") (:url . "https://github.com/hitode909/emacs-highlight-unique-symbol"))])
- (highlight2clipboard . [(20151020 1840) ((htmlize (1 47))) "Copy text to clipboard with highlighting." tar ((:commit . "6ce58a060d9c5843ccb8c79ec2bba7858c68ac15") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "tools"))])
- (hima-theme . [(20230421 314) ((emacs (25 1))) "A minimal theme with pretty colors" single ((:commit . "553541f1b66e0f00bada8273d1126d50de13bcd1") (:keywords "faces") (:url . "https://github.com/meain/hima-theme"))])
- (himalaya . [(20230209 1545) ((emacs (27 1))) "Interface for the himalaya email client" single ((:commit . "712bb410afd4cd43d3a8e9bcf2b1930dcde7000c") (:authors ("Dante Catalfamo") ("soywod" . "clement.douin@posteo.net")) (:maintainers ("Dante Catalfamo")) (:maintainer "Dante Catalfamo") (:keywords "mail" "comm") (:url . "https://github.com/dantecatalfamo/himalaya-emacs"))])
- (hindent . [(20230221 619) ((cl-lib (0 5))) "Indent haskell code using the \"hindent\" program" single ((:commit . "a9c2898b9ac8f13e57092e3d5287e05b942d4539") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainers ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:url . "https://github.com/chrisdone/hindent"))])
- (hippie-exp-ext . [(20160502 2326) nil "Extension of hippie-expand" single ((:commit . "4eda13f90da51ab217d024701f4c30f91ffcb90e") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "abbrev" "convenience" "completions" "hippie-expand") (:url . "http://www.emacswiki.org/emacs/download/hippie-exp-ext.el"))])
- (hippie-expand-slime . [(20170723 146) nil "Hook slime's completion into hippie-expand" single ((:commit . "39bbae94896a62854d31754debdfae71d35fec62") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/hippie-expand-slime"))])
- (hippie-namespace . [(20140508 2041) nil "Special treatment for namespace prefixes in hippie-expand" single ((:commit . "107d927634032062483e83c6de9b7698b64809d1") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "convenience" "lisp" "tools" "completion") (:url . "http://github.com/rolandwalker/hippie-namespace"))])
- (historian . [(20200203 1927) ((emacs (24 4))) "Persistently store selected minibuffer candidates" single ((:commit . "ac1bea7d99dd6965c72fabeb72d5fdc38c5380a4") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience") (:url . "https://github.com/PythonNut/historian.el"))])
- (history . [(20160821 1602) ((emacs (24 3))) "History utility for source code navigation" tar ((:commit . "5317663fb45bbd5e96d258cb0807dcc266ce67ff") (:authors ("boyw165")) (:maintainers ("boyw165")) (:maintainer "boyw165") (:url . "https://github.com/boyw165/history"))])
- (historyf . [(20151124 159) nil "file history library like browser" single ((:commit . "64ab6c9d2cd6dec6982622bf675326e011373cd2") (:authors ("k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>")) (:maintainers ("k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>")) (:maintainer "k1LoW (Kenichirou Oyama), <k1lowxb [at] gmail [dot] com> <k1low [at] 101000lab [dot] org>") (:url . "https://github.com/k1LoW/emacs-historyf"))])
- (hive . [(20131217 1512) ((sql (3 0))) "Hive SQL mode extension" single ((:commit . "131f2816a0cf4d1fee44198ca305e6e2d1cab750") (:authors ("Roman Scherer" . "roman@burningswell.com")) (:maintainers ("Roman Scherer" . "roman@burningswell.com")) (:maintainer "Roman Scherer" . "roman@burningswell.com") (:keywords "sql" "hive"))])
- (hiwin . [(20150825 827) nil "Visible active window mode." single ((:commit . "6ee8ed051405653bd9b7332d7e9fbb591d954051") (:authors ("k.sugita")) (:maintainers ("k.sugita")) (:maintainer "k.sugita") (:keywords "faces" "editing" "emulating"))])
- (hl-anything . [(20160422 1708) ((emacs (24 3))) "Highlight symbols, selections, enclosing parens and more." tar ((:commit . "c2e50f91a05d6c43e8a1c169f709cd1f23e47b0a") (:authors ("boyw165")) (:maintainers ("boyw165")) (:maintainer "boyw165"))])
- (hl-block-mode . [(20230201 130) ((emacs (26 1))) "Highlighting nested blocks" single ((:commit . "352686955b6e73c6353c640c7d3bc09487c9de69") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-hl-block-mode"))])
- (hl-indent . [(20170429 2104) ((emacs (24)) (cl-lib (0 5))) "Highlight irregular indentation." single ((:commit . "bdb2e0177a7c8b29af26998e688b856adc6ded93") (:authors ("Kirill Ignatiev <github.com/ikirill>")) (:maintainers ("Kirill Ignatiev <github.com/ikirill>")) (:maintainer "Kirill Ignatiev <github.com/ikirill>") (:keywords "convenience" "faces") (:url . "https://github.com/ikirill/hl-indent"))])
- (hl-indent-scope . [(20230116 2310) ((emacs (26 1))) "Highlight indentation by scope" tar ((:commit . "5e806bfedd01bf82e4fda27e4b9809662318c287") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-hl-indent-scope"))])
- (hl-prog-extra . [(20230201 140) ((emacs (26 2))) "Customizable highlighting for source-code" tar ((:commit . "a573977f9734b1786a4691c9fb8e5031159027f6") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-hl-prog-extra"))])
- (hl-sentence . [(20171018 1519) nil "highlight a sentence based on customizable face" single ((:commit . "86ae38d3103bd20da5485cbdd59dfbd396c45ee4") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainers ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net") (:keywords "highlighting") (:url . "http://github.com/milkypostman/hl-sentence"))])
- (hl-todo . [(20230428 1332) ((emacs (25 1)) (compat (29 1 3 4))) "Highlight TODO and similar keywords" single ((:commit . "b27cddf7373408681cc949c8ef829f87a01ed3f3") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/hl-todo"))])
- (hledger-mode . [(20221116 2203) ((emacs (24 4)) (popup (0 5 3)) (async (1 9)) (htmlize (1 47))) "A mode for writing journal entries for hledger." tar ((:commit . "07baa57017e1b7703560363a6e1948b630a5158d") (:authors ("Narendra Joshi" . "narendraj9@gmail.com")) (:maintainers ("Narendra Joshi" . "narendraj9@gmail.com")) (:maintainer "Narendra Joshi" . "narendraj9@gmail.com") (:keywords "data") (:url . "https://github.com/narendraj9/hledger-mode.git"))])
- (hlint-refactor . [(20190115 900) nil "Apply HLint suggestions" single ((:commit . "c4307f86aad6d02e32e9b30cb6edc115584c791c") (:keywords "haskell" "refactor") (:url . "https://github.com/mpickering/hlint-refactor-mode"))])
- (hlinum . [(20180422 412) ((cl-lib (0 2))) "Extension for linum.el to highlight current line number" single ((:commit . "f17360fe93de6df99a05b4b64b0a1ca4ee45abb6") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "convenience" "extensions") (:url . "https://github.com/tom-tan/hlinum-mode/"))])
- (hmac . [(20201004 1819) ((emacs (25 1))) "Hash-based message authentication code" single ((:commit . "f2b99a9a10becfff207cf9418c6dce78364b1a4b") (:authors ("Sean McAfee")) (:maintainers ("Sean McAfee")) (:maintainer "Sean McAfee") (:url . "https://github.com/grimnebulin/emacs-hmac"))])
- (hnreader . [(20221117 650) ((emacs (25 1)) (promise (1 1)) (request (0 3 0)) (org (9 2))) "A hackernews reader" single ((:commit . "8444e177035e236e991f9ea73074c053a45426ad") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainers ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com") (:url . "https://github.com/thanhvg/emacs-hnreader/"))])
- (hoa-mode . [(20200610 1339) nil "Major mode for the HOA format" single ((:commit . "18f5c981e256f867f29a93376ccdc04717b159cd") (:authors ("Alexandre Duret-Lutz" . "adl@lrde.epita.fr")) (:maintainers ("Alexandre Duret-Lutz" . "adl@lrde.epita.fr")) (:maintainer "Alexandre Duret-Lutz" . "adl@lrde.epita.fr") (:keywords "major-mode" "automata" "convenience") (:url . "https://gitlab.lrde.epita.fr/spot/emacs-modes"))])
- (holiday-pascha-etc . [(20160822 58) nil "Eastern Christian analog to holiday-easter-etc" single ((:commit . "eb198656f63cb8679fb0e3a8248782df071a0f3c") (:authors ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org") (:url . "http://github.com/hexmode/holiday-pascha-etc"))])
- (holy-books . [(20211025 127) ((s (1 12 0)) (dash (2 16 0)) (emacs (27 1)) (org (9 1))) "Org-mode links/tooltips/lookups for Quran & Bible" single ((:commit . "02c2956d36631d3d8c8b4bacdcf0a5cdd1f3136d") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com") (:keywords "quran" "bible" "links" "tooltips" "convenience" "comm" "hypermedia") (:url . "https://alhassy.github.io/holy-books/"))])
- (home-end . [(20190109 541) ((emacs (24 3)) (keypress-multi-event (1 0))) "Smart multi-purpose home / end keys" single ((:commit . "30676ceec0d4ad84038cd0d65ee45ae810ab185c") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com") (:keywords "abbrev" "convenience" "wp" "keyboard") (:url . "https://www.github.com/Boruch_Baum/emacs-home-end"))])
- (homebrew-mode . [(20220907 1656) ((emacs (24 4)) (inf-ruby (2 4 0)) (dash (1 2 0))) "Minor mode for editing Homebrew formulae" single ((:commit . "e32da1397ce176766e39c286861ef4c40d64bbf5") (:authors ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainers ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainer "Alex Dunn" . "dunn.alex@gmail.com") (:keywords "languages" "homebrew" "brew" "ruby") (:url . "https://github.com/dunn/homebrew-mode"))])
- (honcho . [(20230224 420) ((emacs (26 1))) "Run and manage long-running services" single ((:commit . "95846309c6a4ce45f29f215d43847beb510b6aca") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/honcho.el"))])
- (hookify . [(20141216 2209) ((s (1 9 0)) (dash (1 5 0))) "Interactive commands to create temporary hooks" single ((:commit . "e76127230716f7fab6662410c03c3872d17a172b") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:keywords "hook" "convenience") (:url . "https://github.com/Silex/hookify"))])
- (horizon-theme . [(20200720 1832) ((emacs (24 3))) "A beautifully warm dual theme" single ((:commit . "9595549c514a9376c61d5d303405f6a6982e9e46") (:url . "https://github.com/aodhneine/horizon-theme.el"))])
- (horoscope . [(20180409 641) ((emacs (24))) "generate horoscopes." single ((:commit . "f4c683e991adce0a8f9023f15050f306f9b9a9ed") (:authors ("Bob Manson" . "manson@cygnus.com")) (:maintainers ("Noah Friedman" . "friedman@prep.ai.mit.edu")) (:maintainer "Noah Friedman" . "friedman@prep.ai.mit.edu") (:keywords "extensions" "games") (:url . "https://github.com/mschuldt/horoscope.el"))])
- (hotfuzz . [(20230322 1318) ((emacs (27 1))) "Fuzzy completion style" single ((:commit . "f02edb699c5b9bb60a1372dde3f187dac7797c48") (:authors ("Axel Forsman" . "axelsfor@gmail.com")) (:maintainers ("Axel Forsman" . "axelsfor@gmail.com")) (:maintainer "Axel Forsman" . "axelsfor@gmail.com") (:keywords "matching") (:url . "https://github.com/axelf4/hotfuzz"))])
- (hound . [(20200122 1700) ((request (0 2 0)) (cl-lib (0 5))) "Display hound search results in a compilation window" single ((:commit . "35e2cdc81fcc904b450a7ef3ec00fd25df6a4431") (:authors ("Ryan Young")) (:maintainers ("Ryan Young")) (:maintainer "Ryan Young"))])
- (hover . [(20220129 1935) ((emacs (25 2)) (dash (2 14 1))) "Package to use hover with flutter" single ((:commit . "2b826735bb8d3bcfced489a1e0fa21b10fbc967e") (:authors ("Eric Dallo")) (:maintainers ("Eric Dallo")) (:maintainer "Eric Dallo") (:keywords "hover" "flutter" "mobile" "tools") (:url . "https://github.com/ericdallo/hover.el"))])
- (howdoi . [(20150204 43) nil "Instant coding answers via Emacs." tar ((:commit . "5fbf7069ee160c597a328e5ce5fb32920e1ca88f") (:authors ("Andrey Tykhonov <atykhonov at gmail.com>")) (:maintainer "Andrey Tykhonov" . "atykhonov@gmail.com") (:keywords "howdoi" "convenience") (:url . "https://github.com/atykhonov/emacs-howdoi/"))])
- (howdoyou . [(20220715 1720) ((emacs (25 1)) (promise (1 1)) (request (0 3 3)) (org (9 2))) "A stackoverflow and its sisters' sites reader" single ((:commit . "f6c659a45f59a08546578c169524a12f0945c29b") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainers ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com") (:url . "https://github.com/thanhvg/howdoyou/"))])
- (howm . [(20230218 818) ((cl-lib (0 5))) "Wiki-like note-taking tool" tar ((:commit . "ffc1e7da1f02f750094a9f0fe8a0aa837743193b") (:authors ("HIRAOKA Kazuyuki" . "khi@users.osdn.me")) (:maintainers ("HIRAOKA Kazuyuki" . "khi@users.osdn.me")) (:maintainer "HIRAOKA Kazuyuki" . "khi@users.osdn.me") (:url . "https://howm.osdn.jp"))])
- (hsluv . [(20181127 1206) ((seq (2 20))) "hsluv color space conversions" single ((:commit . "bc6e27d25b62f5a2f79836a32e8de6125f4d1564") (:authors ("Geert Vermeiren")) (:maintainers ("Geert Vermeiren")) (:maintainer "Geert Vermeiren") (:keywords "color" "hsluv") (:url . "https://github.com/hsluv/hsluv-emacs"))])
- (ht . [(20230214 1632) ((dash (2 12 0))) "The missing hash table library for Emacs" single ((:commit . "3c1677f1bf2ded2ab07edffb7d17def5d2b5b6f6") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "hash table" "hash map" "hash"))])
- (html-check-frag . [(20201106 1748) ((emacs (24 3))) "Check html-fragments" single ((:commit . "b9d1f2003a126c2e8b6d469964ec2278ad55c9df") (:authors ("Tobias.Zawada" . "i@tn-home.de")) (:maintainers ("Tobias.Zawada" . "i@tn-home.de")) (:maintainer "Tobias.Zawada" . "i@tn-home.de") (:keywords "html"))])
- (html-script-src . [(20130807 918) nil "Insert <script src=\"..\"> for popular JavaScript libraries" single ((:commit . "ed5e686ab604c81222c7e50b27c5d874c5687db7") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "tools" "convenience") (:url . "http://github.com/rejeep/html-script-src"))])
- (html-to-hiccup . [(20230120 1416) ((emacs (25 1)) (dash (2 13 0)) (s (1 10 0))) "Convert HTML to Hiccup syntax" single ((:commit . "12f12fe3165eebbcf17e6209693c8e7251ffa04c") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:keywords "html" "hiccup" "clojure" "convenience" "tools") (:url . "https://github.com/plexus/html-to-hiccup"))])
- (html-to-markdown . [(20151105 840) ((cl-lib (0 5))) "HTML to Markdown converter written in Emacs-lisp." single ((:commit . "60c5498c801be186478cf7c05be05b4430c4a144") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "tools" "wp" "languages") (:url . "http://github.com/Bruce-Connor/html-to-markdown"))])
- (html2org . [(20170418 501) ((emacs (24 4))) "Convert html to org format text" single ((:commit . "6904aed40259ad8afccff079ebd8a07bff319ebc") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "html" "org") (:url . "http://github.com/lujun9972/html2org.el"))])
- (htmlize . [(20210825 2150) nil "Convert buffer text and decorations to HTML." single ((:commit . "dd27bc3f26efd728f2b1f01f9e4ac4f61f2ffbf9") (:authors ("Hrvoje Niksic" . "hniksic@gmail.com")) (:maintainers ("Hrvoje Niksic" . "hniksic@gmail.com")) (:maintainer "Hrvoje Niksic" . "hniksic@gmail.com") (:keywords "hypermedia" "extensions") (:url . "https://github.com/hniksic/emacs-htmlize"))])
- (htmltagwrap . [(20220704 652) ((emacs (24 4))) "Wraps a chunk of HTML code in tags" single ((:commit . "477d44d1ee38dd2033883bfe9e03f6f9acdfa49d") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs-elpa/htmltagwrap"))])
- (http . [(20201010 920) ((emacs (24 4)) (request (0 2 0)) (edit-indirect (0 1 4))) "Yet another HTTP client" single ((:commit . "5fdceed1fbf36e274e578e349a53ce922c574774") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/http.el"))])
- (http-post-simple . [(20170715 940) nil "HTTP POST requests using the url library" single ((:commit . "f53697fca278c741051aeb668b00466b5e0fd3fe") (:authors ("Tom Schutzer-Weissmann")) (:maintainers ("Tom Schutzer-Weissmann")) (:maintainer "Tom Schutzer-Weissmann") (:keywords "comm" "data" "processes" "hypermedia"))])
- (http-twiddle . [(20221203 1351) nil "send & twiddle & resend HTTP requests" single ((:commit . "c07e8620183ec710623db35e26dd839b84c56007") (:authors ("Luke Gorrie" . "luke@synap.se")) (:maintainers ("Hasan Veldstra" . "h@vidiowiki.com")) (:maintainer "Hasan Veldstra" . "h@vidiowiki.com") (:keywords "http" "rest" "soap") (:url . "https://github.com/hassy/http-twiddle/blob/master/http-twiddle.el"))])
- (httpcode . [(20121002 345) nil "explains the meaning of an HTTP status code" single ((:commit . "a45e735082b09477cd704a99294d336cdbeb12ba") (:authors ("Ruslan Spivak" . "ruslan.spivak@gmail.com")) (:maintainers ("Ruslan Spivak" . "ruslan.spivak@gmail.com")) (:maintainer "Ruslan Spivak" . "ruslan.spivak@gmail.com") (:url . "http://github.com/rspivak/httpcode.el"))])
- (httprepl . [(20141101 1734) ((s (1 9 0)) (dash (2 5 0)) (emacs (24))) "An HTTP REPL" single ((:commit . "cfa3693267a8ed1c96a86a126823f37dbfe077d8") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainers ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com") (:keywords "http" "repl") (:url . "https://github.com/gregsexton/httprepl.el"))])
- (huecycle . [(20210830 340) ((emacs (27 1))) "Idle color animation" single ((:commit . "a05e32351dcff3e61b5f15800556adfe1939c112") (:authors ("Phillip O'Reggio <https://github.com/pnor>")) (:maintainers ("Phillip O'Reggio")) (:maintainer "Phillip O'Reggio") (:keywords "faces") (:url . "https://github.com/pnor/huecycle"))])
- (hugsql-ghosts . [(20211124 1646) ((s (1 9 0)) (dash (2 10 0)) (cider (0 14 0))) "Display hugsql defqueries in clojure code as an overlay" single ((:commit . "f9ab314b6a10140041233e65a23e924dcab9a7a3") (:authors ("Roland Kaercher" . "roland.kaercher@gmail.com")) (:maintainers ("Roland Kaercher" . "roland.kaercher@gmail.com")) (:maintainer "Roland Kaercher" . "roland.kaercher@gmail.com") (:url . "https://github.com/rkaercher/hugsql-ghosts"))])
- (humanoid-themes . [(20230308 2129) ((emacs (24 3))) "Color themes with a dark and light variant" tar ((:commit . "d6d41b365501650c18939c3394762bc163c87e40") (:authors ("Thomas Friese")) (:maintainers ("Thomas Friese")) (:maintainer "Thomas Friese") (:keywords "faces" "color" "theme") (:url . "https://github.com/humanoid-colors/emacs-humanoid-themes"))])
- (hungarian-holidays . [(20161020 1138) nil "Adds a list of Hungarian public holidays to Emacs calendar" single ((:commit . "653108769279499d84a79267c90e640d98823872") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainers ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu") (:keywords "calendar"))])
- (hungry-delete . [(20210409 1643) nil "hungry delete minor mode" single ((:commit . "d919e555e5c13a2edf4570f3ceec84f0ade71657") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:url . "http://github.com/nflath/hungry-delete"))])
- (hy-mode . [(20211016 2011) ((dash (2 18 0)) (s (1 11 0)) (emacs (24))) "Major mode for Hylang" tar ((:commit . "df814865a1faa8414dacdbb35b2a9029995312ec") (:keywords "languages" "lisp" "python") (:url . "http://github.com/hylang/hy-mode"))])
- (hyai . [(20170301 1447) ((cl-lib (0 5)) (emacs (24))) "Haskell Yet Another Indentation" single ((:commit . "e9a7e945fed12d8e664e898cf8b434b0376d5d80") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/hyai"))])
- (hybrid-reverse-theme . [(20220921 1345) ((emacs (24 1))) "Emacs theme with material color scheme" single ((:commit . "5c60e7428d3c135c5f027d09f4474ed776f80d8d") (:authors ("Riyyi")) (:maintainers ("Riyyi")) (:maintainer "Riyyi") (:keywords "faces" "theme") (:url . "https://github.com/riyyi/emacs-hybrid-reverse"))])
- (hydandata-light-theme . [(20190809 1925) nil "A light color theme that is easy on your eyes" single ((:commit . "812ffa4bee3163098ef66ee4506feed45018be4e") (:authors ("David Chkhikvadze" . "david@chkhd.net")) (:maintainers ("David Chkhikvadze" . "david@chkhd.net")) (:maintainer "David Chkhikvadze" . "david@chkhd.net") (:keywords "color-theme" "theme") (:url . "https://github.com/chkhd/hydandata-light-theme"))])
- (hyde . [(20160508 308) nil "Major mode to help create and manage Jekyll blogs" tar ((:commit . "a8cd6ed00ecd8d7de0ded2f4867015b412b15b76"))])
- (hydra . [(20220910 1206) ((cl-lib (0 5)) (lv (0))) "Make bindings that stick around." tar ((:commit . "317e1de33086637579a7aeb60f77ed0405bf359b") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "bindings") (:url . "https://github.com/abo-abo/hydra"))])
- (hyperdrive . [(20230507 649) ((emacs (27 1)) (map (3 0)) (compat (29 1 3 2)) (plz (0 5 4)) (persist (0 5))) "P2P filesystem in Emacs" tar ((:commit . "d820c3b67686899d8b17cc5133d293a7c3396b1a") (:authors ("Joseph Turner")) (:maintainers ("Joseph Turner" . "joseph@ushin.org")) (:maintainer "Joseph Turner" . "joseph@ushin.org") (:url . "https://git.sr.ht/~ushin/hyperdrive.el"))])
- (hyperkitty . [(20220226 1951) ((request (0 3 2)) (emacs (25 1))) "Emacs interface for Hyperkitty archives" single ((:commit . "2c1d22ff017d096c359aa151e6a29f7214a58118") (:authors ("Abhilash Raj" . "maxking@asynchronous.in")) (:maintainers ("Abhilash Raj" . "maxking@asynchronous.in")) (:maintainer "Abhilash Raj" . "maxking@asynchronous.in") (:keywords "mail" "hyperkitty" "mailman") (:url . "https://github.com/maxking/hyperkitty.el"))])
- (hyperlist-mode . [(20230119 28) ((emacs (24))) "A major-mode for viewing Hyperlists" single ((:commit . "480dbf33ca72e7b5fade952aaf0d5a5eb43acb1d") (:authors ("Wojciech Siewierski")) (:maintainers ("Wojciech Siewierski")) (:maintainer "Wojciech Siewierski") (:keywords "outlines") (:url . "https://github.com/vifon/hyperlist-mode"))])
- (hyperspace . [(20210603 1825) ((emacs (25)) (s (1 12 0))) "Get there from here" single ((:commit . "c4c363c140250ba6b775516082063878975a6154") (:authors ("Ian Eure" . "ian@retrospec.tv")) (:maintainers ("Ian Eure" . "ian@retrospec.tv")) (:maintainer "Ian Eure" . "ian@retrospec.tv") (:keywords "tools" "convenience") (:url . "https://github.com/ieure/hyperspace-el"))])
- (i-ching . [(20220619 817) ((emacs (25 1)) (request (0 3))) "The Book of Changes" tar ((:commit . "54f19e2dcb1d16735b94fc7e06a2aa8b1b6f165a") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "games" "divination" "stochastism" "cleromancy" "change") (:url . "https://github.com/zzkt/i-ching"))])
- (i2b2-mode . [(20140710 104) nil "Highlights corresponding PHI data in the text portion of an i2b2 XML Document." single ((:commit . "db10efcfc8bed369a516bbf7526ede41f98cb95a") (:authors ("Dan LaManna" . "dan.lamanna@gmail.com")) (:maintainers ("Dan LaManna" . "dan.lamanna@gmail.com")) (:maintainer "Dan LaManna" . "dan.lamanna@gmail.com") (:keywords "xml" "phi" "i2b2" "deidi2b2"))])
- (i3bar . [(20220808 1551) ((emacs (28 1))) "Display status from an i3status command in the tab bar" single ((:commit . "7c182fef33578ae32f945758123601396de227d0") (:authors ("Steven Allen" . "steven@stebalien.com")) (:maintainers ("Steven Allen" . "steven@stebalien.com")) (:maintainer "Steven Allen" . "steven@stebalien.com") (:keywords "unix") (:url . "https://github.com/Stebalien/i3bar.el"))])
- (i3wm . [(20170822 1438) nil "i3wm integration library" single ((:commit . "71391dc61063fee77ad174f3b2ca25c60b41009e") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "convenience" "extensions") (:url . "https://git.flintfam.org/swf-projects/emacs-i3"))])
- (i3wm-config-mode . [(20220913 1121) ((emacs (24 1))) "Better syntax highlighting for i3wm's config file" single ((:commit . "188e3978807ec39eba3cb69d973c0062af324215") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:keywords "faces" "languages" "i3wm" "font-lock") (:url . "https://github.com/Alexander-Miller/i3wm-Config-Mode"))])
- (ialign . [(20220629 1241) ((emacs (24 4))) "visual align-regexp" single ((:commit . "bc4d30d79f2f4b413288195ef19894ac0fd258b7") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com") (:keywords "tools" "editing" "align" "interactive") (:url . "https://github.com/mkcms/interactive-align"))])
- (iasm-mode . [(20171023 1422) nil "interactive assembly major mode." single ((:commit . "abbec7f308f9ce97beeb57e459fff35f559b4c18") (:authors ("Rémi Attab" . "remi.attab@gmail.com")) (:maintainers ("Rémi Attab" . "remi.attab@gmail.com")) (:maintainer "Rémi Attab" . "remi.attab@gmail.com") (:keywords ":" "tools") (:url . "https://github.com/RAttab/iasm-mode"))])
- (ibrowse . [(20230123 737) ((emacs (27 1))) "Interact with your browser" tar ((:commit . "b42685528d7bb2ca968fbf536d8745838e633828") (:authors ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainers ("Nicolas Graves" . "ngraves@ngraves.fr")) (:maintainer "Nicolas Graves" . "ngraves@ngraves.fr") (:keywords "comm" "data" "files" "tools") (:url . "https://git.sr.ht/~ngraves/ibrowse.el"))])
- (ibuffer-git . [(20110508 731) nil "show git status in ibuffer column" single ((:commit . "d326319c05ddb8280885b31f9094040c1b365876") (:authors ("Jonathan Rockway" . "jon@jrock.us")) (:maintainers ("Jonathan Rockway" . "jon@jrock.us")) (:maintainer "Jonathan Rockway" . "jon@jrock.us") (:keywords "convenience"))])
- (ibuffer-project . [(20220321 1312) ((emacs (25 1))) "Group ibuffer's list by project or any function" single ((:commit . "bfc0ec1f27b02b8ab816dcfd9073e5d78dae1aed") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:keywords "tools") (:url . "https://github.com/muffinmad/emacs-ibuffer-project"))])
- (ibuffer-projectile . [(20200805 604) ((projectile (0 11 0)) (emacs (24 1))) "Group ibuffer's list by projectile root" single ((:commit . "ecbe482804a217b1471593f6c7a8b3d64f3cdc47") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience") (:url . "https://github.com/purcell/ibuffer-projectile"))])
- (ibuffer-rcirc . [(20150215 2118) ((cl-lib (0 2))) "Ibuffer integration for rcirc" single ((:commit . "8a4409b1c679d65c819dee4085faf929840e79f8") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainers ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org") (:keywords "buffer" "convenience" "comm") (:url . "https://github.com/fgallina/ibuffer-rcirc"))])
- (ibuffer-sidebar . [(20210508 836) ((emacs (25 1))) "Sidebar for `ibuffer'" single ((:commit . "fb685e1e43db979e25713081d8ae4073453bbd5e") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "ibuffer" "files" "tools") (:url . "https://github.com/jojojames/ibuffer-sidebar"))])
- (ibuffer-tramp . [(20180127 2122) nil "Group ibuffer's list by TRAMP connection" single ((:commit . "bcad0bda3a67f55d1be936bf8fa9ef735fe1e3f3") (:authors ("Svend Sorensen" . "svend@ciffer.net")) (:maintainers ("Svend Sorensen" . "svend@ciffer.net")) (:maintainer "Svend Sorensen" . "svend@ciffer.net") (:keywords "convenience") (:url . "http://github.com/svend/ibuffer-tramp"))])
- (ibuffer-vc . [(20221215 1752) ((emacs (25 1))) "Group ibuffer's list by VC project, or show VC status" single ((:commit . "9204001d1c5ca39409485c1574fd315b0e137a92") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience") (:url . "https://github.com/purcell/ibuffer-vc"))])
- (iceberg-theme . [(20220622 1) ((emacs (26 1)) (solarized-theme (1 3))) "Well-designed, eye-friendly, dark blue color scheme" single ((:commit . "c9fdf9a8f5ff417c206730a84731f64a95483935") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/iceberg-theme.el"))])
- (icl-mode . [(20221003 2316) ((emacs (25 2))) "Support for IEEE 1687 ICL/PDL" single ((:commit . "1ef19c3c1c7f2667796907391d5337bbc2d73df3") (:authors ("Troy Hinckley" . "troy.hinckley@dabrev.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@dabrev.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@dabrev.com") (:url . "https://github.com/CeleritasCelery/icl-mode"))])
- (icomplete-vertical . [(20220418 2119) ((emacs (26 1))) "Display icomplete candidates vertically" tar ((:commit . "f5775d535630199703c936380d210d38249b342c") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx") (:keywords "convenience" "completion") (:url . "https://github.com/oantolin/icomplete-vertical"))])
- (icsql . [(20210630 1606) ((emacs (26)) (choice-program (0 13)) (buffer-manage (0 12))) "Interactive iSQL iteraface to ciSQL" single ((:commit . "4521e9d2debef7687bfd26a664479f0c46688a36") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "isql" "sql" "rdbms" "data") (:url . "https://github.com/plandes/icsql"))])
- (id-manager . [(20170320 1246) nil "id-password management" single ((:commit . "14ebc35db298aac4dedc8aa188bc46bacab81f3b") (:authors ("SAKURAI Masashi <m.sakurai atmark kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai atmark kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai atmark kiwanami.net>") (:keywords "password" "convenience"))])
- (idea-darkula-theme . [(20160416 2303) ((emacs (24 1))) "Color theme based on IntelliJ IDEA Darkula color theme" single ((:commit . "52602d9b91883e1f297d000951aeed48bf60176e") (:authors ("Alexey Veretennikov <alexey dot veretennikov at gmail dot com>")) (:maintainers ("Alexey Veretennikov <alexey dot veretennikov at gmail dot com>")) (:maintainer "Alexey Veretennikov <alexey dot veretennikov at gmail dot com>") (:keywords "themes") (:url . "http://github.com/fourier/idea-darkula-theme"))])
- (identica-mode . [(20130204 2253) nil "Major mode API client for status.net open microblogging" tar ((:commit . "cf9183ee11ac922e85c7c908f04e2d00b03111b3") (:authors ("Gabriel Saldana" . "gsaldana@gmail.com")) (:maintainers ("Gabriel Saldana" . "gsaldana@gmail.com")) (:maintainer "Gabriel Saldana" . "gsaldana@gmail.com") (:keywords "identica" "web") (:url . "http://blog.gabrielsaldana.org/identica-mode-for-emacs/"))])
- (idle-highlight-in-visible-buffers-mode . [(20181027 1531) nil "highlight the word the point is on" single ((:commit . "8d8de309d5bd4b035c01bf7f0cfc6e079c79d898") (:authors ("Ignacy Moryc")) (:maintainers ("Ignacy Moryc")) (:maintainer "Ignacy Moryc") (:keywords "convenience") (:url . "https://github.com/ignacy/idle-highlight-in-visible-buffers"))])
- (idle-highlight-mode . [(20230319 810) ((emacs (27 1))) "Highlight the word the point is on" single ((:commit . "f9091c907d41e7b12d99d108a194229b8dbfc5ae") (:authors ("Phil Hagelberg, Cornelius Mika, Campbell Barton")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-idle-highlight-mode"))])
- (idle-org-agenda . [(20190106 1844) nil "Shows your agenda when editor is idle." single ((:commit . "bfdf1b4f4096acdd081b3549d6b838f4ca4f7d0d") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("Enis Özgen" . "mail@enisozgen.com")) (:maintainer "Enis Özgen" . "mail@enisozgen.com") (:keywords "org" "org-mode" "org-agenda" "calendar") (:url . "https://github.com/enisozgen/idle-org-agenda"))])
- (idle-require . [(20090715 2203) nil "load elisp libraries while Emacs is idle" single ((:commit . "33592bb098223b4432d7a35a1d65ab83f47c1ec1") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "internal") (:url . "http://nschum.de/src/emacs/idle-require/"))])
- (ido-at-point . [(20151113 1508) ((emacs (24))) "ido-style completion-at-point" single ((:commit . "e5907bbe8a3d148d07698b76bd994dc3076e16ee") (:authors ("katspaugh")) (:maintainers ("katspaugh")) (:maintainer "katspaugh") (:keywords "convenience" "abbrev") (:url . "https://github.com/katspaugh/ido-at-point"))])
- (ido-complete-space-or-hyphen . [(20210206 1505) nil "Allow spaces to also match hyphens in ido" single ((:commit . "d1244243e042b8d5b6b991db752a17a44ea169bc") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org") ("Ian Yang <me (at) iany.me>")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org") (:keywords "ido" "completion" "convenience") (:url . "https://github.com/DarwinAwardWinner/ido-complete-space-or-hyphen"))])
- (ido-completing-read+ . [(20210529 1318) ((emacs (24 4)) (seq (0 5)) (memoize (1 1))) "A completing-read-function using ido" single ((:commit . "00674721e4fce283c918f7316f1158da1d469910") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainers ("Ryan C. Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C. Thompson" . "rct@thompsonclan.org") (:keywords "ido" "completion" "convenience") (:url . "https://github.com/DarwinAwardWinner/ido-completing-read-plus"))])
- (ido-exit-target . [(20170717 1851) ((emacs (24 4))) "Commands and keys for selecting other window and frame targets within ido" single ((:commit . "e56fc6928649c87ccf39d56d84ab53ebaced1f73") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainers ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com") (:keywords "convenience" "tools" "extensions") (:url . "https://github.com/waymondo/ido-exit-target"))])
- (ido-flex-with-migemo . [(20190408 350) ((flx-ido (0 6 1)) (migemo (1 9 1)) (emacs (24 4))) "use ido with flex and migemo" single ((:commit . "aa93aa05947eb6c106bb9523ff3163b8574c4eac") (:authors ("ROCKTAKEY " . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY " . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY " . "rocktakey@gmail.com") (:keywords "matching") (:url . "https://github.com/ROCKTAKEY/ido-flex-with-migemo"))])
- (ido-gnus . [(20140216 1646) ((gnus (5 13))) "Access gnus groups or servers using ido" single ((:commit . "f5fe3f6aa8086f675ba216abace9e3d5f2e3a089") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "comm") (:url . "https://github.com/vapniks/ido-gnus"))])
- (ido-grid-mode . [(20160122 1139) ((emacs (24 4))) "Display ido-prospects in the minibuffer in a grid." single ((:commit . "7cfca3988a6dc3ad18e28abe114218095ff2366f") (:authors ("Tom Hinton")) (:maintainers ("Tom Hinton" . "t@larkery.com")) (:maintainer "Tom Hinton" . "t@larkery.com") (:keywords "convenience") (:url . "https://github.com/larkery/ido-grid-mode.el"))])
- (ido-hacks . [(20190206 2153) nil "Put more IDO in your IDO" single ((:commit . "d2153a3e8d23436ee07ecae2a106f434361a10c5") (:authors ("Andreas Politz")) (:maintainers ("Scott Jaderholm" . "jaderholm@gmail.com")) (:maintainer "Scott Jaderholm" . "jaderholm@gmail.com") (:keywords "convenience"))])
- (ido-load-library . [(20140611 1600) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Load-library alternative using ido-completing-read" single ((:commit . "f439559721c5fecb2572dcaf3e357c5d94a20f4a") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "maint" "completion") (:url . "http://github.com/rolandwalker/ido-load-library"))])
- (ido-migemo . [(20191017 1919) ((migemo (1 9 1))) "Migemo plug-in for Ido" single ((:commit . "09a2cc175b500cab7655a25ffc982e78d46ca669") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "files") (:url . "https://github.com/myuhe/ido-migemo.el"))])
- (ido-occasional . [(20150214 1248) ((emacs (24 1))) "Use ido where you choose." single ((:commit . "d405f1795e1e0c63be411ee2825184738d29c33a") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "completion") (:url . "https://github.com/abo-abo/ido-occasional"))])
- (ido-select-window . [(20131220 2047) ((emacs (24 1))) "Select a window using ido and buffer names" single ((:commit . "946db3db7a3fec582cc1a0097877f1250303b53a") (:authors ("Peter Jones" . "pjones@devalot.com")) (:maintainers ("Peter Jones" . "pjones@devalot.com")) (:maintainer "Peter Jones" . "pjones@devalot.com") (:url . "https://github.com/pjones/ido-select-window"))])
- (ido-skk . [(20151111 950) ((emacs (24 4)) (ddskk (20150912 1820))) "ido interface for skk henkan" single ((:commit . "89a2e62799bff2841ff634517c86084c4ce69246") (:authors ("tsukimizake <shomasd_at_gmail.com>")) (:maintainers ("tsukimizake <shomasd_at_gmail.com>")) (:maintainer "tsukimizake <shomasd_at_gmail.com>") (:keywords "languages") (:url . "https://github.com/tsukimizake/ido-skk"))])
- (ido-sort-mtime . [(20171121 859) nil "Sort Ido's file list by modification time" single ((:commit . "f638ff0c922af862f5211779f2311a27fde428eb") (:authors ("Paweł Kraśnicki")) (:maintainers ("Paweł Kraśnicki")) (:maintainer "Paweł Kraśnicki") (:keywords "convenience" "files"))])
- (ido-springboard . [(20170106 755) nil "Temporarily change default-directory for one command" single ((:commit . "263a8cd4582c81bfc29d7db37d5267e2488b148c") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:keywords "ido") (:url . "https://github.com/jwiegley/springboard"))])
- (ido-vertical-mode . [(20210205 436) ((emacs (24 4))) "Makes ido-mode display vertically" single ((:commit . "b1659e967da0687abceca733b389ace24004fa66") (:authors ("Steven Degutis")) (:maintainers ("Christopher Reichert" . "creichert07@gmail.com")) (:maintainer "Christopher Reichert" . "creichert07@gmail.com") (:keywords "convenience") (:url . "https://github.com/creichert/ido-vertical-mode.el"))])
- (ido-yes-or-no . [(20161108 2351) ((ido-completing-read+ (0))) "Use Ido to answer yes-or-no questions" single ((:commit . "8953eadaaa7811ebc66d8a9eb7ac43f38913ab59") (:authors ("Ryan C. Thompson")) (:maintainers ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:keywords "convenience" "completion" "ido") (:url . "https://github.com/DarwinAwardWinner/ido-yes-or-no"))])
- (idomenu . [(20141123 2120) nil "imenu tag selection a la ido" single ((:commit . "4b0152d606360c70204fb4c27f68de79ca885386") (:authors ("Georg Brandl" . "georg@python.org")) (:maintainers ("Georg Brandl" . "georg@python.org")) (:maintainer "Georg Brandl" . "georg@python.org"))])
- (idris-mode . [(20230210 2150) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) "Major mode for editing Idris code" tar ((:commit . "788f53520db8042fb6dbc56779a9439da0dd6693") (:keywords "languages") (:url . "https://github.com/idris-hackers/idris-mode"))])
- (ids-edit . [(20170818 1502) ((emacs (24 3))) "IDS (Ideographic Description Sequence) editing tool" tar ((:commit . "8562a6cbfb3f2d44bc6f62ab15081a80f8fee502") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "i18n" "wp") (:url . "http://github.com/kawabata/ids-edit"))])
- (iedit . [(20220216 717) nil "Edit multiple regions in the same way simultaneously." tar ((:commit . "dd5d75b38ee0c52ad81245a8e5c932d3f5c4772d") (:authors ("Victor Ren" . "victorhge@gmail.com")) (:maintainers ("Victor Ren" . "victorhge@gmail.com")) (:maintainer "Victor Ren" . "victorhge@gmail.com") (:keywords "occurrence" "region" "simultaneous" "refactoring") (:url . "https://github.com/victorhge/iedit"))])
- (ietf-docs . [(20190420 851) nil "Fetch, Cache and Load IETF documents" single ((:commit . "ae157549eae5ec78dcbf215c2f48cb662b73abd0") (:authors ("Christian E. Hopps" . "chopps@gmail.com")) (:maintainers ("Christian E. Hopps" . "chopps@gmail.com")) (:maintainer "Christian E. Hopps" . "chopps@gmail.com") (:keywords "ietf" "rfc") (:url . "https://github.com/choppsv1/ietf-docs"))])
- (iflipb . [(20220612 858) nil "Interactively flip between recently visited buffers" single ((:commit . "9ec1888335107bd314e8f40b3e113d525fed8083") (:authors ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainers ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainer "Joel Rosdahl" . "joel@rosdahl.net") (:url . "https://github.com/jrosdahl/iflipb"))])
- (ignoramus . [(20220611 1514) ((emacs (24 3))) "Ignore backups, build files, et al." single ((:commit . "f5e4a66191be12c2fc3cf42a5e0849fcc8518a3f") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "convenience" "tools") (:url . "http://github.com/rolandwalker/ignoramus"))])
- (igv . [(20141210 1227) nil "Control Integrative Genomic Viewer within Emacs" single ((:commit . "47ac6ceede252f451348a2c696398c0cb5279555") (:authors ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainers ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainer "Stefano Barbi" . "stefanobarbi@gmail.com"))])
- (image+ . [(20150707 1616) ((cl-lib (0 3))) "Image manipulate extensions for Emacs" single ((:commit . "6834d0c09bb4df9ecc0d7a559bd7827fed48fffc") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "multimedia" "extensions") (:url . "https://github.com/mhayashi1120/Emacs-imagex"))])
- (image-archive . [(20150621 132) ((emacs (24)) (cl-lib (0 5))) "Image thumbnails in archive file with non-blocking" single ((:commit . "4cf0edabfd6a4da2ffb920ff1e5009a002fc1e53") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "multimedia") (:url . "https://github.com/mhayashi1120/Emacs-image-archive"))])
- (image-dired+ . [(20150430 544) ((cl-lib (0 3))) "Image-dired extensions" single ((:commit . "b68094625d963056ad64e0e44af0e2266b2eadc7") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "extensions" "multimedia") (:url . "https://github.com/mhayashi1120/Emacs-image-diredx"))])
- (imakado . [(20141024 923) nil "imakado's usefull macros and functions" single ((:commit . "00a1e7eea2cb9e9066343a23927d6c747707902f") (:authors ("imakado <ken.imakado_at_gmail.com>")) (:maintainers ("imakado")) (:maintainer "imakado") (:keywords "convenience") (:url . "https://github.com/imakado/emacs-imakado"))])
- (imake . [(20230212 2016) ((emacs (25 1)) (compat (29 1 3 4))) "Simple, opinionated make target runner" single ((:commit . "e8c0f88fa56e3b73307f50a21ab664a4b1bb59eb") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/imake"))])
- (imapfilter . [(20180318 2222) nil "run the imapfilter executable" single ((:commit . "79bbbe918319bc1e8f42a0bef53dc7c77fe868ea") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "mail") (:url . "https://github.com/tarsius/imapfilter"))])
- (imbot . [(20210423 731) ((emacs (25 1))) "Automatic system input method switcher" tar ((:commit . "0e772b52f07e2a5a6601aff1ea2b9fe704696a62") (:keywords "convenience") (:url . "https://github.com/QiangF/imbot"))])
- (imenu-anywhere . [(20210201 1704) ((cl-lib (0 5)) (emacs (25))) "ido/ivy/helm imenu across same mode/project/etc buffers" single ((:commit . "06ec33d79e33edf01b9118aead1eabeae8ee08b1") (:authors ("Vitalie Spinu <spinuvit.list[ aaattt ]gmail[ dot ]com>")) (:maintainers ("Vitalie Spinu <spinuvit.list[ aaattt ]gmail[ dot ]com>")) (:maintainer "Vitalie Spinu <spinuvit.list[ aaattt ]gmail[ dot ]com>") (:keywords "ido" "imenu" "tags") (:url . "https://github.com/vitoshka/imenu-anywhere"))])
- (imenu-extra . [(20201229 1035) ((emacs (25 1))) "Add extra items into existing imenu items" single ((:commit . "68b0aaaefc18b267e4e383df36a8dfb7448bc83c") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "convenience") (:url . "https://github.com/redguardtoo/imenu-extra"))])
- (imenu-list . [(20210420 1200) ((emacs (24 3))) "Show imenu entries in a separate buffer" single ((:commit . "76f2335ee6f2f066d87fe4e4729219d70c9bc70d") (:authors ("Bar Magal (2015)")) (:maintainers ("Bar Magal (2015)")) (:maintainer "Bar Magal (2015)") (:url . "https://github.com/bmag/imenu-list"))])
- (imenus . [(20200730 855) ((cl-lib (0 5))) "Imenu for multiple buffers and without subgroups" single ((:commit . "90200f5f22377903b405082eabe185447968f3e2") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/alezost/imenus.el"))])
- (imgbb . [(20180609 1649) ((emacs (24)) (request (0 3 0))) "Simple image upload client for imgbb.com" single ((:commit . "a524a46263835aa474f908827ebab4e8fa586001") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net") (:keywords "extensions") (:url . "https://github.com/ecraven/imgbb.el"))])
- (immaterial-theme . [(20230219 1703) ((emacs (25))) "A flexible theme based on material design principles" tar ((:commit . "20417eaf6f349b3707e515d5d7817896243a8ad1") (:authors ("Peter Gardfjäll")) (:maintainers ("Peter Gardfjäll")) (:maintainer "Peter Gardfjäll") (:keywords "themes") (:url . "https://github.com/petergardfjall/emacs-immaterial-theme"))])
- (immortal-scratch . [(20160517 2118) nil "respawn the scratch buffer when it's killed" single ((:commit . "faeab0ad6c33c74c0cbd1dfcebffaa0690de40c6") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))])
- (immutant-server . [(20140311 2208) nil "Run your Immutant server in Emacs" single ((:commit . "2a21e65588acb6a976f2998e30b21fdabdba4dbb") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainers ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/immutant-server.el"))])
- (impatient-mode . [(20200723 2117) ((emacs (24 3)) (simple-httpd (1 5 0)) (htmlize (1 40))) "Serve buffers live over HTTP" tar ((:commit . "cbddfd54242210df3e1c3b590fada5bb5423f5ed") (:authors ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainers ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainer "Brian Taylor" . "el.wubo@gmail.com") (:url . "https://github.com/netguy204/imp.el"))])
- (impatient-showdown . [(20220730 1259) ((emacs (24 3)) (impatient-mode (1 1))) "Preview markdown buffer live over HTTP using showdown" tar ((:commit . "42855c318c5b6ff83dc2d748224b12cbfd487e93") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "live" "preview" "markdown" "http" "server" "impatient") (:url . "https://github.com/jcs-elpa/impatient-showdown"))])
- (import-js . [(20220215 1948) ((grizzl (0 1 0)) (emacs (24))) "Import Javascript dependencies" single ((:commit . "d2bbb53f96395415f9f01de4fa88d82c1f59ba63") (:authors ("Kevin Kehl" . "kevin.kehl@gmail.com")) (:maintainers ("Kevin Kehl" . "kevin.kehl@gmail.com")) (:maintainer "Kevin Kehl" . "kevin.kehl@gmail.com") (:keywords "javascript") (:url . "http://github.com/Galooshi/emacs-import-js/"))])
- (import-popwin . [(20170218 1407) ((emacs (24 3)) (popwin (0 6))) "popwin buffer near by import statements with popwin" single ((:commit . "bb05a9e226f8c63fe7b18a3e92010357049ab5ba") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-import-popwin"))])
- (importmagic . [(20180520 303) ((f (0 11 0)) (epc (0 1 0)) (emacs (24 3))) "Fix Python imports using importmagic." tar ((:commit . "e32ee9f6a5eef937b76eba82fdae8bae85d18088") (:authors ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainers ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainer "Nicolás Salas V." . "nikosalas@gmail.com") (:keywords "languages" "convenience") (:url . "https://github.com/anachronic/importmagic.el"))])
- (impostman . [(20230111 2012) ((emacs (27 1))) "Import Postman collections" single ((:commit . "936575500f733c2428ba878f9400f3eef8c9645e") (:authors ("Sébastien Helleu" . "flashcode@flashtux.org")) (:maintainers ("Sébastien Helleu" . "flashcode@flashtux.org")) (:maintainer "Sébastien Helleu" . "flashcode@flashtux.org") (:keywords "tools") (:url . "https://github.com/flashcode/impostman"))])
- (indent-control . [(20220930 2107) ((emacs (26 1))) "Management for indentation level" single ((:commit . "586b955dde5a0699fca76db28ad0d6c3e4141a27") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "control" "indent" "tab" "generic" "level") (:url . "https://github.com/jcs-elpa/indent-control"))])
- (indent-guide . [(20210115 400) nil "show vertical lines to guide indentation" single ((:commit . "d388c3387781a370ca13233ff445d03f3c5cf12f") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (indent-info . [(20210111 745) ((emacs (24 3))) "Show indentation information in status bar" single ((:commit . "05a787afeb9946714d8b0c724868195a678db49e") (:authors ("Terje Larsen" . "terlar@gmail.com")) (:maintainers ("Terje Larsen" . "terlar@gmail.com")) (:maintainer "Terje Larsen" . "terlar@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/terlar/indent-info.el"))])
- (indent-lint . [(20200812 949) ((emacs (25 1)) (async-await (1 0)) (async (1 9 4))) "Async indentation checker" single ((:commit . "c55f4ded11e8e50a96f43675a071354a8fb501c3") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tools") (:url . "https://github.com/conao3/indent-lint.el"))])
- (indent-tools . [(20210622 1207) ((s (0)) (hydra (0)) (yafolding (0))) "Indent, navigate (and more) by blocks of indentation: yaml, python etc." tar ((:commit . "c731f05fa3950e2e8580ec61b88abbc705639830") (:authors ("vindarel" . "vindarel@mailz.org")) (:maintainers ("vindarel" . "vindarel@mailz.org")) (:maintainer "vindarel" . "vindarel@mailz.org") (:keywords "indentation" "movements" "navigation" "kill" "fold" "yaml" "python") (:url . "https://gitlab.com/emacs-stuff/indent-tools/"))])
- (indian-ext . [(20190424 1547) ((emacs (24))) "Extension to Indian language utilities" single ((:commit . "a5450fe467393194bc2458c0d5e0a06c91bf117a") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainers ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org") (:keywords "i18n" "tools" "wp" "indian" "devanagari" "encoding") (:url . "https://github.com/paddymcall/indian-ext"))])
- (indicators . [(20161211 1126) ((dash (2 13 0)) (cl-lib (0 5 0))) "Display the buffer relative location of line in the fringe." single ((:commit . "f62a1201f21453e3aca93f48483e65ae8251432e") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "fringe" "frames") (:url . "https://github.com/Fuco1/indicators.el"))])
- (indium . [(20210309 1210) ((emacs (25)) (seq (2 16)) (js2-mode (20140114)) (js2-refactor (0 9 0)) (company (0 9 0)) (json-process-client (0 2 0))) "JavaScript Awesome Development Environment" tar ((:commit . "8499e156bf7286846c3a2bf8c9e0c4d4f24b224c") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:keywords "tools" "javascript") (:url . "https://github.com/NicolasPetton/indium"))])
- (indy . [(20190807 625) nil "A minor mode and EDSL to manage your mode's indentation rules." single ((:commit . "abc5bee424780ad2de5520f8fefbf8e120c0d9ed") (:authors ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainers ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainer "Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com") (:keywords "convenience" "matching" "tools"))])
- (inf-clojure . [(20230408 952) ((emacs (26 2)) (clojure-mode (5 11))) "Run an external Clojure process in an Emacs buffer" single ((:commit . "b153e5126419910c38691088aab569b7c281068c") (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "processes" "comint" "clojure") (:url . "http://github.com/clojure-emacs/inf-clojure"))])
- (inf-crystal . [(20180119 211) ((emacs (24 3)) (crystal-mode (0 1 0))) "Run a Inferior-Crystal process in a buffer" single ((:commit . "dd5c85e621976ea09b602182a15396e3b510ec63") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:keywords "languages" "crystal") (:url . "https://github.com/brantou/inf-crystal.el"))])
- (inf-elixir . [(20221120 2028) ((emacs (25 1))) "Run an interactive Elixir shell" single ((:commit . "6fbb0867b586ad1bf8adc09cc55f33dfa72db833") (:authors ("Jonathan Arnett" . "jonathan.arnett@protonmail.com")) (:maintainers ("Jonathan Arnett" . "jonathan.arnett@protonmail.com")) (:maintainer "Jonathan Arnett" . "jonathan.arnett@protonmail.com") (:keywords "languages" "processes" "tools") (:url . "https://github.com/J3RN/inf-elixir"))])
- (inf-mongo . [(20180408 1338) nil "Run a MongoDB shell process in a buffer" single ((:commit . "2e498d1c88bd1904eeec18ed06b1a0cf8bdc2a92") (:authors ("Tobias Svensson")) (:maintainers ("Tobias Svensson")) (:maintainer "Tobias Svensson") (:keywords "databases" "mongodb") (:url . "http://github.com/endofunky/inf-mongo"))])
- (inf-ruby . [(20230304 1512) ((emacs (24 3))) "Run a Ruby process in a buffer" single ((:commit . "6f1df882ab319758af43877fa20465f6566efbf3") (:authors ("Yukihiro Matsumoto") ("Nobuyoshi Nakada") ("Cornelius Mika" . "cornelius.mika@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru") ("Kyle Hargraves" . "pd@krh.me")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:keywords "languages" "ruby") (:url . "http://github.com/nonsequitur/inf-ruby"))])
- (inferior-islisp . [(20220924 1040) ((emacs (26 3)) (islisp-mode (0 2))) "Run inferior ISLisp processes" single ((:commit . "423b84fe4cc6944e36971225b3e19c888e7e4690") (:authors ("Fermin Munoz")) (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net") (:keywords "islisp" "lisp" "programming") (:url . "https://gitlab.com/sasanidas/islisp-mode"))])
- (inflections . [(20210110 2237) ((cl-lib (0 5)) (emacs (24))) "convert english words between singular and plural" single ((:commit . "55caa66a7cc6e0b1a76143fd40eff38416928941") (:authors ("Dmitry Galinsky, Howard Yeh")) (:maintainers ("Dmitry Galinsky, Howard Yeh")) (:maintainer "Dmitry Galinsky, Howard Yeh") (:keywords "languages" "tools" "wp") (:url . "https://github.com/eschulte/jump.el"))])
- (info-beamer . [(20210427 1033) ((emacs (24 4))) "Utilities for working with info-beamer" single ((:commit . "6b4cc29f1aec72d8e23b2c25a99cdd84e6cdc92b") (:authors ("Daniel Kraus" . "daniel@kraus.my")) (:maintainers ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my") (:keywords "tools" "processes" "comm") (:url . "https://github.com/dakra/info-beamer.el"))])
- (info-buffer . [(20170112 1422) nil "Display info topics in separate buffers" single ((:commit . "d35dad6e766c6e2ddb8dc6acb4ce5b6e10fbcaa7") (:authors ("Lluís Vilanova" . "vilanova@ac.upc.edu")) (:maintainers ("Lluís Vilanova" . "vilanova@ac.upc.edu")) (:maintainer "Lluís Vilanova" . "vilanova@ac.upc.edu") (:keywords "docs" "info") (:url . "http://www.github.com/llvilanova/info-buffer"))])
- (info-colors . [(20220927 1640) ((emacs (24)) (cl-lib (0 5))) "Extra colors for Info-mode" single ((:commit . "2e237c301ba62f0e0286a27c1abe48c4c8441143") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainers ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainer "Tuấn-Anh Nguyễn" . "ubolonton@gmail.com") (:keywords "faces") (:url . "https://github.com/ubolonton/info-colors"))])
- (info-rename-buffer . [(20200328 1450) ((emacs (24 3))) "Rename Info buffers to match manuals" single ((:commit . "87fb263b18717538fd04878e3358e1e720415db8") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org") (:keywords "help") (:url . "https://github.com/oitofelix/info-rename-buffer"))])
- (inform . [(20200723 500) ((emacs (25 1))) "Symbol links in Info buffers to their help documentation." tar ((:commit . "8ff0a19a9f40cfa8283da8ed73de94c35a327423") (:authors ("H. Dieter Wilhelm" . "dieter@duenenhof-wilhelm.de")) (:maintainer "H. Dieter Wilhelm") (:keywords "help" "docs" "convenience") (:url . "https://github.com/dieter-wilhelm/inform"))])
- (inform7 . [(20200430 1539) ((emacs (24 3)) (s (1 12 0))) "Major mode for working with Inform 7 files" single ((:commit . "a409bbc6f04264f7f00616a995fa6ecf59d33d0d") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com") (:keywords "languages") (:url . "https://github.com/GuiltyDolphin/inform7-mode"))])
- (inherit-local . [(20170409 1649) ((emacs (24 3))) "Inherited buffer-local variables" single ((:commit . "b1f4ff9c41f9d64e4adaf5adcc280b82f084cdc7") (:authors ("Shea Levy")) (:maintainers ("Shea Levy")) (:maintainer "Shea Levy") (:url . "https://github.com/shlevy/inherit-local/tree-master/"))])
- (inheritenv . [(20210204 354) ((emacs (24 4))) "Make temp buffers inherit buffer-local environment variables" single ((:commit . "13c0135ddd96519ddeb993ee21163d6e11b4f464") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "unix") (:url . "https://github.com/purcell/inheritenv"))])
- (ini . [(20220827 2009) ((emacs (24 4))) "Converting between INI files and association lists" single ((:commit . "d50fe629497d51c6390a56bbded1ad77ce12e5af") (:url . "https://github.com/EsaLaine/ini.el"))])
- (ini-mode . [(20230211 1512) ((emacs (24 1))) "Major mode for Windows-style ini files." single ((:commit . "5472abc94e564edc6b469c48d2324519a044a77c") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "languages" "faces") (:url . "https://github.com/Lindydancer/ini-mode"))])
- (init-loader . [(20210703 902) ((cl-lib (0 5))) "Loader for configuration files" single ((:commit . "ecab5a66b40227c4173992adfa5cfeae09f1657e") (:authors ("IMAKADO" . "ken.imakado@gmail.com")) (:maintainers ("IMAKADO" . "ken.imakado@gmail.com")) (:maintainer "IMAKADO" . "ken.imakado@gmail.com") (:url . "https://github.com/emacs-jp/init-loader/"))])
- (init-open-recentf . [(20220220 2004) ((emacs (24 4))) "Invoke a command immediately after startup" single ((:commit . "51463effe54ca9390ec339b9678968f35a40dbfd") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "files" "recentf" "after-init-hook") (:url . "https://github.com/zonuexe/init-open-recentf.el"))])
- (initsplit . [(20160919 1818) nil "code to split customizations into different files" single ((:commit . "c941d436eb2b10b01c76a582c5a2b23fb30751aa") (:authors ("John Wiegley <johnw@gnu.org>, Dave Abrahams" . "dave@boostpro.com")) (:maintainers ("John Wiegley <johnw@gnu.org>, Dave Abrahams" . "dave@boostpro.com")) (:maintainer "John Wiegley <johnw@gnu.org>, Dave Abrahams" . "dave@boostpro.com") (:keywords "lisp") (:url . "http://www.gci-net.com/users/j/johnw/emacs.html"))])
- (ink-mode . [(20201105 2242) ((emacs (26 1))) "Major mode for writing interactive fiction in Ink" tar ((:commit . "71d215712067729eb92e766a3b2067e7f3254183") (:authors ("Erik Sjöstrand") ("Damien Picard")) (:maintainers ("Damien Picard")) (:maintainer "Damien Picard") (:keywords "languages" "wp" "hypermedia") (:url . "https://github.com/Kungsgeten/ink-mode"))])
- (inkpot-theme . [(20230418 127) ((emacs (24 1))) "A port of vim's inkpot theme" single ((:commit . "8f0c4c85f69aeab53901c235b9c588689dea8f6c") (:authors ("Sarah Iovan" . "sarah@hwaetageek.com") ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Sarah Iovan" . "sarah@hwaetageek.com")) (:maintainer "Sarah Iovan" . "sarah@hwaetageek.com") (:url . "https://codeberg.org/ideasman42/emacs-inkpot-theme"))])
- (inline-crypt . [(20170824 900) nil "Simple inline encryption via openssl" tar ((:commit . "af4981c613bfd355d5ef34da1995a8384f167fd9") (:authors ("Daniel Ralston" . "Wubbulous@gmail.com")) (:maintainer "Daniel Ralston" . "Wubbulous@gmail.com") (:keywords "crypt") (:url . "https://github.com/Sodel-the-Vociferous/inline-crypt-el"))])
- (inline-docs . [(20230406 1002) ((emacs (24 3))) "Show inline contextual docs." single ((:commit . "8eb1c43b53a7f51cf74cb85529d108b5ce5efff5") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "inline" "docs" "overlay") (:url . "https://repo.or.cz/inline-docs.git"))])
- (inlineR . [(20191017 1920) nil "insert Tag for inline image of R graphics" single ((:commit . "bf6450a3540aa3538546d312324c41befd0a4e54") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience" "iimage.el" "cacoo.el") (:url . "https://github.com/myuhe/inlineR.el"))])
- (insecure-lock . [(20230426 53) ((emacs (28 1))) "Extensible screen lock framework" single ((:commit . "33b2cf4ecf80d948cf0942aa8bc1787d44c99941") (:authors ("Qiantan Hong" . "qhong@alum.mit.edu")) (:maintainers ("Qiantan Hong" . "qhong@alum.mit.edu")) (:maintainer "Qiantan Hong" . "qhong@alum.mit.edu") (:keywords "unix" "screensaver" "security") (:url . "https://github.com/BlueFlo0d/insecure-lock"))])
- (insert-char-preview . [(20201023 2108) ((emacs (24 1))) "Insert Unicode char" single ((:commit . "8f13262ebcb3f271f1d188584d04ca6d87214111") (:authors ("Matsievskiy S.V.")) (:maintainers ("Matsievskiy S.V.")) (:maintainer "Matsievskiy S.V.") (:keywords "convenience") (:url . "https://gitlab.com/matsievskiysv/insert-char-preview"))])
- (insert-esv . [(20201201 722) ((emacs (24 3)) (request (0 3 2))) "Insert ESV Bible passages" single ((:commit . "b6b47f1521f221e0c2a215f1f802708e10294422") (:authors ("Sam (sam030820)")) (:maintainers ("Sam (sam030820)")) (:maintainer "Sam (sam030820)") (:keywords "convenience") (:url . "https://github.com/sam030820/insert-esv/"))])
- (insert-kaomoji . [(20220215 1204) ((emacs (24 4))) "Easily insert kaomojis" tar ((:commit . "974bb7dc02059253e032c501b2c3c0ece448d472") (:authors ("Philip Kaludercic" . "philipk@posteo.net")) (:maintainers ("Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht")) (:maintainer "Philip Kaludercic" . "~pkal/public-inbox@lists.sr.ht") (:keywords "wp") (:url . "https://git.sr.ht/~pkal/insert-kaomoji"))])
- (insert-random . [(20230212 1710) ((emacs (24 5))) "Insert random characters from various character sets" single ((:commit . "a13827fd68457f939e46f95a662752f6f344107c") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "convenience") (:url . "https://github.com/lassik/emacs-insert-random"))])
- (insert-shebang . [(20201203 1648) nil "Insert shebang line automatically." single ((:commit . "cc8cea997a8523bce9f303de993af3a73eb0d2e2") (:authors ("Sachin Patil" . "iclcoolster@gmail.com")) (:maintainers ("Sachin Patil" . "iclcoolster@gmail.com")) (:maintainer "Sachin Patil" . "iclcoolster@gmail.com") (:keywords "shebang" "tool" "convenience") (:url . "https://gitlab.com/psachin/insert-shebang"))])
- (insfactor . [(20141117 2) nil "Client for a Clojure project with insfactor in it" single ((:commit . "7ef5446cebb08a17d4106d2e6f3c053e49e1e829") (:authors ("John D. Hume" . "duelin.markers@gmail.com")) (:maintainers ("John D. Hume" . "duelin.markers@gmail.com")) (:maintainer "John D. Hume" . "duelin.markers@gmail.com") (:keywords "clojure") (:url . "http://github.com/duelinmarkers/insfactor.el"))])
- (inspire . [(20230310 1557) ((emacs (27 1))) "an interface for inspirehep.net" single ((:commit . "9d15ced8e852135764de3c434753dbcf485b6bc1") (:authors ("Simon Lin" . "n.sibetz@gmail.com")) (:maintainers ("Simon Lin" . "n.sibetz@gmail.com")) (:maintainer "Simon Lin" . "n.sibetz@gmail.com") (:keywords "extensions" "tex") (:url . "https://github.com/Simon-Lin/inspire.el"))])
- (instapaper . [(20110419 1355) nil "No description available." single ((:commit . "4714ed1b014615f8213e6f93637e4ec1d9d5a37a") (:authors ("Jason F. McBrayer" . "jmcbray@carcosa.net")) (:maintainers ("Jason F. McBrayer" . "jmcbray@carcosa.net")) (:maintainer "Jason F. McBrayer" . "jmcbray@carcosa.net") (:url . "htts://bitbucket.org/jfm/emacs-instapaper"))])
- (intel-hex-mode . [(20180423 31) nil "Mode for Intel Hex files." single ((:commit . "e83c94e1c31a8435a88b3ae395f2bc842ef83217") (:maintainers ("Michael Schuldt" . "mbschuldt@gmail.com")) (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com") (:keywords "tools" "hex") (:url . "https://github.com/mschuldt/intel-hex-mode"))])
- (intellij-theme . [(20171017 1415) nil "Inspired by IntelliJ's default theme" single ((:commit . "1bbfff8e6742d18e9b77ed796f44da3b7bd10606") (:authors ("Vladimir Polushin" . "vovapolu@gmail.com")) (:maintainers ("Vladimir Polushin" . "vovapolu@gmail.com")) (:maintainer "Vladimir Polushin" . "vovapolu@gmail.com") (:keywords "faces"))])
- (interaction-log . [(20160305 1301) ((cl-lib (0))) "exhaustive log of interactions with Emacs" single ((:commit . "0f2d773269d1f7b93c9281226719113f5410cbd0") (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainers ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") (:keywords "convenience") (:url . "https://github.com/michael-heerdegen/interaction-log.el"))])
- (interval-list . [(20150327 1718) ((dash (2 4 0)) (cl-lib (0 5)) (emacs (24 4))) "Interval list data structure for 1D selections" single ((:commit . "38af7ecf0a493ad8f487074938a2a115f3531177") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "extensions" "data structure") (:url . "https://github.com/Fuco1/interval-list"))])
- (interval-tree . [(20130325 1407) ((dash (1 1 0))) "Interval tree data structure for 1D range queries" single ((:commit . "301302f480617091cf3ab6989caac385d52543dc") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "extensions" "data structure") (:url . "https://github.com/Fuco1/interval-tree"))])
- (inverse-acme-theme . [(20210204 1640) ((autothemer (0 2)) (cl-lib (0 5))) "A theme that looks like an inverse of Acme's color scheme." single ((:commit . "79008920ce7923312ada6f95a3ec1f96ce513c0b") (:authors ("Dylan Johnson")) (:maintainers ("Dylan Johnson")) (:maintainer "Dylan Johnson") (:url . "http://github.com/dcjohnson/inverse-acme-theme"))])
- (io-mode . [(20161004 756) nil "Major mode to edit Io language files in Emacs" single ((:commit . "fd65ae769093defcf554d6d637eba6e6dfc29f56") (:authors ("Sergei Lebedev" . "superbobry@gmail.com")) (:maintainers ("Sergei Lebedev" . "superbobry@gmail.com")) (:maintainer "Sergei Lebedev" . "superbobry@gmail.com") (:keywords "languages" "io") (:url . "https://github.com/superbobry/io-mode"))])
- (io-mode-inf . [(20140128 1934) nil "Interaction with an Io interpreter." single ((:commit . "6dd2bac3fd87484bb7d97e135b06c29d70b444b6") (:keywords "io" "languages") (:url . "https://github.com/slackorama/io-emacs"))])
- (iodine-theme . [(20151031 1639) ((emacs (24))) "A light emacs color theme" single ((:commit . "02fb780e1d8d8a6b9c709bfac399abe1665c6999") (:authors ("Srđan Panić" . "srdja.panic@gmail.com")) (:maintainers ("Srđan Panić" . "srdja.panic@gmail.com")) (:maintainer "Srđan Panić" . "srdja.panic@gmail.com") (:keywords "themes") (:url . "https://github.com/srdja/iodine-theme"))])
- (ipcalc . [(20210903 958) ((cl-lib (0 5))) "IP subnet calculator" single ((:commit . "05fcb5bb8db3ba0c1f9e5f1bfcf0c183828a2426") (:authors ("\"Aleksandar Simic\"" . "asimic@gmail.com")) (:maintainers ("\"Aleksandar Simic\"" . "asimic@gmail.com")) (:maintainer "\"Aleksandar Simic\"" . "asimic@gmail.com") (:keywords "networking" "tools") (:url . "http://github.com/dotemacs/ipcalc.el"))])
- (iplayer . [(20161120 2120) nil "Browse and download BBC TV/radio shows" single ((:commit . "b788fffa4b36bbd558047ffa6be51b1f0f462f23") (:authors ("Christophe Rhodes" . "csr21@cantab.net")) (:maintainers ("Christophe Rhodes" . "csr21@cantab.net")) (:maintainer "Christophe Rhodes" . "csr21@cantab.net") (:keywords "multimedia" "bbc") (:url . "https://github.com/csrhodes/iplayer-el"))])
- (ipp . [(20230303 1138) ((cl-lib (0 5)) (emacs (24 1))) "Implementation of the Internet Printing Protocol" single ((:commit . "8011ef4f550ebfbeefcacc1196a103580c730cfe") (:authors ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainers ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainer "Eric Marsden" . "eric.marsden@risk-engineering.org") (:keywords "printing" "hardware") (:url . "https://github.com/emarsden/ipp-el"))])
- (ipretty . [(20180606 522) nil "Interactive Emacs Lisp pretty-printing" single ((:commit . "042f5cc4e6f81d59115e8335c582bb5c571c2585") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "pretty-print" "elisp" "buffer") (:url . "https://framagit.org/steckerhalter/ipretty"))])
- (ipython-shell-send . [(20190220 2246) ((emacs (24))) "Send code (including magics) to ipython shell" single ((:commit . "0faed86faff02a361f23ce5fc923d0e9b09bb2da") (:authors ("Jack Kamm" . "jackkamm@gmail.com")) (:maintainers ("Jack Kamm" . "jackkamm@gmail.com")) (:maintainer "Jack Kamm" . "jackkamm@gmail.com") (:keywords "tools" "processes") (:url . "https://github.com/jackkamm/ipython-shell-send-el"))])
- (iqa . [(20200520 1137) ((emacs (24 3))) "Init file(and directory) Quick Access" single ((:commit . "03f90a2f68b2f05d8a2509bf3612a337d3d5b67f") (:url . "https://github.com/a13/iqa.el"))])
- (ir-black-theme . [(20130303 755) nil "Port of ir-black theme" single ((:commit . "ee6078bc67cbc15184e64e0f1fc8542d4079d55f") (:authors ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainers ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainer "Jon-Michael Deldin" . "dev@jmdeldin.com") (:keywords "faces"))])
- (iregister . [(20150515 2107) nil "Interactive register commands for Emacs." tar ((:commit . "6a48c66187289de5f300492be11c83e98410c018") (:authors ("Andrey Tykhonov" . "atykhonov@gmail.com")) (:maintainers ("Andrey Tykhonov" . "atykhonov@gmail.com")) (:maintainer "Andrey Tykhonov" . "atykhonov@gmail.com") (:keywords "convenience") (:url . "https://github.com/atykhonov/iregister.el"))])
- (irony . [(20220110 849) ((cl-lib (0 5)) (json (1 2))) "C/C++ minor mode powered by libclang" tar ((:commit . "870d1576fb279bb93f776a71e65f45283c423a9e") (:authors ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainers ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainer "Guillaume Papin" . "guillaume.papin@epitech.eu") (:keywords "c" "convenience" "tools") (:url . "https://github.com/Sarcasm/irony-mode"))])
- (irony-eldoc . [(20200622 2214) ((emacs (24)) (cl-lib (0 5)) (irony (0 1))) "irony-mode support for eldoc-mode" single ((:commit . "73e79a89fad982a2ba072f2fcc1b4e41f0aa2978") (:authors ("Kirill Ignatiev <github.com/ikirill>")) (:maintainers ("Kirill Ignatiev <github.com/ikirill>")) (:maintainer "Kirill Ignatiev <github.com/ikirill>") (:keywords "c" "c++" "objc" "convenience" "tools") (:url . "https://github.com/ikirill/irony-eldoc"))])
- (iscroll . [(20220612 310) ((emacs (26 0))) "Smooth scrolling over images" single ((:commit . "76aa4e7e72f907e95715351819d9efb6336b8238") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainers ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com") (:keywords "convenience" "image") (:url . "https://github.com/casouri/iscroll"))])
- (isearch-dabbrev . [(20141224 622) ((cl-lib (0 5))) "Use dabbrev in isearch" single ((:commit . "1efe7abba4923015cbc2462395deaec5446a9cc8") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:keywords "dabbrev" "isearch") (:url . "https://github.com/Dewdrops/isearch-dabbrev"))])
- (isearch-project . [(20221019 1956) ((emacs (27 1)) (f (0 20 0))) "Incremental search through the whole project" single ((:commit . "73cd2bdc5655a838f7c20b45fc922ab43209a172") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "search") (:url . "https://github.com/jcs-elpa/isearch-project"))])
- (isearch-symbol-at-point . [(20130728 2221) nil "Use isearch to search for the symbol at point" single ((:commit . "51a1029bec1ec414885f9edb7e5947603dffdab2") (:authors ("atom smith")) (:maintainers ("atom smith")) (:maintainer "atom smith") (:keywords "isearch") (:url . "https://github.com/re5et/isearch-symbol-at-point"))])
- (isend-mode . [(20210106 1506) nil "Interactively send parts of an Emacs buffer to an interpreter" single ((:commit . "ea855f63be7febc15bd08aec6229fab9407734fb") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainers ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com") (:url . "https://github.com/ffevotte/isend-mode.el"))])
- (isgd . [(20150414 936) nil "Shorten URLs using the isgd.com shortener service" single ((:commit . "764306dadd5a9213799081a48aba22f7c75cca9a") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainers ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com") (:url . "https://github.com/chmouel/isgd.el"))])
- (islisp-mode . [(20220924 1043) ((emacs (26 3))) "Major mode for ISLisp programming" tar ((:commit . "bbf45d02495f9455e91beed01676178dfa5d3561") (:authors ("Fermin Munoz")) (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net") (:keywords "islisp" "lisp" "programming") (:url . "https://gitlab.com/sasanidas/islisp-mode"))])
- (isortify . [(20221121 1816) ((emacs (25)) (pythonic (0 1 0))) "(automatically) format python buffers using isort." single ((:commit . "2751fb23eea4a40437e7d9bca77cbc9c06b44f3d") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/isortify"))])
- (ispc-mode . [(20201215 852) nil "Syntax coloring for ispc programs" single ((:commit . "bedfff2528157d4bb0b75927c459631bebe2b1ce") (:authors ("Philip Munksgaard" . "philip@munksgaard.me")) (:maintainers ("Philip Munksgaard" . "philip@munksgaard.me")) (:maintainer "Philip Munksgaard" . "philip@munksgaard.me") (:keywords "c" "ispc") (:url . "https://github.com/Munksgaard/ispc-mode"))])
- (iss-mode . [(20141001 1913) nil "Mode for InnoSetup install scripts" single ((:commit . "3b517aff31529bab33f8d7b562bd17aff0107fd1") (:authors ("Stefan Reichoer," . "stefan@xsteve.at")) (:maintainers ("Stefan Reichoer," . "stefan@xsteve.at")) (:maintainer "Stefan Reichoer," . "stefan@xsteve.at"))])
- (itail . [(20171112 804) nil "An interactive tail mode" single ((:commit . "6e43c20da03be3b9c6ece93b7dc3495975ec1888") (:authors ("atom smith")) (:maintainers ("atom smith")) (:maintainer "atom smith") (:keywords "tail") (:url . "https://github.com/re5et/itail"))])
- (itasca . [(20170601 1622) ((emacs (24 3))) "Major modes for Itasca software data files." tar ((:commit . "3d15dd1b70d6db69b0f4758a3e28b8b506cc84ca") (:authors ("Jason Furtney" . "jkfurtney@gmail.com")) (:maintainers ("Jason Furtney" . "jkfurtney@gmail.com")) (:maintainer "Jason Furtney" . "jkfurtney@gmail.com") (:keywords "itasca" "flac" "3dec" "udec" "flac3d" "pfc" "pfc2d" "pfc3d" "fish") (:url . "http://github.com/jkfurtney/itasca-emacs/"))])
- (iter2 . [(20221104 1938) ((emacs (25 1))) "Reimplementation of Elisp generators" single ((:commit . "5ea6ba6effc4b71e7a4aed16b3f42408f9064c01") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:keywords "elisp" "extensions") (:url . "https://github.com/doublep/iter2"))])
- (iterator . [(20210109 1859) ((emacs (24)) (cl-lib (0 5))) "A library to create and use elisp iterators objects." single ((:commit . "b514d4d1d0167e5973afbc93a34070d1aa967d82") (:authors ("Thierry Volpiatto <thierry dot volpiatto at gmail dot com>")) (:maintainers ("Thierry Volpiatto <thierry dot volpiatto at gmail dot com>")) (:maintainer "Thierry Volpiatto <thierry dot volpiatto at gmail dot com>") (:url . "https://github.com/thierryvolpiatto/iterator"))])
- (ivariants . [(20170823 224) ((emacs (24 3)) (ivs-edit (1 0))) "Ideographic variants editor and browser" tar ((:commit . "ca0b74d32b5d2d77a45cc6ad6edc00be0ee85284") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "i18n" "languages") (:url . "http://github.com/kawabata/ivariants"))])
- (ivs-edit . [(20170818 1441) ((emacs (24 3)) (dash (2 6 0)) (cl-lib (1 0))) "IVS (Ideographic Variation Sequence) editing tool" tar ((:commit . "5db39c234aa7393b591168a4fd0a9a4cbbca347d") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "text") (:url . "http://github.com/kawabata/ivs-edit"))])
- (ivy . [(20230410 1815) ((emacs (24 5))) "Incremental Vertical completYon" tar ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper"))])
- (ivy-avy . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0)) (avy (0 5 0))) "Avy integration for Ivy" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/swiper"))])
- (ivy-bibtex . [(20210927 1205) ((bibtex-completion (1 0 0)) (ivy (0 13 0)) (cl-lib (0 5))) "A bibliography manager based on Ivy" single ((:commit . "bb47f355b0da8518aa3fb516019120c14c8747c9") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/tmalsburg/helm-bibtex"))])
- (ivy-clipmenu . [(20220202 2122) ((emacs (26 1)) (f (0 20 0)) (s (1 12 0)) (dash (2 16 0)) (ivy (0 13 0))) "Ivy client for clipmenu" single ((:commit . "7c200cd4732821187084fad23547ee3f58365062") (:authors ("William Carroll" . "wpcarro@gmail.com")) (:maintainers ("William Carroll" . "wpcarro@gmail.com")) (:maintainer "William Carroll" . "wpcarro@gmail.com") (:url . "https://github.com/wpcarro/ivy-clipmenu.el"))])
- (ivy-clojuredocs . [(20201129 2355) ((edn (1 1 2)) (ivy (0 12 0)) (emacs (24 4))) "Search for help in clojuredocs.org" single ((:commit . "8b6de19b3578c72d2b88f898e2290d94c04350f9") (:authors ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainers ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainer "Wanderson Ferreira" . "iagwanderson@gmail.com") (:keywords "matching") (:url . "https://github.com/wandersoncferreira/ivy-clojuredocs"))])
- (ivy-dired-history . [(20210715 48) ((ivy (0 9 0)) (counsel (0 9 0)) (cl-lib (0 5))) "use ivy to open recent directories" single ((:commit . "dba848929cb063a5536cb442c70be1099e2f5baa") (:authors ("纪秀峰" . "jixiuf@gmail.com")) (:maintainers ("纪秀峰" . "jixiuf@gmail.com")) (:maintainer "纪秀峰" . "jixiuf@gmail.com") (:url . "https://github.com/jixiuf/ivy-dired-history"))])
- (ivy-emms . [(20210817 1300) ((ivy (0 13 0)) (emms (0 0)) (emacs (24 4))) "Ivy interface to emms tracks" single ((:commit . "dfde98c3bdad8136709eac8382ba048fafdcc6ac") (:authors ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainers ("Fran Burstall" . "fran.burstall@gmail.com")) (:maintainer "Fran Burstall" . "fran.burstall@gmail.com") (:keywords "multimedia") (:url . "https://github.com/franburstall/ivy-emms"))])
- (ivy-emoji . [(20200316 2351) ((emacs (26 1)) (ivy (0 13 0))) "Insert emojis with ivy" single ((:commit . "45894a1f8f8c67b142e1dd1113f47d703dea0b59") (:authors ("Gabriele Bozzola" . "sbozzolator@gmail.com")) (:maintainers ("Gabriele Bozzola" . "sbozzolator@gmail.com")) (:maintainer "Gabriele Bozzola" . "sbozzolator@gmail.com") (:keywords "emoji" "ivy" "convenience") (:url . "https://github.com/sbozzolo/ivy-emoji.git"))])
- (ivy-erlang-complete . [(20211019 447) ((async (1 9)) (counsel (0 13 4)) (ivy (0 13 4)) (erlang (19 2)) (emacs (25 1))) "Erlang context sensitive completion at point using ivy. It also support xref and eldoc." tar ((:commit . "6913f6ef7c942a5a2c42bc17635d09c91353e7ca") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:keywords "languages" "tools"))])
- (ivy-explorer . [(20190909 1921) ((emacs (25)) (ivy (0 10 0))) "Dynamic file browsing grid using ivy" single ((:commit . "a413966cfbcecacc082d99297fa1abde0c10d3f3") (:authors ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainers ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainer "Clemens Radermacher" . "clemera@posteo.net") (:keywords "convenience" "files" "matching") (:url . "https://github.com/clemera/ivy-explorer"))])
- (ivy-file-preview . [(20220704 653) ((emacs (25 1)) (ivy (0 8 0)) (s (1 12 0)) (f (0 20 0))) "Preview the current ivy file selection" single ((:commit . "716415a12db2c0166c6fb229e41623587b212719") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "file" "ivy" "swiper" "preview" "select" "selection") (:url . "https://github.com/jcs-elpa/ivy-file-preview"))])
- (ivy-fuz . [(20191222 946) ((emacs (25 1)) (fuz (1 3 0)) (ivy (0 13 0))) "Integration between fuz and ivy." single ((:commit . "f171ac73422a4bae1503d63d804e691482ed35b2") (:authors ("Zhu Zihao" . "all_but_last@163.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:keywords "convenience") (:url . "https://github.com/Silex/ivy-fuz.el"))])
- (ivy-gitlab . [(20181228 826) ((s (1 9 0)) (dash (2 9 0)) (ivy (0 8 0)) (gitlab (0 8))) "Ivy interface to Gitlab" single ((:commit . "8c2324c02119500f094c2f92dfaba4c9977ce1ba") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "gitlab" "ivy") (:url . "https://github.com/nlamirault/emacs-gitlab"))])
- (ivy-historian . [(20210714 56) ((emacs (24 4)) (historian (20170111)) (ivy (0 8 0)) (flx (0 6 1))) "Persistently store selected minibuffer candidates" single ((:commit . "852cb4e72c0f78c8dbb2c972bdcb4e7b0108ff4c") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience" "ivy") (:url . "https://github.com/PythonNut/historian.el"))])
- (ivy-hydra . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0)) (hydra (0 14 0))) "Additional key bindings for Ivy" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/swiper"))])
- (ivy-lobsters . [(20200818 1406) ((ivy (0 8 0)) (cl-lib (0 5))) "Browse lobste.rs stories with ivy." single ((:commit . "3f7f90751d15ebcf91253ef3cda18c0aa7d856ff") (:authors ("Julien Blanchard <https://github.com/julienXX>")) (:maintainers ("Julien Blanchard <https://github.com/julienXX>")) (:maintainer "Julien Blanchard <https://github.com/julienXX>") (:url . "https://github.com/julienXX/ivy-lobsters"))])
- (ivy-migemo . [(20230121 1934) ((emacs (24 3)) (ivy (0 13 0)) (migemo (1 9 2)) (nadvice (0 3))) "Use migemo on ivy" single ((:commit . "6022b24e72f073a7b5599f2dea611da3a1282378") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "matching") (:url . "https://github.com/ROCKTAKEY/ivy-migemo"))])
- (ivy-mpdel . [(20190428 920) ((emacs (25 1)) (ivy (0 10 0)) (libmpdel (1 0 0)) (mpdel (1 0 0))) "Ivy interface to navigate MPD" single ((:commit . "a42dcc943914c71975c115195d38c739f25e475c") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "multimedia") (:url . "https://gitlab.petton.fr/mpdel/ivy-mpdel"))])
- (ivy-omni-org . [(20200810 1050) ((emacs (25 1)) (ivy (0 13)) (dash (2 12))) "Browse anything in Org mode" single ((:commit . "b6a27379bc40fd6530a84afc50b3f41cd488e0c9") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "outlines") (:url . "https://github.com/akirak/ivy-omni-org"))])
- (ivy-pass . [(20170812 1955) ((emacs (24)) (ivy (0 8 0)) (password-store (1 6 5))) "ivy interface for pass" single ((:commit . "5b523de1151f2109fdd6a8114d0af12eef83d3c5") (:authors ("ecraven")) (:maintainers ("ecraven")) (:maintainer "ecraven") (:keywords "pass" "password" "convenience" "data") (:url . "https://github.com/ecraven/ivy-pass/"))])
- (ivy-phpunit . [(20180219 915) ((ivy (0 10 0)) (phpunit (0 7 0)) (emacs (25))) "Ivy integration for phpunit.el" single ((:commit . "ffedb0138d36564e8e36a28fd9bc71ea8944681f") (:authors ("12pt")) (:maintainers ("12pt")) (:maintainer "12pt") (:keywords "convenience" "tools" "ivy" "phpunit" "php") (:url . "https://github.com/12pt/ivy-phpunit"))])
- (ivy-posframe . [(20211217 234) ((emacs (26 0)) (posframe (1 0 0)) (ivy (0 13 0))) "Using posframe to show Ivy" single ((:commit . "533a8e368fcabfd534761a5c685ce713376fa594") (:authors ("Feng Shu" . "tumashu@163.com") ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "abbrev" "convenience" "matching" "ivy") (:url . "https://github.com/tumashu/ivy-posframe"))])
- (ivy-prescient . [(20221216 112) ((emacs (25 1)) (prescient (6 1 0)) (ivy (0 11 0))) "prescient.el + Ivy" single ((:commit . "72b023f5fc1ae2bbf2f51f1786cc012d40671bf4") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes") (:keywords "extensions") (:url . "https://github.com/raxod502/prescient.el"))])
- (ivy-purpose . [(20160724 1003) ((emacs (24)) (ivy (0 8)) (window-purpose (1 5))) "Ivy Interface for Purpose" single ((:commit . "0495f2f3aed64d7e0028125e76a9a68f8fc4107e") (:authors ("Bar Magal (2016)")) (:maintainers ("Bar Magal (2016)")) (:maintainer "Bar Magal (2016)") (:url . "https://github.com/bmag/ivy-purpose"))])
- (ivy-rich . [(20230425 1422) ((emacs (25 1)) (ivy (0 13 0))) "More friendly display transformer for ivy" single ((:commit . "aff9b6bd53e0fdcf350ab83c90e64e651b47dba4") (:authors ("Yevgnen Koh" . "wherejoystarts@gmail.com")) (:maintainers ("Yevgnen Koh" . "wherejoystarts@gmail.com")) (:maintainer "Yevgnen Koh" . "wherejoystarts@gmail.com") (:keywords "convenience" "ivy") (:url . "https://github.com/Yevgnen/ivy-rich"))])
- (ivy-rtags . [(20191222 920) ((ivy (0 7 0)) (rtags (2 10))) "RTags completion back-end for ivy" single ((:commit . "595055b5316a7c92ba1d638f324f98842a0f41a5") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "https://github.com/Andersbakken/rtags"))])
- (ivy-searcher . [(20220704 653) ((emacs (25 1)) (ivy (0 8 0)) (searcher (0 1 8)) (s (1 12 0)) (f (0 20 0))) "Ivy interface to use searcher" single ((:commit . "5ed00a1e273cdb33ce356f373427b65fb131021a") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "ivy" "interface" "searcher" "search" "replace" "grep" "ag" "rg") (:url . "https://github.com/jcs-elpa/ivy-searcher"))])
- (ivy-spotify . [(20210329 312) ((emacs (26 1)) (espotify (0 1)) (ivy (0 13 1))) "Search spotify with ivy" single ((:commit . "eefcb49d740570f6c874302d87be33e5b0ec54ff") (:authors ("Jose A Ortega Ruiz" . "jao@gnu.org")) (:maintainers ("Jose A Ortega Ruiz")) (:maintainer "Jose A Ortega Ruiz") (:keywords "multimedia") (:url . "https://codeberg.org/jao/espotify"))])
- (ivy-todo . [(20200323 2005) ((ivy (0 8 0)) (emacs (25))) "Manage org-mode TODOs with ivy" single ((:commit . "d74501cd334b7d709659946c5e02b21cfd5507de") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainers ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com") (:keywords "convenience") (:url . "https://github.com/Kungsgeten/ivy-todo"))])
- (ivy-xcdoc . [(20160917 1055) ((ivy (0 8 0)) (emacs (24 4))) "Search Xcode documents with ivy interface." single ((:commit . "fbf264b0746182567b17fd7409fff8eed3658c71") (:authors ("C.T.Chen" . "chenct@7adybird.com")) (:maintainers ("C.T.Chen" . "chenct@7adybird.com")) (:maintainer "C.T.Chen" . "chenct@7adybird.com") (:keywords "ivy" "xcode" "xcdoc") (:url . "https://github.com/hex2010/emacs-ivy-xcdoc"))])
- (ivy-xref . [(20211008 1103) ((emacs (25 1)) (ivy (0 10 0))) "Ivy interface for xref results" single ((:commit . "a82e8e117d2dd62c28b6a3e3d6e4cfb11c0bda38") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/ivy-xref"))])
- (ivy-yasnippet . [(20200704 700) ((emacs (24 1)) (cl-lib (0 6)) (ivy (0 10 0)) (yasnippet (0 12 2)) (dash (2 14 1))) "Preview yasnippets with ivy" single ((:commit . "83402d91b4eba5307f71884a72df8e11cc6a994e") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com") (:keywords "convenience") (:url . "https://github.com/mkcms/ivy-yasnippet"))])
- (ivy-ycmd . [(20180909 1225) ((ycmd (1 3)) (emacs (24)) (ivy (0 10 0)) (dash (2 14 1))) "Ivy interface to ycmd" single ((:commit . "25bfee8f676e4ecbb645e4f30b47083410a00c58") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:keywords "tools") (:url . "https://github.com/abingham/emacs-ivy-ycmd"))])
- (ivy-youtube . [(20230503 1509) ((request (0 2 0)) (ivy (0 8 0)) (cl-lib (0 5))) "Query YouTube and play videos in your browser" single ((:commit . "e7a7cc860e967500857e5fd85d8e397c6d752ee1") (:authors ("Brunno dos Santos")) (:maintainers ("Brunno dos Santos")) (:maintainer "Brunno dos Santos") (:keywords "youtube" "multimedia" "mpv" "vlc") (:url . "https://github.com/squiter/ivy-youtube"))])
- (ix . [(20131027 1657) ((grapnel (0 5 3))) "Emacs client for http://ix.io pastebin" single ((:commit . "498dac674f4f1910d39087b1457c5da5465a0614") (:authors ("Abhishek L" . "abhishekl.2006@gmail.com")) (:maintainers ("Abhishek L" . "abhishekl.2006@gmail.com")) (:maintainer "Abhishek L" . "abhishekl.2006@gmail.com") (:url . "http://www.github.com/theanalyst/ix.el"))])
- (j-mode . [(20171224 1856) nil "Major mode for editing J programs" tar ((:commit . "e8725ac8af95498faabb2ca3ab3bd809a8f148e6") (:keywords "j" "languages") (:url . "http://github.com/zellio/j-mode"))])
- (jabber . [(20220713 1538) ((fsm (0 2)) (srv (0 2))) "A Jabber client for Emacs." tar ((:commit . "af0315e174fa6446d5c4dd3e6465d48912950e58") (:authors ("Magnus Henoch" . "mange@freemail.hu")) (:maintainer "wgreenhouse" . "wgreenhouse@tilde.club") (:keywords "comm") (:url . "https://codeberg.org/emacs-jabber/emacs-jabber"))])
- (jack . [(20221122 632) ((emacs (28 1))) "HTML generator library" single ((:commit . "3b4ea97fcc107d0ffd201ea695129af52f390113") (:authors ("Tony Aldon" . "tony.aldon.adm@gmail.com")) (:maintainers ("Tony Aldon" . "tony.aldon.adm@gmail.com")) (:maintainer "Tony Aldon" . "tony.aldon.adm@gmail.com") (:keywords "lisp" "html") (:url . "https://github.com/tonyaldon/jack"))])
- (jack-connect . [(20220201 1417) nil "Manage jack connections within Emacs" single ((:commit . "1acaebfe8f37f0194e95c3e812c9515a6f688eee") (:authors ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainers ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainer "Stefano Barbi" . "stefanobarbi@gmail.com"))])
- (jade-mode . [(20210908 2121) nil "Major mode for editing .jade files" single ((:commit . "111460b056838854e470a6383041a99f843b93ee") (:authors ("Brian M. Carlson and other contributors")) (:maintainers ("Brian M. Carlson and other contributors")) (:maintainer "Brian M. Carlson and other contributors") (:keywords "languages") (:url . "https://github.com/brianc/jade-mode"))])
- (jami-bot . [(20230416 1931) ((emacs (27 1))) "An extendable chat bot for the private messenger GNU Jami" single ((:commit . "63d7df8c5b6397d86bef9c0b7b2557ae11a88335") (:authors ("Hanno Perrey <http://gitlab.com/hperrey>")) (:maintainers ("Hanno Perrey" . "hanno@hoowl.se")) (:maintainer "Hanno Perrey" . "hanno@hoowl.se") (:keywords "comm" "jami" "messenger" "chat bot" "dbus") (:url . "https://gitlab.com/hanno/jami-bot"))])
- (jammer . [(20210508 1633) ((emacs (24 1))) "Punish yourself for using Emacs inefficiently" single ((:commit . "a780e4c2adb2e85a4daadcefd1a2b189d761872f") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "games") (:url . "https://depp.brause.cc/jammer"))])
- (janet-mode . [(20210924 44) ((emacs (24 3))) "Defines a major mode for Janet" single ((:commit . "9e3254a0249d720d5fa5603f1f8c3ed0612695af") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainers ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com") (:url . "https://github.com/ALSchwalm/janet-mode"))])
- (japanese-holidays . [(20201229 755) ((emacs (24 1)) (cl-lib (0 3))) "Calendar functions for the Japanese calendar" single ((:commit . "324b6bf2f55ec050bef49e001caedaabaf4fa35d") (:authors ("Takashi Hattori" . "hattori@sfc.keio.ac.jp") ("Hiroya Murata" . "lapis-lazuli@pop06.odn.ne.jp")) (:maintainers ("Takashi Hattori" . "hattori@sfc.keio.ac.jp")) (:maintainer "Takashi Hattori" . "hattori@sfc.keio.ac.jp") (:keywords "calendar") (:url . "https://github.com/emacs-jp/japanese-holidays"))])
- (jape-mode . [(20140903 1506) nil "An Emacs editing mode mode for GATE's JAPE files" single ((:commit . "27dbebc4de93eb887038fda7a11671349efe8dbb") (:keywords "languages" "jape" "gate") (:url . "http://github.com/tanzoniteblack/jape-mode"))])
- (jar-manifest-mode . [(20160501 26) nil "Major mode to edit JAR manifest files" single ((:commit . "270dae14c481300f75ed96dad3a5ae42ca928a1d") (:authors ("Omair Majid" . "omair.majid@gmail.com")) (:maintainers ("Omair Majid" . "omair.majid@gmail.com")) (:maintainer "Omair Majid" . "omair.majid@gmail.com") (:keywords "convenience" "languages") (:url . "http://github.com/omajid/jar-manifest-mode"))])
- (jasminejs-mode . [(20150527 5) nil "A minor mode for manipulating jasmine test files" tar ((:commit . "23637d6718423d376eebbdaa4d6d914c7cab26ed") (:authors ("Eric Stolten" . "stoltene2@gmail.com")) (:maintainers ("Eric Stolten" . "stoltene2@gmail.com")) (:maintainer "Eric Stolten" . "stoltene2@gmail.com") (:keywords "javascript" "jasmine") (:url . "https://github.com/stoltene2/jasminejs-mode"))])
- (jastadd-ast-mode . [(20200926 1820) ((emacs (25))) "Major mode for editing JastAdd AST files" single ((:commit . "a98a5eef274d8eedabc7467874edf4338c9a012e") (:authors ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainers ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at") (:keywords "languages") (:url . "https://github.com/rudi/jastadd-ast-mode"))])
- (java-imports . [(20220712 1653) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Java imports" single ((:commit . "bbb173c319a32b46680b5c0bffd72b607ed7b71a") (:authors ("Lee Hinman" . "lee@writequit.org")) (:maintainers ("Lee Hinman" . "lee@writequit.org")) (:maintainer "Lee Hinman" . "lee@writequit.org") (:keywords "java" "kotlin") (:url . "http://www.github.com/dakrone/emacs-java-imports"))])
- (java-snippets . [(20160627 252) ((yasnippet (0 8 0))) "Yasnippets for Java" tar ((:commit . "738523debb1018439bda0ce70e00248154a600ac") (:authors ("Takayoshi Kimura")) (:maintainers ("Takayoshi Kimura")) (:maintainer "Takayoshi Kimura") (:url . "https://github.com/nekop/yasnippet-java-mode"))])
- (javadoc-lookup . [(20160214 31) ((cl-lib (0 3))) "Javadoc Emacs integration with Maven" tar ((:commit . "507a2dd443d60b537b8f779c1847e2cd0ccd1382") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/javadoc-lookup"))])
- (javap-mode . [(20120223 2208) nil "Javap major mode" single ((:commit . "864c1130e204b2072e1d19cd027b6fce8ebe6629") (:url . "http://github.com/hiredman/javap-mode"))])
- (jaword . [(20210306 420) ((tinysegmenter (0 1)) (emacs (25 1))) "Minor-mode for handling Japanese words better" single ((:commit . "783544a265f91b2e568b52311afb36e3691d5ad3") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.github.io/"))])
- (jazz-theme . [(20201026 1027) nil "A warm color theme for Emacs 24+." single ((:commit . "0b5bfe7a30590326bdf38120fb4bc25fff21a509") (:authors ("Roman Parykin" . "donderom@ymail.com")) (:maintainers ("Roman Parykin" . "donderom@ymail.com")) (:maintainer "Roman Parykin" . "donderom@ymail.com") (:url . "https://github.com/donderom/jazz-theme"))])
- (jbeans-theme . [(20200924 1946) ((emacs (24))) "Jbeans theme for GNU Emacs 24 (deftheme)" single ((:commit . "a63916a928324c42bfbe3016972c2ecff598b1ae") (:authors ("Adam Olsen" . "arolsen@gmail.com")) (:maintainers ("Adam Olsen" . "arolsen@gmail.com")) (:maintainer "Adam Olsen" . "arolsen@gmail.com") (:url . "https://github.com/synic/jbeans-emacs"))])
- (jdecomp . [(20170224 2200) ((emacs (24 5))) "Interface to Java decompilers" single ((:commit . "692866abc83deedce62be8d6040cf24dda7fb7a8") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainers ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com") (:keywords "decompile" "java" "languages" "tools") (:url . "https://github.com/xiongtx/jdecomp"))])
- (jdee . [(20191102 1426) ((emacs (24 3)) (flycheck (30)) (memoize (1 0 1)) (dash (2 13 0)) (s (1 12 0))) "Java Development Environment for Emacs" tar ((:commit . "8cfe5788348c1f370058ccc0ec01b45300a36c98") (:authors ("Paul Kinnucan" . "pkinnucan@attbi.com")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "java" "tools") (:url . "http://github.com/jdee-emacs/jdee"))])
- (jedi . [(20191011 1750) ((emacs (24)) (jedi-core (0 2 2)) (auto-complete (1 4))) "a Python auto-completion for Emacs" single ((:commit . "9d5f29116c4d42cae561a9d69e6fba2b61e2cf43") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>"))])
- (jedi-core . [(20210503 1315) ((emacs (24)) (epc (0 1 0)) (python-environment (0 0 2)) (cl-lib (0 5))) "Common code of jedi.el and company-jedi.el" tar ((:commit . "ecb53487c6131d39931ab2927e4b77e9cbfb7204") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>"))])
- (jedi-direx . [(20140310 936) ((jedi (0 1 2)) (direx (0 1 -3))) "Tree style source code viewer for Python buffer" single ((:commit . "7a2e677400717ed12b959cb5988e7b3fb1c12117") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>"))])
- (jeison . [(20190721 1651) ((emacs (25 1)) (dash (2 16 0))) "A library for declarative JSON parsing" single ((:commit . "775b45657728c91f24f7508dfbc4d81a92b8e053") (:keywords "lisp" "json" "data-types") (:url . "http://github.com/SavchenkoValeriy/jeison"))])
- (jekyll-modes . [(20141117 1314) ((polymode (0 2))) "Major modes (markdown and HTML) for authoring Jekyll content" single ((:commit . "7cb10b50fd2883e3f7b10fdfd98f19f2f0b2381c") (:authors ("Fredrik Appelberg" . "fredrik@milgrim.local")) (:maintainers ("Fredrik Appelberg" . "fredrik@milgrim.local")) (:maintainer "Fredrik Appelberg" . "fredrik@milgrim.local") (:keywords "docs") (:url . "https://github.com/fred-o/jekyll-modes"))])
- (jemdoc-mode . [(20170704 2027) ((emacs (24 3))) "Major mode for editing jemdoc files" single ((:commit . "529b4d4681e1198b9892f340fdd6c3f1592a047a") (:authors ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainers ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainer "Dimitar Dimitrov" . "mail.mitko@gmail.com") (:keywords "convenience" "usability") (:url . "https://github.com/drdv/jemdoc-mode"))])
- (jenkins . [(20200524 2016) ((dash (2 12)) (emacs (24 3)) (json (1 4))) "Minimalistic Jenkins client for Emacs" single ((:commit . "bd06cdc57c0cb9217d773eeba06ecc998f10033b") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainers ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com") (:keywords "jenkins" "convenience"))])
- (jenkins-watch . [(20121004 2326) nil "Watch continuous integration build status" single ((:commit . "37b84dfbd98240a57ff798e1ff8bc7dba2913577") (:authors ("Andrew Taylor" . "ataylor@redtoad.ca")) (:maintainers ("Andrew Taylor" . "ataylor@redtoad.ca")) (:maintainer "Andrew Taylor" . "ataylor@redtoad.ca") (:url . "https://github.com/ataylor284/jenkins-watch"))])
- (jenkinsfile-mode . [(20221124 30) ((emacs (24)) (groovy-mode (2 0))) "Major mode for editing Jenkins declarative pipeline syntax" single ((:commit . "1d90c1ff8edc7ea88844af92a206e7c5f083b568") (:url . "https://github.com/john2x/jenkinsfile-mode"))])
- (jest . [(20220807 2243) ((emacs (24 4)) (dash (2 18 0)) (magit-popup (2 12 0)) (projectile (0 14 0)) (s (1 12 0)) (js2-mode (20180301)) (cl-lib (0 6 1))) "helpers to run jest" tar ((:commit . "c8145635c54bd7df9711000e889753d267afcdc4") (:authors ("Edmund Miller" . "edmund.a.miller@gmail.com")) (:maintainers ("Edmund Miller" . "edmund.a.miller@gmail.com")) (:maintainer "Edmund Miller" . "edmund.a.miller@gmail.com") (:keywords "jest" "javascript" "testing") (:url . "https://github.com/emiller88/emacs-jest/"))])
- (jest-test-mode . [(20220722 1947) ((emacs (25 1))) "Minor mode for running Node.js tests using jest" single ((:commit . "3126c5c5c5632da639ea34867a7342d4410d78aa") (:authors ("Raymond Huang" . "rymndhng@gmail.com")) (:maintainers ("Raymond Huang" . "rymndhng@gmail.com")) (:maintainer "Raymond Huang" . "rymndhng@gmail.com") (:url . "https://github.com/rymndhng/jest-test-mode.el"))])
- (jet . [(20230502 1216) ((emacs (27 1)) (transient (0 3 7))) "Emacs integration for jet Clojure tool" single ((:commit . "fd0544d641207e73e81f9989c155a18c1378a0cc") (:authors ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainers ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainer "Eric Dallo" . "ercdll1337@gmail.com") (:keywords "tools") (:url . "https://github.com/ericdallo/jet.el"))])
- (jetbrains . [(20180301 502) ((emacs (24 3)) (cl-lib (0 5)) (f (0 17))) "JetBrains IDE bridge" single ((:commit . "56f71a17d455581c10d48f6dbb31d9e2126227bf") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/jetbrains.el"))])
- (jetbrains-darcula-theme . [(20230223 1901) nil "A complete port of the default JetBrains Darcula theme" single ((:commit . "46f153385e50998826ca13e18056c6a972768cfd") (:authors ("Ian Y.E. Pan")) (:maintainers ("Ian Y.E. Pan")) (:maintainer "Ian Y.E. Pan") (:url . "https://github.com/ianpan870102/jetbrains-darcula-emacs-theme"))])
- (jg-quicknav . [(20170809 130) ((s (1 9 0)) (cl-lib (0 5))) "Quickly navigate the file system to find a file." single ((:commit . "c8d53e774d63e68a944092c08a026b57da741038") (:authors ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainers ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainer "Jeff Gran" . "jeff@jeffgran.com") (:keywords "navigation") (:url . "https://github.com/jeffgran/jg-quicknav"))])
- (jinja2-mode . [(20220117 807) nil "A major mode for jinja2" single ((:commit . "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainers ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero"))])
- (jinx . [(20230506 839) ((emacs (27 1)) (compat (29 1 4 0))) "Enchanted Spell Checker" tar ((:commit . "43039d0e56125186843842fca7217967cc16ae39") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience" "wp") (:url . "https://github.com/minad/jinx"))])
- (jira-markup-mode . [(20150601 2109) nil "Emacs Major mode for JIRA-markup-formatted text files" single ((:commit . "53bf083fdbece483f1351f32085b424b38c4c1f2") (:authors ("Matthias Nuessler" . "m.nuessler@web.de>")) (:maintainers ("Matthias Nuessler" . "m.nuessler@web.de>")) (:maintainer "Matthias Nuessler" . "m.nuessler@web.de>") (:keywords "jira" "markup") (:url . "https://github.com/mnuessler/jira-markup-mode"))])
- (jiralib2 . [(20200520 2031) ((emacs (25)) (request (0 3)) (dash (2 14 1))) "JIRA REST API bindings to Elisp" single ((:commit . "c21c4e759eff549dbda11099f2f680b78d7f5a01") (:authors ("Henrik Nyman" . "h@nyymanni.com")) (:maintainers ("Henrik Nyman" . "h@nyymanni.com")) (:maintainer "Henrik Nyman" . "h@nyymanni.com") (:keywords "comm" "jira" "rest" "api") (:url . "https://github.com/nyyManni/jiralib2"))])
- (jist . [(20161229 1721) ((emacs (24 4)) (dash (2 12 0)) (seq (1 11)) (let-alist (1 0 4)) (magit (2 1 0)) (request (0 2 0))) "Gist integration" single ((:commit . "ec4b27eb4051f0084cb3b1e4f19fab9e2db77665") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/jist.el"))])
- (jit-lock-stealth-progress . [(20230117 117) ((emacs (28 1))) "JIT lock stealth mode-line progress" single ((:commit . "0a6881b887f846f224c939c598bf0807bde2018e") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-jit-lock-stealth-progress"))])
- (jknav . [(20121006 2025) nil "Automatically enable j/k keys for line-based navigation" single ((:commit . "861245715c728503dad6573278fdd75c271dbf8b") (:authors ("Aaron Culich" . "aculich@gmail.com")) (:maintainers ("Aaron Culich" . "aculich@gmail.com")) (:maintainer "Aaron Culich" . "aculich@gmail.com") (:keywords "keyboard" "navigation"))])
- (jmt-mode . [(20230220 341) ((emacs (27 1))) "Java Mode Tamed" single ((:commit . "4f14058229855c0a92bab19d76a295dfdcb35f10") (:authors ("Michael Allan" . "mike@reluk.ca")) (:maintainers ("Michael Allan" . "mike@reluk.ca")) (:maintainer "Michael Allan" . "mike@reluk.ca") (:keywords "languages" "c") (:url . "http://reluk.ca/project/Java/Emacs/"))])
- (jonprl-mode . [(20160819 59) ((emacs (24 3)) (cl-lib (0 5)) (yasnippet (0 8 0))) "A major mode for editing JonPRL files" tar ((:commit . "6059bb64891fae45827174e044d6a87ac07172d8") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk") (:keywords "languages"))])
- (journalctl-mode . [(20221119 1653) ((emacs (24 1))) "Sample major mode for viewing output journalctl" single ((:commit . "baaffdfd22a19afb1997ec3715d063186b80d3f5") (:authors ("Sebastian Meisel" . "sebastian.meisel@gmail.com")) (:maintainers ("Sebastian Meisel" . "sebastian.meisel@gmail.com")) (:maintainer "Sebastian Meisel" . "sebastian.meisel@gmail.com") (:keywords "unix") (:url . "https://github.com/SebastianMeisel/journalctl-mode"))])
- (jpop . [(20170410 1250) ((emacs (24)) (dash (2 11 0)) (cl-lib (0 5))) "Lightweight project caching and navigation framework" tar ((:commit . "7628b03260be96576b34459d45959ee77d8b2110") (:authors ("Dom Charlesworth" . "dgc336@gmail.com")) (:maintainers ("Dom Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dom Charlesworth" . "dgc336@gmail.com") (:keywords "project" "convenience") (:url . "https://github.com/domtronn/jpop.el"))])
- (jq-format . [(20190428 1434) ((emacs (24)) (reformatter (0 3))) "Reformat JSON and JSONLines using jq" single ((:commit . "47e1c5adb89b37b4d53fe01302d8c675913c20e7") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "languages") (:url . "https://github.com/wbolster/emacs-jq-format"))])
- (jq-mode . [(20220610 1119) ((emacs (25 1))) "Edit jq scripts." tar ((:commit . "071c1c29bac30351ad338136f2b625e5601365cd") (:authors ("Bjarte Johansen <Bjarte dot Johansen at gmail dot com>")) (:maintainers ("Bjarte Johansen <Bjarte dot Johansen at gmail dot com>")) (:maintainer "Bjarte Johansen <Bjarte dot Johansen at gmail dot com>") (:url . "https://github.com/ljos/jq-mode"))])
- (jquery-doc . [(20150812 758) nil "jQuery api documentation interface for emacs" tar ((:commit . "24032284919b942ec27707d929bdd8bf48420062") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "docs" "jquery"))])
- (js-auto-beautify . [(20161031 509) ((web-beautify (0 3 1)) (web-mode (14 0 27))) "auto format you js/jsx file" single ((:commit . "6bc9fef474197ca1722cb1e9051b270f80cdd7cc") (:authors (nil . "quanwei9958@126.com")) (:maintainers (nil . "quanwei9958@126.com")) (:maintainer nil . "quanwei9958@126.com"))])
- (js-auto-format-mode . [(20180807 1352) ((emacs (24))) "Minor mode for auto-formatting JavaScript code" single ((:commit . "29d245b4d126a5fc5153a4d8f17396be4165b4a6") (:authors ("Masafumi Koba" . "ybiquitous@gmail.com")) (:maintainers ("Masafumi Koba" . "ybiquitous@gmail.com")) (:maintainer "Masafumi Koba" . "ybiquitous@gmail.com") (:keywords "languages") (:url . "https://github.com/ybiquitous/js-auto-format-mode"))])
- (js-codemod . [(20190921 941) ((emacs (24 4))) "Run js-codemod on current sentence or selected region" tar ((:commit . "056bdf3e5e0c807b8cf17edb5834179a90fb722b") (:authors (nil . "Torgeir Thoresen <@torgeir>")) (:maintainers (nil . "Torgeir Thoresen <@torgeir>")) (:maintainer nil . "Torgeir Thoresen <@torgeir>") (:keywords "js" "codemod" "region"))])
- (js-comint . [(20230311 230) ((emacs (24 3))) "JavaScript interpreter in window." single ((:commit . "b788bf5d57ad6b902c4096b666c6d78ceff7c116") (:authors ("Paul Huff" . "paul.huff@gmail.com")) (:maintainers ("Chen Bin <chenbin.sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin.sh AT gmail DOT com>") (:keywords "javascript" "node" "inferior-mode" "convenience") (:url . "https://github.com/redguardtoo/js-comint"))])
- (js-doc . [(20160715 434) nil "Insert JsDoc style comment easily" single ((:commit . "f0606e89d5aa89146f96edb38cf69af0068a9d1e") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainers ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com") (:keywords "document" "comment") (:url . "https://github.com/mooz/js-doc"))])
- (js-format . [(20170119 102) ((emacs (24 1)) (js2-mode (20101228))) "Format or transform code style using NodeJS server with different javascript formatter" tar ((:commit . "544bda9be72b74ec2d442543ba60cff727d96669") (:authors ("James Yang" . "jamesyang999@gmail.com")) (:maintainers ("James Yang" . "jamesyang999@gmail.com")) (:maintainer "James Yang" . "jamesyang999@gmail.com") (:keywords "js" "javascript" "format" "standard" "jsbeautify" "esformatter" "airbnb") (:url . "http://github.com/futurist/js-format.el"))])
- (js-import . [(20230131 1900) ((emacs (24 4)) (f (0 19 0)) (projectile (0 14 0)) (dash (2 13 0))) "Import Javascript files from your current project or dependencies" single ((:commit . "9f8b6bc4f080c7146ce7ee5dd5a6572aeb6f1cc7") (:authors ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainers ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainer "Jakob Lind" . "karl.jakob.lind@gmail.com") (:keywords "tools") (:url . "https://github.com/jakoblind/js-import"))])
- (js-react-redux-yasnippets . [(20200316 1144) ((emacs (24 3)) (yasnippet (0 8 0))) "JavaScript,React,Redux yasnippets" tar ((:commit . "9f509043f01fa59bff4daf31b2e95d63f8deab4a") (:authors ("sooqua")) (:maintainers ("sooqua")) (:maintainer "sooqua") (:keywords "convenience" "snippets") (:url . "https://github.com/sooqua/js-react-redux-yasnippets"))])
- (js2-closure . [(20170816 1918) ((js2-mode (20150909))) "Google Closure dependency manager" single ((:commit . "74a75f001a8bc2b9c02b9e8b4557f7ee3c5f84fb") (:authors ("Justine Tunney" . "jart@google.com")) (:maintainers ("Justine Tunney" . "jart@google.com")) (:maintainer "Justine Tunney" . "jart@google.com") (:keywords "javascript" "closure") (:url . "http://github.com/jart/js2-closure"))])
- (js2-highlight-vars . [(20170418 1829) ((emacs (24 4)) (js2-mode (20150908))) "highlight occurrences of the variable under cursor" single ((:commit . "e3bb177e50f76b272e8073a94d4f46be6512a163") (:authors ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainers ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainer "Mihai Bazon" . "mihai.bazon@gmail.com") (:url . "http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode/js2-highlight-vars-mode"))])
- (js2-mode . [(20230408 115) ((emacs (24 1)) (cl-lib (0 5))) "Improved JavaScript editing mode" tar ((:commit . "7d928272bc311b1dd6f38d3f6365c18153e28636") (:authors ("Steve Yegge" . "steve.yegge@gmail.com") ("mooz" . "stillpedant@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainers ("Steve Yegge" . "steve.yegge@gmail.com")) (:maintainer "Steve Yegge" . "steve.yegge@gmail.com") (:keywords "languages" "javascript") (:url . "https://github.com/mooz/js2-mode/"))])
- (js2-refactor . [(20210306 2003) ((js2-mode (20101228)) (s (1 9 0)) (multiple-cursors (1 0 0)) (dash (1 0 0)) (s (1 0 0)) (yasnippet (0 9 0 1))) "A JavaScript refactoring library for emacs." tar ((:commit . "1372f8449c620d6209173ac12bcb7ac4ce6a3651") (:authors ("Magnar Sveen" . "magnars@gmail.com") ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "conveniences"))])
- (js2hl . [(20201119 816) ((emacs (25 1)) (js2-mode (20190219))) "Highlight/rename things using js2-mode parser" single ((:commit . "8a9a53a861d20ce51a382d6caef48ccd978d8212") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "convenience") (:url . "https://github.com/redguardtoo/js2hl"))])
- (js3-mode . [(20160515 1550) nil "An improved JavaScript editing mode" tar ((:commit . "7fceb21ec56aac7af4b189bb0c0d0cf620327f5a") (:authors ("Thom Blake" . "webmaster@thomblake.com")) (:maintainers ("Thom Blake" . "webmaster@thomblake.com")) (:maintainer "Thom Blake" . "webmaster@thomblake.com") (:keywords "javascript" "languages"))])
- (jscs . [(20151015 1749) ((emacs (24 1)) (cl-lib (0 5))) "Consistent JavaScript editing using JSCS" single ((:commit . "9d39d0f2355e69a020bf76242504f3a33e013ccf") (:authors ("papaeye" . "papaeye@gmail.com")) (:maintainers ("papaeye" . "papaeye@gmail.com")) (:maintainer "papaeye" . "papaeye@gmail.com") (:keywords "languages" "convenience") (:url . "https://github.com/papaeye/emacs-jscs"))])
- (jsdoc . [(20230331 647) ((emacs (29 1)) (dash (2 11 0)) (s (1 12 0))) "Insert JSDoc comments" single ((:commit . "10606a37f70cbf419590bbbc292fe1e800435ed5") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com") (:url . "https://github.com/isamert/jsdoc.el"))])
- (jsfmt . [(20180920 1008) nil "Interface to jsfmt command for javascript files" single ((:commit . "ca141a135c7700eaedef92561d334e1fb7dc28a1") (:authors ("Brett Langdon" . "brett@blangdon.com")) (:maintainers ("Brett Langdon" . "brett@blangdon.com")) (:maintainer "Brett Langdon" . "brett@blangdon.com") (:url . "https://github.com/brettlangdon/jsfmt.el"))])
- (json-mode . [(20211011 630) ((json-snatcher (1 0 0)) (emacs (24 4))) "Major mode for editing JSON files." single ((:commit . "eedb4560034f795a7950fa07016bd4347c368873") (:authors ("Josh Johnston")) (:maintainers ("Josh Johnston")) (:maintainer "Josh Johnston") (:url . "https://github.com/joshwnj/json-mode"))])
- (json-navigator . [(20191213 755) ((emacs (25 1)) (hierarchy (0 6 0))) "View and navigate JSON structures" single ((:commit . "afd902e0b5cde37fad4786515a695d17f1625286") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/json-navigator"))])
- (json-par . [(20230401 901) ((emacs (24 4)) (json-mode (1 7 0))) "Minor mode for structural editing of JSON" tar ((:commit . "9d4503d595c41c5e501f6ce9067b487f8933cd4b") (:authors ("taku0" . "mxxouy6x3m_github@tatapa.org")) (:maintainers ("taku0" . "mxxouy6x3m_github@tatapa.org")) (:maintainer "taku0" . "mxxouy6x3m_github@tatapa.org") (:keywords "abbrev" "convenience" "files") (:url . "https://github.com/taku0/json-par"))])
- (json-process-client . [(20210525 733) ((emacs (25 1))) "Interact with a TCP process using JSON" single ((:commit . "373b2cc7e3d26dc00594e0b2c1bb66815aad2826") (:authors ("Nicolas Petton" . "nicolas@petton.fr") ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:url . "https://gitlab.petton.fr/nico/json-process-client"))])
- (json-reformat . [(20220905 2342) ((emacs (24 3))) "Reformatting tool for JSON" single ((:commit . "e9999b1f1fc933c02ff44f4136602b6a45ed59c6") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:keywords "json") (:url . "https://github.com/gongo/json-reformat"))])
- (json-rpc . [(20200417 1629) ((emacs (24 1)) (cl-lib (0 5))) "JSON-RPC library" single ((:commit . "81a5a520072e20d18aeab2aac4d66c046b031e56") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/elisp-json-rpc"))])
- (json-rpc-server . [(20220205 1504) ((emacs (26))) "Server-side JSON-RPC library." single ((:commit . "349e1f4722474bf1f75dbc8eb9d9c59d790b8083") (:authors ("GitHub user \"Jcaw\"")) (:maintainers ("GitHub user \"Jcaw\"")) (:maintainer "GitHub user \"Jcaw\"") (:keywords "tools" "comm" "json" "rpc") (:url . "https://github.com/jcaw/json-rpc-server.el"))])
- (json-snatcher . [(20200916 1717) ((emacs (24))) "Grabs the path to JSON values in a JSON file" single ((:commit . "b28d1c0670636da6db508d03872d96ffddbc10f2") (:authors ("Sterling Graham" . "sterlingrgraham@gmail.com")) (:maintainers ("Sterling Graham" . "sterlingrgraham@gmail.com")) (:maintainer "Sterling Graham" . "sterlingrgraham@gmail.com") (:url . "http://github.com/sterlingg/json-snatcher"))])
- (jsonian . [(20230414 1851) ((emacs (27 1))) "A major mode for editing JSON files" single ((:commit . "e6a6a8452fc84f77bf5644851306c8b8d63a3bc5") (:authors ("Ian Wahbe")) (:maintainers ("Ian Wahbe")) (:maintainer "Ian Wahbe") (:url . "https://github.com/iwahbe/jsonian"))])
- (jsonl . [(20190623 509) ((emacs (25))) "Utility functions for working with line-delimited JSON" single ((:commit . "3dd0b7bb2b4bce9f9de7367941f0cc78f82049c9") (:authors ("Erik Anderson" . "erik@ebpa.link")) (:maintainers ("Erik Anderson" . "erik@ebpa.link")) (:maintainer "Erik Anderson" . "erik@ebpa.link") (:keywords "tools") (:url . "https://github.com/ebpa/jsonl.el"))])
- (jsonnet-mode . [(20220121 2109) ((emacs (24)) (dash (2 17 0))) "Major mode for editing jsonnet files" single ((:commit . "cef3d352408599a63655002af655d11757579253") (:authors ("Nick Lanham")) (:maintainers ("Nick Lanham")) (:maintainer "Nick Lanham") (:keywords "languages") (:url . "https://github.com/mgyucht/jsonnet-mode"))])
- (jss . [(20130508 1423) ((emacs (24 1)) (websocket (0)) (js2-mode (0))) "An emacs interface to webkit and mozilla debuggers" tar ((:commit . "41749257aecf13c7bd6ed489b5ab3304d06e40bc") (:authors ("Marco Baringer" . "mb@bese.it")) (:maintainers ("Marco Baringer" . "mb@bese.it")) (:maintainer "Marco Baringer" . "mb@bese.it") (:keywords "languages"))])
- (jst . [(20150604 1138) ((s (1 9)) (f (0 17)) (dash (2 10)) (pcache (0 3)) (emacs (24 4))) "JS test mode" single ((:commit . "865ff97449a4cbbcb40d38b4908cf4d7b22a5108") (:authors ("Cheung Hoi Yu" . "yeannylam@gmail.com")) (:maintainers ("Cheung Hoi Yu" . "yeannylam@gmail.com")) (:maintainer "Cheung Hoi Yu" . "yeannylam@gmail.com") (:keywords "js" "javascript" "jasmine" "coffee" "coffeescript") (:url . "https://github.com/cheunghy/jst-mode"))])
- (jtags . [(20160211 2029) nil "enhanced tags functionality for Java development" tar ((:commit . "f7d29e1635ef7ee4ee2cdb8f1f6ab83e1015c84a") (:authors ("Alexander Baltatzis" . "alexander@baltatzis.com") ("Johan Dykstrom" . "jody4711-sf@yahoo.se")) (:maintainers ("Johan Dykstrom" . "jody4711-sf@yahoo.se")) (:maintainer "Johan Dykstrom" . "jody4711-sf@yahoo.se") (:keywords "languages" "tools") (:url . "http://jtags.sourceforge.net"))])
- (julia-formatter . [(20230301 1807) ((emacs (27 1)) (session-async (0 0 4))) "Use JuliaFormatter.jl for julia code" single ((:commit . "6297a3e6b4b24ec0158b43b886be346043c2772f") (:authors ("Felipe Lema" . "felipe.lema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipe.lema@mortemale.org")) (:maintainer "Felipe Lema" . "felipe.lema@mortemale.org") (:keywords "convenience" "tools") (:url . "https://codeberg.org/FelipeLema/julia-formatter.el"))])
- (julia-mode . [(20230504 1435) ((emacs (26 1))) "Major mode for editing Julia source code" tar ((:commit . "7e301f4414e25b4409859c3b8d371352807a3194") (:keywords "languages") (:url . "https://github.com/JuliaEditorSupport/julia-emacs"))])
- (julia-repl . [(20230112 1929) ((emacs (25 1)) (s (1 12))) "A minor mode for a Julia REPL" single ((:commit . "57a15dfafed680ad7d81f779d414e8cb6717417c") (:authors ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainers ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainer "Tamas Papp" . "tkpapp@gmail.com") (:keywords "languages") (:url . "https://github.com/tpapp/julia-repl"))])
- (julia-shell . [(20161125 1910) ((julia-mode (0 3))) "Major mode for an inferior Julia shell" tar ((:commit . "583a0b2ca20461ab4356929fd0f2212c22341b69") (:authors ("Dennis Ogbe" . "dogbe@purdue.edu")) (:maintainers ("Dennis Ogbe" . "dogbe@purdue.edu")) (:maintainer "Dennis Ogbe" . "dogbe@purdue.edu"))])
- (julia-snail . [(20230503 522) ((emacs (26 2)) (dash (2 16 0)) (julia-mode (0 3)) (s (1 12 0)) (spinner (1 7 3)) (vterm (0 0 1)) (popup (0 5 9))) "Julia Snail" tar ((:commit . "5e22cf0badba469c7f4d2bd20682329823b4f151") (:url . "https://github.com/gcv/julia-snail"))])
- (julia-ts-mode . [(20230505 1846) ((emacs (29)) (julia-mode (0 4))) "Major mode for Julia source code using tree-sitter" single ((:commit . "a1592dee00c979c238ac3465050a305579657d86") (:authors ("Ronan Arraes Jardim Chagas")) (:maintainers ("Ronan Arraes Jardim Chagas")) (:maintainer "Ronan Arraes Jardim Chagas") (:keywords "julia" "languages" "tree-sitter") (:url . "https://github.com/ronisbr/julia-ts-mode"))])
- (julia-vterm . [(20220912 246) ((emacs (25 1)) (vterm (0 0 1))) "A mode for Julia REPL using vterm" single ((:commit . "e4d1c28935c47429442ddfcd735cb8d8c2d8db66") (:authors ("Shigeaki Nishina")) (:maintainers ("Shigeaki Nishina")) (:maintainer "Shigeaki Nishina") (:keywords "languages" "julia") (:url . "https://github.com/shg/julia-vterm.el"))])
- (jumblr . [(20170727 2043) ((s (1 8 0)) (dash (2 2 0))) "an anagram game for emacs" tar ((:commit . "34533dfb9db8538c005f4eaffafeff7ed193729f") (:keywords "anagram" "word game" "games") (:url . "https://github.com/mkmcc/jumblr"))])
- (jump . [(20210110 2237) ((findr (0 7)) (inflections (2 4)) (cl-lib (0 5))) "build functions which contextually jump between files" single ((:commit . "55caa66a7cc6e0b1a76143fd40eff38416928941") (:authors ("Eric Schulte")) (:maintainers ("Eric Schulte")) (:maintainer "Eric Schulte") (:keywords "project" "convenience" "navigation") (:url . "http://github.com/eschulte/jump.el"))])
- (jump-char . [(20180601 1348) nil "navigation by char" single ((:commit . "1e31a3c687f2b3c71bbfab881c6d75915534bb9e") (:authors ("Le Wang")) (:maintainers ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/jump-char"))])
- (jump-to-line . [(20130122 1653) nil "Jump to line number at point." single ((:commit . "01ef8c3529d85e6c59cc20840acbc4a8e8325bc8") (:authors ("ongaeshi")) (:maintainers ("ongaeshi")) (:maintainer "ongaeshi") (:keywords "jump" "line" "back" "file" "ruby" "csharp" "python" "perl"))])
- (jump-tree . [(20171014 1551) nil "Treat position history as a tree" tar ((:commit . "282267dc6305889e31d46b405b7ad4dfe5923b66") (:authors ("Wen Yang" . "yangwen0228@foxmail.com")) (:maintainers ("Wen Yang" . "yangwen0228@foxmail.com")) (:maintainer "Wen Yang" . "yangwen0228@foxmail.com") (:keywords "convenience" "position" "jump" "tree") (:url . "https://github.com/yangwen0228/jump-tree"))])
- (jumplist . [(20151120 345) ((cl-lib (0 5))) "Jump like vim jumplist or ex jumplist" single ((:commit . "c482d137d95bc5e1bcd790cdbde25b7f729b2502") (:authors ("ganmacs <ganmacs_at_gmail.com>")) (:maintainers ("ganmacs <ganmacs_at_gmail.com>")) (:maintainer "ganmacs <ganmacs_at_gmail.com>") (:keywords "jumplist" "vim") (:url . "https://github.com/ganmacs/jumplist"))])
- (jupyter . [(20230214 215) ((emacs (26)) (zmq (0 10 3)) (cl-lib (0 5)) (simple-httpd (1 5 0)) (websocket (1 9))) "Jupyter" tar ((:commit . "eebeef1293287075f65d27f5442bb151bf27d92a") (:authors ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainers ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainer "Nathaniel Nicandro" . "nathanielnicandro@gmail.com") (:url . "https://github.com/dzop/emacs-jupyter"))])
- (just-mode . [(20230303 2255) ((emacs (26 1))) "Justfile editing mode" single ((:commit . "d7f52eab8fa3828106f80acb1e2176e5877b7191") (:authors ("Leon Barrett" . "leon@barrettnexus.com")) (:maintainers ("Leon Barrett" . "leon@barrettnexus.com")) (:maintainer "Leon Barrett" . "leon@barrettnexus.com") (:keywords "files" "languages" "tools") (:url . "https://github.com/leon-barrett/just-mode.el"))])
- (justl . [(20221222 1650) ((transient (0 1 0)) (emacs (25 3)) (s (1 2 0)) (f (0 20 0))) "Major mode for driving just files" single ((:commit . "141daaa4b0dc07fe25423609dcd14441a9f2613e") (:authors ("Sibi Prabakaran")) (:maintainers ("Sibi Prabakaran")) (:maintainer "Sibi Prabakaran") (:keywords "just" "justfile" "tools" "processes") (:url . "https://github.com/psibi/justl.el"))])
- (jvm-mode . [(20150422 708) ((dash (2 6 0)) (emacs (24))) "Monitor and manage your JVMs" single ((:commit . "3355dbaf5b0185aadfbad24160399abb32c5bea0") (:authors ("Martin Trojer" . "martin.trojer@gmail.com")) (:maintainers ("Martin Trojer" . "martin.trojer@gmail.com")) (:maintainer "Martin Trojer" . "martin.trojer@gmail.com") (:keywords "convenience") (:url . "https://github.com/martintrojer/jvm-mode.el"))])
- (k8s-mode . [(20230305 1039) ((emacs (24 3)) (yaml-mode (0 0 10))) "Major mode for Kubernetes configuration file" tar ((:commit . "83266cecd6a39cdf57d124270646047860bfb7ab") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:url . "https://github.com/TxGVNN/emacs-k8s-mode"))])
- (kaesar . [(20230221 108) ((emacs (24 3)) (kaesar-pbkdf2 (0 9 0))) "AES algorithm encrypt/decrypt" single ((:commit . "75655238e0dcdb77a74d685cc4f3368fcd284020") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "data") (:url . "https://github.com/mhayashi1120/Emacs-kaesar"))])
- (kaesar-file . [(20230221 108) ((emacs (24 3)) (kaesar (0 1 1))) "AES encrypt/decrypt file" single ((:commit . "75655238e0dcdb77a74d685cc4f3368fcd284020") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "data" "files") (:url . "https://github.com/mhayashi1120/Emacs-kaesar"))])
- (kaesar-mode . [(20230221 108) ((emacs (24 3)) (kaesar (0 1 4))) "AES encrypt/decrypt buffer" single ((:commit . "75655238e0dcdb77a74d685cc4f3368fcd284020") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "data" "convenience") (:url . "https://github.com/mhayashi1120/Emacs-kaesar"))])
- (kakapo-mode . [(20171004 451) ((cl-lib (0 5))) "TABS (hard or soft) for indentation (leading whitespace), and SPACES for alignment." single ((:commit . "67d516138172fd60782df94454b3d0bd247e84f3") (:keywords "indentation") (:url . "https://github.com/listx/kakapo-mode"))])
- (kakoune . [(20230206 2037) ((ryo-modal (0 45)) (multiple-cursors (1 4)) (expand-region (0 11 0)) (emacs (25 1))) "A simulation, but not emulation, of kakoune" tar ((:commit . "b39c5605e896c55ea246f755c46171bd6d0768a8") (:authors ("Joseph Morag" . "jm4157@columbia.edu")) (:maintainers ("Joseph Morag" . "jm4157@columbia.edu")) (:maintainer "Joseph Morag" . "jm4157@columbia.edu") (:url . "https://github.com/jmorag/kakoune.el"))])
- (kaleidoscope . [(20170808 817) ((s (1 11 0))) "Controlling Kaleidoscope-powered devices." single ((:commit . "b89a243f6024099192f1bc38d8a54e3e7a654090") (:authors ("Gergely Nagy")) (:maintainers ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://github.com/algernon/kaleidoscope.el"))])
- (kaleidoscope-evil-state-flash . [(20170728 1020) ((evil (1 2 12)) (kaleidoscope (0 1 0)) (s (1 11 0))) "Flash keyboard LEDs when changing Evil state" single ((:commit . "5b88327350c3d6375ef1d43fb31342eaabd88fdc") (:authors ("Gergely Nagy")) (:maintainers ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://github.com/algernon/kaleidoscope.el"))])
- (kana . [(20210531 1427) ((emacs (24 4)) (dash (2 17 0))) "Learn Japanese hiragana and katakana" single ((:commit . "d3d550aad67ef8625b3860598bf3622f5b2a7d32") (:authors ("Damon Chan" . "elecming@gmail.com")) (:maintainers ("Damon Chan" . "elecming@gmail.com")) (:maintainer "Damon Chan" . "elecming@gmail.com") (:keywords "tools") (:url . "https://github.com/chenyanming/kana"))])
- (kanban . [(20230210 1505) nil "Parse org-todo headlines to use org-tables as Kanban tables" single ((:commit . "d70fa7acab2bfcbb7d3da43c1343073f7eff4998") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainers ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de") (:keywords "outlines" "convenience"))])
- (kanji-mode . [(20160826 1139) nil "View stroke order for kanji characters at cursor" tar ((:commit . "5e9d5b72468ece11cfb81b729be6babf63ede425") (:authors ("Wojciech Gac" . "wojciech.s.gac@gmail.com")) (:maintainers ("Wojciech Gac" . "wojciech.s.gac@gmail.com")) (:maintainer "Wojciech Gac" . "wojciech.s.gac@gmail.com") (:url . "http://github.com/wsgac/kanji-mode "))])
- (kaocha-runner . [(20190904 1950) ((emacs (26)) (s (1 4 0)) (cider (0 21 0)) (parseedn (0 1 0))) "A package for running Kaocha tests via CIDER." single ((:commit . "c4ec9cdc817e5f4c3f8d6013e44ea2df8f3eb07f") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:url . "https://github.com/magnars/kaocha-runner.el"))])
- (kaolin-themes . [(20230402 1851) ((emacs (25 1)) (autothemer (0 2 2)) (cl-lib (0 6))) "A set of eye pleasing themes" tar ((:commit . "facb2a08d3179103d4c3a9905b37c87831fe1665") (:authors ("Ogden Webb" . "ogdenwebb@gmail.com")) (:maintainers ("Ogden Webb" . "ogdenwebb@gmail.com")) (:maintainer "Ogden Webb" . "ogdenwebb@gmail.com") (:keywords "dark" "light" "teal" "blue" "violet" "purple" "brown" "theme" "faces") (:url . "https://github.com/ogdenwebb/emacs-kaolin-themes"))])
- (kaomoji . [(20220721 441) ((emacs (24 3)) (helm-core (3 6 0))) "Input kaomoji superb easily" tar ((:commit . "fba0018a13eba70c2bffc6153dcfee99937fa3d6") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainers ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com") (:keywords "tools" "fun") (:url . "https://github.com/kuanyui/kaomoji.el"))])
- (kapacitor . [(20190414 1908) ((emacs (25 1)) (magit (2 13 0)) (magit-popup (2 12 4))) "Main file for kapacitor-mode" single ((:commit . "e3300d8b4017a2f66b0d929cb85bcc7ee2612072") (:authors ("Manoj Kumar Manikchand" . "manojm.321@gmail.com")) (:maintainers ("Manoj Kumar Manikchand" . "manojm.321@gmail.com")) (:maintainer "Manoj Kumar Manikchand" . "manojm.321@gmail.com") (:keywords "kapacitor" "emacs" "magit" "tools") (:url . "http://github.com/Manoj321/kapacitor-el"))])
- (karma . [(20160220 1245) ((pkg-info (0 4)) (emacs (24))) "Karma Test Runner Emacs Integration" single ((:commit . "31d3e7708246183d7ed0686be92bf23140af348c") (:authors ("Samuel Tonini")) (:maintainers ("Samuel Tonini")) (:maintainer "Samuel Tonini") (:keywords "language" "javascript" "js" "karma" "testing") (:url . "http://github.com/tonini/karma.el"))])
- (kconfig-mode . [(20220604 1415) ((emacs (24 3))) "Major mode for editing Kconfig files" single ((:commit . "cd87b71c8c1739d026645ece0bbd20055a7a2d4a") (:authors ("Dela Anthonio" . "dell.anthonio@gmail.com")) (:maintainers ("Dela Anthonio" . "dell.anthonio@gmail.com")) (:maintainer "Dela Anthonio" . "dell.anthonio@gmail.com") (:keywords "kconfig" "languages" "linux" "kernel") (:url . "https://github.com/delaanthonio/kconfig-mode"))])
- (kconfig-ref . [(20230220 1207) ((emacs (24 4)) (ripgrep (0 4 0)) (projectile (2 7 0))) "A simple package for looking up kconfig symbol quickly" single ((:commit . "dfb127fa5ac003a06f108d2e876c84a1931e5678") (:authors ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainers ("Jason Kim" . "sukbeom.kim@gmail.com")) (:maintainer "Jason Kim" . "sukbeom.kim@gmail.com") (:keywords "tools" "kconfig" "linux" "kernel") (:url . "https://github.com/seokbeomkim/kconfig-ref"))])
- (kdeconnect . [(20210519 2016) nil "An interface for KDE Connect" single ((:commit . "4977af8cb5fdc21da770f3ee43ad7823f2937da3") (:authors ("Carl Lieberman" . "dev@carl.ac")) (:maintainers ("Carl Lieberman" . "dev@carl.ac")) (:maintainer "Carl Lieberman" . "dev@carl.ac") (:keywords "kdeconnect" "android"))])
- (keepass-mode . [(20211030 958) ((emacs (27))) "Mode for KeePass DB." tar ((:commit . "f432bb60f9f3bd027025140d723906dcabeefaef") (:authors ("Ignasi Fosch" . "natx@y10k.ws")) (:maintainer "Ignasi Fosch" . "natx@y10k.ws") (:keywords "data" "files" "tools") (:url . "https://github.com/ifosch/keepass-mode"))])
- (keg . [(20220923 958) ((emacs (24 1))) "Modern Elisp package development system" tar ((:commit . "7fbfd987d35e29eaab2ebad4f0ed6ee2e2adfe28") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/keg.el"))])
- (keg-mode . [(20220307 829) ((emacs (24 4))) "Major mode for editing Keg files" single ((:commit . "d2ef9cfaee1256849291cfade3d730667f55aaf2") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/keg.el"))])
- (kele . [(20230326 33) ((emacs (28 1)) (async (1 9 7)) (dash (2 19 1)) (f (0 20 0)) (ht (2 3)) (plz (0 4)) (s (1 13 0)) (yaml (0 5 1))) "Spritzy Kubernetes cluster management" single ((:commit . "15e841fb7bbc08545534e466ce831d6e80fd8901") (:authors ("Jonathan Jin" . "me@jonathanj.in")) (:maintainers ("Jonathan Jin" . "me@jonathanj.in")) (:maintainer "Jonathan Jin" . "me@jonathanj.in") (:keywords "kubernetes" "tools") (:url . "https://github.com/jinnovation/kele.el"))])
- (kerl . [(20150424 2005) nil "Emacs integration for kerl" single ((:commit . "1732ee26213f021bf040919c45ad276aafcaae14") (:authors ("Correl Roush" . "correl@gmail.com")) (:maintainers ("Correl Roush" . "correl@gmail.com")) (:maintainer "Correl Roush" . "correl@gmail.com") (:keywords "tools") (:url . "http://github.com/correl/kerl.el/"))])
- (key-assist . [(20230122 718) ((emacs (24 3))) "Minibuffer keybinding cheatsheet and launcher" single ((:commit . "41a958ca6b038586bfdcf01045bb8b9d379248fe") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com") (:keywords "abbrev" "convenience" "docs" "help") (:url . "https://github.com/Boruch-Baum/emacs-key-assist"))])
- (key-chord . [(20201222 2030) ((emacs (24))) "map pairs of simultaneously pressed keys to commands" single ((:commit . "7f7fd7c5bd2b996fa054779357e1566f7989e07d") (:authors ("David Andersson <l.david.andersson(at)sverige.nu>")) (:maintainers ("David Andersson <l.david.andersson(at)sverige.nu>")) (:maintainer "David Andersson <l.david.andersson(at)sverige.nu>") (:keywords "keyboard" "chord" "input"))])
- (key-combo . [(20230323 829) nil "map key sequence to commands" single ((:commit . "16fb73522d53547ef38f3710aff7c0b01005d576") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:keywords "keyboard" "input") (:url . "https://github.com/uk-ar/key-combo"))])
- (key-intercept . [(20140211 749) nil "Intercept prefix keys" single ((:commit . "d9a60edb4ce893f2d3d94f242164fdcc62d43cf2") (:authors ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainers ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainer "INA Lintaro <tarao.gnn at gmail.com>") (:keywords "keyboard") (:url . "http://github.com/tarao/key-intercept-el"))])
- (key-leap . [(20160831 1447) ((emacs (24 3))) "Leap between lines by typing keywords" single ((:commit . "b3f6ef15c8a13870475d5af159fa24b30f97dea0") (:authors ("Martin Rykfors" . "martinrykfors@gmail.com")) (:maintainers ("Martin Rykfors" . "martinrykfors@gmail.com")) (:maintainer "Martin Rykfors" . "martinrykfors@gmail.com") (:keywords "point" "convenience") (:url . "https://github.com/MartinRykfors/key-leap"))])
- (key-quiz . [(20200226 2129) ((emacs (26))) "Emacs Keys Quiz" single ((:commit . "1ee67f3f8977d95785e021f7896685de1979137e") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com") (:keywords "games") (:url . "https://github.com/federicotdn/key-quiz"))])
- (key-seq . [(20150907 756) ((key-chord (0 6))) "map pairs of sequentially pressed keys to commands" single ((:commit . "e29b083a6427d061638749194fc249ef69ad2cc0") (:authors ("Vyacheslav Levit" . "dev@vlevit.org")) (:maintainers ("Vyacheslav Levit" . "dev@vlevit.org")) (:maintainer "Vyacheslav Levit" . "dev@vlevit.org") (:keywords "convenience" "keyboard" "keybindings") (:url . "http://github.com/vlevit/key-seq.el"))])
- (keycast . [(20230212 2016) ((emacs (25 3)) (compat (29 1 3 4))) "Show current command and its binding" single ((:commit . "cabb3fac1ccf2980ff3bcdbc1648d2a15ebe7cb1") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "multimedia") (:url . "https://github.com/tarsius/keycast"))])
- (keychain-environment . [(20180318 2223) nil "load keychain environment variables" single ((:commit . "d3643196de6dc79ea77f9f4805028350fd76100b") (:authors ("Paul Tipper <bluefoo at googlemail dot com>")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "gnupg" "pgp" "ssh") (:url . "https://github.com/tarsius/keychain-environment"))])
- (keydef . [(20090428 1931) nil "a simpler way to define keys, with kbd syntax" single ((:commit . "dff2be9f58d12d8c6a490ad0c1b2b10b55528dc0") (:authors ("Michael John Downes" . "mjd@ams.org")) (:maintainers ("Michael John Downes" . "mjd@ams.org")) (:maintainer "Michael John Downes" . "mjd@ams.org") (:keywords "convenience" "lisp" "customization" "keyboard" "keys"))])
- (keyfreq . [(20220607 1613) ((cl-lib (0 5))) "track command frequencies" single ((:commit . "dd88193cd7a91a92113121191573758ea2a3ceb1") (:authors ("Ryan Yeske, Michal Nazarewicz (mina86/AT/mina86.com)")) (:maintainers ("David Capello, Xah lee")) (:maintainer "David Capello, Xah lee"))])
- (keymap-utils . [(20230213 1152) ((emacs (25 1)) (compat (29 1 3 4))) "Keymap utilities" single ((:commit . "1806ff73b0a68e84234d65c7d08a18cf3f0d29e5") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience" "extensions") (:url . "https://github.com/tarsius/keymap-utils"))])
- (keypress-multi-event . [(20190109 530) ((emacs (24 3))) "Perform different actions for the same keypress." single ((:commit . "9de65a27e10d8ae47aa6d28c02c3eb82ee8c0b2e") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com") (:keywords "abbrev" "convenience" "wp" "keyboard") (:url . "https://www.github.com/Boruch_Baum/emacs-keypress-multi-event"))])
- (keypression . [(20200819 534) ((emacs (26 3))) "Keystroke visualizer" single ((:commit . "9427241f3fa539e4b5ad7581a05eb7e49f2cf518") (:authors ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainers ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainer "chuntaro" . "chuntaro@sakura-games.jp") (:keywords "key" "screencast" "tools") (:url . "https://github.com/chuntaro/emacs-keypression"))])
- (keyset . [(20150220 530) ((dash (2 8 0)) (cl-lib (0 5))) "A small library for structuring key bindings." single ((:commit . "c6b375fbe8035fde593d1d96895eb6e3f111d379") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/keyset"))])
- (keystore-mode . [(20190409 1946) ((emacs (24 3)) (origami (1 0)) (s (1 12 0)) (seq (2 20))) "A major mode for viewing and managing (java) keystores" tar ((:commit . "43bd5926348298d077c7221f37902c990df3f951") (:authors ("Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com")) (:maintainers ("Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com")) (:maintainer "Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com") (:keywords "tools") (:url . "https://github.com/peterpaul/keystore-mode"))])
- (keyswap . [(20160813 957) ((emacs (24 3))) "swap bindings between key pairs" single ((:commit . "cd682a7c4a8d64d6bae6a005db5045232e5e7b95") (:authors ("Matthew Malcomson" . "hardenedapple@gmail.com")) (:maintainers ("Matthew Malcomson" . "hardenedapple@gmail.com")) (:maintainer "Matthew Malcomson" . "hardenedapple@gmail.com") (:keywords "convenience") (:url . "http://github.com/hardenedapple/keyswap.el"))])
- (keytar . [(20221231 1655) ((emacs (24 4))) "Emacs Lisp interface for node-keytar" single ((:commit . "51c8f2f1f207cc67af4e67731ee056860e107811") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "keytar" "password" "credential" "secret" "security") (:url . "https://github.com/emacs-grammarly/keytar"))])
- (keyword-search . [(20180424 1102) nil "browser keyword search from Emacs" tar ((:commit . "f8475ecaddb8804a9be6bee47678207c86ac8dee") (:maintainers ("Jens Petersen")) (:maintainer "Jens Petersen") (:keywords "web" "search" "keyword") (:url . "https://github.com/juhp/keyword-search"))])
- (kfg . [(20140909 538) ((f (0 17 1))) "an emacs configuration system" single ((:commit . "ffc35b77f227d4c64a1271ec30d31333ffeb0013") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/kfg"))])
- (khalel . [(20230122 1139) ((emacs (27 1))) "Import, edit and create calendar events through khal" tar ((:commit . "fbd4b4d6ae8f152140674e843ed7d82d223d52fe") (:authors ("Hanno Perrey <http://gitlab.com/hperrey>")) (:maintainers ("Hanno Perrey" . "hanno@hoowl.se")) (:maintainer "Hanno Perrey" . "hanno@hoowl.se") (:keywords "event" "calendar" "ics" "khal") (:url . "https://gitlab.com/hperrey/khalel"))])
- (khardel . [(20220223 934) ((emacs (27 1)) (yaml-mode (0 0 13))) "Integrate with khard" tar ((:commit . "1436ec5ef1b5b26104a4735ee64c0afe148700de") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/khardel"))])
- (khoj . [(20230503 710) ((emacs (27 1)) (transient (0 3 0)) (dash (2 19 1))) "A search assistant for your second brain" single ((:commit . "3386cc92b5600ef42fec9fc9dbae70e278f658be") (:authors ("Debanjum Singh Solanky" . "debanjum@gmail.com")) (:maintainers ("Debanjum Singh Solanky" . "debanjum@gmail.com")) (:maintainer "Debanjum Singh Solanky" . "debanjum@gmail.com") (:keywords "search" "chat" "org-mode" "outlines" "markdown" "beancount" "image") (:url . "https://github.com/debanjum/khoj/tree/master/src/interface/emacs"))])
- (kibit-helper . [(20150508 1533) ((s (0 8)) (emacs (24))) "Conveniently use the Kibit Leiningen plugin from Emacs" single ((:commit . "ec5f154db3bb0c838e86f527353f08644cede926") (:authors ("Jonas Enlund") ("James Elliott" . "james@brunchboy.com")) (:maintainers ("Jonas Enlund")) (:maintainer "Jonas Enlund") (:keywords "languages" "clojure" "kibit") (:url . "http://www.github.com/brunchboy/kibit-helper"))])
- (kill-file-path . [(20230306 1041) ((emacs (26))) "Copy file name into kill ring" single ((:commit . "5dcbce69cbae17665216a32dd20f27de54c62972") (:authors ("Adam Chyła" . "adam@chyla.org")) (:maintainers ("Adam Chyła" . "adam@chyla.org")) (:maintainer "Adam Chyła" . "adam@chyla.org") (:keywords "files") (:url . "https://github.com/chyla/kill-file-path/kill-file-path.el"))])
- (kill-or-bury-alive . [(20210320 1231) ((emacs (24 4)) (cl-lib (0 5))) "Precise control over buffer killing in Emacs" single ((:commit . "388067e764bf3922234196e2e9dd9e8f664c634d") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "buffer" "killing" "convenience") (:url . "https://github.com/mrkkrp/kill-or-bury-alive"))])
- (kill-ring-search . [(20140422 1555) nil "incremental search for the kill ring" single ((:commit . "23535b4a01a1cb1574604e36c49614e84e85c883") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "convenience" "matching") (:url . "http://nschum.de/src/emacs/kill-ring-search/"))])
- (killer . [(20190128 10) nil "kill and delete text" single ((:commit . "ace0547944933440384ceeb5876b1f68c082d540") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "http://github.com/tarsius/killer"))])
- (kite . [(20130201 1938) ((json (1 2)) (websocket (0 93 1))) "WebKit inspector front-end" tar ((:commit . "7ed74d1147a6ddd152d3da65dc30df3517d53144") (:authors ("Julian Scheid" . "julians37@gmail.com")) (:maintainers ("Julian Scheid" . "julians37@gmail.com")) (:maintainer "Julian Scheid" . "julians37@gmail.com") (:keywords "tools"))])
- (kite-mini . [(20160508 1106) ((dash (2 11 0)) (websocket (1 5))) "Remotely evaluate JavaScript in the WebKit debugger" tar ((:commit . "48734092e735033ad7664a9933acd4556e095f79") (:authors ("Tung Dao" . "me@tungdao.com")) (:maintainers ("Tung Dao" . "me@tungdao.com")) (:maintainer "Tung Dao" . "me@tungdao.com") (:keywords "webkit") (:url . "https://github.com/tungd/kite-mini.el"))])
- (kivy-mode . [(20230504 513) nil "Emacs major mode for editing Kivy files" single ((:commit . "22fd80d79f9ca66324018430e54232a4bf6cdbd4") (:authors ("Dean Serenevy" . "dean@serenevy.net")) (:maintainers ("Dean Serenevy" . "dean@serenevy.net")) (:maintainer "Dean Serenevy" . "dean@serenevy.net"))])
- (kiwix . [(20220316 847) ((emacs (25 1)) (request (0 3 0))) "Searching offline Wikipedia through Kiwix." tar ((:commit . "444f686a7f75db788d54f544b923a3532732eb8b") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "kiwix" "wikipedia") (:url . "https://repo.or.cz/kiwix.el.git"))])
- (kixtart-mode . [(20150611 1604) ((emacs (24))) "major mode for Kixtart scripting files" single ((:commit . "1c2356797e7b766bbaaa2b341176a8b10499cd79") (:authors ("Ryrun <https://github.com/ryrun>")) (:maintainers ("Ryrun <https://github.com/ryrun>")) (:maintainer "Ryrun <https://github.com/ryrun>") (:keywords "languages") (:url . "https://github.com/ryrun/kixtart-mode"))])
- (kkp . [(20230403 2156) ((emacs (27 1)) (compat (29 1 3 4))) "Enable support for the Kitty Keyboard Protocol" single ((:commit . "5652ba0bfa7a4c03daffc301c9ca4a9899c4f440") (:authors ("Benjamin Orthen" . "contact@orthen.net")) (:maintainers ("Benjamin Orthen" . "contact@orthen.net")) (:maintainer "Benjamin Orthen" . "contact@orthen.net") (:keywords "terminals") (:url . "https://github.com/benjaminor/kkp"))])
- (klere-theme . [(20230214 213) ((emacs (24))) "A dark theme with lambent color highlights and incremental grays" single ((:commit . "61d2cd649a1cf57ce61063f76b395f21f358372e") (:authors ("Wamm K. D." . "jaft.r@outlook.com")) (:maintainers ("Wamm K. D." . "jaft.r@outlook.com")) (:maintainer "Wamm K. D." . "jaft.r@outlook.com") (:url . "https://codeberg.org/WammKD/emacs-klere-theme"))])
- (kmacro-x . [(20230502 1253) ((emacs (27 2))) "Keyboard macro helpers and extensions" tar ((:commit . "b5f6b408a9134f3db14c0516c5ba48d68178a175") (:authors ("Wojciech Siewierski")) (:maintainers ("Wojciech Siewierski")) (:maintainer "Wojciech Siewierski") (:keywords "convenience") (:url . "https://github.com/vifon/kmacro-x.el"))])
- (know-your-http-well . [(20160208 2305) nil "Look up the meaning of HTTP headers, methods, relations, status codes" tar ((:commit . "c381a9735f3ea86ebc9667e35cdfeab0b67fefb7"))])
- (kodi-remote . [(20190622 1325) ((request (0 2 0)) (let-alist (1 0 4)) (json (1 4)) (cl-lib (0 5)) (f (20190109 906))) "Remote Control for Kodi" single ((:commit . "f5e932036c16e2b61a63020e006fc601e38d181e") (:authors ("Stefan Huchler" . "stefan.huchler@mail.de")) (:maintainers ("Stefan Huchler" . "stefan.huchler@mail.de")) (:maintainer "Stefan Huchler" . "stefan.huchler@mail.de") (:keywords "kodi" "tools" "convinience") (:url . "http://github.com/spiderbit/kodi-remote.el"))])
- (kolon-mode . [(20140122 1134) nil "Syntax highlighting for Text::Xslate's Kolon syntax" single ((:commit . "5af0955e280ae991862189ebecd3937c5fc8fb9f") (:authors ("Sam Tran")) (:maintainers ("Sam Tran")) (:maintainer "Sam Tran") (:keywords "xslate" "perl") (:url . "https://github.com/samvtran/kolon-mode"))])
- (kooten-theme . [(20161023 905) ((emacs (24 1))) "Dark color theme" single ((:commit . "d10197b4dd7af02cd14aeab2573c273a294798c3") (:authors ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainers ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainer "Pascal van Kooten" . "kootenpv@gmail.com") (:keywords "themes") (:url . "http://github.com/kootenpv/emacs-kooten-theme"))])
- (korean-holidays . [(20190102 1558) nil "Korean holidays for calendar." single ((:commit . "3f90ed86f46f8e5533f23baa40e2513ac497ca2b") (:authors ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainers ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainer "SeungKi Kim" . "tttuuu888@gmail.com") (:keywords "calendar") (:url . "https://github.com/tttuuu888/korean-holidays"))])
- (kosmos-theme . [(20170502 1850) ((emacs (24))) "Black and lightgray theme with not so much syntax highlighting." single ((:commit . "616456d2376a75dc31190ad65137d179fbad4336") (:authors ("Maxim Kim" . "habamax@gmail.com")) (:maintainers ("Maxim Kim" . "habamax@gmail.com")) (:maintainer "Maxim Kim" . "habamax@gmail.com") (:url . "https://github.com/habamax/kosmos-theme"))])
- (kotlin-mode . [(20230123 1859) ((emacs (24 3))) "Major mode for kotlin" tar ((:commit . "fddd747e5b4736e8b27a147960f369b86179ddff") (:authors ("Shodai Yokoyama" . "quantumcars@gmail.com")) (:maintainers ("Shodai Yokoyama" . "quantumcars@gmail.com")) (:maintainer "Shodai Yokoyama" . "quantumcars@gmail.com") (:keywords "languages") (:url . "https://github.com/Emacs-Kotlin-Mode-Maintainers/kotlin-mode"))])
- (kotlin-ts-mode . [(20230505 1309) ((emacs (29))) "A mode for editing Kotlin files based on tree-sitter" single ((:commit . "b5ebf49c7b29a49151ff000ba5d040ea0801a9c7") (:authors ("Alex Figl-Brick" . "alex@alexbrick.me")) (:maintainers ("Alex Figl-Brick" . "alex@alexbrick.me")) (:maintainer "Alex Figl-Brick" . "alex@alexbrick.me") (:url . "https://gitlab.com/bricka/emacs-kotlin-ts-mode"))])
- (kpm-list . [(20170924 1352) nil "An emacs buffer list that tries to intelligently group together buffers." single ((:commit . "e0f5112e5ce8ec1b603f4428fa51681c68bb28f5") (:authors ("Kevin Mahoney")) (:maintainers ("Kevin Mahoney")) (:maintainer "Kevin Mahoney") (:url . "https://github.com/KMahoney/kpm-list/"))])
- (kroman . [(20150827 2340) nil "Korean hangul romanization" single ((:commit . "431144a3cd629a2812a668a29ad85182368dc9b0") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com") (:keywords "korean" "roman"))])
- (ksp-cfg-mode . [(20190414 2348) ((emacs (24)) (cl-lib (0 5))) "major mode for editing KSP CFG files" single ((:commit . "faec8bd8456c67276d065eb68c88a30efcef59ef") (:authors ("Emily Backes" . "lucca@accela.net")) (:maintainers ("Emily Backes" . "lucca@accela.net")) (:maintainer "Emily Backes" . "lucca@accela.net") (:keywords "data") (:url . "http://github.com/lashtear/ksp-cfg-mode"))])
- (ksp-mode . [(20221220 1136) ((emacs (27 1))) "Major mode for editing ksp files" single ((:commit . "89b91b8ed6753867e30aa494e5d80325dfe25569") (:maintainers ("YoungJoo Lee" . "youngker@gmail.com")) (:maintainer "YoungJoo Lee" . "youngker@gmail.com") (:keywords "ksp" "languages") (:url . "https://github.com/youngker/ksp-mode.el"))])
- (kubectx-mode . [(20200116 1918) ((emacs (24))) "Change kubectl context/namespace and show in mode line" single ((:commit . "f08687ae5403eb18bbeffc6dafdfde469bdb9a36") (:authors ("Terje Sannum" . "terje@offpiste.org")) (:maintainers ("Terje Sannum" . "terje@offpiste.org")) (:maintainer "Terje Sannum" . "terje@offpiste.org") (:keywords "tools" "kubernetes") (:url . "https://github.com/terjesannum/emacs-kubectx-mode"))])
- (kubedoc . [(20220401 1113) ((emacs (27 1))) "Kubernetes API Documentation" single ((:commit . "f8503f121e38f0ff9343544a5c912e50b25efd4c") (:authors ("Dean Lindqvist Todevski <https://github.com/r0bobo>")) (:maintainers ("Dean Lindqvist Todevski")) (:maintainer "Dean Lindqvist Todevski") (:keywords "docs" "help" "k8s" "kubernetes" "tools") (:url . "https://github.com/r0bobo/kubedoc.el/"))])
- (kubel . [(20221123 241) ((transient (0 1 0)) (emacs (25 3)) (dash (2 12 0)) (s (1 2 0)) (yaml-mode (0 0 14))) "Control Kubernetes with limited permissions" single ((:commit . "5962d566db17ddfa25ac3120b4591df1d741e979") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "kubernetes" "k8s" "tools" "processes") (:url . "https://github.com/abrochard/kubel"))])
- (kubel-evil . [(20220909 2028) ((kubel (1 0)) (evil (1 0)) (emacs (25 3))) "extension for kubel to provide evil keybindings" single ((:commit . "1b405d8756ffc7c8f1e11450d6f07ffde38fe351") (:authors ("Marcel Patzwahl")) (:maintainers ("Marcel Patzwahl")) (:maintainer "Marcel Patzwahl") (:keywords "kubernetes" "k8s" "tools" "processes" "evil" "keybindings") (:url . "https://github.com/abrochard/kubel"))])
- (kubernetes . [(20221229 1519) ((dash (2 12 0)) (magit-section (3 1 1)) (magit-popup (2 13 0)) (with-editor (3 0 4)) (request (0 3 2)) (s (1 12 0)) (transient (0 3 0))) "Magit-like porcelain for Kubernetes" tar ((:commit . "099004511670c7fd52a619c5758047bb3172ba36") (:authors ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainers ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainer "Chris Barrett" . "chris+emacs@walrus.cool") (:keywords "kubernetes") (:url . "https://github.com/kubernetes-el/kubernetes-el"))])
- (kubernetes-evil . [(20220625 534) ((kubernetes (0 18 0)) (evil (1 2 12))) "Kubernetes keybindings for evil-mode." single ((:commit . "b155d64aa72bd1175770db3518a67a347caa36dd") (:authors ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainers ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainer "Chris Barrett" . "chris+emacs@walrus.cool"))])
- (kubernetes-helm . [(20230221 1438) ((yaml-mode (0 0 13)) (emacs (25 3))) "extension for helm, the package manager for kubernetes" single ((:commit . "f70e2efa6ef869143ccb2f158f4ab7df91dcc58f") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "kubernetes" "helm" "k8s" "tools" "processes") (:url . "https://github.com/abrochard/kubernetes-helm"))])
- (kubernetes-tramp . [(20181228 922) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for kubernetes containers" single ((:commit . "8713571b66940f8f3f496b55baa23cdf1df7a869") (:authors ("Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com")) (:maintainers ("Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com")) (:maintainer "Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com") (:keywords "kubernetes" "convenience") (:url . "https://github.com/gruggiero/kubernetes-tramp"))])
- (kurecolor . [(20221213 124) ((emacs (24 4)) (s (1 12))) "color editing goodies" single ((:commit . "ac67ceba85839ab1ced96fad605bf023b697263f") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/emacsfodder/kurecolor.el"))])
- (kuronami-theme . [(20220602 339) ((emacs (24 1))) "A deep blue theme with cool autumnal colors" single ((:commit . "a51d5ff3883bd94d0a181bb5d60f747190eda4f6") (:authors ("Eric Chung <>")) (:maintainers ("Eric Chung <>")) (:maintainer "Eric Chung <>") (:url . "https://github.com/inj0h/kuronami"))])
- (kv . [(20140108 1534) nil "key/value data structure functions" single ((:commit . "721148475bce38a70e0b678ba8aa923652e8900e") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp"))])
- (kwin . [(20220120 2125) nil "communicatewith the KWin window manager" single ((:commit . "20fac6508e5535a26df783ba05f04d1800b7382c") (:authors ("Simon Hafner")) (:maintainers ("Simon Hafner")) (:maintainer "Simon Hafner") (:url . "http://github.com/reactormonk/kwin-minor-mode"))])
- (laas . [(20230331 1806) ((emacs (26 3)) (auctex (11 88)) (aas (1 1))) "A bundle of as-you-type LaTeX snippets" tar ((:commit . "a00f0aba237b85b3e5fd60cf84de5759d1bf5d48") (:maintainers ("Yoav Marco" . "yoavm448@gmail.com")) (:maintainer "Yoav Marco" . "yoavm448@gmail.com") (:keywords "tools" "tex") (:url . "https://github.com/tecosaur/LaTeX-auto-activating-snippets"))])
- (lab-themes . [(20200815 2104) ((emacs (24))) "A custom theme carefully constructed in the LAB space" tar ((:commit . "9d7deb9635959d3a50ccb1082eb1207275f4b3e8") (:authors ("MetroWind" . "chris.corsair@gmail.com")) (:maintainers ("MetroWind" . "chris.corsair@gmail.com")) (:maintainer "MetroWind" . "chris.corsair@gmail.com") (:keywords "lisp") (:url . "https://github.com/MetroWind/lab-theme"))])
- (labburn-theme . [(20221208 1611) nil "A lab color space zenburn theme." single ((:commit . "bd0de2fdcf285d981f32e3e5ebc56fe3c9b589a5") (:authors ("Johannes Goslar")) (:maintainers ("Johannes Goslar")) (:maintainer "Johannes Goslar") (:keywords "theme" "zenburn") (:url . "https://github.com/ksjogo/labburn-theme"))])
- (lacquer . [(20230206 756) ((emacs (25 2))) "Switch theme/font by selecting from a cache" tar ((:commit . "8a4e7dc1827862ad025f2af5354ca377cc660939") (:authors ("zakudriver" . "zy.hua1122@gmail.com")) (:maintainers ("zakudriver" . "zy.hua1122@gmail.com")) (:maintainer "zakudriver" . "zy.hua1122@gmail.com") (:keywords "tools") (:url . "https://github.com/zakudriver/lacquer"))])
- (laguna-theme . [(20220804 227) nil "An updated blue-green Laguna Theme." single ((:commit . "680ab8c936cb1c249b5a6a07976bcc83ef217e25") (:authors ("Henry Newcomer" . "a.cliche.email@gmail.com")) (:maintainers ("Henry Newcomer" . "a.cliche.email@gmail.com")) (:maintainer "Henry Newcomer" . "a.cliche.email@gmail.com") (:url . "https://github.com/HenryNewcomer/laguna-theme"))])
- (lambdapi-mode . [(20221228 1622) ((emacs (26 1)) (eglot (1 5)) (math-symbol-lists (1 2 1)) (highlight (20190710 1527))) "A major mode for editing Lambdapi source code" tar ((:commit . "1f4e1a024bb0b0f3a0fdd8b5428e737adf1a68d7") (:maintainers ("Deducteam" . "dedukti-dev@inria.fr")) (:maintainer "Deducteam" . "dedukti-dev@inria.fr") (:keywords "languages") (:url . "https://github.com/Deducteam/lambdapi"))])
- (lammps-mode . [(20180801 1319) ((emacs (24 4))) "basic syntax highlighting for LAMMPS files" single ((:commit . "a5b68d7a59975770b56ee8f6e66fa4f703a72ffe") (:authors ("Aidan Thompson <athomps at sandia.gov>")) (:maintainers ("Rohit Goswami <r95g10 at gmail.com>")) (:maintainer "Rohit Goswami <r95g10 at gmail.com>") (:keywords "languages" "faces") (:url . "https://github.com/lammps/lammps/tree/master/tools/emacs"))])
- (lang-refactor-perl . [(20131122 2127) nil "Simple refactorings, primarily for Perl" single ((:commit . "691bd69639de6b7af357e3b7143563ececd9c497") (:authors (nil . "Johan Lindstrom <buzzwordninja not_this_bit@googlemail.com>")) (:maintainers (nil . "Johan Lindstrom <buzzwordninja not_this_bit@googlemail.com>")) (:maintainer nil . "Johan Lindstrom <buzzwordninja not_this_bit@googlemail.com>") (:keywords "languages" "refactoring" "perl") (:url . "https://github.com/jplindstrom/emacs-lang-refactor-perl"))])
- (langdoc . [(20150218 645) ((cl-lib (0 2))) "Help to define help document mode for various languages" single ((:commit . "2c7223bacb116992d700ecb19a60df5c09c63424") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainers ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:keywords "convenience" "eldoc") (:url . "https://github.com/tom-tan/langdoc/"))])
- (langtool . [(20230222 326) ((emacs (24 3))) "Grammar check utility using LanguageTool" single ((:commit . "416abc7d1c1cbb31a9bddad458366215bad0089b") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "docs") (:url . "https://github.com/mhayashi1120/Emacs-langtool"))])
- (langtool-ignore-fonts . [(20210526 2340) ((emacs (25 1)) (langtool (2 2 1))) "Force langtool to ignore certain fonts" single ((:commit . "a5d04c3840c293f1b11db3c28e7210d0d20f53af") (:authors ("Christopher Lloyd" . "cjl8zf@virginia.edu")) (:maintainers ("Christopher Lloyd" . "cjl8zf@virginia.edu")) (:maintainer "Christopher Lloyd" . "cjl8zf@virginia.edu") (:url . "https://github.com/cjl8zf/langtool-ignore-fonts"))])
- (langtool-popup . [(20230222 401) ((emacs (25 1)) (popup (0 5 9))) "Popup message extension for langtool.el" single ((:commit . "d86101eafe9a994eb0425e08e7c1795e9cb0cd42") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "docs") (:url . "https://github.com/mhayashi1120/Emacs-langtool"))])
- (language-detection . [(20161123 1813) ((emacs (24)) (cl-lib (0 5))) "Automatic language detection from code snippets" single ((:commit . "38f5d294870678efc6ccf94ce6e8175a58f93025") (:authors ("Andreas Jansson" . "andreas@jansson.me.uk")) (:maintainers ("Andreas Jansson" . "andreas@jansson.me.uk")) (:maintainer "Andreas Jansson" . "andreas@jansson.me.uk") (:url . "https://github.com/andreasjansson/language-detection.el"))])
- (language-id . [(20230214 710) ((emacs (24 3))) "Library to work with programming language identifiers" single ((:commit . "302533245972d9bc7722328742247d2b2b225e01") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-language-id"))])
- (languagetool . [(20230325 507) ((emacs (27 1))) "LanguageTool integration for grammar and spell check" tar ((:commit . "b136d531129eb488dc4134784e34c4afedcb0c2f") (:authors ("Joar Buitrago" . "jebuitragoc@unal.edu.co")) (:maintainers ("Joar Buitrago" . "jebuitragoc@unal.edu.co")) (:maintainer "Joar Buitrago" . "jebuitragoc@unal.edu.co") (:keywords "grammar" "text" "docs" "tools" "convenience" "checker") (:url . "https://github.com/PillFall/Emacs-LanguageTool.el"))])
- (lark-mode . [(20230327 1003) ((emacs (24 3))) "Major mode for editing Lark parser code" single ((:commit . "9e19b40df29d273cf3aec9ddd0e739d3b3d9b3a8") (:authors ("Ta Quang Trung")) (:maintainers ("Ta Quang Trung")) (:maintainer "Ta Quang Trung") (:keywords "languages") (:url . "https://github.com/taquangtrung/lark-mode"))])
- (lastfm . [(20211018 838) ((emacs (26 1)) (request (0 3 0)) (anaphora (1 0 4)) (memoize (1 1)) (elquery (0 1 0)) (s (1 12 0))) "Last.fm API for Emacs Lisp" single ((:commit . "b4b19f0aadc5087febeeb3f59944a89c4cdcf325") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm") (:keywords "multimedia" "api") (:url . "https://github.com/mihaiolteanu/lastfm.el/"))])
- (lastpass . [(20201229 2109) ((emacs (24 4)) (seq (1 9)) (cl-lib (0 5))) "LastPass command wrapper" single ((:commit . "2366de7824b6c5f8e9ec6811d219dc06794e8630") (:authors ("Petter Storvik")) (:maintainers ("Petter Storvik")) (:maintainer "Petter Storvik") (:keywords "extensions" "processes" "lpass" "lastpass") (:url . "https://github.com/storvik/emacs-lastpass"))])
- (latex-change-env . [(20230220 637) ((emacs (27 1)) (auctex (13 1))) "Change in and out of LaTeX environments" single ((:commit . "748cdbb4bbf29a2e5053cf3d965e95cc7db67fac") (:authors ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainers ("Tony Zorman" . "soliditsallgood@mailbox.org")) (:maintainer "Tony Zorman" . "soliditsallgood@mailbox.org") (:keywords "convenience" "tex") (:url . "https://gitlab.com/slotThe/change-env"))])
- (latex-extra . [(20220817 5) ((auctex (11 86 1)) (cl-lib (0 5))) "Adds several useful functionalities to LaTeX-mode." single ((:commit . "a81e7588448f85c5fcc3f3fc71cf957d0928a656") (:authors ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "artur@endlessparentheses.com") (:keywords "tex") (:url . "http://github.com/Malabarba/latex-extra"))])
- (latex-math-preview . [(20211228 641) nil "preview LaTeX mathematical expressions." single ((:commit . "1c082179493eed3ce8bc255f87791eb4acb1fbdb") (:authors ("Takayuki YAMAGUCHI" . "d@ytak.info")) (:maintainers ("Takayuki YAMAGUCHI" . "d@ytak.info")) (:maintainer "Takayuki YAMAGUCHI" . "d@ytak.info") (:keywords "latex" "tex") (:url . "https://gitlab.com/latex-math-preview/latex-math-preview"))])
- (latex-pretty-symbols . [(20151112 1044) nil "Display many latex symbols as their unicode counterparts" single ((:commit . "83d5888147bb734a94dfd4847a11e975a7d86ba8") (:authors ("Erik Parmann" . "eparmann@gmail.com") ("PÃ¥l Drange")) (:maintainers ("Erik Parmann" . "eparmann@gmail.com")) (:maintainer "Erik Parmann" . "eparmann@gmail.com") (:keywords "convenience" "display") (:url . "https://bitbucket.org/mortiferus/latex-pretty-symbols.el"))])
- (latex-preview-pane . [(20181008 1822) nil "Makes LaTeX editing less painful by providing a updatable preview pane" tar ((:commit . "5297668a89996b50b2b62f99cba01cc544dbed2e") (:authors ("John L. Singleton" . "jsinglet@gmail.com")) (:maintainer "John L. Singleton" . "jsinglet@gmail.com") (:keywords "latex" "preview") (:url . "http://www.emacswiki.org/emacs/LaTeXPreviewPane"))])
- (latex-table-wizard . [(20230502 1422) ((emacs (27 1)) (auctex (12 1)) (transient (0 3 7))) "Magic editing of LaTeX tables" tar ((:commit . "04b3d59de71690e393a3ebeda26819deac6253d0") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net") (:keywords "convenience") (:url . "https://github.com/enricoflor/latex-table-wizard"))])
- (latex-unicode-math-mode . [(20170123 1816) nil "Input method for Unicode math symbols" tar ((:commit . "e8931e68214ca94e6a04080ebc629693d5881884") (:authors ("Christoph Dittmann" . "github@christoph-d.de")) (:maintainers ("Christoph Dittmann" . "github@christoph-d.de")) (:maintainer "Christoph Dittmann" . "github@christoph-d.de") (:url . "https://github.com/Christoph-D/latex-unicode-math-mode"))])
- (latexdiff . [(20190827 1651) ((emacs (24 4))) "Latexdiff integration in Emacs" single ((:commit . "56d0b240867527d1b43d3ddec14059361929b971") (:authors ("Launay Gaby" . "gaby.launay@tutanota.com")) (:maintainers ("Launay Gaby" . "gaby.launay@tutanota.com")) (:maintainer "Launay Gaby" . "gaby.launay@tutanota.com") (:keywords "tex" "vc" "tools" "git" "helm") (:url . "http://github.com/galaunay/latexdiff.el"))])
- (latvian-holidays . [(20230326 2030) nil "Latvian holidays for the calendar" single ((:commit . "6b82f3bd9682c97f19a65b7d359ce7a02ec9cfec") (:authors ("Alexander Shumilov" . "alexander.shumilov@me.com")) (:maintainers ("Alexander Shumilov" . "alexander.shumilov@me.com")) (:maintainer "Alexander Shumilov" . "alexander.shumilov@me.com") (:keywords "calendar") (:url . "https://github.com/ashumilov/latvian-holidays"))])
- (launch . [(20130619 2204) nil "launch files with OS-standard associated applications." single ((:commit . "e7c3b573fc05fe4d3d322389079909311542e799") (:authors ("Simon Law" . "sfllaw@sfllaw.ca")) (:maintainers ("Simon Law" . "sfllaw@sfllaw.ca")) (:maintainer "Simon Law" . "sfllaw@sfllaw.ca") (:keywords "convenience" "processes") (:url . "https://github.com/sfllaw/emacs-launch"))])
- (launch-mode . [(20170106 512) ((emacs (24 4))) "Major mode for launch-formatted text" tar ((:commit . "25ebd4ba77afcbe729901eb74923dbe9ae81c313") (:authors ("iory" . "ab.ioryz@gmail.com")) (:maintainers ("iory" . "ab.ioryz@gmail.com")) (:maintainer "iory" . "ab.ioryz@gmail.com") (:url . "https://github.com/iory/launch-mode"))])
- (launchctl . [(20210611 2243) ((emacs (24 1))) "Interface to launchctl on Mac OS X." single ((:commit . "c9b7e93f5ec6fa504dfb03d60571cf3e5dc38e12") (:authors ("Peking Duck <github.com/pekingduck>")) (:maintainers ("Peking Duck <github.com/pekingduck>")) (:maintainer "Peking Duck <github.com/pekingduck>") (:keywords "tools" "convenience") (:url . "http://github.com/pekingduck/launchctl-el"))])
- (lavender-theme . [(20170808 1313) ((emacs (24 0))) "an Emacs 24 theme based on Lavender (tmTheme)" single ((:commit . "ef5e959b95d7fb8152137bc186c4c24e986c1e3c") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (lavenderless-theme . [(20201222 1627) ((colorless-themes (0 2))) "A mostly colorless version of lavender-theme" single ((:commit . "1b2a507b3b7f9559c944af8fc7531a60b38ae0c3") (:authors ("Thomas Letan" . "lthms@soap.coffee")) (:maintainers ("Thomas Letan" . "lthms@soap.coffee")) (:maintainer "Thomas Letan" . "lthms@soap.coffee") (:keywords "faces" "theme") (:url . "https://git.sr.ht/~lthms/colorless-themes.el"))])
- (lcb-mode . [(20160816 630) ((emacs (24))) "LiveCode Builder major mode" single ((:commit . "be0768e9aa6f9b8e76f2230f4f7f4d152a766b9a") (:authors ("Peter TB Brett" . "peter@peter-b.co.uk")) (:maintainers ("Peter TB Brett" . "peter@peter-b.co.uk")) (:maintainer "Peter TB Brett" . "peter@peter-b.co.uk") (:keywords "languages") (:url . "https://github.com/peter-b/lcb-mode"))])
- (lcr . [(20221012 742) ((dash (2 12 0)) (emacs (25 1))) "lightweight coroutines" single ((:commit . "6c345112ffb59f3e7babca6c83942f686b5f554b") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainers ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:keywords "tools") (:url . "https://github.com/jyp/lcr"))])
- (le-thesaurus . [(20230112 1604) ((request (0 3 2)) (emacs (24 4))) "Query thesaurus.com for synonyms of a given word" single ((:commit . "83e8df8957a3b8167cc2bf97849a1eca555ce9a6") (:url . "https://github.com/AnselmC/le-thesaurus.el"))])
- (leaf . [(20211226 1633) ((emacs (24 1))) "Simplify your init.el configuration, extended use-package" single ((:commit . "9eb18e8c9c375aa0158fbd06ea906bfbf54408fe") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "lisp" "settings") (:url . "https://github.com/conao3/leaf.el"))])
- (leaf-convert . [(20210816 1103) ((emacs (26 1)) (leaf (3 6 0)) (leaf-keywords (1 1 0)) (ppp (2 1))) "Convert many format to leaf format" single ((:commit . "da86654f1021445cc42c1a5a9195f15097352209") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tools") (:url . "https://github.com/conao3/leaf-convert.el"))])
- (leaf-defaults . [(20210301 118) ((emacs (26 1)) (leaf (4 1)) (leaf-keywords (1 1))) "Awesome leaf config collections" tar ((:commit . "96ce39d4f16736f1e654e24eac16a2603976c724") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/leaf-defaults.el"))])
- (leaf-keywords . [(20210816 1107) ((emacs (24 4)) (leaf (3 5 0))) "Additional leaf.el keywords for external packages" single ((:commit . "849b579f87c263e2f1d7fb7eda93b6ce441f217e") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "lisp" "settings") (:url . "https://github.com/conao3/leaf-keywords.el"))])
- (leaf-manager . [(20211225 624) ((emacs (26 1)) (leaf (4 1)) (leaf-convert (1 0)) (ppp (2 1))) "Configuration manager for leaf based init.el" single ((:commit . "a9fb7fda1432d0cf6bd8546d98a11b3fbe1d84e6") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience" "leaf") (:url . "https://github.com/conao3/leaf-manager.el"))])
- (leaf-tree . [(20211105 19) ((emacs (25 1)) (imenu-list (0 8))) "Interactive side-bar feature for init.el using leaf" single ((:commit . "89c3b8842df067bba67663d309f43aa311acdccd") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience" "leaf") (:url . "https://github.com/conao3/leaf-tree.el"))])
- (lean-mode . [(20220501 1007) ((emacs (24 3)) (dash (2 18 0)) (s (1 10 0)) (f (0 19 0)) (flycheck (30))) "A major mode for the Lean 3 language" tar ((:commit . "362bc6fa3efb1874c525ed6b4b6f24f76af22596") (:authors ("Leonardo de Moura" . "leonardo@microsoft.com") ("Soonho Kong " . "soonhok@cs.cmu.edu") ("Gabriel Ebner " . "gebner@gebner.org") ("Sebastian Ullrich" . "sebasti@nullri.ch")) (:maintainers ("Sebastian Ullrich" . "sebasti@nullri.ch")) (:maintainer "Sebastian Ullrich" . "sebasti@nullri.ch") (:keywords "languages") (:url . "https://github.com/leanprover/lean-mode"))])
- (leanote . [(20161223 139) ((emacs (24 4)) (cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3)) (pcache (0 4 0)) (s (1 10 0)) (async (1 9))) "A minor mode writing markdown leanote" single ((:commit . "d499e7b59bb1f1a2fabc0e4c26fb101ed62ebc7b") (:authors ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainers ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainer "Aborn Jiang" . "aborn.jiang@gmail.com") (:keywords "leanote" "note" "markdown") (:url . "https://github.com/aborn/leanote-emacs"))])
- (learn-ocaml . [(20211003 1412) ((emacs (25 1))) "Emacs frontend for learn-ocaml" single ((:commit . "abdc263537a6a534152a4eaaa17b2c3e4e10418b") (:url . "https://github.com/pfitaxel/learn-ocaml.el"))])
- (ledger-import . [(20210419 818) ((emacs (25 1)) (ledger-mode (3 1 1))) "Fetch OFX files from bank and push them to Ledger" single ((:commit . "f77adf79ce67524c3e08546448ac88ea1a665b64") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/mpdel/libmpdel"))])
- (ledger-mode . [(20230502 921) ((emacs (25 1))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "7bed9b468bf7d2cd4dafa30b067bb576263f8e0c"))])
- (leerzeichen . [(20220626 835) nil "Minor mode to display whitespace characters." single ((:commit . "9d4126d5f6563569080845a69b0867119a9fd6ea") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainers ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com") (:keywords "whitespace" "characters") (:url . "http://github.com/fgeller/leerzeichen.el"))])
- (leetcode . [(20220503 534) ((emacs (26 1)) (dash (2 16 0)) (graphql (0 1 1)) (spinner (1 7 3)) (aio (1 0)) (log4e (0 3 3))) "An leetcode client" single ((:commit . "682f7a44d0bea0daf6f9a2888fa7f905d3a0cd70") (:authors ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainers ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainer "Wang Kai" . "kaiwkx@gmail.com") (:keywords "extensions" "tools") (:url . "https://github.com/kaiwk/leetcode.el"))])
- (legalese . [(20200119 2248) nil "Add legalese to your program files" single ((:commit . "e465471d2d5a62d35073d93e0f8d40387a82e302") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:keywords "convenience") (:url . "https://github.com/jorgenschaefer/legalese"))])
- (lemon-mode . [(20130216 1304) nil "A major mode for editing lemon grammar files" single ((:commit . "155bfced6c9afc8072a0133d3d1baa54c6d67430") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainers ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com") (:keywords "lemon"))])
- (lentic . [(20221201 47) ((emacs (25)) (m-buffer (0 13)) (dash (2 5 0))) "One buffer as a view of another" tar ((:commit . "6af878392e127e75409ae0f4bc08837a8f591d88") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk"))])
- (lentic-server . [(20160717 2052) ((lentic (0 8)) (web-server (0 1 1))) "Web Server for Emacs Literate Source" single ((:commit . "8e809fafbb27a98f815b544d9d9ee15843eb6a36") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))])
- (leo . [(20220111 1045) ((emacs (27 1))) "Interface for dict.leo.org" tar ((:commit . "9f6aeb9670241255c373432af7785c7b87cee290") (:authors ("M.T. Enders <michael AT michael-enders.com>") ("Marty Hiatt <martianhiatus AT riseup.net>")) (:maintainers ("M.T. Enders <michael AT michael-enders.com>")) (:maintainer "M.T. Enders <michael AT michael-enders.com>") (:keywords "convenience" "translate") (:url . "https://github.com/mtenders/emacs-leo"))])
- (less-css-mode . [(20161001 453) nil "Major mode for editing LESS CSS files (lesscss.org)" single ((:commit . "59bf174c4e9f053ec2a7ef8c8a8198490390f6fb") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "less" "css" "mode") (:url . "https://github.com/purcell/less-css-mode"))])
- (letcheck . [(20160202 1948) nil "Check the erroneous assignments in let forms" single ((:commit . "edf188ca2f85349e971b83f164c6484264e79426") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "convenience") (:url . "https://github.com/Fuco1/letcheck"))])
- (letterbox-mode . [(20170702 125) ((emacs (24 3))) "hide sensitive text on a buffer" single ((:commit . "88c67a51d67216d569a28e8423200883fde096dd") (:authors ("Fernando Leboran" . "f.leboran@gmail.com")) (:maintainers ("Fernando Leboran" . "f.leboran@gmail.com")) (:maintainer "Fernando Leboran" . "f.leboran@gmail.com") (:keywords "password" "convenience") (:url . "http://github.com/pacha64/letterbox-mode"))])
- (leuven-theme . [(20230413 2003) nil "Awesome Emacs color theme on white background" tar ((:commit . "0c80179b7eda6724cd4dd4946176b5dc745f0a63") (:authors ("Fabrice Niessen <(concat \"fniessen\" at-sign \"pirilampo.org\")>")) (:maintainers ("Fabrice Niessen <(concat \"fniessen\" at-sign \"pirilampo.org\")>")) (:maintainer "Fabrice Niessen <(concat \"fniessen\" at-sign \"pirilampo.org\")>") (:keywords "color" "theme") (:url . "https://github.com/fniessen/emacs-leuven-theme"))])
- (levenshtein . [(20090830 1040) nil "Edit distance between two strings." single ((:commit . "070925197ebf6b704e6e00c4f2d2ec783f3df38c") (:authors ("Aaron S. Hawley <ashawley at uvm dot edu>,") ("Art Taylor")) (:maintainers ("Aaron S. Hawley <ashawley at uvm dot edu>,")) (:maintainer "Aaron S. Hawley <ashawley at uvm dot edu>,") (:keywords "lisp"))])
- (lexbind-mode . [(20141027 1429) nil "Puts the value of lexical-binding in the mode line" single ((:commit . "fa0a6848c1cfd3fbf45db43dc2deef16377d887d") (:authors ("Andrew Kirkpatrick" . "ubermonk@gmail.com")) (:maintainers ("Andrew Kirkpatrick" . "ubermonk@gmail.com")) (:maintainer "Andrew Kirkpatrick" . "ubermonk@gmail.com") (:keywords "convenience" "lisp") (:url . "https://github.com/spacebat/lexbind-mode"))])
- (lexic . [(20220501 1432) ((emacs (26 3))) "A major mode to find out more about words" single ((:commit . "f9b3de4d9c2dd1ce5022383e1a504b87bf7d1b09") (:authors ("pluskid" . "pluskid@gmail.com") ("gucong" . "gucong43216@gmail.com") ("TEC" . "tec@tecosaur.com")) (:maintainers ("TEC" . "tec@tecosaur.com")) (:maintainer "TEC" . "tec@tecosaur.com") (:url . "https://github.com/tecosaur/lexic"))])
- (lf . [(20210808 1921) ((s (1 12 0)) (dash (2 16 0)) (emacs (27 1))) "A Language Features library for Emacs Lisp" single ((:commit . "35db92ca765a0544721fdeea036d77b7d192d083") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com") (:keywords "convenience" "programming") (:url . "https://alhassy.github.io/lf.el/"))])
- (lfe-mode . [(20220822 911) nil "Lisp Flavoured Erlang mode" tar ((:commit . "42fc3dc57d4229800f44a0d6907185ebdf7175e2"))])
- (lgr . [(20230407 1317) ((emacs (26 1))) "A fully featured logging framework" single ((:commit . "4ab6c22bcbc533acace3c854876f40fa9d2f7819") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "tools") (:url . "https://github.com/Fuco1/emacs-lgr"))])
- (libbcel . [(20221003 1827) ((emacs (26 1)) (request (0 3 1))) "Library to connect to basecamp 3 API" tar ((:commit . "3d506a3fb5b377bf460e7b8096f7211949567f75") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/bcel/libbcel"))])
- (libelcouch . [(20230129 1000) ((emacs (26 1)) (request (0 3 0))) "Communication with CouchDB" single ((:commit . "595697f4199519dd018fe489e885f237c54b0675") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "tools") (:url . "https://gitlab.petton.fr/elcouch/libelcouch/"))])
- (liberime . [(20230113 556) ((emacs (25 1))) "Rime elisp binding" tar ((:commit . "cc9eb9812fd6f68e78ed6a0c0a85da7a18765753") (:authors ("A.I.")) (:maintainers ("A.I.")) (:maintainer "A.I.") (:keywords "convenience" "chinese" "input-method" "rime") (:url . "https://github.com/merrickluo/liberime"))])
- (liblouis . [(20220426 657) ((emacs (26 1))) "Mode for editing liblouis braille translation tables" single ((:commit . "a341a0c434cdbe7f46956c8db13203c3fc941a34") (:authors ("Christian Egli" . "christian.egli@sbs.ch")) (:maintainers ("Christian Egli" . "christian.egli@sbs.ch")) (:maintainer "Christian Egli" . "christian.egli@sbs.ch") (:keywords "languages") (:url . "https://github.com/liblouis/liblouis-mode"))])
- (libmpdee . [(20220825 957) nil "Client end library for mpd, a music playing daemon" single ((:commit . "9a84e074385cd085622f94e720a968a0e05ceae5") (:authors ("Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com")) (:maintainers ("Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com")) (:maintainer "Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com") (:keywords "music" "mpd"))])
- (libmpdel . [(20221229 916) ((emacs (25 1))) "Communication with an MPD server" tar ((:commit . "e7d35ba9254ead1516133f182a01f6161ae26388") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "multimedia") (:url . "https://github.com/mpdel/libmpdel"))])
- (librera-sync . [(20230306 17) ((emacs (26 1)) (f (0 17)) (dash (2 12 0))) "Sync document's position with Librera Reader for Android" tar ((:commit . "29e158fc478d5817dffc4045b067feed4c3d0dbe") (:authors ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainers ("Dmitriy Pshonko" . "jumper047@gmail.com")) (:maintainer "Dmitriy Pshonko" . "jumper047@gmail.com") (:keywords "multimedia" "sync") (:url . "https://github.com/jumper047/librera-sync"))])
- (lice . [(20220312 2215) nil "License And Header Template" tar ((:commit . "0b69ba54057146f1473e85c0760029e584e3eb13") (:authors ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainer "Taiki Sugawara" . "buzz.taiki@gmail.com") (:keywords "template" "license" "tools") (:url . "https://github.com/buzztaiki/lice-el"))])
- (license-snippets . [(20201117 1619) ((emacs (26)) (yasnippet (0 8 0))) "LICENSE templates for yasnippet" tar ((:commit . "a89988b81604fd23c43746912215770a4b861989") (:authors ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainers ("Seong Yong-ju" . "sei40kr@gmail.com")) (:maintainer "Seong Yong-ju" . "sei40kr@gmail.com") (:keywords "tools") (:url . "https://github.com/sei40kr/license-snippets"))])
- (license-templates . [(20230311 11) ((emacs (24 3)) (request (0 3 0))) "Create LICENSE using GitHub API" single ((:commit . "09f1b017c93067c2970a0a63b69026bfc172d2b7") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "license" "api" "template") (:url . "https://github.com/jcs-elpa/license-templates"))])
- (ligature . [(20220808 1225) ((emacs (28))) "Display typographical ligatures in major modes" single ((:commit . "89cbd67a815f61e5001f19d64d6ec1771e867742") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainers ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org") (:keywords "tools" "faces") (:url . "https://www.github.com/mickeynp/ligature.el"))])
- (ligature-pragmatapro . [(20221127 2252) ((emacs (28)) (ligature (1 0))) "PragmataPro support for ligature.el" single ((:commit . "85f7b15a5cf5f2ee843bc0469e03602a0251c275") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:keywords "faces" "fonts" "ligatures" "programming-ligatures") (:url . "https://gitlab.com/wavexx/ligature-pragmatapro.el"))])
- (light-soap-theme . [(20150607 1445) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "76a787bd40c6b567ae68ced7f5d9f9f10725e00d"))])
- (ligo-mode . [(20230302 1616) ((emacs (27 1))) "A major mode for editing LIGO source code" single ((:commit . "d1073474efc9e0a020a4bcdf5e0c12a217265a3a") (:authors ("LigoLang SASU")) (:maintainers ("LigoLang SASU")) (:maintainer "LigoLang SASU") (:keywords "languages") (:url . "https://gitlab.com/ligolang/ligo/-/tree/dev/tools/emacs"))])
- (line-reminder . [(20230420 142) ((emacs (25 1)) (indicators (0 0 4)) (fringe-helper (1 0 1)) (ov (1 0 6)) (ht (2 0))) "Line annotation for changed and saved lines" single ((:commit . "583bff387b361e1fe442f57e9ad1f6f8e87dedf4") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "annotation") (:url . "https://github.com/emacs-vs/line-reminder"))])
- (line-up-words . [(20180219 1024) nil "Align words in an intelligent way" single ((:commit . "2c236f5772e18d0e50d7ca2eee7eebbe356d9b60") (:url . "https://github.com/janestreet/line-up-words"))])
- (lines-at-once . [(20180422 247) ((emacs (25))) "Insert and edit multiple lines at once" single ((:commit . "a018ba90549384d52ec58c2685fd14a0f65252be") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainers ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com") (:keywords "abbrev" "tools") (:url . "https://github.com/jiahaowork/lines-at-once.el"))])
- (lingr . [(20100807 1731) nil "Lingr Client for GNU Emacs" single ((:commit . "4215a8704492d3c860097cbe2649936c22c196df") (:authors ("lugecy" . "lugecy@gmail.com")) (:maintainers ("lugecy" . "lugecy@gmail.com")) (:maintainer "lugecy" . "lugecy@gmail.com") (:keywords "chat" "client" "internet") (:url . "http://github.com/lugecy/lingr-el"))])
- (linguistic . [(20181129 2116) nil "A package for basic linguistic analysis." tar ((:commit . "23e47e98cdb09ee61883669b6d8a11bf6449862c") (:authors ("Andrew Favia <drewlinguistics01 at gmail dot com>")) (:maintainers ("Andrew Favia <drewlinguistics01 at gmail dot com>")) (:maintainer "Andrew Favia <drewlinguistics01 at gmail dot com>") (:keywords "linguistics" "text analysis" "matching") (:url . "https://github.com/andcarnivorous/linguistic"))])
- (lingva . [(20220910 1435) ((emacs (25 1))) "Access Google Translate without tracking via lingva.ml" single ((:commit . "6c33594068fa33de622172503deeec6778d9c744") (:authors ("marty hiatt <martianhiatus [a t] riseup [d o t] net>")) (:maintainers ("marty hiatt <martianhiatus [a t] riseup [d o t] net>")) (:maintainer "marty hiatt <martianhiatus [a t] riseup [d o t] net>") (:keywords "convenience" "translation" "wp" "text") (:url . "https://codeberg.org/martianh/lingva.el"))])
- (link . [(20191111 446) nil "Hypertext links in text buffers" single ((:commit . "c9cad101100975e88873636bfd426b7a19304ebd") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainers ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net") (:keywords "interface" "hypermedia"))])
- (link-hint . [(20230405 1801) ((avy (0 4 0)) (emacs (24 4))) "Use avy to open, copy, etc. visible links" single ((:commit . "36ce929331f2838213bcaa1145ece4b73ce84afe") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:keywords "convenience" "url" "avy" "link" "links" "hyperlink") (:url . "https://github.com/noctuid/link-hint.el"))])
- (linkode . [(20200607 2152) nil "Generate a linkode snippet with region/buffer content" single ((:commit . "e31bdae11ff38b736b1869fbe94920e862f29794") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io") (:url . "https://github.com/erickgnavar/linkode.el"))])
- (linphone . [(20130524 1109) nil "Emacs interface to Linphone" tar ((:commit . "99af3db941b7f4e5272bb48bff96c1ce4ceac302") (:authors ("Yoni Rabkin" . "yonirabkin@member.fsf.org")) (:maintainers ("Yoni Rabkin" . "yonirabkin@member.fsf.org")) (:maintainer "Yoni Rabkin" . "yonirabkin@member.fsf.org") (:keywords "comm") (:url . "https://github.com/zabbal/emacs-linphone"))])
- (linum-off . [(20160217 2137) nil "Provides an interface for turning line-numbering off" single ((:commit . "3e37baaad27d27e405f8dfe01d4ab9cd5b591353") (:authors ("Matthew L. Fidler, Florian Adamsky (see wiki)")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "line" "numbering") (:url . "http://www.emacswiki.org/emacs/auto-indent-mode.el "))])
- (linum-relative . [(20221025 517) nil "display relative line number in emacs." single ((:commit . "8fbe89ad897921849665a3e8da18cee7d0721441") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:keywords "converience") (:url . "http://github.com/coldnew/linum-relative"))])
- (liquid-types . [(20151202 735) ((flycheck (0 13)) (dash (1 2)) (emacs (24 1)) (popup (0 5 2)) (pos-tip (0 5 0)) (flycheck-liquidhs (0 0 1)) (button-lock (1 0 2))) "show inferred liquid-types" single ((:commit . "cc4bacbbf204ef9cf0756f78dfebee2c6ae14d7b") (:authors ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainers ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainer "Ranjit Jhala" . "jhala@cs.ucsd.edu"))])
- (liquidmetal . [(20220704 654) ((emacs (24 4))) "A mimetic poly-alloy of the Quicksilver scoring algorithm" single ((:commit . "323c38edd4572d7d58cdec729dcaac7a615d000d") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "matching" "fuzzy") (:url . "https://github.com/jcs-elpa/liquidmetal"))])
- (liso-theme . [(20160410 2029) nil "Eclectic Dark Theme for GNU Emacs" single ((:commit . "844688245eb860d23043455e165ee24503454c81") (:authors ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainers ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainer "Vlad Piersec" . "vlad.piersec@gmail.com") (:keywords "theme" "themes") (:url . "https://github.com/caisah/liso-theme"))])
- (lisp-butt-mode . [(20210215 2206) ((emacs (25))) "Slim Lisp Butts" single ((:commit . "2b719baf0ccba79e28fcb3c2633c4849d976ac23") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com") (:keywords "lisp") (:url . "https://gitlab.com/marcowahl/lisp-butt-mode"))])
- (lisp-extra-font-lock . [(20181008 1921) nil "Highlight bound variables and quoted exprs." single ((:commit . "4605eccbe1a7fcbd3cacf5b71249435413b4db4f") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "languages" "faces") (:url . "https://github.com/Lindydancer/lisp-extra-font-lock"))])
- (lisp-local . [(20210605 1347) ((emacs (24 3))) "Allow different Lisp indentation in each buffer" single ((:commit . "22e221c9330d2b5dc07e8b2caa34c83ac7c20b0d") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "lisp") (:url . "https://github.com/lispunion/emacs-lisp-local"))])
- (lispxmp . [(20170926 23) nil "Automagic emacs lisp code annotation" single ((:commit . "7ad077b4ee91ce8a42f84eeddb9fc7ea4eac7814") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "lisp" "convenience") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/lispxmp.el"))])
- (lispy . [(20230314 1738) ((emacs (24 3)) (ace-window (0 9 0)) (iedit (0 9 9)) (swiper (0 13 4)) (hydra (0 14 0)) (zoutline (0 2 0))) "vi-like Paredit" tar ((:commit . "fe44efd21573868638ca86fc8313241148fabbe3") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "lisp") (:url . "https://github.com/abo-abo/lispy"))])
- (lispyville . [(20220715 29) ((lispy (0)) (evil (1 2 12)) (cl-lib (0 5)) (emacs (24 4))) "A minor mode for integrating evil with lispy." single ((:commit . "14ee8711d58b649aeac03581d22b10ab077f06bd") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:keywords "vim" "evil" "lispy" "lisp" "parentheses") (:url . "https://github.com/noctuid/lispyville"))])
- (list-environment . [(20210930 1439) nil "A tabulated process environment editor" single ((:commit . "0a72a5a9c1abc090b25202a0387e3f766994b053") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:keywords "processes" "unix"))])
- (list-packages-ext . [(20151115 1716) ((s (1 6 0)) (ht (1 5 0)) (persistent-soft (0 8 6))) "Extras for list-packages" single ((:commit . "b4dd644e4369c9aa66f5bb8895ea49ebbfd0a27a") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com") (:keywords "convenience" "tools"))])
- (list-unicode-display . [(20230216 958) ((emacs (24 3))) "Search for and list unicode characters by name" single ((:commit . "57b4384ebe0c5d10890ee0dfcf66d0b16e5f5060") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience"))])
- (list-utils . [(20230422 1740) nil "List-manipulation utility functions" single ((:commit . "f02dcef36330871855346f9eab97eef58d323d9a") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/list-utils"))])
- (lister . [(20230204 1357) ((emacs (26 1))) "Yet another list printer" tar ((:commit . "b256c254f670ebaf50134655fbe430025fff41ab") (:authors (nil . "<joerg@joergvolbers.de>")) (:maintainers (nil . "<joerg@joergvolbers.de>")) (:maintainer nil . "<joerg@joergvolbers.de>") (:keywords "lisp") (:url . "https://github.com/publicimageltd/lister"))])
- (lit-mode . [(20141205 441) nil "Major mode for lit" single ((:commit . "c61c403afc8333a5649c5421ab1a6341dc1c7d92") (:authors ("Hector A Escobedo" . "ninjahector.escobedo@gmail.com")) (:maintainers ("Hector A Escobedo" . "ninjahector.escobedo@gmail.com")) (:maintainer "Hector A Escobedo" . "ninjahector.escobedo@gmail.com") (:keywords "languages" "tools"))])
- (litable . [(20221028 1640) ((dash (2 6 0))) "dynamic evaluation replacement with emacs" single ((:commit . "0a75befedbf826c9779f83500792b044658f2374") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "lisp"))])
- (litanize . [(20230419 917) ((emacs (24 1)) (enlive (0 0 1)) (s (1 12 0))) "Generate \"Latour Litanies\"" single ((:commit . "a45902fa29c16ef9606229cb01a5441ea754f11b") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "tools" "latour litany" "alien phenomenology" "ontography" "metaphorism" "carpentry") (:url . "https://github.com/zzkt/litanizer"))])
- (litecoin-ticker . [(20160612 11) ((json (1 2))) "litecoin price in modeline" single ((:commit . "3d8047c736e4ee0b8638953f8cc63eaefad34106") (:authors ("Zhe Lei")) (:maintainers ("Zhe Lei")) (:maintainer "Zhe Lei"))])
- (literal-string . [(20191023 733) ((emacs (25)) (edit-indirect (0 1 5))) "edit string literals in a dedicated buffer" single ((:commit . "afffa86e626798ee9f9188ea3be2d5ee6ad17c39") (:authors ("Joost Diepenmaat" . "joost@zeekat.nl")) (:maintainers ("Joost Diepenmaat" . "joost@zeekat.nl")) (:maintainer "Joost Diepenmaat" . "joost@zeekat.nl") (:keywords "lisp" "tools" "docs") (:url . "https://github.com/joodie/literal-string-mode/"))])
- (literate-calc-mode . [(20230127 153) ((emacs (25 1)) (s (1 12 0))) "Inline results from calc" single ((:commit . "900bdd12c0a6e6874f60b0df99a72fd329873ea1") (:authors ("Robin Schroer")) (:maintainers ("Robin Schroer")) (:maintainer "Robin Schroer") (:keywords "calc" "languages" "tools") (:url . "https://github.com/sulami/literate-calc-mode.el"))])
- (literate-coffee-mode . [(20170211 1515) ((coffee-mode (0 5 0))) "major-mode for Literate CoffeeScript" single ((:commit . "ef34c3a5b813ef078d44c29887761950ab6821c7") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-literate-coffee-mode"))])
- (literate-elisp . [(20220626 932) ((emacs (26 1))) "Load Emacs Lisp code blocks from Org files" single ((:commit . "bbc4befbf13f63b92cb1d780501482ae5bd8285b") (:authors ("Jingtao Xu" . "jingtaozf@gmail.com")) (:maintainers ("Jingtao Xu" . "jingtaozf@gmail.com")) (:maintainer "Jingtao Xu" . "jingtaozf@gmail.com") (:keywords "lisp" "docs" "extensions" "tools") (:url . "https://github.com/jingtaozf/literate-elisp"))])
- (litex-mode . [(20221107 147) ((emacs (24 4)) (units-mode (0 1 1))) "Minor mode for converting lisp to LaTeX" tar ((:commit . "45004b3a865771799b739d17ebb7849190fffa63") (:authors ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainers ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainer "Gaurav Atreya" . "allmanpride@gmail.com") (:keywords "calculator" "lisp" "latex") (:url . "https://github.com/Atreyagaurav/litex-mode"))])
- (live-code-talks . [(20180907 1647) ((emacs (24)) (cl-lib (0 5)) (narrowed-page-navigation (0 1))) "Support for slides with live code in them" single ((:commit . "97f16a9ee4e6ff3e0f9291eaead772c66e3e12ae") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk") (:keywords "docs" "multimedia"))])
- (live-preview . [(20201010 1948) ((emacs (24 4))) "Live preview by any shell command while editing" single ((:commit . "603a4a1759fbec92e7a1cabc249517c78e59ce7e") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-live-preview"))])
- (live-py-mode . [(20230430 1540) ((emacs (24 3))) "Live Coding in Python" tar ((:commit . "c927feefa62f4ce9b3b5029063f9654a317267ef") (:authors ("Don Kirkby http://donkirkby.github.io")) (:maintainers ("Don Kirkby http://donkirkby.github.io")) (:maintainer "Don Kirkby http://donkirkby.github.io") (:keywords "live" "coding") (:url . "http://donkirkby.github.io/live-py-plugin/"))])
- (lively . [(20171005 754) nil "interactively updating text" single ((:commit . "348675828c6a81bfa1ac311ca465aad813542c1b") (:authors ("Luke Gorrie" . "luke@bup.co.nz")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))])
- (livereload . [(20170629 650) ((emacs (25)) (websocket (1 8))) "Livereload server" tar ((:commit . "1e501d7e46dbd476c2c7cc9d20b5ac9d41fb1955") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:keywords "convenience"))])
- (livescript-mode . [(20221015 1316) ((emacs (24 3))) "Major mode for editing LiveScript files" single ((:commit . "e71a82a400e9d451c966c397bb8fa7887d35637b") (:authors ("Hisamatsu Yasuyuki" . "yas@null.net")) (:maintainers ("Hisamatsu Yasuyuki" . "yas@null.net")) (:maintainer "Hisamatsu Yasuyuki" . "yas@null.net") (:keywords "languages" "livescript") (:url . "https://github.com/yhisamatsu/livescript-mode"))])
- (livid-mode . [(20131116 1344) ((skewer-mode (1 5 3)) (s (1 8 0))) "Live browser eval of JavaScript every time a buffer changes" single ((:commit . "dfe5212fa64738bc4138bfebf349fbc8bc237c26") (:authors ("Murphy McMahon")) (:maintainers ("Murphy McMahon")) (:maintainer "Murphy McMahon") (:url . "https://github.com/pandeiro/livid-mode"))])
- (ll-debug . [(20211002 1031) ((emacs (24 3))) "Low level debug tools" single ((:commit . "a2cfeab46e5100c348b35987fae34f9ea76d7c0b") (:authors ("Claus Brunzema" . "mail@cbrunzema.de")) (:maintainers ("Claus Brunzema" . "mail@cbrunzema.de")) (:maintainer "Claus Brunzema" . "mail@cbrunzema.de") (:keywords "abbrev" "convenience" "tools" "c" "lisp") (:url . "https://github.com/replrep/ll-debug"))])
- (llama . [(20230425 1928) ((seq (2 23))) "Compact syntax for short lambda" single ((:commit . "f4a59f215438243fbbdc103a6db11fb2e99cff99") (:keywords "extensions") (:url . "https://git.sr.ht/~tarsius/llama"))])
- (lms . [(20210820 2200) ((emacs (25 1))) "Squeezebox / Logitech Media Server frontend" single ((:commit . "29593b4c18a570dfb2e60b196f24d407a1277daa") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainers ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com") (:keywords "multimedia") (:url . "https://hg.serna.eu/emacs/lms"))])
- (load-bash-alias . [(20230310 1657) ((emacs (24 1)) (seq (2 16))) "Convert bash aliases into eshell ones" single ((:commit . "5daab364e65bdd7abe531b8557d88342b446f0c0") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainers ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it") (:keywords "emacs" "bash" "eshell" "alias") (:url . "https://github.com/daviderestivo/load-bash-alias"))])
- (load-env-vars . [(20180511 2210) ((emacs (24))) "Load environment variables from files" single ((:commit . "5da97fabb4d36a00a29c40375fce9c16d8005ab3") (:authors ("Jorge Dias" . "jorge@mrdias.com")) (:maintainers ("Jorge Dias" . "jorge@mrdias.com")) (:maintainer "Jorge Dias" . "jorge@mrdias.com") (:keywords "lisp") (:url . "https://github.com/diasjorge/emacs-load-env-vars"))])
- (load-relative . [(20230214 1032) nil "Relative file load (within a multi-file Emacs package)" single ((:commit . "b7987c265a64435299d6b02f960ed2c894c4a145") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:keywords "internal") (:url . "https://github.com/rocky/emacs-load-relative"))])
- (load-theme-buffer-local . [(20120702 2036) nil "Install emacs24 color themes by buffer." single ((:commit . "bc221a88aefec5bdc137b5d5e449e1f1e55ce901") (:authors ("Victor Borja" . "vic.borja@gmail.com")) (:maintainers ("Victor Borja" . "vic.borja@gmail.com")) (:maintainer "Victor Borja" . "vic.borja@gmail.com") (:keywords "faces") (:url . "http://github.com/vic/color-theme-buffer-local"))])
- (loc-changes . [(20230214 1036) nil "keep track of positions even after buffer changes" single ((:commit . "622371e432f50626aaac82f8ee2841f71685b0fb") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "https://github.com/rocky/emacs-loc-changes"))])
- (loccur . [(20210224 2041) ((emacs (25 1))) "Perform an occur-like folding in current buffer" single ((:commit . "01b7afa62589432a98171074abb8c5a1e089034a") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainers ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com") (:keywords "matching") (:url . "https://github.com/fourier/loccur"))])
- (lockfile-mode . [(20170625 507) nil "Major mode for .lock files" single ((:commit . "496b6035716df0582f879f9488f296947cabead2") (:authors ("Preetpal S. Sohal")) (:maintainers ("Preetpal S. Sohal")) (:maintainer "Preetpal S. Sohal") (:url . "https://github.com/preetpalS/emacs-lockfile-mode"))])
- (lodgeit . [(20190802 1308) nil "Paste to a lodgeit powered pastebin" single ((:commit . "442637194d48a7105b7747b8d98772f5899f9e21") (:authors ("Eric Larson" . "eric@ionrock.org")) (:maintainers ("Eric Larson" . "eric@ionrock.org")) (:maintainer "Eric Larson" . "eric@ionrock.org") (:keywords "pastebin" "lodgeit") (:url . "https://github.com/ionrock/lodgeit-el"))])
- (log4e . [(20211019 948) nil "provide logging framework for elisp" single ((:commit . "737d275eac28dbdfb0b26d28e99da148bfce9d16") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "log") (:url . "https://github.com/aki2o/log4e"))])
- (log4j-mode . [(20230318 1521) ((emacs (25 1))) "Major mode for viewing log files" single ((:commit . "98fbe4d3bc5d5034c3b9901bd43268a8f1501a07") (:authors ("Johan Dykstrom")) (:maintainers ("Johan Dykstrom")) (:maintainer "Johan Dykstrom") (:keywords "tools") (:url . "https://github.com/dykstrom/log4j-mode"))])
- (logalimacs . [(20131021 1829) ((popwin (0 6 2)) (popup (0 5 0)) (stem (20130120))) "Front-end to logaling-command for Ruby gems" single ((:commit . "8286e39502250fc6c3c6656a7f46a8eee8e9a713") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "translation" "logaling-command") (:url . "https://github.com/logaling/logalimacs"))])
- (logito . [(20201226 534) ((emacs (25 1))) "logging library for Emacs" single ((:commit . "d5934ce10ba3a70d3fcfb94d742ce3b9136ce124") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:keywords "lisp" "extensions"))])
- (logms . [(20220704 654) ((emacs (27 1)) (f (0 20 0)) (s (1 9 0)) (ht (2 3))) "Log message with clickable links to context" single ((:commit . "186478e47265b7d40b87d4b4277275a0031f09f7") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "maint" "debug" "log") (:url . "https://github.com/jcs-elpa/logms"))])
- (lognav-mode . [(20220410 1344) ((emacs (24 3))) "Navigate Log Error Messages" single ((:commit . "100541ec31468b771073a7d2ad4512c1dcb1eb07") (:authors ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainers ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainer "Shawn Ellis" . "shawn.ellis17@gmail.com") (:keywords "log" "error" "lognav-mode" "convenience") (:url . "https://hg.osdn.net/view/lognav-mode/lognav-mode"))])
- (logpad . [(20201113 917) nil "Simulate Windows Notepad for logging." single ((:commit . "2955c6e3de40bd1e84acb4c16c7690b210f82bec") (:authors ("Sven Knurr" . "git@tuxproject.de")) (:maintainers ("Sven Knurr" . "git@tuxproject.de")) (:maintainer "Sven Knurr" . "git@tuxproject.de") (:keywords "files" "outlines" "notepad") (:url . "https://github.com/dertuxmalwieder/logpad.el"))])
- (logstash-conf . [(20210123 1949) nil "basic mode for editing logstash configuration" single ((:commit . "ec9b527191cd47d3b5947cb0ec3d6a8a57b121ea") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))])
- (logview . [(20230428 2158) ((emacs (25 1)) (datetime (0 6 1)) (extmap (1 0))) "Major mode for viewing log files" single ((:commit . "856ebf1aa9a8d0ebde3352ba14bad2fbb78c82a8") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainers ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:keywords "files" "tools") (:url . "https://github.com/doublep/logview"))])
- (lol-data-dragon . [(20200705 1822) ((emacs (25 1))) "Browse Champions of League of Legends on Data Dragon" single ((:commit . "0deec9867bd7ba96220ee2968a9b2a94fd474431") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "games" "hypermedia") (:url . "https://github.com/xuchunyang/lol-data-dragon.el"))])
- (lolcat . [(20190527 1145) ((emacs (24 3))) "Rainbows and unicorns!" single ((:commit . "4855e587a3b9681c077dac4b9f166dd860f439a4") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/lolcat.el"))])
- (lolcode-mode . [(20111002 847) nil "Major mode for editing LOLCODE" single ((:commit . "280a47e0bf02ee3abc7c5b6b14345056f41981f9") (:authors ("Bodil Stokke" . "lolcode@bodil.tv")) (:maintainers ("Bodil Stokke" . "lolcode@bodil.tv")) (:maintainer "Bodil Stokke" . "lolcode@bodil.tv") (:keywords "lolcode" "major" "mode") (:url . "http://github.com/bodil/lolcode-mode"))])
- (look-dired . [(20160729 2323) ((look-mode (1 0))) "Extensions to look-mode for dired buffers" single ((:commit . "9bfa4e5e6f3810705b6426c88493ea0bf6b15640") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "convenience") (:url . "https://github.com/vapniks/look-dired"))])
- (look-mode . [(20220626 641) nil "quick file viewer for image and text file browsing" single ((:commit . "726c5b9098926278603a83e978b488371c0e9143") (:authors ("Peter H. Mao <peter.mao@gmail.com>" . "petermao@jpl.nasa.gov")) (:maintainers ("Peter H. Mao <peter.mao@gmail.com>" . "petermao@jpl.nasa.gov")) (:maintainer "Peter H. Mao <peter.mao@gmail.com>" . "petermao@jpl.nasa.gov"))])
- (loop . [(20160813 1407) nil "friendly imperative loop structures" single ((:commit . "0ce77271d56b0fcdba4b3b38fed526081cd1f674") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "loop" "while" "for each" "break" "continue"))])
- (loophole . [(20221126 1556) ((emacs (27 1))) "Manage temporary key bindings" single ((:commit . "dadc3fadc68b13501c4dbe89109f30deb0d3441a") (:authors ("0x60DF" . "0x60df@gmail.com")) (:maintainers ("0x60DF" . "0x60df@gmail.com")) (:maintainer "0x60DF" . "0x60df@gmail.com") (:keywords "convenience") (:url . "https://github.com/0x60df/loophole"))])
- (loopy . [(20230506 2230) ((emacs (27 1)) (map (3 0)) (seq (2 22)) (compat (29 1 3))) "A looping macro" tar ((:commit . "fdc5f6cf687bdde7b19f9252d1d6c0f49d0ede54") (:authors ("Earl Hyatt")) (:maintainer "Earl Hyatt") (:keywords "extensions") (:url . "https://github.com/okamsn/loopy"))])
- (loopy-dash . [(20230501 225) ((emacs (25 1)) (loopy (0 11 2)) (dash (2 19))) "Dash destructuring for `loopy'" single ((:commit . "d04f4b8a6918ffaf745b8ccdba5ff9fee66ea8bf") (:authors ("Earl Hyatt")) (:maintainers ("Earl Hyatt")) (:maintainer "Earl Hyatt") (:keywords "extensions") (:url . "https://github.com/okamsn/loopy"))])
- (lorem-ipsum . [(20221214 1857) nil "Insert dummy pseudo Latin text" single ((:commit . "4e87a899868e908a7a9e1812831d76c8d072f885") (:authors ("Jean-Philippe Theberge" . "jphil21@sourceforge.net")) (:maintainers ("Joe Schafer" . "joe@jschaf.com")) (:maintainer "Joe Schafer" . "joe@jschaf.com") (:keywords "tools" "language" "convenience") (:url . "https://github.com/jschaf/emacs-lorem-ipsum"))])
- (lox-mode . [(20200619 1700) ((emacs (24 3))) "Major mode for the Lox programming language" single ((:commit . "083a2299e188a516d1e46ef2dd1cbb89db1aec49") (:authors ("Timmy Jose" . "zoltan.jose@gmail.com")) (:maintainers ("Timmy Jose" . "zoltan.jose@gmail.com")) (:maintainer "Timmy Jose" . "zoltan.jose@gmail.com") (:keywords "languages" "lox") (:url . "https://github.com/timmyjose-projects/lox-mode"))])
- (lpy . [(20221106 1310) ((emacs (25 1)) (lispy (0 27 0))) "A lispy interface to Python" tar ((:commit . "fa95b11e1023704510cc7dd2897bf8bcc3027cbb") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "python" "lisp") (:url . "https://github.com/abo-abo/lpy"))])
- (lsp-cfn . [(20220822 1545) ((emacs (27 0)) (lsp-mode (8 0 0)) (yaml-mode (0 0 15))) "LSP integration for cfn-lsp-extra" tar ((:commit . "55203d41d767c091511599fca236c1f9c39cd58a") (:authors ("Laurence Warne")) (:maintainers ("Laurence Warne")) (:maintainer "Laurence Warne") (:url . "https://github.com/LaurenceWarne/lsp-cfn.el"))])
- (lsp-dart . [(20221226 1829) ((emacs (26 3)) (lsp-treemacs (0 3)) (lsp-mode (7 0 1)) (dap-mode (0 6)) (f (0 20 0)) (dash (2 14 1)) (dart-mode (1 0 5)) (jsonrpc (1 0 15)) (ht (2 2))) "Dart support lsp-mode" tar ((:commit . "3db9f93c83052d6a8976c92d67d2b24473930760") (:keywords "languages" "extensions") (:url . "https://emacs-lsp.github.io/lsp-dart"))])
- (lsp-docker . [(20230504 1039) ((emacs (26 1)) (dash (2 14 1)) (lsp-mode (6 2 1)) (f (0 20 0)) (s (1 13 0)) (yaml (0 2 0)) (ht (2 0))) "LSP Docker integration" single ((:commit . "124a2f0d623b29734dc172db8c4e7680522ced3a") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "languages" "langserver") (:url . "https://github.com/emacs-lsp/lsp-docker"))])
- (lsp-focus . [(20200906 1917) ((emacs (26 1)) (focus (0 1 1)) (lsp-mode (6 1))) "focus.el support for lsp-mode" single ((:commit . "d01f0af156e4e78dcb9fa8e080a652cf8f221d30") (:authors ("Vibhav Pant")) (:maintainers ("Vibhav Pant")) (:maintainer "Vibhav Pant") (:keywords "languages" "lsp-mode") (:url . "https://github.com/emacs-lsp/lsp-focus"))])
- (lsp-grammarly . [(20221231 1655) ((emacs (27 1)) (lsp-mode (6 1)) (grammarly (0 3 0)) (request (0 3 0)) (s (1 12 0)) (ht (2 3))) "LSP Clients for Grammarly" single ((:commit . "6d111728f9d062d723bb88bd462b6eafe5cafe3f") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "lsp" "grammarly" "checker") (:url . "https://github.com/emacs-grammarly/lsp-grammarly"))])
- (lsp-haskell . [(20230104 1508) ((emacs (24 3)) (lsp-mode (3 0)) (haskell-mode (16 1))) "Haskell support for lsp-mode" single ((:commit . "3249cde75fb411f95fe173c222b848182fd0b752") (:keywords "haskell") (:url . "https://github.com/emacs-lsp/lsp-haskell"))])
- (lsp-intellij . [(20180831 2051) ((emacs (25 1)) (lsp-mode (4 1))) "intellij lsp client" single ((:commit . "cf30f0ac63bd0140e758840b8ab070e8313697b2") (:authors ("Ruin0x11" . "ipickering2@gmail.com")) (:maintainers ("Ruin0x11" . "ipickering2@gmail.com")) (:maintainer "Ruin0x11" . "ipickering2@gmail.com") (:keywords "languages" "processes" "tools") (:url . "https://github.com/Ruin0x11/lsp-intellij"))])
- (lsp-ivy . [(20220831 1823) ((emacs (25 1)) (dash (2 14 1)) (lsp-mode (6 2 1)) (ivy (0 13 0))) "LSP ivy integration" single ((:commit . "9ecf4dd9b1207109802bd1882aa621eb1c385106") (:keywords "languages" "debug") (:url . "https://github.com/emacs-lsp/lsp-ivy"))])
- (lsp-java . [(20230507 517) ((emacs (25 1)) (lsp-mode (6 0)) (markdown-mode (2 3)) (dash (2 18 0)) (f (0 20 0)) (ht (2 0)) (request (0 3 0)) (treemacs (2 5)) (dap-mode (0 5))) "Java support for lsp-mode" tar ((:commit . "961f1a13e3db9a6b395584be99ef9572bb414e63") (:keywords "languague" "tools") (:url . "https://github.com/emacs-lsp/lsp-java"))])
- (lsp-javacomp . [(20190124 1755) ((emacs (25 1)) (lsp-mode (3 0)) (s (1 2 0))) "Provide Java IDE features powered by JavaComp." single ((:commit . "82aa4ad6ca03a74565c35e855b318b1887bcd89b") (:keywords "java" "tools" "lsp") (:url . "https://github.com/tigersoldier/lsp-javacomp"))])
- (lsp-jedi . [(20220430 18) ((emacs (25 1)) (lsp-mode (6 0))) "Lsp client plugin for Python Jedi Language Server" single ((:commit . "5e3eb3e160c2d38b8bd2b5cd3b86fa4f823f9330") (:authors ("Fred Campos" . "fred.tecnologia@gmail.com")) (:maintainers ("Fred Campos")) (:maintainer "Fred Campos") (:keywords "language-server" "tools" "python" "jedi" "ide") (:url . "http://github.com/fredcamps/lsp-jedi"))])
- (lsp-julia . [(20230414 2107) ((emacs (25 1)) (lsp-mode (6 3)) (julia-mode (0 3))) "Julia support for lsp-mode" tar ((:commit . "c584f79c7fee6176bbb6120f4cb0f1001bcf8113") (:authors ("Martin Wolke" . "vibhavp@gmail.com") ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz") ("Guido Kraemer" . "gdkrmr@users.noreply.github.com")) (:maintainers ("Guido Kraemer" . "gdkrmr@users.noreply.github.com")) (:maintainer "Guido Kraemer" . "gdkrmr@users.noreply.github.com") (:keywords "languages" "tools") (:url . "https://github.com/gdkrmr/lsp-julia"))])
- (lsp-latex . [(20230421 1814) ((emacs (26 3)) (lsp-mode (6 0))) "LSP-mode client for LaTeX, on texlab" single ((:commit . "51bd8a0306a21c81a0c765b1857c534a29d92877") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "languages" "tex") (:url . "https://github.com/ROCKTAKEY/lsp-latex"))])
- (lsp-ltex . [(20230416 1826) ((emacs (27 1)) (lsp-mode (6 1))) "LSP Clients for LTEX" single ((:commit . "c2faddc1197a360548aee7927b6512365e8c0d3a") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "lsp" "languagetool" "checker") (:url . "https://github.com/emacs-languagetool/lsp-ltex"))])
- (lsp-metals . [(20230406 755) ((emacs (26 1)) (scala-mode (1 1)) (lsp-mode (7 0)) (lsp-treemacs (0 2)) (dap-mode (0 3)) (dash (2 18 0)) (f (0 20 0)) (ht (2 0)) (treemacs (2 5)) (posframe (1 4 1))) "Scala Client settings" tar ((:commit . "a11099b79f032aa2fc92a727d2c1e40987727d65") (:authors ("Ross A. Baker" . "ross@rossabaker.com") ("Evgeny Kurnevsky" . "kurnevsky@gmail.com")) (:maintainers ("Ross A. Baker" . "ross@rossabaker.com")) (:maintainer "Ross A. Baker" . "ross@rossabaker.com") (:keywords "languages" "extensions") (:url . "https://github.com/emacs-lsp/lsp-metals"))])
- (lsp-mode . [(20230507 503) ((emacs (26 3)) (dash (2 18 0)) (f (0 20 0)) (ht (2 3)) (spinner (1 7 3)) (markdown-mode (2 3)) (lv (0)) (eldoc (1 11))) "LSP mode" tar ((:commit . "2f3ae71cbfc652f0b912eda946bfa524f59313df") (:authors ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainers ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainer "Vibhav Pant, Fangrui Song, Ivan Yonchovski") (:keywords "languages") (:url . "https://github.com/emacs-lsp/lsp-mode"))])
- (lsp-mssql . [(20230316 1612) ((emacs (25 1)) (lsp-mode (6 2)) (dash (2 14 1)) (f (0 20 0)) (ht (2 0)) (lsp-treemacs (0 1))) "MSSQL LSP bindings" tar ((:commit . "9d9a14a2b40c5fd13b8e33fccd397283a2437526") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainers ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:keywords "data" "languages") (:url . "https://github.com/emacs-lsp/lsp-mssql"))])
- (lsp-origami . [(20211016 1045) ((origami (1 0)) (lsp-mode (6 1))) "origami.el support for lsp-mode" single ((:commit . "5b88ab77dc2696c93fa5dd9debe183821c533b71") (:authors ("Vibhav Pant")) (:maintainers ("Vibhav Pant")) (:maintainer "Vibhav Pant") (:keywords "languages" "lsp-mode") (:url . "https://github.com/emacs-lsp/lsp-origami"))])
- (lsp-p4 . [(20190127 1049) ((lsp-mode (3 0))) "P4 support for lsp-mode" tar ((:commit . "084e33a5782f9153502d9b03e63d9cbbe81cdaeb") (:authors ("Dmitri Makarov")) (:maintainers ("Dmitri Makarov")) (:maintainer "Dmitri Makarov") (:keywords "lsp" "p4") (:url . "https://github.com/dmakarov/p4ls"))])
- (lsp-pascal . [(20200422 1610) ((emacs (24 4)) (lsp-mode (6 3))) "LSP client for Pascal" single ((:commit . "9b65bf9e923b1459d1feb1d7528e5855e7bd4ef2") (:authors ("Arjan Adriaanse" . "arjan@adriaan.se")) (:maintainers ("Arjan Adriaanse" . "arjan@adriaan.se")) (:maintainer "Arjan Adriaanse" . "arjan@adriaan.se") (:keywords "languages" "tools") (:url . "https://github.com/arjanadriaanse/lsp-pascal"))])
- (lsp-pyre . [(20190406 335) ((lsp-mode (6 0))) "lsp-mode client for python using pyre" single ((:commit . "e177b8f5efd1a955b5753aeb5d1894e6d21be35a") (:authors ("John Allen" . "oss@porcnick.com")) (:maintainers ("John Allen" . "oss@porcnick.com")) (:maintainer "John Allen" . "oss@porcnick.com") (:url . "https://github.com/jra3/lsp-pyre"))])
- (lsp-pyright . [(20230225 1118) ((emacs (26 1)) (lsp-mode (7 0)) (dash (2 18 0)) (ht (2 0))) "Python LSP client using Pyright" single ((:commit . "54a2acddfdd7c3d31cb804a042305a3c6e60cf81") (:authors ("Arif Rezai, Vincent Zhang, Andrew Christianson")) (:maintainers ("Arif Rezai, Vincent Zhang, Andrew Christianson")) (:maintainer "Arif Rezai, Vincent Zhang, Andrew Christianson") (:keywords "languages" "tools" "lsp") (:url . "https://github.com/emacs-lsp/lsp-pyright"))])
- (lsp-python-ms . [(20211204 1209) ((emacs (25 1)) (lsp-mode (6 1))) "The lsp-mode client for Microsoft python-language-server" single ((:commit . "abf4d89ecf2fa0871130df5fce6065b7cf0a2721") (:authors ("Charl Botha")) (:maintainers ("Andrew Christianson, Vincent Zhang")) (:maintainer "Andrew Christianson, Vincent Zhang") (:keywords "languages" "tools") (:url . "https://github.com/emacs-lsp/lsp-python-ms"))])
- (lsp-rescript . [(20220314 1957) ((lsp-mode (7 0 1)) (emacs (25 1)) (rescript-mode (0 1))) "LSP client configuration for lsp-mode and rescript-vscode" single ((:commit . "7baf9adf10234cf964feefae99050268e9bc5681") (:authors ("John Lee")) (:maintainers ("John Lee")) (:maintainer "John Lee") (:keywords "languages") (:url . "https://github.com/jjlee/lsp-rescript"))])
- (lsp-scheme . [(20230502 2251) ((emacs (26 1)) (f (0 20 0)) (lsp-mode (8 0 0))) "Scheme support for lsp-mode" tar ((:commit . "2da775930450dd3d1038e62f1ebec0cdbc2f2e3c") (:authors ("Ricardo G. Herdt" . "r.herdt@posteo.de")) (:maintainers ("Ricardo G. Herdt" . "r.herdt@posteo.de")) (:maintainer "Ricardo G. Herdt" . "r.herdt@posteo.de") (:keywords "languages" "lisp" "tools") (:url . "https://codeberg.org/rgherdt/emacs-lsp-scheme"))])
- (lsp-sonarlint . [(20220510 1802) ((emacs (25)) (dash (2 12 0)) (lsp-mode (6 3)) (ht (2 3))) "Emacs Sonarlint lsp client" tar ((:commit . "a429be2aea7797369a3c751ef54e3554733117be") (:authors ("Fermin MF" . "fmfs@posteo.net")) (:maintainers ("Fermin MF" . "fmfs@posteo.net")) (:maintainer "Fermin MF" . "fmfs@posteo.net") (:keywords "languages" "tools" "php" "javascript" "xml" "ruby" "html" "scala" "java" "python") (:url . "https://github.com/emacs-lsp/lsp-sonarlint"))])
- (lsp-sourcekit . [(20210905 2017) ((emacs (25 1)) (lsp-mode (5))) "sourcekit-lsp client for lsp-mode" single ((:commit . "97ff36b228a61e69734c7180f33cc6951b1a600f") (:authors ("Daniel Martín")) (:maintainers ("Daniel Martín")) (:maintainer "Daniel Martín") (:keywords "languages" "lsp" "swift" "objective-c" "c++") (:url . "https://github.com/emacs-lsp/lsp-sourcekit"))])
- (lsp-tailwindcss . [(20230407 951) ((lsp-mode (7 1)) (f (0 20 0)) (emacs (26 1))) "A lsp-mode client for tailwindcss" single ((:commit . "6ade9cacd1db89da0e9c0941a86408a42091d479") (:authors ("A.I." . "merrick@luois.me")) (:maintainers ("A.I." . "merrick@luois.me")) (:maintainer "A.I." . "merrick@luois.me") (:keywords "language" "tools") (:url . "https://github.com/merrickluo/lsp-tailwindcss"))])
- (lsp-treemacs . [(20230504 516) ((emacs (26 1)) (dash (2 18 0)) (f (0 20 0)) (ht (2 0)) (treemacs (2 5)) (lsp-mode (6 0))) "LSP treemacs" tar ((:commit . "eeb96b05e677147cf40292b86a1e5e8f73a8a586") (:authors ("Ivan Yonchovski")) (:maintainers ("Ivan Yonchovski")) (:maintainer "Ivan Yonchovski") (:keywords "languages") (:url . "https://github.com/emacs-lsp/lsp-treemacs"))])
- (lsp-ui . [(20230116 2024) ((emacs (26 1)) (dash (2 18 0)) (lsp-mode (6 0)) (markdown-mode (2 3))) "UI modules for lsp-mode" tar ((:commit . "295d8984da06a745b0a36c56e28ce915bc389adb") (:authors ("Sebastien Chapuis <sebastien@chapu.is>, Fangrui Song" . "i@maskray.me")) (:maintainers ("Sebastien Chapuis <sebastien@chapu.is>, Fangrui Song" . "i@maskray.me")) (:maintainer "Sebastien Chapuis <sebastien@chapu.is>, Fangrui Song" . "i@maskray.me") (:keywords "languages" "tools") (:url . "https://github.com/emacs-lsp/lsp-ui"))])
- (lua-mode . [(20221218 605) ((emacs (24 3))) "a major-mode for editing Lua scripts" single ((:commit . "ad639c62e38a110d8d822c4f914af3e20b40ccc4") (:authors ("2011-2013 immerrr" . "immerrr+lua@gmail.com") ("2010-2011 Reuben Thomas" . "rrt@sc3d.org") ("2006 Juergen Hoetzel" . "juergen@hoetzel.info") ("2004 various (support for Lua 5 and byte compilation)") ("2001 Christian Vogler" . "cvogler@gradient.cis.upenn.edu") ("1997 Bret Mogilefsky" . "mogul-lua@gelatinous.com") ("tcl-mode by Gregor Schmid" . "schmid@fb3-s7.math.tu-berlin.de") ("with tons of assistance from") ("Paul Du Bois" . "pld-lua@gelatinous.com") ("Aaron Smith" . "aaron-lua@gelatinous.com")) (:maintainers ("2011-2013 immerrr" . "immerrr+lua@gmail.com")) (:maintainer "2011-2013 immerrr" . "immerrr+lua@gmail.com") (:keywords "languages" "processes" "tools") (:url . "https://immerrr.github.io/lua-mode"))])
- (luarocks . [(20170430 2305) ((emacs (24)) (cl-lib (0 5))) "luarocks tools" single ((:commit . "cee27ba0716edf338077387969883226dd2b7484") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/luarocks.el"))])
- (lurk-mode . [(20230120 2226) ((emacs (25 1))) "A major mode for editing lurk files" single ((:commit . "59a3f956944a5ddd43cfd57deeff6b647fc46554") (:maintainers ("Jeff Weiss" . "jweiss@protocol.ai")) (:maintainer "Jeff Weiss" . "jweiss@protocol.ai") (:keywords "languages" "lurk" "lisp") (:url . "http://github.com/lurk-lang/lurk-emacs"))])
- (lush-theme . [(20180816 2200) ((emacs (24))) "A dark theme with lush colors" single ((:commit . "7cfc993709d712f75c51b505078608c9e1c11466") (:authors ("Andre Richter" . "andre.o.richter@gmail.com")) (:maintainers ("Andre Richter" . "andre.o.richter@gmail.com")) (:maintainer "Andre Richter" . "andre.o.richter@gmail.com") (:keywords "theme" "dark" "strong colors") (:url . "https://github.com/andre-richter/emacs-lush-theme"))])
- (lusty-explorer . [(20200602 228) ((emacs (25 1))) "Dynamic filesystem explorer and buffer switcher" single ((:commit . "75233eff9c961b9e99db0e0c50b6720850b595ec") (:keywords "convenience" "files" "matching" "tools") (:url . "https://github.com/sjbach/lusty-emacs"))])
- (lux-mode . [(20220328 1301) ((emacs (24 3))) "Major mode for editing lux files" single ((:commit . "f9335e885611c2a5d65c449facdad72c28b3ff9c") (:authors ("HÃ¥kan Mattsson")) (:maintainers ("HÃ¥kan Mattsson")) (:maintainer "HÃ¥kan Mattsson") (:url . "https://github.com/hawk/lux"))])
- (lv . [(20200507 1518) nil "Other echo area" single ((:commit . "87873d788891029d9e44fa5458321d6a05849b94") (:authors ("Oleh Krehel")) (:maintainers ("Oleh Krehel")) (:maintainer "Oleh Krehel"))])
- (lxc . [(20140410 2022) nil "lxc integration with Emacs" single ((:commit . "88bed56c954d1edd9ff5ce0ced2c02dcf9f71835") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "processes") (:url . "https://github.com/nicferrier/emacs-lxc"))])
- (lxc-tramp . [(20230119 1251) ((emacs (24)) (cl-lib (0 6))) "TRAMP integration for LXC containers" single ((:commit . "57559701334bb5635b82a252bd00298d06d794fe") (:authors ("montag451")) (:maintainers ("montag451")) (:maintainer "montag451") (:keywords "lxc" "convenience") (:url . "https://github.com/montag451/lxc-tramp"))])
- (lxd-tramp . [(20181023 7) ((emacs (24 4)) (cl-lib (0 6))) "TRAMP integration for LXD containers" single ((:commit . "f335c76245f62b02cf67a9376eca6f3863c8a75a") (:authors ("Yc.S" . "onixie@gmail.com")) (:maintainers ("Yc.S" . "onixie@gmail.com")) (:maintainer "Yc.S" . "onixie@gmail.com") (:keywords "lxd" "lxc" "convenience") (:url . "https://github.com/onixie/lxd-tramp.git"))])
- (lyrics . [(20220206 116) ((emacs (25 1)) (seq (2 15))) "Show lyrics" single ((:commit . "c3d42f1e039941f32f49252e1b1610de337b4470") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/lyrics.el"))])
- (lyrics-fetcher . [(20220717 1716) ((emacs (27)) (emms (7 5)) (f (0 20 0)) (request (0 3 2))) "Fetch song lyrics and album covers" tar ((:commit . "a3be34b0153c2c056dc4b55bbc5fbdc2d9f87549") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/lyrics-fetcher.el"))])
- (m-buffer . [(20220719 1850) ((seq (2 14))) "List-Oriented, Functional Buffer Manipulation" tar ((:commit . "d2e35bf9293367f1a2d19f259f32a35bd9f4788b") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.rg.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.rg.uk"))])
- (mac-pseudo-daemon . [(20200215 513) ((cl-lib (0 1))) "Daemon mode that plays nice with Mac OS." single ((:commit . "564b006835facc4a8df247d8a47ab1030d7e7beb") (:authors ("Ryan C. Thompson")) (:maintainers ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:keywords "convenience" "osx" "mac") (:url . "https://github.com/DarwinAwardWinner/osx-pseudo-daemon"))])
- (maces-game . [(20170903 1551) ((dash (2 12 0)) (cl-lib (0 5)) (emacs (24))) "another anagram game." tar ((:commit . "6a067422d305ac51612842930ed6686dc615ffec") (:authors ("Pawel Bokota" . "pawelb.lnx@gmail.com")) (:maintainers ("Pawel Bokota" . "pawelb.lnx@gmail.com")) (:maintainer "Pawel Bokota" . "pawelb.lnx@gmail.com") (:keywords "games" "word games" "anagram") (:url . "https://github.com/pawelbx/anagram-game"))])
- (macports . [(20230427 1110) ((emacs (25 1)) (transient (0 1 0))) "A porcelain for MacPorts" tar ((:commit . "1bd8406c84a80204f69f8bc328ab842a049a1aab") (:authors ("Aaron Madlon-Kay")) (:maintainers ("Aaron Madlon-Kay")) (:maintainer "Aaron Madlon-Kay") (:keywords "convenience") (:url . "https://github.com/amake/macports.el"))])
- (macro-math . [(20130328 1604) nil "in-buffer mathematical operations" single ((:commit . "216e59371e9ee39c34117ba79b9acd78bb415750") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "convenience") (:url . "http://nschum.de/src/emacs/macro-math/"))])
- (macrostep . [(20230316 3) ((cl-lib (0 5))) "Interactive macro expander" tar ((:commit . "cdaa3a5e8235b6edd2e862eb272710471a82039d") (:authors ("Jon Oddie" . "j.j.oddie@gmail.com")) (:maintainers ("Jon Oddie" . "j.j.oddie@gmail.com")) (:maintainer "Jon Oddie" . "j.j.oddie@gmail.com") (:keywords "lisp" "languages" "macro" "debugging") (:url . "https://github.com/emacsorphanage/macrostep"))])
- (macrostep-geiser . [(20210717 801) ((emacs (24 4)) (macrostep (0 9)) (geiser (0 12))) "Macrostep for `geiser'" single ((:commit . "f6a2d5bb96ade4f23df557649af87ebd0cc45125") (:authors ("Nikita Bloshchanevich")) (:maintainers ("Nikita Bloshchanevich")) (:maintainer "Nikita Bloshchanevich") (:keywords "languages" "scheme") (:url . "https://github.com/nbfalcon/macrostep-geiser"))])
- (madhat2r-theme . [(20170203 30) ((emacs (24))) "dark color theme that is easy on the eyes" single ((:commit . "6b387f09de055cfcc15d74981cd4f32f8f9a7323") (:authors ("Micah Duke")) (:maintainers ("Micah Duke")) (:maintainer "Micah Duke") (:keywords "color" "theme") (:url . "https://github.com/madhat2r/madhat2r-theme"))])
- (mag-menu . [(20150505 1850) ((splitter (0 1 0))) "Intuitive keyboard-centric menu system" single ((:commit . "9b9277021cd09fb1dba64b1d2a00705d20914bd6") (:authors ("Steven Thomas")) (:maintainers ("Steven Thomas")) (:maintainer "Steven Thomas") (:keywords "convenience") (:url . "https://github.com/chumpage/mag-menu"))])
- (magic-filetype . [(20180219 1552) ((emacs (24)) (s (1 9 0))) "Enhance filetype major mode" single ((:commit . "019494add5ff02dd36cb3f500142fc51125522cc") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "emulations" "vim" "ft" "file" "magic-mode") (:url . "https://github.com/zonuexe/magic-filetype.el"))])
- (magic-latex-buffer . [(20210306 422) ((cl-lib (0 5)) (emacs (25 1))) "Magically enhance LaTeX-mode font-locking for semi-WYSIWYG editing" single ((:commit . "903ec91872760e47c0e5715795f8465173615098") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.github.io/"))])
- (magik-mode . [(20230103 1503) nil "mode for editing Magik + some utils." tar ((:commit . "a2ddc7cad487e6165c2e2ac26acec62b1f7bbeca") (:keywords "languages") (:url . "http://github.com/roadrunner1776/magik"))])
- (magit . [(20230502 1321) ((emacs (25 1)) (compat (29 1 3 4)) (dash (20221013)) (git-commit (20230101)) (magit-section (20230101)) (transient (20230201)) (with-editor (20230118))) "A Git porcelain inside Emacs." tar ((:commit . "6067f92c0195616707b25e23c2d4c0dd81928fd8") (:authors ("Marius Vollmer" . "marius.vollmer@gmail.com") ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/magit"))])
- (magit-annex . [(20230407 1200) ((cl-lib (0 3)) (magit (3 0 0))) "Control git-annex from Magit" single ((:commit . "255e443e19a32e716ff414e09ad5e00f6f8bc8fb") (:authors ("Kyle Meyer" . "kyle@kyleam.com") ("Rémi Vanicat" . "vanicat@debian.org")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:keywords "vc" "tools") (:url . "https://github.com/magit/magit-annex"))])
- (magit-commit-mark . [(20230420 304) ((emacs (28 1)) (magit (3 3 0))) "Support marking commits as read" single ((:commit . "8c0ea6c2e25ae0d47f15ae9067874a0605c00704") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-magit-commit-mark"))])
- (magit-delta . [(20220125 50) ((emacs (25 1)) (magit (20200426)) (xterm-color (2 0))) "Use Delta when displaying diffs in Magit" single ((:commit . "5fc7dbddcfacfe46d3fd876172ad02a9ab6ac616") (:authors ("Dan Davison" . "dandavison7@gmail.com")) (:maintainers ("Dan Davison" . "dandavison7@gmail.com")) (:maintainer "Dan Davison" . "dandavison7@gmail.com") (:url . "https://github.com/dandavison/magit-delta"))])
- (magit-diff-flycheck . [(20190524 551) ((magit (2)) (flycheck (31)) (seq (2)) (emacs (25 1))) "Report errors in diffs" single ((:commit . "ad58efa312d708f25661dfcc2a7f83a833cca328") (:authors ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainers ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainer "Alex Ragone" . "ragonedk@gmail.com") (:keywords "convenience" "matching") (:url . "https://github.com/ragone/magit-diff-flycheck"))])
- (magit-filenotify . [(20151116 2340) ((magit (1 3 0)) (emacs (24 4))) "Refresh status buffer when git tree changes" single ((:commit . "c0865b3c41af20b6cd89de23d3b0beb54c8401a4") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainers ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainer "Rüdiger Sonderfeld" . "ruediger@c-plusplus.de") (:keywords "tools"))])
- (magit-find-file . [(20150702 830) ((magit (2 1 0)) (dash (2 8 0))) "completing-read over all files in Git" single ((:commit . "035da838b1a19e7a5ee135b4ca8475f4e235b61e") (:authors ("Bradley Wright" . "brad@intranation.com")) (:maintainers ("Bradley Wright" . "brad@intranation.com")) (:maintainer "Bradley Wright" . "brad@intranation.com") (:keywords "git") (:url . "https://github.com/bradleywright/magit-find-file.el"))])
- (magit-gerrit . [(20230309 2251) ((emacs (25 1)) (magit (2 90 1)) (transient (0 3 0))) "Magit plugin for Gerrit Code Review" single ((:commit . "a97521574c5b7d4b7ab89e25c358c87fd5b1887f") (:authors ("Brian Fransioli" . "assem@terranpro.org")) (:maintainers ("Brian Fransioli" . "assem@terranpro.org")) (:maintainer "Brian Fransioli" . "assem@terranpro.org") (:url . "https://github.com/emacsorphanage/magit-gerrit"))])
- (magit-gh-pulls . [(20191230 1944) ((emacs (24 4)) (gh (0 9 1)) (magit (2 12 0)) (pcache (0 2 3)) (s (1 6 1))) "GitHub pull requests extension for Magit" single ((:commit . "57f3a5158bbc7bfd169ee136fde351cce999e0ca") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:keywords "git" "tools") (:url . "https://github.com/sigma/magit-gh-pulls"))])
- (magit-gitflow . [(20170929 824) ((magit (2 1 0)) (magit-popup (2 2 0))) "gitflow extension for magit" single ((:commit . "cc41b561ec6eea947fe9a176349fb4f771ed865b") (:authors ("Jan Tatarik" . "Jan.Tatarik@gmail.com")) (:maintainers ("Jan Tatarik" . "Jan.Tatarik@gmail.com")) (:maintainer "Jan Tatarik" . "Jan.Tatarik@gmail.com") (:keywords "vc" "tools") (:url . "https://github.com/jtatarik/magit-gitflow"))])
- (magit-imerge . [(20220306 2311) ((emacs (25 1)) (magit (3 0 0))) "Magit extension for git-imerge" single ((:commit . "37bca48218dc32cad964e01e0f9936a90f634fba") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:keywords "vc" "tools") (:url . "https://github.com/magit/magit-imerge"))])
- (magit-lfs . [(20221031 1447) ((emacs (24 4)) (magit (2 10 3)) (dash (2 13 0))) "Magit plugin for Git LFS" single ((:commit . "cd9f46e1840270be27e2c2d9dcf036ff0781f66d") (:authors ("Junyoung/Clare Jang" . "jjc9310@gmail.com")) (:maintainers ("Junyoung/Clare Jang" . "jjc9310@gmail.com")) (:maintainer "Junyoung/Clare Jang" . "jjc9310@gmail.com") (:keywords "magit" "git" "lfs" "tools" "vc") (:url . "https://github.com/ailrun/magit-lfs"))])
- (magit-org-todos . [(20180709 1950) ((magit (2 0 0)) (emacs (24))) "Add local todo items to the magit status buffer" single ((:commit . "9ffa3efb098434d837cab4bacd1601fdfc6fe999") (:authors ("Daniel Ma")) (:maintainers ("Daniel Ma")) (:maintainer "Daniel Ma") (:keywords "org-mode" "magit" "tools") (:url . "http://github.com/danielma/magit-org-todos"))])
- (magit-p4 . [(20220822 2022) ((emacs (25 1)) (magit (2 1)) (magit-popup (2 1)) (p4 (12 0)) (cl-lib (0 5))) "git-p4 plug-in for Magit" single ((:commit . "0fd0f882eb14510714393c15c2ccb8d2c259f01e") (:authors ("Damian T. Dobroczyński" . "qoocku@gmail.com")) (:maintainers ("Aleksey Fedotov" . "lexa@cfotr.com")) (:maintainer "Aleksey Fedotov" . "lexa@cfotr.com") (:keywords "vc" "tools") (:url . "https://github.com/qoocku/magit-p4"))])
- (magit-patch-changelog . [(20221209 123) ((emacs (28 1)) (magit (3 3 0))) "Generate a patch according to emacs-mirror/CONTRIBUTE" single ((:commit . "fd259cf6ce270a21df2f00b1e031193c8595a7a9") (:keywords "git" "tools" "vc") (:url . "https://github.com/dickmao/magit-patch-changelog"))])
- (magit-popup . [(20200719 1015) ((emacs (24 4)) (dash (2 13 0))) "Define prefix-infix-suffix command combos" tar ((:commit . "d8585fa39f88956963d877b921322530257ba9f5") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "bindings") (:url . "https://github.com/magit/magit-popup"))])
- (magit-rbr . [(20181009 2016) ((magit (2 13 0)) (emacs (24 3))) "Support for git rbr in Magit" single ((:commit . "029203b3e48537205052a058e964f058cd802c3c") (:authors ("Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com")) (:maintainers ("Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com")) (:maintainer "Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com") (:keywords "git" "magit" "rbr" "tools") (:url . "https://github.com/fanatoly/magit-rbr"))])
- (magit-reviewboard . [(20200727 1748) ((emacs (25 2)) (magit (2 13 0)) (s (1 12 0)) (request (0 3 0))) "Show open Reviewboard reviews in Magit" single ((:commit . "aceedff88921f1dfef8a6b2fb18fe316fb7223a8") (:authors ("Jules Tamagnan" . "jtamagnan@gmail.com")) (:maintainers ("Jules Tamagnan" . "jtamagnan@gmail.com")) (:maintainer "Jules Tamagnan" . "jtamagnan@gmail.com") (:keywords "magit" "vc") (:url . "http://github.com/jtamagnan/magit-reviewboard"))])
- (magit-section . [(20230428 1518) ((emacs (25 1)) (compat (29 1 3 4)) (dash (20221013))) "Sections for read-only buffers." tar ((:commit . "c5ebbf86ed9fa0cc33d5e7e788a55fe8c7ab4b93") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "tools") (:url . "https://github.com/magit/magit"))])
- (magit-stats . [(20230223 1819) ((emacs (25 1))) "Generates GIT Repo Statistics Report" single ((:commit . "41b18e5fc664dba93981a7931f476632c5b54a7d") (:authors ("Rahul M. Juliato")) (:maintainers ("Rahul M. Juliato")) (:maintainer "Rahul M. Juliato") (:keywords "vc" "convenience") (:url . "https://github.com/LionyxML/magit-stats"))])
- (magit-stgit . [(20220914 1349) ((emacs (24 4)) (magit (2 12 0)) (magit-popup (2 12 0))) "StGit extension for Magit" single ((:commit . "bf96fa0f40c087329ad7e6a3b1946de7df03559c") (:authors ("Lluís Vilanova" . "vilanova@ac.upc.edu")) (:maintainers ("UNMAINTAINED")) (:maintainer "UNMAINTAINED") (:keywords "vc" "tools"))])
- (magit-svn . [(20220314 1451) ((emacs (25 1)) (magit (2 90 1)) (transient (0 3 2))) "Git-Svn extension for Magit" single ((:commit . "b8277081db90977247ae3900ea6afeb0ca644d36") (:authors ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Phil Jackson" . "phil@shellarchive.co.uk") (:keywords "vc" "tools"))])
- (magit-tbdiff . [(20220527 2213) ((emacs (25 1)) (magit (3 0 0))) "Magit extension for range diffs" single ((:commit . "55e6443710def357f3f78eea27d5bbe023d868f5") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:keywords "vc" "tools") (:url . "https://github.com/magit/magit-tbdiff"))])
- (magit-todos . [(20230307 549) ((emacs (26 1)) (async (1 9 2)) (dash (2 13 0)) (f (0 17 2)) (hl-todo (1 9 0)) (magit (2 13 0)) (pcre2el (1 8)) (s (1 12 0)) (transient (0 2 0))) "Show source file TODOs in Magit" single ((:commit . "7724259a008144b8cfc6cacdae3e764f207a03e7") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "magit" "vc") (:url . "http://github.com/alphapapa/magit-todos"))])
- (magit-topgit . [(20161105 1623) ((emacs (24 4)) (magit (2 1 0))) "TopGit extension for Magit" single ((:commit . "11489ea798bc88d0ea5244bbf725285eedfefbef") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Robin Green" . "greenrd@greenrd.org")) (:maintainer "Robin Green" . "greenrd@greenrd.org") (:keywords "vc" "tools"))])
- (magit-vcsh . [(20230402 1219) ((magit (2 90 1)) (vcsh (0 4)) (emacs (24 4))) "Magit vcsh integration" single ((:commit . "fd6c86c066b14bbf78644d38eca9711d6d9544a1") (:authors ("Štěpán Němec" . "stepnem@smrk.net")) (:maintainers ("Štěpán Němec" . "stepnem@smrk.net")) (:maintainer "Štěpán Němec" . "stepnem@smrk.net") (:keywords "vc" "files" "magit") (:url . "http://git.smrk.net/magit-vcsh.el"))])
- (magithub . [(20220315 117) ((emacs (25)) (magit (2 12)) (s (1 12 0)) (ghub+ (0 3)) (git-commit (2 12)) (markdown-mode (2 3))) "Magit interfaces for GitHub" tar ((:commit . "dd62c7057155c0a334e6d9087779a2923d2300b8") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:keywords "git" "tools" "vc") (:url . "https://github.com/vermiculus/magithub"))])
- (magma-mode . [(20211018 917) ((emacs (24 3)) (cl-lib (0 3)) (dash (2 6 0)) (f (0 17 1))) "Mode for editing Magma source code" tar ((:commit . "11428d18ce3742334923d14ff2a8f493e7bd5ef0") (:url . "https://github.com/ThibautVerron/magma-mode"))])
- (magnatune . [(20151030 1935) ((dash (2 9 0)) (s (1 9 0))) "browse magnatune's music catalog" tar ((:commit . "605b01505ba30589c77ebb4c96834b5072ccbdd4"))])
- (magrant . [(20210706 1438) ((emacs (25 1)) (dash (2 17 0)) (s (1 12 0)) (tablist (0 70)) (transient (0 2 0)) (friendly-shell-command (0 2 3))) "Transient Interface to Vagrant" tar ((:commit . "6309c001355126e3ade79493479b517925943d17") (:keywords "processes" "terminals") (:url . "https://github.com/p3r7/magrant"))])
- (majapahit-themes . [(20221207 121) nil "Color theme with a dark and light versions" tar ((:commit . "7200f16f0fd4cc18e8c7d82b62cc351b610609af") (:authors ("Alexander F. Adhyatma")) (:maintainer "Alexander F. Adhyatma") (:url . "http:/gitlab.com/franksn/majapahit-theme/"))])
- (major-mode-hydra . [(20210221 834) ((dash (2 18 0)) (pretty-hydra (0 2 2)) (emacs (25))) "Major mode keybindings managed by Hydra" single ((:commit . "84c1929a5153be169ca5c36737439d51dffde505") (:authors ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainers ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainer "Jerry Peng" . "pr2jerry@gmail.com") (:url . "https://github.com/jerrypnz/major-mode-hydra.el"))])
- (major-mode-icons . [(20220210 1404) ((emacs (24 3)) (powerline (2 4)) (all-the-icons (2 3 0))) "display icon for major-mode on mode-line." tar ((:commit . "b0214e0af13cd3691c4d28f03e3108bd98ec7a85") (:keywords "frames" "multimedia") (:url . "https://repo.or.cz/major-mode-icons.git"))])
- (make-color . [(20140625 1150) nil "Alternative to picking color - update fg/bg color by pressing r/g/b/... keys" single ((:commit . "a1b34e95ccd3ebee4fba1489ab613d0b3078026d") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "color") (:url . "https://github.com/alezost/make-color.el"))])
- (make-it-so . [(20190625 1036) ((swiper (0 8 0)) (emacs (24))) "Transform files with Makefile recipes." tar ((:commit . "b73dfb640588123c9eece230ad72b37604f5c126") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "make" "dired") (:url . "https://github.com/abo-abo/make-it-so"))])
- (makefile-executor . [(20230224 1329) ((emacs (27 1)) (dash (2 11 0)) (f (0 11 0)) (s (1 10 0))) "Commands for conveniently running makefile targets" single ((:commit . "d1d98eaf522a767561f6c7cbd8d2526be58b3ec5") (:authors ("Olivia Thiderman" . "olivia@thiderman.org")) (:maintainers ("Olivia Thiderman" . "olivia@thiderman.org")) (:maintainer "Olivia Thiderman" . "olivia@thiderman.org") (:keywords "processes") (:url . "https://github.com/Olivia5k/makefile-executor.el"))])
- (makey . [(20131231 1430) ((cl-lib (0 2))) "interactive commandline mode" single ((:commit . "a61781e69d3b451551e269446e1c5f624ab81137") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainers ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org"))])
- (malinka . [(20171202 1021) ((s (1 9 0)) (dash (2 4 0)) (f (0 11 0)) (cl-lib (0 3)) (rtags (0 0)) (projectile (0 11 0))) "A C/C++ project configuration package for Emacs" single ((:commit . "e3dc5b0703a5954057110b82cb397a990ace23e6") (:authors ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainers ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas" . "lefteris@refu.co") (:keywords "c" "c++" "project-management") (:url . "https://github.com/LefterisJP/malinka"))])
- (mallard-mode . [(20131204 425) nil "Major mode for editing Mallard files" tar ((:commit . "0a4cfede57bc31134495804ce513cc106de8de3c") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainers ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com") (:keywords "xml" "mallard") (:url . "https://github.com/jhradilek/emacs-mallard-mode"))])
- (mallard-snippets . [(20131023 1851) ((yasnippet (0 8 0)) (mallard-mode (0 1 1))) "Yasnippets for Mallard" tar ((:commit . "35b7d0558da14fcffd51863f623806216a0093ce") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainers ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com") (:keywords "snippets" "mallard") (:url . "https://github.com/jhradilek/emacs-mallard-snippets"))])
- (malyon . [(20161208 2125) ((cl-lib (0 5))) "mode to execute Z-code files version 3, 5, 8" single ((:commit . "0d9882650720b4a791556f5e2d917388965d6fc0") (:authors ("Peter Ilberg <peter.ilberg@gmail.com>, Christopher Madsen <cjm@cjmweb.net>, Erik Selberg" . "erik@selberg.org")) (:maintainers ("Christopher Madsen <cjm@cjmweb.net>, Erik Selberg" . "erik@selberg.org")) (:maintainer "Christopher Madsen <cjm@cjmweb.net>, Erik Selberg" . "erik@selberg.org") (:keywords "games" "emulations") (:url . "https://github.com/speedenator/malyon"))])
- (man-commands . [(20151221 2221) ((cl-lib (0 5))) "Add interactive commands for every manpages installed in your computer." single ((:commit . "f4ba0c3790855d7544dff92d470d212f24de1d9d") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainers ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com") (:url . "http://github.com/nflath/man-commands"))])
- (manage-minor-mode . [(20210108 1832) ((emacs (24 3))) "Manage your minor-modes easily" single ((:commit . "f4b37fffec7b6608a597e6a3f6900634802807b4") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com") (:keywords "tools" "minor-mode" "manage" "emacs") (:url . "https://github.com/ShingoFukuyama/manage-minor-mode"))])
- (manage-minor-mode-table . [(20220616 1932) ((emacs (25 1)) (manage-minor-mode (1 1))) "Manage minor-modes in table" single ((:commit . "e47d0e1856f0a9eb9935abdaf6e14e67ef2ab4cc") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "tools" "minor-mode" "manage") (:url . "https://github.com/jcs-elpa/manage-minor-mode-table"))])
- (mandm-theme . [(20220426 1131) nil "An M&M color theme." single ((:commit . "4991bbc4b17308f5dc53742dc528cbfdc467ee01") (:authors ("Christian Hopps" . "chopps@gmail.com")) (:maintainers ("Christian Hopps" . "chopps@gmail.com")) (:maintainer "Christian Hopps" . "chopps@gmail.com") (:url . "https://github.com/choppsv1/emacs-mandm-theme.git"))])
- (mandoku . [(20180403 1106) ((org (8)) (github-clone (20150705 1705))) "A tool to access repositories of premodern Chinese texts" tar ((:commit . "e3b7678762e9824861b1ce775a94b05b096164f5") (:authors ("Christian Wittern" . "cwittern@gmail.com")) (:maintainers ("Christian Wittern" . "cwittern@gmail.com")) (:maintainer "Christian Wittern" . "cwittern@gmail.com") (:keywords "convenience") (:url . "http://www.mandoku.org"))])
- (mandoku-tls . [(20171118 240) ((emacs (24 4)) (mandoku (20170301)) (github-clone (0 2)) (hydra (0 13 6)) (helm (1 7 0)) (org (9 0)) (helm-charinfo (20170601))) "A tool to access the TLS database" single ((:commit . "ffeebf5bd451ac1806ddfe1744fbbd036a56f902") (:authors ("Christian Wittern" . "cwittern@gmail.com")) (:maintainers ("Christian Wittern" . "cwittern@gmail.com")) (:maintainer "Christian Wittern" . "cwittern@gmail.com") (:keywords "convenience") (:url . "https://github.com/mandoku/mandoku-tls"))])
- (map-progress . [(20190128 16) ((cl-lib (0 6 1))) "mapping macros that report progress" single ((:commit . "1fb916159cd054c233ce3c80d9d01adfae640297") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/map-progress"))])
- (map-regexp . [(20190128 18) ((cl-lib (0 6 1))) "map over matches of a regular expression" single ((:commit . "ae2d1c22f786ad987aef3e319925e80160a887a0") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/map-regexp"))])
- (marcopolo . [(20160421 1004) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client to the Docker HUB/Registry API" tar ((:commit . "85db828f2bb4346a811b3326349b1c6d0aae4601") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "docker") (:url . "https://github.com/nlamirault/marcopolo"))])
- (marginalia . [(20230421 841) ((emacs (27 1)) (compat (29 1 4 0))) "Enrich existing commands with completion annotations" single ((:commit . "c21a8ea5da034e9f323b68f9d062d9374cd4ee7e") (:authors ("Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Omar Antolín Camarena <omar@matem.unam.mx>, Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "docs" "help" "matching" "completion") (:url . "https://github.com/minad/marginalia"))])
- (mark-multiple . [(20121118 1554) nil "Sorta lets you mark several regions at once." tar ((:commit . "f6a53c7c5283d640ae718f4548b0fda78877a375") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "marking" "library"))])
- (mark-thing-at . [(20201219 232) ((emacs (26)) (choice-program (0 13))) "Mark a pattern at the current point" single ((:commit . "a622d128afc8d2d67de897666a1e2eccba8d7818") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "mark" "point" "lisp") (:url . "https://github.com/plandes/mark-thing-at"))])
- (mark-tools . [(20130614 1025) nil "Some simple tools to access the mark-ring in Emacs" single ((:commit . "a11b61effa90bd0abc876d12573674d36fc17f0c") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainers ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/emacs-mark-tools"))])
- (markdown-changelog . [(20200120 2253) ((emacs (26)) (dash (2 13 0))) "Maintain changelog entries" single ((:commit . "1a2c3a4c3e4196f2b5dbb145b01b4bc435a93a96") (:authors ("Paul Landes")) (:maintainers ("Paul Landes")) (:maintainer "Paul Landes") (:keywords "markdown" "changelog" "files") (:url . "https://github.com/plandes/markdown-changelog"))])
- (markdown-mode . [(20230412 126) ((emacs (26 1))) "Major mode for Markdown-formatted text" single ((:commit . "5d98592fe516748034d8baf92d7c0ba045e1f87a") (:authors ("Jason R. Blevins" . "jblevins@xbeta.org")) (:maintainers ("Jason R. Blevins" . "jblevins@xbeta.org")) (:maintainer "Jason R. Blevins" . "jblevins@xbeta.org") (:keywords "markdown" "github flavored markdown" "itex") (:url . "https://jblevins.org/projects/markdown-mode/"))])
- (markdown-preview-eww . [(20160111 1502) ((emacs (24 4))) "Realtime preview by eww" single ((:commit . "5853f836425c877c8a956501f0adda137ef1d3b7") (:authors ("niku" . "niku@niku.name")) (:maintainers ("niku" . "niku@niku.name")) (:maintainer "niku" . "niku@niku.name") (:url . "https://github.com/niku/markdown-preview-eww"))])
- (markdown-preview-mode . [(20221006 1601) ((emacs (24 4)) (websocket (1 6)) (markdown-mode (2 0)) (cl-lib (0 5)) (web-server (0 1 1))) "markdown realtime preview minor mode." tar ((:commit . "85fbfec507a222326695a3b91ff7306d0c4f94c6") (:authors ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainers ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainer "Igor Shymko" . "igor.shimko@gmail.com") (:keywords "markdown" "gfm" "convenience") (:url . "https://github.com/ancane/markdown-preview-mode"))])
- (markdown-soma . [(20220802 956) ((emacs (25)) (s (1 11 0)) (dash (2 19 1)) (f (0 20 0))) "Live preview for Markdown" single ((:commit . "e604b9e4a65bbd2057befbfaebfa73d00bd9826a") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:keywords "wp" "docs" "text" "markdown") (:url . "https://github.com/jasonm23/markdown-soma"))])
- (markdown-toc . [(20210905 738) ((s (1 9 0)) (dash (2 11 0)) (markdown-mode (2 1))) "A simple TOC generator for markdown file" tar ((:commit . "4e8f97d7d94c53fd706da9e3d5006e1c9dff5ff8") (:authors (nil . "Antoine R. Dumont (@ardumont)")) (:maintainer nil . "Antoine R. Dumont (@ardumont)") (:keywords "markdown" "toc" "tools") (:url . "http://github.com/ardumont/markdown-toc"))])
- (markdownfmt . [(20160609 1241) ((emacs (24))) "Format markdown using markdownfmt" single ((:commit . "af83cd00fafcaa837ffdb50d1fa2b0ac952f16c0") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "markdown") (:url . "https://github.com/nlamirault/emacs-markdownfmt"))])
- (markless . [(20220702 1154) ((emacs (24 4))) "Major mode for Markless documents" single ((:commit . "9c846f58575a446812f7bade284021b625976757") (:authors ("Nicolas Hafner" . "shinmera@tymoon.eu")) (:maintainers ("Nicolas Hafner" . "shinmera@tymoon.eu")) (:maintainer "Nicolas Hafner" . "shinmera@tymoon.eu") (:keywords "languages" "wp") (:url . "http://github.com/shirakumo/markless.el/"))])
- (markup . [(20170420 1129) ((cl-lib (0 5))) "Simple markup generation helpers." single ((:commit . "876da2d3f23473475bb0fd0a1480ae11d2671291") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com") (:keywords "convenience" "markup" "html") (:url . "http://github.com/leoc/markup.el"))])
- (markup-faces . [(20141110 817) nil "collection of faces for markup language modes" single ((:commit . "98a807ed82473eb41c6a201ed7ef816d6bcd67b0") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainers ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainer "Florian Kaufmann" . "sensorflo@gmail.com") (:keywords "wp" "faces") (:url . "https://github.com/sensorflo/markup-faces"))])
- (marmalade-client . [(20141231 2007) ((web (0 5 2)) (kv (0 0 19)) (gh (0 8 0))) "client for marmalade API from emacs" tar ((:commit . "f315dea57e4fbebd9ee0668c0bafd4c45c7b754a") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp") (:url . "https://github.com/nicferrier/emacs-marmalade-upload"))])
- (marquee-header . [(20221230 1008) ((emacs (26 1))) "Code interface for displaying marquee in header" single ((:commit . "1fee5bbec486d0755954f5cafda67f342dc7daa1") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "wp" "animation" "marquee") (:url . "https://github.com/jcs-elpa/marquee-header"))])
- (marshal . [(20201223 1853) ((emacs (25 1)) (ht (2 0))) "eieio extension for automatic (un)marshalling" single ((:commit . "490496d974d03906f784707ecc2e0ac36ed84b96") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:keywords "extensions") (:url . "https://github.com/sigma/marshal.el"))])
- (maruo-macro-mode . [(20160616 1349) ((emacs (24 3))) "Major mode for editing Hidemaru/Maruo macro script" single ((:commit . "8fc9a38ad051eafa8eb94038711acc52c5d1d8d5") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "programming" "editor" "macro"))])
- (masm-mode . [(20200308 1450) ((emacs (25 1))) "MASM x86 and x64 assembly major mode" single ((:commit . "ab63524d195332ec9f703783704231606e69c292") (:authors ("YiGeeker" . "zyfchinese@yeah.net")) (:maintainers ("YiGeeker" . "zyfchinese@yeah.net")) (:maintainer "YiGeeker" . "zyfchinese@yeah.net") (:keywords "languages") (:url . "https://github.com/YiGeeker/masm-mode"))])
- (mastodon . [(20230502 952) ((emacs (27 1)) (request (0 3 0)) (persist (0 4)) (ts (0 3))) "Client for fediverse services that implement the Mastodon API" tar ((:commit . "d7e3ae509c77a1a168e4a811755444ae89f57466") (:authors ("Johnson Denen" . "johnson.denen@gmail.com") ("Marty Hiatt" . "martianhiatus@riseup.net")) (:maintainers ("Marty Hiatt" . "martianhiatus@riseup.net")) (:maintainer "Marty Hiatt" . "martianhiatus@riseup.net") (:url . "https://codeberg.org/martianh/mastodon.el"))])
- (material-theme . [(20210904 1226) ((emacs (24 1))) "A Theme based on the colors of the Google Material Design" tar ((:commit . "6823009bc92f82aa3a90e27e1009f7da8e87b648") (:authors ("Christoph Paulik" . "cpaulik@gmail.com")) (:maintainers ("Christoph Paulik" . "cpaulik@gmail.com")) (:maintainer "Christoph Paulik" . "cpaulik@gmail.com") (:keywords "themes") (:url . "http://github.com/cpaulik/emacs-material-theme"))])
- (math-preview . [(20230425 1820) ((emacs (26 1)) (json (1 4)) (dash (2 18 0)) (s (1 12 0))) "Preview TeX math equations inline" single ((:commit . "620de35fc8cf940eba5a567767eac2288708d8cb") (:authors ("Matsievskiy S.V.")) (:maintainers ("Matsievskiy S.V.")) (:maintainer "Matsievskiy S.V.") (:keywords "convenience") (:url . "https://gitlab.com/matsievskiysv/math-preview"))])
- (math-symbol-lists . [(20220828 2047) nil "Lists of Unicode math symbols and latex commands" tar ((:commit . "ac3eb053d3b576fcdd192b0ac6ad5090ea3a7079") (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:keywords "unicode" "symbols" "mathematics") (:url . "https://github.com/vspinu/math-symbol-lists"))])
- (math-symbols . [(20201005 2313) nil "Math Symbol Input methods and conversion tools" tar ((:commit . "091b81cb40ceaff97614999ffe85b572ace182f0") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "i18n" "languages" "tex") (:url . "https://github.com/kawabata/math-symbols"))])
- (math-tex-convert . [(20221210 1937) ((emacs (26 1)) (math-symbol-lists (1 3)) (auctex (12 1))) "Convert LaTeX macros to unicode and back" tar ((:commit . "8b174d05e8e5269322a1ee90f94cf1ed018d4976") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net") (:url . "https://github.com/enricoflor/math-tex-convert"))])
- (matlab-mode . [(20230426 2216) nil "Major mode for MATLAB(R) dot-m files" tar ((:commit . "3048e9fdf4d1fa0a4369ff85581e21750d37be16"))])
- (maude-mode . [(20230504 937) ((emacs (25))) "Emacs mode for the programming language Maude" single ((:commit . "2e1f68a890493d964f933d6e40b0ede047f70ede") (:authors ("Ellef Gjelstad <ellefg+maude*ifi.uio.no>")) (:maintainers ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at") (:keywords "languages" "maude") (:url . "https://github.com/rudi/abs-mode"))])
- (maven-test-mode . [(20141220 557) ((s (1 9)) (emacs (24))) "Utilities for navigating test files and running maven test tasks." single ((:commit . "a19151861df2ad8ae4880a2e7c86ddf848cb569a") (:authors ("Renan Ranelli")) (:maintainers ("Renan Ranelli")) (:maintainer "Renan Ranelli") (:keywords "java" "maven" "test") (:url . "http://github.com/rranelli/maven-test-mode"))])
- (maxframe . [(20170120 1705) nil "maximize the emacs frame based on display size" single ((:commit . "13bda6dd9f1d96aa4b9dd9957a26cefd399a7772") (:authors ("Ryan McGeary")) (:maintainers ("Ryan McGeary")) (:maintainer "Ryan McGeary") (:keywords "display" "frame" "window" "maximize"))])
- (maxima . [(20220531 1847) ((emacs (25 1)) (s (1 11 0)) (test-simple (1 3 0))) "Major mode for Maxima" tar ((:commit . "1334f44725bd80a265de858d652f3fde4ae401fa") (:authors ("William F. Schelter") ("Jay Belanger") ("Fermin Munoz")) (:maintainers ("Fermin Munoz" . "fmfs@posteo.net")) (:maintainer "Fermin Munoz" . "fmfs@posteo.net") (:keywords "maxima" "tools" "math") (:url . "https://gitlab.com/sasanidas/maxima"))])
- (mb-url . [(20221201 1855) ((emacs (25))) "Multiple Backends for Emacs URL package" tar ((:commit . "a6e5209a3569857836c5f6e58eb33ec98a9f6700") (:authors ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainers ("ZHANG Weiyi" . "dochang@gmail.com")) (:maintainer "ZHANG Weiyi" . "dochang@gmail.com") (:keywords "comm" "data" "processes" "hypermedia") (:url . "https://github.com/dochang/mb-url"))])
- (mbe . [(20151126 1134) ((emacs (24)) (cl-lib (0 5))) "Macros by Example" single ((:commit . "bb10aa8f26bb7e9b1d5746934c94edb00402940c") (:authors ("Ian Price" . "ianprice90@googlemail.com")) (:maintainers ("Ian Price" . "ianprice90@googlemail.com")) (:maintainer "Ian Price" . "ianprice90@googlemail.com") (:keywords "tools" "macros") (:url . "https://github.com/ijp/mbe.el"))])
- (mbo70s-theme . [(20170808 1315) ((emacs (24 0))) "70s style palette, with similarities to mbo theme" single ((:commit . "bed3db8965708ed4e9482b224a9b084765c052f2") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (mbsync . [(20200128 1053) nil "run mbsync to fetch mails" single ((:commit . "d3c81da81ce5b154c0d048047a47277338721a70") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:url . "https://github.com/dimitri/mbsync-el"))])
- (mc-calc . [(20200420 1836) ((emacs (24 4)) (multiple-cursors (1 2 1))) "Combine multiple-cursors and calc" single ((:commit . "74a046a5728919a4d1135ca62738326b0dde278c") (:authors (nil . "Frank Roland hatheroldev@fgmail.com>")) (:maintainers (nil . "Frank Roland hatheroldev@fgmail.com>")) (:maintainer nil . "Frank Roland hatheroldev@fgmail.com>") (:keywords "convenience") (:url . "https://github.com/hatheroldev/mc-calc"))])
- (mc-extras . [(20181109 1735) ((multiple-cursors (1 2 1))) "Extra functions for multiple-cursors mode." tar ((:commit . "053abc52181b8718559d7361a587bbb795faf164") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "editing" "cursors") (:url . "https://github.com/knu/mc-extras.el"))])
- (md-readme . [(20191112 1943) nil "Markdown-formatted READMEs for your ELisp" tar ((:commit . "ca99f44de11fab18d1f50d4b1722f2ceee3c814d") (:authors ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainers ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainer "Thomas Kappler" . "tkappler@gmail.com") (:keywords "lisp" "help" "readme" "markdown" "header" "documentation" "github") (:url . "http://github.com/thomas11/md-readme/tree/master"))])
- (md4rd . [(20220105 1558) ((emacs (25 1)) (hierarchy (0 7 0)) (request (0 3 0)) (cl-lib (0 6 1)) (dash (2 12 0)) (s (1 12 0)) (tree-mode (1 0 0))) "Mode for reddit (browse it)." single ((:commit . "6aa4fd6339d7fac78ce57e5d8821cd7009d21172") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "reddit" "browse" "news") (:url . "https://github.com/ahungry/md4rd"))])
- (media-thumbnail . [(20220827 2325) ((emacs (28 1))) "Utility package to provide media icons" single ((:commit . "14e626fe7ee714ab45c9e636d00a26e89aa2832a") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "files" "tools") (:url . "https://github.com/jojojames/media-thumbnail"))])
- (mediawiki . [(20220923 1336) nil "mediawiki frontend" single ((:commit . "c28cf78d4fe4969df3af8dcc2adaf71c4212e5ad") (:authors ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org") (:keywords "mediawiki" "wikipedia" "network" "wiki") (:url . "https://github.com/hexmode/mediawiki-el"))])
- (meghanada . [(20220101 505) ((emacs (24 3)) (yasnippet (0 6 1)) (company (0 9 0)) (flycheck (0 23))) "A better java development mode" tar ((:commit . "59c46cabb7eee715fe810ce59424934a1286df84") (:authors ("Yutaka Matsubara" . "yutaka.matsubara@gmail.com")) (:maintainers ("Yutaka Matsubara" . "yutaka.matsubara@gmail.com")) (:maintainer "Yutaka Matsubara" . "yutaka.matsubara@gmail.com") (:keywords "languages" "java") (:url . "https://github.com/mopemope/meghanada-emacs"))])
- (melancholy-theme . [(20230330 835) ((emacs (27 1))) "A dark theme that's pretty sad -*- lexical-binding: t; -" single ((:commit . "a5c4360f57793401b63b0df382e845b4845c8f97") (:authors ("@baaash" . "bleat@baaa.sh")) (:maintainers ("@baaash" . "bleat@baaa.sh")) (:maintainer "@baaash" . "bleat@baaa.sh") (:keywords "faces" "frames") (:url . "https://gitlab.com/baaash/melancholy-theme"))])
- (mellow-theme . [(20170808 1317) ((emacs (24 0))) "an Emacs 24 theme based on Mellow (tmTheme)" single ((:commit . "2bdf18f05f5212b6f269d9a94afe2cf201766891") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (melpa-upstream-visit . [(20130720 1033) ((s (1 6 0))) "A set of kludges to visit a melpa-hosted package's homepage" single ((:commit . "7310c74fdead3c0f86ad6eff76cf989e63f70f66") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainers ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com") (:keywords "convenience"))])
- (memento-mori . [(20190628 2147) ((emacs (24)) (cl-lib (0 5))) "Reminder of mortality" single ((:commit . "52f95bd4cf6617b60dc204c9bccb8d8fa17d4f9e") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "help") (:url . "https://github.com/lassik/emacs-memento-mori"))])
- (memoize . [(20200103 2036) nil "Memoization functions" single ((:commit . "51b075935ca7070f62fae1d69fe0ff7d8fa56fdd") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainers ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com") (:url . "https://github.com/skeeto/emacs-memoize"))])
- (memolist . [(20150804 1721) ((markdown-mode (22 0)) (ag (0 45))) "memolist.el is Emacs port of memolist.vim." single ((:commit . "60c296e202a71e9dcf1c3936d47b5c4b95c5839f") (:authors ("mikanfactory <k952i4j14x17_at_gmail.com>")) (:maintainers ("mikanfactory")) (:maintainer "mikanfactory") (:keywords "markdown" "memo") (:url . "http://github.com/mikanfactory/emacs-memolist"))])
- (mentor . [(20230103 1146) ((emacs (25 1)) (xml-rpc (1 6 15)) (seq (1 11)) (async (1 9 3)) (url-scgi (0 8))) "Frontend for the rTorrent bittorrent client" tar ((:commit . "f51dd4f3f87c54b7cc92189924b9d873a53f5a75") (:authors ("Stefan Kangas" . "stefankangas@gmail.com")) (:maintainers ("Stefan Kangas" . "stefankangas@gmail.com")) (:maintainer "Stefan Kangas" . "stefankangas@gmail.com") (:keywords "comm" "processes" "bittorrent") (:url . "https://github.com/skangas/mentor"))])
- (meow . [(20230505 2113) ((emacs (27 1))) "Yet Another modal editing" tar ((:commit . "07ccf112fc1a56ddd96cfc39967957be7dc8dd5f") (:authors ("Shi Tianshu")) (:maintainers ("Shi Tianshu")) (:maintainer "Shi Tianshu") (:keywords "convenience" "modal-editing") (:url . "https://www.github.com/DogLooksGood/meow"))])
- (merlin . [(20221222 1239) ((emacs (25 1))) "Mode for Merlin, an assistant for OCaml" tar ((:commit . "41cd949106fbf0769c97e3a56808e4d99fc42c6f") (:authors ("Frédéric Bour <frederic.bour(_)lakaban.net>")) (:maintainers ("Frédéric Bour <frederic.bour(_)lakaban.net>")) (:maintainer "Frédéric Bour <frederic.bour(_)lakaban.net>") (:keywords "ocaml" "languages") (:url . "https://github.com/ocaml/merlin"))])
- (merlin-ac . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (auto-complete (1 5))) "Merlin and auto-complete integration" single ((:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:authors ("Simon Castellan <simon.castellan(_)iuwt.fr>") ("Frédéric Bour <frederic.bour(_)lakaban.net>") ("Thomas Refis <thomas.refis(_)gmail.com>")) (:maintainers ("Simon Castellan <simon.castellan(_)iuwt.fr>")) (:maintainer "Simon Castellan <simon.castellan(_)iuwt.fr>") (:keywords "ocaml" "languages") (:url . "http://github.com/ocaml/merlin"))])
- (merlin-company . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (company (0 9))) "Merlin and company mode integration" single ((:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:authors ("Simon Castellan <simon.castellan(_)iuwt.fr>") ("Frédéric Bour <frederic.bour(_)lakaban.net>") ("Thomas Refis <thomas.refis(_)gmail.com>")) (:maintainers ("Simon Castellan <simon.castellan(_)iuwt.fr>")) (:maintainer "Simon Castellan <simon.castellan(_)iuwt.fr>") (:keywords "ocaml" "languages") (:url . "http://github.com/ocaml/merlin"))])
- (merlin-eldoc . [(20230213 555) ((emacs (24 4)) (merlin (3 0))) "eldoc for OCaml and Reason" single ((:commit . "bf8edc63d85b35e4def352fa7ce4ea39f43e1fd8") (:authors ("Louis Roché" . "louis@louisroche.net")) (:maintainers ("Louis Roché" . "louis@louisroche.net")) (:maintainer "Louis Roché" . "louis@louisroche.net") (:keywords "merlin" "ocaml" "languages" "eldoc") (:url . "https://github.com/khady/merlin-eldoc"))])
- (merlin-iedit . [(20221123 1408) ((emacs (25 1)) (merlin (3)) (iedit (0 9))) "Merlin and iedit integration" single ((:commit . "8bcab034a680f57ddf58092fda6288dc4caddd2a") (:authors ("Simon Castellan <simon.castellan(_)iuwt.fr>") ("Frédéric Bour <frederic.bour(_)lakaban.net>") ("Thomas Refis <thomas.refis(_)gmail.com>")) (:maintainers ("Simon Castellan <simon.castellan(_)iuwt.fr>")) (:maintainer "Simon Castellan <simon.castellan(_)iuwt.fr>") (:keywords "ocaml" "languages") (:url . "http://github.com/ocaml/merlin"))])
- (mermaid-mode . [(20230310 1618) ((f (0 20 0)) (emacs (25 3))) "major mode for working with mermaid graphs" single ((:commit . "e4e4bb8cca72e7eff322229719f028908b52ce3f") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "mermaid" "graphs" "tools" "processes") (:url . "https://github.com/abrochard/mermaid-mode"))])
- (meson-mode . [(20210820 905) ((emacs (26 1))) "Major mode for the Meson build system files" tar ((:commit . "1a2e2abb098c9288c2cdb3affbad76edd98abf59") (:authors ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainers ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainer "Michal Sojka" . "sojkam1@fel.cvut.cz") (:keywords "languages" "tools") (:url . "https://github.com/wentasah/meson-mode"))])
- (message-attachment-reminder . [(20230124 520) ((emacs (24 1))) "Remind if missing attachment" single ((:commit . "975381d6e7c6771c462e73abd3398a4ed2a9b86b") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainers ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/message-attachment-reminder"))])
- (message-view-patch . [(20210904 2227) ((emacs (24 4)) (magit (3 0 0))) "Colorize patch-like emails in mu4e" single ((:commit . "50dd3d92a1794f24b7e375b74e5199c63b54a2d8") (:authors ("Sean Farley")) (:maintainers ("Sean Farley")) (:maintainer "Sean Farley") (:keywords "extensions" "mu4e" "gnus") (:url . "https://github.com/seanfarley/message-view-patch"))])
- (messages-are-flowing . [(20191029 954) nil "visible indication when composing \"flowed\" emails" single ((:commit . "d582a564a63b7b90764ffc5c618bc5300225d0ab") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainers ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com") (:keywords "mail"))])
- (meta-presenter . [(20210714 1658) nil "A simple multi-file presentation tool for Emacs" single ((:commit . "4ab48dacea245b223a0ffd2723ece746bd61c0af") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:keywords "productivity" "presentation") (:url . "http://ismail.teamfluxion.com"))])
- (metal-archives . [(20210223 1638) ((emacs (26 3)) (alert (1 2)) (ht (2 3)) (request (0 2 2))) "List future releases using Metal-Archives API" single ((:commit . "a218d63b990365edeef6a2394f72d1f2286aeeae") (:authors ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainers ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainer "Sébastien Le Maguer" . "lemagues@tcd.ie") (:keywords "lisp" "calendar") (:url . "https://github.com/seblemaguer/metal-archives.el"))])
- (metal-archives-shopping-list . [(20201229 949) ((emacs (26 3)) (org-ml (5 5 2)) (alert (1 2)) (ht (2 3)) (metal-archives (0 1))) "Add shopping list generation support to metal-archives" single ((:commit . "a7602a32e7fd3c7779bc5b5c5e398ea31713ee45") (:authors ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainers ("Sébastien Le Maguer" . "lemagues@tcd.ie")) (:maintainer "Sébastien Le Maguer" . "lemagues@tcd.ie") (:keywords "org" "calendar") (:url . "https://github.com/seblemaguer/metal-archives.el"))])
- (metalheart-theme . [(20160710 641) ((emacs (24))) "Low-contrast theme with a dark blue-green background." single ((:commit . "ec98ea2c11dc1213dae8cbe1fe0cee73ca138bb2") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler"))])
- (metamorph . [(20220328 129) ((emacs (26 1))) "Transform your buffers with lisp" single ((:commit . "3633e32a9601c491df32d6c2212dbe63dc6484f4") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:keywords "metaprogramming" "wp") (:url . "http://github.com/AdamNiederer/metamorph"))])
- (metascript-mode . [(20150709 57) ((emacs (24 3))) "Major mode for the Metascript programming language" single ((:commit . "edb361c7b0e5de231e5334a17b90652fb1df78f9") (:keywords "languages" "metascript" "mjs") (:url . "http://github.com/metascript/metascript-mode"))])
- (metaweblog . [(20230501 234) ((emacs (27 1))) "An XML-RPC MetaWeblog and WordPress API client" single ((:commit . "814f8a7098508286195e3053bf24f6af928c7f0b") (:authors ("Puneeth Chaganti" . "punchagan+org2blog@gmail.com")) (:maintainers ("Grant Rettke" . "grant@wisdomandwonder.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com") (:keywords "comm") (:url . "https://github.com/org2blog/org2blog"))])
- (metrics-tracker . [(20221030 42) ((emacs (24 4)) (seq (2 3))) "Generate reports of personal metrics from diary entries" single ((:commit . "ace35dfb6d00749a24993f3fb8f838938826b45e") (:authors ("Ian Martins" . "ianxm@jhu.edu")) (:maintainers ("Ian Martins" . "ianxm@jhu.edu")) (:maintainer "Ian Martins" . "ianxm@jhu.edu") (:keywords "calendar") (:url . "https://github.com/ianxm/emacs-tracker"))])
- (metronome . [(20220210 147) ((emacs (25 1))) "A simple metronome" tar ((:commit . "1e1bd5234f3ecfb608041d423be7412c461ad3c2") (:authors ("Jonathan Gregory <jgrg at autistici dot org>")) (:maintainers ("Jonathan Gregory <jgrg at autistici dot org>")) (:maintainer "Jonathan Gregory <jgrg at autistici dot org>") (:url . "https://gitlab.com/jagrg/metronome"))])
- (mew . [(20230415 633) nil "Messaging in the Emacs World" tar ((:commit . "47886a3b6bc64e5822546318e5a3dd0ff5eeb967") (:authors ("Mew developing team")) (:maintainers ("Mew developing team")) (:maintainer "Mew developing team"))])
- (mexican-holidays . [(20210604 1421) nil "Mexico holidays for Emacs calendar." single ((:commit . "8e28907ea69f2c0ed9aad9f3b99664ca147379d0") (:authors ("Saúl Gutiérrez" . "me@sggc.me")) (:maintainers ("Saúl Gutiérrez" . "me@sggc.me")) (:maintainer "Saúl Gutiérrez" . "me@sggc.me") (:keywords "calendar") (:url . "https://github.com/sggutier/mexican-holidays"))])
- (meyvn . [(20221206 2219) ((emacs (25 1)) (cider (0 23)) (projectile (2 1)) (s (1 12)) (dash (2 17)) (parseedn (1 1 0)) (parseclj (1 1 0)) (geiser (0 12))) "Meyvn client" single ((:commit . "493e652b8fffcbed226f69a2ea82e6f9fc51ab08") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com") (:url . "https://github.com/danielsz/meyvn-el"))])
- (mgmtconfig-mode . [(20230420 2202) ((emacs (24 3))) "mgmt configuration management language" single ((:commit . "c5efe7a17b5b66a4bf2096b6213998287637c64a") (:authors ("Peter Oliver" . "mgmtconfig@mavit.org.uk")) (:maintainers ("Mgmt contributors <https://github.com/purpleidea/mgmt>")) (:maintainer "Mgmt contributors <https://github.com/purpleidea/mgmt>") (:keywords "languages") (:url . "https://github.com/purpleidea/mgmt/misc/emacs"))])
- (mhc . [(20201227 406) ((calfw (20150703))) "Message Harmonized Calendaring system." tar ((:commit . "1cd9cbc7f8cfe40833d1af726644ae45a3d07dc0") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net") (:keywords "calendar") (:url . "http://www.quickhack.net/mhc"))])
- (mic . [(20230123 944) ((emacs (26 1))) "Minimal and combinable configuration manager" tar ((:commit . "7d0a31ace0b801cb8b58a7bb61a981b67508208d") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "convenience") (:url . "https://github.com/ROCKTAKEY/mic"))])
- (mic-paren . [(20170731 1907) nil "advanced highlighting of matching parentheses" single ((:commit . "d0410c7d805c9aaf51a1bcefaaef092bed5824c4") (:authors ("Mikael Sjödin" . "mic@docs.uu.se") ("Klaus Berndl " . "berndl@sdm.de") ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("ttn")) (:maintainer "ttn") (:keywords "languages" "faces" "parenthesis" "matching"))])
- (micgoline . [(20160415 326) ((emacs (24 3)) (powerline (2 3))) "powerline mode, color schemes from microsoft and google's logo." single ((:commit . "e3e2effe4846175a3b52b4092c0c134ced5978d8") (:authors ("yzprofile" . "yzprofiles@gmail.com")) (:maintainers ("yzprofile" . "yzprofiles@gmail.com")) (:maintainer "yzprofile" . "yzprofiles@gmail.com") (:keywords "mode-line" "powerline" "theme") (:url . "https://github.com/yzprofile/micgoline"))])
- (migemo . [(20200913 12) ((cl-lib (0 5))) "Japanese incremental search through dynamic pattern expansion" single ((:commit . "f756cba3d5268968da361463c2e29b3a659a3de7") (:authors ("Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp")) (:maintainers ("Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp")) (:maintainer "Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp") (:url . "https://github.com/emacs-jp/migemo"))])
- (milkode . [(20140927 529) nil "Command line search and direct jump with Milkode" single ((:commit . "ba97e2aeefa1d9d0b3835bf08edd0de248b0c513") (:authors ("ongaeshi")) (:maintainers ("ongaeshi")) (:maintainer "ongaeshi") (:keywords "milkode" "search" "grep" "jump" "keyword"))])
- (mimetypes . [(20201115 1605) ((emacs (25 1))) "Guess a file's mimetype by extension" single ((:commit . "1663054ce266ed25e47ec707c19f619d33225903") (:authors ("Craig Niles <niles.c at gmail.com>")) (:maintainers ("Craig Niles <niles.c at gmail.com>")) (:maintainer "Craig Niles <niles.c at gmail.com>") (:url . "https://github.com/cniles/emacs-mimetypes"))])
- (mindre-theme . [(20220827 1031) ((emacs (26 1))) "Minimal, light theme" single ((:commit . "fc9ab1ba03494f2fb8cb8dc4e2ba5120ae35eb31") (:authors ("Erik Bäckman" . "contact@ebackman.net")) (:maintainers ("Erik Bäckman" . "contact@ebackman.net")) (:maintainer "Erik Bäckman" . "contact@ebackman.net") (:keywords "faces") (:url . "https://github.com/erikbackman/mindre-theme"))])
- (minesweeper . [(20200416 2342) nil "play minesweeper in Emacs" single ((:commit . "d4248e3c9b3e9e7277cb9e6d081330611898f334") (:authors ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainers ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainer "Zachary Kanfer" . "zkanfer@gmail.com") (:keywords "game" "fun" "minesweeper" "inane" "diversion") (:url . "https://hg.sr.ht/~zck/minesweeper"))])
- (mingus . [(20230206 618) ((libmpdee (2 2))) "MPD Interface" tar ((:commit . "f4d1df06f537ae88830a040eea5e23768a0ebd5b") (:authors ("Niels Giesen <pft on #emacs>")) (:maintainers ("Niels Giesen <pft on #emacs>")) (:maintainer "Niels Giesen <pft on #emacs>") (:keywords "multimedia" "elisp" "music" "mpd") (:url . "https://github.com/pft/mingus"))])
- (mini-frame . [(20220627 2041) ((emacs (26 1))) "Show minibuffer in child frame on read-from-minibuffer" single ((:commit . "60838f3cab438dcbda8eaa15ab3e5d1af88910e9") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:keywords "frames") (:url . "https://github.com/muffinmad/emacs-mini-frame"))])
- (mini-header-line . [(20170621 1221) ((emacs (24 4))) "a minimal header-line" single ((:commit . "73b6724e0a26c4528d93768191c8aa59e6bce2e5") (:authors ("Johannes Goslar")) (:maintainers ("Johannes Goslar")) (:maintainer "Johannes Goslar") (:keywords "header-line" "mode-line") (:url . "https://github.com/ksjogo/mini-header-line"))])
- (mini-modeline . [(20230306 1521) ((emacs (25 1)) (dash (2 12 0))) "Display modeline in minibuffer" single ((:commit . "86e753b6c38a06b0fc80d7560aa6a25245fd4d38") (:authors ("Kien Nguyen" . "kien.n.quang@gmail.com")) (:maintainers ("Kien Nguyen" . "kien.n.quang@gmail.com")) (:maintainer "Kien Nguyen" . "kien.n.quang@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/kiennq/emacs-mini-modeline"))])
- (minibuf-isearch . [(20151226 1943) nil "incremental search on minibuffer history" single ((:commit . "2846c6ac369ee623dad4cd3c8a7a6d9078965516") (:authors ("Keiichiro Nagano" . "knagano@sodan.org") ("Hideyuki SHIRAI " . "shirai@meadowy.org")) (:maintainers ("Keiichiro Nagano" . "knagano@sodan.org")) (:maintainer "Keiichiro Nagano" . "knagano@sodan.org") (:keywords "minibuffer" "history" "incremental search"))])
- (minibuffer-complete-cycle . [(20130813 1645) nil "Cycle through the *Completions* buffer" single ((:commit . "3df80135887d0169e02294a948711f6dfeca4a6f") (:authors ("Akinori MUSHA" . "knu@iDaemons.org") ("Kevin Rodgers" . "ihs_4664@yahoo.com")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "completion") (:url . "https://github.com/knu/minibuffer-complete-cycle"))])
- (minibuffer-cua . [(20130906 1134) nil "Make CUA mode's S-up/S-down work in minibuffer" single ((:commit . "adc4979a64f8b36e05960e9afa0746dfa9e2e4c7") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "completion" "editing") (:url . "https://github.com/knu/minibuffer-cua.el"))])
- (minibuffer-modifier-keys . [(20210823 713) ((emacs (24 3))) "Use spacebar as a modifier key in the minibuffer" single ((:commit . "944cdc01049f7e4b563675495f4d27cb018ca2f0") (:authors ("SpringHan")) (:maintainers ("SpringHan")) (:maintainer "SpringHan") (:keywords "tools") (:url . "https://github.com/SpringHan/minibuffer-modifier-keys.git"))])
- (miniedit . [(20100419 1745) nil "Enhanced editing for minibuffer fields." single ((:commit . "e12bf659c3eb92dd8a4cb77642dc0865c54667a3"))])
- (minimal-session-saver . [(20140508 2041) nil "Very lean session saver" single ((:commit . "ac42b6835f777a8a7e04599d8f20ec650997ba96") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "tools" "frames" "project") (:url . "http://github.com/rolandwalker/minimal-session-saver"))])
- (minimal-theme . [(20190113 2132) nil "A light/dark minimalistic Emacs 24 theme." tar ((:commit . "063b4d8ca33d55d04c341f0b2b777ec241a3e201") (:authors ("Anler Hp <anler86 [at] gmail.com>")) (:maintainers ("Anler Hp <anler86 [at] gmail.com>")) (:maintainer "Anler Hp <anler86 [at] gmail.com>") (:keywords "color" "theme" "minimal") (:url . "http://github.com/ikame/minimal-theme"))])
- (minions . [(20230425 1335) ((emacs (25 2)) (compat (29 1 3 4))) "A minor-mode menu for the mode line" single ((:commit . "d982380bb1d7f20228eeee59c692a1d100392b2a") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/minions"))])
- (minitest . [(20200506 308) ((dash (1 0 0))) "An Emacs mode for ruby minitest files" tar ((:commit . "ddd152c990a528ad09a696bfad23afa4330ea4d7") (:authors ("Arthur Neves")) (:maintainers ("Arthur Neves")) (:maintainer "Arthur Neves") (:url . "https://github.com/arthurnn/minitest-emacs"))])
- (minizinc-mode . [(20180201 1450) ((emacs (24 1))) "Major mode for MiniZinc code" single ((:commit . "2512521ba7f8e263a06db88df663fc6b3cca7e16") (:keywords "languages" "minizinc") (:url . "http://github.com/m00nlight/minizinc-mode"))])
- (minor-mode-hack . [(20170926 34) nil "Change priority of minor-mode keymaps" single ((:commit . "c3aa957602c924c01fe07d48d191b8616fb3696a") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "lisp") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/minor-mode-hack.el"))])
- (minsk-theme . [(20200306 1220) ((emacs (24))) "Minsk, a theme in deep muted greens" single ((:commit . "c924eb90fc2ef53d4c366b752ea8cb5c5b8f87ea") (:authors ("Jean Lo" . "jlpaca@users.noreply.github.com")) (:maintainers ("Jean Lo" . "jlpaca@users.noreply.github.com")) (:maintainer "Jean Lo" . "jlpaca@users.noreply.github.com") (:keywords "theme" "faces") (:url . "https://github.com/jlpaca/minsk-theme"))])
- (mint-mode . [(20221031 411) ((emacs (25 1))) "Major mode for the Mint programming language" tar ((:commit . "7bb0f9946f5833eada199e880fdc4efa6df09e0b") (:authors ("Diwank Tomer" . "singh@diwank.name")) (:maintainers ("jgart" . "jgart@dismail.de")) (:maintainer "jgart" . "jgart@dismail.de") (:keywords "mint" "languages" "processes" "convenience" "tools" "files") (:url . "https://github.com/creatorrr/emacs-mint-mode"))])
- (mip-mode . [(20151127 617) nil "virtual projects for emacs." single ((:commit . "7c88c383b4c7ed0a4c1dc397735f365c1fcb461c") (:authors ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainers ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainer "Eeli Reilin" . "gaudecker@fea.st") (:keywords "workspaces" "workspace" "project" "projects" "mip-mode"))])
- (mips-mode . [(20220608 1204) ((emacs (25 1))) "Major-mode for MIPS assembly" single ((:commit . "98795cdc81979821ac35d9f94ce354cd99780c67") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io") (:keywords "languages" "mips" "assembly") (:url . "https://github.com/hlissner/emacs-mips-mode"))])
- (mix . [(20210605 1015) ((emacs (25 1))) "Mix Major Mode. Build Elixir using Mix" single ((:commit . "3d5dbc0ef01c4f6b3732f067e9ebc2d7be74a49e") (:authors ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainers ("Ayrat Badykov" . "ayratin555@gmail.com")) (:maintainer "Ayrat Badykov" . "ayratin555@gmail.com") (:keywords "tools") (:url . "https://github.com/ayrat555/mix.el"))])
- (mixed-pitch . [(20210304 1900) ((emacs (24 3))) "Use a variable pitch, keeping fixed pitch where it's sensible" single ((:commit . "519e05f74825abf04b7d2e0e38ec040d013a125a") (:authors ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainers ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainer "J. Alexander Branham" . "branham@utexas.edu") (:url . "https://gitlab.com/jabranham/mixed-pitch"))])
- (mkdown . [(20140517 1418) ((markdown-mode (2 0))) "Pretty Markdown previews based on mkdown.com" tar ((:commit . "8e23de82719af6c5b53b52b3308a02b3a1fb872e") (:authors ("Andrew Tulloch")) (:maintainers ("Andrew Tulloch")) (:maintainer "Andrew Tulloch") (:keywords "markdown") (:url . "https://github.com/ajtulloch/mkdown.el"))])
- (mlscroll . [(20221204 1608) ((emacs (27 1))) "A scroll bar for the modeline" single ((:commit . "de9f84531ca4db6e54a2ca7201638decc0ccadd4") (:authors ("J.D. Smith")) (:maintainers ("J.D. Smith")) (:maintainer "J.D. Smith") (:keywords "convenience") (:url . "https://github.com/jdtsmith/mlscroll"))])
- (mmm-jinja2 . [(20170313 1420) ((mmm-mode (0 5 4))) "MMM submode class for Jinja2 Templates" single ((:commit . "c8cb763174fa2fb61b9a0e5e0ff8cb0210f8492f") (:authors ("Ben Hayden" . "hayden767@gmail.com")) (:maintainers ("Ben Hayden" . "hayden767@gmail.com")) (:maintainer "Ben Hayden" . "hayden767@gmail.com") (:url . "https://github.com/glynnforrest/mmm-jinja2"))])
- (mmm-mode . [(20221228 1931) ((emacs (25 1)) (cl-lib (0 2))) "Allow Multiple Major Modes in a buffer" tar ((:commit . "171bf6395b8a95a2d08d41fa38cc1799025d3916") (:authors ("Michael Abraham Shulman" . "viritrilbia@gmail.com")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:keywords "convenience" "faces" "languages" "tools") (:url . "https://github.com/purcell/mmm-mode"))])
- (mmt . [(20221004 1324) ((emacs (24 5)) (cl-lib (0 3))) "Missing macro tools for Emacs Lisp" single ((:commit . "2b4ef792dec725d287212e57de55702fa17f1496") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "macro" "emacs-lisp") (:url . "https://github.com/mrkkrp/mmt"))])
- (mo-git-blame . [(20160129 1759) nil "An interactive, iterative 'git blame' mode for Emacs" single ((:commit . "254a675eb794cdbbdef9fa2b4b7bb510b70089c0") (:authors ("Moritz Bunkus" . "moritz@bunkus.org")) (:maintainers ("Moritz Bunkus" . "moritz@bunkus.org")) (:maintainer "Moritz Bunkus" . "moritz@bunkus.org") (:keywords "tools"))])
- (mo-vi-ment-mode . [(20181217 206) nil "Provide vi-like cursor movement that's easy on the fingers" single ((:commit . "e8b525ffc5faa31d36ecc5496b40f0f5c3603c08") (:authors ("Ajay MT" . "ajay.tatachar@gmail.com")) (:maintainers ("Ajay MT" . "ajay.tatachar@gmail.com")) (:maintainer "Ajay MT" . "ajay.tatachar@gmail.com") (:keywords "convenience"))])
- (mobdebug-mode . [(20140110 346) ((lua-mode (20130419)) (emacs (24))) "Major mode for MobDebug" single ((:commit . "e1d483bc4e341c762bc5c0a8c52306a8d01ea0da") (:authors ("Shihpin Tseng" . "deftsp@gmail.com")) (:maintainers ("Shihpin Tseng" . "deftsp@gmail.com")) (:maintainer "Shihpin Tseng" . "deftsp@gmail.com") (:url . "https://github.com/deftsp/mobdebug-mode"))])
- (mocha . [(20200729 1130) ((js2-mode (20150909)) (f (0 18))) "Run Mocha or Jasmine tests" single ((:commit . "6a72fa20e7be6e55c09b1bc9887ee09c5df28e45") (:authors ("Al Scott")) (:maintainers ("Al Scott")) (:maintainer "Al Scott") (:keywords "javascript" "mocha" "jasmine") (:url . "http://github.com/scottaj/mocha.el"))])
- (mocha-snippets . [(20190417 1931) ((yasnippet (0 8 0))) "Yasnippets for the Mocha JS Testing Framework" tar ((:commit . "361a3809f755577406e109b9e44d473dfa7c08e0") (:authors ("Charles Lowell" . "cowboyd@frontside.io")) (:maintainers ("Charles Lowell" . "cowboyd@frontside.io")) (:maintainer "Charles Lowell" . "cowboyd@frontside.io") (:keywords "test" "javascript"))])
- (mocker . [(20220727 1452) ((emacs (25 1))) "mocking framework for emacs" single ((:commit . "4bd8d56eb4c3a1fcbbcdbf616f1b43e076b13eee") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:keywords "lisp" "testing"))])
- (modalka . [(20221004 1116) ((emacs (24 4))) "Modal editing your way" single ((:commit . "af2464bc74fe50c0b47de74671418834fe33b953") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "modal" "editing") (:url . "https://github.com/mrkkrp/modalka"))])
- (mode-icons . [(20200920 2031) ((emacs (24)) (cl-lib (0 5))) "Show icons for modes" tar ((:commit . "82cfba411c544c862a0854f682494a437642c957") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:keywords "multimedia") (:url . "http://ryuslash.org/projects/mode-icons.html"))])
- (mode-line-bell . [(20181029 516) nil "Flash the mode line instead of ringing the bell" single ((:commit . "4985ba42f5a19f46ddbf9b3622453a9694995ce5") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience"))])
- (mode-line-debug . [(20230212 2015) ((emacs (25 1)) (compat (29 1 3 4))) "Show status of debug-on-error in mode-line" single ((:commit . "d6148f6819e8500c907271ef82c4604ee416f941") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience" "lisp") (:url . "https://github.com/tarsius/mode-line-debug"))])
- (mode-line-idle . [(20230116 951) ((emacs (28 1))) "Evaluate mode line content when idle" single ((:commit . "be393eb5c60382ed297b59f69292917bfc9bf60f") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-mode-line-idle"))])
- (modelica-mode . [(20230506 1650) ((emacs (27 1))) "Major mode for editing Modelica files" single ((:commit . "19579142d8f3312aa4188a5a6156bbe89388b32f") (:keywords "languages" "continuous system modeling") (:url . "https://github.com/modelica-tools/modelica-mode"))])
- (modern-cpp-font-lock . [(20210405 1155) nil "Font-locking for \"Modern C++\"" single ((:commit . "43c6b68ff58fccdf9deef11674a172e4eaa8455c") (:authors ("Ludwig PACIFICI" . "ludwig@lud.cc")) (:maintainers ("Ludwig PACIFICI" . "ludwig@lud.cc")) (:maintainer "Ludwig PACIFICI" . "ludwig@lud.cc") (:keywords "languages" "c++" "cpp" "font-lock") (:url . "https://github.com/ludwigpacifici/modern-cpp-font-lock"))])
- (modern-fringes . [(20220401 202) nil "Replaces default fringe bitmaps with better looking ones" single ((:commit . "98473694a33922cfdddb18b4791028e4854b53b5") (:authors ("Quen Jankosky" . "quen.jankosky@gmail.com")) (:maintainers ("Quen Jankosky" . "quen.jankosky@gmail.com")) (:maintainer "Quen Jankosky" . "quen.jankosky@gmail.com") (:keywords "themes" "fringes" "convenience") (:url . "http://github.com/specialbomb/emacs-modern-fringes"))])
- (modern-sh . [(20211101 1001) ((emacs (25 1)) (hydra (0 15 0)) (eval-in-repl (0 9 7))) "Minor mode for editing shell script" single ((:commit . "8ebebe77304aa8170f7af809e7564c79d3bd45da") (:keywords "languages" "programming") (:url . "https://github.com/damon-kwok/modern-sh"))])
- (modtime-skip-mode . [(20140128 2201) nil "Minor mode for disabling modtime and supersession checks on files." single ((:commit . "c0e49523aa26b2263a8693691ac775988015f592") (:authors ("Jordon Biondo" . "biondoj@mail.gvsu.edu")) (:maintainers ("Jordon Biondo" . "biondoj@mail.gvsu.edu")) (:maintainer "Jordon Biondo" . "biondoj@mail.gvsu.edu") (:url . "http://www.github.com/jordonbiondo/modtime-skip-mode"))])
- (modular-config . [(20210726 1614) ((emacs (25 1))) "Organize your config into small and loadable modules" single ((:commit . "043907d96efff70dfaea1e721de90bd35970e8bd") (:authors ("Sidharth Arya" . "sidhartharya10@gmail.com")) (:maintainers ("Sidharth Arya" . "sidhartharya10@gmail.com")) (:maintainer "Sidharth Arya" . "sidhartharya10@gmail.com") (:keywords "startup" "lisp" "tools") (:url . "https://github.com/SidharthArya/modular-config.el"))])
- (modus-themes . [(20230507 443) ((emacs (27 1))) "Elegant, highly legible and customizable themes" tar ((:commit . "df7749bbedd2fcbc4f7119df3eb61c84f124f128") (:authors ("Protesilaos Stavrou" . "info@protesilaos.com")) (:maintainers ("Modus-Themes Development" . "~protesilaos/modus-themes@lists.sr.ht")) (:maintainer "Modus-Themes Development" . "~protesilaos/modus-themes@lists.sr.ht") (:keywords "faces" "theme" "accessibility") (:url . "https://git.sr.ht/~protesilaos/modus-themes"))])
- (moe-theme . [(20230110 422) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar ((:commit . "171d76b0c69e42a9d7b62c5c472944951cb2be6c") (:authors ("kuanyui" . "azazabc123@gmail.com")) (:maintainers ("kuanyui" . "azazabc123@gmail.com")) (:maintainer "kuanyui" . "azazabc123@gmail.com") (:keywords "themes") (:url . "https://github.com/kuanyui/moe-theme.el"))])
- (molar-mass . [(20220922 1752) ((emacs (24 3))) "Calculates molar mass of a molecule" single ((:commit . "c3b686c4b621b45fa4b17857b4934eb4487d74f5") (:authors ("Sergi Ruiz Trepat")) (:maintainers ("Sergi Ruiz Trepat")) (:maintainer "Sergi Ruiz Trepat") (:keywords "convenience" "chemistry") (:url . "https://github.com/sergiruiztrepat/molar-mass.el"))])
- (molecule . [(20180527 743) ((emacs (25 1))) "Simple wrapper for molecule" single ((:commit . "2ef72b81d9aa24ea782b71a061a3abdad6cae162") (:authors (": drymer <drymer [ AT ] autistici.org>")) (:maintainers (": drymer <drymer [ AT ] autistici.org>")) (:maintainer ": drymer <drymer [ AT ] autistici.org>") (:keywords ":" "languages" "terminals") (:url . "https://git.daemons.it/drymer/molecule.el"))])
- (molokai-theme . [(20220106 1520) nil "molokai theme with Emacs theme engine" single ((:commit . "cc53e997e7eff93b58ad16a376a292c1dd66044b") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/alloy-d/color-theme-molokai"))])
- (mongo . [(20150315 1219) nil "MongoDB driver for Emacs Lisp" tar ((:commit . "595529ddd70ecb9fab8b11daad2c3929941099d6") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com") (:keywords "convenience"))])
- (monitor . [(20161018 1144) ((dash (2 13 0))) "Utilities for monitoring expressions." tar ((:commit . "63f4643a0ee81616dbb692b8b03bae21df2283e2") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com") (:keywords "lisp" "monitor" "utility") (:url . "https://github.com/guiltydolphin/monitor"))])
- (monkeytype . [(20210110 513) ((emacs (25 1)) (scrollable-quick-peek (0 1 0))) "Mode for speed typing" single ((:commit . "0e949d08198c0bd003f1d5c8cdceb7e36bef22f7") (:authors ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainers ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainer "Pablo Barrantes" . "xjpablobrx@gmail.com") (:keywords "games") (:url . "https://github.com/jpablobr/emacs-monkeytype"))])
- (monky . [(20230222 2153) nil "Control Hg from Emacs." tar ((:commit . "7046eee5fc9ac625924382cb4a82b0d8efcd9ff0") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "tools") (:url . "http://github.com/ananthakumaran/monky"))])
- (mono-complete . [(20230405 529) ((emacs (28 1))) "Completion suggestions with multiple back-ends" tar ((:commit . "29436788b9ebe8a147b1deece6e86151528880f5") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-mono-complete"))])
- (monochrome-theme . [(20140326 1050) nil "A dark Emacs 24 theme for your focused hacking sessions" tar ((:commit . "9cf993670c9e8d198f41d840216e13280585b3e1") (:authors ("Xavier Noria" . "fxn@hashref.com")) (:maintainers ("Xavier Noria" . "fxn@hashref.com")) (:maintainer "Xavier Noria" . "fxn@hashref.com"))])
- (monokai-alt-theme . [(20170630 2048) ((emacs (24))) "Theme with a dark background. Based on sublime monokai theme." single ((:commit . "f342b6afc31f929be0626eca2d696ee9fab78011") (:authors ("Dmytro Koval")) (:maintainers ("Dmytro Koval")) (:maintainer "Dmytro Koval") (:url . "https://github.com/dawidof/emacs-monokai-theme"))])
- (monokai-pro-theme . [(20210206 1820) nil "A simple theme based on the Monokai Pro Sublime color schemes" tar ((:commit . "d0489741a80d818713c290a1a4bdd985877228bb") (:authors ("Kaleb Elwert" . "belak@coded.io")) (:maintainers ("Kaleb Elwert" . "belak@coded.io")) (:maintainer "Kaleb Elwert" . "belak@coded.io") (:url . "https://github.com/belak/emacs-monokai-pro-theme"))])
- (monokai-theme . [(20220117 1244) nil "A fruity color theme for Emacs." single ((:commit . "4a09c59f948ba5b602b6f395e667f53224fd75a2") (:authors ("Kelvin Smith" . "oneKelvinSmith@gmail.com")) (:maintainers ("Kelvin Smith" . "oneKelvinSmith@gmail.com")) (:maintainer "Kelvin Smith" . "oneKelvinSmith@gmail.com") (:url . "http://github.com/oneKelvinSmith/monokai-emacs"))])
- (monotropic-theme . [(20211116 1328) ((emacs (24))) "Monotropic Theme" single ((:commit . "f32a04b5bfee9cbcce4b223f17228d1142a28211") (:authors ("caffo")) (:maintainers ("caffo")) (:maintainer "caffo") (:url . "https://github.com/caffo/monotropic-theme"))])
- (monroe . [(20220915 1647) nil "Yet another client for nREPL" single ((:commit . "8f809e4aa0a35ec2d1c880aacf59e6bc317a566f") (:authors ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainers ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainer "Sanel Zukan" . "sanelz@gmail.com") (:keywords "languages" "clojure" "nrepl" "lisp") (:url . "http://www.github.com/sanel/monroe"))])
- (mood-line . [(20230126 917) ((emacs (25 1))) "A minimal mode line inspired by doom-modeline" tar ((:commit . "58e85c815092ac93d02dab584fe537fd1be3828a") (:authors ("Jessie Hildebrandt <jessieh.net>")) (:maintainers ("Jessie Hildebrandt <jessieh.net>")) (:maintainer "Jessie Hildebrandt <jessieh.net>") (:keywords "mode-line" "faces") (:url . "https://gitlab.com/jessieh/mood-line"))])
- (mood-one-theme . [(20221222 1214) ((emacs (27 1))) "A dark color scheme inspired by the Doom One theme" single ((:commit . "dfbc81900737d3382a340feeed24d2bcd9bdedb0") (:authors ("Jessie Hildebrandt <jessieh.net>")) (:maintainers ("Jessie Hildebrandt <jessieh.net>")) (:maintainer "Jessie Hildebrandt <jessieh.net>") (:keywords "mode-line" "faces") (:url . "https://gitlab.com/jessieh/mood-one-theme"))])
- (moody . [(20230212 2015) ((emacs (25 3)) (compat (29 1 3 4))) "Tabs and ribbons for the mode line" single ((:commit . "4c7171cbe39adcf2ab1ae5290bdb0ecfd7d669d1") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "faces") (:url . "https://github.com/tarsius/moody"))])
- (moom . [(20230401 1025) ((emacs (25 1))) "Commands to control frame position and size" tar ((:commit . "c7f319c29e5740b03910e75e89bfb2379d4ed680") (:authors ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainers ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainer "Takaaki ISHIKAWA <takaxp at ieee dot org>") (:keywords "frames" "faces" "convenience") (:url . "https://github.com/takaxp/Moom"))])
- (moonscript . [(20170831 2226) ((cl-lib (0 5)) (emacs (24))) "Major mode for editing MoonScript code" tar ((:commit . "56f90471e2ced2b0a177aed4d8c2f854797e9cc7") (:authors ("@GriffinSchneider, @k2052, @EmacsFodder")) (:maintainers ("@GriffinSchneider, @k2052, @EmacsFodder")) (:maintainer "@GriffinSchneider, @k2052, @EmacsFodder"))])
- (moonshot . [(20210627 2244) ((emacs (25 1)) (cl-lib (0 5)) (f (0 18)) (s (1 11 0)) (projectile (2 0 0)) (counsel (0 11 0)) (realgud (1 5 1)) (seq (2 20)) (levenshtein (1 0))) "Run executable file, debug and build commands on project" single ((:commit . "ec37a12825888047a90d9ee8131aa4bea348edf7") (:authors ("Jong-Hyouk Yun" . "ageldama@gmail.com")) (:maintainers ("Jong-Hyouk Yun" . "ageldama@gmail.com")) (:maintainer "Jong-Hyouk Yun" . "ageldama@gmail.com") (:keywords "convenience" "files" "processes" "tools" "unix") (:url . "https://github.com/ageldama/moonshot"))])
- (morganey-mode . [(20170118 934) ((emacs (24 4))) "Major mode for editing Morganey files" single ((:commit . "7e33f1be486f58dfcf02adcbf82ccac47f69bd9b") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "https://github.com/morganey-lang/morganey-mode"))])
- (morgentau-theme . [(20220319 1049) ((emacs (24))) "Tango-based custom theme" single ((:commit . "a8da5640b4a9b72a3136901d0a1a03071d9fcb00") (:authors ("Benjamin Vincent Schulenburg")) (:maintainers ("Benjamin Vincent Schulenburg")) (:maintainer "Benjamin Vincent Schulenburg") (:keywords "theme" "dark" "faces") (:url . "https://github.com/Melchizedek6809/morgentau-theme"))])
- (morlock . [(20230212 2015) ((emacs (25 1)) (compat (29 1 3 4))) "More font-lock keywords for elisp" single ((:commit . "674354d41bd2bccf0590467851796db6d4595873") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/tarsius/morlock"))])
- (morrowind-theme . [(20230311 1919) ((emacs (24 1))) "Theme" single ((:commit . "5253d03e4aba8fe4f9d30c1483c2189616ce8990") (:authors ("Samuel Banya")) (:maintainers ("Samuel Banya")) (:maintainer "Samuel Banya") (:url . "https://github.com/samuelbanya/morrowind-theme"))])
- (mos-mode . [(20221209 1353) ((emacs (24 4)) (lsp-mode (8 0 0)) (dap-mode (0 7)) (dash (2 19 1)) (ht (2 3))) "MOS toolkit usage" single ((:commit . "770f49417e8ad7dbf382c8691f6f689d793b9314") (:url . "https://github.com/themkat/mos-mode"))])
- (mosey . [(20180614 1649) ((emacs (24 4))) "Mosey around your buffers" single ((:commit . "2e3ac9d334fa2937ed5267193dfd25d8e1f14dc2") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "http://github.com/alphapapa/mosey.el"))])
- (most-used-words . [(20200808 1353) ((emacs (24 3))) "Display most used words in buffer" single ((:commit . "90c09da92b30c6497e9141f0edfe7842440c4d53") (:authors ("Udyant Wig" . "udyant.wig@gmail.com")) (:maintainers ("Udyant Wig" . "udyant.wig@gmail.com")) (:maintainer "Udyant Wig" . "udyant.wig@gmail.com") (:keywords "convenience" "wp") (:url . "https://github.com/udyantw/most-used-words"))])
- (mote-mode . [(20160123 29) ((ruby-mode (1 1))) "Mote minor mode" single ((:commit . "666c6641addbd3b337a7aa01fd2742ded2f41b83") (:authors ("Leandro López (inkel)" . "inkel.ar@gmail.com")) (:maintainers ("Leandro López (inkel)" . "inkel.ar@gmail.com")) (:maintainer "Leandro López (inkel)" . "inkel.ar@gmail.com") (:url . "http://inkel.github.com/mote-mode/"))])
- (motion-mode . [(20140920 156) ((flymake-easy (0 7)) (flymake-cursor (1 0 2))) "major mode for RubyMotion enviroment" tar ((:commit . "4c94180e3ecea611a61240a0c0cd48f1032c4a55") (:authors ("Satoshi Namai")) (:maintainers ("Satoshi Namai")) (:maintainer "Satoshi Namai") (:url . "https://github.com/ainame/motion-mode"))])
- (move-dup . [(20210127 1938) ((emacs (25 1))) "Eclipse-like moving and duplicating lines or rectangles" single ((:commit . "bf2e578b89d7e7bf0b5500d9afcf49ac6ec2dcd1") (:authors ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com") (:keywords "convenience" "text" "edit") (:url . "https://github.com/wyuenho/move-dup"))])
- (move-mode . [(20221205 1433) ((emacs (25 1))) "A major-mode for editing Move language" single ((:commit . "fa34fbe977d62c8297abc3547b9cfb25802e033c") (:authors ("Ashok Menon")) (:maintainers ("Ashok Menon")) (:maintainer "Ashok Menon") (:keywords "languages") (:url . "https://github.com/amnn/move-mode"))])
- (move-text . [(20221006 1634) nil "Move current line or region with M-up or M-down." single ((:commit . "b17f0f4cbe9d8a72e6d9765daf2e6cdc12b3f4ba") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:keywords "edit") (:url . "https://github.com/emacsfodder/move-text"))])
- (mowedline . [(20171218 237) nil "elisp utilities for using mowedline" single ((:commit . "c17501b48ded8261d815ab60bf14cddf7040be72") (:authors ("John Foerch" . "jjfoerch@earthlink.net")) (:maintainers ("John Foerch" . "jjfoerch@earthlink.net")) (:maintainer "John Foerch" . "jjfoerch@earthlink.net"))])
- (mozc . [(20221214 1435) nil "minor mode to input Japanese with Mozc" single ((:commit . "cebb883f5d7d8d6dec05c6e2ed4096d0e8ff8c9f") (:keywords "mule" "multilingual" "input method"))])
- (mozc-cand-posframe . [(20200208 750) ((emacs (26 1)) (posframe (0 5 0)) (mozc (20180101 800)) (s (1 12))) "Posframe frontend for mozc.el" single ((:commit . "1d07d5055381008ccbb29b97315d140e09a7ee95") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "i18n" "tooltip") (:url . "https://github.com/akirak/mozc-posframe"))])
- (mozc-im . [(20160412 22) ((mozc (0))) "Mozc with input-method-function interface." single ((:commit . "df614a1076c28a11551fb3e822868bae47e855a5") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainers ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com") (:keywords "i18n" "extentions"))])
- (mozc-popup . [(20150224 34) ((popup (0 5 2)) (mozc (0))) "Mozc with popup" single ((:commit . "f0684b875a7427ec08f8df13939a486e5d5cf420") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainers ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com") (:keywords "i18n" "extentions"))])
- (mozc-temp . [(20160228 840) ((emacs (24)) (dash (2 10 0)) (mozc (0))) "Use mozc temporarily" single ((:commit . "7f5dd5fc8ceeca9b1822f7e056a4be67e2e74959") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainers ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/mozc-temp"))])
- (mpages . [(20150710 1404) nil "An Emacs buffer for quickly writing your Morning Pages" single ((:commit . "39a72a0931ab1cdbfdf0ab9f412dc12d43a3829f") (:authors ("Sean Levin")) (:maintainers ("Sean Levin")) (:maintainer "Sean Levin") (:url . "https://github.com/slevin/mpages"))])
- (mpdel . [(20230103 1924) ((emacs (25 1)) (libmpdel (1 2 0)) (navigel (0 7 0))) "Play and control your MPD music" tar ((:commit . "365b2661e56165c53eadd28d3e0a5f9d594412c7") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "multimedia") (:url . "https://github.com/mpdel/mpdel"))])
- (mpdel-embark . [(20230103 2021) ((emacs (26 1)) (mpdel (2 0 0)) (libmpdel (2 0 0)) (embark (0 19))) "Integrate MPDel with Embark" single ((:commit . "31d91a62b680fb4472ec34c04ac6af80bb3cf4b8") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "multimedia") (:url . "https://github.com/mpdel/mpdel-embark"))])
- (mpdmacs . [(20210904 2048) ((emacs (25 1)) (elmpd (0 1))) "A lightweight MPD client" single ((:commit . "66031a8993a2a704bdfaa9c63ec590dd0c5a2eea") (:authors ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainers ("Michael Herstine" . "sp1ff@pobox.com")) (:maintainer "Michael Herstine" . "sp1ff@pobox.com") (:keywords "comm") (:url . "https://github.com/sp1ff/mpdmacs"))])
- (mpmc-queue . [(20180303 2029) ((emacs (26 0)) (queue (0 2 0))) "a multiple-producer-multiple-consumer queue" single ((:commit . "df07d6bef7468edb1d73ef73b8331b94d0e5d0ca") (:authors ("Sho Mizoe" . "sho.mizoe@gmail.com")) (:maintainers ("Sho Mizoe" . "sho.mizoe@gmail.com")) (:maintainer "Sho Mizoe" . "sho.mizoe@gmail.com") (:keywords "lisp" "async") (:url . "https://github.com/smizoe/mpmc-queue"))])
- (mpv . [(20220801 1917) ((emacs (25 1))) "control mpv for easy note-taking" single ((:commit . "2e0234bc21a3dcdf12d94d3285475e7f6769d3e8") (:authors ("Johann Klähn" . "johann@jklaehn.de")) (:maintainers ("Johann Klähn" . "johann@jklaehn.de")) (:maintainer "Johann Klähn" . "johann@jklaehn.de") (:keywords "tools" "multimedia") (:url . "https://github.com/kljohann/mpv.el"))])
- (mqr . [(20180527 1204) ((emacs (24 4))) "Multi-dimensional query and replace" single ((:commit . "4ade19d4620b8b61340290bf63fa56d5e493859f") (:authors ("Tino Calancha" . "tino.calancha@gmail.com")) (:maintainers ("Tino Calancha" . "tino.calancha@gmail.com")) (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") (:keywords "convenience" "extensions" "lisp") (:url . "https://github.com/calancha/multi-replace"))])
- (mqtt-mode . [(20180611 1735) ((emacs (25)) (dash (2 12 0))) "client for interaction with MQTT servers" single ((:commit . "613e70e9b9940e635e779994b5c83f86eb62c8e6") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainers ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch") (:keywords "tools") (:url . "https://github.com/andrmuel/mqtt-mode"))])
- (msgpack . [(20200323 515) ((emacs (25 1))) "Read and write MessagePack object" single ((:commit . "e2a0d76d1087bc8178c9f27222cb9b93e2e815ec") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "lisp") (:url . "https://github.com/xuchunyang/msgpack.el"))])
- (msvc . [(20221015 1610) ((emacs (24)) (cl-lib (0 5)) (cedet (1 0)) (ac-clang (2 0 0))) "Microsoft Visual C/C++ mode" tar ((:commit . "1bf173b5da3fbf2bdb799116e2a1f31916c1e16e") (:authors ("yaruopooner [https://github.com/yaruopooner]")) (:maintainers ("yaruopooner [https://github.com/yaruopooner]")) (:maintainer "yaruopooner [https://github.com/yaruopooner]") (:keywords "languages" "completion" "syntax check" "mode" "intellisense") (:url . "https://github.com/yaruopooner/msvc"))])
- (mtg-deck-mode . [(20180613 2010) ((emacs (25 1))) "Major mode to edit MTG decks" tar ((:commit . "8265b8ed17fcd4406760c19aa6ee9c76068b1ab0") (:authors ("Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com")) (:maintainers ("Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com")) (:maintainer "Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com") (:keywords "data" "mtg" "magic") (:url . "https://github.com/mattiasb/mtg-deck-mode"))])
- (mu-cite . [(20190803 439) ((flim (1 14 9))) "A library to provide MIME features." tar ((:commit . "b2c83bbce4646d100b942f0f0de0877a8d47298c") (:authors ("MORIOKA Tomohiko" . "tomo@m17n.org") ("Shuhei KOBAYASHI" . "shuhei@aqua.ocn.ne.jp")) (:maintainer "Katsumi Yamaoka" . "yamaoka@jpl.org") (:keywords "mail" "news" "citation"))])
- (mu2tex . [(20200512 704) nil "Convert plain text molecule names and units to TeX" single ((:commit . "4b84cdac955cb36a8c44a2be48f3310252e3d3ad") (:authors ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainers ("Carsten Dominik" . "carsten.dominik@gmail.com")) (:maintainer "Carsten Dominik" . "carsten.dominik@gmail.com") (:keywords "tex") (:url . "https://github.com/cdominik/mu2tex"))])
- (mu4e-alert . [(20220615 1948) ((alert (1 2)) (s (1 10 0)) (ht (2 0)) (emacs (24 4))) "Desktop notification for mu4e" single ((:commit . "3c9af8c7994df0a1a4f0703552ea3beffb485ace") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainers ("Mikhail Rudenko" . "mike.rudenko@gmail.com")) (:maintainer "Mikhail Rudenko" . "mike.rudenko@gmail.com") (:keywords "mail" "convenience") (:url . "https://github.com/iqbalansari/mu4e-alert"))])
- (mu4e-column-faces . [(20221213 2206) ((emacs (25 3))) "Faces for individual mu4e columns" single ((:commit . "1bbb646ea07deb1bd2daa4c6eb36e0f65aac40b0") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/mu4e-column-faces"))])
- (mu4e-conversation . [(20190609 812) ((emacs (25 1))) "Show a complete thread in a single buffer" single ((:commit . "98110bb9c300fc9866dee8e0023355f9f79c9b96") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainers ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:keywords "mail" "convenience" "mu4e") (:url . "https://gitlab.com/Ambrevar/mu4e-conversation"))])
- (mu4e-jump-to-list . [(20221202 1023) ((emacs (24 4)) (cl-lib (0 5))) "mu4e jump-to-list extension" single ((:commit . "cf19684d2333cb0cda7f6b62c7607144baa49310") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:keywords "mu4e" "mail" "convenience") (:url . "https://gitlab.com/wavexx/mu4e-jump-to-list.el"))])
- (mu4e-maildirs-extension . [(20220517 1852) ((dash (0 0 0))) "Show mu4e maildirs summary in mu4e-main-view" single ((:commit . "cdc2e141d8ecd59508a5cd50d6d02120073bf4f1") (:authors ("Andreu Gil Pàmies" . "agpchil@gmail.com")) (:maintainers ("Andreu Gil Pàmies" . "agpchil@gmail.com")) (:maintainer "Andreu Gil Pàmies" . "agpchil@gmail.com") (:url . "http://github.com/agpchil/mu4e-maildirs-extension"))])
- (mu4e-marker-icons . [(20230423 1039) ((emacs (26 1)) (nerd-icons (0 0 1))) "Display icons for mu4e markers" single ((:commit . "09fe0ca72b5c000d45a875c7cfa58016f740c1ae") (:keywords "mail") (:url . "https://repo.or.cz/mu4e-marker-icons.git"))])
- (mu4e-overview . [(20221107 833) ((emacs (26))) "Show overview of maildir" single ((:commit . "21d4fbf44f67b786a61072afd20065a56b3952a1") (:authors ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainers ("Michał Krzywkowski" . "k.michal@zoho.com")) (:maintainer "Michał Krzywkowski" . "k.michal@zoho.com") (:keywords "mail" "tools") (:url . "https://github.com/mkcms/mu4e-overview"))])
- (mu4e-query-fragments . [(20211030 2307) ((emacs (24 4))) "mu4e query fragments extension" single ((:commit . "8d93ede3772353e2dbc307de03e06e37ea6a0b6c") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:keywords "mu4e" "mail" "convenience") (:url . "https://gitlab.com/wavexx/mu4e-query-fragments.el"))])
- (mu4e-views . [(20230105 1443) ((emacs (26 1)) (xwidgets-reuse (0 2)) (ht (2 2)) (esxml (20210323 1102))) "View emails in mu4e using xwidget-webkit" single ((:commit . "ba223d69fa9edf7b039bd728f4630c64b08c39ff") (:authors ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainers ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainer "Boris Glavic" . "lordpretzel@gmail.com") (:keywords "mail") (:url . "https://github.com/lordpretzel/mu4e-views"))])
- (mu4easy . [(20230207 2042) ((emacs (25 1)) (mu4e-column-faces (1 2 1)) (mu4e-alert (1 0)) (helm-mu (1 0 0)) (org-msg (4 0))) "Packages + configs for using mu4e with multiple accounts" single ((:commit . "34565ddb9fc74675b28ce19694485cf2e91eba20") (:authors ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainers ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainer "Daniel Fleischer" . "danflscr@gmail.com") (:keywords "mail") (:url . "https://github.com/danielfleischer/mu4easy"))])
- (muban . [(20180415 1219) ((emacs (25))) "Lightweight template expansion tool" single ((:commit . "c134c46e60be1fb3e9a08dba3d07346855e0fcc2") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainers ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com") (:keywords "abbrev" "tools") (:url . "https://github.com/jiahaowork/muban.el"))])
- (mugur . [(20210719 722) ((emacs (26 1)) (s (1 12 0)) (anaphora (1 0 4)) (dash (2 18 1)) (cl-lib (1 0))) "Configurator for QMK compatible keyboards" single ((:commit . "63a0377ac1ad48171621c9f0c719b62ec9395d35") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm") (:keywords "multimedia") (:url . "https://github.com/mihaiolteanu/mugur"))])
- (multi . [(20131013 1544) ((emacs (24))) "Clojure-style multi-methods for emacs lisp" single ((:commit . "884203b11fdac8374ec644cca975469aab263404") (:authors ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainers ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainer "Christina Whyte" . "kurisu.whyte@gmail.com") (:keywords "multimethod" "generic" "predicate" "dispatch") (:url . "http://github.com/kurisuwhyte/emacs-multi"))])
- (multi-compile . [(20211113 2119) ((emacs (24 4)) (dash (2 12 1))) "Multi target interface to compile." single ((:commit . "360e44b200d07da379c906856d37613d0f06a9ae") (:authors ("Kvashnin Vladimir" . "reangd@gmail.com")) (:maintainers ("Kvashnin Vladimir" . "reangd@gmail.com")) (:maintainer "Kvashnin Vladimir" . "reangd@gmail.com") (:keywords "tools" "compile" "build") (:url . "https://github.com/ReanGD/emacs-multi-compile"))])
- (multi-line . [(20220112 1744) ((emacs (24 3)) (s (1 9 0)) (cl-lib (0 5)) (dash (2 12 0)) (shut-up (0 3 2))) "multi-line statements" tar ((:commit . "625c608443f98bb34b4d5600d52c198509fb64d0") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "multi" "line" "length" "whitespace" "programming" "tools" "convenience" "files") (:url . "https://github.com/IvanMalison/multi-line"))])
- (multi-project . [(20220703 2154) ((emacs (25))) "Find files, compile, and search for multiple projects." single ((:commit . "43a30f9578dc2f5acd4fc2941bedaa031b942b81") (:authors ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainers ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainer "Shawn Ellis" . "shawn.ellis17@gmail.com") (:keywords "convenience" "project" "management") (:url . "https://hg.osdn.net/view/multi-project/multi-project"))])
- (multi-run . [(20210108 336) ((emacs (24)) (window-layout (1 4))) "Efficiently manage multiple remote nodes" tar ((:commit . "13d4d923535b5e8482b13ff76185203075fb26a3") (:authors ("Sagar Jha")) (:maintainers ("Sagar Jha")) (:maintainer "Sagar Jha") (:keywords "multiple shells" "multi-run" "remote nodes") (:url . "https://www.github.com/sagarjha/multi-run"))])
- (multi-term . [(20200514 428) nil "Managing multiple terminal buffers in Emacs." single ((:commit . "017c77c550115936860e2ea71b88e585371475d5") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainers ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainer "Andy Stewart" . "lazycat.manatee@gmail.com") (:keywords "term" "terminal" "multiple buffer") (:url . "http://www.emacswiki.org/emacs/download/multi-term.el"))])
- (multi-vterm . [(20221031 610) ((emacs (26 3)) (vterm (0 0)) (project (0 3 0))) "Like multi-term.el but for vterm" single ((:commit . "36746d85870dac5aaee6b9af4aa1c3c0ef21a905") (:keywords "terminals" "processes") (:url . "https://github.com/suonlight/multi-libvterm"))])
- (multi-web-mode . [(20130824 354) nil "multiple major mode support for web editing" tar ((:commit . "ad1c8d1c870334052d244c7ae3636cb7b9357b7c") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainers ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainer "Fabián E. Gallina" . "fabian@anue.biz") (:keywords "convenience" "languages" "wp") (:url . "https://github.com/fgallina/multi-web-mode"))])
- (multicolumn . [(20150202 2251) nil "Creating and managing multiple side-by-side windows." single ((:commit . "c7a3afecd470859b2e60aa7c554d6e4d436df7fa") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/multicolumn"))])
- (multifiles . [(20130615 2133) nil "View and edit parts of multiple files in one buffer" single ((:commit . "dddfe64b8e1c1cd1f9ccc1f03405477fc0d53897") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "multiple" "files"))])
- (multiple-cursors . [(20230309 1204) ((cl-lib (0 5))) "Multiple cursors for Emacs." tar ((:commit . "6956e8e12ee191d7c80d042ae8ff495286fcbe38") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "editing" "cursors") (:url . "https://github.com/magnars/multiple-cursors.el"))])
- (multistate . [(20210124 2014) ((emacs (25 1)) (ht (2 3))) "Multistate mode" single ((:commit . "a7ab9dc7aac0b6d6d2f872de4e0d1b8550834a9b") (:authors ("Matsievskiy S.V.")) (:maintainers ("Matsievskiy S.V.")) (:maintainer "Matsievskiy S.V.") (:keywords "convenience") (:url . "https://gitlab.com/matsievskiysv/multistate"))])
- (multitran . [(20220903 510) ((emacs (24)) (cl-lib (0 5))) "Interface to multitran" single ((:commit . "6244e227bcf57eed391eecb34bae445f9c17e809") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainers ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru") (:keywords "dictionary" "hypermedia"))])
- (mustache . [(20210224 710) ((ht (0 9)) (s (1 3 0)) (dash (1 2 0))) "Mustache templating library in emacs lisp" single ((:commit . "6fcb31f5075edc5fc70c63426b2aef91352ca80f") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "convenience" "mustache" "template") (:url . "https://github.com/Wilfred/mustache.el"))])
- (mustache-mode . [(20141024 1432) nil "A major mode for editing Mustache files." single ((:commit . "bf9897eb287ca47ced65d7d4e07ea61ea0aec39f") (:authors ("Tony Gentilcore") ("Chris Wanstrath") ("Daniel Hackney")) (:maintainers ("Tony Gentilcore")) (:maintainer "Tony Gentilcore"))])
- (mustang-theme . [(20170719 946) nil "port of vim's mustang theme" single ((:commit . "dda6d04803f1c9b196b620ef564e7768fee15de2") (:authors ("martin haesler")) (:maintainers ("martin haesler")) (:maintainer "martin haesler") (:url . "http://github.com/mswift42/mustang-theme"))])
- (mustard-theme . [(20170808 1319) ((emacs (24 0))) "an Emacs 24 theme based on Mustard (tmTheme)" single ((:commit . "3b15d992c79590d7ea2503004e2a863b57e274b5") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (mutant . [(20160124 1353) ((emacs (24 4)) (dash (2 1 0))) "An interface for the Mutant testing tool" single ((:commit . "aff50603a70a110f4ecd7142963ef719e8c11c06") (:authors ("Pedro Lambert")) (:maintainers ("Pedro Lambert")) (:maintainer "Pedro Lambert") (:keywords "mutant" "testing") (:url . "http://github.com/p-lambert/mutant.el"))])
- (mutt-mode . [(20191102 2330) ((emacs (24))) "major mode for editing mutt configuration" single ((:commit . "1d495de49e6f536459b00d5396a2f5ce5ad4757b") (:authors ("Felix Weilbach" . "felix.weilbach@t-online.de")) (:maintainers ("Felix Weilbach" . "felix.weilbach@t-online.de")) (:maintainer "Felix Weilbach" . "felix.weilbach@t-online.de") (:keywords "languages") (:url . "https://gitlab.com/flexw/mutt-mode"))])
- (mvn . [(20181002 1617) nil "helpers for compiling with maven" single ((:commit . "ffa40235b7dabb6c6c165f64f32a963cde8031f0") (:authors ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainers ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainer "Andrew Gwozdziewycz" . "git@apgwoz.com") (:keywords "compilation" "maven" "java") (:url . "https://github.com/apgwoz/mvn-el"))])
- (mw-thesaurus . [(20230426 1752) ((emacs (25)) (request (0 3 0)) (dash (2 16 0))) "Merriam-Webster Thesaurus" single ((:commit . "c44d793595c2d0f6789621da457da065920968ac") (:authors ("Ag Ibragimov")) (:maintainers ("Ag Ibragimov")) (:maintainer "Ag Ibragimov") (:keywords "wp" "matching") (:url . "https://github.com/agzam/mw-thesaurus.el"))])
- (mwim . [(20181110 1900) nil "Switch between the beginning/end of line or code" single ((:commit . "b4f3edb4c0fb8f8b71cecbf8095c2c25a8ffbf85") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "convenience") (:url . "https://github.com/alezost/mwim.el"))])
- (mxf-view . [(20180501 740) ((emacs (25))) "Simple MXF viewer" single ((:commit . "c4825f35fad81c4624a2fcaea95cc605addf5cbc") (:authors ("Tomotaka SUWA" . "tomotaka.suwa@gmail.com")) (:maintainers ("Tomotaka SUWA" . "tomotaka.suwa@gmail.com")) (:maintainer "Tomotaka SUWA" . "tomotaka.suwa@gmail.com") (:keywords "data" "multimedia") (:url . "https://github.com/t-suwa/mxf-view"))])
- (my-repo-pins . [(20230120 1105) ((emacs (26 1))) "Keep your git repositories organized" single ((:commit . "e6fe3864e244e6db74b668d24857c04472b2d475") (:authors ("Félix Baylac Jacqué <felix at alternativebit.fr>")) (:maintainers ("Félix Baylac Jacqué <felix at alternativebit.fr>")) (:maintainer "Félix Baylac Jacqué <felix at alternativebit.fr>") (:url . "https://alternativebit.fr/projects/my-repo-pins/"))])
- (myanmar-input-methods . [(20160106 1537) nil "Emacs Input Method for Myanmar" single ((:commit . "9d4e0d6358c61bde7a2274e430ef71683faea32e") (:authors ("Ye Lin Kyaw" . "yelinkyaw@gmail.com")) (:maintainers ("Ye Lin Kyaw" . "yelinkyaw@gmail.com")) (:maintainer "Ye Lin Kyaw" . "yelinkyaw@gmail.com") (:keywords "myanmar" "unicode" "keyboard") (:url . "http://github.com/yelinkyaw/emacs-myanmar-input-methods"))])
- (mybigword . [(20221219 1033) ((emacs (26 1)) (avy (0 5 0))) "Vocabulary builder using Zipf to extract English big words" tar ((:commit . "b070c907455e4edd129d3471f338172a5868cc04") (:authors ("Chen Bin <chenbin DOT sh AT gmail.com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail.com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail.com>") (:keywords "convenience") (:url . "https://github.com/redguardtoo/mybigword"))])
- (mybuild-mode . [(20221007 1928) ((emacs (24 3))) "Major mode for editing Mybuild files from Embox" single ((:commit . "54e3c31e3b5f133eb8611a3759e59733b17e33e3") (:authors ("Evgeny Simonenko" . "easimonenko@gmail.com")) (:maintainers ("Evgeny Simonenko" . "easimonenko@gmail.com")) (:maintainer "Evgeny Simonenko" . "easimonenko@gmail.com") (:keywords "languages") (:url . "https://github.com/easimonenko/mybuild-mode"))])
- (mykie . [(20150808 2205) ((emacs (24 3)) (cl-lib (0 5))) "Command multiplexer: Register multiple functions to a keybind" tar ((:commit . "91f222b4f2b2b4285b0bc306905eb960826a67ed") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "emacs" "configuration" "keybind") (:url . "https://github.com/yuutayamada/mykie-el"))])
- (mynt-mode . [(20150512 2049) ((virtualenvwrapper (20131514))) "Minor mode to work with the mynt static site generator" single ((:commit . "23d4489167bfa899634548cb41ed32fdeb3600c9") (:authors ("Christian Brassat")) (:maintainers ("Christian Brassat")) (:maintainer "Christian Brassat") (:keywords "convenience") (:url . "https://github.com/crshd/mynt-mode"))])
- (myrddin-mode . [(20191225 2120) ((emacs (24 3))) "Major mode for editing Myrddin source files" single ((:commit . "51c0a2cb9dfc9526cd47e71313f5a745c99cadcc") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainers ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org") (:keywords "languages") (:url . "https://git.sr.ht/~jakob/myrddin-mode"))])
- (mysql-to-org . [(20210622 447) ((emacs (24 3)) (s (1 11 0))) "Minor mode to output the results of mysql queries to org tables" single ((:commit . "c5eefc71200f2e1d0d67a13ed897b3cdfa835117") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))])
- (myterminal-controls . [(20210904 516) ((emacs (24)) (cl-lib (0 5))) "Quick toggle controls at a key-stroke" single ((:commit . "c635868e13ee898ec77925d98b36421640e22aa4") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:keywords "convenience" "shortcuts") (:url . "http://ismail.teamfluxion.com"))])
- (n4js . [(20150714 231) ((emacs (24)) (cypher-mode (0))) "Neo4j Shell" single ((:commit . "3991ed8975151d5e8d568e952362df810f7ffab7") (:authors ("TruongTx" . "me@truongtx.me")) (:maintainers ("TruongTx" . "me@truongtx.me")) (:maintainer "TruongTx" . "me@truongtx.me") (:keywords "neo4j" "shell" "comint") (:url . "https://github.com/tmtxt/n4js.el"))])
- (naga-theme . [(20230418 1210) ((emacs (24 1))) "Dark color theme with green foreground color" single ((:commit . "5cf1ecaa052d3bdaee93ad5e98bb4f5346404b3f") (:authors ("Johannes Maier" . "johannes.maier@mailbox.org")) (:maintainers ("Johannes Maier" . "johannes.maier@mailbox.org")) (:maintainer "Johannes Maier" . "johannes.maier@mailbox.org") (:keywords "faces" "themes") (:url . "https://github.com/kenranunderscore/emacs-naga-theme"))])
- (name-this-color . [(20151014 2030) ((emacs (24)) (cl-lib (0 5)) (dash (2 11 0))) "Match RGB codes to names easily and precisely" single ((:commit . "e37cd1291d5d68d4c8d6386eab9cb9d94fd3bcfa") (:keywords "lisp" "color" "hex" "rgb" "shade" "name") (:url . "https://github.com/knl/name-this-color.el"))])
- (named-timer . [(20181120 2224) ((emacs (24 4))) "Simplified timer management for Emacs Lisp" single ((:commit . "670b81e3eddef2e7353a4eedc9553a85306445db") (:authors ("Ryan C. Thompson")) (:maintainers ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:keywords "tools") (:url . "https://github.com/DarwinAwardWinner/emacs-named-timer"))])
- (nameframe . [(20221023 957) nil "Manage frames by name." single ((:commit . "06d3400750c6b33ae215b9ac2922ee4dafd6b506") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/nameframe"))])
- (nameframe-perspective . [(20221023 957) ((nameframe (0 5 0 -2)) (perspective (1 12))) "Nameframe integration with perspective.el" single ((:commit . "06d3400750c6b33ae215b9ac2922ee4dafd6b506") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/nameframe"))])
- (nameframe-project . [(20221024 209) ((emacs (28 1)) (nameframe (0 5 0 -2)) (project (0 8 1))) "Nameframe integration with project.el" single ((:commit . "3116b6738f74a95e144a75344355e09f72620e01") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/nameframe"))])
- (nameframe-projectile . [(20221023 957) ((nameframe (0 5 0 -2)) (projectile (0 13 0))) "Nameframe integration with Projectile" single ((:commit . "06d3400750c6b33ae215b9ac2922ee4dafd6b506") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/nameframe"))])
- (nameless . [(20230112 1259) ((emacs (24 4))) "Hide package namespace in your emacs-lisp code" single ((:commit . "e468f3eea4518b9827419611868c897dce20453f") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "convenience" "lisp") (:url . "https://github.com/Malabarba/nameless"))])
- (names . [(20221227 1825) ((emacs (24 1)) (cl-lib (0 5))) "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." tar ((:commit . "45a272fae915148d9a74d4cb3c39917b272ee9c3") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "extensions" "lisp") (:url . "https://github.com/Malabarba/names"))])
- (namespaces . [(20130326 2250) nil "An implementation of namespaces for Elisp, with an emphasis on immutabilty." single ((:commit . "3d02525d9b9a5ae6e7be3adefd880121436e6270") (:authors ("Chris Barrett")) (:maintainers ("Chris Barrett")) (:maintainer "Chris Barrett") (:url . "https://github.com/chrisbarrett/elisp-namespaces"))])
- (nand2tetris . [(20171201 1813) ((emacs (24))) "Major mode for HDL files in the nand2tetris course" tar ((:commit . "fe37ee41367ceff6f7d7a472a5f80cf1285e1e01") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:keywords "nand2tetris" "hdl") (:url . "http://www.github.com/CestDiego/nand2tetris.el/"))])
- (nand2tetris-assembler . [(20171201 1813) ((nand2tetris (1 1 0))) "Assembler For the Nand2tetris Course" single ((:commit . "fe37ee41367ceff6f7d7a472a5f80cf1285e1e01") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:keywords "nand2tetris-assembler" "hdl") (:url . "http://www.github.com/CestDiego/nand2tetris-assembler.el/"))])
- (nanowrimo . [(20151105 228) nil "Track progress for nanowrimo" single ((:commit . "b1d41458926ccb39cefbb1bb74aefe4f02fd349f") (:authors ("Ivan Andrus <darthandrus at gmail.com>")) (:maintainers ("Ivan Andrus <darthandrus at gmail.com>")) (:maintainer "Ivan Andrus <darthandrus at gmail.com>") (:url . "https://bitbucket.org/gvol/nanowrimo-mode"))])
- (naquadah-theme . [(20190225 1427) nil "A theme based on Tango color set" single ((:commit . "430c3b7bd51922cb616b3f60301f4e2604816ed8"))])
- (narrow-reindent . [(20150722 1906) ((emacs (24 4))) "Defines a minor mode to left-align narrowed regions." single ((:commit . "87466aac4dbeb79597124dd077bf5c704872fd3d") (:authors ("J David Smith" . "emallson@atlanis.net")) (:maintainers ("J David Smith" . "emallson@atlanis.net")) (:maintainer "J David Smith" . "emallson@atlanis.net") (:url . "https://github.com/emallson/narrow-reindent.el"))])
- (narrowed-page-navigation . [(20150109 519) ((emacs (24)) (cl-lib (0 5))) "A minor mode for showing one page at a time" single ((:commit . "b215adbac4873f56fbab65772062f0f5be8058a1") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk") (:keywords "outlines"))])
- (narumi . [(20220228 243) ((emacs (26 1))) "A dashboard that displays a ramdom sampled image" single ((:commit . "2f23f03a7b94766799f26605e167b259a4a90903") (:url . "https://github.com/nryotaro/narumi"))])
- (nash-mode . [(20160830 1212) nil "Nash major mode" single ((:commit . "bb7ae728a16812a0ef506483b877f6221c92ca9c") (:authors ("Tiago Natel de Moura")) (:maintainers ("Tiago Natel de Moura")) (:maintainer "Tiago Natel de Moura") (:keywords "nash" "languages") (:url . "https://github.com/tiago4orion/nash-mode.el"))])
- (nasm-mode . [(20190410 342) ((emacs (24 3))) "NASM x86 assembly major mode" single ((:commit . "65ca6546fc395711fac5b3b4299e76c2303d43a8") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/nasm-mode"))])
- (native-complete . [(20230505 1803) ((emacs (26 1))) "Shell completion using native complete mechanisms" single ((:commit . "7b5e7d86c39ce9833118db278034789a6c0ecfd6") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainers ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com") (:url . "https://github.com/CeleritasCelery/emacs-native-shell-complete"))])
- (nav . [(20120507 707) nil "Emacs mode for filesystem navigation" tar ((:commit . "c5eb234c063f435dbdcd1f8bdc46cfc68c973ebe") (:authors ("Issac Trotts" . "issactrotts@google.com")) (:maintainers ("Issac Trotts" . "issactrotts@google.com")) (:maintainer "Issac Trotts" . "issactrotts@google.com"))])
- (nav-flash . [(20220726 1117) ((emacs (25 1))) "Briefly highlight the current line" single ((:commit . "5d4b48567862f6be0ca973d6b1dca90e4815cb9b") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions" "navigation" "interface") (:url . "http://github.com/rolandwalker/nav-flash"))])
- (navi-mode . [(20201220 1727) ((outshine (2 0)) (outorg (2 0))) "major-mode for easy buffer-navigation" single ((:commit . "cf97e1e338815ad3a4d0bbbf4ff6dd1a4e322ca8") (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/navi"))])
- (navi2ch . [(20200130 36) nil "Navigator for 2ch for Emacsen" tar ((:commit . "7811dba052f679bd920a1f648d621a6fecace10f") (:authors ("Taiki SUGAWARA" . "taiki@users.sourceforge.net")) (:maintainers ("Taiki SUGAWARA" . "taiki@users.sourceforge.net")) (:maintainer "Taiki SUGAWARA" . "taiki@users.sourceforge.net") (:keywords "network" "2ch"))])
- (navigel . [(20200202 1214) ((emacs (25 1)) (tablist (1 0))) "Facilitate the creation of tabulated-list based UIs" single ((:commit . "0a2d624d6b49f8363badc5ba8699b7028ef85632") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/DamienCassou/navigel"))])
- (navorski . [(20141203 1824) ((s (1 9 0)) (dash (1 5 0)) (multi-term (0 8 14))) "Helping you live in the terminal, like Viktor did." single ((:commit . "698c1c62da70164aebe9a7a5d034778fbc30ea5b") (:authors ("Roman Gonzalez <romanandreg@gmail.com>, Tavis Rudd" . "tavis@birdseye-sw.com")) (:maintainers ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com") (:keywords "terminal"))])
- (naysayer-theme . [(20200405 123) ((emacs (24))) "The naysayer color theme" single ((:commit . "9d0bef898f31368cd30e063d53d443dee29683b0") (:authors ("Nick Aversano" . "nickav@users.noreply.github.com")) (:maintainers ("Nick Aversano" . "nickav@users.noreply.github.com")) (:maintainer "Nick Aversano" . "nickav@users.noreply.github.com") (:url . "https://github.com/nickav/naysayer-theme.el"))])
- (ncl-mode . [(20180129 703) ((emacs (24))) "Major Mode for editing NCL scripts and other goodies" tar ((:commit . "602292712a9e6b7e7c25155978999e77d06b7338") (:authors ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainer "Yagnesh Raghava Yakkala" . "hi@yagnesh.org") (:keywords "ncl" "major mode" "ncl-mode" "atmospheric science.") (:url . "https://github.com/yyr/ncl-mode"))])
- (nclip . [(20130617 2015) nil "Network (HTTP) Clipboard" tar ((:commit . "af88e38b1f04be02bf2e57affc662dbd0f828e67") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:keywords "nclip" "clipboard" "network") (:url . "http://www.github.com/maio/nclip.el"))])
- (neato-graph-bar . [(20181130 1649) ((emacs (24 3))) "Neat-o graph bars CPU/memory etc." single ((:commit . "a7ae35afd67911e8924f36e646bce0d3e3c1bbe6") (:authors ("Robert Cochran" . "robert-git@cochranmail.com")) (:maintainers ("Robert Cochran" . "robert-git@cochranmail.com")) (:maintainer "Robert Cochran" . "robert-git@cochranmail.com") (:url . "https://gitlab.com/RobertCochran/neato-graph-bar"))])
- (neil . [(20230322 2035) ((emacs (27 1))) "companion for Babashka Neil" single ((:commit . "19bc12d1c868eb5c1f200963c240a2a107982556") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/babashka/neil"))])
- (nemerle . [(20161029 2023) nil "major mode for editing nemerle programs" single ((:commit . "8818c5af5598e16ea59189e1e3245f0a3d7c78f0") (:authors ("Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl")) (:maintainers ("Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl")) (:maintainer "Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl") (:keywords "nemerle" "mode" "languages"))])
- (neon-mode . [(20180406 1156) nil "Simple major mode for editing neon files" single ((:commit . "99d15e46beaf1e7d71e39a00cce810df1f33229d") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "conf"))])
- (neotree . [(20200324 1946) ((cl-lib (0 5))) "A tree plugin like NerdTree for Vim" tar ((:commit . "98fe21334affaffe2334bf7c987edaf1980d2d0b") (:authors ("jaypei" . "jaypei97159@gmail.com")) (:maintainers ("jaypei" . "jaypei97159@gmail.com")) (:maintainer "jaypei" . "jaypei97159@gmail.com") (:url . "https://github.com/jaypei/emacs-neotree"))])
- (nerd-icons . [(20230504 1807) ((emacs (24 3))) "Emacs Nerd Font Icons Library" tar ((:commit . "1e0cc899ec2b565031b887b599501fe2776ad4a2") (:authors ("Hongyu Ding <rainstormstudio@yahoo.com>, Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Hongyu Ding <rainstormstudio@yahoo.com>, Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Hongyu Ding <rainstormstudio@yahoo.com>, Vincent Zhang" . "seagle0128@gmail.com") (:keywords "lisp") (:url . "https://github.com/rainstormstudio/nerd-icons.el"))])
- (nerd-icons-completion . [(20230430 1611) ((emacs (25 1)) (nerd-icons (0 0 1))) "Add icons to completion candidates" single ((:commit . "5cfee6ff1b9647c783bae944402d60440ce04cbb") (:authors ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainers ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainer "Hongyu Ding" . "rainstormstudio@yahoo.com") (:keywords "lisp") (:url . "https://github.com/rainstormstudio/nerd-icons-completion"))])
- (nerd-icons-dired . [(20230427 1637) ((emacs (24 4)) (nerd-icons (0 0 1))) "Shows icons for each file in dired mode" single ((:commit . "c05ba4815d375d779644ca7ac215632fda75089c") (:authors ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainers ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainer "Hongyu Ding" . "rainstormstudio@yahoo.com") (:keywords "lisp") (:url . "https://github.com/rainstormstudio/nerd-icons-dired"))])
- (nerd-icons-ibuffer . [(20230417 1549) ((emacs (24 3)) (nerd-icons (0 0 1))) "Display nerd icons in ibuffer" single ((:commit . "18c00c03a0d7193bab5e3374ec02c5428db057fd") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:keywords "convenience" "icons" "ibuffer") (:url . "https://github.com/seagle0128/nerd-icons-ibuffer"))])
- (nerd-icons-ivy-rich . [(20230505 1734) ((emacs (26 1)) (ivy-rich (0 1 0)) (nerd-icons (0 0 1))) "Excellent experience with nerd icons for ivy/counsel" single ((:commit . "6ecadc9e2e235712cbd88a8260297325532cf540") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainers ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:keywords "convenience" "icons" "ivy") (:url . "https://github.com/seagle0128/nerd-icons-ivy-rich"))])
- (nerdtab . [(20180811 339) ((emacs (24 5))) "Keyboard-oriented tabs" single ((:commit . "601d531fa3748db733fbdff157a0f1cdf8a66416") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainers ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com") (:keywords "convenience") (:url . "https://github.com/casouri/nerdtab"))])
- (netease-cloud-music . [(20220305 1224) ((emacs (27 1)) (request (0 3 3))) "Netease Cloud Music client" tar ((:commit . "f238d1d45bbeee32e0a8d169f39de4360be908f4") (:authors ("SpringHan")) (:maintainers ("SpringHan")) (:maintainer "SpringHan") (:keywords "multimedia") (:url . "https://github.com/SpringHan/netease-cloud-music.git"))])
- (netease-music . [(20210411 603) ((names (0 5)) (emacs (25))) "listen netease music" single ((:commit . "db7f1eef2d8544983509db679be1cbe6a5678071") (:authors ("hiro方圆" . "wfy11235813@gmail.com")) (:maintainers ("hiro方圆" . "wfy11235813@gmail.com")) (:maintainer "hiro方圆" . "wfy11235813@gmail.com") (:keywords "multimedia" "chinese" "music") (:url . "https://github.com/nicehiro/netease-music"))])
- (netherlands-holidays . [(20150202 1617) nil "Netherlands holidays for Emacs calendar." single ((:commit . "26236178cdd650df9958bf5a086e184096559f00") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "calendar") (:url . "https://github.com/abo-abo/netherlands-holidays"))])
- (netrunner . [(20160910 2332) ((popup (0 5 3)) (company (0 9 0)) (helm (1 9 5))) "Create Android: Netrunner decklists using Company, Helm and org-mode" single ((:commit . "c64672992175c8c1073c0f56c2e471839db71a0f") (:authors ("Erik Sjöstrand")) (:maintainers ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:keywords "games") (:url . "http://github.com/Kungsgeten/netrunner"))])
- (network-watch . [(20171123 1146) ((emacs (24 3))) "Support for intermittent network connectivity" single ((:commit . "d80b38dbec79f813c3949a8df8fb5f58d48b60ee") (:authors ("Juan Amiguet Vercher" . "jamiguet@gmail.com")) (:maintainers ("Juan Amiguet Vercher" . "jamiguet@gmail.com")) (:maintainer "Juan Amiguet Vercher" . "jamiguet@gmail.com") (:keywords "unix" "tools" "hardware" "lisp") (:url . "https://github.com/jamiguet/network-watch"))])
- (neuron-mode . [(20220718 827) ((emacs (26 3)) (f (0 20 0)) (s (1 12 0)) (markdown-mode (2 3)) (company (0 9 13))) "Major mode for editing zettelkasten notes using neuron" single ((:commit . "33bc73f9a2ef1c6855bb12fec08e15a8cf4a6c6e") (:authors ("felko <http://github/felko>")) (:maintainers ("felko <http://github/felko>")) (:maintainer "felko <http://github/felko>") (:keywords "outlines") (:url . "https://github.com/felko/neuron-mode"))])
- (never-comment . [(20140104 2207) nil "Never blocks are comment" single ((:commit . "1996d003cad6bccf1475f7845d79efacbc7cd673") (:authors ("Scott Frazer")) (:maintainers ("Toon Claes")) (:maintainer "Toon Claes") (:url . "http://stackoverflow.com/a/4554658/89376"))])
- (newlisp-mode . [(20160226 1545) nil "newLISP editing mode for Emacs" single ((:commit . "ac23be40c81a360988ab803d365f1510733f6db4") (:authors ("KOBAYASHI Shigeru <shigeru.kb[at]gmail.com>")) (:maintainers ("KOBAYASHI Shigeru <shigeru.kb[at]gmail.com>")) (:maintainer "KOBAYASHI Shigeru <shigeru.kb[at]gmail.com>") (:keywords "language" "lisp" "newlisp") (:url . "https://github.com/kosh04/newlisp-mode"))])
- (newspeak-mode . [(20211011 1425) ((emacs (24 3))) "Major mode for the Newspeak programming language" single ((:commit . "f76aee3a1f7ff032ed9ef2d3a092f84c8c985e19") (:authors ("Daniel Szmulewicz")) (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com") (:url . "https://github.com/danielsz/newspeak-mode"))])
- (nexus . [(20220902 2009) nil "REST Client for Nexus Maven Repository servers" tar ((:commit . "9f0ddf7d6cb5f7df44f684f02e2bd8a96ecabbd6") (:authors ("Juergen Hoetzel" . "juergen@archlinux.org")) (:maintainers ("Juergen Hoetzel" . "juergen@archlinux.org")) (:maintainer "Juergen Hoetzel" . "juergen@archlinux.org") (:keywords "comm"))])
- (ng2-mode . [(20201203 1925) ((typescript-mode (0 1))) "Major modes for editing Angular 2" tar ((:commit . "d341f177c6e4fb9d99b8639943ab5fc9184e2715") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:keywords "typescript" "angular" "angular2" "template") (:url . "http://github.com/AdamNiederer/ng2-mode"))])
- (nginx-mode . [(20170612 437) nil "major mode for editing nginx config files" single ((:commit . "a2bab83c2eb233d57d76b236e7c141c2ccc97005") (:authors ("Andrew J Cosgriff" . "andrew@cosgriff.name")) (:maintainers ("Andrew J Cosgriff" . "andrew@cosgriff.name")) (:maintainer "Andrew J Cosgriff" . "andrew@cosgriff.name") (:keywords "languages" "nginx"))])
- (niceify-info . [(20160416 1244) nil "improve usability of Info pages" single ((:commit . "66b45916f1994e16ee023d29fa7cf8fec48078f1"))])
- (nickel-mode . [(20230502 841) ((emacs (24 3))) "A major mode for editing Nickel source code" single ((:commit . "4b92668564025b18a3d4da47db51d6360cf9da44") (:authors ("The Nickel Team" . "nickel-lang@tweag.io")) (:maintainers ("The Nickel Team" . "nickel-lang@tweag.io")) (:maintainer "The Nickel Team" . "nickel-lang@tweag.io") (:keywords "languages" "configuration-language" "configuration" "nickel" "infrastructure") (:url . "https://github.com/nickel-lang/nickel-mode"))])
- (niconama . [(20170910 1501) ((emacs (24)) (request (20170131 1747)) (cl-lib (0 5))) "Tools for Niconico Live Broadcast" single ((:commit . "96e7553e50e6bf7b58aac50f52c9b0b8edb41c56") (:keywords "comm") (:url . "https://github.com/NOBUTOKA/niconama.el"))])
- (night-owl-theme . [(20200622 1943) ((emacs (24))) "A color theme for the night owls out there" single ((:commit . "50315d6a4e170dccc83bf2d59a8a761f5ea32bb6") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "http://github.com/aaronjensen/night-owl-theme"))])
- (nikki . [(20210228 428) ((emacs (24 3))) "A simple diary mode" single ((:commit . "b2ea20d04a061df88d72bd8dd0412a6e7876458d") (:authors ("Taiki Harada" . "thdev994@gmail.com")) (:maintainers ("Taiki Harada" . "thdev994@gmail.com")) (:maintainer "Taiki Harada" . "thdev994@gmail.com") (:keywords "convenience") (:url . "https://github.com/th994/nikki"))])
- (nikola . [(20170703 2021) ((async (1 5)) (emacs (24 3))) "Simple wrapper for nikola" single ((:commit . "964715ac30943c9d6976999cad208dc60d09def0") (:authors (": drymer <drymer [ AT ] autistici.org>")) (:maintainers (": drymer <drymer [ AT ] autistici.org>")) (:maintainer ": drymer <drymer [ AT ] autistici.org>") (:keywords ":" "nikola") (:url . ": https://git.daemons.it/drymer/nikola.el"))])
- (nim-mode . [(20211102 917) ((emacs (24 4)) (epc (0 1 1)) (let-alist (1 0 1)) (commenter (0 5 1)) (flycheck-nimsuggest (0 8 1))) "A major mode for the Nim programming language" tar ((:commit . "744e076f0bea1c5ddc49f92397d9aa98ffa7eff8") (:authors ("Simon Hafner")) (:maintainers ("Simon Hafner" . "hafnersimon@gmail.com")) (:maintainer "Simon Hafner" . "hafnersimon@gmail.com") (:keywords "nim" "languages"))])
- (nimbus-theme . [(20230424 1954) ((emacs (24 1))) "Nimbus dark theme" single ((:commit . "771bea18d5469abd7d935e69943282610aae008a") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") ("See README.md for full list of contributors.")) (:maintainers ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") (:keywords "faces") (:url . "https://github.com/mrcnski/nimbus-theme"))])
- (ninja-mode . [(20230421 1748) ((emacs (24))) "Major mode for editing .ninja files" single ((:commit . "adf9bddd73869084a505fac83246e55c35880079"))])
- (nix-buffer . [(20180212 1518) ((f (0 17 3)) (emacs (24 4))) "Set up buffer environments with nix" single ((:commit . "db57cda36e7477bdc7ef5a136357b971b1d4d099") (:authors ("Shea Levy")) (:maintainers ("Shea Levy")) (:maintainer "Shea Levy") (:url . "https://github.com/shlevy/nix-buffer/tree/master/"))])
- (nix-env-install . [(20200812 1305) ((emacs (25 1))) "Install packages using nix-env" single ((:commit . "79c34bc117ba1cebeb67fab32c364951d2ec37a0") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "processes" "tools") (:url . "https://github.com/akirak/nix-env-install"))])
- (nix-haskell-mode . [(20190615 135) ((emacs (25)) (haskell-mode (16 0)) (nix-mode (1 3 0))) "haskell-mode integrations for Nix" single ((:commit . "68efbcbf949a706ecca6409506968ed2ef928a20") (:authors ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainers ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:keywords "nix" "haskell" "languages" "processes") (:url . "https://github.com/matthewbauer/nix-haskell"))])
- (nix-mode . [(20230421 2036) ((emacs (25 1)) (magit-section (0)) (transient (0 3))) "Major mode for editing .nix files" tar ((:commit . "719feb7868fb567ecfe5578f6119892c771ac5e5") (:maintainers ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:keywords "nix" "languages" "tools" "unix") (:url . "https://github.com/NixOS/nix-mode"))])
- (nix-modeline . [(20210405 742) ((emacs (25 1))) "Info about in-progress Nix evaluations on your modeline" single ((:commit . "9a6116a11bdacf649f2c50ae1f2f4b12c03bed70") (:authors ("Jordan Mulcahey" . "snhjordy@gmail.com")) (:maintainers ("Jordan Mulcahey" . "snhjordy@gmail.com")) (:maintainer "Jordan Mulcahey" . "snhjordy@gmail.com") (:keywords "processes" "unix" "tools") (:url . "https://github.com/ocelot-project/nix-modeline"))])
- (nix-sandbox . [(20210325 1622) ((dash (2 12 1)) (s (1 10 0))) "Utility functions to work with nix-shell sandboxes" single ((:commit . "d3ec98405f1f9dac833abf9e146249b1b943870d") (:authors ("Sven Keidel" . "svenkeidel@gmail.com")) (:maintainers ("Sven Keidel" . "svenkeidel@gmail.com")) (:maintainer "Sven Keidel" . "svenkeidel@gmail.com") (:url . "https://github.com/travisbhartwell/nix-emacs"))])
- (nix-update . [(20220816 2212) ((emacs (25))) "Update \"fetch\" blocks in .nix expressions" single ((:commit . "aab70a38165575a9cb41726f1cc67df60fbf2832") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainers ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:keywords "nix") (:url . "https://github.com/jwiegley/nix-update-el"))])
- (nixos-options . [(20160209 1841) ((emacs (24))) "Interface for browsing and completing NixOS options." single ((:commit . "045825c2e1cf0a4fb0a472e72c1dae8f55202cef") (:authors ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:keywords "unix") (:url . "http://www.github.com/travisbhartwell/nix-emacs/"))])
- (nixpkgs-fmt . [(20200327 2302) ((emacs (24)) (reformatter (0 3))) "Reformat Nix using nixpkgs-fmt" single ((:commit . "83e03d6f20bdf79c1c448c15734367b1a7cc6b02") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages") (:url . "https://github.com/purcell/emacs-nixpkgs-fmt"))])
- (nlinum-hl . [(20211112 1241) ((emacs (24 4)) (nlinum (1 7)) (cl-lib (0 5))) "heal nlinum's line numbers" single ((:commit . "22f8d75ecdaab67e0d6d0d2da4766358456ca4f5") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "git@henrik.io")) (:maintainer "Henrik Lissner" . "git@henrik.io") (:keywords "nlinum" "highlight" "current" "line" "faces") (:url . "https://github.com/hlissner/emacs-nlinum-hl"))])
- (nlinum-relative . [(20160526 708) ((emacs (24 4)) (nlinum (1 5))) "Relative line number with nlinum" single ((:commit . "5b9950c97ba79a6f0683e38b13da23f39e01031c") (:authors ("codefalling" . "code.falling@gmail.com")) (:maintainers ("codefalling" . "code.falling@gmail.com")) (:maintainer "codefalling" . "code.falling@gmail.com") (:keywords "convenience"))])
- (nndiscourse . [(20220210 1529) ((emacs (25 1)) (dash (2 18 1)) (anaphora (1 0 4)) (rbenv (0 0 3)) (json-rpc (0 0 1))) "Gnus backend for Discourse" tar ((:commit . "1b7d7bfc99b104b7c4948af9f3394b416105e9d9") (:keywords "news") (:url . "https://github.com/dickmao/nndiscourse"))])
- (nnhackernews . [(20230222 1441) ((emacs (25 2)) (request (0 3 3)) (dash (2 18 1)) (anaphora (1 0 4))) "Gnus backend for Hacker News" single ((:commit . "bf0ff5d4a079004f937e7440ba282c156f24dced") (:keywords "news") (:url . "https://github.com/dickmao/nnhackernews"))])
- (nnir-est . [(20180710 2103) nil "Gnus nnir interface for HyperEstraier" single ((:commit . "6d0d5c8e33f4e4ccbc22350324c0990d2676fb5a") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "mail") (:url . "https://github.com/kawabata/nnir-est"))])
- (nnreddit . [(20220423 2302) ((emacs (25 1)) (request (0 3 3)) (anaphora (1 0 4)) (dash (2 18 1)) (json-rpc (0 0 1)) (virtualenvwrapper (20151123)) (s (1 6 1))) "Gnus Backend For Reddit" tar ((:commit . "8f247dce12bd10de37f0903f3027a1ddbc318eff") (:keywords "news") (:url . "https://github.com/dickmao/nnreddit"))])
- (nntwitter . [(20230323 1458) ((emacs (25 1)) (dash (20190401)) (anaphora (20180618)) (request (20190819))) "Gnus Backend For Twitter" tar ((:commit . "8189100aa071386665b8616c6b57067383abd47b") (:keywords "news") (:url . "https://github.com/dickmao/nntwitter"))])
- (no-clown-fiesta-theme . [(20230220 1019) ((emacs (26 1)) (autothemer (0 2))) "Not-so-colorful-theme" single ((:commit . "e143cdfa7cecac6383328eca88586105f308bca9") (:authors ("ranmaru22")) (:maintainers ("ranmaru22")) (:maintainer "ranmaru22") (:url . "https://github.com/ranmaru22/no-clown-fiesta-theme.el"))])
- (no-emoji . [(20180515 1837) ((emacs (24))) "Show :emoji-name: instead of emoji characters" single ((:commit . "ebceeab50dbfe4d60235180a57633745dbc18c77") (:authors ("Peter" . "craven@gmx.net")) (:maintainers ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net") (:keywords "extensions") (:url . "https://github.com/ecraven/no-emoji"))])
- (no-littering . [(20230420 2222) ((emacs (25 1)) (compat (29 1 3 4))) "Help keeping ~/.config/emacs clean" single ((:commit . "6db8c576bd5fe0516a5b91066a0f44cddce51eae") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://github.com/emacscollective/no-littering"))])
- (no-spam . [(20190724 1854) ((emacs (25 1))) "Add repeat delays to commands" single ((:commit . "860860e4a0d59bd15c8e092dc42f5f7f769a428e") (:authors ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainers ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainer "Daniel Phan" . "daniel.phan36@gmail.com") (:keywords "keyboard" "tools") (:url . "https://github.com/mamapanda/no-spam"))])
- (noaa . [(20230228 2331) ((emacs (27 1)) (kv (0 0 19)) (request (0 2 0)) (s (1 12 0))) "Get NOAA weather data" single ((:commit . "4a4f2169a840902799348e589c6f0211073c9d96") (:authors ("David Thompson")) (:maintainers ("David Thompson")) (:maintainer "David Thompson") (:keywords "calendar") (:url . "https://github.com/thomp/noaa"))])
- (noccur . [(20191015 719) nil "Run multi-occur on project/dired files" single ((:commit . "fa91647a305e89561d3dbe53da002fff49abe0bb") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com") (:keywords "convenience"))])
- (nocomments-mode . [(20170213 2037) nil "Minor mode that makes comments invisible." single ((:commit . "5a41a20cc44dfe4a9ea584354ed6dbc15dd92f46") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/nocomments-mode"))])
- (noctilux-theme . [(20161113 1442) ((emacs (24))) "Dark theme inspired by LightTable" single ((:commit . "a3265a1be7f4d73f44acce6d968ca6f7add1f2ca") (:authors ("Simon Manning" . "simon@ecksdee.org")) (:maintainers ("Simon Manning" . "simon@ecksdee.org")) (:maintainer "Simon Manning" . "simon@ecksdee.org") (:url . "https://github.com/sjrmanning/noctilux-theme"))])
- (node-resolver . [(20140930 1723) ((cl-lib (0 5))) "hook to install node modules in background" single ((:commit . "ef9d0486907a746a80b02ffc6208a09c168a9f7c") (:authors ("Dave Justice")) (:maintainers ("Dave Justice")) (:maintainer "Dave Justice") (:keywords "convenience" "nodejs" "javascript" "npm") (:url . "https://github.com/meandavejustice/node-resolver.el"))])
- (nodejs-repl . [(20200802 1310) nil "Run Node.js REPL" single ((:commit . "3b841055cad00f442e4a9159b1056f59411b6646") (:authors ("Takeshi Arabiki")) (:maintainers ("Takeshi Arabiki")) (:maintainer "Takeshi Arabiki"))])
- (nodemcu-mode . [(20180501 2225) ((emacs (25))) "Minor mode for NodeMCU" single ((:commit . "8effd9f3df40b6b92a2f05e4d54750b624afc4a7") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainers ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch") (:keywords "tools") (:url . "https://github.com/andrmuel/nodemcu-mode"))])
- (noflet . [(20141102 1454) nil "locally override functions" single ((:commit . "7ae84dc3257637af7334101456dafe1759c6b68a") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp") (:url . "https://github.com/nicferrier/emacs-noflet"))])
- (nofrils-acme-theme . [(20180620 1248) ((emacs (24))) "Port of \"No Frils Acme\" Vim theme." tar ((:commit . "98ad7bfaff1d85b33dc162645670285b067c6f92") (:authors ("Eric Sessoms" . "esessoms@protonmail.com")) (:maintainers ("Eric Sessoms" . "esessoms@protonmail.com")) (:maintainer "Eric Sessoms" . "esessoms@protonmail.com") (:url . "https://gitlab.com/esessoms/nofrils-theme"))])
- (nord-theme . [(20230311 1131) ((emacs (24))) "An arctic, north-bluish clean and elegant theme" single ((:commit . "5335a7e782fd4ea5b33cd630feae37d902709024") (:authors ("Sven Greb" . "development@svengreb.de")) (:maintainers ("Sven Greb" . "development@svengreb.de")) (:maintainer "Sven Greb" . "development@svengreb.de") (:url . "https://github.com/nordtheme/emacs"))])
- (nordic-night-theme . [(20230507 547) ((emacs (24 1))) "A darker, more colorful version of the lovely Nord theme" single ((:commit . "8b4abb2b8c17eae24e72e79e8db56e20b66a3554") (:authors ("Ashton Wiersdorf" . "mail@wiersdorf.dev")) (:maintainers ("Ashton Wiersdorf" . "mail@wiersdorf.dev")) (:maintainer "Ashton Wiersdorf" . "mail@wiersdorf.dev") (:url . "https://sr.ht/~ashton314/nordic-night/"))])
- (nordless-theme . [(20201222 1627) ((colorless-themes (0 2))) "A mostly colorless version of nord-theme" single ((:commit . "1b2a507b3b7f9559c944af8fc7531a60b38ae0c3") (:authors ("Thomas Letan" . "lthms@soap.coffee")) (:maintainers ("Thomas Letan" . "lthms@soap.coffee")) (:maintainer "Thomas Letan" . "lthms@soap.coffee") (:keywords "faces" "theme") (:url . "https://git.sr.ht/~lthms/colorless-themes.el"))])
- (norns . [(20220821 1614) ((emacs (27 1)) (dash (2 17 0)) (s (1 12 0)) (f (0 20 0)) (request (0 3 2)) (websocket (1 13))) "Interactive development environment for monome norns" single ((:commit . "387c7ae65383f7e9ff7ae93250ef6cf0e2b1b71a") (:keywords "processes" "terminals") (:url . "https://github.com/p3r7/norns.el"))])
- (northcode-theme . [(20180423 1649) ((emacs (24))) "A dark theme focused on blue and orange colors." single ((:commit . "4d3750461ba25ec45321318b5f1af4e8fdf16147") (:authors ("Andreas Larsen" . "andreas@northcode.no")) (:maintainers ("Andreas Larsen" . "andreas@northcode.no")) (:maintainer "Andreas Larsen" . "andreas@northcode.no") (:url . "https://github.com/Northcode/northcode-theme.el"))])
- (nothing-theme . [(20200504 402) ((emacs (24 1))) "Monochrome theme" single ((:commit . "17fc9ecc94af0c919a24c4fe92bb48890bb4c3b0") (:authors ("Jared Gorski," . "jaredgorski6@gmail.com")) (:maintainers ("Jared Gorski," . "jaredgorski6@gmail.com")) (:maintainer "Jared Gorski," . "jaredgorski6@gmail.com") (:url . "https://github.com/jaredgorski/nothing.el"))])
- (notink-theme . [(20220114 1955) ((emacs (26 1))) "A custom theme inspired by e-ink displays" single ((:commit . "6115857fe75c1adbbce4165a2b77a11a271aaf31") (:authors ("MetroWind" . "chris.corsair@gmail.com")) (:maintainers ("MetroWind" . "chris.corsair@gmail.com")) (:maintainer "MetroWind" . "chris.corsair@gmail.com") (:keywords "faces") (:url . "https://github.com/MetroWind/notink-theme"))])
- (notmuch . [(20230221 1455) nil "run notmuch within emacs" tar ((:commit . "48d774bbf4dc6e442e1be96aab712947b408fc5a") (:url . "https://notmuchmail.org"))])
- (notmuch-addr . [(20230212 2014) ((emacs (27 1)) (compat (29 1 3 4)) (notmuch (0 32))) "An alternative to notmuch-address.el" single ((:commit . "fc00a3aac925d082b8f263e2a6d64b67535f5731") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "mail") (:url . "https://git.sr.ht/~tarsius/notmuch-addr"))])
- (notmuch-bookmarks . [(20200322 1925) ((seq (2 20)) (emacs (26 1)) (notmuch (0 29 3))) "Add bookmark handling for notmuch buffers" single ((:commit . "37a0a46bc68f4b2fe0d456c24f22a703171eb0f8") (:authors ("Jörg Volbers" . "joerg@joergvolbers.de")) (:maintainers ("Jörg Volbers" . "joerg@joergvolbers.de")) (:maintainer "Jörg Volbers" . "joerg@joergvolbers.de") (:keywords "mail") (:url . "https://github.com/publicimageltd/notmuch-bookmarks"))])
- (notmuch-labeler . [(20131230 1719) ((notmuch (0))) "Improve notmuch way of displaying labels" tar ((:commit . "d65d1129555d368243df4770ecc1e7ccb88efc58") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:keywords "emacs" "package" "elisp" "notmuch" "emails") (:url . "https://github.com/DamienCassou/notmuch-labeler"))])
- (notmuch-maildir . [(20230212 2014) ((emacs (26 1)) (compat (29 1 3 4)) (notmuch (0 30))) "Visualize maildirs as a tree" single ((:commit . "0d8f1534691e834f26e1899dd54df2db7f810669") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "mail") (:url . "https://git.sr.ht/~tarsius/notmuch-maildir"))])
- (notmuch-transient . [(20230212 2014) ((emacs (27 1)) (compat (29 1 3 4)) (notmuch (0 31 4))) "Command dispatchers for Notmuch" single ((:commit . "9d1fa80be0656e712a3f86079ea0abba0542dd88") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "mail") (:url . "https://git.sr.ht/~tarsius/notmuch-transient"))])
- (nov . [(20230421 1548) ((esxml (0 3 6)) (emacs (25 1))) "Featureful EPUB reader mode" single ((:commit . "58c35e677e11f5c04a702b42ac753c80c8955089") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "hypermedia" "multimedia" "epub") (:url . "https://depp.brause.cc/nov.el"))])
- (nova-theme . [(20210512 1802) ((emacs (24 3))) "A dark, pastel color theme" single ((:commit . "1498f756a4c1c9ea9740cd3208f74d071283b930") (:authors ("Muir Manders" . "muir+emacs@mnd.rs")) (:maintainers ("Muir Manders" . "muir+emacs@mnd.rs")) (:maintainer "Muir Manders" . "muir+emacs@mnd.rs") (:keywords "theme" "dark" "nova" "pastel" "faces") (:url . "https://github.com/muirmanders/emacs-nova-theme"))])
- (noxml-fold . [(20170823 1357) nil "Fold away XML things." single ((:commit . "46c7f6a008672213238a9f8d7a416ce80916aa62") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainers ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org") (:keywords "xml" "folding") (:url . "https://github.com/paddymcall/noxml-fold"))])
- (npm . [(20220428 927) ((emacs (25 1)) (transient (0 1 0)) (jest (20200625))) "Run your npm workflows" tar ((:commit . "6eb0a58274870dd75bf848cf5a916a9f2c6ddae5") (:authors ("Shane Kennedy")) (:maintainers ("Shane Kennedy")) (:maintainer "Shane Kennedy") (:keywords "tools") (:url . "https://github.com/shaneikennedy/npm.el"))])
- (npm-mode . [(20190616 2025) ((emacs (24 1))) "minor mode for working with npm projects" single ((:commit . "3ee7c0bad5b7a041d4739ef3aaa06a3dc764e5eb") (:authors ("Allen Gooch" . "allen.gooch@gmail.com")) (:maintainers ("Allen Gooch" . "allen.gooch@gmail.com")) (:maintainer "Allen Gooch" . "allen.gooch@gmail.com") (:keywords "convenience" "project" "javascript" "node" "npm") (:url . "https://github.com/mojochao/npm-mode"))])
- (nrepl-eval-sexp-fu . [(20201007 2311) ((highlight (0 0 0)) (smartparens (0 0 0)) (thingatpt (0 0 0))) "Tiny functionality enhancements for evaluating sexps." single ((:commit . "2d6ad728b1ba290974a2ae1f232a5a96810a135b") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainers ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net") (:keywords "lisp" "highlight" "convenience"))])
- (nrepl-sync . [(20140807 1557) ((cider (0 6))) "connect to nrepl port and eval .sync.clj." single ((:commit . "471a08df87687a3eab61b3b8bf25a2e0962b5d5b") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk") (:url . "https://github.com/phillord/lein-sync"))])
- (ns-auto-titlebar . [(20181022 2154) ((emacs (24 4))) "Set the MacOS transparent titlebar to match theme" single ((:commit . "b16092e8058af63ad2bc222f166b0aa3cb66bf9d") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "frames") (:url . "https://github.com/purcell/ns-auto-titlebar"))])
- (nsis-mode . [(20190615 1827) nil "NSIS-mode" tar ((:commit . "0a2e6ece2fe682dced4d31688b38bb472a877cdf") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "nsis") (:url . "http://github.com/mlf176f2/nsis-mode"))])
- (nswbuff . [(20230311 154) ((emacs (25 1))) "Quick switching between buffers." single ((:commit . "dfea30e33ddb212a0d537bc927b4bcdf3ebe2cd1") (:authors ("David Ponce" . "david@dponce.com") ("Kahlil (Kal) HODGSON" . "dorge@tpg.com.au") ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:keywords "extensions" "convenience") (:url . "https://github.com/joostkremers/nswbuff"))])
- (nu-mode . [(20190404 2032) ((undo-tree (0 6 5)) (ace-window (0)) (lv (0)) (avy (0)) (which-key (0)) (transpose-frame (0))) "Modern Emacs Prompts Based Keybinding." tar ((:commit . "d5fb4d26d1b0bb383ea2827cc5af5dfb2a269d2b"))])
- (nubox . [(20170619 910) nil "Nubox color theme (dark, light and tty versions)" tar ((:commit . "84aa965f0cb4bde293237e4cc586643d1f662f83") (:authors ("Martijn Terpstra" . "bigmartijn@gmail.com")) (:maintainers ("Martijn Terpstra" . "bigmartijn@gmail.com")) (:maintainer "Martijn Terpstra" . "bigmartijn@gmail.com") (:keywords "faces"))])
- (number . [(20170901 1312) nil "Working with numbers at point." single ((:commit . "bbc278d34dbcca83e70e3be855ec98b23debfb99"))])
- (number-lock . [(20160830 200) nil "Enter symbols on your number keys without pressing shift" single ((:commit . "1ac1b1a269128ddac820df7d45a8d0c703e9c05c") (:authors ("Liu233w" . "wwwlsmcom@outlook.com")) (:maintainers ("Liu233w" . "wwwlsmcom@outlook.com")) (:maintainer "Liu233w" . "wwwlsmcom@outlook.com") (:keywords "convenience") (:url . "https://github.com/Liu233w/number-lock.el"))])
- (numbers . [(20170802 1134) ((emacs (24))) "Display information and trivia about numbers" single ((:commit . "dd02508b788a13b7d4dbcc4923fa23134b783ab3") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "games" "trivia" "maths" "numbers") (:url . "https://github.com/davep/numbers.el"))])
- (numbex . [(20221009 114) ((emacs (26 1))) "Manage numbered examples" single ((:commit . "f3b512453110b0ad0c341159f28f72000fc7731a") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net") (:url . "https://github.com/enricoflor/numbex"))])
- (nummm-mode . [(20131117 1014) nil "Display the number of minor modes instead of their names" single ((:commit . "73b1aa8643d86197c82cd28acdaefcb48a1e0abe") (:authors ("Andreu Gil" . "agpchil@gmail.com")) (:maintainers ("Andreu Gil" . "agpchil@gmail.com")) (:maintainer "Andreu Gil" . "agpchil@gmail.com") (:url . "http://github.com/agpchil/nummm-mode"))])
- (numpydoc . [(20230320 1439) ((emacs (25 1)) (s (1 12 0)) (dash (2 18 0))) "NumPy style docstring insertion" single ((:commit . "f9ec92558a2ac293ab9a2f0611624b6c7d2d5658") (:authors ("Doug Davis" . "ddavis@ddavis.io")) (:maintainers ("Doug Davis" . "ddavis@ddavis.io")) (:maintainer "Doug Davis" . "ddavis@ddavis.io") (:keywords "convenience") (:url . "https://github.com/douglasdavis/numpydoc.el"))])
- (nv-delete-back . [(20170224 1249) ((emacs (24))) "backward delete like modern text editors" single ((:commit . "44d506105989873dc1725e0cfc675925b35c9c98") (:authors ("Nicolas Vaughan <n.vaughan [at] oxon.org>")) (:maintainers ("Nicolas Vaughan <n.vaughan [at] oxon.org>")) (:maintainer "Nicolas Vaughan <n.vaughan [at] oxon.org>") (:keywords "lisp"))])
- (nvm . [(20210826 1000) ((s (1 8 0)) (dash (2 18 0)) (f (0 14 0))) "Manage Node versions within Emacs" single ((:commit . "c214762fd6f539ec3e1fd8198cefbdb4b428b19c") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "node" "nvm") (:url . "http://github.com/rejeep/nvm.el"))])
- (nxml-uxml . [(20220606 1213) ((emacs (25))) "MicroXML support for nXML" single ((:commit . "95bbd0018ab218b9f39f5bf1f1e809f60fbc3edc") (:authors ("Daphne Preston-Kendal")) (:maintainers ("Daphne Preston-Kendal")) (:maintainer "Daphne Preston-Kendal") (:keywords "languages" "xml" "microxml") (:url . "https://gitlab.com/dpk/nxml-uxml"))])
- (nyan-mode . [(20220408 2334) ((emacs (24 1))) "Nyan Cat shows position in current buffer in mode-line" tar ((:commit . "09904af23adb839c6a9c1175349a1fb67f5b4370") (:authors ("Jacek \"TeMPOraL\" Zlydach" . "temporal.pl@gmail.com")) (:maintainers ("Jacek \"TeMPOraL\" Zlydach" . "temporal.pl@gmail.com")) (:maintainer "Jacek \"TeMPOraL\" Zlydach" . "temporal.pl@gmail.com") (:keywords "convenience" "games" "mouse" "multimedia") (:url . "https://github.com/TeMPOraL/nyan-mode/"))])
- (nyx-theme . [(20170910 1307) ((emacs (24))) "Dark theme" single ((:commit . "afe2b8c3b5421b4c292d182dcf77079b278e93d8") (:authors ("Guido Schmidt")) (:maintainers ("Guido Schmidt" . "guido.schmidt.2912@gmail.com")) (:maintainer "Guido Schmidt" . "guido.schmidt.2912@gmail.com") (:keywords "themes" "dark-theme") (:url . "https://github.com/GuidoSchmidt/emacs-nyx-theme"))])
- (oauth . [(20130128 151) nil "Oauth library." tar ((:commit . "ee4744ad76a1560281b0c4944575a3bd598c6458") (:authors ("Peter Sanford <peter AT petersdanceparty.com>")) (:maintainers ("Peter Sanford <peter AT petersdanceparty.com>")) (:maintainer "Peter Sanford <peter AT petersdanceparty.com>") (:keywords "comm"))])
- (oauth2-request . [(20210215 657) ((emacs (26 1)) (oauth2 (0 14)) (request (0 3))) "OAuth2 request package interface" single ((:commit . "86ff048635e002b00e23d6bed2ec6f36c17bca8e") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/oauth2-request.el"))])
- (ob-ada-spark . [(20221114 2007) ((emacs (26 1)) (f (0 20 0))) "Babel functions for Ada & SPARK" single ((:commit . "92978410ca14aa4e84c229a0920ad40be91c35e1") (:authors ("Francesc Rocher")) (:maintainers ("Francesc Rocher")) (:maintainer "Francesc Rocher") (:keywords "languages" "tools" "outlines") (:url . "https://github.com/rocher/ob-ada-spark"))])
- (ob-applescript . [(20190709 1607) nil "Org-babel functions for AppleScript" single ((:commit . "2b07b77b75bd02f2102f62e6d52ffdd0f921439a") (:authors ("Stig Brautaset")) (:maintainers ("Stig Brautaset")) (:maintainer "Stig Brautaset") (:keywords "literate programming" "reproducible research" "mac") (:url . "http://github.com/stig/ob-applescript.el"))])
- (ob-async . [(20210428 2052) ((async (1 9)) (org (9 0 1)) (emacs (24 4)) (dash (2 14 1))) "Asynchronous org-babel src block execution" single ((:commit . "9aac486073f5c356ada20e716571be33a350a982") (:authors ("Andrew Stahlman" . "andrewstahlman@gmail.com")) (:maintainers ("Andrew Stahlman" . "andrewstahlman@gmail.com")) (:maintainer "Andrew Stahlman" . "andrewstahlman@gmail.com") (:keywords "tools") (:url . "https://github.com/astahlman/ob-async"))])
- (ob-axiom . [(20220612 1535) ((emacs (24 2)) (axiom-environment (20171021))) "An org-babel backend for the axiom-environment system" single ((:commit . "01d88daa0c864af9918db5a147fbb5e435dec199") (:authors ("Paul Onions")) (:maintainers ("Paul Onions")) (:maintainer "Paul Onions") (:keywords "axiom" "openaxiom" "fricas"))])
- (ob-bitfield . [(20220401 600) ((emacs (24 4))) "Babel Functions for bitfield" single ((:commit . "abe3d8fe49dc53c4663def689ceb5c0433638652") (:authors ("Gulshan Singh")) (:maintainers ("Gulshan Singh")) (:maintainer "Gulshan Singh") (:url . "https://github.com/gsingh93/ob-bitfield"))])
- (ob-blockdiag . [(20210412 1541) nil "org-babel functions for blockdiag evaluation" single ((:commit . "e997644e81cc67a7092e6e9bb13c66f160491efb") (:authors ("Dmitry Moskowski")) (:maintainers ("Dmitry Moskowski")) (:maintainer "Dmitry Moskowski") (:keywords "tools" "convenience") (:url . "https://github.com/corpix/ob-blockdiag.el"))])
- (ob-browser . [(20170720 1918) ((org (8))) "Render HTML in org-mode blocks." tar ((:commit . "a347d9df1c87b7eb660be8723982c7ad2563631a") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:keywords "org" "babel" "browser" "phantomjs") (:url . "https://github.com/krisajenkins/ob-browser"))])
- (ob-cfengine3 . [(20230226 1954) ((emacs (24 1))) "Org Babel functions for CFEngine 3" single ((:commit . "52aa32fdfa412860837e795d17d50dac237e56e4") (:authors ("Nick Anderson" . "nick@cmdln.org")) (:maintainers ("Nick Anderson" . "nick@cmdln.org")) (:maintainer "Nick Anderson" . "nick@cmdln.org") (:keywords "tools" "convenience") (:url . "https://github.com/nickanderson/ob-cfengine3"))])
- (ob-chatgpt-shell . [(20230426 1826) ((emacs (27 1)) (chatgpt-shell (0 18 1))) "Org babel functions for ChatGPT evaluation" single ((:commit . "25bec6a46105d6cc62b127a9a0f16ff400254e96") (:authors ("Alvaro Ramirez")) (:maintainers ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/chatgpt-shell"))])
- (ob-clojurescript . [(20180406 1828) ((emacs (24 4)) (org (9 0))) "org-babel functions for ClojureScript evaluation" single ((:commit . "17ee1558aa94c7b0246fd03f684884122806cfe7") (:authors ("Larry Staton Jr.")) (:maintainers ("Larry Staton Jr.")) (:maintainer "Larry Staton Jr.") (:keywords "literate programming" "reproducible research") (:url . "https://gitlab.com/statonjr/ob-clojurescript"))])
- (ob-coffee . [(20170725 1424) ((org (8))) "org-babel functions for coffee-script evaluation" tar ((:commit . "7f0b330273e8af7777de87a75fe52a89798e4548") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "org" "babel" "coffee-script") (:url . "http://github.com/zweifisch/ob-coffee"))])
- (ob-coffeescript . [(20180126 719) ((emacs (24 4))) "org-babel functions for coffee-script evaluation, and fully implementation!" single ((:commit . "5a5bb04aea9c2a6eab5b05f90f5c7cb6de7b4261") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:keywords "coffee-script" "literate programming" "reproducible research") (:url . "https://github.com/brantou/ob-coffeescript"))])
- (ob-compile . [(20220830 315) ((emacs (24 4))) "Run compile by org-babel" single ((:commit . "9a16b3dd0f467c091e91944b90a2ca3d646d6617") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:keywords "literate programming" "reproducible" "processes") (:url . "https://github.com/TxGVNN/ob-compile"))])
- (ob-crystal . [(20180126 718) ((emacs (24 3))) "org-babel functions for Crystal evaluation" tar ((:commit . "b3bb27a21a4cefef3f5aeef52718b694bd51245b") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:keywords "crystal" "literate programming" "reproducible research") (:url . "https://github.com/brantou/ob-crystal"))])
- (ob-cypher . [(20200521 936) ((s (1 9 0)) (cypher-mode (0 0 6)) (dash (2 10 0)) (dash-functional (1 2 0))) "query neo4j using cypher in org-mode blocks" single ((:commit . "da9f97339474a48d759fc128cee610c0bc9ae6c0") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "org" "babel" "cypher" "neo4j") (:url . "http://github.com/zweifisch/ob-cypher"))])
- (ob-d2 . [(20230314 352) ((emacs (24 1))) "Org-babel functions for d2" single ((:commit . "5d197f8225a9fb4da997235b231abe30049c6825") (:authors ("Xavier Capaldi")) (:maintainers ("Xavier Capaldi")) (:maintainer "Xavier Capaldi") (:keywords "languages") (:url . "https://github.com/xcapaldi/ob-d2"))])
- (ob-dall-e-shell . [(20230505 1744) ((emacs (27 1)) (dall-e-shell (0 18 1))) "Org babel functions for DALL-E evaluation" single ((:commit . "12806f415ac7b7e5b062294da4d45d3105ddb020") (:authors ("Alvaro Ramirez")) (:maintainers ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/chatgpt-shell"))])
- (ob-dao . [(20170816 1558) ((org (8))) "Org Babel Functions for Dao" single ((:commit . "8c62bd800b1f572860e30be4b72c71fa415a2e31") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "literate programming" "reproducible research" "org" "babel" "dao") (:url . "https://github.com/xuchunyang/ob-dao"))])
- (ob-dart . [(20221201 633) ((emacs (24 4))) "Evaluate Dart source blocks in org-mode" single ((:commit . "f6d5664d5cc8b15e002f6899f8adedcb10ced5f1") (:authors ("Milan Zimmermann")) (:maintainers ("Milan Zimmermann")) (:maintainer "Milan Zimmermann") (:keywords "languages") (:url . "http://github.org/mzimmerm/ob-dart"))])
- (ob-deno . [(20201019 101) ((emacs (26 1))) "Babel Functions for Javascript/TypeScript with Deno" single ((:commit . "e3b06d7662687e402905b9de4ad1d5816e89b842") (:authors ("HIGASHI Taiju")) (:maintainers ("HIGASHI Taiju")) (:maintainer "HIGASHI Taiju") (:keywords "literate programming" "reproducible research" "javascript" "typescript" "tools") (:url . "https://github.com/taiju/ob-deno"))])
- (ob-diagrams . [(20160407 1237) nil "org-babel functions for diagrams evaluation" single ((:commit . "be45815f5596d181592fae709096b7b5f4a71992") (:authors ("Daniel Bergey")) (:maintainers ("Daniel Bergey")) (:maintainer "Daniel Bergey") (:keywords "literate programming" "reproducible research") (:url . "http://orgmode.org"))])
- (ob-drawtiming . [(20230312 1740) ((emacs (24 1)) (org (8 0))) "Functions for drawtiming evaluation in org-babel" single ((:commit . "813736e20ce1c223700c87a6e70e3f126a11e933") (:authors ("Fabien Perez")) (:maintainers ("Fabien Perez")) (:maintainer "Fabien Perez") (:keywords "tools" "multimedia") (:url . "https://github.com/perfab71/ob-drawtiming"))])
- (ob-dsq . [(20220915 1610) ((emacs (27 1))) "Babel functions for the `dsq` CLI tool by Multiprocess Labs" single ((:commit . "e001b263af87993755319caefaf5d19e196e4e1b") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "data" "tools") (:url . "https://github.com/fritzgrabo/ob-dsq"))])
- (ob-elixir . [(20170725 1419) ((org (8))) "org-babel functions for elixir evaluation" single ((:commit . "8990a8178b2f7bd93504a9ab136622aab6e82e32") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "org" "babel" "elixir") (:url . "http://github.com/zweifisch/ob-elixir"))])
- (ob-elm . [(20200528 1857) ((emacs (26 1)) (org (9 3))) "Org-babel functions for elm evaluation" single ((:commit . "d3a9fbc2f56416894c9aed65ea9a20cc1d98f15d") (:authors ("Bonface M. K.")) (:maintainers ("Bonface M. K.")) (:maintainer "Bonface M. K.") (:keywords "languages" "tools") (:url . "https://www.bonfacemunyoki.com"))])
- (ob-elvish . [(20180427 1900) nil "org-babel functions for Elvish shell" single ((:commit . "369181ceae1190bf971c71aebf9fc6133bd98c39") (:authors ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org") (:keywords "literate programming" "elvish" "shell" "languages" "processes" "tools") (:url . "https://github.com/zzamboni/ob-elvish"))])
- (ob-ess-julia . [(20210414 1444) ((ess (20201004 1522)) (julia-mode (0 4))) "Org babel support for Julia language" tar ((:commit . "147e9e7fe55c41dd77171417e92af40db3530b84") (:authors ("Frédéric Santos")) (:maintainers ("Frédéric Santos")) (:maintainer "Frédéric Santos") (:keywords "languages") (:url . "https://github.com/frederic-santos/ob-ess-julia"))])
- (ob-ffuf . [(20221004 1715) ((emacs (28 1))) "Babel functions for ffuf" tar ((:commit . "5310a3e766a252ac34f8cb2307c4e48e982f5611") (:authors ("Daniel Tschertkow")) (:maintainers ("Daniel Tschertkow" . "daniel.tschertkow@posteo.de")) (:maintainer "Daniel Tschertkow" . "daniel.tschertkow@posteo.de") (:keywords "comm" "tools") (:url . "https://github.com/daniel-ts/ob-ffuf"))])
- (ob-fricas . [(20220612 854) ((emacs (26 1)) (frimacs (1 0))) "A FriCAS backend for Org-Babel" single ((:commit . "742268f6f05f418993dc366bbca9ccc931125748") (:authors ("Paul Onions" . "paul.onions@acm.org")) (:maintainers ("Paul Onions" . "paul.onions@acm.org")) (:maintainer "Paul Onions" . "paul.onions@acm.org") (:keywords "fricas" "computer algebra" "extensions" "tools") (:url . "https://github.com/pdo/frimacs"))])
- (ob-fsharp . [(20221113 1904) ((emacs (25)) (fsharp-mode (1 9 8)) (seq (2 22))) "Org-Babel F#" single ((:commit . "a5e893a88d47bd8ea01cf456331ce54910321b47") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainers ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org") (:keywords "literate programming" "reproducible research") (:url . "https://github.com/juergenhoetzel/ob-fsharp"))])
- (ob-git-permalink . [(20220627 46) ((emacs (25 1))) "Import GitHub code given a permalink" single ((:commit . "14224327a6b34c804b0e90d37b80630a80c56c0a") (:authors ("kijima Daigo" . "norimaking777@gmail.com")) (:maintainers ("kijima Daigo" . "norimaking777@gmail.com")) (:maintainer "kijima Daigo" . "norimaking777@gmail.com") (:keywords "docs" "convenience") (:url . "https://github.com/kijimaD/ob-git-permalink"))])
- (ob-go . [(20190201 2040) nil "org-babel functions for go evaluation" tar ((:commit . "2067ed55f4c1d33a43cb3f6948609d240a8915f5") (:authors ("K. Adam Christensen")) (:maintainers ("K. Adam Christensen")) (:maintainer "K. Adam Christensen") (:keywords "golang" "go" "literate programming" "reproducible research") (:url . "http://orgmode.org"))])
- (ob-graphql . [(20201222 1515) ((emacs (24 4)) (graphql-mode (20191024 1221)) (request (0 3 2))) "Org-Babel execution backend for GraphQL source blocks" single ((:commit . "7c35419f9eec5dc44967cbcfa13c7135b9a96bfc") (:authors ("Jeremy Dormitzer" . "jeremy.dormitzer@gmail.com")) (:maintainers ("Jeremy Dormitzer" . "jeremy.dormitzer@gmail.com")) (:maintainer "Jeremy Dormitzer" . "jeremy.dormitzer@gmail.com") (:url . "https://github.com/jdormit/ob-graphql"))])
- (ob-html-chrome . [(20181219 1042) ((emacs (24 4)) (f (0 20 0)) (s (1 7 0))) "HTML code blocks converted to PNG using Chrome" single ((:commit . "7af6e4a24ed0aaf67751bdf752c7ca0ba02bb8d4") (:authors (nil . "Nik Clayton nik@ngo.org.uk")) (:maintainers (nil . "Nik Clayton nik@ngo.org.uk")) (:maintainer nil . "Nik Clayton nik@ngo.org.uk") (:keywords "languages" "org" "org-babel" "chrome" "html") (:url . "http://github.com/nikclayton/ob-html-chrome"))])
- (ob-http . [(20180707 1448) ((s (1 9 0)) (cl-lib (0 5))) "http request in org-mode babel" tar ((:commit . "b1428ea2a63bcb510e7382a1bf5fe82b19c104a7") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-http"))])
- (ob-hy . [(20180702 540) ((emacs (24 4))) "org-babel functions for Hy-lang evaluation" tar ((:commit . "a42ecaf440adc03e279afe43ee5ef6093ddd542a") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainers ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:keywords "hy" "literate programming" "reproducible research") (:url . "https://github.com/brantou/ob-hy"))])
- (ob-ipython . [(20180224 953) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "org-babel functions for IPython evaluation" tar ((:commit . "7147455230841744fb5b95dcbe03320313a77124") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainers ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com") (:keywords "literate programming" "reproducible research") (:url . "http://www.gregsexton.org"))])
- (ob-julia-vterm . [(20221102 756) ((emacs (26 1)) (julia-vterm (0 16)) (queue (0 2))) "Babel functions for Julia that work with julia-vterm" single ((:commit . "e0069ff1d8ebf0be13cc24b980579577b5e343d8") (:authors ("Shigeaki Nishina")) (:maintainers ("Shigeaki Nishina")) (:maintainer "Shigeaki Nishina") (:keywords "julia" "org" "outlines" "literate programming" "reproducible research") (:url . "https://github.com/shg/ob-julia-vterm.el"))])
- (ob-kotlin . [(20180823 1321) ((org (8))) "org-babel functions for kotlin evaluation" single ((:commit . "b817ffb7fd03a25897eb2aba24af2035bbe3cfa8") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "org" "babel" "kotlin") (:url . "http://github.com/zweifisch/ob-kotlin"))])
- (ob-latex-as-png . [(20200629 1013) ((emacs (26 1)) (org (9 1))) "Org-babel functions for latex-as-png evaluation" single ((:commit . "b0c68bdb54741fbee1068654e4eba1962241f271") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com") (:keywords "literate programming" "reproducible research" "org" "convenience") (:url . "https://github.com/alhassy/ob-latex-as-png"))])
- (ob-lfe . [(20170725 1420) ((org (8))) "org-babel functions for lfe evaluation" single ((:commit . "f7780f58e650b4d29dfd834c662b1d354b620a8e") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainers ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:keywords "org" "babel" "lfe" "lisp" "erlang") (:url . "http://github.com/zweifisch/ob-lfe"))])
- (ob-lurk . [(20221122 2058) ((emacs (25 1)) (lurk-mode (0 1 6))) "Evaluate lurk code blocks in org mode" single ((:commit . "bd7cf661ccb31bfbfab542018c361bd79064d4f4") (:maintainers ("Jeff Weiss" . "jweiss@protocol.ai")) (:maintainer "Jeff Weiss" . "jweiss@protocol.ai") (:keywords "languages" "lurk" "lisp") (:url . "http://github.com/lurk-lang/lurk-emacs"))])
- (ob-mermaid . [(20200320 1504) nil "org-babel support for mermaid evaluation" single ((:commit . "cca09b64eff689d8bb15a77de9d4c7fe9845a1f9") (:authors ("Alexei Nunez" . "alexeirnunez@gmail.com")) (:maintainers ("Alexei Nunez" . "alexeirnunez@gmail.com")) (:maintainer "Alexei Nunez" . "alexeirnunez@gmail.com") (:keywords "lisp") (:url . "https://github.com/arnm/ob-mermaid"))])
- (ob-ml-marklogic . [(20190312 1314) nil "org-babel functions for MarkLogic evaluation" tar ((:commit . "d5660ad14f29e17cd26ae92eeb585b24030e9570") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com") (:keywords "marklogic" "xquery" "javascript" "sparql") (:url . "http://github.com/ndw/ob-ml-marklogic"))])
- (ob-mongo . [(20170720 1919) ((org (8))) "Execute mongodb queries within org-mode blocks." single ((:commit . "371bf19c7c10eab2f86424f8db8ab685997eb5aa") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:keywords "org" "babel" "mongo" "mongodb") (:url . "https://github.com/krisajenkins/ob-mongo"))])
- (ob-napkin . [(20200817 1259) ((emacs (26 1))) "Babel functions for Napkin" single ((:commit . "7af5e8af08da8455c489909afbd9528a61f570e7") (:authors ("Hans Jang")) (:maintainers ("Hans Jang")) (:maintainer "Hans Jang") (:keywords "tools" "literate programming" "reproducible research" "napkin" "plantuml") (:url . "https://github.com/pinetr2e/ob-napkin"))])
- (ob-nim . [(20210601 1807) ((cl-lib (0 5))) "Babel Functions for nim" single ((:commit . "315ee36b3ff72437bd65704c456f7ac48205e389") (:authors ("Lompik")) (:maintainers ("Lompik")) (:maintainer "Lompik") (:keywords "literate programming" "reproducible research"))])
- (ob-nix . [(20221224 334) ((emacs (24 1))) "Simple org-babel support for nix" single ((:commit . "76d71b37fb031f25bd52ff9c98b29292ebe0424e") (:authors ("Wilko Meyer" . "w-devel@wmeyer.eu")) (:maintainers ("Wilko Meyer" . "w-devel@wmeyer.eu")) (:maintainer "Wilko Meyer" . "w-devel@wmeyer.eu") (:keywords "lisp" "tools") (:url . "https://codeberg.org/theesm/ob-nix"))])
- (ob-p5js . [(20230103 1356) ((emacs (25 1))) "Support for p5js in org-babel" single ((:commit . "c9f89c8b588cdb0c021a875b8f9fc91be7e39de8") (:authors ("Alejandro Gallo" . "aamsgallo@gmail.com")) (:maintainers ("Alejandro Gallo" . "aamsgallo@gmail.com")) (:maintainer "Alejandro Gallo" . "aamsgallo@gmail.com") (:keywords "javascript" "graphics" "multimedia" "p5js" "processing" "org-babel") (:url . "https://github.com/alejandrogallo/p5js"))])
- (ob-php . [(20220221 1254) ((org (8))) "Execute PHP within org-mode source blocks." single ((:commit . "6ebf7799e9ded1d5114094f46785960a50000614") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "org" "babel" "php") (:url . "https://repo.or.cz/ob-php.git"))])
- (ob-powershell . [(20220314 1359) ((emacs (26 1))) "Run Powershell from org mode source blocks" single ((:commit . "f351429590ed68b26a9c8f9847066ca4205e524b") (:authors ("Rob Kiggen" . "robby.kiggen@essential-it.be")) (:maintainers ("Mois Moshev" . "mois.moshev@bottleshipvfx.com")) (:maintainer "Mois Moshev" . "mois.moshev@bottleshipvfx.com") (:keywords "powershell" "shell" "execute" "outlines" "processes") (:url . "https://github.com/rkiggen/ob-powershell"))])
- (ob-prolog . [(20190410 2130) nil "org-babel functions for prolog evaluation." single ((:commit . "149abd3832fc5a6a1cb01a586a1622a8f25887dc") (:authors ("Bjarte Johansen")) (:maintainers ("Bjarte Johansen")) (:maintainer "Bjarte Johansen") (:keywords "literate programming" "reproducible research") (:url . "https://github.com/ljos/ob-prolog"))])
- (ob-raku . [(20221013 1938) ((emacs (24 1))) "Provides raku support for org-babel" single ((:commit . "21aa77a0ca70b7bef0ecf7d4d9c5272d71f0210c") (:authors ("Tim Van den Langenbergh https://github.com/tmtvl")) (:maintainers ("Tim Van den Langenbergh https://github.com/tmtvl")) (:maintainer "Tim Van den Langenbergh https://github.com/tmtvl") (:keywords "literate programming" "reproducible research" "languages") (:url . "https://github.com/masukomi/ob-raku"))])
- (ob-redis . [(20220221 1249) ((org (8))) "Execute Redis queries within org-mode blocks." single ((:commit . "44c83636ccbea0b3e9838b0180471905c30224c5") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "org" "babel" "redis") (:url . "https://repo.or.cz/ob-redis.git"))])
- (ob-restclient . [(20230301 1951) ((restclient (0))) "org-babel functions for restclient-mode" single ((:commit . "ded3b7eb7b0592328a7a08ecce6f25278cba4a1d") (:authors ("Alf Lervåg")) (:maintainers ("Alf Lervåg")) (:maintainer "Alf Lervåg") (:keywords "literate programming" "reproducible research") (:url . "https://github.com/alf/ob-restclient.el"))])
- (ob-reticulate . [(20210214 2229) ((org (9 4)) (emacs (24 4))) "Babel Functions for reticulate" single ((:commit . "56f4d74f5a2218927aeacce61442b373a0a189e3") (:authors ("Jack Kamm")) (:maintainers ("Jack Kamm")) (:maintainer "Jack Kamm") (:keywords "literate programming" "reproducible research" "r" "python" "statistics" "languages" "outlines" "processes") (:url . "https://github.com/jackkamm/ob-reticulate"))])
- (ob-rust . [(20220824 1923) nil "Org-babel functions for Rust" tar ((:commit . "be059d231fafeb24a658db212a55ccdc55c0c500") (:authors ("Mican Zhang")) (:maintainers ("Mican Zhang")) (:maintainer "Mican Zhang") (:keywords "rust" "languages" "org" "babel") (:url . "https://github.com/micanzhang/ob-rust"))])
- (ob-sagemath . [(20191106 828) ((sage-shell-mode (0 0 8)) (s (1 8 0)) (emacs (24))) "org-babel functions for SageMath evaluation" tar ((:commit . "79645bce0c25a650bae61e550434bed836995dce") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainers ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com") (:keywords "sagemath" "org-babel") (:url . "https://github.com/stakemori/ob-sagemath"))])
- (ob-smiles . [(20220221 1255) ((smiles-mode (0 0 1)) (org (8))) "Org-mode Babel support for SMILES." single ((:commit . "d178f3d4a7e3c1ca9910f0a063d2a3cfd97d8609") (:authors (nil . "John Kitchin [jkitchin@andrew.cmu.edu]")) (:maintainers (nil . "stardiviner [numbchild@gmail.com]")) (:maintainer nil . "stardiviner [numbchild@gmail.com]") (:keywords "org" "babel" "smiles") (:url . "https://repo.or.cz/ob-smiles.git"))])
- (ob-sml . [(20130829 1843) ((sml-mode (6 4))) "org-babel functions for template evaluation" single ((:commit . "958165c92b6cff6cada5c85c8ae5887806b8451b") (:authors ("David Nolen")) (:maintainers ("David Nolen")) (:maintainer "David Nolen") (:keywords "literate programming" "reproducible research") (:url . "http://orgmode.org"))])
- (ob-solidity . [(20220213 1910) ((emacs (24 4)) (solidity-mode (0 1 10))) "Org-babel functions for solidity evaluation" single ((:commit . "7e3e6cb2d7ec9269514e80248c7ec85c04dbbf89") (:authors ("hrkrshnn")) (:maintainers ("hrkrshnn")) (:maintainer "hrkrshnn") (:keywords "solidity" "literate programming" "reproducible research" "languages") (:url . "https://github.com/hrkrshnn/ob-solidity"))])
- (ob-spice . [(20221030 217) ((spice-mode (0 0 1)) (org (8))) "org-babel functions for spice evaluation" single ((:commit . "4d3ab60c2012aba2a5bd96a4d42dfeea0be6edac") (:authors ("Tiago Oliveira Weber")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:url . "https://repo.or.cz/ob-spice.git"))])
- (ob-sql-mode . [(20190421 1539) ((emacs (24 4))) "SQL code blocks evaluated by sql-mode" single ((:commit . "b31a016585324ad91f1742ff6205bcb76f3ece6e") (:authors (nil . "Nik Clayton nik@google.com")) (:maintainers (nil . "Nik Clayton nik@google.com")) (:maintainer nil . "Nik Clayton nik@google.com") (:keywords "languages" "org" "org-babel" "sql") (:url . "http://github.com/nikclayton/ob-sql-mode"))])
- (ob-svgbob . [(20190911 300) ((emacs (24))) "Babel Functions for svgbob" single ((:commit . "5747f96fb4fdb8711546b3313df9412177eb3c1a") (:authors ("Marcio Giaxa" . "i@mgxm.me")) (:maintainers ("Marcio Giaxa" . "i@mgxm.me")) (:maintainer "Marcio Giaxa" . "i@mgxm.me") (:keywords "tools" "files") (:url . "https://github.com/mgxm/ob-svgbob"))])
- (ob-swift . [(20170921 1325) ((org (8))) "org-babel functions for swift evaluation" single ((:commit . "ed478ddbbe41ce5373efde06b4dd0c3663c9055f") (:authors ("Feng Zhou" . "zf.pascal@gmail.com")) (:maintainers ("Feng Zhou" . "zf.pascal@gmail.com")) (:maintainer "Feng Zhou" . "zf.pascal@gmail.com") (:keywords "org" "babel" "swift") (:url . "http://github.com/zweifisch/ob-swift"))])
- (ob-swiftui . [(20230421 1542) ((emacs (25 1)) (swift-mode (8 2 0)) (org (9 2 0))) "Org babel functions for SwiftUI evaluation" single ((:commit . "da6bd8d13da6bf6b949c4c9b1d4754fecb0345c7") (:authors ("Alvaro Ramirez")) (:maintainers ("Alvaro Ramirez")) (:maintainer "Alvaro Ramirez") (:url . "https://github.com/xenodium/ob-swiftui"))])
- (ob-tmux . [(20221005 2025) ((emacs (25 1)) (seq (2 3)) (s (1 9 0))) "Babel Support for Interactive Terminal" single ((:commit . "e672ca5a9534b9f33ed7aa5cd21b88189ccc5697") (:authors ("Allard Hendriksen")) (:maintainers ("Allard Hendriksen")) (:maintainer "Allard Hendriksen") (:keywords "literate programming" "interactive shell" "tmux") (:url . "https://github.com/ahendriksen/ob-tmux"))])
- (ob-translate . [(20170720 1919) ((google-translate (0 11)) (org (8))) "Translation of text blocks in org-mode." single ((:commit . "9d9054a51bafd5a29a8135964069b4fa3a80b169") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:keywords "org" "babel" "translate" "translation") (:url . "https://github.com/krisajenkins/ob-translate"))])
- (ob-typescript . [(20190910 946) ((emacs (24)) (org (8 0))) "org-babel functions for typescript evaluation" single ((:commit . "85cef0317d70b6b5f170b0fd30605850172f61b0") (:authors ("KURASHIKI Satoru")) (:maintainers ("KURASHIKI Satoru")) (:maintainer "KURASHIKI Satoru") (:keywords "literate programming" "reproducible research" "typescript") (:url . "https://github.com/lurdan/ob-typescript"))])
- (ob-uart . [(20170521 858) nil "org-babel support for UART communication" single ((:commit . "90daeac90a9e75c20cdcf71234c67b812110c50e") (:authors ("Andreas Müller")) (:maintainers ("Andreas Müller")) (:maintainer "Andreas Müller") (:keywords "tools" "comm" "org-mode" "uart" "literate programming" "reproducible development") (:url . "https://www.0x7.ch"))])
- (oberon . [(20120715 909) nil "Major mode for editing Oberon/Oberon-2 program texts" single ((:commit . "fb57d18ce13835a8a69b6bafecdd9193ca9a59a3") (:authors ("Karl Landström" . "karl@karllandstrom.se")) (:maintainers ("Karl Landström" . "karl@karllandstrom.se")) (:maintainer "Karl Landström" . "karl@karllandstrom.se") (:keywords "oberon" "oberon-2" "languages" "oop"))])
- (obfusurl . [(20170809 1524) ((cl-lib (0 5))) "Obfuscate URLs so they aren't spoilers" single ((:commit . "7a5a41905000ce2ec1fd72509a5567e5fd9f47e5") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "convenience" "web" "text") (:url . "https://github.com/davep/obfusurl.el"))])
- (objc-font-lock . [(20141021 1822) nil "Highlight Objective-C method calls." single ((:commit . "34b457d577f97ca94b8792d025f9a909c7610612") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "languages" "faces") (:url . "https://github.com/Lindydancer/objc-font-lock"))])
- (objed . [(20200911 1435) ((emacs (25)) (cl-lib (0 5))) "Navigate and edit text objects." tar ((:commit . "e93dda73bd932563d35e76f1c2f1b50895b640cf") (:authors ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainers ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainer "Clemens Radermacher" . "clemera@posteo.net") (:keywords "convenience") (:url . "https://github.com/clemera/objed"))])
- (oblivion-theme . [(20230415 551) ((emacs (24 1))) "A port of GEdit oblivion theme" single ((:commit . "f0b180eeb5ed19bacbce9d6a39e3123f4751f54b") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-oblivion-theme"))])
- (obsidian . [(20230420 1111) ((emacs (27 2)) (s (1 12 0)) (dash (2 13)) (markdown-mode (2 5)) (elgrep (1 0 0)) (yaml (0 5 1))) "Obsidian Notes interface" single ((:commit . "1214758b99037884c4c062e6d298b417200444cd") (:authors ("Mykhaylo Bilyanskyy")) (:maintainers ("Mykhaylo Bilyanskyy")) (:maintainer "Mykhaylo Bilyanskyy") (:keywords "obsidian" "pkm" "convenience") (:url . "https://github.com./licht1stein/obsidian.el"))])
- (obsidian-theme . [(20170719 948) nil "port of the eclipse obsidian theme" single ((:commit . "f45efb2ebe9942466c1db6abbe2d0e6847b785ea") (:authors ("martin haesler")) (:maintainers ("martin haesler")) (:maintainer "martin haesler") (:url . "http://github.com/mswift42/obsidian-theme"))])
- (ocamlformat . [(20230420 1458) ((emacs (24 3))) "Utility functions to format ocaml code" single ((:commit . "ee9cdd7e19298dc025d77212cab11b3d97b9972f") (:keywords "languages" "ocaml") (:url . "https://github.com/ocaml-ppx/ocamlformat"))])
- (occidental-theme . [(20130312 1958) nil "Custom theme for faces based on Adwaita" single ((:commit . "fd2db7256d4f78c43d99c3cddb1c39106d479816") (:authors ("William Stevenson" . "yhvh2000@gmail.com") ("Erik Timan" . "dev@timan.info")) (:maintainers ("William Stevenson" . "yhvh2000@gmail.com")) (:maintainer "William Stevenson" . "yhvh2000@gmail.com") (:url . "http://github.com/olcai/occidental-theme"))])
- (occur-context-resize . [(20210121 50) nil "dynamically resize context around matches in occur-mode" single ((:commit . "9d62a5b5c39ab7921dfc12dd0ab139b38dd16582") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:keywords "matching") (:url . "https://github.com/dgtized/occur-context-resize.el"))])
- (occur-x . [(20130610 1343) nil "Extra functionality for occur" single ((:commit . "352f5fab207d8a1d3dd048073ff127a83e97c82b") (:authors ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainers ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainer "Juan-Leon Lahoz" . "juanleon1@gmail.com") (:keywords "occur" "search" "convenience"))])
- (oceanic-theme . [(20161015 819) nil "Oceanic theme." single ((:commit . "00288f6a5245eb001dc123e36af1820eb3cbe985") (:authors ("Tengfei Guo")) (:maintainers ("Tengfei Guo")) (:maintainer "Tengfei Guo") (:keywords "oceanic" "color" "theme") (:url . "https://github.com/terry3/oceanic-theme"))])
- (ocodo-svg-modelines . [(20150516 1419) ((svg-mode-line-themes (0))) "A collection of beautiful SVG modelines" tar ((:commit . "a6c5b9a7536c7a8fa3bd9d9dafdebc8d99903018") (:authors ("ocodo" . "what.is.ocodo@gmail.com")) (:maintainer "ocodo" . "what.is.ocodo@gmail.com") (:url . "https://github.com/ocodo/ocodo-svg-modelines"))])
- (ocp-indent . [(20211019 907) nil "automatic indentation with ocp-indent" single ((:commit . "7c4d434132cebc15a8213c8be9e7323692eb0a2b") (:keywords "ocaml" "languages") (:url . "http://www.typerex.org/ocp-indent.html"))])
- (octicons . [(20151101 340) ((cl-lib (0 5))) "octicons utility" tar ((:commit . "229286a6166dba8ddabc8c4d338798c6cd3cf67d") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-octicons"))])
- (octo-mode . [(20161008 1229) ((emacs (24))) "Major mode for Octo assembly language" single ((:commit . "4b2ed4a61674f73a6ccd390b5ae123474bd0c977") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:keywords "languages") (:url . "https://github.com/cryon/octo-mode"))])
- (octopress . [(20190123 107) nil "A lightweight wrapper for Jekyll and Octopress." tar ((:commit . "f2c92d5420f14fc9167c7de1873836510e652de2") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainers ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:keywords "octopress" "blog") (:url . "https://github.com/aaronbieber/octopress.el"))])
- (oer-reveal . [(20230403 1322) ((emacs (24 4)) (org-re-reveal (3 1 0))) "OER with reveal.js, plugins, and org-re-reveal" tar ((:commit . "f7b0d952c9ab0969dbb9c003df4f298ec9d3ee79") (:authors ("Jens Lechtenbörger")) (:maintainers ("Jens Lechtenbörger")) (:maintainer "Jens Lechtenbörger") (:keywords "hypermedia" "tools" "slideshow" "presentation" "oer") (:url . "https://gitlab.com/oer/oer-reveal"))])
- (offlineimap . [(20150916 1158) nil "Run OfflineIMAP from Emacs" single ((:commit . "cc3e067e6237a1eb7b21c575a41683b1febb47f1") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info") (:url . "http://julien.danjou.info/offlineimap-el.html"))])
- (oj . [(20230212 148) ((emacs (26 1)) (quickrun (2 2))) "Competitive programming tools client for AtCoder, Codeforces" single ((:commit . "6d586cb108c642bc166c64df113e03193f4d1495") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/oj.el"))])
- (ol-notmuch . [(20230212 2013) ((emacs (25 1)) (compat (29 1 3 4)) (notmuch (0 32)) (org (9 4 5))) "Links to notmuch messages" single ((:commit . "ee3646627e47312a0c6ab0a5f6eba3baf8b20cb6") (:authors ("Matthieu Lemerre" . "racin@free.fr")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "hypermedia" "mail") (:url . "https://git.sr.ht/~tarsius/ol-notmuch"))])
- (ol-tmsu . [(20230207 1457) ((emacs (28 1)) (tmsu (0 9))) "Org-mode links to TMSU queries" single ((:commit . "9672d193a51f2848696445528de757aa21b2b686") (:authors ("Wojciech Siewierski")) (:maintainers ("Wojciech Siewierski")) (:maintainer "Wojciech Siewierski") (:keywords "files" "outlines" "hypermedia") (:url . "https://github.com/vifon/tmsu.el"))])
- (olc . [(20200818 1221) ((emacs (25 1))) "Open location code library" tar ((:commit . "d2dc62dbc3cf6460cc12bd96857a988bc80ac37e") (:authors ("David Byers" . "david.byers@liu.se")) (:maintainers ("David Byers" . "david.byers@liu.se")) (:maintainer "David Byers" . "david.byers@liu.se") (:keywords "extensions" "lisp") (:url . "https://gitlab.liu.se/davby02/olc"))])
- (old-norse-input . [(20170816 1842) ((emacs (24))) "An input method for Old Norse" single ((:commit . "c2e21ee72c3768e9152aff6baf12a19cde1d0c53") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk") (:keywords "languages") (:url . "https://github.com/david-christiansen/emacs-old-norse-input"))])
- (oldlace-theme . [(20150705 1300) ((emacs (24))) "Emacs 24 theme with an 'oldlace' background." single ((:commit . "9ecbef999b63021c967846a3c80b3fbfc81f1290") (:authors ("martin haesler")) (:maintainers ("martin haesler")) (:maintainer "martin haesler"))])
- (olivetti . [(20220330 635) ((emacs (24 4))) "Minor mode for a nice writing environment" single ((:commit . "8d287a80c5e3d72ac01b56c8afe60b01f18500b4") (:authors ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainers ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainer "Paul W. Rankin" . "pwr@bydasein.com") (:keywords "wp" "text") (:url . "https://github.com/rnkn/olivetti"))])
- (om-mode . [(20140915 2110) nil "Insert Om component template with life cycle." single ((:commit . "5a6b380f8d1293a865d8a37aa4816d7412c512ce") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com") (:keywords "clojurescript"))])
- (omni-kill . [(20171016 2140) nil "Kill all the things" single ((:commit . "904549c8fd6ac3cf22b5d7111ca8944e179cffea") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:keywords "convenience" "editing" "tools"))])
- (omni-log . [(20200304 2229) ((emacs (24)) (ht (2 0)) (s (1 6 1)) (dash (2 13 0))) "Logging utilities" tar ((:commit . "0a240660ccdd0b6588b4e3c322743b5ab1161338") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/AdrieanKhisbe/omni-log.el"))])
- (omni-quotes . [(20200304 2341) ((dash (2 8)) (omni-log (0 4 0)) (f (0 19 0)) (s (1 11 0)) (ht (2 1))) "Random quotes displayer" tar ((:commit . "cfc7b7f01628a5d57384820d1096de4541e67cdf") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:keywords "convenience") (:url . "https://github.com/AdrieanKhisbe/omni-quotes.el"))])
- (omni-scratch . [(20171009 2151) nil "Easy and mode-specific draft buffers" single ((:commit . "636374c59c7d33c2f72c97ad8ba9fb4854f2324d") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:keywords "convenience" "languages" "tools") (:url . "https://github.com/AdrieanKhisbe/omni-scratch.el"))])
- (omni-tags . [(20170426 2109) ((pcre2el (1 7)) (cl-lib (0 5))) "Highlight and Actions for 'Tags'" tar ((:commit . "8f0f6c302fab900b7681e5c039f90850cbbabd33") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainers ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:keywords "convenience") (:url . "http://github.com/AdrieanKhisbe/omni-tags.el"))])
- (omnibox . [(20180423 49) ((emacs (26 1)) (dash (2 13)) (frame-local (0 0 1))) "Selection package" single ((:commit . "8ee75c71c20c438ebc43ba24ef6f543633d118f3") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainers ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is") (:keywords "completion" "selection" "convenience" "frames") (:url . "https://github.com/sebastiencs/omnibox"))])
- (omnisharp . [(20210725 1955) ((emacs (24 4)) (flycheck (30)) (dash (2 12 0)) (auto-complete (1 4)) (popup (0 5 1)) (csharp-mode (0 8 7)) (cl-lib (0 5)) (s (1 10 0)) (f (0 19 0))) "Omnicompletion (intellisense) and more for C#" tar ((:commit . "c222e970998d796bdfd49e45ed789e2fd1a9da03") (:authors ("Mika Vilpas and others")) (:maintainers ("Mika Vilpas and others")) (:maintainer "Mika Vilpas and others") (:keywords "languages" "csharp" "c#" "ide" "auto-complete" "intellisense") (:url . "https://github.com/Omnisharp/omnisharp-emacs"))])
- (omtose-phellack-theme . [(20161111 2120) nil "A dark theme, with cold bluish touch." tar ((:commit . "66f99633e199e65bd28641626435e8e59246529a"))])
- (on-parens . [(20210928 1913) ((dash (2 10 0)) (emacs (24)) (evil (1 1 6)) (smartparens (1 6 3))) "smartparens wrapper to fit with evil-mode/vim normal-state" single ((:commit . "b8ee8cea45c9b34820fcb951f522f13e3736d216") (:authors ("William G Hatch")) (:maintainers ("William G Hatch")) (:maintainer "William G Hatch") (:keywords "evil" "smartparens"))])
- (on-screen . [(20160302 950) ((cl-lib (0))) "guide your eyes while scrolling" single ((:commit . "206468aa4de299ad26c2db12b757f5ad7290912f") (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainers ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") (:keywords "convenience") (:url . "https://github.com/michael-heerdegen/on-screen.el"))])
- (one-themes . [(20200720 1444) ((emacs (24))) "One Colorscheme" tar ((:commit . "16aa7318490c0f47aca328a8c6cfe3267a80bb76") (:authors ("Balaji Sivaraman" . "balaji@balajisivaraman.com")) (:maintainers ("Balaji Sivaraman" . "balaji@balajisivaraman.com")) (:maintainer "Balaji Sivaraman" . "balaji@balajisivaraman.com") (:url . "http://github.com/balajisivaraman/emacs-one-themes"))])
- (one-time-pad-encrypt . [(20160329 1513) nil "One time pad encryption within file" single ((:commit . "87cc1f124024ce3d277299ca0ac703f182937d9f") (:authors ("Garvin Guan" . "garvin.guan@gmail.com")) (:maintainers ("Garvin Guan" . "garvin.guan@gmail.com")) (:maintainer "Garvin Guan" . "garvin.guan@gmail.com") (:keywords "convenience") (:url . "https://github.com/garvinguan/emacs-one-time-pad/"))])
- (opam . [(20150719 1220) ((emacs (24 1))) "OPAM tools" single ((:commit . "4d589de5765728f56af7078fae328b6792de8600") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "convenience") (:url . "https://github.com/lunaryorn/opam.el"))])
- (opam-switch-mode . [(20221109 2306) ((emacs (25 1))) "Select OCaml opam switches via a menu" single ((:commit . "dea35145a39b80b7d1df217395928d76abab0b13") (:maintainers (nil . "proof-general-maintainers@groupes.renater.fr")) (:maintainer nil . "proof-general-maintainers@groupes.renater.fr") (:url . "https://github.com/ProofGeneral/opam-switch-mode"))])
- (open-in-msvs . [(20170123 2228) nil "Open current file:line:column in Microsoft Visual Studio" tar ((:commit . "e0d071c83188ad5db8f3297d6ce784b4ed554a04") (:authors ("Evgeny Panasyuk")) (:maintainers ("Evgeny Panasyuk")) (:maintainer "Evgeny Panasyuk") (:keywords "convenience" "usability" "integration" "visual studio" "msvs" "ide") (:url . "https://github.com/evgeny-panasyuk/open-in-msvs"))])
- (open-junk-file . [(20161210 1114) nil "Open a junk (memo) file to try-and-error" single ((:commit . "558bec7372b0fed4c4cb6074ab906535fae615bd") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "convenience" "tools") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/open-junk-file.el"))])
- (opencc . [(20170722 816) ((emacs (24 4))) "中文简ç¹è½¬æ¢ <-> 中文簡ç¹è½‰æ› (Convert Chinese with OpenCC)" single ((:commit . "959d9ffbae095752182026e3bd9b8fd61178c39f") (:authors ("å¾æ˜¥é˜³" . "mail@xuchunyang.me")) (:maintainers ("å¾æ˜¥é˜³" . "mail@xuchunyang.me")) (:maintainer "å¾æ˜¥é˜³" . "mail@xuchunyang.me") (:keywords "chinese") (:url . "https://github.com/xuchunyang/emacs-opencc"))])
- (opencl-mode . [(20201025 1656) nil "Syntax coloring for opencl kernels" single ((:commit . "15091eff92c33ee0d1ece40eb99299ef79fee92d") (:authors ("Salmane Bah" . "salmane.bah@u-bordeaux.fr")) (:maintainers ("Salmane Bah" . "salmane.bah@u-bordeaux.fr")) (:maintainer "Salmane Bah" . "salmane.bah@u-bordeaux.fr") (:keywords "c" "opencl") (:url . "https://github.com/salmanebah/opencl-mode"))])
- (opener . [(20161207 1810) ((request (0 2 0)) (emacs (24)) (cl-lib (0 5))) "opening urls as buffers" tar ((:commit . "c384f67278046fdcd220275fdd212ab85672cbeb") (:authors ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainers ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainer "Tim Reddehase" . "tr@rightsrestricted.com") (:keywords "url" "http" "files") (:url . "https://github.com/0robustus1/opener.el"))])
- (openfoam . [(20210516 1015) ((emacs (25 1))) "OpenFOAM files and directories" single ((:commit . "e2c899009a9df412bf9f360492b1072eb6f1513f") (:authors ("Ralph Schleicher" . "rs@ralph-schleicher.de")) (:maintainers ("Ralph Schleicher" . "rs@ralph-schleicher.de")) (:maintainer "Ralph Schleicher" . "rs@ralph-schleicher.de") (:keywords "languages") (:url . "https://github.com/ralph-schleicher/emacs-openfoam"))])
- (opensource . [(20160926 1616) ((s (1 11 0)) (dash (2 12 1)) (pkg-info (0 6 0)) (request (0 2 0))) "Client for Opensource API" tar ((:commit . "42742d5f1b9590acff7f05ee0094e3a80f4f7171") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "opensource") (:url . "https://github.com/OpenSourceOrg/el-opensourceorg"))])
- (openstack-cgit-browse-file . [(20130819 927) nil "Browse the current file in OpenStack cgit" single ((:commit . "244219288b9aef41155044697bb114b7af83ab8f") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainers ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com") (:keywords "convenience" "vc" "git" "cgit" "gerrit" "openstack") (:url . "https://github.com/chmouel/openstack-cgit-browse-file"))])
- (opensub . [(20230417 1635) ((emacs (25 1))) "Search and download from open-subtitles" single ((:commit . "0faef3dad6fc9c0eda1db1b237e6f66a8f411b01") (:authors ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainers ("Daniel Fleischer" . "danflscr@gmail.com")) (:maintainer "Daniel Fleischer" . "danflscr@gmail.com") (:keywords "multimedia") (:url . "https://github.com/danielfleischer/opensub"))])
- (openwith . [(20120531 2136) nil "Open files with external programs" single ((:commit . "dd1f0e2a527535086c2b0ae12031dbf3ab7c5fd7") (:authors ("Markus Triska" . "markus.triska@gmx.at")) (:maintainers ("Markus Triska" . "markus.triska@gmx.at")) (:maintainer "Markus Triska" . "markus.triska@gmx.at") (:keywords "files" "processes") (:url . "https://bitbucket.org/jpkotta/openwith"))])
- (operate-on-number . [(20150707 623) nil "Operate on number at point with arithmetic functions" single ((:commit . "ceb3be565a29326c1098244fac0c50606723a56e") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "editing") (:url . "https://github.com/knu/operate-on-number.el"))])
- (orangey-bits-theme . [(20220822 324) ((autothemer (0 2)) (emacs (27 1))) "A Theme with smashing orangey bits" single ((:commit . "533856d399cb4098300bcaf4a2d20920395746f8") (:url . "http://github.com/emacsfodder/emacs-theme-orangey-bits"))])
- (orca . [(20220828 4) ((emacs (24 3)) (zoutline (0 1 0))) "Org Capture" single ((:commit . "0687f416a5573f63b691d384454f5a793266ed97") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "org" "convenience") (:url . "https://github.com/abo-abo/orca"))])
- (orderless . [(20230219 1648) ((emacs (26 1))) "Completion style for matching regexps in any order" tar ((:commit . "e6784026717a8a6a7dcd0bf31fd3414f148c542e") (:authors ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainers ("Omar Antolín Camarena" . "omar@matem.unam.mx")) (:maintainer "Omar Antolín Camarena" . "omar@matem.unam.mx") (:keywords "extensions") (:url . "https://github.com/oantolin/orderless"))])
- (ordinal . [(20210519 1442) ((emacs (24 3))) "Convert number to ordinal number notation" single ((:commit . "a7f378306290b6807fb6b87cee3ef79b31cec711") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "lisp") (:url . "https://github.com/zonuexe/ordinal.el"))])
- (org-ac . [(20170401 1307) ((auto-complete-pcmp (0 0 1)) (log4e (0 2 0)) (yaxception (0 1))) "Some auto-complete sources for org-mode" single ((:commit . "41e3ef8e4039619d0370c23c66730b3b2e9e32ed") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "org" "completion") (:url . "https://github.com/aki2o/org-ac"))])
- (org-agenda-property . [(20140626 2116) ((emacs (24 2))) "Display org properties in the agenda buffer." single ((:commit . "01afb36072eb27846eb09310dfca7991dbae831e") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "calendar") (:url . "http://github.com/Bruce-Connor/org-agenda-property"))])
- (org-ai . [(20230418 100) ((emacs (28 2))) "Your AI assistant with ChatGPT, DALL-E, Whisper" tar ((:commit . "a3daf1be29839752979fa983d3673e3321c197e1") (:authors ("Robert Krahn" . "robert@kra.hn")) (:maintainers ("Robert Krahn" . "robert@kra.hn")) (:maintainer "Robert Krahn" . "robert@kra.hn") (:url . "https://github.com/rksm/org-ai"))])
- (org-alert . [(20220721 1721) ((org (9 0)) (alert (1 2))) "Notify org deadlines via notify-send" single ((:commit . "f1801e061722843329b95409957c7dbd5cc223e9") (:authors ("Stephen Pegoraro" . "spegoraro@tutive.com")) (:maintainers ("Stephen Pegoraro" . "spegoraro@tutive.com")) (:maintainer "Stephen Pegoraro" . "spegoraro@tutive.com") (:keywords "org" "org-mode" "notify" "notifications" "calendar") (:url . "https://github.com/spegoraro/org-alert"))])
- (org-analyzer . [(20191001 1717) nil "org-analyzer is a tool that extracts time tracking data from org files." tar ((:commit . "19da62aa4dcf1090be8f574f6f2d4c7e116163a8") (:authors ("Robert Krahn" . "robert@kra.hn")) (:maintainer "Robert Krahn" . "robert@kra.hn") (:keywords "calendar") (:url . "https://github.com/rksm/clj-org-analyzer"))])
- (org-anki . [(20230117 727) ((emacs (27 1)) (request (0 3 2)) (dash (2 17)) (promise (1 1))) "Synchronize org-mode entries to Anki" single ((:commit . "f10feec7bd70916808a3cd8b4c3e3c7f65764acf") (:authors ("Markus Läll" . "markus.l2ll@gmail.com")) (:maintainers ("Markus Läll" . "markus.l2ll@gmail.com")) (:maintainer "Markus Läll" . "markus.l2ll@gmail.com") (:keywords "outlines" "flashcards" "memory") (:url . "https://github.com/eyeinsky/org-anki"))])
- (org-appear . [(20220617 2355) ((emacs (25 1)) (org (9 3))) "Auto-toggle Org elements" single ((:commit . "60ba267c5da336e75e603f8c7ab3f44e6f4e4dac") (:authors ("Alice Istleyeva" . "awth13@gmail.com")) (:maintainers ("Alice Istleyeva" . "awth13@gmail.com")) (:maintainer "Alice Istleyeva" . "awth13@gmail.com") (:url . "https://github.com/awth13/org-appear"))])
- (org-arbeitszeit . [(20220816 1447) ((emacs (27 1))) "Calculate your worktime" single ((:commit . "2598fb45a182d22e6d7579d55139db80e8af0b02") (:authors ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainers ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainer "Benjamin Kästner" . "benjamin.kaestner@gmail.com") (:keywords "tools" "org" "calendar" "convenience") (:url . "https://github.com/bkaestner/org-arbeitszeit"))])
- (org-assistant . [(20230504 501) ((emacs (28 1)) (uuidgen (1 2)) (deferred (0 5 1)) (s (1 12 0)) (dash (2 19 1)) (ht (0 9))) "Org babel extension for Chat Assistant APIs" single ((:commit . "d3e948de35a0ed4feb051f943ce518b99af3c368") (:authors ("Tyler Dodge" . "tyler@tdodge.consulting")) (:maintainers ("Tyler Dodge" . "tyler@tdodge.consulting")) (:maintainer "Tyler Dodge" . "tyler@tdodge.consulting") (:keywords "convenience") (:url . "https://github.com/tyler-dodge/org-assistant"))])
- (org-attach-screenshot . [(20210221 1336) ((emacs (24 3))) "Screenshots integrated with org attachment dirs" single ((:commit . "14240909b64605fa966955a14c6045df0f402367") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainers ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch") (:keywords "org" "multimedia") (:url . "https://github.com/dfeich/org-screenshot"))])
- (org-auto-expand . [(20210923 243) ((emacs (26 1))) "Automatically expand certain headings" single ((:commit . "dfb909d9fd0a658df8a05613a5b95b645b855344") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience" "outlines" "org") (:url . "https://github.com/alphapapa/org-auto-expand"))])
- (org-auto-tangle . [(20220812 2327) ((emacs (24 1)) (async (1 9 3))) "Automatically and Asynchronously tangles org files on save" single ((:commit . "2494a6f78c9db5311123abc7cad119851a29a55c") (:authors ("Yilkal Argaw" . "yilkalargawworkneh@gmail.com")) (:maintainers ("Yilkal Argaw" . "yilkalargawworkneh@gmail.com")) (:maintainer "Yilkal Argaw" . "yilkalargawworkneh@gmail.com") (:keywords "outlines") (:url . "https://github.com/yilkalargaw/org-auto-tangle"))])
- (org-autolist . [(20220530 1620) nil "Improved list management in org-mode" single ((:commit . "da3a45f95f2e9f7281d533d1e5cec1764ae26a9c") (:authors ("Calvin Young")) (:maintainers ("Calvin Young")) (:maintainer "Calvin Young") (:keywords "lists" "checklists" "org-mode") (:url . "https://github.com/calvinwyoung/org-autolist"))])
- (org-babel-eval-in-repl . [(20201206 1540) ((eval-in-repl (0 9 2)) (matlab-mode (3 3 6)) (ess (16 10)) (emacs (24))) "Eval org-mode babel code blocks in various REPLs." tar ((:commit . "3591f062873de2d64cc6f83b3555d030506e6ee7") (:authors ("Takeshi Teshima" . "diadochos.developer@gmail.com")) (:maintainers ("Takeshi Teshima" . "diadochos.developer@gmail.com")) (:maintainer "Takeshi Teshima" . "diadochos.developer@gmail.com") (:keywords "literate programming" "reproducible research" "async execution") (:url . "https://github.com/diadochos/org-babel-eval-in-repl"))])
- (org-beautify-theme . [(20170908 2218) nil "A sub-theme to make org-mode more beautiful." single ((:commit . "df6a1114fda313e1689363e196c8284fbe2a2738") (:authors ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainers ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainer "Jonathan Arkell" . "jonnay@jonnay.net") (:keywords "org" "theme"))])
- (org-board . [(20230408 1041) nil "bookmarking and web archival system for Org mode." single ((:commit . "500fe02bc114e5b535a2eb2ab73954d79428168f") (:authors ("Charles A. Roelli " . "charles@aurox.ch")) (:maintainers ("Charles A. Roelli " . "charles@aurox.ch")) (:maintainer "Charles A. Roelli " . "charles@aurox.ch") (:keywords "org" "bookmarks" "archives") (:url . "https://github.com/scallywag/org-board"))])
- (org-bookmark-heading . [(20230426 1417) ((emacs (24 4))) "Emacs bookmark support for Org mode" single ((:commit . "1135985bad6b8e736939128d4ad04941f6ed7130") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines") (:url . "http://github.com/alphapapa/org-bookmark-heading"))])
- (org-bookmarks-extractor . [(20220829 146) ((emacs (25 1))) "Extract bookmarks from Org mode" single ((:commit . "26d810d4d58de1f64f0bbd649e13816f96663d73") (:authors ("Xuqing Jia" . "jxq@jxq.me")) (:maintainers ("Xuqing Jia" . "jxq@jxq.me")) (:maintainer "Xuqing Jia" . "jxq@jxq.me") (:keywords "convenience" "org") (:url . "https://github.com/jxq0/org-bookmarks-extractor"))])
- (org-books . [(20210408 1913) ((enlive (0 0 1)) (s (1 11 0)) (helm (2 9 2)) (helm-org (1 0)) (dash (2 14 1)) (org (9 3)) (emacs (25))) "Reading list management with Org mode and helm" single ((:commit . "9f4ec4a981bfc5eebff993c3ad49a4bed26aebd1") (:authors ("Abhinav Tushar" . "abhinav@lepisma.xyz")) (:maintainers ("Abhinav Tushar" . "abhinav@lepisma.xyz")) (:maintainer "Abhinav Tushar" . "abhinav@lepisma.xyz") (:keywords "outlines") (:url . "https://github.com/lepisma/org-books"))])
- (org-brain . [(20230217 1908) ((emacs (25 1)) (org (9 2))) "Org-mode concept mapping" single ((:commit . "2bad7732aae1a3051e2a14de2e30f970bbe43c25") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainers ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com") (:keywords "outlines" "hypermedia") (:url . "http://github.com/Kungsgeten/org-brain"))])
- (org-bullets . [(20200317 1740) nil "Show bullets in org-mode as UTF-8 characters" single ((:commit . "9ec0dbd30be7c6310804141ee952ac8c5f753557") (:authors ("sabof")) (:maintainers ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net") (:url . "https://github.com/integral-dw/org-bullets"))])
- (org-caldav . [(20230421 1620) ((emacs (26 3)) (org (9 1))) "Sync org files with external calendar through CalDAV" single ((:commit . "1efb8affe65e70cb2a5437014df3bc8a29922e9f") (:authors ("David Engster" . "deng@randomsample.de")) (:maintainers ("Jack Kamm" . "jackkamm@tatersworld.org")) (:maintainer "Jack Kamm" . "jackkamm@tatersworld.org") (:keywords "calendar" "caldav") (:url . "https://github.com/dengste/org-caldav/"))])
- (org-calibre-notes . [(20221202 1657) ((emacs (27 1))) "Extract highlights and notes from Calibre EPUB reader" single ((:commit . "3120797ecbcb58827b91e3610e65579593d9a402") (:authors ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainers ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainer "Bibek Panthi" . "bpanthi977@gmail.com") (:url . "https://github.com/bpanthi977/org-calibre-notes"))])
- (org-capture-pop-frame . [(20160518 1008) ((emacs (24 4))) "Run org-capture in a new pop frame" single ((:commit . "b16fd712de62cf0d1f9befd03be6ab5983cb3301") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/org-capture-pop-frame.git"))])
- (org-category-capture . [(20220114 730) ((org (9 0 0)) (emacs (24))) "Contextualy capture of org-mode TODOs." single ((:commit . "bc5a2401b456c42c4346d59fa77d633770b6efea") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "org-mode" "todo" "tools" "outlines") (:url . "https://github.com/IvanMalison/org-projectile"))])
- (org-change . [(20230505 150) ((emacs (26 1)) (org (9 3))) "Annotate changes in org-mode files" single ((:commit . "45898a67701ade93f310db8e5820b8bfc4a28846") (:keywords "wp" "convenience") (:url . "https://github.com/drghirlanda/org-change"))])
- (org-chef . [(20220422 300) ((org (0)) (emacs (24))) "Cookbook and recipe management with org-mode." tar ((:commit . "6a786e77e67a715b3cd4f5128b59d501614928af") (:authors ("Calvin Beck" . "hobbes@ualberta.ca")) (:maintainers ("Calvin Beck" . "hobbes@ualberta.ca")) (:maintainer "Calvin Beck" . "hobbes@ualberta.ca") (:keywords "convenience" "abbrev" "outlines" "org" "food" "recipes" "cooking") (:url . "https://github.com/Chobbes/org-chef"))])
- (org-cliplink . [(20201126 1020) ((emacs (24 4))) "insert org-mode links from the clipboard" tar ((:commit . "13e0940b65d22bec34e2de4bc8cba1412a7abfbc") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/rexim/org-cliplink"))])
- (org-clock-convenience . [(20230424 2101) ((org (8)) (emacs (24 3))) "Convenience functions for org time tracking" single ((:commit . "08417dfd51deb400b890cf71c87b57393fc5ac8c") (:authors ("Derek Feichtinger <dfeich.gmail.com>")) (:maintainers ("Derek Feichtinger <dfeich.gmail.com>")) (:maintainer "Derek Feichtinger <dfeich.gmail.com>") (:keywords "convenience") (:url . "https://github.com/dfeich/org-clock-convenience"))])
- (org-clock-csv . [(20201222 1506) ((org (8 3)) (s (1 0))) "Export `org-mode' clock entries to CSV format." single ((:commit . "af94b58c2e179a5bcc938f339e93de0eee3da99c") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainers ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com") (:keywords "calendar" "data" "org") (:url . "https://github.com/atheriel/org-clock-csv"))])
- (org-clock-reminder . [(20230222 1956) ((emacs (26 1))) "Notifications that remind you about clocked-in tasks" tar ((:commit . "d3bf97113fd519aa08198e2283ba9c236a6df168") (:authors ("Nikolay Brovko" . "i@nickey.ru")) (:maintainers ("Nikolay Brovko" . "i@nickey.ru")) (:maintainer "Nikolay Brovko" . "i@nickey.ru") (:keywords "calendar" "convenience") (:url . "https://github.com/inickey/org-clock-reminder"))])
- (org-clock-split . [(20200331 526) ((emacs (24))) "Split clock entries" single ((:commit . "39e1d2912a7a7223e2356a5fc4dff03507ae084d") (:authors ("Justin Taft <https://github.com/justintaft>")) (:maintainers ("Justin Taft <https://github.com/justintaft>")) (:maintainer "Justin Taft <https://github.com/justintaft>") (:keywords "calendar") (:url . "https://github.com/justintaft/emacs-org-clock-split"))])
- (org-clock-today . [(20220918 514) ((emacs (25))) "Show total clocked time of the current day in the mode line" single ((:commit . "b73cca120eb64538ab0666892a8b97b6d65b4d6b") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com") (:url . "https://github.com/mallt/org-clock-today-mode"))])
- (org-commentary . [(20160802 637) ((dash (2 0)) (emacs (24 4)) (org (8 0))) "generate or update conventional library headers using Org mode files" tar ((:commit . "821ccb994811359c42f4e3d459e0e88849d42b75") (:authors ("Sergei Maximov" . "s.b.maximov@gmail.com")) (:maintainers ("Sergei Maximov" . "s.b.maximov@gmail.com")) (:maintainer "Sergei Maximov" . "s.b.maximov@gmail.com") (:keywords "convenience" "docs" "tools") (:url . "https://github.com/smaximov/org-commentary"))])
- (org-contacts . [(20230227 1417) ((emacs (27 1)) (org (9 3 4))) "Contacts management system for Org Mode" single ((:commit . "ae45b9413e24abdc431d12858dced54e0dee6e39") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "contacts" "org-mode" "outlines" "hypermedia" "calendar") (:url . "https://repo.or.cz/org-contacts.git"))])
- (org-context . [(20220606 1339) nil "Contextual capture and agenda commands for Org-mode" single ((:commit . "47bd45149cb74dab2ebecccfb918f6f8502a4f2c") (:authors ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainers ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainer "Sylvain Rousseau <thisirs at gmail dot com>") (:keywords "org" "capture" "agenda" "convenience") (:url . "https://github.com/thisirs/org-context"))])
- (org-cua-dwim . [(20120203 534) nil "Org-mode and Cua mode compatibility layer" single ((:commit . "a55d6c7009fc0b22f1110c07de629acc955c85e4") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "org-mode" "cua-mode"))])
- (org-custom-cookies . [(20220928 114) ((emacs (25 1)) (org (9 4))) "Custom cookies for org-mode" single ((:commit . "e57e0de5b8200224bf5d44b62481c542986f2f13") (:authors ("Gulshan Singh" . "gsingh2011@gmail.com")) (:maintainers ("Gulshan Singh" . "gsingh2011@gmail.com")) (:maintainer "Gulshan Singh" . "gsingh2011@gmail.com") (:url . "https://github.com/gsingh93/org-custom-cookies"))])
- (org-d20 . [(20210212 142) ((s (1 11 0)) (seq (2 19)) (dash (2 12 0)) (emacs (24))) "minor mode for d20 tabletop roleplaying games" single ((:commit . "e6149dcfbb6302d10109dd792fd0ffae7bfe2595") (:authors ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainers ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name") (:keywords "outlines" "games") (:url . "https://spwhitton.name/tech/code/org-d20/"))])
- (org-dashboard . [(20171223 1924) ((cl-lib (0 5))) "Visually summarize progress in org files" single ((:commit . "02c0699771d199075a286e4502340ca6e7c9e831") (:authors ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainers ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainer "Massimiliano Mirra" . "hyperstruct@gmail.com") (:keywords "outlines" "calendar") (:url . "http://github.com/bard/org-dashboard"))])
- (org-doing . [(20161017 1620) nil "Keep track of what you're doing" tar ((:commit . "4819e75c827c2115bd28f3b3148d846aa64ccd9b") (:authors ("Rudolf Olah")) (:maintainers ("Rudolf Olah")) (:maintainer "Rudolf Olah") (:keywords "tools" "org") (:url . "https://github.com/omouse/org-doing"))])
- (org-dotemacs . [(20211126 2038) ((org (7 9 3)) (cl-lib (0 5))) "Store your emacs config as an org file, and choose which bits to load." single ((:commit . "598759f4a139f94da62836e8f8064da6377536b2") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "local") (:url . "https://github.com/vapniks/org-dotemacs"))])
- (org-download . [(20220906 1929) ((emacs (24 3)) (async (1 2))) "Image drag-and-drop for Org-mode." single ((:commit . "19e166f0a8c539b4144cfbc614309d47a9b2a9b7") (:authors ("Oleh Krehel")) (:maintainers ("Oleh Krehel")) (:maintainer "Oleh Krehel") (:keywords "multimedia" "images" "screenshots" "download") (:url . "https://github.com/abo-abo/org-download"))])
- (org-dp . [(20180311 923) ((cl-lib (0 5))) "Declarative Local Programming with Org Elements" tar ((:commit . "334fefd06eb925c86b1642787b2a088aa0932bab") (:authors ("Thorsten Jolitz <tjolitz AT gmail DOT com>")) (:maintainers ("Thorsten Jolitz <tjolitz AT gmail DOT com>")) (:maintainer "Thorsten Jolitz <tjolitz AT gmail DOT com>") (:url . "https://github.com/tj64/org-dp"))])
- (org-drill . [(20210427 2003) ((emacs (25 3)) (seq (2 14)) (org (9 3)) (persist (0 3))) "Self-testing using spaced repetition" single ((:commit . "e55415221eedba2f2bd37a30cb71c842e344b5ee") (:authors ("Paul Sexton" . "eeeickythump@gmail.com")) (:maintainers ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk") (:keywords "games" "outlines" "multimedia") (:url . "https://gitlab.com/phillord/org-drill/issues"))])
- (org-drill-table . [(20180115 1009) ((s (1 7 0)) (dash (2 2 0)) (cl-lib (0 3)) (org (8 2)) (emacs (24 1))) "Generate drill cards from org tables" single ((:commit . "e4c4c1b0a17f51cb8de67eafe06a6bffc754f525") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))])
- (org-dropbox . [(20150114 509) ((dash (2 2)) (names (20150000)) (emacs (24))) "move Dropbox notes from phone into org-mode datetree" single ((:commit . "2dc677a770c9e82f928ad8e97a7707eb368e58ed") (:authors ("Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com")) (:maintainers ("Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com")) (:maintainer "Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com") (:keywords "dropbox" "android" "notes" "org-mode") (:url . "https://github.com/heikkil/org-dropbox"))])
- (org-easy-img-insert . [(20160915 2008) ((emacs (24 4))) "An easier way to add images from the web in org mode" single ((:commit . "3efb4d70e5a39bfbf7ee4c4033cc61afa89430dd") (:authors ("Tashrif Sanil" . "tashrifsanil@kloke-source.com")) (:maintainers ("Tashrif Sanil" . "tashrifsanil@kloke-source.com")) (:maintainer "Tashrif Sanil" . "tashrifsanil@kloke-source.com") (:keywords "convenience" "hypermedia" "files") (:url . "https://github.com/tashrifsanil/org-easy-img-insert"))])
- (org-edit-indirect . [(20220909 457) ((emacs (27)) (edit-indirect (0 1 10)) (org (9 0))) "Edit anything, not just source blocks" single ((:commit . "62894ac7b8b85eb03766f66072b0be10ffb6898e") (:authors ("Ag Ibragimomv <https://github.com/agzam>")) (:maintainers ("Ag Ibragimomv" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimomv" . "agzam.ibragimov@gmail.com") (:keywords "convenience" "extensions" "outlines") (:url . "https://github.com/agzam/org-edit-indirect.el"))])
- (org-edit-latex . [(20170908 1522) ((emacs (24 4)) (auctex (11 90))) "Edit embedded LaTeX in a dedicated buffer" single ((:commit . "ecd91601cb6f3aa79d055bde99bfec6d2b335952") (:authors ("James Wong" . "jianwang.academic@gmail.com")) (:maintainers ("James Wong" . "jianwang.academic@gmail.com")) (:maintainer "James Wong" . "jianwang.academic@gmail.com") (:keywords "org" "latex") (:url . "https://github.com/et2010/org-edit-latex"))])
- (org-ehtml . [(20220216 2054) ((web-server (20140109 2200)) (emacs (24 3))) "Export Org-mode files as editable web pages" tar ((:commit . "419932d6dbce193b0d90b1ccf9bf643169d21f52") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") (:keywords "org" "web-server" "javascript" "html"))])
- (org-elisp-help . [(20161122 55) ((cl-lib (0 5)) (org (9 0))) "org links to emacs-lisp documentation" single ((:commit . "3e33ab1a2933dd7f2782ef91d667a37f12d633ab") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "org" "remember" "lisp") (:url . "https://github.com/tarsius/org-elisp-help"))])
- (org-elp . [(20210329 1535) ((emacs (27 1))) "Preview latex equations in org mode while editing" single ((:commit . "36b5ab2ed3fa3b5917f058e3acf8dff2df69efae") (:authors ("Yilun Guan")) (:maintainers ("Yilun Guan")) (:maintainer "Yilun Guan") (:keywords "lisp" "tex" "org") (:url . "https://github.com/guanyilun/org-elp"))])
- (org-emms . [(20181010 1114) ((emacs (24))) "Play multimedia files from org-mode" single ((:commit . "07a8917f3d628c32e5de1dbd118ac08203772533") (:authors ("Jonathan Gregory <jgrg at autistici dot org>")) (:maintainers ("Jonathan Gregory <jgrg at autistici dot org>")) (:maintainer "Jonathan Gregory <jgrg at autistici dot org>") (:keywords "multimedia") (:url . "https://gitlab.com/jagrg/org-emms"))])
- (org-evil . [(20210809 1724) ((dash (2 19 0)) (evil (0)) (org (9 4 4))) "Evil extensions for Org." tar ((:commit . "981b0931d043d3b0eb61fcab6258b5a88cc74d15") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainers ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com") (:keywords "convenience" "evil" "org") (:url . "https://github.com/guiltydolphin/org-evil"))])
- (org-fancy-priorities . [(20210830 1657) nil "Display org priorities as custom strings" single ((:commit . "7f677c6c14ecf05eab8e0efbfe7f1b00ae68eb1d") (:authors ("Harry Bournis" . "harrybournis@gmail.com")) (:maintainers ("Harry Bournis" . "harrybournis@gmail.com")) (:maintainer "Harry Bournis" . "harrybournis@gmail.com") (:keywords "convenience" "faces" "outlines") (:url . "https://github.com/harrybournis/org-fancy-priorities"))])
- (org-fragtog . [(20220714 2146) ((emacs (27 1))) "Auto-toggle Org LaTeX fragments" single ((:commit . "c675563af3f9ab5558cfd5ea460e2a07477b0cfd") (:authors ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainers ("Benjamin Levy" . "blevy@protonmail.com")) (:maintainer "Benjamin Levy" . "blevy@protonmail.com") (:url . "https://github.com/io12/org-fragtog"))])
- (org-gamedb . [(20210525 2338) ((emacs (25 1))) "Track video games in org-mode with giantbomb.com's API" single ((:commit . "f283b6f6a7e8ad090405be57202caa3d3c424447") (:authors ("repelliuss <https://github.com/repelliuss>")) (:maintainers ("repelliuss" . "repelliuss@gmail.com")) (:maintainer "repelliuss" . "repelliuss@gmail.com") (:keywords "outlines" "org" "games" "convenience" "api") (:url . "https://github.com/repelliuss/org-gamedb"))])
- (org-gcal . [(20221212 1817) ((aio (1 0)) (alert (1 2)) (elnode (20190702 1509)) (emacs (26 1)) (org (9 3)) (persist (0 4)) (request (20190901)) (request-deferred (20181129))) "Org sync with Google Calendar" tar ((:commit . "9bb3720525ad1c45823abab8ce910dd1225e7dcd") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:keywords "convenience") (:url . "https://github.com/kidd/org-gcal.el"))])
- (org-generate . [(20200815 736) ((emacs (26 1)) (org (9 3)) (mustache (0 23))) "Generate template files/folders from org document" single ((:commit . "98825efb73c4537f05f653ce40e639a220d2ee5d") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/org-generate.el"))])
- (org-gnome . [(20150614 1457) ((alert (1 2)) (telepathy (0 1)) (gnome-calendar (0 1))) "Orgmode integration with the GNOME desktop" single ((:commit . "1012d47886cfd30eed25b73d9f18e475e0155f88") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com") (:keywords "org" "gnome"))])
- (org-grep . [(20230424 2005) ((emacs (26 1))) "Kind of M-x rgrep adapted for Org mode" single ((:commit . "428cfc2e2c35867272d32f82cadaea46772e3609") (:authors ("François Pinard" . "pinard@iro.umontreal.ca")) (:maintainers ("Greg Minshall" . "minshall@umich.edu")) (:maintainer "Greg Minshall" . "minshall@umich.edu") (:url . "https://sr.ht/~minshall/org-grep/"))])
- (org-gtd . [(20230420 1244) ((emacs (27 1)) (org-edna (1 1 2)) (f (0 20 0)) (org (9 6)) (org-agenda-property (1 3 1)) (transient (0 3 7))) "An implementation of GTD." tar ((:commit . "a6aca52a7dea498be515ec9fd9285a0dabe01ee5") (:authors ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainer "Aldric Giacomoni" . "trevoke@gmail.com") (:url . "https://github.com/Trevoke/org-gtd.el"))])
- (org-habit-stats . [(20230412 515) ((emacs (25 1))) "Display info about habits" single ((:commit . "9cb389f1c409d1f7aaea28378b4d7c7e975aefd4") (:authors ("ml729")) (:maintainers ("ml729")) (:maintainer "ml729") (:keywords "calendar" "org-mode" "org-habit" "habits" "stats" "statistics" "charts" "graphs") (:url . "https://github.com/ml729/org-habit-stats/"))])
- (org-hyperscheduler . [(20220704 2140) ((emacs (27 1)) (websocket (1 13)) (log4e (0 3 3))) "UI (web) representation of org-agenda" tar ((:commit . "b7f33e7bf19b7ce7c81dbac4de765a854ee7f52f") (:authors ("Dmitry Markushevich" . "dmitrym@gmail.com")) (:maintainers ("Dmitry Markushevich" . "dmitrym@gmail.com")) (:maintainer "Dmitry Markushevich" . "dmitrym@gmail.com") (:keywords "org-mode" "calendar") (:url . "https://github.com/dmitrym0/org-hyperscheduler"))])
- (org-id-cleanup . [(20230310 1639) ((org (9 3)) (dash (2 12)) (emacs (26 3))) "Interactively find, present and maybe clean up unused IDs of org-id" single ((:commit . "73d3f750d236dd486b8bcc07c88bfda9ce5b384e") (:authors ("Marc Ihm" . "marc@ihm.name")) (:maintainers ("Marc Ihm" . "marc@ihm.name")) (:maintainer "Marc Ihm" . "marc@ihm.name") (:url . "https://github.com/marcIhm/org-id-cleanup"))])
- (org-if . [(20150920 1513) nil "Interactive Fiction Authoring System for Org-Mode." tar ((:commit . "fab602cc1bbee7a4e99c0083e129219d3f9ed2e8") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com") (:keywords "if" "org-if" "org org-mode"))])
- (org-incoming . [(20230209 1509) ((emacs (24 4)) (dash (2 19 1)) (datetime (0 7 2)) (s (1 13 1))) "Sort incoming PDFs into your org files" single ((:commit . "5c5a5cc034a0b9ed808e5cbbf4876d489a6c7d28") (:authors ("Lukas Barth" . "mail@tinloaf.de")) (:maintainers ("Lukas Barth" . "mail@tinloaf.de")) (:maintainer "Lukas Barth" . "mail@tinloaf.de") (:keywords "files") (:url . "https://github.com/tinloaf/org-incoming"))])
- (org-index . [(20230103 1720) ((org (9 3)) (dash (2 12)) (s (1 12)) (emacs (26 3))) "No description available." single ((:commit . "d919b9e2ef8c0f814455b82ffea080e872b89c72") (:authors ("Marc Ihm" . "1@2484.de")) (:maintainers ("Marc Ihm" . "1@2484.de")) (:maintainer "Marc Ihm" . "1@2484.de") (:url . "https://github.com/marcIhm/org-index"))])
- (org-inline-anim . [(20230331 1048) ((emacs (25 3)) (org (9 4))) "Inline playback of animated GIF/PNG for Org" single ((:commit . "9316fe78319fa18c7282993bd547cd33fda1b8ee") (:authors ("Shigeaki Nishina")) (:maintainers ("Shigeaki Nishina")) (:maintainer "Shigeaki Nishina") (:keywords "org" "outlines" "hypermedia" "multimedia") (:url . "https://github.com/shg/org-inline-anim.el"))])
- (org-inline-pdf . [(20230505 848) ((emacs (25 1)) (org (9 4))) "Inline PDF previewing for Org" single ((:commit . "1324dfc76b6105ddb63ceb0e22ea04ed3dc30db1") (:authors ("Shigeaki Nishina")) (:maintainers ("Shigeaki Nishina")) (:maintainer "Shigeaki Nishina") (:keywords "org" "outlines" "hypermedia") (:url . "https://github.com/shg/org-inline-pdf.el"))])
- (org-iv . [(20171001 1022) ((impatient-mode (1 0 0)) (org (8 0)) (cl-lib (0 5))) "a tool used to view html (in browser) generated by org-file once the org-file changes" tar ((:commit . "7f2bb1b32647655fd9d6684f6f09dcc66b61b0cd") (:authors ("kuangdash" . "kuangdash@163.com")) (:maintainer "kuangdash" . "kuangdash@163.com") (:url . "https://github.com/kuangdash/org-iv"))])
- (org-ivy-search . [(20230222 514) ((emacs (25 1)) (ivy (0 10 0)) (org (0 10 0)) (beacon (1 3 4))) "Full text search for org files powered by ivy" single ((:commit . "7f2afd8c196e3723ae6ac4dd229367ece9acd3bf") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:keywords "convenience" "tool" "org") (:url . "https://github.com/beacoder/org-ivy-search"))])
- (org-jira . [(20230413 441) ((emacs (24 5)) (cl-lib (0 5)) (request (0 2 0)) (dash (2 14 1))) "Syncing between Jira and Org-mode." tar ((:commit . "63a74d4458f512f0825e9f55491baad3ee4e9c4b") (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "jira" "org" "bug" "tracker") (:url . "https://github.com/ahungry/org-jira"))])
- (org-journal . [(20230309 1240) ((emacs (25 1)) (org (9 1))) "a simple org-mode based journaling mode" single ((:commit . "18df4d5ae5e15580df42562c143d007c6d28d75f") (:authors ("Bastian Bechtold") ("Christian Schwarzgruber")) (:maintainers ("Bastian Bechtold")) (:maintainer "Bastian Bechtold") (:url . "http://github.com/bastibe/org-journal"))])
- (org-journal-list . [(20190221 2052) ((emacs (25))) "Org mode Journal List" single ((:commit . "2b26d00181bb49bff64b31ad020490acd1b6ae02") (:authors ("Huy Tran" . "huytd189@gmail.com")) (:maintainers ("Huy Tran" . "huytd189@gmail.com")) (:maintainer "Huy Tran" . "huytd189@gmail.com") (:url . "https://github.com/huytd/org-journal-list"))])
- (org-journal-tags . [(20230105 1937) ((emacs (27 1)) (org-journal (2 1 2)) (magit-section (3 3 0)) (transient (0 3 7))) "Tagging and querying system for org-journal" single ((:commit . "dfb3b2d583ceb7ad9fbc8ac23ab6316ae172e9fb") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/org-journal-tags"))])
- (org-kanban . [(20220723 1216) ((s (0)) (dash (2 17 0)) (emacs (24 4)) (org (9 1))) "kanban dynamic block for org-mode." single ((:commit . "e78deb03880ae89d6bceae6563ef1383526233a1") (:authors ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainers ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainer "Christian Köstlin" . "christian.koestlin@gmail.com") (:keywords "org-mode" "org" "kanban" "tools") (:url . "http://github.com/gizmomogwai/org-kanban"))])
- (org-kindle . [(20220210 1408) ((emacs (25)) (cl-lib (0 5)) (seq (2 20))) "Send org link file to ebook reader." single ((:commit . "fadcfd62e254d0c45e87d63128a82a08ae21869a") (:keywords "org" "link" "ebook" "kindle" "epub" "azw3" "mobi") (:url . "https://repo.or.cz/org-kindle.git"))])
- (org-latex-impatient . [(20221111 623) ((emacs (26)) (s (1 8 0)) (posframe (0 8 0)) (org (9 3)) (dash (2 17 0))) "Preview org-latex Fragments Instantly via MathJax" single ((:commit . "031025a8be9bf7255aa047388d027642cd2d6183") (:authors ("Sheng Yang" . "styang@fastmail.com")) (:maintainers ("Sheng Yang" . "styang@fastmail.com")) (:maintainer "Sheng Yang" . "styang@fastmail.com") (:keywords "tex" "tools") (:url . "https://github.com/yangsheng6810/org-latex-instant-preview"))])
- (org-link-beautify . [(20230506 1354) ((emacs (28 1)) (nerd-icons (0 0 1))) "Beautify Org Links" tar ((:commit . "48a35de9d25e922011c2462e8a4e84d79a9620f1") (:keywords "hypermedia") (:url . "https://repo.or.cz/org-link-beautify.git"))])
- (org-link-travis . [(20140405 2327) ((org (7))) "Insert/Export the link of Travis CI on org-mode" single ((:commit . "596615ad8373d9090bd4138da683524f0ad0bda5") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "org") (:url . "https://github.com/aki2o/org-link-travis"))])
- (org-linkotron . [(20200112 2235) ((emacs (26 1)) (org (9 3))) "Org-mode link selector" tar ((:commit . "d0adc5247b205bc73d2f1a83d4a512d2be541eb5") (:authors ("Per Weijnitz" . "per.weijnitz@gmail.com")) (:maintainers ("Per Weijnitz" . "per.weijnitz@gmail.com")) (:maintainer "Per Weijnitz" . "per.weijnitz@gmail.com") (:keywords "hypermedia" "org") (:url . "https://gitlab.com/perweij/org-linkotron"))])
- (org-listcruncher . [(20210706 1741) ((seq (2 3)) (emacs (26 1))) "Planning tool - Parse Org mode lists into table" single ((:commit . "075e0e6d36eb50406a608bc8a2f0dd359ec63938") (:authors ("Derek Feichtinger" . "dfeich@gmail.com")) (:maintainers ("Derek Feichtinger" . "dfeich@gmail.com")) (:maintainer "Derek Feichtinger" . "dfeich@gmail.com") (:keywords "convenience") (:url . "https://github.com/dfeich/org-listcruncher"))])
- (org-mac-link . [(20230222 2228) ((emacs (27 1))) "Insert org-mode links to items selected in various Mac apps" single ((:commit . "16734797b56b5bd1f49929b59f7cd8fcdcd268e0") (:authors ("Anthony Lander" . "anthony.lander@gmail.com") ("John Wiegley" . "johnw@gnu.org") ("Christopher Suckling <suckling at gmail dot com>") ("Daniil Frumin" . "difrumin@gmail.com") ("Alan Schmitt" . "alan.schmitt@polytechnique.org") ("Mike McLean" . "mike.mclean@pobox.com")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "files" "wp" "url" "org") (:url . "https://gitlab.com/aimebertrand/org-mac-link"))])
- (org-make-toc . [(20200409 1436) ((emacs (26 1)) (dash (2 12)) (s (1 10 0)) (org (9 0))) "Automatic tables of contents for Org files" single ((:commit . "43d4a2490a048b01ca5a6f44c5b4f24a458dfc95") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "org" "convenience") (:url . "http://github.com/alphapapa/org-make-toc"))])
- (org-mime . [(20230321 2341) ((emacs (25 1))) "org html export for text/html MIME emails" single ((:commit . "d368bd4119bfcf2997a6a23bbf5f41e043164d29") (:authors ("Eric Schulte")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "mime" "mail" "email" "html") (:url . "http://github.com/org-mime/org-mime"))])
- (org-mind-map . [(20180826 2340) ((emacs (24)) (dash (1 8 0)) (org (8 2 10))) "Creates a directed graph from org-mode files" single ((:commit . "41df4b2e30455494f1848b4e06cc9208aa9e902b") (:authors ("Ted Wiles" . "theodore.wiles@gmail.com")) (:maintainers ("Ted Wiles" . "theodore.wiles@gmail.com")) (:maintainer "Ted Wiles" . "theodore.wiles@gmail.com") (:keywords "orgmode" "extensions" "graphviz" "dot") (:url . "https://github.com/theodorewiles/org-mind-map"))])
- (org-ml . [(20230410 30) ((emacs (27 1)) (org (9 3)) (dash (2 17)) (s (1 12))) "Functional Org Mode API" tar ((:commit . "f57336a9126a168ad32ccce017c072474555395a") (:authors ("Nathan Dwarshuis" . "ndwar@yavin4.ch")) (:maintainers ("Nathan Dwarshuis" . "ndwar@yavin4.ch")) (:maintainer "Nathan Dwarshuis" . "ndwar@yavin4.ch") (:keywords "org-mode" "outlines") (:url . "https://github.com/ndwarshuis/org-ml"))])
- (org-mobile-sync . [(20180606 524) ((emacs (24 3 50)) (org (8 0))) "automatically sync org-mobile on changes" single ((:commit . "06764b943a528827df1e2acc6bc7806cc2c1351f") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "org-mode" "org" "mobile" "sync" "todo") (:url . "https://framagit.org/steckerhalter/org-mobile-sync"))])
- (org-modern . [(20230422 634) ((emacs (27 1)) (compat (29 1 4 0))) "Modern looks for Org" single ((:commit . "e0a1a00490acc3bbbf199e433c9ef60e03f9d416") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "outlines" "hypermedia" "wp") (:url . "https://github.com/minad/org-modern"))])
- (org-movies . [(20210920 101) ((emacs (26 1)) (org (9 0)) (request (0 3 0))) "Manage watchlist with Org mode" single ((:commit . "e96fecaffa2924de64a507aa31d2934e667ee1ea") (:authors ("Anh T Nguyen")) (:maintainers ("Anh T Nguyen")) (:maintainer "Anh T Nguyen") (:keywords "hypermedia" "outlines" "org") (:url . "https://github.com/teeann/org-movies"))])
- (org-mpv-notes . [(20230414 500) ((emacs (27 1)) (mpv (0 2 0))) "Take notes in org mode while watching videos in mpv" single ((:commit . "215bd0fdbb8593e555231309dd11a96af7e98a33") (:authors ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainers ("Bibek Panthi" . "bpanthi977@gmail.com")) (:maintainer "Bibek Panthi" . "bpanthi977@gmail.com") (:url . "https://github.com/bpanthi977/org-mpv-notes"))])
- (org-mru-clock . [(20230104 1922) ((emacs (26 1))) "Clock in/out of tasks with completion and persistent history" single ((:commit . "be90bc9084b384d8a728d68f69da09171ca26d3c") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "convenience" "calendar") (:url . "https://github.com/unhammer/org-mru-clock"))])
- (org-msg . [(20230127 520) ((emacs (24 4)) (htmlize (1 54))) "Org mode to send and reply to email in HTML." single ((:commit . "7b1dfb96d558f6e5626e96d4f4a5150d55cb7eb2") (:authors ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainers ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainer "Jérémy Compostella" . "jeremy.compostella@gmail.com") (:keywords "extensions" "mail") (:url . "https://github.com/jeremy-compostella/org-msg"))])
- (org-multi-wiki . [(20210324 1820) ((emacs (26 1)) (dash (2 12)) (s (1 12)) (org-ql (0 5)) (org (9 3))) "Multiple wikis based on Org mode" single ((:commit . "bf8039aadddaf02569fab473f766071ef7e63563") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "org" "outlines" "files") (:url . "https://github.com/akirak/org-multi-wiki"))])
- (org-multiple-keymap . [(20191017 1920) ((org (8 2 4)) (emacs (24)) (cl-lib (0 5))) "Set keymap to elements, such as timestamp and priority." single ((:commit . "4eb8aa0aada012b2346cc7f0c55e07783141a2c3") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience" "org-mode") (:url . "https://github.com/myuhe/org-multiple-keymap.el"))])
- (org-notebook . [(20170322 452) ((emacs (24)) (org (8)) (cl-lib (0 5))) "Ease the use of org-mode as a notebook" single ((:commit . "d90c4aeca2442161e6dd89de175561af85aace03") (:authors ("Paul Elder" . "paul.elder@amanokami.net")) (:maintainers ("Paul Elder" . "paul.elder@amanokami.net")) (:maintainer "Paul Elder" . "paul.elder@amanokami.net") (:keywords "convenience" "tools"))])
- (org-noter . [(20230505 155) ((emacs (24 4)) (cl-lib (0 6)) (org (9 0))) "A synchronized, Org-mode, document annotator" tar ((:commit . "d1a8b01aa79afe4db4ff29033a6951546bf5e976") (:authors ("Gonçalo Santos (github.com/weirdNox)" . "in@bsentia") (" Maintainer Dmitry M" . "dmitrym@gmail.com")) (:maintainers ("Peter Mao" . "peter.mao@gmail.com")) (:maintainer "Peter Mao" . "peter.mao@gmail.com") (:keywords "lisp" "pdf" "interleave" "annotate" "external" "sync" "notes" "documents" "org-mode") (:url . "https://github.com/org-noter/org-noter"))])
- (org-noter-pdftools . [(20220320 300) ((emacs (26 1)) (org (9 4)) (pdf-tools (0 8)) (org-pdftools (1 0)) (org-noter (1 4 1))) "Integration between org-pdftools and org-noter" single ((:commit . "c88130c90aac5a4759849df86fb1829db183bed4") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainers ("Alexander Fu Xi" . "fuxialexnader@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexnader@gmail.com") (:keywords "convenience") (:url . "https://github.com/fuxialexander/org-pdftools"))])
- (org-notifications . [(20210918 1827) ((emacs (25 1)) (org (9 0)) (sound-wav (0 2)) (alert (1 2)) (seq (2 21))) "Creates notifications for org-mode entries" tar ((:commit . "b8032f8adfbeb328962a5657c6dd173e64cc76e5") (:authors ("doppelc")) (:maintainers ("doppelc")) (:maintainer "doppelc") (:keywords "outlines") (:url . "https://github.com/doppelc/org-notifications"))])
- (org-octopress . [(20170821 415) ((org (9 0)) (orglue (0 1)) (ctable (0 1 1))) "Compose octopress articles using org-mode." tar ((:commit . "38598ef98d04076a8eb78d549907ddfde8d3a652") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net") (:keywords "org" "jekyll" "octopress" "blog"))])
- (org-onenote . [(20171008 500) ((oauth2 (0 11)) (request (0 2 0)) (org (8 2 10))) "export org-mode document to onenote." single ((:commit . "5ce5cf4edb143180e0b185ac26826d39ae5bc929") (:authors ("Frei Zhang" . "ifree0@gmail.com")) (:maintainers ("Frei Zhang" . "ifree0@gmail.com")) (:maintainer "Frei Zhang" . "ifree0@gmail.com") (:keywords "tools" "docs" "org-mode" "onenote") (:url . "https://github.com/ifree/org-onenote"))])
- (org-outline-numbering . [(20180705 1501) ((emacs (24)) (org (8 3)) (cl-lib (0 6)) (ov (1 0 6))) "Show outline numbering as overlays in org-mode" single ((:commit . "b95b6a7ed9289637cb512232470633b330ca9713") (:authors ("Anders Johansson")) (:maintainers ("Anders Johansson")) (:maintainer "Anders Johansson") (:keywords "wp" "convenience") (:url . "https://gitlab.com/andersjohansson/org-outline-numbering"))])
- (org-outlook . [(20160705 1338) nil "Outlook org" tar ((:commit . "ec32d8d9d8ffd17e6de4de0b52fc3f5ad9b4cc0d") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "org-outlook") (:url . "https://github.com/mlf176f2/org-outlook.el"))])
- (org-page . [(20170807 224) ((ht (1 5)) (simple-httpd (1 4 6)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (cl-lib (0 5)) (git (0 1 1))) "a static site generator based on org mode" tar ((:commit . "50430ababf73a2d090881a952e9770badaf7478b") (:authors ("Kelvin Hu <ini DOT kelvin AT gmail DOT com>")) (:maintainer "Kelvin Hu <ini DOT kelvin AT gmail DOT com>") (:keywords "org-mode" "convenience" "beautify") (:url . "https://github.com/kelvinh/org-page"))])
- (org-parser . [(20200417 301) ((emacs (25 1)) (dash (2 12 0)) (ht (2 1))) "parse org files into structured datatypes." single ((:commit . "fd4cb7035ff649378cc968b1ec2c386b5c565706") (:keywords "files" "outlines" "tools") (:url . "https://hg.sr.ht/~zck/org-parser"))])
- (org-pdftools . [(20220320 301) ((emacs (26 1)) (org (9 3 6)) (pdf-tools (0 8)) (org-noter (1 4 1))) "Support for links to documents in pdfview mode" single ((:commit . "967f48fb5038bba32915ee9da8dc4e8b10ba3376") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainers ("Alexander Fu Xi" . "fuxialexnader@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexnader@gmail.com") (:keywords "convenience") (:url . "https://github.com/fuxialexander/org-pdftools"))])
- (org-picklink . [(20210210 516) ((emacs (24 4))) "Pick a headline link from org-agenda" single ((:commit . "bfdc22b436482752be41c5d6f6f37dca76b1c7c3") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience") (:url . "https://github.com/tumashu/org-picklink"))])
- (org-pivotal . [(20210705 408) ((a (0 1 1)) (dash (2 18 0)) (emacs (26 1)) (request (0 3 0))) "Sync Pivotal Tracker to org buffer" tar ((:commit . "91b675f696b83fd63d4171fa731b09c50327b008") (:authors ("Huy Duong" . "qhuyduong@hotmail.com")) (:maintainers ("Huy Duong" . "qhuyduong@hotmail.com")) (:maintainer "Huy Duong" . "qhuyduong@hotmail.com") (:url . "https://github.com/org-pivotal/org-pivotal"))])
- (org-pomodoro . [(20220318 1618) ((alert (0 5 10)) (cl-lib (0 5))) "Pomodoro implementation for org-mode." tar ((:commit . "3f5bcfb80d61556d35fc29e5ddb09750df962cc6") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com") (:url . "https://github.com/lolownia/org-pomodoro"))])
- (org-present . [(20220806 1847) ((org (7))) "Minimalist presentation minor-mode for Emacs org-mode." single ((:commit . "4ec04e1b77dea76d7c30066ccf3200d2e0b7bee9") (:authors ("Ric Lister")) (:maintainers ("Ric Lister")) (:maintainer "Ric Lister") (:url . "https://github.com/rlister/org-present"))])
- (org-present-remote . [(20221107 1139) ((org-present (9)) (elnode (0 9)) (emacs (25)) (fakir (20140729 1652)) (s (20210616 619)) (web (20141231 2001))) "A web-based remote control for org-present" single ((:commit . "95ea38b985b5aaa49b8039010bbe5fda5188a197") (:authors ("Duncan Bayne" . "duncan@bayne.id.au")) (:maintainers ("Duncan Bayne" . "duncan@bayne.id.au")) (:maintainer "Duncan Bayne" . "duncan@bayne.id.au") (:keywords "comm" "docs") (:url . "https://gitlab.com/duncan-bayne/org-present-remote"))])
- (org-pretty-tags . [(20211228 1546) ((emacs (25))) "Surrogates for tags" single ((:commit . "e127a1e08df8273b909a99594ffaad84960ff212") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com") (:keywords "reading" "outlines") (:url . "https://gitlab.com/marcowahl/org-pretty-tags"))])
- (org-preview-html . [(20220809 1033) ((emacs (25 1)) (org (8 0))) "Automatically preview org-exported HTML files within Emacs" single ((:commit . "785e1f5c99c0f2d76a9a6611a06b4552a343e221") (:authors ("Jake B" . "jakebox0@protonmail.com")) (:maintainers ("Jake B" . "jakebox0@protonmail.com")) (:maintainer "Jake B" . "jakebox0@protonmail.com") (:keywords "org" "convenience" "outlines") (:url . "https://github.com/jakebox/org-preview-html"))])
- (org-projectile . [(20220114 730) ((projectile (0 11 0)) (dash (2 10 0)) (emacs (24)) (s (1 9 0)) (org-category-capture (0 0 0))) "Repository todo management for org-mode" single ((:commit . "bc5a2401b456c42c4346d59fa77d633770b6efea") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "org-mode" "projectile" "todo" "tools" "outlines") (:url . "https://github.com/IvanMalison/org-projectile"))])
- (org-projectile-helm . [(20180601 1822) ((org-projectile (1 0 0)) (helm (2 3 1)) (emacs (25))) "helm functions for org-projectile" single ((:commit . "674e3cdda4a3ea4bdcc369dae032d49dfb5c5765") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "org" "projectile" "todo" "helm" "outlines") (:url . "https://github.com/IvanMalison/org-projectile"))])
- (org-protocol-jekyll . [(20170328 1639) ((cl-lib (0 5))) "Jekyll's handler for org-protocol" single ((:commit . "dec064a42d6dfe81dfde7ba59ece5ca103ac6334") (:authors ("Vladimir S. Ivanov" . "ivvl82@gmail.com")) (:maintainers ("Vladimir S. Ivanov" . "ivvl82@gmail.com")) (:maintainer "Vladimir S. Ivanov" . "ivvl82@gmail.com"))])
- (org-ql . [(20230505 2225) ((emacs (26 1)) (dash (2 18 1)) (f (0 17 2)) (map (2 1)) (org (9 0)) (org-super-agenda (1 2)) (ov (1 0 6)) (peg (1 0 1)) (s (1 12 0)) (transient (0 1)) (ts (0 2 -1))) "Org Query Language, search command, and agenda-like view" tar ((:commit . "2c098540cab6a0ee7d82abe2327d524a171edd1e") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org" "agenda") (:url . "https://github.com/alphapapa/org-ql"))])
- (org-radiobutton . [(20210519 1225) ((dash (2 13 0)) (emacs (24))) "Radiobutton for org-mode lists." single ((:commit . "4ba26bbd26102c45c234bc6ce9a8e9c655c6a0a2") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "outlines") (:url . "https://github.com/Fuco1/org-radiobutton"))])
- (org-rainbow-tags . [(20221114 1307) ((emacs (28 1))) "Colorize org tags automatically" single ((:commit . "6001ec9345bea4e60b2178940ef197c055d5a5d8") (:authors ("Furkan KarataÅŸ" . "furkan.karatas02@gmail.com")) (:maintainers ("Furkan KarataÅŸ" . "furkan.karatas02@gmail.com")) (:maintainer "Furkan KarataÅŸ" . "furkan.karatas02@gmail.com") (:keywords "faces" "outlines") (:url . "https://github.com/KaratasFurkan/org-rainbow-tags"))])
- (org-random-todo . [(20190214 2057) ((emacs (24 3)) (alert (1 3))) "show a random TODO (with alert) every so often" single ((:commit . "4f7677af740e8f3f7cfaf630ae2e594a125af760") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "org" "todo" "notification" "calendar") (:url . "https://github.com/unhammer/org-random-todo"))])
- (org-randomnote . [(20200110 1407) ((f (0 19 0)) (dash (2 12 0)) (org (0))) "Find a random note in your Org-Mode files" single ((:commit . "ea8cf4385970637efffff8f79e14576ba6d7ad13") (:authors ("Michael Fogleman" . "michaelwfogleman@gmail.com")) (:maintainers ("Michael Fogleman" . "michaelwfogleman@gmail.com")) (:maintainer "Michael Fogleman" . "michaelwfogleman@gmail.com") (:url . "http://github.com/mwfogleman/org-randomnote"))])
- (org-re-reveal . [(20230228 1655) ((emacs (24 4)) (org (8 3)) (htmlize (1 34))) "Org export to reveal.js presentations" tar ((:commit . "bf4e23e2ce9109d35957c9f42fafe9c9edb6bf4a") (:keywords "tools" "outlines" "hypermedia" "slideshow" "presentation" "oer") (:url . "https://gitlab.com/oer/org-re-reveal"))])
- (org-re-reveal-citeproc . [(20211028 1328) ((emacs (25 1)) (org (9 5)) (citeproc (0 9)) (org-re-reveal (3 0 0))) "Citations and bibliography for org-re-reveal" tar ((:commit . "faa9ea387917b20bd1499ad90199ff3d417c00c2") (:authors ("Jens Lechtenbörger")) (:maintainers ("Jens Lechtenbörger")) (:maintainer "Jens Lechtenbörger") (:keywords "hypermedia" "tools" "slideshow" "presentation" "bibliography") (:url . "https://gitlab.com/oer/org-re-reveal-citeproc"))])
- (org-re-reveal-ref . [(20211029 551) ((emacs (25 1)) (org-ref (1 1 1)) (org-re-reveal (0 9 3))) "Citations and bibliography for org-re-reveal" tar ((:commit . "ea9661864d5fbef87b12b78f516c13a40c683f24") (:authors ("Jens Lechtenbörger")) (:maintainers ("Jens Lechtenbörger")) (:maintainer "Jens Lechtenbörger") (:keywords "hypermedia" "tools" "slideshow" "presentation" "bibliography") (:url . "https://gitlab.com/oer/org-re-reveal-ref"))])
- (org-recent-headings . [(20211011 1519) ((emacs (26 1)) (org (9 0 5)) (dash (2 18 0)) (frecency (0 1)) (s (1 12 0))) "Jump to recently used Org headings" single ((:commit . "97418d581ea030f0718794e50b005e9bae44582e") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org") (:url . "http://github.com/alphapapa/org-recent-headings"))])
- (org-recur . [(20230124 1532) ((emacs (24 1)) (org (9 0)) (dash (2 7 0))) "Recurring org-mode tasks" single ((:commit . "628099883a63d219f76cd9631cc914fe6ec8a3e3") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com")) (:maintainers ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") (:url . "https://github.com/mrcnski/org-recur"))])
- (org-redmine . [(20160711 1114) nil "Redmine tools using Emacs OrgMode" single ((:commit . "a526c3ac802634486bf10de9c2283ccb1a30ec8d") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:keywords "redmine" "org") (:url . "https://github.com/gongo/org-redmine"))])
- (org-ref . [(20230505 10) ((org (9 4)) (dash (0)) (s (0)) (f (0)) (htmlize (0)) (hydra (0)) (avy (0)) (parsebib (0)) (bibtex-completion (0)) (citeproc (0)) (ox-pandoc (0))) "citations, cross-references and bibliographies in org-mode" tar ((:commit . "04d0c84ff87671e61a8c132a3e79e999edee70e6") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainers ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu") (:keywords "org-mode" "cite" "ref" "label") (:url . "https://github.com/jkitchin/org-ref"))])
- (org-ref-prettify . [(20220507 649) ((emacs (24 3)) (org-ref (3 0)) (bibtex-completion (1 0 0))) "Prettify org-ref citation links" single ((:commit . "0ec3b6e398ee117c8b8a787a0422b95d9e95f7bb") (:authors ("Alex Kost" . "alezost@gmail.com") ("Vitus Schäfftlein" . "vitusschaefftlein@live.de")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "convenience") (:url . "https://github.com/alezost/org-ref-prettify.el"))])
- (org-repo-todo . [(20171228 119) nil "Simple repository todo management with org-mode" single ((:commit . "f73ebd91399c5760ad52c6ad9033de1066042003") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainers ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com") (:keywords "convenience") (:url . "https://github.com/waymondo/org-repo-todo"))])
- (org-reverse-datetree . [(20221203 259) ((emacs (28 1)) (dash (2 19)) (org (9 5))) "Create reverse date trees in org-mode" single ((:commit . "fca95cd22ed29653f3217034c71ec0ab0a7c7734") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "outlines") (:url . "https://github.com/akirak/org-reverse-datetree"))])
- (org-review . [(20230119 1706) nil "schedule reviews for Org entries" single ((:commit . "77211e40db8a9558b866f5660c7127922b459e6c") (:authors ("Alan Schmitt" . "alan.schmitt@polytechnique.org")) (:maintainers ("Alan Schmitt" . "alan.schmitt@polytechnique.org")) (:maintainer "Alan Schmitt" . "alan.schmitt@polytechnique.org") (:keywords "org" "review") (:url . "https://github.com/brabalan/org-review"))])
- (org-rich-yank . [(20230501 2128) ((emacs (24 4))) "Paste with org-mode markup and link to source" single ((:commit . "37da0aa09704fe1f6b2c4e329de57b3d555cda98") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "convenience" "hypermedia" "org") (:url . "https://github.com/unhammer/org-rich-yank"))])
- (org-roam . [(20230307 1721) ((emacs (26 1)) (dash (2 13)) (org (9 4)) (emacsql (20230228)) (magit-section (3 0 0))) "A database abstraction layer for Org-mode" tar ((:commit . "5c06471c3a11348342719fd9011486455adeb701") (:authors ("Jethro Kuan" . "jethrokuan95@gmail.com")) (:maintainers ("Jethro Kuan" . "jethrokuan95@gmail.com")) (:maintainer "Jethro Kuan" . "jethrokuan95@gmail.com") (:keywords "org-mode" "roam" "convenience") (:url . "https://github.com/org-roam/org-roam"))])
- (org-roam-bibtex . [(20230201 1834) ((emacs (27 1)) (org-roam (2 2 0)) (bibtex-completion (2 0 0))) "Org Roam meets BibTeX" tar ((:commit . "c87acc2d5685ba2608e2bd1f128e723f1de9d837") (:authors ("Mykhailo Shevchuk" . "mail@mshevchuk.com") ("Leo Vivier" . "leo.vivier+dev@gmail.com")) (:maintainers ("Mykhailo Shevchuk" . "mail@mshevchuk.com")) (:maintainer "Mykhailo Shevchuk" . "mail@mshevchuk.com") (:keywords "bib" "hypermedia" "outlines" "wp") (:url . "https://github.com/org-roam/org-roam-bibtex"))])
- (org-roam-timestamps . [(20221104 1544) ((emacs (26 1)) (org-roam (2 0 0))) "Keep track of modification times for org-roam" single ((:commit . "c4ff1e2f5b0905b5caa917249aab56ddc1de1ab3") (:authors ("Thomas F. K. Jorna <https://github.com/thomas>")) (:maintainers ("Thomas F. K. Jorna" . "jorna@jtrialerror.com")) (:maintainer "Thomas F. K. Jorna" . "jorna@jtrialerror.com") (:keywords "calendar" "outlines" "files") (:url . "https://github.com/ThomasFKJorna/org-roam-timestamps/"))])
- (org-roam-ui . [(20221105 1040) ((emacs (27 1)) (org-roam (2 0 0)) (simple-httpd (20191103 1446)) (websocket (1 13))) "User Interface for Org-roam" tar ((:commit . "5ac74960231db0bf7783c2ba7a19a60f582e91ab") (:authors ("Kirill Rogovoy, Thomas Jorna")) (:maintainers ("Kirill Rogovoy, Thomas Jorna")) (:maintainer "Kirill Rogovoy, Thomas Jorna") (:keywords "files" "outlines") (:url . "https://github.com/org-roam/org-roam-ui"))])
- (org-ros . [(20220320 1705) ((emacs (24 1))) "Rahul's Org-Mode Screenshot" single ((:commit . "70e0f33ee027ca1dce68351ad14a9e47a452fc17") (:authors ("Rahul Martim Juliato" . "rahul.juliato@gmail.com")) (:maintainers ("Rahul Martim Juliato" . "rahul.juliato@gmail.com")) (:maintainer "Rahul Martim Juliato" . "rahul.juliato@gmail.com") (:url . "https://github.com/LionyxML/ros"))])
- (org-rtm . [(20160214 1236) ((rtm (0 1))) "Simple import/export from rememberthemilk to org-mode" single ((:commit . "adc42ad1fbe92ab447ccc9553780f4456f2508d2") (:authors ("Philipp Middendorf" . "pmidden@secure.mailbox.org")) (:maintainers ("Philipp Middendorf" . "pmidden@secure.mailbox.org")) (:maintainer "Philipp Middendorf" . "pmidden@secure.mailbox.org") (:keywords "outlines" "data") (:url . "https://github.com/pmiddend/org-rtm"))])
- (org-runbook . [(20230503 319) ((emacs (27 1)) (seq (2 3)) (f (0 20 0)) (s (1 12 0)) (dash (2 17 0)) (mustache (0 24)) (ht (0 9)) (ivy (0 8 0))) "Org mode for runbooks" tar ((:commit . "7ada3903a56266d60541d59ae92410e8ab6fe836") (:authors ("Tyler Dodge")) (:maintainers ("Tyler Dodge")) (:maintainer "Tyler Dodge") (:keywords "convenience" "processes" "terminals" "files") (:url . "https://github.com/tyler-dodge/org-runbook"))])
- (org-scrum . [(20200131 1129) ((emacs (24 5)) (org (8 2)) (seq (2 3)) (cl-lib (1 0))) "org mode extensions for scrum planning and reporting" single ((:commit . "a383348ea80c2459bfb96fa0652b98f0059bd311") (:authors ("Ian Martins" . "ianxm@jhu.edu")) (:maintainers ("Ian Martins" . "ianxm@jhu.edu")) (:maintainer "Ian Martins" . "ianxm@jhu.edu") (:url . "https://github.com/ianxm/emacs-scrum"))])
- (org-seek . [(20161217 502) ((emacs (24 3)) (ag (0 48))) "Searching Org-mode files with search tools." single ((:commit . "1f51e6634e3b9a6a29d335d0d14370a6ffef2265") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainers ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:keywords "org" "search" "ag" "pt") (:url . "https://github.com/stardiviner/org-seek.el"))])
- (org-shoplist . [(20210629 2157) ((emacs (25))) "Eat the world" single ((:commit . "71ea7643e66c97d21df49fb8b600578ca0464f83") (:authors ("lordnik22")) (:maintainers ("lordnik22")) (:maintainer "lordnik22") (:keywords "extensions" "matching") (:url . "https://github.com/lordnik22"))])
- (org-sidebar . [(20210912 1321) ((emacs (26 1)) (s (1 10 0)) (dash (2 18)) (org (9 0)) (org-ql (0 2)) (org-super-agenda (1 0))) "Helpful sidebar for Org buffers" single ((:commit . "288703b897449f5110c9c76e78eb9a928ffc0dcd") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org" "agenda") (:url . "https://github.com/alphapapa/org-sidebar"))])
- (org-snooze . [(20181229 1424) ((emacs (24 4))) "Snooze your code, doc and feed" single ((:commit . "8799adc14a20f3489063d279ff69312de3180bf9") (:authors ("Bill Xue")) (:maintainers ("Bill Xue")) (:maintainer "Bill Xue") (:keywords "extensions") (:url . "https://github.com/xueeinstein/org-snooze.el"))])
- (org-special-block-extras . [(20220326 1432) ((s (1 12 0)) (dash (2 18 1)) (emacs (27 1)) (org (9 1)) (lf (1 0)) (dad-joke (1 4)) (seq (2 0)) (lolcat (0))) "30 new custom blocks & 34 link types for Org-mode" single ((:commit . "2e397dac372ff75ea6ee6eed9ae3a0540a082af8") (:authors ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainers ("Musa Al-hassy" . "alhassy@gmail.com")) (:maintainer "Musa Al-hassy" . "alhassy@gmail.com") (:keywords "org" "blocks" "colors" "convenience") (:url . "https://alhassy.github.io/org-special-block-extras"))])
- (org-sql . [(20220621 2252) ((emacs (27 1)) (s (1 12)) (f (0 20 0)) (dash (2 17)) (org-ml (5 6 1))) "Org-Mode SQL converter" single ((:commit . "43376abf46b897a9a862cfcc1c087f4b8688634c") (:authors ("Nathan Dwarshuis" . "natedwarshuis@gmail.com")) (:maintainers ("Nathan Dwarshuis" . "natedwarshuis@gmail.com")) (:maintainer "Nathan Dwarshuis" . "natedwarshuis@gmail.com") (:keywords "org-mode" "data") (:url . "https://github.com/ndwarshuis/org-sql"))])
- (org-starter . [(20220326 1106) ((emacs (25 1)) (dash (2 18))) "A basic configuration framework for org mode" single ((:commit . "cd9c5c0402de941299d1c8901f26a8f24d755022") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/org-starter"))])
- (org-starter-swiper . [(20220326 1106) ((emacs (25 1)) (swiper (0 11)) (org-starter (0 2 4))) "Swiper for org-starter" single ((:commit . "cd9c5c0402de941299d1c8901f26a8f24d755022") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/org-starter"))])
- (org-static-blog . [(20230204 1000) ((emacs (24 3))) "a simple org-mode based static blog generator" single ((:commit . "99ee0c8261267a89708e3a9dd0e0d865e894f96e") (:authors ("Bastian Bechtold")) (:maintainers ("Bastian Bechtold")) (:maintainer "Bastian Bechtold") (:url . "https://github.com/bastibe/org-static-blog"))])
- (org-sticky-header . [(20201223 143) ((emacs (24 4)) (org (8 3 5))) "Show off-screen Org heading at top of window" single ((:commit . "79136b8c54c48547ba8a07a72a9790cb8e23ecbd") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org") (:url . "http://github.com/alphapapa/org-sticky-header"))])
- (org-super-agenda . [(20220826 2315) ((emacs (26 1)) (s (1 10 0)) (dash (2 13)) (org (9 0)) (ht (2 2)) (ts (0 2))) "Supercharge your agenda" tar ((:commit . "f4f528985397c833c870967884b013cf91a1da4a") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org" "agenda") (:url . "http://github.com/alphapapa/org-super-agenda"))])
- (org-superstar . [(20230116 1358) ((org (9 1 9)) (emacs (26 1))) "Prettify headings and plain lists in Org mode" single ((:commit . "29dbbc48ac925f36cc1636b36b4a3ccb3588e17f") (:authors ("D. Williams" . "d.williams@posteo.net")) (:maintainers ("D. Williams" . "d.williams@posteo.net")) (:maintainer "D. Williams" . "d.williams@posteo.net") (:keywords "faces" "outlines") (:url . "https://github.com/integral-dw/org-superstar-mode"))])
- (org-sync . [(20181204 23) ((cl-lib (0 5)) (org (8 2)) (emacs (24))) "Synchronize Org documents with External Issue Trackers" tar ((:commit . "e34a385fa9e658c8341a0a6e6bc3472d4d536bb8") (:authors ("Aurelien Aptel <aurelien dot aptel at gmail dot com>")) (:maintainers ("Andrei Beliankou" . "arbox@yandex.ru")) (:maintainer "Andrei Beliankou" . "arbox@yandex.ru") (:keywords "org" "synchronization" "issue tracking" "github" "redmine") (:url . "https://github.com/arbox/org-sync"))])
- (org-sync-snippets . [(20210111 1726) ((org (8 3 5)) (emacs (24 3)) (f (0 17 3))) "Export snippets to org-mode and vice versa" single ((:commit . "88f995dea188b8a645a3388c42b62a2bb88953d3") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "snippet" "org-mode" "yasnippet" "tools") (:url . "https://github.com/abrochard/org-sync-snippets"))])
- (org-table-color . [(20220311 1927) ((emacs (26 1))) "Add color to your org-mode table cells" single ((:commit . "2022f301ef323953c3a0e087a1b601da85e06da1") (:authors ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainers ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainer "Colin Woodbury" . "colin@fosskers.ca") (:keywords "data" "faces" "lisp") (:url . "https://github.com/fosskers/org-table-color"))])
- (org-table-comment . [(20120209 1851) nil "Org table comment modes." single ((:commit . "33b9966c33ecbc3e27cca67c2f2cdea04364d74e") (:authors ("Matthew L. Fidler <matthew dot fidler at gmail . com>")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "org-mode" "orgtbl") (:url . "http://github.com/mlf176f2/org-table-comment.el"))])
- (org-table-sticky-header . [(20190924 506) ((org (8 2 10)) (emacs (24 4))) "Sticky header for org-mode tables" single ((:commit . "b65442857128ab04724aaa301e60aa874a31a798") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (org-tag-beautify . [(20230501 354) ((emacs (26 1)) (org-pretty-tags (0 2 2)) (nerd-icons (0 0 1))) "Beautify Org mode tags" single ((:commit . "232a9ad76a55c40c6de58c7d266cc5e61a6b76a0") (:keywords "hypermedia") (:url . "https://repo.or.cz/org-tag-beautify.git"))])
- (org-tagged . [(20220926 2048) ((s (1 13 0)) (dash (2 19 1)) (emacs (28 1)) (org (9 5 2))) "Dynamic block for tagged org-mode todos" single ((:commit . "4b0174473772fca976426e982bb3f4a3037c1e37") (:authors ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainers ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainer "Christian Köstlin" . "christian.koestlin@gmail.com") (:keywords "org-mode" "org" "gtd" "tools") (:url . "http://github.com/gizmomogwai/org-tagged"))])
- (org-tanglesync . [(20200127 1616) ((emacs (24 4))) "Syncing org src blocks with tangled external files" single ((:commit . "31aa5502d1d4f8b032807949908c016b00556684") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://github.com/mtekman/org-tanglesync.el"))])
- (org-tfl . [(20170923 1218) ((org (0 16 2)) (cl-lib (0 5)) (emacs (24 1))) "Transport for London meets Orgmode" tar ((:commit . "f0d7d39106a1de5457f5160cddd98ab892b61066") (:authors ("storax (David Zuber), <zuber [dot] david [at] gmx [dot] de>")) (:maintainers ("storax (David Zuber), <zuber [dot] david [at] gmx [dot] de>")) (:maintainer "storax (David Zuber), <zuber [dot] david [at] gmx [dot] de>") (:keywords "org" "tfl") (:url . "https://github.com/storax/org-tfl"))])
- (org-themis . [(20160122 404) ((cl-lib (0 4))) "Experimental project management mode for org-mode" single ((:commit . "78aadbbe22b1993be5c4accd0d3f91a4e85c9a3c") (:maintainers ("Zachary Elliott" . "contact@zell.io")) (:maintainer "Zachary Elliott" . "contact@zell.io") (:keywords "org-mode" "elisp" "project") (:url . "http://github.com/zellio/org-themis"))])
- (org-tidy . [(20230404 1119) ((emacs (27 1)) (dash (2 19 1))) "A minor mode to tidy org-mode buffers" single ((:commit . "2acf3f9b132bed43ae1c869140bdcc4d2fb7e0eb") (:authors ("Xuqing Jia" . "jxq@jxq.me")) (:maintainers ("Xuqing Jia" . "jxq@jxq.me")) (:maintainer "Xuqing Jia" . "jxq@jxq.me") (:keywords "convenience" "org") (:url . "https://github.com/jxq0/org-tidy"))])
- (org-time-budgets . [(20200715 1016) ((alert (0 5 10)) (cl-lib (0 5))) "Define time budgets and display clocked time." single ((:commit . "1d6bfc323013bbf725167842d9e097fad805de03") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com"))])
- (org-timeline . [(20211110 1952) ((dash (2 13 0)) (emacs (24 3))) "Add graphical view of agenda to agenda buffer." single ((:commit . "2b300abc8adc9955418fa2334f55e0610bff79f5") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "calendar") (:url . "https://github.com/Fuco1/org-timeline/"))])
- (org-toodledo . [(20150301 1113) ((request-deferred (0 2 0)) (emacs (24)) (cl-lib (0 5))) "Toodledo integration for Emacs Org mode" tar ((:commit . "01b53b637f304b89cd3bf2d29009b5ed6ad9466d") (:authors ("Christopher J. White" . "emacs@grierwhite.com")) (:maintainers ("Christopher J. White" . "emacs@grierwhite.com")) (:maintainer "Christopher J. White" . "emacs@grierwhite.com") (:keywords "outlines" "data"))])
- (org-tracktable . [(20161118 1329) ((emacs (24)) (cl-lib (0 5))) "Track your writing progress in an org-table" single ((:commit . "8e0e60a582a034bd66d5efb72d513140b7d4d90a") (:authors ("tty-tourist" . "andreasrasholm@protonmail.com")) (:maintainers ("tty-tourist" . "andreasrasholm@protonmail.com")) (:maintainer "tty-tourist" . "andreasrasholm@protonmail.com") (:keywords "org" "writing") (:url . "https://github.com/tty-tourist/org-tracktable"))])
- (org-transform-tree-table . [(20200413 1959) ((dash (2 10 0)) (s (1 3 0))) "Transform org-mode tree with properties to a table, and the other way around" single ((:commit . "d84e7fb87bf2d5fc2be252500de0cddf20facf4f") (:authors (nil . "Johan Lindstrom <buzzwordninja not_this_bit@googlemail.com>")) (:maintainers (nil . "Johan Lindstrom <buzzwordninja not_this_bit@googlemail.com>")) (:maintainer nil . "Johan Lindstrom <buzzwordninja not_this_bit@googlemail.com>") (:keywords "org-mode" "table" "org-table" "tree" "csv" "convert") (:url . "https://github.com/jplindstrom/emacs-org-transform-tree-table"))])
- (org-tree-slide . [(20230305 441) ((emacs (25 2))) "A presentation tool for org-mode" tar ((:commit . "07906356f0b8d8ac51645b0994b8108deb53003d") (:authors ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainers ("Takaaki ISHIKAWA <takaxp at ieee dot org>")) (:maintainer "Takaaki ISHIKAWA <takaxp at ieee dot org>") (:keywords "convenience" "org-mode" "presentation" "narrowing") (:url . "https://github.com/takaxp/org-tree-slide"))])
- (org-tree-slide-pauses . [(20201215 146) ((emacs (24 5)) (org-tree-slide (2 8 4))) "Bring the pause command from Beamer to org-tree-slide" single ((:commit . "f02af7102e9ecef7c3dac0d376d85bbb8c4de4cc") (:authors ("cnngimenez")) (:maintainers ("cnngimenez")) (:maintainer "cnngimenez") (:keywords "convenience" "org-mode" "presentation") (:url . "https://github.com/cnngimenez/org-tree-slide-pauses"))])
- (org-treescope . [(20200503 1609) ((emacs (24 3)) (org (9 2 3)) (org-ql (0 5 -1)) (dash (2 17 0))) "Time scoping sparse trees within org" tar ((:commit . "a7c386ff134c71fd4f1f042e320751f077d57ddb") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://github.com/mtekman/org-treescope.el"))])
- (org-treeusage . [(20221011 1301) ((emacs (26 1)) (dash (2 17 0)) (org (9 1 6))) "Examine the usage of org headings in a tree-like manner" tar ((:commit . "c561b3d468aa35e70a43d9a18a4f505996ae882d") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://github.com/mtekman/org-treeusage.el"))])
- (org-trello . [(20210314 1901) ((emacs (24 3)) (request-deferred (0 2 0)) (deferred (0 4 0)) (s (1 11 0)) (dash (2 18 0))) "Minor mode to synchronize org-mode buffer and trello board" tar ((:commit . "9c1c94dff1a46631669023286078b887d077c305") (:authors ("Antoine R. Dumont (@ardumont)" . "antoine.romain.dumont@gmail.com")) (:maintainer "Antoine R. Dumont (@ardumont)" . "antoine.romain.dumont@gmail.com") (:keywords "org-mode" "trello" "sync" "org-trello") (:url . "https://github.com/org-trello/org-trello"))])
- (org-unique-id . [(20220907 821) ((emacs (25 1)) (org (9 3))) "Create unique IDs for org headers" single ((:commit . "c3a0908ff2123c8786735f3c6f35e905efea2ef6") (:authors ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainers ("Lucien Cartier-Tilet" . "lucien@phundrak.com")) (:maintainer "Lucien Cartier-Tilet" . "lucien@phundrak.com") (:keywords "convenience") (:url . "https://labs.phundrak.com/phundrak/org-unique-id"))])
- (org-variable-pitch . [(20220220 1757) ((emacs (25))) "Minor mode for variable pitch text in org mode." single ((:commit . "350af0e5d53307c900e4f8b2617f3852f51a74d2") (:authors ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainers ("Göktuğ Kayaalp" . "self@gkayaalp.com")) (:maintainer "Göktuğ Kayaalp" . "self@gkayaalp.com") (:keywords "faces") (:url . "https://dev.gkayaalp.com/elisp/index.html#ovp"))])
- (org-vcard . [(20221111 328) nil "org-mode support for vCard export and import." tar ((:commit . "92345fa9f1e1f928278a654ac5ad57d22d74dbef") (:authors ("Alexis <flexibeast@gmail.com>, Will Dey" . "will123dey@gmail.com")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:keywords "outlines" "org" "vcard") (:url . "https://github.com/flexibeast/org-vcard"))])
- (org-view-mode . [(20221208 327) ((emacs (25 1))) "Read-only viewer with less markup clutter in org mode files" tar ((:commit . "014f96acb7093ffae93c62aabff750e63c3babc5") (:authors ("Arthur Miller" . "arthur.miller@live.com")) (:maintainers ("Arthur Miller" . "arthur.miller@live.com")) (:maintainer "Arthur Miller" . "arthur.miller@live.com") (:keywords "convenience" "outlines" "tools") (:url . "https://github.com/amno1/org-view-mode"))])
- (org-visibility . [(20220929 1415) ((emacs (27 1))) "Persistent org tree visibility" single ((:commit . "afa4b6f8ff274df87eb11f1afd0321084a45a2ab") (:authors ("Kyle W T Sherman" . "kylewsherman@gmail.com")) (:maintainers ("Kyle W T Sherman" . "kylewsherman@gmail.com")) (:maintainer "Kyle W T Sherman" . "kylewsherman@gmail.com") (:keywords "outlines" "convenience") (:url . "https://github.com/nullman/emacs-org-visibility"))])
- (org-wc . [(20200731 2244) nil "Count words in org mode trees." single ((:commit . "dbbf794e4ec6c4080d945f43338185e34a4a582d") (:authors ("Simon Guest")) (:maintainers ("Simon Guest")) (:maintainer "Simon Guest"))])
- (org-web-tools . [(20201212 1058) ((emacs (25 1)) (org (9 0)) (dash (2 12)) (esxml (0 3 4)) (s (1 10 0)) (request (0 3 0))) "Display and capture web content with Org-mode" tar ((:commit . "b94a07add8558ef7b0666173dbb8a2554f1d41a6") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "hypermedia" "outlines" "org" "web") (:url . "http://github.com/alphapapa/org-web-tools"))])
- (org-wild-notifier . [(20230323 920) ((alert (1 2)) (async (1 9 3)) (dash (2 18 0)) (emacs (24 4))) "Customizable org-agenda notifications" single ((:commit . "cdca8be45b80ab52077a915e77c625bc0ad07dd7") (:authors ("Artem Khramov" . "akhramov+emacs@pm.me")) (:maintainers ("Artem Khramov" . "akhramov+emacs@pm.me")) (:maintainer "Artem Khramov" . "akhramov+emacs@pm.me") (:keywords "notification" "alert" "org" "org-agenda" "agenda") (:url . "https://github.com/akhramov/org-wild-notifier.el"))])
- (org-working-set . [(20220414 1402) ((org (9 3)) (dash (2 12)) (s (1 12)) (emacs (26 3))) "Manage and visit a small set of org-nodes." single ((:commit . "6af54ed3a5d9bf90629223157803c42f5d3b152c") (:authors ("Marc Ihm" . "1@2484.de")) (:maintainers ("Marc Ihm" . "1@2484.de")) (:maintainer "Marc Ihm" . "1@2484.de") (:url . "https://github.com/marcIhm/org-working-set"))])
- (org-wunderlist . [(20191017 1917) ((request-deferred (0 2 0)) (alert (1 1)) (emacs (24)) (cl-lib (0 5)) (org (8 2 4)) (s (1 9 0))) "Org sync with Wunderlist" single ((:commit . "1a084bb49be4b5a1066db9cd9b7da2f8efab293f") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience") (:url . "https://github.com/myuhe/org-wunderlist.el"))])
- (org-zettelkasten . [(20230428 1502) ((emacs (25 1)) (org (9 3))) "A Zettelkasten mode leveraging Org" tar ((:commit . "ef005996a857af1049fdf80e07cb5eb46990626e") (:authors ("Yann Herklotz" . "yann@ymhg.org")) (:maintainers ("Yann Herklotz" . "yann@ymhg.org")) (:maintainer "Yann Herklotz" . "yann@ymhg.org") (:keywords "files" "hypermedia" "org" "notes") (:url . "https://sr.ht/~ymherklotz/org-zettelkasten"))])
- (org2blog . [(20230501 2319) ((htmlize (1 56)) (hydra (0 15 0)) (xml-rpc (1 6 15)) (writegood-mode (2 2 0)) (metaweblog (1 1 16))) "Blog from Org mode to WordPress" tar ((:commit . "a9eb85449975191f214b566cc091004dd81672d8") (:authors ("Puneeth Chaganti" . "punchagan+org2blog@gmail.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com") (:keywords "comm" "convenience" "outlines" "wp") (:url . "https://github.com/org2blog/org2blog"))])
- (org2ctex . [(20200331 550) ((emacs (24 4))) "Export org to ctex (a latex macro for Chinese)" single ((:commit . "2e40aa5e78b0562516f46f689e7b74cdf451cc2a") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/org2ctex"))])
- (org2elcomment . [(20170324 945) ((org (8 3 4))) "Convert Org file to Elisp comments" single ((:commit . "c88a75d9587c484ead18f7adf08592b09c1cceb0") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (org2issue . [(20190531 941) ((org (8 0)) (emacs (24 4)) (ox-gfm (0 1)) (gh (0 1)) (s (20160405 920))) "export org to github issue" single ((:commit . "910b98c858762fd14b11d261626c5e979dde0833") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "github" "org") (:url . "https://github.com/lujun9972/org2issue"))])
- (org2jekyll . [(20210829 1113) ((dash (2 18 0)) (s (1 9 0))) "Minor mode to publish org-mode post to jekyll without specific yaml" tar ((:commit . "4393402448da722667f6f5a4d742fa817dec0c0f") (:authors ("Antoine R. Dumont (@ardumont)" . "antoine.romain.dumont@gmail.com")) (:maintainers ("Antoine R. Dumont (@ardumont)" . "antoine.romain.dumont@gmail.com")) (:maintainer "Antoine R. Dumont (@ardumont)" . "antoine.romain.dumont@gmail.com") (:keywords "org-mode" "jekyll" "blog" "publish") (:url . "https://github.com/ardumont/org2jekyll"))])
- (org2web . [(20210203 324) ((cl-lib (1 0)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (el2org (0 10)) (simple-httpd (0 1))) "A static site generator based on org mode." tar ((:commit . "6f5c5f0cc5c877ac3a383782bbe8751264d807b6") (:authors ("Feng Shu <tumashu AT 163.com>") ("Jorge Javier Araya Navarro <elcorreo AT deshackra.com>") ("Kelvin Hu <ini DOT kelvin AT gmail DOT com>")) (:maintainer "Feng Shu <tumashu AT 163.com>") (:keywords "org-mode" "convenience" "beautify") (:url . "https://github.com/tumashu/org2web"))])
- (organic-green-theme . [(20230121 1815) nil "Low-contrast green color theme." single ((:commit . "7ca93a1c42bba1bcced181bd8cc34cb57be39537"))])
- (organize-imports-java . [(20220704 657) ((emacs (25 1)) (f (0 20 0)) (s (1 12 0)) (dash (2 14 1)) (ht (2 2))) "Automatically organize imports in Java code" tar ((:commit . "5965228882c6b72a9e38ad61a047e599c8488d20") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "organize" "imports" "java" "eclipse") (:url . "https://github.com/jcs-elpa/organize-imports-java"))])
- (orgbox . [(20180827 218) ((org (8 0)) (cl-lib (0 5))) "Mailbox-like task scheduling Org." single ((:commit . "609e5e37348815ec3ba53ab6d643e38b0cc4fe17") (:authors ("Yasuhito Takamiya" . "yasuhito@gmail.com")) (:maintainers ("Yasuhito Takamiya" . "yasuhito@gmail.com")) (:maintainer "Yasuhito Takamiya" . "yasuhito@gmail.com") (:keywords "org") (:url . "https://github.com/yasuhito/orgbox"))])
- (orgit . [(20230212 2013) ((emacs (25 1)) (compat (29 1 3 4)) (magit (3 0)) (org (9 4))) "Support for Org links to Magit buffers" single ((:commit . "fc40397f7b36fa513d41f3119b7430cb236de9dd") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "hypermedia" "vc") (:url . "https://github.com/magit/orgit"))])
- (orgit-forge . [(20230212 2013) ((emacs (25 1)) (compat (29 1 3 4)) (forge (0 3)) (magit (3 3)) (org (9 5)) (orgit (1 8))) "Org links to Forge issue buffers" single ((:commit . "6f424ff3a2df7d9c00c217011949c1367cc15227") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "hypermedia" "vc") (:url . "https://github.com/magit/orgit-forge"))])
- (orglink . [(20230212 2213) ((emacs (25 1)) (compat (29 1 3 4)) (org (9 5)) (seq (2 23))) "Use Org Mode links in other modes" single ((:commit . "168d46a33476c4c8ce56818faa6183421b16d211") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "hypermedia") (:url . "https://github.com/tarsius/orglink"))])
- (orglue . [(20200411 311) ((org (9 3)) (epic (0 2))) "more functionality to org-mode." tar ((:commit . "9d5a8e24be9acb8c55bb4d6aa8b98e30e2677401") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net") (:keywords "org"))])
- (orgmdb . [(20230312 2231) ((emacs (27 1)) (dash (2 11 0)) (s (1 12 0)) (org (8 0 0))) "An OMDb API client with some convenience functions" single ((:commit . "385a747f41130b714207432045161915eb65b206") (:authors ("Isa Mert Gurbuz" . "isamert@protonmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamert@protonmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamert@protonmail.com") (:url . "https://github.com/isamert/orgmdb"))])
- (orgnav . [(20170608 1713) ((helm (2 7 0)) (s (1 11 0)) (dash (1 11 0)) (emacs (24))) "Org tree navigation using helm" tar ((:commit . "9e2cac9c1a67af5f0080e60022e821bf7b70312d") (:authors ("Facet Framer" . "facet@facetframer.com")) (:maintainers ("Facet Framer" . "facet@facetframer.com")) (:maintainer "Facet Framer" . "facet@facetframer.com") (:keywords "convenience" "outlines") (:url . "http://github.com/facetframer/orgnav"))])
- (orgstrap . [(20230408 2232) ((emacs (24 4))) "Bootstrap an Org file using file local variables" single ((:commit . "f35bccde556b0f82515e79ee69f4379469276356") (:authors ("Tom Gillespie")) (:maintainers ("Tom Gillespie")) (:maintainer "Tom Gillespie") (:keywords "lisp" "org" "org-mode" "bootstrap") (:url . "https://github.com/tgbugs/orgstrap"))])
- (orgtbl-aggregate . [(20230205 836) ((emacs (26 1))) "Create an aggregated Org table from another one" single ((:commit . "4f9fcb4f7380b247d628b899135df23c8fc8b6f1") (:keywords "data" "extensions") (:url . "https://github.com/tbanel/orgaggregate/blob/master/README.org"))])
- (orgtbl-ascii-plot . [(20230122 816) nil "ascii-art bar plots in org-mode tables" single ((:commit . "4160128045b271bc1aef3d14dbf0c5b53ae58bd2") (:authors ("Thierry Banel tbanelwebmin at free dot fr") ("Michael Brand")) (:maintainers ("Thierry Banel tbanelwebmin at free dot fr")) (:maintainer "Thierry Banel tbanelwebmin at free dot fr") (:keywords "org" "table" "ascii" "plot"))])
- (orgtbl-fit . [(20230110 1544) ((emacs (24 4))) "Regression-fit a column in an Org Mode table" single ((:commit . "5bde4902187b2578dc39ee3a02cd7c84c4470b8a") (:authors ("Thierry Banel tbanelwebmin at free dot fr")) (:maintainers ("Thierry Banel tbanelwebmin at free dot fr")) (:maintainer "Thierry Banel tbanelwebmin at free dot fr") (:keywords "data" "extensions") (:url . "https://github.com/tbanel/orgtblfit/blob/master/README.org"))])
- (orgtbl-join . [(20230127 2133) ((emacs (24 3))) "Join columns from another Org Mode table" single ((:commit . "257bd101a142aaad2fc3993f7752fe839d1663e0") (:authors ("Thierry Banel tbanelwebmin at free dot fr")) (:maintainers ("Thierry Banel tbanelwebmin at free dot fr")) (:maintainer "Thierry Banel tbanelwebmin at free dot fr") (:keywords "data" "extensions") (:url . "https://github.com/tbanel/orgtbljoin/blob/master/README.org"))])
- (orgtbl-show-header . [(20141031 1547) nil "Show the header of the current column in the minibuffer" single ((:commit . "f0f48ccc0f96d4aa2a676ff609d9dddd71748e6f") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com"))])
- (origami . [(20200331 1019) ((s (1 9 0)) (dash (2 5 0)) (emacs (24)) (cl-lib (0 5))) "Flexible text folding" tar ((:commit . "e558710a975e8511b9386edc81cd6bdd0a5bda74") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainers ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com") (:keywords "folding") (:url . "https://github.com/gregsexton/origami.el"))])
- (origami-predef . [(20200615 1044) ((emacs (24 3)) (origami (1 0))) "Apply folding when finding (opening) files" single ((:commit . "edcba971ba52a14f69a436ad47888827d7927982") (:authors ("Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainers ("Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainer "Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com") (:keywords "convenience" "folding") (:url . "https://github.com/alvarogonzalezsotillo/origami-predef"))])
- (ormolu . [(20220530 921) ((emacs (24)) (reformatter (0 4))) "Format Haskell source code using the \"ormolu\" program" single ((:commit . "a6b1d3f8838d067ac5352fb0673c3c3dae7abd73") (:authors ("Vasiliy Yorkin" . "vasiliy.yorkin@gmail.com")) (:maintainers ("Vasiliy Yorkin")) (:maintainer "Vasiliy Yorkin") (:keywords "files" "tools") (:url . "https://github.com/vyorkin/ormolu.el"))])
- (orthodox-christian-new-calendar-holidays . [(20210830 1657) nil "Feasts (NS)" single ((:commit . "6869024ecd45eefd0ec648979c6a59d7c79770e0") (:authors ("Carson Chittom" . "carson@wistly.net")) (:maintainers ("Carson Chittom" . "carson@wistly.net")) (:maintainer "Carson Chittom" . "carson@wistly.net") (:keywords "calendar") (:url . "https://github.com/cmchittom/orthodox-christian-new-calendar-holidays"))])
- (osa . [(20200522 2103) ((emacs (25 1))) "OSA (JavaScript / AppleScript) bridge" tar ((:commit . "615ca9eef4131a23d9971691fa0d0f20fe59d01b") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org") (:keywords "extensions") (:url . "https://github.com/atomontage/osa"))])
- (osa-chrome . [(20201122 1639) ((emacs (25 1)) (osa (1 0))) "Google Chrome remote tab control" tar ((:commit . "9148e21cf2e91b357f5ea3a349975e8b89c8d5e4") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org") (:keywords "comm") (:url . "https://github.com/atomontage/osa-chrome"))])
- (osm . [(20230501 1739) ((emacs (27 1)) (compat (29 1 4 0))) "OpenStreetMap viewer" tar ((:commit . "f08f03860021fa334708829d705370614e383880") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "network" "multimedia" "hypermedia" "mouse") (:url . "https://github.com/minad/osm"))])
- (osx-browse . [(20140508 2041) ((string-utils (0 3 2)) (browse-url-dwim (0 6 6))) "Web browsing helpers for OS X" single ((:commit . "838b81625853e04919fbb56fd21f387762b2e3f5") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "hypermedia" "external") (:url . "http://github.com/rolandwalker/osx-browse"))])
- (osx-clipboard . [(20141012 717) nil "Use the OS X clipboard from terminal Emacs" single ((:commit . "e46dd31327a3f92f77b013b4c9b1e5fdd0e5c73d") (:authors ("Jon Oddie <jonxfield at gmail.com>")) (:maintainers ("Jon Oddie <jonxfield at gmail.com>")) (:maintainer "Jon Oddie <jonxfield at gmail.com>") (:url . "https://github.com/joddie/osx-clipboard-mode"))])
- (osx-dictionary . [(20220801 1542) ((cl-lib (0 5))) "Interface for OSX Dictionary.app" tar ((:commit . "0715e5a3ac659df32a0f0fabfbbeef0228fbd9a9") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "mac" "dictionary") (:url . "https://github.com/xuchunyang/osx-dictionary.el"))])
- (osx-lib . [(20211206 619) ((emacs (24 4))) "Basic functions for Apple/OSX" single ((:commit . "7afdb57edd5725e8a66f841a90fa571a4cbb81e7") (:authors ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainers ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainer "Raghav Kumar Gautam" . "raghav@apache.org") (:keywords "apple" "applescript" "osx" "finder" "emacs" "elisp" "vpn" "speech") (:url . "https://github.com/raghavgautam/osx-lib"))])
- (osx-location . [(20200304 2209) ((emacs (24 1))) "Watch and respond to changes in geographical location on OS X" tar ((:commit . "733f116dbc56ac73bee3cebe4a489dc9eb37ab78") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "calendar") (:url . "https://github.com/purcell/osx-location"))])
- (osx-org-clock-menubar . [(20150205 2111) nil "simple menubar integration for org-clock" tar ((:commit . "9964d2a97cc2fb6570dc4116da44f73bd8eb7cb3") (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainers ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com") (:keywords "org" "osx") (:url . "https://github.com/jordonbiondo/osx-org-clock-menubar"))])
- (osx-plist . [(20200212 1724) ((emacs (25 1))) "Apple plist file parser" single ((:commit . "cd86c03a52eab9b1a1496618809155b25b030ba6") (:authors ("Theresa O'Connor" . "tess@oconnor.cx")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:keywords "convenience") (:url . "https://github.com/gonewest818/osx-plist"))])
- (osx-pseudo-daemon . [(20200215 513) nil "Daemon mode that plays nice with OSX." single ((:commit . "564b006835facc4a8df247d8a47ab1030d7e7beb") (:authors ("Ryan C. Thompson")) (:maintainers ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:keywords "convenience" "osx") (:url . "https://github.com/DarwinAwardWinner/osx-pseudo-daemon"))])
- (osx-trash . [(20220913 1736) ((emacs (24 1))) "System trash for OS X" tar ((:commit . "90f0c99206022fec646206018fcd63d9d2e57325") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "files" "convenience" "tools" "unix") (:url . "https://github.com/lunaryorn/osx-trash.el"))])
- (otama . [(20160404 1032) nil "Org-table Manipulator" single ((:commit . "b69e0740846ace7885b0c0717f7abe8d0419eefd") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainers ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net") (:keywords "database" "org-mode"))])
- (other-emacs-eval . [(20180408 1348) ((emacs (25 1)) (async (1 9 2))) "Evaluate the Emacs Lisp expression in other Emacs" single ((:commit . "8ace5acafef65daabf0c6619eff60733d7f5d792") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "tools") (:url . "https://github.com/xuchunyang/other-emacs-eval"))])
- (ouroboros . [(20230429 1542) ((emacs (27 1)) (dash (2 19 0)) (cbor (0 2 4)) (bech32 (0 2 1))) "Ouroboros network mini-protocol" single ((:commit . "8bb16c729003a6ef0d9505caefd6611c4a7f05f6") (:authors ("Oscar Najera <https://oscarnajera.com>")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com") (:url . "https://github.com/Titan-C/cardano.el"))])
- (outline-magic . [(20180619 1819) nil "outline mode extensions for Emacs" single ((:commit . "2a5f07417b696cf7541d435c43bafcc64817636b") (:authors ("Carsten Dominik" . "dominik@science.uva.nl")) (:maintainers ("Thorsten Jolitz <tjolitz AT gmail DOT com>")) (:maintainer "Thorsten Jolitz <tjolitz AT gmail DOT com>") (:keywords "outlines"))])
- (outline-minor-faces . [(20230407 1051) ((emacs (25 1)) (compat (29 1 3 4))) "Headings faces for outline-minor-mode" single ((:commit . "0e7cd26d4ebe9a1c842645bd3535fc835d16fdf4") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "faces" "outlines") (:url . "https://github.com/tarsius/outline-minor-faces"))])
- (outline-toc . [(20200401 1208) nil "Sidebar showing a \"table of contents\"." single ((:commit . "81d373633b40628cc3a6b6fb534fd7730076bcdb") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:keywords "convenience" "outlines") (:url . "https://github.com/abingham/outline-toc.el"))])
- (outlook . [(20180428 1430) ((emacs (24 4))) "send emails in MS Outlook style" tar ((:commit . "b6a7a06b996d84647e8024412876e9e76ca884e4") (:authors ("Andrew Savonichev")) (:maintainers ("Andrew Savonichev")) (:maintainer "Andrew Savonichev") (:keywords "mail") (:url . "https://github.com/asavonic/outlook.el"))])
- (outorg . [(20190720 2002) ((emacs (24 4))) "Org-style comment editing" single ((:commit . "ef0f86f4b893b30be8bcf8b43a5ec357a6c70f07") (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/outorg"))])
- (outrespace . [(20220218 1936) ((emacs (24 4))) "Some c++ namespace utility functions" single ((:commit . "3c8efa5e7903d88a2e81178a5def627f37379ee4") (:authors ("Dan Harms" . "danielrharms@gmail.com")) (:maintainers ("Dan Harms" . "danielrharms@gmail.com")) (:maintainer "Dan Harms" . "danielrharms@gmail.com") (:keywords "tools" "c++" "namespace") (:url . "https://github.com/articuluxe/outrespace.git"))])
- (outshine . [(20220326 540) ((outorg (2 0)) (cl-lib (0 5))) "outline with outshine outshines outline" tar ((:commit . "bf1eed10dd7a89b63d0fc014944033db397c1e23") (:authors ("Thorsten Jolitz")) (:maintainers ("Thibault Polge" . "thibault@thb.lt")) (:maintainer "Thibault Polge" . "thibault@thb.lt") (:keywords "convenience" "outlines" "org") (:url . "https://github.com/alphapapa/outshine"))])
- (ov . [(20200326 1042) ((emacs (24 3))) "Overlay library for Emacs Lisp" single ((:commit . "c5b9aa4e1b00d702eb2caedd61c69a22a5fa1fab") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainers ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:keywords "convenience" "overlay") (:url . "https://github.com/ShingoFukuyama/ov.el"))])
- (overcast-theme . [(20200425 1601) ((emacs (24))) "A dark but vibrant color theme for Emacs" single ((:commit . "e02b835a08919ead079d7221d513348ac02ba92e") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:keywords "theme") (:url . "http://ismail.teamfluxion.com"))])
- (overseer . [(20180226 619) ((emacs (24)) (dash (2 10 0)) (pkg-info (0 4)) (f (0 18 1))) "Ert-runner Integration Into Emacs" single ((:commit . "02d49f582e80e36b4334c9187801c5ecfb027789") (:authors ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainers ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainer "Samuel Tonini" . "tonini.samuel@gmail.com") (:url . "http://www.github.com/tonini/overseer.el"))])
- (ovpn-mode . [(20210403 440) ((emacs (25)) (cl-lib (0 5))) "an openvpn management mode" single ((:commit . "4492098c771d094dd0661a5bc6906f65fb530825") (:authors ("Bas Alberts" . "bas@anti.computer")) (:maintainers ("Bas Alberts" . "bas@anti.computer")) (:maintainer "Bas Alberts" . "bas@anti.computer") (:keywords "comm") (:url . "https://github.com/anticomputer/ovpn-mode"))])
- (owcmd . [(20200517 2039) ((emacs (26 3))) "Run a single command in the other window" single ((:commit . "05fb8f8f81838b5888fdec8b3947096dd2222e61") (:authors ("Jacob First" . "jacob.first@member.fsf.org")) (:maintainers ("Jacob First" . "jacob.first@member.fsf.org")) (:maintainer "Jacob First" . "jacob.first@member.fsf.org") (:keywords "convenience") (:url . "https://github.com/fishyfriend/owcmd"))])
- (owdriver . [(20200410 1901) ((smartrep (0 0 3)) (log4e (0 2 0)) (yaxception (0 2 0))) "Quickly perform various actions on other windows" single ((:commit . "3c52a7b11c8275fdb2e4cf98f68f2a48ad09a3ae") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "convenience") (:url . "https://github.com/aki2o/owdriver"))])
- (ox-750words . [(20220625 1407) ((emacs (24 4)) (750words (0 0 1))) "Org mode exporter for 750words.com" single ((:commit . "43eee19428fc8f5a133192398510d7313eb33d97") (:authors ("Diego Zamboni <https://github.com/zzamboni>")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org") (:keywords "files" "org" "writing") (:url . "https://github.com/zzamboni/750words-client"))])
- (ox-asciidoc . [(20220625 2321) ((org (8 1))) "AsciiDoc Back-End for Org Export Engine" single ((:commit . "a55ac6adef39124c9434be47fe9cc0c75c4bfea2") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainers ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com") (:keywords "org" "asciidoc") (:url . "https://github.com/yashi/org-asciidoc"))])
- (ox-bb . [(20210222 2002) ((emacs (24 4)) (org (8 0))) "BBCode Back-End for Org Export Engine" single ((:commit . "a79dc519cd28c000ebca4254a4744ce2b9b82168") (:authors ("Christian Garbs" . "mitch@cgarbs.de")) (:maintainers ("Christian Garbs" . "mitch@cgarbs.de")) (:maintainer "Christian Garbs" . "mitch@cgarbs.de") (:keywords "bbcode" "org" "export" "outlines") (:url . "https://github.com/mmitch/ox-bb"))])
- (ox-bibtex-chinese . [(20170723 309) ((emacs (24 4))) "Let ox-bibtex work well for Chinese users" tar ((:commit . "2ad2364399229144110db7ef6365ad0461d6a38c") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/ox-bibtex-chinese.git"))])
- (ox-clip . [(20220117 1909) ((org (8 2)) (htmlize (0))) "Cross-platform formatted copying for org-mode" single ((:commit . "ff117cf3c619eef12eccc0ccbfa3f11adb73ea68") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainers ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu") (:keywords "org-mode") (:url . "https://github.com/jkitchin/ox-clip"))])
- (ox-epub . [(20181101 1854) ((emacs (24 3)) (org (9))) "Export org mode projects to EPUB" single ((:commit . "a66eeb00daa01ad403ac1a1db953ddbf9054be07") (:authors ("Mark Meyer" . "mark@ofosos.org")) (:maintainers ("Mark Meyer" . "mark@ofosos.org")) (:maintainer "Mark Meyer" . "mark@ofosos.org") (:keywords "hypermedia") (:url . "http://github.com/ofosos/org-epub"))])
- (ox-gemini . [(20220418 1433) ((emacs (26 1))) "Output gemini formatted documents from org-mode" single ((:commit . "168f820ea401fb813435a3a55af295873a4c110b") (:authors ("Justin Abrahms" . "justin@abrah.ms")) (:maintainers ("Justin Abrahms" . "justin@abrah.ms")) (:maintainer "Justin Abrahms" . "justin@abrah.ms") (:keywords "lisp" "gemini") (:url . "https://git.sr.ht/~abrahms/ox-gemini"))])
- (ox-gfm . [(20220910 1321) nil "Github Flavored Markdown Back-End for Org Export Engine" single ((:commit . "46faa67dbb3fb0cd7a76c3fe518f16e4195c22c7") (:authors ("Lars Tveito")) (:maintainers ("Lars Tveito")) (:maintainer "Lars Tveito") (:keywords "org" "wp" "markdown" "github"))])
- (ox-gist . [(20220410 2034) ((emacs (26 1)) (gist (1 4 0)) (s (1 12 0))) "Export Org mode buffers and subtrees to GitHub gists" single ((:commit . "e9f1f11af0e97fee30c2b15b56c236b1f4e1f400") (:authors ("Puneeth Chaganti" . "punchagan+emacs@muse-amuse.in")) (:maintainers ("Puneeth Chaganti" . "punchagan+emacs@muse-amuse.in")) (:maintainer "Puneeth Chaganti" . "punchagan+emacs@muse-amuse.in") (:keywords "org" "lisp" "gist" "github") (:url . "https://github.com/punchagan/org2gist/"))])
- (ox-haunt . [(20220615 7) ((emacs (26 1))) "Haunt-flavored HTML backend for the Org export engine" single ((:commit . "d32c4b1ab258dc34ca7e713152a274eab35d2608") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainers ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org") (:keywords "convenience" "hypermedia" "wp") (:url . "https://git.sr.ht/~jakob/ox-haunt"))])
- (ox-html5slide . [(20221025 521) ((org (8 0))) "Export org-mode to HTML5 slide." single ((:commit . "4e0d9026c96e1dde22cca7c700669f1f863a9d07") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:keywords "html" "presentation") (:url . "http://github.com/coldnew/org-html5slide"))])
- (ox-hugo . [(20221028 1631) ((emacs (26 3)) (tomelr (0 4 3))) "Hugo Markdown Back-End for Org Export Engine" tar ((:commit . "a66063a9915c859c57944564f0b8dbc7949d4449") (:authors ("Kaushal Modi" . "kaushal.modi@gmail.com") ("Matt Price" . "moptop99@gmail.com")) (:maintainers ("Kaushal Modi" . "kaushal.modi@gmail.com")) (:maintainer "Kaushal Modi" . "kaushal.modi@gmail.com") (:keywords "org" "markdown" "docs") (:url . "https://ox-hugo.scripter.co"))])
- (ox-impress-js . [(20150412 1716) ((org (8))) "impress.js Back-End for Org Export Engine" tar ((:commit . "91c6d2af6af308ade352a03355c4fb551b238c6b") (:authors ("Takumi Kinjo <takumi dot kinjo at gmail dot org>")) (:maintainers ("Takumi Kinjo <takumi dot kinjo at gmail dot org>")) (:maintainer "Takumi Kinjo <takumi dot kinjo at gmail dot org>") (:keywords "outlines" "hypermedia" "calendar" "wp") (:url . "https://github.com/kinjo/org-impress-js.el"))])
- (ox-ioslide . [(20161015 1338) ((emacs (24 1)) (org (8 0)) (cl-lib (0 5)) (f (0 17 2)) (makey (0 3))) "Export org-mode to Google I/O HTML5 slide." tar ((:commit . "6555680be5364c8ddd2bf446865cb1a82adb6b9e") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:keywords "html" "presentation") (:url . "http://github.com/coldnew/org-ioslide"))])
- (ox-jekyll-md . [(20211222 1718) nil "Export Jekyll on Markdown articles using org-mode." single ((:commit . "26edb3f4575bcb0f1a2aed56237cd89694284449") (:authors ("Elsa Gonsiorowski" . "gonsie@me.com")) (:maintainers ("Elsa Gonsiorowski" . "gonsie@me.com")) (:maintainer "Elsa Gonsiorowski" . "gonsie@me.com") (:keywords "org" "jekyll"))])
- (ox-jira . [(20220423 1403) ((org (8 3))) "JIRA Backend for Org Export Engine" single ((:commit . "00184f8fdef02a3a359a253712e8769cbfbea3ba") (:authors ("Stig Brautaset" . "stig@brautaset.org")) (:maintainers ("Stig Brautaset" . "stig@brautaset.org")) (:maintainer "Stig Brautaset" . "stig@brautaset.org") (:keywords "outlines" "hypermedia" "wp") (:url . "https://github.com/stig/ox-jira.el"))])
- (ox-json . [(20210928 347) ((emacs (24)) (org (9 2)) (s (1 12))) "JSON export backend for Org mode" single ((:commit . "4d2e0aa7f92d07e16cea2dd5e1d250a3f243c3cf") (:authors ("Jared Lumpe" . "mjlumpe@gmail.com")) (:maintainers ("Jared Lumpe" . "mjlumpe@gmail.com")) (:maintainer "Jared Lumpe" . "mjlumpe@gmail.com") (:keywords "outlines") (:url . "https://github.com/jlumpe/ox-json"))])
- (ox-latex-subfigure . [(20200326 919) ((emacs (24 4)) (org (9 0))) "Subfigure for latex export" single ((:commit . "be0a0dde62fde8cdf8d72b6968344906aa8c6f54") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainers ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:keywords "convenience" "ox" "latex" "subfigure" "org" "org-mode") (:url . "http://github.com/linktohack/ox-latex-subfigure"))])
- (ox-leanpub . [(20230415 2139) ((org (9 1)) (ox-gfm (1 0)) (emacs (26 1)) (s (1 12 0))) "Export Org documents to Leanpub book format" tar ((:commit . "e8cd440632fd46812d7311360f565828a12380b7") (:authors ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainers ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org") (:keywords "files" "org" "leanpub") (:url . "https://gitlab.com/zzamboni/ox-leanpub"))])
- (ox-linuxmag-fr . [(20230505 644) ((emacs (28 1))) "Org-mode exporter for the French GNU/Linux Magazine" tar ((:commit . "2e22e72cf886db104b6a31172736f073bf743eb4") (:url . "https://github.com/DamienCassou/ox-linuxmag-fr"))])
- (ox-mdx-deck . [(20181115 1847) ((emacs (24)) (ox-hugo (0 7))) "org-mode to mdx-deck exporter" single ((:commit . "f3dbc35870b69a5d8971b1647da8c5468f520c5d") (:authors ("Joshua Wolfe")) (:maintainers ("Joshua Wolfe")) (:maintainer "Joshua Wolfe") (:keywords "lisp" "org" "ox" "mdx" "deck") (:url . "https://github.com/WolfeCub/ox-mdx-deck/"))])
- (ox-mediawiki . [(20230425 115) ((cl-lib (0 5)) (s (1 9 0))) "Mediawiki Back-End for Org Export Engine" single ((:commit . "fa4954c12ab339ac8adf2830141390e71ee13067") (:authors ("Tom Alexander" . "tomalexander@paphus.com")) (:maintainers ("Tom Alexander" . "tomalexander@paphus.com")) (:maintainer "Tom Alexander" . "tomalexander@paphus.com") (:keywords "org" "wp" "mediawiki") (:url . "https://github.com/tomalexander/orgmode-mediawiki"))])
- (ox-minutes . [(20180202 1734) ((emacs (24 4))) "Plain text backend for Org for Meeting Minutes" single ((:commit . "27c29f3fdb9181322ae56f8bace8d95e621230e5") (:authors ("Kaushal Modi" . "kaushal.modi@gmail.com")) (:maintainers ("Kaushal Modi" . "kaushal.modi@gmail.com")) (:maintainer "Kaushal Modi" . "kaushal.modi@gmail.com") (:keywords "org" "exporter" "notes") (:url . "https://github.com/kaushalmodi/ox-minutes"))])
- (ox-nikola . [(20151114 1116) ((emacs (24 4)) (org (8 2 4)) (ox-rst (0 2))) "Export Nikola articles using org-mode." single ((:commit . "5bcbc1a38f6619f62294194f13ca0cd4ca14dd48") (:authors ("IGARASHI Masanao" . "syoux2@gmail.com")) (:maintainers ("IGARASHI Masanao" . "syoux2@gmail.com")) (:maintainer "IGARASHI Masanao" . "syoux2@gmail.com") (:keywords "org" "nikola") (:url . "https://github.com/masayuko/ox-nikola"))])
- (ox-pandoc . [(20230128 1219) ((org (8 2)) (emacs (24 4)) (dash (2 8)) (ht (2 0))) "An Org-mode exporter using pandoc" single ((:commit . "66c32cca4f6047dd7e0f77f10bd565a2d83d4729") (:authors ("KAWABATA, Taichi" . "kawabata.taichi@gmail.com") ("FENTON, Alex" . "a-fent@github")) (:maintainers ("FENTON, Alex" . "a-fent@github")) (:maintainer "FENTON, Alex" . "a-fent@github") (:keywords "tools") (:url . "https://github.com/a-fent/ox-pandoc"))])
- (ox-pukiwiki . [(20150124 1716) ((org (8 1))) "Pukiwiki Back-End for Org Export Engine" single ((:commit . "b53920abf698fa6682623d671108393e92c68bd7") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainers ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com") (:keywords "org" "pukiwiki") (:url . "https://github.com/yashi/org-pukiwiki"))])
- (ox-qmd . [(20230325 1315) ((emacs (27 2)) (request (0 3 3)) (mimetypes (1 0))) "Qiita Markdown Back-End for Org Export Engine" tar ((:commit . "0b5fa1e20aaa48d93600e1b8d09c3b6f55af3373") (:authors ("0x60DF" . "0x60DF@gmail.com")) (:maintainers ("0x60DF" . "0x60DF@gmail.com")) (:maintainer "0x60DF" . "0x60DF@gmail.com") (:keywords "wp") (:url . "https://github.com/0x60df/ox-qmd"))])
- (ox-report . [(20220910 951) ((emacs (24 4)) (org-msg (3 9))) "Export your org file to minutes report PDF file" single ((:commit . "029fac8d4c83cc8841ade0dfebc8b7d7508efbb2") (:authors ("Matthias David" . "matthias@gnu.re")) (:maintainers ("Matthias David" . "matthias@gnu.re")) (:maintainer "Matthias David" . "matthias@gnu.re") (:keywords "org" "outlines" "report" "exporter" "meeting" "minutes") (:url . "https://github.com/DarkBuffalo/ox-report"))])
- (ox-reveal . [(20221127 814) ((org (8 3))) "reveal.js Presentation Back-End for Org Export Engine" single ((:commit . "f55c851bf6aeb1bb2a7f6cf0f2b7bd0e79c4a5a0") (:authors ("Yujie Wen <yjwen.ty at gmail dot com>")) (:maintainers ("Yujie Wen <yjwen.ty at gmail dot com>")) (:maintainer "Yujie Wen <yjwen.ty at gmail dot com>") (:keywords "outlines" "hypermedia" "slideshow" "presentation"))])
- (ox-review . [(20220619 724) ((emacs (26 1)) (org (9))) "Re:VIEW Back-End for Org Export Engine" single ((:commit . "f7dc418f9812088afc0ee0d08f778a5654686ef3") (:authors ("Masashi Fujimoto")) (:maintainers ("Masashi Fujimoto")) (:maintainer "Masashi Fujimoto") (:keywords "outlines" "hypermedia") (:url . "https://github.com/masfj/ox-review"))])
- (ox-rfc . [(20220604 1114) ((emacs (24 3)) (org (8 3))) "RFC Back-End for Org Export Engine" single ((:commit . "f0fe3503f8732ea5e95a4016c6b7ce5b47cf6295") (:authors ("Christian Hopps" . "chopps@devhopps.com")) (:maintainers ("Christian Hopps" . "chopps@devhopps.com")) (:maintainer "Christian Hopps" . "chopps@devhopps.com") (:keywords "org" "rfc" "wp" "xml") (:url . "https://github.com/choppsv1/org-rfc-export"))])
- (ox-rss . [(20230408 231) ((emacs (26 1)) (org (9 3))) "RSS 2.0 Back-End for Org Export Engine" single ((:commit . "ee7347fca8f10a4b53075a8d1e3cac3aff6e6dac") (:authors ("Bastien Guerry" . "bzg@gnu.org")) (:maintainers ("Benedict Wang" . "foss@bhw.name")) (:maintainer "Benedict Wang" . "foss@bhw.name") (:keywords "org" "wp" "blog" "feed" "rss") (:url . "https://github.com/benedicthw/ox-rss.git"))])
- (ox-rst . [(20200815 1511) ((emacs (25 1)) (org (8 3))) "Export reStructuredText using org-mode." single ((:commit . "99fa790da55b57a3f2e9aa187493ba434a64250e") (:authors ("Masanao Igarashi" . "syoux2@gmail.com")) (:maintainers ("Masanao Igarashi" . "syoux2@gmail.com")) (:maintainer "Masanao Igarashi" . "syoux2@gmail.com") (:keywords "org" "rst" "rest" "restructuredtext") (:url . "https://github.com/msnoigrs/ox-rst"))])
- (ox-slack . [(20200108 1546) ((emacs (24)) (org (9 1 4)) (ox-gfm (1 0))) "Slack Exporter for org-mode" single ((:commit . "c55b003f4ac343d6c6d8ef7cbe01d0d100abac34") (:authors ("Matt Price")) (:maintainers ("Matt Price")) (:maintainer "Matt Price") (:keywords "org" "slack" "outlines") (:url . "https://github.com/titaniumbones/ox-slack"))])
- (ox-spectacle . [(20230307 316) ((emacs (28 1)) (org (8 3))) "Spectacle.js Presentation Back-End for Org Export Engine" single ((:commit . "c2d34f170f470461aeec983b778e9d165bdb4d1f") (:authors ("lorniu" . "lorniu@gmail.com")) (:maintainers ("lorniu" . "lorniu@gmail.com")) (:maintainer "lorniu" . "lorniu@gmail.com") (:keywords "convenience") (:url . "https://github.com/lorniu/ox-spectacle"))])
- (ox-ssh . [(20210917 1517) ((emacs (24 4))) "SSH Config Backend for Org Export Engine" single ((:commit . "be3b39160da6ae37b1f1cd175ed854ac41d1cb63") (:authors ("Dante Catalfamo")) (:maintainers ("Dante Catalfamo")) (:maintainer "Dante Catalfamo") (:keywords "outlines" "org" "ssh") (:url . "https://github.com/dantecatalfamo/ox-ssh"))])
- (ox-textile . [(20210919 1738) ((org (8 1))) "Textile Back-End for Org Export Engine" single ((:commit . "92764235055bd1b51411d3e9490023bed7437d7b") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainers ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com") (:keywords "org" "textile") (:url . "https://github.com/yashi/org-textile"))])
- (ox-tiddly . [(20200927 857) ((org (8)) (emacs (24 4))) "Org TiddlyWiki exporter" single ((:commit . "3377d8732aa916e736ce5822c7a9a4fbdc894e37") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainers ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch") (:keywords "org") (:url . "https://github.com/dfeich/org8-wikiexporters"))])
- (ox-timeline . [(20220321 2115) ((emacs (24 4))) "HTML Timeline Back-End for Org Export Engine" single ((:commit . "b28bd4ccd5fa114c0f51b9766f0b9be7fe05fdd8") (:authors ("Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>")) (:maintainers ("Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>")) (:maintainer "Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>") (:keywords "simple timeline" "timeline" "hypermedia" "html timeline") (:url . "https://github.com/jjuliano/org-simple-timeline"))])
- (ox-trac . [(20171026 1823) ((org (9 0))) "Org Export Backend to Trac WikiFormat" single ((:commit . "5ac6c81bbc18db6c17e267d6399778c3fb5bf1ee") (:authors ("Brian J. Carlson <hacker (at) abutilize (dot) com>")) (:maintainers ("Brian J. Carlson <hacker (at) abutilize (dot) com>")) (:maintainer "Brian J. Carlson <hacker (at) abutilize (dot) com>") (:keywords "org-mode" "trac") (:url . "https://github.com/JalapenoGremlin/ox-trac"))])
- (ox-tufte . [(20160926 1607) ((org (8 2)) (emacs (24))) "Tufte HTML org-mode export backend" single ((:commit . "ca1b16eb91b25bb4f05e58e9b6692e8486c8c619") (:authors ("M. Lee Hinman")) (:maintainers ("M. Lee Hinman")) (:maintainer "M. Lee Hinman") (:keywords "org" "tufte" "html") (:url . "https://github.com/dakrone/ox-tufte"))])
- (ox-twbs . [(20200628 1949) nil "Bootstrap compatible HTML Back-End for Org" single ((:commit . "e8a27dc78b7be494d9918f26db7a3bbb6b45020b") (:authors ("Carsten Dominik <carsten at orgmode dot org>") ("Jambunathan K <kjambunathan at gmail dot com>") ("Brandon van Beekum <marsmining at gmail dot com>")) (:maintainers ("Carsten Dominik <carsten at orgmode dot org>")) (:maintainer "Carsten Dominik <carsten at orgmode dot org>") (:keywords "org" "html" "publish" "twitter" "bootstrap") (:url . "https://github.com/marsmining/ox-twbs"))])
- (ox-twiki . [(20200927 857) ((org (8)) (emacs (24 4))) "Org Twiki and Foswiki export" single ((:commit . "3377d8732aa916e736ce5822c7a9a4fbdc894e37") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainers ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch") (:keywords "org") (:url . "https://github.com/dfeich/org8-wikiexporters"))])
- (ox-wk . [(20191231 2058) ((emacs (24 4)) (org (8 3))) "Wiki Back-End for Org Export Engine" single ((:commit . "d34d1b72e4e940745a377bfa745dfb618900a09e") (:authors ("Vilibald WanÄa" . "vilibald@wvi.cz")) (:maintainers ("Vilibald WanÄa" . "vilibald@wvi.cz")) (:maintainer "Vilibald WanÄa" . "vilibald@wvi.cz") (:keywords "org" "wp" "wiki") (:url . "https://github.com/w-vi/ox-wk.el"))])
- (ox-yaow . [(20220629 1539) ((emacs (27)) (f (0 2 0)) (s (1 12 0)) (dash (2 17 0))) "Generate html pages from org files" single ((:commit . "71d7cee736542f6504c4733d040601d2d2086443") (:authors ("Laurence Warne")) (:maintainers ("Laurence Warne")) (:maintainer "Laurence Warne") (:keywords "outlines" "hypermedia") (:url . "https://github.com/LaurenceWarne/ox-yaow.el"))])
- (ox-zenn . [(20200924 1607) ((emacs (27 1)) (org (9 0))) "Zenn flavored markdown backend for org export engine" single ((:commit . "b53bd82116c9f7dbb5b476d2cfcc8ed0f3bc9c78") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/ox-zenn.el"))])
- (p4 . [(20150721 1937) nil "Simple Perforce-Emacs Integration" single ((:commit . "eff047caa75dbe4965defca9d1212454cdb755d5") (:authors ("Gareth Rees" . "gdr@garethrees.org")) (:maintainers ("Gareth Rees" . "gdr@garethrees.org")) (:maintainer "Gareth Rees" . "gdr@garethrees.org") (:url . "https://github.com/gareth-rees/p4.el"))])
- (pabbrev . [(20160320 2101) nil "Predictive abbreviation expansion" single ((:commit . "56400d5d256b42ffe45c229ea9827f026b650cf5") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))])
- (pacfiles-mode . [(20230503 1523) ((emacs (26 1))) "The pacnew and pacsave merging tool" tar ((:commit . "a613d1d88dba4cb293ecaf42a9aeff7d8a3ce8aa") (:authors ("Carlos G. Cordero <http://github/UndeadKernel>")) (:maintainers ("Carlos G. Cordero" . "pacfiles@binarycharly.com")) (:maintainer "Carlos G. Cordero" . "pacfiles@binarycharly.com") (:keywords "files" "pacman" "arch" "pacnew" "pacsave" "update" "linux") (:url . "https://github.com/UndeadKernel/pacfiles-mode"))])
- (pack . [(20191017 456) ((emacs (24)) (cl-lib (0 5))) "Pack and unpack archive files" single ((:commit . "85cd856fdc00a2365e88b50373b99f1b3d2227be") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainers ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com") (:keywords "files" "dired") (:url . "https://github.com/10sr/pack-el"))])
- (package+ . [(20210124 640) ((emacs (24 3))) "Extensions for the package library." tar ((:commit . "06fbc904e09d3349b669c2624a587fee5accf5ef") (:authors ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainers ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainer "Ryan Davis" . "ryand-ruby@zenspider.com") (:keywords "extensions" "tools") (:url . "https://github.com/zenspider/package"))])
- (package-build . [(20230504 2326) ((emacs (26 1))) "Tools for assembling a package archive" tar ((:commit . "e3b19a3d480848683266867f2c258ef46f052589") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net") ("Steve Purcell" . "steve@sanityinc.com") ("Jonas Bernoulli" . "jonas@bernoul.li") ("Phil Hagelberg" . "technomancy@gmail.com")) (:maintainers ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net") (:keywords "maint" "tools") (:url . "https://github.com/melpa/package-build"))])
- (package-filter . [(20161122 719) nil "package archive whitelist and blacklist" single ((:commit . "c8e2531227c02c4c5e9d593f2cdb6a4ab4a6849b") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainers ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net") (:url . "https://github.com/milkypostman/package-filter"))])
- (package-lint . [(20230315 1052) ((cl-lib (0 5)) (emacs (24 1)) (let-alist (1 0 6))) "A linting library for elisp package authors" tar ((:commit . "78ae823bd89d83299a0d7a52797d2593d03e9795") (:authors ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "lisp") (:url . "https://github.com/purcell/package-lint"))])
- (package-lint-flymake . [(20230315 1052) ((emacs (26 1)) (package-lint (0 5))) "A package-lint Flymake backend" single ((:commit . "78ae823bd89d83299a0d7a52797d2593d03e9795") (:url . "https://github.com/purcell/package-lint"))])
- (package-loading-notifier . [(20220130 318) ((emacs (25))) "Notify a package is being loaded" single ((:commit . "bc06ba97a0537aa202f277e5597ac96ca39307ab") (:authors ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainers ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainer "SeungKi Kim" . "tttuuu888@gmail.com") (:keywords "convenience" "faces" "config" "startup") (:url . "https://github.com/tttuuu888/package-loading-notifier"))])
- (package-safe-delete . [(20150116 1607) ((emacs (24)) (epl (0 7 -4))) "Safely delete package.el packages" single ((:commit . "138171e4fc03c0ef05a8260cbb5cd2e114c1c194") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/package-safe-delete"))])
- (package-utils . [(20220630 2345) ((restart-emacs (0 1 1))) "Extensions for package.el" single ((:commit . "0168172062467b1bff913ea955b2ef709b43ecfa") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainers ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:keywords "package" "convenience") (:url . "https://github.com/Silex/package-utils"))])
- (packed . [(20221130 2228) ((emacs (25 1)) (compat (28 1 1 0))) "[DEPRECATED] Package manager agnostic Emacs Lisp package utilities" single ((:commit . "169064f7acfe198cc7dd43d02518b773691e1314") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "lisp") (:url . "https://github.com/emacscollective/packed"))])
- (pacmacs . [(20220106 2248) ((emacs (24 4)) (dash (2 18 0)) (cl-lib (0 5)) (f (0 18 0))) "Pacman for Emacs" tar ((:commit . "25a8c30210f6bd94634a7ff743a2f8be391ed3b3") (:authors ("Codingteam" . "codingteam@conference.jabber.ru")) (:maintainers ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/codingteam/pacmacs.el"))])
- (pact-mode . [(20201219 2223) ((emacs (24 3))) "Mode for Pact, a LISPlike smart contract language." single ((:commit . "f48a4faf5f8f8435423bda3888eca6ee67ee13a9") (:authors ("Stuart Popejoy")) (:maintainers ("Stuart Popejoy" . "stuart@kadena.io")) (:maintainer "Stuart Popejoy" . "stuart@kadena.io") (:keywords "pact" "lisp" "languages" "blockchain" "smartcontracts" "tools" "mode") (:url . "https://github.com/kadena-io/pact-mode"))])
- (paganini-theme . [(20180815 1921) ((emacs (24 0))) "A colorful, dark and warm theme." single ((:commit . "255c5a2a8abee9c5935465ec42b9c3604c178c3c") (:authors ("Onur Temizkan")) (:maintainers ("Onur Temizkan")) (:maintainer "Onur Temizkan") (:url . "https://github.com/onurtemizkan/paganini"))])
- (page-break-lines . [(20210104 2224) ((emacs (24 4))) "Display ^L page breaks as tidy horizontal lines" single ((:commit . "69caea070379f3324c530e96e06625c3cd097cb9") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "faces") (:url . "https://github.com/purcell/page-break-lines"))])
- (pager . [(20151202 120) nil "windows-scroll commands" single ((:commit . "5c791ed23f1136e04040d6f4bc9b4ca5b6dc919f") (:authors (nil . "Mikael Sjödin -- mic@docs.uu.se")) (:maintainers (nil . "Mikael Sjödin -- mic@docs.uu.se")) (:maintainer nil . "Mikael Sjödin -- mic@docs.uu.se"))])
- (pager-default-keybindings . [(20130719 2057) ((pager (1 0))) "Add the default keybindings suggested for pager.el" single ((:commit . "dbbd49c2ac5906d1dabf9e9c832bfebc1ab405b3") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainers ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com") (:url . "http://github.com/nflath/pager-default-keybindings"))])
- (paimon . [(20220326 2051) ((aio (1 0)) (closql (1 2 0)) (emacs (27 1)) (emacsql (3 0 0)) (emacsql-sqlite (3 0 0)) (f (0 20 0)) (ht (2 4)) (transient (0 3 7)) (request (0 3 3))) "A major mode for Splunk" tar ((:commit . "01675ff30ce0f29ad81f9275b4fc0797c0a7073f") (:authors ("r0man" . "roman@burningswell.com")) (:maintainers ("r0man" . "roman@burningswell.com")) (:maintainer "r0man" . "roman@burningswell.com") (:keywords "paimon" "search" "tools") (:url . "https://github.com/r0man/paimon.el"))])
- (pair-tree . [(20211219 1816) ((emacs (27 1)) (dash (2 17 0))) "Visualize a list" single ((:commit . "00bdaf9df933aaacbed66b5d666e2abc29870103") (:authors ("Zainab Ali <zainab @kebab-ca.se>")) (:maintainers ("Zainab Ali <zainab @kebab-ca.se>")) (:maintainer "Zainab Ali <zainab @kebab-ca.se>") (:keywords "lisp" "tools") (:url . "https://github.com/zainab-ali/pair-tree"))])
- (palimpsest . [(20200804 2308) nil "Various deletion strategies when editing" single ((:commit . "5310c4a026954254ab82e5f3fe9f98dde2bb5c8b") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainers ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com"))])
- (pamparam . [(20210105 1513) ((emacs (26 1)) (lispy (0 27 0)) (worf (0 1 0)) (ivy-posframe (0 5 5))) "Simple and fast flashcards." tar ((:commit . "0ba91149095bee8c43688c68f83f4d365fbe6771") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "outlines" "hypermedia" "flashcards" "memory") (:url . "https://github.com/abo-abo/pamparam"))])
- (panda . [(20200715 338) ((emacs (25))) "Client for Bamboo's REST API." single ((:commit . "6508ac3228975c39d10a1caa70b9ce34ff3ed21d") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com") (:keywords "maint" "tool") (:url . "https://github.com/sebasmonia/panda"))])
- (panda-theme . [(20181128 1738) ((emacs (24))) "Panda Theme" single ((:commit . "60aa47c7a930377807da0d601351ad91e8ca446a") (:authors ("jamiecollinson" . "jamiecollinson@gmail.com")) (:maintainers ("jamiecollinson" . "jamiecollinson@gmail.com")) (:maintainer "jamiecollinson" . "jamiecollinson@gmail.com") (:url . "https://github.com/jamiecollinson/emacs-panda-theme"))])
- (pandoc . [(20161128 1157) ((emacs (24 4))) "Pandoc interface" single ((:commit . "198d262d09e30448f1672338b0b5a81cf75e1eaa") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "hypermedia" "documentation" "markup" "converter") (:url . "https://github.com/zonuexe/pandoc.el"))])
- (pandoc-mode . [(20230416 952) ((hydra (0 10 0)) (dash (2 10 0))) "Minor mode for interacting with Pandoc" tar ((:commit . "da3f0f5238a8b1e5f09f2ec97e683dc488d25be0") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:keywords "text" "pandoc") (:url . "http://joostkremers.github.io/pandoc-mode/"))])
- (pangu-spacing . [(20221025 522) nil "Minor-mode to add space between Chinese and English characters." single ((:commit . "2303013e5cd7852136f1429162fea0e1c8cb0221") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainers ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/pangu-spacing"))])
- (paper-theme . [(20230318 48) ((emacs (24))) "A minimal Emacs colour theme." single ((:commit . "8d337b85592ae44e1fa3ad03f0c65ca99036f9e2") (:authors ("Göktuğ Kayaalp")) (:maintainers ("Göktuğ Kayaalp")) (:maintainer "Göktuğ Kayaalp") (:keywords "theme" "paper") (:url . "https://dev.gkayaalp.com/elisp/index.html#paper"))])
- (paperless . [(20230204 1815) ((emacs (29 1)) (f (0 11 0)) (s (1 10 0)) (cl-lib (0 6 1))) "A major mode for sorting and filing PDF documents." tar ((:commit . "e524e31350d74f13319968d24b7326a4a412e105") (:authors ("Anthony Green" . "green@moxielogic.com")) (:maintainers ("Anthony Green" . "green@moxielogic.com")) (:maintainer "Anthony Green" . "green@moxielogic.com") (:keywords "pdf" "convenience") (:url . "http://github.com/atgreen/paperless"))])
- (paradox . [(20191011 1119) ((emacs (24 4)) (seq (1 7)) (let-alist (1 0 3)) (spinner (1 7 3)) (hydra (0 13 2))) "A modern Packages Menu. Colored, with package ratings, and customizable." tar ((:commit . "96401577ed02f433debe7604e49afd478e9eda61") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "package" "packages") (:url . "https://github.com/Malabarba/paradox"))])
- (parchment-theme . [(20221206 1541) ((autothemer (0 2))) "Light theme inspired by Acme and Leuven" single ((:commit . "07c9887be6e7d94a8546db625c7d62c54d2e5923") (:authors ("Alex Griffin" . "a@ajgrf.com")) (:maintainers ("Alex Griffin" . "a@ajgrf.com")) (:maintainer "Alex Griffin" . "a@ajgrf.com") (:url . "https://gitlab.com/ajgrf/parchment"))])
- (paredit . [(20221127 1452) nil "minor mode for editing parentheses" single ((:commit . "d700549d8aad684f1fabcfff565a9ad8b468199b") (:authors ("Taylor R. Campbell" . "campbell@paredit.org")) (:maintainers ("Taylor R. Campbell" . "campbell@paredit.org")) (:maintainer "Taylor R. Campbell" . "campbell@paredit.org") (:keywords "lisp") (:url . "https://paredit.org"))])
- (paredit-everywhere . [(20210510 531) ((paredit (22))) "Enable some paredit features in non-lisp buffers" single ((:commit . "b81e5d5356c85001a71640941b469aea9cf2e309") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages" "convenience"))])
- (paredit-menu . [(20160128 1733) ((paredit (25))) "Adds a menu to paredit.el as memory aid" single ((:commit . "cc0ae85bd819f9ebfa4f2a419ab3b2d70e39c9c8") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk") (:keywords "paredit"))])
- (paren-completer . [(20160501 1052) ((emacs (24 3))) "Automatically, language agnostically, fill in delimiters." single ((:commit . "74183a8e13fa1266271bdcbcb4bfb29a4f915f0a") (:authors ("Matthew Bregg")) (:maintainers ("Matthew Bregg")) (:maintainer "Matthew Bregg") (:keywords "convenience") (:url . "https://github.com/MatthewBregg/paren-completer"))])
- (paren-face . [(20230212 2012) ((emacs (25 1)) (compat (29 1 3 4))) "A face for parentheses in lisp modes" single ((:commit . "ff95d3cba363a1a0f60bf3088e8ec3170fe83e85") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "faces" "lisp") (:url . "https://github.com/tarsius/paren-face"))])
- (parent-mode . [(20150824 2300) nil "get major mode's parent modes" single ((:commit . "db692cf08deff2f0e973e6e86e26662b44813d1b") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/parent-mode"))])
- (parinfer-rust-mode . [(20230204 1915) ((emacs (26 1))) "An interface for the parinfer-rust library" tar ((:commit . "332c7f47426f0519dc5c24dda82afdb1aa8b61ee") (:authors ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainers ("Justin Barclay" . "justinbarclay@gmail.com")) (:maintainer "Justin Barclay" . "justinbarclay@gmail.com") (:keywords "lisp" "tools") (:url . "https://github.com/justinbarclay/parinfer-rust-mode"))])
- (parrot . [(20220101 518) ((emacs (24 1))) "Party Parrot rotates gracefully in mode-line." tar ((:commit . "1d381f24d74242018e306d1a0c891bed9a465ac3") (:authors ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainers ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainer "Daniel Ting" . "deep.paren.12@gmail.com") (:keywords "party" "parrot" "rotate" "sirocco" "kakapo" "games") (:url . "https://github.com/dp12/parrot.git"))])
- (parse-csv . [(20160512 1723) nil "Parse strings with CSV fields into s-expressions" single ((:commit . "96bef1ffbc89ea12d13311c9fa239c5c3e864890") (:authors ("Edward Marco Baringer (Common Lisp)") ("Matt Curtis" . "matt.r.curtis@gmail.com")) (:maintainers ("Matt Curtis" . "matt.r.curtis@gmail.com")) (:maintainer "Matt Curtis" . "matt.r.curtis@gmail.com") (:keywords "csv") (:url . "https://github.com/mrc/el-csv"))])
- (parse-it . [(20220704 640) ((emacs (25 1)) (s (1 12 0))) "Basic Parser in Emacs Lisp" tar ((:commit . "c1b5ce15a5bcb80595f45e2fc3bda828f525859f") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "parse" "parser" "lex" "lexer" "ast") (:url . "https://github.com/jcs-elpa/parse-it"))])
- (parsebib . [(20230228 1530) ((emacs (25 1))) "A library for parsing bib files" single ((:commit . "ace9df707108b17759c004c7387655277122d4c1") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:keywords "text" "bibtex") (:url . "https://github.com/joostkremers/parsebib"))])
- (parsec . [(20180730 16) ((emacs (24)) (cl-lib (0 5))) "Parser combinator library" single ((:commit . "2cbbbc2254aa7bcaa4fb5e07c8c1bf2f381dba26") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions") (:url . "https://github.com/cute-jumper/parsec.el"))])
- (parseclj . [(20220422 936) ((emacs (25))) "Clojure/EDN parser" tar ((:commit . "4d0e780e00f1828b00c43099e6eebc6582998f72") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:keywords "lisp" "clojure" "edn" "parser"))])
- (parseedn . [(20220520 835) ((emacs (26)) (parseclj (1 1 0)) (map (2))) "Clojure/EDN parser" single ((:commit . "a09686fbb9113b8b1b4f20c9e1dc0d6fea01a64f") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainers ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:keywords "lisp" "clojure" "edn" "parser"))])
- (pasp-mode . [(20180404 1700) ((emacs (24 3))) "- A major mode for editing Answer Set Programs." single ((:commit . "59385eb0e8ebcfc8c11dd811fb145d4b0fa3cc92") (:authors ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainers ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainer "Henrik Jürges" . "juerges.henrik@gmail.com") (:keywords "asp" "pasp" "answer set programs" "potassco answer set programs" "major mode" "languages") (:url . "https://github.com/santifa/pasp-mode"))])
- (pass . [(20210203 810) ((emacs (25)) (password-store (2 1 0)) (password-store-otp (0 1 5)) (f (0 17))) "Major mode for password-store.el" single ((:commit . "5651da53137db9adcb125b4897c2fe27eeb4368d") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com") ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com") (:keywords "password-store" "password" "keychain"))])
- (passmm . [(20221204 1927) ((emacs (25)) (password-store (1 7 4))) "A minor mode for pass (Password Store)" single ((:commit . "66691e301dff476eaff7c6e817ed9df96d4404c8") (:authors ("Peter Jones" . "pjones@devalot.com")) (:maintainers ("Peter Jones" . "pjones@devalot.com")) (:maintainer "Peter Jones" . "pjones@devalot.com") (:url . "https://github.com/pjones/passmm"))])
- (password-generator . [(20210425 2227) nil "Password generator for humans. Good, Bad, Phonetic passwords included." single ((:commit . "c1da9790d594bc745cdbcc8003153e408aa92a5f") (:authors ("Vandrlexay")) (:maintainers ("Vandrlexay")) (:maintainer "Vandrlexay") (:url . "http://github.com/vandrlexay/emacs-password-genarator"))])
- (password-mode . [(20220706 507) ((emacs (25 1))) "Hide password text using overlays" single ((:commit . "883981d9f8d0e2a8ec479c89f5f6b2492c22e01a") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainers ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org") (:keywords "docs" "password" "passphrase") (:url . "https://github.com/juergenhoetzel/password-mode"))])
- (password-store . [(20230503 619) ((emacs (26)) (with-editor (2 5 11))) "Password store (pass) support" single ((:commit . "28cec11f1dbe6c4273d30370af45b69c9f408386") (:authors ("Svend Sorensen" . "svend@svends.net")) (:maintainers ("Tino Calancha" . "tino.calancha@gmail.com")) (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") (:keywords "tools" "pass" "password" "password-store") (:url . "https://www.passwordstore.org/"))])
- (password-store-otp . [(20220128 1320) ((emacs (25)) (s (1 9 0)) (password-store (0 1))) "Password store (pass) OTP extension support" single ((:commit . "be3a00a981921ed1b2f78012944dc25eb5a0beca") (:authors ("Daniel Barreto")) (:maintainers ("Daniel Barreto")) (:maintainer "Daniel Barreto") (:keywords "tools" "pass") (:url . "https://github.com/volrath/password-store-otp.el"))])
- (password-vault . [(20220321 1521) ((cl-lib (0 2)) (emacs (24))) "A Password manager for Emacs." single ((:commit . "56bc893372a435b4fb3c8937c7f811bca3475f12") (:authors ("Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com")) (:maintainers ("Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com")) (:maintainer "Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com") (:keywords "password" "productivity") (:url . "http://github.com/PuercoPop/password-vault"))])
- (paste-of-code . [(20170709 2355) ((emacs (24 3)) (request (0 2 0))) "paste code on https://paste.ofcode.org" single ((:commit . "92d258e8ec98598d847ecab82903f9224c7c2050") (:authors ("Bernhard Specht" . "bernhard@specht.net")) (:maintainers ("Bernhard Specht" . "bernhard@specht.net")) (:maintainer "Bernhard Specht" . "bernhard@specht.net") (:keywords "lisp"))])
- (pastebin . [(20101125 2002) nil "A simple interface to the www.pastebin.com webservice" single ((:commit . "8e9a829298ce0f747ab80758aa26caeb2af6cb30"))])
- (pastehub . [(20140627 1319) nil "A client for the PasteHub cloud service" single ((:commit . "37b045c67659c078f1517d0fbd5282dab58dca23") (:authors ("Kiyoka Nishiyama")) (:maintainers ("Kiyoka Nishiyama")) (:maintainer "Kiyoka Nishiyama") (:url . "https://github.com/kiyoka/pastehub"))])
- (pastelmac-theme . [(20151031 236) ((emacs (24 1))) "a soothing theme with a pastel color palette" single ((:commit . "bead21741e3f46f6506e8aef4469d4240a819389") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainers ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net") (:keywords "themes") (:url . "https://github.com/bmastenbrook/pastelmac-theme-el"))])
- (pastery . [(20171114 349) ((emacs (24 4)) (request (0 2 0))) "paste snippets to pastery.net." tar ((:commit . "4493be98b743b4d062cb4e00760125e394a55022") (:authors ("Bruno Dias" . "dias.h.bruno@gmail.com")) (:maintainers ("Bruno Dias" . "dias.h.bruno@gmail.com")) (:maintainer "Bruno Dias" . "dias.h.bruno@gmail.com") (:keywords "tools") (:url . "https://github.com/diasbruno/pastery.el"))])
- (path-headerline-mode . [(20140423 1332) nil "Displaying file path on headerline." single ((:commit . "b5b2725c6a8b1cb592fc242b7dbbd54b4dff2e69") (:authors ("7696122")) (:maintainers ("7696122")) (:maintainer "7696122") (:keywords "headerline") (:url . "https://github.com/7696122/path-headerline-mode"))])
- (path-helper . [(20181208 2229) ((emacs (24))) "Set PATH environment variables from config files" single ((:commit . "34538affb3f341b3c56a875bb094ddb2b859a8ef") (:authors ("Arnaud Rouanet" . "arnaud@rouanet.org")) (:maintainers ("Arnaud Rouanet" . "arnaud@rouanet.org")) (:maintainer "Arnaud Rouanet" . "arnaud@rouanet.org") (:keywords "tools" "unix") (:url . "https://github.com/arouanet/path-helper"))])
- (pathify . [(20160423 846) nil "Symlink your scripts into a PATH directory" single ((:commit . "335332a900717ae01bde5ccb8f3dc97a5350f123") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "convenience") (:url . "https://gitlab.com/alezost-emacs/pathify"))])
- (paxedit . [(20160730 1727) ((cl-lib (0 5)) (paredit (23))) "Structured, Context Driven LISP Editing and Refactoring" single ((:commit . "48df0a26285f68cd20ea64368e7bf2a5fbf13135") (:authors ("Mustafa Shameem")) (:maintainers ("Mustafa Shameem")) (:maintainer "Mustafa Shameem") (:keywords "lisp" "refactoring" "context") (:url . "https://github.com/promethial/paxedit"))])
- (pbcopy . [(20150225 459) nil "Emacs Interface to pbcopy" single ((:commit . "338f7245746b5de1bb96c5cc2b32bfd9b5d83272") (:authors ("Daniel Nelson")) (:maintainers ("Daniel Nelson")) (:maintainer "Daniel Nelson") (:keywords "mac" "osx" "pbcopy") (:url . "https://github.com/jkp/pbcopy.el"))])
- (pc-bufsw . [(20201011 1918) nil "PC style quick buffer switcher" single ((:commit . "a7295e4813d636d5a20605d134acd42e4e4fe8fa") (:authors ("Igor Bukanov" . "igor@mir2.org")) (:maintainers ("Igor Bukanov" . "igor@mir2.org")) (:maintainer "Igor Bukanov" . "igor@mir2.org") (:keywords "buffer") (:url . "https://github.com/ibukanov/pc-bufsw"))])
- (pcache . [(20220724 1841) ((emacs (25 1))) "persistent caching for Emacs." single ((:commit . "cae29ddbc3d12fac18ab5cfc26fa3ef13eb97dad") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainers ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:keywords "extensions"))])
- (pcap-mode . [(20161025 1448) ((emacs (24 3))) "Major mode for working with PCAP files" single ((:commit . "52780669af0ade136f84d73f21b4dbb7ab655416") (:authors ("Aaron Conole" . "aconole@bytheb.org")) (:maintainers ("Aaron Conole" . "aconole@bytheb.org")) (:maintainer "Aaron Conole" . "aconole@bytheb.org") (:keywords "pcap" "packets" "tcpdump" "wireshark" "tshark"))])
- (pcmpl-args . [(20220510 2056) ((emacs (25 1))) "Enhanced shell command completion" single ((:commit . "43229e1096f89c277190f09a3d794781f8fa0015") (:authors ("Jonathan Waltman" . "jonathan.waltman@gmail.com")) (:maintainers ("Jonathan Waltman" . "jonathan.waltman@gmail.com")) (:maintainer "Jonathan Waltman" . "jonathan.waltman@gmail.com") (:keywords "abbrev" "completion" "convenience" "processes" "terminals" "unix") (:url . "https://github.com/JonWaltman/pcmpl-args.el"))])
- (pcmpl-git . [(20170121 59) nil "pcomplete for git" tar ((:commit . "9472ac70baeda025ef7becd1cf141d72aec93f32") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainers ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com") (:keywords "tools"))])
- (pcmpl-homebrew . [(20200911 742) nil "pcomplete for homebrew" single ((:commit . "a2044042dd498abad1dc06162a8ee0d70314ca40") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainers ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com") (:keywords "pcomplete" "homebrew" "tools" "cask" "services"))])
- (pcmpl-pip . [(20181229 1420) ((s (1 12 0)) (f (0 19 0)) (seq (2 15))) "pcomplete for pip" single ((:commit . "ebb672d4494f876f611639e65df4e28e566c06b5") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainers ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com") (:keywords "pcomplete" "pip" "python" "tools"))])
- (pcomplete-extension . [(20190928 519) ((emacs (24)) (cl-lib (0 5))) "additional completion for pcomplete" single ((:commit . "bc5eb204fee659e0980056009409b44bc7655716") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/pcomplete-extension"))])
- (pcre2el . [(20230503 1929) ((emacs (25 1))) "regexp syntax converter" single ((:commit . "b941ed8a96299868171fac625ecffec77de3e986") (:authors ("joddie <jonxfield at gmail.com>")) (:maintainers ("joddie <jonxfield at gmail.com>")) (:maintainer "joddie <jonxfield at gmail.com>") (:url . "https://github.com/joddie/pcre2el"))])
- (pcsv . [(20230207 757) ((emacs (24 1))) "Parser of csv" single ((:commit . "4b5e801d213a460a6cb3cb2997a0a6cd33c7bc58") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "data") (:url . "https://github.com/mhayashi1120/Emacs-pcsv"))])
- (pd-remote . [(20230314 428) ((emacs (24 3)) (faust-mode (0 6)) (lua-mode (20210802))) "Pd remote control helper" single ((:commit . "dcd68097d2b7468303517d91cb76682bfb47db63") (:authors ("Albert Graef" . "aggraef@gmail.com")) (:maintainers ("Albert Graef" . "aggraef@gmail.com")) (:maintainer "Albert Graef" . "aggraef@gmail.com") (:keywords "multimedia" "pure-data") (:url . "https://github.com/agraef/pd-remote"))])
- (pdb-capf . [(20200419 1237) ((emacs (25 1))) "Completion-at-point function for python debugger" single ((:commit . "2f4099aa1330f87df4e9cd526de057ee9b71de6c") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:keywords "languages" "abbrev" "convenience") (:url . "https://github.com/muffinmad/emacs-pdb-capf"))])
- (pdb-mode . [(20150128 1751) nil "Major mode for editing Protein Data Bank files" single ((:commit . "855fb18ebb73b5df30c8d7677c2bcd0f361b138a") (:authors (nil . "charles.bond@uwa.edu.au")) (:maintainers (nil . "aix.bing@gmail.com")) (:maintainer nil . "aix.bing@gmail.com") (:keywords "data" "pdb") (:url . "http://bondxray.org/software/pdb-mode/"))])
- (pdf-tools . [(20230404 327) ((emacs (26 3)) (tablist (1 0)) (let-alist (1 0 4))) "Support library for PDF documents" tar ((:commit . "7ff6293a25baaae65651b3e1c54b61208279a7ef") (:authors ("Andreas Politz" . "mail@andreas-politz.de")) (:maintainers ("Vedang Manerikar" . "vedang.manerikar@gmail.com")) (:maintainer "Vedang Manerikar" . "vedang.manerikar@gmail.com") (:keywords "files" "multimedia") (:url . "http://github.com/vedang/pdf-tools/"))])
- (pdf-view-restore . [(20190904 1708) ((pdf-tools (0 90)) (emacs (26 0))) "Support for opening last known pdf position in pdfview mode" single ((:commit . "5a1947c01a3edecc9e0fe7629041a2f53e0610c9") (:authors ("Kevin Kim" . "kevinkim1991@gmail.com")) (:maintainers ("Kevin Kim" . "kevinkim1991@gmail.com")) (:maintainer "Kevin Kim" . "kevinkim1991@gmail.com") (:keywords "files" "convenience") (:url . "https://github.com/007kevin/pdf-view-restore"))])
- (pdfgrep . [(20210203 1730) ((emacs (24 4))) "run `pdfgrep' and display the results." single ((:commit . "a4ca0a1e6521de93f28bb6736a5344b4974d144c") (:authors ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainers ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainer "Jérémy Compostella" . "jeremy.compostella@gmail.com") (:keywords "extensions" "mail" "pdf" "grep") (:url . "https://github.com/jeremy-compostella/pdfgrep"))])
- (peacock-theme . [(20170808 1320) ((emacs (24 0))) "an Emacs 24 theme based on Peacock (tmTheme)" single ((:commit . "9e46fbfb562b6e26c6e3d6d618b044b3694da4c8") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (pebble-mode . [(20230123 1801) ((emacs (24 3))) "A major mode for pebble" single ((:commit . "bcbc76aa89196338f12a8ddfe4486edf83c19c5e") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainers ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero") (:url . "https://github.com/ArneBab/pebble-mode"))])
- (peek-mode . [(20130620 1946) ((elnode (0 9 8 1))) "Serve buffers live over HTTP with elnode backend" tar ((:commit . "55a7dd011375330c7d57322257a5167516702c71") (:authors ("Erik Iverson" . "erik@sigmafield.org")) (:maintainers ("Erik Iverson" . "erik@sigmafield.org")) (:maintainer "Erik Iverson" . "erik@sigmafield.org") (:url . "https://github.com/erikriverson/peek-mode"))])
- (peep-dired . [(20160321 2237) nil "Peep at files in another window from dired buffers" single ((:commit . "12d7e52cd5ae29fd828db0bf1fbf648020077145") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainers ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:keywords "files" "convenience"))])
- (peertube . [(20210101 1007) ((emacs (25 1)) (transmission (0 12 1))) "Query and download PeerTube videos" single ((:commit . "bb529db154596e86327829edbd7144b67cf72255") (:authors ("yoctocell" . "public@yoctocell.xyz")) (:maintainers ("yoctocell" . "public@yoctocell.xyz")) (:maintainer "yoctocell" . "public@yoctocell.xyz") (:keywords "peertube" "multimedia") (:url . "https://git.sr.ht/~yoctocell/peertube"))])
- (pelican-mode . [(20190124 2336) ((emacs (25))) "Minor mode for editing Pelican sites" single ((:commit . "a69934885c7a3b303049e2418333b3915b8f8fb8") (:authors ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainers ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com") (:keywords "convenience" "editing") (:url . "https://git.korewanetadesu.com/pelican-mode.git"))])
- (pepita . [(20200228 2257) ((emacs (25)) (csv (2 1))) "Run Splunk search commands, export results to CSV/HTML/JSON" single ((:commit . "263d6d940d7e4203bbecda46dbaa89b7af1db54f") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com") (:keywords "tools" "convenience" "matching") (:url . "https://github.com/sebasmonia/pepita.git"))])
- (per-buffer-theme . [(20221002 2219) ((emacs (25 1))) "Change theme and font according to buffer name or major mode." single ((:commit . "2cbb15c05edff4ce23ce61858cf16e8953cd58b3") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainers ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com") (:keywords "themes") (:url . "https://hg.serna.eu/emacs/per-buffer-theme"))])
- (perfect-margin . [(20220426 1701) ((emacs (24 0)) (cl-lib (0 5))) "auto center windows, work with minimap and/or linum-mode" single ((:commit . "e811665951cd48819a63e477e7206c43232a78bd") (:authors ("Randall Wang" . "randall.wjz@gmail.com")) (:maintainers ("Randall Wang" . "randall.wjz@gmail.com")) (:maintainer "Randall Wang" . "randall.wjz@gmail.com") (:keywords "convenience" "frames") (:url . "https://github.com/mpwang/perfect-margin"))])
- (perject . [(20230306 1033) ((emacs (27 1)) (dash (2 10)) (transient (0 3 7))) "Session-persistent project management" tar ((:commit . "82d007ec7201c21d8dd31d95e857632887582be6") (:authors ("overideal")) (:maintainers ("overideal")) (:maintainer "overideal") (:url . "https://github.com/overideal/perject"))])
- (perlbrew . [(20161109 709) nil "A perlbrew wrapper for Emacs" single ((:commit . "3a3406c3307c92aa30f9400d430925c434a3b6f0") (:authors ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainers ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainer "Kentaro Kuribayashi" . "kentarok@gmail.com") (:keywords "emacs" "perl"))])
- (persistent-overlays . [(20161128 700) nil "Minor mode to store selected overlays to be loaded later" tar ((:commit . "f563c8b966edc78c9d806661c4eb80e4781c4eab") (:authors ("Michael Neilly" . "mneilly@yahoo.com")) (:maintainers ("Michael Neilly" . "mneilly@yahoo.com")) (:maintainer "Michael Neilly" . "mneilly@yahoo.com") (:keywords "overlays" "persistent") (:url . "https://github.com/mneilly/Emacs-Persistent-Overlays"))])
- (persistent-scratch . [(20230225 1439) ((emacs (24))) "Preserve the scratch buffer across Emacs sessions" single ((:commit . "5ff41262f158d3eb966826314516f23e0cb86c04") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/persistent-scratch"))])
- (persistent-soft . [(20150223 1853) ((pcache (0 3 1)) (list-utils (0 4 2))) "Persistent storage, returning nil on failure" single ((:commit . "a1e0ddf2a12a6f18cab565dee250f070384cbe02") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "data" "extensions") (:url . "http://github.com/rolandwalker/persistent-soft"))])
- (persp-fr . [(20191108 754) ((emacs (25 1)) (persp-mode (2 9 6)) (dash (2 13 0))) "In persp-mode, show perspective list in the GUI window title" single ((:commit . "1adbb6a9f9a4db580a9b7ed8b4091738e01345e6") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com") (:keywords "perspectives" "workspace" "windows" "convenience") (:url . "http://github.com/rocher/persp-fr"))])
- (persp-mode . [(20230110 1045) ((emacs (24 3))) "windows/buffers sets shared among frames + save/load." single ((:commit . "df95ea710e2a72f7a88293b72137acb0ca024d90") (:authors ("Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com")) (:maintainers ("Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com")) (:maintainer "Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com") (:keywords "perspectives" "session" "workspace" "persistence" "windows" "buffers" "convenience") (:url . "https://github.com/Bad-ptr/persp-mode.el"))])
- (persp-mode-project-bridge . [(20220115 602) ((emacs (27 1)) (persp-mode (2 9))) "Integration of persp-mode + project.el" single ((:commit . "cacc22942ca5dffdfc3d16cf88576ce0bd9e3a68") (:authors ("Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com") ("Siavash Askari Nasr" . "siavash.askari.nasr@gmail.com")) (:maintainers ("Siavash Askari Nasr" . "siavash.askari.nasr@gmail.com")) (:maintainer "Siavash Askari Nasr" . "siavash.askari.nasr@gmail.com") (:keywords "vc" "persp-mode" "perspective" "project" "project.el") (:url . "https://github.com/CIAvash/persp-mode-project-bridge"))])
- (persp-mode-projectile-bridge . [(20170315 1120) ((persp-mode (2 9)) (projectile (0 13 0)) (cl-lib (0 5))) "persp-mode + projectile integration." single ((:commit . "f6453cd7b8b4352c06e771706f2c5b7e2cdff1ce") (:authors ("Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com")) (:maintainers ("Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com")) (:maintainer "Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com") (:keywords "persp-mode" "projectile") (:url . "https://github.com/Bad-ptr/persp-mode-projectile-bridge.el"))])
- (persp-projectile . [(20210618 708) ((perspective (1 9)) (projectile (2 4)) (cl-lib (0 3))) "Perspective integration with Projectile" single ((:commit . "6e4c2e017d59d10d627cf95b2bb9f9fa2b22a3a3") (:authors ("Daniel Wu")) (:maintainers ("Daniel Wu")) (:maintainer "Daniel Wu") (:keywords "project" "convenience"))])
- (perspective . [(20220921 346) ((emacs (24 4)) (cl-lib (0 5))) "switch between named \"perspectives\" of the editor" single ((:commit . "8a69512639ae915c32c5055d1308ebf4b278266c") (:authors ("Natalie Weizenbaum" . "nex342@gmail.com")) (:maintainers ("Natalie Weizenbaum" . "nex342@gmail.com")) (:maintainer "Natalie Weizenbaum" . "nex342@gmail.com") (:keywords "workspace" "convenience" "frames") (:url . "http://github.com/nex3/perspective-el"))])
- (perspective-exwm . [(20230218 1358) ((emacs (27 1)) (burly (0 2 -1)) (exwm (0 26)) (perspective (2 17))) "Better integration for perspective.el and EXWM" single ((:commit . "01d51f5c92a30b65e8346582ed1ce6513570bb0a") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/perspective-exwm.el"))])
- (perspeen . [(20171203 1021) ((emacs (25 0)) (powerline (2 4))) "An package for multi-workspace" tar ((:commit . "edb70c530bda50ff3d1756e32a703d5fef5e5480") (:authors ("Peng Li" . "seudut@gmail.com")) (:maintainers ("Peng Li" . "seudut@gmail.com")) (:maintainer "Peng Li" . "seudut@gmail.com") (:keywords "lisp") (:url . "https://github.com/seudut/perspeen"))])
- (pest-mode . [(20221231 15) ((emacs (26 3))) "Major mode for editing Pest files" single ((:commit . "8023a92ce59c34dcd1587cbd85ed144f206ddb89") (:authors ("ksqsf" . "i@ksqsf.moe")) (:maintainers ("ksqsf" . "i@ksqsf.moe")) (:maintainer "ksqsf" . "i@ksqsf.moe") (:keywords "languages") (:url . "https://github.com/ksqsf/pest-mode"))])
- (pet . [(20230423 2326) ((emacs (26 1)) (f (0 6 0))) "Executable and virtualenv tracker for python-mode" single ((:commit . "2e5c777a835283ee4fe9eb20fd82114f348ba1f2") (:authors ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com") (:keywords "tools") (:url . "https://github.com/wyuenho/emacs-pet/"))])
- (pfuture . [(20220913 1401) ((emacs (25 2))) "a simple wrapper around asynchronous processes" single ((:commit . "19b53aebbc0f2da31de6326c495038901bffb73c") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/pfuture"))])
- (pg . [(20230423 839) ((emacs (26 1))) "Emacs Lisp socket-level interface to the PostgreSQL RDBMS" single ((:commit . "5a7523fee364e8fabf24eeaac3dac2991ef64187") (:authors ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainers ("Eric Marsden" . "eric.marsden@risk-engineering.org")) (:maintainer "Eric Marsden" . "eric.marsden@risk-engineering.org") (:keywords "data" "comm" "database" "postgresql") (:url . "https://github.com/emarsden/pg-el"))])
- (pgdevenv . [(20150105 2236) nil "Manage your PostgreSQL development envs" tar ((:commit . "7f1d5bc734750aca98cf67a9491cdbd5615fd132") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:keywords "emacs" "postgresql" "development" "environment" "shell" "debug" "gdb"))])
- (ph . [(20161029 1522) ((emacs (24 3))) "A global minor mode for managing multiple projects." tar ((:commit . "a66e38637d1898b2ec31ee611033ac3f295fd97f") (:authors ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainer "Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com"))])
- (phabricator . [(20160510 1425) ((emacs (24 4)) (dash (1 0)) (projectile (0 13 0)) (s (1 10 0)) (f (0 17 2))) "Phabricator/Arcanist helpers for Emacs." single ((:commit . "d09d6f059aea92d3b11c68664a5e80c901182ab8") (:authors ("Andrew Tulloch")) (:maintainers ("Andrew Tulloch")) (:maintainer "Andrew Tulloch") (:keywords "phabricator" "arcanist" "diffusion") (:url . "https://github.com/ajtulloch/phabricator.el"))])
- (phan . [(20200805 356) ((emacs (24)) (composer (0 0 8)) (f (0 17))) "Utility functions for Phan (PHP static analizer)" single ((:commit . "b7d523630bb072c4dbcfa9995dc734b25b72a69f") (:authors ("USAMI Kenta" . "tadsan@pixiv.com")) (:maintainers ("USAMI Kenta" . "tadsan@pixiv.com")) (:maintainer "USAMI Kenta" . "tadsan@pixiv.com") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/phan.el"))])
- (phi-autopair . [(20210306 424) ((paredit (20))) "another simple-minded autopair implementation" single ((:commit . "6a67c37d31a3ff9261fc9f812547a0c86721fc90") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.gitub.io/"))])
- (phi-grep . [(20221004 836) ((cl-lib (0 1)) (emacs (26 1))) "Interactively-editable recursive grep implementation in elisp" single ((:commit . "9f3c42952ad4ad75d24abbdccb041240db4f0557") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://github.com/zk-phi/phi-grep"))])
- (phi-rectangle . [(20200911 204) nil "another rectangle-mark command (rewrite of rect-mark)" single ((:commit . "43ee8aea9998b34a9fdb28d7da2e4f75e4154030") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.github.io/"))])
- (phi-search . [(20200510 906) nil "another incremental search & replace, compatible with \"multiple-cursors\"" tar ((:commit . "c34f5800968922d1f9e7b10092b8705d6640ad18") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (phi-search-dired . [(20200816 1542) ((phi-search (2 2 0))) "interactive filtering for dired powered by phi-search" single ((:commit . "f014a9fb0b6a94af2df0e22f91ef79ce6996afd7") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (phi-search-mc . [(20160324 1503) ((phi-search (2 0 0)) (multiple-cursors (1 2 1))) "multiple-cursors extension for phi-search" single ((:commit . "7aa671910f766437089aec26c3aa7814222d1356") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "search" "cursors") (:url . "https://github.com/knu/phi-search-mc.el"))])
- (phi-search-migemo . [(20170618 921) ((phi-search (2 2 0)) (migemo (1 9 1))) "migemo extension for phi-search" single ((:commit . "723b584d386639d59298d872ad7a035d3f8008b0") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (phoenix-dark-mono-theme . [(20170729 1406) nil "Monochromatic version of the Phoenix theme" single ((:commit . "a54f515d162148bcb38676980bc2316adb3d7b8b") (:authors ("J Irving" . "j@lollyshouse.ca")) (:maintainers ("J Irving" . "j@lollyshouse.ca")) (:maintainer "J Irving" . "j@lollyshouse.ca") (:url . "http://github.com/j0ni/phoenix-dark-mono"))])
- (phoenix-dark-pink-theme . [(20190821 48) nil "Originally a port of the Sublime Text 2 theme" single ((:commit . "ddd98a45775be105984ec598384e68df3d3e8046") (:authors ("J Irving" . "j@lollyshouse.ca")) (:maintainers ("J Irving" . "j@lollyshouse.ca")) (:maintainer "J Irving" . "j@lollyshouse.ca") (:url . "http://github.com/j0ni/phoenix-dark-pink"))])
- (php-boris . [(20130527 821) nil "Run boris php REPL" single ((:commit . "4bb7e4d34d9906ddce688205eb24cafe634c6d06") (:authors ("Tom Regner")) (:maintainers ("Tom Regner" . "tom@goochesa.de")) (:maintainer "Tom Regner" . "tom@goochesa.de") (:keywords "php" "commint" "repl" "boris"))])
- (php-boris-minor-mode . [(20140209 1835) ((php-boris (0 0 1)) (highlight (0))) "a minor mode to evaluate PHP code in the Boris repl" single ((:commit . "8648eba604e4ff82ef6594a2c5ee4cb4825e6235") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "php" "repl" "eval") (:url . "https://github.com/steckerhalter/php-boris-minor-mode"))])
- (php-cs-fixer . [(20220516 1008) ((cl-lib (0 5))) "php-cs-fixer wrapper." single ((:commit . "efe4368d891f1eec6311363cfd6be3e9eadb5e0a") (:authors ("Philippe Ivaldi for OVYA")) (:maintainers ("Philippe Ivaldi for OVYA")) (:maintainer "Philippe Ivaldi for OVYA") (:keywords "languages" "php") (:url . "https://github.com/OVYA/php-cs-fixer"))])
- (php-eldoc . [(20140202 1941) nil "eldoc backend for php" tar ((:commit . "df05064146b884d9081e10657e32dc480f070cfe") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/php-eldoc"))])
- (php-mode . [(20230423 1446) ((emacs (26 1))) "Major mode for editing PHP code" tar ((:commit . "37b2b883300e396d250d49c8d0f5a3abe6effa7f") (:authors ("Eric James Michael Ritz")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "languages" "php") (:url . "https://github.com/emacs-php/php-mode"))])
- (php-quickhelp . [(20210819 2025) ((emacs (25 1))) "Quickhelp at point for php" single ((:commit . "d5e11b7a6bad64550521e8822139a33218b8c9bb") (:authors ("Vincenzo Pupillo")) (:maintainers ("Vincenzo Pupillo")) (:maintainer "Vincenzo Pupillo") (:url . "https://github.com/vpxyz/php-quickhelp"))])
- (php-refactor-mode . [(20171124 635) nil "Minor mode to quickly and safely perform common refactorings" single ((:commit . "d06dabd9ca743a04067e02282b69d7b7467fb4b7") (:authors ("Matthew M. Keeler" . "keelerm84@gmail.com")) (:maintainers ("Matthew M. Keeler" . "keelerm84@gmail.com")) (:maintainer "Matthew M. Keeler" . "keelerm84@gmail.com") (:keywords "php" "refactor") (:url . "https://github.com/keelerm84/php-refactor-mode.el"))])
- (php-runtime . [(20230404 1713) ((emacs (25 1)) (compat (29))) "Language binding bridge to PHP" tar ((:commit . "ba64f30e716f89f9cf2c3bd44c5d00da69736868") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "processes" "php" "lisp") (:url . "https://github.com/emacs-php/php-runtime.el"))])
- (php-scratch . [(20210706 459) ((emacs (24 3)) (s (1 11 0)) (php-mode (1 17 0))) "A scratch buffer to interactively evaluate php code" single ((:commit . "b6bfd279da8a8ac7fc30459485956f3fd5d02573") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainers ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com") (:url . "https://github.com/mallt/php-scratch"))])
- (phpactor . [(20221023 608) ((emacs (25 1)) (f (0 17)) (php-runtime (0 2)) (composer (0 2 0)) (async (1 9 3))) "Interface to Phpactor" tar ((:commit . "dde09addf36017527441a855054406f8ffc4e534") (:authors ("USAMI Kenta" . "tadsan@zonu.me") ("Mikael Kermorgant" . "mikael@kgtech.fi")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/phpactor.el"))])
- (phpstan . [(20230417 1142) ((emacs (24 3)) (compat (29)) (php-mode (1 22 3)) (php-runtime (0 2))) "Interface to PHPStan" single ((:commit . "2dc25cb2f3d83484ea0eb063c9ffca8148828a2b") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/phpstan.el"))])
- (phpt-mode . [(20190512 1809) ((emacs (25)) (polymode (0 1 5)) (php-mode (1 21 2))) "Major mode for editing PHPT test code" single ((:commit . "deb386f1a81003074c476f15e1975d445ff6df01") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "languages" "php") (:url . "https://github.com/emacs-php/phpt-mode"))])
- (phpunit . [(20230124 743) ((s (1 12 0)) (f (0 19 0)) (pkg-info (0 6)) (cl-lib (0 5)) (emacs (24 3))) "Launch PHP unit tests using phpunit" tar ((:commit . "4a36906344c0abc11f48cc08cd8d50a9f46963f8") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com") ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "tools" "php" "tests" "phpunit") (:url . "https://github.com/nlamirault/phpunit.el"))])
- (pianobar . [(20201002 1756) nil "thin wrapper for Pianobar, a Pandora Radio client" single ((:commit . "d708417608df4f09ee565fddaad03dfe181829a8") (:authors ("Aaron Griffith" . "aargri@gmail.com")) (:maintainers ("Aaron Griffith" . "aargri@gmail.com")) (:maintainer "Aaron Griffith" . "aargri@gmail.com") (:url . "http://github.com/agrif/pianobar.el"))])
- (pickle . [(20190923 354) ((emacs (25 1)) (cl-lib (0 6 1))) "Major mode for editing cucumber gherkin files." single ((:commit . "3a0a717f2a24827667f34bc53830a3b81cd57460") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "languages" "cucumber" "gherkin") (:url . "https://github.com/ahungry/pickle-mode"))])
- (picpocket . [(20221101 2104) ((emacs (25 1))) "Image viewer" single ((:commit . "30942846bd8cb95a938a534ed9ed9efeff813b7c") (:authors ("Johan Claesson" . "johanwclaesson@gmail.com")) (:maintainers ("Johan Claesson" . "johanwclaesson@gmail.com")) (:maintainer "Johan Claesson" . "johanwclaesson@gmail.com") (:keywords "multimedia") (:url . "https://github.com/johanclaesson/picpocket"))])
- (pig-mode . [(20180520 1400) nil "Major mode for Pig files" single ((:commit . "4c6c6e1b1bb719d8adc6c47cc24665f6fe558959") (:maintainers ("David A. Shamma")) (:maintainer "David A. Shamma"))])
- (pig-snippets . [(20130913 624) ((yasnippet (0 8 0))) "Snippets for pig-mode" tar ((:commit . "69ca24cb756dd516828e284e33274145eba21183") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net") (:keywords "snippets") (:url . "https://github.com/motus/pig-mode"))])
- (pikchr-mode . [(20210324 2125) ((emacs (27 1))) "A major mode for the pikchr diagram markup language" single ((:commit . "5d424c5c97ac854cc44c369e654e4f906fcae3c8") (:authors ("Johann Klähn" . "johann@jklaehn.de")) (:maintainers ("Johann Klähn" . "johann@jklaehn.de")) (:maintainer "Johann Klähn" . "johann@jklaehn.de") (:keywords "languages") (:url . "https://github.com/kljohann/pikchr-mode"))])
- (pillar . [(20141112 1811) ((makey (0 3))) "Major mode for editing Pillar files" tar ((:commit . "13a7f676544cc66005ccd8e6fc1c25e4ccd6f909") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:keywords "markup" "major-mode") (:url . "http://github.com/DamienCassou/pillar-mode"))])
- (pinboard . [(20230101 850) ((emacs (25 1)) (cl-lib (0 5))) "A pinboard.in client" single ((:commit . "112e903b489fed3f71b3165447ba6f21ee5675e6") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "hypermedia" "bookmarking" "reading" "pinboard") (:url . "https://github.com/davep/pinboard.el"))])
- (pinboard-api . [(20140324 1148) nil "Rudimentary http://pinboard.in integration" single ((:commit . "b7b5214d0c35178f8dca08cf22d6ef3c21f0fce4") (:authors ("Danie Roux" . "danie@danieroux.com")) (:maintainers ("Danie Roux" . "danie@danieroux.com")) (:maintainer "Danie Roux" . "danie@danieroux.com") (:keywords "pinboard" "www") (:url . "https://github.com/danieroux/pinboard-api-el"))])
- (pinboard-popular . [(20180511 1726) ((loop (1 4))) "Displays links from the pinboard.in popular page." single ((:commit . "c0bc76cd35f8ecf34723c64a702b82eec2751318") (:keywords "pinboard") (:url . "https://github.com/asimpson/pinboard-popular"))])
- (pine-script-mode . [(20210629 1257) ((emacs (24))) "Trading View Pine Script major mode" single ((:commit . "c04309be9fb73012b4c5c839741b1abcfe0b8aa9") (:authors ("Eric Crosson" . "eric.s.crosson@utexas.edu")) (:maintainers ("Eric Crosson" . "eric.s.crosson@utexas.edu")) (:maintainer "Eric Crosson" . "eric.s.crosson@utexas.edu") (:keywords "extensions") (:url . "https://github.com/ericcrosson/pine-script-mode"))])
- (pinot . [(20140211 2026) nil "Emacs interface to pinot-search" tar ((:commit . "67fda555a155b22bb2ce44ba618b4bd6fc5f144a") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>"))])
- (pinyin . [(20220815 1239) ((cl-lib (0 5)) (emacs (24))) "Convert Hanzi to Pinyin (汉字转拼音)" tar ((:commit . "b7a0aad8ff35e50d1c536df4c0e73fc7e9d06700") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "extensions") (:url . "https://github.com/xuchunyang/pinyin.el"))])
- (pinyin-search . [(20160515 358) ((pinyinlib (0 1 0))) "Search Chinese by Pinyin" single ((:commit . "2e877a76851009d41bde66eb33182a03a7f04262") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "chinese" "search") (:url . "https://github.com/xuchunyang/pinyin-search.el"))])
- (pinyinlib . [(20200911 1723) nil "Convert first letter of Pinyin to Simplified/Traditional Chinese characters" single ((:commit . "1772c79b6f319b26b6a394a8dda065be3ea4498d") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (pip-frame . [(20220802 1914) ((emacs (25 1))) "Display and manage a PIP frame" single ((:commit . "8c396a11f532a1beb594b65e99e594f1e9f1c2c8") (:authors ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainers ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainer "Milan Zamazal" . "pdm@zamazal.org") (:keywords "frames") (:url . "https://git.zamazal.org/pdm/pip-frame"))])
- (pip-requirements . [(20181027 1629) ((dash (2 8 0))) "A major mode for editing pip requirements files." single ((:commit . "216cd1690f80cc965d4ae47b8753fc185f778ff6") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))])
- (pipenv . [(20220514 123) ((emacs (25 1)) (s (1 12 0)) (pyvenv (1 20)) (load-env-vars (0 0 2))) "A Pipenv porcelain" single ((:commit . "3af159749824c03f59176aff7f66ddd6a5785a10") (:authors ("Paul Walsh" . "paulywalsh@gmail.com")) (:maintainers ("Paul Walsh" . "paulywalsh@gmail.com")) (:maintainer "Paul Walsh" . "paulywalsh@gmail.com") (:url . "https://github.com/pwalsh/pipenv.el"))])
- (pipewire . [(20220725 1858) ((emacs (28 1))) "PipeWire user interface" tar ((:commit . "115a8a89a3a0c6a89ebe22df0ef0928a701cb1f0") (:authors ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainers ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainer "Milan Zamazal" . "pdm@zamazal.org") (:keywords "multimedia") (:url . "https://git.zamazal.org/pdm/pipewire-0"))])
- (pippel . [(20220416 1743) ((emacs (25 1)) (s (1 11 0)) (dash (2 12 0))) "Frontend to python package manager pip" tar ((:commit . "19153aa8845aa95d080f224d4fcaf2d75224bd5a") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainers ("Arif Er" . "arifer612@protonmail.me")) (:maintainer "Arif Er" . "arifer612@protonmail.me") (:url . "https://github.com/arifer612/pippel"))])
- (pixelblaze . [(20220918 1925) ((emacs (27 1)) (websocket (1 13))) "Interact with a Pixelblaze via Websocket" single ((:commit . "564a093f700a3292cbffb3887dd3a8d789f54e6d") (:authors ("Mark Grosen" . "mark@grosen.org")) (:maintainers ("Mark Grosen" . "mark@grosen.org")) (:maintainer "Mark Grosen" . "mark@grosen.org") (:keywords "games" "pixelblaze" "neopixel" "ws2812" "sk6812") (:url . "https://github.com/mgsb/emacs-pixelblaze"))])
- (pixie-mode . [(20180626 541) ((clojure-mode (3 0 1)) (inf-clojure (1 0 0))) "Major mode for Pixie-lang" single ((:commit . "a40c2632cfbe948852a5cdcfd44e6a65db11834d") (:authors ("John Walker" . "john.lou.walker@gmail.com")) (:maintainers ("John Walker" . "john.lou.walker@gmail.com")) (:maintainer "John Walker" . "john.lou.walker@gmail.com") (:url . "https://github.com/johnwalker/pixie-mode"))])
- (pixiv-novel-mode . [(20160220 1421) nil "Major mode for pixiv novel" single ((:commit . "0d1ca524d92b91f20a7105402a773bc21779b434") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "novel" "pixiv"))])
- (pkg-info . [(20150517 1143) ((epl (0 8))) "Information about packages" single ((:commit . "4dbe328c9eced79e0004e3fdcd7bfb997a928be5") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainers ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:keywords "convenience") (:url . "https://github.com/lunaryorn/pkg-info.el"))])
- (pkg-overview . [(20210802 1509) ((emacs (24 3))) "Make org documentation from elisp source file" single ((:commit . "9b2e416758a6c107bb8cc670ec4d2627f82d5590") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainers ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com") (:keywords "docs" "help" "lisp" "maint" "outlines" "tools") (:url . "https://github.com/Boruch-Baum/emacs-pkg-overview"))])
- (pkgbuild-mode . [(20220802 1951) ((emacs (26 1))) "Interface to the ArchLinux package manager" single ((:commit . "9525be8ecbd3a0d0bc7cc27e6d0f403e111aa067") (:authors ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainers ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainer "Juergen Hoetzel" . "juergen@hoetzel.info") (:keywords "languages") (:url . "https://github.com/juergenhoetzel/pkgbuild-mode"))])
- (plain-org-wiki . [(20201217 1027) ((emacs (24 3)) (ivy (0 12 0))) "Simple jump-to-org-files in a directory package" single ((:commit . "faeeb54ca808bbf0f4380a938e75805b7a78dbf7") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/plain-org-wiki"))])
- (plain-theme . [(20171124 410) ((emacs (24))) "Plain theme without syntax highlighting" single ((:commit . "2609a811335d58cfb73a65d6307c156fe09037d3"))])
- (plan9-theme . [(20180804 1441) nil "A color theme for Emacs based on Plan9" single ((:commit . "4c1050b8ed42e0f99ef64c77ec370a786bd0003c") (:authors ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainers ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainer "John Louis Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/plan9-theme.el"))])
- (planemo-mode . [(20230227 1139) ((emacs (27 1)) (dash (2 17 0))) "Minor mode for editing Galaxy XML files" single ((:commit . "537ebe40688ca8f3786aa1e9842265e6f34584d2") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://gitlab.com/mtekman/planemo-mode.el"))])
- (planet-theme . [(20161031 217) ((emacs (24))) "A dark theme inspired by Gmail's 'Planets' theme of yore" single ((:commit . "b0a310ff36565fe22224c407cf59569986698a32") (:authors ("Charlie McMackin" . "charlie.mac@gmail.com")) (:maintainers ("Charlie McMackin" . "charlie.mac@gmail.com")) (:maintainer "Charlie McMackin" . "charlie.mac@gmail.com") (:keywords "themes") (:url . "https://github.com/cmack/emacs-planet-theme"))])
- (plantuml-mode . [(20191102 2056) ((dash (2 0 0)) (emacs (25 0))) "Major mode for PlantUML" single ((:commit . "ea45a13707abd2a70df183f1aec6447197fc9ccc") (:authors ("Zhang Weize (zwz)")) (:maintainers ("Carlo Sciolla (skuro)")) (:maintainer "Carlo Sciolla (skuro)") (:keywords "uml" "plantuml" "ascii"))])
- (plaster . [(20180127 2050) ((emacs (24 3))) "Pasting to a plaster host with buffers." single ((:commit . "11eb23920410818fe444887b97ad4c8722d66c85") (:authors ("Nicolas Hafner" . "shinmera@tymoon.eu")) (:maintainers ("Nicolas Hafner" . "shinmera@tymoon.eu")) (:maintainer "Nicolas Hafner" . "shinmera@tymoon.eu") (:keywords "convenience" "paste service") (:url . "http://github.com/shirakumo/plaster/"))])
- (platformio-mode . [(20210511 957) ((emacs (25 1)) (async (1 9 0)) (projectile (0 13 0))) "PlatformIO integration" single ((:commit . "f4fd8932995a8aed80eab14e54232010c2889012") (:authors ("Zach Massia" . "zmassia@gmail.com") ("Dante Catalfamo" . "dante@lambda.cx")) (:maintainers ("Zach Massia" . "zmassia@gmail.com")) (:maintainer "Zach Massia" . "zmassia@gmail.com") (:url . "https://github.com/zachmassia/platformio-mode"))])
- (play-crystal . [(20180114 1024) ((emacs (24 4)) (dash (2 12 0)) (request (0 2 0))) "https://play.crystal-lang.org integration." single ((:commit . "86b54346e7c832c14f8e5654a462f6490a6b11d7") (:authors ("Vitalii Elenhaupt")) (:maintainers ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:keywords "convenience") (:url . "https://github.com/veelenga/play-crystal.el"))])
- (play-routes-mode . [(20170426 733) nil "Play Framework Routes File Support" single ((:commit . "ef8230932f7bb96643febbd6872c522932f9571a") (:authors ("M.Riehl <max@flatmap.ninja>, P.Haun" . "bomgar85@googlemail.com")) (:maintainers ("M.Riehl <max@flatmap.ninja>, P.Haun" . "bomgar85@googlemail.com")) (:maintainer "M.Riehl <max@flatmap.ninja>, P.Haun" . "bomgar85@googlemail.com") (:keywords "play" "scala") (:url . "https://github.com/brocode/play-routes-mode/"))])
- (playerctl . [(20220714 1234) nil "Control your music player (e.g. Spotify) with playerctl" single ((:commit . "0912ed5a5ab6d611b5f35db589f608f1fafdc81a") (:authors ("Thomas Luquet" . "thomas@luquet.net")) (:maintainers ("Thomas Luquet" . "thomas@luquet.net")) (:maintainer "Thomas Luquet" . "thomas@luquet.net") (:keywords "multimedia" "playerctl" "music") (:url . "https://github.com/thomasluquet/playerctl.el"))])
- (playground . [(20200812 1336) ((emacs (24 4))) "Manage sandboxes for alternative configurations" single ((:commit . "77d2faab0bc3f6e1f2c65c66644c52167304610d") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "maint") (:url . "https://github.com/akirak/emacs-playground"))])
- (playonline . [(20200318 758) ((emacs (24 4)) (dash (2 1)) (request (0 2))) "Play code with online playgrounds" single ((:commit . "463a94fc01112817d1e6e0209ea85385efcb1329") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:keywords "tools") (:url . "https://github.com/twlz0ne/playonline.el"))])
- (plenv . [(20130707 616) nil "A plenv wrapper for Emacs" single ((:commit . "ee937d0f3a1a7ba2d035f45be896d3ed8fefaee2") (:authors ("Kenta Sato" . "karupa@cpan.org")) (:maintainers ("Kenta Sato" . "karupa@cpan.org")) (:maintainer "Kenta Sato" . "karupa@cpan.org") (:keywords "emacs" "perl"))])
- (plim-mode . [(20140813 13) nil "Major mode for editing Plim files" single ((:commit . "98cd6d11b7ff3ee7b6cb8845f143b5a692a3e6e8") (:authors ("Dong Weiming")) (:maintainers ("Dong Weiming")) (:maintainer "Dong Weiming") (:keywords "markup" "language") (:url . "http://github.com/dongweiming/plim-mode"))])
- (plisp-mode . [(20221130 524) nil "Major mode for PicoLisp programming." tar ((:commit . "3a0ec9741ae7ca67852022c6fa85519fcb4b69ba") (:authors ("Alexis <flexibeast@gmail.com> (plisp-mode.el); Guillermo R. Palavecine <grpala@gmail.com>, Thorsten Jolitz <tjolitz@gmail.com>, Alexis" . "flexibeast@gmail.com")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:keywords "picolisp" "lisp" "programming") (:url . "https://github.com/flexibeast/plisp-mode"))])
- (plsense . [(20151104 1445) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 2 0))) "provide interface for PlSense that is a development tool for Perl." single ((:commit . "d50f9dccc98f42bdb42f1d1c8142246e03879218") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "perl" "completion") (:url . "https://github.com/aki2o/emacs-plsense"))])
- (plsense-direx . [(20140520 2008) ((direx (0 1 -3)) (plsense (0 3 2)) (log4e (0 2 0)) (yaxception (0 3 2))) "Perl Package Explorer" single ((:commit . "8a2f465264c74e04524cc789cdad0190ace43f6c") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "perl" "convenience") (:url . "https://github.com/aki2o/plsense-direx"))])
- (plur . [(20160504 924) ((emacs (24 4))) "Easily search and replace multiple variants of a word" single ((:commit . "5bdd3b9a2f0624414bd596e798644713cd1545f0") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:url . "https://github.com/xuchunyang/plur"))])
- (pmdm . [(20191101 2346) nil "poor man's desktop-mode alternative." single ((:commit . "6d2af9f9e88e6c91eb74dafaddb5f009e1de4907") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainers ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com") (:url . "https://hg.serna.eu/emacs/pmdm"))])
- (pnpm-mode . [(20200527 557) ((emacs (24 1))) "Minor mode for working with pnpm projects" single ((:commit . "ec66ba36ba6e07883b029569c33fd461d28eed75") (:authors ("Rajasegar Chandran" . "rajasegar.c@gmail.com")) (:maintainers ("Rajasegar Chandran" . "rajasegar.c@gmail.com")) (:maintainer "Rajasegar Chandran" . "rajasegar.c@gmail.com") (:keywords "convenience" "project" "javascript" "node" "npm" "pnpm") (:url . "https://github.com/rajasegar/pnpm-mode"))])
- (po-mode . [(20200606 1404) nil "major mode for GNU gettext PO files" tar ((:commit . "25eb1bdca30ed25d2e5d51b9feeb28a3faff51ec") (:keywords "i18n" "gettext"))])
- (pocket-api . [(20180403 109) ((emacs (24 4)) (request (0 2))) "another pocket api" single ((:commit . "3eb9430b9db90bc02e736e433eb86389f7655189") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "pocket") (:url . "https://github.com/lujun9972/pocket-api.el"))])
- (pocket-lib . [(20190720 1957) ((emacs (25 1)) (request (0 2)) (dash (2 13 0)) (kv (0 0 19)) (s (1 12 0))) "Library for accessing getpocket.com API" single ((:commit . "f794e3e619e1f6cad25bbfd5fe019a7e62820bf4") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "pocket") (:url . "https://github.com/alphapapa/pocket-lib.el"))])
- (pocket-mode . [(20171201 1315) ((emacs (24 4)) (pocket-api (0 1))) "Manage your pocket" single ((:commit . "229de7d35b7e5605797591c46aa8200d7efc363c") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "pocket"))])
- (pocket-reader . [(20220630 844) ((emacs (25 1)) (dash (2 13 0)) (kv (0 0 19)) (pocket-lib (0 1)) (s (1 10)) (ov (1 0 6)) (rainbow-identifiers (0 2 2)) (org-web-tools (0 1)) (ht (2 2))) "Client for Pocket reading list" single ((:commit . "88d1e6019a3408835745e117cb5b83a8e31f11fe") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "pocket") (:url . "https://github.com/alphapapa/pocket-reader.el"))])
- (podcaster . [(20200607 1054) ((cl-lib (0 5))) "Podcast client" single ((:commit . "7a21173da0c57e6aa41dbdc33383047386b35eb5") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/podcaster"))])
- (poe-lootfilter-mode . [(20190330 1117) ((emacs (24 3))) "Major mode for editing Path of Exile lootfilters" single ((:commit . "5ef06684cb2b17b090ee1f303c2b789fa71bc106") (:authors ("Jeremiah Dodds" . "jeremiah.dodds@gmail.com")) (:maintainers ("Jeremiah Dodds" . "jeremiah.dodds@gmail.com")) (:maintainer "Jeremiah Dodds" . "jeremiah.dodds@gmail.com") (:keywords "languages" "games") (:url . "https://github.com/jdodds/poe-lootfilter-mode"))])
- (poet-theme . [(20200606 2343) ((emacs (24 1))) "A theme for prose" tar ((:commit . "16eb694f0755c04c4db98614d0eca1199fddad70") (:authors ("Kunal Bhalla" . "bhalla.kunal@gmail.com")) (:maintainers ("Kunal Bhalla" . "bhalla.kunal@gmail.com")) (:maintainer "Kunal Bhalla" . "bhalla.kunal@gmail.com") (:keywords "faces" "theme" "prose") (:url . "https://github.com/kunalb/poet/"))])
- (poetry . [(20230304 1540) ((transient (0 2 0)) (pyvenv (1 2)) (emacs (25 1))) "Interface to Poetry" single ((:commit . "5ca52b221e57bb9dce7c89f62e7b01da1346a273") (:authors ("Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainers ("Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainer "Gaby Launay" . "gaby.launay@protonmail.com") (:keywords "python" "tools") (:url . "https://github.com/galaunay/poetry.el"))])
- (point-pos . [(20170421 1632) nil "Save and restore point positions" single ((:commit . "4cd0f8c8d1296c5c64f708b6a5835e8520c51b68") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/alezost/point-pos.el"))])
- (point-stack . [(20200427 107) nil "Back and forward navigation through buffer locations" single ((:commit . "cddcea2c91038710c245819b3cda2dd739726134") (:authors ("Matt Harrison" . "matthewharrison@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainers ("Matt Harrison" . "matthewharrison@gmail.com")) (:maintainer "Matt Harrison" . "matthewharrison@gmail.com"))])
- (poke-line . [(20201023 247) ((emacs (24 3))) "Minor mode to show position in a buffer using a Pokemon" tar ((:commit . "8d484dbaa1215d902fbd1e3c9163b39a43ec532a") (:authors ("Ryan Miller" . "ryan@devopsmachine.com")) (:maintainers ("Ryan Miller" . "ryan@devopsmachine.com")) (:maintainer "Ryan Miller" . "ryan@devopsmachine.com") (:keywords "pokemon" "fun" "mode-line" "mouse") (:url . "https://github.com/RyanMillerC/poke-line/"))])
- (pollen-mode . [(20220904 447) ((emacs (24 3)) (cl-lib (0 5))) "major mode for editing pollen files" single ((:commit . "19174fab69ce4d2ae903ef2c3da44054e8b84268") (:authors ("Junsong Li <ljs.darkfish AT GMAIL>")) (:maintainers ("Junsong Li")) (:maintainer "Junsong Li") (:keywords "languages" "pollen" "pollenpub") (:url . "https://github.com/lijunsong/pollen-mode"))])
- (poly-R . [(20230416 1454) ((emacs (25)) (polymode (0 2 2)) (poly-markdown (0 2 2)) (poly-noweb (0 2 2))) "Various polymodes for R language" single ((:commit . "8024e852cfca642dea2045a41b2033baa2f1f9a5") (:authors ("Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "languages" "multi-modes") (:url . "https://github.com/polymode/poly-R"))])
- (poly-ansible . [(20220113 1656) ((ansible (0 2)) (ansible-doc (0 4)) (jinja2-mode (0 2)) (polymode (0 1 5)) (yaml-mode (0 0 13))) "Polymode for Ansible: Jinja2 in YAML" tar ((:commit . "6d74fe80b7e61a35aa0fa36a520eaf5c9c027c51") (:authors ("Peter Oliver" . "poly-ansible@mavit.org.uk")) (:maintainers ("Peter Oliver" . "poly-ansible@mavit.org.uk")) (:maintainer "Peter Oliver" . "poly-ansible@mavit.org.uk") (:keywords "languages") (:url . "https://gitlab.com/mavit/poly-ansible/"))])
- (poly-erb . [(20200316 1314) ((emacs (25)) (polymode (0 2 2))) "Polymode for erb" single ((:commit . "56c744b8d87d8cbe0aba2696d4e8525afc4aa0e8") (:authors ("Siavash Sajjadi and Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "emacs") (:url . "https://github.com/polymode/poly-erb"))])
- (poly-markdown . [(20230202 1210) ((emacs (25)) (polymode (0 2 2)) (markdown-mode (2 3))) "Polymode for markdown-mode" single ((:commit . "98695eb7ca4ca11dcec71a1cab64903bbf79b4d3") (:authors ("Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "emacs") (:url . "https://github.com/polymode/poly-markdown"))])
- (poly-noweb . [(20200316 1315) ((emacs (25)) (polymode (0 2 2))) "Polymode for noweb" single ((:commit . "3b0cd36ca9a707e8a09337a3468fa85d81fc461c") (:authors ("Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "languages" "multi-modes") (:url . "https://github.com/polymode/poly-noweb"))])
- (poly-org . [(20230317 1220) ((emacs (25)) (polymode (0 2 2))) "Polymode for org-mode" single ((:commit . "5ca02279a4e6f5025cd2c7b1196058d3e74dc5d5") (:authors ("Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "languages" "multi-modes") (:url . "https://github.com/polymode/poly-org"))])
- (poly-rst . [(20210418 1009) ((emacs (25)) (polymode (0 2 2))) "poly-rst-mode polymode" single ((:commit . "e71f2ae6a00683cdb8006f953e5db0673043e144") (:authors ("Gustaf Waldemarson, Vitalie Spinu")) (:maintainers ("Gustaf Waldemarson, Vitalie Spinu")) (:maintainer "Gustaf Waldemarson, Vitalie Spinu") (:keywords "languages" "multi-modes") (:url . "https://github.com/polymode/poly-rst"))])
- (poly-ruby . [(20180905 929) ((emacs (25)) (polymode (0 1 2))) "Provides poly-ruby-mode" single ((:commit . "794ebb926ace23e9c1398da934701951432dcea2") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "languages") (:url . "https://github.com/knu/poly-ruby.el"))])
- (poly-slim . [(20200316 1316) ((emacs (25)) (polymode (0 2 2)) (slim-mode (1 1))) "Polymodes for slim" single ((:commit . "9e9b5164c68955974fd5f5d220aec5af9b5ba3ae") (:authors ("Siavash Sajjadi and Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "emacs") (:url . "https://github.com/polymode/poly-slim"))])
- (poly-wdl . [(20190712 529) ((emacs (25)) (polymode (0 2)) (wdl-mode (20170709))) "Polymode for WDL" single ((:commit . "fe2ee0c441795c35a8c127fa1f7006a5f251f564") (:authors ("Jean Monlong" . "jean.monlong@gmail.com")) (:maintainers ("Jean Monlong" . "jean.monlong@gmail.com")) (:maintainer "Jean Monlong" . "jean.monlong@gmail.com") (:keywords "languages") (:url . "https://github.com/jmonlong/poly-wdl"))])
- (polybar-sesman . [(20210901 1336) ((emacs (25 1)) (dash (2 19 1)) (sesman (0 3 0))) "Display active sesman connections in polybar" single ((:commit . "5b8ff640ada92da98400206ba9a61140093a823f") (:authors ("Mark Dawson" . "markgdawson@gmail.com")) (:maintainers ("Mark Dawson" . "markgdawson@gmail.com")) (:maintainer "Mark Dawson" . "markgdawson@gmail.com") (:keywords "project" "convenience") (:url . "https://github.com/markgdawson/polybar-sesman.el"))])
- (polymode . [(20230317 1218) ((emacs (25))) "Extensible framework for multiple major modes" tar ((:commit . "ca060e081a1f849a880732670dc15370ac987b89") (:authors ("Vitalie Spinu")) (:maintainers ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:keywords "languages" "multi-modes" "processes") (:url . "https://github.com/polymode/polymode"))])
- (pomidor . [(20220714 1932) ((emacs (24 3)) (alert (1 2)) (dash (2 17 0))) "Simple and cool pomodoro timer" tar ((:commit . "394a52f95587b1d10d0c3bdca503d2cc876db35b") (:authors ("TatriX" . "tatrics@gmail.com")) (:maintainers ("TatriX" . "tatrics@gmail.com")) (:maintainer "TatriX" . "tatrics@gmail.com") (:keywords "tools" "time" "applications" "pomodoro technique") (:url . "https://github.com/TatriX/pomidor"))])
- (pomm . [(20220815 824) ((emacs (27 1)) (alert (1 2)) (seq (2 22)) (transient (0 3 0))) "Pomodoro and Third Time timers" tar ((:commit . "42f03d6ff29109038b31a8647f1acdc80fb867be") (:authors ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainers ("Korytov Pavel" . "thexcloud@gmail.com")) (:maintainer "Korytov Pavel" . "thexcloud@gmail.com") (:url . "https://github.com/SqrtMinusOne/pomm.el"))])
- (pomodoro . [(20210225 2018) nil "A timer for the Pomodoro Technique" single ((:commit . "ed888b24d0b89a5dec6f5278b1064c530c827321") (:authors ("David Kerschner" . "dkerschner@gmail.com")) (:maintainers ("David Kerschner" . "dkerschner@gmail.com")) (:maintainer "David Kerschner" . "dkerschner@gmail.com"))])
- (pony-mode . [(20170807 1522) nil "Minor mode for working with Django Projects" tar ((:commit . "760684d30b6c234d1b88c9a4673a808f36f7f341") (:authors ("David Miller" . "david@deadpansincerity.com")) (:maintainer "David Miller" . "david@deadpansincerity.com") (:keywords "python" "django") (:url . "https://github.com/davidmiller/pony-mode"))])
- (pony-snippets . [(20200418 354) ((yasnippet (0 8 0))) "Yasnippets for Pony" tar ((:commit . "115a0d5066f89554bee9cb1045bcda5a18ebd441") (:keywords "snippets" "pony") (:url . "https://github.com/seantallen/pony-snippets"))])
- (ponylang-mode . [(20211015 331) ((emacs (25 1)) (dash (2 17 0)) (hydra (0 15 0)) (hl-todo (3 1 2)) (yafolding (0 4 1)) (yasnippet (0 14 0)) (company-ctags (0 0 4)) (rainbow-delimiters (2 1 4)) (fill-column-indicator (1 90))) "A major mode for the Pony programming language" single ((:commit . "1abf04bc8f4f09a6add4b587c7cf5ca23735e7c0") (:keywords "languages" "programming") (:url . "https://github.com/ponylang/ponylang-mode"))])
- (pophint . [(20200420 1429) ((log4e (0 3 3)) (yaxception (0 3))) "Provide navigation using pop-up tips, like Firefox's Vimperator Hint Mode" tar ((:commit . "5e13da4578ae7ba00e6f7bae31eb546d713cc19d") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "popup") (:url . "https://github.com/aki2o/emacs-pophint"))])
- (poporg . [(20170403 751) nil "Pop a comment or string to an empty buffer for text editing" single ((:commit . "2c58d68c81ecca4140bf179f19ed153ec804b65a") (:authors ("François Pinard" . "pinard@iro.umontreal.ca") ("Joseph Rabinoff" . "rabinoff@post.harvard.edu")) (:maintainers ("Joseph Rabinoff" . "rabinoff@post.harvard.edu")) (:maintainer "Joseph Rabinoff" . "rabinoff@post.harvard.edu") (:keywords "outlines" "tools") (:url . "https://github.com/QBobWatson/poporg"))])
- (popper . [(20230425 2313) ((emacs (26 1))) "Summon and dismiss buffers as popups" tar ((:commit . "e3991202234e4dc10dbfae8e13b27c590dd52fb5") (:authors ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthik.chikmagalur@gmail.com") (:keywords "convenience") (:url . "https://github.com/karthink/popper"))])
- (popup . [(20221231 1634) ((emacs (24 3))) "Visual Popup User Interface" single ((:commit . "71cede0588c10526f88dd0375bce776ec2eed05e") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "lisp") (:url . "https://github.com/auto-complete/popup-el"))])
- (popup-complete . [(20141109 308) ((popup (0 5 0))) "completion with popup" single ((:commit . "e362d4a005b36646ffbaa6be604e9e31bc406ca9") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-popup-complete"))])
- (popup-edit-menu . [(20170404 1425) ((emacs (24))) "a popup context edit menu package" single ((:commit . "925600a6e29183841199e866cf55e566a6a1b002") (:authors ("Debugfan Chin" . "debugfanchin@gmail.com")) (:maintainers ("Debugfan Chin" . "debugfanchin@gmail.com")) (:maintainer "Debugfan Chin" . "debugfanchin@gmail.com") (:keywords "lisp" "pop-up" "context" "edit" "menu"))])
- (popup-imenu . [(20210404 1153) ((dash (2 12 1)) (popup (0 5 3)) (flx-ido (0 6 1))) "imenu index popup" single ((:commit . "b00c4d503cbbaf01c136b1647329e6a6257d012c") (:authors ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainers ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainer "Igor Shymko" . "igor.shimko@gmail.com") (:keywords "popup" "imenu") (:url . "https://github.com/ancane/popup-imenu"))])
- (popup-kill-ring . [(20131020 1854) ((popup (0 4)) (pos-tip (0 4))) "interactively insert item from kill-ring" single ((:commit . "dc50b62ae8b7c2675dde96bb410d9bf0e8643f6a") (:authors ("khiker" . "khiker.mail+elisp@gmail.com")) (:maintainers ("khiker" . "khiker.mail+elisp@gmail.com")) (:maintainer "khiker" . "khiker.mail+elisp@gmail.com") (:keywords "popup" "kill-ring" "pos-tip") (:url . "https://github.com/waymondo/popup-kill-ring"))])
- (popup-switcher . [(20210402 1208) ((cl-lib (0 3)) (popup (0 5 3)) (dash (2 10 0))) "switch to other buffers and files via popup." single ((:commit . "94e01b9ea7970e86ed0f2fbeaa8cd320b60ae821") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:keywords "popup" "switch" "buffers" "functions") (:url . "https://github.com/kostafey/popup-switcher"))])
- (popwin . [(20210215 1849) ((emacs (24 3))) "Popup Window Manager" single ((:commit . "1184368d3610bd0d0ca4a3db4068048c562c2b50") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com") (:keywords "convenience") (:url . "https://github.com/emacsorphanage/popwin"))])
- (portage-navi . [(20141208 1355) ((concurrent (0 3 1)) (ctable (0 1 2))) "portage viewer" single ((:commit . "8016c3e99fe6cef101d479a3d69185796b22ca2f") (:authors ("<m.sakurai at kiwanami.net>")) (:maintainers ("<m.sakurai at kiwanami.net>")) (:maintainer "<m.sakurai at kiwanami.net>") (:keywords "tools" "gentoo") (:url . "https://github.com/kiwanami/emacs-portage-navi"))])
- (porthole . [(20200404 1454) ((emacs (26)) (web-server (0 1 2)) (f (0 19 0)) (json-rpc-server (0 1 2))) "RPC Servers in Emacs" single ((:commit . "9e68b419acf9245208f8094e10041b7f04511473") (:authors ("GitHub user \"Jcaw\"")) (:maintainers ("GitHub user \"Jcaw\"")) (:maintainer "GitHub user \"Jcaw\"") (:keywords "comm" "rpc" "http" "json") (:url . "https://github.com/jcaw/porthole"))])
- (pos-tip . [(20220715 1020) nil "Show tooltip at point" single ((:commit . "bfe74204d1201a33ace81898e7c485382817510a") (:authors ("S. Irie")) (:maintainers ("S. Irie")) (:maintainer "S. Irie") (:keywords "tooltip"))])
- (posframe . [(20230423 927) ((emacs (26 1))) "Pop a posframe (just a frame) at point" tar ((:commit . "3b97dc180b03498103cfcc7f44e64150df440bf0") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience" "tooltip") (:url . "https://github.com/tumashu/posframe"))])
- (posix-manual . [(20200301 1103) ((emacs (24))) "POSIX manual page lookup" tar ((:commit . "ebaacd7266ae7a66605317f57b9f42e9cfb2ce1e") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-posix-manual"))])
- (postcss-sorting . [(20180211 956) ((emacs (24))) "postcss-sorting interface" single ((:commit . "deb0c935d2904c11a965758a9aee5a0e905f21fc") (:authors ("Peiwen Lu" . "hi@peiwen.lu")) (:maintainers ("Peiwen Lu" . "hi@peiwen.lu")) (:maintainer "Peiwen Lu" . "hi@peiwen.lu") (:url . "https://github.com/P233/postcss-sorting.el"))])
- (pov-mode . [(20161115 743) nil "Major mode for editing POV-Ray scene files." tar ((:commit . "9fc1db3aab7c27155674dd1a87ec62606035d074") (:authors ("Peter Boettcher" . "pwb@andrew.cmu.edu")) (:maintainer "Marco Pessotto" . "melmothx@gmail.com") (:keywords "pov" "povray"))])
- (pow . [(20140420 806) ((emacs (24)) (cl-lib (0 5))) "pow (http://pow.cx/) manager for emacs" tar ((:commit . "782532d5d3582fe8fd67014507b20077f3f2d292") (:authors ("yukihiro hara" . "yukihr@gmail.com")) (:maintainers ("yukihiro hara" . "yukihr@gmail.com")) (:maintainer "yukihiro hara" . "yukihr@gmail.com") (:keywords "develop" "web" "pow") (:url . "http://github.com/yukihr/emacs-pow"))])
- (power-mode . [(20220817 429) ((emacs (26 1))) "Imbue Emacs with power!" single ((:commit . "313698d9c7766c17b077a70b31a2d0f52496d767") (:authors ("Eliza Velasquez")) (:maintainers ("Eliza Velasquez")) (:maintainer "Eliza Velasquez") (:keywords "games") (:url . "https://github.com/elizagamedev/power-mode.el"))])
- (powerline . [(20221110 1956) ((cl-lib (0 2))) "Rewrite of Powerline" tar ((:commit . "c35c35bdf5ce2d992882c1f06f0f078058870d4a") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainers ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net") (:keywords "mode-line") (:url . "http://github.com/milkypostman/powerline/"))])
- (powerline-evil . [(20190603 340) ((evil (1 0 8)) (powerline (2 3))) "Utilities for better Evil support for Powerline" tar ((:commit . "b77e2cf571e9990734f2b30d826f3a362b559fd1") (:authors ("Chris Johnson" . "chris@christophermjohnson.net")) (:maintainers ("Chris Johnson" . "chris@christophermjohnson.net")) (:maintainer "Chris Johnson" . "chris@christophermjohnson.net") (:keywords "evil" "mode-line" "powerline") (:url . "http://github.com/johnson-christopher/powerline-evil/"))])
- (powershell . [(20220805 1712) ((emacs (24))) "Mode for editing PowerShell scripts" single ((:commit . "f2da15857e430206e215a3c65289b4058ae3c976") (:authors ("Frédéric Perrin <frederic (dot) perrin (arobas) resel (dot) fr>")) (:maintainers ("Frédéric Perrin <frederic (dot) perrin (arobas) resel (dot) fr>")) (:maintainer "Frédéric Perrin <frederic (dot) perrin (arobas) resel (dot) fr>") (:keywords "powershell" "languages") (:url . "http://github.com/jschaf/powershell.el"))])
- (powerthesaurus . [(20230426 1719) ((emacs (26 1)) (jeison (1 0 0)) (s (1 13 0))) "Powerthesaurus integration" single ((:commit . "4b97797cf789aaba411c61a85fe23474ebc5bedc") (:keywords "convenience" "writing") (:url . "http://github.com/SavchenkoValeriy/emacs-powerthesaurus"))])
- (ppcompile . [(20220619 1535) ((emacs (25 1))) "Ping-pong compile projects on remote machines" single ((:commit . "4c287c9ebc0e78dbbe75195bb5eb3fe82e0bfaff") (:authors ("Guangwang Huang" . "whatacold@gmail.com")) (:maintainers ("Guangwang Huang")) (:maintainer "Guangwang Huang") (:keywords "tools") (:url . "https://github.com/whatacold/ppcompile"))])
- (ppd-sr-speedbar . [(20151108 1224) ((sr-speedbar (20140914 2339)) (project-persist-drawer (0 0 4))) "Sr Speedbar adaptor for project-persist-drawer." tar ((:commit . "19d3e924407f40a6bb38c8fe427a159af755adce") (:authors ("Robert Dallas Gray")) (:maintainer "Robert Dallas Gray") (:keywords "projects" "drawer") (:url . "https://github.com/rdallasgrayppd-sr-speedbar"))])
- (ppp . [(20220211 1529) ((emacs (25 1))) "Extended pretty printer for Emacs Lisp" single ((:commit . "d5d854c3006dfd268e62c7f91c2aad6f86a505b5") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tools") (:url . "https://github.com/conao3/ppp.el"))])
- (pr-review . [(20230320 419) ((emacs (27 1)) (magit-section (3 2)) (magit (3 2)) (markdown-mode (2 5)) (ghub (3 5))) "Review github PR" tar ((:commit . "f11fe37fbbb68485bc3b0ca692f0175e66293f09") (:authors ("Yikai Zhao" . "yikai@z1k.dev")) (:maintainers ("Yikai Zhao" . "yikai@z1k.dev")) (:maintainer "Yikai Zhao" . "yikai@z1k.dev") (:keywords "tools") (:url . "https://github.com/blahgeek/emacs-pr-review"))])
- (prassee-theme . [(20180709 1004) ((emacs (24))) "A high contrast color theme for Emacs." single ((:commit . "81126f69cdbaab836c00ae7a49aaf89d4229fde1") (:authors ("Prassee " . "prassee.sathian@gmail.com")) (:maintainers ("Prassee " . "prassee.sathian@gmail.com")) (:maintainer "Prassee " . "prassee.sathian@gmail.com") (:keywords "dark" "high-contrast" "faces") (:url . "https://github.com/prassee/prassee-emacs-theme"))])
- (prefab . [(20220828 2015) ((emacs (27 1)) (f (0 2 0)) (transient (0 3 7))) "Integration for project generation tools like cookiecutter" single ((:commit . "328c763d67cd53875d729af0bcb89d412455cf60") (:authors ("Laurence Warne")) (:maintainers ("Laurence Warne")) (:maintainer "Laurence Warne") (:url . "https://github.com/laurencewarne/prefab.el"))])
- (preproc-font-lock . [(20151107 2018) nil "Highlight C-style preprocessor directives." single ((:commit . "565fda9f5fdeb0598986174a07e9fb09f7604397") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "c" "languages" "faces") (:url . "https://github.com/Lindydancer/preproc-font-lock"))])
- (prescient . [(20221216 112) ((emacs (25 1))) "Better sorting and filtering" single ((:commit . "72b023f5fc1ae2bbf2f51f1786cc012d40671bf4") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes") (:keywords "extensions") (:url . "https://github.com/raxod502/prescient.el"))])
- (preseed-generic-mode . [(20180210 500) nil "Debian preseed file major mode" single ((:commit . "3aa8806c4a659064baa01751400c53fbaf847f66") (:authors ("Tong Sun" . "suntong@users.sourceforge.net")) (:maintainers ("Tong Sun" . "suntong@users.sourceforge.net")) (:maintainer "Tong Sun" . "suntong@users.sourceforge.net") (:url . "https://github.com/suntong/preseed-generic-mode"))])
- (presentation . [(20180427 224) ((emacs (24 4)) (cl-lib (0 5))) "Display large character for presentation" single ((:commit . "b1948e6d8b37b6df9290d77d181e1b1d58dd33c0") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "environment" "faces" "frames") (:url . "https://github.com/zonuexe/emacs-presentation-mode"))])
- (prettier . [(20220603 1338) ((emacs (26 1)) (iter2 (0 9)) (nvm (0 2)) (editorconfig (0 8))) "Code formatting with Prettier" tar ((:commit . "3fcf3ba3507f47b8ac1392e7901aa2c418147758") (:authors ("Julian Scheid" . "julians37@gmail.com")) (:maintainers ("Julian Scheid" . "julians37@gmail.com")) (:maintainer "Julian Scheid" . "julians37@gmail.com") (:keywords "convenience" "languages" "files") (:url . "https://github.com/jscheid/prettier.el"))])
- (prettier-js . [(20180109 726) nil "Minor mode to format JS code on file save" single ((:commit . "0e8b95c4e5898a03e85dbc555c37b4f968292aec") (:authors ("James Long and contributors")) (:maintainers ("James Long and contributors")) (:maintainer "James Long and contributors") (:keywords "convenience" "wp" "edit" "js") (:url . "https://github.com/prettier/prettier-emacs"))])
- (prettier-rc . [(20220330 145) ((emacs (24 3)) (prettier-js (0 1 0))) "Use local rc rules with prettier" single ((:commit . "99e40a9783299e41911f6b37156626d53e43809e") (:authors ("Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>")) (:maintainers ("Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>")) (:maintainer "Joel Bryan Juliano <joelbryan dot juliano at gmail dot com>") (:keywords "convenience" "edit" "js" "ts" "rc" "prettierrc" "prettier-rc" "prettier" "prettier-js") (:url . "https://github.com/jjuliano/prettier-rc-emacs"))])
- (prettify-greek . [(20160603 908) nil "Greek letters for prettify-symbols" single ((:commit . "698d07a6ffe85f6fb53f3bfec4f49380c25cfd90") (:keywords "faces") (:url . "https://gitlab.com/fommil/emacs-prettify-greek"))])
- (prettify-math . [(20220101 549) ((emacs (27 1)) (dash (2 19 0)) (s (1 12 0)) (jsonrpc (1 0 9))) "Prettify math formula" tar ((:commit . "5bdb9a8af7593d3a38492a618aedc545278fe8a1") (:authors ("Shaq Xu" . "shaqxu@163.com")) (:maintainers ("Shaq Xu" . "shaqxu@163.com")) (:maintainer "Shaq Xu" . "shaqxu@163.com") (:keywords "math" "asciimath" "tex" "latex" "prettify" "mathjax") (:url . "https://github.com/shaqxu/prettify-math"))])
- (pretty-hydra . [(20210221 834) ((hydra (0 15 0)) (s (1 12 0)) (dash (2 18 0)) (emacs (24))) "A macro for creating nice-looking hydras" single ((:commit . "84c1929a5153be169ca5c36737439d51dffde505") (:authors ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainers ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainer "Jerry Peng" . "pr2jerry@gmail.com") (:url . "https://github.com/jerrypnz/major-mode-hydra.el"))])
- (pretty-mode . [(20190615 2045) nil "Redisplay parts of the buffer as pretty Unicode symbols." single ((:commit . "5154355e90fdd70d3647257280a89eeb725ef084") (:authors ("Arthur Danskin" . "arthurdanskin@gmail.com")) (:maintainers ("Grant Rettke" . "grant@wisdomandwonder.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com") (:keywords "pretty" "unicode" "symbols") (:url . "https://github.com/akatov/pretty-mode"))])
- (pretty-sha-path . [(20141105 1826) nil "Prettify Guix/Nix store paths" single ((:commit . "beea38bdf34ed27059d6484e1e2a337a27e1f7ce") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "faces" "convenience") (:url . "https://gitorious.org/alezost-emacs/pretty-sha-path"))])
- (pretty-speedbar . [(20220303 1726) ((emacs (27 1))) "Make speedbar pretty" single ((:commit . "56dc9f114fcc55843e182cde1fc9d7a14c261c6a") (:authors ("Kristle Chester" . "kcyarn7@gmail.com")) (:maintainers ("Kristle Chester" . "kcyarn7@gmail.com")) (:maintainer "Kristle Chester" . "kcyarn7@gmail.com") (:keywords "file" "tags" "tools") (:url . "https://github.com/kcyarn/pretty-speedbar"))])
- (pretty-symbols . [(20140814 959) nil "Draw tokens as Unicode glyphs." single ((:commit . "ab82b3fba129fae14e4031eb7fd648c1a92d0e71") (:authors ("David Röthlisberger" . "david@rothlis.net")) (:maintainers ("David Röthlisberger" . "david@rothlis.net")) (:maintainer "David Röthlisberger" . "david@rothlis.net") (:keywords "faces") (:url . "http://github.com/drothlis/pretty-symbols"))])
- (preview-dvisvgm . [(20211225 635) ((emacs (27 1)) (auctex (13 0 12))) "SVG output for LaTeX preview" single ((:commit . "630e2f008c4a6c67a01824b7ad6b844977b28f87") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainers ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de") (:keywords "tex") (:url . "https://github.com/TobiasZawada/preview-dvisvgm"))])
- (prism . [(20230416 626) ((emacs (26 1)) (dash (2 14 1))) "Customizable, depth-based syntax coloring" single ((:commit . "2dc7c283455c8846dbf3c725fd7aacdec6c0ebcb") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "faces" "lisp") (:url . "https://github.com/alphapapa/prism.el"))])
- (private . [(20150122 157) ((aes (0 6))) "take care of your private configuration files." single ((:commit . "f57f1c2f6bfe900bd40b252688df4c6ed6a5f44b") (:authors ("Cheung Mou Wai" . "yeannylam@gmail.com")) (:maintainers ("Cheung Mou Wai" . "yeannylam@gmail.com")) (:maintainer "Cheung Mou Wai" . "yeannylam@gmail.com") (:keywords "private" "configuration" "backup" "recover") (:url . "https://github.com/cheunghy/private"))])
- (private-comments-mode . [(20220929 1807) ((emacs (27 1))) "Minor mode for masukomi/private_comments" single ((:commit . "b32b862e42e1f5cf26b6ca4cebea69b3f4e1aeab") (:keywords "tools") (:url . "https://github.com/masukomi/private-comments-mode"))])
- (private-diary . [(20151216 1657) ((emacs (24 0))) "maintain a private diary in Emacs" single ((:commit . "5b1aeb22f22447fd35e1c107b6db44a7b27b8a42") (:authors ("James P. Ascher" . "jpa4q@virginia.edu")) (:maintainers ("James P. Ascher" . "jpa4q@virginia.edu")) (:maintainer "James P. Ascher" . "jpa4q@virginia.edu") (:keywords "diary" "encryption") (:url . "https://github.com/cacology/private-diary"))])
- (proc-net . [(20130322 12) nil "network process tools" single ((:commit . "00bfc92a381787ec387974ed17070118ced6d9ad") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "processes") (:url . "http://github.com/nicferrier/emacs-procnet"))])
- (proced-narrow . [(20190911 1818) ((seq (2 20)) (emacs (24))) "Live-narrowing of search results for proced." single ((:commit . "0e2a4dfb072eb0369d0020b429e820ae620d325e") (:authors ("Travis Jeffery" . "tj@travisjeffery.com")) (:maintainers ("Travis Jeffery" . "tj@travisjeffery.com")) (:maintainer "Travis Jeffery" . "tj@travisjeffery.com") (:keywords "processes" "proced") (:url . "https://github.com/travisjeffery/proced-narrow"))])
- (processing-mode . [(20171022 2302) nil "Major mode for Processing 2.0" single ((:commit . "448aba82970c98322629eaf2746e73be6c30c98e") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainers ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net") (:keywords "languages" "snippets") (:url . "https://github.com/ptrv/processing2-emacs"))])
- (processing-snippets . [(20140426 1428) ((yasnippet (0 8 0))) "Snippets for processing-mode" tar ((:commit . "6175b8eef76369c4b1b8608b8df9a37f14b1be5c") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net") (:keywords "snippets") (:url . "https://github.com/ptrv/processing2-emacs"))])
- (prodigy . [(20220523 1728) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (emacs (27 1))) "Manage external services" single ((:commit . "a3be00d3b90a77118c2d7d9f5a2f26151091fa07") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/prodigy.el"))])
- (professional-theme . [(20150315 1100) nil "Emacs port of Vim's professional theme" single ((:commit . "0927d1474049a193f9f366bde5eb1887b9ba20ed") (:authors ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainers ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainer "Juanjo Alvarez" . "juanjo@juanjoalvarez.net") (:keywords "theme" "light" "professional") (:url . "https://github.com/juanjux/emacs-professional-theme"))])
- (prog-fill . [(20180607 132) ((emacs (25 1)) (cl-lib (0 6 1))) "Smartly format lines to use vertical space." single ((:commit . "3fbf7da6dd826e95c9077d659566ee29814a31d8") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "convenience" "c" "formatting" "editing") (:url . "https://github.com/ahungry/prog-fill"))])
- (prognth . [(20130920 1759) nil "Extend prog1 to arbitrary index" single ((:commit . "2f1ca4d34b1fd581163e1df122c85418137e8e62") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "lisp"))])
- (programmer-dvorak . [(20150427 137) nil "Input method for Programmer Dvorak." single ((:commit . "c35d5e3b8b53c1e9341957b5d5db40387ba0c8ee") (:authors ("Chenyun Yang" . "yangchenyun@gmail.com")) (:maintainers ("Chenyun Yang" . "yangchenyun@gmail.com")) (:maintainer "Chenyun Yang" . "yangchenyun@gmail.com") (:keywords "dvorak" "programmer-dvorak" "input-method") (:url . "https://github.com/yangchenyun/programmer-dvorak"))])
- (project-abbrev . [(20220704 658) ((emacs (25 1))) "Customize abbreviation expansion in the project" single ((:commit . "3eb8000e7a07f16e6c8323c1b7e7b45777dbb5cd") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "abbrev" "abbreviation" "customizable" "shortcut") (:url . "https://github.com/jcs-elpa/project-abbrev"))])
- (project-explorer . [(20150504 14) ((cl-lib (0 3)) (es-lib (0 3)) (es-windows (0 1)) (emacs (24))) "A project explorer sidebar" single ((:commit . "589a09008706f5f4ef91393dc4306eede0d15ca9") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/project-explorer"))])
- (project-mode-line-tag . [(20220720 2110) ((emacs (25 1))) "Display a buffer's project in its mode line" single ((:commit . "509ac9a01cd344ee9bfa1bfebed6565dd4cfedd7") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "convenience") (:url . "https://github.com/fritzgrabo/project-mode-line-tag"))])
- (project-persist . [(20180906 1302) nil "A minor mode to allow loading and saving of project settings." tar ((:commit . "26d9435bef44da2a1b0892eba822f9f487b98eec") (:authors ("Robert Dallas Gray")) (:maintainer "Robert Dallas Gray") (:keywords "project" "persistence") (:url . "https://github.com/rdallasgray/project-persist"))])
- (project-persist-drawer . [(20151108 1222) ((project-persist (0 3))) "Use a project drawer with project-persist." tar ((:commit . "35bbe132a4fab6a0fec15ce6c0fd2fe6a4aa9626") (:authors ("Robert Dallas Gray" . "mail@robertdallasgray.com")) (:maintainer "Robert Dallas Gray" . "mail@robertdallasgray.com") (:keywords "defaults") (:url . "https://github.com/rdallasgray/project-persist-drawer.git"))])
- (project-rootfile . [(20220708 1403) ((emacs (27 1))) "Extension of project.el to detect project with root file" single ((:commit . "9259708307c9da6b06f04f5b34ccd28f1fba5eaa") (:authors ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainer "Taiki Sugawara" . "buzz.taiki@gmail.com") (:url . "https://github.com/buzztaiki/project-rootfile.el"))])
- (project-shells . [(20210625 647) ((emacs (24 3)) (seq (2 19))) "Manage the shell buffers of each project" single ((:commit . "900369828f1a213c60a2207a71d46bc43fd5405c") (:authors ("\"Huang, Ying\"" . "huang.ying.caritas@gmail.com")) (:maintainers ("\"Huang, Ying\"" . "huang.ying.caritas@gmail.com")) (:maintainer "\"Huang, Ying\"" . "huang.ying.caritas@gmail.com") (:keywords "processes" "terminals") (:url . "https://github.com/hying-caritas/project-shells"))])
- (project-tab-groups . [(20220720 2109) ((emacs (28 1))) "Support a \"one tab group per project\" workflow" single ((:commit . "2d348279876f3073176048d903f9672f3c933ca5") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "convenience") (:url . "https://github.com/fritzgrabo/project-tab-groups"))])
- (projectile . [(20230317 1101) ((emacs (25 1))) "Manage and navigate projects in Emacs easily" single ((:commit . "271007c6611fcb08ddd326d7de9727c2ad5ef265") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "project" "convenience") (:url . "https://github.com/bbatsov/projectile"))])
- (projectile-codesearch . [(20180508 1522) ((codesearch (20171122 431)) (projectile (20150405 126))) "Integration of codesearch into projectile" single ((:commit . "e40efc62e9333db0593bd81b5c78d08b19bfb193") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:keywords "tools" "development" "search") (:url . "https://github.com/abingham/emacs-codesearch"))])
- (projectile-git-autofetch . [(20200820 2028) ((emacs (25 1)) (projectile (0 14 0))) "automatically fetch git repositories" single ((:commit . "423ed5fa6508c4edc0a837bb585c7e77e99876be") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainers ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch") (:keywords "tools" "vc") (:url . "https://github.com/andrmuel/projectile-git-autofetch"))])
- (projectile-rails . [(20221231 1643) ((emacs (25 1)) (projectile (0 12 0)) (inflections (1 1)) (inf-ruby (2 2 6)) (f (0 13 0)) (rake (0 3 2)) (dash (2 18 1))) "Minor mode for Rails projects based on projectile-mode" single ((:commit . "701784df7befe17b861f1b53fe9cbc59d0b94b9f") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainers ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:keywords "rails" "projectile") (:url . "https://github.com/asok/projectile-rails"))])
- (projectile-ripgrep . [(20221013 541) ((ripgrep (0 3 0)) (projectile (0 14 0))) "Run ripgrep with Projectile" single ((:commit . "b6bd5beb0c11348f1afd9486cbb451d0d2e3c45a") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "ripgrep" "projectile") (:url . "https://github.com/nlamirault/ripgrep.el"))])
- (projectile-sift . [(20160107 1015) ((sift (0 2 0)) (projectile (0 13 0))) "Run a sift with Projectile" single ((:commit . "8c3f3d14a351a2394027d72ee0599aa73b9f0d13") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "sift" "projectile") (:url . "https://github.com/nlamirault/sift.el"))])
- (projectile-speedbar . [(20190807 2010) ((projectile (0 11 0)) (sr-speedbar (0))) "projectile integration for speedbar" single ((:commit . "93320e467ee78772065e599a5dba94889a77db22") (:authors ("Anshul Verma" . "anshul.verma86@gmail.com")) (:maintainers ("Anshul Verma" . "anshul.verma86@gmail.com")) (:maintainer "Anshul Verma" . "anshul.verma86@gmail.com") (:keywords "project" "convenience" "speedbar" "projectile") (:url . "https://github.com/anshulverma/projectile-speedbar"))])
- (projectile-trailblazer . [(20170928 1624) ((emacs (24 4)) (projectile (0 12 0)) (inflections (1 1)) (inf-ruby (2 2 6)) (f (0 13 0)) (rake (0 3 2))) "Minor mode for Rails projects using trailblazer" single ((:commit . "79299498d74876f2ac3fe8075716b39a5bdd04cd") (:authors ("Michael Dahl" . "michael.dahl84@gmail.com")) (:maintainers ("Michael Dahl" . "michael.dahl84@gmail.com")) (:maintainer "Michael Dahl" . "michael.dahl84@gmail.com") (:keywords "rails" "projectile" "trailblazer" "languages") (:url . "https://github.com/micdahl/projectile-trailblazer"))])
- (projectile-variable . [(20170208 1718) ((emacs (24)) (cl-lib (0 5))) "Store project local variables." single ((:commit . "8d348ac70bdd6dc320c13a12941b32b38140e264") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "project" "convenience") (:url . "https://github.com/zonuexe/projectile-variable"))])
- (projection . [(20230506 1537) ((emacs (29)) (project (0 9 8)) (compat (29 1 4 1))) "Project type support for `project'" tar ((:commit . "a7e8edda22db5d8f24acfb35a864c83d1c2cb0d1") (:authors ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainers ("Mohsin Kaleem" . "mohkale@kisara.moe")) (:maintainer "Mohsin Kaleem" . "mohkale@kisara.moe") (:keywords "project" "convenience") (:url . "https://github.com/mohkale/projection"))])
- (projector . [(20211112 1514) ((alert (1 1)) (cl-lib (0 5))) "Lightweight library for managing project-aware shell and command buffers" single ((:commit . "1d0f2d307591ea50888d31dcae7e463e2ada1316") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "https://github.com/waymondo/projector.el"))])
- (projekt . [(20150324 848) ((emacs (24))) "some kind of staging for CVS" single ((:commit . "a65e554e5d8b0def08c5d06f3fe34fec40bebd83") (:authors ("Engelke Eschner" . "tekai@gmx.li")) (:maintainers ("Engelke Eschner" . "tekai@gmx.li")) (:maintainer "Engelke Eschner" . "tekai@gmx.li"))])
- (projmake-mode . [(20161031 1715) ((dash (20150611 922)) (indicators (20130217 1405))) "Project oriented automatic builder and error highlighter, flymake for projects" tar ((:commit . "a897701f7e8f8cc11459ed44eb0e454db2a460c1"))])
- (promise . [(20210307 727) ((emacs (25 1))) "Promises/A+" tar ((:commit . "cec51feb5f957e8febe6325335cf57dc2db6be30") (:authors ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainers ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainer "chuntaro" . "chuntaro@sakura-games.jp") (:keywords "async" "promise" "convenience") (:url . "https://github.com/chuntaro/emacs-promise"))])
- (prompt-text . [(20190408 310) nil "Configure your minibuffer prompt" single ((:commit . "b842bf13c53d0a2bd2bc7a00d37cc713d69fa9e9") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainers ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:keywords "utility" "minibuffer") (:url . "https://github.com/10sr/prompt-text-el"))])
- (prompts . [(20160916 1041) ((dash (2 13 0))) "utilities for working with text prompts." single ((:commit . "1cd5e732ff2a86b47836eb7252e5b59cd4b6ab26") (:authors ("Ben Moon" . "guiltydolphin@gmail.com")) (:maintainers ("Ben Moon" . "guiltydolphin@gmail.com")) (:maintainer "Ben Moon" . "guiltydolphin@gmail.com") (:keywords "input" "minibuffer") (:url . "https://github.com/guiltydolphin/prompts.el"))])
- (pronto . [(20200218 1633) ((emacs (24))) "Compilation mode for pronto stylechecks" single ((:commit . "c0cd13d8219879610b7fe284b182a9db4d3d40b3") (:authors ("Julian Rubisch" . "julian@julianrubisch.at")) (:maintainers ("Julian Rubisch" . "julian@julianrubisch.at")) (:maintainer "Julian Rubisch" . "julian@julianrubisch.at") (:keywords "processes" "tools") (:url . "https://github.com/julianrubisch/pronto.el"))])
- (proof-general . [(20230414 931) ((emacs (25 2))) "A generic Emacs interface for proof assistants" tar ((:commit . "dac9b5d32ec1404d35e3dd83070591806f8977b0") (:maintainers (nil . "proof-general-maintainers@groupes.renater.fr")) (:maintainer nil . "proof-general-maintainers@groupes.renater.fr") (:url . "https://proofgeneral.github.io/"))])
- (prop-menu . [(20150728 1118) ((emacs (24 3)) (cl-lib (0 5))) "Create and display a context menu based on text and overlay properties" single ((:commit . "50b102c1c0935fd3e0c465feed7f27d66b21cdf3") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk") (:keywords "convenience") (:url . "https://github.com/david-christiansen/prop-menu-el"))])
- (propfont-mixed . [(20150113 2211) ((emacs (24)) (cl-lib (0 5))) "Use proportional fonts with space-based indentation." single ((:commit . "0b461ef4754a469610dba71874a34b6da42176bf") (:authors ("Kirill Ignatiev <github.com/ikirill>")) (:maintainers ("Kirill Ignatiev <github.com/ikirill>")) (:maintainer "Kirill Ignatiev <github.com/ikirill>") (:keywords "faces") (:url . "https://github.com/ikirill/propfont-mixed"))])
- (proportional . [(20221205 1417) ((emacs (25 1))) "use a proportional font everywhere" single ((:commit . "6b675694292a5dbebb52b6196e8ccee6e3a73042") (:authors ("Johannes Goslar")) (:maintainers ("Johannes Goslar")) (:maintainer "Johannes Goslar") (:keywords "faces") (:url . "https://github.com/ksjogo/proportional"))])
- (prosjekt . [(20151127 1416) ((dash (2 8 0))) "a software project tool for emacs" tar ((:commit . "a864a8be5842223043702395f311e3350c28e9db") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/prosjekt"))])
- (protobuf-mode . [(20230506 330) nil "major mode for editing protocol buffers." single ((:commit . "0d3b0c61f4f44c3d8770b89edffe481aaf56f4f1") (:authors ("Alexandre Vassalotti" . "alexandre@peadrop.com")) (:maintainers ("Alexandre Vassalotti" . "alexandre@peadrop.com")) (:maintainer "Alexandre Vassalotti" . "alexandre@peadrop.com") (:keywords "google" "protobuf" "languages"))])
- (protobuf-ts-mode . [(20230410 855) ((emacs (29))) "Tree sitter support for Protocol Buffers (proto3 only)" single ((:commit . "cde61510b711d90bf2978ca4cbd3f36fce8b4c3e") (:authors ("ookami" . "mail@ookami.one")) (:maintainers ("ookami" . "mail@ookami.one")) (:maintainer "ookami" . "mail@ookami.one") (:keywords "protobuf" "languages" "tree-sitter") (:url . "https://git.ookami.one/cgit/protobuf-ts-mode"))])
- (protocols . [(20170802 1132) ((cl-lib (0 5))) "Protocol database access functions." single ((:commit . "d0f7c4acb05465f1a0d4be54363bbd2802647e77") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "convenience" "net" "protocols") (:url . "https://github.com/davep/protocols.el"))])
- (proxy-mode . [(20230303 706) ((emacs (25))) "A minor mode to toggle proxy." single ((:commit . "eca6f0b8a17fcf9eb961ed0426f57a5b7ca4e1f6") (:keywords "comm" "proxy") (:url . "https://repo.or.cz/proxy-mode.git"))])
- (psalm . [(20211002 1552) ((emacs (24 3)) (php-mode (1 22 3))) "Interface to Psalm" single ((:commit . "06434b938485e2540fc97ce6cb017a8a001c1f13") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "tools" "php") (:url . "https://github.com/emacs-php/psalm.el"))])
- (psc-ide . [(20210219 2247) ((emacs (25)) (dash (2 18 0)) (company (0 8 7)) (s (1 10 0)) (flycheck (0 24)) (let-alist (1 0 4)) (seq (1 11))) "Minor mode for PureScript's IDE server." tar ((:commit . "ce97d719458ea099b40c02f05b6609601c727e66") (:authors ("Erik Post" . "erik@shinsetsu.nl") ("Dmitry Bushenko" . "d.bushenko@gmail.com") ("Christoph Hegemann" . "christoph.hegemann1337@gmail.com") ("Brian Sermons")) (:maintainers ("Erik Post" . "erik@shinsetsu.nl")) (:maintainer "Erik Post" . "erik@shinsetsu.nl") (:keywords "languages") (:url . "https://github.com/purescript-emacs/psc-ide-emacs"))])
- (psci . [(20230313 1333) ((emacs (24 4)) (purescript-mode (13 10)) (dash (2 9 0))) "Major mode for purescript repl psci" tar ((:commit . "9bb6a325325480be704130c9c69731631d2cf3a6") (:authors ("Antoine R. Dumont <eniotna.t AT gmail.com>")) (:maintainers ("Antoine R. Dumont <eniotna.t AT gmail.com>")) (:maintainer "Antoine R. Dumont <eniotna.t AT gmail.com>") (:keywords "languages" "purescript" "psci" "repl") (:url . "https://github.com/purescript-emacs/emacs-psci"))])
- (psession . [(20230105 503) ((emacs (24)) (cl-lib (0 5)) (async (1 9 3))) "Persistent save of elisp objects." single ((:commit . "ca5bed69f803aab71851c46b0118b66f58455b8a") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/psession"))])
- (psysh . [(20220607 1642) ((emacs (24 3)) (s (1 9 0)) (php-runtime (0 2))) "PsySH, PHP interactive shell (REPL)" single ((:commit . "796b26a5cd75df9d2ecb206718b310ff21787063") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "processes" "php") (:url . "https://github.com/emacs-php/psysh.el"))])
- (pt . [(20161226 1959) nil "A front-end for pt, The Platinum Searcher." single ((:commit . "6d99b2aaded3ece3db19a20f4b8f1d4abe382622") (:authors ("Bailey Ling")) (:maintainers ("Bailey Ling")) (:maintainer "Bailey Ling") (:keywords "pt" "ack" "ag" "grep" "search") (:url . "https://github.com/bling/pt.el"))])
- (ptemplate . [(20210324 1446) ((emacs (25 1)) (yasnippet (0 13 0))) "Project templates" single ((:commit . "b81cc7be8865745c3a60177a244d2a69729ab21b") (:authors ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainer "Nikita Bloshchanevich" . "nikblos@outlook.com") (:url . "https://github.com/nbfalcon/ptemplate"))])
- (ptemplate-templates . [(20210324 1443) ((emacs (25 1)) (ptemplate (2 0 0))) "Official templates" tar ((:commit . "3788387973dde3101f9a3f2064572be033c59ad6") (:authors ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainer "Nikita Bloshchanevich" . "nikblos@outlook.com") (:url . "https://github.com/nbfalcon/ptemplate-templates"))])
- (ptree . [(20221106 1649) ((emacs (25 1))) "Property tree data structure" single ((:commit . "23cb9093f99b9869606f8d54fa5c45ea35fcc789") (:authors ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainers ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainer "Alpha Catharsis" . "alpha.catharsis@gmail.com") (:keywords "lisp") (:url . "https://github.com/alpha-catharsis/ptree"))])
- (pubmed . [(20221023 930) ((emacs (26 1)) (esxml (0 3 4)) (s (1 12 0)) (unidecode (0 2))) "Interface to PubMed" tar ((:commit . "b2fbc124cabf0d373845763adf882e9d89ff5daa") (:authors ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainers ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainer "Folkert van der Beek" . "folkertvanderbeek@gmail.com") (:keywords "pubmed" "hypermedia") (:url . "https://gitlab.com/fvdbeek/emacs-pubmed"))])
- (pueue . [(20230219 1558) ((emacs (28 1)) (with-editor (3 0 4))) "Interface for pueue" single ((:commit . "386e43d46cbf68470d040b422061ac2ba1629749") (:authors ("Valeriy Litkovskyy" . "vlr.ltkvsk@protonmail.com")) (:maintainers ("Valeriy Litkovskyy" . "vlr.ltkvsk@protonmail.com")) (:maintainer "Valeriy Litkovskyy" . "vlr.ltkvsk@protonmail.com") (:keywords "processes") (:url . "https://github.com/xFA25E/pueue"))])
- (pug-mode . [(20211114 1645) ((emacs (24 4)) (cl-lib (0 5))) "Major mode for jade/pug template files" single ((:commit . "73f8c2f95eba695f701df20c8436f49abadebdc1") (:authors ("Nathan Weizenbaum")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io") (:keywords "markup" "language" "jade" "pug") (:url . "https://github.com/hlissner/emacs-pug-mode"))])
- (pulseaudio-control . [(20230316 1819) nil "Use `pactl' to manage PulseAudio volumes." single ((:commit . "e917e84661b0e2496b295f1bbfba6ad32a656527") (:authors ("Alexis <flexibeast@gmail.com>, Ellington Santos <ellingtonsantos@gmail.com>, Sergey Trofimov <sarg@sarg.org.ru>, conses" . "contact@conses.eu")) (:maintainers ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:keywords "multimedia" "hardware" "sound" "pulseaudio") (:url . "https://git.sr.ht/~flexibeast/pulseaudio-control"))])
- (punctuality-logger . [(20141120 2031) nil "Punctuality logger for Emacs" single ((:commit . "d76c5d5589a4f8a94cc5537686d9a3b46ea7cc59") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainers ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com") (:keywords "reminder" "calendar") (:url . "https://gitlab.com/elzair/punctuality-logger"))])
- (pungi . [(20150222 1246) ((jedi (0 2 0 -3 2)) (pyvenv (1 5))) "Integrates jedi with virtualenv and buildout python environments" single ((:commit . "41c9f8b7795e083bfd63ba0d06c789c250998723") (:authors ("Matthew Russell" . "matthew.russell@horizon5.org")) (:maintainers ("Matthew Russell" . "matthew.russell@horizon5.org")) (:maintainer "Matthew Russell" . "matthew.russell@horizon5.org") (:keywords "convenience"))])
- (puni . [(20230214 1156) ((emacs (26 1))) "Parentheses Universalistic" single ((:commit . "a39a4ecac7279bed1a150a895bbc80baa7272888") (:authors ("Hao Wang" . "amaikinono@gmail.com")) (:maintainers ("Hao Wang" . "amaikinono@gmail.com")) (:maintainer "Hao Wang" . "amaikinono@gmail.com") (:keywords "convenience" "lisp" "tools") (:url . "https://github.com/AmaiKinono/puni"))])
- (punpun-themes . [(20221121 1018) ((emacs (24 1))) "A set of bleak themes" tar ((:commit . "6a7e04de1ad9f7ba9074b7206bffc9241c33349c") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:url . "https://depp.brause.cc/punpun-themes"))])
- (puppet-mode . [(20210305 645) ((emacs (24 1)) (pkg-info (0 4))) "Major mode for Puppet manifests" single ((:commit . "ab25cf379236f4e1bd4bc9c1d77a93c95800e9bf") (:authors ("Vox Pupuli" . "voxpupuli@groups.io") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com") ("Russ Allbery" . "rra@stanford.edu")) (:maintainers ("Vox Pupuli" . "voxpupuli@groups.io")) (:maintainer "Vox Pupuli" . "voxpupuli@groups.io") (:keywords "languages") (:url . "https://github.com/voxpupuli/puppet-mode"))])
- (purescript-mode . [(20230309 1301) ((emacs (25 1))) "A PureScript editing mode" tar ((:commit . "eacc61aaafe6055b5f278c9843558f220f18b153") (:authors ("1992 Simon Marlow") ("1997-1998 Graeme E Moss" . "gem@cs.york.ac.uk") ("Tommy Thorn" . "thorn@irisa.fr") ("2001-2002 Reuben Thomas (>=v1.4)") ("2003 Dave Love" . "fx@gnu.org") ("2014 Tim Dysinger" . "tim@dysinger.net")) (:maintainer "1992 Simon Marlow") (:keywords "faces" "files" "purescript") (:url . "https://github.com/purescript-emacs/purescript-mode"))])
- (purp-theme . [(20210912 1940) nil "A dark color theme with few colors" tar ((:commit . "8d3510e1ed995b8323cd5205626ddde6386a76ca") (:authors ("Vincent Foley" . "vfoley@gmail.com")) (:maintainers ("Vincent Foley" . "vfoley@gmail.com")) (:maintainer "Vincent Foley" . "vfoley@gmail.com") (:keywords "faces") (:url . "https://github.com/gnuvince/purp"))])
- (purple-haze-theme . [(20141015 229) ((emacs (24 0))) "an overtly purple color theme for Emacs24." single ((:commit . "3e245cbef7cd09e6b3ee124963e372a04e9a6485") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-purple-haze-theme"))])
- (purty-mode . [(20131004 2259) nil "Safely pretty-print greek letters, mathematical symbols, or anything else." single ((:commit . "ad48149bfd0c765796a728b22d679e03fc124328") (:authors ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainers ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainer "James Atwood" . "jatwood@cs.umass.edu"))])
- (pushbullet . [(20140809 1232) ((grapnel (0 5 2)) (json (1 2))) "Emacs client for the PushBullet Android app" single ((:commit . "73c59a0f1dc04875b3e5a2c8afbc26c32128e445") (:authors ("Abhishek L" . "abhishek.lekshmanan@gmail.com")) (:maintainers ("Abhishek L" . "abhishek.lekshmanan@gmail.com")) (:maintainer "Abhishek L" . "abhishek.lekshmanan@gmail.com") (:keywords "convenience") (:url . "http://www.github.com/theanalyst/revolver"))])
- (pushover . [(20170818 2103) ((cl-lib (0 5))) "Pushover API Access" single ((:commit . "bbe3ac8df3c532a72da4552615af960b8a577588") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "notifications") (:url . "http://github.com/swflint/pushover.el"))])
- (px . [(20170317 2330) nil "preview inline latex in any mode" single ((:commit . "0c52f7933eab3ca1642ab0df151db9950430c9e2") (:authors ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainers ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainer "Aurélien Aptel" . "aurelien.aptel@gmail.com") (:url . "http://github.com/aaptel/preview-latex"))])
- (py-autopep8 . [(20230115 633) ((emacs (26 1))) "Use autopep8 to beautify a Python buffer" single ((:commit . "d0486c22c0a92ad7911714026021fe4ad276b7c9") (:authors ("Friedrich Paetzk" . "f.paetzke@gmail.com")) (:maintainers ("Friedrich Paetzk" . "f.paetzke@gmail.com")) (:maintainer "Friedrich Paetzk" . "f.paetzke@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-py-autopep8"))])
- (py-gnitset . [(20170821 1732) nil "Run your Python tests any way you'd like" single ((:commit . "1e993cc29cbc31e06fe1e335dec198e21972fa55") (:authors ("Brandon W Maister" . "quodlibetor@gmail.com")) (:maintainers ("Brandon W Maister" . "quodlibetor@gmail.com")) (:maintainer "Brandon W Maister" . "quodlibetor@gmail.com") (:url . "https://www.github.com/quodlibetor/py-gnitset"))])
- (py-import-check . [(20130802 1111) nil "Finds the unused python imports using importchecker" single ((:commit . "38ad91e67047bd37231497d11d409d064d510f98") (:authors ("Sibi" . "sibi@psibi.in")) (:maintainers ("Sibi" . "sibi@psibi.in")) (:maintainer "Sibi" . "sibi@psibi.in") (:keywords "python" "import" "check") (:url . "https://github.com/psibi/emacs-py-import-check"))])
- (py-isort . [(20160925 1018) nil "Use isort to sort the imports in a Python buffer" single ((:commit . "e67306f459c47c53a65604e4eea88a3914596560") (:authors ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainers ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainer "Friedrich Paetzke" . "paetzke@fastmail.fm") (:url . "http://paetzke.me/project/py-isort.el"))])
- (py-smart-operator . [(20170531 1209) ((s (1 9 0))) "smart-operator for python-mode" single ((:commit . "0c8a66faca4b35158d0b5885472cb75286039167") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainers ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com") (:keywords "python" "convenience" "smart-operator"))])
- (py-snippets . [(20220918 952) ((yasnippet (0 8 0))) "Collection of advanced Python yasnippet snippets" tar ((:commit . "1a85c41ea33f33e5b4a5a12a64fd9c4591fc0bcb") (:authors ("Gustaf Waldemarson" . "gustaf.waldemarson@gmail.com")) (:maintainers ("Gustaf Waldemarson" . "gustaf.waldemarson@gmail.com")) (:maintainer "Gustaf Waldemarson" . "gustaf.waldemarson@gmail.com") (:keywords "convenience" "snippets") (:url . "https://github.com/Xaldew/py-snippets"))])
- (py-test . [(20151117 622) ((dash (2 9 0)) (f (0 17)) (emacs (24 4))) "A test runner for Python code." single ((:commit . "3b2a0bdaacb54df6f2bee8317423e5c0d159d5cf") (:authors ("Bogdan Paul Popa" . "popa.bogdanp@gmail.com")) (:maintainers ("Bogdan Paul Popa" . "popa.bogdanp@gmail.com")) (:maintainer "Bogdan Paul Popa" . "popa.bogdanp@gmail.com") (:keywords "python" "testing" "py.test") (:url . "https://github.com/Bogdanp/py-test.el"))])
- (py-yapf . [(20160925 1122) nil "Use yapf to beautify a Python buffer" single ((:commit . "a878304202ad827a1f3de3dce1badd9ca8731146") (:authors ("Friedrich Paetzke" . "f.paetzke@gmail.com")) (:maintainers ("Friedrich Paetzke" . "f.paetzke@gmail.com")) (:maintainer "Friedrich Paetzke" . "f.paetzke@gmail.com") (:url . "https://github.com/paetzke/py-yapf.el"))])
- (pycarddavel . [(20150831 1216) ((helm (1 7 0)) (emacs (24 0))) "Integrate pycarddav" single ((:commit . "6ead921066fa0156f20155b7126e5875ce11c328") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "helm" "pyccarddav" "carddav" "message" "mu4e" "contacts"))])
- (pyconf . [(20230308 2000) ((pyvenv (1 21)) (emacs (28 1)) (transient (0 3 7)) (pyenv-mode (0 1 0))) "Set up python execution configurations like dap-mode ones" single ((:commit . "e145e895e265474cb1ef5764d37eb47c6566e97f") (:authors ("Andrew Favia <drewlinguistics01 at gmail dot com>")) (:maintainers ("Andrew Favia <drewlinguistics01 at gmail dot com>")) (:maintainer "Andrew Favia <drewlinguistics01 at gmail dot com>") (:keywords "processes" "python") (:url . "https://github.com/andcarnivorous/pyconf"))])
- (pycoverage . [(20200513 2047) ((emacs (24 3))) "Support for coverage stats on Python 2.X and 3" tar ((:commit . "3c69ed312121368f1b24cc04d54a29ce4ed4f743") (:authors ("matt harrison")) (:maintainers ("matt harrison")) (:maintainer "matt harrison") (:keywords "project" "convenience") (:url . "https://github.com/mattharrison/pycoverage.el"))])
- (pydoc . [(20221222 1426) nil "functional, syntax highlighted pydoc navigation" single ((:commit . "c9d8b5249c1b3814da062ed9976e4137d6e8d869") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainers ("Brian J. Lopes" . "statmobile@gmail.com")) (:maintainer "Brian J. Lopes" . "statmobile@gmail.com") (:keywords "pydoc" "python") (:url . "https://github.com/statmobile/pydoc"))])
- (pyenv-mode . [(20200518 1521) ((pythonic (0 1 0))) "Integrate pyenv with python-mode" single ((:commit . "d191037fe62ed8d4fee5888845da3e2c386d8e89") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pyenv-mode"))])
- (pygen . [(20161121 506) ((elpy (1 12 0)) (python-mode (6 2 2)) (dash (2 13 0))) "Python code generation using Elpy and Python-mode." single ((:commit . "3a5d1d1a0640865b15be05cd1eeb33bb4793b622") (:authors ("Jack Crawley <http://www.github.com/jackcrawley>")) (:maintainers ("Jack Crawley <http://www.github.com/jackcrawley>")) (:maintainer "Jack Crawley <http://www.github.com/jackcrawley>") (:keywords "python" "code generation") (:url . "https://github.com/JackCrawley/pygen/"))])
- (pygn-mode . [(20230401 1858) ((emacs (26 1)) (tree-sitter (0 15 2)) (tree-sitter-langs (0 10 7)) (uci-mode (0 5 4)) (nav-flash (1 0 0)) (ivy (0 10 0))) "Major-mode for chess PGN files, powered by Python" tar ((:commit . "8d290f69ce64a5e6f310ffa42c44fd781c20bcfd") (:authors ("Dodge Coates and Roland Walker")) (:maintainers ("Dodge Coates and Roland Walker")) (:maintainer "Dodge Coates and Roland Walker") (:keywords "data" "games" "chess") (:url . "https://github.com/dwcoates/pygn-mode"))])
- (pyim . [(20230412 134) ((emacs (27 1)) (async (1 6)) (xr (1 13))) "A Chinese input method support quanpin, shuangpin, wubi, cangjie and rime." tar ((:commit . "4c953701a368e1433bf91fd19766d76c9b496825") (:authors ("Ye Wenbin" . "wenbinye@163.com") ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience" "chinese" "pinyin" "input-method") (:url . "https://github.com/tumashu/pyim"))])
- (pyim-basedict . [(20220614 1108) nil "The default pinyin dict of pyim" tar ((:commit . "d61af27686f7a39e6c138b7261a686e7ea7a0ef7") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:url . "https://github.com/tumashu/pyim-basedict"))])
- (pyim-cangjiedict . [(20210617 934) ((pyim (3 7))) "Some cangjie dicts for pyim" tar ((:commit . "d17e3d32a6480939b350a91a915ebe8e6efad819") (:authors ("Yuanchen Xie" . "yuanchen.gm@gmail.com")) (:maintainers ("Yuanchen Xie" . "yuanchen.gm@gmail.com")) (:maintainer "Yuanchen Xie" . "yuanchen.gm@gmail.com") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:url . "https://github.com/p1uxtar/pyim-cangjiedict"))])
- (pyim-smzmdict . [(20210505 1445) ((pyim (3 7))) "Sanma(triple) Zhengma dict for pyim" tar ((:commit . "fcddbde17a04d174c7353548056524687f7be8d2") (:authors ("Yue Shi (Zhizhi)")) (:maintainers ("Yuanchen Xie")) (:maintainer "Yuanchen Xie") (:keywords "convenience" "i18n" "pyim" "chinese" "zhengma") (:url . "https://github.com/p1uxtar/pyim-smzmdict"))])
- (pyim-wbdict . [(20220604 1340) ((pyim (3 7))) "Some wubi dicts for pyim" tar ((:commit . "e3b128cfcf218e4a0ca04189b0bd46909761227e") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:url . "https://github.com/tumashu/pyim-wbdict"))])
- (pyimport . [(20220908 1610) ((dash (2 8 0)) (s (1 9 0)) (shut-up (0 3 2))) "Manage Python imports!" single ((:commit . "c006a5fd0e5c9e297aa2ad71b2f02f463286b5e3") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))])
- (pyimpsort . [(20160130 453) ((emacs (24 3))) "Sort python imports." tar ((:commit . "d5c61d70896b642646dfd3c809c06174ae086c1a") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/pyimpsort.el"))])
- (pyinspect . [(20230216 1121) ((emacs (27 1))) "Python object inspector" tar ((:commit . "4437dc589d0c1eb0ca80bf0d005ee27d15cf69fc") (:authors ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainers ("Maor Kadosh" . "git@avocadosh.xyz")) (:maintainer "Maor Kadosh" . "git@avocadosh.xyz") (:keywords "tools") (:url . "https://github.com/it-is-wednesday/pyinspect.el"))])
- (pylint . [(20221117 1303) nil "minor mode for running `pylint'" tar ((:commit . "bddb91610b6b6aa1e7fee96b6be3be69dfe3695e") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com") (:keywords "languages" "python"))])
- (pynt . [(20180710 726) ((emacs (24 4)) (ein (0 13 1)) (epc (0 1 1)) (deferred (0 5 1))) "Generate and scroll EIN buffers from python code" single ((:commit . "963c43cfdb5deea7daedc269aafa79192d853154") (:authors ("Edward Banner" . "edward.banner@gmail.com")) (:maintainers ("Edward Banner" . "edward.banner@gmail.com")) (:maintainer "Edward Banner" . "edward.banner@gmail.com") (:keywords "convenience") (:url . "https://github.com/ebanner/pynt"))])
- (pyramid . [(20230114 1049) ((emacs (25 2)) (pythonic (0 1 1)) (tablist (0 70))) "Minor mode for working with pyramid projects" tar ((:commit . "c8a8b36725d85664e74f59600fe5d18d06ea907d") (:authors ("Daniel Kraus" . "daniel@kraus.my")) (:maintainers ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my") (:keywords "python" "pyramid" "pylons" "convenience" "tools" "processes") (:url . "https://github.com/dakra/pyramid.el"))])
- (pytest . [(20200330 41) ((s (1 9 0))) "Easy Python test running in Emacs" single ((:commit . "6934047242db79b1c53e9fe3e0734cc9719ed1c4") (:keywords "pytest" "python" "testing") (:url . "https://github.com/ionrock/pytest-el"))])
- (pytest-pdb-break . [(20200804 848) ((emacs (25))) "A pytest PDB launcher" tar ((:commit . "05d227493b7b96f3556cba22f215cb85f9282020") (:authors ("Jane Soko" . "poppyschmo@protonmail.com")) (:maintainers ("Jane Soko" . "poppyschmo@protonmail.com")) (:maintainer "Jane Soko" . "poppyschmo@protonmail.com") (:keywords "languages" "tools") (:url . "https://github.com/poppyschmo/pytest-pdb-break"))])
- (python-black . [(20230313 1037) ((emacs (25)) (dash (2 16 0)) (reformatter (0 3))) "Reformat Python using python-black" single ((:commit . "0714b0007c0b620f88ed9cc91035caea43f3d75f") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "languages") (:url . "https://github.com/wbolster/emacs-python-black"))])
- (python-cell . [(20230426 1602) ((emacs (25 1))) "Support for MATLAB-like cells in python mode" single ((:commit . "0428186af2fac1252ec62e9be4f7bf3664682e83") (:authors ("Thomas Hisch" . "t.hisch@gmail.com")) (:maintainers ("Thomas Hisch" . "t.hisch@gmail.com")) (:maintainer "Thomas Hisch" . "t.hisch@gmail.com") (:keywords "extensions" "python" "matlab" "cell") (:url . "https://github.com/thisch/python-cell.el"))])
- (python-coverage . [(20211224 1420) ((emacs (25 1)) (dash (2 18 0)) (s (1 12 0)) (xml+ (1))) "Show Python coverage via overlays or Flycheck" single ((:commit . "a341615af03dbe3ce0ac9b63cf43dc01c1ae5ebe") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "languages" "processes" "tools") (:url . "https://github.com/wbolster/emacs-python-coverage"))])
- (python-django . [(20150822 404) nil "A Jazzy package for managing Django projects" single ((:commit . "fc54ad74f0309670359b939f64d0f1fff68aeac4") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainers ("FSF")) (:maintainer "FSF") (:keywords "languages") (:url . "https://github.com/fgallina/python-django.el"))])
- (python-docstring . [(20230326 1929) nil "Smart Python docstring formatting" tar ((:commit . "40f0ca57831a71a9e6437088149784f37704ef6c"))])
- (python-environment . [(20150310 853) ((deferred (0 3 1))) "virtualenv API for Emacs Lisp" tar ((:commit . "401006584e32864a10c69d29f14414828909362e") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>") (:keywords "applications" "tools"))])
- (python-info . [(20151228 1852) nil "Python info manual for Emacs" tar ((:commit . "306f15441b54b25757cdfd3b327b84024ea21ed7"))])
- (python-insert-docstring . [(20211127 1232) ((emacs (25 1))) "Python Google docstring inserter" single ((:commit . "cd6419b74c99c06d5c48c1b289572acce1fd193b") (:authors ("Marco Vocialta" . "macurovc@tutanota.com")) (:maintainers ("Marco Vocialta" . "macurovc@tutanota.com")) (:maintainer "Marco Vocialta" . "macurovc@tutanota.com") (:url . "https://github.com/macurovc/insert-docstring"))])
- (python-isort . [(20210603 2153) ((emacs (26)) (reformatter (0 6))) "Reformat python-mode buffer with isort" single ((:commit . "339814df22b87eebca02137e581f65d6283fce97") (:authors ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainers ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com") (:keywords "languages") (:url . "https://github.com/wyuenho/emacs-python-isort"))])
- (python-mls . [(20230427 2142) ((emacs (27 1)) (compat (29 1))) "Multi-line shell for (i)Python" single ((:commit . "d90035d50a5079aa981aeac3f67f3867ae19cd92") (:authors ("J.D. Smith")) (:maintainers ("J.D. Smith")) (:maintainer "J.D. Smith") (:keywords "languages" "processes") (:url . "https://github.com/jdtsmith/python-mls"))])
- (python-mode . [(20230209 731) nil "Python major mode" tar ((:commit . "d00e9ffe3a7c450362d453e00b4adcb826bce464") (:authors ("2015-2023 https://gitlab.com/groups/python-mode-devs") ("2003-2014 https://launchpad.net/python-mode") ("1995-2002 Barry A. Warsaw") ("1992-1994 Tim Peters")) (:maintainer nil . "python-mode@python.org") (:keywords "python" "languages" "oop") (:url . "https://gitlab.com/groups/python-mode-devs"))])
- (python-pytest . [(20221021 1937) ((emacs (24 4)) (dash (2 18 0)) (transient (0 3 7)) (projectile (0 14 0)) (s (1 12 0))) "helpers to run pytest" single ((:commit . "33c921adaa6c9c8f7cceba2342114c6b406e0d7c") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "pytest" "test" "python" "languages" "processes" "tools") (:url . "https://github.com/wbolster/emacs-python-pytest"))])
- (python-switch-quotes . [(20161228 809) ((emacs (24 3))) "cycle between ' and \" quotes in python strings" single ((:commit . "93f1e9b40e061a6cea480139e8b1362b6404abd0") (:authors ("Vladimir Lagunov" . "lagunov.vladimir@gmail.com")) (:maintainers ("Vladimir Lagunov" . "lagunov.vladimir@gmail.com")) (:maintainer "Vladimir Lagunov" . "lagunov.vladimir@gmail.com") (:keywords "python" "tools" "convenience") (:url . "https://github.com/werehuman/python-switch-quotes"))])
- (python-test . [(20181018 29) ((emacs (25 1))) "Python testing integration" single ((:commit . "f899975b133539e19ba822e4b0bfd1a28572967e") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience" "tools" "processes") (:url . "https://github.com/emacs-pe/python-test.el"))])
- (python-x . [(20230117 1408) ((python (0 24)) (folding (0)) (cl-lib (0 5))) "python.el extras for interactive evaluation" tar ((:commit . "744924e7468200f3e8ac7ad60a496ad9d080308e") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org"))])
- (pythonic . [(20220723 1741) ((emacs (25 1)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package." single ((:commit . "c18a5bd8cb2ba59014b6b29b5bf1903bd2476a07") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainers ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pythonic"))])
- (pyvenv . [(20211014 707) nil "Python virtual environment interface" single ((:commit . "31ea715f2164dd611e7fc77b26390ef3ca93509b") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainers ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainer "Jorgen Schaefer" . "contact@jorgenschaefer.de") (:keywords "python" "virtualenv" "tools") (:url . "http://github.com/jorgenschaefer/pyvenv"))])
- (pyvenv-auto . [(20230106 415) ((emacs (26 3)) (pyvenv (1 21))) "Automatically switch Python venvs" single ((:commit . "b4365e60e3ba747a5fec8ca909f64fe8c73d8db2") (:url . "https://github.com/nryotaro/pyvenv-auto"))])
- (q-mode . [(20230412 53) ((emacs (24))) "A q editing mode" single ((:commit . "d89b359d5a26234336487ab4e42eb5878ad3c5a5") (:keywords "faces" "files" "q") (:url . "https://github.com/psaris/q-mode"))])
- (qml-mode . [(20161016 31) nil "Major mode for editing QT Declarative (QML) code." single ((:commit . "6c5f33ba88ae010bf201a80ee8095e20a724558c") (:authors ("Yen-Chin Lee" . "coldnew.tw@gmail.com")) (:maintainers ("Yen-Chin Lee" . "coldnew.tw@gmail.com")) (:maintainer "Yen-Chin Lee" . "coldnew.tw@gmail.com") (:keywords "qml" "qt" "qt declarative") (:url . "https://github.com/coldnew/qml-mode"))])
- (qrencode . [(20230324 2335) ((emacs (25 1))) "QRCode encoder" single ((:commit . "d7896e9594d45d7b2622d4617ff9cb7037378167") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net")) (:maintainers ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net")) (:maintainer "Rüdiger Sonderfeld" . "ruediger@c-plusplus.net") (:keywords "qrcode" "comm") (:url . "https://github.com/ruediger/qrencode-el"))])
- (qt-pro-mode . [(20170604 1841) ((emacs (24))) "Qt Pro/Pri major mode" single ((:commit . "1e0052fcfb89c15cb47714c1546d4e8ec6e01ae6") (:authors ("Todd Neal" . "tolchz@gmail.com")) (:maintainers ("Todd Neal" . "tolchz@gmail.com")) (:maintainer "Todd Neal" . "tolchz@gmail.com") (:keywords "extensions"))])
- (qtcreator-theme . [(20201215 1523) ((emacs (24 3))) "A color theme that mimics Qt Creator IDE" single ((:commit . "515532b05063898459157d2ba5c10ec0d5a4b1bd") (:authors ("Lesley Lai" . "lesley@lesleylai.info")) (:maintainers ("Lesley Lai" . "lesley@lesleylai.info")) (:maintainer "Lesley Lai" . "lesley@lesleylai.info") (:keywords "theme" "light" "faces") (:url . "https://github.com/LesleyLai/emacs-qtcreator-theme"))])
- (quack . [(20181106 1301) nil "enhanced support for editing and running Scheme code" single ((:commit . "2146805ce2b5a9b155d73929986f11e713787e26"))])
- (quarto-mode . [(20221005 1632) ((emacs (25 1)) (polymode (0 2 2)) (poly-markdown (0 2 2)) (markdown-mode (2 3)) (request (0 3 2))) "A (poly)mode for https://quarto.org" single ((:commit . "b7dcba7050b2e1e65acdd5656d08a186bca2c922") (:authors ("Carlos Scheidegger")) (:maintainers ("Carlos Scheidegger")) (:maintainer "Carlos Scheidegger") (:keywords "languages" "multi-modes") (:url . "https://github.com/quarto-dev/quarto-emacs"))])
- (quasi-monochrome-theme . [(20200415 705) nil "Quasi Monochrome theme" tar ((:commit . "b38d71860fdea945e10e8a766ac9dfa1410ade67") (:authors ("Lorenzo Bolla" . "lbolla@gmail.com")) (:maintainer "Lorenzo Bolla" . "lbolla@gmail.com") (:keywords "color-theme" "monochrome" "high contrast") (:url . "https://github.com/lbolla/emacs-quasi-monochrome"))])
- (quelpa . [(20221220 1136) ((emacs (25 1))) "Emacs Lisp packages built directly from source" tar ((:commit . "79651cd0de497a8db18d79e7598eb01a4eec4f09") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "tools" "package" "management" "build" "source" "elpa") (:url . "https://github.com/quelpa/quelpa"))])
- (quelpa-leaf . [(20221231 1618) ((emacs (25 1)) (quelpa (1 0)) (leaf (4 1 0))) "Quelpa handler for leaf" single ((:commit . "296ef97c29d7540316441715b92f6d15430f3579") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "package" "managment" "elpa" "leaf") (:url . "https://github.com/quelpa/quelpa-leaf"))])
- (quelpa-use-package . [(20201022 746) ((emacs (25 1)) (quelpa (1 0)) (use-package (2))) "quelpa handler for use-package" single ((:commit . "a97461008391d045aa2a506fc126280a12a060e4") (:authors ("steckerhalter")) (:maintainers ("steckerhalter")) (:maintainer "steckerhalter") (:keywords "package" "management" "elpa" "use-package") (:url . "https://github.com/quelpa/quelpa-use-package"))])
- (quick-buffer-switch . [(20221220 1142) nil "Quick switch to file or dir buffers." single ((:commit . "280f67f1a5e02533573b45d585c222c937f11f81") (:authors ("Sebastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>")) (:maintainers ("Sebastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>")) (:maintainer "Sebastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>") (:keywords "emacs" "configuration"))])
- (quick-peek . [(20200130 2059) ((emacs (24 3))) "Inline quick-peek windows" single ((:commit . "03a276086795faad46a142454fc3e28cab058b70") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "tools" "help" "doc" "convenience"))])
- (quick-preview . [(20191017 1920) nil "quick preview using GNOME sushi, gloobus or quick look" single ((:commit . "a312ab5539b9a362da9d305e4da814e17c5721c9") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "files" "hypermedia") (:url . "https://github.com/myuhe/quick-preview.el"))])
- (quick-shell-keybind . [(20171023 613) ((emacs (24))) "Interactively bind a key to shell commands" single ((:commit . "5f4541a5a5554d108bf16b5fd1713e962161ca1b") (:authors ("eyeinsky" . "eyeinsky9@gmail.com")) (:maintainers ("eyeinsky" . "eyeinsky9@gmail.com")) (:maintainer "eyeinsky" . "eyeinsky9@gmail.com") (:keywords "maint" "convenience" "processes") (:url . "https://github.com/eyeinsky/quick-shell-keybind"))])
- (quickref . [(20170817 1232) ((dash (1 0 3)) (s (1 0 0))) "Display relevant notes-to-self in the echo area" single ((:commit . "f368c8b8219bb90498c5ab84e26f00eedaa234cf") (:authors ("Kyle Hargraves")) (:maintainers ("Kyle Hargraves")) (:maintainer "Kyle Hargraves") (:url . "https://github.com/pd/quickref.el"))])
- (quickrun . [(20221215 828) ((emacs (26 1)) (ht (2 0))) "Run commands quickly" single ((:commit . "7a89313c07a21eae9cd69a1a98e2a134d559e04f") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Jen-Chieh Shen" . "jcs090218@gmail.com")) (:maintainer "Jen-Chieh Shen" . "jcs090218@gmail.com") (:keywords "tools") (:url . "https://github.com/emacsorphanage/quickrun"))])
- (quiet . [(20200211 721) nil "Disconnect from the online world for a while" single ((:commit . "f8a4ef0be086f97e7fb631df7060f29cc4025b98") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "convenience" "quiet" "distraction" "network" "detachment" "offline") (:url . "https://github.com/zzkt/quiet"))])
- (quilt . [(20190828 506) ((emacs (26 0))) "Minor mode for working with files in quilt" single ((:commit . "b56a1f1acc46cdf8655710e4c8f24f5f31f22c6a") (:authors ("Matt Mackall" . "mpm@selenic.com")) (:maintainers ("Jan Stranik" . "jan@stranik.org")) (:maintainer "Jan Stranik" . "jan@stranik.org") (:keywords "extensions") (:url . "https://github.com/jstranik/emacs-quilt"))])
- (quiz . [(20190525 1206) ((cl-lib (0 5)) (emacs (25))) "Multiple choice quiz game" single ((:commit . "570bf53926d89282cdb9653bd5aa8fe968f92bbd") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "games" "trivia" "quiz") (:url . "https://github.com/davep/quiz.el"))])
- (r-autoyas . [(20140101 1510) ((ess (0)) (yasnippet (0 8 0))) "Provides automatically created yasnippets for R function argument lists." tar ((:commit . "d321a7da0ef2e94668d53e0807277da7b70ea678") (:authors ("Sven Hartenstein & Matthew Fidler")) (:maintainers ("Matthew Fidler")) (:maintainer "Matthew Fidler") (:keywords "r" "yasnippet") (:url . "https://github.com/mlf176f2/r-autoyas.el"))])
- (racer . [(20210307 243) ((emacs (25 1)) (rust-mode (0 2 0)) (dash (2 13 0)) (s (1 10 0)) (f (0 18 2)) (pos-tip (0 4 6))) "code completion, goto-definition and docs browsing for Rust via racer" single ((:commit . "1e63e98626737ea9b662d4a9b1ffd6842b1c648c") (:authors ("Phil Dawes")) (:maintainers ("Phil Dawes")) (:maintainer "Phil Dawes") (:keywords "abbrev" "convenience" "matching" "rust" "tools") (:url . "https://github.com/racer-rust/emacs-racer"))])
- (racket-mode . [(20230506 1437) ((emacs (25 1))) "Racket editing, REPL, and more" tar ((:commit . "c2fe266c18bb6e55a13c7ba795b0a5f7372b6c13") (:authors ("Greg Hendershott" . "racket-mode-author@greghendershott.com")) (:maintainers ("Greg Hendershott")) (:maintainer "Greg Hendershott") (:url . "https://www.racket-mode.com/"))])
- (rails-i18n . [(20220126 1643) ((emacs (27 2)) (yaml (0 1 0)) (dash (2 19 1))) "Seach and insert i18n on ruby code" single ((:commit . "8e87e4e48e31902b8259ded28a208c2e7efea6e9") (:authors ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainers ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainer "Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com") (:keywords "tools" "languages") (:url . "https://github.com/otavioschwanck/rails-i18n.el"))])
- (rails-log-mode . [(20140408 425) nil "Major mode for viewing Rails log files" single ((:commit . "ff440003ad7d47cb0ac3300f2a632f4cfd36a446") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "rails" "log"))])
- (rails-routes . [(20220126 1631) ((emacs (27 2)) (inflections (1 1))) "Search for and insert rails routes" single ((:commit . "eab995a9297ca5bd9bd4f4c2737f2fecfc36def0") (:authors ("Otávio Schwanck" . "otavioschwanck@gmail.com")) (:maintainers ("Otávio Schwanck" . "otavioschwanck@gmail.com")) (:maintainer "Otávio Schwanck" . "otavioschwanck@gmail.com") (:keywords "tools" "languages") (:url . "https://github.com/otavioschwanck/rails-routes"))])
- (railscasts-reloaded-theme . [(20201130 903) nil "Railscasts Reloaded color theme" single ((:commit . "1c3850568e60a555d59cbb57bf2b6aa06e99d454") (:authors ("George Thomas" . "iamgeorgethomas@gmail.com")) (:maintainers ("George Thomas" . "iamgeorgethomas@gmail.com")) (:maintainer "George Thomas" . "iamgeorgethomas@gmail.com") (:url . "https://github.com/thegeorgeous/railscasts-reloaded-theme"))])
- (railscasts-theme . [(20150219 1525) nil "Railscasts color theme for GNU Emacs." single ((:commit . "1340c3f6c2717761cab95617cf8dcbd962b1095b") (:authors ("Oleg Shaldybin")) (:maintainers ("Oleg Shaldybin")) (:maintainer "Oleg Shaldybin") (:keywords "railscasts" "color" "theme") (:url . "https://github.com/mikenichols/railscasts-theme"))])
- (rainbow-blocks . [(20210715 1518) nil "Block syntax highlighting for lisp code" single ((:commit . "83c4d6e77a1e25d3d2d124a4e90d5b084f3e15a5") (:authors ("istib")) (:maintainers ("istib")) (:maintainer "istib") (:url . "https://github.com/istib/rainbow-blocks"))])
- (rainbow-delimiters . [(20210515 1254) nil "Highlight brackets according to their depth" single ((:commit . "7919681b0d883502155d5b26e791fec15da6aeca") (:authors ("Jeremy Rayman" . "opensource@jeremyrayman.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:keywords "faces" "convenience" "lisp" "tools") (:url . "https://github.com/Fanael/rainbow-delimiters"))])
- (rainbow-fart . [(20220427 2227) ((emacs (25 1)) (flycheck (32 -4))) "Checks the keywords of code to play suitable sounds" tar ((:commit . "6504424707b6e9101dfbd9fdd4b7b963b9a4f323") (:keywords "tools") (:url . "https://repo.or.cz/emacs-rainbow-fart.git"))])
- (rainbow-identifiers . [(20141102 1526) ((emacs (24))) "Highlight identifiers according to their names" single ((:commit . "19fbfded1baa98d12335f26f6d7b20e5ae44ce2e") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/rainbow-identifiers"))])
- (rake . [(20220211 827) ((f (0 13 0)) (dash (1 5 0)) (cl-lib (0 5))) "Run rake commands" single ((:commit . "452ea0caca33376487103c64177c295ed2960cca") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainers ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:keywords "rake" "ruby") (:url . "https://github.com/asok/rake.el"))])
- (raku-mode . [(20210927 1227) ((emacs (24 4))) "Major mode for editing Raku code" tar ((:commit . "4ee9045eeb90f7831d7c0ee2e4adfcd957f712be") (:authors ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainers ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com") (:keywords "languages") (:url . "https://github.com/hinrik/perl6-mode"))])
- (rally-mode . [(20161114 354) ((popwin (1 0 0))) "a mode to interact with the Rally Software web site." single ((:commit . "0f5e09a6abe2de7613f174b4f54863df93343134") (:authors ("Sean LeBlanc" . "seanleblanc@gmail.com")) (:maintainers ("Sean LeBlanc" . "seanleblanc@gmail.com")) (:maintainer "Sean LeBlanc" . "seanleblanc@gmail.com") (:keywords "rally" "ca" "agile") (:url . "https://pragcraft.wordpress.com/"))])
- (rand-theme . [(20151219 2335) ((cl-lib (0 5))) "Random Emacs theme at start-up!" single ((:commit . "65a00e5c5150f857aa96803b68f50bc8da0215b7") (:authors ("Daniel Gopar")) (:maintainers ("Daniel Gopar")) (:maintainer "Daniel Gopar") (:url . "https://github.com/gopar/rand-theme"))])
- (random-splash-image . [(20151003 130) nil "Randomly sets splash image to *GNU Emacs* buffer on startup." single ((:commit . "907e2db5ceff781ac7f4dbdd65fe71736c36aa22") (:authors ("kakakaya <kakakaya AT gmail.com>")) (:maintainers ("kakakaya <kakakaya AT gmail.com>")) (:maintainer "kakakaya <kakakaya AT gmail.com>") (:keywords "games") (:url . "https://github.com/kakakaya/random-splash-image"))])
- (ranger . [(20210125 330) ((emacs (24 4))) "Make dired more like ranger" single ((:commit . "2498519cb21dcd5791d240607a72a204d1761668") (:authors ("Rich Alesi <https://github.com/ralesi>")) (:maintainers ("Rich Alesi <https://github.com/ralesi>")) (:maintainer "Rich Alesi <https://github.com/ralesi>") (:keywords "files" "convenience" "dired") (:url . "https://github.com/ralesi/ranger"))])
- (rase . [(20120928 2045) nil "Run At Sun Event daemon" single ((:commit . "59b5f7e8102570b65040e8d55781c7ea28de7338") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainers ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:keywords "solar" "sunrise" "sunset" "midday" "midnight") (:url . "https://github.com/m00natic/rase/"))])
- (rats . [(20170818 1013) ((s (1 10 0)) (go-mode (1 3 1)) (cl-lib (0 5))) "Rapid testing suite for Go" single ((:commit . "a6d55aebcc54f669c6c6ffedf84364c4097903cc") (:authors ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainers ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainer "Antoine Kalmbach" . "ane@iki.fi") (:keywords "go"))])
- (rbenv . [(20141120 749) nil "Emacs integration for rbenv" single ((:commit . "2ea1a5bdc1266caef1dd77700f2c8f42429b03f1") (:authors ("Yves Senn" . "yves.senn@gmail.com")) (:maintainers ("Yves Senn" . "yves.senn@gmail.com")) (:maintainer "Yves Senn" . "yves.senn@gmail.com") (:keywords "ruby" "rbenv") (:url . "https://github.com/senny/rbenv.el"))])
- (rbs-mode . [(20210430 135) ((emacs (24 5))) "A major mode for RBS" single ((:commit . "ad36bb138cec7396f029821d0cf755a8bc663260") (:authors ("Masafumi Koba")) (:maintainers ("Masafumi Koba")) (:maintainer "Masafumi Koba") (:keywords "languages") (:url . "https://github.com/ybiquitous/rbs-mode"))])
- (rbt . [(20170202 2302) ((popup (0 5 3)) (magit (20160128 1201))) "Integrate reviewboard with emacs." single ((:commit . "32bfba9062a014e375451cf4203c29535b5efc1e") (:authors ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainers ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainer "Joe Heyming" . "joeheyming@gmail.com") (:keywords "reviewboard" "rbt"))])
- (rbtagger . [(20211026 2318) ((emacs (25 1))) "Ruby tagging tools" tar ((:commit . "351c4006ddacc2f66e6ff8c79d981613e9a8bd22") (:authors ("Thiago Araújo" . "thiagoaraujos@gmail.com")) (:maintainers ("Thiago Araújo" . "thiagoaraujos@gmail.com")) (:maintainer "Thiago Araújo" . "thiagoaraujos@gmail.com") (:keywords "languages" "tools") (:url . "https://www.github.com/thiagoa/rbtagger"))])
- (rc-mode . [(20160913 1918) nil "Major mode for the Plan9 rc shell" single ((:commit . "fe2e0570bf9c19a292e16b18fd4b0a256df5d93f") (:authors ("Jordan Brown")) (:maintainers ("Jordan Brown")) (:maintainer "Jordan Brown") (:keywords "rc" "plan9" "shell") (:url . "https://github.com/mrhmouse/rc-mode.el"))])
- (rcirc-alert . [(20141127 1047) nil "Configurable alert messages on top of RCIRC" tar ((:commit . "0adf8ff9c47023fec578f678424be62b0f49057f") (:maintainers ("Cayetano Santos")) (:maintainer "Cayetano Santos") (:keywords "lisp" "rcirc" "irc" "alert" "awesome"))])
- (rcirc-alertify . [(20140407 119) ((alert (20140406 1353))) "Cross platform notifications for rcirc" single ((:commit . "ea5cafc55893f375eccbe013d12dbaa94bf6e259") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainers ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org") (:keywords "comm" "convenience"))])
- (rcirc-groups . [(20170731 2101) nil "an emacs buffer in rcirc-groups major mode" single ((:commit . "b68ece9d219b909244d4e3c0d8bf6a746d6fead7") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:keywords "comm" "convenience") (:url . "http://tapoueh.org/emacs/rcirc-groups.html"))])
- (rcirc-notify . [(20150219 2204) nil "libnotify popups" single ((:commit . "841a7b5a6cdb0c11a812df924d2c6a7d364fd455") (:authors ("Will Farrington, Alex Schroeder <alex@gnu.org>, Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp" "rcirc" "irc" "notify" "growl"))])
- (rcirc-styles . [(20210414 1712) ((cl-lib (0 5))) "support mIRC-style color and attribute codes" single ((:commit . "dd06ec5fa455131788bbc885fcfaaec16b08f13b"))])
- (rdf-prefix . [(20230321 1949) nil "Prefix lookup for RDF" single ((:commit . "70d1ef453fc55f0bfbb4bd3127112332e5b0f623") (:authors ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainers ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainer "Simen Heggestøyl" . "simenheg@runbox.com") (:keywords "convenience" "abbrev") (:url . "https://github.com/simenheg/rdf-prefix"))])
- (rdxmk . [(20170630 134) nil "A small set of tools for redox developments" tar ((:commit . "e78749fb29738365ffa4d863ffabeb969ebb0bcf") (:authors ("Jacob Salzberg" . "jsalzbergedu@yahoo.com")) (:maintainers ("Jacob Salzberg" . "jsalzbergedu@yahoo.com")) (:maintainer "Jacob Salzberg" . "jsalzbergedu@yahoo.com") (:keywords "redox" "convenience" "tools") (:url . "https://github.com/jsalzbergedu/rdxmk"))])
- (react-snippets . [(20210430 1510) ((yasnippet (0 7 0))) "Yasnippets for React" tar ((:commit . "9d0a1bb90ac36c689cded48b661e81d4544fd719") (:authors ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com") (:keywords "snippets"))])
- (read-aloud . [(20160923 500) ((emacs (24 4))) "A simple interface to TTS engines" single ((:commit . "d5f80ab72054a957aed25224639c1779cae5f4d1") (:authors ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainers ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainer "Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com") (:keywords "multimedia") (:url . "https://github.com/gromnitsky/read-aloud.el"))])
- (read-only-cfg . [(20210717 205) ((emacs (24 3))) "Make files read-only based on user config" single ((:commit . "fa16d6018a5a29f26adf6007b6b76ea1b3c0bfce") (:authors ("pfchen" . "pfchen31@gmail.com")) (:maintainers ("pfchen" . "pfchen31@gmail.com")) (:maintainer "pfchen" . "pfchen31@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/pfchen/read-only-cfg"))])
- (readable-numbers . [(20220711 911) ((emacs (24 1))) "Visually separate long integers" single ((:commit . "a3ebdcdd91d32f044b68541a00e162396e4acb38") (:authors ("Oscar Najera <https://oscarnajera.com>")) (:maintainers ("Oscar Najera" . "hi@oscarnajera.com")) (:maintainer "Oscar Najera" . "hi@oscarnajera.com") (:url . "https://github.com/Titan-C/cardano.el"))])
- (readline-complete . [(20150708 1437) nil "offers completions in shell mode" single ((:commit . "30c020c37b2741160cc37e656e13c85d826a0ebf") (:authors ("Christopher Monsanto" . "chris@monsan.to")) (:maintainers ("Christopher Monsanto" . "chris@monsan.to")) (:maintainer "Christopher Monsanto" . "chris@monsan.to"))])
- (real-auto-save . [(20200505 1537) ((emacs (24 4))) "Automatically save your buffers/files at regular intervals" single ((:commit . "8e51241e5ba7b07b91d8188c14cf193017640292") (:authors ("Chaoji Li <lichaoji AT gmail DOT com>") ("Anand Reddy Pandikunta <anand21nanda AT gmail DOT com>")) (:maintainers ("Chaoji Li <lichaoji AT gmail DOT com>")) (:maintainer "Chaoji Li <lichaoji AT gmail DOT com>") (:url . "https://github.com/ChillarAnand/real-auto-save"))])
- (realgud . [(20220818 1750) ((load-relative (1 3 1)) (loc-changes (1 2)) (test-simple (1 3 0)) (emacs (25))) "A modular front-end for interacting with external debuggers" tar ((:commit . "aff03aeef1e40d2abb244240bab9787f4b3e6035") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:keywords "debugger" "gdb" "python" "perl" "go" "bash" "zsh" "bashdb" "zshdb" "remake" "trepan" "perldb" "pdb") (:url . "https://github.com/realgud/realgud/"))])
- (realgud-byebug . [(20190520 1140) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to the Ruby byebug debugger" tar ((:commit . "f8f20b92c6b13f75cc9797921c0e28d3def48b1c") (:authors ("Rocky Bernstein")) (:maintainers ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-byebug"))])
- (realgud-ipdb . [(20200722 1116) ((realgud (1 5 0)) (load-relative (1 3 1)) (emacs (25))) "Realgud front-end to ipdb" tar ((:commit . "f18f907aa4ddd3e59dc19ca296d4ee2dc5e436b0") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "https://github.com/realgud/realgud-ipdb"))])
- (realgud-jdb . [(20200722 1120) ((realgud (1 5 0)) (load-relative (1 3 1)) (emacs (25))) "Realgud front-end to Java's jdb debugger\"" tar ((:commit . "1c183b2f8aae0de60942ea01444b896bf182c66a") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "https://github.com/realgud/realgud-jdb"))])
- (realgud-lldb . [(20230201 948) ((load-relative (1 3 1)) (realgud (1 5 0)) (emacs (25))) "Realgud front-end to lldb" tar ((:commit . "74d442abc8469bb6277702f9c60fa479848009b2") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-lldb"))])
- (realgud-node-debug . [(20190525 1634) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (25))) "Realgud front-end to older \"node debug\"" tar ((:commit . "72e786359ce9dace1796b0d81a00e9340e9c90ad") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-node-debug"))])
- (realgud-node-inspect . [(20190523 1251) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to newer \"node inspect\"" tar ((:commit . "e0f18442d759b8ce4479c01e090975b62270257d") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-node-inspect"))])
- (realgud-old-debuggers . [(20190520 1150) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to older lesser-used debuggers" tar ((:commit . "0fad38283e885c452160232e01adf3f6ae51983b") (:authors ("Rocky Bernstein")) (:maintainers ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-old-debuggers"))])
- (realgud-pry . [(20201011 1815) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (25))) "Realgud front-end to the Ruby pry debugger" tar ((:commit . "264ca6811b0bef5de4decc54acfeacf0bce2f51f") (:authors ("Rocky Bernstein")) (:maintainers ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-pry"))])
- (realgud-rdb2 . [(20190520 1146) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end for interacting with Ruby debugger2" tar ((:commit . "3594aa74f7afda3c3251bb2af7fe0e8ec6d621ae") (:authors ("Rocky Bernstein")) (:maintainers ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-ruby-debugger2"))])
- (realgud-trepan-ni . [(20210513 2237) ((load-relative (1 2)) (realgud (1 5 0)) (emacs (25))) "Realgud front-end to trepan-ni" tar ((:commit . "0ec088ea343835e24ae73da09bea96bfb02a3130") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "https://github.com/realgud/realgud-trepan-ni"))])
- (reaper . [(20220527 2122) ((emacs (26 2))) "Interact with Harvest time tracking app" single ((:commit . "a8ec93656698c5c02a02279ee7d7976325cc74cd") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainers ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk") (:keywords "tools") (:url . "https://github.com/xendk/reaper"))])
- (reason-mode . [(20230405 517) ((emacs (24 3))) "A major mode for editing ReasonML" tar ((:commit . "d657ff75572a8ea7eda6fe22ada3a2ebf5bc6119") (:authors ("Mozilla")) (:maintainers ("Mozilla")) (:maintainer "Mozilla") (:keywords "languages" "ocaml") (:url . "https://github.com/reasonml-editor/reason-mode"))])
- (reazon . [(20211229 1733) ((emacs (26))) "miniKanren for Emacs" tar ((:commit . "da3c4a8acf236eddb73348056e08bea330e868c0") (:authors ("Nick Drozd" . "nicholasdrozd@gmail.com")) (:maintainers ("Nick Drozd" . "nicholasdrozd@gmail.com")) (:maintainer "Nick Drozd" . "nicholasdrozd@gmail.com") (:keywords "languages" "extensions" "lisp") (:url . "https://github.com/nickdrozd/reazon"))])
- (rebecca-theme . [(20180324 821) ((emacs (24))) "Rebecca Purple Theme" single ((:commit . "1fe3662d1b02caea96e9a780252b2c45f7a49b1d") (:authors ("vic" . "vborja@apache.org")) (:maintainers ("vic" . "vborja@apache.org")) (:maintainer "vic" . "vborja@apache.org") (:keywords "theme" "dark") (:url . "https://github.com/vic/rebecca-theme"))])
- (rebox2 . [(20121113 1300) nil "Handling of comment boxes in various styles." single ((:commit . "00634eca420cc48657b81e40e599ff8548083985") (:authors ("François Pinard") ("Le Wang")) (:maintainers ("Le Wang (lewang.emacs!!!gmayo.com remove exclamations, correct host, hint: google mail)")) (:maintainer "Le Wang (lewang.emacs!!!gmayo.com remove exclamations, correct host, hint: google mail)") (:url . "https://github.com/lewang/rebox2"))])
- (recentf-ext . [(20170926 35) nil "Recentf extensions" single ((:commit . "450de5f8544ed6414e88d4924d7daa5caa55b7fe") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "convenience" "files") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/recentf-ext.el"))])
- (recentf-remove-sudo-tramp-prefix . [(20220621 749) ((emacs (24 4))) "Normalise recentf history" single ((:commit . "95ff600058371dd08f615095a55850d2910021bb") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainers ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net") (:url . "https://github.com/ncaq/recentf-remove-sudo-tramp-prefix"))])
- (recently . [(20210930 207) ((cl-lib (0 5)) (emacs (24))) "Track recently opened files to visit them again" single ((:commit . "94b31f6bf1dab6af942948fec975e37424938a62") (:authors ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainers ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainer "10sr <8.slashes [at] gmail [dot] com>") (:keywords "utility" "files") (:url . "https://github.com/10sr/recently-el"))])
- (recompile-on-save . [(20151126 1446) ((dash (1 1 0)) (cl-lib (0 5))) "Trigger recompilation on file save." single ((:commit . "92e11446869d878803d4f3dec5d2101380c12bb2") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainers ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:keywords "convenience" "files" "processes" "tools") (:url . "https://github.com/maio/recompile-on-save.el"))])
- (recomplete . [(20230109 536) ((emacs (26 1))) "Immediately (re)complete actions" single ((:commit . "837965094aa55bbba9a62f9612e59c5440cbfc71") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-recomplete"))])
- (recover-buffers . [(20171009 437) nil "revisit all buffers from an auto-save file" tar ((:commit . "81a5cb53099955ebc2a411a44cba5a394ee3f2d1") (:authors ("era eriksson <http://www.iki.fi/era>")) (:maintainers ("era eriksson <http://www.iki.fi/era>")) (:maintainer "era eriksson <http://www.iki.fi/era>"))])
- (rect+ . [(20150621 44) nil "Extensions to rect.el" single ((:commit . "299b742faa0bc4448e0d5fe9cb98ab1eb93b8dcc") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "extensions" "data" "tools") (:url . "https://github.com/mhayashi1120/Emacs-rectplus"))])
- (rectangle-utils . [(20190411 1757) ((emacs (24)) (cl-lib (0 5))) "Some useful rectangle functions." single ((:commit . "46f7e73340fee40c1ab9a4e766a08ae3fce83ebe") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/rectangle-utils"))])
- (recur . [(20230121 1836) ((emacs (24 3))) "Tail call optimization" single ((:commit . "043b3267125cb9fa273d0f0afee0dda1fc60c507") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "lisp") (:url . "https://github.com/ROCKTAKEY/recur"))])
- (recursion-indicator . [(20230410 1753) ((emacs (27 1)) (compat (29 1 3 4))) "Recursion indicator" single ((:commit . "95eb885d8719e5e31a42fc99a6a76812fd38df8d") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "convenience") (:url . "https://github.com/minad/recursion-indicator"))])
- (recursive-narrow . [(20190306 1521) nil "narrow-to-region that operates recursively" single ((:commit . "5e3e2067d5a148d7e64e64e0355d3b6860e4c259") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:url . "http://github.com/nflath/recursive-narrow"))])
- (redacted . [(20220108 1037) ((emacs (25 1))) "Obscure text in buffer" single ((:commit . "b3f44ccf51d9d5274f7837fc825db0a378055744") (:authors ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainers ("Benjamin Kästner" . "benjamin.kaestner@gmail.com")) (:maintainer "Benjamin Kästner" . "benjamin.kaestner@gmail.com") (:keywords "games") (:url . "https://github.com/bkaestner/redacted.el"))])
- (reddigg . [(20220829 1449) ((emacs (26 3)) (promise (1 1)) (ht (2 3)) (request (0 3 0)) (org (9 2))) "A reader for redditt" single ((:commit . "7b5445d3101bd8c9fa4a456ad37a19bba840a2cb") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainers ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com") (:url . "https://github.com/thanhvg/emacs-reddigg"))])
- (redis . [(20220429 1758) ((emacs (24)) (cl-lib (0 5))) "Redis integration" single ((:commit . "a6ad30d6a43b7be083c13f8725b45571d623001a") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/redis.el"))])
- (redpen-paragraph . [(20160625 1050) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "RedPen interface." single ((:commit . "770ffb34b04bfa0ea8484fa1506e96c530168e13") (:authors ("karronoli")) (:maintainers ("karronoli")) (:maintainer "karronoli") (:keywords "document" "proofreading" "help") (:url . "https://github.com/karronoli/redpen-paragraph.el"))])
- (redprl . [(20180418 1434) ((emacs (24 3))) "Major mode for editing RedPRL proofs and interacting with RedPRL" single ((:commit . "4abdbdeda4604ff30ce19c0df3f43e34faf60bd7") (:authors ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainers ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainer "Jonathan Sterling" . "jon@jonmsterling.com") (:keywords "languages"))])
- (redshank . [(20180730 407) ((paredit (21))) "Common Lisp Editing Extensions" tar ((:commit . "d059c5841044aa163664f8bf87c1d981bf0a04fe") (:authors ("Michael Weber" . "michaelw@foldr.org")) (:maintainers ("Michael Weber" . "michaelw@foldr.org")) (:maintainer "Michael Weber" . "michaelw@foldr.org") (:keywords "languages" "lisp"))])
- (redtick . [(20180424 2136) ((emacs (24 4))) "Smallest pomodoro timer (1 char)" tar ((:commit . "0faa6b7b479fae39f5d4632f0cbbef0f2917780e") (:authors ("F. Febles")) (:maintainers ("F. Febles")) (:maintainer "F. Febles") (:keywords "calendar") (:url . "http://github.com/ferfebles/redtick"))])
- (redtt . [(20181121 21) ((emacs (25 3))) "Major mode for editing redtt proofs" single ((:commit . "c95d1a0787fb92eb011df690b4bdc1029a611c0b") (:authors ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainers ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainer "Jonathan Sterling" . "jon@jonmsterling.com") (:keywords "languages") (:url . "http://github.com/RedPRL/redtt"))])
- (refine . [(20200507 731) ((emacs (24 3)) (s (1 11 0)) (dash (2 12 0)) (list-utils (0 4 4)) (loop (1 2))) "interactive value editing" single ((:commit . "d72fa50910b86217a35bb1b7e56adea206052021") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "convenience"))])
- (reformatter . [(20220627 825) ((emacs (24 3))) "Define commands which run reformatters on the current buffer" single ((:commit . "84cff54b0873fcca6fc0314d7584284e86708e8d") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "tools") (:url . "https://github.com/purcell/emacs-reformatter"))])
- (regex-dsl . [(20220125 506) nil "lisp syntax for regexps" single ((:commit . "8802555ecdab8b50bb64181798497c10cdb5034b") (:authors ("Aliaksey Kandratsenka" . "alk@tut.by")) (:maintainers ("Aliaksey Kandratsenka" . "alk@tut.by")) (:maintainer "Aliaksey Kandratsenka" . "alk@tut.by"))])
- (regex-tool . [(20170104 1918) nil "A regular expression evaluation tool for programmers" single ((:commit . "0b4a0111143c88ef94bec56624cb2e00c1a054e6") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainers ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:keywords "regex" "languages" "programming" "development") (:url . "http://www.newartisans.com/"))])
- (region-bindings-mode . [(20140407 2214) nil "Enable custom bindings when mark is active." single ((:commit . "3fa5dbdbd7c000bebff6d9d14a4be326ec24b6fc") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainers ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainer "Fabián E. Gallina" . "fabian@anue.biz") (:keywords "convenience") (:url . "https://github.com/fgallina/region-bindings-mode"))])
- (region-convert . [(20210519 1655) ((emacs (24 3))) "Convert string in region by Lisp function" single ((:commit . "cb3ab0417d7b74e5edd34bf23a70737fc7bf1d3a") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "region" "convenience") (:url . "https://github.com/zonuexe/right-click-context"))])
- (region-occurrences-highlighter . [(20230408 1404) ((emacs (24))) "Mark occurrences of current region (selection)." single ((:commit . "3fbac20154035d75238facbc3b881ab3b47ab711") (:authors ("Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainers ("Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainer "Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com") (:keywords "convenience") (:url . "https://github.com/alvarogonzalezsotillo/region-occurrences-highlighter"))])
- (region-state . [(20181205 1746) nil "Show the number of chars/lines or rows/columns in the region" single ((:commit . "f9e3926036a7c261b20bad9bf46f68ead8c15024") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "convenience") (:url . "https://github.com/xuchunyang/region-state.el"))])
- (register-channel . [(20210120 1618) nil "Jump around fast using registers" single ((:commit . "ed7f563e92170b758dc878fcb5df88d46d5d44cc") (:authors ("Yang Zhao" . "YangZhao11@users.noreply.github.com")) (:maintainers ("Yang Zhao" . "YangZhao11@users.noreply.github.com")) (:maintainer "Yang Zhao" . "YangZhao11@users.noreply.github.com") (:keywords "convenience"))])
- (register-quicknav . [(20200524 2006) ((emacs (25 3))) "Quickly jump to next/previous register" single ((:commit . "c15ea92b0946c28b3f14986d42b15b0b534aa6a2") (:authors ("tastytea" . "tastytea@tastytea.de")) (:maintainers ("tastytea" . "tastytea@tastytea.de")) (:maintainer "tastytea" . "tastytea@tastytea.de") (:keywords "convenience") (:url . "https://schlomp.space/tastytea/register-quicknav"))])
- (rego-mode . [(20201102 1420) ((emacs (24 4)) (reformatter (0 3))) "A major mode for rego language" single ((:commit . "be110e6cef5d34eef0529a8739c68e619cf15310") (:authors ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainers ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainer "Sibi Prabakaran" . "sibi@psibi.in") (:keywords "languages") (:url . "https://github.com/psibi/rego-mode"))])
- (related . [(20190327 1024) ((cl-lib (0 5))) "Switch back and forth between similarly named buffers." single ((:commit . "546c7e811b290470288b617f2c27106bd83ccd33") (:authors ("Julien Montmartin")) (:maintainers ("Julien Montmartin")) (:maintainer "Julien Montmartin") (:keywords "file" "buffer" "switch" "selection" "matching" "convenience") (:url . "https://github.com/julien-montmartin/related"))])
- (related-files . [(20230324 934) ((emacs (28 2))) "Easily find files related to the current one" tar ((:commit . "f3f841f625a51b964b88cfe08378311124cc5240") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:keywords "tools") (:url . "https://www.gnu.org/software/emacs/"))])
- (remark-mode . [(20221123 2127) ((emacs (25 1)) (markdown-mode (2 0))) "Major mode for the remark slideshow tool" tar ((:commit . "5a2a702d2af8fd007ae02237d5824356d0c1acc6") (:authors ("@torgeir")) (:maintainers ("@torgeir")) (:maintainer "@torgeir") (:keywords "remark" "slideshow" "markdown" "hot reload"))])
- (remember-last-theme . [(20170619 2133) ((emacs (24 4))) "Remember the last used theme between sessions." single ((:commit . "57e8e2a475ea89316dbb5c4d2ea047f56a2cbcdf") (:authors ("Anler Hernández Peral" . "inbox+emacs@anler.me")) (:maintainers ("Anler Hernández Peral" . "inbox+emacs@anler.me")) (:maintainer "Anler Hernández Peral" . "inbox+emacs@anler.me") (:keywords "convenience" "faces") (:url . "https://github.com/anler/remember-last-theme"))])
- (remind-bindings . [(20200820 1723) ((emacs (25 1)) (omni-quotes (0 5)) (popwin (1 0)) (map (2 0))) "Reminders for your init bindings" single ((:commit . "c9a327bfd3c68a0c41b5b64df491bdee4c73ca39") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://github.com/mtekman/remind-bindings.el"))])
- (renpy . [(20200607 135) nil "silly walks for Renpy" single ((:commit . "f2f95a72a8c842f229f80999132e8ea8ee73f6fc") (:authors ("PyTom" . "pytom@bishoujo.us")) (:maintainers ("Dave Love" . "fx@gnu.org")) (:maintainer "Dave Love" . "fx@gnu.org") (:keywords "languages") (:url . "https://github.com/billywade/renpy-mode"))])
- (repeat-help . [(20230118 24) ((emacs (28 1))) "Display keybindings for repeat-mode" single ((:commit . "41dea6fba2edd6ac748d0ca7a6da4058290feede") (:authors ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainers ("Karthik Chikmagalur" . "karthikchikmagalur@gmail.com")) (:maintainer "Karthik Chikmagalur" . "karthikchikmagalur@gmail.com") (:keywords "convenience") (:url . "https://github.com/karthink/repeat-help"))])
- (repeatable-motion . [(20170620 1848) ((emacs (24))) "Make repeatable versions of motions" tar ((:commit . "77aa35b27c8a76dc8deef87c9f71ef7e6fd289ee") (:authors ("William Hatch" . "willghatch@gmail.com")) (:maintainers ("William Hatch" . "willghatch@gmail.com")) (:maintainer "William Hatch" . "willghatch@gmail.com") (:keywords "motion" "repeatable") (:url . "https://github.com/willghatch/emacs-repeatable-motion"))])
- (repeater . [(20180418 1212) ((emacs (24 4))) "Repeat recent repeated commands" single ((:commit . "854b874542b186b2408cbc58ad0591fe8eb70b6c") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "convenience") (:url . "https://github.com/xuchunyang/repeater"))])
- (repl-toggle . [(20220920 752) ((fullframe (0 0 5))) "Switch to/from repl buffer for current major-mode" single ((:commit . "e05996b4a2b988f93ccce67f933cfad00064360f") (:authors ("Tom Regner" . "tom@goochesa.de")) (:maintainers ("Tom Regner" . "tom@goochesa.de")) (:maintainer "Tom Regner" . "tom@goochesa.de") (:keywords "repl" "buffers" "toggle"))])
- (replace-from-region . [(20170227 2316) nil "Replace commands whose query is from region" single ((:commit . "dc9318b9b2822da7b00ecc34d1dc965c8f96c9bb") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "replace" "search" "region") (:url . "http://www.emacswiki.org/emacs/download/replace-from-region.el"))])
- (replace-pairs . [(20160207 1251) ((emacs (24 4))) "Query-replace pairs of things" single ((:commit . "ef6f2719aab7714f6cb209fd3dd6d2e720681b3c") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:url . "https://github.com/davidshepherd7/replace-pairs"))])
- (replace-symbol . [(20160518 12) nil "Rename symbols in expressions or buffers" single ((:commit . "baf949e528aee1881f455f9c84e67718bedcb3f6") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainers ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net") (:url . "https://github.com/bmastenbrook/replace-symbol-el"))])
- (replace-with-inflections . [(20180831 635) ((cl-lib (0 5)) (string-inflection (1 0 10)) (inflections (1 1))) "Inflection aware `query-replace'" single ((:commit . "d9201e047856492f282da65459b28aba25998dbb") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "matching") (:url . "https://github.com/knu/replace-with-inflections.el"))])
- (repo . [(20220820 1554) ((emacs (24 3))) "Running repo from Emacs" single ((:commit . "e504aa831bfa38ddadce293face28b3c9d9ff9b7") (:authors ("Damien Merenne")) (:maintainers ("Damien Merenne")) (:maintainer "Damien Merenne") (:keywords "convenience") (:url . "https://github.com/canatella/repo-el"))])
- (req-package . [(20180605 1141) ((use-package (1 0)) (dash (2 7 0)) (log4e (0 2 0)) (ht (0))) "A use-package wrapper for package runtime dependencies management" tar ((:commit . "a77da72931914ac5f3f64dc61fe9dc3522b2817e") (:authors ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainers ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainer "Edward Knyshov" . "edvorg@gmail.com") (:keywords "dotemacs" "startup" "speed" "config" "package") (:url . "https://github.com/edvorg/req-package"))])
- (request . [(20230127 417) ((emacs (24 4))) "Compatible layer for URL request" single ((:commit . "01e338c335c07e4407239619e57361944a82cb8a") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>") (:url . "https://github.com/tkf/emacs-request"))])
- (request-deferred . [(20220614 1604) ((emacs (24 1)) (deferred (0 3 1)) (request (0 3))) "Wrap request.el by deferred" single ((:commit . "38ed1d2e64138eb16a9d8ed2987cff2e01b4a93b") (:authors ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainers ("Takafumi Arakaki <aka.tkf at gmail.com>")) (:maintainer "Takafumi Arakaki <aka.tkf at gmail.com>") (:url . "https://github.com/tkf/emacs-request"))])
- (requirejs . [(20151204 719) ((js2-mode (20150713)) (popup (0 5 3)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (20151011 1823))) "Requirejs import manipulation and source traversal." tar ((:commit . "4ea2a5fcbc76e4cbb6a7461e6f05f019b75865b1") (:authors ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainers ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainer "Joe Heyming" . "joeheyming@gmail.com") (:keywords "javascript" "requirejs") (:url . "https://github.com/joeheyming/requirejs-emacs"))])
- (requirejs-mode . [(20130215 2104) nil "Improved AMD module management" single ((:commit . "011849043098b6c4f27571625ae19071b53b8824") (:authors ("Marc-Olivier Ricard" . "marco.ricard@gmail.com")) (:maintainers ("Marc-Olivier Ricard" . "marco.ricard@gmail.com")) (:maintainer "Marc-Olivier Ricard" . "marco.ricard@gmail.com") (:keywords "javascript" "amd" "requirejs"))])
- (rescript-mode . [(20230321 1917) ((emacs (26 1))) "A major mode for editing ReScript" tar ((:commit . "a0a21d1c037c78ba4c05108a5e7afd5f75fe7bd7") (:authors ("Karl Landstrom" . "karl.landstrom@brgeight.se") ("Daniel Colascione" . "dancol@dancol.org") ("John Lee" . "jjl@pobox.com")) (:maintainers ("John Lee" . "jjl@pobox.com")) (:maintainer "John Lee" . "jjl@pobox.com") (:keywords "languages" "rescript") (:url . "https://github.com/jjlee/rescript-mode"))])
- (resize-window . [(20180918 538) ((emacs (24)) (cl-lib (0 5))) "easily resize windows" single ((:commit . "09dc5968f1c988c51fcd6ea5d68bb38b7541eb66") (:authors ("Dan Sutton " . "danielsutton01@gmail.com")) (:maintainers ("Dan Sutton " . "danielsutton01@gmail.com")) (:maintainer "Dan Sutton " . "danielsutton01@gmail.com") (:keywords "window" "resize") (:url . "https://github.com/dpsutton/resize-mode"))])
- (restart-emacs . [(20201127 1425) nil "Restart emacs from within emacs" single ((:commit . "d0fca7fba014b2d0d4dedcb9744a1e73cd9a6409") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainers ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com") (:keywords "convenience") (:url . "https://github.com/iqbalansari/restart-emacs"))])
- (restclient . [(20221203 1808) nil "An interactive HTTP client for Emacs" single ((:commit . "0ba72816f92f3d5906cdf76f418fd0a3ee72809b") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainers ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com") (:keywords "http"))])
- (restclient-helm . [(20170314 1554) ((restclient (0)) (helm (1 9 4))) "helm interface for restclient.el" single ((:commit . "af7420085dd67ed08d199a2402e8ff3e996c3029") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainers ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com") (:keywords "http" "helm"))])
- (restclient-jq . [(20220426 1734) ((restclient (20200502 831)) (jq-mode (0 4 1)) (emacs (24 4))) "Support for setting restclient vars from jq expressions" single ((:commit . "ae79e7dd283890072da69b8f48aeec1afd0d9442") (:authors ("Cameron Dorrat" . "cdorrat@gmail.com")) (:maintainers ("Cameron Dorrat" . "cdorrat@gmail.com")) (:maintainer "Cameron Dorrat" . "cdorrat@gmail.com") (:keywords "tools" "comm" "http" "jq") (:url . "https://github.com/pashky/restclient.el"))])
- (restclient-test . [(20210422 1815) ((emacs (26 1)) (restclient (0))) "Run tests with restclient.el" single ((:commit . "3c6661d087526510a04ea9de421c5869a1a1d061") (:authors ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainers ("Simen Heggestøyl" . "simenheg@runbox.com")) (:maintainer "Simen Heggestøyl" . "simenheg@runbox.com") (:url . "https://github.com/simenheg/restclient-test.el"))])
- (retrie . [(20200519 551) ((emacs (24 5))) "Refactoring Haskell code with retrie" single ((:commit . "976d6f01a3e214917f16b82e750d825cb9bfcc59") (:authors ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainers ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainer "Junyoung Clare Jang" . "jjc9310@gmail.com") (:keywords "files" "languages" "tools") (:url . "https://github.com/Ailrun/emacs-retrie"))])
- (revbufs . [(20200907 2223) nil "Reverts all out-of-date buffers safely" single ((:commit . "df3c02d3063951582c693ae12547993cec8256e2") (:authors ("Neil Van Dyke" . "neil@neilvandyke.org")) (:maintainers ("Sam Kleinman" . "sam@tychoish.com")) (:maintainer "Sam Kleinman" . "sam@tychoish.com") (:keywords "convenience" "buffers") (:url . "http://www.neilvandyke.org/revbufs/"))])
- (reveal-in-folder . [(20220704 659) ((emacs (24 3)) (f (0 20 0)) (s (1 12 0))) "Reveal current file in folder" single ((:commit . "7b2b02356b75e224a0414995af95d45786ee6f7d") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "folder" "finder" "reveal" "file" "explorer") (:url . "https://github.com/jcs-elpa/reveal-in-folder"))])
- (reveal-in-osx-finder . [(20150802 1657) nil "Reveal file associated with buffer in OS X Finder" single ((:commit . "5710e5936e47139a610ec9a06899f72e77ddc7bc") (:authors ("Kazuki YOSHIDA")) (:maintainers ("Kazuki YOSHIDA")) (:maintainer "Kazuki YOSHIDA") (:keywords "os x" "finder") (:url . "https://github.com/kaz-yos/reveal-in-osx-finder"))])
- (reverse-im . [(20230125 1846) ((emacs (25 1)) (seq (2 23))) "Reverse mapping for non-default system layouts" single ((:commit . "83c639756357c6b154842997b86e63c583ff8ff4") (:keywords "i18n") (:url . "https://github.com/a13/reverse-im.el"))])
- (reverse-theme . [(20141205 145) nil "Reverse theme for Emacs" single ((:commit . "3105c950bcb51c662c79b59ca102ef662c2b0be0") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-reverse-theme"))])
- (revert-buffer-all . [(20230109 536) ((emacs (24 3))) "Revert all open buffers" single ((:commit . "08e90d2d75f5d5900ca2a0d2670592bcf2b2d68f") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-buffer-revert-all"))])
- (review-mode . [(20220817 1010) nil "major mode for ReVIEW" single ((:commit . "2b24db8d85a1c40dbd67be195caa79c9df1e0f4b") (:authors ("Kenshi Muto" . "kmuto@kmuto.jp")) (:maintainers ("Kenshi Muto" . "kmuto@kmuto.jp")) (:maintainer "Kenshi Muto" . "kmuto@kmuto.jp") (:url . "https://github.com/kmuto/review-el"))])
- (rewriting-pcase . [(20230419 23) ((emacs (27 1))) "Support for rewriting sexps in source code" single ((:commit . "3a2efb79bfc68629bd20a8bc1770c8f6d24575fa") (:authors ("Onnie Winebarger")) (:maintainers ("Onnie Winebarger")) (:maintainer "Onnie Winebarger") (:keywords "extensions" "lisp") (:url . "https://github.com/owinebar/emacs-rewriting-pcase"))])
- (reykjavik-theme . [(20201219 947) ((emacs (24))) "Theme with a dark background." single ((:commit . "f6d8e83946633603234cd1dac725e17447f40bce") (:authors ("martin haesler")) (:maintainers ("martin haesler")) (:maintainer "martin haesler"))])
- (rfc-mode . [(20230307 937) ((emacs (25 1))) "RFC document browser and viewer" single ((:commit . "c938c8134e7434b623ebfd92ad22586205cb1c92") (:authors ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainers ("Nicolas Martyanoff" . "nicolas@n16f.net")) (:maintainer "Nicolas Martyanoff" . "nicolas@n16f.net") (:url . "https://github.com/galdor/rfc-mode"))])
- (rg . [(20230430 721) ((emacs (26 1)) (transient (0 3 0)) (wgrep (2 1 10))) "A search tool based on ripgrep" tar ((:commit . "e9dc4ed342e0212d08fb82554dfd3c57fdfa5b1a") (:authors ("David Landell" . "david.landell@sunnyhill.email") ("Roland McGrath" . "roland@gnu.org")) (:maintainers ("David Landell" . "david.landell@sunnyhill.email")) (:maintainer "David Landell" . "david.landell@sunnyhill.email") (:keywords "matching" "tools") (:url . "https://github.com/dajva/rg.el"))])
- (rgb . [(20220717 1940) ((emacs (24 3))) "RGB control via OpenRGB" single ((:commit . "4aab5a5be16b69b47ef5e67d02782df5e41dbd7b") (:url . "https://gitlab.com/cwpitts/rgb.el"))])
- (rhq . [(20220916 1632) ((emacs (24 4))) "Client for rhq" single ((:commit . "7d9c5dee2e493eb0c5d41afca1b6049de8c2a26d") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "tools" "extensions") (:url . "https://github.com/ROCKTAKEY/rhq"))])
- (rhtml-mode . [(20130422 1311) nil "major mode for editing RHTML files" tar ((:commit . "a6d71b38a3db867ccf82999c99805db1a3a33c33"))])
- (rib-mode . [(20170726 1448) ((emacs (24))) "RenderMan® Interface Bytestream (RIB) Major Mode" single ((:commit . "97470158784c3c212e22e2c20b8471ee65ba59af") (:authors ("Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com")) (:maintainers ("Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com")) (:maintainer "Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com") (:url . "https://github.com/blezek/rib-mode"))])
- (rich-minority . [(20190419 1136) ((cl-lib (0 5))) "Clean-up and Beautify the list of minor-modes." single ((:commit . "a03e693f6f9232cf75363aaaf1cb041f21675c19") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "mode-line" "faces") (:url . "https://github.com/Malabarba/rich-minority"))])
- (right-click-context . [(20210519 1713) ((emacs (24 3)) (popup (0 5)) (ordinal (0 0 1))) "Right Click Context menu" single ((:commit . "c3c9d36ffbc9fb2bc7c2c4b75291dbcdb1c5f531") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "mouse" "menu" "rightclick") (:url . "https://github.com/zonuexe/right-click-context"))])
- (rigid-tabs . [(20220416 2123) ((emacs (24 3))) "Fix TAB alignment in diff buffers" single ((:commit . "872a10c8751574c9610cba1800f541a6eda24997") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:keywords "diff" "whitespace" "version control" "magit") (:url . "https://gitlab.com/wavexx/rigid-tabs.el"))])
- (rii . [(20210317 1330) ((emacs (24 3))) "Reversible input interface for multiple input" single ((:commit . "9df603a5c63ae38ec776e27dc93d3618e2b0fabe") (:authors ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainers ("ROCKTAKEY" . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY" . "rocktakey@gmail.com") (:keywords "extensions" "tools") (:url . "https://github.com/ROCKTAKEY/rii"))])
- (rime . [(20230212 1425) ((emacs (26 3)) (dash (2 17 0)) (cl-lib (0 6 1)) (popup (0 5 3)) (posframe (0 1 0))) "Rime input method" tar ((:commit . "6438abacace7d94f05fabc45b82d619677fc5fca") (:authors ("Shi Tianshu")) (:maintainers ("Shi Tianshu")) (:maintainer "Shi Tianshu") (:keywords "convenience" "input-method") (:url . "https://www.github.com/DogLooksGood/emacs-rime"))])
- (rimero-theme . [(20180901 1348) ((emacs (24))) "Theme with a dark background suitable for UI and terminal usage." single ((:commit . "a2e706c2b34f749019979a133f08a2d94a1104b3") (:authors ("Yves Zoundi" . "yveszoundi@users.sf.net")) (:maintainers ("Yves Zoundi" . "yveszoundi@users.sf.net")) (:maintainer "Yves Zoundi" . "yveszoundi@users.sf.net") (:keywords "faces" "theme" "dark" "light colors") (:url . "https://github.com/yveszoundi/emacs-rimero-theme"))])
- (rinari . [(20150709 640) ((ruby-mode (1 0)) (inf-ruby (2 2 5)) (ruby-compilation (0 16)) (jump (2 0))) "Rinari Is Not A Rails IDE" single ((:commit . "be07b0f42aefa24c5d36c441d1f3f72e64fffaa4") (:authors ("Phil Hagelberg, Eric Schulte, Steve Purcell")) (:maintainers ("Phil Hagelberg, Eric Schulte, Steve Purcell")) (:maintainer "Phil Hagelberg, Eric Schulte, Steve Purcell") (:keywords "ruby" "rails" "project" "convenience" "web") (:url . "https://github.com/eschulte/rinari"))])
- (ring-mode . [(20221226 1159) ((emacs (24 3))) "A major mode for the Ring programming language" single ((:commit . "4e38dd5ca374d7d40fd1eeed1e83ef935efd387a") (:authors ("XXIV")) (:maintainers ("XXIV")) (:maintainer "XXIV") (:keywords "files" "ring") (:url . "https://github.com/thechampagne/ring-mode"))])
- (rings . [(20160531 2027) nil "Buffer rings. Like tabs, but better." single ((:commit . "3590b222eb80652cbd27866f066bd3571d86edfc") (:authors ("Konrad Scorciapino")) (:maintainers ("Konrad Scorciapino")) (:maintainer "Konrad Scorciapino") (:keywords "utilities" "productivity") (:url . "http://github.com/konr/rings"))])
- (ripgrep . [(20220520 1410) nil "Front-end for ripgrep, a command line search tool" single ((:commit . "872e250e8f93b8bb0a8a1de8bde17fd9bd116e31") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "ripgrep" "ack" "pt" "ag" "sift" "grep" "search") (:url . "https://github.com/nlamirault/ripgrep.el"))])
- (riscv-mode . [(20220916 206) ((emacs (24 4))) "Major-mode for RISC V assembly" single ((:commit . "8e335b9c93de93ed8dd063d702b0f5ad48eef6d7") (:authors ("Adam Niederer <https://github.com/AdamNiederer>")) (:maintainers ("Adam Niederer")) (:maintainer "Adam Niederer") (:keywords "riscv" "assembly") (:url . "https://github.com/AdamNiederer/riscv-mode"))])
- (rivet-mode . [(20201013 1905) ((emacs (24)) (web-mode (16))) "A minor mode for editing Apache Rivet files" single ((:commit . "6cf58cf04fee933113857af07414b3f27c24b505") (:authors ("Jade Michael Thornton")) (:maintainers ("Jade Michael Thornton")) (:maintainer "Jade Michael Thornton") (:url . "https://gitlab.com/thornjad/rivet-mode"))])
- (rjsx-mode . [(20200224 2149) ((emacs (24 4)) (js2-mode (20170504))) "Real support for JSX" single ((:commit . "0061587a06cdc2579a8d0e90863498d96bf982d8") (:authors ("Felipe Ochoa" . "felipe@fov.space")) (:maintainers ("Felipe Ochoa" . "felipe@fov.space")) (:maintainer "Felipe Ochoa" . "felipe@fov.space") (:keywords "languages") (:url . "https://github.com/felipeochoa/rjsx-mode/"))])
- (rmsbolt . [(20230505 1851) ((emacs (25 1))) "A compiler output viewer" tar ((:commit . "52fc61a979a722f66347781a26746fb389f559db") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainers ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com") (:keywords "compilation" "tools") (:url . "http://gitlab.com/jgkamat/rmsbolt"))])
- (robe . [(20230327 113) ((inf-ruby (2 5 1)) (emacs (25 1))) "Code navigation, documentation lookup and completion for Ruby" tar ((:commit . "a8d2c3293f0760194fd138f346bcc8876cbd8640") (:authors ("Dmitry Gutov")) (:maintainers ("Dmitry Gutov")) (:maintainer "Dmitry Gutov") (:keywords "ruby" "convenience" "rails") (:url . "https://github.com/dgutov/robe"))])
- (robot-log . [(20220719 1301) ((emacs (28 1))) "Major mode for viewing RobotFramework debug log files" single ((:commit . "26da47597aa97be9649cb60f4da6d94d47d0c0ac") (:keywords "convenience" "files") (:url . "https://git.sr.ht/~apteryx/emacs-robot-log"))])
- (robot-mode . [(20221109 1630) ((emacs (26 1))) "Major-mode for Robot Framework files" single ((:commit . "fb9be47a1d4e57a80ae2c0d4dff3eba2fe29ebdc") (:authors ("Kalle Kankare" . "kalle.kankare@iki.fi")) (:maintainers ("Kalle Kankare" . "kalle.kankare@iki.fi")) (:maintainer "Kalle Kankare" . "kalle.kankare@iki.fi") (:keywords "languages" "files") (:url . "https://github.com/kopoli/robot-mode"))])
- (robots-txt-mode . [(20190812 1858) nil "Major mode for editing robots.txt" single ((:commit . "8bf67285a25a6756607354d184e36583f2847e7d") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "languages" "comm" "web") (:url . "https://github.com/emacs-php/robots-txt-mode"))])
- (roguel-ike . [(20160120 302) ((popup (0 5 0))) "A coffee-break roguelike" tar ((:commit . "706dcb0687e8016d7d776f9d9e5ace9fdbbca43c") (:authors ("Steven Rémot")) (:maintainer "Steven Rémot"))])
- (ron-mode . [(20200830 1554) ((emacs (24 5 1))) "Rusty Object Notation mode" single ((:commit . "c5e0454b9916d6b73adc15dab8abbb0b0a68ea22") (:authors ("Daniel Hutzley" . "endergeryt@gmail.com")) (:maintainers ("Daniel Hutzley" . "endergeryt@gmail.com")) (:maintainer "Daniel Hutzley" . "endergeryt@gmail.com") (:keywords "languages") (:url . "https://chiselapp.com/user/Hutzdog/repository/ron-mode/home"))])
- (rope-read-mode . [(20211228 1126) ((emacs (24))) "Rearrange lines to read text smoothly" single ((:commit . "6aad44e006a2999980c138f608d28c8ecab92b35") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainers ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com") (:keywords "reading" "convenience" "chill") (:url . "https://gitlab.com/marcowahl/rope-read-mode"))])
- (ropgadget . [(20230107 1225) ((emacs (24 4)) (transient (0 3 6))) "Display and filter ROP gadgets of a binary" single ((:commit . "10e9d6f66de1ee805d871c59f4acc078b66747a3") (:keywords "tools" "ctf" "pwn" "rop") (:url . "https://github.com/Dragoncraft89/ropgadget-el"))])
- (ros . [(20230320 1657) ((emacs (27 1))) "Package to write code for ROS systems" single ((:commit . "5702a76a055cc0801bc16d50f32973311b894676") (:authors ("Max Beutelspacher <https://github.com/mtb>")) (:maintainers ("Max Beutelspacher" . "max@beutelspacher.eu")) (:maintainer "Max Beutelspacher" . "max@beutelspacher.eu") (:keywords "convenience" "tools") (:url . "https://github.com/DerBeutlin/ros.el"))])
- (rotate . [(20210126 637) nil "Rotate the layout of emacs" single ((:commit . "4e9ac3ff800880bd9b705794ef0f7c99d72900a6") (:authors ("daichi.hirata <hirata.daichi at gmail.com>")) (:maintainers ("daichi.hirata <hirata.daichi at gmail.com>")) (:maintainer "daichi.hirata <hirata.daichi at gmail.com>") (:keywords "window" "layout") (:url . "https://github.com/daichirata/emacs-rotate"))])
- (roy-mode . [(20121208 1158) nil "Roy major mode" single ((:commit . "e1a4fb5ec0f46e82f569865ca47042ba5934e425") (:authors ("Georgii Leontiev")) (:maintainers ("Georgii Leontiev")) (:maintainer "Georgii Leontiev") (:keywords "extensions") (:url . "https://github.com/folone/roy-mode"))])
- (rpm-spec-mode . [(20160710 1136) nil "RPM spec file editing commands for Emacs/XEmacs" single ((:commit . "c1c38050c48ea330c7cea632b8785d66daeefb2b") (:authors ("Stig Bjørlykke," . "stig@bjorlykke.org")) (:maintainers ("Stig Bjørlykke," . "stig@bjorlykke.org")) (:maintainer "Stig Bjørlykke," . "stig@bjorlykke.org") (:keywords "unix" "languages"))])
- (rpn-calc . [(20210306 426) ((popup (0 4))) "quick RPN calculator for hackers" single ((:commit . "320123ede874a8fc6cde542baa0d106950318071") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "https://github.com/zk-phi/rpn-calc"))])
- (rspec-mode . [(20230201 2008) ((ruby-mode (1 0)) (cl-lib (0 4))) "Enhance ruby-mode for RSpec" tar ((:commit . "62853a428b416e6a5fd3d8f57ff83a1798188a3f") (:authors ("Peter Williams, et al.")) (:maintainers ("Peter Williams, et al.")) (:maintainer "Peter Williams, et al.") (:keywords "rspec" "ruby") (:url . "http://github.com/pezra/rspec-mode"))])
- (rsync-mode . [(20210911 0) ((emacs (27 1)) (spinner (1 7 1))) "Rsync projects to remote machines" single ((:commit . "2bc76aa8c2d82bb08ef70e23813a653d66bf3195") (:authors ("Ryan Pilgrim" . "ryan.z.pilgrim@gmail.com")) (:maintainers ("Ryan Pilgrim" . "ryan.z.pilgrim@gmail.com")) (:maintainer "Ryan Pilgrim" . "ryan.z.pilgrim@gmail.com") (:keywords "comm") (:url . "https://github.com/r-zip/rsync-mode.el"))])
- (rtags . [(20220818 1535) ((emacs (24 3))) "A front-end for rtags" single ((:commit . "b449eb7461e09ca3a839c2d49d22b975be1ad367") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainers ("Jan Erik Hanssen" . "jhanssen@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "https://github.com/Andersbakken/rtags"))])
- (rtags-xref . [(20210721 2314) ((emacs (25 1)) (rtags (2 37))) "RTags backend for xref.el" single ((:commit . "1f938a71106489e587c806181cdf2a0018a0cd41") (:authors ("Jörg Walter")) (:maintainers ("RTags Team")) (:maintainer "RTags Team") (:url . "https://github.com/Andersbakken/rtags"))])
- (rtm . [(20180329 1508) ((cl-lib (1 0))) "An elisp implementation of the Remember The Milk API" single ((:commit . "3e3d09387cb84801343ecca8fb02e82f213e7bbe") (:authors ("Friedrich Delgado Friedrichs" . "frie...@nomaden.org")) (:maintainers ("Friedrich Delgado Friedrichs" . "frie...@nomaden.org")) (:maintainer "Friedrich Delgado Friedrichs" . "frie...@nomaden.org") (:keywords "remember" "the" "milk" "productivity" "todo") (:url . "https://github.com/pmiddend/emacs-rtm"))])
- (rubik . [(20180222 2014) ((cl-lib (1 0)) (emacs (25 3))) "Rubik's Cube" single ((:commit . "c8dab1726463dbc9042a0b00186e4a8df02eb868") (:authors ("Ivan 'Kurvivor' Truskov" . "trus19@gmail.com")) (:maintainers ("Ivan 'Kurvivor' Truskov" . "trus19@gmail.com")) (:maintainer "Ivan 'Kurvivor' Truskov" . "trus19@gmail.com") (:keywords "games") (:url . "https://github.com/Kurvivor19/rubik-mode"))])
- (rubocop . [(20210309 1241) ((emacs (24))) "An Emacs interface for RuboCop" single ((:commit . "f5fd18aa810c3d3269188cbbd731ddc09006f8f5") (:authors ("Bozhidar Batsov")) (:maintainers ("Bozhidar Batsov")) (:maintainer "Bozhidar Batsov") (:keywords "project" "convenience") (:url . "https://github.com/rubocop/rubocop-emacs"))])
- (rubocopfmt . [(20230204 1110) ((cl-lib (0 5))) "Minor-mode to format Ruby code with RuboCop on save" single ((:commit . "1c6f4f1da755c9e60eb475eb9530320726904341") (:authors ("Jim Myhrberg")) (:maintainers ("Jim Myhrberg")) (:maintainer "Jim Myhrberg") (:keywords "convenience" "wp" "edit" "ruby" "rubocop") (:url . "https://github.com/jimeh/rubocopfmt.el"))])
- (ruby-compilation . [(20150709 640) ((inf-ruby (2 2 1))) "run a ruby process in a compilation buffer" single ((:commit . "be07b0f42aefa24c5d36c441d1f3f72e64fffaa4") (:authors ("Eric Schulte")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "test" "convenience") (:url . "https://github.com/eschulte/rinari"))])
- (ruby-electric . [(20200328 1528) nil "Minor mode for electrically editing ruby code" single ((:commit . "f2323cd9b5df3b34aa9810ba8109502824925d23") (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "languages" "ruby") (:url . "https://github.com/ruby/elisp-ruby-electric"))])
- (ruby-end . [(20230205 115) nil "Automatic insertion of end blocks for Ruby" single ((:commit . "1c87e214de6a75936b89ab50ee5fe522b87b009e") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:keywords "speed" "convenience" "ruby") (:url . "http://github.com/rejeep/ruby-end"))])
- (ruby-extra-highlight . [(20171106 1933) nil "Highlight Ruby parameters." single ((:commit . "83942d18eae361998d24c1c523b308eea821f048") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "languages" "faces") (:url . "https://github.com/Lindydancer/ruby-extra-highlight"))])
- (ruby-factory . [(20160102 721) ((inflections (1 1))) "Minor mode for Ruby test object generation libraries" tar ((:commit . "2bb7ccc2fccb5257376a989aa395bc7b9eb1d55d") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainers ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:keywords "ruby" "rails" "convenience") (:url . "http://github.com/sshaw/ruby-factory-mode"))])
- (ruby-hash-syntax . [(20210106 224) ((emacs (24 1))) "Toggle ruby hash syntax between => and 1.9+ styles" single ((:commit . "d458fb5891e0da85271b1cba3ee0ee69ea66a374") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages") (:url . "https://github.com/purcell/ruby-hash-syntax"))])
- (ruby-interpolation . [(20131112 1652) nil "Ruby string interpolation helpers" single ((:commit . "1978e337601222cedf00e117bf4b5cac15d1f203") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainers ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com") (:url . "http://github.com/leoc/ruby-interpolation.el"))])
- (ruby-json-to-hash . [(20211108 351) ((emacs (27 2)) (smartparens (1 11 0)) (string-inflection (1 0 16))) "Convert JSON to Hash and play with the keys" single ((:commit . "8e94d8c5ac1732e1f4d09786968b46e14139520c") (:authors ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainers ("Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com")) (:maintainer "Otávio Schwanck dos Santos" . "otavioschwanck@gmail.com") (:keywords "tools" "languages") (:url . "https://github.com/otavioschwanck/ruby-json-to-hash.el"))])
- (ruby-refactor . [(20160214 1650) ((ruby-mode (1 2))) "A minor mode which presents various Ruby refactoring helpers." single ((:commit . "e6b7125878a08518bffec6942df0c606f748e9ee") (:keywords "refactor" "ruby") (:url . "https://github.com/ajvargo/ruby-refactor"))])
- (ruby-test-mode . [(20210205 1107) ((ruby-mode (1 0)) (pcre2el (1 8))) "Minor mode for Behaviour and Test Driven" single ((:commit . "d66db4aca6e6a246f65f7195ecfbc7581d35fb7a") (:authors ("Roman Scherer" . "roman.scherer@gmx.de") ("Caspar Florian Ebeling" . "florian.ebeling@gmail.com")) (:maintainers ("Roman Scherer" . "roman.scherer@burningswell.com")) (:maintainer "Roman Scherer" . "roman.scherer@burningswell.com") (:keywords "ruby" "unit" "test" "rspec" "tools") (:url . "https://github.com/ruby-test-mode/ruby-test-mode"))])
- (ruby-tools . [(20151209 1615) nil "Collection of handy functions for ruby-mode." tar ((:commit . "6b97066b58a4f82eb2ecea6434a0a7e981aa4c18") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "speed" "convenience" "ruby") (:url . "http://github.com/rejeep/ruby-tools"))])
- (rufo . [(20170718 1416) ((emacs (24 3))) "use rufo to automatically format ruby files" single ((:commit . "85a6d80fb05fef396a8029b8f944c92a53faf8fe") (:authors ("Daniel Ma" . "danielhgma@gmail.com")) (:maintainers ("Daniel Ma" . "danielhgma@gmail.com")) (:maintainer "Daniel Ma" . "danielhgma@gmail.com") (:url . "https://github.com/danielma/rufo.el"))])
- (ruled-switch-buffer . [(20211205 636) ((emacs (24 3))) "Rule based buffer switching" single ((:commit . "99b53f7679e3eb868e4b4585085bbed102e5fce7") (:authors ("Kazuki Nishikawa" . "kzkn@hey.com")) (:maintainers ("Kazuki Nishikawa" . "kzkn@hey.com")) (:maintainer "Kazuki Nishikawa" . "kzkn@hey.com") (:keywords "convenience") (:url . "https://github.com/kzkn/ruled-switch-buffer"))])
- (rum-mode . [(20180127 22) ((emacs (24))) "Major mode for Rum programming language" single ((:commit . "161471e6476d232d479f9767535918920811d7bf") (:keywords "rum" "languages" "lisp") (:url . "https://github.com/rumlang/rum-mode"))])
- (run-command . [(20230317 2004) ((emacs (27 1))) "Run an external command from a context-dependent list" tar ((:commit . "477c42acce9e36ec59d18deaa73992f94faf7b99") (:authors ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainers ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainer "Massimiliano Mirra" . "hyperstruct@gmail.com") (:keywords "processes") (:url . "https://github.com/bard/emacs-run-command"))])
- (run-command-recipes . [(20230406 1757) ((emacs (25 1)) (dash (2 18 0)) (f (0 20 0)) (run-command (0 1 0))) "This is collection of recipes to `run-command'" tar ((:commit . "adbde3fddd67f1f40b3374c1696af03ac9b72e5e") (:authors ("semenInRussia" . "hrams205@gmail.com")) (:maintainers ("semenInRussia" . "hrams205@gmail.com")) (:maintainer "semenInRussia" . "hrams205@gmail.com") (:keywords "extensions" "run-command") (:url . "https://github.com/semenInRussia/emacs-run-command-recipes"))])
- (run-stuff . [(20230319 459) ((emacs (25 1))) "Context based command execution" single ((:commit . "cd4d250603f0df835dbaf91c45ea603ffd52c416") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "files" "lisp" "files" "convenience" "hypermedia") (:url . "https://codeberg.org/ideasman42/emacs-run-stuff"))])
- (runner . [(20160524 1048) nil "Improved \"open with\" suggestions for dired" single ((:commit . "a211d57ddc600410d07a8b534920ba905b093d87") (:authors ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainers ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainer "Thamer Mahmoud" . "thamer.mahmoud@gmail.com") (:keywords "shell command" "dired" "file extension" "open with") (:url . "https://github.com/thamer/runner"))])
- (runtests . [(20150807 831) nil "Run unit tests from Emacs" single ((:commit . "ed90249f24cc48290018df48b9b9b7172440be3e") (:authors ("Sune Simonsen" . "sune@we-knowhow.dk")) (:maintainers ("Sune Simonsen" . "sune@we-knowhow.dk")) (:maintainer "Sune Simonsen" . "sune@we-knowhow.dk") (:keywords "test") (:url . "https://github.com/sunesimonsen/emacs-runtests"))])
- (russian-holidays . [(20170109 2140) nil "Russian holidays for the calendar" single ((:commit . "b285a30f29d85c48e3ea4eb93972d34a090c167b") (:authors ("Alexander I.Grafov" . "siberian@laika.name")) (:maintainers ("Alexander I.Grafov" . "siberian@laika.name")) (:maintainer "Alexander I.Grafov" . "siberian@laika.name") (:url . "https://github.com/grafov/russian-holidays"))])
- (russian-techwriter . [(20221229 822) nil "Input methods for Russian technical writers" single ((:commit . "1d86134d04ecf2305969c7546ead7ad425cd7243") (:authors ("Maxim Dunaevskii" . "dunmaksim@yandex.ru")) (:maintainers ("Maxim Dunaevskii")) (:maintainer "Maxim Dunaevskii") (:keywords "multilingual" "input method" "cyrillic" "i18n") (:url . "https://github.com/dunmaksim/emacs-russian-techwriter-input-method"))])
- (rust-auto-use . [(20200608 1359) nil "Utility to automatically insert Rust use statements" single ((:commit . "d5205f7b9b9eae0f7d0893f87d3391464719f9c0") (:authors ("Rotem Yaari" . "rotemy@MBP.local")) (:maintainers ("Rotem Yaari" . "rotemy@MBP.local")) (:maintainer "Rotem Yaari" . "rotemy@MBP.local") (:keywords "languages"))])
- (rust-mode . [(20230112 27) ((emacs (25 1))) "A major-mode for editing Rust source code" tar ((:commit . "c12348e40531fc7e7325368621a0e5f8031d99b2") (:authors ("Mozilla")) (:maintainers ("Mozilla")) (:maintainer "Mozilla") (:keywords "languages") (:url . "https://github.com/rust-lang/rust-mode"))])
- (rust-playground . [(20200116 1043) ((emacs (24 3))) "Local Rust playground for short code snippets." single ((:commit . "5a117781dcb66065bea7830dd73618008fc34949") (:authors ("Alexander I.Grafov" . "grafov@gmail.com")) (:maintainers ("Alexander I.Grafov" . "grafov@gmail.com")) (:maintainer "Alexander I.Grafov" . "grafov@gmail.com") (:keywords "tools" "rust") (:url . "https://github.com/grafov/rust-playground"))])
- (rustic . [(20230130 912) ((emacs (26 1)) (rust-mode (1 0 3)) (dash (2 13 0)) (f (0 18 2)) (let-alist (1 0 4)) (markdown-mode (2 3)) (project (0 3 0)) (s (1 10 0)) (seq (2 3)) (spinner (1 7 3)) (xterm-color (1 6))) "Rust development environment" tar ((:commit . "a5fc66c8167a827a57c4426e4b8dbe717b3be43c") (:authors ("Mozilla")) (:maintainers ("Mozilla")) (:maintainer "Mozilla") (:keywords "languages"))])
- (rutils . [(20220619 1421) ((emacs (26 1)) (ess (18 10 1)) (transient (0 3 0))) "R utilities with transient" tar ((:commit . "dd500ab8062ce40cb339ec8620bdfc63fdd28364") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "convenience") (:url . "https://github.com/ShuguangSun/rutils.el"))])
- (rvm . [(20220910 1558) nil "Emacs integration for rvm" single ((:commit . "e1e83b5466c132c066142ac63729ba833c530c83") (:authors ("Yves Senn" . "yves.senn@gmx.ch")) (:maintainers ("Yves Senn" . "yves.senn@gmx.ch")) (:maintainer "Yves Senn" . "yves.senn@gmx.ch") (:keywords "ruby" "rvm") (:url . "http://www.emacswiki.org/emacs/RvmEl"))])
- (ryo-modal . [(20221221 1355) ((emacs (25 1))) "Roll your own modal mode" single ((:commit . "b9e6a0f33b9e2aeb6088accd23ed312083d8f707") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainers ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com") (:keywords "convenience" "modal" "keys") (:url . "http://github.com/Kungsgeten/ryo-modal"))])
- (s . [(20220902 1511) nil "The long lost Emacs string manipulation library." single ((:commit . "b4b8c03fcef316a27f75633fe4bb990aeff6e705") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:keywords "strings"))])
- (s-buffer . [(20130605 2124) ((s (1 6 0)) (noflet (0 0 3))) "s operations for buffers" single ((:commit . "f95d234282377f00a2c3a9846681080cb95bb1df") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp") (:url . "http://github.com/nicferrier/emacs-s-buffer"))])
- (s12cpuv2-mode . [(20171013 2051) ((emacs (24 3))) "Major-mode for S12CPUV2 assembly" single ((:commit . "b17d4cf848dec1e20e66458e5c7ff77a2c051a8c") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:keywords "s12cpuv2" "assembly" "languages") (:url . "https://github.com/AdamNiederer/s12cpuv2-mode"))])
- (s3ed . [(20200929 1317) ((emacs (25 1)) (dash (2 17 0)) (s (1 12 0))) "Tramp-like access to s3" tar ((:commit . "2234444ead6c4c6fc3fea548958b36d2c29a9938") (:authors ("Matt Usifer" . "mattusifer@gmail.com")) (:maintainers ("Matt Usifer" . "mattusifer@gmail.com")) (:maintainer "Matt Usifer" . "mattusifer@gmail.com") (:keywords "s3" "tools") (:url . "https://github.com/mattusifer/s3ed"))])
- (sackspace . [(20130719 956) nil "A better backspace" single ((:commit . "fd0480eaaf6d3d11fd30ac5feb2da2f4f7572708") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainers ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainer "Michael Markert" . "markert.michael@googlemail.com") (:keywords "delete" "convenience") (:url . "http://github.com/cofi/sackspace.el"))])
- (sage-shell-mode . [(20221020 1012) ((cl-lib (0 6 1)) (emacs (24 4)) (let-alist (1 0 5)) (deferred (0 5 1))) "A front-end for Sage Math" tar ((:commit . "80fbb4ee9ed8507d22214ed7a4ffd135c9e8c7c8") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainers ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com") (:keywords "sage" "math") (:url . "https://github.com/sagemath/sage-shell-mode"))])
- (sailfish-scratchbox . [(20171202 1332) nil "Sailfish OS scratchbox inside the emacs." single ((:commit . "bb5ed0f0b0cd72f2eb1af065b7587ec81866b089") (:authors ("V. V. Polevoy" . "fx@thefx.co")) (:maintainers ("V. V. Polevoy" . "fx@thefx.co")) (:maintainer "V. V. Polevoy" . "fx@thefx.co") (:keywords "sb2" "mb2" "building" "scratchbox" "sailfish") (:url . "https://github.com/vityafx/sailfish-scratchbox.el"))])
- (sakura-theme . [(20220822 254) nil "Filled with cherry blossoms" single ((:commit . "d78648632a94dd5354d2fed0f94fcb7aece29132") (:url . "http://github.com/emacsfodder/emacs-theme-sakura"))])
- (salesforce-utils . [(20160814 154) ((cl-lib (0 5))) "simple utilities for Salesforce" single ((:commit . "73328baf0fb94ac0d0de645a8f6d42e5ae27f773") (:authors ("Sean McAfee")) (:maintainers ("Sean McAfee")) (:maintainer "Sean McAfee") (:url . "https://github.com/grimnebulin/emacs-salesforce"))])
- (salt-mode . [(20200210 1200) ((emacs (24 4)) (yaml-mode (0 0 12)) (mmm-mode (0 5 4)) (mmm-jinja2 (0 1))) "Major mode for Salt States" single ((:commit . "e76e78d93e4770d42bdde9367a11d0e0836a21c9") (:authors ("Ben Hayden" . "hayden767@gmail.com")) (:maintainers ("Glynn Forrest" . "me@glynnforrest.com")) (:maintainer "Glynn Forrest" . "me@glynnforrest.com") (:keywords "languages") (:url . "https://github.com/glynnforrest/salt-mode"))])
- (samskritam . [(20220912 255) ((emacs (28 1)) (google-translate (0 12 0))) "Library to get samskrit word definition, translate to & from" single ((:commit . "93566481023b2645ca1f1dfcc5440712c2ec843b") (:authors ("Krishna Thapa" . "thapakrish@gmail.com")) (:maintainers ("Krishna Thapa" . "thapakrish@gmail.com")) (:maintainer "Krishna Thapa" . "thapakrish@gmail.com") (:keywords "convenience" "language" "samskrit" "sanskrit" "dictionary" "translation") (:url . "https://github.com/thapakrish/samskritam"))])
- (sas-py . [(20230131 523) ((emacs (28 1)) (ess (18 10 1))) "SAS with SASPy" single ((:commit . "76a2226eb49ec37f211904c6395ee066bd440560") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/sas-py"))])
- (sass-mode . [(20190502 53) ((haml-mode (3 0 15)) (cl-lib (0 5))) "Major mode for editing Sass files" single ((:commit . "247a0d4b509f10b28e4687cd8763492bca03599b") (:authors ("Natalie Weizenbaum")) (:maintainers ("Natalie Weizenbaum")) (:maintainer "Natalie Weizenbaum") (:keywords "markup" "language" "css") (:url . "http://github.com/nex3/haml/tree/master"))])
- (sauron . [(20201015 836) nil "Track (erc/org/dbus/...) events and react to them." tar ((:commit . "5daade4836da5b1b2ab26d84128d6c38328a5d52") (:authors ("Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl")) (:maintainer "Dirk-Jan C. Binnema" . "djcb@djcbsoftware.nl") (:keywords "comm" "frames"))])
- (save-load-path . [(20140206 1214) nil "save load-path and reuse it to test" single ((:commit . "6cb763a37e2b8af505bff2bcd11fd49c9ea04d66") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "lisp") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/save-load-path.el"))])
- (save-visited-files . [(20200212 414) nil "save opened files across sessions" single ((:commit . "8203a05a322324ec17b14437c8dfb38efdb53241") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainers ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com") (:url . "http://github.com/nflath/save-visited-files"))])
- (savekill . [(20140418 229) nil "Save kill ring to disk" single ((:commit . "67fc94e3d8fe8ce3ca16f90518f6a46479b63e34") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "tools") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/savekill.el"))])
- (saveplace-pdf-view . [(20210217 1312) ((emacs (24 1))) "Save place in pdf-view buffers" single ((:commit . "17703495db796fccb3acbae1676f0e7f0e34926c") (:authors ("Nicolai Singh <nicolaisingh at pm.me>")) (:maintainers ("Nicolai Singh <nicolaisingh at pm.me>")) (:maintainer "Nicolai Singh <nicolaisingh at pm.me>") (:keywords "files" "convenience") (:url . "https://github.com/nicolaisingh/saveplace-pdf-view"))])
- (say-what-im-doing . [(20160706 1931) nil "dictate what you're doing with text to speech" single ((:commit . "5b2ce6783b02805bcac1107a149bfba3852cd9d5") (:authors ("Benaiah Mischenko")) (:maintainers ("Benaiah Mischenko")) (:maintainer "Benaiah Mischenko") (:keywords "text to speech" "dumb" "funny") (:url . "http://github.com/benaiah/say-what-im-doing"))])
- (sayid . [(20220101 1357) ((cider (0 21 0))) "sayid nREPL middleware client" single ((:commit . "879aff586336a0ec4d46c0ed4720fb1de22082bd") (:authors ("Bill Piel" . "bill@billpiel.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "clojure" "cider" "debugger") (:url . "https://github.com/clojure-emacs/sayid"))])
- (sbt-mode . [(20211203 1148) ((emacs (24 4))) "Interactive support for sbt projects" tar ((:commit . "9fe1e8807c22cc1dc56a6233e000969518907f4d") (:keywords "languages") (:url . "https://github.com/hvesalai/emacs-sbt-mode"))])
- (scad-mode . [(20230315 1950) ((emacs (27 1)) (compat (29 1 4 0))) "A major mode for editing OpenSCAD code" tar ((:commit . "e1af74735ad6113448c99b3ab128a665e6adaaca") (:authors ("Len Trigg, Åukasz Stelmach, zk_phi, Daniel Mendler")) (:maintainers ("Len Trigg <lenbok@gmail.com>, Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Len Trigg <lenbok@gmail.com>, Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "languages") (:url . "https://github.com/openscad/emacs-scad-mode"))])
- (scad-preview . [(20211212 1128) ((scad-mode (91 0)) (emacs (24 4))) "Preview SCAD models in real-time within Emacs" single ((:commit . "c5449b26c63f3e0a695905a7e4e84f8d844f761b") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "https://zk-phi.github.io/"))])
- (scala-mode . [(20221025 1502) nil "Major mode for editing Scala" tar ((:commit . "5d7cf21c37e345c49f921fe5111a49fd54efd1e0") (:keywords "languages") (:url . "https://github.com/hvesalai/emacs-scala-mode"))])
- (scf-mode . [(20151122 248) nil "shorten file-names in compilation type buffers" single ((:commit . "dbfcdcd89034f208d65e181af58e0d73ad09f8b2") (:authors ("Le Wang")) (:maintainers ("Le Wang")) (:maintainer "Le Wang") (:keywords "compilation") (:url . "https://github.com/lewang/scf-mode"))])
- (scheme-complete . [(20201112 442) nil "Smart auto completion for Scheme in Emacs" single ((:commit . "b9a1448c4696f117d9ea4e59b6162dc31112e71a") (:authors ("Alex Shinn")) (:maintainers ("Alex Shinn")) (:maintainer "Alex Shinn"))])
- (scholar-import . [(20230412 1413) ((emacs (26 1)) (org (9 0)) (request (0 3 0)) (s (1 10 0)) (parsebib (4 2))) "Import Bibtex & PDF from Google Scholar" single ((:commit . "2456367578caa7fd768e30238ce080687faa0a25") (:authors ("Anh T Nguyen <https://github.com/teeann>")) (:maintainers ("Anh T Nguyen <https://github.com/teeann>")) (:maintainer "Anh T Nguyen <https://github.com/teeann>") (:url . "https://github.com/teeann/scholar-import"))])
- (schrute . [(20170521 1840) ((emacs (24 3))) "Help you remember there is a better way to do something." single ((:commit . "59faa6c4232ae183cea93237301acad8c0763997") (:authors ("Jorge Araya Navarro" . "elcorreo@deshackra.com")) (:maintainers ("Jorge Araya Navarro" . "elcorreo@deshackra.com")) (:maintainer "Jorge Araya Navarro" . "elcorreo@deshackra.com") (:keywords "convenience") (:url . "https://bitbucket.org/shackra/dwight-k.-schrute"))])
- (scihub . [(20220913 618) ((emacs (27 1))) "Sci-Hub integration" single ((:commit . "56aa7205b5f2a6c9821557f9f1b9ff76dc1bb882") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/scihub.el"))])
- (sclang-extensions . [(20160509 338) ((auto-complete (1 4 0)) (s (1 3 1)) (dash (1 2 0)) (emacs (24 1))) "Extensions for the SuperCollider Emacs mode." tar ((:commit . "e9cc79732f16fdb582129303110c163dcc0d6da0") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com") (:keywords "sclang" "supercollider" "languages" "tools"))])
- (sclang-snippets . [(20130513 751) ((yasnippet (0 8 0))) "Snippets for the SuperCollider Emacs mode" tar ((:commit . "c840a416b96f83bdd70491e3d1fbe2f1ae8b3f58") (:authors ("ptrv" . "mail@petervasil.net")) (:maintainers ("ptrv" . "mail@petervasil.net")) (:maintainer "ptrv" . "mail@petervasil.net") (:keywords "snippets"))])
- (scopeline . [(20230327 331) ((emacs (26 1))) "Show scope info of blocks in buffer at end of scope" single ((:commit . "204d2c635e93e0702c15f6d4faf9bffb39ecff7e") (:keywords "scope" "context" "tree-sitter" "convenience") (:url . "https://github.com/meain/scopeline.el"))])
- (scpaste . [(20221125 1731) ((htmlize (1 39))) "Paste to the web via scp." single ((:commit . "56c67ef63be86ef1f03e15a62ad17c3983e1e5dc") (:authors ("Phil Hagelberg")) (:maintainers ("Phil Hagelberg")) (:maintainer "Phil Hagelberg") (:keywords "convenience" "hypermedia") (:url . "https://git.sr.ht/~technomancy/scpaste"))])
- (scratch . [(20220319 1705) ((emacs (25 1))) "Mode-specific scratch buffers" single ((:commit . "f000648c9663833a76a8de9b1e78c99a9d698e48") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com") (:keywords "convenience" "tools" "files") (:url . "https://github.com/ieure/scratch-el"))])
- (scratch-comment . [(20200812 1025) ((emacs (26 1))) "Insert Elisp result as comment in scratch buffer" single ((:commit . "cf3e967b4def1308b6ef1cfeedd2cf15ee6e226c") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "convenience") (:url . "https://github.com/conao3/scratch-comment.el"))])
- (scratch-ext . [(20220617 132) ((emacs (24 1))) "Extensions for *scratch*" single ((:commit . "8bbe1649503bb2e3676643e6e49fde155c1d6c70") (:authors ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainers ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainer "Kouhei Yanagita" . "yanagi@shakenbu.org") (:url . "https://github.com/kyanagi/scratch-ext-el"))])
- (scratch-log . [(20141115 743) nil "Utility for *scratch* buffer." single ((:commit . "1168f7f16d36ca0f4ddf2bb98881f8db62cc5dc0") (:authors ("kmori" . "morihenotegami@gmail.com")) (:maintainers ("kmori" . "morihenotegami@gmail.com")) (:maintainer "kmori" . "morihenotegami@gmail.com"))])
- (scratch-message . [(20220209 2207) nil "Changing message in your scratch buffer" single ((:commit . "0d4198f6effd8f118bf03ee4979f566041ef6a9b") (:authors ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainers ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainer "Sylvain Rousseau <thisirs at gmail dot com>") (:keywords "util" "scratch") (:url . "https://github.com/thisirs/scratch-message.git"))])
- (scratch-palette . [(20210306 427) ((popwin (0 7 0 -3))) "make scratch buffer for each files" single ((:commit . "e4642ed8a2b744ba48a8e11ca83861f8e4b9c5b3") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://zk-phi.gitub.io/"))])
- (scratch-pop . [(20200910 226) nil "Generate, popup (& optionally backup) scratch buffer(s)." single ((:commit . "545badcd840dd50b39dd7dfa37459c6f71d02ea6") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (scratches . [(20151006 416) ((dash (2 11 0)) (f (0 17 0))) "Multiple scratches in any language" single ((:commit . "9441afe6396ca38f08029123fab5d87429cbf315") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com") (:keywords "scratch"))])
- (scribble-mode . [(20190912 200) ((emacs (24))) "Major mode for editing Scribble documents" single ((:commit . "5c3ea3cc9bbad585476eee41ea76dc056c2012bb") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainers ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:keywords "convenience") (:url . "https://github.com/emacs-pe/scribble-mode"))])
- (scroll-on-drag . [(20230313 546) ((emacs (26 2))) "Interactive scrolling" single ((:commit . "179c2acecc48d3ceca4b449b2a225d684002bb32") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-scroll-on-drag"))])
- (scroll-on-jump . [(20230201 141) ((emacs (26 2))) "Scroll when jumping to a new point" single ((:commit . "220e4a8f21cc0b430c693a3ecac08156da2602c1") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.com/ideasman42/emacs-scroll-on-jump"))])
- (scrollable-quick-peek . [(20201224 329) ((quick-peek (1 0)) (emacs (24 4))) "Display scrollable overlays" single ((:commit . "3e3492145a61831661d6e97fdcb47b5b66c73287") (:authors ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainers ("Pablo Barrantes" . "xjpablobrx@gmail.com")) (:maintainer "Pablo Barrantes" . "xjpablobrx@gmail.com") (:keywords "convenience" "extensions" "help" "tools") (:url . "https://github.com/jpablobr/scrollable-quick-peek"))])
- (scrollkeeper . [(20190109 629) ((emacs (25 1))) "Custom scrolling commands with visual guidelines" single ((:commit . "3c4ac6b6b44686d31c260ee0b19daaee59bdccd6") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/scrollkeeper.el"))])
- (scrooge . [(20180630 1022) ((emacs (24)) (cl-lib (0 5)) (dash (2 13 0)) (thrift (0 9 3))) "Major mode for Twitter Scrooge files" single ((:commit . "0a8c58e9e6708abe4ef7e415bc1e0472318bb1b0") (:authors ("Daniel McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainers ("Daniel McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Daniel McClanahan" . "danieldmcclanahan@gmail.com") (:keywords "scrooge" "thrift"))])
- (scss-mode . [(20180123 1708) nil "Major mode for editing SCSS files" single ((:commit . "cf58dbec5394280503eb5502938f3b5445d1b53d") (:authors ("Anton Johansson" . "anton.johansson@gmail.com")) (:maintainers ("Anton Johansson" . "anton.johansson@gmail.com")) (:maintainer "Anton Johansson" . "anton.johansson@gmail.com") (:keywords "scss" "css" "mode") (:url . "https://github.com/antonj/scss-mode"))])
- (sculpture-themes . [(20220601 1349) ((emacs (26 1))) "Themes with vivid colors" tar ((:commit . "ff2fdd1c38cb9f3f1abf420b77d1ef3a2786ce57") (:authors ("t-e-r-m" . "newenewen@tutanota.com")) (:maintainers ("t-e-r-m" . "newenewen@tutanota.com")) (:maintainer "t-e-r-m" . "newenewen@tutanota.com") (:url . "https://github.com/t-e-r-m/sculpture-theme"))])
- (sdcv . [(20220210 1412) ((emacs (24 3)) (popup (0 5 3)) (showtip (0 1)) (pos-tip (0 4 6)) (cl-lib (0 3))) "Interface for sdcv (StartDict console version)." single ((:commit . "98e239c7380c63282845d5bc55ea6d605f5a33b8") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainers ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainer "Andy Stewart" . "lazycat.manatee@gmail.com") (:keywords "startdict" "sdcv") (:url . "https://repo.or.cz/sdcv.el.git"))])
- (sdlang-mode . [(20161201 711) ((emacs (24 3))) "Major mode for Simple Declarative Language files." single ((:commit . "d42a6eedefeb44919fbacf58d302b6df18f05bbc") (:authors ("Vladimir Panteleev")) (:maintainers ("Vladimir Panteleev")) (:maintainer "Vladimir Panteleev") (:keywords "languages") (:url . "https://github.com/CyberShadow/sdlang-mode"))])
- (search-web . [(20150312 1103) nil "Post web search queries using `browse-url'." single ((:commit . "c4ae86ac1acfc572b81f3d78764bd9a54034c331") (:authors ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainers ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainer "Tomoya Otake" . "tomoya.ton@gmail.com"))])
- (searcher . [(20220704 758) ((emacs (25 1)) (dash (2 10)) (f (0 20 0))) "Searcher in pure elisp" single ((:commit . "6debf99431a5cb4d1db55e5379453c6a181a133f") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "search" "searcher" "string") (:url . "https://github.com/jcs-elpa/searcher"))])
- (searchq . [(20150829 1211) ((emacs (24 3))) "Framework of queued search tasks using GREP, ACK, AG and more." tar ((:commit . "dd510d55ad66a82c6ef022cfe7c4a73ad5365f82") (:authors ("boyw165")) (:maintainers ("boyw165")) (:maintainer "boyw165"))])
- (secretaria . [(20191128 250) ((emacs (24 4)) (alert (1 2)) (s (1 12)) (f (0 20 0)) (org (9))) "A personal assistant based on org-mode" single ((:commit . "03986130a2ada1fa952d45e83536729f20230fcf") (:authors ("Jorge Araya Navarro" . "jorge@esavara.cr")) (:maintainers ("Jorge Araya Navarro" . "jorge@esavara.cr")) (:maintainer "Jorge Araya Navarro" . "jorge@esavara.cr") (:keywords "org" "convenience") (:url . "https://gitlab.com/shackra/secretaria"))])
- (see-mode . [(20180511 41) ((emacs (24 4)) (language-detection (0 1 0))) "Edit string in a separate buffer" single ((:commit . "db9e4324f9dcc14d5125cb6a79d6c9fad5b14626") (:authors ("Marcelo Muñoz" . "ma.munoz.araya@gmail.com")) (:maintainers ("Marcelo Muñoz" . "ma.munoz.araya@gmail.com")) (:maintainer "Marcelo Muñoz" . "ma.munoz.araya@gmail.com") (:keywords "convenience") (:url . "https://github.com/marcelino-m/see-mode"))])
- (seeing-is-believing . [(20170214 1320) nil "minor mode for running the seeing-is-believing ruby gem" single ((:commit . "fbbe246c0fda87bb26227bb826eebadb418a220f") (:authors ("John Cinnamond")) (:maintainers ("John Cinnamond")) (:maintainer "John Cinnamond"))])
- (seethru . [(20150218 1829) ((shadchen (1 4))) "Easily change Emacs' transparency" single ((:commit . "d87e231f99313bea75b1e69e48c0f32968c82060") (:authors ("Benaiah Mischenko" . "benaiah@mischenko.com")) (:maintainers ("Benaiah Mischenko" . "benaiah@mischenko.com")) (:maintainer "Benaiah Mischenko" . "benaiah@mischenko.com") (:keywords "lisp" "tools" "alpha" "transparency") (:url . "http://github.com/benaiah/seethru"))])
- (sekka . [(20170803 1247) ((cl-lib (0 3)) (concurrent (0 3 1)) (popup (0 5 2))) "A client for Sekka IME server" single ((:commit . "d1fd5d47aacba723631d5d374169a45ff2051c41") (:authors ("Kiyoka Nishiyama" . "kiyoka@sumibi.org")) (:maintainers ("Kiyoka Nishiyama" . "kiyoka@sumibi.org")) (:maintainer "Kiyoka Nishiyama" . "kiyoka@sumibi.org") (:keywords "ime" "skk" "japanese") (:url . "https://github.com/kiyoka/sekka"))])
- (select-themes . [(20160221 106) nil "Color theme selection with completing-read" single ((:commit . "236f54287519a3ea6dd7b3992d053e4f4ff5d0fe") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-select-themes"))])
- (selected . [(20230219 1328) nil "Keymap for when region is active" single ((:commit . "1ca6e12f456caa1dc97c3d68597598662eb5de9a") (:authors ("Erik Sjöstrand")) (:maintainers ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:keywords "convenience") (:url . "http://github.com/Kungsgeten/selected.el"))])
- (selectric-mode . [(20200209 2107) nil "IBM Selectric mode for Emacs" tar ((:commit . "bb9e66678f34e9bc23624ff6292cf5e7857e8e5f") (:authors ("Ricardo Bánffy" . "rbanffy@gmail.com")) (:maintainers ("Ricardo Banffy" . "rbanffy@gmail.com")) (:maintainer "Ricardo Banffy" . "rbanffy@gmail.com") (:keywords "multimedia" "convenience" "typewriter" "selectric") (:url . "https://github.com/rbanffy/selectric-mode"))])
- (selectrum . [(20220513 2106) ((emacs (26 1))) "Easily select item from list" single ((:commit . "810ea697bdd559d97b86b795e01769cddfa3daf2") (:authors ("Radian LLC" . "contact+selectrum@radian.codes")) (:maintainers ("Radian LLC" . "contact+selectrum@radian.codes")) (:maintainer "Radian LLC" . "contact+selectrum@radian.codes") (:keywords "extensions") (:url . "https://github.com/radian-software/selectrum"))])
- (selectrum-prescient . [(20221216 112) ((emacs (25 1)) (prescient (6 1 0)) (selectrum (3 1))) "prescient.el + Selectrum" single ((:commit . "72b023f5fc1ae2bbf2f51f1786cc012d40671bf4") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes") (:keywords "extensions") (:url . "https://github.com/raxod502/prescient.el"))])
- (semaphore . [(20190607 1949) ((emacs (26))) "Semaphore based on condition variables" single ((:commit . "ec4c485c8e4cff63805ecc25523a031a6c2ad7cd") (:authors ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainers ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainer "Herwig Hochleitner" . "herwig@bendlas.net") (:keywords "processes" "unix") (:url . "http://github.com/webnf/semaphore.el"))])
- (semaphore-promise . [(20190607 2115) ((emacs (26)) (semaphore (1)) (promise (1))) "semaphore integration with promise" single ((:commit . "9cdfef91cc0293371af549ad41027aa5b73f30a4") (:authors ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainers ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainer "Herwig Hochleitner" . "herwig@bendlas.net") (:keywords "processes" "unix") (:url . "http://github.com/webnf/semaphore.el"))])
- (semi . [(20230104 1321) ((emacs (24 5)) (apel (10 8)) (flim (1 14 9))) "A library to provide MIME features." tar ((:commit . "7d8df0ef2f483e2dc063a72099295f467e6bc2c8"))])
- (seml-mode . [(20200812 1027) ((emacs (25 1)) (impatient-mode (1 1)) (htmlize (1 5)) (web-mode (16 0))) "Major-mode for SEML, S-Expression Markup Language, file" single ((:commit . "7a9a8305f7b54ee59e4c29b33ef5fd4058ba4219") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "lisp" "html") (:url . "https://github.com/conao3/seml-mode.el"))])
- (sendto . [(20160425 1250) ((emacs (24 4))) "send the region content to a function" single ((:commit . "076b81d7a53f75b0a59b0ef3448f35570567054c") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "region") (:url . "https://github.com/lujun9972/sendto.el"))])
- (sensei . [(20220530 1226) ((emacs (27 1)) (projectile (2 5 0)) (request (0 3 2))) "A client for sensei" single ((:commit . "3538990de9ab57154e3da08d10fbd2c6228d87b8") (:authors ("Arnaud Bailly" . "arnaud@pankzsoft.com")) (:maintainers ("Arnaud Bailly" . "arnaud@pankzsoft.com")) (:maintainer "Arnaud Bailly" . "arnaud@pankzsoft.com") (:keywords "hypermedia") (:url . "https://abailly.github.io/sensei"))])
- (sensitive . [(20170818 1251) ((emacs (24)) (sequences (0 1 0))) "A dead simple way to load sensitive information" single ((:commit . "69dd6125a41d8b55f4b6ba61daa4d1aa1f716fa8") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainers ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com") (:keywords "convenience"))])
- (sentence-navigation . [(20220522 1137) ((ample-regexps (0 1)) (cl-lib (0 5)) (emacs (24 4))) "Commands to navigate one-spaced sentences." single ((:commit . "ea6e94a5518643acda5b6e98e4e7f47dfc107d29") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainers ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org") (:keywords "sentence" "evil") (:url . "https://github.com/noctuid/emacs-sentence-navigation"))])
- (sentex . [(20230411 1650) ((emacs (27 1))) "Regex-based sentence navigation rules" tar ((:commit . "ab96ee0e9856222aaad6b085cf4ca0c5dda73789") (:authors ("Marty Hiatt <martianhiatus AT riseup.net>")) (:maintainers ("Marty Hiatt <martianhiatus AT riseup.net>")) (:maintainer "Marty Hiatt <martianhiatus AT riseup.net>") (:keywords "languages" "convenience" "translation" "sentences" "text" "wp") (:url . "https://codeberg.org/martianh/sentex"))])
- (seoul256-theme . [(20180505 757) ((emacs (24 3))) "Low-contrast color scheme based on Seoul Colors." single ((:commit . "8e76d0207489964ef780420723d49e409f68f7d1") (:authors ("Anand Iyer" . "anand.ucb@gmail.com")) (:maintainers ("Anand Iyer" . "anand.ucb@gmail.com")) (:maintainer "Anand Iyer" . "anand.ucb@gmail.com") (:keywords "theme") (:url . "http://github.com/anandpiyer/seoul256-emacs"))])
- (separedit . [(20230403 1242) ((emacs (25 1)) (dash (2 18)) (edit-indirect (0 1 5))) "Edit comment/string/docstring/code block in separate buffer" single ((:commit . "8344e7338a0ab7968cab807e0073934a8444559d") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:keywords "tools" "languages" "docs") (:url . "https://github.com/twlz0ne/separedit.el"))])
- (sequed . [(20220115 743) ((emacs (25 2))) "Major mode for FASTA format DNA alignments" single ((:commit . "c886981c46d199e1522f18c3fc15198ab8c9a02f") (:authors ("Bruce Rannala" . "brannala@ucdavis.edu")) (:maintainers ("Bruce Rannala" . "brannala@ucdavis.edu")) (:maintainer "Bruce Rannala" . "brannala@ucdavis.edu") (:url . "https://github.com/brannala/sequed"))])
- (sequences . [(20170818 1252) ((emacs (24))) "Ports of some Clojure sequence functions." single ((:commit . "564ebbd93b0beea4e75acfbf824350e90b5d5738") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainers ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com") (:keywords "convenience"))])
- (sequential-command . [(20170926 40) nil "Many commands into one command" tar ((:commit . "a48cbcbe273b33edd3ae56e68f44b4100fa3a48a") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "convenience" "lisp") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sequential-command.el"))])
- (seriestracker . [(20220731 2330) ((dash (2 12 1)) (transient (0 3 2)) (emacs (27 1))) "Series tracker" single ((:commit . "1b4fe12d2fff15e3646a2d7cbe528ad1f95c4f19") (:authors ("Maxime Wack <contact at maximewack dot com>")) (:maintainers ("Maxime Wack <contact at maximewack dot com>")) (:maintainer "Maxime Wack <contact at maximewack dot com>") (:keywords "multimedia") (:url . "https://www.github.com/MaximeWack/seriesTracker"))])
- (servant . [(20140216 1219) ((s (1 8 0)) (dash (2 2 0)) (f (0 11 0)) (ansi (0 3 0)) (commander (0 5 0)) (epl (0 2)) (shut-up (0 2 1)) (web-server (0 0 1))) "ELPA server written in Emacs Lisp" tar ((:commit . "4d2aa8250b54b28e6e7ee4cd5ebd98a33db2c134") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com") ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "elpa" "server") (:url . "http://github.com/rejeep/servant.el"))])
- (services . [(20170802 1130) ((cl-lib (0 5))) "Services database access functions." single ((:commit . "04c7986041a33dfa0b0ae57c7d6fbd600548c596") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "convenience" "net" "services") (:url . "https://github.com/davep/services.el"))])
- (sesman . [(20210901 1134) ((emacs (25))) "Generic Session Manager" tar ((:commit . "e0f555f963c9f02f8e4a50e06fc353eb4c15ee77") (:authors ("Vitalie Spinu")) (:maintainers ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:keywords "process") (:url . "https://github.com/vspinu/sesman"))])
- (session . [(20120511 0) nil "use variables, registers and buffer places across sessions" single ((:commit . "19ea0806873daac3539a4b956e15655e99e3dd6c") (:authors ("Christoph Wedler" . "wedler@users.sourceforge.net")) (:maintainers ("Christoph Wedler" . "wedler@users.sourceforge.net")) (:maintainer "Christoph Wedler" . "wedler@users.sourceforge.net") (:keywords "session" "session management" "desktop" "data" "tools") (:url . "http://emacs-session.sourceforge.net/"))])
- (session-async . [(20230223 313) ((emacs (27 1)) (jsonrpc (1 0 9))) "Asynchronous processing in a forked process session" single ((:commit . "e06835ea181b3a15099280527c9a4590d2fa61d1") (:authors ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainer "Felipe Lema" . "felipelema@mortemale.org") (:keywords "async" "comm" "data" "files" "internal" "maint" "processes" "tools") (:url . "https://codeberg.org/FelipeLema/session-async.el"))])
- (seti-theme . [(20190201 1848) nil "A dark colored theme, inspired by Seti Atom Theme" single ((:commit . "9d76db0b91d4f574dd96ac80fad41da35bffa109") (:authors ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainers ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainer "Vlad Piersec" . "vlad.piersec@gmail.com") (:keywords "themes") (:url . "https://github.com/caisah/seti-theme"))])
- (sexp-diff . [(20200314 2018) ((emacs (25))) "Diff sexps based on Levenshtein-like edit distance" single ((:commit . "4fea80f7b04c64b160a95bdc9d6de68c71096706") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "lisp") (:url . "https://github.com/xuchunyang/sexp-diff.el"))])
- (sexp-move . [(20150915 1730) nil "Improved S-Expression Movement" single ((:commit . "117f7a91ab7c25e438413753e916570122011ce7") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainers ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com") (:keywords "sexp") (:url . "https://gitlab.com/elzair/sexp-move"))])
- (sexy-monochrome-theme . [(20200115 2146) nil "A sexy dark Emacs >= 24 theme for your sexy code" single ((:commit . "f3ad07d60c966ef34cb11026eaba053e114bb8f1") (:authors ("Volodymyr Yevtushenko" . "voloyev@vivaldi.net")) (:maintainers ("Volodymyr Yevtushenko" . "voloyev@vivaldi.net")) (:maintainer "Volodymyr Yevtushenko" . "voloyev@vivaldi.net") (:keywords "themes") (:url . "https://github.com/voloyev/sexy-monochrome-theme"))])
- (sfz-mode . [(20200716 1023) ((emacs (25 1))) "Major mode for SFZ files" single ((:commit . "aaf31d1b68817251affed7da719dfcb2acd4b51a") (:authors ("Jean Pierre Cimalando" . "jp-dev@inbox.ru")) (:maintainers ("Jean Pierre Cimalando" . "jp-dev@inbox.ru")) (:maintainer "Jean Pierre Cimalando" . "jp-dev@inbox.ru") (:keywords "languages") (:url . "https://github.com/sfztools/emacs-sfz-mode"))])
- (shackle . [(20211118 1129) ((emacs (24 3)) (cl-lib (0 5))) "Enforce rules for popups" single ((:commit . "f1467db75a8fa5d51c676181fb308ccbf7b05e6f") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "convenience") (:url . "https://depp.brause.cc/shackle"))])
- (shadchen . [(20141102 1839) nil "pattern matching for elisp" single ((:commit . "35f2b9c304eec990c16efbd557198289dc7cbb1f") (:authors ("Vincent Toups")) (:maintainers ("Vincent Toups")) (:maintainer "Vincent Toups"))])
- (shader-mode . [(20220930 1052) ((emacs (24))) "Major mode for shader" single ((:commit . "fe5a1982ba69e4a98b834141a46a1908f132df15") (:authors ("midnightSuyama" . "midnightSuyama@gmail.com")) (:maintainers ("midnightSuyama" . "midnightSuyama@gmail.com")) (:maintainer "midnightSuyama" . "midnightSuyama@gmail.com") (:url . "https://github.com/midnightSuyama/shader-mode"))])
- (shades-of-purple-theme . [(20230421 2059) nil "A theme with bold shades of purple" single ((:commit . "8757594c5f6265b09d156cf9f8671f78863b25db") (:authors ("Arturo Vergara" . "hello@dead.computer")) (:maintainers ("Arturo Vergara" . "hello@dead.computer")) (:maintainer "Arturo Vergara" . "hello@dead.computer") (:url . "https://github.com/arturovm/shades-of-purple-emacs"))])
- (shadowenv . [(20210512 1625) ((emacs (24 3))) "Shadowenv integration." single ((:commit . "dbcef650b906fec62608d5e4e3075bf251e675e1") (:authors ("Dante Catalfamo" . "dante.catalfamo@shopify.com")) (:maintainers ("Dante Catalfamo" . "dante.catalfamo@shopify.com")) (:maintainer "Dante Catalfamo" . "dante.catalfamo@shopify.com") (:keywords "shadowenv" "tools") (:url . "https://github.com/Shopify/shadowenv.el"))])
- (shakespeare-mode . [(20180704 2138) nil "A major mode for editing Shakespearean templates." single ((:commit . "c442eeea9d585e1b1fbb8813e33d47feec348a57") (:authors ("Cody Reichert")) (:maintainers ("Cody Reichert")) (:maintainer "Cody Reichert") (:keywords "shakespeare" "hamlet" "lucius" "julius" "mode") (:url . "http://github.com/CodyReichert/shakespeare-mode"))])
- (shampoo . [(20131230 1019) nil "A remote Smalltalk development mode" tar ((:commit . "bc193c39636c30182159c5c91c37a9a4cb50fedf"))])
- (shanty-themes . [(20230123 2111) ((emacs (24 5 1))) "The themes for digital workers" tar ((:commit . "3f678d953771c4a109bd16f6d7def6bd9bbc811d") (:authors ("Philip Gaber" . "phga@posteo.de")) (:maintainers ("Philip Gaber" . "phga@posteo.de")) (:maintainer "Philip Gaber" . "phga@posteo.de") (:keywords "faces" "theme" "blue" "yellow" "gold" "dark" "light") (:url . "https://github.com/qhga/shanty-themes"))])
- (share2computer . [(20200316 31) ((emacs (25 1))) "Elisp helper of android ShareToComputer" single ((:commit . "15da47625a800e3310b8dc714bd4e41e32966d6a") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:keywords "convenience" "comm") (:url . "https://github.com/tumashu/share2computer"))])
- (sharper . [(20230129 1827) ((emacs (27 1)) (transient (0 2 0))) "A dotnet CLI wrapper, using Transient" single ((:commit . "496e90e337cb09329d85a6d171c0953a85e918fe") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com") (:keywords "maint" "tool") (:url . "https://github.com/sebasmonia/sharper"))])
- (shell-current-directory . [(20140101 2354) nil "create new shell based on buffer directory" single ((:commit . "bf843771bf9a4aa05e054ade799eb8862f3be89a") (:authors ("Daniel Polani")) (:maintainers ("Daniel Polani")) (:maintainer "Daniel Polani") (:keywords "shell" "comint"))])
- (shell-here . [(20220102 1703) nil "Open a shell relative to the working directory" single ((:commit . "eeb437ff26d62a5009046b1b3b4503b768e3131a") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com") (:keywords "unix" "tools" "processes"))])
- (shell-history . [(20100505 839) nil "integration with shell history" single ((:commit . "ee371a81f2d2bf5a308344078329ca1e9b5ed38c") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "processes" "convenience") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/shell-history.el"))])
- (shell-maker . [(20230430 1957) ((emacs (27 1))) "Interaction mode for making comint shells" single ((:commit . "9d88c4c4cc81df7060ca746dfe97a999ba27cf2f") (:authors ("Alvaro Ramirez https://xenodium.com")) (:maintainers ("Alvaro Ramirez https://xenodium.com")) (:maintainer "Alvaro Ramirez https://xenodium.com") (:url . "https://github.com/xenodium/chatgpt-shell"))])
- (shell-pop . [(20200315 1139) ((emacs (24)) (cl-lib (0 5))) "helps you to use shell easily on Emacs. Only one key action to work." single ((:commit . "4b4394037940a890a313d715d203d9ead2d156a6") (:authors ("Kazuo YAGI" . "kazuo.yagi@gmail.com")) (:maintainers ("Kazuo YAGI" . "kazuo.yagi@gmail.com")) (:maintainer "Kazuo YAGI" . "kazuo.yagi@gmail.com") (:keywords "shell" "terminal" "tools") (:url . "http://github.com/kyagi/shell-pop-el"))])
- (shell-split-string . [(20151224 1008) nil "Split strings using shell-like syntax" single ((:commit . "19f6f999c33cc66a4c91bacdcc3697c25d97bf5a") (:authors ("10sr <8.slashes+el [at] gmail [dot] com>")) (:maintainers ("10sr <8.slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8.slashes+el [at] gmail [dot] com>") (:keywords "utility" "library" "shell" "string") (:url . "https://github.com/10sr/shell-split-string-el"))])
- (shell-switcher . [(20210509 1045) ((emacs (24))) "Provide fast switching between shell buffers." tar ((:commit . "ed74b20fa12935be0068765f5bc8de97b92a8020") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:keywords "emacs" "package" "elisp" "shell" "eshell" "term" "switcher") (:url . "https://github.com/DamienCassou/shell-switcher"))])
- (shell-toggle . [(20150226 1411) nil "Toggle to and from the shell buffer" single ((:commit . "0d01bd9a780fdb7fe6609c552523f4498649a3b9") (:authors ("Mikael Sjödin" . "mic@docs.uu.se") ("Matthieu Moy") ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Mikael Sjödin" . "mic@docs.uu.se")) (:maintainer "Mikael Sjödin" . "mic@docs.uu.se") (:keywords "processes") (:url . "https://github.com/knu/shell-toggle.el"))])
- (shellcop . [(20220629 817) ((emacs (25 1))) "Analyze info&error in shell-mode" single ((:commit . "3f051e42288ddfe4cd7cd0ee62efad90227de24b") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainers ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:keywords "unix" "tools") (:url . "https://github.com/redguardtoo/shellcop"))])
- (shelldoc . [(20230207 250) ((cl-lib (0 3)) (s (1 9 0))) "shell command editing support with man page." single ((:commit . "178d78d08e94b273b23ab1a32c5be509fdfe2286") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "applications") (:url . "http://github.com/mhayashi1120/Emacs-shelldoc"))])
- (shelldon . [(20220325 1305) ((emacs (27 1))) "An enhanced shell interface" single ((:commit . "8d073ce580e7782ed863fc6e19dc33b4f73c0d79") (:authors ("overdr0ne" . "scmorris.dev@gmail.com")) (:maintainers ("overdr0ne" . "scmorris.dev@gmail.com")) (:maintainer "overdr0ne" . "scmorris.dev@gmail.com") (:keywords "tools" "convenience") (:url . "https://github.com/Overdr0ne/shelldon"))])
- (shelltest-mode . [(20180501 141) nil "Major mode for shelltestrunner" single ((:commit . "5fea8c9394380e822971a171905b6b5ab9be812d") (:authors ("Dustin Fechner" . "dfe@rtrn.io")) (:maintainers ("Dustin Fechner" . "dfe@rtrn.io")) (:maintainer "Dustin Fechner" . "dfe@rtrn.io") (:keywords "languages") (:url . "https://github.com/rtrn/shelltest-mode"))])
- (shen-elisp . [(20221211 1313) ((emacs (24 4))) "Shen implementation in Elisp" tar ((:commit . "957ab44654fc7a7cc1b78181d244fa25166f9b09") (:authors ("Aditya Siram" . "aditya.siram@gmail.com")) (:maintainer "Aditya Siram" . "aditya.siram@gmail.com") (:url . "https://github.com/deech/shen-elisp"))])
- (shenshou . [(20230226 320) ((emacs (27 1))) "Download&Extract subtitles from opensubtitles.org" single ((:commit . "0a00b9f5a86a54324f88c7d27b603f136ee2fb0b") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "convenience" "tools") (:url . "http://github.com/redguardtoo/shenshou"))])
- (shfmt . [(20220602 1535) ((emacs (24)) (reformatter (0 3))) "Reformat shell scripts using shfmt" single ((:commit . "279a51defa3e0d97dc40b8a26e078699d4e22e90") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages") (:url . "https://github.com/purcell/emacs-shfmt"))])
- (shift-number . [(20170301 1459) nil "Increase/decrease the number at point" single ((:commit . "94c3713cc11283a831f66d5205d112762edc186b") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainers ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:keywords "convenience") (:url . "https://github.com/alezost/shift-number.el"))])
- (shift-text . [(20130831 1655) ((cl-lib (1 0)) (es-lib (0 3))) "Move the region in 4 directions, in a way similar to Eclipse's" single ((:commit . "1be9cbf994000022172ceb746fe1d597f57ea8ba") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/shift-text"))])
- (shimbun . [(20230324 125) nil "interfacing with web newspapers" tar ((:commit . "f8819bca0c97970662cd4214f8f3104ab4a376c1") (:authors ("TSUCHIYA Masatoshi" . "tsuchiya@namazu.org") ("Akihiro Arisawa " . "ari@mbf.sphere.ne.jp") ("Yuuichi Teranishi " . "teranisi@gohome.org") ("Katsumi Yamaoka " . "yamaoka@jpl.org")) (:maintainers ("TSUCHIYA Masatoshi" . "tsuchiya@namazu.org")) (:maintainer "TSUCHIYA Masatoshi" . "tsuchiya@namazu.org") (:keywords "news"))])
- (shm . [(20180327 57) nil "Structured Haskell Mode" tar ((:commit . "7f9df73f45d107017c18ce4835bbc190dfe6782e") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainers ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:keywords "development" "haskell" "structured"))])
- (shoulda . [(20140616 1833) ((cl-lib (0 5))) "Shoulda test support for ruby" single ((:commit . "24dc6b6138a06edde9c8d13a6aaa1654d1d7de54") (:authors ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainers ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com") (:keywords "ruby" "tests" "shoulda"))])
- (show-css . [(20160210 1408) ((doom (1 3)) (s (1 10 0))) "Show the css of the html attribute the cursor is on" tar ((:commit . "771daeddd4df7a7c10f66419a837145649bab63b") (:authors ("Sheldon McGrandle" . "developer@rednemesis.com")) (:maintainers ("Sheldon McGrandle" . "developer@rednemesis.com")) (:maintainer "Sheldon McGrandle" . "developer@rednemesis.com") (:keywords "hypermedia") (:url . "https://github.com/smmcg/showcss-mode"))])
- (show-eol . [(20220919 631) ((emacs (24 4))) "Show end of line symbol in buffer" single ((:commit . "ad3aa8f4fa0d1b20f8526536f0ac35386f521372") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "end" "eol" "line") (:url . "https://github.com/jcs-elpa/show-eol"))])
- (show-font-mode . [(20201225 2217) ((emacs (25 1))) "Show font at point on mode line" single ((:commit . "c7328b85655688d257b769192d26b9f5c9bbe26d") (:authors ("Melissa Boiko" . "melissa@namakajiri.net")) (:maintainers ("Melissa Boiko" . "melissa@namakajiri.net")) (:maintainer "Melissa Boiko" . "melissa@namakajiri.net") (:keywords "faces" "i18n" "unicode" "fonts" "fontsets") (:url . "https://github.com/melissaboiko/show-font-mode"))])
- (showtip . [(20090830 1040) nil "Show tip at cursor" single ((:commit . "930da302809a4257e8d69425455b29e1cc91949b") (:authors ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainers ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainer "Ye Wenbin" . "wenbinye@gmail.com") (:keywords "help"))])
- (shpec-mode . [(20150530 922) nil "Minor mode for shpec specification" single ((:commit . "76bccd63e3b70233a6c9ca0798dd03550952cc76") (:authors ("AdrieanKhisbe" . "adriean.khisbe@live.fr")) (:maintainers ("AdrieanKhisbe" . "adriean.khisbe@live.fr")) (:maintainer "AdrieanKhisbe" . "adriean.khisbe@live.fr") (:keywords "languages" "tools") (:url . "http://github.com/shpec/shpec-mode"))])
- (shr-tag-pre-highlight . [(20200626 1047) ((emacs (25 1)) (language-detection (0 1 0))) "Syntax highlighting code block in HTML" single ((:commit . "931c447bc0d6c134ddc9657c664eeee33afbc54d") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:keywords "html") (:url . "https://github.com/xuchunyang/shr-tag-pre-highlight.el"))])
- (shrface . [(20220523 1440) ((emacs (25 1)) (org (9 0)) (language-detection (0 1 0))) "Extend shr/eww with org features and analysis capability" single ((:commit . "b3916e1ebe2477c031db1440d9b57e373c0354fe") (:authors ("Damon Chan" . "elecming@gmail.com")) (:maintainers ("Damon Chan" . "elecming@gmail.com")) (:maintainer "Damon Chan" . "elecming@gmail.com") (:keywords "faces") (:url . "https://github.com/chenyanming/shrface"))])
- (shrink-path . [(20190208 1335) ((emacs (24)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0))) "fish-style path" single ((:commit . "c14882c8599aec79a6e8ef2d06454254bb3e1e41") (:authors ("Benjamin Andresen")) (:maintainers ("Benjamin Andresen")) (:maintainer "Benjamin Andresen") (:url . "https://gitlab.com/bennya/shrink-path.el"))])
- (shrink-whitespace . [(20181003 321) nil "Whitespace removal DWIM key" single ((:commit . "0407b89c142bd17e65edb666f35e2c6755bd0867") (:authors ("Jean-Christophe Petkovich" . "jcpetkovich@gmail.com")) (:maintainers ("Jean-Christophe Petkovich" . "jcpetkovich@gmail.com")) (:maintainer "Jean-Christophe Petkovich" . "jcpetkovich@gmail.com") (:keywords "convenience") (:url . "https://gitlab.com/jcpetkovich/shrink-whitespace.el"))])
- (shroud . [(20210220 1952) ((emacs (25)) (epg (1 0 0)) (s (1 6 0)) (bui (1 2 0)) (dash (2 18 0))) "Shroud secrets" tar ((:commit . "2e6ff2bab4a1e798c090c9d7fbd90b7f3463d5c5") (:authors ("Amar Singh" . "nly@disroot.org")) (:maintainers ("Amar Singh" . "nly@disroot.org")) (:maintainer "Amar Singh" . "nly@disroot.org") (:keywords "tools" "password") (:url . "https://github.com/o-nly/emacs-shroud"))])
- (shut-up . [(20210403 1249) ((cl-lib (0 3)) (emacs (24))) "Shut up would you!" single ((:commit . "ff6f06f3b080ee833a25a22da8cb5b96e911dc77") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/shut-up.el"))])
- (shx . [(20221224 2230) ((emacs (24 4))) "Extras for the comint-mode shell" single ((:commit . "b99d16f36bc278d668d8428c4bc9af77064c336a") (:authors ("Chris Rayner and contributors")) (:maintainers ("Chris Rayner" . "dchrisrayner@gmail.com")) (:maintainer "Chris Rayner" . "dchrisrayner@gmail.com") (:keywords "terminals" "processes" "comint" "shell" "repl") (:url . "https://github.com/riscy/shx-for-emacs"))])
- (sibilant-mode . [(20151119 2145) nil "Support for the Sibilant programming language" single ((:commit . "5baf8c3e80ee0736c7298a2a17fb615ba5ac0d2d") (:authors ("Jacob Rothstein" . "hi@jbr.me")) (:maintainers ("Jacob Rothstein" . "hi@jbr.me")) (:maintainer "Jacob Rothstein" . "hi@jbr.me") (:keywords "languages") (:url . "http://sibilantjs.info"))])
- (sicp . [(20200512 1137) nil "Structure and Interpretation of Computer Programs in info format" tar ((:commit . "4002d83083d520c6b5ede2df36cc2cee885d450a") (:authors ("Hal Abelson") ("Jerry Sussman") ("Julie Sussman")) (:maintainers ("Hal Abelson")) (:maintainer "Hal Abelson") (:url . "https://mitpress.mit.edu/sicp"))])
- (side-hustle . [(20210627 701) ((emacs (24 4)) (seq (2 20))) "Hustle through Imenu in a side window" single ((:commit . "1f4cd5e7cfbabb00c6d87e913770f21e3d16c957") (:authors ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainers ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainer "Paul W. Rankin" . "pwr@bydasein.com") (:keywords "convenience") (:url . "https://github.com/rnkn/side-hustle"))])
- (side-notes . [(20210709 1403) ((emacs (24 4))) "Easy access to a directory notes file" single ((:commit . "41fe8544661a772f764a0924e04080f258053955") (:authors ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainers ("Paul W. Rankin" . "pwr@bydasein.com")) (:maintainer "Paul W. Rankin" . "pwr@bydasein.com") (:keywords "convenience") (:url . "https://github.com/rnkn/side-notes"))])
- (sidecar-locals . [(20230109 536) ((emacs (27 1))) "A flexible alternative to built-in dir-locals" single ((:commit . "882923811e9de84c8ebc2f9fe65e9673d7d1f469") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-sidecar-locals"))])
- (sideline . [(20230411 1926) ((emacs (27 1))) "Show information on the side" single ((:commit . "77c363239e3edce287eb15d59e3c28b21d8ddb79") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience") (:url . "https://github.com/emacs-sideline/sideline"))])
- (sideline-blame . [(20230406 2312) ((emacs (27 1)) (sideline (0 1 0)) (vc-msg (1 1 1))) "Show blame messages with sideline" single ((:commit . "4d3343795bc95662adb65c85bcbb41947862699f") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "blame") (:url . "https://github.com/emacs-sideline/sideline-blame"))])
- (sideline-flycheck . [(20230402 1816) ((emacs (27 1)) (sideline (0 1 1)) (flycheck (0 14)) (ht (2 4))) "Show flycheck errors with sideline" single ((:commit . "3d74a008835eff71899b9455cd00f989378fe70e") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "flycheck") (:url . "https://github.com/emacs-sideline/sideline-flycheck"))])
- (sideline-flymake . [(20230402 1816) ((emacs (27 1)) (sideline (0 1 0))) "Show flymake errors with sideline" single ((:commit . "316325cb050d13f33e83e7d7823e3730a70ecf4e") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "flymake") (:url . "https://github.com/emacs-sideline/sideline-flymake"))])
- (sideline-lsp . [(20221231 1636) ((emacs (27 1)) (sideline (0 1 0)) (lsp-mode (6 0)) (dash (2 18 0)) (ht (2 4)) (s (1 12 0))) "Show lsp information with sideline" single ((:commit . "38ba700db1769de216989fb9217795934147d160") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "lsp") (:url . "https://github.com/emacs-sideline/sideline-lsp"))])
- (sift . [(20200421 1423) nil "Front-end for sift, a fast and powerful grep alternative" single ((:commit . "cdddba2d183146c340915003f1b5d09d13712c22") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "sift" "ack" "pt" "ag" "grep" "search") (:url . "https://github.com/nlamirault/sift.el"))])
- (signal . [(20160816 1438) ((emacs (24)) (cl-lib (0 5))) "Advanced hook" single ((:commit . "aa58327e2297df921d72a0370468b48663efd438") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:keywords "internal" "lisp" "processes" "tools") (:url . "https://github.com/mola-T/signal"))])
- (silkworm-theme . [(20210215 1120) ((emacs (24))) "Light theme with pleasant, low contrast colors." single ((:commit . "ff80e9294da0fb093e15097ac62153ef4a64a889") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler"))])
- (simp . [(20180607 254) nil "Simple project definition, chiefly for file finding, and grepping" tar ((:commit . "d4d4b8547055347828bedccbeffdb4fd2d5a5d34") (:authors ("atom smith")) (:maintainers ("atom smith")) (:maintainer "atom smith") (:keywords "project" "grep" "find") (:url . "https://github.com/re5et/simp"))])
- (simple-bookmarks . [(20190204 1426) ((cl-lib (0 5))) "Bookmark / functioncall manager" tar ((:commit . "54e8d771bcdb0eb235b31c0aa9642171369500e5") (:authors ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainers ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainer "Julian T. Knabenschuh" . "jtkdevelopments@gmail.com") (:keywords "bookmark" "functioncall") (:url . "https://github.com/jtkDvlp/simple-bookmarks"))])
- (simple-call-tree . [(20210625 2001) ((emacs (24 3)) (anaphora (1 0 0))) "analyze source code based on font-lock text-properties" single ((:commit . "26de24bcde0eae911a0185bb5a6b74b9864fcfc3") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "programming") (:url . "http://www.emacswiki.org/emacs/download/simple-call-tree.el"))])
- (simple-httpd . [(20191103 1446) ((cl-lib (0 3))) "pure elisp HTTP server" single ((:commit . "22ce66ea43e0eadb9ec1d691a35d9695fc29cee6") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/emacs-http-server"))])
- (simple-indentation . [(20221127 1232) ((emacs (24 3)) (dash (2 18 0)) (s (1 12 0))) "Simplify writing indentation functions, alternative to SMIE" tar ((:commit . "74efe02aa6c1612ae9b32b88f97b7d6d309726b2") (:authors ("Semen Khramtsov" . "hrams205@gmail.com")) (:maintainers ("Semen Khramtsov" . "hrams205@gmail.com")) (:maintainer "Semen Khramtsov" . "hrams205@gmail.com") (:url . "https://github.com/semenInRussia/simple-indentation.el"))])
- (simple-modeline . [(20210312 1048) ((emacs (26 1))) "A simple mode-line configuration for Emacs" tar ((:commit . "119d8224a8ae0ee17b09ac1fed6cdb9cb1d048fd") (:authors ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainers ("Eder Elorriaga" . "gexplorer8@gmail.com")) (:maintainer "Eder Elorriaga" . "gexplorer8@gmail.com") (:keywords "mode-line" "faces") (:url . "https://github.com/gexplorer/simple-modeline"))])
- (simple-mpc . [(20220216 102) ((s (1 10 0))) "provides a simple interface to mpc" tar ((:commit . "57ee14ada8aec477ddde5e4f632c8d3d99a66535") (:authors ("Joren Van Onder" . "joren@jvo.sh")) (:maintainers ("Joren Van Onder" . "joren@jvo.sh")) (:maintainer "Joren Van Onder" . "joren@jvo.sh") (:keywords "multimedia" "mpd" "mpc") (:url . "https://github.com/jorenvo/simple-mpc"))])
- (simple-paren . [(20220713 902) ((emacs (24)) (cl-lib (0 5))) "Non-electrical insert paired delimiter, wrap" single ((:commit . "feac5e500f49e3825e2e3017d94459e663ebd5ff") (:authors ("Andreas Röhler, Steve Purcell")) (:maintainers ("Andreas Röhler, Steve Purcell")) (:maintainer "Andreas Röhler, Steve Purcell") (:keywords "convenience") (:url . "https://github.com/andreas-roehler/simple-paren"))])
- (simple-rtm . [(20160222 1534) ((rtm (0 1)) (dash (2 0 0))) "Interactive Emacs mode for Remember The Milk" single ((:commit . "37c5feffea7c9b571279b6f549d06cf9c0720273") (:authors ("Moritz Bunkus" . "morit@bunkus.org")) (:maintainers ("Moritz Bunkus" . "morit@bunkus.org")) (:maintainer "Moritz Bunkus" . "morit@bunkus.org") (:keywords "remember" "the" "milk" "productivity" "todo"))])
- (simple-screen . [(20200926 109) nil "Simple screen configuration manager" single ((:commit . "3ce535755986f7c25890d11e42fa621a3a069a4f") (:authors ("Tadashi Watanabe" . "wac@umiushi.org")) (:maintainers ("Tadashi Watanabe" . "wac@umiushi.org")) (:maintainer "Tadashi Watanabe" . "wac@umiushi.org") (:keywords "tools") (:url . "https://github.com/wachikun/simple-screen"))])
- (simpleclip . [(20220518 1251) nil "Simplified access to the system clipboard" single ((:commit . "023f239275115169c3a3637ad95fae4a036c005e") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "convenience") (:url . "http://github.com/rolandwalker/simpleclip"))])
- (simplecov . [(20221206 350) ((dash (2 19)) (emacs (28))) "Colorize untested ruby code" single ((:commit . "215f2bdc5d2ef9b4439779ba4d3129210c9f34ab") (:authors ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainers ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainer "Ryan Davis" . "ryand-ruby@zenspider.com") (:keywords "tools" "languages") (:url . "https://github.org/zenspider/elisp"))])
- (simplenote . [(20141118 1440) nil "Interact with simple-note.appspot.com" single ((:commit . "734603e877b2d642162ca45f799d2f7b956d2ea0") (:authors ("Konstantinos Efstathiou" . "konstantinos@efstathiou.gr")) (:maintainers ("Konstantinos Efstathiou" . "konstantinos@efstathiou.gr")) (:maintainer "Konstantinos Efstathiou" . "konstantinos@efstathiou.gr") (:keywords "simplenote"))])
- (simplenote2 . [(20190321 933) ((request-deferred (0 2 0)) (uuidgen (20140918)) (unicode-escape (1 1))) "Interact with app.simplenote.com" tar ((:commit . "760ffecda63bd218876b623f46d332e3ef079be6") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainers ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com") (:keywords "simplenote"))])
- (simplezen . [(20130421 1000) ((s (1 4 0)) (dash (1 1 0))) "A simple subset of zencoding-mode for Emacs." single ((:commit . "9f91554a3f7f4e9b2b5ec009effafbf12b091973") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))])
- (simplicity-theme . [(20221016 1444) ((emacs (24 1))) "A minimalist dark theme" single ((:commit . "f4aab6aa07b536688eb62355b83dde5fcd16e049") (:authors ("Matthieu Petiteau" . "mpetiteau.pro@gmail.com")) (:maintainers ("Matthieu Petiteau" . "mpetiteau.pro@gmail.com")) (:maintainer "Matthieu Petiteau" . "mpetiteau.pro@gmail.com") (:keywords "faces" "theme" "minimal") (:url . "http://github.com/smallwat3r/emacs-simplicity-theme"))])
- (siri-shortcuts . [(20211229 1833) ((emacs (25 2))) "Interact with Siri Shortcuts" single ((:commit . "190f242f71e071adfd89fa1f2f6ea22b62afd133") (:authors ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainers ("Daniils Petrovs" . "thedanpetrov@gmail.com")) (:maintainer "Daniils Petrovs" . "thedanpetrov@gmail.com") (:keywords "convenience" "multimedia") (:url . "https://github.com/DaniruKun/siri-shortcuts.el"))])
- (sis . [(20230305 1006) ((emacs (25 1)) (terminal-focus-reporting (0 0))) "Less manual switch for native or OS input source (input method)." single ((:commit . "e4142baa470e5f33dd508bce0264359dc5204b6f") (:keywords "convenience") (:url . "https://github.com/laishulu/emacs-smart-input-source"))])
- (sisyphus . [(20230415 1850) ((emacs (27 1)) (compat (29 1 3 4)) (elx (1 6 0)) (llama (0 3 0)) (magit (3 4 0))) "Create releases of Emacs packages" single ((:commit . "c75298b35c40a2267e5b37689e4df7c8c970908b") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "git" "tools" "vc") (:url . "https://github.com/magit/sisyphus"))])
- (sixcolors-mode . [(20230406 1031) ((emacs (27 1))) "A customizable horizontal scrollbar" single ((:commit . "4124a8cf664b04a4bf4c39f7c3b7da3e480b99c8") (:authors ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainers ("Davide Mastromatteo" . "mastro35@gmail.com")) (:maintainer "Davide Mastromatteo" . "mastro35@gmail.com") (:keywords "convenience" "colors") (:url . "https://github.com/mastro35/sixcolors-mode"))])
- (skeletor . [(20210129 239) ((s (1 7 0)) (f (0 14 0)) (dash (2 2 0)) (cl-lib (0 3)) (let-alist (1 0 3)) (emacs (24 1))) "Provides project skeletons for Emacs" tar ((:commit . "f6e560a0bfe459e0b8a268047920ce1148f2ebf6") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainers ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))])
- (skerrick . [(20220306 2139) ((emacs (27 1)) (request (0 3 2))) "REPL-driven development for NodeJS" single ((:commit . "015de8369b8b6be0d4d1e21c24239a037350e87e") (:authors ("Rafael Nicdao <https://github.com/anonimitoraf>")) (:maintainers ("Rafael Nicdao" . "nicdaoraf@gmail.com")) (:maintainer "Rafael Nicdao" . "nicdaoraf@gmail.com") (:keywords "languages" "javascript" "js" "repl" "repl-driven") (:url . "https://github.com/anonimitoraf/skerrick"))])
- (sketch-themes . [(20230210 1507) ((emacs (26 1))) "Sketch color themes" tar ((:commit . "5534254232f1a556ec20952c75b5506625573049") (:authors ("Daw-Ran Liou" . "hi@dawranliou.com")) (:maintainers ("Daw-Ran Liou" . "hi@dawranliou.com")) (:maintainer "Daw-Ran Liou" . "hi@dawranliou.com") (:keywords "faces") (:url . "https://github.com/dawranliou/sketch-themes/"))])
- (skewer-less . [(20210510 532) ((skewer-mode (1 5 3))) "Skewer support for live LESS stylesheet updates" single ((:commit . "baa973581c2ab7326db65803df97d1a7382b6564") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages" "tools"))])
- (skewer-mode . [(20200304 1142) ((simple-httpd (1 4 0)) (js2-mode (20090723)) (emacs (24))) "live browser JavaScript, CSS, and HTML interaction" tar ((:commit . "e5bed351939c92a1f788f78398583c2f83f1bb3c") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/skewer-mode"))])
- (skewer-reload-stylesheets . [(20160725 1220) ((skewer-mode (1 5 3))) "live-edit CSS, SCSS, Less, and friends." tar ((:commit . "3207abca9551660407a6b009cb40fb32bbb550da") (:authors ("Nate Eagleson" . "nate@nateeag.com")) (:maintainers ("Nate Eagleson" . "nate@nateeag.com")) (:maintainer "Nate Eagleson" . "nate@nateeag.com"))])
- (skype . [(20160711 824) nil "skype UI for emacs users.." tar ((:commit . "8e3b33e620ed355522aa36434ff41e3ced080629") (:authors ("SAKURAI Masashi" . "m.sakurai@kiwanami.net")) (:maintainers ("SAKURAI Masashi" . "m.sakurai@kiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakurai@kiwanami.net") (:keywords "skype" "chat"))])
- (sl . [(20161217 1404) ((cl-lib (0 5))) "An Emacs clone of sl(1)" tar ((:commit . "0882117728be91276b815e18c2a66106bf9d69d3") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainers ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/sl.el"))])
- (slack . [(20211129 310) ((websocket (1 8)) (request (0 2 0)) (oauth2 (0 10)) (circe (2 2)) (alert (1 2)) (emojify (0 2))) "Slack client for Emacs" tar ((:commit . "ff46d88726482211e3ac3d0b9c95dd4fdffe11c2") (:authors ("yuya.minami" . "yuya.minami@yuyaminami-no-MacBook-Pro.local")) (:maintainer "yuya.minami" . "yuya.minami@yuyaminami-no-MacBook-Pro.local") (:keywords "tools") (:url . "https://github.com/yuya373/emacs-slack"))])
- (slideview . [(20150324 2240) ((cl-lib (0 3))) "File slideshow" single ((:commit . "b6d170bda139aedf81b47dc55cbd1a3af512fb4c") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "files") (:url . "https://github.com/mhayashi1120/Emacs-slideview"))])
- (slim-mode . [(20170728 1348) nil "Major mode for editing Slim files" single ((:commit . "3636d18ab1c8b316eea71c4732eb44743e2ded87") (:authors ("Nathan Weizenbaum")) (:maintainers ("Nathan Weizenbaum")) (:maintainer "Nathan Weizenbaum") (:keywords "markup" "language") (:url . "http://github.com/slim-template/emacs-slim"))])
- (slime . [(20230314 915) ((cl-lib (0 5)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:commit . "dd179f4a0c6874fe0e49fb6c460e9e52a5f58833") (:keywords "languages" "lisp" "slime") (:url . "https://github.com/slime/slime"))])
- (slime-company . [(20210124 1627) ((emacs (24 4)) (slime (2 13)) (company (0 9 0))) "slime completion backend for company mode" single ((:commit . "f20ecc4104d4c35052696e7e760109fb02060e72") (:authors ("Ole Arndt" . "anwyn@sugarshark.com")) (:maintainers ("Ole Arndt" . "anwyn@sugarshark.com")) (:maintainer "Ole Arndt" . "anwyn@sugarshark.com") (:keywords "convenience" "lisp" "abbrev"))])
- (slime-docker . [(20210426 1422) ((emacs (24 4)) (slime (2 16)) (docker-tramp (0 1))) "Integration of SLIME with Docker containers" tar ((:commit . "c7d073720f2bd8e9f72a20309fff2afa4c4e798d") (:keywords "docker" "lisp" "slime") (:url . "https://gitlab.common-lisp.net/cl-docker-images/slime-docker"))])
- (slime-repl-ansi-color . [(20230214 1453) ((emacs (24)) (slime (2 3 1))) "Turn on ANSI colors in REPL output;" single ((:commit . "9e8af90490332217e45d7568f1690df3f4e25d4b") (:authors ("Max Mikhanosha" . "max@openchat.com")) (:maintainers ("Augustin Fabre" . "augustin@augfab.fr")) (:maintainer "Augustin Fabre" . "augustin@augfab.fr") (:keywords "lisp") (:url . "https://gitlab.com/augfab/slime-repl-ansi-color"))])
- (slime-theme . [(20170808 1322) ((emacs (24 0))) "an Emacs 24 theme based on Slime (tmTheme)" single ((:commit . "8e5880ac69e0b6a079103001cc3a90bdb688998f") (:authors ("Jason Milkins")) (:maintainers ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))])
- (slime-volleyball . [(20190701 1624) nil "An SVG Slime Volleyball Game" tar ((:commit . "6c135ad18897c3566d4dadfe847061532600ba2e") (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) (:maintainers ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") (:keywords "games"))])
- (slirm . [(20160201 1425) ((emacs (24 4))) "Systematic Literature Review Mode for Emacs." single ((:commit . "9adfbe1fc67580e7d0d90f7e927a25d63a797464") (:authors ("Florian Biermann" . "fbie@itu.dk")) (:maintainers ("Florian Biermann" . "fbie@itu.dk")) (:maintainer "Florian Biermann" . "fbie@itu.dk") (:url . "http://github.com/fbie/slirm"))])
- (slovak-holidays . [(20211018 1754) nil "Adds a list of slovak holidays to Emacs calendar" single ((:commit . "bedd26dd45ca497c0028a11e94a905560fcdb2f1") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "calendar"))])
- (slow-keys . [(20220807 1425) ((emacs (24 1))) "Slow keys mode to avoid RSI" single ((:commit . "b951ae4bdcea56ced03f227b82b28c3d91d15e61") (:authors ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainers ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainer "Manuel Uberti" . "manuel.uberti@inventati.org") (:keywords "convenience") (:url . "https://github.com/manuel-uberti/slow-keys"))])
- (slstats . [(20170823 849) ((cl-lib (0 5)) (emacs (24))) "Acquire and display stats about Second Life" single ((:commit . "e9696066abf3f2b7b818a57c062530dfd9377033") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "games") (:url . "https://github.com/davep/slstats.el"))])
- (slurm-mode . [(20210519 1109) nil "Interaction with the SLURM job scheduling system" tar ((:commit . "4e6ac09245313cf4018b8e5784b2fca8604269d7") (:url . "https://github.com/ffevotte/slurm.el"))])
- (sly . [(20230425 2123) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" tar ((:commit . "fa3bcf0237b420d1a3b1670eb35d7c5f96f94c62") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/joaotavora/sly"))])
- (sly-asdf . [(20221119 2235) ((emacs (24 3)) (sly (1 0 0 -2 2)) (popup (0 5 3))) "ASDF system support for SLY" tar ((:commit . "6f9d751469bb82530db1673c22e7437ca6c95f45") (:maintainers ("Matt George" . "mmge93@gmail.com")) (:maintainer "Matt George" . "mmge93@gmail.com") (:keywords "languages" "lisp" "sly" "asdf") (:url . "https://github.com/mmgeorge/sly-asdf"))])
- (sly-hello-world . [(20200225 1755) ((sly (1 0 0 -2 2))) "A template SLY contrib" tar ((:commit . "be257e9ad354db690c7378e89899335597348a0d") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/capitaomorte/sly-hello-world"))])
- (sly-macrostep . [(20191211 1630) ((sly (1 0 0 -2 2)) (macrostep (0 9))) "fancy macro-expansion via macrostep.el" tar ((:commit . "5113e4e926cd752b1d0bcc1508b3ebad5def5fad") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/capitaomorte/sly-macrostep"))])
- (sly-named-readtables . [(20191013 2138) ((sly (1 0 0 -2 2))) "Support named readtables in Common Lisp files" tar ((:commit . "a5a42674ccffa97ccd5e4e9742beaf3ea719931f") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/capitaomorte/sly-named-readtables"))])
- (sly-quicklisp . [(20211206 948) ((sly (1 0 0 -2 2))) "Quicklisp support for SLY" tar ((:commit . "34c73d43dd9066262387c626c17a9b486db07b2d") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainers ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/capitaomorte/sly-quicklisp"))])
- (sly-repl-ansi-color . [(20171020 1516) ((sly (0)) (cl-lib (0 5))) "Add ANSI colors support to the sly mrepl." single ((:commit . "b9cd52d1cf927bf7e08582d46ab0bcf1d4fb5048") (:authors ("Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com") ("Max Mikhanosha")) (:maintainers ("Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com")) (:maintainer "Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com") (:keywords "sly") (:url . "https://github.com/PuercoPop/sly-repl-ansi-color"))])
- (smart-backspace . [(20171014 526) nil "intellj like backspace" single ((:commit . "acb390628a181a993aa0d137624f2e5283efa6d9") (:authors ("Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com")) (:maintainers ("Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com")) (:maintainer "Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com") (:url . "https://github.com/itome/smart-backspace"))])
- (smart-comment . [(20160322 1839) nil "smarter commenting" single ((:commit . "ad4e0de29115dc010733b9060d3dab02836b15e1") (:authors ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainers ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainer "Simon Friis Vindum" . "simon@vindum.io") (:keywords "lisp"))])
- (smart-compile . [(20230505 1013) nil "an interface to `compile'" single ((:commit . "5a4a4b85b48e17d4cc6275f2618c4ae9b7f42418") (:authors ("Seiji Zenitani" . "zenitani@gmail.com")) (:maintainers ("Seiji Zenitani" . "zenitani@gmail.com")) (:maintainer "Seiji Zenitani" . "zenitani@gmail.com") (:keywords "tools" "unix"))])
- (smart-cursor-color . [(20201207 2228) nil "Change cursor color dynamically" single ((:commit . "d532f0b27e37cbd3bfc0be09d0b54aa38f1648f1") (:authors ("7696122")) (:maintainers ("7696122")) (:maintainer "7696122") (:keywords "cursor" "color" "face") (:url . "https://github.com/7696122/smart-cursor-color/"))])
- (smart-dash . [(20220704 1645) nil "Smart-Dash minor mode" single ((:commit . "2c31849b09d504010c800584b6ab39d61c647bd6") (:authors ("Dennis Lambe Jr." . "malsyned@malsyned.net")) (:maintainers ("Dennis Lambe Jr." . "malsyned@malsyned.net")) (:maintainer "Dennis Lambe Jr." . "malsyned@malsyned.net"))])
- (smart-forward . [(20140430 713) ((expand-region (0 8 0))) "Semantic navigation" single ((:commit . "7b6dbfdbd4b646376a567c70e1a161545431b72b") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "navigation"))])
- (smart-hungry-delete . [(20220516 1538) ((emacs (24 3))) "smart hungry deletion of whitespace" single ((:commit . "e06525cc1841805ebe470c876d6b966de90bc275") (:authors ("Hauke Rehfeld" . "emacs@haukerehfeld.de")) (:maintainers ("Hauke Rehfeld" . "emacs@haukerehfeld.de")) (:maintainer "Hauke Rehfeld" . "emacs@haukerehfeld.de") (:keywords "convenience") (:url . "https://github.com/hrehfeld/emacs-smart-hungry-delete"))])
- (smart-indent-rigidly . [(20141206 15) nil "Smart rigid indenting" single ((:commit . "323d1fe4d0b81e598249aad01bc44adb180ece0e") (:authors ("atom smith")) (:maintainers ("atom smith")) (:maintainer "atom smith") (:keywords "indenting" "coffee-mode" "haml-mode" "sass-mode") (:url . "https://github.com/re5et/smart-indent-rigidly"))])
- (smart-jump . [(20210304 844) ((emacs (25 1))) "Smart go to definition." tar ((:commit . "3392eb35e3cde37e6f5f2a48dc0db15ca535143c") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "tools") (:url . "https://github.com/jojojames/smart-jump"))])
- (smart-mark . [(20150912 210) nil "Restore point after C-g when mark" single ((:commit . "d179cdc3f53001a5ce99d5095f493cdf3a792567") (:authors ("Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Kai Yu" . "yeannylam@gmail.com") (:keywords "mark" "restore"))])
- (smart-mode-line . [(20211005 233) ((emacs (24 3)) (rich-minority (0 1 1))) "A color coded smart mode-line." tar ((:commit . "abcb0ab6f7110a03d6c7428bae67cf8731496433") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "mode-line" "faces" "themes") (:url . "http://github.com/Malabarba/smart-mode-line"))])
- (smart-mode-line-atom-one-dark-theme . [(20230107 1731) ((emacs (24 3)) (smart-mode-line (2 10))) "Atom-one-dark theme for smart-mode-line" single ((:commit . "5f2056d7c24e9c8964f700ab6ec6f00ba4315eb8") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainers ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it") (:keywords "mode-line" "themes" "faces") (:url . "https://github.com/daviderestivo/smart-mode-line-atom-one-dark-theme"))])
- (smart-mode-line-powerline-theme . [(20211005 233) ((emacs (24 3)) (powerline (2 2)) (smart-mode-line (2 5))) "smart-mode-line theme that mimics the powerline appearance." tar ((:commit . "abcb0ab6f7110a03d6c7428bae67cf8731496433") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainers ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:keywords "mode-line" "faces" "themes") (:url . "http://github.com/Bruce-Connor/smart-mode-line"))])
- (smart-newline . [(20131208 340) nil "Provide smart newline for one keybind." single ((:commit . "c50ab035839b307c66d439083b6761cb7db5e972") (:authors ("Satoshi Namai")) (:maintainers ("Satoshi Namai")) (:maintainer "Satoshi Namai"))])
- (smart-region . [(20150903 1403) ((emacs (24 4)) (expand-region (0 10 0)) (multiple-cursors (1 3 0)) (cl-lib (0 5))) "Smartly select region, rectangle, multi cursors" single ((:commit . "5a8017fd8e8dc3483865951c4942cab3f96f69f6") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainers ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com") (:keywords "marking" "region") (:url . "https://github.com/uk-ar/smart-region"))])
- (smart-semicolon . [(20200909 1412) ((emacs (26))) "Insert semicolon smartly" single ((:commit . "dd52a3e1a7b043fb88f799827c7b3e39f60a14f1") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/smart-semicolon"))])
- (smart-shift . [(20150203 725) nil "Smart shift text left/right." single ((:commit . "a26ab2b240137e62ec4bce1698ed9c5f7b6d13ae") (:authors ("Bin Huang" . "huangbin88@foxmail.com")) (:maintainers ("Bin Huang" . "huangbin88@foxmail.com")) (:maintainer "Bin Huang" . "huangbin88@foxmail.com") (:keywords "convenience" "tools") (:url . "https://github.com/hbin/smart-shift"))])
- (smart-tab . [(20210530 1743) ((emacs (24 3))) "Intelligent tab completion and indentation" single ((:commit . "2f1b4073904805c8454ebc9bc967b23836a2d577") (:authors ("John SJ Anderson" . "john@genehack.org") ("Sebastien Rocca Serra" . "sroccaserra@gmail.com") ("Daniel Hackney" . "dan@haxney.org")) (:maintainers ("John SJ Anderson" . "john@genehack.org")) (:maintainer "John SJ Anderson" . "john@genehack.org") (:keywords "extensions") (:url . "https://git.genehack.net/genehack/smart-tab"))])
- (smart-tabs-mode . [(20200907 2025) nil "Intelligently indent with tabs, align with spaces!" single ((:commit . "1044c17e42479de943e69cdeb85e4d05ad9cca8c") (:authors ("John Croisant" . "jacius@gmail.com") ("Alan Pearce" . "alan@alanpearce.co.uk") ("Daniel Dehennin" . "daniel.dehennin@baby-gnu.org") ("Matt Renaud" . "mrenaud92@gmail.com")) (:maintainers ("Joel C. Salomon" . "joelcsalomon@gmail.com")) (:maintainer "Joel C. Salomon" . "joelcsalomon@gmail.com") (:keywords "languages") (:url . "http://www.emacswiki.org/emacs/SmartTabs"))])
- (smart-window . [(20160717 130) ((cl-lib (0 5))) "vim-like window controlling plugin" single ((:commit . "5996461b7cbc5ab4509ac48537916eb29a8e4c16") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainers ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com") (:keywords "window") (:url . "https://github.com/dryman/smart-window.el"))])
- (smartparens . [(20230225 1026) ((dash (2 13 0)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar ((:commit . "1d5cd5e8d46e182b935f8cd3cf29c8c4410aab0a") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "abbrev" "convenience" "editing") (:url . "https://github.com/Fuco1/smartparens"))])
- (smartrep . [(20150509 230) nil "Support sequential operation which omitted prefix keys." single ((:commit . "f0ff5a6d7b8603603598ae3045c98b011e58d86e") (:authors ("myuhe <yuhei.maeda_at_gmail.com>")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience") (:url . "https://github.com/myuhe/smartrep.el"))])
- (smartscan . [(20170211 2033) nil "Jumps between other symbols found at point" single ((:commit . "234e077145710a174c20742de792b97ed2f965f6") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainers ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org") (:keywords "extensions"))])
- (smarty-mode . [(20100703 1158) nil "major mode for editing smarty templates" single ((:commit . "3dfdfe1571f5e9ef55a29c51e5a80046d4cb7568") (:maintainers ("Benj Carson")) (:maintainer "Benj Carson") (:keywords "smarty" "php" "languages" "templates") (:url . "none yet"))])
- (smbc . [(20171229 1808) nil "View SMBC from Emacs" single ((:commit . "10538e3d575ba6ef3c94d555af2744b42dfd36c7") (:authors ("Saksham Sharma" . "saksham0808@gmail.com")) (:maintainers ("Saksham Sharma" . "saksham0808@gmail.com")) (:maintainer "Saksham Sharma" . "saksham0808@gmail.com") (:keywords "smbc" "webcomic") (:url . "https://github.com/sakshamsharma/emacs-smbc"))])
- (smblog . [(20200424 938) ((emacs (24 3))) "samba log viewer" single ((:commit . "fc949cff7051b31f0dbc7169774144533a27b92f") (:authors ("Aurélien Aptel" . "aaptel@suse.com")) (:maintainers ("Aurélien Aptel" . "aaptel@suse.com")) (:maintainer "Aurélien Aptel" . "aaptel@suse.com") (:url . "http://github.com/aaptel/smblog-mode"))])
- (smeargle . [(20200323 533) ((emacs (24 3))) "Highlighting region by last updated time" single ((:commit . "1c5c1e1d66aa96b818fbfcdf9fbec84e509b87be") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Neil Okamoto" . "neil.okamoto+melpa@gmail.com")) (:maintainer "Neil Okamoto" . "neil.okamoto+melpa@gmail.com") (:url . "https://github.com/emacsorphanage/smeargle"))])
- (smex . [(20151212 2209) ((emacs (24))) "M-x interface with Ido-style fuzzy matching." single ((:commit . "55aaebe3d793c2c990b39a302eb26c184281c42c") (:authors ("Cornelius Mika" . "cornelius.mika@gmail.com")) (:maintainers ("Cornelius Mika" . "cornelius.mika@gmail.com")) (:maintainer "Cornelius Mika" . "cornelius.mika@gmail.com") (:keywords "convenience" "usability") (:url . "http://github.com/nonsequitur/smex/"))])
- (smilefjes . [(20230129 2110) ((emacs (24 4)) (request (0 3 2)) (ht (2 3)) (dash (2 19 1)) (helm (3 8 6))) "View Norwegian Food Safety Authority restaurant ratings" single ((:commit . "52ec05240efba2d5d4666aabf773a1aa63bb3f1a") (:url . "https://github.com/themkat/mos-mode"))])
- (smiles-mode . [(20220210 1413) nil "Major mode for SMILES." single ((:commit . "950a8b3224f8f069c82faeb0282d041f872d5550") (:authors (nil . "John Kitchin [jkitchin@andrew.cmu.edu]")) (:maintainers (nil . "John Kitchin [jkitchin@andrew.cmu.edu]")) (:maintainer nil . "John Kitchin [jkitchin@andrew.cmu.edu]") (:keywords "smiles") (:url . "https://repo.or.cz/smiles-mode.git"))])
- (smithers . [(20210531 2232) ((emacs (26 1)) (dash (2 17 0)) (org (9 4 5))) "A startup message featuring Mr C.M. Burns" tar ((:commit . "db9ed12a8d2c131b6d37b4e7aff01b8e3cec81a6") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "games") (:url . "https://gitlab.com/mtekman/smithers.el"))])
- (smithy-mode . [(20220619 1304) ((emacs (26 1))) "Major mode for editing Smithy IDL files" single ((:commit . "7dff0e7a497a055577226c7ae7ecdeaf7078b4c1") (:authors ("Matt Nemitz" . "matt.nemitz@gmail.com")) (:maintainers ("Matt Nemitz" . "matt.nemitz@gmail.com")) (:maintainer "Matt Nemitz" . "matt.nemitz@gmail.com") (:keywords "tools" "languages" "smithy" "idl" "amazon") (:url . "http://github.com/mnemitz/smithy-mode"))])
- (sml-basis . [(20210518 2040) ((emacs (24 5))) "Standard ML Basis Library lookup" tar ((:commit . "c048d575e30a20ec825fd0c5eb9c8a4428a43298") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/lassik/emacs-sml-basis"))])
- (sml-modeline . [(20170614 2111) nil "Show position in a scrollbar like way in mode-line" single ((:commit . "d2f9f70174c4cf68c67eb3bb8088235735e34d9a") (:authors ("Lennart Borgman (lennart O borgman A gmail O com)")) (:maintainers ("Lennart Borgman (lennart O borgman A gmail O com)")) (:maintainer "Lennart Borgman (lennart O borgman A gmail O com)") (:url . "http://bazaar.launchpad.net/~nxhtml/nxhtml/main/annotate/head%3A/util/sml-modeline.el"))])
- (smmry . [(20161024 901) nil "SMMRY client" single ((:commit . "b7ee765337fa627a6c59eb4f2a91df5d280ac6df") (:authors ("james sangho nah" . "microamp@protonmail.com")) (:maintainers ("james sangho nah" . "microamp@protonmail.com")) (:maintainer "james sangho nah" . "microamp@protonmail.com") (:keywords "api" "smmry") (:url . "https://github.com/microamp/smmry.el"))])
- (smog . [(20220405 251) ((emacs (24 1)) (org (8 1))) "Analyse the writing style, word use and readability of prose" single ((:commit . "28b053198ff9c1b142789614d85d7d762d9b0fa3") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainers ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:keywords "tools" "style" "readability" "prose") (:url . "https://github.com/zzkt/smog"))])
- (smooth-scroll . [(20130322 414) nil "Minor mode for smooth scrolling and in-place scrolling." single ((:commit . "02320f28abb5cae28b3a18f6b9ce93129bdbfc45") (:authors ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainers ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainer "K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>") (:keywords "convenience" "emulations" "frames") (:url . "http://www.emacswiki.org/emacs/download/smooth-scroll.el"))])
- (smooth-scrolling . [(20161002 1949) nil "Make emacs scroll smoothly" single ((:commit . "2462c13640aa4c75ab3ddad443fedc29acf68f84") (:authors ("Adam Spiers" . "emacs-ss@adamspiers.org") ("Jeremy Bondeson" . "jbondeson@gmail.com") ("Ryan C. Thompson" . "rct+github@thompsonclan.org")) (:maintainers ("Adam Spiers" . "emacs-ss@adamspiers.org")) (:maintainer "Adam Spiers" . "emacs-ss@adamspiers.org") (:keywords "convenience") (:url . "http://github.com/aspiers/smooth-scrolling/"))])
- (smotitah . [(20150218 1030) nil "Modular emacs configuration framework" tar ((:commit . "f9ab562128a5460549d016913533778e8c94bcf3") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com") (:keywords "configuration"))])
- (smtpmail-multi . [(20160218 2349) nil "Use different smtp servers for sending mail" single ((:commit . "81eabfe56f620ee044ff9dd52fa8b6148d0a9f30") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "comm") (:url . "https://github.com/vapniks/smtpmail-multi"))])
- (smudge . [(20210326 2222) ((emacs (27 1)) (simple-httpd (1 5)) (request (0 3)) (oauth2 (0 16))) "Control the Spotify app" tar ((:commit . "808f0ef172a80cf4a8ae6d58dfe385d28ecde28e") (:keywords "multimedia" "music" "spotify" "smudge") (:url . "https://github.com/danielfm/smudge"))])
- (smyx-theme . [(20141127 828) nil "smyx Color Theme" single ((:commit . "6263f6b401bbabaed388c8efcfc0be2e58c51401") (:authors ("Uriel G Maldonado" . "uriel781@gmail.com")) (:maintainers ("Uriel G Maldonado" . "uriel781@gmail.com")) (:maintainer "Uriel G Maldonado" . "uriel781@gmail.com") (:keywords "color" "theme" "smyx"))])
- (snakemake-mode . [(20230418 147) ((emacs (26 1)) (transient (0 3 0))) "Major mode for editing Snakemake files" tar ((:commit . "0c4c5b6a25735ac025ce124ace9f0259eb5198e9") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainers ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:keywords "tools") (:url . "https://git.kyleam.com/snakemake-mode/about"))])
- (snap-indent . [(20221220 1908) ((emacs (24 1))) "Simple automatic indentation" single ((:commit . "6020a1784015ba28f439f41d4d8c261c3481079f") (:authors ("Jeff Valk" . "jv@jeffvalk.com")) (:maintainers ("Jeff Valk" . "jv@jeffvalk.com")) (:maintainer "Jeff Valk" . "jv@jeffvalk.com") (:keywords "indent" "tools" "convenience") (:url . "https://github.com/jeffvalk/snap-indent"))])
- (snapshot-timemachine . [(20161221 929) ((emacs (24 4))) "Step through (Btrfs, ZFS, ...) snapshots of files" single ((:commit . "99efcebab309b11ed512a8dc62555d3834df5efb") (:authors ("Thomas Winant" . "dewinant@gmail.com")) (:maintainers ("Thomas Winant" . "dewinant@gmail.com")) (:maintainer "Thomas Winant" . "dewinant@gmail.com") (:url . "https://github.com/mrBliss/snapshot-timemachine"))])
- (snapshot-timemachine-rsnapshot . [(20170324 1213) ((snapshot-timemachine (20160222 132)) (seq (2 19))) "rsnapshot backend for snapshot-timemachine" single ((:commit . "72b0b700d80f1a0442e62bbbb6a0c8c59182f97f") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))])
- (snazzy-theme . [(20170828 757) ((emacs (24)) (base16-theme (2 1))) "An elegant syntax theme with bright colors" single ((:commit . "578d7ebc4ed91c0a630b652c4b6fdd54d9ae16cd") (:keywords "faces" "theme" "color" "snazzy") (:url . "https://github.com/weijiangan/emacs-snazzy/"))])
- (sniem . [(20220404 307) ((emacs (27 1)) (s (2 12 0)) (dash (1 12 0))) "Hands-eased united editing method" tar ((:commit . "afe4286dec79ef45a42a343033f69d90dd308535") (:authors ("SpringHan")) (:maintainers ("SpringHan")) (:maintainer "SpringHan") (:keywords "convenience" "united-editing-method") (:url . "https://github.com/SpringHan/sniem.git"))])
- (snitch . [(20210202 1730) ((emacs (27 1))) "An Emacs firewall" tar ((:commit . "3b3e7f1bf612c4624764d1ec4b1a96e4d2850b05") (:authors ("Trevor Bentley" . "snitch.el@x.mrmekon.com")) (:maintainers ("Trevor Bentley" . "snitch.el@x.mrmekon.com")) (:maintainer "Trevor Bentley" . "snitch.el@x.mrmekon.com") (:keywords "processes" "comm") (:url . "https://github.com/mrmekon/snitch-el"))])
- (snoopy . [(20171008 2004) ((emacs (24)) (cl-lib (0 6))) "minor mode for number row unshifted character insertion" single ((:commit . "ec4123bdebfe0bb7bf4feaac2dc02b59caffe386") (:authors ("António Nuno Monteiro" . "anmonteiro@gmail.com")) (:maintainers ("António Nuno Monteiro" . "anmonteiro@gmail.com")) (:maintainer "António Nuno Monteiro" . "anmonteiro@gmail.com") (:keywords "lisp"))])
- (snow . [(20221226 2238) ((emacs (26 3))) "Let it snow in Emacs!" single ((:commit . "be17977677fa29709a726715a1a1cba1bd299f68") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "games") (:url . "https://github.com/alphapapa/snow.el"))])
- (soar-mode . [(20190503 1843) nil "A major mode for the Soar language" single ((:commit . "ebb79789cd35530aea2c6d0eb4f4b280e97107d4") (:keywords "languages" "soar") (:url . "https://github.com/adeschamps/soar-mode"))])
- (soccer . [(20230410 626) ((emacs (26 1)) (dash (2 19 1))) "Fixtures, results, table etc for soccer" tar ((:commit . "c99a20c3af1011aa14bf2012d3b84cfa4282d0c2") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com") (:keywords "games" "soccer" "football") (:url . "https://github.com/md-arif-shaikh/soccer"))])
- (socyl . [(20170212 642) ((s (1 11 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (cl-lib (0 5))) "Frontend for several search tools" tar ((:commit . "1ef2da42f66f3ab31a34131e51648f352416f0ba") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "ripgrep" "sift" "ack" "pt" "ag" "grep" "search") (:url . "https://github.com/nlamirault/socyl"))])
- (soft-charcoal-theme . [(20140420 1643) nil "Dark charcoal theme with soft colors" single ((:commit . "5607ab977fae6638e78b1495e02da8955c9ba19f") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/soft-charcoal-theme"))])
- (soft-morning-theme . [(20150918 2041) nil "Emacs24 theme with a light background." single ((:commit . "c0f9c70c97ef2be2a093cf839c4bfe27740a111c") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/soft-morning-theme"))])
- (soft-stone-theme . [(20140614 835) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "fb475514cfb02cf30ce358a61c48e46614344d48") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/soft-stone-theme"))])
- (solaire-mode . [(20211213 102) ((emacs (25 1)) (cl-lib (0 5))) "make certain buffers grossly incandescent" single ((:commit . "8af65fbdc50b25ed3214da949b8a484527c7cc14") (:authors ("Henrik Lissner <http://github/hlissner>")) (:maintainers ("Henrik Lissner" . "contact@henrik.io")) (:maintainer "Henrik Lissner" . "contact@henrik.io") (:keywords "dim" "bright" "window" "buffer" "faces") (:url . "https://github.com/hlissner/emacs-solaire-mode"))])
- (solarized-theme . [(20230414 1130) ((emacs (24 1))) "The Solarized color theme" tar ((:commit . "3fc985e8b31a975ef9b983c53f691cf48e1e0899") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.dev")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.dev") (:keywords "convenience" "themes" "solarized") (:url . "http://github.com/bbatsov/solarized-emacs"))])
- (solidity-flycheck . [(20221024 220) ((flycheck (32 -4)) (solidity-mode (0 1 9)) (dash (2 17 0))) "Flycheck integration for solidity emacs mode" single ((:commit . "8cb8ac6d1311f5bc893cd72ee96e3e335ee8b2a1") (:authors ("Lefteris Karapetsas " . "lefteris@refu.co")) (:maintainers ("Lefteris Karapetsas " . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas " . "lefteris@refu.co") (:keywords "languages" "solidity" "flycheck"))])
- (solidity-mode . [(20221119 1735) nil "Major mode for ethereum's solidity language" tar ((:commit . "ddb4a901c33bd29ba2eefff3b7f7461849c6e833") (:authors ("Lefteris Karapetsas " . "lefteris@refu.co")) (:maintainers ("Lefteris Karapetsas " . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas " . "lefteris@refu.co") (:keywords "languages" "solidity"))])
- (solo-jazz-theme . [(20220117 2009) ((emacs (24 1))) "The Solo-Jazz color theme" single ((:commit . "51d63d8a2c855f4ea79eef9fc9c8a5c9702642c4") (:authors ("Carl Steib")) (:maintainers ("Carl Steib")) (:maintainer "Carl Steib") (:url . "https://github.com/cstby/solo-jazz-emacs-theme"))])
- (somafm . [(20220402 2131) ((emacs (26 1)) (dash (2 12 0)) (request (0 3 2)) (cl-lib (0 6 1))) "A simple soma.fm interface" single ((:commit . "90b661fb1abc652feb6508eb61735919d02e9687") (:authors ("Arte Ebrahimi <>")) (:maintainers ("Arte Ebrahimi <>")) (:maintainer "Arte Ebrahimi <>") (:keywords "multimedia") (:url . "https://github.com/artenator/somafm.el"))])
- (sonic-pi . [(20211214 1242) ((cl-lib (0 5)) (osc (0 1)) (dash (2 2 0)) (emacs (24)) (highlight (0))) "A Emacs client for SonicPi" tar ((:commit . "9ae16d0fd4cba77ae0bedac83f2cb46569be6ade") (:authors ("Joseph Wilk" . "joe@josephwilk.net")) (:maintainers ("Joseph Wilk" . "joe@josephwilk.net")) (:maintainer "Joseph Wilk" . "joe@josephwilk.net") (:keywords "sonicpi" "ruby") (:url . "http://www.github.com/repl-electric/sonic-pi.el"))])
- (soong-mode . [(20221217 1243) ((emacs (27 1))) "Major mode for editing Soong build files" single ((:commit . "bf3dc1070b368b413958f54fbe9bcc2aaf77b56f") (:authors ("Sergey Bobrenok" . "bobrofon@gmail.com")) (:maintainers ("Sergey Bobrenok" . "bobrofon@gmail.com")) (:maintainer "Sergey Bobrenok" . "bobrofon@gmail.com") (:keywords "languages") (:url . "https://github.com/bobrofon/soong-mode"))])
- (soothe-theme . [(20220922 349) ((emacs (24 3)) (autothemer (0 2))) "A dark colorful theme" tar ((:commit . "d8aee0fca549d535ebb7b5fd1a8017f12925d16b") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainers ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/emacsfodder/emacs-soothe-theme"))])
- (sorcery-theme . [(20210101 1352) ((autothemer (0 2))) "A D&D (Dark and Dusty) Theme" single ((:commit . "5a1c4445b9e6e09589a299a9962a6973272a0c2f") (:authors ("Maxime Tréca" . "maxime@gmail.com")) (:maintainers ("Maxime Tréca" . "maxime@gmail.com")) (:maintainer "Maxime Tréca" . "maxime@gmail.com") (:url . "http://github.com/vxid/emacs-theme-sorcery"))])
- (soria-theme . [(20230227 1454) ((emacs (25 1))) "A xoria256 theme with some colors from openSUSE" tar ((:commit . "c5275d02fcc9f6af2cfebd69bcf69f8cdccbe3ab") (:authors ("Miquel Sabaté Solà" . "mikisabate@gmail.com")) (:maintainers ("Miquel Sabaté Solà" . "mikisabate@gmail.com")) (:maintainer "Miquel Sabaté Solà" . "mikisabate@gmail.com") (:keywords "faces") (:url . "https://github.com/mssola/soria"))])
- (sort-words . [(20160929 1335) nil "Sort words in a selected region" single ((:commit . "7b6e108f80237363faf7ec28b2c58dec270b8601") (:authors ("\"Aleksandar Simic\"" . "asimic@gmail.com")) (:maintainers ("\"Aleksandar Simic\"" . "asimic@gmail.com")) (:maintainer "\"Aleksandar Simic\"" . "asimic@gmail.com") (:keywords "tools") (:url . "http://github.org/dotemacs/sort-words.el"))])
- (sotclojure . [(20170922 8) ((emacs (24 1)) (clojure-mode (4 0 0)) (cider (0 8)) (sotlisp (1 3))) "Write clojure at the speed of thought." tar ((:commit . "ceac82aa691e8d98946471be6aaff9c9a4603c32") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "convenience" "clojure") (:url . "https://github.com/Malabarba/speed-of-thought-clojure"))])
- (sotlisp . [(20220909 803) ((emacs (24 1))) "Write lisp at the speed of thought." single ((:commit . "04186129f2dccf48e288639b78adeb9c0e94be54") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainers ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:keywords "convenience" "lisp") (:url . "https://github.com/Malabarba/speed-of-thought-lisp"))])
- (sound-wav . [(20200323 728) ((deferred (0 3 1)) (cl-lib (0 5))) "Play wav file" single ((:commit . "8a18f8a62f4fdde80dfa069986aa959091a42472") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-sound-wav"))])
- (soundcloud . [(20150502 326) ((emms (20131016)) (json (1 2)) (deferred (0 3 1)) (string-utils (0 3 2)) (request (20140316 417)) (request-deferred (20130526 1015))) "a SoundCloud client for Emacs" single ((:commit . "f998d4276ea90258909c698f6a5a51fccb667c08") (:authors ("Travis Thieman" . "travis.thieman@gmail.com")) (:maintainers ("Travis Thieman" . "travis.thieman@gmail.com")) (:maintainer "Travis Thieman" . "travis.thieman@gmail.com") (:keywords "soundcloud" "music" "audio"))])
- (soundklaus . [(20191220 2112) ((dash (2 12 1)) (emacs (24)) (emms (4 0)) (s (1 11 0)) (pkg-info (0 4)) (cl-lib (0 5)) (request (0 2 0))) "Play music on SoundCloud with Emacs via EMMS" tar ((:commit . "15ce6e7f24a45e4f202d83cca9fa3bfdd94ca592") (:authors ("r0man" . "roman@burningswell.com")) (:maintainers ("r0man" . "roman@burningswell.com")) (:maintainer "r0man" . "roman@burningswell.com") (:keywords "soundcloud" "music" "emms") (:url . "https://github.com/r0man/soundklaus.el"))])
- (sourcekit . [(20210430 2155) ((emacs (24 3)) (dash (2 18 0)) (request (0 2 0))) "Library to interact with sourcekittendaemon" single ((:commit . "a1860ad4dd3a542acd2fa0dfac2a388cbdf4af0c") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainers ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com") (:keywords "tools" "processes") (:url . "https://github.com/nathankot/company-sourcekit"))])
- (sourcemap . [(20200315 1037) ((emacs (24 3))) "Sourcemap parser" single ((:commit . "bb2a56b2feb62b0c77d7f03ef2acd94f91be6b3f") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-sourcemap"))])
- (sourcerer-theme . [(20161014 1625) nil "A version of sourcerer by xero" single ((:commit . "c7f8e665d53bb48fb72f95f706710d53d24bd407") (:authors ("Bryan Gilbert" . "gilbertw1@gmail.com")) (:maintainers ("Bryan Gilbert" . "gilbertw1@gmail.com")) (:maintainer "Bryan Gilbert" . "gilbertw1@gmail.com") (:keywords "themes") (:url . "http://github.com/gilbertw1/sourcerer-emacs"))])
- (space-theming . [(20200502 1032) ((emacs (24))) "Easilly override theme faces" single ((:commit . "31dca6954df643255175f7df68a86892aa3c71a7") (:keywords "faces") (:url . "https://github.com/p3r7/space-theming"))])
- (spacebar . [(20190719 334) ((eyebrowse (0 7 7)) (emacs (25 4 0))) "Workspaces Bar" single ((:commit . "2b2cd0e786877273103f048e62a06b0027deca2d") (:authors ("Matthias Margush" . "matthias.margush@gmail.com")) (:maintainers ("Matthias Margush" . "matthias.margush@gmail.com")) (:maintainer "Matthias Margush" . "matthias.margush@gmail.com") (:keywords "convenience") (:url . "https://github.com/matthias-margush/spacebar"))])
- (spacegray-theme . [(20150719 1931) ((emacs (24 1))) "A Hyperminimal UI Theme" single ((:commit . "7f70ee36297e5ccf9bc90b1f81472024f5a7a749") (:authors ("Bruce Williams" . "brwcodes@gmail.com")) (:maintainers ("Bruce Williams" . "brwcodes@gmail.com")) (:maintainer "Bruce Williams" . "brwcodes@gmail.com") (:keywords "themes") (:url . "http://github.com/bruce/emacs-spacegray-theme"))])
- (spaceline . [(20230221 2314) ((emacs (24 4)) (cl-lib (0 5)) (powerline (2 3)) (dash (2 11 0)) (s (1 10 0))) "Modeline configuration library for powerline" tar ((:commit . "e0f848cc116d9046a04a09f5728fabf892863b7e") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainers ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:keywords "mode-line" "powerline" "spacemacs") (:url . "https://github.com/TheBB/spaceline"))])
- (spaceline-all-the-icons . [(20190325 1602) ((emacs (24 4)) (all-the-icons (2 6 0)) (spaceline (2 0 0)) (memoize (1 0 1))) "A Spaceline theme using All The Icons" tar ((:commit . "5afd48c10f1bd42d9b9648c5e64596b72f3e9042") (:authors ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainers ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dominic Charlesworth" . "dgc336@gmail.com") (:keywords "convenience" "lisp" "tools") (:url . "https://github.com/domtronn/spaceline-all-the-icons.el"))])
- (spacemacs-theme . [(20230418 2106) nil "Color theme with a dark and light versions" tar ((:commit . "c98c156d1ffa73426ec6d6f87a5aaf5f44c9fea5") (:authors ("Nasser Alshammari")) (:maintainer "Nasser Alshammari") (:keywords "color" "theme") (:url . "https://github.com/nashamri/spacemacs-theme"))])
- (spaces . [(20170809 2208) nil "Create and switch between named window configurations." single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:authors ("Steven Thomas")) (:maintainers ("Steven Thomas")) (:maintainer "Steven Thomas") (:keywords "frames" "convenience") (:url . "https://github.com/chumpage/chumpy-windows"))])
- (spark . [(20230406 2307) ((emacs (24 3))) "sparkline generation" single ((:commit . "0e58e5122cbb46fb6d850e3b72487431a3696861") (:authors ("Alvin Francis Dumalus")) (:maintainers ("Alvin Francis Dumalus")) (:maintainer "Alvin Francis Dumalus") (:keywords "lisp" "data") (:url . "https://github.com/alvinfrancis/spark"))])
- (sparkline . [(20150101 1319) ((cl-lib (0 3))) "Make sparkline images from a list of numbers" single ((:commit . "a2b5d817d272d6363b67ed8f8cc75499a19fa8d2") (:authors ("Willem Rein Oudshoorn" . "woudshoo@xs4all.nl")) (:maintainers ("Willem Rein Oudshoorn" . "woudshoo@xs4all.nl")) (:maintainer "Willem Rein Oudshoorn" . "woudshoo@xs4all.nl") (:keywords "extensions"))])
- (sparql-mode . [(20230104 1113) ((cl-lib (0 5)) (emacs (24 3))) "Edit and interactively evaluate SPARQL queries." tar ((:commit . "1f6196094ec6626722c6e03a13f6844c68f62703") (:authors ("Craig Andera <candera at wangdera dot com>")) (:maintainers ("Bjarte Johansen <Bjarte dot Johansen at gmail dot com>")) (:maintainer "Bjarte Johansen <Bjarte dot Johansen at gmail dot com>") (:url . "https://github.com/ljos/sparql-mode"))])
- (spatial-navigate . [(20230115 633) ((emacs (26 2))) "Directional navigation between white-space blocks" single ((:commit . "11f281ae16b541ede9b4fadf96200e1728eb6ed0") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-spatial-navigate"))])
- (spdx . [(20230503 110) ((emacs (24 4))) "Insert SPDX license and copyright headers" tar ((:commit . "ef48c77e746e93973ae7a43f5b018bc9564eac10") (:authors ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainers ("Zhiwei Chen" . "condy0919@gmail.com")) (:maintainer "Zhiwei Chen" . "condy0919@gmail.com") (:keywords "license" "tools") (:url . "https://github.com/condy0919/spdx.el"))])
- (speech-tagger . [(20170728 1829) ((cl-lib (0 5))) "tag parts of speech using coreNLP" tar ((:commit . "61955b40d4e8b09e66a3e8033e82893f81657c06") (:authors ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainers ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Danny McClanahan" . "danieldmcclanahan@gmail.com") (:keywords "speech" "tag" "nlp" "language" "corenlp" "parsing" "natural") (:url . "https://github.com/cosmicexplorer/speech-tagger"))])
- (speechd-el . [(20220608 1422) nil "Client to speech synthesizers and Braille displays." tar ((:commit . "7e30c439729d5635ddd341ad5ab16f832a4619ea") (:authors ("Milan Zamazal" . "pdm@zamazal.org")) (:maintainer "Milan Zamazal" . "pdm@zamazal.org"))])
- (speed-type . [(20230206 1330) ((emacs (26 1)) (compat (29 1 3))) "Practice touch and speed typing" tar ((:commit . "4f8553632d71e827b4da6e091143779d2ad970a8") (:authors ("Gunther Hagleitner")) (:maintainers ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my") (:keywords "games") (:url . "https://github.com/dakra/speed-type"))])
- (speedbar-git-respect . [(20200901 246) ((f (0 8 0)) (emacs (25 1))) "Particular respect git repo in speedbar" single ((:commit . "dd8f0849fc1dd21b42380e1a8c28a9a29acd9511") (:authors ("Muromi Ukari" . "chendianbuji@gmail.com")) (:maintainers ("Muromi Ukari" . "chendianbuji@gmail.com")) (:maintainer "Muromi Ukari" . "chendianbuji@gmail.com") (:url . "https://github.com/ukari/speedbar-git-respect"))])
- (speeddating . [(20180319 723) ((emacs (25))) "Increase date and time at point" single ((:commit . "eeaf90cd10e376bff5a295590a3d5f7fd1402523") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "date" "time") (:url . "https://github.com/xuchunyang/emacs-speeddating"))])
- (spell-fu . [(20230326 736) ((emacs (26 2))) "Fast & light spelling highlighter" single ((:commit . "67a26b7a00449ee8ef3a80ab662c93a32adef679") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.org/ideasman42/emacs-spell-fu"))])
- (sphinx-doc . [(20210213 1250) ((s (1 9 0)) (cl-lib (0 5)) (dash (2 10 0))) "Sphinx friendly docstrings for Python functions" single ((:commit . "1eda612a44ef027e5229895daa77db99a21b8801") (:authors ("Vineet Naik" . "naikvin@gmail.com")) (:maintainers ("Vineet Naik" . "naikvin@gmail.com")) (:maintainer "Vineet Naik" . "naikvin@gmail.com") (:keywords "sphinx" "python") (:url . "https://github.com/naiquevin/sphinx-doc.el"))])
- (sphinx-frontend . [(20161025 758) nil "Launch build process for rst documents via sphinx." single ((:commit . "0cbb03361c245382d3e679dded30c4fc1713c252") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:keywords "compile" "sphinx" "restructuredtext") (:url . "https://github.com/kostafey/sphinx-frontend"))])
- (sphinx-mode . [(20220417 1552) ((f (0 20 0)) (dash (2 14 1))) "Minor mode providing sphinx support." tar ((:commit . "77ca51adf9ee877f3a8f43e744f59e650772f121") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "languages"))])
- (spice-mode . [(20220210 1414) ((emacs (24 3))) "Major mode for SPICE" single ((:commit . "f55c2b6dd35caace0ec7250b5c7b5d119235a23d") (:authors ("Geert A. M. Van der Plas" . "geert_vanderplas@email.com") ("Emmanuel Rouat" . "emmanuel.rouat@wanadoo.fr") ("Carlin J. Vieri, MIT AI Lab" . "cvieri@ai.mit.edu")) (:maintainers ("Geert A. M. Van der Plas" . "geert_vanderplas@email.com")) (:maintainer "Geert A. M. Van der Plas" . "geert_vanderplas@email.com") (:keywords "spice" "spice2g6" "spice3" "eldo" "hspice" "layla" "mondriaan" "fasthenry" "cdl" "spectre compatibility" "netlist editing") (:url . "https://repo.or.cz/spice-mode.git"))])
- (splitjoin . [(20150505 1432) ((cl-lib (0 5))) "Transition between multiline and single-line code" single ((:commit . "39a77f1c6c7406e79095eb0385667097172a770c") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-splitjoin"))])
- (splitter . [(20170809 2208) nil "Manage window splits" single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:authors ("Steven Thomas")) (:maintainers ("Steven Thomas")) (:maintainer "Steven Thomas") (:keywords "frames" "convenience") (:url . "https://github.com/chumpage/chumpy-windows"))])
- (spotify . [(20200615 1418) ((cl-lib (0 5))) "Control the spotify application from emacs" single ((:commit . "7e28ef0b4519c6a46fce6a89c0ff1ed775eda71a") (:authors ("R.W. van 't Veer")) (:maintainers ("R.W. van 't Veer")) (:maintainer "R.W. van 't Veer") (:keywords "convenience") (:url . "https://github.com/remvee/spotify-el"))])
- (spotlight . [(20200109 2137) ((emacs (24 1)) (swiper (0 6 0)) (counsel (0 6 0))) "search files with Mac OS X spotlight" single ((:commit . "ea71f4fd380c51e50c47bb25855af4f40e4d8da0") (:authors ("Ben Maughan" . "benmaughan@gmail.com")) (:maintainers ("Ben Maughan" . "benmaughan@gmail.com")) (:maintainer "Ben Maughan" . "benmaughan@gmail.com") (:keywords "search" "external") (:url . "http://www.pragmaticemacs.com"))])
- (spray . [(20160304 2220) nil "a speed reading mode" single ((:commit . "69fe48e7bb079e3011476b9f4eb6ac9ae94d6d9b") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainers ("Ian Kelling" . "ian@iankelling.org")) (:maintainer "Ian Kelling" . "ian@iankelling.org") (:keywords "convenience") (:url . "https://github.com/ian-kelling/spray"))])
- (springboard . [(20170106 755) ((helm (1 6 9))) "Temporarily change default-directory for one command" single ((:commit . "263a8cd4582c81bfc29d7db37d5267e2488b148c") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainers ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:keywords "helm") (:url . "https://github.com/jwiegley/springboard"))])
- (sprintly-mode . [(20121006 534) ((furl (0 0 2))) "Major mode for dealing with sprint.ly" single ((:commit . "6695892bae5860b5268bf3ae62be990ee9b63c11") (:authors ("Justin Lilly" . "justin@justinlilly.com")) (:maintainers ("Justin Lilly" . "justin@justinlilly.com")) (:maintainer "Justin Lilly" . "justin@justinlilly.com") (:url . "https://github.com/sprintly/sprintly-mode"))])
- (sproto-mode . [(20151115 1805) nil "Major mode for editing sproto." single ((:commit . "1753277d9f2163fb3bc58b983a9892831cf9874b") (:authors ("m2q1n9")) (:maintainers ("m2q1n9")) (:maintainer "m2q1n9") (:keywords "sproto"))])
- (sprunge . [(20160301 243) ((request (0 2 0)) (cl-lib (0 5))) "Upload pastes to sprunge.us" single ((:commit . "0fd386b8b29c4175022a04ad70ea5643185b6726") (:authors ("Tom Jakubowski")) (:maintainers ("Tom Jakubowski")) (:maintainer "Tom Jakubowski") (:keywords "tools"))])
- (spu . [(20161214 324) ((emacs (24 4)) (signal (1 0)) (timp (1 2 0))) "Silently upgrade package in the background" tar ((:commit . "41eec86b595816e3852e8ad1a8e07e51a27fd065") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:keywords "convenience" "package") (:url . "https://github.com/mola-T/spu"))])
- (sq . [(20220717 2039) ((emacs (24 1))) "Bindings for Sequoia PGP's cli" single ((:commit . "bb0d1756bb9c62bb999fa21e15949e28650c663e") (:authors ("Justus Winter" . "justus@sequoia-pgp.org")) (:maintainers ("Justus Winter" . "justus@sequoia-pgp.org")) (:maintainer "Justus Winter" . "justus@sequoia-pgp.org") (:keywords "tools" "data" "mail") (:url . "https://gitlab.com/sequoia-pgp/sqel"))])
- (sql-clickhouse . [(20191209 1443) ((emacs (24))) "support ClickHouse as SQL interpreter" single ((:commit . "8403a4a5d332dbb6459b7fbce6ea95c36d390a5b") (:authors ("Robert Schwarz" . "mail@rschwarz.net")) (:maintainers ("Robert Schwarz" . "mail@rschwarz.net")) (:maintainer "Robert Schwarz" . "mail@rschwarz.net") (:url . "https://github.com/leethargo/sql-clickhouse"))])
- (sql-impala . [(20181218 410) nil "comint support for Cloudera Impala" single ((:commit . "466e7c0c789ec3e5e8a276c8f6754f91bb584c3e") (:authors ("Jason Terk" . "jason@goterkyourself.com")) (:maintainers ("Jason Terk" . "jason@goterkyourself.com")) (:maintainer "Jason Terk" . "jason@goterkyourself.com") (:keywords "sql" "impala") (:url . "https://github.com/jterk/sql-impala"))])
- (sql-presto . [(20190113 1742) ((emacs (24 4))) "No description available." single ((:commit . "bcda455e300a1af75c7bb805882329bc844703b2") (:authors ("Katherine Cox-Buday" . "cox.katherine.e@gmail.com")) (:maintainers ("Katherine Cox-Buday" . "cox.katherine.e@gmail.com")) (:maintainer "Katherine Cox-Buday" . "cox.katherine.e@gmail.com") (:keywords "sql" "presto" "database"))])
- (sql-sqlline . [(20201102 1508) ((emacs (24 4))) "Adds SQLLine support to SQLi mode" single ((:commit . "189c55261ecf0d7990edf7d1bb89776225e9092b") (:authors ("Matteo Redaelli" . "matteo.redaelli@gmail.com")) (:maintainers ("Matteo Redaelli" . "matteo.redaelli@gmail.com")) (:maintainer "Matteo Redaelli" . "matteo.redaelli@gmail.com") (:keywords "languages") (:url . "https://gitlab.com/matteoredaelli/sql-sqlline"))])
- (sql-trino . [(20220826 632) ((emacs (24 4))) "Adds Trino support to SQLi mode" single ((:commit . "624a879ec0d03cae8a92f26d21d88c831e15eb41") (:authors ("Filipe Regadas" . "oss@regadas.email")) (:maintainers ("Filipe Regadas" . "oss@regadas.email")) (:maintainer "Filipe Regadas" . "oss@regadas.email") (:keywords "tools") (:url . "https://github.com/regadas/sql-trino"))])
- (sqlformat . [(20210305 212) ((emacs (24 3)) (reformatter (0 3))) "Reformat SQL using sqlformat or pgformatter" single ((:commit . "0cdb882874ba0853f4f831a07a85b511258472b2") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "languages") (:url . "https://github.com/purcell/sqlformat"))])
- (sqlite . [(20201227 1822) ((emacs (24 5))) "Use sqlite via ELisp" single ((:commit . "f3da716302c929b9df4ba0c281968f72a9d1d188") (:authors ("cnngimenez")) (:maintainers ("cnngimenez")) (:maintainer "cnngimenez") (:keywords "extensions" "lisp" "sqlite") (:url . "https://gitlab.com/cnngimenez/sqlite.el"))])
- (sqlite3 . [(20230315 1221) ((emacs (25 1))) "Direct access to the core SQLite3 API" tar ((:commit . "b513b71012f61895f771fc6948d6511ea8ded0a6") (:authors ("Y. N. Lo" . "elisp@fastmail.com")) (:maintainers ("Y. N. Lo" . "elisp@fastmail.com")) (:maintainer "Y. N. Lo" . "elisp@fastmail.com") (:keywords "comm" "data" "sql") (:url . "https://github.com/pekingduck/emacs-sqlite3-api"))])
- (sqlup-mode . [(20170610 1537) nil "Upcase SQL words for you" single ((:commit . "04970977b4abb4d44301651618bbf1cdb0b263dd") (:authors ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainers ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainer "Aldric Giacomoni" . "trevoke@gmail.com") (:keywords "sql" "tools" "redis" "upcase") (:url . "https://github.com/trevoke/sqlup-mode.el"))])
- (squirrel-mode . [(20221227 232) ((emacs (24 3))) "A major mode for the Squirrel programming language" single ((:commit . "1af79dfe70c4c8e6f0f144bfd2eb65c077aca785") (:authors ("XXIV")) (:maintainers ("XXIV")) (:maintainer "XXIV") (:keywords "files" "squirrel") (:url . "https://github.com/thechampagne/squirrel-mode"))])
- (sr-speedbar . [(20161025 831) nil "Same frame speedbar" single ((:commit . "77a83fb50f763a465c021eca7343243f465b4a47") (:authors ("Sebastian Rose" . "sebastian_rose@gmx.de")) (:maintainers ("Sebastian Rose" . "sebastian_rose@gmx.de")) (:maintainer "Sebastian Rose" . "sebastian_rose@gmx.de") (:keywords "speedbar" "sr-speedbar.el") (:url . "http://www.emacswiki.org/emacs/download/sr-speedbar.el"))])
- (srcery-theme . [(20210601 1247) ((emacs (24))) "Dark color theme" single ((:commit . "58dd21cd63e4a2eed15e0082c2547069363f107b") (:authors ("Daniel Berg")) (:maintainers ("Daniel Berg")) (:maintainer "Daniel Berg") (:keywords "faces") (:url . "https://github.com/srcery-colors/srcery-emacs"))])
- (srefactor . [(20230504 617) ((emacs (24 4))) "A refactoring tool based on Semantic parser framework" tar ((:commit . "95c70a94b5aad4c85b35569e2f2325047791153a") (:authors ("Tu, Do Hoang" . "tuhdo1710@gmail.com")) (:maintainers ("Tu, Do Hoang")) (:maintainer "Tu, Do Hoang") (:keywords "c" "languages" "tools") (:url . "https://github.com/tuhdo/semantic-refactor"))])
- (srfi . [(20230503 34) ((emacs (25 1))) "Scheme Requests for Implementation browser" tar ((:commit . "d340e344cbc57b63952ba73c750986f8e13e616e") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "languages" "util") (:url . "https://github.com/srfi-explorations/emacs-srfi"))])
- (srv . [(20180715 1959) ((emacs (24 3))) "perform SRV DNS requests" single ((:commit . "714387d5a5cf34d8d8cd96bdb1f9cb8ded823ff7") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainers ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com") (:keywords "comm") (:url . "https://github.com/legoscia/srv.el"))])
- (ssass-mode . [(20200211 132) ((emacs (24 3))) "Edit Sass without a Turing Machine" single ((:commit . "96f557887ad97a0066a60c54f92b7234b8407016") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:keywords "languages" "sass") (:url . "http://github.com/AdamNiederer/ssass-mode"))])
- (ssh . [(20120904 2042) nil "Support for remote logins using ssh." single ((:commit . "c17cf5b43df8ac4662a0580f85898e1f078df0d1") (:authors ("Noah Friedman" . "friedman@splode.com")) (:maintainers ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com") (:keywords "unix" "comm"))])
- (ssh-agency . [(20200329 1558) ((emacs (24 4)) (dash (2 10 0))) "manage ssh-agent from Emacs" single ((:commit . "a5377e4317365a3d5442e06d5c255d4a7c7618db") (:authors ("Noam Postavsky" . "npostavs@user.sourceforge.net")) (:maintainers ("Noam Postavsky" . "npostavs@user.sourceforge.net")) (:maintainer "Noam Postavsky" . "npostavs@user.sourceforge.net") (:url . "https://github.com/magit/ssh-agency"))])
- (ssh-config-mode . [(20211003 2330) nil "Mode for fontification of ~/.ssh/config" tar ((:commit . "00822e4abd6976d1f2bfab7f423d72509b8096fc") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainers ("Harley Gorrell" . "harley@panix.com")) (:maintainer "Harley Gorrell" . "harley@panix.com") (:keywords "ssh" "config" "emacs") (:url . "https://github.com/jhgorrell/ssh-config-mode-el"))])
- (ssh-deploy . [(20230129 903) ((emacs (25))) "Deployment via Tramp, global or per directory." tar ((:commit . "94b56c0428fa0c788578161edc9e7992b13cd400") (:authors ("Christian Johansson" . "christian@cvj.se")) (:maintainers ("Christian Johansson" . "christian@cvj.se")) (:maintainer "Christian Johansson" . "christian@cvj.se") (:keywords "tools" "convenience") (:url . "https://github.com/cjohansson/emacs-ssh-deploy"))])
- (ssh-tunnels . [(20220721 1242) ((cl-lib (0 5)) (emacs (24))) "Manage SSH tunnels" tar ((:commit . "5010d779edef33f869065231b99d74723c9c7eaf") (:authors ("death <github.com/death>")) (:maintainers ("death <github.com/death>")) (:maintainer "death <github.com/death>") (:keywords "tools" "convenience") (:url . "http://github.com/death/ssh-tunnels"))])
- (stan-mode . [(20211129 2051) ((emacs (24 4))) "Major mode for editing Stan files" tar ((:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Daniel Lee" . "bearlee@alum.mit.edu") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu") (:keywords "languages" "c") (:url . "https://github.com/stan-dev/stan-mode/tree/master/stan-mode"))])
- (stan-snippets . [(20211129 2051) ((emacs (24 3)) (stan-mode (10 3 0)) (yasnippet (0 8 0))) "Yasnippets for Stan" tar ((:commit . "150bbbe5fd3ad2b5a3dbfba9d291e66eeea1a581") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainers ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu") (:keywords "languages" "tools") (:url . "https://github.com/stan-dev/stan-mode/tree/master/stan-snippets"))])
- (standard-dirs . [(20200621 1603) ((emacs (26 1)) (f (0 20 0)) (s (1 7 0))) "Platform-specific paths for config, cache, and other data" single ((:commit . "e37b7e1c714c7798cd8e3a6569e4d71b96718a60") (:authors ("Joseph M LaFreniere" . "joseph@lafreniere.xyz")) (:maintainers ("Joseph M LaFreniere" . "joseph@lafreniere.xyz")) (:maintainer "Joseph M LaFreniere" . "joseph@lafreniere.xyz") (:keywords "files") (:url . "https://github.com/lafrenierejm/standard-dirs.el"))])
- (standoff-mode . [(20210810 1814) nil "Create stand-off markup, also called external markup." tar ((:commit . "5e603092410d9c393d19050bcbed3014a379f0e6") (:authors ("Christian Lück" . "christian.lueck@ruhr-uni-bochum.de")) (:maintainer "Christian Lück" . "christian.lueck@ruhr-uni-bochum.de") (:keywords "text" "annotations" "ner" "humanities") (:url . "https://github.com/lueck/standoff-mode"))])
- (starlit-theme . [(20230324 1636) ((emacs (25 1))) "Deep blue dark theme with bright colors from the starlit sky" single ((:commit . "d6f327fb09497be7bee64d5d204d27f655cc5b04") (:authors ("Jonas Jelten" . "jj@sft.lol")) (:maintainers ("Jonas Jelten" . "jj@sft.lol")) (:maintainer "Jonas Jelten" . "jj@sft.lol") (:keywords "faces") (:url . "https://github.com/SFTtech/starlit-emacs"))])
- (start-menu . [(20160426 1225) ((cl-lib (0 5)) (config-parser (0 1))) "start-menu for executing external program like in windows" single ((:commit . "f7d33fed7ad2dc61156f1c1cff9e1805366fbd69") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "menu") (:url . "https://github.com/lujun9972/el-start-menu"))])
- (stash . [(20151117 1427) nil "lightweight persistent caching" single ((:commit . "c2e494d20c752b80ebbdffbf66687b3cdfc425ad") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:keywords "extensions" "data" "internal" "lisp") (:url . "https://www.github.com/vermiculus/stash.el/"))])
- (state . [(20200727 1227) ((emacs (24))) "Quick navigation between workspaces" single ((:commit . "8cd9210f17c1b134274a7352b996839aed9a7d8c") (:authors ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainers ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainer "Sylvain Rousseau <thisirs at gmail dot com>") (:keywords "convenience" "workspaces") (:url . "https://github.com/thisirs/state.git"))])
- (status . [(20151230 1408) nil "This package adds support for status icons to Emacs." tar ((:commit . "b62c74bf272566f82a68622f29fb9edafea0f241") (:authors ("Tom Tromey" . "tom@tromey.com")) (:maintainer "Tom Tromey" . "tom@tromey.com") (:keywords "frames" "multimedia"))])
- (steam . [(20220218 1707) ((cl-lib (0 5))) "Organize and launch Steam games" single ((:commit . "20aa58c5ccd85f6c4f288a14e79adc66e691cd23") (:authors ("Erik Sjöstrand")) (:maintainers ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:keywords "games") (:url . "http://github.com/Kungsgeten/steam.el"))])
- (stem . [(20131102 1109) nil "Routines for stemming" single ((:commit . "dd704c3447bd5d3f5ac0a4840f8987d4f855d87e") (:authors ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainers ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainer "Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp") (:keywords "stemming") (:url . "https://github.com/yuutayamada/stem"))])
- (stem-english . [(20180109 358) ((emacs (24 3))) "- routines for stemming English word" single ((:commit . "c9fc4c6ed6bf82382e479dae80912f4ae17d31f4") (:authors ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "text") (:url . "http://github.com/kawabata/stem-english"))])
- (stem-reading-mode . [(20220522 1053) ((emacs (25 1))) "Highlight word stems for speed-reading" single ((:commit . "6efc9962e3a19a452c7ab9636cf1e2566a51bd38") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainers ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:keywords "convenience" "wp") (:url . "https://gitlab.com/wavexx/stem-reading-mode.el"))])
- (stgit . [(20230427 25) nil "major mode for StGit interaction" single ((:commit . "d5d04c94b466036468ca2f268fcc22168d225eef") (:authors ("David KÃ¥gedal" . "davidk@lysator.liu.se")) (:maintainers ("David KÃ¥gedal" . "davidk@lysator.liu.se")) (:maintainer "David KÃ¥gedal" . "davidk@lysator.liu.se") (:url . "http://stacked-git.github.io"))])
- (sticky . [(20170926 36) nil "Sticky key for capital letters" single ((:commit . "fec4e1af38f17f5cd80eca361d8e8ef8772db366") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "convenience") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sticky.el"))])
- (sticky-shell . [(20230207 1454) ((emacs (25 1))) "Minor mode to keep track of previous prompt in your shell" single ((:commit . "030535451b7c12eea3a94dfc1a439b8baa96944b") (:authors ("Andrew De Angelis" . "bobodeangelis@gmail.com")) (:maintainers ("Andrew De Angelis" . "bobodeangelis@gmail.com")) (:maintainer "Andrew De Angelis" . "bobodeangelis@gmail.com") (:keywords "processes" "terminals" "tools") (:url . "https://github.com/andyjda/sticky-shell"))])
- (stickyfunc-enhance . [(20150429 1814) ((emacs (24 3))) "An enhancement to stock `semantic-stickyfunc-mode'" single ((:commit . "13bdba51fcd83ccbc3267959d23afc94d458dcb0") (:authors ("Tu, Do Hoang" . "tuhdo1710@gmail.com")) (:maintainers ("Tu, Do Hoang")) (:maintainer "Tu, Do Hoang") (:keywords "c" "languages" "tools") (:url . "https://github.com/tuhdo/semantic-stickyfunc-enhance"))])
- (stimmung-themes . [(20230503 1148) ((emacs (25))) "Themes tuned to inner harmonies" tar ((:commit . "06da5ed93ae3180674e980c0ac2e036841d15ac4") (:authors ("Love Lagerkvist")) (:maintainers ("Love Lagerkvist")) (:maintainer "Love Lagerkvist") (:keywords "faces") (:url . "https://github.com/motform/stimmung-themes"))])
- (stock-ticker . [(20150204 1052) ((s (1 9 0)) (request (0 2 0))) "Show stock prices in mode line" single ((:commit . "74251cc810604af75f48333d51133326c053dd16") (:authors ("Gunther Hagleitner")) (:maintainers ("Gunther Hagleitner")) (:maintainer "Gunther Hagleitner") (:keywords "comms") (:url . "https://github.com/hagleitn/stock-ticker"))])
- (stock-tracker . [(20230105 503) ((emacs (27 1)) (dash (2 16 0)) (async (1 9 5))) "Track stock price" single ((:commit . "327488e0f1232616bf33ab1a69da1a53aca25371") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainers ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:keywords "convenience" "stock" "finance") (:url . "https://github.com/beacoder/stock-tracker"))])
- (strace-mode . [(20171116 2039) nil "strace output syntax highlighting" single ((:commit . "2901baa968d5180ab985ac40ca22cc20914d01f5") (:authors ("Preston Moore" . "prestonkmoore@gmail.com")) (:maintainers ("Preston Moore" . "prestonkmoore@gmail.com")) (:maintainer "Preston Moore" . "prestonkmoore@gmail.com") (:keywords "languages"))])
- (streak . [(20220311 1929) ((emacs (27 1))) "Track a daily streak in your Mode Line" single ((:commit . "b2206de2fe43f97e754bbcb0abe9b078a419e787") (:authors ("Colin Woodbury <https://www.fosskers.ca>")) (:maintainers ("Colin Woodbury" . "colin@fosskers.ca")) (:maintainer "Colin Woodbury" . "colin@fosskers.ca") (:keywords "calendar") (:url . "https://github.com/fosskers/streak"))])
- (streamlink . [(20210811 1429) ((s (1 12 0))) "A major mode for streamlink output" single ((:commit . "13dff15121ac0276f693696db9b04ae5820058d5") (:keywords "multimedia" "streamlink") (:url . "https://github.com/BenediktBroich/streamlink"))])
- (strie . [(20160211 2222) ((cl-lib (0 5))) "A simple trie data structure implementation" single ((:commit . "eb7efb0cccc127c414f6a64db11454869d9c10a8") (:authors ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainers ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainer "James Atwood" . "jatwood@cs.umass.edu"))])
- (string-edit-at-point . [(20220913 712) ((dash (1 2 0))) "Avoid escape nightmares by editing string in separate buffer" single ((:commit . "e285ada415b975a9eb70a7e065123923d9bf8798") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))])
- (string-inflection . [(20220910 1306) nil "underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names" single ((:commit . "50ad54970b3cc79b6b83979bde9889ad9a9e1a9c") (:authors ("akicho8" . "akicho8@gmail.com")) (:maintainers ("akicho8" . "akicho8@gmail.com")) (:maintainer "akicho8" . "akicho8@gmail.com") (:keywords "elisp"))])
- (string-utils . [(20140508 2041) ((list-utils (0 4 2))) "String-manipulation utilities" single ((:commit . "8b56e1f79d2de46d1e9b5e24d889e9f4c3cc85d4") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/string-utils"))])
- (stripe-buffer . [(20141208 1508) ((cl-lib (1 0))) "Use a different background for even and odd lines" single ((:commit . "c252080f55cb78c951b19ebab9687f6d00237baf") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainers ("sabof" . "esabof@gmail.com")) (:maintainer "sabof" . "esabof@gmail.com") (:url . "https://github.com/sabof/stripe-buffer"))])
- (stripes . [(20230402 1228) ((emacs (24 3))) "highlight alternating lines differently" single ((:commit . "4683c9020da14bb1c1f74b90d27a4d9fdc7a9147") (:authors ("Michael Schierl" . "schierlm-public@gmx.de") ("Štěpán Němec" . "stepnem@smrk.net")) (:maintainers ("Štěpán Němec" . "stepnem@smrk.net")) (:maintainer "Štěpán Němec" . "stepnem@smrk.net") (:keywords "convenience" "faces") (:url . "http://git.smrk.net/stripes.el"))])
- (stumpwm-mode . [(20171027 214) nil "special lisp mode for evaluating code into running stumpwm" tar ((:commit . "333d210cacc7ebac76e14dfc8c0139f0e399c9a7") (:maintainers ("Shawn Betts")) (:maintainer "Shawn Betts") (:keywords "comm" "lisp" "tools"))])
- (stupid-indent-mode . [(20170525 1117) nil "Plain stupid indentation minor mode" single ((:commit . "3295e7de5e2cfddc3bf0e462e852bf58972f5d70") (:authors ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainers ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainer "Mihai Bazon" . "mihai.bazon@gmail.com"))])
- (stylefmt . [(20161025 824) nil "Stylefmt interface" single ((:commit . "7a38f26bf8ff947215f34f0a064c7ca80575ccbc") (:authors ("κeen")) (:maintainers ("κeen")) (:maintainer "κeen") (:keywords "style" "code" "formatter") (:url . "https://github.com/KeenS/stylefmt.el"))])
- (stylus-mode . [(20211019 2113) nil "Major mode for editing .styl files" single ((:commit . "1ad7c51f3c6a6ae64550d9510c5e4e8470014375") (:authors ("Brian M. Carlson and other contributors")) (:maintainers ("Brian M. Carlson and other contributors")) (:maintainer "Brian M. Carlson and other contributors") (:keywords "languages") (:url . "https://github.com/brianc/jade-mode"))])
- (su . [(20210721 1816) ((emacs (26 1))) "Automatically read and write files using su or sudo" single ((:commit . "1ecf7a7bbf9d88708eb2215e940753f8d6bccc92") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainers ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:keywords "convenience" "helm" "fuzzy" "flx") (:url . "https://github.com/PythonNut/su.el"))])
- (subatomic-theme . [(20220128 1615) nil "Low contrast bluish color theme" single ((:commit . "9d0ac6aa5272d0285965a48505eb35658c5472b0") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:keywords "color-theme" "blue" "low contrast") (:url . "https://github.com/cryon/subatomic"))])
- (subatomic256-theme . [(20130621 210) nil "Fork of subatomic-theme for terminals." single ((:commit . "326177d6f99cd2b1d30df695e67ee3bc441cd96f") (:authors ("John Olsson" . "john@cryon.se")) (:maintainers ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:url . "https://github.com/cryon/subatomic256"))])
- (subemacs . [(20170401 934) nil "Evaluating expressions in a fresh Emacs subprocess" single ((:commit . "18d53939fec8968c08dfc5aff7240ca07efb1aac") (:authors ("Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com")) (:maintainers ("Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com")) (:maintainer "Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com") (:keywords "extensions" "lisp" "multiprocessing") (:url . "https://github.com/kbauer/subemacs"))])
- (sublime-themes . [(20170606 1844) nil "A collection of themes based on Sublime Text" tar ((:commit . "60ee40af82eb55b79d5ed4026f1911326311603f") (:authors ("Owain Lewis" . "owain@owainlewis.com")) (:maintainers ("Owain Lewis" . "owain@owainlewis.com")) (:maintainer "Owain Lewis" . "owain@owainlewis.com") (:keywords "faces"))])
- (sublimity . [(20200905 1730) ((emacs (26 1))) "smooth-scrolling, minimap and distraction-free mode" tar ((:commit . "8e2ffc4d62194106130014531e7b54fc9b4b9e6c") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "https://github.com/zk-phi/sublimity"))])
- (subsonic . [(20220826 748) ((emacs (27 1)) (transient (0 2))) "Browse and play music from subsonic servers with mpv" single ((:commit . "011e58d434ed707a06a2cfa20509629ebb339c04") (:authors ("Alex McGrath" . "amk@amk.ie")) (:maintainers ("Alex McGrath" . "amk@amk.ie")) (:maintainer "Alex McGrath" . "amk@amk.ie") (:keywords "multimedia") (:url . "https://git.sr.ht/~amk/subsonic.el"))])
- (sudo-edit . [(20220801 1317) ((emacs (24)) (cl-lib (0 5))) "Open files as another user" single ((:commit . "74eb1e6986461baed9a9269566ff838530b4379b") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainers ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:keywords "convenience") (:url . "https://github.com/nflath/sudo-edit"))])
- (sudo-ext . [(20170126 1214) nil "sudo support" single ((:commit . "9d4580f304121ce7b8104bd4bd3b64e4dfa3c9b3") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "unix") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sudo-ext.el"))])
- (sudo-utils . [(20210119 1930) ((emacs (25 1))) "Sudo utilities" single ((:commit . "089f7833fa256f293284a6286bf9cb2b78eff40d") (:authors ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainers ("Alpha Catharsis" . "alpha.catharsis@gmail.com")) (:maintainer "Alpha Catharsis" . "alpha.catharsis@gmail.com") (:keywords "processes" "unix") (:url . "https://github.com/alpha-catharsis/sudo-utils"))])
- (sudoku . [(20191015 1315) ((emacs (24 4))) "Simple sudoku game, can download puzzles" single ((:commit . "b1924fd244a5fa284de9d67b66fbd69164b37318") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainers ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru") (:keywords "games"))])
- (suggest . [(20190807 851) ((emacs (24 4)) (loop (1 3)) (dash (2 13 0)) (s (1 11 0)) (f (0 18 2)) (spinner (1 7 3))) "suggest elisp functions that give the output requested" tar ((:commit . "41782f0d36c346670011f927d8fcd93ec75ed783") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "convenience") (:url . "https://github.com/Wilfred/suggest.el"))])
- (suggestion-box . [(20170830 807) ((emacs (25 1)) (popup (0 5 3))) "show tooltip on the cursor" single ((:commit . "50af0776c8caf3c79c4d37fd51cbf304ea34b68e") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "convenience"))])
- (sunburn-theme . [(20201216 1539) ((emacs (24))) "A low contrast color theme" single ((:commit . "6b5c14c76dcdfdb099102ef7a388b2f0c6f1951d") (:authors ("Martín Varela" . "martin@varela.fi")) (:maintainers ("Martín Varela" . "martin@varela.fi")) (:maintainer "Martín Varela" . "martin@varela.fi") (:url . "http://github.com/mvarela/Sunburn-Theme"))])
- (sunny-day-theme . [(20140413 2125) nil "Emacs24 theme with a light background." single ((:commit . "420e0a6eb33fcc9b75c2c9e88ab60a975d782a00") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/sunny-day-theme"))])
- (sunshine . [(20200306 1711) ((cl-lib (0 5))) "Provide weather and forecast information." single ((:commit . "88256223539edcfe57017778a997a474c9c022f6") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainers ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:keywords "tools" "weather") (:url . "https://github.com/aaronbieber/sunshine.el"))])
- (suomalainen-kalenteri . [(20230102 904) nil "Finnish national and Christian holidays for calendar" tar ((:commit . "95d8b7f9b404c749831d7b4e0e396c76bd822015") (:authors ("Teemu Likonen" . "tlikonen@iki.fi")) (:maintainer "Teemu Likonen" . "tlikonen@iki.fi") (:keywords "calendar" "holidays" "finnish") (:url . "https://github.com/tlikonen/suomalainen-kalenteri"))])
- (super-save . [(20220531 1745) ((emacs (24 4))) "Auto-save buffers, based on your activity." single ((:commit . "6f6512bc44b09f7187e58772892fa330f4518c12") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:keywords "convenience") (:url . "https://github.com/bbatsov/super-save"))])
- (supergenpass . [(20130329 548) nil "SuperGenPass for Emacs" single ((:commit . "549072ef7b5b82913cadd4758e8a0a9926f0a04a") (:authors ("Jaime Fournier" . "jaimef@linbsd.org")) (:maintainers ("Jaime Fournier" . "jaimef@linbsd.org")) (:maintainer "Jaime Fournier" . "jaimef@linbsd.org") (:keywords "supergenpass"))])
- (suscolors-theme . [(20190713 1009) nil "Colorful theme, inspired by Gruvbox." single ((:commit . "b4a979ee23e26e255b9a63525b0a28e810fab9ae") (:url . "https://github.com/TheSuspiciousWombat/SusColors-emacs"))])
- (sv-kalender-namnsdagar . [(20190421 1521) nil "Swedish celebrated name of the day" single ((:commit . "fff970f49c77abfc69e37817f25a939818420971") (:authors ("Mats Lidell" . "mats.lidell@lidells.se")) (:maintainers ("Mats Lidell" . "mats.lidell@lidells.se")) (:maintainer "Mats Lidell" . "mats.lidell@lidells.se") (:keywords "calendar" "swedish" "localization") (:url . "https://github.com/matsl/sv-kalender-namnsdagar"))])
- (svelte-mode . [(20211016 652) ((emacs (26 1))) "Emacs major mode for Svelte" single ((:commit . "6a1d4274af7f4c0f271f77bd96678c3dd1fa68e1") (:authors ("Leaf" . "leafvocation@gmail.com")) (:maintainers ("Leaf" . "leafvocation@gmail.com")) (:maintainer "Leaf" . "leafvocation@gmail.com") (:keywords "wp" "languages") (:url . "https://github.com/leafOfTree/svelte-mode"))])
- (svg-mode-line-themes . [(20150425 2006) ((xmlgen (0 4))) "SVG-based themes for mode-line" tar ((:commit . "80a0e01839cafbd66899202e7764c33231974259") (:authors ("sabof")) (:maintainers ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/svg-mode-line-themes"))])
- (svg-tag-mode . [(20230110 1824) ((emacs (27 1)) (svg-lib (0 2))) "Replace keywords with SVG tags" single ((:commit . "9f5c2cb862fcba96f247b85fdd1b7dffff7af93a") (:authors ("Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")) (:maintainers ("Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr")) (:maintainer "Nicolas P. Rougier" . "Nicolas.Rougier@inria.fr") (:keywords "convenience") (:url . "https://github.com/rougier/svg-tag-mode"))])
- (svgo . [(20220525 2059) ((emacs (26 2))) "SVG optimization with SVGO" single ((:commit . "9b01cc9eb1fdf2731cd2b931a7dfe1f601b70786") (:authors ("Mathis Hofer" . "mathis@fsfe.org")) (:maintainers ("Mathis Hofer" . "mathis@fsfe.org")) (:maintainer "Mathis Hofer" . "mathis@fsfe.org") (:keywords "tools") (:url . "https://github.com/hupf/svgo.el/"))])
- (svnwrapper . [(20180414 1843) ((e2ansi (0 1 1))) "Highlighting and paging for shell command `svn'" tar ((:commit . "de5069f5784e5d9e87a0af0159ba5f28a3716583") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "faces") (:url . "https://github.com/Lindydancer/svnwrapper"))])
- (swagger-to-org . [(20160611 56) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "Convert a swagger.json file into an org-mode file" single ((:commit . "181357c71ea24bede263f5706d8781ad65e16877") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainers ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:keywords "ahungry" "emacs" "swagger" "openapi" "orgmode" "org" "export") (:url . "https://github.com/ahungry/swagger-to-org"))])
- (swap-buffers . [(20150506 2139) nil "The quickest way to swap buffers between windows. Based on switch-window package." single ((:commit . "46ab31359b70d935add6c6e9533443116dc51103") (:authors ("Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com")) (:maintainers ("Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com")) (:maintainer "Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com") (:keywords "window" "swap" "buffer" "exchange") (:url . "https://github.com/ekazakov/swap-buffers"))])
- (swap-regions . [(20180915 1346) ((emacs (24 3))) "Swap text in two regions" single ((:commit . "f4fd9880cf690e003fcde88dcf2b46adbbbb03cd") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "convenience") (:url . "https://github.com/xuchunyang/swap-regions.el"))])
- (sway . [(20221211 1439) ((emacs (27 1)) (dash (2 18 1))) "Communication with the Sway window manager" single ((:commit . "117eb40691e7a4d2dcd6b5a7fd9f803c7d42c32c") (:authors ("Thibault Polge" . "thibault@thb.lt")) (:maintainers ("Thibault Polge" . "thibault@thb.lt")) (:maintainer "Thibault Polge" . "thibault@thb.lt") (:keywords "frames") (:url . "https://github.com/thblt/sway.el"))])
- (sway-lang-mode . [(20230320 507) ((emacs (25 1)) (lsp-mode (6 0)) (rust-mode (1 0 5))) "Major mode for sway" single ((:commit . "1d4615cc99d57280fb4b301d8339f408d987d317") (:authors ("Hamza Hamud")) (:maintainers ("Hamza Hamud")) (:maintainer "Hamza Hamud") (:keywords "languages") (:url . "https://github.com/hhamud/sway-mode"))])
- (sweet-theme . [(20200708 1202) ((emacs (24 1))) "Sweet-looking theme" single ((:commit . "ccbfdb6a17e25ab18a0b64101675bc1dfef44006") (:authors ("2bruh4me")) (:maintainers ("2bruh4me")) (:maintainer "2bruh4me") (:keywords "faces") (:url . "https://github.com/2bruh4me/sweet-theme"))])
- (sweetgreen . [(20180605 335) ((dash (2 12 1)) (helm (1 5 6)) (request (0 2 0)) (cl-lib (0 5))) "Order Salads from sweetgreen.com" single ((:commit . "e933fe466b5ef0e976967e203f88bd7a012469d1") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainers ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:keywords "salad" "food" "sweetgreen" "request") (:url . "https://www.github.com/CestDiego/sweetgreen.el"))])
- (swift-helpful . [(20220707 846) ((emacs (25 1)) (dash (2 12 0)) (lsp-mode (6 0)) (swift-mode (8 0 0))) "Show documentation for Swift programs." tar ((:commit . "b46c580e4b8f55761431ec677866de3fc66592e9") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainers ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es") (:keywords "help" "swift") (:url . "https://github.com/danielmartin/swift-helpful"))])
- (swift-mode . [(20230507 716) ((emacs (24 4)) (seq (2 3))) "Major-mode for Apple's Swift programming language" tar ((:commit . "fc3d16ac9b8dbd8d818b807b7d44ca306a43cc6c") (:authors ("taku0" . "mxxouy6x3m_github@tatapa.org") ("Chris Barrett" . "chris.d.barrett@me.com") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Arthur Evstifeev" . "lod@pisem.net")) (:maintainers ("taku0" . "mxxouy6x3m_github@tatapa.org")) (:maintainer "taku0" . "mxxouy6x3m_github@tatapa.org") (:keywords "languages" "swift") (:url . "https://github.com/swift-emacs/swift-mode"))])
- (swift3-mode . [(20160918 1250) ((emacs (24 4))) "Major-mode for Apple's Swift programming language." tar ((:commit . "ea34d46bf9a4293e75ffdac9500d34989316d9e9") (:keywords "languages" "swift") (:url . "https://github.com/taku0/swift3-mode"))])
- (swiper . [(20230410 1815) ((emacs (24 5)) (ivy (0 14 0))) "Isearch with an overview. Oh, man!" single ((:commit . "d28225e86f8dfb3825809ad287f759f95ee9e479") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper"))])
- (swiper-helm . [(20180131 1744) ((emacs (24 1)) (swiper (0 1 0)) (helm (1 5 3))) "Helm version of Swiper." single ((:commit . "93fb6db87bc6a5967898b5fd3286954cc72a0008") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "matching") (:url . "https://github.com/abo-abo/swiper-helm"))])
- (swiss-holidays . [(20200526 822) nil "Swiss holidays for the calendar" single ((:commit . "0995c9685033a09466f5b2dceb7316362bde997a") (:authors ("Christian Egli" . "christian.egli@alumni.ethz.ch")) (:maintainers ("Christian Egli" . "christian.egli@alumni.ethz.ch")) (:maintainer "Christian Egli" . "christian.egli@alumni.ethz.ch") (:keywords "calendar") (:url . "https://github.com/egli/swiss-holidays"))])
- (switch-buffer-functions . [(20200127 409) nil "Hook run when current buffer changed" single ((:commit . "40cb0c9e2c84b30e1c5c7458a795cda1bd8ad8fa") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainers ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:keywords "hook" "utility") (:url . "https://github.com/10sr/switch-buffer-functions-el"))])
- (switch-window . [(20220812 2137) ((emacs (24))) "A *visual* way to switch window" tar ((:commit . "71ef2f54c97f3fd2e7ff7964d82e6562eb6282f7") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org") ("Feng Shu" . "tumashu@163.com")) (:maintainers ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:keywords "convenience") (:url . "https://github.com/dimitri/switch-window"))])
- (swoop . [(20200618 905) ((emacs (24 3)) (ht (2 0)) (pcre2el (1 5)) (async (1 1))) "Peculiar buffer navigation" tar ((:commit . "828ae0f17f3beaea50ee66d06c500f4847ccc7dd") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainers ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:keywords "tools" "swoop" "inner" "buffer" "search" "navigation") (:url . "https://github.com/ShingoFukuyama/emacs-swoop"))])
- (sws-mode . [(20210908 2121) nil "(S)ignificant (W)hite(S)pace mode" single ((:commit . "111460b056838854e470a6383041a99f843b93ee") (:authors ("Brian M. Carlson and other contributors")) (:maintainers ("Brian M. Carlson and other contributors")) (:maintainer "Brian M. Carlson and other contributors") (:keywords "languages") (:url . "https://github.com/brianc/jade-mode"))])
- (sx . [(20220804 1419) ((emacs (24 1)) (cl-lib (0 5)) (json (1 3)) (markdown-mode (2 0)) (let-alist (1 0 3))) "StackExchange client. Ask and answer questions on Stack Overflow, Super User, and the likes" tar ((:commit . "c58405f9ff27b9740997ea837a1f6fd173d1edc5") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainers ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:keywords "help" "hypermedia" "tools") (:url . "https://github.com/vermiculus/sx.el/"))])
- (sxiv . [(20220530 14) ((dash (2 16 0)) (emacs (25 1))) "Run the Simple X Image Viewer, with Dired integration" single ((:commit . "47f5b2fbb94c569dc5e71cbe4de9c6eabbbc69e8") (:authors ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainers ("contrapunctus" . "xmpp:contrapunctus@jabber.fr")) (:maintainer "contrapunctus" . "xmpp:contrapunctus@jabber.fr") (:keywords "multimedia") (:url . "https://tildegit.org/contrapunctus/sxiv"))])
- (symbol-navigation-hydra . [(20211010 2353) ((auto-highlight-symbol (1 61)) (hydra (0 15 0)) (emacs (24 4)) (multiple-cursors (1 4 0))) "A symbol-aware, range-aware hydra" single ((:commit . "b3b1257e676514d93cd2d71a10a485bf00b5375f") (:authors ("Brett Wines" . "bgwines@cs.stanford.edu")) (:maintainers ("Brett Wines" . "bgwines@cs.stanford.edu")) (:maintainer "Brett Wines" . "bgwines@cs.stanford.edu") (:keywords "highlight" "face" "match" "convenience" "hydra" "symbol") (:url . "https://github.com/bgwines/symbol-navigation-hydra"))])
- (symbol-overlay . [(20230503 1051) ((emacs (24 3)) (seq (2 2))) "Highlight symbols with keymap-enabled overlays" single ((:commit . "72ff963a0f44497b6cc688607357ee65c68ecc84") (:authors ("wolray" . "wolray@foxmail.com")) (:maintainers ("wolray" . "wolray@foxmail.com")) (:maintainer "wolray" . "wolray@foxmail.com") (:keywords "faces" "matching") (:url . "https://github.com/wolray/symbol-overlay/"))])
- (symbolist . [(20211107 1615) ((emacs (24 5))) "List and interactively unbind Emacs Lisp symbols" single ((:commit . "92b712734941a45da7d47fd61b95e4013ff53481") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "lisp" "maint") (:url . "https://github.com/lassik/emacs-symbolist"))])
- (symbolword-mode . [(20180401 1427) ((emacs (24)) (f (0 19 0))) "modify word split" single ((:commit . "920e57f4c2b09b28c5a0c8fe9ebdba9961822163") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainers ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net") (:url . "https://github.com/ncaq/symbolword-mode"))])
- (symex . [(20230322 2003) ((emacs (25 1)) (tsc (0 15 2)) (tree-sitter (0 15 2)) (lispy (0 26 0)) (paredit (24)) (evil-cleverparens (20170718 413)) (evil (1 2 14)) (evil-surround (1 0 4)) (hydra (0 15 0)) (seq (2 22))) "An evil way to edit Lisp symbolic expressions as trees" tar ((:commit . "0b65804d08c9ff61ec6785b48ce9b3c3d4779cfe") (:authors ("Siddhartha Kasivajhula" . "sid@countvajhula.com")) (:maintainers ("Siddhartha Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Siddhartha Kasivajhula" . "sid@countvajhula.com") (:keywords "lisp" "convenience" "languages") (:url . "https://github.com/countvajhula/symex.el"))])
- (symon . [(20170224 833) nil "tiny graphical system monitor" single ((:commit . "76461679dfe13a5dccd3c8735fb6f58b26b46733") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (symon-lingr . [(20150719 1342) ((symon (1 1 2)) (cl-lib (0 5))) "A notification-based Lingr client powered by symon.el" single ((:commit . "056d1a473e36992ff5881e5ce6fdc331cead975f") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (sync-recentf . [(20160326 2001) nil "Synchronize the recent files list between Emacs instances" single ((:commit . "0052561d5c5b5c2684faedc3eead776aec06c3ed") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainers ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com") (:keywords "recentf") (:url . "https://github.com/ffevotte/sync-recentf"))])
- (synonymous . [(20180325 1817) ((emacs (24)) (cl-lib (0 5)) (request (0 2 0))) "A thesaurus at your fingertips" single ((:commit . "2cb9a674d84fddf3f1b00c9d6b13a853576acb87") (:authors ("Katherine Whitlock" . "toroidalcode@gmail.com") ("Snippets adapted from FlySpell, authored by Manuel Serrano" . "Manuel.Serrano@inria.fr")) (:maintainers ("Katherine Whitlock" . "toroidalcode@gmail.com")) (:maintainer "Katherine Whitlock" . "toroidalcode@gmail.com") (:keywords "utility") (:url . "http://github.com/toroidal-code/synonymous.el"))])
- (synosaurus . [(20191125 552) ((cl-lib (0 5))) "An extensible thesaurus supporting lookup and substitution." tar ((:commit . "14d34fc92a77c3a916b4d58400424c44ae99cd81") (:authors ("Hans-Peter Deifel" . "hpd@hpdeifel.de")) (:maintainer "Hans-Peter Deifel" . "hpd@hpdeifel.de") (:keywords "wp"))])
- (synquid . [(20160930 1550) ((flycheck (27)) (emacs (24 3))) "Major mode for editing Synquid files" single ((:commit . "28701ce1a15437202f53ab93a14bcba1de83fd2c") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainers ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:keywords "languages") (:url . "https://github.com/cpitclaudel/synquid-mode"))])
- (syntactic-close . [(20230423 707) ((emacs (24)) (cl-lib (0 5))) "Insert closing delimiter" single ((:commit . "c184ff7a3cbcd28439aba7c3531ffebf0cd30b3a") (:authors ("Emacs User Group Berlin" . "emacs-berlin@emacs-berlin.org")) (:maintainers ("Emacs User Group Berlin" . "emacs-berlin@emacs-berlin.org")) (:maintainer "Emacs User Group Berlin" . "emacs-berlin@emacs-berlin.org") (:keywords "languages" "convenience") (:url . "https://github.com/emacs-berlin/syntactic-close"))])
- (syntactic-sugar . [(20140508 2041) nil "Effect-free forms such as if/then/else" single ((:commit . "b6a49df4b6056e2619eea9ca554c105ae67e115f") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/syntactic-sugar"))])
- (syntax-subword . [(20160205 2154) nil "make operations on words more fine-grained" single ((:commit . "9aa9b3f846bfe2474370642458a693ac4760d9fe") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainers ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))])
- (syntree . [(20230422 1957) ((emacs (27 1)) (org (9 2))) "Draw plain text constituency trees" tar ((:commit . "21ca247722e0d82e8f6eeb280014c61b2ded7f27") (:authors ("Enrico Flor" . "enrico@eflor.net")) (:maintainers ("Enrico Flor" . "enrico@eflor.net")) (:maintainer "Enrico Flor" . "enrico@eflor.net") (:url . "https://github.com/enricoflor/syntree"))])
- (sysctl . [(20200615 1824) ((emacs (26))) "Manage sysctl though org-mode" single ((:commit . "d8c2e18de1d7a3b2999a4d5054c0bbf30cb10fed") (:authors ("Dante Catalfamo")) (:maintainers ("Dante Catalfamo")) (:maintainer "Dante Catalfamo") (:keywords "sysctl" "tools" "unix") (:url . "https://github.com/dantecatalfamo/sysctl.el"))])
- (syslog-mode . [(20210910 1952) ((hide-lines (20130623)) (ov (20150311)) (hsluv (20181127))) "Major-mode for viewing log files & strace output" tar ((:commit . "072664784dae41a573a9de8d178bf577b7526b82") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainers ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:keywords "unix") (:url . "https://github.com/vapniks/syslog-mode"))])
- (system-packages . [(20220409 1023) ((emacs (24 3))) "functions to manage system packages" single ((:commit . "c087d2c6e598f85fc2760324dce20104ea442fa3") (:authors ("J. Alexander Branham" . "alex.branham@gmail.com")) (:maintainers ("J. Alexander Branham" . "alex.branham@gmail.com")) (:maintainer "J. Alexander Branham" . "alex.branham@gmail.com") (:url . "https://gitlab.com/jabranham/system-packages"))])
- (system-specific-settings . [(20140818 1457) nil "Apply settings only on certain systems" single ((:commit . "0050d85b2175095aa5ecf580a2fe43c069b0eef3") (:authors ("Ryan C. Thompson")) (:maintainers ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:keywords "configuration") (:url . "https://github.com/DarwinAwardWinner/emacs-system-specific-settings"))])
- (systemd . [(20230201 302) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:commit . "8742607120fbc440821acbc351fda1e8e68a8806") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainers ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu") (:keywords "tools" "unix"))])
- (systemtap-mode . [(20151122 1940) nil "A mode for SystemTap" single ((:commit . "8b5086d6b0050a12bb37e33c24c24d1f420afd3b") (:maintainers (nil . "ruediger@c-plusplus.de")) (:maintainer nil . "ruediger@c-plusplus.de") (:keywords "tools" "languages") (:url . "https://github.com/ruediger/systemtap-mode"))])
- (ta . [(20160619 1645) ((emacs (24 3)) (cl-lib (0 5))) "A tool to deal with Chinese homophonic characters" single ((:commit . "668ad41e71f374f8c32c8d0532f3d8485b355d35") (:authors ("kuanyui" . "azazabc123@gmail.com")) (:maintainers ("kuanyui" . "azazabc123@gmail.com")) (:maintainer "kuanyui" . "azazabc123@gmail.com") (:keywords "tools") (:url . "http://github.com/kuanyui/ta.el"))])
- (tab-bar-buffers . [(20220722 1937) ((emacs (28 1))) "Use tab-bar-mode as a buffer manager" single ((:commit . "6d196d4b853c5355403da86607dfb31a038cc024") (:authors ("Andy Rosen" . "ajr@corp.mlfs.org")) (:maintainers ("Andy Rosen" . "ajr@corp.mlfs.org")) (:maintainer "Andy Rosen" . "ajr@corp.mlfs.org") (:keywords "convenience" "frames") (:url . "https://github.com/ajrosen/tab-bar-buffers"))])
- (tab-bar-echo-area . [(20221115 1953) ((emacs (27 1))) "Display tab names of the tab bar in the echo area" single ((:commit . "3ab62ca7db3c1d83f96b7971ea4b3b0101b51ae9") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "convenience") (:url . "https://github.com/fritzgrabo/tab-bar-echo-area"))])
- (tab-bar-groups . [(20211013 2012) ((emacs (27 1)) (s (1 12 0))) "Tab groups for the tab bar" single ((:commit . "a0389d87d2e793055dd74ae85b4593aa1d2720fd") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "convenience") (:url . "https://github.com/fritzgrabo/tab-bar-groups"))])
- (tab-bar-lost-commands . [(20211013 1945) ((emacs (27 1))) "The \"lost commands\" of the tab bar" single ((:commit . "989e03dc3d1057264b21b9a5d241fcba86cd297a") (:authors ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainers ("Fritz Grabo" . "hello@fritzgrabo.com")) (:maintainer "Fritz Grabo" . "hello@fritzgrabo.com") (:keywords "convenience") (:url . "https://github.com/fritzgrabo/tab-bar-lost-commands"))])
- (tab-group . [(20140306 1450) nil "Grouped tabs and their tabbar" single ((:commit . "5a290ec2608e4100fb188fd60ecb77affcc3465b") (:authors ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainers ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainer "INA Lintaro <tarao.gnn at gmail.com>") (:keywords "convenience" "tabs") (:url . "http://github.com/tarao/tab-group-el"))])
- (tab-jump-out . [(20151006 130) ((dash (2 10)) (emacs (24 4))) "Use tab to jump out of delimiter pairs." single ((:commit . "1c3fec1826d2891177ea78e4e7cce1dc67e83e51") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainers ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com") (:keywords "tab" "editing"))])
- (tabbar . [(20180726 1735) nil "Display a tab bar in the header line" tar ((:commit . "82bbda31cbe8ef367dd6501c3aa14b7f2c835910") (:authors ("David Ponce" . "david@dponce.com")) (:maintainers ("David Ponce" . "david@dponce.com")) (:maintainer "David Ponce" . "david@dponce.com") (:keywords "convenience"))])
- (tabbar-ruler . [(20160802 307) ((tabbar (2 0 1)) (powerline (2 3)) (mode-icons (0 4 0)) (cl-lib (0 5))) "Pretty tabbar, autohide, use both tabbar/ruler" tar ((:commit . "535568189aa12a3eff7f977d2783e57b6a65ab6a") (:authors ("Matthew Fidler, Ta Quang Trung, Nathaniel Cunningham")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "tabbar" "ruler mode" "menu" "tool bar.") (:url . "http://github.com/mlf176f2/tabbar-ruler.el"))])
- (tabgo . [(20230425 907) ((emacs (27 1))) "Jump to tabs, avy style" single ((:commit . "1a2f6b2b75c1829eb7acd188086b14fb75d9c7d1") (:authors ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainers ("Isa Mert Gurbuz" . "isamertgurbuz@gmail.com")) (:maintainer "Isa Mert Gurbuz" . "isamertgurbuz@gmail.com") (:url . "https://github.com/isamert/tabgo.el"))])
- (tablist . [(20230321 705) ((emacs (24 3))) "Extended tabulated-list-mode" tar ((:commit . "5f7b71a92bfb25418d7da86ad9c45f14b149496f") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainers ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de") (:keywords "extensions" "lisp"))])
- (tabspaces . [(20230307 2235) ((emacs (27 1)) (project (0 8 1))) "Leverage tab-bar and project for buffer-isolated workspaces" single ((:commit . "315a5b375f9276f9725991c42a7c8a63ff26d51f") (:authors ("Colin McLear" . "mclear@fastmail.com")) (:maintainers ("Colin McLear")) (:maintainer "Colin McLear") (:keywords "convenience" "frames") (:url . "https://github.com/mclear-tools/tabspaces"))])
- (tabula-rasa . [(20141216 547) ((emacs (24 4))) "Distraction free writing mode" single ((:commit . "e85fff9de18dc31bc6a7aca726e34a95cc5459f5") (:authors ("Ido Magal" . "misc@satans.church")) (:maintainers ("Ido Magal" . "misc@satans.church")) (:maintainer "Ido Magal" . "misc@satans.church") (:keywords "distraction free" "writing") (:url . "https://github.com/idomagal/Tabula-Rasa/blob/master/tabula-rasa.el"))])
- (tagedit . [(20161121 855) ((s (1 3 1)) (dash (1 0 3))) "Some paredit-like features for html-mode" single ((:commit . "b3a70101a0dcf85498c92b7fcfa7fdbac869746c") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:keywords "convenience"))])
- (take-off . [(20140531 917) ((emacs (24 3)) (web-server (0 1 0))) "Emacs remote web access" tar ((:commit . "aa9ea45566fc74febbb6ee9c409ecc4b59246215") (:authors ("Thomas Burette" . "burettethomas@gmail.com")) (:maintainers ("Thomas Burette" . "burettethomas@gmail.com")) (:maintainer "Thomas Burette" . "burettethomas@gmail.com") (:url . "https://github.com/tburette/take-off"))])
- (talonscript-mode . [(20220204 1441) ((emacs (24 3))) "Major mode for Talon Voice's .talon files" single ((:commit . "b6eb61f56349e0d47276270163ec611c2d5b188e") (:authors ("Jcaw" . "toastedjcaw@gmail.com")) (:maintainers ("Jcaw" . "toastedjcaw@gmail.com")) (:maintainer "Jcaw" . "toastedjcaw@gmail.com") (:keywords "languages") (:url . "https://github.com/jcaw/talonscript-mode"))])
- (tango-2-theme . [(20120312 2025) nil "Tango 2 color theme for GNU Emacs 24" single ((:commit . "64e44c98e41ebbe3b827d54280e3b9615787daaa") (:authors ("Nick Parker")) (:maintainers ("Nick Parker")) (:maintainer "Nick Parker"))])
- (tango-plus-theme . [(20221011 1012) nil "A color theme based on the tango palette" single ((:commit . "30495d1ab1df6213ecac008c599b91e6f9244c12") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainers ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/tmalsburg/tango-plus-theme"))])
- (tangonov-theme . [(20230425 1456) ((emacs (25))) "A 256 color dark theme featuring bright pastels" single ((:commit . "bfeafe22d38877d4064670adec55ba1e8d09d830") (:authors ("Trevor Richards" . "trev@trevdev.ca")) (:maintainers ("Trevor Richards" . "trev@trevdev.ca")) (:maintainer "Trevor Richards" . "trev@trevdev.ca") (:keywords "faces" "theme" "dark" "fringe") (:url . "https://sr.ht/~trevdev/tangonov-theme/"))])
- (tangotango-theme . [(20220714 2034) nil "Tango Palette color theme for Emacs 24." single ((:commit . "9036c4978965149ae9837bc0ad691b2ba9269052") (:authors ("Julien Barnier" . "julien@nozav.org")) (:maintainers ("Julien Barnier" . "julien@nozav.org")) (:maintainer "Julien Barnier" . "julien@nozav.org") (:keywords "tango" "palette" "color" "theme" "emacs") (:url . "https://github.com/juba/color-theme-tangotango"))])
- (tao-theme . [(20230323 301) nil "This package provides two parametrized uncoloured color themes for Emacs: tao-yin and tao-yang." tar ((:commit . "d44ecab7f68cda9c9f4dd881df5d842e38f44db6") (:authors ("Peter Kosov" . "11111000000@email.com")) (:maintainer "Peter Kosov" . "11111000000@email.com") (:url . "http://github.com/11111000000/tao-theme-emacs"))])
- (tardis-theme . [(20230212 2152) ((emacs (25 1))) "Quantum Country Theme" single ((:commit . "352b1579d13e99cff9367b08208c1e241d76c89e") (:authors ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainers ("Anton Hibl" . "antonhibl11@gmail.com")) (:maintainer "Anton Hibl" . "antonhibl11@gmail.com") (:keywords "convenience") (:url . "https://github.com/antonhibl/tardis-theme"))])
- (taskpaper-mode . [(20230329 1135) ((emacs (25 1))) "Major mode for working with TaskPaper files" single ((:commit . "c7fbde266e72378481e8f039347e2c50bafeb98f") (:authors ("Dmitry Safronov" . "saf.dmitry@gmail.com")) (:maintainers ("Dmitry Safronov" . "saf.dmitry@gmail.com")) (:maintainer "Dmitry Safronov" . "saf.dmitry@gmail.com") (:keywords "outlines" "notetaking" "task management" "productivity" "taskpaper") (:url . "https://github.com/saf-dmitry/taskpaper-mode"))])
- (taskrunner . [(20190916 1608) ((emacs (25 1)) (projectile (2 0 0)) (async (1 9 3))) "Retrieve build system/taskrunner tasks" tar ((:commit . "716323aff410b4d864d137c9ebe4bbb5b8587f5e") (:authors ("Yavor Konstantinov <ykonstantinov1 AT gmail DOT com>")) (:maintainers ("Yavor Konstantinov <ykonstantinov1 AT gmail DOT com>")) (:maintainer "Yavor Konstantinov <ykonstantinov1 AT gmail DOT com>") (:keywords "build-system" "taskrunner" "build" "task-runner" "tasks" "convenience") (:url . "https://github.com/emacs-taskrunner/emacs-taskrunner"))])
- (tawny-mode . [(20210528 1710) ((cider (0 12)) (emacs (25))) "Ontology Editing with Tawny-OWL" single ((:commit . "5da72b601cb9f052f35e88c41f1a18b326c03791") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainers ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))])
- (tblui . [(20161007 1912) ((dash (2 12 1)) (magit-popup (2 6 0)) (tablist (0 70)) (cl-lib (0 5))) "Define tabulated list UI easily" single ((:commit . "e280e11b35a2fdbcadf9ce901a2b62684ac7a7a3") (:authors ("Yuki Inoue <inouetakahiroki _at_ gmail.com>")) (:maintainers ("Yuki Inoue <inouetakahiroki _at_ gmail.com>")) (:maintainer "Yuki Inoue <inouetakahiroki _at_ gmail.com>") (:url . "https://github.com/Yuki-Inoue/tblui.el"))])
- (tbx2org . [(20140224 1559) ((dash (2 5 0)) (s (1 8 0)) (cl-lib (0 4))) "Tinderbox to org-mode conversion" single ((:commit . "08e9816ba6066f56936050b58d07ceb2187ae6f7") (:authors ("istib")) (:maintainers ("istib")) (:maintainer "istib") (:keywords "org-mode") (:url . "https://github.com/istib/tbx2org"))])
- (tc . [(20220122 1443) nil "a Japanese input method with T-Code on Emacs" tar ((:commit . "a3a4738ede3e107a5149c9d55691f57736bf4f48") (:authors ("Kaoru Maeda" . "maeda@src.ricoh.co.jp") ("Yasushi Saito" . "yasushi@cs.washington.edu") ("KITAJIMA Akira" . "kitajima@isc.osakac.ac.jp")) (:maintainers ("KITAJIMA Akira")) (:maintainer "KITAJIMA Akira"))])
- (tco . [(20191129 2040) ((dash (1 2 0)) (emacs (24 3))) "Tail-call optimisation for Emacs lisp" single ((:commit . "d82478d56568f60b3a82fd010b3ca0bab2ef5dc9") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:url . "https://github.com/Wilfred/tco.el"))])
- (tea-time . [(20120331 820) nil "Simple timer package, useful to make perfect tea." single ((:commit . "1f6cf0bdd27c5eb3508989c5095427781f858eca") (:authors ("konsty" . "antipin.konstantin@googlemail.com")) (:maintainers ("Gabriel Saldana" . "gsaldana@gmail.com")) (:maintainer "Gabriel Saldana" . "gsaldana@gmail.com") (:keywords "timer" "tea-time"))])
- (teacode-expand . [(20181231 640) ((emacs (24 4))) "Expansion of text by TeaCode program." single ((:commit . "7df6f9ec95da1fb47bbae489bb3f2c27ed3a9b3a") (:authors ("Richard Guay" . "raguay@customct.com")) (:maintainers ("Richard Guay" . "raguay@customct.com")) (:maintainer "Richard Guay" . "raguay@customct.com") (:keywords "lisp") (:url . "https://github.com/raguay/TeaCode-Expand"))])
- (teco . [(20200707 2309) nil "Teco interpreter" single ((:commit . "2529eb0f7f35c526c1b6fca5250399718ff5138a") (:authors ("Dale R. Worley" . "worley@alum.mit.edu")) (:maintainers ("Mark T. Kennedy" . "mtk@acm.org")) (:maintainer "Mark T. Kennedy" . "mtk@acm.org") (:keywords "convenience" "emulations" "files") (:url . "https://github.com/mtk/teco.git"))])
- (telega . [(20230420 958) ((emacs (27 1)) (visual-fill-column (1 9)) (rainbow-identifiers (0 2 2))) "Telegram client (unofficial)" tar ((:commit . "879a8c7afc8967942613b6b898d9ea8c1f3641bf") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainers ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru") (:keywords "comm") (:url . "https://github.com/zevlg/telega.el"))])
- (telepathy . [(20131209 1258) nil "Access Telepathy from Emacs" single ((:commit . "211d785b02a29ddc254422fdcc3db45262582f8c") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainers ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com") (:keywords "telepathy" "tools"))])
- (telephone-line . [(20230322 442) ((emacs (24 4)) (cl-lib (0 5)) (cl-generic (0 2)) (seq (1 8))) "Rewrite of Powerline" tar ((:commit . "202f9c94f7b86827ab7ebb6dbce8302b0447d6ff") (:authors ("Daniel Bordak" . "dbordak@fastmail.fm")) (:maintainers ("Daniel Bordak" . "dbordak@fastmail.fm")) (:maintainer "Daniel Bordak" . "dbordak@fastmail.fm") (:keywords "mode-line") (:url . "https://github.com/dbordak/telephone-line"))])
- (teletext . [(20211203 1111) ((emacs (24 3))) "Teletext broadcast viewer" single ((:commit . "6b003e9dab9bd0c27d188a81f5fff740d66a2282") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "comm" "help" "hypermedia") (:url . "https://github.com/lassik/emacs-teletext"))])
- (teletext-yle . [(20210927 825) ((emacs (24 3)) (teletext (0 1))) "Teletext provider for Finnish national network YLE" single ((:commit . "9c8f4b503923c4ec688e2dcc9dff62d71bc55933") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "comm" "help" "hypermedia") (:url . "https://github.com/lassik/emacs-teletext-yle"))])
- (tempel . [(20230410 1742) ((emacs (27 1)) (compat (29 1 4 0))) "Tempo templates/snippets with in-buffer field editing" single ((:commit . "94afb9b916a711c56f23183da93a103338e9f84e") (:authors ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainer "Daniel Mendler" . "mail@daniel-mendler.de") (:keywords "abbrev" "languages" "tools" "wp") (:url . "https://github.com/minad/tempel"))])
- (tempel-collection . [(20230504 428) ((tempel (0 5)) (emacs (27 1))) "Collection of templates for Tempel" tar ((:commit . "8903f03227d3c3b83d31e6bb095743c350bcb578") (:authors ("Vitalii Drevenchuk" . "cradlemann@gmail.com") ("Max Penet" . "mpenetr@s-exp.com") ("Daniel Mendler" . "mail@daniel-mendler.de")) (:maintainers ("Vitalii Drevenchuk" . "cradlemann@gmail.com")) (:maintainer "Vitalii Drevenchuk" . "cradlemann@gmail.com") (:keywords "tools") (:url . "https://github.com/Crandel/tempel-collection"))])
- (template-overlays . [(20180706 1132) ((emacs (24 4)) (ov (1 0 6))) "Display template regions using overlays" single ((:commit . "3cbc9a4882dcbbddf9b168883d119a6af0848784") (:authors ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainers ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainer "Mariano Montone" . "marianomontone@gmail.com") (:keywords "faces" "convenience" "templates" "overlays") (:url . "http://www.github.com/mmontone/template-overlays"))])
- (templatel . [(20210902 228) ((emacs (25 1))) "Templating language;" single ((:commit . "e1ccb88cdc4b482b078276960f810b82ba3b7847") (:authors ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainers ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainer "Lincoln Clarete" . "lincoln@clarete.li") (:url . "https://clarete.li/templatel"))])
- (temporary-persistent . [(20230115 1425) ((emacs (24 3)) (names (20151201 0)) (dash (2 12 1)) (s (1 10 0))) "Keep temp notes buffers persistent" single ((:commit . "edbde738769e79ac212ae84ae7898ffd5f19e0f1") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainers ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:keywords "temp" "buffers" "notes") (:url . "https://github.com/kostafey/temporary-persistent"))])
- (ten-hundred-mode . [(20161028 2236) ((cl-lib (0 5))) "use only the ten hundred most usual words" tar ((:commit . "bdcfda49b1819e82d61fe90947e50bb948cf7933"))])
- (term+ . [(20170509 17) ((emacs (24)) (cl-lib (0 5))) "term-mode enhancement" tar ((:commit . "c3c9239b339c127231860de43abfa08c44c0201a") (:authors ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainers ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainer "INA Lintaro <tarao.gnn at gmail.com>") (:keywords "terminal" "emulation") (:url . "https://github.com/tarao/term-plus-el"))])
- (term+key-intercept . [(20140211 750) ((term+ (0 1)) (key-intercept (0 1))) "term+ intercept key mapping" single ((:commit . "fd0771fd66b8c7a909aaac972194485c79ba48c4") (:authors ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainers ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainer "INA Lintaro <tarao.gnn at gmail.com>") (:keywords "terminal" "emulation") (:url . "http://github.com/tarao/term+-el"))])
- (term+mux . [(20140211 749) ((term+ (0 1)) (tab-group (0 1))) "term+ terminal multiplexer and session management" single ((:commit . "81b60e80cf008472bfd7fad9233af2ef722c208a") (:authors ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainers ("INA Lintaro <tarao.gnn at gmail.com>")) (:maintainer "INA Lintaro <tarao.gnn at gmail.com>") (:keywords "terminal" "emulation") (:url . "http://github.com/tarao/term+-el"))])
- (term-alert . [(20230407 1715) ((emacs (24 0)) (term-cmd (1 1)) (alert (1 1)) (f (0 18 2))) "Notifications when commands complete in term.el." tar ((:commit . "8e7e744773e41355bcd9f5c911001be08bc79bec") (:authors ("Callie Cameron" . "cjcameron7@gmail.com")) (:maintainer "Callie Cameron" . "cjcameron7@gmail.com") (:keywords "notifications" "processes") (:url . "https://github.com/calliecameron/term-alert"))])
- (term-cmd . [(20230407 1704) ((emacs (27 2)) (dash (2 12 0)) (f (0 18 2))) "Send commands from programs running in term.el." tar ((:commit . "26c5a8cb6b55ac0d6c6bc08f6ea1b1e53f6e2654") (:authors ("Callie Cameron" . "cjcameron7@gmail.com")) (:maintainer "Callie Cameron" . "cjcameron7@gmail.com") (:keywords "processes") (:url . "https://github.com/calliecameron/term-cmd"))])
- (term-manager . [(20190610 2032) ((dash (2 12 0)) (emacs (24 4))) "Contextual terminal management" tar ((:commit . "eea7894350a4f31e1df0c666d3fb0bac822d34d2") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "terminals" "tools") (:url . "https://www.github.com/IvanMalison/term-manager"))])
- (term-projectile . [(20190307 400) ((emacs (24)) (term-manager (0 1 0)) (projectile (0 13 0))) "projectile terminal management" single ((:commit . "fad6760e66f64661e77e952f06b2fbef1e88e4fe") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "projectile" "tools" "terminals" "vc") (:url . "https://www.github.com/IvanMalison/term-manager"))])
- (term-run . [(20200128 702) nil "Run arbitrary command in terminal buffer" single ((:commit . "0fd135d55fcf864598b1fb8dd880833a1a322910") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainers ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:keywords "utility" "shell" "command" "term-mode") (:url . "https://github.com/10sr/term-run-el"))])
- (termbright-theme . [(20151031 235) ((emacs (24 1))) "a more usable theme for white-on-black terminals" single ((:commit . "bec6ab14336c0611e85f45486276004f16d20607") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainers ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net") (:keywords "themes") (:url . "https://github.com/bmastenbrook/termbright-theme-el"))])
- (terminal-focus-reporting . [(20180830 719) ((emacs (24 4))) "Minor mode for terminal focus reporting." single ((:commit . "8b84bf18f4c5f1b59a11692eb706f13c3598d9a5") (:authors ("Vitalii Elenhaupt")) (:maintainers ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:keywords "convenience") (:url . "https://github.com/veelenga/terminal-focus-reporting.el"))])
- (terminal-here . [(20220827 819) ((emacs (25 1))) "Run an external terminal in current directory" single ((:commit . "4bf2a77e450b260570033afda463e178fdf34617") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainers ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:keywords "tools" "frames") (:url . "https://github.com/davidshepherd7/terminal-here"))])
- (terminal-toggle . [(20190226 1510) ((emacs (24)) (popwin (1 0 0))) "simple pop-up terminal" single ((:commit . "f824d634aef3600cb7a8e2ddf9e8444c6607c160") (:authors ("Mehmet Tekman")) (:maintainers ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:keywords "outlines") (:url . "https://github.com/mtekman/terminal-toggle.el"))])
- (tern . [(20191227 950) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" single ((:commit . "0d19800db70a6348c627a69f444b91d21ad89629") (:authors ("Marijn Haverbeke")) (:maintainers ("Marijn Haverbeke")) (:maintainer "Marijn Haverbeke") (:url . "http://ternjs.net/"))])
- (tern-auto-complete . [(20191227 950) ((tern (0 0 1)) (auto-complete (1 4)) (cl-lib (0 5)) (emacs (24))) "Tern Completion by auto-complete.el" single ((:commit . "0d19800db70a6348c627a69f444b91d21ad89629") (:authors ("<m.sakurai at kiwanami.net>")) (:maintainers ("<m.sakurai at kiwanami.net>")) (:maintainer "<m.sakurai at kiwanami.net>"))])
- (tern-context-coloring . [(20170102 2253) ((emacs (24 3)) (context-coloring (8 1 0)) (tern (0 0 1))) "Use Tern for context coloring" single ((:commit . "3a8e979d6cc83aabcb3dda3f5f31a6422532efba") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainers ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com") (:keywords "convenience" "faces" "tools") (:url . "https://github.com/jacksonrayhamilton/tern-context-coloring"))])
- (terraform-doc . [(20211003 1333) ((emacs (24 4))) "Look up terraform documentation on the fly" single ((:commit . "16179e57ce290190c222b27961900657a1981330") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainers ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:keywords "comm") (:url . "https://github.com/TxGVNN/terraform-doc"))])
- (terraform-mode . [(20230502 2213) ((emacs (24 3)) (hcl-mode (0 3)) (dash (2 17 0))) "Major mode for terraform configuration file" single ((:commit . "56f19abae95afb7e13e48ec3e6aeba3820d31307") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-terraform-mode"))])
- (tesouro . [(20221003 1303) ((request (0 3 2)) (emacs (24 4))) "Brazilian Portuguese synonym search in dicio.com.br" single ((:commit . "3dbfc49209237215163be1ea338dea099ddc0795") (:url . "https://github.com/rberaldo/tesouro.el"))])
- (test-c . [(20180423 1720) ((emacs (24 3))) "quickly test c code" single ((:commit . "761a576f62c7021ba941f178f153c51289df1553") (:authors ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainers ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainer "Aurélien Aptel" . "aurelien.aptel@gmail.com") (:url . "http://github.com/aaptel/test-c"))])
- (test-case-mode . [(20130525 1434) ((fringe-helper (0 1 1))) "unit test front-end" single ((:commit . "26e397c0f930b7eb0be413ef7dd257b1da052bec") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "tools") (:url . "http://nschum.de/src/emacs/test-case-mode/"))])
- (test-kitchen . [(20171129 2035) nil "Run test-kitchen inside of emacs" single ((:commit . "0fc0ca4808425f03fbeb8125246043723e2a179a") (:authors ("JJ Asghar")) (:maintainers ("JJ Asghar")) (:maintainer "JJ Asghar") (:keywords "chef" "ruby" "test-kitchen") (:url . "http://github.com/jjasghar/test-kitchen-el"))])
- (test-simple . [(20200722 1121) ((cl-lib (0))) "Simple Unit Test Framework for Emacs Lisp" single ((:commit . "29c2c1ca7c240c8dfdba93dba6201e542a5a3b43") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainers ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:keywords "unit-test") (:url . "https://github.com/rocky/emacs-test-simple"))])
- (tex-smart-umlauts . [(20230416 2051) nil "Smart umlaut conversion for TeX." single ((:commit . "b28bac71990e0442616157fdb64494179df5575e") (:authors ("Frank Fischer <frank-fischer at shadow-soft.de>")) (:maintainers ("Frank Fischer <frank-fischer at shadow-soft.de>")) (:maintainer "Frank Fischer <frank-fischer at shadow-soft.de>") (:keywords "tex" "wp") (:url . "http://hub.darcs.net/lyro/tex-smart-umlauts"))])
- (texfrag . [(20230117 1746) ((emacs (25)) (auctex (11 90 2))) "preview LaTeX fragments in alien major modes" single ((:commit . "6df9044c3d6bbb2a104f2c9b78ad10aa3cdf9506") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainers ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de") (:keywords "tex" "languages" "wp") (:url . "https://github.com/TobiasZawada/texfrag"))])
- (text-categories . [(20230425 1154) ((emacs (26 2))) "Assign text categories to a buffer for mass deletion" single ((:commit . "7ae616e45005c469273dd4285cd0808885860984") (:authors ("Dionisios Spiliopoulos" . "dennisspiliopoylos@gmail.com")) (:maintainers ("Dionisios Spiliopoulos" . "dennisspiliopoylos@gmail.com")) (:maintainer "Dionisios Spiliopoulos" . "dennisspiliopoylos@gmail.com") (:keywords "lisp") (:url . "https://github.com/Dspil/text-categories"))])
- (textile-mode . [(20230112 1030) nil "Textile markup editing major mode" single ((:commit . "8f8c09ef097a95a713307fdb5c92b9778dfbc1fc") (:authors ("Julien Barnier" . "julien@nozav.org")) (:maintainers ("Julien Barnier" . "julien@nozav.org")) (:maintainer "Julien Barnier" . "julien@nozav.org") (:keywords "wp" "languages") (:url . "https://github.com/juba/textile-mode"))])
- (textmate . [(20110816 2146) nil "TextMate minor mode for Emacs" single ((:commit . "350918b070148f0ace6d9d3cd4ebcaf15c1a8781") (:authors ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainers ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainer "Chris Wanstrath" . "chris@ozmm.org") (:keywords "textmate" "osx" "mac"))])
- (textmate-to-yas . [(20160409 1708) nil "Import Textmate macros into yasnippet syntax" tar ((:commit . "be3a768b7ac4c2e24b9d4aa6e9ac1d916cdc5a73") (:authors ("Matthew L. Fidler")) (:maintainers ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:keywords "yasnippet" "textmate") (:url . "https://github.com/mlf176f2/textmate-to-yas.el/"))])
- (textsize . [(20220427 1445) ((emacs (26 1))) "Configure frame text size automatically" single ((:commit . "df91392c3c928d7841631f5809716b9cf0f7309e") (:authors ("James Ferguson" . "james@faff.org")) (:maintainers ("James Ferguson" . "james@faff.org")) (:maintainer "James Ferguson" . "james@faff.org") (:keywords "convenience") (:url . "https://github.com/WJCFerguson/textsize"))])
- (textx-mode . [(20230324 2020) ((emacs (24 3))) "Major mode for editing TextX files" single ((:commit . "ecf90abec508cfd82d5da68474e976be907d9a77") (:authors ("Novak Boškov" . "gnovak.boskov@gmail.com")) (:maintainers ("Novak Boškov" . "gnovak.boskov@gmail.com")) (:maintainer "Novak Boškov" . "gnovak.boskov@gmail.com") (:keywords "textx") (:url . "https://github.com/novakboskov/textx-mode"))])
- (tf2-conf-mode . [(20161209 1620) nil "TF2 Configuration files syntax highlighting" single ((:commit . "94c971da4a78d55da2848d1e76d513e5e0a8f7eb") (:authors ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainers ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainer "Guillermo Robles" . "guillerobles1995@gmail.com") (:keywords "languages") (:url . "https://github.com/wynro/emacs-tf2-conf-mode"))])
- (tfsmacs . [(20180911 2114) ((emacs (25)) (tablist (0 70))) "MS TFS source control interaction." single ((:commit . "13ee3f528ff616880611f563a68d921250692ef8") (:authors ("Dino Chiesa <dpchiesa@outlook.com>, Sebastian Monia" . "smonia@outlook.com")) (:maintainers ("Dino Chiesa <dpchiesa@outlook.com>, Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Dino Chiesa <dpchiesa@outlook.com>, Sebastian Monia" . "smonia@outlook.com") (:keywords "tfs" "vc") (:url . "http://github.com/sebasmonia/tfsmacs/"))])
- (the-matrix-theme . [(20230402 1218) ((emacs (26 1))) "Green-on-black dark theme inspired by \"The Matrix\" movie" single ((:commit . "b339285651e088bc51fa2fb51aa319fb70cab9a4") (:authors ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainers ("Dan Dee" . "monkeyjunglejuice@pm.me")) (:maintainer "Dan Dee" . "monkeyjunglejuice@pm.me") (:keywords "faces" "theme") (:url . "https://github.com/monkeyjunglejuice/matrix-emacs-theme"))])
- (theme-anchor . [(20220204 321) ((emacs (26))) "Apply theme in current buffer only" single ((:commit . "c6f715d4ccd30e83922e39cab856578ce19224bb") (:authors ("LiÄu, Kiong-GÄ“" . "gliao.tw@pm.me")) (:maintainers ("LiÄu, Kiong-GÄ“" . "gliao.tw@pm.me")) (:maintainer "LiÄu, Kiong-GÄ“" . "gliao.tw@pm.me") (:keywords "extensions" "lisp" "theme") (:url . "https://github.com/GongYiLiao/theme-anchor"))])
- (theme-changer . [(20230417 1502) ((cl-lib (0))) "Sunrise/Sunset Theme Changer for Emacs" single ((:commit . "2ff40a1750323a3547ca7a71c319971c8e1147ca") (:authors ("Joshua B. Griffith" . "josh.griffith@gmail.com")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "color-theme" "deftheme" "solar" "sunrise" "sunset") (:url . "https://github.com/hadronzoo/theme-changer"))])
- (theme-looper . [(20210827 424) ((emacs (24)) (cl-lib (0 5))) "A package for switching themes in Emacs interactively" single ((:commit . "e6e8efd740df0b68db89805ba72492818dba61ab") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainers ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:keywords "convenience" "color-themes") (:url . "http://ismail.teamfluxion.com"))])
- (theme-magic . [(20190711 2034) ((emacs (25)) (seq (1 8))) "Apply your Emacs theme to the rest of Linux" tar ((:commit . "844c4311bd26ebafd4b6a1d72ddcc65d87f074e3") (:authors ("GitHub user \"jcaw\"" . "40725916+jcaw@users.noreply.github.com")) (:maintainers ("GitHub user \"jcaw\"" . "40725916+jcaw@users.noreply.github.com")) (:maintainer "GitHub user \"jcaw\"" . "40725916+jcaw@users.noreply.github.com") (:keywords "unix" "faces" "terminals" "extensions") (:url . "https://github.com/jcaw/theme-magic.el"))])
- (therapy . [(20151113 1953) ((emacs (24))) "Hooks for managing multiple Python major versions" single ((:commit . "775a92bb7b6b0fcc5b38c0b5198a9d0a1bef788a") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/therapy"))])
- (thingopt . [(20160520 2318) nil "Thing at Point optional utilities" single ((:commit . "5679815852652479f3b3c9f3a98affc927384b2c") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com") (:keywords "convenience"))])
- (thinks . [(20170802 1128) ((cl-lib (0 5))) "Insert text in a think bubble." single ((:commit . "15e0437f5b635bdcf738ca092e26aa6d8ecdba36") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "convenience" "quoting") (:url . "https://github.com/davep/thinks.el"))])
- (thread-dump . [(20170816 1850) nil "Java thread dump viewer" single ((:commit . "204c9600242756d4b514bb5ff6293e052bf4b49d") (:authors ("Dmitry Neverov")) (:maintainers ("Dmitry Neverov")) (:maintainer "Dmitry Neverov") (:url . "http://github.com/nd/thread-dump.el"))])
- (threes . [(20160820 1242) ((emacs (24)) (seq (1 11))) "A clone of Threes (a tiny puzzle game)" single ((:commit . "6981acb30b856c77cba6aba63fefbf102cbdfbb2") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:keywords "games") (:url . "https://github.com/xuchunyang/threes.el"))])
- (thrift . [(20230430 1901) ((emacs (24))) "major mode for fbthrift and Apache Thrift files" single ((:commit . "dbde9f181e1f19fe2879c9d08e571306c2eb484e") (:keywords "languages"))])
- (thumb-through . [(20120119 534) nil "Plain text reader of HTML documents" single ((:commit . "08d8fb720f93c6172653e035191a8fa9c3305e63") (:keywords "html"))])
- (tickscript-mode . [(20171219 203) ((emacs (24 1))) "A major mode for Tickscript files" single ((:commit . "f0579f38ff14954df5002ce30ae6d4a2c978d461") (:authors ("Marc Sherry" . "msherry@gmail.com")) (:maintainers ("Marc Sherry" . "msherry@gmail.com")) (:maintainer "Marc Sherry" . "msherry@gmail.com") (:keywords "languages") (:url . "https://github.com/msherry/tickscript-mode"))])
- (tidal . [(20230312 1245) ((haskell-mode (16)) (emacs (25 1))) "Interact with TidalCycles for live coding patterns" single ((:commit . "3ac320020d809ea626fc283839fecb10c9da4ce2") (:authors (nil . "alex@slab.org")) (:maintainers (nil . "alex@slab.org")) (:maintainer nil . "alex@slab.org") (:keywords "tools") (:url . "https://github.com/tidalcycles/Tidal"))])
- (tide . [(20230428 1846) ((emacs (25 1)) (dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:commit . "ea47d8faa64de4f48473dc753ae3ea5abeaf770e") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainers ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:keywords "typescript") (:url . "http://github.com/ananthakumaran/tide"))])
- (tikz . [(20220526 521) ((emacs (24 1))) "A minor mode to edit TikZ pictures" tar ((:commit . "4b205afc5c88f050639135d1d57f1276db323842") (:authors ("Emilio Torres-Manzanera" . "torres@uniovi.es")) (:maintainers ("Emilio Torres-Manzanera" . "torres@uniovi.es")) (:maintainer "Emilio Torres-Manzanera" . "torres@uniovi.es") (:keywords "tex") (:url . "https://github.com/emiliotorres/tikz"))])
- (tile . [(20161225 357) ((emacs (25 1)) (s (1 9 0)) (dash (2 12 0)) (stream (2 2 3))) "Tile windows with layouts" single ((:commit . "22660f21f6e95de5aba55cd5d293d4841e9a4661") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainers ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:keywords "tile" "tiling" "window" "manager" "dynamic" "frames") (:url . "https://github.com/IvanMalison/tile"))])
- (time-block . [(20230410 2110) ((emacs (25 1)) (ts (0 1))) "Block running commands using time" single ((:commit . "02a7988f2a3d6124b48716fa341677f93da6eb30") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "tools" "productivity" "convenience") (:url . "https://git.sr.ht/~swflint/time-block-command"))])
- (time-ext . [(20170126 1215) nil "more function for time/date" single ((:commit . "d128becf660fe3f30178eb1b05cd266741f4784a") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "lisp") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/time-ext.el"))])
- (time-uuid-mode . [(20230312 2256) ((emacs (24 3))) "Minor mode for previewing time uuids as an overlay" single ((:commit . "6f0768edb7588add3713952e5b20e9df8ee51f89") (:authors ("Robert Plant" . "rob@robertplant.io")) (:maintainers ("Robert Plant" . "rob@robertplant.io")) (:maintainer "Robert Plant" . "rob@robertplant.io") (:keywords "extensions" "convenience" "data" "tools") (:url . "https://github.com/RobertPlant/time-uuid-mode"))])
- (timecop . [(20160520 1052) ((cl-lib (0 5)) (datetime-format (0 0 1))) "Freeze Time for testing" single ((:commit . "3a1871613facc928ff250ed8f12fbc7073e46b75") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "datetime" "testing") (:url . "https://github.com/zonuexe/emacs-datetime"))])
- (timer-revert . [(20150122 2032) nil "minor mode to revert buffer for a given time interval." tar ((:commit . "615c91dec8b440d2b9b7c725dd733d7432564e45") (:authors ("Yagnesh Raghava Yakkala. http://yagnesh.org")) (:maintainer nil . "hi@yagnesh.org") (:keywords "timer" "revert" "auto-revert.") (:url . "http://github.com/yyr/timer-revert"))])
- (timesheet . [(20221004 1702) ((s (1)) (org (9))) "Timesheet management add-on for org-mode" tar ((:commit . "511751b239c84d7619ec1c61d7f108b732b64442") (:authors ("Tom Marble")) (:maintainers ("Tom Marble")) (:maintainer "Tom Marble") (:keywords "org" "timesheet") (:url . "https://github.com/tmarble/timesheet.el"))])
- (timonier . [(20170411 800) ((emacs (24 4)) (s (1 11 0)) (f (0 19 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (hydra (0 13 6)) (request (0 2 0)) (all-the-icons (2 0 0))) "Manage Kubernetes Applications" tar ((:commit . "3460a878269424c8d19b7d5d8e04749d0a8bf203") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "kubernetes" "docker") (:url . "https://github.com/nlamirault/timonier"))])
- (timp . [(20160618 803) ((emacs (24 4)) (cl-lib (0 5)) (fifo-class (1 0)) (signal (1 0))) "Multithreading library" tar ((:commit . "59657bf603904635d88c3fe4ff1ce45ee6572428") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainers ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:keywords "internal" "lisp" "processes" "tools") (:url . "https://github.com/mola-T/timp"))])
- (timu-caribbean-theme . [(20221226 1556) ((emacs (27 1))) "Color theme with cyan as a dominant color" single ((:commit . "af60151fe35bd1c780b7c4a37032699989ee6162") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-caribbean-theme"))])
- (timu-macos-theme . [(20230504 1359) ((emacs (27 1))) "Color theme inspired by the macOS UI" single ((:commit . "96950480897302b3612cc78467560c56ee24122e") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-macos-theme"))])
- (timu-rouge-theme . [(20230102 1925) ((emacs (27 1))) "Color theme inspired by the Rouge Theme for VSCode" single ((:commit . "87117f15ea5fcfacbbad23ea6f345d18c2ff0009") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-rouge-theme"))])
- (timu-spacegrey-theme . [(20230102 59) ((emacs (26 1))) "Color theme inspired by the Spacegray theme in Sublime Text" single ((:commit . "0d0d977c2149f695de0e4de55ae64a672c34bfac") (:authors ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainers ("Aimé Bertrand" . "aime.bertrand@macowners.club")) (:maintainer "Aimé Bertrand" . "aime.bertrand@macowners.club") (:keywords "faces" "themes") (:url . "https://gitlab.com/aimebertrand/timu-spacegrey-theme"))])
- (tinkerer . [(20200914 1756) ((s (1 2 0))) "Elisp wrapper for Tinkerer Blogging Engine." single ((:commit . "7cedeb264a44cd62bcd9c778dca52316d09e07e5") (:authors ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainers ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainer "Yagnesh Raghava Yakkala" . "hi@yagnesh.org") (:keywords "tinkerer" "blog" "wrapper") (:url . "https://github.com/yyr/tinkerer.el"))])
- (tiny . [(20220910 1929) nil "Quickly generate linear ranges in Emacs" single ((:commit . "c107480fca7e42737c51b2afaa33ac31e92a7290") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "convenience") (:url . "https://github.com/abo-abo/tiny"))])
- (tiny-menu . [(20220725 1748) ((emacs (24 4))) "Display tiny menus." single ((:commit . "17eacfd1d44cd4d5482d32eac63229230c3cd3fc") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainers ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:keywords "menu" "tools") (:url . "https://github.com/aaronbieber/tiny-menu.el"))])
- (tinypng . [(20200306 911) ((emacs (25 1))) "Compress PNG and JPEG with TinyPNG.com API" single ((:commit . "f7632e073ce13ef5ce30ae5584cb482a8bb9ffff") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "multimedia") (:url . "https://github.com/xuchunyang/tinypng.el"))])
- (tinysegmenter . [(20141124 1013) ((cl-lib (0 5))) "Super compact Japanese tokenizer in Javascript ported to emacs lisp" single ((:commit . "872134704bd25c13a4c59552433da4c6881b5230") (:authors ("lugecy" . "lugecy@gmail.com")) (:maintainers ("myuhe")) (:maintainer "myuhe") (:keywords "convenience") (:url . "https://github.com/myuhe/tinysegmenter.el"))])
- (titlecase . [(20220728 2253) ((emacs (25 1))) "Title-case phrases" tar ((:commit . "1fc48a505a0bf7d0e8b1bb25425993212576a3ef") (:authors ("Case Duckworth" . "acdw@acdw.net")) (:maintainers ("Case Duckworth" . "acdw@acdw.net")) (:maintainer "Case Duckworth" . "acdw@acdw.net") (:url . "https://codeberg.org/acdw/titlecase.el"))])
- (tj3-mode . [(20180519 1228) nil "major mode for editing TaskJuggler 3 files" single ((:commit . "1d98eb23f1606392f34ef1b80517cfc940fb9950") (:authors ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainers ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainer "Christophe Rhodes" . "christophe@rhodes.io") (:url . "https://github.com/csrhodes/tj3-mode"))])
- (tldr . [(20230301 136) ((emacs (24 3))) "tldr client for Emacs" single ((:commit . "1b09d2032491d3904bd7ee9bf5ba7c7503db6593") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainers ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com") (:keywords "tools" "docs") (:url . "https://github.com/kuanyui/tldr.el"))])
- (tmmofl . [(20121025 1101) nil "Calls functions dependant on font lock highlighting at point" single ((:commit . "532aa6978e994e2b069ffe37aaf9a0011a07dadc") (:authors ("Phillip Lord" . "p.lord@hgmp.mrc.ac.uk")) (:maintainers ("Phillip Lord" . "p.lord@hgmp.mrc.ac.uk")) (:maintainer "Phillip Lord" . "p.lord@hgmp.mrc.ac.uk") (:keywords "minor mode" "font lock" "toggling."))])
- (tmsu . [(20230430 1243) ((emacs (28 1))) "A basic TMSU interface" tar ((:commit . "c92497b9b5282864cde2a9e0f507fd8b78e0400e") (:authors ("Wojciech Siewierski")) (:maintainers ("Wojciech Siewierski")) (:maintainer "Wojciech Siewierski") (:keywords "files") (:url . "https://github.com/vifon/tmsu.el"))])
- (tmux-pane . [(20200730 520) ((names (0 5)) (emacs (24)) (s (0))) "Provide integration between emacs window and tmux pane" single ((:commit . "923524efe8e6e5e0d269de6bb253b45e02d9a663") (:keywords "convenience" "terminals" "tmux" "window" "pane" "navigation" "integration") (:url . "https://github.com/laishulu/emacs-tmux-pane"))])
- (toc-mode . [(20220926 530) ((emacs (26 1))) "Manage outlines/table of contents of pdf and djvu documents" single ((:commit . "448a0ac00c110802f3124bbf9c5a72bdfc3c3c28") (:authors ("Daniel Laurens Nicolai" . "dalanicolai@gmail.com")) (:maintainers ("Daniel Laurens Nicolai" . "dalanicolai@gmail.com")) (:maintainer "Daniel Laurens Nicolai" . "dalanicolai@gmail.com") (:keywords "tools" "outlines" "convenience") (:url . "https://github.com/dalanicolai/toc-mode"))])
- (toc-org . [(20220110 1452) nil "add table of contents to org-mode files (formerly, org-toc)" single ((:commit . "bf2e4b358efbd860ecafe6e74776de0885d9d100") (:authors ("Sergei Nosov <sergei.nosov [at] gmail.com>")) (:maintainers ("Sergei Nosov <sergei.nosov [at] gmail.com>")) (:maintainer "Sergei Nosov <sergei.nosov [at] gmail.com>") (:keywords "org-mode" "org-toc" "toc-org" "org" "toc" "table" "of" "contents") (:url . "https://github.com/snosov1/toc-org"))])
- (todoist . [(20230120 2208) ((dash (2 15 0)) (transient (0 1 0)) (org (8 3 5)) (emacs (25 3))) "Extension for interacting and managing todoist tasks" single ((:commit . "d79b4ea4ea4891635966bfc2c769484d2916be80") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "todoist" "task" "todo" "comm") (:url . "https://github.com/abrochard/emacs-todoist"))])
- (todotxt . [(20220204 1903) nil "A major mode for editing todo.txt files" single ((:commit . "ddb25fb931b4bbc1af14c4c712d412af454794c4") (:authors ("Rick Dillon" . "rpdillon@killring.org")) (:maintainers ("Rick Dillon" . "rpdillon@killring.org")) (:maintainer "Rick Dillon" . "rpdillon@killring.org") (:keywords "todo.txt" "todotxt" "todotxt.el") (:url . "https://github.com/rpdillon/todotxt.el"))])
- (todotxt-mode . [(20200228 952) nil "Major mode for editing todo.txt files" single ((:commit . "8b616ce1cf3e18a60757450a0acf22996abb9b79") (:authors ("Adolfo Villafiorita" . "adolfo.villafiorita@me.com")) (:maintainers ("Adolfo Villafiorita" . "adolfo.villafiorita@me.com")) (:maintainer "Adolfo Villafiorita" . "adolfo.villafiorita@me.com") (:keywords "wp" "files"))])
- (togetherly . [(20170426 616) ((cl-lib (0 3))) "allow multiple clients to edit a single buffer online" single ((:commit . "65072b1d5e04c7098c318ebf1af279f596039ef9") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (toggle-quotes . [(20140710 926) nil "Toggle between single and double quoted string" single ((:commit . "33abc221d6887f0518337851318065cd86c34b03") (:authors ("Jim Tian" . "tianjin.sc@gmail.com")) (:maintainers ("Jim Tian" . "tianjin.sc@gmail.com")) (:maintainer "Jim Tian" . "tianjin.sc@gmail.com") (:keywords "convenience" "quotes") (:url . "https://github.com/toctan/toggle-quotes.el"))])
- (toggle-test . [(20140723 537) nil "Toggle between source and test files in various programming languages" single ((:commit . "a0b64834101c2b8b24da365baea1d36e57b069b5") (:authors ("Raghunandan Rao" . "r.raghunandan@gmail.com")) (:maintainers ("Raghunandan Rao" . "r.raghunandan@gmail.com")) (:maintainer "Raghunandan Rao" . "r.raghunandan@gmail.com") (:keywords "tdd" "test" "toggle" "productivity") (:url . "https://github.com/rags/toggle-test"))])
- (toggle-window . [(20141207 1548) nil "toggle current window size between half and full" single ((:commit . "e82c60e543933880402ede11e9423e48a17dde53") (:authors ("Kenny Liu")) (:maintainers ("Kenny Liu")) (:maintainer "Kenny Liu") (:keywords "hide" "window") (:url . "https://github.com/deadghost/toggle-window"))])
- (tok-theme . [(20230422 1801) ((emacs (26 1))) "Minimal light monochromatic theme for Emacs in the spirit of Zmacs and Smalltalk-80" single ((:commit . "2fcf494fe5f3f292bb5dab180fe2dbfdcc75249e") (:authors ("Topi Kettunen" . "topi@topikettunen.com")) (:maintainers ("Topi Kettunen" . "topi@topikettunen.com")) (:maintainer "Topi Kettunen" . "topi@topikettunen.com") (:url . "https://github.com/topikettunen/tok-theme"))])
- (tokei . [(20220823 2058) ((emacs (27 1)) (magit-section (3 3 0))) "Display codebase statistics" single ((:commit . "86fbca422f580a95eb30247e46891184f3ac5c18") (:authors ("Daniel Nagy <https://github.com/nagy>")) (:maintainers ("Daniel Nagy" . "danielnagy@posteo.de")) (:maintainer "Daniel Nagy" . "danielnagy@posteo.de") (:url . "https://github.com/nagy/tokei.el"))])
- (tomatinho . [(20180621 1748) nil "Simple and beautiful pomodoro timer" tar ((:commit . "b53354b9b9f496c0388d6a573b06b7d6fc53d0bd") (:authors ("Konrad Scorciapino" . "scorciapino@gmail.com")) (:maintainers ("Konrad Scorciapino" . "scorciapino@gmail.com")) (:maintainer "Konrad Scorciapino" . "scorciapino@gmail.com") (:keywords "time" "productivity" "pomodoro technique"))])
- (toml . [(20230411 1449) nil "TOML (Tom's Obvious, Minimal Language) parser" single ((:commit . "ee4a12bfc8c890c5e8b4bfa35837ce672a882967") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainers ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:keywords "toml" "parser") (:url . "https://github.com/gongo/emacs-toml"))])
- (toml-mode . [(20161107 1800) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing TOML files" single ((:commit . "f6c61817b00f9c4a3cab1bae9c309e0fc45cdd06") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainers ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com") (:keywords "data" "toml") (:url . "https://github.com/dryman/toml-mode.el"))])
- (tommyh-theme . [(20131004 2330) nil "A bright, bold-colored theme for emacs" single ((:commit . "46d1c69ee0a1ca7c67b569b891a2f28fed89e7d5") (:authors ("William Glass" . "william.glass@gmail.com")) (:maintainers ("William Glass" . "william.glass@gmail.com")) (:maintainer "William Glass" . "william.glass@gmail.com"))])
- (tongbu . [(20200414 507) ((emacs (25 1)) (web-server (0 1 2))) "A web server to share text or files between two devices" single ((:commit . "6f6e5c5446f0c5735357ab520b249ab97295653e") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "tools") (:url . "https://github.com/xuchunyang/tongbu.el"))])
- (topspace . [(20220824 134) ((emacs (25 1))) "Recenter line 1 with scrollable upper margin/padding" single ((:commit . "33c2a6f0a11d1d88cdb2065c5a897e33507f4c86") (:authors ("Trevor Edwin Pogue" . "trevor.pogue@gmail.com")) (:maintainers ("Trevor Edwin Pogue" . "trevor.pogue@gmail.com")) (:maintainer "Trevor Edwin Pogue" . "trevor.pogue@gmail.com") (:keywords "convenience" "scrolling" "center" "cursor" "margin" "padding") (:url . "https://github.com/trevorpogue/topspace"))])
- (topsy . [(20230414 1738) ((emacs (26 3))) "Simple sticky header" single ((:commit . "149ee929dad667fd7668728d9b59dedb0183dfe5") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience") (:url . "https://github.com/alphapapa/topsy.el"))])
- (tornado-template-mode . [(20141128 1008) nil "A major mode for editing tornado templates" single ((:commit . "667c0663dbbd279b6c345446b9f2bc50eb52b747") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainers ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero"))])
- (torus . [(20190325 753) ((emacs (26))) "A buffer groups manager" single ((:commit . "863886f10db77f3d1b16815d77561b6c81d88352") (:authors ("Chimay")) (:maintainers ("Chimay")) (:maintainer "Chimay") (:keywords "files" "buffers" "groups" "persistent" "history" "layout" "tabs") (:url . "https://github.com/chimay/torus"))])
- (total-lines . [(20171227 1239) ((emacs (24 3))) "Keep track of a buffer's total number of lines" single ((:commit . "c762f08d039c8103f71c747e00304f209c2254f4") (:authors ("Hinrik Örn Sigurðsson")) (:maintainers ("Hinrik Örn Sigurðsson")) (:maintainer "Hinrik Örn Sigurðsson") (:keywords "convenience" "mode-line") (:url . "https://github.com/hinrik/total-lines"))])
- (totd . [(20150519 1440) ((s (1 9 0)) (cl-lib (0 5))) "Display a random daily emacs command." single ((:commit . "a715f7f2df416b8a6c827a9493ce7004180a3a4f") (:authors ("Erik Hetzner" . "egh@e6h.org")) (:maintainers ("Erik Hetzner" . "egh@e6h.org")) (:maintainer "Erik Hetzner" . "egh@e6h.org") (:keywords "help"))])
- (totp . [(20230102 1707) ((emacs (27 1))) "Time-based One-time Password (TOTP)" tar ((:commit . "a5e059b8475b32bc7f5ddadda248cf84449ed722") (:authors ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainers ("Jürgen Hötzel" . "juergen@hoetzel.info")) (:maintainer "Jürgen Hötzel" . "juergen@hoetzel.info") (:keywords "tools" "pass" "password") (:url . "https://github.com/juergenhoetzel/emacs-totp"))])
- (tox . [(20170404 1059) nil "Launch current python test with tox" single ((:commit . "7655eb254038d5e34433e8a9d66b3ffc9c72e40c") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainers ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com") (:keywords "convenience" "tox" "python" "tests") (:url . "https://github.com/chmouel/tox.el"))])
- (toxi-theme . [(20160424 2126) ((emacs (24))) "A dark color theme by toxi" single ((:commit . "9e572c6e149249b96f64722cf6f86c3aaf5f2ede") (:authors ("Karsten Schmidt" . "info@postspectacular.com")) (:maintainers ("Karsten Schmidt" . "info@postspectacular.com")) (:maintainer "Karsten Schmidt" . "info@postspectacular.com") (:url . "http://bitbucket.org/postspectacular/toxi-theme/"))])
- (tql-mode . [(20170724 254) ((emacs (24))) "TQL mode" single ((:commit . "488add79eb3fc8ec02aedaa997fe1ed9e5c3e638") (:authors ("Sean McLaughlin" . "seanmcl@gmail.com")) (:maintainers ("Sean McLaughlin" . "seanmcl@gmail.com")) (:maintainer "Sean McLaughlin" . "seanmcl@gmail.com") (:keywords "languages" "tql"))])
- (tr-ime . [(20220604 1107) ((emacs (27 1)) (w32-ime (0 0 1))) "Emulator of IME patch for Windows" tar ((:commit . "87f0677220b755f947fe5f373b6a34e1afb82f3c") (:authors ("Masamichi Hosoda" . "trueroad@trueroad.jp")) (:maintainers ("Masamichi Hosoda" . "trueroad@trueroad.jp")) (:maintainer "Masamichi Hosoda" . "trueroad@trueroad.jp") (:url . "https://github.com/trueroad/tr-emacs-ime-module"))])
- (traad . [(20180730 48) ((dash (2 13 0)) (deferred (0 3 2)) (popup (0 5 0)) (request (0 2 0)) (request-deferred (0 2 0)) (virtualenvwrapper (20151123)) (f (0 20 0)) (bind-map (1 1 1))) "emacs interface to the traad refactoring server." single ((:commit . "98e23363b7e8a590a2f55976123a8c3da75c87a5") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainers ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/traad"))])
- (tracking . [(20220421 1956) nil "Buffer modification tracking" tar ((:commit . "710f057fedae6e9b820cce9336fef24b7d057e4c") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:url . "https://github.com/emacs-circe/circe/wiki/Tracking"))])
- (tracwiki-mode . [(20150119 1621) ((xml-rpc (1 6 8))) "Emacs Major mode for working with Trac" single ((:commit . "6a620444d59b438f42383b48cd4c19c03105dba6") (:authors ("Matthew Erickson" . "peawee@peawee.net")) (:maintainers ("Matthew Erickson" . "peawee@peawee.net")) (:maintainer "Matthew Erickson" . "peawee@peawee.net") (:keywords "trac" "wiki" "tickets"))])
- (tramp-auto-auth . [(20191027 1419) ((emacs (24 4)) (tramp (0 0))) "TRAMP automatic authentication library" single ((:commit . "f15a12dfab651aff60f4a9d70f868030a12344ac") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainers ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org") (:keywords "comm" "processes") (:url . "https://github.com/oitofelix/tramp-auto-auth"))])
- (tramp-hdfs . [(20210526 339) ((emacs (24 4))) "Tramp extension to access hadoop/hdfs file system in Emacs" single ((:commit . "aa93bdbb3d5619c262ce53af1981edcd2a0705e5") (:authors ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainers ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainer "Raghav Kumar Gautam" . "raghav@apache.org") (:keywords "tramp" "emacs" "hdfs" "hadoop" "webhdfs" "rest"))])
- (tramp-term . [(20220725 1441) nil "Automatic setup of directory tracking in ssh sessions" single ((:commit . "ed75189122737d301f716a30a8013205aa3736f1") (:authors ("Randy Morris" . "randy.morris@archlinux.us")) (:maintainers ("Randy Morris" . "randy.morris@archlinux.us")) (:maintainer "Randy Morris" . "randy.morris@archlinux.us") (:keywords "comm" "terminals") (:url . "https://github.com/randymorris/tramp-term.el"))])
- (transfer-sh . [(20200601 1708) ((emacs (24 3)) (async (1 0))) "Simple interface for sending buffer contents to transfer.sh" single ((:commit . "0621a66d00ec91a209a542c10b158095088bd44d") (:keywords "comm" "convenience" "files") (:url . "https://gitlab.com/tuedachu/transfer-sh.el"))])
- (transient . [(20230501 1034) ((emacs (25 1)) (compat (29 1 3 4))) "Transient commands" tar ((:commit . "af7fe42bd46e24ca7852e73bd1691015c5bd2151") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "extensions") (:url . "https://github.com/magit/transient"))])
- (transient-dwim . [(20221225 1630) ((emacs (26 1)) (transient (0 1))) "Useful preset transient commands" single ((:commit . "cb5e0d35729fc6448553b7a17fc5c843f00e8c1d") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:keywords "tools") (:url . "https://github.com/conao3/transient-dwim.el"))])
- (transient-extras . [(20230303 1511) ((emacs (28 1))) "Extra features for transient" single ((:commit . "e91a1cddb1f0cb8b99d2bd30db64d467e5fa7ea8") (:authors ("Al Haji-Ali <abdo.haji.ali@gmail.com>, Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Al Haji-Ali <abdo.haji.ali@gmail.com>, Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Al Haji-Ali <abdo.haji.ali@gmail.com>, Samuel W. Flint" . "swflint@flintfam.org") (:keywords "convenience") (:url . "https://github.com/haji-ali/transient-extras.git"))])
- (transient-extras-a2ps . [(20230303 1511) ((emacs (28 1)) (transient-extras (1 0 0))) "A transient interface to a2ps" single ((:commit . "e91a1cddb1f0cb8b99d2bd30db64d467e5fa7ea8") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainers ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:keywords "convenience") (:url . "https://git.sr.ht/~swflint/transient-extras-a2ps"))])
- (transient-extras-lp . [(20230418 1112) ((emacs (28 1)) (transient-extras (1 0 0))) "A transient interface to lp" single ((:commit . "00a4b22882399c0355a2026b1a1c98974e669e62") (:authors ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainers ("Al Haji-Ali" . "abdo.haji.ali@gmail.com")) (:maintainer "Al Haji-Ali" . "abdo.haji.ali@gmail.com") (:keywords "convenience") (:url . "https://github.com/haji-ali/transient-extras.git"))])
- (transient-posframe . [(20210102 130) ((emacs (26 0)) (posframe (0 4 3)) (transient (0 2 0))) "Using posframe to show transient" single ((:commit . "5f0874ac3ce6f50968ed5e088d6538a07bdfd11f") (:authors ("Yanghao Xie")) (:maintainers ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com") (:keywords "convenience" "bindings" "tooltip") (:url . "https://github.com/yanghaoxie/transient-posframe"))])
- (translate-mode . [(20220511 1357) ((emacs (24 3))) "Paragraph-oriented side-by-side doc translation workflow" single ((:commit . "e1940b333241a4d0c224b7b875962736ca2b693b") (:authors ("Ray Wang" . "rayw.public@gmail.com")) (:maintainers ("Ray Wang" . "rayw.public@gmail.com")) (:maintainer "Ray Wang" . "rayw.public@gmail.com") (:keywords "translate" "convenience" "editing") (:url . "https://github.com/rayw000/translate-mode"))])
- (transmission . [(20221130 212) ((emacs (24 4)) (let-alist (1 0 5))) "Interface to a Transmission session" single ((:commit . "243d5dc15917df2611fd0c9f288faea17a00a396") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainers ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu") (:keywords "comm" "tools"))])
- (transpose-frame . [(20221109 2053) nil "Transpose windows arrangement in a frame" single ((:commit . "94c87794d53883a2358d13da264ad8dab9a52daa") (:authors ("S. Irie")) (:maintainers ("S. Irie")) (:maintainer "S. Irie") (:keywords "window"))])
- (transpose-mark . [(20150405 716) nil "Transpose data using the Emacs mark" single ((:commit . "667327602004794de97214cf336ac61650ef75b7") (:authors ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainers ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainer "Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com") (:keywords "transpose" "convenience"))])
- (transwin . [(20220921 831) ((emacs (24 3))) "Make window/frame transparent" single ((:commit . "ed0156a98b6fce94da9045bdffe369f390b70c0c") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "frames" "window" "transparent") (:url . "https://github.com/jcs-elpa/transwin"))])
- (trashed . [(20220106 1358) ((emacs (25 1))) "Viewing/editing system trash can" single ((:commit . "ddf5830730544435a068f2dc9ac75a81ea69df1d") (:authors ("Shingo Tanaka" . "shingo.fg8@gmail.com")) (:maintainers ("Shingo Tanaka" . "shingo.fg8@gmail.com")) (:maintainer "Shingo Tanaka" . "shingo.fg8@gmail.com") (:keywords "files" "convenience" "unix") (:url . "https://github.com/shingo256/trashed"))])
- (travis . [(20150825 1138) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client for Travis" tar ((:commit . "c8769d3db10ed4604969049e3bd276afa0a0138e") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainers ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:keywords "travis") (:url . "https://github.com/nlamirault/emacs-travis"))])
- (tray . [(20230212 2011) ((emacs (27 1)) (compat (29 1 3 4)) (transient (0 3 0))) "Various transient menus" single ((:commit . "15b0faa8fede31887598b8dd64b69362c10e8a8e") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "convenience") (:url . "https://git.sr.ht/~tarsius/tray"))])
- (tree-edit . [(20230419 1753) ((emacs (29 0)) (dash (2 19)) (reazon (0 4 0)) (s (0 0 0))) "A library for structural refactoring and editing" tar ((:commit . "e15b61e7e4ff98c44e6684fd2007bd1cbb31570e") (:authors ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainers ("Ethan Leba" . "ethanleba5@gmail.com")) (:maintainer "Ethan Leba" . "ethanleba5@gmail.com") (:url . "https://github.com/ethan-leba/tree-edit"))])
- (tree-mode . [(20151104 1331) nil "A mode to manage tree widgets" single ((:commit . "b06078826d5875d74b0e7b7ac47b0d0917610534") (:authors (nil . "wenbinye@163.com")) (:maintainers (nil . "wenbinye@163.com")) (:maintainer nil . "wenbinye@163.com") (:keywords "help" "convenience" "widget"))])
- (tree-sitter . [(20220212 1632) ((emacs (25 1)) (tsc (0 18 0))) "Incremental parsing system" tar ((:commit . "909717c685ff5a2327fa2ca8fb8a25216129361c") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainers ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainer "Tuấn-Anh Nguyễn" . "ubolonton@gmail.com") (:keywords "languages" "tools" "parsers" "tree-sitter") (:url . "https://github.com/emacs-tree-sitter/elisp-tree-sitter"))])
- (tree-sitter-ess-r . [(20221012 855) ((emacs (26 1)) (ess (18 10 1)) (tree-sitter (0 12 1)) (tree-sitter-langs (0 12 0))) "R with tree-sitter" single ((:commit . "9669c00f3d3463e6769725af74c392891e269eed") (:authors ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainers ("Shuguang Sun" . "shuguang79@qq.com")) (:maintainer "Shuguang Sun" . "shuguang79@qq.com") (:keywords "tools") (:url . "https://github.com/ShuguangSun/tree-sitter-ess-r"))])
- (tree-sitter-indent . [(20220411 1439) ((emacs (26 1)) (tree-sitter (0 12 1)) (seq (2 20))) "Provide indentation with a Tree-sitter backend" single ((:commit . "4ef246db3e4ff99f672fe5e4b416c890f885c09e") (:authors ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainers ("Felipe Lema" . "felipelema@mortemale.org")) (:maintainer "Felipe Lema" . "felipelema@mortemale.org") (:keywords "convenience" "internal") (:url . "https://codeberg.org/FelipeLema/tree-sitter-indent.el"))])
- (tree-sitter-ispell . [(20230205 533) ((emacs (26 1)) (tree-sitter (0 15 0))) "Run ispell on tree-sitter text nodes" single ((:commit . "d8c33c05f689c2cab36b8a9856811f18a4ab7c59") (:authors ("Erick Navarro" . "erick@navarro.io")) (:maintainers ("Erick Navarro" . "erick@navarro.io")) (:maintainer "Erick Navarro" . "erick@navarro.io") (:url . "https://github.com/erickgnavar/tree-sitter-ispell.el"))])
- (tree-sitter-langs . [(20230311 1456) ((emacs (25 1)) (tree-sitter (0 15 0))) "Grammar bundle for tree-sitter" tar ((:commit . "ffe9ab0c8ec9e37e70e31d296df3b85bcfc73c5e") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainers ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainer "Tuấn-Anh Nguyễn" . "ubolonton@gmail.com") (:keywords "languages" "tools" "parsers" "tree-sitter") (:url . "https://github.com/emacs-tree-sitter/tree-sitter-langs"))])
- (treefactor . [(20200516 1631) ((emacs (26 1)) (dash (2 16 0)) (f (0 20 0)) (org (9 2 6)) (avy (0 5 0))) "Restructure your messy Org documents" single ((:commit . "75357757022a4399ab772ff0d92065bd114dabe9") (:authors ("Leo Littlebook" . "Leo.Littlebook@gmail.com")) (:maintainers ("Leo Littlebook" . "Leo.Littlebook@gmail.com")) (:maintainer "Leo Littlebook" . "Leo.Littlebook@gmail.com") (:keywords "outlines" "files" "convenience") (:url . "https://github.com/cyberthal/treefactor"))])
- (treemacs . [(20230424 2017) ((emacs (26 1)) (cl-lib (0 5)) (dash (2 11 0)) (s (1 12 0)) (ace-window (0 9 0)) (pfuture (1 7)) (hydra (0 13 2)) (ht (2 2)) (cfrs (1 3 2))) "A tree style file explorer package" tar ((:commit . "983ea5a66801a5c1f6e32e3d515bd48761677ac6") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-all-the-icons . [(20230408 1109) ((emacs (26 1)) (all-the-icons (4 0 1)) (treemacs (0 0))) "all-the-icons integration for treemacs" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainers ("Eric Dallo" . "ercdll1337@gmail.com")) (:maintainer "Eric Dallo" . "ercdll1337@gmail.com") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-evil . [(20230408 1109) ((emacs (26 1)) (evil (1 2 12)) (treemacs (0 0))) "Evil mode integration for treemacs" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-icons-dired . [(20230408 1109) ((treemacs (0 0)) (emacs (26 1))) "Treemacs icons for dired" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-magit . [(20230408 1109) ((emacs (26 1)) (treemacs (0 0)) (pfuture (1 3)) (magit (2 90 0))) "Magit integration for treemacs" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-nerd-icons . [(20230424 1854) ((emacs (24 3)) (nerd-icons (0 0 1)) (treemacs (0 0))) "Emacs Nerd Font Icons theme for treemacs" single ((:commit . "c6f4a74ea4f414528fc43a6fe95f7f17687faeb4") (:authors ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainers ("Hongyu Ding" . "rainstormstudio@yahoo.com")) (:maintainer "Hongyu Ding" . "rainstormstudio@yahoo.com") (:keywords "lisp") (:url . "https://github.com/rainstormstudio/treemacs-nerd-icons"))])
- (treemacs-persp . [(20230408 1109) ((emacs (26 1)) (treemacs (0 0)) (persp-mode (2 9 7)) (dash (2 11 0))) "Persp-mode integration for treemacs" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-perspective . [(20230408 1109) ((emacs (26 1)) (treemacs (0 0)) (perspective (2 8)) (dash (2 11 0))) "Perspective integration for treemacs" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Alexander Miller" . "alexanderm@web.de") ("Jason Dufair" . "jase@dufair.org")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-projectile . [(20230408 1109) ((emacs (26 1)) (projectile (0 14 0)) (treemacs (0 0))) "Projectile integration for treemacs" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treemacs-tab-bar . [(20230408 1109) ((emacs (27 1)) (treemacs (0 0)) (dash (2 11 0))) "Tab bar integration for treemacs" single ((:commit . "127485317a19254ca20ba1910d10edf7dbaa2d97") (:authors ("Alexander Miller" . "alexanderm@web.de") ("Jason Dufair" . "jase@dufair.org") ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainers ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))])
- (treepy . [(20221205 2224) ((emacs (25 1))) "Generic tree traversal tools" single ((:commit . "7c4a0d21322506a4d4b2301b4274ec955b429b47") (:authors ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainers ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainer "Daniel Barreto" . "daniel.barreto.n@gmail.com") (:keywords "lisp" "maint" "tools") (:url . "https://github.com/volrath/treepy.el"))])
- (treesit-auto . [(20230320 1555) ((emacs (29 0))) "Automatically use tree-sitter enhanced major modes" single ((:commit . "bac3b9d1d61a4d759f87c80de7be3b808d19cbf6") (:authors ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainers ("Robb Enzmann" . "robbenzmann@gmail.com")) (:maintainer "Robb Enzmann" . "robbenzmann@gmail.com") (:keywords "treesitter" "auto" "automatic" "major" "mode" "fallback" "convenience") (:url . "https://github.com/renzmann/treesit-auto.git"))])
- (treeview . [(20220928 43) ((emacs (24 4))) "A generic tree navigation library" single ((:commit . "d9c10feddf3b959e7b33ce83103e1f0a61162723") (:authors ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainers ("Tilman Rassy" . "tilman.rassy@googlemail.com")) (:maintainer "Tilman Rassy" . "tilman.rassy@googlemail.com") (:keywords "lisp" "tools" "internal" "convenience") (:url . "https://github.com/tilmanrassy/emacs-treeview"))])
- (trident-mode . [(20190410 2036) ((emacs (24)) (slime (20130526)) (skewer-mode (1 5 0)) (dash (1 0 3))) "Live Parenscript interaction" single ((:commit . "109a1bc10bd0c4b47679a6ca5c4cd27c7c8d4ccb") (:authors ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainers ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com") (:keywords "languages" "lisp" "processes" "tools") (:url . "https://github.com/johnmastro/trident-mode.el"))])
- (trinary . [(20230301 2044) ((emacs (24))) "Trinary logic" tar ((:commit . "d4869d260f22d13a9a71327a6d40edc6980d022e") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:keywords "languages") (:url . "https://github.com/emacs-elsa/trinary-logic"))])
- (tron-legacy-theme . [(20230506 1037) nil "An original retro-futuristic theme inspired by Tron: Legacy" single ((:commit . "44996469041a9b7f54c2a42ad2a3c16ac9579d77") (:authors ("Ian Y.E. Pan")) (:maintainers ("Ian Y.E. Pan")) (:maintainer "Ian Y.E. Pan") (:url . "https://github.com/ianpan870102/tron-legacy-emacs-theme"))])
- (trr . [(20191019 1403) nil "a type-writing training program on GNU Emacs." tar ((:commit . "f841173e11213ac6916b2d3394b28fb202543871") (:authors ("YAMAMOTO Hirotaka" . "ymmt@is.s.u-tokyo.ac.jp") ("KATO Kenji" . "kato@suri.co.jp") (" *Original Author") ("INAMURA You" . "inamura@icot.or.jp") (" *Original Author")) (:maintainers ("YAMAMOTO Hirotaka" . "ymmt@is.s.u-tokyo.ac.jp")) (:maintainer "YAMAMOTO Hirotaka" . "ymmt@is.s.u-tokyo.ac.jp") (:keywords "games" "faces"))])
- (truthy . [(20140508 2041) ((list-utils (0 4 2))) "Test the content of a value" single ((:commit . "782cee08fbb13f9be71ce8e88d980ec14db24a0f") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/truthy"))])
- (try . [(20181204 236) ((emacs (24))) "Try out Emacs packages." single ((:commit . "8831ded1784df43a2bd56c25ad3d0650cdb9df1d") (:authors ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainers ("Lars Tveito" . "larstvei@ifi.uio.no")) (:maintainer "Lars Tveito" . "larstvei@ifi.uio.no") (:keywords "packages") (:url . "http://github.com/larstvei/try"))])
- (ts . [(20220822 2313) ((emacs (26 1)) (dash (2 14 1)) (s (1 12 0))) "Timestamp and date/time library" single ((:commit . "552936017cfdec89f7fc20c254ae6b37c3f22c5b") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "calendar" "lisp") (:url . "http://github.com/alphapapa/ts.el"))])
- (ts-comint . [(20181219 719) nil "Run a Typescript interpreter in an inferior process window." single ((:commit . "b280cfe9fe5ecec9d5970043b6b2866f644b39ad") (:authors ("Paul Huff" . "paul.huff@gmail.com")) (:maintainers ("Paul Huff" . "paul.huff@gmail.com")) (:maintainer "Paul Huff" . "paul.huff@gmail.com") (:keywords "typescript" "node" "inferior-mode" "convenience") (:url . "https://github.com/josteink/ts-comint"))])
- (tsc . [(20220212 1632) ((emacs (25 1))) "Core Tree-sitter APIs" tar ((:commit . "909717c685ff5a2327fa2ca8fb8a25216129361c") (:authors ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com") ("Jorge Javier Araya Navarro" . "jorgejavieran@yahoo.com.mx")) (:maintainers ("Tuấn-Anh Nguyễn" . "ubolonton@gmail.com")) (:maintainer "Tuấn-Anh Nguyễn" . "ubolonton@gmail.com") (:keywords "languages" "tools" "parsers" "dynamic-modules" "tree-sitter") (:url . "https://github.com/emacs-tree-sitter/elisp-tree-sitter"))])
- (tss . [(20150913 1408) ((auto-complete (1 4 0)) (json-mode (1 1 0)) (log4e (0 2 0)) (yaxception (0 1))) "provide a interface for auto-complete.el/flymake.el on typescript-mode." tar ((:commit . "81ac6351a2ae258fd0ebf916dae9bd5a179fefd0") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "typescript" "completion") (:url . "https://github.com/aki2o/emacs-tss"))])
- (tt-mode . [(20130804 1110) nil "Emacs major mode for editing Template Toolkit files." single ((:commit . "85ed3832e7eef391f7879d9990d59c7a3493c15e") (:authors ("Dave Cross" . "dave@dave.org.uk")) (:maintainers ("Dave Cross" . "dave@dave.org.uk")) (:maintainer "Dave Cross" . "dave@dave.org.uk"))])
- (ttl-mode . [(20170920 1329) nil "mode for Turtle (and Notation 3)" single ((:commit . "b4084667f92afbfe5916d1307916acbd68c52e5e"))])
- (tuareg . [(20220929 1327) ((emacs (26 3)) (caml (4 8))) "OCaml mode" tar ((:commit . "53ce2fdfdd372d52f3a6547c33b687e7d403357a") (:authors ("Albert Cohen" . "Albert.Cohen@inria.fr") ("Sam Steingold" . "sds@gnu.org") ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be") ("Till Varoquaux" . "till@pps.jussieu.fr") ("Sean McLaughlin" . "seanmcl@gmail.com") ("Stefan Monnier" . "monnier@iro.umontreal.ca")) (:maintainers ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be")) (:maintainer "Christophe Troestler" . "Christophe.Troestler@umons.ac.be") (:keywords "ocaml" "languages") (:url . "https://github.com/ocaml/tuareg"))])
- (tubestatus . [(20220620 2028) ((emacs (26 1)) (request (0 3 2))) "Get the London Tube service status" single ((:commit . "bf722d441ff96ff8fac6c8d2a798e283fef5613b") (:authors ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainers ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainer "Matthieu Petiteau" . "matt@smallwat3r.com") (:url . "https://github.com/smallwat3r/tubestatus.el"))])
- (tumble . [(20160112 729) ((http-post-simple (0)) (cl-lib (0 5))) "an Tumblr mode for Emacs" single ((:commit . "e8fd7643cccf2b6ea4170f0c5f1f87d007e7fa00") (:authors ("Federico Builes" . "federico.builes@gmail.com")) (:maintainers ("Federico Builes" . "federico.builes@gmail.com")) (:maintainer "Federico Builes" . "federico.builes@gmail.com") (:keywords "tumblr"))])
- (tumblesocks . [(20191014 356) ((htmlize (1 39)) (oauth (1 0 3)) (markdown-mode (1 8 1))) "An Emacs tumblr client." tar ((:commit . "0e4c3847e31a59d405b9927107a23dde9531d744") (:authors ("gcr" . "gcr@sneakygcr.net")) (:maintainer "gcr" . "gcr@sneakygcr.net") (:url . "http://github.com/gcr/tumblesocks"))])
- (turing-machine . [(20180222 438) ((emacs (24 4))) "Single-tape Turing machine simulator" single ((:commit . "ad1dccc9c445f9e4465e1c67cbbfea9583153047") (:authors ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainers ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainer "Diego A. Mundo" . "diegoamundo@gmail.com") (:keywords "turing" "machine" "simulation") (:url . "http://github.com/therockmandolinist/turing-machine"))])
- (turkish . [(20170910 1511) nil "Convert to Turkish characters on-the-fly" single ((:commit . "9831a316c176bb21a1b91226323ea4133163e00c") (:authors ("Deniz Yüret")) (:maintainers ("Emre Sevinç" . "emre.sevinc@gmail.com")) (:maintainer "Emre Sevinç" . "emre.sevinc@gmail.com") (:keywords "turkish" "languages" "automatic" "conversion") (:url . "http://www.denizyuret.com/2006/11/emacs-turkish-mode.html"))])
- (turnip . [(20150309 629) ((dash (2 6 0)) (s (1 9 0))) "Interacting with tmux from Emacs" single ((:commit . "2fd32562fc6fc1cda6d91aa939cfb29f9b16e9de") (:authors ("Johann Klähn" . "kljohann@gmail.com")) (:maintainers ("Johann Klähn" . "kljohann@gmail.com")) (:maintainer "Johann Klähn" . "kljohann@gmail.com") (:keywords "terminals" "tools"))])
- (twig-mode . [(20130220 1850) nil "A major mode for twig" single ((:commit . "51bcd41666a234119a855b9fd348d3dae7832de1") (:authors ("Bojan Matic aka moljac024")) (:maintainers ("Bojan Matic aka moljac024")) (:maintainer "Bojan Matic aka moljac024"))])
- (twilight-anti-bright-theme . [(20160622 848) nil "A soothing Emacs 24 light-on-dark theme" single ((:commit . "523b95fcdbf4a6a6483af314ad05354a3d80f23f") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainers ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me") (:keywords "themes") (:url . "https://github.com/jimeh/twilight-anti-bright-theme.el"))])
- (twilight-bright-theme . [(20130605 843) nil "A Emacs 24 faces port of the TextMate theme" single ((:commit . "9859474333fee9f907474dbd8763f617e8bfd89c") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainers ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me") (:keywords "themes") (:url . "https://github.com/jimeh/twilight-bright-theme.el"))])
- (twilight-theme . [(20120412 1303) nil "Twilight theme for GNU Emacs 24 (deftheme)" single ((:commit . "77c4741cb3dcf16e53d06d6c2ffdc660c40afb5b") (:authors ("Nick Parker" . "nickp@developernotes.com")) (:maintainers ("Nick Parker" . "nickp@developernotes.com")) (:maintainer "Nick Parker" . "nickp@developernotes.com"))])
- (twitch-api . [(20220420 1547) ((emacs (27 1)) (dash (2 19 0))) "An elisp interface for the Twitch.tv API" single ((:commit . "181681097d1fc8d7b78928f8a5b38c61d0e20ef5") (:keywords "multimedia" "twitch-api") (:url . "https://github.com/BenediktBroich/twitch-api"))])
- (twittering-mode . [(20181121 1402) nil "Major mode for Twitter" single ((:commit . "114891e8fdb4f06b1326a6cf795e49c205cf9e29") (:authors ("Tadashi MATSUO" . "tad@mymail.twin.ne.jp") ("Y. Hayamizu" . "y.hayamizu@gmail.com") ("Tsuyoshi CHO" . "Tsuyoshi.CHO+develop@Gmail.com") ("Alberto Garcia" . "agarcia@igalia.com") ("Xavier Maillard" . "xavier@maillard.im")) (:maintainers ("Tadashi MATSUO" . "tad@mymail.twin.ne.jp")) (:maintainer "Tadashi MATSUO" . "tad@mymail.twin.ne.jp") (:keywords "twitter" "web") (:url . "http://twmode.sf.net/"))])
- (twtxt . [(20220628 309) ((emacs (25 1)) (request (0 2 0))) "A twtxt client for Emacs" single ((:commit . "eb9efa19086fcae343353f6a5e88c3377fd06dd4") (:authors ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainers ("DEADBLACKCLOVER" . "deadblackclover@protonmail.com")) (:maintainer "DEADBLACKCLOVER" . "deadblackclover@protonmail.com") (:url . "https://github.com/deadblackclover/twtxt-el"))])
- (typescript-mode . [(20230116 1533) ((emacs (24 3))) "Major mode for editing typescript" tar ((:commit . "4fcb4594819caf472ae42ea068a1c7795cf07f46") (:keywords "typescript" "languages") (:url . "http://github.com/ananthakumaran/typescript.el"))])
- (typing . [(20180830 2203) nil "The Typing Of Emacs" single ((:commit . "a2ef25dde2d8eb91bd9c0c6164cb5208208647fa") (:authors ("Alex Schroeder" . "alex@gnu.org")) (:maintainers ("Alex Schroeder" . "alex@gnu.org")) (:maintainer "Alex Schroeder" . "alex@gnu.org") (:keywords "games") (:url . "http://www.emacswiki.org/emacs/TypingOfEmacs"))])
- (typing-game . [(20160426 1220) nil "a simple typing game" single ((:commit . "616435a5270274f4c7b698697674dbb2039049a4") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "lisp" "game"))])
- (typit . [(20220909 1233) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:commit . "6ad0d5a106c4a4428fd131653bbe7c0aab4b5f60") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "games") (:url . "https://github.com/mrkkrp/typit"))])
- (typo . [(20200706 1714) nil "Minor mode for typographic editing" single ((:commit . "173ebe4fc7ac38f344b16e6eaf41f79e38f20d57") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:keywords "convenience" "wp") (:url . "https://github.com/jorgenschaefer/typoel"))])
- (typo-suggest . [(20200830 1143) ((emacs (24 3)) (helm (3 0)) (company (0 9 10)) (s (1 12 0)) (dash (2 13 0))) "Don't make typos with the help of helm and company" single ((:commit . "3014d18ae2f0b6b857bb613f373e034c743f4d2e") (:authors ("Kadir Can Çetin" . "kadircancetin@gmail.com")) (:maintainers ("Kadir Can Çetin" . "kadircancetin@gmail.com")) (:maintainer "Kadir Can Çetin" . "kadircancetin@gmail.com") (:keywords "convenience" "wp") (:url . "https://github.com/kadircancetin/typo-suggest"))])
- (typst-mode . [(20230425 337) ((polymode (0 2 2)) (emacs (24 3))) "A major mode for working with Typst typesetting system" single ((:commit . "5ce6669a28e57ea6f1009c85543d28686212cf32") (:authors ("Ziqi Yang")) (:maintainers ("Ziqi Yang")) (:maintainer "Ziqi Yang") (:keywords "outlines") (:url . "https://github.com/Ziqi-Yang/typst-mode.el"))])
- (tzc . [(20230504 445) ((emacs (28 1))) "Converts time between different time zones" single ((:commit . "e815b43790d9a517f89a2bb592c665bd911a4477") (:authors ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainers ("Md Arif Shaikh" . "arifshaikh.astro@gmail.com")) (:maintainer "Md Arif Shaikh" . "arifshaikh.astro@gmail.com") (:keywords "convenience") (:url . "https://github.com/md-arif-shaikh/tzc"))])
- (ubuntu-theme . [(20150805 1506) nil "A theme inspired by the default terminal colors in Ubuntu" single ((:commit . "88b0eefc75d4cbcde103057e1c5968d4c3052f69") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainers ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com") (:url . "http://github.com/rocher/ubuntu-theme"))])
- (uci-mode . [(20210626 1956) ((emacs (25 1))) "Major-mode for chess engine interaction" single ((:commit . "2cdf4de5af96d56108a0a5716416ef3c8ac7bb7c") (:authors ("Dodge Coates and Roland Walker")) (:maintainers ("Dodge Coates and Roland Walker")) (:maintainer "Dodge Coates and Roland Walker") (:keywords "data" "games" "chess") (:url . "https://github.com/dwcoates/uci-mode"))])
- (ucs-utils . [(20230119 2237) ((emacs (24 3)) (persistent-soft (0 8 10)) (pcache (0 5 1)) (list-utils (0 4 6))) "Utilities for Unicode characters" tar ((:commit . "91b9e0207fff5883383fd39c45ad5522e9b90e65") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "i18n" "extensions") (:url . "http://github.com/rolandwalker/ucs-utils"))])
- (udev-mode . [(20200702 1536) ((emacs (24))) "Major mode for editing udev rules files" single ((:commit . "5ca236980662141518603672ebdbdf863756da5a") (:authors ("Benjamin Staffin" . "benley@gmail.com")) (:maintainers ("Benjamin Staffin" . "benley@gmail.com")) (:maintainer "Benjamin Staffin" . "benley@gmail.com") (:keywords "languages" "unix") (:url . "https://github.com/benley/emacs-udev-mode"))])
- (ue . [(20210929 1301) ((emacs (26 1)) (projectile (2 5 0))) "Minor mode for Unreal Engine projects" tar ((:commit . "7819d5b78e5b52a09b36c634ce404dc8bc3711ef") (:authors ("Oleksandr Manenko" . "seidfzehsd@use.startmail.com")) (:maintainers ("Oleksandr Manenko" . "seidfzehsd@use.startmail.com")) (:maintainer "Oleksandr Manenko" . "seidfzehsd@use.startmail.com") (:keywords "unreal engine" "languages" "tools") (:url . "https://gitlab.com/unrealemacs/ue.el"))])
- (uimage . [(20160901 1221) nil "An iimage like mode with the ability to display url images" single ((:commit . "9893d09160ef7e8c0ecdcd74fca99ffeb5f9d70d") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "lisp" "url" "image"))])
- (ujelly-theme . [(20180214 1624) nil "Ujelly theme for GNU Emacs 24 (deftheme)" single ((:commit . "bf724ce7806a738d2043544061e5f9bbfc56e674") (:authors ("Mark Tran" . "mark.tran@gmail.com")) (:maintainers ("Mark Tran" . "mark.tran@gmail.com")) (:maintainer "Mark Tran" . "mark.tran@gmail.com") (:url . "http://github.com/marktran/color-theme-ujelly"))])
- (ukrainian-holidays . [(20130720 1349) nil "Ukrainian holidays for Emacs calendar." single ((:commit . "e52b0c92843e9f4d0415a7ba3b8559785497d23d") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/ukrainian-holidays"))])
- (uml-mode . [(20200129 1147) ((emacs (24 4)) (seq (0))) "Minor mode for ascii uml sequence diagrams" single ((:commit . "0ef88c74b48b5400d83ab93e3e089bbe45538fd7") (:authors ("Ian Martins" . "ianxm@jhu.edu")) (:maintainers ("Ian Martins" . "ianxm@jhu.edu")) (:maintainer "Ian Martins" . "ianxm@jhu.edu") (:keywords "docs") (:url . "http://github.com/ianxm/emacs-uml"))])
- (uncrustify-mode . [(20130707 1359) nil "Minor mode to automatically uncrustify." single ((:commit . "2c00d5cf2d1868a5955347438746f4dd82b3b9fc") (:authors ("Tabito Ohtani" . "koko1000ban@gmail.com")) (:maintainers ("Tabito Ohtani" . "koko1000ban@gmail.com")) (:maintainer "Tabito Ohtani" . "koko1000ban@gmail.com") (:keywords "uncrustify"))])
- (undercover . [(20210602 2119) ((emacs (24)) (dash (2 0 0)) (shut-up (0 3 2))) "Test coverage library for Emacs Lisp" single ((:commit . "1d3587f1fad66a747688f36636b67b33b73447d3") (:authors ("Sviridov Alexander" . "sviridov.vmi@gmail.com")) (:maintainers ("Sviridov Alexander" . "sviridov.vmi@gmail.com")) (:maintainer "Sviridov Alexander" . "sviridov.vmi@gmail.com") (:keywords "lisp" "tests" "coverage" "tools") (:url . "https://github.com/sviridov/undercover.el"))])
- (underline-with-char . [(20191128 2309) ((emacs (24))) "Underline with a char" single ((:commit . "36577e72aa4fbfa7f1abad01842359209f543751") (:maintainers (nil . "marcowahlsoft@gmail.com")) (:maintainer nil . "marcowahlsoft@gmail.com") (:keywords "convenience") (:url . "https://gitlab.com/marcowahl/underline-with-char"))])
- (undersea-theme . [(20220616 1950) ((emacs (24 3))) "Theme styled after undersea imagery" single ((:commit . "6bc351c4cb49ccc7210801e6b54ecc2993289b92") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "theme" "sea") (:url . "https://github.com/jcs-elpa/undersea-theme"))])
- (underwater-theme . [(20131118 2) nil "A gentle, deep blue color theme" single ((:commit . "1fbd4ecd4538256c6c46f9638f883072c73ac927") (:authors ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainers ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainer "Jon-Michael Deldin" . "dev@jmdeldin.com") (:keywords "faces"))])
- (undo-fu . [(20230109 2256) ((emacs (25 1))) "Undo helper with redo" single ((:commit . "d59bba01de48a808a42d6e29e011ef641cdb6a77") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-undo-fu"))])
- (undo-fu-session . [(20230504 1326) ((emacs (28 1))) "Persistent undo, available between sessions" single ((:commit . "aefda294efbfafb8b2cde3ec0d389eccc418d092") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:keywords "convenience") (:url . "https://codeberg.com/ideasman42/emacs-undo-fu-session"))])
- (undo-propose . [(20210207 45) ((emacs (24 3))) "Simple and safe undo navigation" single ((:commit . "91a1dfe516d90dab69c368f6669bacb2458ec5e9") (:authors ("Jack Kamm")) (:maintainers ("Jack Kamm")) (:maintainer "Jack Kamm") (:keywords "convenience" "files" "undo" "redo" "history") (:url . "https://github.com/jackkamm/undo-propose.el"))])
- (undohist . [(20220219 634) ((cl-lib (1 0))) "Persistent undo history for GNU Emacs" single ((:commit . "94959e708d5a74913788324893d0b6dabc88ff18") (:authors ("MATSUYAMA Tomohiro" . "m2ym.pub@gmail.com")) (:maintainers ("MATSUYAMA Tomohiro" . "m2ym.pub@gmail.com")) (:maintainer "MATSUYAMA Tomohiro" . "m2ym.pub@gmail.com") (:keywords "convenience"))])
- (unfill . [(20230227 1349) ((emacs (24 1))) "Do the opposite of fill-paragraph or fill-region" single ((:commit . "075052ce0b4451d7d3ede013ce5a77e6a7a92360") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience") (:url . "https://github.com/purcell/unfill"))])
- (unicad . [(20200914 1500) ((emacs (24)) (nadvice (0 3))) "An elisp port of Mozilla Universal Charset Auto Detector" single ((:commit . "a5fd4e326a0607acc3776c11f41826e60b6486c6") (:authors ("Qichen Huang" . "unicad.el@gmail.com")) (:maintainers ("Qichen Huang" . "unicad.el@gmail.com")) (:maintainer "Qichen Huang" . "unicad.el@gmail.com") (:keywords "i18n") (:url . "https://github.com/ukari/unicad"))])
- (unicode-emoticons . [(20150204 1108) nil "Shortcuts for common unicode emoticons" single ((:commit . "52a09955c2afc1807c0f37f1467ccfc1e1da690a") (:authors ("Gunther Hagleitner")) (:maintainers ("Gunther Hagleitner")) (:maintainer "Gunther Hagleitner") (:keywords "games" "entertainment" "comms") (:url . "https://github.com/hagleitn/unicode-emoticons"))])
- (unicode-enbox . [(20140508 2041) ((string-utils (0 3 2)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Surround a string with box-drawing characters" single ((:commit . "4e8ac89b0460eaba6d6eaa8c463eb069660218fa") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions" "interface") (:url . "http://github.com/rolandwalker/unicode-enbox"))])
- (unicode-escape . [(20230109 1222) ((emacs (24)) (names (20151201 0)) (dash (2 12 1))) "Escape/Unescape unicode notations" single ((:commit . "afbb09c774571eefd4e639fc6163280476484363") (:authors ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainers ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com") (:keywords "i18n" "unicode") (:url . "https://github.com/kosh04/unicode-escape.el"))])
- (unicode-fonts . [(20220713 1837) ((font-utils (0 7 8)) (ucs-utils (0 8 2)) (list-utils (0 4 2)) (persistent-soft (0 8 10)) (pcache (0 3 1))) "Configure Unicode fonts" single ((:commit . "44d0a22420c39709d1e1fa659a3f135facf3c986") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "i18n" "faces" "frames" "wp" "interface") (:url . "http://github.com/rolandwalker/unicode-fonts"))])
- (unicode-math-input . [(20220302 1231) ((emacs (25))) "Insert Unicode math symbols using TeX notation" single ((:commit . "06bf37d649fc3b41fcd5fa29c0b0eda555aaf8bb") (:authors ("Augusto Stoffel")) (:maintainers ("Augusto Stoffel")) (:maintainer "Augusto Stoffel") (:url . "https://github.com/astoff/unicode-math-input.el"))])
- (unicode-progress-reporter . [(20140508 2041) ((emacs (24 1 0)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Progress-reporter with fancy characters" single ((:commit . "17415a96144506e5ffa49377d4c814023e06f425") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "interface") (:url . "http://github.com/rolandwalker/unicode-progress-reporter"))])
- (unicode-troll-stopper . [(20190209 411) nil "Minor mode for Highlighting Unicode homoglyphs" single ((:commit . "5e8be35a7bf6382384a701663f7438ee27e4b67c") (:authors ("Cam Saül" . "cammsaul@gmail.com")) (:maintainers ("Cam Saül" . "cammsaul@gmail.com")) (:maintainer "Cam Saül" . "cammsaul@gmail.com") (:keywords "unicode") (:url . "https://github.com/camsaul/emacs-unicode-troll-stopper"))])
- (unicode-whitespace . [(20140508 2041) ((ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "teach whitespace-mode about fancy characters" single ((:commit . "b0cbfe4f9998a2c1eb4cba031efcb785ef518916") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "faces" "wp" "interface") (:url . "http://github.com/rolandwalker/unicode-whitespace"))])
- (unidecode . [(20201213 1449) nil "Transliterate Unicode to ASCII" tar ((:commit . "525b51b38f5b0435642005957740fe22ecb2a53c") (:authors ("sindikat <sindikat at mail36 dot net>")) (:maintainers ("John Mastro" . "john.b.mastro@gmail.com")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com"))])
- (unifdef . [(20200517 514) nil "Delete code guarded by processor directives" single ((:commit . "7a4b76f664c4375e3d98e8af0a29270752c13701") (:authors ("Anders Lindgren")) (:maintainers ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:keywords "convenience" "languages") (:url . "https://github.com/Lindydancer/unifdef"))])
- (unify-opening . [(20220521 911) ((emacs (24 4))) "Unify the mechanism to open files" single ((:commit . "4c6e3447e203a51af116a2117e88d41114950205") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainers ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:url . "https://github.com/DamienCassou/unify-opening"))])
- (unipoint . [(20140113 2224) nil "a simple way to insert unicode characters by TeX name" single ((:commit . "5da04aebac35a5c9e1d8704f2231808d42f4b36a") (:authors ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainers ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainer "Andrew Gwozdziewycz" . "git@apgwoz.com") (:url . "https://github.com/apgwoz/unipoint"))])
- (unison . [(20160704 740) ((emacs (24 1))) "sync with Unison" single ((:commit . "a78a04c0d1398d00f75a1bd4799622a65bcb0f28") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainers ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:keywords "sync") (:url . "http://github.com/unhammer/unison.el"))])
- (unison-mode . [(20160513 1501) nil "Syntax highlighting for unison file synchronization program" single ((:commit . "0bd6a65c0d12f87fcf7bdff15fe54444959b93bf") (:authors ("Karl Fogelmark" . "karlfogel@gmail.com")) (:maintainers ("Karl Fogelmark" . "karlfogel@gmail.com")) (:maintainer "Karl Fogelmark" . "karlfogel@gmail.com") (:keywords "symchronization" "unison") (:url . "https://github.com/impaktor/unison-mode"))])
- (unisonlang-mode . [(20200803 808) ((emacs (25 1))) "Simple major mode for editing Unison" single ((:commit . "b8da68fc2a6a62a255a6089b0c6794bfa2370f34") (:authors ("Dario Oddenino")) (:maintainers ("Dario Oddenino")) (:maintainer "Dario Oddenino") (:keywords "languages") (:url . "https://github.com/dariooddenino/unison-mode-emacs"))])
- (units-mode . [(20221027 303) ((emacs (24 4))) "Mode for conversion between different units" single ((:commit . "10c8de24180f87b1a8a3b0a9b3fbb29eec925417") (:authors ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainers ("Gaurav Atreya" . "allmanpride@gmail.com")) (:maintainer "Gaurav Atreya" . "allmanpride@gmail.com") (:keywords "units" "unit-conversion" "convenience") (:url . "https://github.com/Atreyagaurav/units-mode"))])
- (universal-emotions-emoticons . [(20180729 1941) ((emacs (24 4))) "Emoticons For The Six Universal Expressions" single ((:commit . "9cedd09ee65cb9fa71f27b0ab46a8353bdc00902") (:authors ("Grant Rettke" . "gcr@wisdomandwonder.com")) (:maintainers (nil . "<gcr@wisdomandwonder.com>")) (:maintainer nil . "<gcr@wisdomandwonder.com>") (:keywords "convenience" "docs" "languages") (:url . "https://github.com/grettke/universal-emotions-emoticons"))])
- (unkillable-scratch . [(20221015 1323) ((emacs (24))) "Disallow the \\*scratch\\* buffer from being killed" single ((:commit . "6c752e4cd4762bb4bcde2b0b96f2e83740efd104") (:authors ("Eric Crosson" . "eric.s.crosson@utexas.com")) (:maintainers ("Eric Crosson" . "eric.s.crosson@utexas.com")) (:maintainer "Eric Crosson" . "eric.s.crosson@utexas.com") (:keywords "convenience") (:url . "https://github.com/EricCrosson/unkillable-scratch"))])
- (unmodified-buffer . [(20220129 2022) ((emacs (24 1))) "Auto revert modified buffer state" single ((:commit . "9095a3f870aa570804a11d75aba0952294199715") (:authors ("Arthur Colombini Gusmao")) (:maintainers ("Arthur Colombini Gusmao")) (:maintainer "Arthur Colombini Gusmao") (:url . "https://github.com/arthurcgusmao/unmodified-buffer"))])
- (unobtrusive-magit-theme . [(20200411 1349) ((emacs (24 1))) "An unobtrusive Magit theme" single ((:commit . "aede357009655d19d4468320b2b61b0f26a47593") (:authors ("Thomas A. Brown" . "tabsoftwareconsulting@gmail.com")) (:maintainers ("Thomas A. Brown" . "tabsoftwareconsulting@gmail.com")) (:maintainer "Thomas A. Brown" . "tabsoftwareconsulting@gmail.com") (:keywords "faces" "vc" "magit") (:url . "https://github.com/tee3/unobtrusive-magit-theme"))])
- (untappd . [(20210815 1544) ((emacs (26 1)) (request (0 3 2)) (emojify (1 2 1))) "Display your latest Untappd feed" single ((:commit . "8a31e5888ddd73ed5d2b6ac8ce27acc30f2b59fc") (:authors ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainers ("Matthieu Petiteau" . "matt@smallwat3r.com")) (:maintainer "Matthieu Petiteau" . "matt@smallwat3r.com") (:url . "https://github.com/smallwat3r/untappd.el"))])
- (untitled-new-buffer . [(20161212 1508) ((emacs (24 4)) (magic-filetype (0 2 0))) "Open untitled new buffer like other text editors." single ((:commit . "e359ae63bc6310e315b7c25157858f9b9796ed3d") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainers ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:keywords "files" "convenience") (:url . "https://github.com/zonuexe/untitled-new-buffer.el"))])
- (upbo . [(20180422 822) ((dash (2 12 0)) (emacs (24 4))) "Karma Test Runner Integration" single ((:commit . "63514c484e70cd6eeae828f7e58216e1a3429184") (:authors ("Sungho Kim(shiren)")) (:maintainers ("Sungho Kim(shiren)")) (:maintainer "Sungho Kim(shiren)") (:keywords "javascript" "js" "test" "karma") (:url . "http://github.com/shiren"))])
- (uptimes . [(20191121 1030) ((cl-lib (0 5)) (emacs (24))) "Track and display Emacs session uptimes." single ((:commit . "29ae6585eeed5a00719b2e52f5ae1082087c1778") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainers ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:keywords "processes" "uptime") (:url . "https://github.com/davep/uptimes.el"))])
- (url-shortener . [(20170805 242) nil "shorten long url and expand tinyurl" single ((:commit . "06db8270213b9e352d6c335b0663059a1353d05e") (:authors ("Yu Yang" . "yy2012cn@NOSPAM.gmail.com")) (:maintainers ("Yu Yang" . "yy2012cn@NOSPAM.gmail.com")) (:maintainer "Yu Yang" . "yy2012cn@NOSPAM.gmail.com") (:url . "https://github.com/yuyang0/url-shortener"))])
- (urlenc . [(20140116 1456) nil "URL encoding/decoding utility for Emacs." single ((:commit . "835a6dcb783bbe84714bae87a3464aa0b128bfac") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com") (:keywords "url") (:url . "https://github.com/buzztaiki/urlenc-el"))])
- (urscript-mode . [(20190219 1604) ((emacs (24 4))) "major mode for editing URScript." single ((:commit . "b341f96b129ead8fb74d680cb4f546985bf110a9") (:authors ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainers ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc") (:keywords "languages") (:url . "https://github.com/guidoschmidt/urscript-mode"))])
- (usage-memo . [(20170926 37) nil "integration of Emacs help system and memo" single ((:commit . "88e15a9942a3e0a6e36e9c3e51e3edb746067b1a") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "convenience" "languages" "lisp" "help" "tools" "docs") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/usage-memo.el"))])
- (use-package . [(20230426 2324) ((emacs (24 3)) (bind-key (2 4))) "A configuration macro for simplifying your .emacs" tar ((:commit . "b59b4dc2361c7b351238990d0c34eece8d79ecf0") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainers ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:keywords "dotemacs" "startup" "speed" "config" "package" "extensions") (:url . "https://github.com/jwiegley/use-package"))])
- (use-package-chords . [(20221117 1610) ((use-package (2 1)) (bind-key (1 0)) (bind-chord (0 2)) (key-chord (0 6))) "key-chord keyword for use-package" single ((:commit . "9090080b15486c3e337be254226efe7e5fde4c99") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:keywords "convenience" "tools" "extensions") (:url . "https://github.com/jwiegley/use-package"))])
- (use-package-el-get . [(20180131 505) ((use-package (1 0))) "el-get support for use package" single ((:commit . "f33c448ed43ecb003b60ff601ee7ef9b08cff947") (:authors ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainers ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainer "Edward Knyshov" . "edvorg@gmail.com") (:keywords "dotemacs" "startup" "speed" "config" "package" "tools") (:url . "https://github.com/edvorg/use-package-el-get"))])
- (use-package-ensure-system-package . [(20221209 2013) ((use-package (2 1)) (system-packages (1 0 4))) "auto install system packages" single ((:commit . "bcf0984cf55b70fe6896c6a15f61df92b24f8ffd") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainers ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:keywords "convenience" "tools" "extensions") (:url . "https://github.com/waymondo/use-package-ensure-system-package"))])
- (use-package-hydra . [(20181228 745) ((emacs (24 3)) (use-package (2 4))) "Adds :hydra keyword to use-package macro" single ((:commit . "8cd55a1128fbdf6327bb38a199d206225896d146") (:authors ("Toon Claes" . "toon@iotcl.com")) (:maintainers ("Toon Claes" . "toon@iotcl.com")) (:maintainer "Toon Claes" . "toon@iotcl.com") (:keywords "convenience" "extensions" "tools") (:url . "https://gitlab.com/to1ne/use-package-hydra"))])
- (use-proxy . [(20201209 853) ((exec-path-from-shell (1 12)) (emacs (26 2))) "Enable/Disable proxies respecting your HTTP/HTTPS env" single ((:commit . "43499194224483b27628fdf99f6f9ff6e731d844") (:authors ("Ray Wang" . "ray.hackmylife@gmail.com")) (:maintainers ("Ray Wang" . "ray.hackmylife@gmail.com")) (:maintainer "Ray Wang" . "ray.hackmylife@gmail.com") (:keywords "proxy" "comm") (:url . "https://github.com/rayw000/use-proxy"))])
- (use-ttf . [(20230503 1015) ((emacs (26 1))) "Keep font consistency across different OSs" single ((:commit . "a01d9aef26ffc45dbe8d57d7c061a3a80eb79a2b") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience" "customize" "font" "install" "ttf") (:url . "https://github.com/jcs-elpa/use-ttf"))])
- (utimeclock . [(20230319 752) ((emacs (24 4))) "Simple utility for manual time tracking" single ((:commit . "de8187371be34b2482730bd6eae1a3187e72fe13") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-utimeclock"))])
- (utop . [(20230421 1019) ((emacs (26)) (tuareg (2 2 0))) "Universal toplevel for OCaml" single ((:commit . "ba0e2c7fffab33cf78e2f6e4c346f65e7c0949ae") (:authors ("Jeremie Dimino" . "jeremie@dimino.org")) (:maintainers ("Jeremie Dimino" . "jeremie@dimino.org")) (:maintainer "Jeremie Dimino" . "jeremie@dimino.org") (:keywords "ocaml" "languages") (:url . "https://github.com/ocaml-community/utop"))])
- (uuid . [(20120910 851) nil "UUID's for EmacsLisp" single ((:commit . "1519bfeb0e31602b840bc8dd35d7c7e732c159fe") (:authors ("James Mastros")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp"))])
- (uuidgen . [(20220405 1345) nil "Provides various UUID generating functions" single ((:commit . "7b728c1d92e196c3acf87a004949335cfc18eab3") (:authors ("Kan-Ru Chen" . "kanru@kanru.info")) (:maintainers ("Kan-Ru Chen" . "kanru@kanru.info")) (:maintainer "Kan-Ru Chen" . "kanru@kanru.info") (:keywords "extensions" "lisp" "tools"))])
- (uwu-theme . [(20230110 153) ((emacs (24 1))) "An awesome dark color scheme" single ((:commit . "6b66376b9d7053eb9c23449a601d24511a0b44e6") (:authors ("Kevin Borling")) (:maintainers ("Kevin Borling")) (:maintainer "Kevin Borling") (:keywords "custom themes" "dark" "faces") (:url . "https://github.com/kborling/uwu-theme"))])
- (uxntal-mode . [(20230131 235) ((emacs (27 1))) "Major mode for Uxntal assembly" single ((:commit . "aaaa7a7ac24eb142c68f691185166327ec1e4520") (:authors ("d_m" . "d_m@plastic-idolatry.com")) (:maintainers ("d_m" . "d_m@plastic-idolatry.com")) (:maintainer "d_m" . "d_m@plastic-idolatry.com") (:url . "https://github.com/non/uxntal-mode"))])
- (v-mode . [(20221007 635) ((emacs (25 1)) (dash (2 17 0)) (hydra (0 15 0))) "A major mode for the V programming language" single ((:commit . "84f26ab0f0f5b23133292674da9fa4558207c33d") (:keywords "languages" "programming") (:url . "https://github.com/damon-kwok/v-mode"))])
- (v2ex-mode . [(20160720 345) ((cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3))) "Major mode for visit http://v2ex.com/ site." single ((:commit . "b7d19bb594b43ea3824a6f215dd1e5d1d4c0e8ad") (:authors ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainers ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainer "Aborn Jiang" . "aborn.jiang@gmail.com") (:keywords "v2ex" "v2ex.com") (:url . "https://github.com/aborn/v2ex-mode"))])
- (vagrant . [(20220730 302) nil "Manage a vagrant box from emacs" single ((:commit . "eb4ec2053955eda1ac9e5ff92ded88f1919e13f2") (:authors ("Robert Crim" . "rob@servermilk.com")) (:maintainers ("Robert Crim" . "rob@servermilk.com")) (:maintainer "Robert Crim" . "rob@servermilk.com") (:keywords "vagrant" "chef") (:url . "https://github.com/ottbot/vagrant.el"))])
- (vagrant-tramp . [(20220508 52) ((dash (2 12 0))) "Vagrant method for TRAMP" tar ((:commit . "2b7a4fabd328961384da06e0e302250cd97edc47") (:authors ("Doug MacEachern" . "dougm@vmware.com") ("Ryan Prior " . "ryanprior@gmail.com")) (:maintainers ("Doug MacEachern" . "dougm@vmware.com")) (:maintainer "Doug MacEachern" . "dougm@vmware.com") (:keywords "vagrant") (:url . "https://github.com/dougm/vagrant-tramp"))])
- (vala-mode . [(20201218 2109) nil "Vala mode derived mode" single ((:commit . "d696a8177e94c81ea557ad364a3b3dcc3abbc50f") (:authors ("2005 Dylan R. E. Moonfire") (" 2008 Étienne BERSAC")) (:maintainers ("Étienne BERSAC" . "bersace03@laposte.net")) (:maintainer "Étienne BERSAC" . "bersace03@laposte.net") (:keywords "vala" "languages" "oop"))])
- (vala-snippets . [(20150429 352) ((yasnippet (0 8 0))) "Yasnippets for Vala" tar ((:commit . "671439501060449bd100b9fffd524a86064fbfbb") (:authors ("Daniel Gopar")) (:maintainers ("Daniel Gopar")) (:maintainer "Daniel Gopar") (:url . "https://github.com/gopar/vala-snippets"))])
- (vale-mode . [(20190725 125) ((emacs (25))) "Major mode for writing Vale vaf files" single ((:commit . "48bbc4b4ee5bf0b1b73e52705c0fbc112b255cd0") (:authors ("Jay Bosamiya" . "jaybosamiya@gmail.com")) (:maintainers ("Jay Bosamiya" . "jaybosamiya@gmail.com")) (:maintainer "Jay Bosamiya" . "jaybosamiya@gmail.com") (:keywords "convenience" "languages") (:url . "https://github.com/jaybosamiya/vale-mode.el"))])
- (validate-html . [(20210420 2344) ((emacs (25 1))) "Compilation mode for W3C HTML Validator" single ((:commit . "748e874d50c3a95c61590ae293778e26de05c5f9") (:authors ("Arthur A. Gleckler" . "melpa4aag@speechcode.com")) (:maintainers ("Arthur A. Gleckler" . "melpa4aag@speechcode.com")) (:maintainer "Arthur A. Gleckler" . "melpa4aag@speechcode.com") (:keywords "languages" "tools") (:url . "https://github.com/arthurgleckler/validate-html"))])
- (vampyricdark-theme . [(20220405 2235) ((emacs (25 1))) "VampyricDark Theme" single ((:commit . "24e43991ae50098e1f8fecaaabc768183de76947") (:url . "https://github.com/VampyricDark/emacs"))])
- (vbasense . [(20140221 2353) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 1))) "provide a environment like Visual Basic Editor." tar ((:commit . "8c61a492d7c15218ae1a96e2aebfe6f78bfff6db") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "vba" "completion") (:url . "https://github.com/aki2o/emacs-vbasense"))])
- (vc-auto-commit . [(20210216 1517) nil "Auto-committing feature for your repository" tar ((:commit . "56f478016a541b395092a9d3cdc0da84a37b30a1") (:authors ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainers ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainer "Sylvain Rousseau <thisirs at gmail dot com>") (:keywords "vc" "convenience") (:url . "http://github.com/thisirs/vc-auto-commit.git"))])
- (vc-check-status . [(20210216 1525) nil "Warn you when quitting emacs and leaving repo dirty." tar ((:commit . "d95ef8f0799cd3dd83726ffa9b01b076f378ce34") (:authors ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainers ("Sylvain Rousseau <thisirs at gmail dot com>")) (:maintainer "Sylvain Rousseau <thisirs at gmail dot com>") (:keywords "vc" "convenience") (:url . "https://github.com/thisirs/vc-check-status"))])
- (vc-darcs . [(20230319 1149) ((emacs (24))) "a VC backend for darcs" single ((:commit . "097e03f119b4fedb0186fd45d730a1c5acac10dc") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx") ("Juliusz Chroboczek" . "jch@pps.univ-paris-diderot.fr")) (:maintainers ("Libor Čapák" . "capak@inputwish.com")) (:maintainer "Libor Čapák" . "capak@inputwish.com") (:keywords "vc"))])
- (vc-defer . [(20201116 701) ((emacs (25 1))) "Defer non-essential vc.el work" single ((:commit . "aeafc419c1788b3ac4f0590c635374eefd7c220c") (:authors ("Matt Armstrong" . "marmstrong@google.com")) (:maintainers ("Tom Fitzhenry" . "tomfitzhenry@google.com")) (:maintainer "Tom Fitzhenry" . "tomfitzhenry@google.com") (:keywords "vc" "tools") (:url . "https://github.com/google/vc-defer"))])
- (vc-fossil . [(20230504 1626) nil "VC backend for the fossil sofware configuraiton management system" single ((:commit . "4a4a3e4df83ba2f1ea8bfd8aa7e9f9b2c1c32ca9") (:authors ("Venkat Iyer" . "venkat@comit.com")) (:maintainers ("Alfred M. Szmidt" . "ams@gnu.org")) (:maintainer "Alfred M. Szmidt" . "ams@gnu.org"))])
- (vc-hgcmd . [(20211021 1704) ((emacs (25 1))) "VC mercurial backend that uses hg command server" single ((:commit . "d044448965d31ca8214f8bca48487e4d9b9d9a0f") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainers ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:keywords "vc") (:url . "https://github.com/muffinmad/emacs-vc-hgcmd"))])
- (vc-msg . [(20221005 1228) ((emacs (24 4)) (popup (0 5 0))) "Show commit information of current line" tar ((:commit . "027fefad63868cd7695372510c27922656cf996a") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "git" "vc" "svn" "hg" "messenger") (:url . "http://github.com/redguardtoo/vc-msg"))])
- (vc-osc . [(20190402 2349) nil "non-resident support for osc version-control" single ((:commit . "bf5a515ed85f7d7cdfe66ed5bf4ef7554f8561e5") (:authors ("Adam Spiers (see vc.el for full credits)")) (:maintainers ("Adam Spiers" . "aspiers@suse.com")) (:maintainer "Adam Spiers" . "aspiers@suse.com"))])
- (vcomp . [(20230407 1426) ((emacs (24 1))) "Compare version strings" single ((:commit . "fdd010e9081d62aa6aaa1b25a2df925efd662d0c") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "versions") (:url . "https://github.com/tarsius/vcomp"))])
- (vcsh . [(20230402 1229) ((emacs (25 1))) "vcsh integration" single ((:commit . "b9c0109a8c77446980de668785e6af1e46bdcdcd") (:authors ("Štěpán Němec" . "stepnem@smrk.net")) (:maintainers ("Štěpán Němec" . "stepnem@smrk.net")) (:maintainer "Štěpán Němec" . "stepnem@smrk.net") (:keywords "vc" "files") (:url . "http://git.smrk.net/vcsh.el"))])
- (vdf-mode . [(20210303 714) ((emacs (24 3))) "Major mode for editing Valve VDF files." single ((:commit . "0910d4f847e9c817eb8da5434b3879048ec4ac92") (:authors ("Philipp Middendorf")) (:maintainers ("Philipp Middendorf")) (:maintainer "Philipp Middendorf") (:url . "https://github.com/plapadoo/vdf-mode"))])
- (vdiff . [(20220830 1450) ((emacs (24 4)) (hydra (0 13 0))) "A diff tool similar to vimdiff" single ((:commit . "d5df45f84395f507aba555a54407b60e284b23cd") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:keywords "diff") (:url . "https://github.com/justbur/emacs-vdiff"))])
- (vdiff-magit . [(20220518 1948) ((emacs (24 4)) (vdiff (0 3)) (magit (2 10 0)) (transient (0 1 0))) "magit integration for vdiff" single ((:commit . "413f32c9f7e66f8379c23b5ab6341695dbcc2f20") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:keywords "diff") (:url . "https://github.com/justbur/emacs-vdiff-magit"))])
- (vdirel . [(20220412 646) ((emacs (24 4)) (org-vcard (0 1 0)) (helm (1 7 0)) (seq (1 11))) "Manipulate vdir (i.e., vCard) repositories" single ((:commit . "4eebcf91bdb9ee10fbbba198c4995ae070442f26") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainers ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/vdirel"))])
- (vdm-comint . [(20181127 2023) ((emacs (25)) (vdm-mode (0 0 4))) "REPL support for vdm-mode" single ((:commit . "e131edb0d35de28bd47d6128dd70d9a6fc46e0fa") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:keywords "languages") (:url . "https://github.com/peterwvj/vdm-mode"))])
- (vdm-mode . [(20190328 1408) ((emacs (25))) "Major mode for the Vienna Development Method" tar ((:commit . "89e7db6ee1a89b8c1f7ce36ce6800c32b5c4ba2d") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:keywords "languages") (:url . "https://github.com/peterwvj/vdm-mode"))])
- (vdm-snippets . [(20190313 1122) ((emacs (24)) (yasnippet (0 13 0))) "YASnippets for VDM mode" tar ((:commit . "dc1756dd151752b3f538d68326059f8861e4ac66") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainers ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:keywords "languages") (:url . "https://github.com/peterwvj/vdm-mode"))])
- (vector-utils . [(20140508 2041) nil "Vector-manipulation utility functions" single ((:commit . "5f9ced3960a318d611c3d20ffdc9ca74054fa8b7") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/vector-utils"))])
- (vega-view . [(20210401 1115) ((emacs (25)) (cider (0 24 0)) (parseedn (0 1))) "Vega visualization viewer" single ((:commit . "3793025a523a86acc6255b4183b12ebfc95e1116") (:authors ("Jack Rusher" . "jack@appliedscience.studio")) (:maintainers ("Jack Rusher" . "jack@appliedscience.studio")) (:maintainer "Jack Rusher" . "jack@appliedscience.studio") (:keywords "multimedia") (:url . "https://www.github.com/applied-science/emacs-vega-view"))])
- (vegetative-theme . [(20220822 353) ((autothemer (0 2)) (emacs (24))) "A Theme based on green CRT terminals" single ((:commit . "db60ce0fe327ae7e4371545179ed94483b1132a8") (:url . "http://github.com/emacsfodder/emacs-theme-vegetative"))])
- (verb . [(20230301 2117) ((emacs (25 1))) "Organize and send HTTP requests" tar ((:commit . "0fa5259eb7e9404a5d665fb3fdf3f2c19d043189") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainers ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com") (:keywords "tools") (:url . "https://github.com/federicotdn/verb"))])
- (veri-kompass . [(20200213 934) ((emacs (25)) (cl-lib (0 5)) (org (8 2 0))) "verilog codebase navigation facility" single ((:commit . "271903cdf92db05898ee7cffb65641f30fa08280") (:maintainers (nil . "andrea_corallo@yahoo.it")) (:maintainer nil . "andrea_corallo@yahoo.it") (:keywords "languages" "extensions" "verilog" "hardware" "rtl") (:url . "https://gitlab.com/koral/veri-kompass"))])
- (verify-url . [(20160426 1228) ((cl-lib (0 5))) "find out invalid urls in the buffer or region" single ((:commit . "d6f3623cda8cd526a2d198619b137059cb1ba1ab") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainers ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:keywords "convenience" "usability" "url") (:url . "https://github.com/lujun9972/verify-url"))])
- (verilog-ext . [(20230430 1447) ((emacs (28 1)) (verilog-mode (2022 12 18 181110314)) (eglot (1 9)) (lsp-mode (8 0 1)) (ag (0 48)) (ripgrep (0 4 0)) (hydra (0 15 0)) (apheleia (3 1)) (yasnippet (0 14 0)) (company (0 9 13)) (flycheck (33 -4)) (imenu-list (0 9)) (outshine (3 1 -1)) (async (1 9 7))) "SystemVerilog Extensions" tar ((:commit . "1682d9265bf90522a3404650565da1aeff88d7f1") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com") (:keywords "verilog" "ide" "tools") (:url . "https://github.com/gmlarumbe/verilog-ext"))])
- (verona-mode . [(20200823 536) ((emacs (25 1)) (dash (2 17 0)) (hydra (0 15 0))) "A major mode for the Verona programming language" single ((:commit . "72dd31ef847344d79409503f3c42169041eb3da4") (:keywords "languages" "programming") (:url . "https://github.com/damon-kwok/verona-mode"))])
- (versuri . [(20211104 1301) ((emacs (26 1)) (dash (2 16 0)) (request (0 3 0)) (anaphora (1 0 4)) (esxml (0 1 0)) (s (1 12 0)) (esqlite (0 3 1))) "The lyrics package" single ((:commit . "c8ea562304194f3379ed8f9c6a785ce8ee72898e") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm") (:keywords "multimedia") (:url . "https://github.com/mihaiolteanu/versuri/"))])
- (vertica . [(20131217 1511) ((sql (3 0))) "Vertica SQL mode extension" single ((:commit . "3c9647b425c5c13c30bf0cba483646af18196588") (:authors ("Roman Scherer" . "roman@burningswell.com")) (:maintainers ("Roman Scherer" . "roman@burningswell.com")) (:maintainer "Roman Scherer" . "roman@burningswell.com") (:keywords "sql" "vertica"))])
- (vertica-snippets . [(20200423 1200) ((yasnippet (0 6 1))) "Yasnippets for Vertica" tar ((:commit . "6ced718d9120878878700592fab430a8542b748f") (:authors ("Andreas Gerler" . "baron@bundesbrandschatzamt.de")) (:maintainers ("Andreas Gerler" . "baron@bundesbrandschatzamt.de")) (:maintainer "Andreas Gerler" . "baron@bundesbrandschatzamt.de") (:keywords "convenience" "snippets") (:url . "https://github.com/baron42bba/vertica-snippets"))])
- (vertico-prescient . [(20230221 1257) ((emacs (27 1)) (prescient (6 1 0)) (vertico (0 28))) "prescient.el + Vertico" single ((:commit . "822481e722502081deedbe6b1a9776eda0ca7bfe") (:authors ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainers ("Radian LLC" . "contact+prescient@radian.codes")) (:maintainer "Radian LLC" . "contact+prescient@radian.codes") (:keywords "extensions") (:url . "https://github.com/radian-software/prescient.el"))])
- (vertigo . [(20211224 1256) ((dash (2 11 0))) "Jump across lines using the home row." single ((:commit . "280b30518529242ee36cd436bd2349c34c35abb0") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainers ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:keywords "vim" "vertigo") (:url . "https://github.com/noctuid/vertigo.el"))])
- (vhdl-capf . [(20160221 1734) nil "Completion at point function (capf) for vhdl-mode." single ((:commit . "290abe217050f33532bc9ccb04f894123402f414") (:authors ("sh-ow" . "sh-ow@users.noreply.github.com")) (:maintainers ("sh-ow" . "sh-ow@users.noreply.github.com")) (:maintainer "sh-ow" . "sh-ow@users.noreply.github.com") (:keywords "convenience" "usability" "vhdl" "completion") (:url . "https://github.com/sh-ow/vhdl-capf"))])
- (vhdl-ext . [(20230430 1437) ((emacs (28 1)) (eglot (1 9)) (lsp-mode (8 0 1)) (ag (0 48)) (ripgrep (0 4 0)) (hydra (0 15 0)) (flycheck (33 -4))) "VHDL Extensions" single ((:commit . "9627ff3d481950cbb3dde338deb4422c83933a2a") (:authors ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainers ("Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com")) (:maintainer "Gonzalo Larumbe" . "gonzalomlarumbe@gmail.com") (:keywords "vhdl" "ide" "tools") (:url . "https://github.com/gmlarumbe/vhdl-ext"))])
- (vhdl-tools . [(20200330 1819) ((ggtags (0 9 0)) (emacs (26 2)) (helm-rg (0 1)) (outshine (3 1 -1))) "Utilities for navigating vhdl sources" single ((:commit . "9cb2354874608d971be407ad9299ed918a6c061a") (:authors ("Cayetano Santos")) (:maintainers ("Cayetano Santos")) (:maintainer "Cayetano Santos") (:keywords "convenience" "languages" "vhdl") (:url . "https://gitlab.com/emacs-elisp/vhdl-tools/-/wikis/home"))])
- (vi-tilde-fringe . [(20141028 242) ((emacs (24))) "Displays tildes in the fringe on empty lines a la Vi." single ((:commit . "e6e15638e8c45a5e68d0874d5d8c9a46c4f38a54") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainers ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:keywords "emulation") (:url . "https://github.com/syl20bnr/vi-tilde-fringe"))])
- (viewer . [(20170107 202) nil "View-mode extension" single ((:commit . "6c8db025bf4021428f7f2c3ef9d74fb13f5d267a") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainers ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:keywords "view" "extensions") (:url . "http://github.com/rubikitch/viewer/"))])
- (viking-mode . [(20160705 2027) nil "kill first, ask later" single ((:commit . "c76aa265d13ad91d6890d242e142d05e31f0340b") (:authors ("T.v.Dein" . "tlinden@cpan.org")) (:maintainers ("T.v.Dein" . "tlinden@cpan.org")) (:maintainer "T.v.Dein" . "tlinden@cpan.org") (:keywords "kill" "delete") (:url . "https://github.com/tlinden/viking-mode"))])
- (vim-empty-lines-mode . [(20150111 426) ((emacs (23))) "Vim-like empty line indicator at end of files." single ((:commit . "442a29b0ba1635a3b352c9dd1faf9ce99656d048") (:authors ("Jonne Mickelin" . "jonne@ljhms.com")) (:maintainers ("Jonne Mickelin" . "jonne@ljhms.com")) (:maintainer "Jonne Mickelin" . "jonne@ljhms.com") (:keywords "emulations") (:url . "https://github.com/jmickelin/vim-empty-lines-mode"))])
- (vim-region . [(20140329 1624) ((expand-region (20140127))) "Select region as vim" single ((:commit . "7c4a99ce3678fee40c83ab88e8ad075d2a935fdf") (:authors ("ongaeshi" . "ongaeshi0621@gmail.com")) (:maintainers ("ongaeshi" . "ongaeshi0621@gmail.com")) (:maintainer "ongaeshi" . "ongaeshi0621@gmail.com") (:url . "https://github.com/ongaeshi/emacs-vim-region"))])
- (vimgolf . [(20200205 1420) nil "VimGolf interface for the One True Editor" single ((:commit . "f565447ed294898588a19438d56c116555d8c628") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainers ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com") (:keywords "games" "vimgolf" "vim") (:url . "https://github.com/timvisher/vimgolf.el"))])
- (vimish-fold . [(20201205 1156) ((emacs (24 4)) (cl-lib (0 5)) (f (0 18 0))) "Fold text like in Vim" single ((:commit . "a6501cbfe3db791f9ca17fd986c7202a87f3adb8") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "convenience") (:url . "https://github.com/mrkkrp/vimish-fold"))])
- (vimrc-mode . [(20181116 1919) nil "Major mode for vimrc files" single ((:commit . "13bc150a870d5d4a95f1111e4740e2b22813c30e") (:keywords "languages" "vim") (:url . "https://github.com/mcandre/vimrc-mode"))])
- (virtual-auto-fill . [(20200906 2038) ((emacs (25 2)) (adaptive-wrap (0 7)) (visual-fill-column (1 9))) "Readably display text without adding line breaks" single ((:commit . "a3991ce02d9a6a1624a3f04da80f4ac966a44092") (:authors ("Luis Gerhorst" . "virtual-auto-fill@luisgerhorst.de")) (:maintainers ("Luis Gerhorst" . "virtual-auto-fill@luisgerhorst.de")) (:maintainer "Luis Gerhorst" . "virtual-auto-fill@luisgerhorst.de") (:keywords "convenience" "mail" "outlines" "files" "wp") (:url . "https://github.com/luisgerhorst/virtual-auto-fill"))])
- (virtual-comment . [(20220921 221) ((emacs (26 1))) "Virtual Comments" single ((:commit . "b0c2ac4a9d625b5f4f329bbab879ad86cd7056bd") (:authors ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainers ("Thanh Vuong" . "thanhvg@gmail.com")) (:maintainer "Thanh Vuong" . "thanhvg@gmail.com") (:url . "https://github.com/thanhvg/emacs-virtual-comment"))])
- (virtualenv . [(20140220 2301) nil "Virtualenv for Python" single ((:commit . "cc82856b6316d5e78073de717f0d5d1a4ee35fa6") (:authors ("Aaron Culich" . "aculich@gmail.com")) (:maintainers ("Aaron Culich" . "aculich@gmail.com")) (:maintainer "Aaron Culich" . "aculich@gmail.com") (:keywords "python" "virtualenv"))])
- (virtualenvwrapper . [(20190223 1919) ((dash (1 5 0)) (s (1 6 1))) "a featureful virtualenv tool for Emacs" single ((:commit . "f753e5ad91c2ff5d11bec424aa8cec141efa6925") (:authors ("James J Porter" . "porterjamesj@gmail.com")) (:maintainers ("James J Porter" . "porterjamesj@gmail.com")) (:maintainer "James J Porter" . "porterjamesj@gmail.com") (:keywords "python" "virtualenv" "virtualenvwrapper") (:url . "http://github.com/porterjamesj/virtualenvwrapper.el"))])
- (visible-mark . [(20150624 450) nil "Make marks visible." single ((:commit . "c1852e13b6b61982738b56977a452ec9026faf1b") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainers ("Ian Kelling" . "ian@iankelling.org")) (:maintainer "Ian Kelling" . "ian@iankelling.org") (:keywords "marking" "color" "faces") (:url . "https://gitlab.com/iankelling/visible-mark"))])
- (visual-ascii-mode . [(20150129 1046) nil "Visualize ascii code (small integer) on buffer." single ((:commit . "99285a099a17472ddd9f1b4f74e9d092dd8c5947") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainers ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:keywords "presentation") (:url . "https://github.com/Dewdrops/visual-ascii-mode"))])
- (visual-fill-column . [(20230102 1830) ((emacs (25 1))) "fill-column for visual-line-mode" single ((:commit . "695a59789209c42fa08a5bce92963ee32f4455be") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:url . "https://codeberg.org/joostkremers/visual-fill-column"))])
- (visual-regexp . [(20210502 2019) ((cl-lib (0 2))) "A regexp/replace command for Emacs with interactive visual feedback" single ((:commit . "48457d42a5e0fe10fa3a9c15854f1f127ade09b5") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainers ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com") (:keywords "regexp" "replace" "visual" "feedback") (:url . "https://github.com/benma/visual-regexp.el/"))])
- (visual-regexp-steroids . [(20170222 253) ((visual-regexp (1 1))) "Extends visual-regexp to support other regexp engines" tar ((:commit . "a6420b25ec0fbba43bf57875827092e1196d8a9e") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainers ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com") (:keywords "external" "foreign" "regexp" "replace" "python" "visual" "feedback") (:url . "https://github.com/benma/visual-regexp-steroids.el/"))])
- (vlc . [(20200328 1143) ((emacs (25 1))) "VideoLAN VLC Media Player Control" single ((:commit . "07c4a12904f2700fb8420c4e71395fd59a5e6faa") (:authors ("Xu Chunyang")) (:maintainers ("Xu Chunyang")) (:maintainer "Xu Chunyang") (:keywords "tools") (:url . "https://github.com/xuchunyang/vlc.el"))])
- (vlf . [(20191126 2250) nil "View Large Files" tar ((:commit . "cc02f2533782d6b9b628cec7e2dcf25b2d05a27c") (:maintainers ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:keywords "large files" "utilities") (:url . "https://github.com/m00natic/vlfi"))])
- (vline . [(20210805 1528) ((emacs (24 3))) "Column highlighting (vertical line displaying) mode" single ((:commit . "f5d7b5743dceca75b81c8c95287cd5b0341debf9") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainers ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com") (:keywords "faces" "editing" "emulating") (:url . "https://www.emacswiki.org/emacs/VlineMode"))])
- (vmd-mode . [(20210524 27) ((emacs (24 3))) "Fast Github-flavored Markdown preview using a vmd subprocess." single ((:commit . "b2bdf2ab54f8fc37780e6b473e4ad69c0e9ff4a6") (:authors ("Blake Miller" . "blak3mill3r@gmail.com")) (:maintainers ("Blake Miller" . "blak3mill3r@gmail.com")) (:maintainer "Blake Miller" . "blak3mill3r@gmail.com") (:keywords "markdown" "preview" "live" "vmd") (:url . "https://github.com/blak3mill3r/vmd-mode"))])
- (voca-builder . [(20161101 1645) ((popup (0 5 2))) "Helps you build up your vocabulary" single ((:commit . "51573beec8cd8308477b0faf453aad93e17f57c5") (:authors ("Yi Tang" . "yi.tang.uk@me.com")) (:maintainers ("Yi Tang" . "yi.tang.uk@me.com")) (:maintainer "Yi Tang" . "yi.tang.uk@me.com") (:keywords "english" "vocabulary") (:url . "https://github.com/yitang/voca-builder"))])
- (volatile-highlights . [(20230301 1402) nil "Minor mode for visual feedback on some operations." single ((:commit . "fcf6e2778454ce514c189a7d1fe70e03ad81c325") (:authors ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainers ("K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>")) (:maintainer "K-talo Miyazaki <Keitaro dot Miyazaki at gmail dot com>") (:keywords "emulations" "convenience" "wp") (:url . "http://www.emacswiki.org/emacs/download/volatile-highlights.el"))])
- (volume . [(20220904 1727) nil "tweak your sound card volume from Emacs" single ((:commit . "050d3e6d2543a6771a13f95612055864679b6301") (:authors ("Daniel Brockman" . "daniel@brockman.se")) (:maintainers ("Daniel Brockman" . "daniel@brockman.se")) (:maintainer "Daniel Brockman" . "daniel@brockman.se") (:url . "http://www.brockman.se/software/volume-el/"))])
- (vs-dark-theme . [(20230415 435) ((emacs (24 1))) "Visual Studio IDE dark theme" single ((:commit . "8906a2a593888eafc61c5c202260edaddd3e6c75") (:authors ("Jen-Chieh Shen")) (:maintainers ("Jen-Chieh Shen")) (:maintainer "Jen-Chieh Shen") (:url . "https://github.com/emacs-vs/vs-dark-theme"))])
- (vs-light-theme . [(20230415 434) ((emacs (24 1))) "Visual Studio IDE light theme" single ((:commit . "dc633afc975b1cfaa1b7435f7425f5548ff1c35a") (:authors ("Jen-Chieh Shen")) (:maintainers ("Jen-Chieh Shen")) (:maintainer "Jen-Chieh Shen") (:url . "https://github.com/emacs-vs/vs-light-theme"))])
- (vscdark-theme . [(20191212 107) ((emacs (24 1))) "VS Code Dark+ like theme" single ((:commit . "f419553e2a2f091a8bc257fb5ab520326e93ddd4") (:authors ("Alexander L. Belikoff")) (:maintainers ("Alexander L. Belikoff")) (:maintainer "Alexander L. Belikoff") (:url . "https://github.com/abelikoff/vscdark-theme"))])
- (vscode-dark-plus-theme . [(20221121 1846) nil "Default Visual Studio Code Dark+ theme" single ((:commit . "f33e1f92f6b34bbd7ecc81cb4c6d48f9cab393d9") (:authors ("Ian Y.E. Pan")) (:maintainers ("Ian Y.E. Pan")) (:maintainer "Ian Y.E. Pan") (:url . "https://github.com/ianpan870102/vscode-dark-plus-emacs-theme"))])
- (vscode-icon . [(20230330 2206) ((emacs (25 1))) "Utility package to provide Vscode style icons" tar ((:commit . "3976bc2e7e2fe0068ae59c11d226f67e0e87aaea") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainers ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:keywords "files" "tools") (:url . "https://github.com/jojojames/vscode-icon-emacs"))])
- (vterm . [(20230417 424) ((emacs (25 1))) "Fully-featured terminal emulator" tar ((:commit . "94e2b0b2b4a750e7907dacd5b4c0584900846dd1") (:authors ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainers ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainer "Lukas Fürmetz" . "fuermetz@mailbox.org") (:keywords "terminals") (:url . "https://github.com/akermu/emacs-libvterm"))])
- (vterm-toggle . [(20220820 1608) ((emacs (25 1)) (vterm (0 0 1))) "Toggles between the vterm buffer and other buffers." single ((:commit . "b94522e3a4ddaae098f4711aadce675e891cdec8") (:authors (nil . "jixiuf jixiuf@qq.com")) (:maintainers (nil . "jixiuf jixiuf@qq.com")) (:maintainer nil . "jixiuf jixiuf@qq.com") (:keywords "vterm" "terminals") (:url . "https://github.com/jixiuf/vterm-toggle"))])
- (vtm . [(20200921 338) nil "Manages vterm buffers with configuration files" tar ((:commit . "d770fd8cff7c24688199392ad93c01485c6a9569") (:keywords "convenience") (:url . "https://github.com/laishulu/emacs-vterm-manager"))])
- (vue-html-mode . [(20180428 2035) nil "Major mode for editing Vue.js templates" single ((:commit . "361a9fa117f044c3072dc5a7344ff7be31725849") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainers ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:keywords "languages" "vue" "template") (:url . "http://github.com/AdamNiederer/vue-html-mode"))])
- (vue-mode . [(20190415 231) ((mmm-mode (0 5 5)) (vue-html-mode (0 2)) (ssass-mode (0 2)) (edit-indirect (0 1 4))) "Major mode for vue component based on mmm-mode" single ((:commit . "031edd1f97db6e7d8d6c295c0e6d58dd128b9e71") (:authors ("codefalling" . "code.falling@gmail.com")) (:maintainers ("codefalling" . "code.falling@gmail.com")) (:maintainer "codefalling" . "code.falling@gmail.com") (:keywords "languages"))])
- (vuiet . [(20220218 1024) ((emacs (26 1)) (lastfm (1 1)) (versuri (1 0)) (s (1 12 0)) (bind-key (2 4)) (mpv (0 1 0))) "The music player and explorer for Emacs" single ((:commit . "aed3272b95fc73fd78712ff7dcfc05916f382fed") (:authors ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainers ("Mihai Olteanu" . "mihai_olteanu@fastmail.fm")) (:maintainer "Mihai Olteanu" . "mihai_olteanu@fastmail.fm") (:keywords "multimedia") (:url . "https://github.com/mihaiolteanu/vuiet"))])
- (vulpea . [(20221128 633) ((emacs (27 2)) (org (9 4 4)) (org-roam (2 0 0)) (s (1 12)) (dash (2 19))) "A collection of org-roam note-taking functions" tar ((:commit . "bee9bda6a17657155d233e375a2cae693fbe8676") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainers ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/vulpea"))])
- (vunit-mode . [(20220316 1812) ((hydra (0 14 0)) (emacs (24 3))) "VUnit Runner Interface" single ((:commit . "5643460a7011d6bc13c2d4762f329d19f6c7d46b") (:authors ("Lukas Lichtl" . "support@embed-me.com")) (:maintainers ("Lukas Lichtl" . "support@embed-me.com")) (:maintainer "Lukas Lichtl" . "support@embed-me.com") (:keywords "vunit" "python" "tools") (:url . "https://github.com/embed-me"))])
- (vyper-mode . [(20180707 1935) ((emacs (24 3))) "Major mode for the Vyper programming language" single ((:commit . "323dfddfc38f0b11697e9ebaf04d1b53297e54e5") (:authors ("Alex Stokes" . "r.alex.stokes@gmail.com")) (:maintainers ("Alex Stokes" . "r.alex.stokes@gmail.com")) (:maintainer "Alex Stokes" . "r.alex.stokes@gmail.com") (:keywords "languages") (:url . "https://github.com/ralexstokes/vyper-mode"))])
- (w32-browser . [(20170101 1954) nil "Run Windows application associated with a file." single ((:commit . "e5c60eafd8f8d3546a0fa295ad5af2414d36b4e6") (:authors ("Emacs Wiki, Drew Adams")) (:maintainers (nil . "Drew Adams (concat \"drew.adams\" \"@\" \"oracle\" \".com\")")) (:maintainer nil . "Drew Adams (concat \"drew.adams\" \"@\" \"oracle\" \".com\")") (:keywords "mouse" "dired" "w32" "explorer") (:url . "http://www.emacswiki.org/w32-browser.el"))])
- (w32-ime . [(20201107 143) ((emacs (24 4))) "Windows IME UI/UX controler" single ((:commit . "9c62273dce0ba685a591577885b1e216ba832ec1") (:authors ("H.Miyashita") ("MIYOSHI Masanori") ("KOBAYASHI Yasuhiro") ("NTEmacsJP") ("ksugita (gnupack)") ("rzl24ozi") ("TANE") ("Masamichi Hosoda" . "trueroad@trueroad.jp") ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainers ("Masamichi Hosoda" . "trueroad@trueroad.jp")) (:maintainer "Masamichi Hosoda" . "trueroad@trueroad.jp") (:url . "https://github.com/trueroad/w32-ime.el"))])
- (w3m . [(20230324 125) nil "an Emacs interface to w3m" tar ((:commit . "f8819bca0c97970662cd4214f8f3104ab4a376c1") (:keywords "w3m" "www" "hypermedia"))])
- (wacspace . [(20180311 2350) ((dash (1 2 0)) (cl-lib (0 2))) "The WACky WorkSPACE manager for emACS" tar ((:commit . "54d19aab6fd2bc5945b7ffc58104e695064927e2") (:authors ("Emanuel Evans" . "emanuel.evans@gmail.com")) (:maintainer "Emanuel Evans" . "emanuel.evans@gmail.com") (:keywords "workspace") (:url . "http://github.com/shosti/wacspace.el"))])
- (waf-mode . [(20170403 1940) nil "Waf integration for Emacs" single ((:commit . "91c761336aa137b85b88b53b3f0cc60786d70800") (:authors ("Denys Valchuk" . "dvalchuk@gmail.com")) (:maintainers ("Denys Valchuk" . "dvalchuk@gmail.com")) (:maintainer "Denys Valchuk" . "dvalchuk@gmail.com") (:url . "https://bitbucket.org/dvalchuk/waf-mode"))])
- (waher-theme . [(20141115 1230) ((emacs (24 1))) "Emacs 24 theme based on waher for st2 by dduckster" single ((:commit . "60d31519fcfd8e797723d47961b255ae2f2e2c0a") (:authors ("Jasonm23" . "jasonm23@gmail.com")) (:maintainers ("Jasonm23" . "jasonm23@gmail.com")) (:maintainer "Jasonm23" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-waher-theme"))])
- (wakatime-mode . [(20221110 1632) nil "Automatic time tracking extension for WakaTime" single ((:commit . "ef923829912c3854d230834f81083814b7c9d992") (:authors ("Gabor Torok" . "gabor@20y.hu")) (:maintainers ("Alan Hamlett" . "alan@wakatime.com")) (:maintainer "Alan Hamlett" . "alan@wakatime.com") (:keywords "calendar" "comm"))])
- (wakib-keys . [(20220211 1304) ((emacs (24 4))) "Minor Mode for Modern Keybindings" single ((:commit . "ed86134f91c532a38d2739dd15ea6cec879cbd8a") (:authors ("Abdulla Bubshait")) (:maintainers ("Abdulla Bubshait")) (:maintainer "Abdulla Bubshait") (:keywords "convenience" "keybindings" "keys") (:url . "https://github.com/darkstego/wakib-keys/"))])
- (wal-mode . [(20220409 1214) ((emacs (25 1))) "A major mode for the WAL programming language" single ((:commit . "16733847f04af1929e590ff3e41f554baa3ba640") (:authors ("Lucas Klemmer" . "lucas.klemmer@jku.at")) (:maintainers ("Lucas Klemmer" . "lucas.klemmer@jku.at")) (:maintainer "Lucas Klemmer" . "lucas.klemmer@jku.at") (:keywords "languages") (:url . "https://github.com/LucasKl/wal-major-mode"))])
- (walkclj . [(20220719 1610) ((emacs (25)) (parseclj (0 1 0)) (treepy (0 1 0)) (a (1 0 0))) "Manipulate Clojure parse trees" single ((:commit . "875ee7a350f5141f425c4b5350a630e1ee1795e8") (:authors ("Arne Brasseur")) (:maintainers ("Arne Brasseur")) (:maintainer "Arne Brasseur") (:keywords "languages") (:url . "https://github.com/plexus/walkclj"))])
- (walkman . [(20221007 1937) ((transient (0 1 0)) (org (8 3 5)) (json-mode (1 6 0)) (emacs (26 3))) "Write HTTP requests in Org mode" single ((:commit . "f5021a4d9f16a2013e67a9fa7c121f87bf030203") (:authors ("Adrien Brochard")) (:maintainers ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:keywords "walkman" "http" "curl" "org" "comm") (:url . "https://github.com/abrochard/walkman"))])
- (wallpaper . [(20201019 2123) ((emacs (25 1))) "Setting the wallpaper" single ((:commit . "cc0101726dd2fa2b4eda06924c7abfae54f663e2") (:authors ("Farlado" . "farlado@sdf.org")) (:maintainers ("Farlado" . "farlado@sdf.org")) (:maintainer "Farlado" . "farlado@sdf.org") (:keywords "unix" "wallpaper" "extensions") (:url . "https://github.com/farlado/emacs-wallpaper"))])
- (wallpreview . [(20220703 1108) ((emacs (24 4))) "Set wallpapers with image-dired" single ((:commit . "6eae0549afdfe725b453ca4fb0878c728735892d") (:url . "https://github.com/nryotaro/wallpreview"))])
- (wand . [(20220519 1214) nil "Magic wand for Emacs - Select and execute" tar ((:commit . "e4afc0469c818e7ce73ef31c38d911477947d72e") (:authors ("Ha-Duong Nguyen <cmpitgATgmail>")) (:maintainers ("Ha-Duong Nguyen <cmpitgATgmail>")) (:maintainer "Ha-Duong Nguyen <cmpitgATgmail>") (:keywords "extensions" "tools") (:url . "https://github.com/cmpitg/wand"))])
- (wandbox . [(20170603 1231) ((emacs (24)) (request (0 3 0)) (s (1 10 0))) "Wandbox client" tar ((:commit . "e002fe41f2cd9b4ce2b1dc80b83301176e9117f1") (:authors ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainers ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com") (:keywords "tools") (:url . "https://github.com/kosh04/emacs-wandbox"))])
- (wanderlust . [(20230329 931) ((emacs (24 5)) (apel (10 8)) (flim (1 14 9)) (semi (1 14 7))) "Yet Another Message Interface on Emacsen" tar ((:commit . "74b4fe3ebfffbaec85dbc14c09750cc67ca60f9b"))])
- (warm-night-theme . [(20161101 1428) ((emacs (24))) "Emacs 24 theme with a dark background." single ((:commit . "020f084d23409b5035150508ba6e57c2509edd64") (:authors ("martin haesler")) (:maintainers ("martin haesler")) (:maintainer "martin haesler"))])
- (wasp-mode . [(20230424 1307) ((emacs (24 3))) "A major mode for the Wasp programming language" single ((:commit . "76198cdd5f0ece3770c3a586115caea3ea613169") (:authors ("XXIV")) (:maintainers ("XXIV")) (:maintainer "XXIV") (:keywords "files" "wasp") (:url . "https://github.com/thechampagne/wasp-mode"))])
- (watch-buffer . [(20120331 2044) nil "run a shell command when saving a buffer" single ((:commit . "a01cf15608c5bf91df253104053041ca1afdf411") (:authors ("Michael Steger" . "mjsteger1@gmail.com")) (:maintainers ("Michael Steger" . "mjsteger1@gmail.com")) (:maintainer "Michael Steger" . "mjsteger1@gmail.com") (:keywords "automation" "convenience") (:url . "https://github.com/mjsteger/watch-buffer"))])
- (wavefront-obj-mode . [(20170808 1716) nil "Major mode for Wavefront obj files" single ((:commit . "34027915de6496460d8e68b5991dd24d47d54859") (:authors ("Sasha Kovar" . "sasha-emacs@arcocene.org")) (:maintainers ("Sasha Kovar" . "sasha-emacs@arcocene.org")) (:maintainer "Sasha Kovar" . "sasha-emacs@arcocene.org") (:url . "http://github.com/abend/wavefront-obj-mode"))])
- (wc-goal-mode . [(20140829 1359) nil "Running word count with goals (minor mode)" single ((:commit . "bf21ab9c5a449bcc20dd207a4915dcec218d2699") (:authors ("Benjamin Beckwith")) (:maintainers ("Benjamin Beckwith")) (:maintainer "Benjamin Beckwith") (:url . "https://github.com/bnbeckwith/wc-goal-mode"))])
- (wc-mode . [(20210418 47) ((emacs (24 1))) "Running word count with goals (minor mode)" single ((:commit . "63be1433b8a63cdc3239cc751e36360429c42b51") (:authors ("Benjamin Beckwith")) (:maintainers ("Benjamin Beckwith")) (:maintainer "Benjamin Beckwith") (:url . "https://github.com/bnbeckwith/wc-mode"))])
- (wdl-mode . [(20180831 1946) nil "WDL (Workflow Definition Language) major mode" single ((:commit . "cef86e5afc136ae5ad9324cd6e6d6f860b889bcf") (:authors ("Xiaowei Zhan" . "zhanxw@gmail.com")) (:maintainers ("Xiaowei Zhan" . "zhanxw@gmail.com")) (:maintainer "Xiaowei Zhan" . "zhanxw@gmail.com") (:keywords "languages") (:url . "http://github.com/zhanxw/wdl-mode"))])
- (weak-ref . [(20200217 2200) ((emacs (24 3))) "Weak references for Emacs Lisp" single ((:commit . "24e8c37da6465e65ce9f866267bd3fa53c8899c6") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/elisp-weak-ref"))])
- (weather-metno . [(20230129 1540) ((emacs (24)) (cl-lib (0 3))) "Weather data from met.no in Emacs" tar ((:commit . "58b3aa479d85b4b38eb233ac2fbac40faf906f4c") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainer "Rüdiger Sonderfeld" . "ruediger@c-plusplus.de") (:keywords "comm") (:url . "https://github.com/ruediger/weather-metno-el"))])
- (web . [(20141231 2001) ((dash (2 9 0)) (s (1 5 0))) "useful HTTP client" single ((:commit . "483188dac4bc6b409b985c9dae45f3324a425efd") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "lisp" "http" "hypermedia") (:url . "http://github.com/nicferrier/emacs-web"))])
- (web-beautify . [(20161115 2247) nil "Format HTML, CSS and JavaScript/JSON" single ((:commit . "e1b45321d8c11b404b12c8e55afe55eaa7c84ee9") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainers ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:url . "https://github.com/yasuyk/web-beautify"))])
- (web-completion-data . [(20160318 848) nil "Shared completion data for ac-html and company-web" tar ((:commit . "c272c94e8a71b779c29653a532f619acad433a4f") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainers ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com") (:keywords "html" "auto-complete" "company") (:url . "https://github.com/osv/web-completion-data"))])
- (web-mode . [(20230329 601) ((emacs (23 1))) "major mode for editing web templates" single ((:commit . "57856ba64b9382811b35df0d9ab0a24aede0c1f0") (:authors ("François-Xavier Bois")) (:maintainers ("François-Xavier Bois" . "fxbois@gmail.com")) (:maintainer "François-Xavier Bois" . "fxbois@gmail.com") (:keywords "languages") (:url . "https://web-mode.org"))])
- (web-mode-edit-element . [(20190531 852) ((emacs (24 4)) (web-mode (14))) "Helper-functions for attribute- and element-handling" tar ((:commit . "ad5d7e4dc2420bdd00ce65d9adffbd38a5904afa") (:authors ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainers ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainer "Julian T. Knabenschuh" . "jtkdevelopments@gmail.com") (:keywords "languages" "convenience") (:url . "https://github.com/jtkDvlp/web-mode-edit-element"))])
- (web-narrow-mode . [(20170407 210) ((web-mode (14 0 27))) "quick narrow code block in web-mode" single ((:commit . "b25fae07844875d5b62d14b98442c88817b7e139") (:authors ("Qquanwei" . "quanwei9958@126.com")) (:maintainers ("Johan Andersson" . "quanwei9958@126.com")) (:maintainer "Johan Andersson" . "quanwei9958@126.com") (:keywords "web-mode" "react" "narrow" "web") (:url . "https://github.com/Qquanwei/web-narrow-mode"))])
- (web-search . [(20190620 602) ((emacs (24 3))) "Open a web search" tar ((:commit . "a22cbdc663a1895d5a5b69de91e1e3b9eb64b92f") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainers ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:keywords "web" "search") (:url . "https://github.com/xuchunyang/web-search.el"))])
- (web-server . [(20210708 2242) ((emacs (24 1)) (cl-lib (0 6))) "Emacs Web Server" tar ((:commit . "6357a1c2d1718778503f7ee0909585094117525b") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainers ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") (:keywords "http" "server" "network") (:url . "https://github.com/eschulte/emacs-web-server"))])
- (webkit-color-picker . [(20180325 736) ((emacs (26 0)) (posframe (0 1 0))) "Insert and adjust colors using Webkit Widgets" tar ((:commit . "765cac80144cad4bc0bf59025ea0199f0486f737") (:authors ("Ozan Sener" . "hi@ozan.email")) (:maintainers ("Ozan Sener" . "hi@ozan.email")) (:maintainer "Ozan Sener" . "hi@ozan.email") (:keywords "tools") (:url . "https://github.com/osener/emacs-webkit-color-picker"))])
- (weblio . [(20210718 1410) ((request (0 3 3)) (emacs (25 1))) "Look up Japanese words on Weblio.jp" single ((:commit . "2b4b0c206440b5c63960214feacfceb0c26231c7") (:authors ("Simon Zelazny")) (:maintainers ("Simon Zelazny")) (:maintainer "Simon Zelazny") (:keywords "langauges" "i18n") (:url . "https://github.com/pzel/weblio"))])
- (weblogger . [(20110926 1618) ((xml-rpc (1 6 8))) "Weblog maintenance via XML-RPC APIs" single ((:commit . "40cfbfc69be6a619173804441db2f407e3fa1731") (:keywords "weblog" "blogger" "cms" "movable" "type" "openweblog" "blog") (:url . "http://launchpad.net/weblogger-el"))])
- (weblorg . [(20220312 2008) ((templatel (0 1 6)) (emacs (26 1))) "Static Site Generator for org-mode" tar ((:commit . "9daa6725919dfebaf6fbe19ed262231c2cbf9f89") (:authors ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainers ("Lincoln Clarete" . "lincoln@clarete.li")) (:maintainer "Lincoln Clarete" . "lincoln@clarete.li") (:url . "https://emacs.love/weblorg"))])
- (webpaste . [(20220524 1745) ((emacs (24 4)) (request (0 2 0)) (cl-lib (0 5))) "Paste to pastebin-like services" single ((:commit . "d96da58fe42988d5c433c71ee9f8e6fb75d595a9") (:authors ("Elis \"etu\" Hirwing" . "elis@hirwing.se")) (:maintainers ("Elis \"etu\" Hirwing" . "elis@hirwing.se")) (:maintainer "Elis \"etu\" Hirwing" . "elis@hirwing.se") (:keywords "convenience" "comm" "paste") (:url . "https://github.com/etu/webpaste.el"))])
- (websearch . [(20230210 1321) ((emacs (24 4))) "Query search engines" tar ((:commit . "aa0d7899e032e330e2980aa4be34ed872395883b") (:authors ("Maciej Barć" . "xgqt@riseup.net")) (:maintainers ("Maciej Barć" . "xgqt@riseup.net")) (:maintainer "Maciej Barć" . "xgqt@riseup.net") (:keywords "convenience" "hypermedia") (:url . "https://gitlab.com/xgqt/emacs-websearch/"))])
- (websocket . [(20230305 410) ((cl-lib (0 5))) "Emacs WebSocket client and server" single ((:commit . "1a08093b122d8cf20366a1cba5faddf7a53d08ed") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainers ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") (:keywords "communication" "websocket" "server") (:url . "https://github.com/ahyatt/emacs-websocket"))])
- (wedge-ws . [(20140714 2149) nil "Wedge whitespace between columns in text" single ((:commit . "4669115f02d9c6fee067cc5369bb38c0f9db88b2") (:authors ("Anders Eurenius" . "aes@spotify.com")) (:maintainers ("Anders Eurenius" . "aes@spotify.com")) (:maintainer "Anders Eurenius" . "aes@spotify.com") (:keywords "formatting" "indentation"))])
- (weechat . [(20190520 1551) ((s (1 3 1)) (cl-lib (0 2)) (emacs (24)) (tracking (1 2))) "Chat via WeeChat's relay protocol in Emacs" tar ((:commit . "d9a13306ea8be27367f92e9202d116a88fa1f441") (:authors ("Moritz Ulrich" . "moritz@tarn-vedra.de") ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de") ("Aristid Breitkreuz" . "aristidb@gmail.com")) (:maintainer "Moritz Ulrich" . "moritz@tarn-vedra.de") (:keywords "irc" "chat" "network" "weechat") (:url . "https://github.com/the-kenny/weechat.el"))])
- (weechat-alert . [(20160416 1248) ((weechat (0 3 1)) (cl-lib (0 5)) (alert (1 2))) "Weechat notifier using alerts" single ((:commit . "a8fd557c8f335322f132c1c6c08b6741d6394e2e") (:authors ("Andreas Klein" . "git@kungi.org")) (:maintainers ("Andreas Klein" . "git@kungi.org")) (:maintainer "Andreas Klein" . "git@kungi.org") (:keywords "irc" "chat" "network" "weechat") (:url . "https://github.com/kungi/weechat-alert"))])
- (weibo . [(20150307 2242) ((cl-lib (0 5))) "Weibo client for Emacs" tar ((:commit . "a8abb50b7602fe15fe2bc6400ac29780e956b390") (:authors ("Austin" . "austiny.cn@gmail.com")) (:maintainers ("Austin" . "austiny.cn@gmail.com")) (:maintainer "Austin" . "austiny.cn@gmail.com") (:keywords "weibo") (:url . "https://github.com/austin-----/weibo.emacs"))])
- (weyland-yutani-theme . [(20210802 2251) ((emacs (24 1))) "Emacs theme based off Alien movie franchise" single ((:commit . "e89a63a62e071180c9cdd9067679fadc3f7bf796") (:authors ("Joe Staursky")) (:maintainers ("Joe Staursky")) (:maintainer "Joe Staursky") (:url . "https://github.com/jstaursky/weyland-yutani-theme"))])
- (wfnames . [(20230117 729) ((emacs (24 3))) "Edit filenames" single ((:commit . "0804263fa22bf77fcdb65017ddedc168905f3228") (:authors ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainers ("Thierry Volpiatto" . "thievol@posteo.net")) (:maintainer "Thierry Volpiatto" . "thievol@posteo.net") (:url . "https://github.com/thierryvolpiatto/wfnames"))])
- (wgrep . [(20230203 1214) ((emacs (25 1))) "Writable grep buffer" single ((:commit . "b4d69280d8a6a5ded1597e02afbaa811a160383b") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "grep" "edit" "extensions") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep.el"))])
- (wgrep-ack . [(20230207 1125) ((emacs (25 1)) (wgrep (3 0 0))) "Writable ack-and-a-half buffer" single ((:commit . "edf768732a56840db6879706b64c5773c316d619") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "grep" "edit" "extensions") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ack.el"))])
- (wgrep-ag . [(20230202 315) ((emacs (25 1)) (wgrep (3 0 0))) "Writable ag buffer" single ((:commit . "ff3cf631b6842432daa59bf604049ca916cce73b") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "grep" "edit" "extensions") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ag.el"))])
- (wgrep-deadgrep . [(20230405 936) ((wgrep (2 3 0))) "Writable deadgrep buffer and apply the changes to files" single ((:commit . "3584e9ba43287d712e0c17df5328211c174e9c60") (:authors ("Masahiro Hayashi <mhayashi1120@gmail.com>, Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainers ("Masahiro Hayashi <mhayashi1120@gmail.com>, Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Masahiro Hayashi <mhayashi1120@gmail.com>, Iku Iwasa" . "iku.iwasa@gmail.com") (:keywords "grep" "edit" "extensions") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-deadgrep.el"))])
- (wgrep-helm . [(20230202 315) ((emacs (25 1)) (wgrep (3 0 0))) "Writable helm-grep-mode buffer" single ((:commit . "ff3cf631b6842432daa59bf604049ca916cce73b") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "grep" "edit" "extensions") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-helm.el"))])
- (wgrep-pt . [(20230207 1125) ((emacs (25 1)) (wgrep (3 0 0))) "Writable pt buffer" single ((:commit . "edf768732a56840db6879706b64c5773c316d619") (:authors ("Masahiro Hayashi <mhayashi1120@gmail.com>, Bailey Ling" . "bling@live.ca")) (:maintainers ("Masahiro Hayashi <mhayashi1120@gmail.com>, Bailey Ling" . "bling@live.ca")) (:maintainer "Masahiro Hayashi <mhayashi1120@gmail.com>, Bailey Ling" . "bling@live.ca") (:keywords "grep" "edit" "extensions") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-pt.el"))])
- (wgsl-mode . [(20221127 2129) ((emacs (24))) "Syntax highlighting for the WebGPU Shading Language" single ((:commit . "e7856d6755d93e40ed74598a68ef5f607322618b") (:authors ("Anthony Cowley")) (:maintainers ("Anthony Cowley")) (:maintainer "Anthony Cowley") (:keywords "wgsl" "c") (:url . "https://github.com/acowley/wgsl-mode"))])
- (what-the-commit . [(20150901 1316) nil "Random commit message generator" single ((:commit . "42604410cfd5be715c8aa730aef4673773454e8b") (:authors ("Dan Barbarito" . "dan@barbarito.me")) (:maintainers ("Dan Barbarito" . "dan@barbarito.me")) (:maintainer "Dan Barbarito" . "dan@barbarito.me") (:keywords "git" "commit" "message") (:url . "http://barbarito.me/"))])
- (which-key . [(20230330 2121) ((emacs (24 4))) "Display available keybindings in popup" single ((:commit . "bd34ede7bf77ad3988330b37207f3978e7342c79") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainers ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-which-key"))])
- (which-key-posframe . [(20230313 1841) ((emacs (26 0)) (posframe (1 4 0)) (which-key (3 6 0))) "Using posframe to show which-key" single ((:commit . "e4a9ce9a1b20de550fca51f14d055821980d534a") (:authors ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainers ("Yanghao Xie" . "yhaoxie@gmail.com")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com") (:keywords "convenience" "bindings" "tooltip") (:url . "https://github.com/emacsorphanage/which-key-posframe"))])
- (whiley-mode . [(20220501 2219) ((emacs (24 1))) "Major mode for Whiley language" single ((:commit . "e7cc4759d46be589d421a2235af6771bcde9ae33") (:authors ("David J. Pearce" . "dave01001110@gmail.com")) (:maintainers ("David J. Pearce" . "dave01001110@gmail.com")) (:maintainer "David J. Pearce" . "dave01001110@gmail.com") (:keywords "languages") (:url . "http://github.com/Whiley/WhileyEmacsMode"))])
- (whitaker . [(20210203 1149) ((emacs (25))) "Comint interface for Whitaker's Words" single ((:commit . "a6fda24ccb69a18c0706633326d5cc4fcfaed83a") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainers ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:keywords "processes"))])
- (white-sand-theme . [(20210131 813) ((emacs (24))) "Emacs theme with a light background." single ((:commit . "729dd52cc1936250183d6761eed406c4be514a71") (:authors ("Martin Haesler")) (:maintainers ("Martin Haesler")) (:maintainer "Martin Haesler"))])
- (white-theme . [(20160917 1743) ((emacs (24))) "Minimalistic light color theme inspired by basic-theme" single ((:commit . "e9e6d5b9d43da6eb15e86f5fbc8b1ba83abe8c78") (:authors ("Anler Hernandez Peral" . "inbox@anler.me")) (:maintainers ("Anler Hernandez Peral" . "inbox@anler.me")) (:maintainer "Anler Hernandez Peral" . "inbox@anler.me") (:keywords "color" "theme" "minimal" "basic" "simple" "white") (:url . "http://github.com/anler/white-theme.el"))])
- (whitespace-cleanup-mode . [(20210510 533) ((emacs (24 1))) "Intelligently call whitespace-cleanup on save" single ((:commit . "b108b73ddf8f7e747d5a20a681560171e02ad037") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience") (:url . "https://github.com/purcell/whitespace-cleanup-mode"))])
- (whizzml-mode . [(20201013 239) ((emacs (24 4))) "Programming mode for editing WhizzML files" tar ((:commit . "3dce3be0c32b9b2d259e462b4b27c530af47466a") (:authors ("Jose Antonio Ortega Ruiz" . "jao@bigml.com")) (:maintainers ("Jose Antonio Ortega Ruiz" . "jao@bigml.com")) (:maintainer "Jose Antonio Ortega Ruiz" . "jao@bigml.com") (:keywords "languages" "lisp"))])
- (whois . [(20230201 1408) ((emacs (24))) "Syntax highlighted domain name queries using system whois" single ((:commit . "eae090d48f7942f58231be71683865ba3cd56c24") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainers ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:keywords "network" "comm") (:url . "https://github.com/lassik/emacs-whois"))])
- (whole-line-or-region . [(20201214 650) ((emacs (24 1)) (cl-lib (0 6))) "Operate on current line if region undefined" single ((:commit . "ba193b2034388bbc384cb04093150fca56f7e262") (:authors ("Joe Casadonte" . "emacs@northbound-train.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "convenience" "wp") (:url . "https://github.com/purcell/whole-line-or-region"))])
- (why-this . [(20221129 817) ((emacs (27 1))) "Why is this line here? Ask version control" single ((:commit . "5203d9379afaf6703746823a580c804e1dd98e08") (:authors ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainers ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainer "Akib Azmain Turja" . "akib@disroot.org") (:keywords "tools" "convenience" "vc") (:url . "https://codeberg.org/akib/emacs-why-this"))])
- (wide-column . [(20170925 1613) nil "Calls functions dependant on column position." single ((:commit . "ce9ef4675485a7bea381077866368ef875226b10") (:authors ("Phillip Lord" . "p.lord@russet.org.uk")) (:maintainers ("Phillip Lord" . "p.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "p.lord@russet.org.uk") (:keywords "minor mode" "cursor colour" "column width"))])
- (widget-mvc . [(20150102 406) nil "MVC framework for the emacs widgets" single ((:commit . "2576e6f0c35d8dedfa9c2cd6ea4fb4c14cb72b63") (:authors ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai at kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai at kiwanami.net>") (:keywords "lisp" "widget"))])
- (wiki-nav . [(20230304 2212) ((button-lock (1 0 2)) (nav-flash (1 0 0))) "Simple file navigation using [[WikiStrings]]" single ((:commit . "1f7a89ca05b6167af7d1337ad23a5d923486caac") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "mouse" "button" "hypermedia" "navigation") (:url . "http://github.com/rolandwalker/button-lock"))])
- (wiki-summary . [(20181010 1824) ((emacs (24))) "View Wikipedia summaries in Emacs easily." single ((:commit . "fa41ab6e50b3b80e54148af9d4bac18fd0405000") (:authors ("Danny Gratzer")) (:maintainers ("Danny Gratzer")) (:maintainer "Danny Gratzer") (:keywords "wikipedia" "utility") (:url . "https://github.com/jozefg/wiki-summary.el"))])
- (wikinfo . [(20220906 1709) ((emacs (27 1))) "Scrape Wikipedia Infoboxes" single ((:commit . "bf395c9aaf6be7fda371be611005737d52417fec") (:authors ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainers ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainer "Nicholas Vollmer" . "progfolio@protonmail.com") (:keywords "org" "convenience") (:url . "https://github.com/progfolio/wikinfo"))])
- (wikinforg . [(20230317 2050) ((emacs (27 1)) (wikinfo (0 0 0)) (org (9 3))) "Org-mode wikinfo integration" single ((:commit . "fe16cbecc73a41110f2bad95c1f63a97a9da88ca") (:authors ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainers ("Nicholas Vollmer" . "progfolio@protonmail.com")) (:maintainer "Nicholas Vollmer" . "progfolio@protonmail.com") (:keywords "org" "convenience") (:url . "https://github.com/progfolio/wikinforg"))])
- (wilt . [(20180220 854) ((emacs (24 3)) (dash (2 12 0)) (s (1 10 0))) "An extensions for calculating WILT in a buffer." single ((:commit . "04dbe37fa35d0b24c791421785d2c97a8cbfe2cc") (:authors ("Austin Bingham" . "austin@sixty-north.com")) (:maintainers ("Austin Bingham" . "austin@sixty-north.com")) (:maintainer "Austin Bingham" . "austin@sixty-north.com") (:url . "https://github.com/sixty-north/emacs-wilt"))])
- (win-switch . [(20161009 1627) nil "fast, dynamic bindings for window-switching/resizing" single ((:commit . "954eb5e4c5737f0c06368c42a7f1c3dd374d782f") (:authors ("Christopher Genovese" . "genovese@cmu.edu")) (:maintainers ("Christopher R. Genovese" . "genovese@cmu.edu")) (:maintainer "Christopher R. Genovese" . "genovese@cmu.edu") (:keywords "window" "switch" "key bindings" "ergonomic" "efficient") (:url . "http://www.stat.cmu.edu/~genovese/emacs/win-switch/"))])
- (windata . [(20090830 1040) nil "convert window configuration to list" single ((:commit . "a723fc446ceaec23d5f29ecc8245d94c99d91625") (:authors (nil . "wenbinye@gmail.com")) (:maintainers (nil . "wenbinye@gmail.com")) (:maintainer nil . "wenbinye@gmail.com") (:keywords "convenience" "frames"))])
- (window-end-visible . [(20140508 2041) nil "Find the last visible point in a window" single ((:commit . "f0ed55aa5f7875634fb4c8b6fbaa93633bc57d85") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainers ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:keywords "extensions") (:url . "http://github.com/rolandwalker/window-end-visible"))])
- (window-jump . [(20170809 2208) nil "Move left/right/up/down through your windows." single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:authors ("Steven Thomas")) (:maintainers ("Steven Thomas")) (:maintainer "Steven Thomas") (:keywords "frames" "convenience") (:url . "https://github.com/chumpage/chumpy-windows"))])
- (window-layout . [(20170215 33) nil "window layout manager" single ((:commit . "cd2e4f967b610c2bbef53182829e47250d027056") (:authors ("SAKURAI Masashi <m.sakurai atmark kiwanami.net>")) (:maintainers ("SAKURAI Masashi <m.sakurai atmark kiwanami.net>")) (:maintainer "SAKURAI Masashi <m.sakurai atmark kiwanami.net>") (:keywords "window" "layout"))])
- (window-number . [(20170801 151) nil "Select windows by numbers." single ((:commit . "d41722de646ffeb3f70d26e4a86a5a1ba5c6be87") (:authors ("Johann \"Myrkraverk\" Oskarsson" . "myrkraverk@users.sourceforge.net")) (:maintainers ("Nik Nyby" . "niknyby@riseup.net")) (:maintainer "Nik Nyby" . "niknyby@riseup.net") (:keywords "windows") (:url . "https://github.com/nikolas/window-number"))])
- (window-numbering . [(20160809 1810) nil "Numbered window shortcuts" single ((:commit . "10809b3993a97c7b544240bf5d7ce9b1110a1b89") (:authors ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainers ("Nikolaj Schumacher <bugs * nschum de>")) (:maintainer "Nikolaj Schumacher <bugs * nschum de>") (:keywords "faces" "matching") (:url . "http://nschum.de/src/emacs/window-numbering-mode/"))])
- (window-purpose . [(20210628 715) ((emacs (24 4)) (let-alist (1 0 3)) (imenu-list (0 1))) "Purpose-based window management for Emacs" tar ((:commit . "bb462f12f836414425edac32ebd069b4fd5b98d4") (:authors ("Bar Magal")) (:maintainers ("Bar Magal")) (:maintainer "Bar Magal") (:keywords "frames") (:url . "https://github.com/bmag/emacs-purpose"))])
- (winds . [(20201121 123) ((emacs (25 1))) "Window configuration switcher grouped by workspaces" single ((:commit . "5827e890059d0ce67ebb4779da63c15afccf0973") (:authors ("Javier A. Pollak" . "javi.po.123@gmail.com")) (:maintainers ("Javier A. Pollak" . "javi.po.123@gmail.com")) (:maintainer "Javier A. Pollak" . "javi.po.123@gmail.com") (:keywords "convenience") (:url . "https://github.com/Javyre/winds.el"))])
- (windsize . [(20181029 2257) nil "Simple, intuitive window resizing" single ((:commit . "62c2846bbe95b0a73e996c75e4a644d05f57aaaa") (:authors ("Chris Perkins" . "chrisperkins99@gmail.com")) (:maintainers ("Chris Perkins" . "chrisperkins99@gmail.com")) (:maintainer "Chris Perkins" . "chrisperkins99@gmail.com") (:keywords "window" "resizing" "convenience") (:url . "http://github.com/grammati/windsize"))])
- (windswap . [(20200722 411) ((emacs (24 3))) "Like windmove, but swaps buffers while moving point" single ((:commit . "1a334f6543e0a30c55ea1e6071e9732d948f9e4b") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainers ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:keywords "frames" "convenience") (:url . "https://github.com/purcell/windswap"))])
- (windwow . [(20170816 148) ((dash (2 11 0)) (cl-lib (0 6 1)) (emacs (24))) "simple workspace management" single ((:commit . "77bad26f651744b68d31b389389147014d250f23") (:authors ("Viju Mathew" . "viju.jm@gmail.com")) (:maintainers ("Viju Mathew" . "viju.jm@gmail.com")) (:maintainer "Viju Mathew" . "viju.jm@gmail.com") (:keywords "frames") (:url . "github.com/vijumathew/windwow"))])
- (winnow . [(20210105 1919) ((emacs (24))) "winnow ag/grep results by matching/excluding lines" single ((:commit . "c3beff15688481162d14ae8600f59a366bb4c829") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainers ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:keywords "matching") (:url . "https://github.com/dgtized/winnow.el"))])
- (winpoint . [(20131023 1713) nil "Remember buffer positions per-window, not per buffer" single ((:commit . "b32ab55f7b8797b9b042a8a89d89d6f79bc356a9") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainers ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:keywords "convenience") (:url . "https://github.com/jorgenschaefer/winpoint"))])
- (winring . [(20180530 18) nil "Window configuration rings" single ((:commit . "f2d072bd446b73e93b127523f19ea82b99b9267f") (:authors ("1997-2018 Barry A. Warsaw")) (:maintainers ("1997-2018 Barry A. Warsaw")) (:maintainer "1997-2018 Barry A. Warsaw") (:keywords "frames" "tools") (:url . "https://gitlab.com/warsaw/winring"))])
- (winum . [(20190911 1607) ((cl-lib (0 5)) (dash (2 13 0))) "Navigate windows and frames using numbers." single ((:commit . "098249c65042ee0308b8236d1ee838c8da8fdf25") (:authors ("Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com")) (:maintainers ("Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com")) (:maintainer "Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com") (:keywords "convenience" "frames" "windows" "multi-screen") (:url . "http://github.com/deb0ch/winum.el"))])
- (wisp-mode . [(20220529 1522) ((emacs (24 4))) "Tools for wisp: the Whitespace-to-Lisp preprocessor" single ((:commit . "1a01003d400db8a42838cabcb26c06d627246a17") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainers ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de") (:keywords "languages" "lisp" "scheme") (:url . "http://www.draketo.de/english/wisp"))])
- (wispjs-mode . [(20170720 1919) ((clojure-mode (0))) "Major mode for Wisp code." single ((:commit . "60f9f5fd9d1556e2d008939f67eb1b1d0f325fa8") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainers ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:url . "https://github.com/krisajenkins/wispjs-mode"))])
- (with-editor . [(20230212 2214) ((emacs (25 1)) (compat (29 1 3 4))) "Use the Emacsclient as $EDITOR" tar ((:commit . "59867aebe16454be4d8c0c858f3b00b8a34f3f61") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainers ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:keywords "processes" "terminals") (:url . "https://github.com/magit/with-editor"))])
- (with-emacs . [(20220814 444) ((emacs (24 4))) "Evaluate Emacs Lisp expressions in a separate Emacs process" single ((:commit . "fb9ef454a4bb2d6de3415807b4858a20a9cc0dad") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:keywords "tools") (:url . "https://github.com/twlz0ne/with-emacs.el"))])
- (with-namespace . [(20130407 1822) ((dash (1 1 0)) (loop (1 1))) "interoperable elisp namespaces" single ((:commit . "36828a40428c8e53c117f2df830b2f7a59ddd306") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainers ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:keywords "namespaces"))])
- (with-proxy . [(20200510 414) ((emacs (24 4))) "Evaluate expressions with proxy" single ((:commit . "93b1ed2f3060f305009fa71f4fb5bb10173a10e3") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainers ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:keywords "comm") (:url . "https://github.com/twlz0ne/with-proxy.el"))])
- (with-shell-interpreter . [(20200828 1217) ((emacs (25 1)) (cl-lib (0 6 1))) "Helper for shell command APIs" single ((:commit . "45b7d6ad63165c82a95966b291abbfe305d3ada2") (:keywords "processes" "terminals") (:url . "https://github.com/p3r7/with-shell-interpreter"))])
- (with-simulated-input . [(20210527 2337) ((emacs (24 4))) "A macro to simulate user input non-interactively" single ((:commit . "ee4d2b75fd99bac3de40675b0a0e03529718f59f") (:authors ("Ryan C. Thompson" . "rct@thompsonclan.org") ("Nikita Bloshchanevich" . "nikblos@outlook.com")) (:maintainers ("Ryan C Thompson" . "rct@thompsonclan.org")) (:maintainer "Ryan C Thompson" . "rct@thompsonclan.org") (:keywords "lisp" "tools" "extensions") (:url . "https://github.com/DarwinAwardWinner/with-simulated-input"))])
- (with-venv . [(20210925 2336) ((cl-lib (0 5)) (emacs (24 4))) "Execute with Python virtual environment activated" single ((:commit . "773192d892ec0341e023d8b5e80639f8eb79f2a5") (:authors ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainers ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainer "10sr <8.slashes [at] gmail [dot] com>") (:keywords "processes" "python" "venv") (:url . "https://github.com/10sr/with-venv-el"))])
- (wn-mode . [(20151110 552) ((emacs (24))) "numeric window switching shortcuts" single ((:commit . "f05c3151523e529af5a0a3fa8c948b61fb369f6e") (:authors ("Anonymous")) (:maintainers ("Luís Oliveira" . "luismbo@gmail.com")) (:maintainer "Luís Oliveira" . "luismbo@gmail.com") (:keywords "buffers" "windows" "switching-windows") (:url . "https://github.com/luismbo/wn-mode"))])
- (wolfram . [(20221111 816) nil "Wolfram Alpha Integration" single ((:commit . "e3e8bbc70adf544022dfbd3e95b8904d70e71471") (:authors ("Hans Sjunnesson" . "hans.sjunnesson@gmail.com")) (:maintainers ("Hans Sjunnesson" . "hans.sjunnesson@gmail.com")) (:maintainer "Hans Sjunnesson" . "hans.sjunnesson@gmail.com") (:keywords "math"))])
- (wolfram-mode . [(20180307 13) ((emacs (24 3))) "Mathematica editing and inferior mode." single ((:commit . "be680190cac6ccf579dbce107deaae495928d1b3") (:authors ("Daichi Mochihashi <daichi at cslab.kecl.ntt.co.jp>")) (:maintainers ("Daichi Mochihashi <daichi at cslab.kecl.ntt.co.jp>")) (:maintainer "Daichi Mochihashi <daichi at cslab.kecl.ntt.co.jp>") (:keywords "languages" "processes" "tools") (:url . "https://github.com/kawabata/wolfram-mode/"))])
- (wonderland . [(20130913 119) ((dash (2 0 0)) (dash-functional (1 0 0)) (multi (2 0 0)) (emacs (24))) "declarative configuration for Emacsen" single ((:commit . "28cf6b37000c395ece9519db53147fb826a42bc4") (:authors ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainers ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainer "Christina Whyte" . "kurisu.whyte@gmail.com") (:keywords "configuration" "profile" "wonderland") (:url . "http://github.com/kurisuwhyte/emacs-wonderland"))])
- (wordel . [(20230109 1407) ((emacs (27 1))) "An Elisp implementation of \"Wordle\" (aka \"Lingo\")" tar ((:commit . "77999d75c5eae29e22b8e3f8859b62c6e30aa65f") (:authors ("Nicholas Vollmer" . "iarchivedmywholelife@gmail.com")) (:maintainers ("Nicholas Vollmer" . "iarchivedmywholelife@gmail.com")) (:maintainer "Nicholas Vollmer" . "iarchivedmywholelife@gmail.com") (:keywords "games") (:url . "https://github.com/progfolio/wordel"))])
- (wordgen . [(20170803 1820) ((emacs (24)) (cl-lib (0 5))) "Random word generator" single ((:commit . "aacad928ae99a953e034a831dfd0ebdf7d52ac1d") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainers ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/wordgen.el"))])
- (wordnut . [(20180313 443) ((emacs (24 4))) "Major mode interface to WordNet" tar ((:commit . "feac531404041855312c1a046bde7ea18c674915"))])
- (wordreference . [(20230502 1531) ((emacs (28 1))) "Interface for wordreference.com" single ((:commit . "54fb1cd7bd20f07f641335bc71ba5811652e8773") (:authors ("Marty Hiatt <martianhiatus AT riseup.net>")) (:maintainers ("Marty Hiatt <martianhiatus AT riseup.net>")) (:maintainer "Marty Hiatt <martianhiatus AT riseup.net>") (:keywords "convenience" "translate" "wp" "dictionary") (:url . "https://codeberg.org/martianh/wordreference.el"))])
- (wordsmith-mode . [(20210715 1517) nil "Syntax analysis and NLP text-processing in Emacs (OSX-only)" single ((:commit . "5d40ceaa2b8d41ab3634ca377ceb6a74deeb2287") (:authors ("istib" . "istib@thebati.net")) (:maintainers ("istib" . "istib@thebati.net")) (:maintainer "istib" . "istib@thebati.net"))])
- (worf . [(20220102 835) ((swiper (0 11 0)) (ace-link (0 1 0)) (hydra (0 13 0)) (zoutline (0 1 0))) "A warrior does not press so many keys! (in org-mode)" tar ((:commit . "8681241e118585824cd256e5b026978bf06c7e58") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "lisp") (:url . "https://github.com/abo-abo/worf"))])
- (workgroups . [(20110726 1641) nil "workgroups for windows (for Emacs)" single ((:commit . "9572b3492ee09054dc329f64ed846c962b395e39") (:authors ("tlh" . "thunkout@gmail.com")) (:maintainers ("tlh" . "thunkout@gmail.com")) (:maintainer "tlh" . "thunkout@gmail.com") (:keywords "session" "management" "window-configuration" "persistence"))])
- (workgroups2 . [(20230328 1331) ((emacs (25 1))) "save&load multiple named workspaces (or \"workgroups\")" tar ((:commit . "aff9d76b7be5eed33f30be2fabf111818749cbd5") (:authors ("Sergey Pashinin <sergey at pashinin dot com>")) (:maintainers ("Sergey Pashinin <sergey at pashinin dot com>")) (:maintainer "Sergey Pashinin <sergey at pashinin dot com>") (:keywords "session" "management" "window-configuration" "persistence") (:url . "https://github.com/pashinin/workgroups2"))])
- (workroom . [(20230123 1630) ((emacs (25 1)) (project (0 3 0)) (compat (28 1 2 2))) "Named rooms for work without irrelevant distracting buffers" tar ((:commit . "360420501a239f74bff60941d28052fc19a92bce") (:authors ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainers ("Akib Azmain Turja" . "akib@disroot.org")) (:maintainer "Akib Azmain Turja" . "akib@disroot.org") (:keywords "tools" "convenience") (:url . "https://codeberg.org/akib/emacs-workroom"))])
- (world-time-mode . [(20140627 807) nil "show whole days of world-time diffs" single ((:commit . "ce7a3b45c87eb24cfe61eee453175d64f741d7cc") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainers ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:keywords "tools" "calendar"))])
- (wotd . [(20170328 1948) ((emacs (24 4)) (org (8 2 10))) "Fetch word-of-the-day from multiple online sources" single ((:commit . "d2937a3d91e014f8028a1f33d21c18cc0b065a64") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainers ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:keywords "extensions"))])
- (wrap-region . [(20140117 720) ((dash (1 0 3))) "Wrap text with punctation or tag" single ((:commit . "5a910ad23ebb0649e644bf62ad042587341da5da") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainers ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:keywords "speed" "convenience") (:url . "http://github.com/rejeep/wrap-region"))])
- (wren-mode . [(20221227 227) ((emacs (24 3))) "A major mode for the Wren programming language" single ((:commit . "70b1b89f565679a15c8c9c1a9bda98b0d163e83e") (:authors ("XXIV")) (:maintainers ("XXIV")) (:maintainer "XXIV") (:keywords "files" "wren") (:url . "https://github.com/thechampagne/wren-mode"))])
- (writefreely . [(20221221 1456) ((emacs (24 3)) (org (9 0)) (ox-gfm (0 0)) (request (0 3))) "Push your Org files as markdown to a writefreely instance" single ((:commit . "db70444eb5fbe0820754574d70b1ae44967607dc") (:authors ("Daniel Gomez <d.gomez at posteo dot org>")) (:maintainers ("Daniel Gomez <d.gomez at posteo dot org>")) (:maintainer "Daniel Gomez <d.gomez at posteo dot org>") (:keywords "convenience") (:url . "https://github.com/dangom/writefreely.el"))])
- (writegood-mode . [(20220511 2109) nil "Polish up poor writing on the fly" single ((:commit . "d54eadeedb8bf3aa0e0a584c0a7373c69644f4b8") (:authors ("Benjamin Beckwith")) (:maintainers ("Benjamin Beckwith")) (:maintainer "Benjamin Beckwith") (:keywords "writing" "weasel-words" "grammar") (:url . "http://github.com/bnbeckwith/writegood-mode"))])
- (writeroom-mode . [(20220426 2046) ((emacs (25 1)) (visual-fill-column (2 2))) "Minor mode for distraction-free writing" tar ((:commit . "a736205c194d7525feb1e1f10f4186c7b2b62bef") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainers ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:keywords "text") (:url . "https://github.com/joostkremers/writeroom-mode"))])
- (ws-butler . [(20201117 1528) nil "Unobtrusively remove trailing whitespace." single ((:commit . "e3a38d93e01014cd47bf5af4924459bd145fd7c4") (:authors ("Le Wang")) (:maintainers ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/ws-butler"))])
- (wsd-mode . [(20191031 1211) nil "Emacs major-mode for www.websequencediagrams.com" tar ((:commit . "44aac55afb57cb540559aa1015f9ad2d770dd5c8") (:authors ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainers ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com") (:keywords "wsd" "diagrams" "design" "process" "modelling" "uml") (:url . "https://github.com/josteink/wsd-mode"))])
- (wttrin . [(20170614 1206) ((emacs (24 4)) (xterm-color (1 0))) "Emacs frontend for weather web service wttr.in" single ((:commit . "df5427ce2a5ad4dab652dbb1c4a1834d7ddc2abc") (:authors ("Carl X. Su" . "bcbcarl@gmail.com") ("ono hiroko (kuanyui)" . "azazabc123@gmail.com")) (:maintainers ("Carl X. Su" . "bcbcarl@gmail.com")) (:maintainer "Carl X. Su" . "bcbcarl@gmail.com") (:keywords "comm" "weather" "wttrin") (:url . "https://github.com/bcbcarl/emacs-wttrin"))])
- (wucuo . [(20220728 1358) ((emacs (25 1))) "Fastest solution to spell check camel case code or plain text" tar ((:commit . "a7fe5428c88522a121c22b5811cb499a16fd8fa8") (:authors ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainers ("Chen Bin <chenbin DOT sh AT gmail DOT com>")) (:maintainer "Chen Bin <chenbin DOT sh AT gmail DOT com>") (:keywords "convenience") (:url . "http://github.com/redguardtoo/wucuo"))])
- (wwg . [(20210614 1527) ((emacs (25 1))) "Writer word goals" single ((:commit . "46c8a7c71275ced2c662c1222d4b85319f80dd83") (:authors (nil . "Andrea andrea-dev@hotmail.com>")) (:maintainers (nil . "Andrea andrea-dev@hotmail.com>")) (:maintainer nil . "Andrea andrea-dev@hotmail.com>") (:keywords "wp") (:url . "https://github.com/ag91/writer-word-goals"))])
- (wwtime . [(20151122 1610) nil "Insert a time of day with appropriate world-wide localization" single ((:commit . "d04d8fa814b5d3644efaeb28f25520ada69acbbd") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com") (:keywords "time"))])
- (www-synonyms . [(20170128 2251) ((request (0 2 0)) (cl-lib (0 5))) "insert synonym for a word" single ((:commit . "7e37ea35064ff31c9945f0198a653647d408c936") (:authors ("Bernhard Specht" . "bernhard@specht.net")) (:maintainers ("Bernhard Specht" . "bernhard@specht.net")) (:maintainer "Bernhard Specht" . "bernhard@specht.net") (:keywords "lisp"))])
- (x-path-walker . [(20220714 1056) ((helm-core (3 6 0))) "Navigation feature for JSON/XML/HTML based on path (imenu like)" tar ((:commit . "c91deaaba0d5cc9018008a39c96222deacba3868") (:authors (nil . "<lompik@ArchOrion>")) (:maintainers (nil . "<lompik@ArchOrion>")) (:maintainer nil . "<lompik@ArchOrion>") (:keywords "convenience"))])
- (x509-mode . [(20230430 1518) ((emacs (25 1))) "View certificates, CRLs and keys using OpenSSL" tar ((:commit . "3830cbfdadab4cd68e6f0b6a3a7a4931be8328ea") (:authors ("Fredrik Axelsson" . "f.axelsson@gmail.com")) (:maintainers ("Fredrik Axelsson" . "f.axelsson@gmail.com")) (:maintainer "Fredrik Axelsson" . "f.axelsson@gmail.com") (:url . "https://github.com/jobbflykt/x509-mode"))])
- (x86-lookup . [(20210412 2022) ((emacs (24 3)) (cl-lib (0 3))) "jump to x86 instruction documentation" single ((:commit . "1573d61cc4457737b94624598a891c837fb52c16") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainers ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/x86-lookup"))])
- (xbm-life . [(20210508 1640) ((emacs (24 1))) "A XBM version of Conway's Game of Life" single ((:commit . "ec6abb0182068294a379cb49ad5346b1d757457d") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "games") (:url . "https://depp.brause.cc/xbm-life"))])
- (xcode-mode . [(20160907 1208) ((emacs (24 4)) (s (1 10 0)) (dash (2 11 0)) (multiple-cursors (1 0 0))) "A minor mode for emacs to perform Xcode like actions." single ((:commit . "5b5f0a4f505d44840a4924b24e3ef73b8528d98b") (:authors ("Nickolas Lanasa" . "nick@nytekproductions.com")) (:maintainers ("Nickolas Lanasa" . "nick@nytekproductions.com")) (:maintainer "Nickolas Lanasa" . "nick@nytekproductions.com") (:keywords "conveniences"))])
- (xcode-project . [(20200810 2010) ((emacs (25))) "A package for reading Xcode project files." tar ((:commit . "90aef198df5b51dfdb9ad205aa5b412c471fd418") (:authors ("John Buckley" . "john@olivetoast.com")) (:maintainers ("John Buckley" . "john@olivetoast.com")) (:maintainer "John Buckley" . "john@olivetoast.com") (:keywords "languages" "tools") (:url . "https://github.com/nhojb/xcode-project.git"))])
- (xcscope . [(20210719 828) nil "cscope interface for (X)Emacs" single ((:commit . "d228d7593d762e457340f678d14b663ef66d7cee") (:authors ("Darryl Okahata" . "darrylo@sonic.net") ("Dima Kogan" . "dima@secretsauce.net")) (:maintainers ("Dima Kogan" . "dima@secretsauce.net")) (:maintainer "Dima Kogan" . "dima@secretsauce.net") (:keywords "languages" "c") (:url . "https://github.com/dkogan/xcscope.el"))])
- (xenops . [(20220821 1111) ((emacs (26 1)) (aio (1 0)) (auctex (12 2 0)) (avy (0 5 0)) (dash (2 18 0)) (f (0 20 0)) (s (1 12 0))) "A LaTeX editing environment for mathematical documents" tar ((:commit . "4d75c1cd5ee7afba62af3a39a1f43432b295c29c") (:authors ("Dan Davison" . "dandavison7@gmail.com")) (:maintainers ("Dan Davison" . "dandavison7@gmail.com")) (:maintainer "Dan Davison" . "dandavison7@gmail.com") (:url . "https://github.com/dandavison/xenops"))])
- (xhair . [(20210801 222) ((emacs (24 3)) (vline (1 0))) "Highlight the current line and column" single ((:commit . "c7bd7c501c3545aa99dadac386c882fe7c5edd9c") (:keywords "convenience" "faces" "maint") (:url . "https://github.com/Boruch-Baum/emacs-xhair"))])
- (xit-mode . [(20221006 717) ((emacs (24 1))) "A [x]it! major mode" single ((:commit . "f9f8f07c54090f03107180b125c54e329493a1a7") (:keywords "xit" "todo" "tools" "convinience" "project") (:url . "https://github.com/ryanolsonx/xit-mode"))])
- (xkcd . [(20220503 1109) ((json (1 3))) "View xkcd from Emacs" single ((:commit . "80011da2e7def8f65233d4e0d790ca60d287081d") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainers ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:keywords "xkcd" "webcomic") (:url . "https://github.com/vibhavp/emacs-xkcd"))])
- (xmind-org . [(20220907 1310) ((emacs (27 1)) (org-ml (5 3)) (dash (2 12))) "Import XMind mindmaps into Org" single ((:commit . "79f0b1d95af2a1b8436cee2d3d6c6115d9c6483d") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainers ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:keywords "outlines" "wp" "files") (:url . "https://github.com/akirak/xmind-org-el"))])
- (xml+ . [(20170727 2351) ((emacs (24 4)) (dash (2 12 0))) "Utilities for xml and html trees" single ((:commit . "232fa863c08fc159b21dd58c39ea45dce3334895") (:authors ("Ben Dean" . "bendean837@gmail.com")) (:maintainers ("Ben Dean" . "bendean837@gmail.com")) (:maintainer "Ben Dean" . "bendean837@gmail.com") (:keywords "xml" "html") (:url . "https://github.com/bddean/xml-plus"))])
- (xml-format . [(20191011 1159) ((emacs (25)) (reformatter (0 4))) "XML reformatter using xmllint" single ((:commit . "2861c4e33e18b077112efa072316b031bca4236c") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainers ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:keywords "languages") (:url . "https://github.com/wbolster/emacs-xml-format"))])
- (xml-quotes . [(20200301 1222) nil "read quotations from an XML document" tar ((:commit . "8fc21e43b45f9a50b24642412f05afcc3a316a1f") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com") (:keywords "xml" "quotations") (:url . "https://github.com/ndw/xml-quotes"))])
- (xml-rpc . [(20221228 2346) ((emacs (24 1))) "An elisp implementation of clientside XML-RPC" single ((:commit . "8272789df8a4deab4de7d50e63b73b7d0543bc7f") (:maintainers ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org") (:keywords "xml" "rpc" "network" "comm") (:url . "http://github.com/xml-rpc-el/xml-rpc-el"))])
- (xmlgen . [(20170411 1317) nil "A DSL for generating XML." single ((:commit . "dba66681f0c5e621a9e70e8afb34903c9ffe93c4") (:authors ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainers ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Philip Jackson" . "phil@shellarchive.co.uk"))])
- (xmlunicode . [(20210829 1631) nil "Unicode support for XML" tar ((:commit . "6e91a39114ae6ec98b26c9670db916a02c721b1f") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainers ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com") (:keywords "utf-8" "unicode" "xml" "characters"))])
- (xo . [(20160403 646) nil "XO linter integration with compilation mode" single ((:commit . "72fcd867cfa332fdb82f732925cf8977e690af78") (:authors ("J.A" . "jer.github@gmail.com")) (:maintainers ("J.A" . "jer.github@gmail.com")) (:maintainer "J.A" . "jer.github@gmail.com") (:keywords "processes"))])
- (xonsh-mode . [(20201020 52) ((emacs (24 3))) "Major mode for editing xonshrc files" single ((:commit . "7fa581524533a9b6b770426e4445e571a69e469d") (:authors ("Sean Farley" . "sean@farley.io")) (:maintainers ("Sean Farley" . "sean@farley.io")) (:maintainer "Sean Farley" . "sean@farley.io") (:keywords "languages") (:url . "https://github.com/seanfarley/xonsh-mode"))])
- (xquery-mode . [(20170214 1119) ((cl-lib (0 5))) "A simple mode for editing xquery programs" single ((:commit . "19e6f9553ce05380843582b879712de00679e4ab") (:url . "https://github.com/xquery-mode/xquery-mode"))])
- (xquery-tool . [(20200907 811) nil "A simple interface to saxonb's xquery." single ((:commit . "bd48e0f56b58e36309f7966dcf67db69d65100a4") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainers ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org") (:keywords "xml" "xquery" "emacs") (:url . "https://github.com/paddymcall/xquery-tool.el"))])
- (xref-js2 . [(20210310 1238) ((emacs (25 1)) (js2-mode (20150909))) "Jump to references/definitions using ag & js2-mode's AST" single ((:commit . "fd6b723e7f1f9793d189a815e1904364dc026b03") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:keywords "javascript" "convenience" "tools") (:url . "https://github.com/NicolasPetton/xref-js2"))])
- (xref-rst . [(20230116 1300) ((emacs (28 1))) "Lookup reStructuredText symbols" single ((:commit . "0cc7fadd4698bd5b51ce2a52fcb4de41c7f030f2") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainers ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://codeberg.org/ideasman42/emacs-xref-rst"))])
- (xresources-theme . [(20221208 2015) nil "Use your .Xresources as your emacs theme" single ((:commit . "76532fc4330e9e31accc580708514b83b15d70a7") (:authors ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainers ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainer "Marten Lienen" . "marten.lienen@gmail.com") (:keywords "xresources" "theme"))])
- (xterm-color . [(20230321 3) ((emacs (24 4))) "ANSI, XTERM 256 and Truecolor support" single ((:commit . "2ad407c651e90fff2ea85d17bf074cee2c022912") (:authors ("xristos" . "xristos@sdf.org")) (:maintainers ("xristos" . "xristos@sdf.org")) (:maintainer "xristos" . "xristos@sdf.org") (:keywords "faces") (:url . "https://github.com/atomontage/xterm-color"))])
- (xterm-keybinder . [(20160523 56) ((emacs (24 3)) (cl-lib (0 5)) (let-alist (1 0 1))) "Let you extra keybinds in xterm/urxvt" tar ((:commit . "b29c4f700b0fa0c9f627f6725b36462b8fab06d6") (:authors ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainers ("Yuta Yamada <cokesboy\"at\"gmail.com>")) (:maintainer "Yuta Yamada <cokesboy\"at\"gmail.com>") (:keywords "convenient"))])
- (xtest . [(20141214 1706) ((cl-lib (0 5))) "Simple Testing with Emacs & ERT" single ((:commit . "8099be9c2d856f98489834ddb20a01c6fd8922f1") (:authors ("Mustafa Shameem")) (:maintainers ("Mustafa Shameem")) (:maintainer "Mustafa Shameem") (:keywords "testing" "ert") (:url . "https://github.com/promethial/xtest"))])
- (xwidgete . [(20171118 2116) ((emacs (25))) "enhances usability of current xwidget browser" single ((:commit . "e4e8410fe32176df85b46234717824519443fb04") (:authors ("Tu, Do Hoang" . "tuhdo1710@gmail.com")) (:maintainers ("Tu, Do Hoang")) (:maintainer "Tu, Do Hoang") (:keywords "xwidgete" "tools") (:url . "https://github.com/tuhdo/xwidgete"))])
- (xwidgets-reuse . [(20200817 147) ((emacs (26 1))) "Reuse xwidgets sessions to reduce resource consumption" single ((:commit . "3f95d81bfce1b3c52f9dcf2890cd2559a5287a33") (:authors ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainers ("Boris Glavic" . "lordpretzel@gmail.com")) (:maintainer "Boris Glavic" . "lordpretzel@gmail.com") (:keywords "hypermedia") (:url . "https://github.com/lordpretzel/xwidgets-reuse"))])
- (xwiki-mode . [(20211112 511) ((emacs (27 1))) "Major mode for xwiki-formatted text" single ((:commit . "8b6f2caead8ec804e8d7d37d87eb3b46aa96b6e8") (:authors ("Ackerley Tng" . "ackerleytng@gmail.com")) (:maintainers ("Ackerley Tng" . "ackerleytng@gmail.com")) (:maintainer "Ackerley Tng" . "ackerleytng@gmail.com") (:keywords "languages" "convenience" "tools") (:url . "https://github.com/ackerleytng/xwiki-mode"))])
- (xwwp . [(20200917 643) ((emacs (26 1))) "Enhance xwidget webkit browser" tar ((:commit . "f67e070a6e1b233e60274deb717274b000923231") (:authors ("Damien Merenne")) (:maintainers ("Damien Merenne")) (:maintainer "Damien Merenne") (:keywords "convenience") (:url . "https://github.com/canatella/xwwp"))])
- (xwwp-follow-link-helm . [(20200917 642) ((emacs (26 1)) (xwwp (0 1))) "Link navigation in `xwidget-webkit' sessions using `helm'" single ((:commit . "99670ec37e2083eada9691a342441d2fa4589002") (:authors ("Damien Merenne")) (:maintainers ("Damien Merenne")) (:maintainer "Damien Merenne") (:keywords "convenience") (:url . "https://github.com/canatella/xwwp"))])
- (xwwp-follow-link-ivy . [(20200917 642) ((emacs (26 1)) (xwwp (0 1))) "Link navigation in `xwidget-webkit' sessions using `ivy'" single ((:commit . "1f1646feaf3328568da40200cc218337fbbabc1a") (:authors ("Damien Merenne")) (:maintainers ("Damien Merenne")) (:maintainer "Damien Merenne") (:keywords "convenience") (:url . "https://github.com/canatella/xwwp"))])
- (yabaki-theme . [(20230327 630) ((emacs (27 1))) "Yabaki, the cast shadow" single ((:commit . "5face6a1194b039e09fe19238aa5db05450d7df1") (:authors ("David Goudou" . "david.goudou@gmail.com")) (:maintainers ("David Goudou" . "david.goudou@gmail.com")) (:maintainer "David Goudou" . "david.goudou@gmail.com") (:url . "https://github.com/seamacs/yabaki-theme"))])
- (yabin . [(20140206 351) nil "Yet Another Bignum package (A thin wrapper of calc.el)." single ((:commit . "db8c404507560ef9147fcce2b94cd706fbfa03b5") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainers ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com") (:keywords "data"))])
- (yafolding . [(20200119 1353) nil "Folding code blocks based on indentation" single ((:commit . "4c1888ae45f9241516519ae0ae3a899f2efa05ba") (:authors ("Zeno Zeng" . "zenoofzeng@gmail.com")) (:maintainers ("Zeno Zeng" . "zenoofzeng@gmail.com")) (:maintainer "Zeno Zeng" . "zenoofzeng@gmail.com") (:keywords "folding"))])
- (yagist . [(20160418 508) ((cl-lib (0 3))) "Yet Another Emacs integration for gist.github.com" single ((:commit . "10da4baa272ff0f7052f17debecc340764c7003f") (:maintainers ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:keywords "tools") (:url . "https://github.com/mhayashi1120/yagist.el"))])
- (yahtzee . [(20220221 803) ((emacs (24 3))) "The yahtzee game" single ((:commit . "9b42ba4612d3043464414c08a3d60f6ad594566c") (:authors ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainers ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainer "Dimitar Dimitrov" . "mail.mitko@gmail.com") (:keywords "games") (:url . "https://github.com/drdv/yahtzee"))])
- (yalinum . [(20130217 1043) nil "yet another display line numbers." single ((:commit . "d3e0cbe3f4f5ca311e3298e684901d6fea3ad973") (:authors ("tm8st" . "tm8st@hotmail.co.jp")) (:maintainers ("tm8st" . "tm8st@hotmail.co.jp")) (:maintainer "tm8st" . "tm8st@hotmail.co.jp") (:keywords "convenience" "tools"))])
- (yaml . [(20230312 250) ((emacs (25 1))) "YAML parser for Elisp" single ((:commit . "a19fbf948a945571300e5a20ff1dbfa6ecfa0d16") (:authors ("Zachary Romero" . "zkry@posteo.org")) (:maintainers ("Zachary Romero" . "zkry@posteo.org")) (:maintainer "Zachary Romero" . "zkry@posteo.org") (:keywords "tools") (:url . "https://github.com/zkry/yaml.el"))])
- (yaml-imenu . [(20220406 1703) ((emacs (24 4)) (yaml-mode (0))) "Enhancement of the imenu support in yaml-mode." tar ((:commit . "c1fbba8b03a7bef4fc2b87404914fa9c6eb67b55") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainers ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:keywords "outlining" "convenience" "imenu") (:url . "https://github.com/knu/yaml-imenu.el"))])
- (yaml-mode . [(20230329 723) ((emacs (24 1))) "Major mode for editing YAML files" single ((:commit . "b153150e0e77b4ec462d741cdb16956c6ae270d6") (:authors ("Yoshiki Kurihara" . "clouder@gmail.com") ("Marshall T. Vandegrift" . "llasram@gmail.com")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "data" "yaml") (:url . "https://github.com/yoshiki/yaml-mode"))])
- (yaml-pro . [(20230315 320) ((emacs (26 1)) (yaml (0 5 1))) "Parser-aided YAML editing features" tar ((:commit . "50fc911b9015708b77872dc60c53f4a4740bef1b") (:authors ("Zachary Romero")) (:maintainers ("Zachary Romero")) (:maintainer "Zachary Romero") (:keywords "tools") (:url . "https://github.com/zkry/yaml-pro"))])
- (yaml-tomato . [(20151123 753) ((s (1 9))) "copy or show the yaml path currently under cursor." single ((:commit . "1272c502fac6ce6b0f8b7f8a9beb353f0b35e13c") (:authors ("qrczeno")) (:maintainers ("qrczeno")) (:maintainer "qrczeno") (:keywords "yaml"))])
- (yang-mode . [(20190507 724) nil "major mode for editing YANG files" single ((:commit . "4b4ab4d4a79d37d6c31c6ea7cccbc425e0b1eded") (:authors ("Martin Bjorklund" . "mbj4668@gmail.com")) (:maintainers ("Martin Bjorklund" . "mbj4668@gmail.com")) (:maintainer "Martin Bjorklund" . "mbj4668@gmail.com"))])
- (yankpad . [(20220201 2104) ((emacs (25 1))) "Paste snippets from an org-mode file" single ((:commit . "927e6d26956ac7219b8a69d641acf486854fba16") (:authors ("Erik Sjöstrand")) (:maintainers ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:keywords "abbrev" "convenience") (:url . "http://github.com/Kungsgeten/yankpad"))])
- (yapfify . [(20210914 634) nil "(automatically) format python buffers using YAPF." single ((:commit . "c9347e3b1dec5fc8d34883e206fcdc8500d22368") (:authors ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainers ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainer "Joris Engbers" . "info@jorisengbers.nl") (:url . "https://github.com/JorisE/yapfify"))])
- (yara-mode . [(20220317 935) ((emacs (24))) "Major mode for editing yara rule file" single ((:commit . "4c959b300ce52665c92e04e524dda5ed051c34f3") (:authors (nil . "binjo.cn@gmail.com")) (:maintainers (nil . "binjo.cn@gmail.com")) (:maintainer nil . "binjo.cn@gmail.com") (:keywords "yara") (:url . "not distributed yet"))])
- (yard-mode . [(20230505 1950) nil "Minor mode for Ruby YARD comments" single ((:commit . "de1701753a64544c3376b015805f3661136d8038") (:authors ("Kyle Hargraves")) (:maintainers ("Kyle Hargraves")) (:maintainer "Kyle Hargraves") (:url . "https://github.com/pd/yard-mode.el"))])
- (yari . [(20151128 739) nil "Yet Another RI interface for Emacs" single ((:commit . "a2cb9656ee5dfe1fc2ee3854f3079a1c8e85dbe9") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainers ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com") (:keywords "tools"))])
- (yarn-mode . [(20200208 2332) ((emacs (24 3))) "Major mode for yarn.lock files." single ((:commit . "8239d4dc7d8a52fa1e3fa81bd32c904a359fcfc1") (:authors ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainers ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainer "Nicolás Salas V." . "nikosalas@gmail.com") (:keywords "convenience") (:url . "https://github.com/anachronic/yarn-mode"))])
- (yascroll . [(20220212 1742) ((emacs (26 1))) "Yet Another Scroll Bar Mode" single ((:commit . "b4669a6604a3093d3960c494874a7affc6b9c184") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainers ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:keywords "convenience") (:url . "https://github.com/emacsorphanage/yascroll"))])
- (yasnippet . [(20200604 246) ((cl-lib (0 5))) "Yet another snippet extension for Emacs" single ((:commit . "5cbdbf0d2015540c59ed8ee0fcf4788effdf75b6") (:maintainers ("Noam Postavsky" . "npostavs@gmail.com")) (:maintainer "Noam Postavsky" . "npostavs@gmail.com") (:keywords "convenience" "emulation") (:url . "http://github.com/joaotavora/yasnippet"))])
- (yasnippet-lean . [(20220105 2251) ((yasnippet (0 8 0))) "Collection of snippets for the Lean prover" tar ((:commit . "c75485757cc8675ad4f36c1eb028d9d54dc21733") (:maintainers ("Simon Hudon" . "simon.hudon@gmail.com")) (:maintainer "Simon Hudon" . "simon.hudon@gmail.com") (:keywords "convenience" "snippets" "leanprover") (:url . "https://github.com/leanprover-community/yasnippet-lean"))])
- (yasnippet-snippets . [(20230314 2056) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" tar ((:commit . "8e4c521252501dd9ad71ea78fae14683ab7a14cb") (:authors ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) (:maintainers ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) (:maintainer "Andrea Crotti" . "andrea.crotti.0@gmail.com") (:keywords "snippets") (:url . "https://github.com/AndreaCrotti/yasnippet-snippets"))])
- (yatemplate . [(20211115 1208) ((yasnippet (0 8 1)) (emacs (24 3))) "File templates with yasnippet" single ((:commit . "275745ce1482edc08efb0b7807bc86d832bcc734") (:authors ("Wieland Hoffmann" . "themineo+yatemplate@gmail.com")) (:maintainers ("Wieland Hoffmann" . "themineo+yatemplate@gmail.com")) (:maintainer "Wieland Hoffmann" . "themineo+yatemplate@gmail.com") (:keywords "files" "convenience") (:url . "https://github.com/mineo/yatemplate"))])
- (yatex . [(20221225 512) nil "Yet Another tex-mode for emacs //野鳥//" tar ((:commit . "157aa7974191bbb4707d26b05ce830282ad70ef5"))])
- (yaxception . [(20150105 1540) nil "Provide framework about exception like Java for Elisp" single ((:commit . "4e94cf3e0b9b5631b0e90eb4b7de597ee7185875") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainers ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:keywords "exception" "error" "signal") (:url . "https://github.com/aki2o/yaxception"))])
- (ycm . [(20150822 1836) nil "Emacs client for the YouCompleteMe auto-completion server." single ((:commit . "4da8a14abcd0f4fa3235042ade2e12b5068c0601") (:authors ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainers ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainer "Ajay Gopinathan" . "ajay@gopinathan.net") (:keywords "c" "abbrev"))])
- (ycmd . [(20190416 807) ((emacs (24 4)) (dash (2 13 0)) (s (1 11 0)) (deferred (0 5 1)) (cl-lib (0 6 1)) (let-alist (1 0 5)) (request (0 3 0)) (request-deferred (0 3 0)) (pkg-info (0 6))) "emacs bindings to the ycmd completion server" tar ((:commit . "6f4f7384b82203cccf208e3ec09252eb079439f9") (:url . "https://github.com/abingham/emacs-ycmd"))])
- (ydk-mode . [(20170114 223) nil "Language support for Yu-Gi-Oh! deck files" single ((:commit . "f3f125b29408e0b0a34fec27dcb7c02c5dbfd04e") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainers ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com") (:keywords "faces" "games" "languages" "ydk" "yugioh" "yu-gi-oh") (:url . "https://github.com/jacksonrayhamilton/ydk-mode"))])
- (yequake . [(20200219 2323) ((emacs (25 2)) (dash (2 14 1))) "Drop-down frames, like Yakuake" single ((:commit . "d18166e597414350117d0b82a29e509fc53c636d") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainers ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:keywords "convenience" "window-system" "frames") (:url . "http://github.com/alphapapa/yequake"))])
- (yesql-ghosts . [(20150220 1237) ((s (1 9 0)) (dash (2 10 0)) (cider (0 8 0))) "Display ghostly yesql defqueries inline" single ((:commit . "416198cdc4f316b0912af5e413410937b9b8432b") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainers ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))])
- (yesterbox . [(20200327 52) ((emacs (24 3))) "Count number of inbox messages by day" single ((:commit . "7d890ab3f012b1a48a0e8e437f5fcaeba9825fdc") (:authors ("Stephen J. Eglen" . "sje30@cam.ac.uk")) (:maintainers ("Stephen J. Eglen" . "sje30@cam.ac.uk")) (:maintainer "Stephen J. Eglen" . "sje30@cam.ac.uk") (:keywords "mail") (:url . "http://github.com/sje30/yesterbox"))])
- (ynab . [(20200607 2008) ((emacs (26 3)) (cl-lib (0 5)) (ts (0 2))) "Major mode for YNAB (you need a budget)" single ((:commit . "2c6beb4d2c4996017f6b3c62c26db52a61e5c479") (:authors ("Jim Anders <https://github.com/janders223>")) (:maintainers ("Jim Anders" . "jimanders223@gmail.com")) (:maintainer "Jim Anders" . "jimanders223@gmail.com") (:keywords "ynab" "budget" "convenience") (:url . "https://github.com/janders223/ynab.el"))])
- (yoficator . [(20190509 1620) nil "Interactively yoficate Russian texts" tar ((:commit . "fa914f9648515bca54b5e558ca57d2b65fa57491") (:authors ("Eugene Minkovskii" . "emin@mccme.ru") ("Alexander Krotov" . "ilabdsf@gmail.com")) (:maintainers ("Eugene Minkovskii" . "emin@mccme.ru")) (:maintainer "Eugene Minkovskii" . "emin@mccme.ru") (:url . "https://gitlab.com/link2xt/yoficator"))])
- (yoshi-theme . [(20230225 740) nil "Theme named after my cat" single ((:commit . "ba9427329ac49fa2e060da2c16507feed62ad890") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainers ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:keywords "faces") (:url . "http://projects.ryuslash.org/yoshi-theme/"))])
- (youdao-dictionary . [(20200722 1705) ((popup (0 5 0)) (pos-tip (0 4 6)) (chinese-word-at-point (0 2)) (names (0 5)) (emacs (24))) "Youdao Dictionary interface for Emacs" single ((:commit . "8a4815a43565b9bfd257246e4895b8bfafb9d573") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainers ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:keywords "convenience" "chinese" "dictionary") (:url . "https://github.com/xuchunyang/youdao-dictionary.el"))])
- (youtube-sub-extractor . [(20221116 653) ((emacs (27 1))) "Extract YouTube video subtitles" single ((:commit . "d69f732299fdf256504e15767c1d7e5de771220e") (:authors ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainers ("Ag Ibragimov" . "agzam.ibragimov@gmail.com")) (:maintainer "Ag Ibragimov" . "agzam.ibragimov@gmail.com") (:keywords "convenience" "multimedia") (:url . "https://github.com/agzam/youtube-sub-extractor.el"))])
- (ytdious . [(20210228 2111) ((emacs (25 3))) "Query / Preview YouTube via Invidious" single ((:commit . "941460b51e43ef6764e15e2b9c4af54c3e56115f") (:authors ("Stefan Huchler") ("Gabriele Rastello")) (:maintainers ("Stefan Huchler")) (:maintainer "Stefan Huchler") (:keywords "youtube" "matching" "multimedia") (:url . "https://github.com/spiderbit/ytdious"))])
- (ytdl . [(20230331 1804) ((emacs (26 1)) (async (1 9 4)) (transient (0 2 0)) (dash (2 17 0))) "Emacs Interface for youtube-dl" single ((:commit . "2ea3daf2f6aa9d18b71fe3e15f05c30a56fca228") (:authors ("Arnaud Hoffmann" . "tuedachu@gmail.com")) (:maintainers ("Arnaud Hoffmann" . "tuedachu@gmail.com")) (:maintainer "Arnaud Hoffmann" . "tuedachu@gmail.com") (:keywords "comm" "multimedia") (:url . "https://gitlab.com/tuedachu/ytdl"))])
- (ytel . [(20200725 1056) ((emacs (25 3))) "Query YouTube via Invidious" single ((:commit . "d80c7964ec66589d5580fc13773e94f1834ab76f") (:authors ("Gabriele Rastello")) (:maintainers ("Gabriele Rastello")) (:maintainer "Gabriele Rastello") (:keywords "youtube" "matching" "multimedia") (:url . "https://github.com/grastello/ytel"))])
- (yuck-mode . [(20230113 2304) ((emacs (25 1))) "Major mode for the yuck configuration language" single ((:commit . "e084416fa3e7f91bb429edbf7ff1585aa5674367") (:authors ("mmcjimsey26")) (:maintainers ("mmcjimsey26")) (:maintainer "mmcjimsey26") (:keywords "languages" "yuck" "eww" "widgets") (:url . "https://github.com/mmcjimsey26/yuck-mode"))])
- (yul-mode . [(20220927 338) nil "Major mode for editing Ethereum Yul intermediate code" single ((:commit . "56cba05549873fcf1b66e304969011dc1a1ad228") (:authors ("Ta Quang Trung")) (:maintainers ("Ta Quang Trung")) (:maintainer "Ta Quang Trung") (:keywords "languages") (:url . "https://github.com/taquangtrung/emacs-yul-mode"))])
- (z3-mode . [(20211116 138) ((flycheck (0 23)) (emacs (24))) "A z3/SMTLIBv2 interactive development environment" single ((:commit . "0356cbe1e1e2b780ba0ddb4aaa055fa246a67931") (:authors ("Zephyr Pellerin" . "zephyr.pellerin@gmail.com")) (:maintainers ("Zephyr Pellerin" . "zephyr.pellerin@gmail.com")) (:maintainer "Zephyr Pellerin" . "zephyr.pellerin@gmail.com") (:keywords "z3" "yices" "mathsat" "smt" "beaver") (:url . "https://github.com/zv/z3-mode"))])
- (zeal-at-point . [(20180131 2354) nil "Search the word at point with Zeal" single ((:commit . "0fc3263f44e95acd3e9d91057677621ce4d297ee") (:authors ("Jinzhu" . "wosmvp@gmail.com")) (:maintainers ("Jinzhu" . "wosmvp@gmail.com")) (:maintainer "Jinzhu" . "wosmvp@gmail.com") (:url . "https://github.com/jinzhu/zeal-at-point"))])
- (zen-and-art-theme . [(20120622 1437) nil "zen and art color theme for GNU Emacs 24" single ((:commit . "a7226cbce0bca2501d69a620cb2aeabfc396c232") (:authors ("Nick Parker")) (:maintainers ("Nick Parker")) (:maintainer "Nick Parker"))])
- (zen-mode . [(20200609 822) ((emacs (24 3))) "A major mode for the Zen programming language" single ((:commit . "c1b1806358f3cce6c04b30699987d82dc7d42559") (:authors ("Andrea Orru <andreaorru1991@gmail.com>, Andrew Kelley <superjoe30@gmail.com>, kristopher tate <kt@connectfree.co.jp>, Yoshitaka Takemoto" . "yt.3b8@connectfree.co.jp")) (:maintainers ("Andrea Orru <andreaorru1991@gmail.com>, Andrew Kelley <superjoe30@gmail.com>, kristopher tate <kt@connectfree.co.jp>, Yoshitaka Takemoto" . "yt.3b8@connectfree.co.jp")) (:maintainer "Andrea Orru <andreaorru1991@gmail.com>, Andrew Kelley <superjoe30@gmail.com>, kristopher tate <kt@connectfree.co.jp>, Yoshitaka Takemoto" . "yt.3b8@connectfree.co.jp") (:keywords "zen" "languages") (:url . "https://github.com/zenlang/zen-mode"))])
- (zenburn-theme . [(20230315 1004) nil "A low contrast color theme for Emacs." single ((:commit . "8a1f9d28f503615e5d9b3eac59a2f3c14e75fc20") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainers ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "http://github.com/bbatsov/zenburn-emacs"))])
- (zencoding-mode . [(20140213 822) nil "Unfold CSS-selector-like expressions to markup" single ((:commit . "58e42af182c98cb9941d27cd042d227fbf4e146c") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainers ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:keywords "convenience") (:url . "https://github.com/rooney/zencoding"))])
- (zenity-color-picker . [(20160302 1154) ((emacs (24 4))) "Insert and adjust colors using Zenity" single ((:commit . "bdece51052ef7037e0a3481fc1f487939f57777e") (:authors ("Samuel Laurén" . "samuel.lauren@iki.fi")) (:maintainers ("Samuel Laurén" . "samuel.lauren@iki.fi")) (:maintainer "Samuel Laurén" . "samuel.lauren@iki.fi") (:keywords "colors") (:url . "https://bitbucket.org/Soft/zenity-color-picker.el"))])
- (zeno-theme . [(20211205 2148) ((emacs (24))) "A dark theme using different shades of blue" single ((:commit . "70fa7b7442f24ea25eab538b5a22da690745fef5") (:authors ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainers ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainer "Bharat Joshi" . "jbharat@outlook.com") (:keywords "faces" "theme" "dark" "blue") (:url . "https://github.com/jbharat/zeno-theme"))])
- (zenscript-mode . [(20210102 1350) ((emacs (25 1))) "Major mode for ZenScript" tar ((:commit . "c33b4525502459fe60dd76b383e19919d450aeb8") (:url . "https://github.com/eutropius225/zenscript-mode"))])
- (zephir-mode . [(20200417 830) ((cl-lib (0 5)) (pkg-info (0 4)) (emacs (25 1))) "Major mode for editing Zephir code" tar ((:commit . "4e9618b77dff67c1c7b6fff78605a62311db88b8") (:authors ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainers ("Serghei Iakovlev" . "egrep@protonmail.ch")) (:maintainer "Serghei Iakovlev" . "egrep@protonmail.ch") (:keywords "languages") (:url . "https://github.com/zephir-lang/zephir-mode"))])
- (zero-input . [(20200405 1220) ((emacs (24 3)) (s (1 2 0))) "Zero Chinese input method framework" single ((:commit . "729da9f4b99acb744ee6974ed7f3d4e252fd19da") (:url . "https://gitlab.emacsos.com/sylecn/zero-el"))])
- (zerodark-theme . [(20211115 841) ((all-the-icons (2 0 0))) "A dark, medium contrast theme for Emacs" single ((:commit . "b463528704f6eb00684c0ee003fbd8e42901cde0") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainers ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:keywords "themes") (:url . "https://github.com/NicolasPetton/zerodark-theme"))])
- (zetteldeft . [(20221006 731) ((emacs (25 1)) (deft (0 8)) (ace-window (0 7 0))) "Turn deft into a zettelkasten system" tar ((:commit . "63be6478751376f04d36c6ea52fe65acd69f0927") (:authors ("EFLS <Elias Storms>")) (:maintainers ("EFLS <Elias Storms>")) (:maintainer "EFLS <Elias Storms>") (:keywords "deft" "zettelkasten" "zetteldeft" "wp" "files") (:url . "https://efls.github.io/zetteldeft/"))])
- (zetteldesk . [(20220703 1648) ((emacs (27 1)) (org-roam (2 0))) "A revision and outlining tool for org-roam" single ((:commit . "b9367a738628dbb569ab878b65240a567eadaaf6") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com") (:url . "https://github.com/Vidianos-Giannitsis/zetteldesk.el"))])
- (zetteldesk-info . [(20220702 1527) ((zetteldesk (0 4)) (emacs (27 1))) "A zetteldesk extension for interacting with the info program" single ((:commit . "99c5434a809da0b783f31b10872c8cb2a2176e2d") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com") (:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-info.el"))])
- (zetteldesk-kb . [(20230410 1048) ((zetteldesk (1 0 1)) (hydra (0 15)) (major-mode-hydra (0 2)) (emacs (24 1))) "Keybindings for zetteldesk.el" single ((:commit . "1266b7ed67b6236087c5591b28823ddc34058d2f") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com") (:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-kb.el"))])
- (zetteldesk-ref . [(20230410 1048) ((zetteldesk (1 0)) (bibtex-completion (1 0)) (emacs (26 1))) "A zetteldesk extension for interfacing with literature nodes" single ((:commit . "1266b7ed67b6236087c5591b28823ddc34058d2f") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com") (:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-ref.el"))])
- (zetteldesk-remark . [(20220702 1527) ((zetteldesk (1 0)) (org-remark (1 0)) (emacs (27 2))) "Org-Remark integration for zetteldesk.el" single ((:commit . "99c5434a809da0b783f31b10872c8cb2a2176e2d") (:authors ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainers ("Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com")) (:maintainer "Vidianos Giannitsis" . "vidianosgiannitsis@gmail.com") (:url . "https://github.com/Vidianos-Giannitsis/zetteldesk-remark.el"))])
- (zettelkasten . [(20230108 1724) ((emacs (25 1)) (s (1 10 0))) "Helper functions to organise notes in a Zettelkasten style" single ((:commit . "cc4d69c302a46b8f802a1871aae091df1f3398ba") (:authors ("Yann Herklotz" . "yann@ymhg.org")) (:maintainers ("Yann Herklotz" . "yann@ymhg.org")) (:maintainer "Yann Herklotz" . "yann@ymhg.org") (:keywords "files" "hypermedia" "notes") (:url . "https://github.com/ymherklotz/emacs-zettelkasten"))])
- (zetz-mode . [(20200823 536) ((emacs (25 1)) (dash (2 17 0)) (hydra (0 15 0))) "A major mode for the ZetZ programming language" single ((:commit . "04da33f4ffa9db5b3556f423276f4fd1db13ec67") (:keywords "languages" "programming") (:url . "https://github.com/damon-kwok/zetz-mode"))])
- (zig-mode . [(20230307 1215) ((emacs (24 3)) (reformatter (0 6))) "A major mode for the Zig programming language" single ((:commit . "2013d39ee9a62449263939bc8c33a128fe1e90f0") (:authors ("Andrea Orru <andreaorru1991@gmail.com>, Andrew Kelley" . "superjoe30@gmail.com")) (:maintainers ("Andrea Orru <andreaorru1991@gmail.com>, Andrew Kelley" . "superjoe30@gmail.com")) (:maintainer "Andrea Orru <andreaorru1991@gmail.com>, Andrew Kelley" . "superjoe30@gmail.com") (:keywords "zig" "languages") (:url . "https://github.com/zig-lang/zig-mode"))])
- (zim-wiki-mode . [(20230211 1650) ((emacs (25 1)) (helm-ag (0 58)) (helm-projectile (0 14 0)) (dokuwiki-mode (0 1 1)) (link-hint (0 1)) (pretty-hydra (0 2 2))) "Zim Desktop Wiki edit mode" single ((:commit . "cf3d5a0dfb53d6cba8d7d35420ec18bf81b5bf2f") (:authors ("Will Foran" . "willforan+zim-wiki-mode@gmail.com")) (:maintainers ("Will Foran" . "willforan+zim-wiki-mode@gmail.com")) (:maintainer "Will Foran" . "willforan+zim-wiki-mode@gmail.com") (:keywords "outlines") (:url . "https://github.com/WillForan/zim-wiki-mode"))])
- (zimports . [(20211011 2059) ((emacs (26 1)) (projectile (2 1 0))) "Reformat python imports with zimports" single ((:commit . "76cf76bdc871cb0454a6fc555aeb1aa94f1b6e57") (:url . "https://github.com/schmir/zimports.el"))])
- (zk . [(20230505 1950) ((emacs (25 1))) "Functions for working with Zettelkasten-style linked notes" single ((:commit . "73139efd3a6e92de139adec864d26130ee5a942d") (:authors ("Grant Rosson <https://github.com/localauthor>")) (:maintainers ("Grant Rosson <https://github.com/localauthor>")) (:maintainer "Grant Rosson <https://github.com/localauthor>") (:url . "https://github.com/localauthor/zk"))])
- (zk-desktop . [(20230502 2202) ((emacs (27 1)) (zk (0 6)) (zk-index (0 9))) "Desktop environment for zk" single ((:commit . "6140c8bcfc52b35e6f74f6c8a21ed5660a589b8e") (:authors ("Grant Rosson <https://github.com/localauthor>")) (:maintainers ("Grant Rosson <https://github.com/localauthor>")) (:maintainer "Grant Rosson <https://github.com/localauthor>") (:url . "https://github.com/localauthor/zk"))])
- (zk-index . [(20230505 2118) ((emacs (27 1)) (zk (0 3))) "Index for zk" single ((:commit . "b9f5433486e79a23e82035be3e10d8f5678b2880") (:authors ("Grant Rosson <https://github.com/localauthor>")) (:maintainers ("Grant Rosson <https://github.com/localauthor>")) (:maintainer "Grant Rosson <https://github.com/localauthor>") (:url . "https://github.com/localauthor/zk"))])
- (zk-luhmann . [(20230505 2107) ((emacs (25 1)) (zk (0 4)) (zk-index (0 9))) "Support for Luhmann-style IDs in zk" single ((:commit . "be0d6aa9fb856736406a43e3908fc4a01e073b99") (:authors ("Grant Rosson <https://github.com/localauthor>")) (:maintainers ("Grant Rosson <https://github.com/localauthor>")) (:maintainer "Grant Rosson <https://github.com/localauthor>") (:url . "https://github.com/localauthor/zk-luhmann"))])
- (zlc . [(20151011 157) nil "Provides zsh like completion system to Emacs" single ((:commit . "4dd2ba267ecdeac845a7cbb3147294ee7daa25f4") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainers ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com") (:keywords "matching" "convenience"))])
- (zmq . [(20230214 36) ((cl-lib (0 5)) (emacs (26))) "ZMQ bindings in elisp" tar ((:commit . "4e1355a0fbaa4581c9c7822cee7c671b6bf15eab") (:authors ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainers ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainer "Nathaniel Nicandro" . "nathanielnicandro@gmail.com") (:keywords "comm") (:url . "https://github.com/nnicandro/emacs-zmq"))])
- (znc . [(20210803 159) ((cl-lib (0 2))) "ZNC + ERC" single ((:commit . "2605f78e37a8a759067dc14fa25a82824ba1bacc") (:authors ("Yaroslav Shirokov")) (:maintainers ("Yaroslav Shirokov")) (:maintainer "Yaroslav Shirokov") (:url . "https://github.com/sshirokov/ZNC.el"))])
- (zombie . [(20141222 1616) nil "major mode for editing ZOMBIE programs" single ((:commit . "ff8cd1b4cdbb4b0b9b8fd1ec8f6fb93eba249345") (:authors ("zk_phi")) (:maintainers ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))])
- (zombie-trellys-mode . [(20150304 1702) ((emacs (24)) (cl-lib (0 5)) (haskell-mode (1 5))) "A minor mode for interaction with Zombie Trellys" single ((:commit . "9e99d444a387dd1634cab62ef802683f5bf5d907") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainers ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk") (:keywords "languages"))])
- (zone-nyan . [(20210508 1642) ((emacs (24 3)) (esxml (0 3 1))) "Zone out with nyan cat" single ((:commit . "38b6e9f1f5871e9166b00a1db44680caa56773be") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainers ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:keywords "games") (:url . "https://depp.brause.cc/zone-nyan"))])
- (zone-rainbow . [(20160120 1334) ((emacs (24 3))) "Zone out with rainbow." single ((:commit . "2ba4f1a87c69c4712124ebf12c1f3ea171e1af36") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "games") (:url . "https://github.com/kawabata/zone-rainbow"))])
- (zone-select . [(20160118 1419) ((emacs (24 3)) (dash (2 8))) "Select zone programs." single ((:commit . "bf30da12f1625fe6563448fccf3c506acad10af7") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "games") (:url . "https://github.com/kawabata/zone-select"))])
- (zone-sl . [(20160201 1210) ((emacs (24 3))) "Zone out with steam locomotives." single ((:commit . "737b21b4b35c28a487ad8a31598e745bc183b209") (:authors ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainers ("KAWABATA, Taichi <kawabata.taichi_at_gmail.com>")) (:maintainer "KAWABATA, Taichi <kawabata.taichi_at_gmail.com>") (:keywords "games") (:url . "https://github.com/kawabata/zone-sl"))])
- (zoom . [(20220411 1126) ((emacs (24 4))) "Fixed and automatic balanced window layout" single ((:commit . "2104abb074682db79b9ff3a748e8e2e760a4d8cf") (:authors ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainers ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainer "Andrea Cardaci" . "cyrus.and@gmail.com") (:keywords "frames") (:url . "https://github.com/cyrus-and/zoom"))])
- (zoom-window . [(20221228 407) ((emacs (24 3))) "Zoom window like tmux" single ((:commit . "093dd7a5d60141812762eba40b021c76ff41f83d") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainers ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-zoom-window"))])
- (zop-to-char . [(20160212 1554) ((cl-lib (0 5))) "A replacement of zap-to-char." single ((:commit . "816ea90337db0545a2f0a5079f4d7b3a2822af7d") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainers ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/zop-to-char"))])
- (zotelo . [(20160602 949) ((cl-lib (0 5))) "Manage Zotero collections from emacs" single ((:commit . "d9dc089b9adfcc70a63f2a84269a12eb7cb4c748") (:authors ("Spinu Vitalie")) (:maintainers ("Spinu Vitalie")) (:maintainer "Spinu Vitalie") (:keywords "zotero" "emacs" "reftex" "bibtex" "mozrepl" "bibliography manager") (:url . "https://github.com/vitoshka/zotelo"))])
- (zotero . [(20211008 2207) ((emacs (27 1)) (ht (2 2)) (oauth (1 0 4)) (s (1 12 0))) "Library for the Zotero API" tar ((:commit . "811bd1f14b38c3dde3f80cd8a13490c9900de888") (:authors ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainers ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainer "Folkert van der Beek" . "folkertvanderbeek@gmail.com") (:keywords "zotero" "hypermedia") (:url . "https://gitlab.com/fvdbeek/emacs-zotero"))])
- (zotxt . [(20210908 402) ((request (0 3 2)) (deferred (0 5 1))) "Tools to integrate emacs with Zotero via the zotxt plugin." tar ((:commit . "d344e7ac281a083f4e39e95b5664633a015e2b3b") (:authors ("Erik Hetzner" . "egh@e6h.org")) (:maintainer "Erik Hetzner" . "egh@e6h.org") (:keywords "bib"))])
- (zoutline . [(20220102 835) nil "Simple outline library." single ((:commit . "32857c6c4b9b0bcbed14d825a10b91a98d5fed0a") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainers ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:keywords "outline") (:url . "https://github.com/abo-abo/zoutline"))])
- (zoxide . [(20220711 33) ((emacs (25 1))) "Find file by zoxide" single ((:commit . "b09c06962316d28b14ecbb2340af7c0636ab6d16") (:authors ("Ruoyu Feng" . "emacs@vonfry.name")) (:maintainers ("Ruoyu Feng" . "emacs@vonfry.name")) (:maintainer "Ruoyu Feng" . "emacs@vonfry.name") (:keywords "converience" "matching") (:url . "https://gitlab.com/Vonfry/zoxide.el"))])
- (zpl-mode . [(20180906 1059) ((emacs (24 3))) "ZIMPL major mode" single ((:commit . "35e7e23c6baf31b5e65dd7405c8ab9b13c70637e") (:url . "https://github.com/ax487/zpl-mode.git"))])
- (zpresent . [(20201207 732) ((emacs (25 1)) (org-parser (0 4)) (dash (2 12 0)) (request (0 3 0))) "Simple presentation mode based on org files." single ((:commit . "341d1a4a91a8acff5be6b81f95695e17c79c5309") (:keywords "comm") (:url . "https://hg.sr.ht/~zck/zpresent"))])
- (zprint-format . [(20210602 146) ((emacs (24)) (reformatter (0 3))) "Reformat Clojure code using zprint" single ((:commit . "fa575c17a40033189f2f23f1a5b27b88c399d200") (:authors ("Derek Passen" . "dpassen1@gmail.com")) (:maintainers ("Derek Passen" . "dpassen1@gmail.com")) (:maintainer "Derek Passen" . "dpassen1@gmail.com") (:keywords "clojure" "zprint" "tools" "languages") (:url . "http://www.github.com/dpassen/zprint-format"))])
- (zprint-mode . [(20200731 1238) ((emacs (24 3))) "Reformat Clojure(Script) code using zprint" tar ((:commit . "b9b72b4918156f2f44aa544be9e19ea391937c2a") (:authors ("Paulus Esterhazy" . "pesterhazy@gmail.com")) (:maintainers ("Paulus Esterhazy" . "pesterhazy@gmail.com")) (:maintainer "Paulus Esterhazy" . "pesterhazy@gmail.com") (:keywords "tools") (:url . "https://github.com/pesterhazy/zprint-mode.el"))])
- (ztree . [(20210415 1947) ((cl-lib (0))) "Text mode directory tree" tar ((:commit . "f05677f9696e573c8c607e8876fb4a0cccbc491f") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainers ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com") (:keywords "files" "tools") (:url . "https://github.com/fourier/ztree"))])
- (zweilight-theme . [(20170113 605) nil "A dark color theme for Emacs." single ((:commit . "890f27c939d8a358c9ef0f402fc3314f475ec874") (:authors ("Philip Arvidsson" . "contact@philiparvidsson.com")) (:maintainers ("Philip Arvidsson" . "contact@philiparvidsson.com")) (:maintainer "Philip Arvidsson" . "contact@philiparvidsson.com") (:url . "http://github.com/philiparvidsson/zweilight-emacs"))])
- (zygospore . [(20140703 852) nil "reversible C-x 1 (delete-other-windows)" single ((:commit . "1af5ee663f5a7aa08d96a77cacff834dcdf55ea8") (:authors ("Louis Kottmann" . "louis.kottmann@gmail.com")) (:maintainers ("Louis Kottmann" . "louis.kottmann@gmail.com")) (:maintainer "Louis Kottmann" . "louis.kottmann@gmail.com") (:url . "https://github.com/louiskottmann/zygospore.el"))])
- (zzz-to-char . [(20210321 1707) ((emacs (24 4)) (cl-lib (0 5)) (avy (0 3 0))) "Fancy version of `zap-to-char' command" single ((:commit . "18d26571b91a9c56b6a7e0d2a58188e833ab5d0f") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainers ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:keywords "convenience") (:url . "https://github.com/mrkkrp/zzz-to-char"))]))
diff --git a/emacs.d/elpa/bind-key-20191110.416/bind-key-autoloads.el b/emacs.d/elpa/bind-key-20191110.416/bind-key-autoloads.el
deleted file mode 100644
index 7f4d424..0000000
--- a/emacs.d/elpa/bind-key-20191110.416/bind-key-autoloads.el
+++ /dev/null
@@ -1,84 +0,0 @@
-;;; bind-key-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "bind-key" "bind-key.el" (0 0 0 0))
-;;; Generated autoloads from bind-key.el
-
-(autoload 'bind-key "bind-key" "\
-Bind KEY-NAME to COMMAND in KEYMAP (`global-map' if not passed).
-
-KEY-NAME may be a vector, in which case it is passed straight to
-`define-key'. Or it may be a string to be interpreted as
-spelled-out keystrokes, e.g., \"C-c C-z\". See documentation of
-`edmacro-mode' for details.
-
-COMMAND must be an interactive function or lambda form.
-
-KEYMAP, if present, should be a keymap and not a quoted symbol.
-For example:
-
- (bind-key \"M-h\" #'some-interactive-function my-mode-map)
-
-If PREDICATE is non-nil, it is a form evaluated to determine when
-a key should be bound. It must return non-nil in such cases.
-Emacs can evaluate this form at any time that it does redisplay
-or operates on menu data structures, so you should write it so it
-can safely be called at any time.
-
-\(fn KEY-NAME COMMAND &optional KEYMAP PREDICATE)" nil t)
-
-(autoload 'unbind-key "bind-key" "\
-Unbind the given KEY-NAME, within the KEYMAP (if specified).
-See `bind-key' for more details.
-
-\(fn KEY-NAME &optional KEYMAP)" nil t)
-
-(autoload 'bind-key* "bind-key" "\
-Similar to `bind-key', but overrides any mode-specific bindings.
-
-\(fn KEY-NAME COMMAND &optional PREDICATE)" nil t)
-
-(autoload 'bind-keys "bind-key" "\
-Bind multiple keys at once.
-
-Accepts keyword arguments:
-:map MAP - a keymap into which the keybindings should be
- added
-:prefix KEY - prefix key for these bindings
-:prefix-map MAP - name of the prefix map that should be created
- for these bindings
-:prefix-docstring STR - docstring for the prefix-map variable
-:menu-name NAME - optional menu string for prefix map
-:filter FORM - optional form to determine when bindings apply
-
-The rest of the arguments are conses of keybinding string and a
-function symbol (unquoted).
-
-\(fn &rest ARGS)" nil t)
-
-(autoload 'bind-keys* "bind-key" "\
-
-
-\(fn &rest ARGS)" nil t)
-
-(autoload 'describe-personal-keybindings "bind-key" "\
-Display all the personal keybindings defined by `bind-key'.
-
-\(fn)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "bind-key" '("compare-keybindings" "get-binding-description" "bind-key" "personal-keybindings" "override-global-m")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; bind-key-autoloads.el ends here
diff --git a/emacs.d/elpa/bind-key-20191110.416/bind-key-pkg.el b/emacs.d/elpa/bind-key-20191110.416/bind-key-pkg.el
deleted file mode 100644
index 95a0f1c..0000000
--- a/emacs.d/elpa/bind-key-20191110.416/bind-key-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "bind-key" "20191110.416" "A simple way to manage personal keybindings" 'nil :commit "c873d5529c9c80cb58222f22873a4f081c307cb2" :keywords '("keys" "keybinding" "config" "dotemacs") :authors '(("John Wiegley" . "johnw@newartisans.com")) :maintainer '("John Wiegley" . "johnw@newartisans.com") :url "https://github.com/jwiegley/use-package")
diff --git a/emacs.d/elpa/bind-key-20191110.416/bind-key.el b/emacs.d/elpa/bind-key-20191110.416/bind-key.el
deleted file mode 100644
index a8d259e..0000000
--- a/emacs.d/elpa/bind-key-20191110.416/bind-key.el
+++ /dev/null
@@ -1,455 +0,0 @@
-;;; bind-key.el --- A simple way to manage personal keybindings
-
-;; Copyright (c) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 16 Jun 2012
-;; Modified: 29 Nov 2017
-;; Version: 2.4
-;; Package-Version: 20191110.416
-;; Keywords: keys keybinding config dotemacs
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the gnu general public license as
-;; published by the free software foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; without any warranty; without even the implied warranty of
-;; merchantability or fitness for a particular purpose. see the gnu
-;; general public license for more details.
-
-;; You should have received a copy of the gnu general public license
-;; along with gnu emacs; see the file copying. if not, write to the
-;; free software foundation, inc., 59 temple place - suite 330,
-;; boston, ma 02111-1307, usa.
-
-;;; Commentary:
-
-;; If you have lots of keybindings set in your .emacs file, it can be hard to
-;; know which ones you haven't set yet, and which may now be overriding some
-;; new default in a new emacs version. This module aims to solve that
-;; problem.
-;;
-;; Bind keys as follows in your .emacs:
-;;
-;; (require 'bind-key)
-;;
-;; (bind-key "C-c x" 'my-ctrl-c-x-command)
-;;
-;; If the keybinding argument is a vector, it is passed straight to
-;; `define-key', so remapping a key with `[remap COMMAND]' works as
-;; expected:
-;;
-;; (bind-key [remap original-ctrl-c-x-command] 'my-ctrl-c-x-command)
-;;
-;; If you want the keybinding to override all minor modes that may also bind
-;; the same key, use the `bind-key*' form:
-;;
-;; (bind-key* "<C-return>" 'other-window)
-;;
-;; If you want to rebind a key only in a particular keymap, use:
-;;
-;; (bind-key "C-c x" 'my-ctrl-c-x-command some-other-mode-map)
-;;
-;; To unbind a key within a keymap (for example, to stop your favorite major
-;; mode from changing a binding that you don't want to override everywhere),
-;; use `unbind-key':
-;;
-;; (unbind-key "C-c x" some-other-mode-map)
-;;
-;; To bind multiple keys at once, or set up a prefix map, a `bind-keys' macro
-;; is provided. It accepts keyword arguments, please see its documentation
-;; for a detailed description.
-;;
-;; To add keys into a specific map, use :map argument
-;;
-;; (bind-keys :map dired-mode-map
-;; ("o" . dired-omit-mode)
-;; ("a" . some-custom-dired-function))
-;;
-;; To set up a prefix map, use `:prefix-map' and `:prefix' arguments (both are
-;; required)
-;;
-;; (bind-keys :prefix-map my-customize-prefix-map
-;; :prefix "C-c c"
-;; ("f" . customize-face)
-;; ("v" . customize-variable))
-;;
-;; You can combine all the keywords together. Additionally,
-;; `:prefix-docstring' can be specified to set documentation of created
-;; `:prefix-map' variable.
-;;
-;; To bind multiple keys in a `bind-key*' way (to be sure that your bindings
-;; will not be overridden by other modes), you may use `bind-keys*' macro:
-;;
-;; (bind-keys*
-;; ("C-o" . other-window)
-;; ("C-M-n" . forward-page)
-;; ("C-M-p" . backward-page))
-;;
-;; After Emacs loads, you can see a summary of all your personal keybindings
-;; currently in effect with this command:
-;;
-;; M-x describe-personal-keybindings
-;;
-;; This display will tell you if you've overridden a default keybinding, and
-;; what the default was. Also, it will tell you if the key was rebound after
-;; your binding it with `bind-key', and what it was rebound it to.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'easy-mmode)
-
-(defgroup bind-key nil
- "A simple way to manage personal keybindings"
- :group 'emacs)
-
-(defcustom bind-key-column-widths '(18 . 40)
- "Width of columns in `describe-personal-keybindings'."
- :type '(cons integer integer)
- :group 'bind-key)
-
-(defcustom bind-key-segregation-regexp
- "\\`\\(\\(C-[chx] \\|M-[gso] \\)\\([CM]-\\)?\\|.+-\\)"
- "Regular expression used to divide key sets in the output from
-\\[describe-personal-keybindings]."
- :type 'regexp
- :group 'bind-key)
-
-(defcustom bind-key-describe-special-forms nil
- "If non-nil, extract docstrings from lambdas, closures and keymaps if possible."
- :type 'boolean
- :group 'bind-key)
-
-;; Create override-global-mode to force key remappings
-
-(defvar override-global-map (make-keymap)
- "override-global-mode keymap")
-
-(define-minor-mode override-global-mode
- "A minor mode so that keymap settings override other modes."
- t "")
-
-;; the keymaps in `emulation-mode-map-alists' take precedence over
-;; `minor-mode-map-alist'
-(add-to-list 'emulation-mode-map-alists
- `((override-global-mode . ,override-global-map)))
-
-(defvar personal-keybindings nil
- "List of bindings performed by `bind-key'.
-
-Elements have the form ((KEY . [MAP]) CMD ORIGINAL-CMD)")
-
-;;;###autoload
-(defmacro bind-key (key-name command &optional keymap predicate)
- "Bind KEY-NAME to COMMAND in KEYMAP (`global-map' if not passed).
-
-KEY-NAME may be a vector, in which case it is passed straight to
-`define-key'. Or it may be a string to be interpreted as
-spelled-out keystrokes, e.g., \"C-c C-z\". See documentation of
-`edmacro-mode' for details.
-
-COMMAND must be an interactive function or lambda form.
-
-KEYMAP, if present, should be a keymap and not a quoted symbol.
-For example:
-
- (bind-key \"M-h\" #'some-interactive-function my-mode-map)
-
-If PREDICATE is non-nil, it is a form evaluated to determine when
-a key should be bound. It must return non-nil in such cases.
-Emacs can evaluate this form at any time that it does redisplay
-or operates on menu data structures, so you should write it so it
-can safely be called at any time."
- (let ((namevar (make-symbol "name"))
- (keyvar (make-symbol "key"))
- (kdescvar (make-symbol "kdesc"))
- (bindingvar (make-symbol "binding")))
- `(let* ((,namevar ,key-name)
- (,keyvar (if (vectorp ,namevar) ,namevar
- (read-kbd-macro ,namevar)))
- (,kdescvar (cons (if (stringp ,namevar) ,namevar
- (key-description ,namevar))
- (quote ,keymap)))
- (,bindingvar (lookup-key (or ,keymap global-map) ,keyvar)))
- (let ((entry (assoc ,kdescvar personal-keybindings))
- (details (list ,command
- (unless (numberp ,bindingvar)
- ,bindingvar))))
- (if entry
- (setcdr entry details)
- (add-to-list 'personal-keybindings (cons ,kdescvar details))))
- ,(if predicate
- `(define-key (or ,keymap global-map) ,keyvar
- '(menu-item "" nil :filter (lambda (&optional _)
- (when ,predicate
- ,command))))
- `(define-key (or ,keymap global-map) ,keyvar ,command)))))
-
-;;;###autoload
-(defmacro unbind-key (key-name &optional keymap)
- "Unbind the given KEY-NAME, within the KEYMAP (if specified).
-See `bind-key' for more details."
- `(progn
- (bind-key ,key-name nil ,keymap)
- (setq personal-keybindings
- (cl-delete-if #'(lambda (k)
- ,(if keymap
- `(and (consp (car k))
- (string= (caar k) ,key-name)
- (eq (cdar k) ',keymap))
- `(and (stringp (car k))
- (string= (car k) ,key-name))))
- personal-keybindings))))
-
-;;;###autoload
-(defmacro bind-key* (key-name command &optional predicate)
- "Similar to `bind-key', but overrides any mode-specific bindings."
- `(bind-key ,key-name ,command override-global-map ,predicate))
-
-(defun bind-keys-form (args keymap)
- "Bind multiple keys at once.
-
-Accepts keyword arguments:
-:map MAP - a keymap into which the keybindings should be
- added
-:prefix KEY - prefix key for these bindings
-:prefix-map MAP - name of the prefix map that should be created
- for these bindings
-:prefix-docstring STR - docstring for the prefix-map variable
-:menu-name NAME - optional menu string for prefix map
-:filter FORM - optional form to determine when bindings apply
-
-The rest of the arguments are conses of keybinding string and a
-function symbol (unquoted)."
- (let (map
- doc
- prefix-map
- prefix
- filter
- menu-name
- pkg)
-
- ;; Process any initial keyword arguments
- (let ((cont t))
- (while (and cont args)
- (if (cond ((and (eq :map (car args))
- (not prefix-map))
- (setq map (cadr args)))
- ((eq :prefix-docstring (car args))
- (setq doc (cadr args)))
- ((and (eq :prefix-map (car args))
- (not (memq map '(global-map
- override-global-map))))
- (setq prefix-map (cadr args)))
- ((eq :prefix (car args))
- (setq prefix (cadr args)))
- ((eq :filter (car args))
- (setq filter (cadr args)) t)
- ((eq :menu-name (car args))
- (setq menu-name (cadr args)))
- ((eq :package (car args))
- (setq pkg (cadr args))))
- (setq args (cddr args))
- (setq cont nil))))
-
- (when (or (and prefix-map (not prefix))
- (and prefix (not prefix-map)))
- (error "Both :prefix-map and :prefix must be supplied"))
-
- (when (and menu-name (not prefix))
- (error "If :menu-name is supplied, :prefix must be too"))
-
- (unless map (setq map keymap))
-
- ;; Process key binding arguments
- (let (first next)
- (while args
- (if (keywordp (car args))
- (progn
- (setq next args)
- (setq args nil))
- (if first
- (nconc first (list (car args)))
- (setq first (list (car args))))
- (setq args (cdr args))))
-
- (cl-flet
- ((wrap (map bindings)
- (if (and map pkg (not (memq map '(global-map
- override-global-map))))
- `((if (boundp ',map)
- ,(macroexp-progn bindings)
- (eval-after-load
- ,(if (symbolp pkg) `',pkg pkg)
- ',(macroexp-progn bindings))))
- bindings)))
-
- (append
- (when prefix-map
- `((defvar ,prefix-map)
- ,@(when doc `((put ',prefix-map 'variable-documentation ,doc)))
- ,@(if menu-name
- `((define-prefix-command ',prefix-map nil ,menu-name))
- `((define-prefix-command ',prefix-map)))
- ,@(if (and map (not (eq map 'global-map)))
- (wrap map `((bind-key ,prefix ',prefix-map ,map ,filter)))
- `((bind-key ,prefix ',prefix-map nil ,filter)))))
- (wrap map
- (cl-mapcan
- (lambda (form)
- (let ((fun (and (cdr form) (list 'function (cdr form)))))
- (if prefix-map
- `((bind-key ,(car form) ,fun ,prefix-map ,filter))
- (if (and map (not (eq map 'global-map)))
- `((bind-key ,(car form) ,fun ,map ,filter))
- `((bind-key ,(car form) ,fun nil ,filter))))))
- first))
- (when next
- (bind-keys-form (if pkg
- (cons :package (cons pkg next))
- next) map)))))))
-
-;;;###autoload
-(defmacro bind-keys (&rest args)
- "Bind multiple keys at once.
-
-Accepts keyword arguments:
-:map MAP - a keymap into which the keybindings should be
- added
-:prefix KEY - prefix key for these bindings
-:prefix-map MAP - name of the prefix map that should be created
- for these bindings
-:prefix-docstring STR - docstring for the prefix-map variable
-:menu-name NAME - optional menu string for prefix map
-:filter FORM - optional form to determine when bindings apply
-
-The rest of the arguments are conses of keybinding string and a
-function symbol (unquoted)."
- (macroexp-progn (bind-keys-form args nil)))
-
-;;;###autoload
-(defmacro bind-keys* (&rest args)
- (macroexp-progn (bind-keys-form args 'override-global-map)))
-
-(defun get-binding-description (elem)
- (cond
- ((listp elem)
- (cond
- ((memq (car elem) '(lambda function))
- (if (and bind-key-describe-special-forms
- (stringp (nth 2 elem)))
- (nth 2 elem)
- "#<lambda>"))
- ((eq 'closure (car elem))
- (if (and bind-key-describe-special-forms
- (stringp (nth 3 elem)))
- (nth 3 elem)
- "#<closure>"))
- ((eq 'keymap (car elem))
- "#<keymap>")
- (t
- elem)))
- ;; must be a symbol, non-symbol keymap case covered above
- ((and bind-key-describe-special-forms (keymapp elem))
- (let ((doc (get elem 'variable-documentation)))
- (if (stringp doc) doc elem)))
- ((symbolp elem)
- elem)
- (t
- "#<byte-compiled lambda>")))
-
-(defun compare-keybindings (l r)
- (let* ((regex bind-key-segregation-regexp)
- (lgroup (and (string-match regex (caar l))
- (match-string 0 (caar l))))
- (rgroup (and (string-match regex (caar r))
- (match-string 0 (caar r))))
- (lkeymap (cdar l))
- (rkeymap (cdar r)))
- (cond
- ((and (null lkeymap) rkeymap)
- (cons t t))
- ((and lkeymap (null rkeymap))
- (cons nil t))
- ((and lkeymap rkeymap
- (not (string= (symbol-name lkeymap) (symbol-name rkeymap))))
- (cons (string< (symbol-name lkeymap) (symbol-name rkeymap)) t))
- ((and (null lgroup) rgroup)
- (cons t t))
- ((and lgroup (null rgroup))
- (cons nil t))
- ((and lgroup rgroup)
- (if (string= lgroup rgroup)
- (cons (string< (caar l) (caar r)) nil)
- (cons (string< lgroup rgroup) t)))
- (t
- (cons (string< (caar l) (caar r)) nil)))))
-
-;;;###autoload
-(defun describe-personal-keybindings ()
- "Display all the personal keybindings defined by `bind-key'."
- (interactive)
- (with-output-to-temp-buffer "*Personal Keybindings*"
- (princ (format (concat "Key name%s Command%s Comments\n%s %s "
- "---------------------\n")
- (make-string (- (car bind-key-column-widths) 9) ? )
- (make-string (- (cdr bind-key-column-widths) 8) ? )
- (make-string (1- (car bind-key-column-widths)) ?-)
- (make-string (1- (cdr bind-key-column-widths)) ?-)))
- (let (last-binding)
- (dolist (binding
- (setq personal-keybindings
- (sort personal-keybindings
- (lambda (l r)
- (car (compare-keybindings l r))))))
-
- (if (not (eq (cdar last-binding) (cdar binding)))
- (princ (format "\n\n%s: %s\n%s\n\n"
- (cdar binding) (caar binding)
- (make-string (+ 21 (car bind-key-column-widths)
- (cdr bind-key-column-widths)) ?-)))
- (if (and last-binding
- (cdr (compare-keybindings last-binding binding)))
- (princ "\n")))
-
- (let* ((key-name (caar binding))
- (at-present (lookup-key (or (symbol-value (cdar binding))
- (current-global-map))
- (read-kbd-macro key-name)))
- (command (nth 1 binding))
- (was-command (nth 2 binding))
- (command-desc (get-binding-description command))
- (was-command-desc (and was-command
- (get-binding-description was-command)))
- (at-present-desc (get-binding-description at-present))
- )
- (let ((line
- (format
- (format "%%-%ds%%-%ds%%s\n" (car bind-key-column-widths)
- (cdr bind-key-column-widths))
- key-name (format "`%s\'" command-desc)
- (if (string= command-desc at-present-desc)
- (if (or (null was-command)
- (string= command-desc was-command-desc))
- ""
- (format "was `%s\'" was-command-desc))
- (format "[now: `%s\']" at-present)))))
- (princ (if (string-match "[ \t]+\n" line)
- (replace-match "\n" t t line)
- line))))
-
- (setq last-binding binding)))))
-
-(provide 'bind-key)
-
-;; Local Variables:
-;; outline-regexp: ";;;\\(;* [^\s\t\n]\\|###autoload\\)\\|("
-;; indent-tabs-mode: nil
-;; End:
-
-;;; bind-key.el ends here
diff --git a/emacs.d/elpa/blacken-20191123.1547/blacken-autoloads.el b/emacs.d/elpa/blacken-20191123.1547/blacken-autoloads.el
deleted file mode 100644
index 4b291ba..0000000
--- a/emacs.d/elpa/blacken-20191123.1547/blacken-autoloads.el
+++ /dev/null
@@ -1,34 +0,0 @@
-;;; blacken-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "blacken" "blacken.el" (0 0 0 0))
-;;; Generated autoloads from blacken.el
-
-(autoload 'blacken-buffer "blacken" "\
-Try to blacken the current buffer.
-
-Show black output, if black exit abnormally and DISPLAY is t.
-
-\(fn &optional DISPLAY)" t nil)
-
-(autoload 'blacken-mode "blacken" "\
-Automatically run black before saving.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "blacken" '("blacken-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; blacken-autoloads.el ends here
diff --git a/emacs.d/elpa/blacken-20191123.1547/blacken-pkg.el b/emacs.d/elpa/blacken-20191123.1547/blacken-pkg.el
deleted file mode 100644
index 65ce077..0000000
--- a/emacs.d/elpa/blacken-20191123.1547/blacken-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "blacken" "20191123.1547" "Reformat python buffers using the \"black\" formatter" '((emacs "25.2")) :commit "a09f8e2564739792a1b86bc8a6ce41039db3bbf8" :authors '(("Artem Malyshev" . "proofit404@gmail.com")) :maintainer '("Artem Malyshev" . "proofit404@gmail.com") :url "https://github.com/proofit404/blacken")
diff --git a/emacs.d/elpa/blacken-20191123.1547/blacken.el b/emacs.d/elpa/blacken-20191123.1547/blacken.el
deleted file mode 100644
index ded35e0..0000000
--- a/emacs.d/elpa/blacken-20191123.1547/blacken.el
+++ /dev/null
@@ -1,176 +0,0 @@
-;;; blacken.el --- Reformat python buffers using the "black" formatter
-
-;; Copyright (C) 2018-2019 Artem Malyshev
-
-;; Author: Artem Malyshev <proofit404@gmail.com>
-;; Homepage: https://github.com/proofit404/blacken
-;; Version: 0.0.1
-;; Package-Version: 20191123.1547
-;; Package-Requires: ((emacs "25.2"))
-
-;; This file is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 3, or (at your
-;; option) any later version.
-;;
-;; This file is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-;;
-;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; Blacken uses black to format a Python buffer. It can be called
-;; explicitly on a certain buffer, but more conveniently, a minor-mode
-;; 'blacken-mode' is provided that turns on automatically running
-;; black on a buffer before saving.
-;;
-;; Installation:
-;;
-;; Add blacken.el to your load-path.
-;;
-;; To automatically format all Python buffers before saving, add the
-;; function blacken-mode to python-mode-hook:
-;;
-;; (add-hook 'python-mode-hook 'blacken-mode)
-;;
-;;; Code:
-
-(require 'cl-lib)
-
-(defgroup blacken nil
- "Reformat Python code with \"black\"."
- :group 'python)
-
-(defcustom blacken-executable "black"
- "Name of the executable to run."
- :type 'string)
-
-(defcustom blacken-line-length nil
- "Line length to enforce.
-
-It must be an integer, nil or `fill'.
-If `fill', the `fill-column' variable value is used."
- :type '(choice :tag "Line Length Limit"
- (const :tag "Use default" nil)
- (const :tag "Use fill-column" fill)
- (integer :tag "Line Length"))
- :safe 'integerp)
-
-(defcustom blacken-allow-py36 nil
- "Allow using Python 3.6-only syntax on all input files."
- :type 'boolean
- :safe 'booleanp)
-
-(defcustom blacken-skip-string-normalization nil
- "Don't normalize string quotes or prefixes."
- :type 'boolean
- :safe 'booleanp)
-
-(defcustom blacken-fast-unsafe nil
- "Skips temporary sanity checks."
- :type 'boolean
- :safe 'booleanp)
-
-(defcustom blacken-only-if-project-is-blackened nil
- "Only blacken if project has a pyproject.toml with a [tool.black] section."
- :type 'boolean
- :safe 'booleanp)
-
-(defun blacken-call-bin (input-buffer output-buffer error-buffer)
- "Call process black.
-
-Send INPUT-BUFFER content to the process stdin. Saving the
-output to OUTPUT-BUFFER. Saving process stderr to ERROR-BUFFER.
-Return black process the exit code."
- (with-current-buffer input-buffer
- (let ((process (make-process :name "blacken"
- :command `(,blacken-executable ,@(blacken-call-args))
- :buffer output-buffer
- :stderr error-buffer
- :noquery t
- :sentinel (lambda (process event)))))
- (set-process-query-on-exit-flag (get-buffer-process error-buffer) nil)
- (set-process-sentinel (get-buffer-process error-buffer) (lambda (process event)))
- (save-restriction
- (widen)
- (process-send-region process (point-min) (point-max)))
- (process-send-eof process)
- (accept-process-output process nil nil t)
- (while (process-live-p process)
- (accept-process-output process nil nil t))
- (process-exit-status process))))
-
-(defun blacken-call-args ()
- "Build black process call arguments."
- (append
- (when blacken-line-length
- (list "--line-length"
- (number-to-string (cl-case blacken-line-length
- ('fill fill-column)
- (t blacken-line-length)))))
- (when blacken-allow-py36
- (list "--py36"))
- (when blacken-fast-unsafe
- (list "--fast"))
- (when blacken-skip-string-normalization
- (list "--skip-string-normalization"))
- (when (and (buffer-file-name (current-buffer))
- (string-match "\.pyi$" (buffer-file-name (current-buffer))))
- (list "--pyi"))
- '("-")))
-
-(defun blacken-project-is-blackened (&optional display)
- "Whether the project has a pyproject.toml with [tool.black] in it."
- (when-let ((parent (locate-dominating-file default-directory "pyproject.toml")))
- (with-temp-buffer
- (insert-file-contents (concat parent "pyproject.toml"))
- (re-search-forward "^\\[tool.black\\]$" nil t 1))))
-
-;;;###autoload
-(defun blacken-buffer (&optional display)
- "Try to blacken the current buffer.
-
-Show black output, if black exit abnormally and DISPLAY is t."
- (interactive (list t))
- (let* ((original-buffer (current-buffer))
- (original-point (point))
- (original-window-pos (window-start))
- (tmpbuf (get-buffer-create "*blacken*"))
- (errbuf (get-buffer-create "*blacken-error*")))
- ;; This buffer can be left after previous black invocation. It
- ;; can contain error message of the previous run.
- (dolist (buf (list tmpbuf errbuf))
- (with-current-buffer buf
- (erase-buffer)))
- (condition-case err
- (if (not (zerop (blacken-call-bin original-buffer tmpbuf errbuf)))
- (error "Black failed, see %s buffer for details" (buffer-name errbuf))
- (unless (eq (compare-buffer-substrings tmpbuf nil nil original-buffer nil nil) 0)
- (with-current-buffer tmpbuf
- (copy-to-buffer original-buffer (point-min) (point-max)))
- (goto-char original-point)
- (set-window-start (selected-window) original-window-pos))
- (mapc 'kill-buffer (list tmpbuf errbuf)))
- (error (message "%s" (error-message-string err))
- (when display
- (with-current-buffer errbuf
- (setq-local scroll-conservatively 0))
- (pop-to-buffer errbuf))))))
-
-;;;###autoload
-(define-minor-mode blacken-mode
- "Automatically run black before saving."
- :lighter " Black"
- (if blacken-mode
- (when (or (not blacken-only-if-project-is-blackened)
- (blacken-project-is-blackened))
- (add-hook 'before-save-hook 'blacken-buffer nil t))
- (remove-hook 'before-save-hook 'blacken-buffer t)))
-
-(provide 'blacken)
-
-;;; blacken.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-abbrev.el b/emacs.d/elpa/company-20201014.2251/company-abbrev.el
deleted file mode 100644
index 24ec3b7..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-abbrev.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;;; company-abbrev.el --- company-mode completion backend for abbrev
-
-;; Copyright (C) 2009-2011, 2015 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'abbrev)
-
-(defun company-abbrev-insert (match)
- "Replace MATCH with the expanded abbrev."
- (expand-abbrev))
-
-;;;###autoload
-(defun company-abbrev (command &optional arg &rest ignored)
- "`company-mode' completion backend for abbrev."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-abbrev
- 'company-abbrev-insert))
- (prefix (company-grab-symbol))
- (candidates (nconc
- (delete "" (all-completions arg global-abbrev-table))
- (delete "" (all-completions arg local-abbrev-table))))
- (meta (abbrev-expansion arg))))
-
-(provide 'company-abbrev)
-;;; company-abbrev.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-autoloads.el b/emacs.d/elpa/company-20201014.2251/company-autoloads.el
deleted file mode 100644
index 2e0d20d..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-autoloads.el
+++ /dev/null
@@ -1,377 +0,0 @@
-;;; company-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "company" "company.el" (0 0 0 0))
-;;; Generated autoloads from company.el
-
-(autoload 'company-mode "company" "\
-\"complete anything\"; is an in-buffer completion framework.
-Completion starts automatically, depending on the values
-`company-idle-delay' and `company-minimum-prefix-length'.
-
-Completion can be controlled with the commands:
-`company-complete-common', `company-complete-selection', `company-complete',
-`company-select-next', `company-select-previous'. If these commands are
-called before `company-idle-delay', completion will also start.
-
-Completions can be searched with `company-search-candidates' or
-`company-filter-candidates'. These can be used while completion is
-inactive, as well.
-
-The completion data is retrieved using `company-backends' and displayed
-using `company-frontends'. If you want to start a specific backend, call
-it interactively or use `company-begin-backend'.
-
-By default, the completions list is sorted alphabetically, unless the
-backend chooses otherwise, or `company-transformers' changes it later.
-
-regular keymap (`company-mode-map'):
-
-\\{company-mode-map}
-keymap during active completions (`company-active-map'):
-
-\\{company-active-map}
-
-\(fn &optional ARG)" t nil)
-
-(defvar global-company-mode nil "\
-Non-nil if Global Company mode is enabled.
-See the `global-company-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `global-company-mode'.")
-
-(custom-autoload 'global-company-mode "company" nil)
-
-(autoload 'global-company-mode "company" "\
-Toggle Company mode in all buffers.
-With prefix ARG, enable Global Company mode if ARG is positive;
-otherwise, disable it. If called from Lisp, enable the mode if
-ARG is omitted or nil.
-
-Company mode is enabled in all buffers where
-`company-mode-on' would do it.
-See `company-mode' for more information on Company mode.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'company-manual-begin "company" "\
-
-
-\(fn)" t nil)
-
-(autoload 'company-complete "company" "\
-Insert the common part of all candidates or the current selection.
-The first time this is called, the common part is inserted, the second
-time, or when the selection has been changed, the selected candidate is
-inserted.
-
-\(fn)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company" '("company-")))
-
-;;;***
-
-;;;### (autoloads nil "company-abbrev" "company-abbrev.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from company-abbrev.el
-
-(autoload 'company-abbrev "company-abbrev" "\
-`company-mode' completion backend for abbrev.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-abbrev" '("company-abbrev-insert")))
-
-;;;***
-
-;;;### (autoloads nil "company-bbdb" "company-bbdb.el" (0 0 0 0))
-;;; Generated autoloads from company-bbdb.el
-
-(autoload 'company-bbdb "company-bbdb" "\
-`company-mode' completion backend for BBDB.
-
-\(fn COMMAND &optional ARG &rest IGNORE)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-bbdb" '("company-bbdb-")))
-
-;;;***
-
-;;;### (autoloads nil "company-capf" "company-capf.el" (0 0 0 0))
-;;; Generated autoloads from company-capf.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-capf" '("company-")))
-
-;;;***
-
-;;;### (autoloads nil "company-clang" "company-clang.el" (0 0 0 0))
-;;; Generated autoloads from company-clang.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-clang" '("company-clang")))
-
-;;;***
-
-;;;### (autoloads nil "company-cmake" "company-cmake.el" (0 0 0 0))
-;;; Generated autoloads from company-cmake.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-cmake" '("company-cmake")))
-
-;;;***
-
-;;;### (autoloads nil "company-css" "company-css.el" (0 0 0 0))
-;;; Generated autoloads from company-css.el
-
-(autoload 'company-css "company-css" "\
-`company-mode' completion backend for `css-mode'.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-css" '("company-css-")))
-
-;;;***
-
-;;;### (autoloads nil "company-dabbrev" "company-dabbrev.el" (0 0
-;;;;;; 0 0))
-;;; Generated autoloads from company-dabbrev.el
-
-(autoload 'company-dabbrev "company-dabbrev" "\
-dabbrev-like `company-mode' completion backend.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-dabbrev" '("company-dabbrev-")))
-
-;;;***
-
-;;;### (autoloads nil "company-dabbrev-code" "company-dabbrev-code.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from company-dabbrev-code.el
-
-(autoload 'company-dabbrev-code "company-dabbrev-code" "\
-dabbrev-like `company-mode' backend for code.
-The backend looks for all symbols in the current buffer that aren't in
-comments or strings.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-dabbrev-code" '("company-dabbrev-code-")))
-
-;;;***
-
-;;;### (autoloads nil "company-elisp" "company-elisp.el" (0 0 0 0))
-;;; Generated autoloads from company-elisp.el
-
-(autoload 'company-elisp "company-elisp" "\
-`company-mode' completion backend for Emacs Lisp.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-elisp" '("company-elisp-")))
-
-;;;***
-
-;;;### (autoloads nil "company-etags" "company-etags.el" (0 0 0 0))
-;;; Generated autoloads from company-etags.el
-
-(autoload 'company-etags "company-etags" "\
-`company-mode' completion backend for etags.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-etags" '("company-etags-")))
-
-;;;***
-
-;;;### (autoloads nil "company-files" "company-files.el" (0 0 0 0))
-;;; Generated autoloads from company-files.el
-
-(autoload 'company-files "company-files" "\
-`company-mode' completion backend existing file names.
-Completions works for proper absolute and relative files paths.
-File paths with spaces are only supported inside strings.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-files" '("company-file")))
-
-;;;***
-
-;;;### (autoloads nil "company-gtags" "company-gtags.el" (0 0 0 0))
-;;; Generated autoloads from company-gtags.el
-
-(autoload 'company-gtags "company-gtags" "\
-`company-mode' completion backend for GNU Global.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-gtags" '("company-gtags-")))
-
-;;;***
-
-;;;### (autoloads nil "company-ispell" "company-ispell.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from company-ispell.el
-
-(autoload 'company-ispell "company-ispell" "\
-`company-mode' completion backend using Ispell.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-ispell" '("company-ispell-")))
-
-;;;***
-
-;;;### (autoloads nil "company-keywords" "company-keywords.el" (0
-;;;;;; 0 0 0))
-;;; Generated autoloads from company-keywords.el
-
-(autoload 'company-keywords "company-keywords" "\
-`company-mode' backend for programming language keywords.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-keywords" '("company-keywords-")))
-
-;;;***
-
-;;;### (autoloads nil "company-nxml" "company-nxml.el" (0 0 0 0))
-;;; Generated autoloads from company-nxml.el
-
-(autoload 'company-nxml "company-nxml" "\
-`company-mode' completion backend for `nxml-mode'.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-nxml" '("company-nxml-")))
-
-;;;***
-
-;;;### (autoloads nil "company-oddmuse" "company-oddmuse.el" (0 0
-;;;;;; 0 0))
-;;; Generated autoloads from company-oddmuse.el
-
-(autoload 'company-oddmuse "company-oddmuse" "\
-`company-mode' completion backend for `oddmuse-mode'.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-oddmuse" '("company-oddmuse-")))
-
-;;;***
-
-;;;### (autoloads nil "company-semantic" "company-semantic.el" (0
-;;;;;; 0 0 0))
-;;; Generated autoloads from company-semantic.el
-
-(autoload 'company-semantic "company-semantic" "\
-`company-mode' completion backend using CEDET Semantic.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-semantic" '("company-semantic-")))
-
-;;;***
-
-;;;### (autoloads nil "company-template" "company-template.el" (0
-;;;;;; 0 0 0))
-;;; Generated autoloads from company-template.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-template" '("company-template-")))
-
-;;;***
-
-;;;### (autoloads nil "company-tempo" "company-tempo.el" (0 0 0 0))
-;;; Generated autoloads from company-tempo.el
-
-(autoload 'company-tempo "company-tempo" "\
-`company-mode' completion backend for tempo.
-
-\(fn COMMAND &optional ARG &rest IGNORED)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-tempo" '("company-tempo-")))
-
-;;;***
-
-;;;### (autoloads nil "company-tng" "company-tng.el" (0 0 0 0))
-;;; Generated autoloads from company-tng.el
-
-(autoload 'company-tng-frontend "company-tng" "\
-When the user changes the selection at least once, this
-frontend will display the candidate in the buffer as if it's
-already there and any key outside of `company-active-map' will
-confirm the selection and finish the completion.
-
-\(fn COMMAND)" nil nil)
-
-(define-obsolete-function-alias 'company-tng-configure-default 'company-tng-mode "0.9.14" "\
-Applies the default configuration to enable company-tng.")
-
-(defvar company-tng-mode nil "\
-Non-nil if Company-Tng mode is enabled.
-See the `company-tng-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `company-tng-mode'.")
-
-(custom-autoload 'company-tng-mode "company-tng" nil)
-
-(autoload 'company-tng-mode "company-tng" "\
-This minor mode enables `company-tng-frontend'.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-tng" '("company-tng-")))
-
-;;;***
-
-;;;### (autoloads nil "company-yasnippet" "company-yasnippet.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from company-yasnippet.el
-
-(autoload 'company-yasnippet "company-yasnippet" "\
-`company-mode' backend for `yasnippet'.
-
-This backend should be used with care, because as long as there are
-snippets defined for the current major mode, this backend will always
-shadow backends that come after it. Recommended usages:
-
-* In a buffer-local value of `company-backends', grouped with a backend or
- several that provide actual text completions.
-
- (add-hook 'js-mode-hook
- (lambda ()
- (set (make-local-variable 'company-backends)
- '((company-dabbrev-code company-yasnippet)))))
-
-* After keyword `:with', grouped with other backends.
-
- (push '(company-semantic :with company-yasnippet) company-backends)
-
-* Not in `company-backends', just bound to a key.
-
- (global-set-key (kbd \"C-c y\") 'company-yasnippet)
-
-\(fn COMMAND &optional ARG &rest IGNORE)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "company-yasnippet" '("company-yasnippet-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("company-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; company-autoloads.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-bbdb.el b/emacs.d/elpa/company-20201014.2251/company-bbdb.el
deleted file mode 100644
index a68c34e..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-bbdb.el
+++ /dev/null
@@ -1,63 +0,0 @@
-;;; company-bbdb.el --- company-mode completion backend for BBDB in message-mode
-
-;; Copyright (C) 2013-2014, 2016 Free Software Foundation, Inc.
-
-;; Author: Jan Tatarik <jan.tatarik@gmail.com>
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-(require 'company)
-(require 'cl-lib)
-
-(declare-function bbdb-record-get-field "bbdb")
-(declare-function bbdb-records "bbdb")
-(declare-function bbdb-dwim-mail "bbdb-com")
-(declare-function bbdb-search "bbdb-com")
-
-(defgroup company-bbdb nil
- "Completion backend for BBDB."
- :group 'company)
-
-(defcustom company-bbdb-modes '(message-mode)
- "Major modes in which `company-bbdb' may complete."
- :type '(repeat (symbol :tag "Major mode"))
- :package-version '(company . "0.8.8"))
-
-(defun company-bbdb--candidates (arg)
- (cl-mapcan (lambda (record)
- (mapcar (lambda (mail) (bbdb-dwim-mail record mail))
- (bbdb-record-get-field record 'mail)))
- (eval '(bbdb-search (bbdb-records) arg nil arg))))
-
-;;;###autoload
-(defun company-bbdb (command &optional arg &rest ignore)
- "`company-mode' completion backend for BBDB."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-bbdb))
- (prefix (and (memq major-mode company-bbdb-modes)
- (featurep 'bbdb-com)
- (let ((case-fold-search t))
- (looking-back
- "^\\([^ :]*-\\)?\\(To\\|B?Cc\\|From\\):.*? *\\([^,;]*\\)"
- (line-beginning-position)))
- (match-string-no-properties 3)))
- (candidates (company-bbdb--candidates arg))
- (sorted t)
- (no-cache t)))
-
-(provide 'company-bbdb)
-;;; company-bbdb.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-capf.el b/emacs.d/elpa/company-20201014.2251/company-capf.el
deleted file mode 100644
index cb30a80..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-capf.el
+++ /dev/null
@@ -1,208 +0,0 @@
-;;; company-capf.el --- company-mode completion-at-point-functions backend -*- lexical-binding: t -*-
-
-;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
-
-;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; The CAPF back-end provides a bridge to the standard
-;; completion-at-point-functions facility, and thus can support any major mode
-;; that defines a proper completion function, including emacs-lisp-mode,
-;; css-mode and nxml-mode.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-;; Amortizes several calls to a c-a-p-f from the same position.
-(defvar company--capf-cache nil)
-
-;; FIXME: Provide a way to save this info once in Company itself
-;; (https://github.com/company-mode/company-mode/pull/845).
-(defvar-local company-capf--current-completion-data nil
- "Value last returned by `company-capf' when called with `candidates'.
-For most properties/actions, this is just what we need: the exact values
-that accompanied the completion table that's currently is use.
-
-`company-capf', however, could be called at some different positions during
-a completion session (most importantly, by `company-sort-by-occurrence'),
-so we can't just use the preceding variable instead.")
-
-(defun company--capf-data ()
- (let ((cache company--capf-cache))
- (if (and (equal (current-buffer) (car cache))
- (equal (point) (car (setq cache (cdr cache))))
- (equal (buffer-chars-modified-tick) (car (setq cache (cdr cache)))))
- (cadr cache)
- (let ((data (company--capf-data-real)))
- (setq company--capf-cache
- (list (current-buffer) (point) (buffer-chars-modified-tick) data))
- data))))
-
-(defun company--capf-data-real ()
- (cl-letf* (((default-value 'completion-at-point-functions)
- ;; Ignore tags-completion-at-point-function because it subverts
- ;; company-etags in the default value of company-backends, where
- ;; the latter comes later.
- (remove 'tags-completion-at-point-function
- (default-value 'completion-at-point-functions)))
- (completion-at-point-functions (company--capf-workaround))
- (data (run-hook-wrapped 'completion-at-point-functions
- ;; Ignore misbehaving functions.
- #'completion--capf-wrapper 'optimist)))
- (when (and (consp (cdr data)) (integer-or-marker-p (nth 1 data))) data)))
-
-(declare-function python-shell-get-process "python")
-
-(defun company--capf-workaround ()
- ;; For http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18067
- (if (or (not (listp completion-at-point-functions))
- (not (memq 'python-completion-complete-at-point completion-at-point-functions))
- (python-shell-get-process))
- completion-at-point-functions
- (remq 'python-completion-complete-at-point completion-at-point-functions)))
-
-(defun company-capf--save-current-data (data)
- (setq company-capf--current-completion-data data)
- (add-hook 'company-after-completion-hook
- #'company-capf--clear-current-data nil t))
-
-(defun company-capf--clear-current-data (_ignored)
- (setq company-capf--current-completion-data nil))
-
-(defvar-local company-capf--sorted nil)
-
-(defun company-capf (command &optional arg &rest _args)
- "`company-mode' backend using `completion-at-point-functions'."
- (interactive (list 'interactive))
- (pcase command
- (`interactive (company-begin-backend 'company-capf))
- (`prefix
- (let ((res (company--capf-data)))
- (when res
- (let ((length (plist-get (nthcdr 4 res) :company-prefix-length))
- (prefix (buffer-substring-no-properties (nth 1 res) (point))))
- (cond
- ((> (nth 2 res) (point)) 'stop)
- (length (cons prefix length))
- (t prefix))))))
- (`candidates
- (company-capf--candidates arg))
- (`sorted
- company-capf--sorted)
- (`match
- ;; Ask the for the `:company-match' function. If that doesn't help,
- ;; fallback to sniffing for face changes to get a suitable value.
- (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
- :company-match)))
- (if f (funcall f arg)
- (let* ((match-start nil) (pos -1)
- (prop-value nil) (faces nil)
- (has-face-p nil) chunks
- (limit (length arg)))
- (while (< pos limit)
- (setq pos
- (if (< pos 0) 0 (next-property-change pos arg limit)))
- (setq prop-value (or
- (get-text-property pos 'face arg)
- (get-text-property pos 'font-lock-face arg))
- faces (if (listp prop-value) prop-value (list prop-value))
- has-face-p (memq 'completions-common-part faces))
- (cond ((and (not match-start) has-face-p)
- (setq match-start pos))
- ((and match-start (not has-face-p))
- (push (cons match-start pos) chunks)
- (setq match-start nil))))
- (nreverse chunks)))))
- (`duplicates t)
- (`no-cache t) ;Not much can be done here, as long as we handle
- ;non-prefix matches.
- (`meta
- (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
- :company-docsig)))
- (when f (funcall f arg))))
- (`doc-buffer
- (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
- :company-doc-buffer)))
- (when f (funcall f arg))))
- (`location
- (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
- :company-location)))
- (when f (funcall f arg))))
- (`annotation
- (let ((f (plist-get (nthcdr 4 company-capf--current-completion-data)
- :annotation-function)))
- (when f (funcall f arg))))
- (`require-match
- (plist-get (nthcdr 4 (company--capf-data)) :company-require-match))
- (`init nil) ;Don't bother: plenty of other ways to initialize the code.
- (`post-completion
- (company--capf-post-completion arg))
- ))
-
-(defun company-capf--candidates (input)
- (let ((res (company--capf-data)))
- (company-capf--save-current-data res)
- (when res
- (let* ((table (nth 3 res))
- (pred (plist-get (nthcdr 4 res) :predicate))
- (meta (completion-metadata
- (buffer-substring (nth 1 res) (nth 2 res))
- table pred))
- (candidates (completion-all-completions input table pred
- (length input)
- meta))
- (sortfun (cdr (assq 'display-sort-function meta)))
- (last (last candidates))
- (base-size (and (numberp (cdr last)) (cdr last))))
- (when base-size
- (setcdr last nil))
- (setq company-capf--sorted (functionp sortfun))
- (when sortfun
- (setq candidates (funcall sortfun candidates)))
- (if (not (zerop (or base-size 0)))
- (let ((before (substring input 0 base-size)))
- (mapcar (lambda (candidate)
- (concat before candidate))
- candidates))
- candidates)))))
-
-(defun company--capf-post-completion (arg)
- (let* ((res company-capf--current-completion-data)
- (exit-function (plist-get (nthcdr 4 res) :exit-function))
- (table (nth 3 res)))
- (if exit-function
- ;; We can more or less know when the user is done with completion,
- ;; so we do something different than `completion--done'.
- (funcall exit-function arg
- ;; FIXME: Should probably use an additional heuristic:
- ;; completion-at-point doesn't know when the user picked a
- ;; particular candidate explicitly (it only checks whether
- ;; further completions exist). Whereas company user can press
- ;; RET (or use implicit completion with company-tng).
- (if (= (car (completion-boundaries arg table nil ""))
- (length arg))
- 'sole
- 'finished)))))
-
-(provide 'company-capf)
-
-;;; company-capf.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-clang.el b/emacs.d/elpa/company-20201014.2251/company-clang.el
deleted file mode 100644
index df458c5..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-clang.el
+++ /dev/null
@@ -1,400 +0,0 @@
-;;; company-clang.el --- company-mode completion backend for Clang -*- lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2013-2019 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-template)
-(require 'cl-lib)
-
-(defgroup company-clang nil
- "Completion backend for Clang."
- :group 'company)
-
-(defcustom company-clang-executable
- (executable-find "clang")
- "Location of clang executable."
- :type 'file)
-
-(defcustom company-clang-begin-after-member-access t
- "When non-nil, automatic completion will start whenever the current
-symbol is preceded by \".\", \"->\" or \"::\", ignoring
-`company-minimum-prefix-length'.
-
-If `company-begin-commands' is a list, it should include `c-electric-lt-gt'
-and `c-electric-colon', for automatic completion right after \">\" and
-\":\"."
- :type 'boolean)
-
-(defcustom company-clang-use-compile-flags-txt nil
- "When non-nil, use flags from compile_flags.txt if present.
-
-The lines from that files will be appended to `company-clang-arguments'.
-
-And if such file is found, Clang is called from the directory containing
-it. That allows the flags use relative file names within the project."
- :type 'boolean
- :safe 'booleanp)
-
-(defcustom company-clang-arguments nil
- "Additional arguments to pass to clang when completing.
-Prefix files (-include ...) can be selected with `company-clang-set-prefix'
-or automatically through a custom `company-clang-prefix-guesser'."
- :type '(repeat (string :tag "Argument")))
-
-(defcustom company-clang-prefix-guesser 'company-clang-guess-prefix
- "A function to determine the prefix file for the current buffer."
- :type '(function :tag "Guesser function" nil))
-
-(defvar company-clang-modes '(c-mode c++-mode objc-mode)
- "Major modes which clang may complete.")
-
-(defcustom company-clang-insert-arguments t
- "When non-nil, insert function arguments as a template after completion."
- :type 'boolean
- :package-version '(company . "0.8.0"))
-
-;; prefix ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar company-clang--prefix nil)
-
-(defsubst company-clang--guess-pch-file (file)
- (let ((dir (directory-file-name (file-name-directory file))))
- (when (equal (file-name-nondirectory dir) "Classes")
- (setq dir (file-name-directory dir)))
- (car (directory-files dir t "\\([^.]h\\|[^h]\\).pch\\'" t))))
-
-(defsubst company-clang--file-substring (file beg end)
- (with-temp-buffer
- (insert-file-contents-literally file nil beg end)
- (buffer-string)))
-
-(defun company-clang-guess-prefix ()
- "Try to guess the prefix file for the current buffer."
- ;; Prefixes seem to be called .pch. Pre-compiled headers do, too.
- ;; So we look at the magic number to rule them out.
- (let* ((file (company-clang--guess-pch-file buffer-file-name))
- (magic-number (and file (company-clang--file-substring file 0 4))))
- (unless (member magic-number '("CPCH" "gpch"))
- file)))
-
-(defun company-clang-set-prefix (&optional prefix)
- "Use PREFIX as a prefix (-include ...) file for clang completion."
- (interactive (let ((def (funcall company-clang-prefix-guesser)))
- (unless (stringp def)
- (setq def default-directory))
- (list (read-file-name "Prefix file: "
- (when def (file-name-directory def))
- def t (when def (file-name-nondirectory def))))))
- ;; TODO: pre-compile?
- (setq company-clang--prefix (and (stringp prefix)
- (file-regular-p prefix)
- prefix)))
-
-;; Clean-up on exit.
-(add-hook 'kill-emacs-hook 'company-clang-set-prefix)
-
-;; parsing ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; TODO: Handle Pattern (syntactic hints would be neat).
-;; Do we ever see OVERLOAD (or OVERRIDE)?
-(defconst company-clang--completion-pattern
- "^COMPLETION: \\_<\\(%s[a-zA-Z0-9_:]*\\)\\(?:\\(?: (InBase)\\)? : \\(.*\\)$\\)?$")
-
-(defconst company-clang--error-buffer-name "*clang-error*")
-
-(defun company-clang--lang-option ()
- (if (eq major-mode 'objc-mode)
- (if (string= "m" (file-name-extension buffer-file-name))
- "objective-c" "objective-c++")
- (substring (symbol-name major-mode) 0 -5)))
-
-(defun company-clang--parse-output (prefix _objc)
- (goto-char (point-min))
- (let ((pattern (format company-clang--completion-pattern
- (regexp-quote prefix)))
- (case-fold-search nil)
- (results (make-hash-table :test 'equal :size (/ (point-max) 100)))
- lines match)
- (while (re-search-forward pattern nil t)
- (setq match (match-string-no-properties 1))
- (unless (equal match "Pattern")
- (save-match-data
- (when (string-match ":" match)
- (setq match (substring match 0 (match-beginning 0)))))
- (let ((meta (match-string-no-properties 2)))
- ;; Avoiding duplicates:
- ;; https://github.com/company-mode/company-mode/issues/841
- (cond
- ;; Either meta != completion (not a macro)
- ((not (equal match meta))
- (puthash match meta results))
- ;; Or it's the first time we see this completion
- ((eq (gethash match results 'none) 'none)
- (puthash match nil results))))))
- (maphash
- (lambda (match meta)
- (when meta
- (put-text-property 0 1 'meta (company-clang--strip-formatting meta) match))
- (push match lines))
- results)
- lines))
-
-(defun company-clang--meta (candidate)
- (get-text-property 0 'meta candidate))
-
-(defun company-clang--annotation (candidate)
- (let ((ann (company-clang--annotation-1 candidate)))
- (if (not (and ann (string-prefix-p "(*)" ann)))
- ann
- (with-temp-buffer
- (insert ann)
- (search-backward ")")
- (let ((pt (1+ (point))))
- (re-search-forward ".\\_>" nil t)
- (delete-region pt (point)))
- (buffer-string)))))
-
-(defun company-clang--annotation-1 (candidate)
- (let ((meta (company-clang--meta candidate)))
- (cond
- ((null meta) nil)
- ((string-match "[^:]:[^:]" meta)
- (substring meta (1+ (match-beginning 0))))
- ((string-match "(anonymous)" meta) nil)
- ((string-match "\\((.*)[ a-z]*\\'\\)" meta)
- (let ((paren (match-beginning 1)))
- (if (not (eq (aref meta (1- paren)) ?>))
- (match-string 1 meta)
- (with-temp-buffer
- (insert meta)
- (goto-char paren)
- (substring meta (1- (search-backward "<"))))))))))
-
-(defun company-clang--strip-formatting (text)
- (replace-regexp-in-string
- "#]" " "
- (replace-regexp-in-string "[<{[]#\\|#[>}]" "" text t)
- t))
-
-(defun company-clang--handle-error (res args)
- (goto-char (point-min))
- (let* ((buf (get-buffer-create company-clang--error-buffer-name))
- (cmd (concat company-clang-executable " " (mapconcat 'identity args " ")))
- (pattern (format company-clang--completion-pattern ""))
- (message-truncate-lines t)
- (err (if (and (re-search-forward pattern nil t)
- ;; Something in the Windows build?
- ;; Looks like Clang doesn't always include the error text
- ;; before completions (even if exited with error).
- (> (match-beginning 0) (point-min)))
- (buffer-substring-no-properties (point-min)
- (1- (match-beginning 0)))
- ;; Warn the user more aggressively if no match was found.
- (message "clang failed with error %d: %s" res cmd)
- (buffer-string))))
-
- (with-current-buffer buf
- (let ((inhibit-read-only t))
- (erase-buffer)
- (insert (current-time-string)
- (format "\nclang failed with error %d:\n" res)
- cmd "\n\n")
- (insert err)
- (setq buffer-read-only t)
- (goto-char (point-min))))))
-
-(defun company-clang--start-process (prefix callback &rest args)
- (let* ((objc (derived-mode-p 'objc-mode))
- (buf (get-buffer-create "*clang-output*"))
- ;; Looks unnecessary in Emacs 25.1 and later.
- (process-adaptive-read-buffering nil)
- (existing-process (get-buffer-process buf)))
- (when existing-process
- (kill-process existing-process))
- (with-current-buffer buf
- (erase-buffer)
- (setq buffer-undo-list t))
- (let* ((process-connection-type nil)
- (process (apply #'start-file-process "company-clang" buf
- company-clang-executable args)))
- (set-process-sentinel
- process
- (lambda (proc status)
- (unless (string-match-p "hangup\\|killed" status)
- (funcall
- callback
- (let ((res (process-exit-status proc)))
- (with-current-buffer buf
- (unless (eq 0 res)
- (company-clang--handle-error res args))
- ;; Still try to get any useful input.
- (company-clang--parse-output prefix objc)))))))
- (unless (company-clang--auto-save-p)
- (send-region process (point-min) (point-max))
- (send-string process "\n")
- (process-send-eof process)))))
-
-(defsubst company-clang--build-location (pos)
- (save-excursion
- (goto-char pos)
- (format "%s:%d:%d"
- (if (company-clang--auto-save-p) buffer-file-name "-")
- (line-number-at-pos)
- (1+ (length
- (encode-coding-region
- (line-beginning-position)
- (point)
- 'utf-8
- t))))))
-
-(defsubst company-clang--build-complete-args (pos)
- (append '("-fsyntax-only" "-Xclang" "-code-completion-macros")
- (unless (company-clang--auto-save-p)
- (list "-x" (company-clang--lang-option)))
- (company-clang--arguments)
- (when (stringp company-clang--prefix)
- (list "-include" (expand-file-name company-clang--prefix)))
- (list "-Xclang" (format "-code-completion-at=%s"
- (company-clang--build-location pos)))
- (list (if (company-clang--auto-save-p) buffer-file-name "-"))))
-
-(defun company-clang--arguments ()
- (let ((fname "compile_flags.txt")
- (args company-clang-arguments)
- current-dir-rel)
- (when company-clang-use-compile-flags-txt
- (let ((dir (locate-dominating-file default-directory fname)))
- (when dir
- (setq current-dir-rel (file-relative-name default-directory dir))
- (setq default-directory dir)
- (with-temp-buffer
- (insert-file-contents fname)
- (setq args
- (append
- args
- (split-string (buffer-substring-no-properties
- (point-min) (point-max))
- "[\n\r]+"
- t
- "[ \t]+"))))
- (unless (equal current-dir-rel "./")
- (push (format "-I%s" current-dir-rel) args)))))
- args))
-
-(defun company-clang--candidates (prefix callback)
- (and (company-clang--auto-save-p)
- (buffer-modified-p)
- (basic-save-buffer))
- (when (null company-clang--prefix)
- (company-clang-set-prefix (or (funcall company-clang-prefix-guesser)
- 'none)))
- (let ((default-directory default-directory))
- (apply 'company-clang--start-process
- prefix
- callback
- (company-clang--build-complete-args
- (if (company-clang--check-version 4.0 9.0)
- (point)
- (- (point) (length prefix)))))))
-
-(defun company-clang--prefix ()
- (if company-clang-begin-after-member-access
- (company-grab-symbol-cons "\\.\\|->\\|::" 2)
- (company-grab-symbol)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst company-clang-required-version 1.1)
-
-(defvar company-clang--version nil)
-
-(defun company-clang--auto-save-p ()
- (not
- (company-clang--check-version 2.9 3.1)))
-
-(defun company-clang--check-version (min apple-min)
- (pcase company-clang--version
- (`(apple . ,ver) (>= ver apple-min))
- (`(normal . ,ver) (>= ver min))
- (_ (error "pcase-exhaustive is not in Emacs 24.3!"))))
-
-(defsubst company-clang-version ()
- "Return the version of `company-clang-executable'."
- (with-temp-buffer
- (call-process company-clang-executable nil t nil "--version")
- (goto-char (point-min))
- (if (re-search-forward
- "\\(clang\\|Apple LLVM\\|bcc32x\\|bcc64\\) version \\([0-9.]+\\)" nil t)
- (cons
- (if (equal (match-string-no-properties 1) "Apple LLVM")
- 'apple
- 'normal)
- (string-to-number (match-string-no-properties 2)))
- 0)))
-
-(defun company-clang (command &optional arg &rest ignored)
- "`company-mode' completion backend for Clang.
-Clang is a parser for C and ObjC. Clang version 1.1 or newer is required.
-
-Additional command line arguments can be specified in
-`company-clang-arguments'. Prefix files (-include ...) can be selected
-with `company-clang-set-prefix' or automatically through a custom
-`company-clang-prefix-guesser'.
-
-With Clang versions before 2.9, we have to save the buffer before
-performing completion. With Clang 2.9 and later, buffer contents are
-passed via standard input."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-clang))
- (init (when (memq major-mode company-clang-modes)
- (unless company-clang-executable
- (error "Company found no clang executable"))
- (setq company-clang--version (company-clang-version))
- (unless (company-clang--check-version
- company-clang-required-version
- company-clang-required-version)
- (error "Company requires clang version %s"
- company-clang-required-version))))
- (prefix (and (memq major-mode company-clang-modes)
- buffer-file-name
- company-clang-executable
- (not (company-in-string-or-comment))
- (or (company-clang--prefix) 'stop)))
- (candidates (cons :async
- (lambda (cb) (company-clang--candidates arg cb))))
- (meta (company-clang--meta arg))
- (annotation (company-clang--annotation arg))
- (post-completion (let ((anno (company-clang--annotation arg)))
- (when (and company-clang-insert-arguments anno)
- (insert anno)
- (if (string-match "\\`:[^:]" anno)
- (company-template-objc-templatify anno)
- (company-template-c-like-templatify
- (concat arg anno))))))))
-
-(provide 'company-clang)
-;;; company-clang.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-cmake.el b/emacs.d/elpa/company-20201014.2251/company-cmake.el
deleted file mode 100644
index 5a05c75..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-cmake.el
+++ /dev/null
@@ -1,207 +0,0 @@
-;;; company-cmake.el --- company-mode completion backend for CMake
-
-;; Copyright (C) 2013-2014, 2017-2018 Free Software Foundation, Inc.
-
-;; Author: Chen Bin <chenbin DOT sh AT gmail>
-;; Version: 0.2
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; company-cmake offers completions for module names, variable names and
-;; commands used by CMake. And their descriptions.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defgroup company-cmake nil
- "Completion backend for CMake."
- :group 'company)
-
-(defcustom company-cmake-executable
- (executable-find "cmake")
- "Location of cmake executable."
- :type 'file)
-
-(defvar company-cmake-executable-arguments
- '("--help-command-list"
- "--help-module-list"
- "--help-property-list"
- "--help-variable-list")
- "The arguments we pass to cmake, separately.
-They affect which types of symbols we get completion candidates for.")
-
-(defvar company-cmake--completion-pattern
- "^\\(%s[a-zA-Z0-9_<>]%s\\)$"
- "Regexp to match the candidates.")
-
-(defvar company-cmake-modes '(cmake-mode)
- "Major modes in which cmake may complete.")
-
-(defvar company-cmake--candidates-cache nil
- "Cache for the raw candidates.")
-
-(defvar company-cmake--meta-command-cache nil
- "Cache for command arguments to retrieve descriptions for the candidates.")
-
-(defun company-cmake--replace-tags (rlt)
- (setq rlt (replace-regexp-in-string
- "\\(.*?\\(IS_GNU\\)?\\)<LANG>\\(.*\\)"
- (lambda (_match)
- (mapconcat 'identity
- (if (match-beginning 2)
- '("\\1CXX\\3" "\\1C\\3" "\\1G77\\3")
- '("\\1CXX\\3" "\\1C\\3" "\\1Fortran\\3"))
- "\n"))
- rlt t))
- (setq rlt (replace-regexp-in-string
- "\\(.*\\)<CONFIG>\\(.*\\)"
- (mapconcat 'identity '("\\1DEBUG\\2" "\\1RELEASE\\2"
- "\\1RELWITHDEBINFO\\2" "\\1MINSIZEREL\\2")
- "\n")
- rlt))
- rlt)
-
-(defun company-cmake--fill-candidates-cache (arg)
- "Fill candidates cache if needed."
- (let (rlt)
- (unless company-cmake--candidates-cache
- (setq company-cmake--candidates-cache (make-hash-table :test 'equal)))
-
- ;; If hash is empty, fill it.
- (unless (gethash arg company-cmake--candidates-cache)
- (with-temp-buffer
- (let ((res (call-process company-cmake-executable nil t nil arg)))
- (unless (zerop res)
- (message "cmake executable exited with error=%d" res)))
- (setq rlt (buffer-string)))
- (setq rlt (company-cmake--replace-tags rlt))
- (puthash arg rlt company-cmake--candidates-cache))
- ))
-
-(defun company-cmake--parse (prefix content cmd)
- (let ((start 0)
- (pattern (format company-cmake--completion-pattern
- (regexp-quote prefix)
- (if (zerop (length prefix)) "+" "*")))
- (lines (split-string content "\n"))
- match
- rlt)
- (dolist (line lines)
- (when (string-match pattern line)
- (let ((match (match-string 1 line)))
- (when match
- (puthash match cmd company-cmake--meta-command-cache)
- (push match rlt)))))
- rlt))
-
-(defun company-cmake--candidates (prefix)
- (let (results
- cmd-opts
- str)
-
- (unless company-cmake--meta-command-cache
- (setq company-cmake--meta-command-cache (make-hash-table :test 'equal)))
-
- (dolist (arg company-cmake-executable-arguments)
- (company-cmake--fill-candidates-cache arg)
- (setq cmd-opts (replace-regexp-in-string "-list$" "" arg) )
-
- (setq str (gethash arg company-cmake--candidates-cache))
- (when str
- (setq results (nconc results
- (company-cmake--parse prefix str cmd-opts)))))
- results))
-
-(defun company-cmake--unexpand-candidate (candidate)
- (cond
- ((string-match "^CMAKE_\\(C\\|CXX\\|Fortran\\)\\(_.*\\)$" candidate)
- (setq candidate (concat "CMAKE_<LANG>" (match-string 2 candidate))))
-
- ;; C flags
- ((string-match "^\\(.*_\\)IS_GNU\\(C\\|CXX\\|G77\\)$" candidate)
- (setq candidate (concat (match-string 1 candidate) "IS_GNU<LANG>")))
-
- ;; C flags
- ((string-match "^\\(.*_\\)OVERRIDE_\\(C\\|CXX\\|Fortran\\)$" candidate)
- (setq candidate (concat (match-string 1 candidate) "OVERRIDE_<LANG>")))
-
- ((string-match "^\\(.*\\)\\(_DEBUG\\|_RELEASE\\|_RELWITHDEBINFO\\|_MINSIZEREL\\)\\(.*\\)$" candidate)
- (setq candidate (concat (match-string 1 candidate)
- "_<CONFIG>"
- (match-string 3 candidate)))))
- candidate)
-
-(defun company-cmake--meta (candidate)
- (let ((cmd-opts (gethash candidate company-cmake--meta-command-cache))
- result)
- (setq candidate (company-cmake--unexpand-candidate candidate))
-
- ;; Don't cache the documentation of every candidate (command)
- ;; Cache in this case will cost too much memory.
- (with-temp-buffer
- (call-process company-cmake-executable nil t nil cmd-opts candidate)
- ;; Go to the third line, trim it and return the result.
- ;; Tested with cmake 2.8.9.
- (goto-char (point-min))
- (forward-line 2)
- (setq result (buffer-substring-no-properties (line-beginning-position)
- (line-end-position)))
- (setq result (replace-regexp-in-string "^[ \t\n\r]+" "" result))
- result)))
-
-(defun company-cmake--doc-buffer (candidate)
- (let ((cmd-opts (gethash candidate company-cmake--meta-command-cache)))
-
- (setq candidate (company-cmake--unexpand-candidate candidate))
- (with-temp-buffer
- (call-process company-cmake-executable nil t nil cmd-opts candidate)
- ;; Go to the third line, trim it and return the doc buffer.
- ;; Tested with cmake 2.8.9.
- (goto-char (point-min))
- (forward-line 2)
- (company-doc-buffer
- (buffer-substring-no-properties (line-beginning-position)
- (point-max))))))
-
-(defun company-cmake-prefix-dollar-brace-p ()
- "Test if the current symbol follows ${."
- (save-excursion
- (skip-syntax-backward "w_")
- (and (eq (char-before (point)) ?\{)
- (eq (char-before (1- (point))) ?$))))
-
-(defun company-cmake (command &optional arg &rest ignored)
- "`company-mode' completion backend for CMake.
-CMake is a cross-platform, open-source make system."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-cmake))
- (init (when (memq major-mode company-cmake-modes)
- (unless company-cmake-executable
- (error "Company found no cmake executable"))))
- (prefix (and (memq major-mode company-cmake-modes)
- (or (not (company-in-string-or-comment))
- (company-cmake-prefix-dollar-brace-p))
- (company-grab-symbol)))
- (candidates (company-cmake--candidates arg))
- (meta (company-cmake--meta arg))
- (doc-buffer (company-cmake--doc-buffer arg))
- ))
-
-(provide 'company-cmake)
-;;; company-cmake.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-css.el b/emacs.d/elpa/company-20201014.2251/company-css.el
deleted file mode 100644
index d3ece74..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-css.el
+++ /dev/null
@@ -1,446 +0,0 @@
-;;; company-css.el --- company-mode completion backend for css-mode -*- lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2014, 2018 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; In Emacs >= 26, company-capf is used instead.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(declare-function web-mode-language-at-pos "web-mode" (&optional pos))
-
-(defconst company-css-property-alist
- ;; see http://www.w3.org/TR/CSS21/propidx.html
- '(("azimuth" angle "left-side" "far-left" "left" "center-left" "center"
- "center-right" "right" "far-right" "right-side" "behind" "leftwards"
- "rightwards")
- ("background" background-color background-image background-repeat
- background-attachment background-position
- background-clip background-origin background-size)
- ("background-attachment" "scroll" "fixed")
- ("background-color" color "transparent")
- ("background-image" uri "none")
- ("background-position" percentage length "left" "center" "right" percentage
- length "top" "center" "bottom" "left" "center" "right" "top" "center"
- "bottom")
- ("background-repeat" "repeat" "repeat-x" "repeat-y" "no-repeat")
- ("border" border-width border-style border-color)
- ("border-bottom" border)
- ("border-bottom-color" border-color)
- ("border-bottom-style" border-style)
- ("border-bottom-width" border-width)
- ("border-collapse" "collapse" "separate")
- ("border-color" color "transparent")
- ("border-left" border)
- ("border-left-color" border-color)
- ("border-left-style" border-style)
- ("border-left-width" border-width)
- ("border-right" border)
- ("border-right-color" border-color)
- ("border-right-style" border-style)
- ("border-right-width" border-width)
- ("border-spacing" length length)
- ("border-style" border-style)
- ("border-top" border)
- ("border-top-color" border-color)
- ("border-top-style" border-style)
- ("border-top-width" border-width)
- ("border-width" border-width)
- ("bottom" length percentage "auto")
- ("caption-side" "top" "bottom")
- ("clear" "none" "left" "right" "both")
- ("clip" shape "auto")
- ("color" color)
- ("content" "normal" "none" string uri counter "attr()" "open-quote"
- "close-quote" "no-open-quote" "no-close-quote")
- ("counter-increment" identifier integer "none")
- ("counter-reset" identifier integer "none")
- ("cue" cue-before cue-after)
- ("cue-after" uri "none")
- ("cue-before" uri "none")
- ("cursor" uri "*" "auto" "crosshair" "default" "pointer" "move" "e-resize"
- "ne-resize" "nw-resize" "n-resize" "se-resize" "sw-resize" "s-resize"
- "w-resize" "text" "wait" "help" "progress")
- ("direction" "ltr" "rtl")
- ("display" "inline" "block" "list-item" "run-in" "inline-block" "table"
- "inline-table" "table-row-group" "table-header-group" "table-footer-group"
- "table-row" "table-column-group" "table-column" "table-cell"
- "table-caption" "none")
- ("elevation" angle "below" "level" "above" "higher" "lower")
- ("empty-cells" "show" "hide")
- ("float" "left" "right" "none")
- ("font" font-style font-weight font-size "/" line-height
- font-family "caption" "icon" "menu" "message-box" "small-caption"
- "status-bar" "normal" "small-caps"
- ;; CSS3
- font-stretch)
- ("font-family" family-name generic-family)
- ("font-size" absolute-size relative-size length percentage)
- ("font-style" "normal" "italic" "oblique")
- ("font-weight" "normal" "bold" "bolder" "lighter" "100" "200" "300" "400"
- "500" "600" "700" "800" "900")
- ("height" length percentage "auto")
- ("left" length percentage "auto")
- ("letter-spacing" "normal" length)
- ("line-height" "normal" number length percentage)
- ("list-style" list-style-type list-style-position list-style-image)
- ("list-style-image" uri "none")
- ("list-style-position" "inside" "outside")
- ("list-style-type" "disc" "circle" "square" "decimal" "decimal-leading-zero"
- "lower-roman" "upper-roman" "lower-greek" "lower-latin" "upper-latin"
- "armenian" "georgian" "lower-alpha" "upper-alpha" "none")
- ("margin" margin-width)
- ("margin-bottom" margin-width)
- ("margin-left" margin-width)
- ("margin-right" margin-width)
- ("margin-top" margin-width)
- ("max-height" length percentage "none")
- ("max-width" length percentage "none")
- ("min-height" length percentage)
- ("min-width" length percentage)
- ("orphans" integer)
- ("outline" outline-color outline-style outline-width)
- ("outline-color" color "invert")
- ("outline-style" border-style)
- ("outline-width" border-width)
- ("overflow" "visible" "hidden" "scroll" "auto"
- ;; CSS3:
- "no-display" "no-content")
- ("padding" padding-width)
- ("padding-bottom" padding-width)
- ("padding-left" padding-width)
- ("padding-right" padding-width)
- ("padding-top" padding-width)
- ("page-break-after" "auto" "always" "avoid" "left" "right")
- ("page-break-before" "auto" "always" "avoid" "left" "right")
- ("page-break-inside" "avoid" "auto")
- ("pause" time percentage)
- ("pause-after" time percentage)
- ("pause-before" time percentage)
- ("pitch" frequency "x-low" "low" "medium" "high" "x-high")
- ("pitch-range" number)
- ("play-during" uri "mix" "repeat" "auto" "none")
- ("position" "static" "relative" "absolute" "fixed")
- ("quotes" string string "none")
- ("richness" number)
- ("right" length percentage "auto")
- ("speak" "normal" "none" "spell-out")
- ("speak-header" "once" "always")
- ("speak-numeral" "digits" "continuous")
- ("speak-punctuation" "code" "none")
- ("speech-rate" number "x-slow" "slow" "medium" "fast" "x-fast" "faster"
- "slower")
- ("stress" number)
- ("table-layout" "auto" "fixed")
- ("text-align" "left" "right" "center" "justify")
- ("text-indent" length percentage)
- ("text-transform" "capitalize" "uppercase" "lowercase" "none")
- ("top" length percentage "auto")
- ("unicode-bidi" "normal" "embed" "bidi-override")
- ("vertical-align" "baseline" "sub" "super" "top" "text-top" "middle"
- "bottom" "text-bottom" percentage length)
- ("visibility" "visible" "hidden" "collapse")
- ("voice-family" specific-voice generic-voice "*" specific-voice
- generic-voice)
- ("volume" number percentage "silent" "x-soft" "soft" "medium" "loud"
- "x-loud")
- ("white-space" "normal" "pre" "nowrap" "pre-wrap" "pre-line")
- ("widows" integer)
- ("width" length percentage "auto")
- ("word-spacing" "normal" length)
- ("z-index" "auto" integer)
- ;; CSS3
- ("align-content" align-stretch "space-between" "space-around")
- ("align-items" align-stretch "baseline")
- ("align-self" align-items "auto")
- ("animation" animation-name animation-duration animation-timing-function
- animation-delay animation-iteration-count animation-direction
- animation-fill-mode)
- ("animation-delay" time)
- ("animation-direction" "normal" "reverse" "alternate" "alternate-reverse")
- ("animation-duration" time)
- ("animation-fill-mode" "none" "forwards" "backwards" "both")
- ("animation-iteration-count" integer "infinite")
- ("animation-name" "none")
- ("animation-play-state" "paused" "running")
- ("animation-timing-function" transition-timing-function
- "step-start" "step-end" "steps(,)")
- ("backface-visibility" "visible" "hidden")
- ("background-clip" background-origin)
- ("background-origin" "border-box" "padding-box" "content-box")
- ("background-size" length percentage "auto" "cover" "contain")
- ("border-image" border-image-outset border-image-repeat border-image-source
- border-image-slice border-image-width)
- ("border-image-outset" length)
- ("border-image-repeat" "stretch" "repeat" "round" "space")
- ("border-image-source" uri "none")
- ("border-image-slice" length)
- ("border-image-width" length percentage)
- ("border-radius" length)
- ("border-top-left-radius" length)
- ("border-top-right-radius" length)
- ("border-bottom-left-radius" length)
- ("border-bottom-right-radius" length)
- ("box-decoration-break" "slice" "clone")
- ("box-shadow" length color)
- ("box-sizing" "content-box" "border-box")
- ("break-after" "auto" "always" "avoid" "left" "right" "page" "column"
- "avoid-page" "avoid-column")
- ("break-before" break-after)
- ("break-inside" "avoid" "auto")
- ("columns" column-width column-count)
- ("column-count" integer)
- ("column-fill" "auto" "balance")
- ("column-gap" length "normal")
- ("column-rule" column-rule-width column-rule-style column-rule-color)
- ("column-rule-color" color)
- ("column-rule-style" border-style)
- ("column-rule-width" border-width)
- ("column-span" "all" "none")
- ("column-width" length "auto")
- ("filter" url "blur()" "brightness()" "contrast()" "drop-shadow()"
- "grayscale()" "hue-rotate()" "invert()" "opacity()" "saturate()" "sepia()")
- ("flex" flex-grow flex-shrink flex-basis)
- ("flex-basis" percentage length "auto")
- ("flex-direction" "row" "row-reverse" "column" "column-reverse")
- ("flex-flow" flex-direction flex-wrap)
- ("flex-grow" number)
- ("flex-shrink" number)
- ("flex-wrap" "nowrap" "wrap" "wrap-reverse")
- ("font-feature-setting" normal string number)
- ("font-kerning" "auto" "normal" "none")
- ("font-language-override" "normal" string)
- ("font-size-adjust" "none" number)
- ("font-stretch" "normal" "ultra-condensed" "extra-condensed" "condensed"
- "semi-condensed" "semi-expanded" "expanded" "extra-expanded" "ultra-expanded")
- ("font-synthesis" "none" "weight" "style")
- ("font-variant" font-variant-alternates font-variant-caps
- font-variant-east-asian font-variant-ligatures font-variant-numeric
- font-variant-position)
- ("font-variant-alternates" "normal" "historical-forms" "stylistic()"
- "styleset()" "character-variant()" "swash()" "ornaments()" "annotation()")
- ("font-variant-caps" "normal" "small-caps" "all-small-caps" "petite-caps"
- "all-petite-caps" "unicase" "titling-caps")
- ("font-variant-east-asian" "jis78" "jis83" "jis90" "jis04" "simplified"
- "traditional" "full-width" "proportional-width" "ruby")
- ("font-variant-ligatures" "normal" "none" "common-ligatures"
- "no-common-ligatures" "discretionary-ligatures" "no-discretionary-ligatures"
- "historical-ligatures" "no-historical-ligatures" "contextual" "no-contextual")
- ("font-variant-numeric" "normal" "ordinal" "slashed-zero"
- "lining-nums" "oldstyle-nums" "proportional-nums" "tabular-nums"
- "diagonal-fractions" "stacked-fractions")
- ("font-variant-position" "normal" "sub" "super")
- ("hyphens" "none" "manual" "auto")
- ("justify-content" align-common "space-between" "space-around")
- ("line-break" "auto" "loose" "normal" "strict")
- ("marquee-direction" "forward" "reverse")
- ("marquee-play-count" integer "infinite")
- ("marquee-speed" "slow" "normal" "fast")
- ("marquee-style" "scroll" "slide" "alternate")
- ("opacity" number)
- ("order" number)
- ("outline-offset" length)
- ("overflow-x" overflow)
- ("overflow-y" overflow)
- ("overflow-style" "auto" "marquee-line" "marquee-block")
- ("overflow-wrap" "normal" "break-word")
- ("perspective" "none" length)
- ("perspective-origin" percentage length "left" "center" "right" "top" "bottom")
- ("resize" "none" "both" "horizontal" "vertical")
- ("tab-size" integer length)
- ("text-align-last" "auto" "start" "end" "left" "right" "center" "justify")
- ("text-decoration" text-decoration-color text-decoration-line text-decoration-style)
- ("text-decoration-color" color)
- ("text-decoration-line" "none" "underline" "overline" "line-through" "blink")
- ("text-decoration-style" "solid" "double" "dotted" "dashed" "wavy")
- ("text-overflow" "clip" "ellipsis")
- ("text-shadow" color length)
- ("text-underline-position" "auto" "under" "left" "right")
- ("transform" "matrix(,,,,,)" "translate(,)" "translateX()" "translateY()"
- "scale()" "scaleX()" "scaleY()" "rotate()" "skewX()" "skewY()" "none")
- ("transform-origin" perspective-origin)
- ("transform-style" "flat" "preserve-3d")
- ("transition" transition-property transition-duration
- transition-timing-function transition-delay)
- ("transition-delay" time)
- ("transition-duration" time)
- ("transition-timing-function"
- "ease" "linear" "ease-in" "ease-out" "ease-in-out" "cubic-bezier(,,,)")
- ("transition-property" "none" "all" identifier)
- ("word-wrap" overflow-wrap)
- ("word-break" "normal" "break-all" "keep-all"))
- "A list of CSS properties and their possible values.")
-
-(defconst company-css-value-classes
- '((absolute-size "xx-small" "x-small" "small" "medium" "large" "x-large"
- "xx-large")
- (align-common "flex-start" "flex-end" "center")
- (align-stretch align-common "stretch")
- (border-style "none" "hidden" "dotted" "dashed" "solid" "double" "groove"
- "ridge" "inset" "outset")
- (border-width "thick" "medium" "thin")
- (color "aqua" "black" "blue" "fuchsia" "gray" "green" "lime" "maroon" "navy"
- "olive" "orange" "purple" "red" "silver" "teal" "white" "yellow")
- (counter "counter(,)")
- (family-name "Courier" "Helvetica" "Times")
- (generic-family "serif" "sans-serif" "cursive" "fantasy" "monospace")
- (generic-voice "male" "female" "child")
- (margin-width "auto") ;; length percentage
- (relative-size "larger" "smaller")
- (shape "rect(,,,)")
- (uri "url()"))
- "A list of CSS property value classes and their contents.")
-;; missing, because not completable
-;; <angle><frequency><identifier><integer><length><number><padding-width>
-;; <percentage><specific-voice><string><time><uri>
-
-(defconst company-css-html-tags
- '("a" "abbr" "acronym" "address" "applet" "area" "b" "base" "basefont" "bdo"
- "big" "blockquote" "body" "br" "button" "caption" "center" "cite" "code"
- "col" "colgroup" "dd" "del" "dfn" "dir" "div" "dl" "dt" "em" "fieldset"
- "font" "form" "frame" "frameset" "h1" "h2" "h3" "h4" "h5" "h6" "head" "hr"
- "html" "i" "iframe" "img" "input" "ins" "isindex" "kbd" "label" "legend"
- "li" "link" "map" "menu" "meta" "noframes" "noscript" "object" "ol"
- "optgroup" "option" "p" "param" "pre" "q" "s" "samp" "script" "select"
- "small" "span" "strike" "strong" "style" "sub" "sup" "table" "tbody" "td"
- "textarea" "tfoot" "th" "thead" "title" "tr" "tt" "u" "ul" "var"
- ;; HTML5
- "section" "article" "aside" "header" "footer" "nav" "figure" "figcaption"
- "time" "mark" "main")
- "A list of HTML tags for use in CSS completion.")
-
-(defconst company-css-pseudo-classes
- '("active" "after" "before" "first" "first-child" "first-letter" "first-line"
- "focus" "hover" "lang" "left" "link" "right" "visited")
- "Identifiers for CSS pseudo-elements and pseudo-classes.")
-
-(defconst company-css-property-cache (make-hash-table :size 115 :test 'equal))
-
-(defun company-css-property-values (attribute)
- "Access the `company-css-property-alist' cached and flattened."
- (or (gethash attribute company-css-property-cache)
- (let (results)
- (dolist (value (cdr (assoc attribute company-css-property-alist)))
- (if (symbolp value)
- (dolist (child (or (cdr (assoc value company-css-value-classes))
- (company-css-property-values
- (symbol-name value))))
- (push child results))
- (push value results)))
- (setq results (sort results 'string<))
- (puthash attribute
- (if (fboundp 'delete-consecutive-dups)
- (delete-consecutive-dups results)
- (delete-dups results))
- company-css-property-cache)
- results)))
-
-;;; bracket detection
-
-(defconst company-css-braces-syntax-table
- (let ((table (make-syntax-table)))
- (setf (aref table ?{) '(4 . 125))
- (setf (aref table ?}) '(5 . 123))
- table)
- "A syntax table giving { and } paren syntax.")
-
-(defun company-css-inside-braces-p ()
- "Return non-nil, if point is within matched { and }."
- (ignore-errors
- (with-syntax-table company-css-braces-syntax-table
- (let ((parse-sexp-ignore-comments t))
- (scan-lists (point) -1 1)))))
-
-;;; tags
-(defconst company-css-tag-regexp
- (concat "\\(?:\\`\\|}\\)[[:space:]]*"
- ;; multiple
- "\\(?:"
- ;; previous tags:
- "\\(?:#\\|\\_<[[:alpha:]]\\)[[:alnum:]-#]*\\(?:\\[[^]]*\\]\\)?"
- ;; space or selectors
- "\\(?:[[:space:]]+\\|[[:space:]]*[+,>][[:space:]]*\\)"
- "\\)*"
- "\\(\\(?:#\\|\\_<[[:alpha:]]\\)\\(?:[[:alnum:]-#]*\\_>\\)?\\_>\\|\\)"
- "\\=")
- "A regular expression matching CSS tags.")
-
-;;; pseudo id
-(defconst company-css-pseudo-regexp
- (concat "\\(?:\\`\\|}\\)[[:space:]]*"
- ;; multiple
- "\\(?:"
- ;; previous tags:
- "\\(?:#\\|\\_<[[:alpha:]]\\)[[:alnum:]-#]*\\(?:\\[[^]]*\\]\\)?"
- ;; space or delimiters
- "\\(?:[[:space:]]+\\|[[:space:]]*[+,>][[:space:]]*\\)"
- "\\)*"
- "\\(?:\\(?:\\#\\|\\_<[[:alpha:]]\\)[[:alnum:]-#]*\\):"
- "\\([[:alpha:]-]+\\_>\\|\\)\\_>\\=")
- "A regular expression matching CSS pseudo classes.")
-
-;;; properties
-
-(defun company-css-grab-property ()
- "Return the CSS property before point, if any.
-Returns \"\" if no property found, but feasible at this position."
- (when (company-css-inside-braces-p)
- (company-grab-symbol)))
-
-;;; values
-(defconst company-css-property-value-regexp
- "\\_<\\([[:alpha:]-]+\\):\\(?:[^{};]*[[:space:]]+\\)?\\([^{};]*\\_>\\|\\)\\="
- "A regular expression matching CSS tags.")
-
-;;;###autoload
-(defun company-css (command &optional arg &rest ignored)
- "`company-mode' completion backend for `css-mode'."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-css))
- (prefix (and (or (derived-mode-p 'css-mode)
- (and (derived-mode-p 'web-mode)
- (string= (web-mode-language-at-pos) "css")))
- (or (company-grab company-css-tag-regexp 1)
- (company-grab company-css-pseudo-regexp 1)
- (company-grab company-css-property-value-regexp 2
- (line-beginning-position))
- (company-css-grab-property))))
- (candidates
- (cond
- ((company-grab company-css-tag-regexp 1)
- (all-completions arg company-css-html-tags))
- ((company-grab company-css-pseudo-regexp 1)
- (all-completions arg company-css-pseudo-classes))
- ((company-grab company-css-property-value-regexp 2
- (line-beginning-position))
- (all-completions arg
- (company-css-property-values
- (company-grab company-css-property-value-regexp 1))))
- ((company-css-grab-property)
- (all-completions arg company-css-property-alist))))
- (sorted t)))
-
-(provide 'company-css)
-;;; company-css.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-dabbrev-code.el b/emacs.d/elpa/company-20201014.2251/company-dabbrev-code.el
deleted file mode 100644
index 37f287c..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-dabbrev-code.el
+++ /dev/null
@@ -1,104 +0,0 @@
-;;; company-dabbrev-code.el --- dabbrev-like company-mode backend for code -*- lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2014 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-dabbrev)
-(require 'cl-lib)
-
-(defgroup company-dabbrev-code nil
- "dabbrev-like completion backend for code."
- :group 'company)
-
-(defcustom company-dabbrev-code-modes
- '(prog-mode
- batch-file-mode csharp-mode css-mode erlang-mode haskell-mode jde-mode
- lua-mode python-mode)
- "Modes that use `company-dabbrev-code'.
-In all these modes (and their derivatives) `company-dabbrev-code' will
-complete only symbols, not text in comments or strings. In other modes
-`company-dabbrev-code' will pass control to other backends
-\(e.g. `company-dabbrev'\). Value t means complete in all modes."
- :type '(choice (repeat :tag "Some modes" (symbol :tag "Major mode"))
- (const :tag "All modes" t)))
-
-(defcustom company-dabbrev-code-other-buffers t
- "Determines whether `company-dabbrev-code' should search other buffers.
-If `all', search all other buffers, except the ignored ones. If t, search
-buffers with the same major mode. If `code', search all buffers with major
-modes in `company-dabbrev-code-modes', or derived from one of them. See
-also `company-dabbrev-code-time-limit'."
- :type '(choice (const :tag "Off" nil)
- (const :tag "Same major mode" t)
- (const :tag "Code major modes" code)
- (const :tag "All" all)))
-
-(defcustom company-dabbrev-code-time-limit .1
- "Determines how long `company-dabbrev-code' should look for matches."
- :type '(choice (const :tag "Off" nil)
- (number :tag "Seconds")))
-
-(defcustom company-dabbrev-code-everywhere nil
- "Non-nil to offer completions in comments and strings."
- :type 'boolean)
-
-(defcustom company-dabbrev-code-ignore-case nil
- "Non-nil to ignore case when collecting completion candidates."
- :type 'boolean)
-
-(defun company-dabbrev-code--make-regexp (prefix)
- (concat "\\_<" (if (equal prefix "")
- "\\([a-zA-Z]\\|\\s_\\)"
- (regexp-quote prefix))
- "\\(\\sw\\|\\s_\\)*\\_>"))
-
-;;;###autoload
-(defun company-dabbrev-code (command &optional arg &rest ignored)
- "dabbrev-like `company-mode' backend for code.
-The backend looks for all symbols in the current buffer that aren't in
-comments or strings."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-dabbrev-code))
- (prefix (and (or (eq t company-dabbrev-code-modes)
- (apply #'derived-mode-p company-dabbrev-code-modes))
- (or company-dabbrev-code-everywhere
- (not (company-in-string-or-comment)))
- (or (company-grab-symbol) 'stop)))
- (candidates (let ((case-fold-search company-dabbrev-code-ignore-case))
- (company-dabbrev--search
- (company-dabbrev-code--make-regexp arg)
- company-dabbrev-code-time-limit
- (pcase company-dabbrev-code-other-buffers
- (`t (list major-mode))
- (`code company-dabbrev-code-modes)
- (`all `all))
- (not company-dabbrev-code-everywhere))))
- (ignore-case company-dabbrev-code-ignore-case)
- (duplicates t)))
-
-(provide 'company-dabbrev-code)
-;;; company-dabbrev-code.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-dabbrev.el b/emacs.d/elpa/company-20201014.2251/company-dabbrev.el
deleted file mode 100644
index 5d2f318..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-dabbrev.el
+++ /dev/null
@@ -1,206 +0,0 @@
-;;; company-dabbrev.el --- dabbrev-like company-mode completion backend -*- lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011, 2014, 2015, 2016 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defgroup company-dabbrev nil
- "dabbrev-like completion backend."
- :group 'company)
-
-(defcustom company-dabbrev-other-buffers 'all
- "Determines whether `company-dabbrev' should search other buffers.
-If `all', search all other buffers, except the ignored ones. If t, search
-buffers with the same major mode. See also `company-dabbrev-time-limit'."
- :type '(choice (const :tag "Off" nil)
- (const :tag "Same major mode" t)
- (const :tag "All" all)))
-
-(defcustom company-dabbrev-ignore-buffers "\\`[ *]"
- "Regexp matching the names of buffers to ignore.
-Or a function that returns non-nil for such buffers."
- :type '(choice (regexp :tag "Regexp")
- (function :tag "Predicate"))
- :package-version '(company . "0.9.0"))
-
-(defcustom company-dabbrev-time-limit .1
- "Determines how many seconds `company-dabbrev' should look for matches."
- :type '(choice (const :tag "Off" nil)
- (number :tag "Seconds")))
-
-(defcustom company-dabbrev-char-regexp "\\sw"
- "A regular expression matching the characters `company-dabbrev' looks for."
- :type 'regexp)
-
-(defcustom company-dabbrev-ignore-case 'keep-prefix
- "Non-nil to ignore case when collecting completion candidates.
-When it's `keep-prefix', the text before point will remain unchanged after
-candidate is inserted, even some of its characters have different case."
- :type '(choice
- (const :tag "Don't ignore case" nil)
- (const :tag "Ignore case" t)
- (const :tag "Keep case before point" keep-prefix)))
-
-(defcustom company-dabbrev-downcase 'case-replace
- "Whether to downcase the returned candidates.
-
-The value of nil means keep them as-is.
-`case-replace' means use the value of `case-replace'.
-Any other value means downcase.
-
-If you set this value to nil, you may also want to set
-`company-dabbrev-ignore-case' to any value other than `keep-prefix'."
- :type '(choice
- (const :tag "Keep as-is" nil)
- (const :tag "Downcase" t)
- (const :tag "Use case-replace" case-replace)))
-
-(defcustom company-dabbrev-minimum-length 4
- "The minimum length for the completion candidate to be included.
-This variable affects both `company-dabbrev' and `company-dabbrev-code'."
- :type 'integer
- :package-version '(company . "0.8.3"))
-
-(defcustom company-dabbrev-ignore-invisible nil
- "Non-nil to skip invisible text."
- :type 'boolean
- :package-version '(company . "0.9.0"))
-
-(defmacro company-dabbrev--time-limit-while (test start limit freq &rest body)
- (declare (indent 3) (debug t))
- `(let ((company-time-limit-while-counter 0))
- (catch 'done
- (while ,test
- ,@body
- (and ,limit
- (= (cl-incf company-time-limit-while-counter) ,freq)
- (setq company-time-limit-while-counter 0)
- (> (float-time (time-since ,start)) ,limit)
- (throw 'done 'company-time-out))))))
-
-(defun company-dabbrev--make-regexp ()
- (concat "\\(?:" company-dabbrev-char-regexp "\\)+"))
-
-(defun company-dabbrev--search-buffer (regexp pos symbols start limit
- ignore-comments)
- (save-excursion
- (cl-labels ((maybe-collect-match
- ()
- (let ((match (match-string-no-properties 0)))
- (when (and (>= (length match) company-dabbrev-minimum-length)
- (not (and company-dabbrev-ignore-invisible
- (invisible-p (match-beginning 0)))))
- (push match symbols)))))
- (goto-char (if pos (1- pos) (point-min)))
- ;; Search before pos.
- (let ((tmp-end (point)))
- (company-dabbrev--time-limit-while (and (not (input-pending-p))
- (> tmp-end (point-min)))
- start limit 1
- (ignore-errors
- (forward-char -10000))
- (forward-line 0)
- (save-excursion
- ;; Before, we used backward search, but it matches non-greedily, and
- ;; that forced us to use the "beginning/end of word" anchors in
- ;; `company-dabbrev--make-regexp'. It's also about 2x slower.
- (while (and (not (input-pending-p))
- (re-search-forward regexp tmp-end t))
- (if (and ignore-comments (save-match-data (company-in-string-or-comment)))
- (re-search-forward "\\s>\\|\\s!\\|\\s\"" tmp-end t)
- (maybe-collect-match))))
- (setq tmp-end (point))))
- (goto-char (or pos (point-min)))
- ;; Search after pos.
- (company-dabbrev--time-limit-while (and (not (input-pending-p))
- (re-search-forward regexp nil t))
- start limit 25
- (if (and ignore-comments (save-match-data (company-in-string-or-comment)))
- (re-search-forward "\\s>\\|\\s!\\|\\s\"" nil t)
- (maybe-collect-match)))
- symbols)))
-
-(defun company-dabbrev--search (regexp &optional limit other-buffer-modes
- ignore-comments)
- (let* ((start (current-time))
- (symbols (company-dabbrev--search-buffer regexp (point) nil start limit
- ignore-comments)))
- (when other-buffer-modes
- (cl-dolist (buffer (delq (current-buffer) (buffer-list)))
- (unless (if (stringp company-dabbrev-ignore-buffers)
- (string-match-p company-dabbrev-ignore-buffers
- (buffer-name buffer))
- (funcall company-dabbrev-ignore-buffers buffer))
- (with-current-buffer buffer
- (when (or (eq other-buffer-modes 'all)
- (apply #'derived-mode-p other-buffer-modes))
- (setq symbols
- (company-dabbrev--search-buffer regexp nil symbols start
- limit ignore-comments)))))
- (and limit
- (> (float-time (time-since start)) limit)
- (cl-return))))
- symbols))
-
-(defun company-dabbrev--prefix ()
- ;; Not in the middle of a word.
- (unless (looking-at company-dabbrev-char-regexp)
- ;; Emacs can't do greedy backward-search.
- (company-grab-line (format "\\(?:^\\| \\)[^ ]*?\\(\\(?:%s\\)*\\)"
- company-dabbrev-char-regexp)
- 1)))
-
-(defun company-dabbrev--filter (prefix candidates)
- (let ((completion-ignore-case company-dabbrev-ignore-case))
- (all-completions prefix candidates)))
-
-;;;###autoload
-(defun company-dabbrev (command &optional arg &rest ignored)
- "dabbrev-like `company-mode' completion backend."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-dabbrev))
- (prefix (company-dabbrev--prefix))
- (candidates
- (let* ((case-fold-search company-dabbrev-ignore-case)
- (words (company-dabbrev--search (company-dabbrev--make-regexp)
- company-dabbrev-time-limit
- (pcase company-dabbrev-other-buffers
- (`t (list major-mode))
- (`all `all))))
- (downcase-p (if (eq company-dabbrev-downcase 'case-replace)
- case-replace
- company-dabbrev-downcase)))
- (setq words (company-dabbrev--filter arg words))
- (if downcase-p
- (mapcar 'downcase words)
- words)))
- (ignore-case company-dabbrev-ignore-case)
- (duplicates t)))
-
-(provide 'company-dabbrev)
-;;; company-dabbrev.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-elisp.el b/emacs.d/elpa/company-20201014.2251/company-elisp.el
deleted file mode 100644
index db1653d..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-elisp.el
+++ /dev/null
@@ -1,226 +0,0 @@
-;;; company-elisp.el --- company-mode completion backend for Emacs Lisp -*- lexical-binding: t -*-
-
-;; Copyright (C) 2009, 2011-2013, 2017 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; In newer versions of Emacs, company-capf is used instead.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'help-mode)
-(require 'find-func)
-
-(defgroup company-elisp nil
- "Completion backend for Emacs Lisp."
- :group 'company)
-
-(defcustom company-elisp-detect-function-context t
- "If enabled, offer Lisp functions only in appropriate contexts.
-Functions are offered for completion only after ' and \(."
- :type '(choice (const :tag "Off" nil)
- (const :tag "On" t)))
-
-(defcustom company-elisp-show-locals-first t
- "If enabled, locally bound variables and functions are displayed
-first in the candidates list."
- :type '(choice (const :tag "Off" nil)
- (const :tag "On" t)))
-
-(defun company-elisp--prefix ()
- (let ((prefix (company-grab-symbol)))
- (if prefix
- (when (if (company-in-string-or-comment)
- (= (char-before (- (point) (length prefix))) ?`)
- (company-elisp--should-complete))
- prefix)
- 'stop)))
-
-(defun company-elisp--predicate (symbol)
- (or (boundp symbol)
- (fboundp symbol)
- (facep symbol)
- (featurep symbol)))
-
-(defun company-elisp--fns-regexp (&rest names)
- (concat "\\_<\\(?:cl-\\)?" (regexp-opt names) "\\*?\\_>"))
-
-(defvar company-elisp-parse-limit 30)
-(defvar company-elisp-parse-depth 100)
-
-(defvar company-elisp-defun-names '("defun" "defmacro" "defsubst"))
-
-(defvar company-elisp-var-binding-regexp
- (apply #'company-elisp--fns-regexp "let" "lambda" "lexical-let"
- company-elisp-defun-names)
- "Regular expression matching head of a multiple variable bindings form.")
-
-(defvar company-elisp-var-binding-regexp-1
- (company-elisp--fns-regexp "dolist" "dotimes")
- "Regular expression matching head of a form with one variable binding.")
-
-(defvar company-elisp-fun-binding-regexp
- (company-elisp--fns-regexp "flet" "labels")
- "Regular expression matching head of a function bindings form.")
-
-(defvar company-elisp-defuns-regexp
- (concat "([ \t\n]*"
- (apply #'company-elisp--fns-regexp company-elisp-defun-names)))
-
-(defun company-elisp--should-complete ()
- (let ((start (point))
- (depth (car (syntax-ppss))))
- (not
- (when (> depth 0)
- (save-excursion
- (up-list (- depth))
- (when (looking-at company-elisp-defuns-regexp)
- (forward-char)
- (forward-sexp 1)
- (unless (= (point) start)
- (condition-case nil
- (let ((args-end (scan-sexps (point) 2)))
- (or (null args-end)
- (> args-end start)))
- (scan-error
- t)))))))))
-
-(defun company-elisp--locals (prefix functions-p)
- (let ((regexp (concat "[ \t\n]*\\(\\_<" (regexp-quote prefix)
- "\\(?:\\sw\\|\\s_\\)*\\_>\\)"))
- (pos (point))
- res)
- (condition-case nil
- (save-excursion
- (dotimes (_ company-elisp-parse-depth)
- (up-list -1)
- (save-excursion
- (when (eq (char-after) ?\()
- (forward-char 1)
- (when (ignore-errors
- (save-excursion (forward-list)
- (<= (point) pos)))
- (skip-chars-forward " \t\n")
- (cond
- ((looking-at (if functions-p
- company-elisp-fun-binding-regexp
- company-elisp-var-binding-regexp))
- (down-list 1)
- (condition-case nil
- (dotimes (_ company-elisp-parse-limit)
- (save-excursion
- (when (looking-at "[ \t\n]*(")
- (down-list 1))
- (when (looking-at regexp)
- (cl-pushnew (match-string-no-properties 1) res)))
- (forward-sexp))
- (scan-error nil)))
- ((unless functions-p
- (looking-at company-elisp-var-binding-regexp-1))
- (down-list 1)
- (when (looking-at regexp)
- (cl-pushnew (match-string-no-properties 1) res)))))))))
- (scan-error nil))
- res))
-
-(defun company-elisp-candidates (prefix)
- (let* ((predicate (company-elisp--candidates-predicate prefix))
- (locals (company-elisp--locals prefix (eq predicate 'fboundp)))
- (globals (company-elisp--globals prefix predicate))
- (locals (cl-loop for local in locals
- when (not (member local globals))
- collect local)))
- (if company-elisp-show-locals-first
- (append (sort locals 'string<)
- (sort globals 'string<))
- (append locals globals))))
-
-(defun company-elisp--globals (prefix predicate)
- (all-completions prefix obarray predicate))
-
-(defun company-elisp--candidates-predicate (prefix)
- (let* ((completion-ignore-case nil)
- (beg (- (point) (length prefix)))
- (before (char-before beg)))
- (if (and company-elisp-detect-function-context
- (not (memq before '(?' ?`))))
- (if (and (eq before ?\()
- (not
- (save-excursion
- (ignore-errors
- (goto-char (1- beg))
- (or (company-elisp--before-binding-varlist-p)
- (progn
- (up-list -1)
- (company-elisp--before-binding-varlist-p)))))))
- 'fboundp
- 'boundp)
- 'company-elisp--predicate)))
-
-(defun company-elisp--before-binding-varlist-p ()
- (save-excursion
- (and (prog1 (search-backward "(")
- (forward-char 1))
- (looking-at company-elisp-var-binding-regexp))))
-
-(defun company-elisp--doc (symbol)
- (let* ((symbol (intern symbol))
- (doc (if (fboundp symbol)
- (documentation symbol t)
- (documentation-property symbol 'variable-documentation t))))
- (and (stringp doc)
- (string-match ".*$" doc)
- (match-string 0 doc))))
-
-;;;###autoload
-(defun company-elisp (command &optional arg &rest ignored)
- "`company-mode' completion backend for Emacs Lisp."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-elisp))
- (prefix (and (derived-mode-p 'emacs-lisp-mode 'inferior-emacs-lisp-mode)
- (company-elisp--prefix)))
- (candidates (company-elisp-candidates arg))
- (sorted company-elisp-show-locals-first)
- (meta (company-elisp--doc arg))
- (doc-buffer (let ((symbol (intern arg)))
- (save-window-excursion
- (ignore-errors
- (cond
- ((fboundp symbol) (describe-function symbol))
- ((boundp symbol) (describe-variable symbol))
- ((featurep symbol) (describe-package symbol))
- ((facep symbol) (describe-face symbol))
- (t (signal 'user-error nil)))
- (help-buffer)))))
- (location (let ((sym (intern arg)))
- (cond
- ((fboundp sym) (find-definition-noselect sym nil))
- ((boundp sym) (find-definition-noselect sym 'defvar))
- ((featurep sym) (cons (find-file-noselect (find-library-name
- (symbol-name sym)))
- 0))
- ((facep sym) (find-definition-noselect sym 'defface)))))))
-
-(provide 'company-elisp)
-;;; company-elisp.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-etags.el b/emacs.d/elpa/company-20201014.2251/company-etags.el
deleted file mode 100644
index d0c27c9..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-etags.el
+++ /dev/null
@@ -1,108 +0,0 @@
-;;; company-etags.el --- company-mode completion backend for etags
-
-;; Copyright (C) 2009-2011, 2014 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'etags)
-
-(defgroup company-etags nil
- "Completion backend for etags."
- :group 'company)
-
-(defcustom company-etags-use-main-table-list t
- "Always search `tags-table-list' if set.
-If this is disabled, `company-etags' will try to find the one table for each
-buffer automatically."
- :type '(choice (const :tag "off" nil)
- (const :tag "on" t)))
-
-(defcustom company-etags-ignore-case nil
- "Non-nil to ignore case in completion candidates."
- :type 'boolean
- :package-version '(company . "0.7.3"))
-
-(defcustom company-etags-everywhere nil
- "Non-nil to offer completions in comments and strings.
-Set it to t or to a list of major modes."
- :type '(choice (const :tag "Off" nil)
- (const :tag "Any supported mode" t)
- (repeat :tag "Some major modes"
- (symbol :tag "Major mode")))
- :package-version '(company . "0.9.0"))
-
-(defvar company-etags-modes '(prog-mode c-mode objc-mode c++-mode java-mode
- jde-mode pascal-mode perl-mode python-mode))
-
-(defvar-local company-etags-buffer-table 'unknown)
-
-(defun company-etags-find-table ()
- (let ((file (expand-file-name
- "TAGS"
- (locate-dominating-file (or buffer-file-name
- default-directory)
- "TAGS"))))
- (when (and file (file-regular-p file))
- (list file))))
-
-(defun company-etags-buffer-table ()
- (or (and company-etags-use-main-table-list tags-table-list)
- (if (eq company-etags-buffer-table 'unknown)
- (setq company-etags-buffer-table (company-etags-find-table))
- company-etags-buffer-table)))
-
-(defun company-etags--candidates (prefix)
- (let ((tags-table-list (company-etags-buffer-table))
- (tags-file-name tags-file-name)
- (completion-ignore-case company-etags-ignore-case))
- (and (or tags-file-name tags-table-list)
- (fboundp 'tags-completion-table)
- (save-excursion
- (visit-tags-table-buffer)
- (all-completions prefix (tags-completion-table))))))
-
-;;;###autoload
-(defun company-etags (command &optional arg &rest ignored)
- "`company-mode' completion backend for etags."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-etags))
- (prefix (and (apply #'derived-mode-p company-etags-modes)
- (or (eq t company-etags-everywhere)
- (apply #'derived-mode-p company-etags-everywhere)
- (not (company-in-string-or-comment)))
- (company-etags-buffer-table)
- (or (company-grab-symbol) 'stop)))
- (candidates (company-etags--candidates arg))
- (location (let ((tags-table-list (company-etags-buffer-table)))
- (when (fboundp 'find-tag-noselect)
- (save-excursion
- (let ((buffer (find-tag-noselect arg)))
- (cons buffer (with-current-buffer buffer (point))))))))
- (ignore-case company-etags-ignore-case)))
-
-(provide 'company-etags)
-;;; company-etags.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-files.el b/emacs.d/elpa/company-20201014.2251/company-files.el
deleted file mode 100644
index 8859266..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-files.el
+++ /dev/null
@@ -1,151 +0,0 @@
-;;; company-files.el --- company-mode completion backend for file names
-
-;; Copyright (C) 2009-2011, 2014-2015 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defgroup company-files nil
- "Completion backend for file names."
- :group 'company)
-
-(defcustom company-files-exclusions nil
- "File name extensions and directory names to ignore.
-The values should use the same format as `completion-ignored-extensions'."
- :type '(const string)
- :package-version '(company . "0.9.1"))
-
-(defun company-files--directory-files (dir prefix)
- ;; Don't use directory-files. It produces directories without trailing /.
- (condition-case err
- (let ((comp (sort (file-name-all-completions prefix dir)
- (lambda (s1 s2) (string-lessp (downcase s1) (downcase s2))))))
- (when company-files-exclusions
- (setq comp (company-files--exclusions-filtered comp)))
- (if (equal prefix "")
- (delete "../" (delete "./" comp))
- comp))
- (file-error nil)))
-
-(defun company-files--exclusions-filtered (completions)
- (let* ((dir-exclusions (cl-delete-if-not #'company-files--trailing-slash-p
- company-files-exclusions))
- (file-exclusions (cl-set-difference company-files-exclusions
- dir-exclusions)))
- (cl-loop for c in completions
- unless (if (company-files--trailing-slash-p c)
- (member c dir-exclusions)
- (cl-find-if (lambda (exclusion)
- (string-suffix-p exclusion c))
- file-exclusions))
- collect c)))
-
-(defvar company-files--regexps
- (let* ((root (if (eq system-type 'windows-nt)
- "[a-zA-Z]:/"
- "/"))
- (begin (concat "\\(?:\\.\\{1,2\\}/\\|~/\\|" root "\\)")))
- (list (concat "\"\\(" begin "[^\"\n]*\\)")
- (concat "\'\\(" begin "[^\'\n]*\\)")
- (concat "\\(?:[ \t=\[]\\|^\\)\\(" begin "[^ \t\n]*\\)"))))
-
-(defun company-files--grab-existing-name ()
- ;; Grab the file name.
- ;; When surrounded with quotes, it can include spaces.
- (let (file dir)
- (and (cl-dolist (regexp company-files--regexps)
- (when (setq file (company-grab-line regexp 1))
- (cl-return file)))
- (company-files--connected-p file)
- (setq dir (file-name-directory file))
- (not (string-match "//" dir))
- (file-exists-p dir)
- file)))
-
-(defun company-files--connected-p (file)
- (or (not (file-remote-p file))
- (file-remote-p file nil t)))
-
-(defun company-files--trailing-slash-p (file)
- ;; `file-directory-p' is very expensive on remotes. We are relying on
- ;; `file-name-all-completions' returning directories with trailing / instead.
- (let ((len (length file)))
- (and (> len 0) (eq (aref file (1- len)) ?/))))
-
-(defvar company-files--completion-cache nil)
-
-(defun company-files--complete (prefix)
- (let* ((dir (file-name-directory prefix))
- (file (file-name-nondirectory prefix))
- (key (list file
- (expand-file-name dir)
- (nth 5 (file-attributes dir))))
- (completion-ignore-case read-file-name-completion-ignore-case))
- (unless (company-file--keys-match-p key (car company-files--completion-cache))
- (let* ((candidates (mapcar (lambda (f) (concat dir f))
- (company-files--directory-files dir file)))
- (directories (unless (file-remote-p dir)
- (cl-remove-if-not (lambda (f)
- (and (company-files--trailing-slash-p f)
- (not (file-remote-p f))
- (company-files--connected-p f)))
- candidates)))
- (children (and directories
- (cl-mapcan (lambda (d)
- (mapcar (lambda (c) (concat d c))
- (company-files--directory-files d "")))
- directories))))
- (setq company-files--completion-cache
- (cons key (append candidates children)))))
- (all-completions prefix
- (cdr company-files--completion-cache))))
-
-(defun company-file--keys-match-p (new old)
- (and (equal (cdr old) (cdr new))
- (string-prefix-p (car old) (car new))))
-
-(defun company-files--post-completion (arg)
- (when (company-files--trailing-slash-p arg)
- (delete-char -1)))
-
-;;;###autoload
-(defun company-files (command &optional arg &rest ignored)
- "`company-mode' completion backend existing file names.
-Completions works for proper absolute and relative files paths.
-File paths with spaces are only supported inside strings."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-files))
- (prefix (company-files--grab-existing-name))
- (candidates (company-files--complete arg))
- (location (cons (dired-noselect
- (file-name-directory (directory-file-name arg))) 1))
- (post-completion (company-files--post-completion arg))
- (sorted t)
- (no-cache t)))
-
-(provide 'company-files)
-;;; company-files.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-gtags.el b/emacs.d/elpa/company-20201014.2251/company-gtags.el
deleted file mode 100644
index 598ba60..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-gtags.el
+++ /dev/null
@@ -1,119 +0,0 @@
-;;; company-gtags.el --- company-mode completion backend for GNU Global
-
-;; Copyright (C) 2009-2011, 2014-2020 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-template)
-(require 'cl-lib)
-
-(defgroup company-gtags nil
- "Completion backend for GNU Global."
- :group 'company)
-
-(define-obsolete-variable-alias
- 'company-gtags-gnu-global-program-name
- 'company-gtags-executable "earlier")
-
-(defcustom company-gtags-executable
- (executable-find "global")
- "Location of GNU global executable."
- :type 'string)
-
-(defcustom company-gtags-insert-arguments t
- "When non-nil, insert function arguments as a template after completion."
- :type 'boolean
- :package-version '(company . "0.8.1"))
-
-(defvar-local company-gtags--tags-available-p 'unknown)
-
-(defcustom company-gtags-modes '(prog-mode jde-mode)
- "Modes that use `company-gtags'.
-In all these modes (and their derivatives) `company-gtags' will perform
-completion."
- :type '(repeat (symbol :tag "Major mode"))
- :package-version '(company . "0.8.4"))
-
-(defun company-gtags--tags-available-p ()
- (if (eq company-gtags--tags-available-p 'unknown)
- (setq company-gtags--tags-available-p
- (locate-dominating-file buffer-file-name "GTAGS"))
- company-gtags--tags-available-p))
-
-(defun company-gtags--fetch-tags (prefix)
- (with-temp-buffer
- (let (tags)
- ;; For some reason Global v 6.6.3 is prone to returning exit status 1
- ;; even on successful searches when '-T' is used.
- (when (/= 3 (process-file company-gtags-executable nil
- ;; "-T" goes through all the tag files listed in GTAGSLIBPATH
- (list (current-buffer) nil) nil "-xGqT" (concat "^" prefix)))
- (goto-char (point-min))
- (cl-loop while
- (re-search-forward (concat
- "^"
- "\\([^ ]*\\)" ;; completion
- "[ \t]+\\([[:digit:]]+\\)" ;; linum
- "[ \t]+\\([^ \t]+\\)" ;; file
- "[ \t]+\\(.*\\)" ;; definition
- "$"
- ) nil t)
- collect
- (propertize (match-string 1)
- 'meta (match-string 4)
- 'location (cons (expand-file-name (match-string 3))
- (string-to-number (match-string 2)))
- ))))))
-
-(defun company-gtags--annotation (arg)
- (let ((meta (get-text-property 0 'meta arg)))
- (when (string-match (concat (regexp-quote arg) "\\((.*)\\).*") meta)
- (match-string 1 meta))))
-
-;;;###autoload
-(defun company-gtags (command &optional arg &rest ignored)
- "`company-mode' completion backend for GNU Global."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-gtags))
- (prefix (and company-gtags-executable
- buffer-file-name
- (apply #'derived-mode-p company-gtags-modes)
- (not (company-in-string-or-comment))
- (company-gtags--tags-available-p)
- (or (company-grab-symbol) 'stop)))
- (candidates (company-gtags--fetch-tags arg))
- (sorted t)
- (duplicates t)
- (annotation (company-gtags--annotation arg))
- (meta (get-text-property 0 'meta arg))
- (location (get-text-property 0 'location arg))
- (post-completion (let ((anno (company-gtags--annotation arg)))
- (when (and company-gtags-insert-arguments anno)
- (insert anno)
- (company-template-c-like-templatify anno))))))
-
-(provide 'company-gtags)
-;;; company-gtags.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-ispell.el b/emacs.d/elpa/company-20201014.2251/company-ispell.el
deleted file mode 100644
index ed658f2..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-ispell.el
+++ /dev/null
@@ -1,82 +0,0 @@
-;;; company-ispell.el --- company-mode completion backend using Ispell
-
-;; Copyright (C) 2009-2011, 2013-2016 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'ispell)
-
-(defgroup company-ispell nil
- "Completion backend using Ispell."
- :group 'company)
-
-(defcustom company-ispell-dictionary nil
- "Dictionary to use for `company-ispell'.
-If nil, use `ispell-complete-word-dict'."
- :type '(choice (const :tag "default (nil)" nil)
- (file :tag "dictionary" t)))
-
-(defvar company-ispell-available 'unknown)
-
-(defalias 'company-ispell--lookup-words
- (if (fboundp 'ispell-lookup-words)
- 'ispell-lookup-words
- 'lookup-words))
-
-(defun company-ispell-available ()
- (when (eq company-ispell-available 'unknown)
- (condition-case err
- (progn
- (company-ispell--lookup-words "WHATEVER")
- (setq company-ispell-available t))
- (error
- (message "Company-Ispell: %s" (error-message-string err))
- (setq company-ispell-available nil))))
- company-ispell-available)
-
-;;;###autoload
-(defun company-ispell (command &optional arg &rest ignored)
- "`company-mode' completion backend using Ispell."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-ispell))
- (prefix (when (company-ispell-available)
- (company-grab-word)))
- (candidates
- (let ((words (company-ispell--lookup-words
- arg
- (or company-ispell-dictionary ispell-complete-word-dict)))
- (completion-ignore-case t))
- (if (string= arg "")
- ;; Small optimization.
- words
- ;; Work around issue #284.
- (all-completions arg words))))
- (sorted t)
- (ignore-case 'keep-prefix)))
-
-(provide 'company-ispell)
-;;; company-ispell.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-keywords.el b/emacs.d/elpa/company-20201014.2251/company-keywords.el
deleted file mode 100644
index 7cafb4c..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-keywords.el
+++ /dev/null
@@ -1,314 +0,0 @@
-;;; company-keywords.el --- A company backend for programming language keywords
-
-;; Copyright (C) 2009-2011, 2016 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defun company-keywords-upper-lower (&rest lst)
- ;; Upcase order is different for _.
- (nconc (sort (mapcar 'upcase lst) 'string<) lst))
-
-(defvar company-keywords-alist
- ;; Please contribute corrections or additions.
- `((c++-mode
- ;; from https://en.cppreference.com/w/cpp/keyword
- "alignas" "alignof" "and" "and_eq" "asm" "atomic_cancel" "atomic_commit"
- "atomic_noexcept" "auto" "bitand" "bitor" "bool" "break" "case" "catch"
- "char" "char16_t" "char32_t" "char8_t" "class" "co_await" "co_return"
- "co_yield" "compl" "concept" "const" "const_cast" "consteval" "constexpr"
- "constinit" "continue" "decltype" "default" "delete" "do" "double"
- "dynamic_cast" "else" "enum" "explicit" "export" "extern" "false" "final"
- "float" "for" "friend" "goto" "if" "import" "inline" "int" "long" "module"
- "mutable" "namespace" "new" "noexcept" "not" "not_eq" "nullptr" "operator"
- "or" "or_eq" "override" "private" "protected" "public" "reflexpr" "register"
- "reinterpret_cast" "requires" "return" "short" "signed" "sizeof" "static"
- "static_assert" "static_cast" "struct" "switch" "synchronized" "template"
- "this" "thread_local" "throw" "true" "try" "typedef" "typeid" "typename"
- "union" "unsigned" "using" "virtual" "void" "volatile" "wchar_t" "while"
- "xor" "xor_eq")
- (c-mode
- ;; from https://en.cppreference.com/w/c/keyword
- "_Alignas" "_Alignof" "_Atomic" "_Bool" "_Complex" "_Generic" "_Imaginary"
- "_Noreturn" "_Static_assert" "_Thread_local"
- "auto" "break" "case" "char" "const" "continue" "default" "do"
- "double" "else" "enum" "extern" "float" "for" "goto" "if" "inline"
- "int" "long" "register" "restrict" "return" "short" "signed" "sizeof"
- "static" "struct" "switch" "typedef" "union" "unsigned" "void" "volatile"
- "while")
- (csharp-mode
- "abstract" "add" "alias" "as" "base" "bool" "break" "byte" "case"
- "catch" "char" "checked" "class" "const" "continue" "decimal" "default"
- "delegate" "do" "double" "else" "enum" "event" "explicit" "extern"
- "false" "finally" "fixed" "float" "for" "foreach" "get" "global" "goto"
- "if" "implicit" "in" "int" "interface" "internal" "is" "lock" "long"
- "namespace" "new" "null" "object" "operator" "out" "override" "params"
- "partial" "private" "protected" "public" "readonly" "ref" "remove"
- "return" "sbyte" "sealed" "set" "short" "sizeof" "stackalloc" "static"
- "string" "struct" "switch" "this" "throw" "true" "try" "typeof" "uint"
- "ulong" "unchecked" "unsafe" "ushort" "using" "value" "var" "virtual"
- "void" "volatile" "where" "while" "yield")
- (d-mode
- ;; from http://www.digitalmars.com/d/2.0/lex.html
- "abstract" "alias" "align" "asm"
- "assert" "auto" "body" "bool" "break" "byte" "case" "cast" "catch"
- "cdouble" "cent" "cfloat" "char" "class" "const" "continue" "creal"
- "dchar" "debug" "default" "delegate" "delete" "deprecated" "do"
- "double" "else" "enum" "export" "extern" "false" "final" "finally"
- "float" "for" "foreach" "foreach_reverse" "function" "goto" "idouble"
- "if" "ifloat" "import" "in" "inout" "int" "interface" "invariant"
- "ireal" "is" "lazy" "long" "macro" "mixin" "module" "new" "nothrow"
- "null" "out" "override" "package" "pragma" "private" "protected"
- "public" "pure" "real" "ref" "return" "scope" "short" "static" "struct"
- "super" "switch" "synchronized" "template" "this" "throw" "true" "try"
- "typedef" "typeid" "typeof" "ubyte" "ucent" "uint" "ulong" "union"
- "unittest" "ushort" "version" "void" "volatile" "wchar" "while" "with")
- (f90-mode .
- ;; from f90.el
- ;; ".AND." ".GE." ".GT." ".LT." ".LE." ".NE." ".OR." ".TRUE." ".FALSE."
- ,(company-keywords-upper-lower
- "abs" "abstract" "achar" "acos" "adjustl" "adjustr" "aimag" "aint"
- "align" "all" "all_prefix" "all_scatter" "all_suffix" "allocatable"
- "allocate" "allocated" "and" "anint" "any" "any_prefix" "any_scatter"
- "any_suffix" "asin" "assign" "assignment" "associate" "associated"
- "asynchronous" "atan" "atan2" "backspace" "bind" "bit_size" "block"
- "btest" "c_alert" "c_associated" "c_backspace" "c_bool"
- "c_carriage_return" "c_char" "c_double" "c_double_complex" "c_f_pointer"
- "c_f_procpointer" "c_float" "c_float_complex" "c_form_feed" "c_funloc"
- "c_funptr" "c_horizontal_tab" "c_int" "c_int16_t" "c_int32_t" "c_int64_t"
- "c_int8_t" "c_int_fast16_t" "c_int_fast32_t" "c_int_fast64_t"
- "c_int_fast8_t" "c_int_least16_t" "c_int_least32_t" "c_int_least64_t"
- "c_int_least8_t" "c_intmax_t" "c_intptr_t" "c_loc" "c_long"
- "c_long_double" "c_long_double_complex" "c_long_long" "c_new_line"
- "c_null_char" "c_null_funptr" "c_null_ptr" "c_ptr" "c_short"
- "c_signed_char" "c_size_t" "c_vertical_tab" "call" "case" "ceiling"
- "char" "character" "character_storage_size" "class" "close" "cmplx"
- "command_argument_count" "common" "complex" "conjg" "contains" "continue"
- "copy_prefix" "copy_scatter" "copy_suffix" "cos" "cosh" "count"
- "count_prefix" "count_scatter" "count_suffix" "cpu_time" "cshift"
- "cycle" "cyclic" "data" "date_and_time" "dble" "deallocate" "deferred"
- "digits" "dim" "dimension" "distribute" "do" "dot_product" "double"
- "dprod" "dynamic" "elemental" "else" "elseif" "elsewhere" "end" "enddo"
- "endfile" "endif" "entry" "enum" "enumerator" "eoshift" "epsilon" "eq"
- "equivalence" "eqv" "error_unit" "exit" "exp" "exponent" "extends"
- "extends_type_of" "external" "extrinsic" "false" "file_storage_size"
- "final" "floor" "flush" "forall" "format" "fraction" "function" "ge"
- "generic" "get_command" "get_command_argument" "get_environment_variable"
- "goto" "grade_down" "grade_up" "gt" "hpf_alignment" "hpf_distribution"
- "hpf_template" "huge" "iachar" "iall" "iall_prefix" "iall_scatter"
- "iall_suffix" "iand" "iany" "iany_prefix" "iany_scatter" "iany_suffix"
- "ibclr" "ibits" "ibset" "ichar" "ieee_arithmetic" "ieee_exceptions"
- "ieee_features" "ieee_get_underflow_mode" "ieee_set_underflow_mode"
- "ieee_support_underflow_control" "ieor" "if" "ilen" "implicit"
- "import" "include" "independent" "index" "inherit" "input_unit"
- "inquire" "int" "integer" "intent" "interface" "intrinsic" "ior"
- "iostat_end" "iostat_eor" "iparity" "iparity_prefix" "iparity_scatter"
- "iparity_suffix" "ishft" "ishftc" "iso_c_binding" "iso_fortran_env"
- "kind" "lbound" "le" "leadz" "len" "len_trim" "lge" "lgt" "lle" "llt"
- "log" "log10" "logical" "lt" "matmul" "max" "maxexponent" "maxloc"
- "maxval" "maxval_prefix" "maxval_scatter" "maxval_suffix" "merge"
- "min" "minexponent" "minloc" "minval" "minval_prefix" "minval_scatter"
- "minval_suffix" "mod" "module" "modulo" "move_alloc" "mvbits" "namelist"
- "ne" "nearest" "neqv" "new" "new_line" "nint" "non_intrinsic"
- "non_overridable" "none" "nopass" "not" "null" "nullify"
- "number_of_processors" "numeric_storage_size" "only" "onto" "open"
- "operator" "optional" "or" "output_unit" "pack" "parameter" "parity"
- "parity_prefix" "parity_scatter" "parity_suffix" "pass" "pause"
- "pointer" "popcnt" "poppar" "precision" "present" "print" "private"
- "procedure" "processors" "processors_shape" "product" "product_prefix"
- "product_scatter" "product_suffix" "program" "protected" "public"
- "pure" "radix" "random_number" "random_seed" "range" "read" "real"
- "realign" "recursive" "redistribute" "repeat" "reshape" "result"
- "return" "rewind" "rrspacing" "same_type_as" "save" "scale" "scan"
- "select" "selected_char_kind" "selected_int_kind" "selected_real_kind"
- "sequence" "set_exponent" "shape" "sign" "sin" "sinh" "size" "spacing"
- "spread" "sqrt" "stop" "subroutine" "sum" "sum_prefix" "sum_scatter"
- "sum_suffix" "system_clock" "tan" "tanh" "target" "template" "then"
- "tiny" "transfer" "transpose" "trim" "true" "type" "ubound" "unpack"
- "use" "value" "verify" "volatile" "wait" "where" "while" "with" "write"))
- (go-mode
- ;; 1. Keywords ref: https://golang.org/ref/spec#Keywords
- ;; 2. Builtin functions and types ref: https://golang.org/pkg/builtin/
- "append" "bool" "break" "byte" "cap" "case" "chan" "close" "complex" "complex128"
- "complex64" "const" "continue" "copy" "default" "defer" "delete" "else" "error"
- "fallthrough" "false" "float32" "float64" "for" "func" "go" "goto" "if" "imag"
- "import" "int" "int16" "int32" "int64" "int8" "interface" "len" "make"
- "map" "new" "nil" "package" "panic" "print" "println" "range" "real" "recover"
- "return" "rune" "select" "string" "struct" "switch" "true" "type" "uint" "uint16"
- "uint32" "uint64" "uint8" "uintptr" "var")
- (java-mode
- "abstract" "assert" "boolean" "break" "byte" "case" "catch" "char" "class"
- "continue" "default" "do" "double" "else" "enum" "extends" "final"
- "finally" "float" "for" "if" "implements" "import" "instanceof" "int"
- "interface" "long" "native" "new" "package" "private" "protected" "public"
- "return" "short" "static" "strictfp" "super" "switch" "synchronized"
- "this" "throw" "throws" "transient" "try" "void" "volatile" "while")
- (javascript-mode
- ;; https://tc39.github.io/ecma262/ + async, static and undefined
- "async" "await" "break" "case" "catch" "class" "const" "continue"
- "debugger" "default" "delete" "do" "else" "enum" "export" "extends" "false"
- "finally" "for" "function" "if" "import" "in" "instanceof" "let" "new"
- "null" "return" "static" "super" "switch" "this" "throw" "true" "try"
- "typeof" "undefined" "var" "void" "while" "with" "yield")
- (kotlin-mode
- "abstract" "annotation" "as" "break" "by" "catch" "class" "companion"
- "const" "constructor" "continue" "data" "do" "else" "enum" "false" "final"
- "finally" "for" "fun" "if" "import" "in" "init" "inner" "interface"
- "internal" "is" "lateinit" "nested" "null" "object" "open" "out" "override"
- "package" "private" "protected" "public" "return" "super" "this" "throw"
- "trait" "true" "try" "typealias" "val" "var" "when" "while")
- (objc-mode
- "@catch" "@class" "@encode" "@end" "@finally" "@implementation"
- "@interface" "@private" "@protected" "@protocol" "@public"
- "@selector" "@synchronized" "@throw" "@try" "alloc" "autorelease"
- "bycopy" "byref" "in" "inout" "oneway" "out" "release" "retain")
- (perl-mode
- ;; from cperl.el
- "AUTOLOAD" "BEGIN" "CHECK" "CORE" "DESTROY" "END" "INIT" "__END__"
- "__FILE__" "__LINE__" "abs" "accept" "alarm" "and" "atan2" "bind"
- "binmode" "bless" "caller" "chdir" "chmod" "chomp" "chop" "chown" "chr"
- "chroot" "close" "closedir" "cmp" "connect" "continue" "cos"
- "crypt" "dbmclose" "dbmopen" "defined" "delete" "die" "do" "dump" "each"
- "else" "elsif" "endgrent" "endhostent" "endnetent" "endprotoent"
- "endpwent" "endservent" "eof" "eq" "eval" "exec" "exists" "exit" "exp"
- "fcntl" "fileno" "flock" "for" "foreach" "fork" "format" "formline"
- "ge" "getc" "getgrent" "getgrgid" "getgrnam" "gethostbyaddr"
- "gethostbyname" "gethostent" "getlogin" "getnetbyaddr" "getnetbyname"
- "getnetent" "getpeername" "getpgrp" "getppid" "getpriority"
- "getprotobyname" "getprotobynumber" "getprotoent" "getpwent" "getpwnam"
- "getpwuid" "getservbyname" "getservbyport" "getservent" "getsockname"
- "getsockopt" "glob" "gmtime" "goto" "grep" "gt" "hex" "if" "index" "int"
- "ioctl" "join" "keys" "kill" "last" "lc" "lcfirst" "le" "length"
- "link" "listen" "local" "localtime" "lock" "log" "lstat" "lt" "map"
- "mkdir" "msgctl" "msgget" "msgrcv" "msgsnd" "my" "ne" "next" "no"
- "not" "oct" "open" "opendir" "or" "ord" "our" "pack" "package" "pipe"
- "pop" "pos" "print" "printf" "push" "q" "qq" "quotemeta" "qw" "qx"
- "rand" "read" "readdir" "readline" "readlink" "readpipe" "recv" "redo"
- "ref" "rename" "require" "reset" "return" "reverse" "rewinddir" "rindex"
- "rmdir" "scalar" "seek" "seekdir" "select" "semctl" "semget" "semop"
- "send" "setgrent" "sethostent" "setnetent" "setpgrp" "setpriority"
- "setprotoent" "setpwent" "setservent" "setsockopt" "shift" "shmctl"
- "shmget" "shmread" "shmwrite" "shutdown" "sin" "sleep" "socket"
- "socketpair" "sort" "splice" "split" "sprintf" "sqrt" "srand" "stat"
- "study" "sub" "substr" "symlink" "syscall" "sysopen" "sysread" "system"
- "syswrite" "tell" "telldir" "tie" "time" "times" "tr" "truncate" "uc"
- "ucfirst" "umask" "undef" "unless" "unlink" "unpack" "unshift" "untie"
- "until" "use" "utime" "values" "vec" "wait" "waitpid"
- "wantarray" "warn" "while" "write" "x" "xor" "y")
- (php-mode
- "__CLASS__" "__DIR__" "__FILE__" "__FUNCTION__" "__LINE__" "__METHOD__"
- "__NAMESPACE__" "_once" "abstract" "and" "array" "as" "break" "case"
- "catch" "cfunction" "class" "clone" "const" "continue" "declare"
- "default" "die" "do" "echo" "else" "elseif" "empty" "enddeclare"
- "endfor" "endforeach" "endif" "endswitch" "endwhile" "eval" "exception"
- "exit" "extends" "final" "for" "foreach" "function" "global"
- "goto" "if" "implements" "include" "instanceof" "interface"
- "isset" "list" "namespace" "new" "old_function" "or" "php_user_filter"
- "print" "private" "protected" "public" "require" "require_once" "return"
- "static" "switch" "this" "throw" "try" "unset" "use" "var" "while" "xor")
- (python-mode
- ;; https://docs.python.org/3/reference/lexical_analysis.html#keywords
- "False" "None" "True" "and" "as" "assert" "break" "class" "continue" "def"
- "del" "elif" "else" "except" "exec" "finally" "for" "from" "global" "if"
- "import" "in" "is" "lambda" "nonlocal" "not" "or" "pass" "print" "raise"
- "return" "try" "while" "with" "yield")
- (ruby-mode
- "BEGIN" "END" "alias" "and" "begin" "break" "case" "class" "def" "defined?"
- "do" "else" "elsif" "end" "ensure" "false" "for" "if" "in" "module"
- "next" "nil" "not" "or" "redo" "rescue" "retry" "return" "self" "super"
- "then" "true" "undef" "unless" "until" "when" "while" "yield")
- ;; From https://doc.rust-lang.org/grammar.html#keywords
- ;; but excluding unused reserved words: https://www.reddit.com/r/rust/comments/34fq0k/is_there_a_good_list_of_rusts_keywords/cqucvnj
- (rust-mode
- "Self"
- "as" "box" "break" "const" "continue" "crate" "else" "enum" "extern"
- "false" "fn" "for" "if" "impl" "in" "let" "loop" "macro" "match" "mod"
- "move" "mut" "pub" "ref" "return" "self" "static" "struct" "super"
- "trait" "true" "type" "unsafe" "use" "where" "while")
- (scala-mode
- "abstract" "case" "catch" "class" "def" "do" "else" "extends" "false"
- "final" "finally" "for" "forSome" "if" "implicit" "import" "lazy" "match"
- "new" "null" "object" "override" "package" "private" "protected"
- "return" "sealed" "super" "this" "throw" "trait" "true" "try" "type" "val"
- "var" "while" "with" "yield")
- (swift-mode
- "Protocol" "Self" "Type" "and" "as" "assignment" "associatedtype"
- "associativity" "available" "break" "case" "catch" "class" "column" "continue"
- "convenience" "default" "defer" "deinit" "didSet" "do" "dynamic" "dynamicType"
- "else" "elseif" "endif" "enum" "extension" "fallthrough" "false" "file"
- "fileprivate" "final" "for" "func" "function" "get" "guard" "higherThan" "if"
- "import" "in" "indirect" "infix" "init" "inout" "internal" "is" "lazy" "left"
- "let" "line" "lowerThan" "mutating" "nil" "none" "nonmutating" "open"
- "operator" "optional" "override" "postfix" "precedence" "precedencegroup"
- "prefix" "private" "protocol" "public" "repeat" "required" "rethrows" "return"
- "right" "selector" "self" "set" "static" "struct" "subscript" "super" "switch"
- "throw" "throws" "true" "try" "typealias" "unowned" "var" "weak" "where"
- "while" "willSet")
- (julia-mode
- "abstract" "break" "case" "catch" "const" "continue" "do" "else" "elseif"
- "end" "eval" "export" "false" "finally" "for" "function" "global" "if"
- "ifelse" "immutable" "import" "importall" "in" "let" "macro" "module"
- "otherwise" "quote" "return" "switch" "throw" "true" "try" "type"
- "typealias" "using" "while"
- )
- ;; From https://github.com/apache/thrift/blob/master/contrib/thrift.el
- (thrift-mode
- "binary" "bool" "byte" "const" "double" "enum" "exception" "extends"
- "i16" "i32" "i64" "include" "list" "map" "oneway" "optional" "required"
- "service" "set" "string" "struct" "throws" "typedef" "void"
- )
- ;; aliases
- (js2-mode . javascript-mode)
- (js2-jsx-mode . javascript-mode)
- (espresso-mode . javascript-mode)
- (js-mode . javascript-mode)
- (js-jsx-mode . javascript-mode)
- (rjsx-mode . javascript-mode)
- (cperl-mode . perl-mode)
- (jde-mode . java-mode)
- (ess-julia-mode . julia-mode)
- (enh-ruby-mode . ruby-mode))
- "Alist mapping major-modes to sorted keywords for `company-keywords'.")
-
-;;;###autoload
-(defun company-keywords (command &optional arg &rest ignored)
- "`company-mode' backend for programming language keywords."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-keywords))
- (prefix (and (assq major-mode company-keywords-alist)
- (not (company-in-string-or-comment))
- (or (company-grab-symbol) 'stop)))
- (candidates
- (let ((completion-ignore-case nil)
- (symbols (cdr (assq major-mode company-keywords-alist))))
- (all-completions arg (if (consp symbols)
- symbols
- (cdr (assq symbols company-keywords-alist))))))
- (sorted t)))
-
-(provide 'company-keywords)
-;;; company-keywords.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-nxml.el b/emacs.d/elpa/company-20201014.2251/company-nxml.el
deleted file mode 100644
index 36ff1ce..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-nxml.el
+++ /dev/null
@@ -1,143 +0,0 @@
-;;; company-nxml.el --- company-mode completion backend for nxml-mode
-
-;; Copyright (C) 2009-2011, 2013, 2018 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; In Emacs >= 26, company-capf is used instead.
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defvar rng-open-elements)
-(defvar rng-validate-mode)
-(defvar rng-in-attribute-regex)
-(defvar rng-in-attribute-value-regex)
-(declare-function rng-set-state-after "rng-nxml")
-(declare-function rng-match-possible-start-tag-names "rng-match")
-(declare-function rng-adjust-state-for-attribute "rng-nxml")
-(declare-function rng-match-possible-attribute-names "rng-match")
-(declare-function rng-adjust-state-for-attribute-value "rng-nxml")
-(declare-function rng-match-possible-value-strings "rng-match")
-
-(defconst company-nxml-token-regexp
- "\\(?:[_[:alpha:]][-._[:alnum:]]*\\_>\\)")
-
-(defvar company-nxml-in-attribute-value-regexp
- (replace-regexp-in-string "w" company-nxml-token-regexp
- "<w\\(?::w\\)?\
-\\(?:[ \t\r\n]+w\\(?::w\\)?[ \t\r\n]*=\
-\[ \t\r\n]*\\(?:\"[^\"]*\"\\|'[^']*'\\)\\)*\
-\[ \t\r\n]+\\(w\\(:w\\)?\\)[ \t\r\n]*=[ \t\r\n]*\
-\\(\"\\([^\"]*\\>\\)\\|'\\([^']*\\>\\)\\)\\="
- t t))
-
-(defvar company-nxml-in-tag-name-regexp
- (replace-regexp-in-string "w" company-nxml-token-regexp
- "<\\(/?w\\(?::w?\\)?\\)?\\=" t t))
-
-(defun company-nxml-all-completions (prefix alist)
- (let ((candidates (mapcar 'cdr alist))
- (case-fold-search nil)
- filtered)
- (when (cdar rng-open-elements)
- (push (concat "/" (cdar rng-open-elements)) candidates))
- (setq candidates (sort (all-completions prefix candidates) 'string<))
- (while candidates
- (unless (equal (car candidates) (car filtered))
- (push (car candidates) filtered))
- (pop candidates))
- (nreverse filtered)))
-
-(defmacro company-nxml-prepared (&rest body)
- (declare (indent 0) (debug t))
- `(let ((lt-pos (save-excursion (search-backward "<" nil t)))
- xmltok-dtd)
- (when (and lt-pos (= (rng-set-state-after lt-pos) lt-pos))
- ,@body)))
-
-(defun company-nxml-tag (command &optional arg &rest ignored)
- (cl-case command
- (prefix (and (derived-mode-p 'nxml-mode)
- rng-validate-mode
- (company-grab company-nxml-in-tag-name-regexp 1)))
- (candidates (company-nxml-prepared
- (company-nxml-all-completions
- arg (rng-match-possible-start-tag-names))))
- (sorted t)))
-
-(defun company-nxml-attribute (command &optional arg &rest ignored)
- (cl-case command
- (prefix (and (derived-mode-p 'nxml-mode)
- rng-validate-mode
- (memq (char-after) '(?\ ?\t ?\n)) ;; outside word
- (company-grab rng-in-attribute-regex 1)))
- (candidates (company-nxml-prepared
- (and (rng-adjust-state-for-attribute
- lt-pos (- (point) (length arg)))
- (company-nxml-all-completions
- arg (rng-match-possible-attribute-names)))))
- (sorted t)))
-
-(defun company-nxml-attribute-value (command &optional arg &rest ignored)
- (cl-case command
- (prefix (and (derived-mode-p 'nxml-mode)
- rng-validate-mode
- (and (memq (char-after) '(?' ?\" ?\ ?\t ?\n)) ;; outside word
- (looking-back company-nxml-in-attribute-value-regexp nil)
- (or (match-string-no-properties 4)
- (match-string-no-properties 5)
- ""))))
- (candidates (company-nxml-prepared
- (let (attr-start attr-end colon)
- (and (looking-back rng-in-attribute-value-regex lt-pos)
- (setq colon (match-beginning 2)
- attr-start (match-beginning 1)
- attr-end (match-end 1))
- (rng-adjust-state-for-attribute lt-pos attr-start)
- (rng-adjust-state-for-attribute-value
- attr-start colon attr-end)
- (all-completions
- arg (rng-match-possible-value-strings))))))))
-
-;;;###autoload
-(defun company-nxml (command &optional arg &rest ignored)
- "`company-mode' completion backend for `nxml-mode'."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-nxml))
- (prefix (or (company-nxml-tag 'prefix)
- (company-nxml-attribute 'prefix)
- (company-nxml-attribute-value 'prefix)))
- (candidates (cond
- ((company-nxml-tag 'prefix)
- (company-nxml-tag 'candidates arg))
- ((company-nxml-attribute 'prefix)
- (company-nxml-attribute 'candidates arg))
- ((company-nxml-attribute-value 'prefix)
- (sort (company-nxml-attribute-value 'candidates arg)
- 'string<))))
- (sorted t)))
-
-(provide 'company-nxml)
-;;; company-nxml.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-oddmuse.el b/emacs.d/elpa/company-20201014.2251/company-oddmuse.el
deleted file mode 100644
index 1b68950..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-oddmuse.el
+++ /dev/null
@@ -1,57 +0,0 @@
-;;; company-oddmuse.el --- company-mode completion backend for oddmuse-mode
-
-;; Copyright (C) 2009-2011, 2014 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(eval-when-compile (require 'yaoddmuse nil t))
-(eval-when-compile (require 'oddmuse nil t))
-
-(defvar company-oddmuse-link-regexp
- "\\(\\<[A-Z][[:alnum:]]*\\>\\)\\|\\[\\[\\([[:alnum:]]+\\>\\|\\)")
-
-(defun company-oddmuse-get-page-table ()
- (cl-case major-mode
- (yaoddmuse-mode (with-no-warnings
- (yaoddmuse-get-pagename-table yaoddmuse-wikiname)))
- (oddmuse-mode (with-no-warnings
- (oddmuse-make-completion-table oddmuse-wiki)))))
-
-;;;###autoload
-(defun company-oddmuse (command &optional arg &rest ignored)
- "`company-mode' completion backend for `oddmuse-mode'."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-oddmuse))
- (prefix (let ((case-fold-search nil))
- (and (memq major-mode '(oddmuse-mode yaoddmuse-mode))
- (looking-back company-oddmuse-link-regexp (point-at-bol))
- (or (match-string 1)
- (match-string 2)))))
- (candidates (all-completions arg (company-oddmuse-get-page-table)))))
-
-(provide 'company-oddmuse)
-;;; company-oddmuse.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-pkg.el b/emacs.d/elpa/company-20201014.2251/company-pkg.el
deleted file mode 100644
index 07e21b0..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-pkg.el
+++ /dev/null
@@ -1,12 +0,0 @@
-(define-package "company" "20201014.2251" "Modular text completion framework"
- '((emacs "24.3"))
- :commit "5f5949b6ae8ea9df94c6cb3e01d9cae43623b794" :keywords
- '("abbrev" "convenience" "matching")
- :authors
- '(("Nikolaj Schumacher"))
- :maintainer
- '("Dmitry Gutov" . "dgutov@yandex.ru")
- :url "http://company-mode.github.io/")
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/company-20201014.2251/company-semantic.el b/emacs.d/elpa/company-20201014.2251/company-semantic.el
deleted file mode 100644
index 2f6fe2a..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-semantic.el
+++ /dev/null
@@ -1,168 +0,0 @@
-;;; company-semantic.el --- company-mode completion backend using Semantic
-
-;; Copyright (C) 2009-2011, 2013-2016 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'company-template)
-(require 'cl-lib)
-
-(defvar semantic-idle-summary-function)
-(declare-function semantic-documentation-for-tag "semantic/doc" )
-(declare-function semantic-analyze-current-context "semantic/analyze")
-(declare-function semantic-analyze-possible-completions "semantic/complete")
-(declare-function semantic-analyze-find-tags-by-prefix "semantic/analyze/fcn")
-(declare-function semantic-tag-class "semantic/tag")
-(declare-function semantic-tag-name "semantic/tag")
-(declare-function semantic-tag-start "semantic/tag")
-(declare-function semantic-tag-buffer "semantic/tag")
-(declare-function semantic-active-p "semantic")
-(declare-function semantic-format-tag-prototype "semantic/format")
-
-(defgroup company-semantic nil
- "Completion backend using Semantic."
- :group 'company)
-
-(defcustom company-semantic-metadata-function 'company-semantic-summary-and-doc
- "The function turning a semantic tag into doc information."
- :type 'function)
-
-(defcustom company-semantic-begin-after-member-access t
- "When non-nil, automatic completion will start whenever the current
-symbol is preceded by \".\", \"->\" or \"::\", ignoring
-`company-minimum-prefix-length'.
-
-If `company-begin-commands' is a list, it should include `c-electric-lt-gt'
-and `c-electric-colon', for automatic completion right after \">\" and
-\":\"."
- :type 'boolean)
-
-(defcustom company-semantic-insert-arguments t
- "When non-nil, insert function arguments as a template after completion."
- :type 'boolean
- :package-version '(company . "0.9.0"))
-
-(defvar company-semantic-modes '(c-mode c++-mode jde-mode java-mode))
-
-(defvar-local company-semantic--current-tags nil
- "Tags for the current context.")
-
-(defun company-semantic-documentation-for-tag (tag)
- (when (semantic-tag-buffer tag)
- ;; When TAG's buffer is unknown, the function below raises an error.
- (semantic-documentation-for-tag tag)))
-
-(defun company-semantic-doc-or-summary (tag)
- (or (company-semantic-documentation-for-tag tag)
- (and (require 'semantic-idle nil t)
- (require 'semantic/idle nil t)
- (funcall semantic-idle-summary-function tag nil t))))
-
-(defun company-semantic-summary-and-doc (tag)
- (let ((doc (company-semantic-documentation-for-tag tag))
- (summary (funcall semantic-idle-summary-function tag nil t)))
- (and (stringp doc)
- (string-match "\n*\\(.*\\)$" doc)
- (setq doc (match-string 1 doc)))
- (concat summary
- (when doc
- (if (< (+ (length doc) (length summary) 4) (window-width))
- " -- "
- "\n"))
- doc)))
-
-(defun company-semantic-doc-buffer (tag)
- (let ((doc (company-semantic-documentation-for-tag tag)))
- (when doc
- (company-doc-buffer
- (concat (funcall semantic-idle-summary-function tag nil t)
- "\n"
- doc)))))
-
-(defsubst company-semantic-completions (prefix)
- (ignore-errors
- (let ((completion-ignore-case nil)
- (context (semantic-analyze-current-context)))
- (setq company-semantic--current-tags
- (semantic-analyze-possible-completions context 'no-unique))
- (all-completions prefix company-semantic--current-tags))))
-
-(defun company-semantic-completions-raw (prefix)
- (setq company-semantic--current-tags nil)
- (dolist (tag (semantic-analyze-find-tags-by-prefix prefix))
- (unless (eq (semantic-tag-class tag) 'include)
- (push tag company-semantic--current-tags)))
- (delete "" (mapcar 'semantic-tag-name company-semantic--current-tags)))
-
-(defun company-semantic-annotation (argument tags)
- (let* ((tag (assq argument tags))
- (kind (when tag (elt tag 1))))
- (cl-case kind
- (function (let* ((prototype (semantic-format-tag-prototype tag nil nil))
- (par-pos (string-match "(" prototype)))
- (when par-pos (substring prototype par-pos)))))))
-
-(defun company-semantic--prefix ()
- (if company-semantic-begin-after-member-access
- (company-grab-symbol-cons "\\.\\|->\\|::" 2)
- (company-grab-symbol)))
-
-;;;###autoload
-(defun company-semantic (command &optional arg &rest ignored)
- "`company-mode' completion backend using CEDET Semantic."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-semantic))
- (prefix (and (featurep 'semantic)
- (semantic-active-p)
- (memq major-mode company-semantic-modes)
- (not (company-in-string-or-comment))
- (or (company-semantic--prefix) 'stop)))
- (candidates (if (and (equal arg "")
- (not (looking-back "->\\|\\.\\|::" (- (point) 2))))
- (company-semantic-completions-raw arg)
- (company-semantic-completions arg)))
- (meta (funcall company-semantic-metadata-function
- (assoc arg company-semantic--current-tags)))
- (annotation (company-semantic-annotation arg
- company-semantic--current-tags))
- (doc-buffer (company-semantic-doc-buffer
- (assoc arg company-semantic--current-tags)))
- ;; Because "" is an empty context and doesn't return local variables.
- (no-cache (equal arg ""))
- (duplicates t)
- (location (let ((tag (assoc arg company-semantic--current-tags)))
- (when (buffer-live-p (semantic-tag-buffer tag))
- (cons (semantic-tag-buffer tag)
- (semantic-tag-start tag)))))
- (post-completion (let ((anno (company-semantic-annotation
- arg company-semantic--current-tags)))
- (when (and company-semantic-insert-arguments anno)
- (insert anno)
- (company-template-c-like-templatify (concat arg anno)))
- ))))
-
-(provide 'company-semantic)
-;;; company-semantic.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-template.el b/emacs.d/elpa/company-20201014.2251/company-template.el
deleted file mode 100644
index be4c41f..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-template.el
+++ /dev/null
@@ -1,272 +0,0 @@
-;;; company-template.el --- utility library for template expansion
-
-;; Copyright (C) 2009, 2010, 2014-2017 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'cl-lib)
-
-(defface company-template-field
- '((((background dark)) (:background "yellow" :foreground "black"))
- (((background light)) (:background "orange" :foreground "black")))
- "Face used for editable text in template fields."
- :group 'company-faces)
-
-(defvar company-template-forward-field-item
- '(menu-item "" company-template-forward-field
- :filter company-template--keymap-filter))
-
-(defvar company-template-nav-map
- (let ((keymap (make-sparse-keymap)))
- (define-key keymap [tab] company-template-forward-field-item)
- (define-key keymap (kbd "TAB") company-template-forward-field-item)
- keymap))
-
-(defvar company-template-clear-field-item
- '(menu-item "" company-template-clear-field
- :filter company-template--keymap-filter))
-
-(defvar company-template-field-map
- (let ((keymap (make-sparse-keymap)))
- (set-keymap-parent keymap company-template-nav-map)
- (define-key keymap (kbd "C-d") company-template-clear-field-item)
- keymap))
-
-(defvar-local company-template--buffer-templates nil)
-
-;; interactive ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-templates-at (pos)
- (let (os)
- (dolist (o (overlays-at pos))
- ;; FIXME: Always return the whole list of templates?
- ;; We remove templates not at point after every command.
- (when (memq o company-template--buffer-templates)
- (push o os)))
- os))
-
-(defun company-template-move-to-first (templ)
- (interactive)
- (goto-char (overlay-start templ))
- (company-template-forward-field))
-
-(defun company-template-forward-field ()
- (interactive)
- (let ((start (point))
- (next-field-start (company-template-find-next-field)))
- (push-mark)
- (goto-char next-field-start)
- (company-template-remove-field (company-template-field-at start))))
-
-(defun company-template-clear-field ()
- "Clear the field at point."
- (interactive)
- (let ((ovl (company-template-field-at (point))))
- (when ovl
- (company-template-remove-field ovl t)
- (let ((after-clear-fn
- (overlay-get ovl 'company-template-after-clear)))
- (when (functionp after-clear-fn)
- (funcall after-clear-fn))))))
-
-(defun company-template--keymap-filter (cmd)
- (unless (run-hook-with-args-until-success 'yas-keymap-disable-hook)
- cmd))
-
-(defun company-template--after-clear-c-like-field ()
- "Function that can be called after deleting a field of a c-like template.
-For c-like templates it is set as `after-post-fn' property on fields in
-`company-template-add-field'. If there is a next field, delete everything
-from point to it. If there is no field after point, remove preceding comma
-if present."
- (let* ((pos (point))
- (next-field-start (company-template-find-next-field))
- (last-field-p (not (company-template-field-at next-field-start))))
- (cond ((and (not last-field-p)
- (< pos next-field-start)
- (string-match "^[ ]*,+[ ]*$" (buffer-substring-no-properties
- pos next-field-start)))
- (delete-region pos next-field-start))
- ((and last-field-p
- (looking-back ",+[ ]*" (line-beginning-position)))
- (delete-region (match-beginning 0) pos)))))
-
-(defun company-template-find-next-field ()
- (let* ((start (point))
- (templates (company-template-templates-at start))
- (minimum (apply 'max (mapcar 'overlay-end templates)))
- (fields (cl-loop for templ in templates
- append (overlay-get templ 'company-template-fields))))
- (dolist (pos (mapcar 'overlay-start fields) minimum)
- (and pos
- (> pos start)
- (< pos minimum)
- (setq minimum pos)))))
-
-(defun company-template-field-at (&optional point)
- (cl-loop for ovl in (overlays-at (or point (point)))
- when (overlay-get ovl 'company-template-parent)
- return ovl))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-declare-template (beg end)
- (let ((ov (make-overlay beg end)))
- ;; (overlay-put ov 'face 'highlight)
- (overlay-put ov 'keymap company-template-nav-map)
- (overlay-put ov 'priority 101)
- (overlay-put ov 'evaporate t)
- (push ov company-template--buffer-templates)
- (add-hook 'post-command-hook 'company-template-post-command nil t)
- ov))
-
-(defun company-template-remove-template (templ)
- (mapc 'company-template-remove-field
- (overlay-get templ 'company-template-fields))
- (setq company-template--buffer-templates
- (delq templ company-template--buffer-templates))
- (delete-overlay templ))
-
-(defun company-template-add-field (templ beg end &optional display after-clear-fn)
- "Add new field to template TEMPL spanning from BEG to END.
-When DISPLAY is non-nil, set the respective property on the overlay.
-Leave point at the end of the field.
-AFTER-CLEAR-FN is a function that can be used to apply custom behavior
-after deleting a field in `company-template-remove-field'."
- (cl-assert templ)
- (when (> end (overlay-end templ))
- (move-overlay templ (overlay-start templ) end))
- (let ((ov (make-overlay beg end))
- (siblings (overlay-get templ 'company-template-fields)))
- ;; (overlay-put ov 'evaporate t)
- (overlay-put ov 'intangible t)
- (overlay-put ov 'face 'company-template-field)
- (when display
- (overlay-put ov 'display display))
- (overlay-put ov 'company-template-parent templ)
- (overlay-put ov 'insert-in-front-hooks '(company-template-insert-hook))
- (when after-clear-fn
- (overlay-put ov 'company-template-after-clear after-clear-fn))
- (overlay-put ov 'keymap company-template-field-map)
- (overlay-put ov 'priority 101)
- (push ov siblings)
- (overlay-put templ 'company-template-fields siblings)))
-
-(defun company-template-remove-field (ovl &optional clear)
- (when (overlayp ovl)
- (when (overlay-buffer ovl)
- (when clear
- (delete-region (overlay-start ovl) (overlay-end ovl)))
- (delete-overlay ovl))
- (let* ((templ (overlay-get ovl 'company-template-parent))
- (siblings (overlay-get templ 'company-template-fields)))
- (setq siblings (delq ovl siblings))
- (overlay-put templ 'company-template-fields siblings))))
-
-(defun company-template-clean-up (&optional pos)
- "Clean up all templates that don't contain POS."
- (let ((local-ovs (overlays-at (or pos (point)))))
- (dolist (templ company-template--buffer-templates)
- (unless (memq templ local-ovs)
- (company-template-remove-template templ)))))
-
-;; hooks ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-insert-hook (ovl after-p &rest _ignore)
- "Called when a snippet input prompt is modified."
- (unless after-p
- (company-template-remove-field ovl t)))
-
-(defun company-template-post-command ()
- (company-template-clean-up)
- (unless company-template--buffer-templates
- (remove-hook 'post-command-hook 'company-template-post-command t)))
-
-;; common ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-c-like-templatify (call)
- (let* ((end (point-marker))
- (beg (- (point) (length call)))
- (templ (company-template-declare-template beg end))
- paren-open paren-close)
- (with-syntax-table (make-syntax-table (syntax-table))
- (modify-syntax-entry ?< "(")
- (modify-syntax-entry ?> ")")
- (when (search-backward ")" beg t)
- (setq paren-close (point-marker))
- (forward-char 1)
- (delete-region (point) end)
- (backward-sexp)
- (forward-char 1)
- (setq paren-open (point-marker)))
- (when (search-backward ">" beg t)
- (let ((angle-close (point-marker)))
- (forward-char 1)
- (backward-sexp)
- (forward-char)
- (company-template--c-like-args templ angle-close)))
- (when (looking-back "\\((\\*)\\)(" (line-beginning-position))
- (delete-region (match-beginning 1) (match-end 1)))
- (when paren-open
- (goto-char paren-open)
- (company-template--c-like-args templ paren-close)))
- (if (overlay-get templ 'company-template-fields)
- (company-template-move-to-first templ)
- (company-template-remove-template templ)
- (goto-char end))))
-
-(defun company-template--c-like-args (templ end)
- (let ((last-pos (point)))
- (while (re-search-forward "\\([^,]+\\),?" end 'move)
- (when (zerop (car (parse-partial-sexp last-pos (point))))
- (company-template-add-field templ last-pos (match-end 1) nil
- #'company-template--after-clear-c-like-field)
- (skip-chars-forward " ")
- (setq last-pos (point))))))
-
-;; objc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-template-objc-templatify (selector)
- (let* ((end (point-marker))
- (beg (- (point) (length selector) 1))
- (templ (company-template-declare-template beg end))
- (cnt 0))
- (save-excursion
- (goto-char beg)
- (catch 'stop
- (while (search-forward ":" end t)
- (if (looking-at "\\(([^)]*)\\) ?")
- (company-template-add-field templ (point) (match-end 1))
- ;; Not sure which conditions this case manifests under, but
- ;; apparently it did before, when I wrote the first test for this
- ;; function. FIXME: Revisit it.
- (company-template-add-field templ (point)
- (progn
- (insert (format "arg%d" cnt))
- (point)))
- (when (< (point) end)
- (insert " "))
- (cl-incf cnt))
- (when (>= (point) end)
- (throw 'stop t)))))
- (company-template-move-to-first templ)))
-
-(provide 'company-template)
-;;; company-template.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-tempo.el b/emacs.d/elpa/company-20201014.2251/company-tempo.el
deleted file mode 100644
index cba42c3..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-tempo.el
+++ /dev/null
@@ -1,71 +0,0 @@
-;;; company-tempo.el --- company-mode completion backend for tempo
-
-;; Copyright (C) 2009-2011, 2015 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-(require 'tempo)
-
-(defgroup company-tempo nil
- "Tempo completion backend."
- :group 'company)
-
-(defcustom company-tempo-expand nil
- "Whether to expand a tempo tag after completion."
- :type '(choice (const :tag "Off" nil)
- (const :tag "On" t)))
-
-(defsubst company-tempo-lookup (match)
- (cdr (assoc match (tempo-build-collection))))
-
-(defun company-tempo-insert (match)
- "Replace MATCH with the expanded tempo template."
- (search-backward match)
- (goto-char (match-beginning 0))
- (replace-match "")
- (call-interactively (company-tempo-lookup match)))
-
-(defsubst company-tempo-meta (match)
- (let ((templ (company-tempo-lookup match))
- doc)
- (and templ
- (setq doc (documentation templ t))
- (car (split-string doc "\n" t)))))
-
-;;;###autoload
-(defun company-tempo (command &optional arg &rest ignored)
- "`company-mode' completion backend for tempo."
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-tempo))
- (prefix (or (car (tempo-find-match-string tempo-match-finder)) ""))
- (candidates (all-completions arg (tempo-build-collection)))
- (meta (company-tempo-meta arg))
- (post-completion (when company-tempo-expand (company-tempo-insert arg)))
- (sorted t)))
-
-(provide 'company-tempo)
-;;; company-tempo.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-tng.el b/emacs.d/elpa/company-20201014.2251/company-tng.el
deleted file mode 100644
index 31c0823..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-tng.el
+++ /dev/null
@@ -1,181 +0,0 @@
-;;; company-tng.el --- company-mode configuration for single-button interaction
-
-;; Copyright (C) 2017-2020 Free Software Foundation, Inc.
-
-;; Author: Nikita Leshenko
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-;; company-tng (Tab and Go) allows you to perform completion using just TAB.
-;; Pressing it will both select the next completion candidate in the list and
-;; insert it into the buffer (or make it look like it's inserted, in fact).
-;;
-;; It cycles the candidates like `yank-pop' or `dabbrev-expand' or Vim:
-;; Pressing TAB selects the first item in the completion menu and inserts it in
-;; the buffer. Pressing TAB again selects the second item and replaces the
-;; "inserted" item with the second one. This can continue as long as the user
-;; wishes to cycle through the menu. You can also press S-TAB to select the
-;; previous candidate, of course.
-;;
-;; The benefits are that you only have to use one shortcut key and there is no
-;; need to confirm the entry.
-;;
-;; Usage:
-;;
-;; Enable `company-tng-mode' with:
-;;
-;; (add-hook 'after-init-hook 'company-tng-mode)
-;;
-;; in your init script. It will set up the required frontend, as well as make a
-;; number of recommended configuration changes described below.
-;;
-;; To avoid these changes, if you want to tweak everything yourself, customize
-;;`company-tng-auto-configure' to nil.
-;;
-;; We recommend to bind TAB to `company-select-next', S-TAB to
-;; `company-select-previous', and unbind RET and other now-unnecessary
-;; keys from `company-active-map':
-;;
-;; (define-key company-active-map (kbd "TAB") 'company-select-next)
-;; (define-key company-active-map (kbd "<backtab>") 'company-select-previous)
-;; (define-key company-active-map (kbd "RET") nil)
-;;
-;; Note that it's not necessary to rebind keys to use this frontend,
-;; you can use the arrow keys or M-n/M-p to select and insert
-;; candidates. You also need to decide which keys to unbind, depending
-;; on whether you want them to do the Company action or the default
-;; Emacs action (for example C-s or C-w).
-;;
-;; We recommend to disable `company-require-match' to allow free typing at any
-;; point.
-;;
-;; By default, company-tng doesn't work well with backends that insert function
-;; arguments into the buffer and (optionally) expand them into a snippet
-;; (usually performed in `post-completion' using yasnippet or company-template).
-;; In company-tng, completion candidates
-;; are inserted into the buffer as the user selects them and the completion is
-;; finished implicitly when the user continues typing after selecting a
-;; candidate. Modifying the buffer (by expanding a snippet) when the user
-;; continues typing would be surprising and undesirable, since the candidate was
-;; already inserted into the buffer.
-;;
-;; For this reason `company-tng-mode' by default disables arguments insertion
-;; for a number of popular backends. If the backend you are using is not among
-;; them, you might have to configure it not to do that yourself.
-;;
-;; YASnippet and company-tng both use TAB, which causes conflicts. The
-;; recommended way to use YASnippet with company-tng is to choose a different
-;; key for expanding a snippet and moving to the next snippet field:
-;;
-;; (define-key yas-minor-mode-map "\C-j" 'yas-expand)
-;; (define-key yas-keymap "\C-j" 'yas-next-field-or-maybe-expand)
-;; (dolist (keymap (list yas-minor-mode-map yas-keymap))
-;; (define-key keymap (kbd "TAB") nil)
-;; (define-key keymap [(tab)] nil))
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(defvar-local company-tng--overlay nil)
-
-;;;###autoload
-(defun company-tng-frontend (command)
- "When the user changes the selection at least once, this
-frontend will display the candidate in the buffer as if it's
-already there and any key outside of `company-active-map' will
-confirm the selection and finish the completion."
- (cl-case command
- (show
- (let ((ov (make-overlay (point) (point))))
- (setq company-tng--overlay ov)
- (overlay-put ov 'priority 2)))
- (update
- (let* ((ov company-tng--overlay)
- (selected (and company-selection
- (nth company-selection company-candidates)))
- (prefix (length company-prefix)))
- (move-overlay ov (- (point) prefix) (point))
- (overlay-put ov
- (if (= prefix 0) 'after-string 'display)
- selected)))
- (hide
- (when company-tng--overlay
- (delete-overlay company-tng--overlay)
- (kill-local-variable 'company-tng--overlay)))
- (pre-command
- (when (and company-selection
- (not (company--company-command-p (this-command-keys))))
- (company--unread-this-command-keys)
- (setq this-command 'company-complete-selection)))))
-
-(defvar company-clang-insert-arguments)
-(defvar company-semantic-insert-arguments)
-(defvar company-rtags-insert-arguments)
-(defvar lsp-enable-snippet)
-
-(defgroup company-tng nil
- "Company Tab and Go."
- :group 'company)
-
-(defcustom company-tng-auto-configure t
- "Automatically apply default configure when enable `company-tng-mode'."
- :type 'boolean)
-
-;;;###autoload
-(define-obsolete-function-alias 'company-tng-configure-default 'company-tng-mode "0.9.14"
- "Applies the default configuration to enable company-tng.")
-
-(declare-function eglot--snippet-expansion-fn "eglot")
-
-;;;###autoload
-(define-minor-mode company-tng-mode
- "This minor mode enables `company-tng-frontend'."
- :init-value nil
- :global t
- (cond
- (company-tng-mode
- (setq company-frontends
- (add-to-list 'company-frontends 'company-tng-frontend))
- (when company-tng-auto-configure
- (setq company-require-match nil)
- (setq company-frontends '(company-tng-frontend
- company-pseudo-tooltip-frontend
- company-echo-metadata-frontend))
- (setq company-clang-insert-arguments nil
- company-semantic-insert-arguments nil
- company-rtags-insert-arguments nil
- lsp-enable-snippet nil)
- (advice-add #'eglot--snippet-expansion-fn :override #'ignore)
- (let ((keymap company-active-map))
- (define-key keymap [return] nil)
- (define-key keymap (kbd "RET") nil)
- (define-key keymap [tab] 'company-select-next)
- (define-key keymap (kbd "TAB") 'company-select-next)
- (define-key keymap [backtab] 'company-select-previous)
- (define-key keymap (kbd "S-TAB") 'company-select-previous)))
- (setq company-selection-default nil))
- (t
- (setq company-frontends
- (delete 'company-tng-frontend company-frontends))
- (setq company-selection-default 0))))
-
-(provide 'company-tng)
-;;; company-tng.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company-yasnippet.el b/emacs.d/elpa/company-20201014.2251/company-yasnippet.el
deleted file mode 100644
index c846d6f..0000000
--- a/emacs.d/elpa/company-20201014.2251/company-yasnippet.el
+++ /dev/null
@@ -1,177 +0,0 @@
-;;; company-yasnippet.el --- company-mode completion backend for Yasnippet
-
-;; Copyright (C) 2014, 2015, 2020 Free Software Foundation, Inc.
-
-;; Author: Dmitry Gutov
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(require 'company)
-(require 'cl-lib)
-
-(declare-function yas--table-hash "yasnippet")
-(declare-function yas--get-snippet-tables "yasnippet")
-(declare-function yas-expand-snippet "yasnippet")
-(declare-function yas--template-content "yasnippet")
-(declare-function yas--template-expand-env "yasnippet")
-(declare-function yas--warning "yasnippet")
-(declare-function yas-minor-mode "yasnippet")
-
-(defvar company-yasnippet-annotation-fn
- (lambda (name)
- (concat
- (unless company-tooltip-align-annotations " -> ")
- name))
- "Function to format completion annotation.
-It has to accept one argument: the snippet's name.")
-
-(defun company-yasnippet--key-prefixes ()
- ;; Mostly copied from `yas--templates-for-key-at-point'.
- (defvar yas-key-syntaxes)
- (save-excursion
- (let ((original (point))
- (methods yas-key-syntaxes)
- prefixes
- method)
- (while methods
- (unless (eq method (car methods))
- (goto-char original))
- (setq method (car methods))
- (cond ((stringp method)
- (skip-syntax-backward method)
- (setq methods (cdr methods)))
- ((functionp method)
- (unless (eq (funcall method original)
- 'again)
- (setq methods (cdr methods))))
- (t
- (setq methods (cdr methods))
- (yas--warning "Invalid element `%s' in `yas-key-syntaxes'" method)))
- (let ((prefix (buffer-substring-no-properties (point) original)))
- (unless (equal prefix (car prefixes))
- (push prefix prefixes))))
- prefixes)))
-
-(defun company-yasnippet--candidates (prefix)
- ;; Process the prefixes in reverse: unlike Yasnippet, we look for prefix
- ;; matches, so the longest prefix with any matches should be the most useful.
- (cl-loop with tables = (yas--get-snippet-tables)
- for key-prefix in (company-yasnippet--key-prefixes)
- ;; Only consider keys at least as long as the symbol at point.
- when (>= (length key-prefix) (length prefix))
- thereis (company-yasnippet--completions-for-prefix prefix
- key-prefix
- tables)))
-
-(defun company-yasnippet--completions-for-prefix (prefix key-prefix tables)
- (cl-mapcan
- (lambda (table)
- (let ((keyhash (yas--table-hash table))
- res)
- (when keyhash
- (maphash
- (lambda (key value)
- (when (and (stringp key)
- (string-prefix-p key-prefix key))
- (maphash
- (lambda (name template)
- (push
- (propertize key
- 'yas-annotation name
- 'yas-template template
- 'yas-prefix-offset (- (length key-prefix)
- (length prefix)))
- res))
- value)))
- keyhash))
- res))
- tables))
-
-(defun company-yasnippet--doc (arg)
- (let ((template (get-text-property 0 'yas-template arg))
- (mode major-mode)
- (file-name (buffer-file-name)))
- (with-current-buffer (company-doc-buffer)
- (let ((buffer-file-name file-name))
- (yas-minor-mode 1)
- (condition-case error
- (yas-expand-snippet (yas--template-content template))
- (error
- (message "%s" (error-message-string error))))
- (delay-mode-hooks
- (let ((inhibit-message t))
- (if (eq mode 'web-mode)
- (progn
- (setq mode 'html-mode)
- (funcall mode))
- (funcall mode)))
- (ignore-errors (font-lock-ensure))))
- (current-buffer))))
-
-;;;###autoload
-(defun company-yasnippet (command &optional arg &rest ignore)
- "`company-mode' backend for `yasnippet'.
-
-This backend should be used with care, because as long as there are
-snippets defined for the current major mode, this backend will always
-shadow backends that come after it. Recommended usages:
-
-* In a buffer-local value of `company-backends', grouped with a backend or
- several that provide actual text completions.
-
- (add-hook 'js-mode-hook
- (lambda ()
- (set (make-local-variable 'company-backends)
- '((company-dabbrev-code company-yasnippet)))))
-
-* After keyword `:with', grouped with other backends.
-
- (push '(company-semantic :with company-yasnippet) company-backends)
-
-* Not in `company-backends', just bound to a key.
-
- (global-set-key (kbd \"C-c y\") 'company-yasnippet)
-"
- (interactive (list 'interactive))
- (cl-case command
- (interactive (company-begin-backend 'company-yasnippet))
- (prefix
- ;; Should probably use `yas--current-key', but that's bound to be slower.
- ;; How many trigger keys start with non-symbol characters anyway?
- (and (bound-and-true-p yas-minor-mode)
- (company-grab-symbol)))
- (annotation
- (funcall company-yasnippet-annotation-fn
- (get-text-property 0 'yas-annotation arg)))
- (candidates (company-yasnippet--candidates arg))
- (doc-buffer (company-yasnippet--doc arg))
- (no-cache t)
- (post-completion
- (let ((template (get-text-property 0 'yas-template arg))
- (prefix-offset (get-text-property 0 'yas-prefix-offset arg)))
- (yas-expand-snippet (yas--template-content template)
- (- (point) (length arg) prefix-offset)
- (point)
- (yas--template-expand-env template))))))
-
-(provide 'company-yasnippet)
-;;; company-yasnippet.el ends here
diff --git a/emacs.d/elpa/company-20201014.2251/company.el b/emacs.d/elpa/company-20201014.2251/company.el
deleted file mode 100644
index 09c2d46..0000000
--- a/emacs.d/elpa/company-20201014.2251/company.el
+++ /dev/null
@@ -1,3325 +0,0 @@
-;;; company.el --- Modular text completion framework -*- lexical-binding: t -*-
-
-;; Copyright (C) 2009-2020 Free Software Foundation, Inc.
-
-;; Author: Nikolaj Schumacher
-;; Maintainer: Dmitry Gutov <dgutov@yandex.ru>
-;; URL: http://company-mode.github.io/
-;; Version: 0.9.13
-;; Keywords: abbrev, convenience, matching
-;; Package-Requires: ((emacs "24.3"))
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; Company is a modular completion framework. Modules for retrieving completion
-;; candidates are called backends, modules for displaying them are frontends.
-;;
-;; Company comes with many backends, e.g. `company-etags'. These are
-;; distributed in separate files and can be used individually.
-;;
-;; Enable `company-mode' in all buffers with M-x global-company-mode. For
-;; further information look at the documentation for `company-mode' (C-h f
-;; company-mode RET).
-;;
-;; If you want to start a specific backend, call it interactively or use
-;; `company-begin-backend'. For example:
-;; M-x company-abbrev will prompt for and insert an abbrev.
-;;
-;; To write your own backend, look at the documentation for `company-backends'.
-;; Here is a simple example completing "foo":
-;;
-;; (defun company-my-backend (command &optional arg &rest ignored)
-;; (interactive (list 'interactive))
-;; (pcase command
-;; (`interactive (company-begin-backend 'company-my-backend))
-;; (`prefix (company-grab-symbol))
-;; (`candidates (list "foobar" "foobaz" "foobarbaz"))
-;; (`meta (format "This value is named %s" arg))))
-;;
-;; Sometimes it is a good idea to mix several backends together, for example to
-;; enrich gtags with dabbrev-code results (to emulate local variables). To do
-;; this, add a list with both backends as an element in `company-backends'.
-;;
-;;; Change Log:
-;;
-;; See NEWS.md in the repository.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'newcomment)
-(require 'pcase)
-
-;;; Compatibility
-(eval-and-compile
- ;; Defined in Emacs 24.4
- (unless (fboundp 'string-suffix-p)
- (defun string-suffix-p (suffix string &optional ignore-case)
- "Return non-nil if SUFFIX is a suffix of STRING.
-If IGNORE-CASE is non-nil, the comparison is done without paying
-attention to case differences."
- (let ((start-pos (- (length string) (length suffix))))
- (and (>= start-pos 0)
- (eq t (compare-strings suffix nil nil
- string start-pos nil ignore-case)))))))
-
-(defgroup company nil
- "Extensible inline text completion mechanism."
- :group 'abbrev
- :group 'convenience
- :group 'matching)
-
-(defgroup company-faces nil
- "Faces used by Company."
- :group 'company
- :group 'faces)
-
-(defface company-tooltip
- '((default :foreground "black")
- (((class color) (min-colors 88) (background light))
- (:background "cornsilk"))
- (((class color) (min-colors 88) (background dark))
- (:background "yellow"))
- (t
- (:background "yellow")))
- "Face used for the tooltip.")
-
-(defface company-tooltip-selection
- '((((class color) (min-colors 88) (background light))
- (:background "light blue"))
- (((class color) (min-colors 88) (background dark))
- (:background "orange1"))
- (t (:background "green")))
- "Face used for the selection in the tooltip.")
-
-(defface company-tooltip-search
- '((default :inherit highlight))
- "Face used for the search string in the tooltip.")
-
-(defface company-tooltip-search-selection
- '((default :inherit highlight))
- "Face used for the search string inside the selection in the tooltip.")
-
-(defface company-tooltip-mouse
- '((default :inherit highlight))
- "Face used for the tooltip item under the mouse.")
-
-(defface company-tooltip-common
- '((((background light))
- :foreground "darkred")
- (((background dark))
- :foreground "red"))
- "Face used for the common completion in the tooltip.")
-
-(defface company-tooltip-common-selection
- '((default :inherit company-tooltip-common))
- "Face used for the selected common completion in the tooltip.")
-
-(defface company-tooltip-annotation
- '((((background light))
- :foreground "firebrick4")
- (((background dark))
- :foreground "red4"))
- "Face used for the completion annotation in the tooltip.")
-
-(defface company-tooltip-annotation-selection
- '((default :inherit company-tooltip-annotation))
- "Face used for the selected completion annotation in the tooltip.")
-
-(defface company-scrollbar-fg
- '((((background light))
- :background "darkred")
- (((background dark))
- :background "red"))
- "Face used for the tooltip scrollbar thumb.")
-
-(defface company-scrollbar-bg
- '((((background light))
- :background "wheat")
- (((background dark))
- :background "gold"))
- "Face used for the tooltip scrollbar background.")
-
-(defface company-preview
- '((((background light))
- :inherit (company-tooltip-selection company-tooltip))
- (((background dark))
- :background "blue4"
- :foreground "wheat"))
- "Face used for the completion preview.")
-
-(defface company-preview-common
- '((((background light))
- :inherit company-tooltip-common-selection)
- (((background dark))
- :inherit company-preview
- :foreground "red"))
- "Face used for the common part of the completion preview.")
-
-(defface company-preview-search
- '((((background light))
- :inherit company-tooltip-common-selection)
- (((background dark))
- :inherit company-preview
- :background "blue1"))
- "Face used for the search string in the completion preview.")
-
-(defface company-echo nil
- "Face used for completions in the echo area.")
-
-(defface company-echo-common
- '((((background dark)) (:foreground "firebrick1"))
- (((background light)) (:background "firebrick4")))
- "Face used for the common part of completions in the echo area.")
-
-;; Too lazy to re-add :group to all defcustoms down below.
-(setcdr (assoc load-file-name custom-current-group-alist)
- 'company)
-
-(defun company-frontends-set (variable value)
- ;; Uniquify.
- (let ((value (delete-dups (copy-sequence value))))
- (and (or (and (memq 'company-pseudo-tooltip-unless-just-one-frontend value)
- (memq 'company-pseudo-tooltip-frontend value))
- (and (memq 'company-pseudo-tooltip-unless-just-one-frontend-with-delay value)
- (memq 'company-pseudo-tooltip-frontend value))
- (and (memq 'company-pseudo-tooltip-unless-just-one-frontend-with-delay value)
- (memq 'company-pseudo-tooltip-unless-just-one-frontend value)))
- (user-error "Pseudo tooltip frontend cannot be used more than once"))
- (and (or (and (memq 'company-preview-if-just-one-frontend value)
- (memq 'company-preview-frontend value))
- (and (memq 'company-preview-if-just-one-frontend value)
- (memq 'company-preview-common-frontend value))
- (and (memq 'company-preview-frontend value)
- (memq 'company-preview-common-frontend value))
- )
- (user-error "Preview frontend cannot be used twice"))
- (and (memq 'company-echo value)
- (memq 'company-echo-metadata-frontend value)
- (user-error "Echo area cannot be used twice"))
- ;; Preview must come last.
- (dolist (f '(company-preview-if-just-one-frontend company-preview-frontend company-preview-common-frontend))
- (when (cdr (memq f value))
- (setq value (append (delq f value) (list f)))))
- (set variable value)))
-
-(defcustom company-frontends '(company-pseudo-tooltip-unless-just-one-frontend
- company-preview-if-just-one-frontend
- company-echo-metadata-frontend)
- "The list of active frontends (visualizations).
-Each frontend is a function that takes one argument. It is called with
-one of the following arguments:
-
-`show': When the visualization should start.
-
-`hide': When the visualization should end.
-
-`update': When the data has been updated.
-
-`pre-command': Before every command that is executed while the
-visualization is active.
-
-`post-command': After every command that is executed while the
-visualization is active.
-
-The visualized data is stored in `company-prefix', `company-candidates',
-`company-common', `company-selection', `company-point' and
-`company-search-string'."
- :set 'company-frontends-set
- :type '(repeat (choice (const :tag "echo" company-echo-frontend)
- (const :tag "echo, strip common"
- company-echo-strip-common-frontend)
- (const :tag "show echo meta-data in echo"
- company-echo-metadata-frontend)
- (const :tag "pseudo tooltip"
- company-pseudo-tooltip-frontend)
- (const :tag "pseudo tooltip, multiple only"
- company-pseudo-tooltip-unless-just-one-frontend)
- (const :tag "pseudo tooltip, multiple only, delayed"
- company-pseudo-tooltip-unless-just-one-frontend-with-delay)
- (const :tag "preview" company-preview-frontend)
- (const :tag "preview, unique only"
- company-preview-if-just-one-frontend)
- (const :tag "preview, common"
- company-preview-common-frontend)
- (function :tag "custom function" nil))))
-
-(defcustom company-tooltip-limit 10
- "The maximum number of candidates in the tooltip."
- :type 'integer)
-
-(defcustom company-tooltip-minimum 6
- "The minimum height of the tooltip.
-If this many lines are not available, prefer to display the tooltip above."
- :type 'integer)
-
-(defcustom company-tooltip-minimum-width 0
- "The minimum width of the tooltip's inner area.
-This doesn't include the margins and the scroll bar."
- :type 'integer
- :package-version '(company . "0.8.0"))
-
-(defcustom company-tooltip-maximum-width most-positive-fixnum
- "The maximum width of the tooltip's inner area.
-This doesn't include the margins and the scroll bar."
- :type 'integer
- :package-version '(company . "0.9.5"))
-
-(defcustom company-tooltip-width-grow-only nil
- "When non-nil, the tooltip width is not allowed to decrease."
- :type 'boolean
- :package-version '(company . "0.9.14"))
-
-(defcustom company-tooltip-margin 1
- "Width of margin columns to show around the toolip."
- :type 'integer)
-
-(defcustom company-tooltip-offset-display 'scrollbar
- "Method using which the tooltip displays scrolling position.
-`scrollbar' means draw a scrollbar to the right of the items.
-`lines' means wrap items in lines with \"before\" and \"after\" counters."
- :type '(choice (const :tag "Scrollbar" scrollbar)
- (const :tag "Two lines" lines)))
-
-(defcustom company-tooltip-align-annotations nil
- "When non-nil, align annotations to the right tooltip border."
- :type 'boolean
- :package-version '(company . "0.7.1"))
-
-(defcustom company-tooltip-flip-when-above nil
- "Whether to flip the tooltip when it's above the current line."
- :type 'boolean
- :package-version '(company . "0.8.1"))
-
-(defvar company-safe-backends
- '((company-abbrev . "Abbrev")
- (company-bbdb . "BBDB")
- (company-capf . "completion-at-point-functions")
- (company-clang . "Clang")
- (company-cmake . "CMake")
- (company-css . "CSS (obsolete backend)")
- (company-dabbrev . "dabbrev for plain text")
- (company-dabbrev-code . "dabbrev for code")
- (company-elisp . "Emacs Lisp (obsolete backend)")
- (company-etags . "etags")
- (company-files . "Files")
- (company-gtags . "GNU Global")
- (company-ispell . "Ispell")
- (company-keywords . "Programming language keywords")
- (company-nxml . "nxml (obsolete backend)")
- (company-oddmuse . "Oddmuse")
- (company-semantic . "Semantic")
- (company-tempo . "Tempo templates")))
-(put 'company-safe-backends 'risky-local-variable t)
-
-(defun company-safe-backends-p (backends)
- (and (consp backends)
- (not (cl-dolist (backend backends)
- (unless (if (consp backend)
- (company-safe-backends-p backend)
- (assq backend company-safe-backends))
- (cl-return t))))))
-
-(defcustom company-backends `(,@(unless (version< "24.3.51" emacs-version)
- (list 'company-elisp))
- company-bbdb
- ,@(unless (version<= "26" emacs-version)
- (list 'company-nxml))
- ,@(unless (version<= "26" emacs-version)
- (list 'company-css))
- company-semantic
- company-cmake
- company-capf
- company-clang
- company-files
- (company-dabbrev-code company-gtags company-etags
- company-keywords)
- company-oddmuse company-dabbrev)
- "The list of active backends (completion engines).
-
-Only one backend is used at a time. The choice depends on the order of
-the items in this list, and on the values they return in response to the
-`prefix' command (see below). But a backend can also be a \"grouped\"
-one (see below).
-
-`company-begin-backend' can be used to start a specific backend,
-`company-other-backend' will skip to the next matching backend in the list.
-
-Each backend is a function that takes a variable number of arguments.
-The first argument is the command requested from the backend. It is one
-of the following:
-
-`prefix': The backend should return the text to be completed. It must be
-text immediately before point. Returning nil from this command passes
-control to the next backend. The function should return `stop' if it
-should complete but cannot (e.g. when in the middle of a symbol).
-Instead of a string, the backend may return a cons (PREFIX . LENGTH)
-where LENGTH is a number used in place of PREFIX's length when
-comparing against `company-minimum-prefix-length'. LENGTH can also
-be just t, and in the latter case the test automatically succeeds.
-
-`candidates': The second argument is the prefix to be completed. The
-return value should be a list of candidates that match the prefix.
-
-Non-prefix matches are also supported (candidates that don't start with the
-prefix, but match it in some backend-defined way). Backends that use this
-feature must disable cache (return t to `no-cache') and might also want to
-respond to `match'.
-
-Optional commands
-=================
-
-`sorted': Return t here to indicate that the candidates are sorted and will
-not need to be sorted again.
-
-`duplicates': If non-nil, company will take care of removing duplicates
-from the list.
-
-`no-cache': Usually company doesn't ask for candidates again as completion
-progresses, unless the backend returns t for this command. The second
-argument is the latest prefix.
-
-`ignore-case': Return t here if the backend returns case-insensitive
-matches. This value is used to determine the longest common prefix (as
-used in `company-complete-common'), and to filter completions when fetching
-them from cache.
-
-`meta': The second argument is a completion candidate. Return a (short)
-documentation string for it.
-
-`doc-buffer': The second argument is a completion candidate. Return a
-buffer with documentation for it. Preferably use `company-doc-buffer'. If
-not all buffer contents pertain to this candidate, return a cons of buffer
-and window start position.
-
-`location': The second argument is a completion candidate. Return a cons
-of buffer and buffer location, or of file and line number where the
-completion candidate was defined.
-
-`annotation': The second argument is a completion candidate. Return a
-string to be displayed inline with the candidate in the popup. If
-duplicates are removed by company, candidates with equal string values will
-be kept if they have different annotations. For that to work properly,
-backends should store the related information on candidates using text
-properties.
-
-`match': The second argument is a completion candidate. Return a positive
-integer, the index after the end of text matching `prefix' within the
-candidate string. Alternatively, return a list of (CHUNK-START
-. CHUNK-END) elements, where CHUNK-START and CHUNK-END are indexes within
-the candidate string. The corresponding regions are be used when rendering
-the popup. This command only makes sense for backends that provide
-non-prefix completion.
-
-`require-match': If this returns t, the user is not allowed to enter
-anything not offered as a candidate. Please don't use that value in normal
-backends. The default value nil gives the user that choice with
-`company-require-match'. Return value `never' overrides that option the
-other way around (using that value will indicate that the returned set of
-completions is often incomplete, so this behavior will not be useful).
-
-`init': Called once for each buffer. The backend can check for external
-programs and files and load any required libraries. Raising an error here
-will show up in message log once, and the backend will not be used for
-completion.
-
-`post-completion': Called after a completion candidate has been inserted
-into the buffer. The second argument is the candidate. Can be used to
-modify it, e.g. to expand a snippet.
-
-The backend should return nil for all commands it does not support or
-does not know about. It should also be callable interactively and use
-`company-begin-backend' to start itself in that case.
-
-Grouped backends
-================
-
-An element of `company-backends' can also be a list of backends. The
-completions from backends in such groups are merged, but only from those
-backends which return the same `prefix'.
-
-If a backend command takes a candidate as an argument (e.g. `meta'), the
-call is dispatched to the backend the candidate came from. In other
-cases (except for `duplicates' and `sorted'), the first non-nil value among
-all the backends is returned.
-
-The group can also contain keywords. Currently, `:with' and `:separate'
-keywords are defined. If the group contains keyword `:with', the backends
-listed after this keyword are ignored for the purpose of the `prefix'
-command. If the group contains keyword `:separate', the candidates that
-come from different backends are sorted separately in the combined list.
-
-Asynchronous backends
-=====================
-
-The return value of each command can also be a cons (:async . FETCHER)
-where FETCHER is a function of one argument, CALLBACK. When the data
-arrives, FETCHER must call CALLBACK and pass it the appropriate return
-value, as described above. That call must happen in the same buffer as
-where completion was initiated.
-
-True asynchronous operation is only supported for command `candidates', and
-only during idle completion. Other commands will block the user interface,
-even if the backend uses the asynchronous calling convention."
- :type `(repeat
- (choice
- :tag "backend"
- ,@(mapcar (lambda (b) `(const :tag ,(cdr b) ,(car b)))
- company-safe-backends)
- (symbol :tag "User defined")
- (repeat :tag "Merged backends"
- (choice :tag "backend"
- ,@(mapcar (lambda (b)
- `(const :tag ,(cdr b) ,(car b)))
- company-safe-backends)
- (const :tag "With" :with)
- (symbol :tag "User defined"))))))
-
-(put 'company-backends 'safe-local-variable 'company-safe-backends-p)
-
-(defcustom company-transformers nil
- "Functions to change the list of candidates received from backends.
-
-Each function gets called with the return value of the previous one.
-The first one gets passed the list of candidates, already sorted and
-without duplicates."
- :type '(choice
- (const :tag "None" nil)
- (const :tag "Sort by occurrence" (company-sort-by-occurrence))
- (const :tag "Sort by backend importance"
- (company-sort-by-backend-importance))
- (const :tag "Prefer case sensitive prefix"
- (company-sort-prefer-same-case-prefix))
- (repeat :tag "User defined" (function))))
-
-(defcustom company-completion-started-hook nil
- "Hook run when company starts completing.
-The hook is called with one argument that is non-nil if the completion was
-started manually."
- :type 'hook)
-
-(defcustom company-completion-cancelled-hook nil
- "Hook run when company cancels completing.
-The hook is called with one argument that is non-nil if the completion was
-aborted manually."
- :type 'hook)
-
-(defcustom company-completion-finished-hook nil
- "Hook run when company successfully completes.
-The hook is called with the selected candidate as an argument.
-
-If you indend to use it to post-process candidates from a specific
-backend, consider using the `post-completion' command instead."
- :type 'hook)
-
-(defcustom company-after-completion-hook nil
- "Hook run at the end of completion, successful or not.
-The hook is called with one argument which is either a string or a symbol."
- :type 'hook)
-
-(defcustom company-minimum-prefix-length 3
- "The minimum prefix length for idle completion."
- :type '(integer :tag "prefix length"))
-
-(defcustom company-abort-manual-when-too-short nil
- "If enabled, cancel a manually started completion when the prefix gets
-shorter than both `company-minimum-prefix-length' and the length of the
-prefix it was started from."
- :type 'boolean
- :package-version '(company . "0.8.0"))
-
-(defcustom company-require-match 'company-explicit-action-p
- "If enabled, disallow non-matching input.
-This can be a function do determine if a match is required.
-
-This can be overridden by the backend, if it returns t or `never' to
-`require-match'. `company-auto-commit' also takes precedence over this."
- :type '(choice (const :tag "Off" nil)
- (function :tag "Predicate function")
- (const :tag "On, if user interaction took place"
- 'company-explicit-action-p)
- (const :tag "On" t)))
-
-(define-obsolete-variable-alias
- 'company-auto-complete
- 'company-auto-commit
- "0.9.14")
-
-(defcustom company-auto-commit nil
- "Determines whether to auto-commit.
-If this is enabled, all characters from `company-auto-commit-chars'
-trigger insertion of the selected completion candidate.
-This can also be a function."
- :type '(choice (const :tag "Off" nil)
- (function :tag "Predicate function")
- (const :tag "On, if user interaction took place"
- 'company-explicit-action-p)
- (const :tag "On" t))
- :package-version '(company . "0.9.14"))
-
-(define-obsolete-variable-alias
- 'company-auto-complete-chars
- 'company-auto-commit-chars
- "0.9.14")
-
-(defcustom company-auto-commit-chars '(?\ ?\) ?.)
- "Determines which characters trigger auto-commit.
-See `company-auto-commit'. If this is a string, each character in it
-triggers auto-commit. If it is a list of syntax description characters (see
-`modify-syntax-entry'), characters with any of those syntaxes do that.
-
-This can also be a function, which is called with the new input and should
-return non-nil if company should auto-commit.
-
-A character that is part of a valid completion never triggers auto-commit."
- :type '(choice (string :tag "Characters")
- (set :tag "Syntax"
- (const :tag "Whitespace" ?\ )
- (const :tag "Symbol" ?_)
- (const :tag "Opening parentheses" ?\()
- (const :tag "Closing parentheses" ?\))
- (const :tag "Word constituent" ?w)
- (const :tag "Punctuation." ?.)
- (const :tag "String quote." ?\")
- (const :tag "Paired delimiter." ?$)
- (const :tag "Expression quote or prefix operator." ?\')
- (const :tag "Comment starter." ?<)
- (const :tag "Comment ender." ?>)
- (const :tag "Character-quote." ?/)
- (const :tag "Generic string fence." ?|)
- (const :tag "Generic comment fence." ?!))
- (function :tag "Predicate function"))
- :package-version '(company . "0.9.14"))
-
-(defcustom company-idle-delay .5
- "The idle delay in seconds until completion starts automatically.
-The prefix still has to satisfy `company-minimum-prefix-length' before that
-happens. The value of nil means no idle completion."
- :type '(choice (const :tag "never (nil)" nil)
- (const :tag "immediate (0)" 0)
- (function :tag "Predicate function")
- (number :tag "seconds")))
-
-(defcustom company-tooltip-idle-delay .5
- "The idle delay in seconds until tooltip is shown when using
-`company-pseudo-tooltip-unless-just-one-frontend-with-delay'."
- :type '(choice (const :tag "never (nil)" nil)
- (const :tag "immediate (0)" 0)
- (number :tag "seconds")))
-
-(defcustom company-begin-commands '(self-insert-command
- org-self-insert-command
- orgtbl-self-insert-command
- c-scope-operator
- c-electric-colon
- c-electric-lt-gt
- c-electric-slash)
- "A list of commands after which idle completion is allowed.
-If this is t, it can show completions after any command except a few from a
-pre-defined list. See `company-idle-delay'.
-
-Alternatively, any command with a non-nil `company-begin' property is
-treated as if it was on this list."
- :type '(choice (const :tag "Any command" t)
- (const :tag "Self insert command" '(self-insert-command))
- (repeat :tag "Commands" function))
- :package-version '(company . "0.8.4"))
-
-(defcustom company-continue-commands '(not save-buffer save-some-buffers
- save-buffers-kill-terminal
- save-buffers-kill-emacs
- completion-at-point)
- "A list of commands that are allowed during completion.
-If this is t, or if `company-begin-commands' is t, any command is allowed.
-Otherwise, the value must be a list of symbols. If it starts with `not',
-the cdr is the list of commands that abort completion. Otherwise, all
-commands except those in that list, or in `company-begin-commands', or
-commands in the `company-' namespace, abort completion."
- :type '(choice (const :tag "Any command" t)
- (cons :tag "Any except"
- (const not)
- (repeat :tag "Commands" function))
- (repeat :tag "Commands" function)))
-
-(defcustom company-show-numbers nil
- "If enabled, show quick-access numbers for the first ten candidates."
- :type '(choice (const :tag "off" nil)
- (const :tag "left" 'left)
- (const :tag "on" 't)))
-
-(defcustom company-show-numbers-function #'company--show-numbers
- "Function called to get quick-access numbers for the first ten candidates.
-
-The function receives the candidate number (starting from 1) and should
-return a string prefixed with one space."
- :type 'function)
-
-(defcustom company-selection-wrap-around nil
- "If enabled, selecting item before first or after last wraps around."
- :type '(choice (const :tag "off" nil)
- (const :tag "on" t)))
-
-(defvar company-async-wait 0.03
- "Pause between checks to see if the value's been set when turning an
-asynchronous call into synchronous.")
-
-(defvar company-async-timeout 2
- "Maximum wait time for a value to be set during asynchronous call.")
-
-;;; mode ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar company-mode-map (make-sparse-keymap)
- "Keymap used by `company-mode'.")
-
-(defvar company-active-map
- (let ((keymap (make-sparse-keymap)))
- (define-key keymap "\e\e\e" 'company-abort)
- (define-key keymap "\C-g" 'company-abort)
- (define-key keymap (kbd "M-n") 'company-select-next)
- (define-key keymap (kbd "M-p") 'company-select-previous)
- (define-key keymap (kbd "<down>") 'company-select-next-or-abort)
- (define-key keymap (kbd "<up>") 'company-select-previous-or-abort)
- (define-key keymap [remap scroll-up-command] 'company-next-page)
- (define-key keymap [remap scroll-down-command] 'company-previous-page)
- (define-key keymap [down-mouse-1] 'ignore)
- (define-key keymap [down-mouse-3] 'ignore)
- (define-key keymap [mouse-1] 'company-complete-mouse)
- (define-key keymap [mouse-3] 'company-select-mouse)
- (define-key keymap [up-mouse-1] 'ignore)
- (define-key keymap [up-mouse-3] 'ignore)
- (define-key keymap [return] 'company-complete-selection)
- (define-key keymap (kbd "RET") 'company-complete-selection)
- (define-key keymap [tab] 'company-complete-common)
- (define-key keymap (kbd "TAB") 'company-complete-common)
- (define-key keymap (kbd "<f1>") 'company-show-doc-buffer)
- (define-key keymap (kbd "C-h") 'company-show-doc-buffer)
- (define-key keymap "\C-w" 'company-show-location)
- (define-key keymap "\C-s" 'company-search-candidates)
- (define-key keymap "\C-\M-s" 'company-filter-candidates)
- (dotimes (i 10)
- (define-key keymap (read-kbd-macro (format "M-%d" i)) 'company-complete-number))
- keymap)
- "Keymap that is enabled during an active completion.")
-
-(defvar company--disabled-backends nil)
-
-(defun company-init-backend (backend)
- (and (symbolp backend)
- (not (fboundp backend))
- (ignore-errors (require backend nil t)))
- (cond
- ((symbolp backend)
- (condition-case err
- (progn
- (funcall backend 'init)
- (put backend 'company-init t))
- (error
- (put backend 'company-init 'failed)
- (unless (memq backend company--disabled-backends)
- (message "Company backend '%s' could not be initialized:\n%s"
- backend (error-message-string err)))
- (cl-pushnew backend company--disabled-backends)
- nil)))
- ;; No initialization for lambdas.
- ((functionp backend) t)
- (t ;; Must be a list.
- (cl-dolist (b backend)
- (unless (keywordp b)
- (company-init-backend b))))))
-
-(defun company--maybe-init-backend (backend)
- (or (not (symbolp backend))
- (eq t (get backend 'company-init))
- (unless (get backend 'company-init)
- (company-init-backend backend))))
-
-(defcustom company-lighter-base "company"
- "Base string to use for the `company-mode' lighter."
- :type 'string
- :package-version '(company . "0.8.10"))
-
-(defvar company-lighter '(" "
- (company-candidates
- (:eval
- (if (consp company-backend)
- (when company-selection
- (company--group-lighter (nth company-selection
- company-candidates)
- company-lighter-base))
- (symbol-name company-backend)))
- company-lighter-base))
- "Mode line lighter for Company.
-
-The value of this variable is a mode line template as in
-`mode-line-format'.")
-
-(put 'company-lighter 'risky-local-variable t)
-
-;;;###autoload
-(define-minor-mode company-mode
- "\"complete anything\"; is an in-buffer completion framework.
-Completion starts automatically, depending on the values
-`company-idle-delay' and `company-minimum-prefix-length'.
-
-Completion can be controlled with the commands:
-`company-complete-common', `company-complete-selection', `company-complete',
-`company-select-next', `company-select-previous'. If these commands are
-called before `company-idle-delay', completion will also start.
-
-Completions can be searched with `company-search-candidates' or
-`company-filter-candidates'. These can be used while completion is
-inactive, as well.
-
-The completion data is retrieved using `company-backends' and displayed
-using `company-frontends'. If you want to start a specific backend, call
-it interactively or use `company-begin-backend'.
-
-By default, the completions list is sorted alphabetically, unless the
-backend chooses otherwise, or `company-transformers' changes it later.
-
-regular keymap (`company-mode-map'):
-
-\\{company-mode-map}
-keymap during active completions (`company-active-map'):
-
-\\{company-active-map}"
- nil company-lighter company-mode-map
- (if company-mode
- (progn
- (add-hook 'pre-command-hook 'company-pre-command nil t)
- (add-hook 'post-command-hook 'company-post-command nil t)
- (add-hook 'yas-keymap-disable-hook 'company--active-p nil t)
- (mapc 'company-init-backend company-backends))
- (remove-hook 'pre-command-hook 'company-pre-command t)
- (remove-hook 'post-command-hook 'company-post-command t)
- (remove-hook 'yas-keymap-disable-hook 'company--active-p t)
- (company-cancel)
- (kill-local-variable 'company-point)))
-
-(defcustom company-global-modes t
- "Modes for which `company-mode' mode is turned on by `global-company-mode'.
-If nil, means no modes. If t, then all major modes have it turned on.
-If a list, it should be a list of `major-mode' symbol names for which
-`company-mode' should be automatically turned on. The sense of the list is
-negated if it begins with `not'. For example:
- (c-mode c++-mode)
-means that `company-mode' is turned on for buffers in C and C++ modes only.
- (not message-mode)
-means that `company-mode' is always turned on except in `message-mode' buffers."
- :type '(choice (const :tag "none" nil)
- (const :tag "all" t)
- (set :menu-tag "mode specific" :tag "modes"
- :value (not)
- (const :tag "Except" not)
- (repeat :inline t (symbol :tag "mode")))))
-
-;;;###autoload
-(define-globalized-minor-mode global-company-mode company-mode company-mode-on)
-
-(defun company-mode-on ()
- (when (and (not (or noninteractive (eq (aref (buffer-name) 0) ?\s)))
- (cond ((eq company-global-modes t)
- t)
- ((eq (car-safe company-global-modes) 'not)
- (not (memq major-mode (cdr company-global-modes))))
- (t (memq major-mode company-global-modes))))
- (company-mode 1)))
-
-(defsubst company-assert-enabled ()
- (unless company-mode
- (company-uninstall-map)
- (user-error "Company not enabled")))
-
-;;; keymaps ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-my-keymap nil)
-
-(defvar company-emulation-alist '((t . nil)))
-
-(defun company-enable-overriding-keymap (keymap)
- (company-uninstall-map)
- (setq company-my-keymap keymap))
-
-(defun company-ensure-emulation-alist ()
- (unless (eq 'company-emulation-alist (car emulation-mode-map-alists))
- (setq emulation-mode-map-alists
- (cons 'company-emulation-alist
- (delq 'company-emulation-alist emulation-mode-map-alists)))))
-
-(defun company-install-map ()
- (unless (or (cdar company-emulation-alist)
- (null company-my-keymap))
- (setf (cdar company-emulation-alist) company-my-keymap)))
-
-(defun company-uninstall-map ()
- (setf (cdar company-emulation-alist) nil))
-
-(defun company--company-command-p (keys)
- "Checks if the keys are part of company's overriding keymap"
- (or (equal [company-dummy-event] keys)
- (commandp (lookup-key company-my-keymap keys))))
-
-;; Hack:
-;; Emacs calculates the active keymaps before reading the event. That means we
-;; cannot change the keymap from a timer. So we send a bogus command.
-;; XXX: Seems not to be needed anymore in Emacs 24.4
-;; Apparently, starting with emacs-mirror/emacs@99d0d6dc23.
-(defun company-ignore ()
- (interactive)
- (setq this-command last-command))
-
-(global-set-key '[company-dummy-event] 'company-ignore)
-
-(defun company-input-noop ()
- (push 'company-dummy-event unread-command-events))
-
-;; To avoid warnings in Emacs < 26.
-(declare-function line-number-display-width "indent.c")
-
-(defun company--posn-col-row (posn)
- (let ((col (car (posn-col-row posn)))
- ;; `posn-col-row' doesn't work well with lines of different height.
- ;; `posn-actual-col-row' doesn't handle multiple-width characters.
- (row (cdr (or (posn-actual-col-row posn)
- ;; When position is non-visible for some reason.
- (posn-col-row posn)))))
- (when (and header-line-format (version< emacs-version "24.3.93.3"))
- ;; http://debbugs.gnu.org/18384
- (cl-decf row))
- (when (bound-and-true-p display-line-numbers)
- (cl-decf col (+ 2 (line-number-display-width))))
- (cons (+ col (window-hscroll)) row)))
-
-(defun company--col-row (&optional pos)
- (company--posn-col-row (posn-at-point pos)))
-
-(defun company--row (&optional pos)
- (cdr (company--col-row pos)))
-
-;;; backends ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-backend nil)
-
-(defun company-grab (regexp &optional expression limit)
- (when (looking-back regexp limit)
- (or (match-string-no-properties (or expression 0)) "")))
-
-(defun company-grab-line (regexp &optional expression)
- "Return a match string for REGEXP if it matches text before point.
-If EXPRESSION is non-nil, return the match string for the respective
-parenthesized expression in REGEXP.
-Matching is limited to the current line."
- (let ((inhibit-field-text-motion t))
- (company-grab regexp expression (point-at-bol))))
-
-(defun company-grab-symbol ()
- "If point is at the end of a symbol, return it.
-Otherwise, if point is not inside a symbol, return an empty string."
- (if (looking-at "\\_>")
- (buffer-substring (point) (save-excursion (skip-syntax-backward "w_")
- (point)))
- (unless (and (char-after) (memq (char-syntax (char-after)) '(?w ?_)))
- "")))
-
-(defun company-grab-word ()
- "If point is at the end of a word, return it.
-Otherwise, if point is not inside a symbol, return an empty string."
- (if (looking-at "\\>")
- (buffer-substring (point) (save-excursion (skip-syntax-backward "w")
- (point)))
- (unless (and (char-after) (eq (char-syntax (char-after)) ?w))
- "")))
-
-(defun company-grab-symbol-cons (idle-begin-after-re &optional max-len)
- "Return a string SYMBOL or a cons (SYMBOL . t).
-SYMBOL is as returned by `company-grab-symbol'. If the text before point
-matches IDLE-BEGIN-AFTER-RE, return it wrapped in a cons."
- (let ((symbol (company-grab-symbol)))
- (when symbol
- (save-excursion
- (forward-char (- (length symbol)))
- (if (looking-back idle-begin-after-re (if max-len
- (- (point) max-len)
- (line-beginning-position)))
- (cons symbol t)
- symbol)))))
-
-(defun company-in-string-or-comment ()
- "Return non-nil if point is within a string or comment."
- (let ((ppss (syntax-ppss)))
- (or (car (setq ppss (nthcdr 3 ppss)))
- (car (setq ppss (cdr ppss)))
- (nth 3 ppss))))
-
-(defun company-call-backend (&rest args)
- (company--force-sync #'company-call-backend-raw args company-backend))
-
-(defun company--force-sync (fun args backend)
- (let ((value (apply fun args)))
- (if (not (eq (car-safe value) :async))
- value
- (let ((res 'trash)
- (start (time-to-seconds)))
- (funcall (cdr value)
- (lambda (result) (setq res result)))
- (while (eq res 'trash)
- (if (> (- (time-to-seconds) start) company-async-timeout)
- (error "Company: backend %s async timeout with args %s"
- backend args)
- ;; XXX: Reusing the trick from company--fetch-candidates here
- ;; doesn't work well: sit-for isn't a good fit when we want to
- ;; ignore pending input (results in too many calls).
- ;; FIXME: We should deal with this by standardizing on a kind of
- ;; Future object that knows how to sync itself. In most cases (but
- ;; not all), by calling accept-process-output, probably.
- (sleep-for company-async-wait)))
- res))))
-
-(defun company-call-backend-raw (&rest args)
- (condition-case-unless-debug err
- (if (functionp company-backend)
- (apply company-backend args)
- (apply #'company--multi-backend-adapter company-backend args))
- (user-error (user-error
- "Company: backend %s user-error: %s"
- company-backend (error-message-string err)))
- (error (error "Company: backend %s error \"%s\" with args %s"
- company-backend (error-message-string err) args))))
-
-(defun company--multi-backend-adapter (backends command &rest args)
- (let ((backends (cl-loop for b in backends
- when (or (keywordp b)
- (company--maybe-init-backend b))
- collect b))
- (separate (memq :separate backends)))
-
- (when (eq command 'prefix)
- (setq backends (butlast backends (length (member :with backends)))))
-
- (setq backends (cl-delete-if #'keywordp backends))
-
- (pcase command
- (`candidates
- (company--multi-backend-adapter-candidates backends (car args) separate))
- (`sorted separate)
- (`duplicates (not separate))
- ((or `prefix `ignore-case `no-cache `require-match)
- (let (value)
- (cl-dolist (backend backends)
- (when (setq value (company--force-sync
- backend (cons command args) backend))
- (cl-return value)))))
- (_
- (let ((arg (car args)))
- (when (> (length arg) 0)
- (let ((backend (or (get-text-property 0 'company-backend arg)
- (car backends))))
- (apply backend command args))))))))
-
-(defun company--multi-backend-adapter-candidates (backends prefix separate)
- (let ((pairs (cl-loop for backend in backends
- when (equal (company--prefix-str
- (let ((company-backend backend))
- (company-call-backend 'prefix)))
- prefix)
- collect (cons (funcall backend 'candidates prefix)
- (company--multi-candidates-mapper
- backend
- separate
- ;; Small perf optimization: don't tag the
- ;; candidates received from the first
- ;; backend in the group.
- (not (eq backend (car backends))))))))
- (company--merge-async pairs (lambda (values) (apply #'append values)))))
-
-(defun company--multi-candidates-mapper (backend separate tag)
- (lambda (candidates)
- (when separate
- (let ((company-backend backend))
- (setq candidates
- (company--preprocess-candidates candidates))))
- (when tag
- (setq candidates
- (mapcar
- (lambda (str)
- (propertize str 'company-backend backend))
- candidates)))
- candidates))
-
-(defun company--merge-async (pairs merger)
- (let ((async (cl-loop for pair in pairs
- thereis
- (eq :async (car-safe (car pair))))))
- (if (not async)
- (funcall merger (cl-loop for (val . mapper) in pairs
- collect (funcall mapper val)))
- (cons
- :async
- (lambda (callback)
- (let* (lst
- (pending (mapcar #'car pairs))
- (finisher (lambda ()
- (unless pending
- (funcall callback
- (funcall merger
- (nreverse lst)))))))
- (dolist (pair pairs)
- (push nil lst)
- (let* ((cell lst)
- (val (car pair))
- (mapper (cdr pair))
- (this-finisher (lambda (res)
- (setq pending (delq val pending))
- (setcar cell (funcall mapper res))
- (funcall finisher))))
- (if (not (eq :async (car-safe val)))
- (funcall this-finisher val)
- (let ((fetcher (cdr val)))
- (funcall fetcher this-finisher)))))))))))
-
-(defun company--prefix-str (prefix)
- (or (car-safe prefix) prefix))
-
-;;; completion mechanism ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-prefix nil)
-
-(defvar-local company-candidates nil)
-
-(defvar-local company-candidates-length nil)
-
-(defvar-local company-candidates-cache nil)
-
-(defvar-local company-candidates-predicate nil)
-
-(defvar-local company-common nil)
-
-(defvar company-selection-default 0
- "The default value for `company-selection'.")
-(defvar-local company-selection company-selection-default)
-
-(defvar-local company-selection-changed nil)
-
-(defvar-local company--manual-action nil
- "Non-nil, if manual completion took place.")
-
-(defvar-local company--manual-prefix nil)
-
-(defvar-local company--point-max nil)
-
-(defvar-local company-point nil)
-
-(defvar company-timer nil)
-(defvar company-tooltip-timer nil)
-
-(defsubst company-strip-prefix (str)
- (substring str (length company-prefix)))
-
-(defun company--insert-candidate (candidate)
- (when (> (length candidate) 0)
- (setq candidate (substring-no-properties candidate))
- ;; XXX: Return value we check here is subject to change.
- (if (eq (company-call-backend 'ignore-case) 'keep-prefix)
- (insert (company-strip-prefix candidate))
- (unless (equal company-prefix candidate)
- (delete-region (- (point) (length company-prefix)) (point))
- (insert candidate)))))
-
-(defmacro company-with-candidate-inserted (candidate &rest body)
- "Evaluate BODY with CANDIDATE temporarily inserted.
-This is a tool for backends that need candidates inserted before they
-can retrieve meta-data for them."
- (declare (indent 1))
- `(let ((inhibit-modification-hooks t)
- (inhibit-point-motion-hooks t)
- (modified-p (buffer-modified-p)))
- (company--insert-candidate ,candidate)
- (unwind-protect
- (progn ,@body)
- (delete-region company-point (point))
- (set-buffer-modified-p modified-p))))
-
-(defun company-explicit-action-p ()
- "Return whether explicit completion action was taken by the user."
- (or company--manual-action
- company-selection-changed))
-
-(defun company-reformat (candidate)
- ;; company-ispell needs this, because the results are always lower-case
- ;; It's mory efficient to fix it only when they are displayed.
- ;; FIXME: Adopt the current text's capitalization instead?
- (if (eq (company-call-backend 'ignore-case) 'keep-prefix)
- (let ((prefix (company--clean-string company-prefix)))
- (concat prefix (substring candidate (length prefix))))
- candidate))
-
-(defun company--should-complete ()
- (and (eq company-idle-delay 'now)
- (not (or buffer-read-only
- overriding-local-map))
- ;; Check if in the middle of entering a key combination.
- (or (equal (this-command-keys-vector) [])
- (not (keymapp (key-binding (this-command-keys-vector)))))
- (not (and transient-mark-mode mark-active))))
-
-(defun company--should-continue ()
- (or (eq t company-begin-commands)
- (eq t company-continue-commands)
- (if (eq 'not (car company-continue-commands))
- (not (memq this-command (cdr company-continue-commands)))
- (or (memq this-command company-begin-commands)
- (memq this-command company-continue-commands)
- (and (symbolp this-command)
- (string-match-p "\\`company-" (symbol-name this-command)))))))
-
-(defun company-call-frontends (command)
- (dolist (frontend company-frontends)
- (condition-case-unless-debug err
- (funcall frontend command)
- (error (error "Company: frontend %s error \"%s\" on command %s"
- frontend (error-message-string err) command)))))
-
-(defun company-set-selection (selection &optional force-update)
- "Set SELECTION for company candidates.
-This will update `company-selection' and related variable.
-Only update when the current selection is changed, but optionally always
-update if FORCE-UPDATE."
- (when selection
- (let* ((offset (if company-selection-default 0 1))
- (company-candidates-length
- (+ company-candidates-length offset)))
- (setq selection
- (if company-selection-wrap-around
- (mod selection company-candidates-length)
- (max 0 (min (1- company-candidates-length) selection))))
- (setq selection (unless (< selection offset)
- (- selection offset)))))
- (when (or force-update (not (equal selection company-selection)))
- (setq company-selection selection
- company-selection-changed t)
- (company-call-frontends 'update)))
-
-(defun company--group-lighter (candidate base)
- (let ((backend (or (get-text-property 0 'company-backend candidate)
- (cl-some (lambda (x) (and (not (keywordp x)) x))
- company-backend))))
- (when (and backend (symbolp backend))
- (let ((name (replace-regexp-in-string "company-\\|-company" ""
- (symbol-name backend))))
- (format "%s-<%s>" base name)))))
-
-(defun company-update-candidates (candidates)
- (setq company-candidates-length (length candidates))
- (if company-selection-changed
- ;; Try to restore the selection
- (let ((selected (and company-selection
- (nth company-selection company-candidates))))
- (setq company-candidates candidates)
- (when selected
- (setq company-selection 0)
- (catch 'found
- (while candidates
- (let ((candidate (pop candidates)))
- (when (and (string= candidate selected)
- (equal (company-call-backend 'annotation candidate)
- (company-call-backend 'annotation selected)))
- (throw 'found t)))
- (cl-incf company-selection))
- (setq company-selection company-selection-default
- company-selection-changed nil))))
- (setq company-selection company-selection-default
- company-candidates candidates))
- ;; Calculate common.
- (let ((completion-ignore-case (company-call-backend 'ignore-case)))
- ;; We want to support non-prefix completion, so filtering is the
- ;; responsibility of each respective backend, not ours.
- ;; On the other hand, we don't want to replace non-prefix input in
- ;; `company-complete-common', unless there's only one candidate.
- (setq company-common
- (if (cdr company-candidates)
- (let ((common (try-completion "" company-candidates)))
- (when (string-prefix-p company-prefix common
- completion-ignore-case)
- common))
- (car company-candidates)))))
-
-(defun company-calculate-candidates (prefix ignore-case)
- (let ((candidates (cdr (assoc prefix company-candidates-cache))))
- (or candidates
- (when company-candidates-cache
- (let ((len (length prefix))
- (completion-ignore-case ignore-case)
- prev)
- (cl-dotimes (i (1+ len))
- (when (setq prev (cdr (assoc (substring prefix 0 (- len i))
- company-candidates-cache)))
- (setq candidates (all-completions prefix prev))
- (cl-return t)))))
- (progn
- ;; No cache match, call the backend.
- (setq candidates (company--preprocess-candidates
- (company--fetch-candidates prefix)))
- ;; Save in cache.
- (push (cons prefix candidates) company-candidates-cache)))
- ;; Only now apply the predicate and transformers.
- (company--postprocess-candidates candidates)))
-
-(defun company--unique-match-p (candidates prefix ignore-case)
- (and candidates
- (not (cdr candidates))
- (eq t (compare-strings (car candidates) nil nil
- prefix nil nil ignore-case))))
-
-(defun company--fetch-candidates (prefix)
- (let* ((non-essential (not (company-explicit-action-p)))
- (inhibit-redisplay t)
- (c (if (or company-selection-changed
- ;; FIXME: This is not ideal, but we have not managed to deal
- ;; with these situations in a better way yet.
- (company-require-match-p))
- (company-call-backend 'candidates prefix)
- (company-call-backend-raw 'candidates prefix))))
- (if (not (eq (car c) :async))
- c
- (let ((res 'none))
- (funcall
- (cdr c)
- (lambda (candidates)
- (when (eq res 'none)
- (push 'company-foo unread-command-events))
- (setq res candidates)))
- (if (company--flyspell-workaround-p)
- (while (and (eq res 'none)
- (not (input-pending-p)))
- (sleep-for company-async-wait))
- (while (and (eq res 'none)
- (sit-for 0.5 t))))
- (while (member (car unread-command-events)
- '(company-foo (t . company-foo)))
- (pop unread-command-events))
- (prog1
- (and (consp res) res)
- (setq res 'exited))))))
-
-(defun company--flyspell-workaround-p ()
- ;; https://debbugs.gnu.org/23980
- (and (bound-and-true-p flyspell-mode)
- (version< emacs-version "27")))
-
-(defun company--preprocess-candidates (candidates)
- (cl-assert (cl-every #'stringp candidates))
- (unless (company-call-backend 'sorted)
- (setq candidates (sort candidates 'string<)))
- (when (company-call-backend 'duplicates)
- (company--strip-duplicates candidates))
- candidates)
-
-(defun company--postprocess-candidates (candidates)
- (when (or company-candidates-predicate company-transformers)
- (setq candidates (copy-sequence candidates)))
- (when company-candidates-predicate
- (setq candidates (cl-delete-if-not company-candidates-predicate candidates)))
- (company--transform-candidates candidates))
-
-(defun company--strip-duplicates (candidates)
- (let ((c2 candidates)
- (annos 'unk))
- (while c2
- (setcdr c2
- (let ((str (pop c2)))
- (while (let ((str2 (car c2)))
- (if (not (equal str str2))
- (progn
- (setq annos 'unk)
- nil)
- (when (eq annos 'unk)
- (setq annos (list (company-call-backend
- 'annotation str))))
- (let ((anno2 (company-call-backend
- 'annotation str2)))
- (if (member anno2 annos)
- t
- (push anno2 annos)
- nil))))
- (pop c2))
- c2)))))
-
-(defun company--transform-candidates (candidates)
- (let ((c candidates))
- (dolist (tr company-transformers)
- (setq c (funcall tr c)))
- c))
-
-(defcustom company-occurrence-weight-function
- #'company-occurrence-prefer-closest-above
- "Function to weigh matches in `company-sort-by-occurrence'.
-It's called with three arguments: cursor position, the beginning and the
-end of the match."
- :type '(choice
- (const :tag "First above point, then below point"
- company-occurrence-prefer-closest-above)
- (const :tag "Prefer closest in any direction"
- company-occurrence-prefer-any-closest)))
-
-(defun company-occurrence-prefer-closest-above (pos match-beg match-end)
- "Give priority to the matches above point, then those below point."
- (if (< match-beg pos)
- (- pos match-end)
- (- match-beg (window-start))))
-
-(defun company-occurrence-prefer-any-closest (pos _match-beg match-end)
- "Give priority to the matches closest to the point."
- (abs (- pos match-end)))
-
-(defun company-sort-by-occurrence (candidates)
- "Sort CANDIDATES according to their occurrences.
-Searches for each in the currently visible part of the current buffer and
-prioritizes the matches according to `company-occurrence-weight-function'.
-The rest of the list is appended unchanged.
-Keywords and function definition names are ignored."
- (let* ((w-start (window-start))
- (w-end (window-end))
- (start-point (point))
- occurs
- (noccurs
- (save-excursion
- (cl-delete-if
- (lambda (candidate)
- (when (catch 'done
- (goto-char w-start)
- (while (search-forward candidate w-end t)
- (when (and (not (eq (point) start-point))
- (save-match-data
- (company--occurrence-predicate)))
- (throw 'done t))))
- (push
- (cons candidate
- (funcall company-occurrence-weight-function
- start-point
- (match-beginning 0)
- (match-end 0)))
- occurs)
- t))
- candidates))))
- (nconc
- (mapcar #'car (sort occurs (lambda (e1 e2) (<= (cdr e1) (cdr e2)))))
- noccurs)))
-
-(defun company--occurrence-predicate ()
- (defvar comint-last-prompt)
- (let ((beg (match-beginning 0))
- (end (match-end 0))
- (comint-last-prompt (bound-and-true-p comint-last-prompt)))
- (save-excursion
- (goto-char end)
- ;; Workaround for python-shell-completion-at-point's behavior:
- ;; https://github.com/company-mode/company-mode/issues/759
- ;; https://github.com/company-mode/company-mode/issues/549
- (when (derived-mode-p 'inferior-python-mode)
- (let ((lbp (line-beginning-position)))
- (setq comint-last-prompt (cons lbp lbp))))
- (and (not (memq (get-text-property (1- (point)) 'face)
- '(font-lock-function-name-face
- font-lock-keyword-face)))
- (let ((prefix (company--prefix-str
- (company-call-backend 'prefix))))
- (and (stringp prefix)
- (= (length prefix) (- end beg))))))))
-
-(defun company-sort-by-backend-importance (candidates)
- "Sort CANDIDATES as two priority groups.
-If `company-backend' is a function, do nothing. If it's a list, move
-candidates from backends before keyword `:with' to the front. Candidates
-from the rest of the backends in the group, if any, will be left at the end."
- (if (functionp company-backend)
- candidates
- (let ((low-priority (cdr (memq :with company-backend))))
- (if (null low-priority)
- candidates
- (sort candidates
- (lambda (c1 c2)
- (and
- (let ((b2 (get-text-property 0 'company-backend c2)))
- (and b2 (memq b2 low-priority)))
- (let ((b1 (get-text-property 0 'company-backend c1)))
- (or (not b1) (not (memq b1 low-priority)))))))))))
-
-(defun company-sort-prefer-same-case-prefix (candidates)
- "Prefer CANDIDATES with the exact same prefix.
-If a backend returns case insensitive matches, candidates with the an exact
-prefix match (same case) will be prioritized."
- (cl-loop for candidate in candidates
- if (string-prefix-p company-prefix candidate)
- collect candidate into same-case
- else collect candidate into other-case
- finally return (append same-case other-case)))
-
-(defun company-idle-begin (buf win tick pos)
- (and (eq buf (current-buffer))
- (eq win (selected-window))
- (eq tick (buffer-chars-modified-tick))
- (eq pos (point))
- (when (company-auto-begin)
- (when (version< emacs-version "24.3.50")
- (company-input-noop))
- (let ((this-command 'company-idle-begin))
- (company-post-command)))))
-
-(defun company-auto-begin ()
- (and company-mode
- (not company-candidates)
- (let ((company-idle-delay 'now))
- (condition-case-unless-debug err
- (let ((inhibit-quit nil))
- (company--perform)
- ;; Return non-nil if active.
- company-candidates)
- (error (message "Company: An error occurred in auto-begin")
- (message "%s" (error-message-string err))
- (company-cancel))
- (quit (company-cancel))))))
-
-;;;###autoload
-(defun company-manual-begin ()
- (interactive)
- (company-assert-enabled)
- (setq company--manual-action t)
- (unwind-protect
- (let ((company-minimum-prefix-length 0))
- (or company-candidates
- (company-auto-begin)))
- (unless company-candidates
- (setq company--manual-action nil))))
-
-(defun company-other-backend (&optional backward)
- (interactive (list current-prefix-arg))
- (company-assert-enabled)
- (let* ((after (if company-backend
- (cdr (member company-backend company-backends))
- company-backends))
- (before (cdr (member company-backend (reverse company-backends))))
- (next (if backward
- (append before (reverse after))
- (append after (reverse before)))))
- (company-cancel)
- (cl-dolist (backend next)
- (when (ignore-errors (company-begin-backend backend))
- (cl-return t))))
- (unless company-candidates
- (user-error "No other backend")))
-
-(defun company-require-match-p ()
- (let ((backend-value (company-call-backend 'require-match)))
- (or (eq backend-value t)
- (and (not (eq backend-value 'never))
- (if (functionp company-require-match)
- (funcall company-require-match)
- (eq company-require-match t))))))
-
-(defun company-auto-commit-p (input)
- "Return non-nil if INPUT should trigger auto-commit."
- (and (if (functionp company-auto-commit)
- (funcall company-auto-commit)
- company-auto-commit)
- (if (functionp company-auto-commit-chars)
- (funcall company-auto-commit-chars input)
- (if (consp company-auto-commit-chars)
- (memq (char-syntax (string-to-char input))
- company-auto-commit-chars)
- (string-match (regexp-quote (substring input 0 1))
- company-auto-commit-chars)))))
-
-(defun company--incremental-p ()
- (and (> (point) company-point)
- (> (point-max) company--point-max)
- (not (eq this-command 'backward-delete-char-untabify))
- (equal (buffer-substring (- company-point (length company-prefix))
- company-point)
- company-prefix)))
-
-(defun company--continue-failed (new-prefix)
- (cond
- ((and (or (not (company-require-match-p))
- ;; Don't require match if the new prefix
- ;; doesn't continue the old one, and the latter was a match.
- (not (stringp new-prefix))
- (<= (length new-prefix) (length company-prefix)))
- (member company-prefix company-candidates))
- ;; Last input was a success,
- ;; but we're treating it as an abort + input anyway,
- ;; like the `unique' case below.
- (company-cancel 'non-unique))
- ((company-require-match-p)
- ;; Wrong incremental input, but required match.
- (delete-char (- company-point (point)))
- (ding)
- (message "Matching input is required")
- company-candidates)
- (t (company-cancel))))
-
-(defun company--good-prefix-p (prefix)
- (and (stringp (company--prefix-str prefix)) ;excludes 'stop
- (or (eq (cdr-safe prefix) t)
- (let ((len (or (cdr-safe prefix) (length prefix))))
- (if company--manual-prefix
- (or (not company-abort-manual-when-too-short)
- ;; Must not be less than minimum or initial length.
- (>= len (min company-minimum-prefix-length
- (length company--manual-prefix))))
- (>= len company-minimum-prefix-length))))))
-
-(defun company--continue ()
- (when (company-call-backend 'no-cache company-prefix)
- ;; Don't complete existing candidates, fetch new ones.
- (setq company-candidates-cache nil))
- (let* ((new-prefix (company-call-backend 'prefix))
- (ignore-case (company-call-backend 'ignore-case))
- (c (when (and (company--good-prefix-p new-prefix)
- (setq new-prefix (company--prefix-str new-prefix))
- (= (- (point) (length new-prefix))
- (- company-point (length company-prefix))))
- (company-calculate-candidates new-prefix ignore-case))))
- (cond
- ((company--unique-match-p c new-prefix ignore-case)
- ;; Handle it like completion was aborted, to differentiate from user
- ;; calling one of Company's commands to insert the candidate,
- ;; not to trigger template expansion, etc.
- (company-cancel 'unique))
- ((consp c)
- ;; incremental match
- (setq company-prefix new-prefix)
- (company-update-candidates c)
- c)
- ((and (characterp last-command-event)
- (company-auto-commit-p (string last-command-event)))
- ;; auto-commit
- (save-excursion
- (goto-char company-point)
- (company-complete-selection)
- nil))
- ((not (company--incremental-p))
- (company-cancel))
- (t (company--continue-failed new-prefix)))))
-
-(defun company--begin-new ()
- (let (prefix c)
- (cl-dolist (backend (if company-backend
- ;; prefer manual override
- (list company-backend)
- company-backends))
- (setq prefix
- (if (or (symbolp backend)
- (functionp backend))
- (when (company--maybe-init-backend backend)
- (let ((company-backend backend))
- (company-call-backend 'prefix)))
- (company--multi-backend-adapter backend 'prefix)))
- (when prefix
- (when (company--good-prefix-p prefix)
- (let ((ignore-case (company-call-backend 'ignore-case)))
- (setq company-prefix (company--prefix-str prefix)
- company-backend backend
- c (company-calculate-candidates company-prefix ignore-case))
- (cond
- ((and (company--unique-match-p c company-prefix ignore-case)
- (if company--manual-action
- ;; If `company-manual-begin' was called, the user
- ;; really wants something to happen. Otherwise...
- (ignore (message "Sole completion"))
- t))
- ;; ...abort and run the hooks, e.g. to clear the cache.
- (company-cancel 'unique))
- ((null c)
- (when company--manual-action
- (message "No completion found")))
- (t ;; We got completions!
- (when company--manual-action
- (setq company--manual-prefix prefix))
- (company-update-candidates c)
- (run-hook-with-args 'company-completion-started-hook
- (company-explicit-action-p))
- (company-call-frontends 'show)))))
- (cl-return c)))))
-
-(defun company--perform ()
- (cond
- (company-candidates
- (company--continue))
- ((company--should-complete)
- (company--begin-new)))
- (if (not company-candidates)
- (setq company-backend nil)
- (setq company-point (point)
- company--point-max (point-max))
- (company-ensure-emulation-alist)
- (company-enable-overriding-keymap company-active-map)
- (company-call-frontends 'update)))
-
-(defun company-cancel (&optional result)
- (let ((prefix company-prefix)
- (backend company-backend))
- (setq company-backend nil
- company-prefix nil
- company-candidates nil
- company-candidates-length nil
- company-candidates-cache nil
- company-candidates-predicate nil
- company-common nil
- company-selection company-selection-default
- company-selection-changed nil
- company--manual-action nil
- company--manual-prefix nil
- company--point-max nil
- company-point nil)
- (when company-timer
- (cancel-timer company-timer))
- (company-echo-cancel t)
- (company-search-mode 0)
- (company-call-frontends 'hide)
- (company-enable-overriding-keymap nil)
- (when prefix
- (if (stringp result)
- (let ((company-backend backend))
- (run-hook-with-args 'company-completion-finished-hook result)
- (company-call-backend 'post-completion result))
- (run-hook-with-args 'company-completion-cancelled-hook result))
- (run-hook-with-args 'company-after-completion-hook result)))
- ;; Make return value explicit.
- nil)
-
-(defun company-abort ()
- (interactive)
- (company-cancel 'abort))
-
-(defun company-finish (result)
- (company--insert-candidate result)
- (company-cancel result))
-
-(defsubst company-keep (command)
- (and (symbolp command) (get command 'company-keep)))
-
-(defun company--active-p ()
- company-candidates)
-
-(defun company-pre-command ()
- (company--electric-restore-window-configuration)
- (unless (company-keep this-command)
- (condition-case-unless-debug err
- (when company-candidates
- (company-call-frontends 'pre-command)
- (unless (company--should-continue)
- (company-abort)))
- (error (message "Company: An error occurred in pre-command")
- (message "%s" (error-message-string err))
- (company-cancel))))
- (when company-timer
- (cancel-timer company-timer)
- (setq company-timer nil))
- (company-echo-cancel t)
- (company-uninstall-map))
-
-(defun company-post-command ()
- (when (and company-candidates
- (null this-command))
- ;; Happens when the user presses `C-g' while inside
- ;; `flyspell-post-command-hook', for example.
- ;; Or any other `post-command-hook' function that can call `sit-for',
- ;; or any quittable timer function.
- (company-abort)
- (setq this-command 'company-abort))
- (unless (company-keep this-command)
- (condition-case-unless-debug err
- (progn
- (unless (equal (point) company-point)
- (let (company-idle-delay) ; Against misbehavior while debugging.
- (company--perform)))
- (if company-candidates
- (company-call-frontends 'post-command)
- (let ((delay (company--idle-delay)))
- (and (numberp delay)
- (not defining-kbd-macro)
- (company--should-begin)
- (setq company-timer
- (run-with-timer delay nil
- 'company-idle-begin
- (current-buffer) (selected-window)
- (buffer-chars-modified-tick) (point)))))))
- (error (message "Company: An error occurred in post-command")
- (message "%s" (error-message-string err))
- (company-cancel))))
- (company-install-map))
-
-(defun company--idle-delay ()
- (let ((delay
- (if (functionp company-idle-delay)
- (funcall company-idle-delay)
- company-idle-delay)))
- (if (memql delay '(t 0 0.0))
- 0.01
- delay)))
-
-(defvar company--begin-inhibit-commands '(company-abort
- company-complete-mouse
- company-complete
- company-complete-common
- company-complete-selection
- company-complete-number)
- "List of commands after which idle completion is (still) disabled when
-`company-begin-commands' is t.")
-
-(defun company--should-begin ()
- (if (eq t company-begin-commands)
- (not (memq this-command company--begin-inhibit-commands))
- (or
- (memq this-command company-begin-commands)
- (and (symbolp this-command) (get this-command 'company-begin)))))
-
-;;; search ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defcustom company-search-regexp-function #'regexp-quote
- "Function to construct the search regexp from input.
-It's called with one argument, the current search input. It must return
-either a regexp without groups, or one where groups don't intersect and
-each one wraps a part of the input string."
- :type '(choice
- (const :tag "Exact match" regexp-quote)
- (const :tag "Words separated with spaces" company-search-words-regexp)
- (const :tag "Words separated with spaces, in any order"
- company-search-words-in-any-order-regexp)
- (const :tag "All characters in given order, with anything in between"
- company-search-flex-regexp)))
-
-(defvar-local company-search-string "")
-
-(defvar company-search-lighter '(" "
- (company-search-filtering "Filter" "Search")
- ": \""
- company-search-string
- "\""))
-
-(defvar-local company-search-filtering nil
- "Non-nil to filter the completion candidates by the search string")
-
-(defvar-local company--search-old-selection 0)
-
-(defvar-local company--search-old-changed nil)
-
-(defun company-search-words-regexp (input)
- (mapconcat (lambda (word) (format "\\(%s\\)" (regexp-quote word)))
- (split-string input " +" t) ".*"))
-
-(defun company-search-words-in-any-order-regexp (input)
- (let* ((words (mapcar (lambda (word) (format "\\(%s\\)" (regexp-quote word)))
- (split-string input " +" t)))
- (permutations (company--permutations words)))
- (mapconcat (lambda (words)
- (mapconcat #'identity words ".*"))
- permutations
- "\\|")))
-
-(defun company-search-flex-regexp (input)
- (if (zerop (length input))
- ""
- (concat (regexp-quote (string (aref input 0)))
- (mapconcat (lambda (c)
- (concat "[^" (string c) "]*"
- (regexp-quote (string c))))
- (substring input 1) ""))))
-
-(defun company--permutations (lst)
- (if (not lst)
- '(nil)
- ;; FIXME: Replace with `mapcan' in Emacs 26.
- (cl-mapcan
- (lambda (e)
- (mapcar (lambda (perm) (cons e perm))
- (company--permutations (cl-remove e lst :count 1))))
- lst)))
-
-(defun company--search (text lines)
- (let ((re (funcall company-search-regexp-function text))
- (i 0))
- (cl-dolist (line lines)
- (when (string-match-p re line (length company-prefix))
- (cl-return i))
- (cl-incf i))))
-
-(defun company-search-keypad ()
- (interactive)
- (let* ((name (symbol-name last-command-event))
- (last-command-event (aref name (1- (length name)))))
- (company-search-printing-char)))
-
-(defun company-search-printing-char ()
- (interactive)
- (company--search-assert-enabled)
- (let ((ss (concat company-search-string (string last-command-event))))
- (when company-search-filtering
- (company--search-update-predicate ss))
- (company--search-update-string ss)))
-
-(defun company--search-update-predicate (ss)
- (let* ((re (funcall company-search-regexp-function ss))
- (company-candidates-predicate
- (and (not (string= re ""))
- company-search-filtering
- (lambda (candidate) (string-match re candidate))))
- (cc (company-calculate-candidates company-prefix
- (company-call-backend 'ignore-case))))
- (unless cc (user-error "No match"))
- (company-update-candidates cc)))
-
-(defun company--search-update-string (new)
- (let* ((selection (or company-selection 0))
- (pos (company--search new (nthcdr selection company-candidates))))
- (if (null pos)
- (ding)
- (setq company-search-string new)
- (company-set-selection (+ selection pos) t))))
-
-(defun company--search-assert-input ()
- (company--search-assert-enabled)
- (when (string= company-search-string "")
- (user-error "Empty search string")))
-
-(defun company-search-repeat-forward ()
- "Repeat the incremental search in completion candidates forward."
- (interactive)
- (company--search-assert-input)
- (let* ((selection (or company-selection 0))
- (pos (company--search company-search-string
- (cdr (nthcdr selection company-candidates)))))
- (if (null pos)
- (ding)
- (company-set-selection (+ selection pos 1) t))))
-
-(defun company-search-repeat-backward ()
- "Repeat the incremental search in completion candidates backwards."
- (interactive)
- (company--search-assert-input)
- (let* ((selection (or company-selection 0))
- (pos (company--search company-search-string
- (nthcdr (- company-candidates-length
- selection)
- (reverse company-candidates)))))
- (if (null pos)
- (ding)
- (company-set-selection (- selection pos 1) t))))
-
-(defun company-search-toggle-filtering ()
- "Toggle `company-search-filtering'."
- (interactive)
- (company--search-assert-enabled)
- (setq company-search-filtering (not company-search-filtering))
- (let ((ss company-search-string))
- (company--search-update-predicate ss)
- (company--search-update-string ss)))
-
-(defun company-search-abort ()
- "Abort searching the completion candidates."
- (interactive)
- (company--search-assert-enabled)
- (company-search-mode 0)
- (company-set-selection company--search-old-selection t)
- (setq company-selection-changed company--search-old-changed))
-
-(defun company-search-other-char ()
- (interactive)
- (company--search-assert-enabled)
- (company-search-mode 0)
- (company--unread-this-command-keys))
-
-(defun company-search-delete-char ()
- (interactive)
- (company--search-assert-enabled)
- (if (string= company-search-string "")
- (ding)
- (let ((ss (substring company-search-string 0 -1)))
- (when company-search-filtering
- (company--search-update-predicate ss))
- (company--search-update-string ss))))
-
-(defvar company-search-map
- (let ((i 0)
- (keymap (make-keymap)))
- (if (fboundp 'max-char)
- (set-char-table-range (nth 1 keymap) (cons #x100 (max-char))
- 'company-search-printing-char)
- (with-no-warnings
- ;; obsolete in Emacs 23
- (let ((l (generic-character-list))
- (table (nth 1 keymap)))
- (while l
- (set-char-table-default table (car l) 'company-search-printing-char)
- (setq l (cdr l))))))
- (define-key keymap [t] 'company-search-other-char)
- (while (< i ?\s)
- (define-key keymap (make-string 1 i) 'company-search-other-char)
- (cl-incf i))
- (while (< i 256)
- (define-key keymap (vector i) 'company-search-printing-char)
- (cl-incf i))
- (dotimes (i 10)
- (define-key keymap (read (format "[kp-%s]" i)) 'company-search-keypad))
- (let ((meta-map (make-sparse-keymap)))
- (define-key keymap (char-to-string meta-prefix-char) meta-map)
- (define-key keymap [escape] meta-map))
- (define-key keymap (vector meta-prefix-char t) 'company-search-other-char)
- (define-key keymap (kbd "M-n") 'company-select-next)
- (define-key keymap (kbd "M-p") 'company-select-previous)
- (define-key keymap (kbd "<down>") 'company-select-next-or-abort)
- (define-key keymap (kbd "<up>") 'company-select-previous-or-abort)
- (define-key keymap "\e\e\e" 'company-search-other-char)
- (define-key keymap [escape escape escape] 'company-search-other-char)
- (define-key keymap (kbd "DEL") 'company-search-delete-char)
- (define-key keymap [backspace] 'company-search-delete-char)
- (define-key keymap "\C-g" 'company-search-abort)
- (define-key keymap "\C-s" 'company-search-repeat-forward)
- (define-key keymap "\C-r" 'company-search-repeat-backward)
- (define-key keymap "\C-o" 'company-search-toggle-filtering)
- (dotimes (i 10)
- (define-key keymap (read-kbd-macro (format "M-%d" i)) 'company-complete-number))
- keymap)
- "Keymap used for incrementally searching the completion candidates.")
-
-(define-minor-mode company-search-mode
- "Search mode for completion candidates.
-Don't start this directly, use `company-search-candidates' or
-`company-filter-candidates'."
- nil company-search-lighter nil
- (if company-search-mode
- (if (company-manual-begin)
- (progn
- (setq company--search-old-selection company-selection
- company--search-old-changed company-selection-changed)
- (company-call-frontends 'update)
- (company-enable-overriding-keymap company-search-map))
- (setq company-search-mode nil))
- (kill-local-variable 'company-search-string)
- (kill-local-variable 'company-search-filtering)
- (kill-local-variable 'company--search-old-selection)
- (kill-local-variable 'company--search-old-changed)
- (when company-backend
- (company--search-update-predicate "")
- (company-call-frontends 'update))
- (company-enable-overriding-keymap company-active-map)))
-
-(defun company--search-assert-enabled ()
- (company-assert-enabled)
- (unless company-search-mode
- (company-uninstall-map)
- (user-error "Company not in search mode")))
-
-(defun company-search-candidates ()
- "Start searching the completion candidates incrementally.
-
-\\<company-search-map>Search can be controlled with the commands:
-- `company-search-repeat-forward' (\\[company-search-repeat-forward])
-- `company-search-repeat-backward' (\\[company-search-repeat-backward])
-- `company-search-abort' (\\[company-search-abort])
-- `company-search-delete-char' (\\[company-search-delete-char])
-
-Regular characters are appended to the search string.
-
-Customize `company-search-regexp-function' to change how the input
-is interpreted when searching.
-
-The command `company-search-toggle-filtering' (\\[company-search-toggle-filtering])
-uses the search string to filter the completion candidates."
- (interactive)
- (company-search-mode 1))
-
-(defun company-filter-candidates ()
- "Start filtering the completion candidates incrementally.
-This works the same way as `company-search-candidates' immediately
-followed by `company-search-toggle-filtering'."
- (interactive)
- (company-search-mode 1)
- (setq company-search-filtering t))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun company-select-next (&optional arg)
- "Select the next candidate in the list.
-
-With ARG, move by that many elements.
-When `company-selection-default' is nil, add a special pseudo candidates
-meant for no selection."
- (interactive "p")
- (when (company-manual-begin)
- (let ((selection (+ (or arg 1)
- (or company-selection
- company-selection-default
- -1)
- (if company-selection-default 0 1))))
- (company-set-selection selection))))
-
-(defun company-select-previous (&optional arg)
- "Select the previous candidate in the list.
-
-With ARG, move by that many elements."
- (interactive "p")
- (company-select-next (if arg (- arg) -1)))
-
-(defun company-select-next-or-abort (&optional arg)
- "Select the next candidate if more than one, else abort
-and invoke the normal binding.
-
-With ARG, move by that many elements."
- (interactive "p")
- (if (> company-candidates-length 1)
- (company-select-next arg)
- (company-abort)
- (company--unread-this-command-keys)))
-
-(defun company-select-previous-or-abort (&optional arg)
- "Select the previous candidate if more than one, else abort
-and invoke the normal binding.
-
-With ARG, move by that many elements."
- (interactive "p")
- (if (> company-candidates-length 1)
- (company-select-previous arg)
- (company-abort)
- (company--unread-this-command-keys)))
-
-(defun company-next-page ()
- "Select the candidate one page further."
- (interactive)
- (when (company-manual-begin)
- (if (and company-selection-wrap-around
- (= company-selection (1- company-candidates-length)))
- (company-set-selection 0)
- (let (company-selection-wrap-around)
- (company-set-selection (+ company-selection
- company-tooltip-limit))))))
-
-(defun company-previous-page ()
- "Select the candidate one page earlier."
- (interactive)
- (when (company-manual-begin)
- (if (and company-selection-wrap-around
- (zerop company-selection))
- (company-set-selection (1- company-candidates-length))
- (let (company-selection-wrap-around)
- (company-set-selection (- company-selection
- company-tooltip-limit))))))
-
-(defvar company-pseudo-tooltip-overlay)
-
-(defvar company-tooltip-offset)
-
-(defun company--inside-tooltip-p (event-col-row row height)
- (let* ((ovl company-pseudo-tooltip-overlay)
- (column (overlay-get ovl 'company-column))
- (width (overlay-get ovl 'company-width))
- (evt-col (car event-col-row))
- (evt-row (cdr event-col-row)))
- (and (>= evt-col column)
- (< evt-col (+ column width))
- (if (> height 0)
- (and (> evt-row row)
- (<= evt-row (+ row height) ))
- (and (< evt-row row)
- (>= evt-row (+ row height)))))))
-
-(defun company--event-col-row (event)
- (company--posn-col-row (event-start event)))
-
-(defun company-select-mouse (event)
- "Select the candidate picked by the mouse."
- (interactive "e")
- (let ((event-col-row (company--event-col-row event))
- (ovl-row (company--row))
- (ovl-height (and company-pseudo-tooltip-overlay
- (min (overlay-get company-pseudo-tooltip-overlay
- 'company-height)
- company-candidates-length))))
- (if (and ovl-height
- (company--inside-tooltip-p event-col-row ovl-row ovl-height))
- (progn
- (company-set-selection (+ (cdr event-col-row)
- (1- company-tooltip-offset)
- (if (and (eq company-tooltip-offset-display 'lines)
- (not (zerop company-tooltip-offset)))
- -1 0)
- (- ovl-row)
- (if (< ovl-height 0)
- (- 1 ovl-height)
- 0)))
- t)
- (company-abort)
- (company--unread-this-command-keys)
- nil)))
-
-(defun company-complete-mouse (event)
- "Insert the candidate picked by the mouse."
- (interactive "e")
- (when (company-select-mouse event)
- (company-complete-selection)))
-
-(defun company-complete-selection ()
- "Insert the selected candidate."
- (interactive)
- (when (and (company-manual-begin) company-selection)
- (let ((result (nth company-selection company-candidates)))
- (company-finish result))))
-
-(defun company-complete-common ()
- "Insert the common part of all candidates."
- (interactive)
- (when (company-manual-begin)
- (if (and (not (cdr company-candidates))
- (equal company-common (car company-candidates)))
- (company-complete-selection)
- (company--insert-candidate company-common))))
-
-(defun company-complete-common-or-cycle (&optional arg)
- "Insert the common part of all candidates, or select the next one.
-
-With ARG, move by that many elements."
- (interactive "p")
- (when (company-manual-begin)
- (let ((tick (buffer-chars-modified-tick)))
- (call-interactively 'company-complete-common)
- (when (eq tick (buffer-chars-modified-tick))
- (let ((company-selection-wrap-around t)
- (current-prefix-arg arg))
- (call-interactively 'company-select-next))))))
-
-(defun company-indent-or-complete-common (arg)
- "Indent the current line or region, or complete the common part."
- (interactive "P")
- (cond
- ((use-region-p)
- (indent-region (region-beginning) (region-end)))
- ((memq indent-line-function
- '(indent-relative indent-relative-maybe))
- (company-complete-common))
- ((let ((old-point (point))
- (old-tick (buffer-chars-modified-tick))
- (tab-always-indent t))
- (indent-for-tab-command arg)
- (when (and (eq old-point (point))
- (eq old-tick (buffer-chars-modified-tick)))
- (company-complete-common))))))
-
-(defun company-select-next-if-tooltip-visible-or-complete-selection ()
- "Insert selection if appropriate, or select the next candidate.
-Insert selection if only preview is showing or only one candidate,
-otherwise select the next candidate."
- (interactive)
- (if (and (company-tooltip-visible-p) (> company-candidates-length 1))
- (call-interactively 'company-select-next)
- (call-interactively 'company-complete-selection)))
-
-;;;###autoload
-(defun company-complete ()
- "Insert the common part of all candidates or the current selection.
-The first time this is called, the common part is inserted, the second
-time, or when the selection has been changed, the selected candidate is
-inserted."
- (interactive)
- (when (company-manual-begin)
- (if (or company-selection-changed
- (and (eq real-last-command 'company-complete)
- (eq last-command 'company-complete-common)))
- (call-interactively 'company-complete-selection)
- (call-interactively 'company-complete-common)
- (when company-candidates
- (setq this-command 'company-complete-common)))))
-
-(defun company-complete-number (n)
- "Insert the Nth candidate visible in the tooltip.
-To show the number next to the candidates in some backends, enable
-`company-show-numbers'. When called interactively, uses the last typed
-character, stripping the modifiers. That character must be a digit."
- (interactive
- (list (let* ((type (event-basic-type last-command-event))
- (char (if (characterp type)
- ;; Number on the main row.
- type
- ;; Keypad number, if bound directly.
- (car (last (string-to-list (symbol-name type))))))
- (n (- char ?0)))
- (if (zerop n) 10 n))))
- (when (company-manual-begin)
- (and (or (< n 1) (> n (- company-candidates-length
- company-tooltip-offset)))
- (user-error "No candidate number %d" n))
- (cl-decf n)
- (company-finish (nth (+ n company-tooltip-offset)
- company-candidates))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst company-space-strings-limit 100)
-
-(defconst company-space-strings
- (let (lst)
- (dotimes (i company-space-strings-limit)
- (push (make-string (- company-space-strings-limit 1 i) ?\ ) lst))
- (apply 'vector lst)))
-
-(defun company-space-string (len)
- (if (< len company-space-strings-limit)
- (aref company-space-strings len)
- (make-string len ?\ )))
-
-(defun company-safe-substring (str from &optional to)
- (let ((bis buffer-invisibility-spec))
- (if (> from (string-width str))
- ""
- (with-temp-buffer
- (setq buffer-invisibility-spec bis)
- (insert str)
- (move-to-column from)
- (let ((beg (point)))
- (if to
- (progn
- (move-to-column to)
- (concat (buffer-substring beg (point))
- (let ((padding (- to (current-column))))
- (when (> padding 0)
- (company-space-string padding)))))
- (buffer-substring beg (point-max))))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-last-metadata nil)
-
-(defun company-fetch-metadata ()
- (let ((selected (nth (or company-selection 0) company-candidates)))
- (unless (eq selected (car company-last-metadata))
- (setq company-last-metadata
- (cons selected (company-call-backend 'meta selected))))
- (cdr company-last-metadata)))
-
-(defun company-doc-buffer (&optional string)
- (with-current-buffer (get-buffer-create "*company-documentation*")
- (erase-buffer)
- (fundamental-mode)
- (when string
- (save-excursion
- (insert string)
- (visual-line-mode)))
- (current-buffer)))
-
-(defvar company--electric-saved-window-configuration nil)
-
-(defvar company--electric-commands
- '(scroll-other-window scroll-other-window-down mwheel-scroll)
- "List of Commands that won't break out of electric commands.")
-
-(defun company--electric-restore-window-configuration ()
- "Restore window configuration (after electric commands)."
- (when (and company--electric-saved-window-configuration
- (not (memq this-command company--electric-commands)))
- (set-window-configuration company--electric-saved-window-configuration)
- (setq company--electric-saved-window-configuration nil)))
-
-(defmacro company--electric-do (&rest body)
- (declare (indent 0) (debug t))
- `(when (company-manual-begin)
- (cl-assert (null company--electric-saved-window-configuration))
- (setq company--electric-saved-window-configuration (current-window-configuration))
- (let ((height (window-height))
- (row (company--row)))
- ,@body
- (and (< (window-height) height)
- (< (- (window-height) row 2) company-tooltip-limit)
- (recenter (- (window-height) row 2))))))
-
-(defun company--unread-this-command-keys ()
- (when (> (length (this-command-keys)) 0)
- (setq unread-command-events (nconc
- (listify-key-sequence (this-command-keys))
- unread-command-events))
- (clear-this-command-keys t)))
-
-(defun company-show-doc-buffer ()
- "Temporarily show the documentation buffer for the selection."
- (interactive)
- (let ((other-window-scroll-buffer)
- (selection (or company-selection 0)))
- (company--electric-do
- (let* ((selected (nth selection company-candidates))
- (doc-buffer (or (company-call-backend 'doc-buffer selected)
- (user-error "No documentation available")))
- start)
- (when (consp doc-buffer)
- (setq start (cdr doc-buffer)
- doc-buffer (car doc-buffer)))
- (setq other-window-scroll-buffer (get-buffer doc-buffer))
- (let ((win (display-buffer doc-buffer t)))
- (set-window-start win (if start start (point-min))))))))
-(put 'company-show-doc-buffer 'company-keep t)
-
-(defun company-show-location ()
- "Temporarily display a buffer showing the selected candidate in context."
- (interactive)
- (let (other-window-scroll-buffer)
- (company--electric-do
- (let* ((selected (nth company-selection company-candidates))
- (location (company-call-backend 'location selected))
- (pos (or (cdr location) (user-error "No location available")))
- (buffer (or (and (bufferp (car location)) (car location))
- (find-file-noselect (car location) t))))
- (setq other-window-scroll-buffer (get-buffer buffer))
- (with-selected-window (display-buffer buffer t)
- (save-restriction
- (widen)
- (if (bufferp (car location))
- (goto-char pos)
- (goto-char (point-min))
- (forward-line (1- pos))))
- (set-window-start nil (point)))))))
-(put 'company-show-location 'company-keep t)
-
-;;; package functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-callback nil)
-
-(defun company-remove-callback (&optional ignored)
- (remove-hook 'company-completion-finished-hook company-callback t)
- (remove-hook 'company-completion-cancelled-hook 'company-remove-callback t)
- (remove-hook 'company-completion-finished-hook 'company-remove-callback t))
-
-(defun company-begin-backend (backend &optional callback)
- "Start a completion at point using BACKEND."
- (interactive (let ((val (completing-read "Company backend: "
- obarray
- 'functionp nil "company-")))
- (when val
- (list (intern val)))))
- (when (setq company-callback callback)
- (add-hook 'company-completion-finished-hook company-callback nil t))
- (add-hook 'company-completion-cancelled-hook 'company-remove-callback nil t)
- (add-hook 'company-completion-finished-hook 'company-remove-callback nil t)
- (setq company-backend backend)
- ;; Return non-nil if active.
- (or (company-manual-begin)
- (user-error "Cannot complete at point")))
-
-(defun company-begin-with (candidates
- &optional prefix-length require-match callback)
- "Start a completion at point.
-CANDIDATES is the list of candidates to use and PREFIX-LENGTH is the length
-of the prefix that already is in the buffer before point.
-It defaults to 0.
-
-CALLBACK is a function called with the selected result if the user
-successfully completes the input.
-
-Example: \(company-begin-with '\(\"foo\" \"foobar\" \"foobarbaz\"\)\)"
- (let ((begin-marker (copy-marker (point) t)))
- (company-begin-backend
- (lambda (command &optional arg &rest ignored)
- (pcase command
- (`prefix
- (when (equal (point) (marker-position begin-marker))
- (buffer-substring (- (point) (or prefix-length 0)) (point))))
- (`candidates
- (all-completions arg candidates))
- (`require-match
- require-match)))
- callback)))
-
-(declare-function find-library-name "find-func")
-(declare-function lm-version "lisp-mnt")
-
-(defun company-version (&optional show-version)
- "Get the Company version as string.
-
-If SHOW-VERSION is non-nil, show the version in the echo area."
- (interactive (list t))
- (with-temp-buffer
- (require 'find-func)
- (insert-file-contents (find-library-name "company"))
- (require 'lisp-mnt)
- (if show-version
- (message "Company version: %s" (lm-version))
- (lm-version))))
-
-(defun company-diag ()
- "Pop a buffer with information about completions at point."
- (interactive)
- (let* ((bb company-backends)
- (mode (symbol-name major-mode))
- backend
- (prefix (cl-loop for b in bb
- thereis (let ((company-backend b))
- (setq backend b)
- (company-call-backend 'prefix))))
- (c-a-p-f completion-at-point-functions)
- cc annotations)
- (when (or (stringp prefix) (consp prefix))
- (let ((company-backend backend))
- (condition-case nil
- (setq cc (company-call-backend 'candidates (company--prefix-str prefix))
- annotations
- (mapcar
- (lambda (c) (cons c (company-call-backend 'annotation c)))
- cc))
- (error (setq annotations 'error)))))
- (pop-to-buffer (get-buffer-create "*company-diag*"))
- (setq buffer-read-only nil)
- (erase-buffer)
- (insert (format "Emacs %s (%s) of %s on %s"
- emacs-version system-configuration
- (format-time-string "%Y-%m-%d" emacs-build-time)
- emacs-build-system))
- (insert "\nCompany " (company-version) "\n\n")
- (insert "company-backends: " (pp-to-string bb))
- (insert "\n")
- (insert "Used backend: " (pp-to-string backend))
- (insert "\n")
- (when (if (listp backend)
- (memq 'company-capf backend)
- (eq backend 'company-capf))
- (insert "Value of c-a-p-f: "
- (pp-to-string c-a-p-f)))
- (insert "Major mode: " mode)
- (insert "\n")
- (insert "Prefix: " (pp-to-string prefix))
- (insert "\n")
- (insert "Completions:")
- (unless cc (insert " none"))
- (if (eq annotations 'error)
- (insert "(error fetching)")
- (save-excursion
- (dolist (c annotations)
- (insert "\n " (prin1-to-string (car c)))
- (when (cdr c)
- (insert " " (prin1-to-string (cdr c)))))))
- (special-mode)))
-
-;;; pseudo-tooltip ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-pseudo-tooltip-overlay nil)
-
-(defvar-local company-tooltip-offset 0)
-
-(defvar-local company--tooltip-current-width 0)
-
-(defun company-tooltip--lines-update-offset (selection num-lines limit)
- (cl-decf limit 2)
- (setq company-tooltip-offset
- (max (min selection company-tooltip-offset)
- (- selection -1 limit)))
-
- (when (<= company-tooltip-offset 1)
- (cl-incf limit)
- (setq company-tooltip-offset 0))
-
- (when (>= company-tooltip-offset (- num-lines limit 1))
- (cl-incf limit)
- (when (= selection (1- num-lines))
- (cl-decf company-tooltip-offset)
- (when (<= company-tooltip-offset 1)
- (setq company-tooltip-offset 0)
- (cl-incf limit))))
-
- limit)
-
-(defun company-tooltip--simple-update-offset (selection _num-lines limit)
- (setq company-tooltip-offset
- (if (< selection company-tooltip-offset)
- selection
- (max company-tooltip-offset
- (- selection limit -1)))))
-
-;;; propertize
-
-(defsubst company-round-tab (arg)
- (* (/ (+ arg tab-width) tab-width) tab-width))
-
-(defun company-plainify (str)
- (let ((prefix (get-text-property 0 'line-prefix str)))
- (when prefix ; Keep the original value unmodified, for no special reason.
- (setq str (concat prefix str))
- (remove-text-properties 0 (length str) '(line-prefix) str)))
- (let* ((pieces (split-string str "\t"))
- (copy pieces))
- (while (cdr copy)
- (setcar copy (company-safe-substring
- (car copy) 0 (company-round-tab (string-width (car copy)))))
- (pop copy))
- (apply 'concat pieces)))
-
-(defun company-fill-propertize (value annotation width selected left right)
- (let* ((margin (length left))
- (common (or (company-call-backend 'match value)
- (if company-common
- (string-width company-common)
- 0)))
- (_ (setq value (company-reformat (company--pre-render value))
- annotation (and annotation (company--pre-render annotation t))))
- (ann-ralign company-tooltip-align-annotations)
- (ann-truncate (< width
- (+ (length value) (length annotation)
- (if ann-ralign 1 0))))
- (ann-start (+ margin
- (if ann-ralign
- (if ann-truncate
- (1+ (length value))
- (- width (length annotation)))
- (length value))))
- (ann-end (min (+ ann-start (length annotation)) (+ margin width)))
- (line (concat left
- (if (or ann-truncate (not ann-ralign))
- (company-safe-substring
- (concat value
- (when (and annotation ann-ralign) " ")
- annotation)
- 0 width)
- (concat
- (company-safe-substring value 0
- (- width (length annotation)))
- annotation))
- right)))
- (setq width (+ width margin (length right)))
-
- ;; TODO: Use add-face-text-property in Emacs 24.4
- (font-lock-append-text-property 0 width 'mouse-face
- 'company-tooltip-mouse
- line)
- (when (< ann-start ann-end)
- (font-lock-append-text-property ann-start ann-end 'face
- (if selected
- 'company-tooltip-annotation-selection
- 'company-tooltip-annotation)
- line))
- (cl-loop
- with width = (- width (length right))
- for (comp-beg . comp-end) in (if (integerp common) `((0 . ,common)) common)
- for inline-beg = (+ margin comp-beg)
- for inline-end = (min (+ margin comp-end) width)
- when (< inline-beg width)
- do (font-lock-prepend-text-property inline-beg inline-end 'face
- (if selected
- 'company-tooltip-common-selection
- 'company-tooltip-common)
- line))
- (when (let ((re (funcall company-search-regexp-function
- company-search-string)))
- (and (not (string= re ""))
- (string-match re value (length company-prefix))))
- (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
- (let ((beg (+ margin mbeg))
- (end (+ margin mend))
- (width (- width (length right))))
- (when (< beg width)
- (font-lock-prepend-text-property beg (min end width) 'face
- (if selected
- 'company-tooltip-search-selection
- 'company-tooltip-search)
- line)))))
- (when selected
- (font-lock-append-text-property 0 width 'face
- 'company-tooltip-selection
- line))
- (font-lock-append-text-property 0 width 'face
- 'company-tooltip
- line)
- line))
-
-(defun company--search-chunks ()
- (let ((md (match-data t))
- res)
- (if (<= (length md) 2)
- (push (cons (nth 0 md) (nth 1 md)) res)
- (while (setq md (nthcdr 2 md))
- (when (car md)
- (push (cons (car md) (cadr md)) res))))
- res))
-
-(defun company--pre-render (str &optional annotation-p)
- (or (company-call-backend 'pre-render str annotation-p)
- (progn
- (when (or (text-property-not-all 0 (length str) 'face nil str)
- (text-property-not-all 0 (length str) 'mouse-face nil str))
- (setq str (copy-sequence str))
- (remove-text-properties 0 (length str)
- '(face nil font-lock-face nil mouse-face nil)
- str))
- str)))
-
-(defun company--clean-string (str)
- (replace-regexp-in-string
- "\\([^[:graph:] ]\\)\\|\\(\ufeff\\)\\|[[:multibyte:]]"
- (lambda (match)
- (cond
- ((match-beginning 1)
- ;; FIXME: Better char for 'non-printable'?
- ;; We shouldn't get any of these, but sometimes we might.
- ;; The official "replacement character" is not supported by some fonts.
- ;;"\ufffd"
- "?"
- )
- ((match-beginning 2)
- ;; Zero-width non-breakable space.
- "")
- ((> (string-width match) 1)
- (concat
- (make-string (1- (string-width match)) ?\ufeff)
- match))
- (t match)))
- str))
-
-;;; replace
-
-(defun company-buffer-lines (beg end)
- (goto-char beg)
- (let (lines lines-moved)
- (while (and (not (eobp)) ; http://debbugs.gnu.org/19553
- (> (setq lines-moved (vertical-motion 1)) 0)
- (<= (point) end))
- (let ((bound (min end (point))))
- ;; A visual line can contain several physical lines (e.g. with outline's
- ;; folding overlay). Take only the first one.
- (push (buffer-substring beg
- (save-excursion
- (goto-char beg)
- (re-search-forward "$" bound 'move)
- (point)))
- lines))
- ;; One physical line can be displayed as several visual ones as well:
- ;; add empty strings to the list, to even the count.
- (dotimes (_ (1- lines-moved))
- (push "" lines))
- (setq beg (point)))
- (unless (eq beg end)
- (push (buffer-substring beg end) lines))
- (nreverse lines)))
-
-(defun company-modify-line (old new offset)
- (concat (company-safe-substring old 0 offset)
- new
- (company-safe-substring old (+ offset (length new)))))
-
-(defun company--show-numbers (numbered)
- (format " %d" (mod numbered 10)))
-
-(defsubst company--window-height ()
- (if (fboundp 'window-screen-lines)
- (floor (window-screen-lines))
- (window-body-height)))
-
-(defun company--window-width ()
- (let ((ww (window-body-width)))
- ;; Account for the line continuation column.
- (when (zerop (cadr (window-fringes)))
- (cl-decf ww))
- (when (bound-and-true-p display-line-numbers)
- (cl-decf ww (+ 2 (line-number-display-width))))
- (unless (or (display-graphic-p)
- (version< "24.3.1" emacs-version))
- ;; Emacs 24.3 and earlier included margins
- ;; in window-width when in TTY.
- (cl-decf ww
- (let ((margins (window-margins)))
- (+ (or (car margins) 0)
- (or (cdr margins) 0)))))
- (when (and word-wrap
- (version< emacs-version "24.4.51.5"))
- ;; http://debbugs.gnu.org/19300
- (cl-decf ww))
- ;; whitespace-mode with newline-mark
- (when (and buffer-display-table
- (aref buffer-display-table ?\n))
- (cl-decf ww (1- (length (aref buffer-display-table ?\n)))))
- ww))
-
-(defun company--face-attribute (face attr)
- ;; Like `face-attribute', but accounts for faces that have been remapped to
- ;; another face, a list of faces, or a face spec.
- (cond ((null face) nil)
- ((symbolp face)
- (let ((remap (cdr (assq face face-remapping-alist))))
- (if remap
- (company--face-attribute
- ;; Faces can be remapped to their unremapped selves, but that
- ;; would cause us infinite recursion.
- (if (listp remap) (remq face remap) remap)
- attr)
- (face-attribute face attr nil t))))
- ((keywordp (car-safe face))
- (or (plist-get face attr)
- (company--face-attribute (plist-get face :inherit) attr)))
- ((listp face)
- (cl-find-if #'stringp
- (mapcar (lambda (f) (company--face-attribute f attr))
- face)))))
-
-(defun company--replacement-string (lines old column nl &optional align-top)
- (cl-decf column company-tooltip-margin)
-
- (when (and align-top company-tooltip-flip-when-above)
- (setq lines (reverse lines)))
-
- (let ((width (length (car lines)))
- (remaining-cols (- (+ (company--window-width) (window-hscroll))
- column)))
- (when (> width remaining-cols)
- (cl-decf column (- width remaining-cols))))
-
- (let ((offset (and (< column 0) (- column)))
- new)
- (when offset
- (setq column 0))
- (when align-top
- ;; untouched lines first
- (dotimes (_ (- (length old) (length lines)))
- (push (pop old) new)))
- ;; length into old lines.
- (while old
- (push (company-modify-line (pop old)
- (company--offset-line (pop lines) offset)
- column)
- new))
- ;; Append whole new lines.
- (while lines
- (push (concat (company-space-string column)
- (company--offset-line (pop lines) offset))
- new))
-
- ;; XXX: Also see branch 'more-precise-extend'.
- (let* ((nl-face (list
- :extend t
- :inverse-video nil
- :background (or (company--face-attribute 'default :background)
- (face-attribute 'default :background nil t))))
- (str (apply #'concat
- (when nl " \n")
- (cl-mapcan
- ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=42552#23
- (lambda (line) (list line (propertize "\n" 'face nl-face)))
- (nreverse new)))))
- ;; Use add-face-text-property in Emacs 24.4
- ;; https://debbugs.gnu.org/38563
- (font-lock-append-text-property 0 (length str) 'face 'default str)
- (when nl (put-text-property 0 1 'cursor t str))
- str)))
-
-(defun company--offset-line (line offset)
- (if (and offset line)
- (substring line offset)
- line))
-
-(defun company--create-lines (selection limit)
- (let ((len company-candidates-length)
- (window-width (company--window-width))
- lines
- width
- lines-copy
- items
- previous
- remainder
- scrollbar-bounds)
-
- ;; Maybe clear old offset.
- (when (< len (+ company-tooltip-offset limit))
- (setq company-tooltip-offset 0))
-
- (let ((selection (or selection 0)))
- ;; Scroll to offset.
- (if (eq company-tooltip-offset-display 'lines)
- (setq limit (company-tooltip--lines-update-offset selection len limit))
- (company-tooltip--simple-update-offset selection len limit))
-
- (cond
- ((eq company-tooltip-offset-display 'scrollbar)
- (setq scrollbar-bounds (company--scrollbar-bounds company-tooltip-offset
- limit len)))
- ((eq company-tooltip-offset-display 'lines)
- (when (> company-tooltip-offset 0)
- (setq previous (format "...(%d)" company-tooltip-offset)))
- (setq remainder (- len limit company-tooltip-offset)
- remainder (when (> remainder 0)
- (setq remainder (format "...(%d)" remainder)))))))
-
- (when selection
- (cl-decf selection company-tooltip-offset))
-
- (setq width (max (length previous) (length remainder))
- lines (nthcdr company-tooltip-offset company-candidates)
- len (min limit len)
- lines-copy lines)
-
- (cl-decf window-width (* 2 company-tooltip-margin))
- (when scrollbar-bounds (cl-decf window-width))
-
- (dotimes (_ len)
- (let* ((value (pop lines-copy))
- (annotation (company-call-backend 'annotation value)))
- (setq value (company--clean-string value))
- (when annotation
- (setq annotation (company--clean-string annotation))
- (when company-tooltip-align-annotations
- ;; `lisp-completion-at-point' adds a space.
- ;; FIXME: Use `string-trim' in Emacs 24.4
- (setq annotation (comment-string-strip annotation t nil))))
- (push (cons value annotation) items)
- (setq width (max (+ (length value)
- (if (and annotation company-tooltip-align-annotations)
- (1+ (length annotation))
- (length annotation)))
- width))))
-
- (setq width (min window-width
- company-tooltip-maximum-width
- (max company-tooltip-minimum-width
- (if company-show-numbers
- (+ 2 width)
- width))))
-
- (when company-tooltip-width-grow-only
- (setq width (max company--tooltip-current-width width))
- (setq company--tooltip-current-width width))
-
- (let ((items (nreverse items))
- (numbered (if company-show-numbers 0 99999))
- new)
- (when previous
- (push (company--scrollpos-line previous width) new))
-
- (dotimes (i len)
- (let* ((item (pop items))
- (str (car item))
- (annotation (cdr item))
- (margin (company-space-string company-tooltip-margin))
- (left margin)
- (right margin)
- (width width))
- (when (< numbered 10)
- (cl-decf width 2)
- (cl-incf numbered)
- (setf (if (eq company-show-numbers 'left) left right)
- (concat (funcall company-show-numbers-function numbered)
- margin)))
- (push (concat
- (company-fill-propertize str annotation
- width (equal i selection)
- left
- right)
- (when scrollbar-bounds
- (company--scrollbar i scrollbar-bounds)))
- new)))
-
- (when remainder
- (push (company--scrollpos-line remainder width) new))
-
- (nreverse new))))
-
-(defun company--scrollbar-bounds (offset limit length)
- (when (> length limit)
- (let* ((size (ceiling (* limit (float limit)) length))
- (lower (floor (* limit (float offset)) length))
- (upper (+ lower size -1)))
- (cons lower upper))))
-
-(defun company--scrollbar (i bounds)
- (propertize " " 'face
- (if (and (>= i (car bounds)) (<= i (cdr bounds)))
- 'company-scrollbar-fg
- 'company-scrollbar-bg)))
-
-(defun company--scrollpos-line (text width)
- (propertize (concat (company-space-string company-tooltip-margin)
- (company-safe-substring text 0 width)
- (company-space-string company-tooltip-margin))
- 'face 'company-tooltip))
-
-;; show
-
-(defun company--pseudo-tooltip-height ()
- "Calculate the appropriate tooltip height.
-Returns a negative number if the tooltip should be displayed above point."
- (let* ((lines (company--row))
- (below (- (company--window-height) 1 lines)))
- (if (and (< below (min company-tooltip-minimum company-candidates-length))
- (> lines below))
- (- (max 3 (min company-tooltip-limit lines)))
- (max 3 (min company-tooltip-limit below)))))
-
-(defun company-pseudo-tooltip-show (row column selection)
- (company-pseudo-tooltip-hide)
-
- (let* ((height (company--pseudo-tooltip-height))
- above)
-
- (when (< height 0)
- (setq row (+ row height -1)
- above t))
-
- (let (nl beg end ov args)
- (save-excursion
- (setq nl (< (move-to-window-line row) row)
- beg (point)
- end (save-excursion
- (move-to-window-line (+ row (abs height)))
- (point))
- ov (make-overlay beg end nil t)
- args (list (mapcar 'company-plainify
- (company-buffer-lines beg end))
- column nl above)))
-
- (setq company-pseudo-tooltip-overlay ov)
- (overlay-put ov 'company-replacement-args args)
-
- (let ((lines (company--create-lines selection (abs height))))
- (overlay-put ov 'company-display
- (apply 'company--replacement-string lines args))
- (overlay-put ov 'company-width (string-width (car lines))))
-
- (overlay-put ov 'company-column column)
- (overlay-put ov 'company-height height))))
-
-(defun company-pseudo-tooltip-show-at-point (pos column-offset)
- (let* ((col-row (company--col-row pos))
- (col (- (car col-row) column-offset)))
- (when (< col 0) (setq col 0))
- (company-pseudo-tooltip-show (1+ (cdr col-row)) col company-selection)))
-
-(defun company-pseudo-tooltip-edit (selection)
- (let* ((height (overlay-get company-pseudo-tooltip-overlay 'company-height))
- (lines (company--create-lines selection (abs height))))
- (overlay-put company-pseudo-tooltip-overlay 'company-width
- (string-width (car lines)))
- (overlay-put company-pseudo-tooltip-overlay 'company-display
- (apply 'company--replacement-string
- lines
- (overlay-get company-pseudo-tooltip-overlay
- 'company-replacement-args)))))
-
-(defun company-pseudo-tooltip-hide ()
- (when company-pseudo-tooltip-overlay
- (delete-overlay company-pseudo-tooltip-overlay)
- (setq company-pseudo-tooltip-overlay nil)))
-
-(defun company-pseudo-tooltip-hide-temporarily ()
- (when (overlayp company-pseudo-tooltip-overlay)
- (overlay-put company-pseudo-tooltip-overlay 'invisible nil)
- (overlay-put company-pseudo-tooltip-overlay 'line-prefix nil)
- (overlay-put company-pseudo-tooltip-overlay 'after-string nil)
- (overlay-put company-pseudo-tooltip-overlay 'display nil)
- (overlay-put company-pseudo-tooltip-overlay 'face nil)))
-
-(defun company-pseudo-tooltip-unhide ()
- (when company-pseudo-tooltip-overlay
- (let* ((ov company-pseudo-tooltip-overlay)
- (disp (overlay-get ov 'company-display)))
- ;; Beat outline's folding overlays.
- ;; And Flymake (53). And Flycheck (110).
- (overlay-put ov 'priority 111)
- ;; No (extra) prefix for the first line.
- (overlay-put ov 'line-prefix "")
- (overlay-put ov 'after-string disp)
- ;; `display' is better than `invisible':
- ;; https://debbugs.gnu.org/18285
- ;; https://debbugs.gnu.org/20847
- ;; https://debbugs.gnu.org/42521
- (overlay-put ov 'display "")
- (overlay-put ov 'window (selected-window)))))
-
-(defun company-pseudo-tooltip-guard ()
- (list
- (save-excursion (beginning-of-visual-line))
- (window-width)
- (let ((ov company-pseudo-tooltip-overlay)
- (overhang (save-excursion (end-of-visual-line)
- (- (line-end-position) (point)))))
- (when (>= (overlay-get ov 'company-height) 0)
- (cons
- (buffer-substring-no-properties (point) (overlay-start ov))
- (when (>= overhang 0) overhang))))))
-
-(defun company-pseudo-tooltip-frontend (command)
- "`company-mode' frontend similar to a tooltip but based on overlays."
- (cl-case command
- (pre-command (company-pseudo-tooltip-hide-temporarily))
- (post-command
- (unless (when (overlayp company-pseudo-tooltip-overlay)
- (let* ((ov company-pseudo-tooltip-overlay)
- (old-height (overlay-get ov 'company-height))
- (new-height (company--pseudo-tooltip-height)))
- (and
- (>= (* old-height new-height) 0)
- (>= (abs old-height) (abs new-height))
- (equal (company-pseudo-tooltip-guard)
- (overlay-get ov 'company-guard)))))
- ;; Redraw needed.
- (company-pseudo-tooltip-show-at-point (point) (length company-prefix))
- (overlay-put company-pseudo-tooltip-overlay
- 'company-guard (company-pseudo-tooltip-guard)))
- (company-pseudo-tooltip-unhide))
- (show (setq company--tooltip-current-width 0))
- (hide (company-pseudo-tooltip-hide)
- (setq company-tooltip-offset 0))
- (update (when (overlayp company-pseudo-tooltip-overlay)
- (company-pseudo-tooltip-edit company-selection)))))
-
-(defun company-pseudo-tooltip-unless-just-one-frontend (command)
- "`company-pseudo-tooltip-frontend', but not shown for single candidates."
- (unless (and (eq command 'post-command)
- (company--show-inline-p))
- (company-pseudo-tooltip-frontend command)))
-
-(defun company-pseudo-tooltip-unless-just-one-frontend-with-delay (command)
- "`compandy-pseudo-tooltip-frontend', but shown after a delay.
-Delay is determined by `company-tooltip-idle-delay'."
- (defvar company-preview-overlay)
- (when (and (memq command '(pre-command hide))
- company-tooltip-timer)
- (cancel-timer company-tooltip-timer)
- (setq company-tooltip-timer nil))
- (cl-case command
- (post-command
- (if (or company-tooltip-timer
- (overlayp company-pseudo-tooltip-overlay))
- (if (not (overlayp company-preview-overlay))
- (company-pseudo-tooltip-unless-just-one-frontend command)
- (let (company-tooltip-timer)
- (company-call-frontends 'pre-command))
- (company-call-frontends 'post-command))
- (setq company-tooltip-timer
- (run-with-timer company-tooltip-idle-delay nil
- 'company-pseudo-tooltip-unless-just-one-frontend-with-delay
- 'post-command))))
- (t
- (company-pseudo-tooltip-unless-just-one-frontend command))))
-
-;;; overlay ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-preview-overlay nil)
-
-(defun company-preview-show-at-point (pos completion)
- (company-preview-hide)
-
- (setq completion (copy-sequence (company--pre-render completion)))
- (font-lock-append-text-property 0 (length completion)
- 'face 'company-preview
- completion)
- (font-lock-prepend-text-property 0 (length company-common)
- 'face 'company-preview-common
- completion)
-
- ;; Add search string
- (and (string-match (funcall company-search-regexp-function
- company-search-string)
- completion)
- (pcase-dolist (`(,mbeg . ,mend) (company--search-chunks))
- (font-lock-prepend-text-property mbeg mend
- 'face 'company-preview-search
- completion)))
-
- (setq completion (company-strip-prefix completion))
-
- (and (equal pos (point))
- (not (equal completion ""))
- (add-text-properties 0 1 '(cursor 1) completion))
-
- (let* ((beg pos)
- (pto company-pseudo-tooltip-overlay)
- (ptf-workaround (and
- pto
- (char-before pos)
- (eq pos (overlay-start pto)))))
- ;; Try to accommodate for the pseudo-tooltip overlay,
- ;; which may start at the same position if it's at eol.
- (when ptf-workaround
- (cl-decf beg)
- (setq completion (concat (buffer-substring beg pos) completion)))
-
- (setq company-preview-overlay (make-overlay beg pos))
-
- (let ((ov company-preview-overlay))
- (overlay-put ov (if ptf-workaround 'display 'after-string)
- completion)
- (overlay-put ov 'window (selected-window)))))
-
-(defun company-preview-hide ()
- (when company-preview-overlay
- (delete-overlay company-preview-overlay)
- (setq company-preview-overlay nil)))
-
-(defun company-preview-frontend (command)
- "`company-mode' frontend showing the selection as if it had been inserted."
- (pcase command
- (`pre-command (company-preview-hide))
- (`post-command
- (when company-selection
- (company-preview-show-at-point (point)
- (nth company-selection company-candidates))))
- (`hide (company-preview-hide))))
-
-(defun company-preview-if-just-one-frontend (command)
- "`company-preview-frontend', but only shown for single candidates."
- (when (or (not (eq command 'post-command))
- (company--show-inline-p))
- (company-preview-frontend command)))
-
-(defun company--show-inline-p ()
- (and (not (cdr company-candidates))
- company-common
- (not (eq t (compare-strings company-prefix nil nil
- (car company-candidates) nil nil
- t)))
- (or (eq (company-call-backend 'ignore-case) 'keep-prefix)
- (string-prefix-p company-prefix company-common))))
-
-(defun company-tooltip-visible-p ()
- "Returns whether the tooltip is visible."
- (when (overlayp company-pseudo-tooltip-overlay)
- (not (overlay-get company-pseudo-tooltip-overlay 'invisible))))
-
-(defun company-preview-common--show-p ()
- "Returns whether the preview of common can be showed or not"
- (and company-common
- (or (eq (company-call-backend 'ignore-case) 'keep-prefix)
- (string-prefix-p company-prefix company-common))))
-
-(defun company-preview-common-frontend (command)
- "`company-mode' frontend preview the common part of candidates."
- (when (or (not (eq command 'post-command))
- (company-preview-common--show-p))
- (pcase command
- (`pre-command (company-preview-hide))
- (`post-command (company-preview-show-at-point (point) company-common))
- (`hide (company-preview-hide)))))
-
-;;; echo ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defvar-local company-echo-last-msg nil)
-
-(defvar company-echo-timer nil)
-
-(defvar company-echo-delay .01)
-
-(defcustom company-echo-truncate-lines t
- "Whether frontend messages written to the echo area should be truncated."
- :type 'boolean
- :package-version '(company . "0.9.3"))
-
-(defun company-echo-show (&optional getter)
- (when getter
- (setq company-echo-last-msg (funcall getter)))
- (let ((message-log-max nil)
- (message-truncate-lines company-echo-truncate-lines))
- (if company-echo-last-msg
- (message "%s" company-echo-last-msg)
- (message ""))))
-
-(defun company-echo-show-soon (&optional getter)
- (company-echo-cancel)
- (setq company-echo-timer (run-with-timer 0 nil 'company-echo-show getter)))
-
-(defun company-echo-cancel (&optional unset)
- (when company-echo-timer
- (cancel-timer company-echo-timer))
- (when unset
- (setq company-echo-timer nil)))
-
-(defun company-echo-show-when-idle (&optional getter)
- (company-echo-cancel)
- (setq company-echo-timer
- (run-with-idle-timer company-echo-delay nil 'company-echo-show getter)))
-
-(defun company-echo-format ()
- (let ((selection (or company-selection 0)))
- (let ((limit (window-body-width (minibuffer-window)))
- (len -1)
- ;; Roll to selection.
- (candidates (nthcdr selection company-candidates))
- (i (if company-show-numbers selection 99999))
- comp msg)
-
- (while candidates
- (setq comp (company-reformat (company--clean-string (pop candidates)))
- len (+ len 1 (length comp)))
- (if (< i 10)
- ;; Add number.
- (progn
- (setq comp (propertize (format "%d: %s" i comp)
- 'face 'company-echo))
- (cl-incf len 3)
- (cl-incf i)
- ;; FIXME: Add support for the `match' backend action, and thus,
- ;; non-prefix matches.
- (add-text-properties 3 (+ 3 (string-width (or company-common "")))
- '(face company-echo-common) comp))
- (setq comp (propertize comp 'face 'company-echo))
- (add-text-properties 0 (string-width (or company-common ""))
- '(face company-echo-common) comp))
- (if (>= len limit)
- (setq candidates nil)
- (push comp msg)))
-
- (mapconcat 'identity (nreverse msg) " "))))
-
-(defun company-echo-strip-common-format ()
- (let ((selection (or company-selection 0)))
- (let ((limit (window-body-width (minibuffer-window)))
- (len (+ (length company-prefix) 2))
- ;; Roll to selection.
- (candidates (nthcdr selection company-candidates))
- (i (if company-show-numbers selection 99999))
- msg comp)
-
- (while candidates
- (setq comp (company-strip-prefix (pop candidates))
- len (+ len 2 (length comp)))
- (when (< i 10)
- ;; Add number.
- (setq comp (format "%s (%d)" comp i))
- (cl-incf len 4)
- (cl-incf i))
- (if (>= len limit)
- (setq candidates nil)
- (push (propertize comp 'face 'company-echo) msg)))
-
- (concat (propertize company-prefix 'face 'company-echo-common) "{"
- (mapconcat 'identity (nreverse msg) ", ")
- "}"))))
-
-(defun company-echo-hide ()
- (unless (equal company-echo-last-msg "")
- (setq company-echo-last-msg "")
- (company-echo-show)))
-
-(defun company-echo-frontend (command)
- "`company-mode' frontend showing the candidates in the echo area."
- (pcase command
- (`post-command (company-echo-show-soon 'company-echo-format))
- (`hide (company-echo-hide))))
-
-(defun company-echo-strip-common-frontend (command)
- "`company-mode' frontend showing the candidates in the echo area."
- (pcase command
- (`post-command (company-echo-show-soon 'company-echo-strip-common-format))
- (`hide (company-echo-hide))))
-
-(defun company-echo-metadata-frontend (command)
- "`company-mode' frontend showing the documentation in the echo area."
- (pcase command
- (`post-command (company-echo-show-when-idle 'company-fetch-metadata))
- (`hide (company-echo-hide))))
-
-(provide 'company)
-;;; company.el ends here
diff --git a/emacs.d/elpa/dash-20210708.2009/dash-autoloads.el b/emacs.d/elpa/dash-20210708.2009/dash-autoloads.el
deleted file mode 100644
index 3a96693..0000000
--- a/emacs.d/elpa/dash-20210708.2009/dash-autoloads.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;;; dash-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "dash" "dash.el" (0 0 0 0))
-;;; Generated autoloads from dash.el
-
-(autoload 'dash-fontify-mode "dash" "\
-Toggle fontification of Dash special variables.
-
-If called interactively, enable Dash-Fontify mode if ARG is
-positive, and disable it if ARG is zero or negative. If called
-from Lisp, also enable the mode if ARG is omitted or nil, and
-toggle it if ARG is `toggle'; disable the mode otherwise.
-
-Dash-Fontify mode is a buffer-local minor mode intended for Emacs
-Lisp buffers. Enabling it causes the special variables bound in
-anaphoric Dash macros to be fontified. These anaphoras include
-`it', `it-index', `acc', and `other'. In older Emacs versions
-which do not dynamically detect macros, Dash-Fontify mode
-additionally fontifies Dash macro calls.
-
-See also `dash-fontify-mode-lighter' and
-`global-dash-fontify-mode'.
-
-\(fn &optional ARG)" t nil)
-
-(put 'global-dash-fontify-mode 'globalized-minor-mode t)
-
-(defvar global-dash-fontify-mode nil "\
-Non-nil if Global Dash-Fontify mode is enabled.
-See the `global-dash-fontify-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `global-dash-fontify-mode'.")
-
-(custom-autoload 'global-dash-fontify-mode "dash" nil)
-
-(autoload 'global-dash-fontify-mode "dash" "\
-Toggle Dash-Fontify mode in all buffers.
-With prefix ARG, enable Global Dash-Fontify mode if ARG is positive;
-otherwise, disable it. If called from Lisp, enable the mode if
-ARG is omitted or nil.
-
-Dash-Fontify mode is enabled in all buffers where
-`dash--turn-on-fontify-mode' would do it.
-See `dash-fontify-mode' for more information on Dash-Fontify mode.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'dash-register-info-lookup "dash" "\
-Register the Dash Info manual with `info-lookup-symbol'.
-This allows Dash symbols to be looked up with \\[info-lookup-symbol]." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "dash" '("!cdr" "!cons" "--" "->" "-a" "-butlast" "-c" "-d" "-e" "-f" "-gr" "-i" "-juxt" "-keep" "-l" "-m" "-no" "-o" "-p" "-r" "-s" "-t" "-u" "-value-to-list" "-when-let" "-zip" "dash-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("dash-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; dash-autoloads.el ends here
diff --git a/emacs.d/elpa/dash-20210708.2009/dash-pkg.el b/emacs.d/elpa/dash-20210708.2009/dash-pkg.el
deleted file mode 100644
index 97c683b..0000000
--- a/emacs.d/elpa/dash-20210708.2009/dash-pkg.el
+++ /dev/null
@@ -1,12 +0,0 @@
-(define-package "dash" "20210708.2009" "A modern list library for Emacs"
- '((emacs "24"))
- :commit "2675596b9ac1c4b9d47b93e227f06f8ec6755ec6" :authors
- '(("Magnar Sveen" . "magnars@gmail.com"))
- :maintainer
- '("Magnar Sveen" . "magnars@gmail.com")
- :keywords
- '("extensions" "lisp")
- :url "https://github.com/magnars/dash.el")
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/dash-20210708.2009/dash.el b/emacs.d/elpa/dash-20210708.2009/dash.el
deleted file mode 100644
index 4e56da4..0000000
--- a/emacs.d/elpa/dash-20210708.2009/dash.el
+++ /dev/null
@@ -1,3533 +0,0 @@
-;;; dash.el --- A modern list library for Emacs -*- lexical-binding: t -*-
-
-;; Copyright (C) 2012-2021 Free Software Foundation, Inc.
-
-;; Author: Magnar Sveen <magnars@gmail.com>
-;; Version: 2.19.0
-;; Package-Requires: ((emacs "24"))
-;; Keywords: extensions, lisp
-;; Homepage: https://github.com/magnars/dash.el
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; A modern list API for Emacs.
-;;
-;; See its overview at https://github.com/magnars/dash.el#functions.
-
-;;; Code:
-
-;; TODO: `gv' was introduced in Emacs 24.3, so remove this and all
-;; calls to `defsetf' when support for earlier versions is dropped.
-(eval-when-compile
- (unless (fboundp 'gv-define-setter)
- (require 'cl)))
-
-(defgroup dash ()
- "Customize group for Dash, a modern list library."
- :group 'extensions
- :group 'lisp
- :prefix "dash-")
-
-(defmacro !cons (car cdr)
- "Destructive: Set CDR to the cons of CAR and CDR."
- (declare (debug (form symbolp)))
- `(setq ,cdr (cons ,car ,cdr)))
-
-(defmacro !cdr (list)
- "Destructive: Set LIST to the cdr of LIST."
- (declare (debug (symbolp)))
- `(setq ,list (cdr ,list)))
-
-(defmacro --each (list &rest body)
- "Evaluate BODY for each element of LIST and return nil.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating BODY.
-This is the anaphoric counterpart to `-each'."
- (declare (debug (form body)) (indent 1))
- (let ((l (make-symbol "list"))
- (i (make-symbol "i")))
- `(let ((,l ,list)
- (,i 0)
- it it-index)
- (ignore it it-index)
- (while ,l
- (setq it (pop ,l) it-index ,i ,i (1+ ,i))
- ,@body))))
-
-(defun -each (list fn)
- "Call FN on each element of LIST.
-Return nil; this function is intended for side effects.
-
-Its anaphoric counterpart is `--each'.
-
-For access to the current element's index in LIST, see
-`-each-indexed'."
- (declare (indent 1))
- (ignore (mapc fn list)))
-
-(defalias '--each-indexed '--each)
-
-(defun -each-indexed (list fn)
- "Call FN on each index and element of LIST.
-For each ITEM at INDEX in LIST, call (funcall FN INDEX ITEM).
-Return nil; this function is intended for side effects.
-
-See also: `-map-indexed'."
- (declare (indent 1))
- (--each list (funcall fn it-index it)))
-
-(defmacro --each-while (list pred &rest body)
- "Evaluate BODY for each item in LIST, while PRED evaluates to non-nil.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating PRED or BODY. Once
-an element is reached for which PRED evaluates to nil, no further
-BODY is evaluated. The return value is always nil.
-This is the anaphoric counterpart to `-each-while'."
- (declare (debug (form form body)) (indent 2))
- (let ((l (make-symbol "list"))
- (i (make-symbol "i"))
- (elt (make-symbol "elt")))
- `(let ((,l ,list)
- (,i 0)
- ,elt it it-index)
- (ignore it it-index)
- (while (and ,l (setq ,elt (pop ,l) it ,elt it-index ,i) ,pred)
- (setq it ,elt it-index ,i ,i (1+ ,i))
- ,@body))))
-
-(defun -each-while (list pred fn)
- "Call FN on each ITEM in LIST, while (PRED ITEM) is non-nil.
-Once an ITEM is reached for which PRED returns nil, FN is no
-longer called. Return nil; this function is intended for side
-effects.
-
-Its anaphoric counterpart is `--each-while'."
- (declare (indent 2))
- (--each-while list (funcall pred it) (funcall fn it)))
-
-(defmacro --each-r (list &rest body)
- "Evaluate BODY for each element of LIST in reversed order.
-Each element of LIST in turn, starting at its end, is bound to
-`it' and its index within LIST to `it-index' before evaluating
-BODY. The return value is always nil.
-This is the anaphoric counterpart to `-each-r'."
- (declare (debug (form body)) (indent 1))
- (let ((v (make-symbol "vector"))
- (i (make-symbol "i")))
- ;; Implementation note: building a vector is considerably faster
- ;; than building a reversed list (vector takes less memory, so
- ;; there is less GC), plus `length' comes naturally. In-place
- ;; `nreverse' would be faster still, but BODY would be able to see
- ;; that, even if the modification was undone before we return.
- `(let* ((,v (vconcat ,list))
- (,i (length ,v))
- it it-index)
- (ignore it it-index)
- (while (> ,i 0)
- (setq ,i (1- ,i) it-index ,i it (aref ,v ,i))
- ,@body))))
-
-(defun -each-r (list fn)
- "Call FN on each element of LIST in reversed order.
-Return nil; this function is intended for side effects.
-
-Its anaphoric counterpart is `--each-r'."
- (--each-r list (funcall fn it)))
-
-(defmacro --each-r-while (list pred &rest body)
- "Eval BODY for each item in reversed LIST, while PRED evals to non-nil.
-Each element of LIST in turn, starting at its end, is bound to
-`it' and its index within LIST to `it-index' before evaluating
-PRED or BODY. Once an element is reached for which PRED
-evaluates to nil, no further BODY is evaluated. The return value
-is always nil.
-This is the anaphoric counterpart to `-each-r-while'."
- (declare (debug (form form body)) (indent 2))
- (let ((v (make-symbol "vector"))
- (i (make-symbol "i"))
- (elt (make-symbol "elt")))
- `(let* ((,v (vconcat ,list))
- (,i (length ,v))
- ,elt it it-index)
- (ignore it it-index)
- (while (when (> ,i 0)
- (setq ,i (1- ,i) it-index ,i)
- (setq ,elt (aref ,v ,i) it ,elt)
- ,pred)
- (setq it-index ,i it ,elt)
- ,@body))))
-
-(defun -each-r-while (list pred fn)
- "Call FN on each ITEM in reversed LIST, while (PRED ITEM) is non-nil.
-Once an ITEM is reached for which PRED returns nil, FN is no
-longer called. Return nil; this function is intended for side
-effects.
-
-Its anaphoric counterpart is `--each-r-while'."
- (--each-r-while list (funcall pred it) (funcall fn it)))
-
-(defmacro --dotimes (num &rest body)
- "Evaluate BODY NUM times, presumably for side effects.
-BODY is evaluated with the local variable `it' temporarily bound
-to successive integers running from 0, inclusive, to NUM,
-exclusive. BODY is not evaluated if NUM is less than 1.
-This is the anaphoric counterpart to `-dotimes'."
- (declare (debug (form body)) (indent 1))
- (let ((n (make-symbol "num"))
- (i (make-symbol "i")))
- `(let ((,n ,num)
- (,i 0)
- it)
- (ignore it)
- (while (< ,i ,n)
- (setq it ,i ,i (1+ ,i))
- ,@body))))
-
-(defun -dotimes (num fn)
- "Call FN NUM times, presumably for side effects.
-FN is called with a single argument on successive integers
-running from 0, inclusive, to NUM, exclusive. FN is not called
-if NUM is less than 1.
-
-This function's anaphoric counterpart is `--dotimes'."
- (declare (indent 1))
- (--dotimes num (funcall fn it)))
-
-(defun -map (fn list)
- "Apply FN to each item in LIST and return the list of results.
-
-This function's anaphoric counterpart is `--map'."
- (mapcar fn list))
-
-(defmacro --map (form list)
- "Eval FORM for each item in LIST and return the list of results.
-Each element of LIST in turn is bound to `it' before evaluating
-FORM.
-This is the anaphoric counterpart to `-map'."
- (declare (debug (def-form form)))
- `(mapcar (lambda (it) (ignore it) ,form) ,list))
-
-(defmacro --reduce-from (form init list)
- "Accumulate a value by evaluating FORM across LIST.
-This macro is like `--each' (which see), but it additionally
-provides an accumulator variable `acc' which it successively
-binds to the result of evaluating FORM for the current LIST
-element before processing the next element. For the first
-element, `acc' is initialized with the result of evaluating INIT.
-The return value is the resulting value of `acc'. If LIST is
-empty, FORM is not evaluated, and the return value is the result
-of INIT.
-This is the anaphoric counterpart to `-reduce-from'."
- (declare (debug (form form form)))
- `(let ((acc ,init))
- (--each ,list (setq acc ,form))
- acc))
-
-(defun -reduce-from (fn init list)
- "Reduce the function FN across LIST, starting with INIT.
-Return the result of applying FN to INIT and the first element of
-LIST, then applying FN to that result and the second element,
-etc. If LIST is empty, return INIT without calling FN.
-
-This function's anaphoric counterpart is `--reduce-from'.
-
-For other folds, see also `-reduce' and `-reduce-r'."
- (--reduce-from (funcall fn acc it) init list))
-
-(defmacro --reduce (form list)
- "Accumulate a value by evaluating FORM across LIST.
-This macro is like `--reduce-from' (which see), except the first
-element of LIST is taken as INIT. Thus if LIST contains a single
-item, it is returned without evaluating FORM. If LIST is empty,
-FORM is evaluated with `it' and `acc' bound to nil.
-This is the anaphoric counterpart to `-reduce'."
- (declare (debug (form form)))
- (let ((lv (make-symbol "list-value")))
- `(let ((,lv ,list))
- (if ,lv
- (--reduce-from ,form (car ,lv) (cdr ,lv))
- ;; Explicit nil binding pacifies lexical "variable left uninitialized"
- ;; warning. See issue #377 and upstream https://bugs.gnu.org/47080.
- (let ((acc nil) (it nil))
- (ignore acc it)
- ,form)))))
-
-(defun -reduce (fn list)
- "Reduce the function FN across LIST.
-Return the result of applying FN to the first two elements of
-LIST, then applying FN to that result and the third element, etc.
-If LIST contains a single element, return it without calling FN.
-If LIST is empty, return the result of calling FN with no
-arguments.
-
-This function's anaphoric counterpart is `--reduce'.
-
-For other folds, see also `-reduce-from' and `-reduce-r'."
- (if list
- (-reduce-from fn (car list) (cdr list))
- (funcall fn)))
-
-(defmacro --reduce-r-from (form init list)
- "Accumulate a value by evaluating FORM across LIST in reverse.
-This macro is like `--reduce-from', except it starts from the end
-of LIST.
-This is the anaphoric counterpart to `-reduce-r-from'."
- (declare (debug (form form form)))
- `(let ((acc ,init))
- (--each-r ,list (setq acc ,form))
- acc))
-
-(defun -reduce-r-from (fn init list)
- "Reduce the function FN across LIST in reverse, starting with INIT.
-Return the result of applying FN to the last element of LIST and
-INIT, then applying FN to the second-to-last element and the
-previous result of FN, etc. That is, the first argument of FN is
-the current element, and its second argument the accumulated
-value. If LIST is empty, return INIT without calling FN.
-
-This function is like `-reduce-from' but the operation associates
-from the right rather than left. In other words, it starts from
-the end of LIST and flips the arguments to FN. Conceptually, it
-is like replacing the conses in LIST with applications of FN, and
-its last link with INIT, and evaluating the resulting expression.
-
-This function's anaphoric counterpart is `--reduce-r-from'.
-
-For other folds, see also `-reduce-r' and `-reduce'."
- (--reduce-r-from (funcall fn it acc) init list))
-
-(defmacro --reduce-r (form list)
- "Accumulate a value by evaluating FORM across LIST in reverse order.
-This macro is like `--reduce', except it starts from the end of
-LIST.
-This is the anaphoric counterpart to `-reduce-r'."
- (declare (debug (form form)))
- `(--reduce ,form (reverse ,list)))
-
-(defun -reduce-r (fn list)
- "Reduce the function FN across LIST in reverse.
-Return the result of applying FN to the last two elements of
-LIST, then applying FN to the third-to-last element and the
-previous result of FN, etc. That is, the first argument of FN is
-the current element, and its second argument the accumulated
-value. If LIST contains a single element, return it without
-calling FN. If LIST is empty, return the result of calling FN
-with no arguments.
-
-This function is like `-reduce' but the operation associates from
-the right rather than left. In other words, it starts from the
-end of LIST and flips the arguments to FN. Conceptually, it is
-like replacing the conses in LIST with applications of FN,
-ignoring its last link, and evaluating the resulting expression.
-
-This function's anaphoric counterpart is `--reduce-r'.
-
-For other folds, see also `-reduce-r-from' and `-reduce'."
- (if list
- (--reduce-r (funcall fn it acc) list)
- (funcall fn)))
-
-(defmacro --reductions-from (form init list)
- "Return a list of FORM's intermediate reductions across LIST.
-That is, a list of the intermediate values of the accumulator
-when `--reduce-from' (which see) is called with the same
-arguments.
-This is the anaphoric counterpart to `-reductions-from'."
- (declare (debug (form form form)))
- `(nreverse
- (--reduce-from (cons (let ((acc (car acc))) (ignore acc) ,form) acc)
- (list ,init)
- ,list)))
-
-(defun -reductions-from (fn init list)
- "Return a list of FN's intermediate reductions across LIST.
-That is, a list of the intermediate values of the accumulator
-when `-reduce-from' (which see) is called with the same
-arguments.
-
-This function's anaphoric counterpart is `--reductions-from'.
-
-For other folds, see also `-reductions' and `-reductions-r'."
- (--reductions-from (funcall fn acc it) init list))
-
-(defmacro --reductions (form list)
- "Return a list of FORM's intermediate reductions across LIST.
-That is, a list of the intermediate values of the accumulator
-when `--reduce' (which see) is called with the same arguments.
-This is the anaphoric counterpart to `-reductions'."
- (declare (debug (form form)))
- (let ((lv (make-symbol "list-value")))
- `(let ((,lv ,list))
- (if ,lv
- (--reductions-from ,form (car ,lv) (cdr ,lv))
- (let (acc it)
- (ignore acc it)
- (list ,form))))))
-
-(defun -reductions (fn list)
- "Return a list of FN's intermediate reductions across LIST.
-That is, a list of the intermediate values of the accumulator
-when `-reduce' (which see) is called with the same arguments.
-
-This function's anaphoric counterpart is `--reductions'.
-
-For other folds, see also `-reductions' and `-reductions-r'."
- (if list
- (--reductions-from (funcall fn acc it) (car list) (cdr list))
- (list (funcall fn))))
-
-(defmacro --reductions-r-from (form init list)
- "Return a list of FORM's intermediate reductions across reversed LIST.
-That is, a list of the intermediate values of the accumulator
-when `--reduce-r-from' (which see) is called with the same
-arguments.
-This is the anaphoric counterpart to `-reductions-r-from'."
- (declare (debug (form form form)))
- `(--reduce-r-from (cons (let ((acc (car acc))) (ignore acc) ,form) acc)
- (list ,init)
- ,list))
-
-(defun -reductions-r-from (fn init list)
- "Return a list of FN's intermediate reductions across reversed LIST.
-That is, a list of the intermediate values of the accumulator
-when `-reduce-r-from' (which see) is called with the same
-arguments.
-
-This function's anaphoric counterpart is `--reductions-r-from'.
-
-For other folds, see also `-reductions' and `-reductions-r'."
- (--reductions-r-from (funcall fn it acc) init list))
-
-(defmacro --reductions-r (form list)
- "Return a list of FORM's intermediate reductions across reversed LIST.
-That is, a list of the intermediate values of the accumulator
-when `--reduce-re' (which see) is called with the same arguments.
-This is the anaphoric counterpart to `-reductions-r'."
- (declare (debug (form list)))
- (let ((lv (make-symbol "list-value")))
- `(let ((,lv (reverse ,list)))
- (if ,lv
- (--reduce-from (cons (let ((acc (car acc))) (ignore acc) ,form) acc)
- (list (car ,lv))
- (cdr ,lv))
- ;; Explicit nil binding pacifies lexical "variable left uninitialized"
- ;; warning. See issue #377 and upstream https://bugs.gnu.org/47080.
- (let ((acc nil) (it nil))
- (ignore acc it)
- (list ,form))))))
-
-(defun -reductions-r (fn list)
- "Return a list of FN's intermediate reductions across reversed LIST.
-That is, a list of the intermediate values of the accumulator
-when `-reduce-r' (which see) is called with the same arguments.
-
-This function's anaphoric counterpart is `--reductions-r'.
-
-For other folds, see also `-reductions-r-from' and
-`-reductions'."
- (if list
- (--reductions-r (funcall fn it acc) list)
- (list (funcall fn))))
-
-(defmacro --filter (form list)
- "Return a new list of the items in LIST for which FORM evals to non-nil.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM.
-This is the anaphoric counterpart to `-filter'.
-For the opposite operation, see also `--remove'."
- (declare (debug (form form)))
- (let ((r (make-symbol "result")))
- `(let (,r)
- (--each ,list (when ,form (push it ,r)))
- (nreverse ,r))))
-
-(defun -filter (pred list)
- "Return a new list of the items in LIST for which PRED returns non-nil.
-
-Alias: `-select'.
-
-This function's anaphoric counterpart is `--filter'.
-
-For similar operations, see also `-keep' and `-remove'."
- (--filter (funcall pred it) list))
-
-(defalias '-select '-filter)
-(defalias '--select '--filter)
-
-(defmacro --remove (form list)
- "Return a new list of the items in LIST for which FORM evals to nil.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM.
-This is the anaphoric counterpart to `-remove'.
-For the opposite operation, see also `--filter'."
- (declare (debug (form form)))
- `(--filter (not ,form) ,list))
-
-(defun -remove (pred list)
- "Return a new list of the items in LIST for which PRED returns nil.
-
-Alias: `-reject'.
-
-This function's anaphoric counterpart is `--remove'.
-
-For similar operations, see also `-keep' and `-filter'."
- (--remove (funcall pred it) list))
-
-(defalias '-reject '-remove)
-(defalias '--reject '--remove)
-
-(defmacro --remove-first (form list)
- "Remove the first item from LIST for which FORM evals to non-nil.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM. This is a
-non-destructive operation, but only the front of LIST leading up
-to the removed item is a copy; the rest is LIST's original tail.
-If no item is removed, then the result is a complete copy.
-This is the anaphoric counterpart to `-remove-first'."
- (declare (debug (form form)))
- (let ((front (make-symbol "front"))
- (tail (make-symbol "tail")))
- `(let ((,tail ,list) ,front)
- (--each-while ,tail (not ,form)
- (push (pop ,tail) ,front))
- (if ,tail
- (nconc (nreverse ,front) (cdr ,tail))
- (nreverse ,front)))))
-
-(defun -remove-first (pred list)
- "Remove the first item from LIST for which PRED returns non-nil.
-This is a non-destructive operation, but only the front of LIST
-leading up to the removed item is a copy; the rest is LIST's
-original tail. If no item is removed, then the result is a
-complete copy.
-
-Alias: `-reject-first'.
-
-This function's anaphoric counterpart is `--remove-first'.
-
-See also `-map-first', `-remove-item', and `-remove-last'."
- (--remove-first (funcall pred it) list))
-
-(defalias '-reject-first '-remove-first)
-(defalias '--reject-first '--remove-first)
-
-(defmacro --remove-last (form list)
- "Remove the last item from LIST for which FORM evals to non-nil.
-Each element of LIST in turn is bound to `it' before evaluating
-FORM. The result is a copy of LIST regardless of whether an
-element is removed.
-This is the anaphoric counterpart to `-remove-last'."
- (declare (debug (form form)))
- `(nreverse (--remove-first ,form (reverse ,list))))
-
-(defun -remove-last (pred list)
- "Remove the last item from LIST for which PRED returns non-nil.
-The result is a copy of LIST regardless of whether an element is
-removed.
-
-Alias: `-reject-last'.
-
-This function's anaphoric counterpart is `--remove-last'.
-
-See also `-map-last', `-remove-item', and `-remove-first'."
- (--remove-last (funcall pred it) list))
-
-(defalias '-reject-last '-remove-last)
-(defalias '--reject-last '--remove-last)
-
-(defalias '-remove-item #'remove
- "Return a copy of LIST with all occurrences of ITEM removed.
-The comparison is done with `equal'.
-\n(fn ITEM LIST)")
-
-(defmacro --keep (form list)
- "Eval FORM for each item in LIST and return the non-nil results.
-Like `--filter', but returns the non-nil results of FORM instead
-of the corresponding elements of LIST. Each element of LIST in
-turn is bound to `it' and its index within LIST to `it-index'
-before evaluating FORM.
-This is the anaphoric counterpart to `-keep'."
- (declare (debug (form form)))
- (let ((r (make-symbol "result"))
- (m (make-symbol "mapped")))
- `(let (,r)
- (--each ,list (let ((,m ,form)) (when ,m (push ,m ,r))))
- (nreverse ,r))))
-
-(defun -keep (fn list)
- "Return a new list of the non-nil results of applying FN to each item in LIST.
-Like `-filter', but returns the non-nil results of FN instead of
-the corresponding elements of LIST.
-
-Its anaphoric counterpart is `--keep'."
- (--keep (funcall fn it) list))
-
-(defun -non-nil (list)
- "Return a copy of LIST with all nil items removed."
- (declare (pure t) (side-effect-free t))
- (--filter it list))
-
-(defmacro --map-indexed (form list)
- "Eval FORM for each item in LIST and return the list of results.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM. This is like
-`--map', but additionally makes `it-index' available to FORM.
-
-This is the anaphoric counterpart to `-map-indexed'."
- (declare (debug (form form)))
- (let ((r (make-symbol "result")))
- `(let (,r)
- (--each ,list
- (push ,form ,r))
- (nreverse ,r))))
-
-(defun -map-indexed (fn list)
- "Apply FN to each index and item in LIST and return the list of results.
-This is like `-map', but FN takes two arguments: the index of the
-current element within LIST, and the element itself.
-
-This function's anaphoric counterpart is `--map-indexed'.
-
-For a side-effecting variant, see also `-each-indexed'."
- (--map-indexed (funcall fn it-index it) list))
-
-(defmacro --map-when (pred rep list)
- "Anaphoric form of `-map-when'."
- (declare (debug (form form form)))
- (let ((r (make-symbol "result")))
- `(let (,r)
- (--each ,list (!cons (if ,pred ,rep it) ,r))
- (nreverse ,r))))
-
-(defun -map-when (pred rep list)
- "Return a new list where the elements in LIST that do not match the PRED function
-are unchanged, and where the elements in LIST that do match the PRED function are mapped
-through the REP function.
-
-Alias: `-replace-where'
-
-See also: `-update-at'"
- (--map-when (funcall pred it) (funcall rep it) list))
-
-(defalias '-replace-where '-map-when)
-(defalias '--replace-where '--map-when)
-
-(defun -map-first (pred rep list)
- "Replace first item in LIST satisfying PRED with result of REP called on this item.
-
-See also: `-map-when', `-replace-first'"
- (let (front)
- (while (and list (not (funcall pred (car list))))
- (push (car list) front)
- (!cdr list))
- (if list
- (-concat (nreverse front) (cons (funcall rep (car list)) (cdr list)))
- (nreverse front))))
-
-(defmacro --map-first (pred rep list)
- "Anaphoric form of `-map-first'."
- (declare (debug (def-form def-form form)))
- `(-map-first (lambda (it) ,pred) (lambda (it) (ignore it) ,rep) ,list))
-
-(defun -map-last (pred rep list)
- "Replace last item in LIST satisfying PRED with result of REP called on this item.
-
-See also: `-map-when', `-replace-last'"
- (nreverse (-map-first pred rep (reverse list))))
-
-(defmacro --map-last (pred rep list)
- "Anaphoric form of `-map-last'."
- (declare (debug (def-form def-form form)))
- `(-map-last (lambda (it) ,pred) (lambda (it) (ignore it) ,rep) ,list))
-
-(defun -replace (old new list)
- "Replace all OLD items in LIST with NEW.
-
-Elements are compared using `equal'.
-
-See also: `-replace-at'"
- (declare (pure t) (side-effect-free t))
- (--map-when (equal it old) new list))
-
-(defun -replace-first (old new list)
- "Replace the first occurrence of OLD with NEW in LIST.
-
-Elements are compared using `equal'.
-
-See also: `-map-first'"
- (declare (pure t) (side-effect-free t))
- (--map-first (equal old it) new list))
-
-(defun -replace-last (old new list)
- "Replace the last occurrence of OLD with NEW in LIST.
-
-Elements are compared using `equal'.
-
-See also: `-map-last'"
- (declare (pure t) (side-effect-free t))
- (--map-last (equal old it) new list))
-
-(defmacro --mapcat (form list)
- "Anaphoric form of `-mapcat'."
- (declare (debug (form form)))
- `(apply 'append (--map ,form ,list)))
-
-(defun -mapcat (fn list)
- "Return the concatenation of the result of mapping FN over LIST.
-Thus function FN should return a list."
- (--mapcat (funcall fn it) list))
-
-(defmacro --iterate (form init n)
- "Anaphoric version of `-iterate'."
- (declare (debug (form form form)))
- (let ((res (make-symbol "result"))
- (len (make-symbol "n")))
- `(let ((,len ,n))
- (when (> ,len 0)
- (let* ((it ,init)
- (,res (list it)))
- (dotimes (_ (1- ,len))
- (push (setq it ,form) ,res))
- (nreverse ,res))))))
-
-(defun -iterate (fun init n)
- "Return a list of iterated applications of FUN to INIT.
-
-This means a list of the form:
-
- (INIT (FUN INIT) (FUN (FUN INIT)) ...)
-
-N is the length of the returned list."
- (--iterate (funcall fun it) init n))
-
-(defun -flatten (l)
- "Take a nested list L and return its contents as a single, flat list.
-
-Note that because `nil' represents a list of zero elements (an
-empty list), any mention of nil in L will disappear after
-flattening. If you need to preserve nils, consider `-flatten-n'
-or map them to some unique symbol and then map them back.
-
-Conses of two atoms are considered \"terminals\", that is, they
-aren't flattened further.
-
-See also: `-flatten-n'"
- (declare (pure t) (side-effect-free t))
- (if (and (listp l) (listp (cdr l)))
- (-mapcat '-flatten l)
- (list l)))
-
-(defun -flatten-n (num list)
- "Flatten NUM levels of a nested LIST.
-
-See also: `-flatten'"
- (declare (pure t) (side-effect-free t))
- (dotimes (_ num)
- (setq list (apply #'append (mapcar #'-list list))))
- list)
-
-(defun -concat (&rest lists)
- "Return a new list with the concatenation of the elements in the supplied LISTS."
- (declare (pure t) (side-effect-free t))
- (apply 'append lists))
-
-(defalias '-copy 'copy-sequence
- "Create a shallow copy of LIST.
-
-\(fn LIST)")
-
-(defun -splice (pred fun list)
- "Splice lists generated by FUN in place of elements matching PRED in LIST.
-
-FUN takes the element matching PRED as input.
-
-This function can be used as replacement for `,@' in case you
-need to splice several lists at marked positions (for example
-with keywords).
-
-See also: `-splice-list', `-insert-at'"
- (let (r)
- (--each list
- (if (funcall pred it)
- (let ((new (funcall fun it)))
- (--each new (!cons it r)))
- (!cons it r)))
- (nreverse r)))
-
-(defmacro --splice (pred form list)
- "Anaphoric form of `-splice'."
- (declare (debug (def-form def-form form)))
- `(-splice (lambda (it) ,pred) (lambda (it) ,form) ,list))
-
-(defun -splice-list (pred new-list list)
- "Splice NEW-LIST in place of elements matching PRED in LIST.
-
-See also: `-splice', `-insert-at'"
- (-splice pred (lambda (_) new-list) list))
-
-(defmacro --splice-list (pred new-list list)
- "Anaphoric form of `-splice-list'."
- (declare (debug (def-form form form)))
- `(-splice-list (lambda (it) ,pred) ,new-list ,list))
-
-(defun -cons* (&rest args)
- "Make a new list from the elements of ARGS.
-The last 2 elements of ARGS are used as the final cons of the
-result, so if the final element of ARGS is not a list, the result
-is a dotted list. With no ARGS, return nil."
- (declare (pure t) (side-effect-free t))
- (let* ((len (length args))
- (tail (nthcdr (- len 2) args))
- (last (cdr tail)))
- (if (null last)
- (car args)
- (setcdr tail (car last))
- args)))
-
-(defun -snoc (list elem &rest elements)
- "Append ELEM to the end of the list.
-
-This is like `cons', but operates on the end of list.
-
-If ELEMENTS is non nil, append these to the list as well."
- (-concat list (list elem) elements))
-
-(defmacro --first (form list)
- "Return the first item in LIST for which FORM evals to non-nil.
-Return nil if no such element is found.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM.
-This is the anaphoric counterpart to `-first'."
- (declare (debug (form form)))
- (let ((n (make-symbol "needle")))
- `(let (,n)
- (--each-while ,list (or (not ,form)
- (ignore (setq ,n it))))
- ,n)))
-
-(defun -first (pred list)
- "Return the first item in LIST for which PRED returns non-nil.
-Return nil if no such element is found.
-To get the first item in the list no questions asked, use `car'.
-
-Alias: `-find'.
-
-This function's anaphoric counterpart is `--first'."
- (--first (funcall pred it) list))
-
-(defalias '-find '-first)
-(defalias '--find '--first)
-
-(defmacro --some (form list)
- "Return non-nil if FORM evals to non-nil for at least one item in LIST.
-If so, return the first such result of FORM.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM.
-This is the anaphoric counterpart to `-some'."
- (declare (debug (form form)))
- (let ((n (make-symbol "needle")))
- `(let (,n)
- (--each-while ,list (not (setq ,n ,form)))
- ,n)))
-
-(defun -some (pred list)
- "Return (PRED x) for the first LIST item where (PRED x) is non-nil, else nil.
-
-Alias: `-any'.
-
-This function's anaphoric counterpart is `--some'."
- (--some (funcall pred it) list))
-
-(defalias '-any '-some)
-(defalias '--any '--some)
-
-(defmacro --every (form list)
- "Return non-nil if FORM evals to non-nil for all items in LIST.
-If so, return the last such result of FORM. Otherwise, once an
-item is reached for which FORM yields nil, return nil without
-evaluating FORM for any further LIST elements.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM.
-
-This macro is like `--every-p', but on success returns the last
-non-nil result of FORM instead of just t.
-
-This is the anaphoric counterpart to `-every'."
- (declare (debug (form form)))
- (let ((a (make-symbol "all")))
- `(let ((,a t))
- (--each-while ,list (setq ,a ,form))
- ,a)))
-
-(defun -every (pred list)
- "Return non-nil if PRED returns non-nil for all items in LIST.
-If so, return the last such result of PRED. Otherwise, once an
-item is reached for which PRED returns nil, return nil without
-calling PRED on any further LIST elements.
-
-This function is like `-every-p', but on success returns the last
-non-nil result of PRED instead of just t.
-
-This function's anaphoric counterpart is `--every'."
- (--every (funcall pred it) list))
-
-(defmacro --last (form list)
- "Anaphoric form of `-last'."
- (declare (debug (form form)))
- (let ((n (make-symbol "needle")))
- `(let (,n)
- (--each ,list
- (when ,form (setq ,n it)))
- ,n)))
-
-(defun -last (pred list)
- "Return the last x in LIST where (PRED x) is non-nil, else nil."
- (--last (funcall pred it) list))
-
-(defalias '-first-item 'car
- "Return the first item of LIST, or nil on an empty list.
-
-See also: `-second-item', `-last-item'.
-
-\(fn LIST)")
-
-;; Ensure that calls to `-first-item' are compiled to a single opcode,
-;; just like `car'.
-(put '-first-item 'byte-opcode 'byte-car)
-(put '-first-item 'byte-compile 'byte-compile-one-arg)
-
-(defalias '-second-item 'cadr
- "Return the second item of LIST, or nil if LIST is too short.
-
-See also: `-third-item'.
-
-\(fn LIST)")
-
-(defalias '-third-item
- (if (fboundp 'caddr)
- #'caddr
- (lambda (list) (car (cddr list))))
- "Return the third item of LIST, or nil if LIST is too short.
-
-See also: `-fourth-item'.
-
-\(fn LIST)")
-
-(defun -fourth-item (list)
- "Return the fourth item of LIST, or nil if LIST is too short.
-
-See also: `-fifth-item'."
- (declare (pure t) (side-effect-free t))
- (car (cdr (cdr (cdr list)))))
-
-(defun -fifth-item (list)
- "Return the fifth item of LIST, or nil if LIST is too short.
-
-See also: `-last-item'."
- (declare (pure t) (side-effect-free t))
- (car (cdr (cdr (cdr (cdr list))))))
-
-(defun -last-item (list)
- "Return the last item of LIST, or nil on an empty list."
- (declare (pure t) (side-effect-free t))
- (car (last list)))
-
-;; Use `with-no-warnings' to suppress unbound `-last-item' or
-;; undefined `gv--defsetter' warnings arising from both
-;; `gv-define-setter' and `defsetf' in certain Emacs versions.
-(with-no-warnings
- (if (fboundp 'gv-define-setter)
- (gv-define-setter -last-item (val x) `(setcar (last ,x) ,val))
- (defsetf -last-item (x) (val) `(setcar (last ,x) ,val))))
-
-(defun -butlast (list)
- "Return a list of all items in list except for the last."
- ;; no alias as we don't want magic optional argument
- (declare (pure t) (side-effect-free t))
- (butlast list))
-
-(defmacro --count (pred list)
- "Anaphoric form of `-count'."
- (declare (debug (form form)))
- (let ((r (make-symbol "result")))
- `(let ((,r 0))
- (--each ,list (when ,pred (setq ,r (1+ ,r))))
- ,r)))
-
-(defun -count (pred list)
- "Counts the number of items in LIST where (PRED item) is non-nil."
- (--count (funcall pred it) list))
-
-(defun ---truthy? (obj)
- "Return OBJ as a boolean value (t or nil)."
- (declare (pure t) (side-effect-free t))
- (and obj t))
-
-(defmacro --any? (form list)
- "Anaphoric form of `-any?'."
- (declare (debug (form form)))
- `(and (--some ,form ,list) t))
-
-(defun -any? (pred list)
- "Return t if (PRED x) is non-nil for any x in LIST, else nil.
-
-Alias: `-any-p', `-some?', `-some-p'"
- (--any? (funcall pred it) list))
-
-(defalias '-some? '-any?)
-(defalias '--some? '--any?)
-(defalias '-any-p '-any?)
-(defalias '--any-p '--any?)
-(defalias '-some-p '-any?)
-(defalias '--some-p '--any?)
-
-(defmacro --all? (form list)
- "Return t if FORM evals to non-nil for all items in LIST.
-Otherwise, once an item is reached for which FORM yields nil,
-return nil without evaluating FORM for any further LIST elements.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM.
-
-The similar macro `--every' is more widely useful, since it
-returns the last non-nil result of FORM instead of just t on
-success.
-
-Alias: `--all-p', `--every-p', `--every?'.
-
-This is the anaphoric counterpart to `-all?'."
- (declare (debug (form form)))
- `(and (--every ,form ,list) t))
-
-(defun -all? (pred list)
- "Return t if (PRED X) is non-nil for all X in LIST, else nil.
-In the latter case, stop after the first X for which (PRED X) is
-nil, without calling PRED on any subsequent elements of LIST.
-
-The similar function `-every' is more widely useful, since it
-returns the last non-nil result of PRED instead of just t on
-success.
-
-Alias: `-all-p', `-every-p', `-every?'.
-
-This function's anaphoric counterpart is `--all?'."
- (--all? (funcall pred it) list))
-
-(defalias '-every? '-all?)
-(defalias '--every? '--all?)
-(defalias '-all-p '-all?)
-(defalias '--all-p '--all?)
-(defalias '-every-p '-all?)
-(defalias '--every-p '--all?)
-
-(defmacro --none? (form list)
- "Anaphoric form of `-none?'."
- (declare (debug (form form)))
- `(--all? (not ,form) ,list))
-
-(defun -none? (pred list)
- "Return t if (PRED x) is nil for all x in LIST, else nil.
-
-Alias: `-none-p'"
- (--none? (funcall pred it) list))
-
-(defalias '-none-p '-none?)
-(defalias '--none-p '--none?)
-
-(defmacro --only-some? (form list)
- "Anaphoric form of `-only-some?'."
- (declare (debug (form form)))
- (let ((y (make-symbol "yes"))
- (n (make-symbol "no")))
- `(let (,y ,n)
- (--each-while ,list (not (and ,y ,n))
- (if ,form (setq ,y t) (setq ,n t)))
- (---truthy? (and ,y ,n)))))
-
-(defun -only-some? (pred list)
- "Return `t` if at least one item of LIST matches PRED and at least one item of LIST does not match PRED.
-Return `nil` both if all items match the predicate or if none of the items match the predicate.
-
-Alias: `-only-some-p'"
- (--only-some? (funcall pred it) list))
-
-(defalias '-only-some-p '-only-some?)
-(defalias '--only-some-p '--only-some?)
-
-(defun -slice (list from &optional to step)
- "Return copy of LIST, starting from index FROM to index TO.
-
-FROM or TO may be negative. These values are then interpreted
-modulo the length of the list.
-
-If STEP is a number, only each STEPth item in the resulting
-section is returned. Defaults to 1."
- (declare (pure t) (side-effect-free t))
- (let ((length (length list))
- (new-list nil))
- ;; to defaults to the end of the list
- (setq to (or to length))
- (setq step (or step 1))
- ;; handle negative indices
- (when (< from 0)
- (setq from (mod from length)))
- (when (< to 0)
- (setq to (mod to length)))
-
- ;; iterate through the list, keeping the elements we want
- (--each-while list (< it-index to)
- (when (and (>= it-index from)
- (= (mod (- from it-index) step) 0))
- (push it new-list)))
- (nreverse new-list)))
-
-(defmacro --take-while (form list)
- "Take successive items from LIST for which FORM evals to non-nil.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM. Return a new
-list of the successive elements from the start of LIST for which
-FORM evaluates to non-nil.
-This is the anaphoric counterpart to `-take-while'."
- (declare (debug (form form)))
- (let ((r (make-symbol "result")))
- `(let (,r)
- (--each-while ,list ,form (push it ,r))
- (nreverse ,r))))
-
-(defun -take-while (pred list)
- "Take successive items from LIST for which PRED returns non-nil.
-PRED is a function of one argument. Return a new list of the
-successive elements from the start of LIST for which PRED returns
-non-nil.
-
-This function's anaphoric counterpart is `--take-while'.
-
-For another variant, see also `-drop-while'."
- (--take-while (funcall pred it) list))
-
-(defmacro --drop-while (form list)
- "Drop successive items from LIST for which FORM evals to non-nil.
-Each element of LIST in turn is bound to `it' and its index
-within LIST to `it-index' before evaluating FORM. Return the
-tail (not a copy) of LIST starting from its first element for
-which FORM evaluates to nil.
-This is the anaphoric counterpart to `-drop-while'."
- (declare (debug (form form)))
- (let ((l (make-symbol "list")))
- `(let ((,l ,list))
- (--each-while ,l ,form (pop ,l))
- ,l)))
-
-(defun -drop-while (pred list)
- "Drop successive items from LIST for which PRED returns non-nil.
-PRED is a function of one argument. Return the tail (not a copy)
-of LIST starting from its first element for which PRED returns
-nil.
-
-This function's anaphoric counterpart is `--drop-while'.
-
-For another variant, see also `-take-while'."
- (--drop-while (funcall pred it) list))
-
-(defun -take (n list)
- "Return a copy of the first N items in LIST.
-Return a copy of LIST if it contains N items or fewer.
-Return nil if N is zero or less.
-
-See also: `-take-last'."
- (declare (pure t) (side-effect-free t))
- (--take-while (< it-index n) list))
-
-(defun -take-last (n list)
- "Return a copy of the last N items of LIST in order.
-Return a copy of LIST if it contains N items or fewer.
-Return nil if N is zero or less.
-
-See also: `-take'."
- (declare (pure t) (side-effect-free t))
- (copy-sequence (last list n)))
-
-(defalias '-drop #'nthcdr
- "Return the tail (not a copy) of LIST without the first N items.
-Return nil if LIST contains N items or fewer.
-Return LIST if N is zero or less.
-
-For another variant, see also `-drop-last'.
-\n(fn N LIST)")
-
-(defun -drop-last (n list)
- "Return a copy of LIST without its last N items.
-Return a copy of LIST if N is zero or less.
-Return nil if LIST contains N items or fewer.
-
-See also: `-drop'."
- (declare (pure t) (side-effect-free t))
- (nbutlast (copy-sequence list) n))
-
-(defun -split-at (n list)
- "Split LIST into two sublists after the Nth element.
-The result is a list of two elements (TAKE DROP) where TAKE is a
-new list of the first N elements of LIST, and DROP is the
-remaining elements of LIST (not a copy). TAKE and DROP are like
-the results of `-take' and `-drop', respectively, but the split
-is done in a single list traversal."
- (declare (pure t) (side-effect-free t))
- (let (result)
- (--each-while list (< it-index n)
- (push (pop list) result))
- (list (nreverse result) list)))
-
-(defun -rotate (n list)
- "Rotate LIST N places to the right (left if N is negative).
-The time complexity is O(n)."
- (declare (pure t) (side-effect-free t))
- (cond ((null list) ())
- ((zerop n) (copy-sequence list))
- ((let* ((len (length list))
- (n-mod-len (mod n len))
- (new-tail-len (- len n-mod-len)))
- (append (nthcdr new-tail-len list) (-take new-tail-len list))))))
-
-(defun -insert-at (n x list)
- "Return a list with X inserted into LIST at position N.
-
-See also: `-splice', `-splice-list'"
- (declare (pure t) (side-effect-free t))
- (let ((split-list (-split-at n list)))
- (nconc (car split-list) (cons x (cadr split-list)))))
-
-(defun -replace-at (n x list)
- "Return a list with element at Nth position in LIST replaced with X.
-
-See also: `-replace'"
- (declare (pure t) (side-effect-free t))
- (let ((split-list (-split-at n list)))
- (nconc (car split-list) (cons x (cdr (cadr split-list))))))
-
-(defun -update-at (n func list)
- "Return a list with element at Nth position in LIST replaced with `(func (nth n list))`.
-
-See also: `-map-when'"
- (let ((split-list (-split-at n list)))
- (nconc (car split-list) (cons (funcall func (car (cadr split-list))) (cdr (cadr split-list))))))
-
-(defmacro --update-at (n form list)
- "Anaphoric version of `-update-at'."
- (declare (debug (form def-form form)))
- `(-update-at ,n (lambda (it) ,form) ,list))
-
-(defun -remove-at (n list)
- "Return a list with element at Nth position in LIST removed.
-
-See also: `-remove-at-indices', `-remove'"
- (declare (pure t) (side-effect-free t))
- (-remove-at-indices (list n) list))
-
-(defun -remove-at-indices (indices list)
- "Return a list whose elements are elements from LIST without
-elements selected as `(nth i list)` for all i
-from INDICES.
-
-See also: `-remove-at', `-remove'"
- (declare (pure t) (side-effect-free t))
- (let* ((indices (-sort '< indices))
- (diffs (cons (car indices) (-map '1- (-zip-with '- (cdr indices) indices))))
- r)
- (--each diffs
- (let ((split (-split-at it list)))
- (!cons (car split) r)
- (setq list (cdr (cadr split)))))
- (!cons list r)
- (apply '-concat (nreverse r))))
-
-(defmacro --split-with (pred list)
- "Anaphoric form of `-split-with'."
- (declare (debug (form form)))
- (let ((l (make-symbol "list"))
- (r (make-symbol "result"))
- (c (make-symbol "continue")))
- `(let ((,l ,list)
- (,r nil)
- (,c t))
- (while (and ,l ,c)
- (let ((it (car ,l)))
- (if (not ,pred)
- (setq ,c nil)
- (!cons it ,r)
- (!cdr ,l))))
- (list (nreverse ,r) ,l))))
-
-(defun -split-with (pred list)
- "Return a list of ((-take-while PRED LIST) (-drop-while PRED LIST)), in no more than one pass through the list."
- (--split-with (funcall pred it) list))
-
-(defmacro -split-on (item list)
- "Split the LIST each time ITEM is found.
-
-Unlike `-partition-by', the ITEM is discarded from the results.
-Empty lists are also removed from the result.
-
-Comparison is done by `equal'.
-
-See also `-split-when'"
- (declare (debug (def-form form)))
- `(-split-when (lambda (it) (equal it ,item)) ,list))
-
-(defmacro --split-when (form list)
- "Anaphoric version of `-split-when'."
- (declare (debug (def-form form)))
- `(-split-when (lambda (it) ,form) ,list))
-
-(defun -split-when (fn list)
- "Split the LIST on each element where FN returns non-nil.
-
-Unlike `-partition-by', the \"matched\" element is discarded from
-the results. Empty lists are also removed from the result.
-
-This function can be thought of as a generalization of
-`split-string'."
- (let (r s)
- (while list
- (if (not (funcall fn (car list)))
- (push (car list) s)
- (when s (push (nreverse s) r))
- (setq s nil))
- (!cdr list))
- (when s (push (nreverse s) r))
- (nreverse r)))
-
-(defmacro --separate (form list)
- "Anaphoric form of `-separate'."
- (declare (debug (form form)))
- (let ((y (make-symbol "yes"))
- (n (make-symbol "no")))
- `(let (,y ,n)
- (--each ,list (if ,form (!cons it ,y) (!cons it ,n)))
- (list (nreverse ,y) (nreverse ,n)))))
-
-(defun -separate (pred list)
- "Return a list of ((-filter PRED LIST) (-remove PRED LIST)), in one pass through the list."
- (--separate (funcall pred it) list))
-
-(defun dash--partition-all-in-steps-reversed (n step list)
- "Used by `-partition-all-in-steps' and `-partition-in-steps'."
- (when (< step 1)
- (signal 'wrong-type-argument
- `("Step size < 1 results in juicy infinite loops" ,step)))
- (let (result)
- (while list
- (push (-take n list) result)
- (setq list (nthcdr step list)))
- result))
-
-(defun -partition-all-in-steps (n step list)
- "Return a new list with the items in LIST grouped into N-sized sublists at offsets STEP apart.
-The last groups may contain less than N items."
- (declare (pure t) (side-effect-free t))
- (nreverse (dash--partition-all-in-steps-reversed n step list)))
-
-(defun -partition-in-steps (n step list)
- "Return a new list with the items in LIST grouped into N-sized sublists at offsets STEP apart.
-If there are not enough items to make the last group N-sized,
-those items are discarded."
- (declare (pure t) (side-effect-free t))
- (let ((result (dash--partition-all-in-steps-reversed n step list)))
- (while (and result (< (length (car result)) n))
- (!cdr result))
- (nreverse result)))
-
-(defun -partition-all (n list)
- "Return a new list with the items in LIST grouped into N-sized sublists.
-The last group may contain less than N items."
- (declare (pure t) (side-effect-free t))
- (-partition-all-in-steps n n list))
-
-(defun -partition (n list)
- "Return a new list with the items in LIST grouped into N-sized sublists.
-If there are not enough items to make the last group N-sized,
-those items are discarded."
- (declare (pure t) (side-effect-free t))
- (-partition-in-steps n n list))
-
-(defmacro --partition-by (form list)
- "Anaphoric form of `-partition-by'."
- (declare (debug (form form)))
- (let ((r (make-symbol "result"))
- (s (make-symbol "sublist"))
- (v (make-symbol "value"))
- (n (make-symbol "new-value"))
- (l (make-symbol "list")))
- `(let ((,l ,list))
- (when ,l
- (let* ((,r nil)
- (it (car ,l))
- (,s (list it))
- (,v ,form)
- (,l (cdr ,l)))
- (while ,l
- (let* ((it (car ,l))
- (,n ,form))
- (unless (equal ,v ,n)
- (!cons (nreverse ,s) ,r)
- (setq ,s nil)
- (setq ,v ,n))
- (!cons it ,s)
- (!cdr ,l)))
- (!cons (nreverse ,s) ,r)
- (nreverse ,r))))))
-
-(defun -partition-by (fn list)
- "Apply FN to each item in LIST, splitting it each time FN returns a new value."
- (--partition-by (funcall fn it) list))
-
-(defmacro --partition-by-header (form list)
- "Anaphoric form of `-partition-by-header'."
- (declare (debug (form form)))
- (let ((r (make-symbol "result"))
- (s (make-symbol "sublist"))
- (h (make-symbol "header-value"))
- (b (make-symbol "seen-body?"))
- (n (make-symbol "new-value"))
- (l (make-symbol "list")))
- `(let ((,l ,list))
- (when ,l
- (let* ((,r nil)
- (it (car ,l))
- (,s (list it))
- (,h ,form)
- (,b nil)
- (,l (cdr ,l)))
- (while ,l
- (let* ((it (car ,l))
- (,n ,form))
- (if (equal ,h ,n)
- (when ,b
- (!cons (nreverse ,s) ,r)
- (setq ,s nil)
- (setq ,b nil))
- (setq ,b t))
- (!cons it ,s)
- (!cdr ,l)))
- (!cons (nreverse ,s) ,r)
- (nreverse ,r))))))
-
-(defun -partition-by-header (fn list)
- "Apply FN to the first item in LIST. That is the header
-value. Apply FN to each item in LIST, splitting it each time FN
-returns the header value, but only after seeing at least one
-other value (the body)."
- (--partition-by-header (funcall fn it) list))
-
-(defmacro --partition-after-pred (form list)
- "Partition LIST after each element for which FORM evaluates to non-nil.
-Each element of LIST in turn is bound to `it' before evaluating
-FORM.
-
-This is the anaphoric counterpart to `-partition-after-pred'."
- (let ((l (make-symbol "list"))
- (r (make-symbol "result"))
- (s (make-symbol "sublist")))
- `(let ((,l ,list) ,r ,s)
- (when ,l
- (--each ,l
- (push it ,s)
- (when ,form
- (push (nreverse ,s) ,r)
- (setq ,s ())))
- (when ,s
- (push (nreverse ,s) ,r))
- (nreverse ,r)))))
-
-(defun -partition-after-pred (pred list)
- "Partition LIST after each element for which PRED returns non-nil.
-
-This function's anaphoric counterpart is `--partition-after-pred'."
- (--partition-after-pred (funcall pred it) list))
-
-(defun -partition-before-pred (pred list)
- "Partition directly before each time PRED is true on an element of LIST."
- (nreverse (-map #'reverse
- (-partition-after-pred pred (reverse list)))))
-
-(defun -partition-after-item (item list)
- "Partition directly after each time ITEM appears in LIST."
- (-partition-after-pred (lambda (ele) (equal ele item))
- list))
-
-(defun -partition-before-item (item list)
- "Partition directly before each time ITEM appears in LIST."
- (-partition-before-pred (lambda (ele) (equal ele item))
- list))
-
-(defmacro --group-by (form list)
- "Anaphoric form of `-group-by'."
- (declare (debug t))
- (let ((n (make-symbol "n"))
- (k (make-symbol "k"))
- (grp (make-symbol "grp")))
- `(nreverse
- (-map
- (lambda (,n)
- (cons (car ,n)
- (nreverse (cdr ,n))))
- (--reduce-from
- (let* ((,k (,@form))
- (,grp (assoc ,k acc)))
- (if ,grp
- (setcdr ,grp (cons it (cdr ,grp)))
- (push
- (list ,k it)
- acc))
- acc)
- nil ,list)))))
-
-(defun -group-by (fn list)
- "Separate LIST into an alist whose keys are FN applied to the
-elements of LIST. Keys are compared by `equal'."
- (--group-by (funcall fn it) list))
-
-(defun -interpose (sep list)
- "Return a new list of all elements in LIST separated by SEP."
- (declare (pure t) (side-effect-free t))
- (let (result)
- (when list
- (!cons (car list) result)
- (!cdr list))
- (while list
- (setq result (cons (car list) (cons sep result)))
- (!cdr list))
- (nreverse result)))
-
-(defun -interleave (&rest lists)
- "Return a new list of the first item in each list, then the second etc."
- (declare (pure t) (side-effect-free t))
- (when lists
- (let (result)
- (while (-none? 'null lists)
- (--each lists (!cons (car it) result))
- (setq lists (-map 'cdr lists)))
- (nreverse result))))
-
-(defmacro --zip-with (form list1 list2)
- "Anaphoric form of `-zip-with'.
-
-The elements in list1 are bound as symbol `it', the elements in list2 as symbol `other'."
- (declare (debug (form form form)))
- (let ((r (make-symbol "result"))
- (l1 (make-symbol "list1"))
- (l2 (make-symbol "list2")))
- `(let ((,r nil)
- (,l1 ,list1)
- (,l2 ,list2))
- (while (and ,l1 ,l2)
- (let ((it (car ,l1))
- (other (car ,l2)))
- (!cons ,form ,r)
- (!cdr ,l1)
- (!cdr ,l2)))
- (nreverse ,r))))
-
-(defun -zip-with (fn list1 list2)
- "Zip the two lists LIST1 and LIST2 using a function FN. This
-function is applied pairwise taking as first argument element of
-LIST1 and as second argument element of LIST2 at corresponding
-position.
-
-The anaphoric form `--zip-with' binds the elements from LIST1 as symbol `it',
-and the elements from LIST2 as symbol `other'."
- (--zip-with (funcall fn it other) list1 list2))
-
-(defun -zip-lists (&rest lists)
- "Zip LISTS together. Group the head of each list, followed by the
-second elements of each list, and so on. The lengths of the returned
-groupings are equal to the length of the shortest input list.
-
-The return value is always list of lists, which is a difference
-from `-zip-pair' which returns a cons-cell in case two input
-lists are provided.
-
-See also: `-zip'"
- (declare (pure t) (side-effect-free t))
- (when lists
- (let (results)
- (while (-none? 'null lists)
- (setq results (cons (mapcar 'car lists) results))
- (setq lists (mapcar 'cdr lists)))
- (nreverse results))))
-
-(defun -zip (&rest lists)
- "Zip LISTS together. Group the head of each list, followed by the
-second elements of each list, and so on. The lengths of the returned
-groupings are equal to the length of the shortest input list.
-
-If two lists are provided as arguments, return the groupings as a list
-of cons cells. Otherwise, return the groupings as a list of lists.
-
-Use `-zip-lists' if you need the return value to always be a list
-of lists.
-
-Alias: `-zip-pair'
-
-See also: `-zip-lists'"
- (declare (pure t) (side-effect-free t))
- (when lists
- (let (results)
- (while (-none? 'null lists)
- (setq results (cons (mapcar 'car lists) results))
- (setq lists (mapcar 'cdr lists)))
- (setq results (nreverse results))
- (if (= (length lists) 2)
- ;; to support backward compatibility, return
- ;; a cons cell if two lists were provided
- (--map (cons (car it) (cadr it)) results)
- results))))
-
-(defalias '-zip-pair '-zip)
-
-(defun -zip-fill (fill-value &rest lists)
- "Zip LISTS, with FILL-VALUE padded onto the shorter lists. The
-lengths of the returned groupings are equal to the length of the
-longest input list."
- (declare (pure t) (side-effect-free t))
- (apply '-zip (apply '-pad (cons fill-value lists))))
-
-(defun -unzip (lists)
- "Unzip LISTS.
-
-This works just like `-zip' but takes a list of lists instead of
-a variable number of arguments, such that
-
- (-unzip (-zip L1 L2 L3 ...))
-
-is identity (given that the lists are the same length).
-
-Note in particular that calling this on a list of two lists will
-return a list of cons-cells such that the above identity works.
-
-See also: `-zip'"
- (apply '-zip lists))
-
-(defun -cycle (list)
- "Return an infinite circular copy of LIST.
-The returned list cycles through the elements of LIST and repeats
-from the beginning."
- (declare (pure t) (side-effect-free t))
- ;; Also works with sequences that aren't lists.
- (let ((newlist (append list ())))
- (nconc newlist newlist)))
-
-(defun -pad (fill-value &rest lists)
- "Appends FILL-VALUE to the end of each list in LISTS such that they
-will all have the same length."
- (let* ((annotations (-annotate 'length lists))
- (n (-max (-map 'car annotations))))
- (--map (append (cdr it) (-repeat (- n (car it)) fill-value)) annotations)))
-
-(defun -annotate (fn list)
- "Return a list of cons cells where each cell is FN applied to each
-element of LIST paired with the unmodified element of LIST."
- (-zip (-map fn list) list))
-
-(defmacro --annotate (form list)
- "Anaphoric version of `-annotate'."
- (declare (debug (def-form form)))
- `(-annotate (lambda (it) ,form) ,list))
-
-(defun dash--table-carry (lists restore-lists &optional re)
- "Helper for `-table' and `-table-flat'.
-
-If a list overflows, carry to the right and reset the list."
- (while (not (or (car lists)
- (equal lists '(nil))))
- (setcar lists (car restore-lists))
- (pop (cadr lists))
- (!cdr lists)
- (!cdr restore-lists)
- (when re
- (push (nreverse (car re)) (cadr re))
- (setcar re nil)
- (!cdr re))))
-
-(defun -table (fn &rest lists)
- "Compute outer product of LISTS using function FN.
-
-The function FN should have the same arity as the number of
-supplied lists.
-
-The outer product is computed by applying fn to all possible
-combinations created by taking one element from each list in
-order. The dimension of the result is (length lists).
-
-See also: `-table-flat'"
- (let ((restore-lists (copy-sequence lists))
- (last-list (last lists))
- (re (make-list (length lists) nil)))
- (while (car last-list)
- (let ((item (apply fn (-map 'car lists))))
- (push item (car re))
- (setcar lists (cdar lists)) ;; silence byte compiler
- (dash--table-carry lists restore-lists re)))
- (nreverse (car (last re)))))
-
-(defun -table-flat (fn &rest lists)
- "Compute flat outer product of LISTS using function FN.
-
-The function FN should have the same arity as the number of
-supplied lists.
-
-The outer product is computed by applying fn to all possible
-combinations created by taking one element from each list in
-order. The results are flattened, ignoring the tensor structure
-of the result. This is equivalent to calling:
-
- (-flatten-n (1- (length lists)) (apply \\='-table fn lists))
-
-but the implementation here is much more efficient.
-
-See also: `-flatten-n', `-table'"
- (let ((restore-lists (copy-sequence lists))
- (last-list (last lists))
- re)
- (while (car last-list)
- (let ((item (apply fn (-map 'car lists))))
- (push item re)
- (setcar lists (cdar lists)) ;; silence byte compiler
- (dash--table-carry lists restore-lists)))
- (nreverse re)))
-
-(defun -elem-index (elem list)
- "Return the index of the first element in the given LIST which
-is equal to the query element ELEM, or nil if there is no
-such element."
- (declare (pure t) (side-effect-free t))
- (car (-elem-indices elem list)))
-
-(defun -elem-indices (elem list)
- "Return the indices of all elements in LIST equal to the query
-element ELEM, in ascending order."
- (declare (pure t) (side-effect-free t))
- (-find-indices (-partial 'equal elem) list))
-
-(defun -find-indices (pred list)
- "Return the indices of all elements in LIST satisfying the
-predicate PRED, in ascending order."
- (apply 'append (--map-indexed (when (funcall pred it) (list it-index)) list)))
-
-(defmacro --find-indices (form list)
- "Anaphoric version of `-find-indices'."
- (declare (debug (def-form form)))
- `(-find-indices (lambda (it) ,form) ,list))
-
-(defun -find-index (pred list)
- "Take a predicate PRED and a LIST and return the index of the
-first element in the list satisfying the predicate, or nil if
-there is no such element.
-
-See also `-first'."
- (car (-find-indices pred list)))
-
-(defmacro --find-index (form list)
- "Anaphoric version of `-find-index'."
- (declare (debug (def-form form)))
- `(-find-index (lambda (it) ,form) ,list))
-
-(defun -find-last-index (pred list)
- "Take a predicate PRED and a LIST and return the index of the
-last element in the list satisfying the predicate, or nil if
-there is no such element.
-
-See also `-last'."
- (-last-item (-find-indices pred list)))
-
-(defmacro --find-last-index (form list)
- "Anaphoric version of `-find-last-index'."
- (declare (debug (def-form form)))
- `(-find-last-index (lambda (it) ,form) ,list))
-
-(defun -select-by-indices (indices list)
- "Return a list whose elements are elements from LIST selected
-as `(nth i list)` for all i from INDICES."
- (declare (pure t) (side-effect-free t))
- (let (r)
- (--each indices
- (!cons (nth it list) r))
- (nreverse r)))
-
-(defun -select-columns (columns table)
- "Select COLUMNS from TABLE.
-
-TABLE is a list of lists where each element represents one row.
-It is assumed each row has the same length.
-
-Each row is transformed such that only the specified COLUMNS are
-selected.
-
-See also: `-select-column', `-select-by-indices'"
- (declare (pure t) (side-effect-free t))
- (--map (-select-by-indices columns it) table))
-
-(defun -select-column (column table)
- "Select COLUMN from TABLE.
-
-TABLE is a list of lists where each element represents one row.
-It is assumed each row has the same length.
-
-The single selected column is returned as a list.
-
-See also: `-select-columns', `-select-by-indices'"
- (declare (pure t) (side-effect-free t))
- (--mapcat (-select-by-indices (list column) it) table))
-
-(defmacro -> (x &optional form &rest more)
- "Thread the expr through the forms. Insert X as the second item
-in the first form, making a list of it if it is not a list
-already. If there are more forms, insert the first form as the
-second item in second form, etc."
- (declare (debug (form &rest [&or symbolp (sexp &rest form)])))
- (cond
- ((null form) x)
- ((null more) (if (listp form)
- `(,(car form) ,x ,@(cdr form))
- (list form x)))
- (:else `(-> (-> ,x ,form) ,@more))))
-
-(defmacro ->> (x &optional form &rest more)
- "Thread the expr through the forms. Insert X as the last item
-in the first form, making a list of it if it is not a list
-already. If there are more forms, insert the first form as the
-last item in second form, etc."
- (declare (debug ->))
- (cond
- ((null form) x)
- ((null more) (if (listp form)
- `(,@form ,x)
- (list form x)))
- (:else `(->> (->> ,x ,form) ,@more))))
-
-(defmacro --> (x &rest forms)
- "Starting with the value of X, thread each expression through FORMS.
-
-Insert X at the position signified by the symbol `it' in the first
-form. If there are more forms, insert the first form at the position
-signified by `it' in in second form, etc."
- (declare (debug (form body)))
- `(-as-> ,x it ,@forms))
-
-(defmacro -as-> (value variable &rest forms)
- "Starting with VALUE, thread VARIABLE through FORMS.
-
-In the first form, bind VARIABLE to VALUE. In the second form, bind
-VARIABLE to the result of the first form, and so forth."
- (declare (debug (form symbolp body)))
- (if (null forms)
- `,value
- `(let ((,variable ,value))
- (-as-> ,(if (symbolp (car forms))
- (list (car forms) variable)
- (car forms))
- ,variable
- ,@(cdr forms)))))
-
-(defmacro -some-> (x &optional form &rest more)
- "When expr is non-nil, thread it through the first form (via `->'),
-and when that result is non-nil, through the next form, etc."
- (declare (debug ->)
- (indent 1))
- (if (null form) x
- (let ((result (make-symbol "result")))
- `(-some-> (-when-let (,result ,x)
- (-> ,result ,form))
- ,@more))))
-
-(defmacro -some->> (x &optional form &rest more)
- "When expr is non-nil, thread it through the first form (via `->>'),
-and when that result is non-nil, through the next form, etc."
- (declare (debug ->)
- (indent 1))
- (if (null form) x
- (let ((result (make-symbol "result")))
- `(-some->> (-when-let (,result ,x)
- (->> ,result ,form))
- ,@more))))
-
-(defmacro -some--> (expr &rest forms)
- "Thread EXPR through FORMS via `-->', while the result is non-nil.
-When EXPR evaluates to non-nil, thread the result through the
-first of FORMS, and when that result is non-nil, thread it
-through the next form, etc."
- (declare (debug (form &rest &or symbolp consp)) (indent 1))
- (if (null forms) expr
- (let ((result (make-symbol "result")))
- `(-some--> (-when-let (,result ,expr)
- (--> ,result ,(car forms)))
- ,@(cdr forms)))))
-
-(defmacro -doto (init &rest forms)
- "Evaluate INIT and pass it as argument to FORMS with `->'.
-The RESULT of evaluating INIT is threaded through each of FORMS
-individually using `->', which see. The return value is RESULT,
-which FORMS may have modified by side effect."
- (declare (debug (form &rest &or symbolp consp)) (indent 1))
- (let ((retval (make-symbol "result")))
- `(let ((,retval ,init))
- ,@(mapcar (lambda (form) `(-> ,retval ,form)) forms)
- ,retval)))
-
-(defmacro --doto (init &rest forms)
- "Anaphoric form of `-doto'.
-This just evaluates INIT, binds the result to `it', evaluates
-FORMS, and returns the final value of `it'.
-Note: `it' need not be used in each form."
- (declare (debug (form body)) (indent 1))
- `(let ((it ,init))
- ,@forms
- it))
-
-(defun -grade-up (comparator list)
- "Grade elements of LIST using COMPARATOR relation.
-This yields a permutation vector such that applying this
-permutation to LIST sorts it in ascending order."
- (->> (--map-indexed (cons it it-index) list)
- (-sort (lambda (it other) (funcall comparator (car it) (car other))))
- (mapcar #'cdr)))
-
-(defun -grade-down (comparator list)
- "Grade elements of LIST using COMPARATOR relation.
-This yields a permutation vector such that applying this
-permutation to LIST sorts it in descending order."
- (->> (--map-indexed (cons it it-index) list)
- (-sort (lambda (it other) (funcall comparator (car other) (car it))))
- (mapcar #'cdr)))
-
-(defvar dash--source-counter 0
- "Monotonic counter for generated symbols.")
-
-(defun dash--match-make-source-symbol ()
- "Generate a new dash-source symbol.
-
-All returned symbols are guaranteed to be unique."
- (prog1 (make-symbol (format "--dash-source-%d--" dash--source-counter))
- (setq dash--source-counter (1+ dash--source-counter))))
-
-(defun dash--match-ignore-place-p (symbol)
- "Return non-nil if SYMBOL is a symbol and starts with _."
- (and (symbolp symbol)
- (eq (aref (symbol-name symbol) 0) ?_)))
-
-(defun dash--match-cons-skip-cdr (skip-cdr source)
- "Helper function generating idiomatic shifting code."
- (cond
- ((= skip-cdr 0)
- `(pop ,source))
- (t
- `(prog1 ,(dash--match-cons-get-car skip-cdr source)
- (setq ,source ,(dash--match-cons-get-cdr (1+ skip-cdr) source))))))
-
-(defun dash--match-cons-get-car (skip-cdr source)
- "Helper function generating idiomatic code to get nth car."
- (cond
- ((= skip-cdr 0)
- `(car ,source))
- ((= skip-cdr 1)
- `(cadr ,source))
- (t
- `(nth ,skip-cdr ,source))))
-
-(defun dash--match-cons-get-cdr (skip-cdr source)
- "Helper function generating idiomatic code to get nth cdr."
- (cond
- ((= skip-cdr 0)
- source)
- ((= skip-cdr 1)
- `(cdr ,source))
- (t
- `(nthcdr ,skip-cdr ,source))))
-
-(defun dash--match-cons (match-form source)
- "Setup a cons matching environment and call the real matcher."
- (let ((s (dash--match-make-source-symbol))
- (n 0)
- (m match-form))
- (while (and (consp m)
- (dash--match-ignore-place-p (car m)))
- (setq n (1+ n)) (!cdr m))
- (cond
- ;; when we only have one pattern in the list, we don't have to
- ;; create a temporary binding (--dash-source--) for the source
- ;; and just use the input directly
- ((and (consp m)
- (not (cdr m)))
- (dash--match (car m) (dash--match-cons-get-car n source)))
- ;; handle other special types
- ((> n 0)
- (dash--match m (dash--match-cons-get-cdr n source)))
- ;; this is the only entry-point for dash--match-cons-1, that's
- ;; why we can't simply use the above branch, it would produce
- ;; infinite recursion
- (t
- (cons (list s source) (dash--match-cons-1 match-form s))))))
-
-(defun dash--get-expand-function (type)
- "Get expand function name for TYPE."
- (intern-soft (format "dash-expand:%s" type)))
-
-(defun dash--match-cons-1 (match-form source &optional props)
- "Match MATCH-FORM against SOURCE.
-
-MATCH-FORM is a proper or improper list. Each element of
-MATCH-FORM is either a symbol, which gets bound to the respective
-value in source or another match form which gets destructured
-recursively.
-
-If the cdr of last cons cell in the list is `nil', matching stops
-there.
-
-SOURCE is a proper or improper list."
- (let ((skip-cdr (or (plist-get props :skip-cdr) 0)))
- (cond
- ((consp match-form)
- (cond
- ((cdr match-form)
- (cond
- ((and (symbolp (car match-form))
- (functionp (dash--get-expand-function (car match-form))))
- (dash--match-kv (dash--match-kv-normalize-match-form match-form) (dash--match-cons-get-cdr skip-cdr source)))
- ((dash--match-ignore-place-p (car match-form))
- (dash--match-cons-1 (cdr match-form) source
- (plist-put props :skip-cdr (1+ skip-cdr))))
- (t
- (-concat (dash--match (car match-form) (dash--match-cons-skip-cdr skip-cdr source))
- (dash--match-cons-1 (cdr match-form) source)))))
- (t ;; Last matching place, no need for shift
- (dash--match (car match-form) (dash--match-cons-get-car skip-cdr source)))))
- ((eq match-form nil)
- nil)
- (t ;; Handle improper lists. Last matching place, no need for shift
- (dash--match match-form (dash--match-cons-get-cdr skip-cdr source))))))
-
-(defun dash--match-vector (match-form source)
- "Setup a vector matching environment and call the real matcher."
- (let ((s (dash--match-make-source-symbol)))
- (cond
- ;; don't bind `s' if we only have one sub-pattern
- ((= (length match-form) 1)
- (dash--match (aref match-form 0) `(aref ,source 0)))
- ;; if the source is a symbol, we don't need to re-bind it
- ((symbolp source)
- (dash--match-vector-1 match-form source))
- ;; don't bind `s' if we only have one sub-pattern which is not ignored
- ((let* ((ignored-places (mapcar 'dash--match-ignore-place-p match-form))
- (ignored-places-n (length (-remove 'null ignored-places))))
- (when (= ignored-places-n (1- (length match-form)))
- (let ((n (-find-index 'null ignored-places)))
- (dash--match (aref match-form n) `(aref ,source ,n))))))
- (t
- (cons (list s source) (dash--match-vector-1 match-form s))))))
-
-(defun dash--match-vector-1 (match-form source)
- "Match MATCH-FORM against SOURCE.
-
-MATCH-FORM is a vector. Each element of MATCH-FORM is either a
-symbol, which gets bound to the respective value in source or
-another match form which gets destructured recursively.
-
-If second-from-last place in MATCH-FORM is the symbol &rest, the
-next element of the MATCH-FORM is matched against the tail of
-SOURCE, starting at index of the &rest symbol. This is
-conceptually the same as the (head . tail) match for improper
-lists, where dot plays the role of &rest.
-
-SOURCE is a vector.
-
-If the MATCH-FORM vector is shorter than SOURCE vector, only
-the (length MATCH-FORM) places are bound, the rest of the SOURCE
-is discarded."
- (let ((i 0)
- (l (length match-form))
- (re))
- (while (< i l)
- (let ((m (aref match-form i)))
- (push (cond
- ((and (symbolp m)
- (eq m '&rest))
- (prog1 (dash--match
- (aref match-form (1+ i))
- `(substring ,source ,i))
- (setq i l)))
- ((and (symbolp m)
- ;; do not match symbols starting with _
- (not (eq (aref (symbol-name m) 0) ?_)))
- (list (list m `(aref ,source ,i))))
- ((not (symbolp m))
- (dash--match m `(aref ,source ,i))))
- re)
- (setq i (1+ i))))
- (-flatten-n 1 (nreverse re))))
-
-(defun dash--match-kv-normalize-match-form (pattern)
- "Normalize kv PATTERN.
-
-This method normalizes PATTERN to the format expected by
-`dash--match-kv'. See `-let' for the specification."
- (let ((normalized (list (car pattern)))
- (skip nil)
- (fill-placeholder (make-symbol "--dash-fill-placeholder--")))
- (-each (apply '-zip (-pad fill-placeholder (cdr pattern) (cddr pattern)))
- (lambda (pair)
- (let ((current (car pair))
- (next (cdr pair)))
- (if skip
- (setq skip nil)
- (if (or (eq fill-placeholder next)
- (not (or (and (symbolp next)
- (not (keywordp next))
- (not (eq next t))
- (not (eq next nil)))
- (and (consp next)
- (not (eq (car next) 'quote)))
- (vectorp next))))
- (progn
- (cond
- ((keywordp current)
- (push current normalized)
- (push (intern (substring (symbol-name current) 1)) normalized))
- ((stringp current)
- (push current normalized)
- (push (intern current) normalized))
- ((and (consp current)
- (eq (car current) 'quote))
- (push current normalized)
- (push (cadr current) normalized))
- (t (error "-let: found key `%s' in kv destructuring but its pattern `%s' is invalid and can not be derived from the key" current next)))
- (setq skip nil))
- (push current normalized)
- (push next normalized)
- (setq skip t))))))
- (nreverse normalized)))
-
-(defun dash--match-kv (match-form source)
- "Setup a kv matching environment and call the real matcher.
-
-kv can be any key-value store, such as plist, alist or hash-table."
- (let ((s (dash--match-make-source-symbol)))
- (cond
- ;; don't bind `s' if we only have one sub-pattern (&type key val)
- ((= (length match-form) 3)
- (dash--match-kv-1 (cdr match-form) source (car match-form)))
- ;; if the source is a symbol, we don't need to re-bind it
- ((symbolp source)
- (dash--match-kv-1 (cdr match-form) source (car match-form)))
- (t
- (cons (list s source) (dash--match-kv-1 (cdr match-form) s (car match-form)))))))
-
-(defun dash-expand:&hash (key source)
- "Generate extracting KEY from SOURCE for &hash destructuring."
- `(gethash ,key ,source))
-
-(defun dash-expand:&plist (key source)
- "Generate extracting KEY from SOURCE for &plist destructuring."
- `(plist-get ,source ,key))
-
-(defun dash-expand:&alist (key source)
- "Generate extracting KEY from SOURCE for &alist destructuring."
- `(cdr (assoc ,key ,source)))
-
-(defun dash-expand:&hash? (key source)
- "Generate extracting KEY from SOURCE for &hash? destructuring.
-Similar to &hash but check whether the map is not nil."
- (let ((src (make-symbol "src")))
- `(let ((,src ,source))
- (when ,src (gethash ,key ,src)))))
-
-(defalias 'dash-expand:&keys 'dash-expand:&plist)
-
-(defun dash--match-kv-1 (match-form source type)
- "Match MATCH-FORM against SOURCE of type TYPE.
-
-MATCH-FORM is a proper list of the form (key1 place1 ... keyN
-placeN). Each placeK is either a symbol, which gets bound to the
-value of keyK retrieved from the key-value store, or another
-match form which gets destructured recursively.
-
-SOURCE is a key-value store of type TYPE, which can be a plist,
-an alist or a hash table.
-
-TYPE is a token specifying the type of the key-value store.
-Valid values are &plist, &alist and &hash."
- (-flatten-n 1 (-map
- (lambda (kv)
- (let* ((k (car kv))
- (v (cadr kv))
- (getter
- (funcall (dash--get-expand-function type) k source)))
- (cond
- ((symbolp v)
- (list (list v getter)))
- (t (dash--match v getter)))))
- (-partition 2 match-form))))
-
-(defun dash--match-symbol (match-form source)
- "Bind a symbol.
-
-This works just like `let', there is no destructuring."
- (list (list match-form source)))
-
-(defun dash--match (match-form source)
- "Match MATCH-FORM against SOURCE.
-
-This function tests the MATCH-FORM and dispatches to specific
-matchers based on the type of the expression.
-
-Key-value stores are disambiguated by placing a token &plist,
-&alist or &hash as a first item in the MATCH-FORM."
- (cond
- ((symbolp match-form)
- (dash--match-symbol match-form source))
- ((consp match-form)
- (cond
- ;; Handle the "x &as" bindings first.
- ((and (consp (cdr match-form))
- (symbolp (car match-form))
- (eq '&as (cadr match-form)))
- (let ((s (car match-form)))
- (cons (list s source)
- (dash--match (cddr match-form) s))))
- ((functionp (dash--get-expand-function (car match-form)))
- (dash--match-kv (dash--match-kv-normalize-match-form match-form) source))
- (t (dash--match-cons match-form source))))
- ((vectorp match-form)
- ;; We support the &as binding in vectors too
- (cond
- ((and (> (length match-form) 2)
- (symbolp (aref match-form 0))
- (eq '&as (aref match-form 1)))
- (let ((s (aref match-form 0)))
- (cons (list s source)
- (dash--match (substring match-form 2) s))))
- (t (dash--match-vector match-form source))))))
-
-(defun dash--normalize-let-varlist (varlist)
- "Normalize VARLIST so that every binding is a list.
-
-`let' allows specifying a binding which is not a list but simply
-the place which is then automatically bound to nil, such that all
-three of the following are identical and evaluate to nil.
-
- (let (a) a)
- (let ((a)) a)
- (let ((a nil)) a)
-
-This function normalizes all of these to the last form."
- (--map (if (consp it) it (list it nil)) varlist))
-
-(defmacro -let* (varlist &rest body)
- "Bind variables according to VARLIST then eval BODY.
-
-VARLIST is a list of lists of the form (PATTERN SOURCE). Each
-PATTERN is matched against the SOURCE structurally. SOURCE is
-only evaluated once for each PATTERN.
-
-Each SOURCE can refer to the symbols already bound by this
-VARLIST. This is useful if you want to destructure SOURCE
-recursively but also want to name the intermediate structures.
-
-See `-let' for the list of all possible patterns."
- (declare (debug ((&rest [&or (sexp form) sexp]) body))
- (indent 1))
- (let* ((varlist (dash--normalize-let-varlist varlist))
- (bindings (--mapcat (dash--match (car it) (cadr it)) varlist)))
- `(let* ,bindings
- ,@body)))
-
-(defmacro -let (varlist &rest body)
- "Bind variables according to VARLIST then eval BODY.
-
-VARLIST is a list of lists of the form (PATTERN SOURCE). Each
-PATTERN is matched against the SOURCE \"structurally\". SOURCE
-is only evaluated once for each PATTERN. Each PATTERN is matched
-recursively, and can therefore contain sub-patterns which are
-matched against corresponding sub-expressions of SOURCE.
-
-All the SOURCEs are evalled before any symbols are
-bound (i.e. \"in parallel\").
-
-If VARLIST only contains one (PATTERN SOURCE) element, you can
-optionally specify it using a vector and discarding the
-outer-most parens. Thus
-
- (-let ((PATTERN SOURCE)) ...)
-
-becomes
-
- (-let [PATTERN SOURCE] ...).
-
-`-let' uses a convention of not binding places (symbols) starting
-with _ whenever it's possible. You can use this to skip over
-entries you don't care about. However, this is not *always*
-possible (as a result of implementation) and these symbols might
-get bound to undefined values.
-
-Following is the overview of supported patterns. Remember that
-patterns can be matched recursively, so every a, b, aK in the
-following can be a matching construct and not necessarily a
-symbol/variable.
-
-Symbol:
-
- a - bind the SOURCE to A. This is just like regular `let'.
-
-Conses and lists:
-
- (a) - bind `car' of cons/list to A
-
- (a . b) - bind car of cons to A and `cdr' to B
-
- (a b) - bind car of list to A and `cadr' to B
-
- (a1 a2 a3 ...) - bind 0th car of list to A1, 1st to A2, 2nd to A3...
-
- (a1 a2 a3 ... aN . rest) - as above, but bind the Nth cdr to REST.
-
-Vectors:
-
- [a] - bind 0th element of a non-list sequence to A (works with
- vectors, strings, bit arrays...)
-
- [a1 a2 a3 ...] - bind 0th element of non-list sequence to A0, 1st to
- A1, 2nd to A2, ...
- If the PATTERN is shorter than SOURCE, the values at
- places not in PATTERN are ignored.
- If the PATTERN is longer than SOURCE, an `error' is
- thrown.
-
- [a1 a2 a3 ... &rest rest] - as above, but bind the rest of
- the sequence to REST. This is
- conceptually the same as improper list
- matching (a1 a2 ... aN . rest)
-
-Key/value stores:
-
- (&plist key0 a0 ... keyN aN) - bind value mapped by keyK in the
- SOURCE plist to aK. If the
- value is not found, aK is nil.
- Uses `plist-get' to fetch values.
-
- (&alist key0 a0 ... keyN aN) - bind value mapped by keyK in the
- SOURCE alist to aK. If the
- value is not found, aK is nil.
- Uses `assoc' to fetch values.
-
- (&hash key0 a0 ... keyN aN) - bind value mapped by keyK in the
- SOURCE hash table to aK. If the
- value is not found, aK is nil.
- Uses `gethash' to fetch values.
-
-Further, special keyword &keys supports \"inline\" matching of
-plist-like key-value pairs, similarly to &keys keyword of
-`cl-defun'.
-
- (a1 a2 ... aN &keys key1 b1 ... keyN bK)
-
-This binds N values from the list to a1 ... aN, then interprets
-the cdr as a plist (see key/value matching above).
-
-A shorthand notation for kv-destructuring exists which allows the
-patterns be optionally left out and derived from the key name in
-the following fashion:
-
-- a key :foo is converted into `foo' pattern,
-- a key 'bar is converted into `bar' pattern,
-- a key \"baz\" is converted into `baz' pattern.
-
-That is, the entire value under the key is bound to the derived
-variable without any further destructuring.
-
-This is possible only when the form following the key is not a
-valid pattern (i.e. not a symbol, a cons cell or a vector).
-Otherwise the matching proceeds as usual and in case of an
-invalid spec fails with an error.
-
-Thus the patterns are normalized as follows:
-
- ;; derive all the missing patterns
- (&plist :foo 'bar \"baz\") => (&plist :foo foo 'bar bar \"baz\" baz)
-
- ;; we can specify some but not others
- (&plist :foo 'bar explicit-bar) => (&plist :foo foo 'bar explicit-bar)
-
- ;; nothing happens, we store :foo in x
- (&plist :foo x) => (&plist :foo x)
-
- ;; nothing happens, we match recursively
- (&plist :foo (a b c)) => (&plist :foo (a b c))
-
-You can name the source using the syntax SYMBOL &as PATTERN.
-This syntax works with lists (proper or improper), vectors and
-all types of maps.
-
- (list &as a b c) (list 1 2 3)
-
-binds A to 1, B to 2, C to 3 and LIST to (1 2 3).
-
-Similarly:
-
- (bounds &as beg . end) (cons 1 2)
-
-binds BEG to 1, END to 2 and BOUNDS to (1 . 2).
-
- (items &as first . rest) (list 1 2 3)
-
-binds FIRST to 1, REST to (2 3) and ITEMS to (1 2 3)
-
- [vect &as _ b c] [1 2 3]
-
-binds B to 2, C to 3 and VECT to [1 2 3] (_ avoids binding as usual).
-
- (plist &as &plist :b b) (list :a 1 :b 2 :c 3)
-
-binds B to 2 and PLIST to (:a 1 :b 2 :c 3). Same for &alist and &hash.
-
-This is especially useful when we want to capture the result of a
-computation and destructure at the same time. Consider the
-form (function-returning-complex-structure) returning a list of
-two vectors with two items each. We want to capture this entire
-result and pass it to another computation, but at the same time
-we want to get the second item from each vector. We can achieve
-it with pattern
-
- (result &as [_ a] [_ b]) (function-returning-complex-structure)
-
-Note: Clojure programmers may know this feature as the \":as
-binding\". The difference is that we put the &as at the front
-because we need to support improper list binding."
- (declare (debug ([&or (&rest [&or (sexp form) sexp])
- (vector [&rest [sexp form]])]
- body))
- (indent 1))
- (if (vectorp varlist)
- `(let* ,(dash--match (aref varlist 0) (aref varlist 1))
- ,@body)
- (let* ((varlist (dash--normalize-let-varlist varlist))
- (inputs (--map-indexed (list (make-symbol (format "input%d" it-index)) (cadr it)) varlist))
- (new-varlist (--map (list (caar it) (cadr it)) (-zip varlist inputs))))
- `(let ,inputs
- (-let* ,new-varlist ,@body)))))
-
-(defmacro -lambda (match-form &rest body)
- "Return a lambda which destructures its input as MATCH-FORM and executes BODY.
-
-Note that you have to enclose the MATCH-FORM in a pair of parens,
-such that:
-
- (-lambda (x) body)
- (-lambda (x y ...) body)
-
-has the usual semantics of `lambda'. Furthermore, these get
-translated into normal `lambda', so there is no performance
-penalty.
-
-See `-let' for a description of the destructuring mechanism."
- (declare (doc-string 2) (indent defun)
- (debug (&define sexp
- [&optional stringp]
- [&optional ("interactive" interactive)]
- def-body)))
- (cond
- ((nlistp match-form)
- (signal 'wrong-type-argument (list #'listp match-form)))
- ;; No destructuring, so just return regular `lambda' for speed.
- ((-all? #'symbolp match-form)
- `(lambda ,match-form ,@body))
- ((let ((inputs (--map-indexed
- (list it (make-symbol (format "input%d" it-index)))
- match-form)))
- ;; TODO: because inputs to the `lambda' are evaluated only once,
- ;; `-let*' need not create the extra bindings to ensure that.
- ;; We should find a way to optimize that. Not critical however.
- `(lambda ,(mapcar #'cadr inputs)
- (-let* ,inputs ,@body))))))
-
-(defmacro -setq (&rest forms)
- "Bind each MATCH-FORM to the value of its VAL.
-
-MATCH-FORM destructuring is done according to the rules of `-let'.
-
-This macro allows you to bind multiple variables by destructuring
-the value, so for example:
-
- (-setq (a b) x
- (&plist :c c) plist)
-
-expands roughly speaking to the following code
-
- (setq a (car x)
- b (cadr x)
- c (plist-get plist :c))
-
-Care is taken to only evaluate each VAL once so that in case of
-multiple assignments it does not cause unexpected side effects.
-
-\(fn [MATCH-FORM VAL]...)"
- (declare (debug (&rest sexp form))
- (indent 1))
- (when (= (mod (length forms) 2) 1)
- (signal 'wrong-number-of-arguments (list '-setq (1+ (length forms)))))
- (let* ((forms-and-sources
- ;; First get all the necessary mappings with all the
- ;; intermediate bindings.
- (-map (lambda (x) (dash--match (car x) (cadr x)))
- (-partition 2 forms)))
- ;; To preserve the logic of dynamic scoping we must ensure
- ;; that we `setq' the variables outside of the `let*' form
- ;; which holds the destructured intermediate values. For
- ;; this we generate for each variable a placeholder which is
- ;; bound to (lexically) the result of the destructuring.
- ;; Then outside of the helper `let*' form we bind all the
- ;; original variables to their respective placeholders.
- ;; TODO: There is a lot of room for possible optimization,
- ;; for start playing with `special-variable-p' to eliminate
- ;; unnecessary re-binding.
- (variables-to-placeholders
- (-mapcat
- (lambda (bindings)
- (-map
- (lambda (binding)
- (let ((var (car binding)))
- (list var (make-symbol (concat "--dash-binding-" (symbol-name var) "--")))))
- (--filter (not (string-prefix-p "--" (symbol-name (car it)))) bindings)))
- forms-and-sources)))
- `(let ,(-map 'cadr variables-to-placeholders)
- (let* ,(-flatten-n 1 forms-and-sources)
- (setq ,@(-flatten (-map 'reverse variables-to-placeholders))))
- (setq ,@(-flatten variables-to-placeholders)))))
-
-(defmacro -if-let* (vars-vals then &rest else)
- "If all VALS evaluate to true, bind them to their corresponding
-VARS and do THEN, otherwise do ELSE. VARS-VALS should be a list
-of (VAR VAL) pairs.
-
-Note: binding is done according to `-let*'. VALS are evaluated
-sequentially, and evaluation stops after the first nil VAL is
-encountered."
- (declare (debug ((&rest (sexp form)) form body))
- (indent 2))
- (->> vars-vals
- (--mapcat (dash--match (car it) (cadr it)))
- (--reduce-r-from
- (let ((var (car it))
- (val (cadr it)))
- `(let ((,var ,val))
- (if ,var ,acc ,@else)))
- then)))
-
-(defmacro -if-let (var-val then &rest else)
- "If VAL evaluates to non-nil, bind it to VAR and do THEN,
-otherwise do ELSE.
-
-Note: binding is done according to `-let'.
-
-\(fn (VAR VAL) THEN &rest ELSE)"
- (declare (debug ((sexp form) form body))
- (indent 2))
- `(-if-let* (,var-val) ,then ,@else))
-
-(defmacro --if-let (val then &rest else)
- "If VAL evaluates to non-nil, bind it to symbol `it' and do THEN,
-otherwise do ELSE."
- (declare (debug (form form body))
- (indent 2))
- `(-if-let (it ,val) ,then ,@else))
-
-(defmacro -when-let* (vars-vals &rest body)
- "If all VALS evaluate to true, bind them to their corresponding
-VARS and execute body. VARS-VALS should be a list of (VAR VAL)
-pairs.
-
-Note: binding is done according to `-let*'. VALS are evaluated
-sequentially, and evaluation stops after the first nil VAL is
-encountered."
- (declare (debug ((&rest (sexp form)) body))
- (indent 1))
- `(-if-let* ,vars-vals (progn ,@body)))
-
-(defmacro -when-let (var-val &rest body)
- "If VAL evaluates to non-nil, bind it to VAR and execute body.
-
-Note: binding is done according to `-let'.
-
-\(fn (VAR VAL) &rest BODY)"
- (declare (debug ((sexp form) body))
- (indent 1))
- `(-if-let ,var-val (progn ,@body)))
-
-(defmacro --when-let (val &rest body)
- "If VAL evaluates to non-nil, bind it to symbol `it' and
-execute body."
- (declare (debug (form body))
- (indent 1))
- `(--if-let ,val (progn ,@body)))
-
-(defvar -compare-fn nil
- "Tests for equality use this function or `equal' if this is nil.
-It should only be set using dynamic scope with a let, like:
-
- (let ((-compare-fn #\\='=)) (-union numbers1 numbers2 numbers3)")
-
-(defun -distinct (list)
- "Return a new list with all duplicates removed.
-The test for equality is done with `equal',
-or with `-compare-fn' if that's non-nil.
-
-Alias: `-uniq'"
- ;; Implementation note: The speedup gained from hash table lookup
- ;; starts to outweigh its overhead for lists of length greater than
- ;; 32. See discussion in PR #305.
- (let* ((len (length list))
- (lut (and (> len 32)
- ;; Check that `-compare-fn' is a valid hash-table
- ;; lookup function or `nil'.
- (memq -compare-fn '(nil equal eq eql))
- (make-hash-table :test (or -compare-fn #'equal)
- :size len))))
- (if lut
- (--filter (unless (gethash it lut)
- (puthash it t lut))
- list)
- (--each list (unless (-contains? lut it) (!cons it lut)))
- (nreverse lut))))
-
-(defalias '-uniq '-distinct)
-
-(defun -union (list list2)
- "Return a new list containing the elements of LIST and elements of LIST2 that are not in LIST.
-The test for equality is done with `equal',
-or with `-compare-fn' if that's non-nil."
- ;; We fall back to iteration implementation if the comparison
- ;; function isn't one of `eq', `eql' or `equal'.
- (let* ((result (reverse list))
- ;; TODO: get rid of this dynamic variable, pass it as an
- ;; argument instead.
- (-compare-fn (if (bound-and-true-p -compare-fn)
- -compare-fn
- 'equal)))
- (if (memq -compare-fn '(eq eql equal))
- (let ((ht (make-hash-table :test -compare-fn)))
- (--each list (puthash it t ht))
- (--each list2 (unless (gethash it ht) (!cons it result))))
- (--each list2 (unless (-contains? result it) (!cons it result))))
- (nreverse result)))
-
-(defun -intersection (list list2)
- "Return a new list containing only the elements that are members of both LIST and LIST2.
-The test for equality is done with `equal',
-or with `-compare-fn' if that's non-nil."
- (--filter (-contains? list2 it) list))
-
-(defun -difference (list list2)
- "Return a new list with only the members of LIST that are not in LIST2.
-The test for equality is done with `equal',
-or with `-compare-fn' if that's non-nil."
- (--filter (not (-contains? list2 it)) list))
-
-(defun -powerset (list)
- "Return the power set of LIST."
- (if (null list) '(())
- (let ((last (-powerset (cdr list))))
- (append (mapcar (lambda (x) (cons (car list) x)) last)
- last))))
-
-(defun -permutations (list)
- "Return the permutations of LIST."
- (if (null list) '(())
- (apply #'append
- (mapcar (lambda (x)
- (mapcar (lambda (perm) (cons x perm))
- (-permutations (remove x list))))
- list))))
-
-(defun -inits (list)
- "Return all prefixes of LIST."
- (let ((res (list list)))
- (setq list (reverse list))
- (while list
- (push (reverse (!cdr list)) res))
- res))
-
-(defun -tails (list)
- "Return all suffixes of LIST"
- (-reductions-r-from 'cons nil list))
-
-(defun -common-prefix (&rest lists)
- "Return the longest common prefix of LISTS."
- (declare (pure t) (side-effect-free t))
- (--reduce (--take-while (and acc (equal (pop acc) it)) it)
- lists))
-
-(defun -common-suffix (&rest lists)
- "Return the longest common suffix of LISTS."
- (nreverse (apply #'-common-prefix (mapcar #'reverse lists))))
-
-(defun -contains? (list element)
- "Return non-nil if LIST contains ELEMENT.
-
-The test for equality is done with `equal', or with `-compare-fn'
-if that's non-nil.
-
-Alias: `-contains-p'"
- (not
- (null
- (cond
- ((null -compare-fn) (member element list))
- ((eq -compare-fn 'eq) (memq element list))
- ((eq -compare-fn 'eql) (memql element list))
- (t
- (let ((lst list))
- (while (and lst
- (not (funcall -compare-fn element (car lst))))
- (setq lst (cdr lst)))
- lst))))))
-
-(defalias '-contains-p '-contains?)
-
-(defun -same-items? (list list2)
- "Return true if LIST and LIST2 has the same items.
-
-The order of the elements in the lists does not matter.
-
-Alias: `-same-items-p'"
- (let ((length-a (length list))
- (length-b (length list2)))
- (and
- (= length-a length-b)
- (= length-a (length (-intersection list list2))))))
-
-(defalias '-same-items-p '-same-items?)
-
-(defun -is-prefix? (prefix list)
- "Return non-nil if PREFIX is a prefix of LIST.
-
-Alias: `-is-prefix-p'."
- (declare (pure t) (side-effect-free t))
- (--each-while list (and (equal (car prefix) it)
- (!cdr prefix)))
- (null prefix))
-
-(defun -is-suffix? (suffix list)
- "Return non-nil if SUFFIX is a suffix of LIST.
-
-Alias: `-is-suffix-p'."
- (declare (pure t) (side-effect-free t))
- (cond ((null suffix))
- ((setq list (member (car suffix) list))
- (equal (cdr suffix) (cdr list)))))
-
-(defun -is-infix? (infix list)
- "Return non-nil if INFIX is infix of LIST.
-
-This operation runs in O(n^2) time
-
-Alias: `-is-infix-p'"
- (declare (pure t) (side-effect-free t))
- (let (done)
- (while (and (not done) list)
- (setq done (-is-prefix? infix list))
- (!cdr list))
- done))
-
-(defalias '-is-prefix-p '-is-prefix?)
-(defalias '-is-suffix-p '-is-suffix?)
-(defalias '-is-infix-p '-is-infix?)
-
-(defun -sort (comparator list)
- "Sort LIST, stably, comparing elements using COMPARATOR.
-Return the sorted list. LIST is NOT modified by side effects.
-COMPARATOR is called with two elements of LIST, and should return non-nil
-if the first element should sort before the second."
- (sort (copy-sequence list) comparator))
-
-(defmacro --sort (form list)
- "Anaphoric form of `-sort'."
- (declare (debug (def-form form)))
- `(-sort (lambda (it other) ,form) ,list))
-
-(defun -list (&optional arg &rest args)
- "Ensure ARG is a list.
-If ARG is already a list, return it as is (not a copy).
-Otherwise, return a new list with ARG as its only element.
-
-Another supported calling convention is (-list &rest ARGS).
-In this case, if ARG is not a list, a new list with all of
-ARGS as elements is returned. This use is supported for
-backward compatibility and is otherwise deprecated."
- (declare (advertised-calling-convention (arg) "2.18.0")
- (pure t) (side-effect-free t))
- (if (listp arg) arg (cons arg args)))
-
-(defun -repeat (n x)
- "Return a new list of length N with each element being X.
-Return nil if N is less than 1."
- (declare (pure t) (side-effect-free t))
- (and (natnump n) (make-list n x)))
-
-(defun -sum (list)
- "Return the sum of LIST."
- (declare (pure t) (side-effect-free t))
- (apply '+ list))
-
-(defun -running-sum (list)
- "Return a list with running sums of items in LIST.
-LIST must be non-empty."
- (declare (pure t) (side-effect-free t))
- (or list (signal 'wrong-type-argument (list #'consp list)))
- (-reductions #'+ list))
-
-(defun -product (list)
- "Return the product of LIST."
- (declare (pure t) (side-effect-free t))
- (apply '* list))
-
-(defun -running-product (list)
- "Return a list with running products of items in LIST.
-LIST must be non-empty."
- (declare (pure t) (side-effect-free t))
- (or list (signal 'wrong-type-argument (list #'consp list)))
- (-reductions #'* list))
-
-(defun -max (list)
- "Return the largest value from LIST of numbers or markers."
- (declare (pure t) (side-effect-free t))
- (apply 'max list))
-
-(defun -min (list)
- "Return the smallest value from LIST of numbers or markers."
- (declare (pure t) (side-effect-free t))
- (apply 'min list))
-
-(defun -max-by (comparator list)
- "Take a comparison function COMPARATOR and a LIST and return
-the greatest element of the list by the comparison function.
-
-See also combinator `-on' which can transform the values before
-comparing them."
- (--reduce (if (funcall comparator it acc) it acc) list))
-
-(defun -min-by (comparator list)
- "Take a comparison function COMPARATOR and a LIST and return
-the least element of the list by the comparison function.
-
-See also combinator `-on' which can transform the values before
-comparing them."
- (--reduce (if (funcall comparator it acc) acc it) list))
-
-(defmacro --max-by (form list)
- "Anaphoric version of `-max-by'.
-
-The items for the comparator form are exposed as \"it\" and \"other\"."
- (declare (debug (def-form form)))
- `(-max-by (lambda (it other) ,form) ,list))
-
-(defmacro --min-by (form list)
- "Anaphoric version of `-min-by'.
-
-The items for the comparator form are exposed as \"it\" and \"other\"."
- (declare (debug (def-form form)))
- `(-min-by (lambda (it other) ,form) ,list))
-
-(defun -iota (count &optional start step)
- "Return a list containing COUNT numbers.
-Starts from START and adds STEP each time. The default START is
-zero, the default STEP is 1.
-This function takes its name from the corresponding primitive in
-the APL language."
- (declare (pure t) (side-effect-free t))
- (unless (natnump count)
- (signal 'wrong-type-argument (list #'natnump count)))
- (or start (setq start 0))
- (or step (setq step 1))
- (if (zerop step)
- (make-list count start)
- (--iterate (+ it step) start count)))
-
-(defun -fix (fn list)
- "Compute the (least) fixpoint of FN with initial input LIST.
-
-FN is called at least once, results are compared with `equal'."
- (let ((re (funcall fn list)))
- (while (not (equal list re))
- (setq list re)
- (setq re (funcall fn re)))
- re))
-
-(defmacro --fix (form list)
- "Anaphoric form of `-fix'."
- (declare (debug (def-form form)))
- `(-fix (lambda (it) ,form) ,list))
-
-(defun -unfold (fun seed)
- "Build a list from SEED using FUN.
-
-This is \"dual\" operation to `-reduce-r': while -reduce-r
-consumes a list to produce a single value, `-unfold' takes a
-seed value and builds a (potentially infinite!) list.
-
-FUN should return `nil' to stop the generating process, or a
-cons (A . B), where A will be prepended to the result and B is
-the new seed."
- (let ((last (funcall fun seed)) r)
- (while last
- (push (car last) r)
- (setq last (funcall fun (cdr last))))
- (nreverse r)))
-
-(defmacro --unfold (form seed)
- "Anaphoric version of `-unfold'."
- (declare (debug (def-form form)))
- `(-unfold (lambda (it) ,form) ,seed))
-
-(defun -cons-pair? (obj)
- "Return non-nil if OBJ is a true cons pair.
-That is, a cons (A . B) where B is not a list.
-
-Alias: `-cons-pair-p'."
- (declare (pure t) (side-effect-free t))
- (nlistp (cdr-safe obj)))
-
-(defalias '-cons-pair-p '-cons-pair?)
-
-(defun -cons-to-list (con)
- "Convert a cons pair to a list with `car' and `cdr' of the pair respectively."
- (declare (pure t) (side-effect-free t))
- (list (car con) (cdr con)))
-
-(defun -value-to-list (val)
- "Convert a value to a list.
-
-If the value is a cons pair, make a list with two elements, `car'
-and `cdr' of the pair respectively.
-
-If the value is anything else, wrap it in a list."
- (declare (pure t) (side-effect-free t))
- (cond
- ((-cons-pair? val) (-cons-to-list val))
- (t (list val))))
-
-(defun -tree-mapreduce-from (fn folder init-value tree)
- "Apply FN to each element of TREE, and make a list of the results.
-If elements of TREE are lists themselves, apply FN recursively to
-elements of these nested lists.
-
-Then reduce the resulting lists using FOLDER and initial value
-INIT-VALUE. See `-reduce-r-from'.
-
-This is the same as calling `-tree-reduce-from' after `-tree-map'
-but is twice as fast as it only traverse the structure once."
- (cond
- ((not tree) nil)
- ((-cons-pair? tree) (funcall fn tree))
- ((listp tree)
- (-reduce-r-from folder init-value (mapcar (lambda (x) (-tree-mapreduce-from fn folder init-value x)) tree)))
- (t (funcall fn tree))))
-
-(defmacro --tree-mapreduce-from (form folder init-value tree)
- "Anaphoric form of `-tree-mapreduce-from'."
- (declare (debug (def-form def-form form form)))
- `(-tree-mapreduce-from (lambda (it) ,form) (lambda (it acc) ,folder) ,init-value ,tree))
-
-(defun -tree-mapreduce (fn folder tree)
- "Apply FN to each element of TREE, and make a list of the results.
-If elements of TREE are lists themselves, apply FN recursively to
-elements of these nested lists.
-
-Then reduce the resulting lists using FOLDER and initial value
-INIT-VALUE. See `-reduce-r-from'.
-
-This is the same as calling `-tree-reduce' after `-tree-map'
-but is twice as fast as it only traverse the structure once."
- (cond
- ((not tree) nil)
- ((-cons-pair? tree) (funcall fn tree))
- ((listp tree)
- (-reduce-r folder (mapcar (lambda (x) (-tree-mapreduce fn folder x)) tree)))
- (t (funcall fn tree))))
-
-(defmacro --tree-mapreduce (form folder tree)
- "Anaphoric form of `-tree-mapreduce'."
- (declare (debug (def-form def-form form)))
- `(-tree-mapreduce (lambda (it) ,form) (lambda (it acc) ,folder) ,tree))
-
-(defun -tree-map (fn tree)
- "Apply FN to each element of TREE while preserving the tree structure."
- (cond
- ((not tree) nil)
- ((-cons-pair? tree) (funcall fn tree))
- ((listp tree)
- (mapcar (lambda (x) (-tree-map fn x)) tree))
- (t (funcall fn tree))))
-
-(defmacro --tree-map (form tree)
- "Anaphoric form of `-tree-map'."
- (declare (debug (def-form form)))
- `(-tree-map (lambda (it) ,form) ,tree))
-
-(defun -tree-reduce-from (fn init-value tree)
- "Use FN to reduce elements of list TREE.
-If elements of TREE are lists themselves, apply the reduction recursively.
-
-FN is first applied to INIT-VALUE and first element of the list,
-then on this result and second element from the list etc.
-
-The initial value is ignored on cons pairs as they always contain
-two elements."
- (cond
- ((not tree) nil)
- ((-cons-pair? tree) tree)
- ((listp tree)
- (-reduce-r-from fn init-value (mapcar (lambda (x) (-tree-reduce-from fn init-value x)) tree)))
- (t tree)))
-
-(defmacro --tree-reduce-from (form init-value tree)
- "Anaphoric form of `-tree-reduce-from'."
- (declare (debug (def-form form form)))
- `(-tree-reduce-from (lambda (it acc) ,form) ,init-value ,tree))
-
-(defun -tree-reduce (fn tree)
- "Use FN to reduce elements of list TREE.
-If elements of TREE are lists themselves, apply the reduction recursively.
-
-FN is first applied to first element of the list and second
-element, then on this result and third element from the list etc.
-
-See `-reduce-r' for how exactly are lists of zero or one element handled."
- (cond
- ((not tree) nil)
- ((-cons-pair? tree) tree)
- ((listp tree)
- (-reduce-r fn (mapcar (lambda (x) (-tree-reduce fn x)) tree)))
- (t tree)))
-
-(defmacro --tree-reduce (form tree)
- "Anaphoric form of `-tree-reduce'."
- (declare (debug (def-form form)))
- `(-tree-reduce (lambda (it acc) ,form) ,tree))
-
-(defun -tree-map-nodes (pred fun tree)
- "Call FUN on each node of TREE that satisfies PRED.
-
-If PRED returns nil, continue descending down this node. If PRED
-returns non-nil, apply FUN to this node and do not descend
-further."
- (if (funcall pred tree)
- (funcall fun tree)
- (if (and (listp tree)
- (not (-cons-pair? tree)))
- (-map (lambda (x) (-tree-map-nodes pred fun x)) tree)
- tree)))
-
-(defmacro --tree-map-nodes (pred form tree)
- "Anaphoric form of `-tree-map-nodes'."
- (declare (debug (def-form def-form form)))
- `(-tree-map-nodes (lambda (it) ,pred) (lambda (it) ,form) ,tree))
-
-(defun -tree-seq (branch children tree)
- "Return a sequence of the nodes in TREE, in depth-first search order.
-
-BRANCH is a predicate of one argument that returns non-nil if the
-passed argument is a branch, that is, a node that can have children.
-
-CHILDREN is a function of one argument that returns the children
-of the passed branch node.
-
-Non-branch nodes are simply copied."
- (cons tree
- (when (funcall branch tree)
- (-mapcat (lambda (x) (-tree-seq branch children x))
- (funcall children tree)))))
-
-(defmacro --tree-seq (branch children tree)
- "Anaphoric form of `-tree-seq'."
- (declare (debug (def-form def-form form)))
- `(-tree-seq (lambda (it) ,branch) (lambda (it) ,children) ,tree))
-
-(defun -clone (list)
- "Create a deep copy of LIST.
-The new list has the same elements and structure but all cons are
-replaced with new ones. This is useful when you need to clone a
-structure such as plist or alist."
- (declare (pure t) (side-effect-free t))
- (-tree-map 'identity list))
-
-;;; Combinators
-
-(defalias '-partial #'apply-partially)
-
-(defun -rpartial (fn &rest args)
- "Return a function that is a partial application of FN to ARGS.
-ARGS is a list of the last N arguments to pass to FN. The result
-is a new function which does the same as FN, except that the last
-N arguments are fixed at the values with which this function was
-called. This is like `-partial', except the arguments are fixed
-starting from the right rather than the left."
- (declare (pure t) (side-effect-free t))
- (lambda (&rest args-before) (apply fn (append args-before args))))
-
-(defun -juxt (&rest fns)
- "Return a function that is the juxtaposition of FNS.
-The returned function takes a variable number of ARGS, applies
-each of FNS in turn to ARGS, and returns the list of results."
- (declare (pure t) (side-effect-free t))
- (lambda (&rest args) (mapcar (lambda (x) (apply x args)) fns)))
-
-(defun -compose (&rest fns)
- "Compose FNS into a single composite function.
-Return a function that takes a variable number of ARGS, applies
-the last function in FNS to ARGS, and returns the result of
-calling each remaining function on the result of the previous
-function, right-to-left. If no FNS are given, return a variadic
-`identity' function."
- (declare (pure t) (side-effect-free t))
- (let* ((fns (nreverse fns))
- (head (car fns))
- (tail (cdr fns)))
- (cond (tail
- (lambda (&rest args)
- (--reduce-from (funcall it acc) (apply head args) tail)))
- (fns head)
- ((lambda (&optional arg &rest _) arg)))))
-
-(defun -applify (fn)
- "Return a function that applies FN to a single list of args.
-This changes the arity of FN from taking N distinct arguments to
-taking 1 argument which is a list of N arguments."
- (declare (pure t) (side-effect-free t))
- (lambda (args) (apply fn args)))
-
-(defun -on (op trans)
- "Return a function that calls TRANS on each arg and OP on the results.
-The returned function takes a variable number of arguments, calls
-the function TRANS on each one in turn, and then passes those
-results as the list of arguments to OP, in the same order.
-
-For example, the following pairs of expressions are morally
-equivalent:
-
- (funcall (-on #\\='+ #\\='1+) 1 2 3) = (+ (1+ 1) (1+ 2) (1+ 3))
- (funcall (-on #\\='+ #\\='1+)) = (+)"
- (declare (pure t) (side-effect-free t))
- (lambda (&rest args)
- ;; This unrolling seems to be a relatively cheap way to keep the
- ;; overhead of `mapcar' + `apply' in check.
- (cond ((cddr args)
- (apply op (mapcar trans args)))
- ((cdr args)
- (funcall op (funcall trans (car args)) (funcall trans (cadr args))))
- (args
- (funcall op (funcall trans (car args))))
- ((funcall op)))))
-
-(defun -flip (fn)
- "Return a function that calls FN with its arguments reversed.
-The returned function takes the same number of arguments as FN.
-
-For example, the following two expressions are morally
-equivalent:
-
- (funcall (-flip #\\='-) 1 2) = (- 2 1)
-
-See also: `-rotate-args'."
- (declare (pure t) (side-effect-free t))
- (lambda (&rest args) ;; Open-code for speed.
- (cond ((cddr args) (apply fn (nreverse args)))
- ((cdr args) (funcall fn (cadr args) (car args)))
- (args (funcall fn (car args)))
- ((funcall fn)))))
-
-(defun -rotate-args (n fn)
- "Return a function that calls FN with args rotated N places to the right.
-The returned function takes the same number of arguments as FN,
-rotates the list of arguments N places to the right (left if N is
-negative) just like `-rotate', and applies FN to the result.
-
-See also: `-flip'."
- (declare (pure t) (side-effect-free t))
- (if (zerop n)
- fn
- (let ((even (= (% n 2) 0)))
- (lambda (&rest args)
- (cond ((cddr args) ;; Open-code for speed.
- (apply fn (-rotate n args)))
- ((cdr args)
- (let ((fst (car args))
- (snd (cadr args)))
- (funcall fn (if even fst snd) (if even snd fst))))
- (args
- (funcall fn (car args)))
- ((funcall fn)))))))
-
-(defun -const (c)
- "Return a function that returns C ignoring any additional arguments.
-
-In types: a -> b -> a"
- (declare (pure t) (side-effect-free t))
- (lambda (&rest _) c))
-
-(defmacro -cut (&rest params)
- "Take n-ary function and n arguments and specialize some of them.
-Arguments denoted by <> will be left unspecialized.
-
-See SRFI-26 for detailed description."
- (declare (debug (&optional sexp &rest &or "<>" form)))
- (let* ((i 0)
- (args (--keep (when (eq it '<>)
- (setq i (1+ i))
- (make-symbol (format "D%d" i)))
- params)))
- `(lambda ,args
- ,(let ((body (--map (if (eq it '<>) (pop args) it) params)))
- (if (eq (car params) '<>)
- (cons #'funcall body)
- body)))))
-
-(defun -not (pred)
- "Return a predicate that negates the result of PRED.
-The returned predicate passes its arguments to PRED. If PRED
-returns nil, the result is non-nil; otherwise the result is nil.
-
-See also: `-andfn' and `-orfn'."
- (declare (pure t) (side-effect-free t))
- (lambda (&rest args) (not (apply pred args))))
-
-(defun -orfn (&rest preds)
- "Return a predicate that returns the first non-nil result of PREDS.
-The returned predicate takes a variable number of arguments,
-passes them to each predicate in PREDS in turn until one of them
-returns non-nil, and returns that non-nil result without calling
-the remaining PREDS. If all PREDS return nil, or if no PREDS are
-given, the returned predicate returns nil.
-
-See also: `-andfn' and `-not'."
- (declare (pure t) (side-effect-free t))
- ;; Open-code for speed.
- (cond ((cdr preds) (lambda (&rest args) (--some (apply it args) preds)))
- (preds (car preds))
- (#'ignore)))
-
-(defun -andfn (&rest preds)
- "Return a predicate that returns non-nil if all PREDS do so.
-The returned predicate P takes a variable number of arguments and
-passes them to each predicate in PREDS in turn. If any one of
-PREDS returns nil, P also returns nil without calling the
-remaining PREDS. If all PREDS return non-nil, P returns the last
-such value. If no PREDS are given, P always returns non-nil.
-
-See also: `-orfn' and `-not'."
- (declare (pure t) (side-effect-free t))
- ;; Open-code for speed.
- (cond ((cdr preds) (lambda (&rest args) (--every (apply it args) preds)))
- (preds (car preds))
- ;; As a `pure' function, this runtime check may generate
- ;; backward-incompatible bytecode for `(-andfn)' at compile-time,
- ;; but I doubt that's a problem in practice (famous last words).
- ((fboundp 'always) #'always)
- ((lambda (&rest _) t))))
-
-(defun -iteratefn (fn n)
- "Return a function FN composed N times with itself.
-
-FN is a unary function. If you need to use a function of higher
-arity, use `-applify' first to turn it into a unary function.
-
-With n = 0, this acts as identity function.
-
-In types: (a -> a) -> Int -> a -> a.
-
-This function satisfies the following law:
-
- (funcall (-iteratefn fn n) init) = (-last-item (-iterate fn init (1+ n)))."
- (lambda (x) (--dotimes n (setq x (funcall fn x))) x))
-
-(defun -counter (&optional beg end inc)
- "Return a closure that counts from BEG to END, with increment INC.
-
-The closure will return the next value in the counting sequence
-each time it is called, and nil after END is reached. BEG
-defaults to 0, INC defaults to 1, and if END is nil, the counter
-will increment indefinitely.
-
-The closure accepts any number of arguments, which are discarded."
- (let ((inc (or inc 1))
- (n (or beg 0)))
- (lambda (&rest _)
- (when (or (not end) (< n end))
- (prog1 n
- (setq n (+ n inc)))))))
-
-(defvar -fixfn-max-iterations 1000
- "The default maximum number of iterations performed by `-fixfn'
- unless otherwise specified.")
-
-(defun -fixfn (fn &optional equal-test halt-test)
- "Return a function that computes the (least) fixpoint of FN.
-
-FN must be a unary function. The returned lambda takes a single
-argument, X, the initial value for the fixpoint iteration. The
-iteration halts when either of the following conditions is satisfied:
-
- 1. Iteration converges to the fixpoint, with equality being
- tested using EQUAL-TEST. If EQUAL-TEST is not specified,
- `equal' is used. For functions over the floating point
- numbers, it may be necessary to provide an appropriate
- approximate comparison test.
-
- 2. HALT-TEST returns a non-nil value. HALT-TEST defaults to a
- simple counter that returns t after `-fixfn-max-iterations',
- to guard against infinite iteration. Otherwise, HALT-TEST
- must be a function that accepts a single argument, the
- current value of X, and returns non-nil as long as iteration
- should continue. In this way, a more sophisticated
- convergence test may be supplied by the caller.
-
-The return value of the lambda is either the fixpoint or, if
-iteration halted before converging, a cons with car `halted' and
-cdr the final output from HALT-TEST.
-
-In types: (a -> a) -> a -> a."
- (let ((eqfn (or equal-test 'equal))
- (haltfn (or halt-test
- (-not
- (-counter 0 -fixfn-max-iterations)))))
- (lambda (x)
- (let ((re (funcall fn x))
- (halt? (funcall haltfn x)))
- (while (and (not halt?) (not (funcall eqfn x re)))
- (setq x re
- re (funcall fn re)
- halt? (funcall haltfn re)))
- (if halt? (cons 'halted halt?)
- re)))))
-
-(defun -prodfn (&rest fns)
- "Take a list of n functions and return a function that takes a
-list of length n, applying i-th function to i-th element of the
-input list. Returns a list of length n.
-
-In types (for n=2): ((a -> b), (c -> d)) -> (a, c) -> (b, d)
-
-This function satisfies the following laws:
-
- (-compose (-prodfn f g ...) (-prodfn f\\=' g\\=' ...)) = (-prodfn (-compose f f\\=') (-compose g g\\=') ...)
- (-prodfn f g ...) = (-juxt (-compose f (-partial \\='nth 0)) (-compose g (-partial \\='nth 1)) ...)
- (-compose (-prodfn f g ...) (-juxt f\\=' g\\=' ...)) = (-juxt (-compose f f\\=') (-compose g g\\=') ...)
- (-compose (-partial \\='nth n) (-prod f1 f2 ...)) = (-compose fn (-partial \\='nth n))"
- (lambda (x) (-zip-with 'funcall fns x)))
-
-;;; Font lock
-
-(defvar dash--keywords
- `(;; TODO: Do not fontify the following automatic variables
- ;; globally; detect and limit to their local anaphoric scope.
- (,(rx symbol-start (| "acc" "it" "it-index" "other") symbol-end)
- 0 font-lock-variable-name-face)
- ;; Macros in dev/examples.el. Based on `lisp-mode-symbol-regexp'.
- (,(rx ?\( (group (| "defexamples" "def-example-group")) symbol-end
- (+ (in "\t "))
- (group (* (| (syntax word) (syntax symbol) (: ?\\ nonl)))))
- (1 font-lock-keyword-face)
- (2 font-lock-function-name-face))
- ;; Symbols in dev/examples.el.
- ,(rx symbol-start (| "=>" "~>" "!!>") symbol-end)
- ;; Elisp macro fontification was static prior to Emacs 25.
- ,@(when (< emacs-major-version 25)
- (let ((macs '("!cdr"
- "!cons"
- "-->"
- "--all?"
- "--annotate"
- "--any?"
- "--count"
- "--dotimes"
- "--doto"
- "--drop-while"
- "--each"
- "--each-r"
- "--each-r-while"
- "--each-while"
- "--filter"
- "--find-index"
- "--find-indices"
- "--find-last-index"
- "--first"
- "--fix"
- "--group-by"
- "--if-let"
- "--iterate"
- "--keep"
- "--last"
- "--map"
- "--map-first"
- "--map-indexed"
- "--map-last"
- "--map-when"
- "--mapcat"
- "--max-by"
- "--min-by"
- "--none?"
- "--only-some?"
- "--partition-by"
- "--partition-by-header"
- "--reduce"
- "--reduce-from"
- "--reduce-r"
- "--reduce-r-from"
- "--reductions"
- "--reductions-from"
- "--reductions-r"
- "--reductions-r-from"
- "--remove"
- "--remove-first"
- "--remove-last"
- "--separate"
- "--some"
- "--sort"
- "--splice"
- "--splice-list"
- "--split-when"
- "--split-with"
- "--take-while"
- "--tree-map"
- "--tree-map-nodes"
- "--tree-mapreduce"
- "--tree-mapreduce-from"
- "--tree-reduce"
- "--tree-reduce-from"
- "--tree-seq"
- "--unfold"
- "--update-at"
- "--when-let"
- "--zip-with"
- "->"
- "->>"
- "-as->"
- "-doto"
- "-if-let"
- "-if-let*"
- "-lambda"
- "-let"
- "-let*"
- "-setq"
- "-some-->"
- "-some->"
- "-some->>"
- "-split-on"
- "-when-let"
- "-when-let*")))
- `((,(concat "(" (regexp-opt macs 'symbols)) . 1)))))
- "Font lock keywords for `dash-fontify-mode'.")
-
-(defcustom dash-fontify-mode-lighter nil
- "Mode line lighter for `dash-fontify-mode'.
-Either a string to display in the mode line when
-`dash-fontify-mode' is on, or nil to display
-nothing (the default)."
- :package-version '(dash . "2.18.0")
- :group 'dash
- :type '(choice (string :tag "Lighter" :value " Dash")
- (const :tag "Nothing" nil)))
-
-;;;###autoload
-(define-minor-mode dash-fontify-mode
- "Toggle fontification of Dash special variables.
-
-Dash-Fontify mode is a buffer-local minor mode intended for Emacs
-Lisp buffers. Enabling it causes the special variables bound in
-anaphoric Dash macros to be fontified. These anaphoras include
-`it', `it-index', `acc', and `other'. In older Emacs versions
-which do not dynamically detect macros, Dash-Fontify mode
-additionally fontifies Dash macro calls.
-
-See also `dash-fontify-mode-lighter' and
-`global-dash-fontify-mode'."
- :group 'dash :lighter dash-fontify-mode-lighter
- (if dash-fontify-mode
- (font-lock-add-keywords nil dash--keywords t)
- (font-lock-remove-keywords nil dash--keywords))
- (cond ((fboundp 'font-lock-flush) ;; Added in Emacs 25.
- (font-lock-flush))
- ;; `font-lock-fontify-buffer' unconditionally enables
- ;; `font-lock-mode' and is marked `interactive-only' in later
- ;; Emacs versions which have `font-lock-flush', so we guard
- ;; and pacify as needed, respectively.
- (font-lock-mode
- (with-no-warnings
- (font-lock-fontify-buffer)))))
-
-(defun dash--turn-on-fontify-mode ()
- "Enable `dash-fontify-mode' if in an Emacs Lisp buffer."
- (when (derived-mode-p #'emacs-lisp-mode)
- (dash-fontify-mode)))
-
-;;;###autoload
-(define-globalized-minor-mode global-dash-fontify-mode
- dash-fontify-mode dash--turn-on-fontify-mode
- :group 'dash)
-
-(defcustom dash-enable-fontlock nil
- "If non-nil, fontify Dash macro calls and special variables."
- :group 'dash
- :set (lambda (sym val)
- (set-default sym val)
- (global-dash-fontify-mode (if val 1 0)))
- :type 'boolean)
-
-(make-obsolete-variable
- 'dash-enable-fontlock #'global-dash-fontify-mode "2.18.0")
-
-(define-obsolete-function-alias
- 'dash-enable-font-lock #'global-dash-fontify-mode "2.18.0")
-
-;;; Info
-
-(defvar dash--info-doc-spec '("(dash) Index" nil "^ -+ .*: " "\\( \\|$\\)")
- "The Dash :doc-spec entry for `info-lookup-alist'.
-It is based on that for `emacs-lisp-mode'.")
-
-(defun dash--info-elisp-docs ()
- "Return the `emacs-lisp-mode' symbol docs from `info-lookup-alist'.
-Specifically, return the cons containing their
-`info-lookup->doc-spec' so that we can modify it."
- (defvar info-lookup-alist)
- (nthcdr 3 (assq #'emacs-lisp-mode (cdr (assq 'symbol info-lookup-alist)))))
-
-;;;###autoload
-(defun dash-register-info-lookup ()
- "Register the Dash Info manual with `info-lookup-symbol'.
-This allows Dash symbols to be looked up with \\[info-lookup-symbol]."
- (interactive)
- (require 'info-look)
- (let ((docs (dash--info-elisp-docs)))
- (setcar docs (append (car docs) (list dash--info-doc-spec)))
- (info-lookup-reset)))
-
-(defun dash-unload-function ()
- "Remove Dash from `info-lookup-alist'.
-Used by `unload-feature', which see."
- (let ((docs (and (featurep 'info-look)
- (dash--info-elisp-docs))))
- (when (member dash--info-doc-spec (car docs))
- (setcar docs (remove dash--info-doc-spec (car docs)))
- (info-lookup-reset)))
- nil)
-
-(provide 'dash)
-;;; dash.el ends here
diff --git a/emacs.d/elpa/dash-20210708.2009/dash.info b/emacs.d/elpa/dash-20210708.2009/dash.info
deleted file mode 100644
index 48c1af7..0000000
--- a/emacs.d/elpa/dash-20210708.2009/dash.info
+++ /dev/null
@@ -1,4738 +0,0 @@
-This is dash.info, produced by makeinfo version 6.7 from dash.texi.
-
-This manual is for Dash version 2.19.0.
-
- Copyright © 2012–2021 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.3 or any later version published by the Free Software
- Foundation; with the Invariant Sections being “GNU General Public
- License,†and no Front-Cover Texts or Back-Cover Texts. A copy of
- the license is included in the section entitled “GNU Free
- Documentation Licenseâ€.
-INFO-DIR-SECTION Emacs
-START-INFO-DIR-ENTRY
-* Dash: (dash.info). A modern list library for GNU Emacs.
-END-INFO-DIR-ENTRY
-
-
-File: dash.info, Node: Top, Next: Installation, Up: (dir)
-
-Dash
-****
-
-This manual is for Dash version 2.19.0.
-
- Copyright © 2012–2021 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the GNU Free Documentation License,
- Version 1.3 or any later version published by the Free Software
- Foundation; with the Invariant Sections being “GNU General Public
- License,†and no Front-Cover Texts or Back-Cover Texts. A copy of
- the license is included in the section entitled “GNU Free
- Documentation Licenseâ€.
-
-* Menu:
-
-* Installation:: Installing and configuring Dash.
-* Functions:: Dash API reference.
-* Development:: Contributing to Dash development.
-
-Appendices
-
-* FDL:: The license for this documentation.
-* GPL:: Conditions for copying and changing Dash.
-* Index:: Index including functions and macros.
-
- — The Detailed Node Listing —
-
-Installation
-
-* Using in a package:: Listing Dash as a package dependency.
-* Fontification of special variables:: Font Lock of anaphoric macro variables.
-* Info symbol lookup:: Looking up Dash symbols in this manual.
-
-Functions
-
-* Maps::
-* Sublist selection::
-* List to list::
-* Reductions::
-* Unfolding::
-* Predicates::
-* Partitioning::
-* Indexing::
-* Set operations::
-* Other list operations::
-* Tree operations::
-* Threading macros::
-* Binding::
-* Side effects::
-* Destructive operations::
-* Function combinators::
-
-Development
-
-* Contribute:: How to contribute.
-* Contributors:: List of contributors.
-
-
-File: dash.info, Node: Installation, Next: Functions, Prev: Top, Up: Top
-
-1 Installation
-**************
-
-Dash is available on GNU ELPA (https://elpa.gnu.org/), GNU-devel ELPA
-(https://elpa.gnu.org/devel/), and MELPA (https://melpa.org/), and can
-be installed with the standard command ‘package-install’ (*note
-(emacs)Package Installation::).
-
-‘M-x package-install <RET> dash <RET>’
- Install the Dash library.
-
- Alternatively, you can just dump ‘dash.el’ in your ‘load-path’
-somewhere (*note (emacs)Lisp Libraries::).
-
-* Menu:
-
-* Using in a package:: Listing Dash as a package dependency.
-* Fontification of special variables:: Font Lock of anaphoric macro variables.
-* Info symbol lookup:: Looking up Dash symbols in this manual.
-
-
-File: dash.info, Node: Using in a package, Next: Fontification of special variables, Up: Installation
-
-1.1 Using in a package
-======================
-
-If you use Dash in your own package, be sure to list it as a dependency
-in the library’s headers as follows (*note (elisp)Library Headers::).
-
- ;; Package-Requires: ((dash "2.19.0"))
-
-
-File: dash.info, Node: Fontification of special variables, Next: Info symbol lookup, Prev: Using in a package, Up: Installation
-
-1.2 Fontification of special variables
-======================================
-
-The autoloaded minor mode ‘dash-fontify-mode’ is provided for optional
-fontification of anaphoric Dash variables (‘it’, ‘acc’, etc.) in Emacs
-Lisp buffers using search-based Font Lock (*note (emacs)Font Lock::).
-In older Emacs versions which do not dynamically detect macros, the
-minor mode also fontifies calls to Dash macros.
-
- To automatically enable the minor mode in all Emacs Lisp buffers,
-just call its autoloaded global counterpart ‘global-dash-fontify-mode’,
-either interactively or from your ‘user-init-file’:
-
- (global-dash-fontify-mode)
-
-
-File: dash.info, Node: Info symbol lookup, Prev: Fontification of special variables, Up: Installation
-
-1.3 Info symbol lookup
-======================
-
-While editing Elisp files, you can use ‘C-h S’ (‘info-lookup-symbol’) to
-look up Elisp symbols in the relevant Info manuals (*note (emacs)Info
-Lookup::). To enable the same for Dash symbols, use the command
-‘dash-register-info-lookup’. It can be called directly when needed, or
-automatically from your ‘user-init-file’. For example:
-
- (with-eval-after-load 'info-look
- (dash-register-info-lookup))
-
-
-File: dash.info, Node: Functions, Next: Development, Prev: Installation, Up: Top
-
-2 Functions
-***********
-
-This chapter contains reference documentation for the Dash API
-(Application Programming Interface). The names of all public functions
-defined in the library are prefixed with a dash character (‘-’).
-
- The library also provides anaphoric macro versions of functions where
-that makes sense. The names of these macros are prefixed with two
-dashes (‘--’) instead of one.
-
- For instance, while the function ‘-map’ applies a function to each
-element of a list, its anaphoric counterpart ‘--map’ evaluates a form
-with the local variable ‘it’ temporarily bound to the current list
-element instead.
-
- ;; Normal version.
- (-map (lambda (n) (* n n)) '(1 2 3 4))
- ⇒ (1 4 9 16)
-
- ;; Anaphoric version.
- (--map (* it it) '(1 2 3 4))
- ⇒ (1 4 9 16)
-
- The normal version can, of course, also be written as in the
-following example, which demonstrates the utility of both versions.
-
- (defun my-square (n)
- "Return N multiplied by itself."
- (* n n))
-
- (-map #'my-square '(1 2 3 4))
- ⇒ (1 4 9 16)
-
-* Menu:
-
-* Maps::
-* Sublist selection::
-* List to list::
-* Reductions::
-* Unfolding::
-* Predicates::
-* Partitioning::
-* Indexing::
-* Set operations::
-* Other list operations::
-* Tree operations::
-* Threading macros::
-* Binding::
-* Side effects::
-* Destructive operations::
-* Function combinators::
-
-
-File: dash.info, Node: Maps, Next: Sublist selection, Up: Functions
-
-2.1 Maps
-========
-
-Functions in this category take a transforming function, which is then
-applied sequentially to each or selected elements of the input list.
-The results are collected in order and returned as a new list.
-
- -- Function: -map (fn list)
- Apply FN to each item in LIST and return the list of results.
-
- This function’s anaphoric counterpart is ‘--map’.
-
- (-map (lambda (num) (* num num)) '(1 2 3 4))
- ⇒ (1 4 9 16)
- (-map #'1+ '(1 2 3 4))
- ⇒ (2 3 4 5)
- (--map (* it it) '(1 2 3 4))
- ⇒ (1 4 9 16)
-
- -- Function: -map-when (pred rep list)
- Return a new list where the elements in LIST that do not match the
- PRED function are unchanged, and where the elements in LIST that do
- match the PRED function are mapped through the REP function.
-
- Alias: ‘-replace-where’
-
- See also: ‘-update-at’ (*note -update-at::)
-
- (-map-when 'even? 'square '(1 2 3 4))
- ⇒ (1 4 3 16)
- (--map-when (> it 2) (* it it) '(1 2 3 4))
- ⇒ (1 2 9 16)
- (--map-when (= it 2) 17 '(1 2 3 4))
- ⇒ (1 17 3 4)
-
- -- Function: -map-first (pred rep list)
- Replace first item in LIST satisfying PRED with result of REP
- called on this item.
-
- See also: ‘-map-when’ (*note -map-when::), ‘-replace-first’ (*note
- -replace-first::)
-
- (-map-first 'even? 'square '(1 2 3 4))
- ⇒ (1 4 3 4)
- (--map-first (> it 2) (* it it) '(1 2 3 4))
- ⇒ (1 2 9 4)
- (--map-first (= it 2) 17 '(1 2 3 2))
- ⇒ (1 17 3 2)
-
- -- Function: -map-last (pred rep list)
- Replace last item in LIST satisfying PRED with result of REP called
- on this item.
-
- See also: ‘-map-when’ (*note -map-when::), ‘-replace-last’ (*note
- -replace-last::)
-
- (-map-last 'even? 'square '(1 2 3 4))
- ⇒ (1 2 3 16)
- (--map-last (> it 2) (* it it) '(1 2 3 4))
- ⇒ (1 2 3 16)
- (--map-last (= it 2) 17 '(1 2 3 2))
- ⇒ (1 2 3 17)
-
- -- Function: -map-indexed (fn list)
- Apply FN to each index and item in LIST and return the list of
- results. This is like ‘-map’ (*note -map::), but FN takes two
- arguments: the index of the current element within LIST, and the
- element itself.
-
- This function’s anaphoric counterpart is ‘--map-indexed’.
-
- For a side-effecting variant, see also ‘-each-indexed’ (*note
- -each-indexed::).
-
- (-map-indexed (lambda (index item) (- item index)) '(1 2 3 4))
- ⇒ (1 1 1 1)
- (--map-indexed (- it it-index) '(1 2 3 4))
- ⇒ (1 1 1 1)
- (-map-indexed #'* '(1 2 3 4))
- ⇒ (0 2 6 12)
-
- -- Function: -annotate (fn list)
- Return a list of cons cells where each cell is FN applied to each
- element of LIST paired with the unmodified element of LIST.
-
- (-annotate '1+ '(1 2 3))
- ⇒ ((2 . 1) (3 . 2) (4 . 3))
- (-annotate 'length '(("h" "e" "l" "l" "o") ("hello" "world")))
- ⇒ ((5 "h" "e" "l" "l" "o") (2 "hello" "world"))
- (--annotate (< 1 it) '(0 1 2 3))
- ⇒ ((nil . 0) (nil . 1) (t . 2) (t . 3))
-
- -- Function: -splice (pred fun list)
- Splice lists generated by FUN in place of elements matching PRED in
- LIST.
-
- FUN takes the element matching PRED as input.
-
- This function can be used as replacement for ‘,@’ in case you need
- to splice several lists at marked positions (for example with
- keywords).
-
- See also: ‘-splice-list’ (*note -splice-list::), ‘-insert-at’
- (*note -insert-at::)
-
- (-splice 'even? (lambda (x) (list x x)) '(1 2 3 4))
- ⇒ (1 2 2 3 4 4)
- (--splice 't (list it it) '(1 2 3 4))
- ⇒ (1 1 2 2 3 3 4 4)
- (--splice (equal it :magic) '((list of) (magical) (code)) '((foo) (bar) :magic (baz)))
- ⇒ ((foo) (bar) (list of) (magical) (code) (baz))
-
- -- Function: -splice-list (pred new-list list)
- Splice NEW-LIST in place of elements matching PRED in LIST.
-
- See also: ‘-splice’ (*note -splice::), ‘-insert-at’ (*note
- -insert-at::)
-
- (-splice-list 'keywordp '(a b c) '(1 :foo 2))
- ⇒ (1 a b c 2)
- (-splice-list 'keywordp nil '(1 :foo 2))
- ⇒ (1 2)
- (--splice-list (keywordp it) '(a b c) '(1 :foo 2))
- ⇒ (1 a b c 2)
-
- -- Function: -mapcat (fn list)
- Return the concatenation of the result of mapping FN over LIST.
- Thus function FN should return a list.
-
- (-mapcat 'list '(1 2 3))
- ⇒ (1 2 3)
- (-mapcat (lambda (item) (list 0 item)) '(1 2 3))
- ⇒ (0 1 0 2 0 3)
- (--mapcat (list 0 it) '(1 2 3))
- ⇒ (0 1 0 2 0 3)
-
- -- Function: -copy (list)
- Create a shallow copy of LIST.
-
- (-copy '(1 2 3))
- ⇒ (1 2 3)
- (let ((a '(1 2 3))) (eq a (-copy a)))
- ⇒ nil
-
-
-File: dash.info, Node: Sublist selection, Next: List to list, Prev: Maps, Up: Functions
-
-2.2 Sublist selection
-=====================
-
-Functions returning a sublist of the original list.
-
- -- Function: -filter (pred list)
- Return a new list of the items in LIST for which PRED returns
- non-nil.
-
- Alias: ‘-select’.
-
- This function’s anaphoric counterpart is ‘--filter’.
-
- For similar operations, see also ‘-keep’ (*note -keep::) and
- ‘-remove’ (*note -remove::).
-
- (-filter (lambda (num) (= 0 (% num 2))) '(1 2 3 4))
- ⇒ (2 4)
- (-filter #'natnump '(-2 -1 0 1 2))
- ⇒ (0 1 2)
- (--filter (= 0 (% it 2)) '(1 2 3 4))
- ⇒ (2 4)
-
- -- Function: -remove (pred list)
- Return a new list of the items in LIST for which PRED returns nil.
-
- Alias: ‘-reject’.
-
- This function’s anaphoric counterpart is ‘--remove’.
-
- For similar operations, see also ‘-keep’ (*note -keep::) and
- ‘-filter’ (*note -filter::).
-
- (-remove (lambda (num) (= 0 (% num 2))) '(1 2 3 4))
- ⇒ (1 3)
- (-remove #'natnump '(-2 -1 0 1 2))
- ⇒ (-2 -1)
- (--remove (= 0 (% it 2)) '(1 2 3 4))
- ⇒ (1 3)
-
- -- Function: -remove-first (pred list)
- Remove the first item from LIST for which PRED returns non-nil.
- This is a non-destructive operation, but only the front of LIST
- leading up to the removed item is a copy; the rest is LIST’s
- original tail. If no item is removed, then the result is a
- complete copy.
-
- Alias: ‘-reject-first’.
-
- This function’s anaphoric counterpart is ‘--remove-first’.
-
- See also ‘-map-first’ (*note -map-first::), ‘-remove-item’ (*note
- -remove-item::), and ‘-remove-last’ (*note -remove-last::).
-
- (-remove-first #'natnump '(-2 -1 0 1 2))
- ⇒ (-2 -1 1 2)
- (-remove-first #'stringp '(1 2 "first" "second"))
- ⇒ (1 2 "second")
- (--remove-first (> it 3) '(1 2 3 4 5 6))
- ⇒ (1 2 3 5 6)
-
- -- Function: -remove-last (pred list)
- Remove the last item from LIST for which PRED returns non-nil. The
- result is a copy of LIST regardless of whether an element is
- removed.
-
- Alias: ‘-reject-last’.
-
- This function’s anaphoric counterpart is ‘--remove-last’.
-
- See also ‘-map-last’ (*note -map-last::), ‘-remove-item’ (*note
- -remove-item::), and ‘-remove-first’ (*note -remove-first::).
-
- (-remove-last #'natnump '(1 3 5 4 7 8 10 -11))
- ⇒ (1 3 5 4 7 8 -11)
- (-remove-last #'stringp '(1 2 "last" "second"))
- ⇒ (1 2 "last")
- (--remove-last (> it 3) '(1 2 3 4 5 6 7 8 9 10))
- ⇒ (1 2 3 4 5 6 7 8 9)
-
- -- Function: -remove-item (item list)
- Return a copy of LIST with all occurrences of ITEM removed. The
- comparison is done with ‘equal’.
-
- (-remove-item 3 '(1 2 3 2 3 4 5 3))
- ⇒ (1 2 2 4 5)
- (-remove-item 'foo '(foo bar baz foo))
- ⇒ (bar baz)
- (-remove-item "bob" '("alice" "bob" "eve" "bob"))
- ⇒ ("alice" "eve")
-
- -- Function: -non-nil (list)
- Return a copy of LIST with all nil items removed.
-
- (-non-nil '(nil 1 nil 2 nil nil 3 4 nil 5 nil))
- ⇒ (1 2 3 4 5)
- (-non-nil '((nil)))
- ⇒ ((nil))
- (-non-nil ())
- ⇒ ()
-
- -- Function: -slice (list from &optional to step)
- Return copy of LIST, starting from index FROM to index TO.
-
- FROM or TO may be negative. These values are then interpreted
- modulo the length of the list.
-
- If STEP is a number, only each STEPth item in the resulting section
- is returned. Defaults to 1.
-
- (-slice '(1 2 3 4 5) 1)
- ⇒ (2 3 4 5)
- (-slice '(1 2 3 4 5) 0 3)
- ⇒ (1 2 3)
- (-slice '(1 2 3 4 5 6 7 8 9) 1 -1 2)
- ⇒ (2 4 6 8)
-
- -- Function: -take (n list)
- Return a copy of the first N items in LIST. Return a copy of LIST
- if it contains N items or fewer. Return nil if N is zero or less.
-
- See also: ‘-take-last’ (*note -take-last::).
-
- (-take 3 '(1 2 3 4 5))
- ⇒ (1 2 3)
- (-take 17 '(1 2 3 4 5))
- ⇒ (1 2 3 4 5)
- (-take 0 '(1 2 3 4 5))
- ⇒ ()
-
- -- Function: -take-last (n list)
- Return a copy of the last N items of LIST in order. Return a copy
- of LIST if it contains N items or fewer. Return nil if N is zero
- or less.
-
- See also: ‘-take’ (*note -take::).
-
- (-take-last 3 '(1 2 3 4 5))
- ⇒ (3 4 5)
- (-take-last 17 '(1 2 3 4 5))
- ⇒ (1 2 3 4 5)
- (-take-last 1 '(1 2 3 4 5))
- ⇒ (5)
-
- -- Function: -drop (n list)
- Return the tail (not a copy) of LIST without the first N items.
- Return nil if LIST contains N items or fewer. Return LIST if N is
- zero or less.
-
- For another variant, see also ‘-drop-last’ (*note -drop-last::).
-
- (-drop 3 '(1 2 3 4 5))
- ⇒ (4 5)
- (-drop 17 '(1 2 3 4 5))
- ⇒ ()
- (-drop 0 '(1 2 3 4 5))
- ⇒ (1 2 3 4 5)
-
- -- Function: -drop-last (n list)
- Return a copy of LIST without its last N items. Return a copy of
- LIST if N is zero or less. Return nil if LIST contains N items or
- fewer.
-
- See also: ‘-drop’ (*note -drop::).
-
- (-drop-last 3 '(1 2 3 4 5))
- ⇒ (1 2)
- (-drop-last 17 '(1 2 3 4 5))
- ⇒ ()
- (-drop-last 0 '(1 2 3 4 5))
- ⇒ (1 2 3 4 5)
-
- -- Function: -take-while (pred list)
- Take successive items from LIST for which PRED returns non-nil.
- PRED is a function of one argument. Return a new list of the
- successive elements from the start of LIST for which PRED returns
- non-nil.
-
- This function’s anaphoric counterpart is ‘--take-while’.
-
- For another variant, see also ‘-drop-while’ (*note -drop-while::).
-
- (-take-while #'even? '(1 2 3 4))
- ⇒ ()
- (-take-while #'even? '(2 4 5 6))
- ⇒ (2 4)
- (--take-while (< it 4) '(1 2 3 4 3 2 1))
- ⇒ (1 2 3)
-
- -- Function: -drop-while (pred list)
- Drop successive items from LIST for which PRED returns non-nil.
- PRED is a function of one argument. Return the tail (not a copy)
- of LIST starting from its first element for which PRED returns nil.
-
- This function’s anaphoric counterpart is ‘--drop-while’.
-
- For another variant, see also ‘-take-while’ (*note -take-while::).
-
- (-drop-while #'even? '(1 2 3 4))
- ⇒ (1 2 3 4)
- (-drop-while #'even? '(2 4 5 6))
- ⇒ (5 6)
- (--drop-while (< it 4) '(1 2 3 4 3 2 1))
- ⇒ (4 3 2 1)
-
- -- Function: -select-by-indices (indices list)
- Return a list whose elements are elements from LIST selected as
- ‘(nth i list)‘ for all i from INDICES.
-
- (-select-by-indices '(4 10 2 3 6) '("v" "e" "l" "o" "c" "i" "r" "a" "p" "t" "o" "r"))
- ⇒ ("c" "o" "l" "o" "r")
- (-select-by-indices '(2 1 0) '("a" "b" "c"))
- ⇒ ("c" "b" "a")
- (-select-by-indices '(0 1 2 0 1 3 3 1) '("f" "a" "r" "l"))
- ⇒ ("f" "a" "r" "f" "a" "l" "l" "a")
-
- -- Function: -select-columns (columns table)
- Select COLUMNS from TABLE.
-
- TABLE is a list of lists where each element represents one row. It
- is assumed each row has the same length.
-
- Each row is transformed such that only the specified COLUMNS are
- selected.
-
- See also: ‘-select-column’ (*note -select-column::),
- ‘-select-by-indices’ (*note -select-by-indices::)
-
- (-select-columns '(0 2) '((1 2 3) (a b c) (:a :b :c)))
- ⇒ ((1 3) (a c) (:a :c))
- (-select-columns '(1) '((1 2 3) (a b c) (:a :b :c)))
- ⇒ ((2) (b) (:b))
- (-select-columns nil '((1 2 3) (a b c) (:a :b :c)))
- ⇒ (nil nil nil)
-
- -- Function: -select-column (column table)
- Select COLUMN from TABLE.
-
- TABLE is a list of lists where each element represents one row. It
- is assumed each row has the same length.
-
- The single selected column is returned as a list.
-
- See also: ‘-select-columns’ (*note -select-columns::),
- ‘-select-by-indices’ (*note -select-by-indices::)
-
- (-select-column 1 '((1 2 3) (a b c) (:a :b :c)))
- ⇒ (2 b :b)
-
-
-File: dash.info, Node: List to list, Next: Reductions, Prev: Sublist selection, Up: Functions
-
-2.3 List to list
-================
-
-Functions returning a modified copy of the input list.
-
- -- Function: -keep (fn list)
- Return a new list of the non-nil results of applying FN to each
- item in LIST. Like ‘-filter’ (*note -filter::), but returns the
- non-nil results of FN instead of the corresponding elements of
- LIST.
-
- Its anaphoric counterpart is ‘--keep’.
-
- (-keep #'cdr '((1 2 3) (4 5) (6)))
- ⇒ ((2 3) (5))
- (-keep (lambda (n) (and (> n 3) (* 10 n))) '(1 2 3 4 5 6))
- ⇒ (40 50 60)
- (--keep (and (> it 3) (* 10 it)) '(1 2 3 4 5 6))
- ⇒ (40 50 60)
-
- -- Function: -concat (&rest lists)
- Return a new list with the concatenation of the elements in the
- supplied LISTS.
-
- (-concat '(1))
- ⇒ (1)
- (-concat '(1) '(2))
- ⇒ (1 2)
- (-concat '(1) '(2 3) '(4))
- ⇒ (1 2 3 4)
-
- -- Function: -flatten (l)
- Take a nested list L and return its contents as a single, flat
- list.
-
- Note that because ‘nil’ represents a list of zero elements (an
- empty list), any mention of nil in L will disappear after
- flattening. If you need to preserve nils, consider ‘-flatten-n’
- (*note -flatten-n::) or map them to some unique symbol and then map
- them back.
-
- Conses of two atoms are considered "terminals", that is, they
- aren’t flattened further.
-
- See also: ‘-flatten-n’ (*note -flatten-n::)
-
- (-flatten '((1)))
- ⇒ (1)
- (-flatten '((1 (2 3) (((4 (5)))))))
- ⇒ (1 2 3 4 5)
- (-flatten '(1 2 (3 . 4)))
- ⇒ (1 2 (3 . 4))
-
- -- Function: -flatten-n (num list)
- Flatten NUM levels of a nested LIST.
-
- See also: ‘-flatten’ (*note -flatten::)
-
- (-flatten-n 1 '((1 2) ((3 4) ((5 6)))))
- ⇒ (1 2 (3 4) ((5 6)))
- (-flatten-n 2 '((1 2) ((3 4) ((5 6)))))
- ⇒ (1 2 3 4 (5 6))
- (-flatten-n 3 '((1 2) ((3 4) ((5 6)))))
- ⇒ (1 2 3 4 5 6)
-
- -- Function: -replace (old new list)
- Replace all OLD items in LIST with NEW.
-
- Elements are compared using ‘equal’.
-
- See also: ‘-replace-at’ (*note -replace-at::)
-
- (-replace 1 "1" '(1 2 3 4 3 2 1))
- ⇒ ("1" 2 3 4 3 2 "1")
- (-replace "foo" "bar" '("a" "nice" "foo" "sentence" "about" "foo"))
- ⇒ ("a" "nice" "bar" "sentence" "about" "bar")
- (-replace 1 2 nil)
- ⇒ nil
-
- -- Function: -replace-first (old new list)
- Replace the first occurrence of OLD with NEW in LIST.
-
- Elements are compared using ‘equal’.
-
- See also: ‘-map-first’ (*note -map-first::)
-
- (-replace-first 1 "1" '(1 2 3 4 3 2 1))
- ⇒ ("1" 2 3 4 3 2 1)
- (-replace-first "foo" "bar" '("a" "nice" "foo" "sentence" "about" "foo"))
- ⇒ ("a" "nice" "bar" "sentence" "about" "foo")
- (-replace-first 1 2 nil)
- ⇒ nil
-
- -- Function: -replace-last (old new list)
- Replace the last occurrence of OLD with NEW in LIST.
-
- Elements are compared using ‘equal’.
-
- See also: ‘-map-last’ (*note -map-last::)
-
- (-replace-last 1 "1" '(1 2 3 4 3 2 1))
- ⇒ (1 2 3 4 3 2 "1")
- (-replace-last "foo" "bar" '("a" "nice" "foo" "sentence" "about" "foo"))
- ⇒ ("a" "nice" "foo" "sentence" "about" "bar")
- (-replace-last 1 2 nil)
- ⇒ nil
-
- -- Function: -insert-at (n x list)
- Return a list with X inserted into LIST at position N.
-
- See also: ‘-splice’ (*note -splice::), ‘-splice-list’ (*note
- -splice-list::)
-
- (-insert-at 1 'x '(a b c))
- ⇒ (a x b c)
- (-insert-at 12 'x '(a b c))
- ⇒ (a b c x)
-
- -- Function: -replace-at (n x list)
- Return a list with element at Nth position in LIST replaced with X.
-
- See also: ‘-replace’ (*note -replace::)
-
- (-replace-at 0 9 '(0 1 2 3 4 5))
- ⇒ (9 1 2 3 4 5)
- (-replace-at 1 9 '(0 1 2 3 4 5))
- ⇒ (0 9 2 3 4 5)
- (-replace-at 4 9 '(0 1 2 3 4 5))
- ⇒ (0 1 2 3 9 5)
-
- -- Function: -update-at (n func list)
- Return a list with element at Nth position in LIST replaced with
- ‘(func (nth n list))‘.
-
- See also: ‘-map-when’ (*note -map-when::)
-
- (-update-at 0 (lambda (x) (+ x 9)) '(0 1 2 3 4 5))
- ⇒ (9 1 2 3 4 5)
- (-update-at 1 (lambda (x) (+ x 8)) '(0 1 2 3 4 5))
- ⇒ (0 9 2 3 4 5)
- (--update-at 2 (length it) '("foo" "bar" "baz" "quux"))
- ⇒ ("foo" "bar" 3 "quux")
-
- -- Function: -remove-at (n list)
- Return a list with element at Nth position in LIST removed.
-
- See also: ‘-remove-at-indices’ (*note -remove-at-indices::),
- ‘-remove’ (*note -remove::)
-
- (-remove-at 0 '("0" "1" "2" "3" "4" "5"))
- ⇒ ("1" "2" "3" "4" "5")
- (-remove-at 1 '("0" "1" "2" "3" "4" "5"))
- ⇒ ("0" "2" "3" "4" "5")
- (-remove-at 2 '("0" "1" "2" "3" "4" "5"))
- ⇒ ("0" "1" "3" "4" "5")
-
- -- Function: -remove-at-indices (indices list)
- Return a list whose elements are elements from LIST without
- elements selected as ‘(nth i list)‘ for all i from INDICES.
-
- See also: ‘-remove-at’ (*note -remove-at::), ‘-remove’ (*note
- -remove::)
-
- (-remove-at-indices '(0) '("0" "1" "2" "3" "4" "5"))
- ⇒ ("1" "2" "3" "4" "5")
- (-remove-at-indices '(0 2 4) '("0" "1" "2" "3" "4" "5"))
- ⇒ ("1" "3" "5")
- (-remove-at-indices '(0 5) '("0" "1" "2" "3" "4" "5"))
- ⇒ ("1" "2" "3" "4")
-
-
-File: dash.info, Node: Reductions, Next: Unfolding, Prev: List to list, Up: Functions
-
-2.4 Reductions
-==============
-
-Functions reducing lists to a single value (which may also be a list).
-
- -- Function: -reduce-from (fn init list)
- Reduce the function FN across LIST, starting with INIT. Return the
- result of applying FN to INIT and the first element of LIST, then
- applying FN to that result and the second element, etc. If LIST is
- empty, return INIT without calling FN.
-
- This function’s anaphoric counterpart is ‘--reduce-from’.
-
- For other folds, see also ‘-reduce’ (*note -reduce::) and
- ‘-reduce-r’ (*note -reduce-r::).
-
- (-reduce-from #'- 10 '(1 2 3))
- ⇒ 4
- (-reduce-from #'list 10 '(1 2 3))
- ⇒ (((10 1) 2) 3)
- (--reduce-from (concat acc " " it) "START" '("a" "b" "c"))
- ⇒ "START a b c"
-
- -- Function: -reduce-r-from (fn init list)
- Reduce the function FN across LIST in reverse, starting with INIT.
- Return the result of applying FN to the last element of LIST and
- INIT, then applying FN to the second-to-last element and the
- previous result of FN, etc. That is, the first argument of FN is
- the current element, and its second argument the accumulated value.
- If LIST is empty, return INIT without calling FN.
-
- This function is like ‘-reduce-from’ (*note -reduce-from::) but the
- operation associates from the right rather than left. In other
- words, it starts from the end of LIST and flips the arguments to
- FN. Conceptually, it is like replacing the conses in LIST with
- applications of FN, and its last link with INIT, and evaluating the
- resulting expression.
-
- This function’s anaphoric counterpart is ‘--reduce-r-from’.
-
- For other folds, see also ‘-reduce-r’ (*note -reduce-r::) and
- ‘-reduce’ (*note -reduce::).
-
- (-reduce-r-from #'- 10 '(1 2 3))
- ⇒ -8
- (-reduce-r-from #'list 10 '(1 2 3))
- ⇒ (1 (2 (3 10)))
- (--reduce-r-from (concat it " " acc) "END" '("a" "b" "c"))
- ⇒ "a b c END"
-
- -- Function: -reduce (fn list)
- Reduce the function FN across LIST. Return the result of applying
- FN to the first two elements of LIST, then applying FN to that
- result and the third element, etc. If LIST contains a single
- element, return it without calling FN. If LIST is empty, return
- the result of calling FN with no arguments.
-
- This function’s anaphoric counterpart is ‘--reduce’.
-
- For other folds, see also ‘-reduce-from’ (*note -reduce-from::) and
- ‘-reduce-r’ (*note -reduce-r::).
-
- (-reduce #'- '(1 2 3 4))
- ⇒ -8
- (-reduce #'list '(1 2 3 4))
- ⇒ (((1 2) 3) 4)
- (--reduce (format "%s-%d" acc it) '(1 2 3))
- ⇒ "1-2-3"
-
- -- Function: -reduce-r (fn list)
- Reduce the function FN across LIST in reverse. Return the result
- of applying FN to the last two elements of LIST, then applying FN
- to the third-to-last element and the previous result of FN, etc.
- That is, the first argument of FN is the current element, and its
- second argument the accumulated value. If LIST contains a single
- element, return it without calling FN. If LIST is empty, return
- the result of calling FN with no arguments.
-
- This function is like ‘-reduce’ (*note -reduce::) but the operation
- associates from the right rather than left. In other words, it
- starts from the end of LIST and flips the arguments to FN.
- Conceptually, it is like replacing the conses in LIST with
- applications of FN, ignoring its last link, and evaluating the
- resulting expression.
-
- This function’s anaphoric counterpart is ‘--reduce-r’.
-
- For other folds, see also ‘-reduce-r-from’ (*note -reduce-r-from::)
- and ‘-reduce’ (*note -reduce::).
-
- (-reduce-r #'- '(1 2 3 4))
- ⇒ -2
- (-reduce-r #'list '(1 2 3 4))
- ⇒ (1 (2 (3 4)))
- (--reduce-r (format "%s-%d" acc it) '(1 2 3))
- ⇒ "3-2-1"
-
- -- Function: -reductions-from (fn init list)
- Return a list of FN’s intermediate reductions across LIST. That
- is, a list of the intermediate values of the accumulator when
- ‘-reduce-from’ (*note -reduce-from::) (which see) is called with
- the same arguments.
-
- This function’s anaphoric counterpart is ‘--reductions-from’.
-
- For other folds, see also ‘-reductions’ (*note -reductions::) and
- ‘-reductions-r’ (*note -reductions-r::).
-
- (-reductions-from #'max 0 '(2 1 4 3))
- ⇒ (0 2 2 4 4)
- (-reductions-from #'* 1 '(1 2 3 4))
- ⇒ (1 1 2 6 24)
- (--reductions-from (format "(FN %s %d)" acc it) "INIT" '(1 2 3))
- ⇒ ("INIT" "(FN INIT 1)" "(FN (FN INIT 1) 2)" "(FN (FN (FN INIT 1) 2) 3)")
-
- -- Function: -reductions-r-from (fn init list)
- Return a list of FN’s intermediate reductions across reversed LIST.
- That is, a list of the intermediate values of the accumulator when
- ‘-reduce-r-from’ (*note -reduce-r-from::) (which see) is called
- with the same arguments.
-
- This function’s anaphoric counterpart is ‘--reductions-r-from’.
-
- For other folds, see also ‘-reductions’ (*note -reductions::) and
- ‘-reductions-r’ (*note -reductions-r::).
-
- (-reductions-r-from #'max 0 '(2 1 4 3))
- ⇒ (4 4 4 3 0)
- (-reductions-r-from #'* 1 '(1 2 3 4))
- ⇒ (24 24 12 4 1)
- (--reductions-r-from (format "(FN %d %s)" it acc) "INIT" '(1 2 3))
- ⇒ ("(FN 1 (FN 2 (FN 3 INIT)))" "(FN 2 (FN 3 INIT))" "(FN 3 INIT)" "INIT")
-
- -- Function: -reductions (fn list)
- Return a list of FN’s intermediate reductions across LIST. That
- is, a list of the intermediate values of the accumulator when
- ‘-reduce’ (*note -reduce::) (which see) is called with the same
- arguments.
-
- This function’s anaphoric counterpart is ‘--reductions’.
-
- For other folds, see also ‘-reductions’ (*note -reductions::) and
- ‘-reductions-r’ (*note -reductions-r::).
-
- (-reductions #'+ '(1 2 3 4))
- ⇒ (1 3 6 10)
- (-reductions #'* '(1 2 3 4))
- ⇒ (1 2 6 24)
- (--reductions (format "(FN %s %d)" acc it) '(1 2 3))
- ⇒ (1 "(FN 1 2)" "(FN (FN 1 2) 3)")
-
- -- Function: -reductions-r (fn list)
- Return a list of FN’s intermediate reductions across reversed LIST.
- That is, a list of the intermediate values of the accumulator when
- ‘-reduce-r’ (*note -reduce-r::) (which see) is called with the same
- arguments.
-
- This function’s anaphoric counterpart is ‘--reductions-r’.
-
- For other folds, see also ‘-reductions-r-from’ (*note
- -reductions-r-from::) and ‘-reductions’ (*note -reductions::).
-
- (-reductions-r #'+ '(1 2 3 4))
- ⇒ (10 9 7 4)
- (-reductions-r #'* '(1 2 3 4))
- ⇒ (24 24 12 4)
- (--reductions-r (format "(FN %d %s)" it acc) '(1 2 3))
- ⇒ ("(FN 1 (FN 2 3))" "(FN 2 3)" 3)
-
- -- Function: -count (pred list)
- Counts the number of items in LIST where (PRED item) is non-nil.
-
- (-count 'even? '(1 2 3 4 5))
- ⇒ 2
- (--count (< it 4) '(1 2 3 4))
- ⇒ 3
-
- -- Function: -sum (list)
- Return the sum of LIST.
-
- (-sum ())
- ⇒ 0
- (-sum '(1))
- ⇒ 1
- (-sum '(1 2 3 4))
- ⇒ 10
-
- -- Function: -running-sum (list)
- Return a list with running sums of items in LIST. LIST must be
- non-empty.
-
- (-running-sum '(1 2 3 4))
- ⇒ (1 3 6 10)
- (-running-sum '(1))
- ⇒ (1)
- (-running-sum ())
- error→ Wrong type argument: consp, nil
-
- -- Function: -product (list)
- Return the product of LIST.
-
- (-product ())
- ⇒ 1
- (-product '(1))
- ⇒ 1
- (-product '(1 2 3 4))
- ⇒ 24
-
- -- Function: -running-product (list)
- Return a list with running products of items in LIST. LIST must be
- non-empty.
-
- (-running-product '(1 2 3 4))
- ⇒ (1 2 6 24)
- (-running-product '(1))
- ⇒ (1)
- (-running-product ())
- error→ Wrong type argument: consp, nil
-
- -- Function: -inits (list)
- Return all prefixes of LIST.
-
- (-inits '(1 2 3 4))
- ⇒ (nil (1) (1 2) (1 2 3) (1 2 3 4))
- (-inits nil)
- ⇒ (nil)
- (-inits '(1))
- ⇒ (nil (1))
-
- -- Function: -tails (list)
- Return all suffixes of LIST
-
- (-tails '(1 2 3 4))
- ⇒ ((1 2 3 4) (2 3 4) (3 4) (4) nil)
- (-tails nil)
- ⇒ (nil)
- (-tails '(1))
- ⇒ ((1) nil)
-
- -- Function: -common-prefix (&rest lists)
- Return the longest common prefix of LISTS.
-
- (-common-prefix '(1))
- ⇒ (1)
- (-common-prefix '(1 2) '(3 4) '(1 2))
- ⇒ ()
- (-common-prefix '(1 2) '(1 2 3) '(1 2 3 4))
- ⇒ (1 2)
-
- -- Function: -common-suffix (&rest lists)
- Return the longest common suffix of LISTS.
-
- (-common-suffix '(1))
- ⇒ (1)
- (-common-suffix '(1 2) '(3 4) '(1 2))
- ⇒ ()
- (-common-suffix '(1 2 3 4) '(2 3 4) '(3 4))
- ⇒ (3 4)
-
- -- Function: -min (list)
- Return the smallest value from LIST of numbers or markers.
-
- (-min '(0))
- ⇒ 0
- (-min '(3 2 1))
- ⇒ 1
- (-min '(1 2 3))
- ⇒ 1
-
- -- Function: -min-by (comparator list)
- Take a comparison function COMPARATOR and a LIST and return the
- least element of the list by the comparison function.
-
- See also combinator ‘-on’ (*note -on::) which can transform the
- values before comparing them.
-
- (-min-by '> '(4 3 6 1))
- ⇒ 1
- (--min-by (> (car it) (car other)) '((1 2 3) (2) (3 2)))
- ⇒ (1 2 3)
- (--min-by (> (length it) (length other)) '((1 2 3) (2) (3 2)))
- ⇒ (2)
-
- -- Function: -max (list)
- Return the largest value from LIST of numbers or markers.
-
- (-max '(0))
- ⇒ 0
- (-max '(3 2 1))
- ⇒ 3
- (-max '(1 2 3))
- ⇒ 3
-
- -- Function: -max-by (comparator list)
- Take a comparison function COMPARATOR and a LIST and return the
- greatest element of the list by the comparison function.
-
- See also combinator ‘-on’ (*note -on::) which can transform the
- values before comparing them.
-
- (-max-by '> '(4 3 6 1))
- ⇒ 6
- (--max-by (> (car it) (car other)) '((1 2 3) (2) (3 2)))
- ⇒ (3 2)
- (--max-by (> (length it) (length other)) '((1 2 3) (2) (3 2)))
- ⇒ (1 2 3)
-
-
-File: dash.info, Node: Unfolding, Next: Predicates, Prev: Reductions, Up: Functions
-
-2.5 Unfolding
-=============
-
-Operations dual to reductions, building lists from a seed value rather
-than consuming a list to produce a single value.
-
- -- Function: -iterate (fun init n)
- Return a list of iterated applications of FUN to INIT.
-
- This means a list of the form:
-
- (INIT (FUN INIT) (FUN (FUN INIT)) ...)
-
- N is the length of the returned list.
-
- (-iterate #'1+ 1 10)
- ⇒ (1 2 3 4 5 6 7 8 9 10)
- (-iterate (lambda (x) (+ x x)) 2 5)
- ⇒ (2 4 8 16 32)
- (--iterate (* it it) 2 5)
- ⇒ (2 4 16 256 65536)
-
- -- Function: -unfold (fun seed)
- Build a list from SEED using FUN.
-
- This is "dual" operation to ‘-reduce-r’ (*note -reduce-r::): while
- -reduce-r consumes a list to produce a single value, ‘-unfold’
- (*note -unfold::) takes a seed value and builds a (potentially
- infinite!) list.
-
- FUN should return ‘nil’ to stop the generating process, or a cons
- (A . B), where A will be prepended to the result and B is the new
- seed.
-
- (-unfold (lambda (x) (unless (= x 0) (cons x (1- x)))) 10)
- ⇒ (10 9 8 7 6 5 4 3 2 1)
- (--unfold (when it (cons it (cdr it))) '(1 2 3 4))
- ⇒ ((1 2 3 4) (2 3 4) (3 4) (4))
- (--unfold (when it (cons it (butlast it))) '(1 2 3 4))
- ⇒ ((1 2 3 4) (1 2 3) (1 2) (1))
-
-
-File: dash.info, Node: Predicates, Next: Partitioning, Prev: Unfolding, Up: Functions
-
-2.6 Predicates
-==============
-
-Reductions of one or more lists to a boolean value.
-
- -- Function: -some (pred list)
- Return (PRED x) for the first LIST item where (PRED x) is non-nil,
- else nil.
-
- Alias: ‘-any’.
-
- This function’s anaphoric counterpart is ‘--some’.
-
- (-some #'stringp '(1 "2" 3))
- ⇒ t
- (--some (string-match-p "x" it) '("foo" "axe" "xor"))
- ⇒ 1
- (--some (= it-index 3) '(0 1 2))
- ⇒ nil
-
- -- Function: -every (pred list)
- Return non-nil if PRED returns non-nil for all items in LIST. If
- so, return the last such result of PRED. Otherwise, once an item
- is reached for which PRED returns nil, return nil without calling
- PRED on any further LIST elements.
-
- This function is like ‘-every-p’, but on success returns the last
- non-nil result of PRED instead of just t.
-
- This function’s anaphoric counterpart is ‘--every’.
-
- (-every #'numberp '(1 2 3))
- ⇒ t
- (--every (string-match-p "x" it) '("axe" "xor"))
- ⇒ 0
- (--every (= it it-index) '(0 1 3))
- ⇒ nil
-
- -- Function: -any? (pred list)
- Return t if (PRED x) is non-nil for any x in LIST, else nil.
-
- Alias: ‘-any-p’, ‘-some?’, ‘-some-p’
-
- (-any? #'numberp '(nil 0 t))
- ⇒ t
- (-any? #'numberp '(nil t t))
- ⇒ nil
- (-any? #'null '(1 3 5))
- ⇒ nil
-
- -- Function: -all? (pred list)
- Return t if (PRED X) is non-nil for all X in LIST, else nil. In
- the latter case, stop after the first X for which (PRED X) is nil,
- without calling PRED on any subsequent elements of LIST.
-
- The similar function ‘-every’ (*note -every::) is more widely
- useful, since it returns the last non-nil result of PRED instead of
- just t on success.
-
- Alias: ‘-all-p’, ‘-every-p’, ‘-every?’.
-
- This function’s anaphoric counterpart is ‘--all?’.
-
- (-all? #'numberp '(1 2 3))
- ⇒ t
- (-all? #'numberp '(2 t 6))
- ⇒ nil
- (--all? (= 0 (% it 2)) '(2 4 6))
- ⇒ t
-
- -- Function: -none? (pred list)
- Return t if (PRED x) is nil for all x in LIST, else nil.
-
- Alias: ‘-none-p’
-
- (-none? 'even? '(1 2 3))
- ⇒ nil
- (-none? 'even? '(1 3 5))
- ⇒ t
- (--none? (= 0 (% it 2)) '(1 2 3))
- ⇒ nil
-
- -- Function: -only-some? (pred list)
- Return ‘t‘ if at least one item of LIST matches PRED and at least
- one item of LIST does not match PRED. Return ‘nil‘ both if all
- items match the predicate or if none of the items match the
- predicate.
-
- Alias: ‘-only-some-p’
-
- (-only-some? 'even? '(1 2 3))
- ⇒ t
- (-only-some? 'even? '(1 3 5))
- ⇒ nil
- (-only-some? 'even? '(2 4 6))
- ⇒ nil
-
- -- Function: -contains? (list element)
- Return non-nil if LIST contains ELEMENT.
-
- The test for equality is done with ‘equal’, or with ‘-compare-fn’
- if that’s non-nil.
-
- Alias: ‘-contains-p’
-
- (-contains? '(1 2 3) 1)
- ⇒ t
- (-contains? '(1 2 3) 2)
- ⇒ t
- (-contains? '(1 2 3) 4)
- ⇒ nil
-
- -- Function: -same-items? (list list2)
- Return true if LIST and LIST2 has the same items.
-
- The order of the elements in the lists does not matter.
-
- Alias: ‘-same-items-p’
-
- (-same-items? '(1 2 3) '(1 2 3))
- ⇒ t
- (-same-items? '(1 2 3) '(3 2 1))
- ⇒ t
- (-same-items? '(1 2 3) '(1 2 3 4))
- ⇒ nil
-
- -- Function: -is-prefix? (prefix list)
- Return non-nil if PREFIX is a prefix of LIST.
-
- Alias: ‘-is-prefix-p’.
-
- (-is-prefix? '(1 2 3) '(1 2 3 4 5))
- ⇒ t
- (-is-prefix? '(1 2 3 4 5) '(1 2 3))
- ⇒ nil
- (-is-prefix? '(1 3) '(1 2 3 4 5))
- ⇒ nil
-
- -- Function: -is-suffix? (suffix list)
- Return non-nil if SUFFIX is a suffix of LIST.
-
- Alias: ‘-is-suffix-p’.
-
- (-is-suffix? '(3 4 5) '(1 2 3 4 5))
- ⇒ t
- (-is-suffix? '(1 2 3 4 5) '(3 4 5))
- ⇒ nil
- (-is-suffix? '(3 5) '(1 2 3 4 5))
- ⇒ nil
-
- -- Function: -is-infix? (infix list)
- Return non-nil if INFIX is infix of LIST.
-
- This operation runs in O(n^2) time
-
- Alias: ‘-is-infix-p’
-
- (-is-infix? '(1 2 3) '(1 2 3 4 5))
- ⇒ t
- (-is-infix? '(2 3 4) '(1 2 3 4 5))
- ⇒ t
- (-is-infix? '(3 4 5) '(1 2 3 4 5))
- ⇒ t
-
- -- Function: -cons-pair? (obj)
- Return non-nil if OBJ is a true cons pair. That is, a cons (A .
- B) where B is not a list.
-
- Alias: ‘-cons-pair-p’.
-
- (-cons-pair? '(1 . 2))
- ⇒ t
- (-cons-pair? '(1 2))
- ⇒ nil
- (-cons-pair? '(1))
- ⇒ nil
-
-
-File: dash.info, Node: Partitioning, Next: Indexing, Prev: Predicates, Up: Functions
-
-2.7 Partitioning
-================
-
-Functions partitioning the input list into a list of lists.
-
- -- Function: -split-at (n list)
- Split LIST into two sublists after the Nth element. The result is
- a list of two elements (TAKE DROP) where TAKE is a new list of the
- first N elements of LIST, and DROP is the remaining elements of
- LIST (not a copy). TAKE and DROP are like the results of ‘-take’
- (*note -take::) and ‘-drop’ (*note -drop::), respectively, but the
- split is done in a single list traversal.
-
- (-split-at 3 '(1 2 3 4 5))
- ⇒ ((1 2 3) (4 5))
- (-split-at 17 '(1 2 3 4 5))
- ⇒ ((1 2 3 4 5) nil)
- (-split-at 0 '(1 2 3 4 5))
- ⇒ (nil (1 2 3 4 5))
-
- -- Function: -split-with (pred list)
- Return a list of ((-take-while PRED LIST) (-drop-while PRED LIST)),
- in no more than one pass through the list.
-
- (-split-with 'even? '(1 2 3 4))
- ⇒ (nil (1 2 3 4))
- (-split-with 'even? '(2 4 5 6))
- ⇒ ((2 4) (5 6))
- (--split-with (< it 4) '(1 2 3 4 3 2 1))
- ⇒ ((1 2 3) (4 3 2 1))
-
- -- Macro: -split-on (item list)
- Split the LIST each time ITEM is found.
-
- Unlike ‘-partition-by’ (*note -partition-by::), the ITEM is
- discarded from the results. Empty lists are also removed from the
- result.
-
- Comparison is done by ‘equal’.
-
- See also ‘-split-when’ (*note -split-when::)
-
- (-split-on '| '(Nil | Leaf a | Node [Tree a]))
- ⇒ ((Nil) (Leaf a) (Node [Tree a]))
- (-split-on :endgroup '("a" "b" :endgroup "c" :endgroup "d" "e"))
- ⇒ (("a" "b") ("c") ("d" "e"))
- (-split-on :endgroup '("a" "b" :endgroup :endgroup "d" "e"))
- ⇒ (("a" "b") ("d" "e"))
-
- -- Function: -split-when (fn list)
- Split the LIST on each element where FN returns non-nil.
-
- Unlike ‘-partition-by’ (*note -partition-by::), the "matched"
- element is discarded from the results. Empty lists are also
- removed from the result.
-
- This function can be thought of as a generalization of
- ‘split-string’.
-
- (-split-when 'even? '(1 2 3 4 5 6))
- ⇒ ((1) (3) (5))
- (-split-when 'even? '(1 2 3 4 6 8 9))
- ⇒ ((1) (3) (9))
- (--split-when (memq it '(&optional &rest)) '(a b &optional c d &rest args))
- ⇒ ((a b) (c d) (args))
-
- -- Function: -separate (pred list)
- Return a list of ((-filter PRED LIST) (-remove PRED LIST)), in one
- pass through the list.
-
- (-separate (lambda (num) (= 0 (% num 2))) '(1 2 3 4 5 6 7))
- ⇒ ((2 4 6) (1 3 5 7))
- (--separate (< it 5) '(3 7 5 9 3 2 1 4 6))
- ⇒ ((3 3 2 1 4) (7 5 9 6))
- (-separate 'cdr '((1 2) (1) (1 2 3) (4)))
- ⇒ (((1 2) (1 2 3)) ((1) (4)))
-
- -- Function: -partition (n list)
- Return a new list with the items in LIST grouped into N-sized
- sublists. If there are not enough items to make the last group
- N-sized, those items are discarded.
-
- (-partition 2 '(1 2 3 4 5 6))
- ⇒ ((1 2) (3 4) (5 6))
- (-partition 2 '(1 2 3 4 5 6 7))
- ⇒ ((1 2) (3 4) (5 6))
- (-partition 3 '(1 2 3 4 5 6 7))
- ⇒ ((1 2 3) (4 5 6))
-
- -- Function: -partition-all (n list)
- Return a new list with the items in LIST grouped into N-sized
- sublists. The last group may contain less than N items.
-
- (-partition-all 2 '(1 2 3 4 5 6))
- ⇒ ((1 2) (3 4) (5 6))
- (-partition-all 2 '(1 2 3 4 5 6 7))
- ⇒ ((1 2) (3 4) (5 6) (7))
- (-partition-all 3 '(1 2 3 4 5 6 7))
- ⇒ ((1 2 3) (4 5 6) (7))
-
- -- Function: -partition-in-steps (n step list)
- Return a new list with the items in LIST grouped into N-sized
- sublists at offsets STEP apart. If there are not enough items to
- make the last group N-sized, those items are discarded.
-
- (-partition-in-steps 2 1 '(1 2 3 4))
- ⇒ ((1 2) (2 3) (3 4))
- (-partition-in-steps 3 2 '(1 2 3 4))
- ⇒ ((1 2 3))
- (-partition-in-steps 3 2 '(1 2 3 4 5))
- ⇒ ((1 2 3) (3 4 5))
-
- -- Function: -partition-all-in-steps (n step list)
- Return a new list with the items in LIST grouped into N-sized
- sublists at offsets STEP apart. The last groups may contain less
- than N items.
-
- (-partition-all-in-steps 2 1 '(1 2 3 4))
- ⇒ ((1 2) (2 3) (3 4) (4))
- (-partition-all-in-steps 3 2 '(1 2 3 4))
- ⇒ ((1 2 3) (3 4))
- (-partition-all-in-steps 3 2 '(1 2 3 4 5))
- ⇒ ((1 2 3) (3 4 5) (5))
-
- -- Function: -partition-by (fn list)
- Apply FN to each item in LIST, splitting it each time FN returns a
- new value.
-
- (-partition-by 'even? ())
- ⇒ ()
- (-partition-by 'even? '(1 1 2 2 2 3 4 6 8))
- ⇒ ((1 1) (2 2 2) (3) (4 6 8))
- (--partition-by (< it 3) '(1 2 3 4 3 2 1))
- ⇒ ((1 2) (3 4 3) (2 1))
-
- -- Function: -partition-by-header (fn list)
- Apply FN to the first item in LIST. That is the header value.
- Apply FN to each item in LIST, splitting it each time FN returns
- the header value, but only after seeing at least one other value
- (the body).
-
- (--partition-by-header (= it 1) '(1 2 3 1 2 1 2 3 4))
- ⇒ ((1 2 3) (1 2) (1 2 3 4))
- (--partition-by-header (> it 0) '(1 2 0 1 0 1 2 3 0))
- ⇒ ((1 2 0) (1 0) (1 2 3 0))
- (-partition-by-header 'even? '(2 1 1 1 4 1 3 5 6 6 1))
- ⇒ ((2 1 1 1) (4 1 3 5) (6 6 1))
-
- -- Function: -partition-after-pred (pred list)
- Partition LIST after each element for which PRED returns non-nil.
-
- This function’s anaphoric counterpart is ‘--partition-after-pred’.
-
- (-partition-after-pred #'booleanp ())
- ⇒ ()
- (-partition-after-pred #'booleanp '(t t))
- ⇒ ((t) (t))
- (-partition-after-pred #'booleanp '(0 0 t t 0 t))
- ⇒ ((0 0 t) (t) (0 t))
-
- -- Function: -partition-before-pred (pred list)
- Partition directly before each time PRED is true on an element of
- LIST.
-
- (-partition-before-pred #'booleanp ())
- ⇒ ()
- (-partition-before-pred #'booleanp '(0 t))
- ⇒ ((0) (t))
- (-partition-before-pred #'booleanp '(0 0 t 0 t t))
- ⇒ ((0 0) (t 0) (t) (t))
-
- -- Function: -partition-before-item (item list)
- Partition directly before each time ITEM appears in LIST.
-
- (-partition-before-item 3 ())
- ⇒ ()
- (-partition-before-item 3 '(1))
- ⇒ ((1))
- (-partition-before-item 3 '(3))
- ⇒ ((3))
-
- -- Function: -partition-after-item (item list)
- Partition directly after each time ITEM appears in LIST.
-
- (-partition-after-item 3 ())
- ⇒ ()
- (-partition-after-item 3 '(1))
- ⇒ ((1))
- (-partition-after-item 3 '(3))
- ⇒ ((3))
-
- -- Function: -group-by (fn list)
- Separate LIST into an alist whose keys are FN applied to the
- elements of LIST. Keys are compared by ‘equal’.
-
- (-group-by 'even? ())
- ⇒ ()
- (-group-by 'even? '(1 1 2 2 2 3 4 6 8))
- ⇒ ((nil 1 1 3) (t 2 2 2 4 6 8))
- (--group-by (car (split-string it "/")) '("a/b" "c/d" "a/e"))
- ⇒ (("a" "a/b" "a/e") ("c" "c/d"))
-
-
-File: dash.info, Node: Indexing, Next: Set operations, Prev: Partitioning, Up: Functions
-
-2.8 Indexing
-============
-
-Functions retrieving or sorting based on list indices and related
-predicates.
-
- -- Function: -elem-index (elem list)
- Return the index of the first element in the given LIST which is
- equal to the query element ELEM, or nil if there is no such
- element.
-
- (-elem-index 2 '(6 7 8 2 3 4))
- ⇒ 3
- (-elem-index "bar" '("foo" "bar" "baz"))
- ⇒ 1
- (-elem-index '(1 2) '((3) (5 6) (1 2) nil))
- ⇒ 2
-
- -- Function: -elem-indices (elem list)
- Return the indices of all elements in LIST equal to the query
- element ELEM, in ascending order.
-
- (-elem-indices 2 '(6 7 8 2 3 4 2 1))
- ⇒ (3 6)
- (-elem-indices "bar" '("foo" "bar" "baz"))
- ⇒ (1)
- (-elem-indices '(1 2) '((3) (1 2) (5 6) (1 2) nil))
- ⇒ (1 3)
-
- -- Function: -find-index (pred list)
- Take a predicate PRED and a LIST and return the index of the first
- element in the list satisfying the predicate, or nil if there is no
- such element.
-
- See also ‘-first’ (*note -first::).
-
- (-find-index 'even? '(2 4 1 6 3 3 5 8))
- ⇒ 0
- (--find-index (< 5 it) '(2 4 1 6 3 3 5 8))
- ⇒ 3
- (-find-index (-partial 'string-lessp "baz") '("bar" "foo" "baz"))
- ⇒ 1
-
- -- Function: -find-last-index (pred list)
- Take a predicate PRED and a LIST and return the index of the last
- element in the list satisfying the predicate, or nil if there is no
- such element.
-
- See also ‘-last’ (*note -last::).
-
- (-find-last-index 'even? '(2 4 1 6 3 3 5 8))
- ⇒ 7
- (--find-last-index (< 5 it) '(2 7 1 6 3 8 5 2))
- ⇒ 5
- (-find-last-index (-partial 'string-lessp "baz") '("q" "foo" "baz"))
- ⇒ 1
-
- -- Function: -find-indices (pred list)
- Return the indices of all elements in LIST satisfying the predicate
- PRED, in ascending order.
-
- (-find-indices 'even? '(2 4 1 6 3 3 5 8))
- ⇒ (0 1 3 7)
- (--find-indices (< 5 it) '(2 4 1 6 3 3 5 8))
- ⇒ (3 7)
- (-find-indices (-partial 'string-lessp "baz") '("bar" "foo" "baz"))
- ⇒ (1)
-
- -- Function: -grade-up (comparator list)
- Grade elements of LIST using COMPARATOR relation. This yields a
- permutation vector such that applying this permutation to LIST
- sorts it in ascending order.
-
- (-grade-up #'< '(3 1 4 2 1 3 3))
- ⇒ (1 4 3 0 5 6 2)
- (let ((l '(3 1 4 2 1 3 3))) (-select-by-indices (-grade-up #'< l) l))
- ⇒ (1 1 2 3 3 3 4)
-
- -- Function: -grade-down (comparator list)
- Grade elements of LIST using COMPARATOR relation. This yields a
- permutation vector such that applying this permutation to LIST
- sorts it in descending order.
-
- (-grade-down #'< '(3 1 4 2 1 3 3))
- ⇒ (2 0 5 6 3 1 4)
- (let ((l '(3 1 4 2 1 3 3))) (-select-by-indices (-grade-down #'< l) l))
- ⇒ (4 3 3 3 2 1 1)
-
-
-File: dash.info, Node: Set operations, Next: Other list operations, Prev: Indexing, Up: Functions
-
-2.9 Set operations
-==================
-
-Operations pretending lists are sets.
-
- -- Function: -union (list list2)
- Return a new list containing the elements of LIST and elements of
- LIST2 that are not in LIST. The test for equality is done with
- ‘equal’, or with ‘-compare-fn’ if that’s non-nil.
-
- (-union '(1 2 3) '(3 4 5))
- ⇒ (1 2 3 4 5)
- (-union '(1 2 3 4) ())
- ⇒ (1 2 3 4)
- (-union '(1 1 2 2) '(3 2 1))
- ⇒ (1 1 2 2 3)
-
- -- Function: -difference (list list2)
- Return a new list with only the members of LIST that are not in
- LIST2. The test for equality is done with ‘equal’, or with
- ‘-compare-fn’ if that’s non-nil.
-
- (-difference () ())
- ⇒ ()
- (-difference '(1 2 3) '(4 5 6))
- ⇒ (1 2 3)
- (-difference '(1 2 3 4) '(3 4 5 6))
- ⇒ (1 2)
-
- -- Function: -intersection (list list2)
- Return a new list containing only the elements that are members of
- both LIST and LIST2. The test for equality is done with ‘equal’,
- or with ‘-compare-fn’ if that’s non-nil.
-
- (-intersection () ())
- ⇒ ()
- (-intersection '(1 2 3) '(4 5 6))
- ⇒ ()
- (-intersection '(1 2 3 4) '(3 4 5 6))
- ⇒ (3 4)
-
- -- Function: -powerset (list)
- Return the power set of LIST.
-
- (-powerset ())
- ⇒ (nil)
- (-powerset '(x y z))
- ⇒ ((x y z) (x y) (x z) (x) (y z) (y) (z) nil)
-
- -- Function: -permutations (list)
- Return the permutations of LIST.
-
- (-permutations ())
- ⇒ (nil)
- (-permutations '(1 2))
- ⇒ ((1 2) (2 1))
- (-permutations '(a b c))
- ⇒ ((a b c) (a c b) (b a c) (b c a) (c a b) (c b a))
-
- -- Function: -distinct (list)
- Return a new list with all duplicates removed. The test for
- equality is done with ‘equal’, or with ‘-compare-fn’ if that’s
- non-nil.
-
- Alias: ‘-uniq’
-
- (-distinct ())
- ⇒ ()
- (-distinct '(1 2 2 4))
- ⇒ (1 2 4)
- (-distinct '(t t t))
- ⇒ (t)
-
-
-File: dash.info, Node: Other list operations, Next: Tree operations, Prev: Set operations, Up: Functions
-
-2.10 Other list operations
-==========================
-
-Other list functions not fit to be classified elsewhere.
-
- -- Function: -rotate (n list)
- Rotate LIST N places to the right (left if N is negative). The
- time complexity is O(n).
-
- (-rotate 3 '(1 2 3 4 5 6 7))
- ⇒ (5 6 7 1 2 3 4)
- (-rotate -3 '(1 2 3 4 5 6 7))
- ⇒ (4 5 6 7 1 2 3)
- (-rotate 16 '(1 2 3 4 5 6 7))
- ⇒ (6 7 1 2 3 4 5)
-
- -- Function: -repeat (n x)
- Return a new list of length N with each element being X. Return
- nil if N is less than 1.
-
- (-repeat 3 :a)
- ⇒ (:a :a :a)
- (-repeat 1 :a)
- ⇒ (:a)
- (-repeat 0 :a)
- ⇒ nil
-
- -- Function: -cons* (&rest args)
- Make a new list from the elements of ARGS. The last 2 elements of
- ARGS are used as the final cons of the result, so if the final
- element of ARGS is not a list, the result is a dotted list. With
- no ARGS, return nil.
-
- (-cons* 1 2)
- ⇒ (1 . 2)
- (-cons* 1 2 3)
- ⇒ (1 2 . 3)
- (-cons* 1)
- ⇒ 1
-
- -- Function: -snoc (list elem &rest elements)
- Append ELEM to the end of the list.
-
- This is like ‘cons’, but operates on the end of list.
-
- If ELEMENTS is non nil, append these to the list as well.
-
- (-snoc '(1 2 3) 4)
- ⇒ (1 2 3 4)
- (-snoc '(1 2 3) 4 5 6)
- ⇒ (1 2 3 4 5 6)
- (-snoc '(1 2 3) '(4 5 6))
- ⇒ (1 2 3 (4 5 6))
-
- -- Function: -interpose (sep list)
- Return a new list of all elements in LIST separated by SEP.
-
- (-interpose "-" ())
- ⇒ ()
- (-interpose "-" '("a"))
- ⇒ ("a")
- (-interpose "-" '("a" "b" "c"))
- ⇒ ("a" "-" "b" "-" "c")
-
- -- Function: -interleave (&rest lists)
- Return a new list of the first item in each list, then the second
- etc.
-
- (-interleave '(1 2) '("a" "b"))
- ⇒ (1 "a" 2 "b")
- (-interleave '(1 2) '("a" "b") '("A" "B"))
- ⇒ (1 "a" "A" 2 "b" "B")
- (-interleave '(1 2 3) '("a" "b"))
- ⇒ (1 "a" 2 "b")
-
- -- Function: -iota (count &optional start step)
- Return a list containing COUNT numbers. Starts from START and adds
- STEP each time. The default START is zero, the default STEP is 1.
- This function takes its name from the corresponding primitive in
- the APL language.
-
- (-iota 6)
- ⇒ (0 1 2 3 4 5)
- (-iota 4 2.5 -2)
- ⇒ (2.5 0.5 -1.5 -3.5)
- (-iota -1)
- error→ Wrong type argument: natnump, -1
-
- -- Function: -zip-with (fn list1 list2)
- Zip the two lists LIST1 and LIST2 using a function FN. This
- function is applied pairwise taking as first argument element of
- LIST1 and as second argument element of LIST2 at corresponding
- position.
-
- The anaphoric form ‘--zip-with’ binds the elements from LIST1 as
- symbol ‘it’, and the elements from LIST2 as symbol ‘other’.
-
- (-zip-with '+ '(1 2 3) '(4 5 6))
- ⇒ (5 7 9)
- (-zip-with 'cons '(1 2 3) '(4 5 6))
- ⇒ ((1 . 4) (2 . 5) (3 . 6))
- (--zip-with (concat it " and " other) '("Batman" "Jekyll") '("Robin" "Hyde"))
- ⇒ ("Batman and Robin" "Jekyll and Hyde")
-
- -- Function: -zip (&rest lists)
- Zip LISTS together. Group the head of each list, followed by the
- second elements of each list, and so on. The lengths of the
- returned groupings are equal to the length of the shortest input
- list.
-
- If two lists are provided as arguments, return the groupings as a
- list of cons cells. Otherwise, return the groupings as a list of
- lists.
-
- Use ‘-zip-lists’ (*note -zip-lists::) if you need the return value
- to always be a list of lists.
-
- Alias: ‘-zip-pair’
-
- See also: ‘-zip-lists’ (*note -zip-lists::)
-
- (-zip '(1 2 3) '(4 5 6))
- ⇒ ((1 . 4) (2 . 5) (3 . 6))
- (-zip '(1 2 3) '(4 5 6 7))
- ⇒ ((1 . 4) (2 . 5) (3 . 6))
- (-zip '(1 2) '(3 4 5) '(6))
- ⇒ ((1 3 6))
-
- -- Function: -zip-lists (&rest lists)
- Zip LISTS together. Group the head of each list, followed by the
- second elements of each list, and so on. The lengths of the
- returned groupings are equal to the length of the shortest input
- list.
-
- The return value is always list of lists, which is a difference
- from ‘-zip-pair’ which returns a cons-cell in case two input lists
- are provided.
-
- See also: ‘-zip’ (*note -zip::)
-
- (-zip-lists '(1 2 3) '(4 5 6))
- ⇒ ((1 4) (2 5) (3 6))
- (-zip-lists '(1 2 3) '(4 5 6 7))
- ⇒ ((1 4) (2 5) (3 6))
- (-zip-lists '(1 2) '(3 4 5) '(6))
- ⇒ ((1 3 6))
-
- -- Function: -zip-fill (fill-value &rest lists)
- Zip LISTS, with FILL-VALUE padded onto the shorter lists. The
- lengths of the returned groupings are equal to the length of the
- longest input list.
-
- (-zip-fill 0 '(1 2 3 4 5) '(6 7 8 9))
- ⇒ ((1 . 6) (2 . 7) (3 . 8) (4 . 9) (5 . 0))
-
- -- Function: -unzip (lists)
- Unzip LISTS.
-
- This works just like ‘-zip’ (*note -zip::) but takes a list of
- lists instead of a variable number of arguments, such that
-
- (-unzip (-zip L1 L2 L3 ...))
-
- is identity (given that the lists are the same length).
-
- Note in particular that calling this on a list of two lists will
- return a list of cons-cells such that the above identity works.
-
- See also: ‘-zip’ (*note -zip::)
-
- (-unzip (-zip '(1 2 3) '(a b c) '("e" "f" "g")))
- ⇒ ((1 2 3) (a b c) ("e" "f" "g"))
- (-unzip '((1 2) (3 4) (5 6) (7 8) (9 10)))
- ⇒ ((1 3 5 7 9) (2 4 6 8 10))
- (-unzip '((1 2) (3 4)))
- ⇒ ((1 . 3) (2 . 4))
-
- -- Function: -cycle (list)
- Return an infinite circular copy of LIST. The returned list cycles
- through the elements of LIST and repeats from the beginning.
-
- (-take 5 (-cycle '(1 2 3)))
- ⇒ (1 2 3 1 2)
- (-take 7 (-cycle '(1 "and" 3)))
- ⇒ (1 "and" 3 1 "and" 3 1)
- (-zip (-cycle '(1 2 3)) '(1 2))
- ⇒ ((1 . 1) (2 . 2))
-
- -- Function: -pad (fill-value &rest lists)
- Appends FILL-VALUE to the end of each list in LISTS such that they
- will all have the same length.
-
- (-pad 0 ())
- ⇒ (nil)
- (-pad 0 '(1))
- ⇒ ((1))
- (-pad 0 '(1 2 3) '(4 5))
- ⇒ ((1 2 3) (4 5 0))
-
- -- Function: -table (fn &rest lists)
- Compute outer product of LISTS using function FN.
-
- The function FN should have the same arity as the number of
- supplied lists.
-
- The outer product is computed by applying fn to all possible
- combinations created by taking one element from each list in order.
- The dimension of the result is (length lists).
-
- See also: ‘-table-flat’ (*note -table-flat::)
-
- (-table '* '(1 2 3) '(1 2 3))
- ⇒ ((1 2 3) (2 4 6) (3 6 9))
- (-table (lambda (a b) (-sum (-zip-with '* a b))) '((1 2) (3 4)) '((1 3) (2 4)))
- ⇒ ((7 15) (10 22))
- (apply '-table 'list (-repeat 3 '(1 2)))
- ⇒ ((((1 1 1) (2 1 1)) ((1 2 1) (2 2 1))) (((1 1 2) (2 1 2)) ((1 2 2) (2 2 2))))
-
- -- Function: -table-flat (fn &rest lists)
- Compute flat outer product of LISTS using function FN.
-
- The function FN should have the same arity as the number of
- supplied lists.
-
- The outer product is computed by applying fn to all possible
- combinations created by taking one element from each list in order.
- The results are flattened, ignoring the tensor structure of the
- result. This is equivalent to calling:
-
- (-flatten-n (1- (length lists)) (apply ’-table fn lists))
-
- but the implementation here is much more efficient.
-
- See also: ‘-flatten-n’ (*note -flatten-n::), ‘-table’ (*note
- -table::)
-
- (-table-flat 'list '(1 2 3) '(a b c))
- ⇒ ((1 a) (2 a) (3 a) (1 b) (2 b) (3 b) (1 c) (2 c) (3 c))
- (-table-flat '* '(1 2 3) '(1 2 3))
- ⇒ (1 2 3 2 4 6 3 6 9)
- (apply '-table-flat 'list (-repeat 3 '(1 2)))
- ⇒ ((1 1 1) (2 1 1) (1 2 1) (2 2 1) (1 1 2) (2 1 2) (1 2 2) (2 2 2))
-
- -- Function: -first (pred list)
- Return the first item in LIST for which PRED returns non-nil.
- Return nil if no such element is found. To get the first item in
- the list no questions asked, use ‘car’.
-
- Alias: ‘-find’.
-
- This function’s anaphoric counterpart is ‘--first’.
-
- (-first #'natnump '(-1 0 1))
- ⇒ 0
- (-first #'null '(1 2 3))
- ⇒ nil
- (--first (> it 2) '(1 2 3))
- ⇒ 3
-
- -- Function: -last (pred list)
- Return the last x in LIST where (PRED x) is non-nil, else nil.
-
- (-last 'even? '(1 2 3 4 5 6 3 3 3))
- ⇒ 6
- (-last 'even? '(1 3 7 5 9))
- ⇒ nil
- (--last (> (length it) 3) '("a" "looong" "word" "and" "short" "one"))
- ⇒ "short"
-
- -- Function: -first-item (list)
- Return the first item of LIST, or nil on an empty list.
-
- See also: ‘-second-item’ (*note -second-item::), ‘-last-item’
- (*note -last-item::).
-
- (-first-item '(1 2 3))
- ⇒ 1
- (-first-item nil)
- ⇒ nil
- (let ((list (list 1 2 3))) (setf (-first-item list) 5) list)
- ⇒ (5 2 3)
-
- -- Function: -second-item (list)
- Return the second item of LIST, or nil if LIST is too short.
-
- See also: ‘-third-item’ (*note -third-item::).
-
- (-second-item '(1 2 3))
- ⇒ 2
- (-second-item nil)
- ⇒ nil
-
- -- Function: -third-item (list)
- Return the third item of LIST, or nil if LIST is too short.
-
- See also: ‘-fourth-item’ (*note -fourth-item::).
-
- (-third-item '(1 2 3))
- ⇒ 3
- (-third-item nil)
- ⇒ nil
-
- -- Function: -fourth-item (list)
- Return the fourth item of LIST, or nil if LIST is too short.
-
- See also: ‘-fifth-item’ (*note -fifth-item::).
-
- (-fourth-item '(1 2 3 4))
- ⇒ 4
- (-fourth-item nil)
- ⇒ nil
-
- -- Function: -fifth-item (list)
- Return the fifth item of LIST, or nil if LIST is too short.
-
- See also: ‘-last-item’ (*note -last-item::).
-
- (-fifth-item '(1 2 3 4 5))
- ⇒ 5
- (-fifth-item nil)
- ⇒ nil
-
- -- Function: -last-item (list)
- Return the last item of LIST, or nil on an empty list.
-
- (-last-item '(1 2 3))
- ⇒ 3
- (-last-item nil)
- ⇒ nil
- (let ((list (list 1 2 3))) (setf (-last-item list) 5) list)
- ⇒ (1 2 5)
-
- -- Function: -butlast (list)
- Return a list of all items in list except for the last.
-
- (-butlast '(1 2 3))
- ⇒ (1 2)
- (-butlast '(1 2))
- ⇒ (1)
- (-butlast '(1))
- ⇒ nil
-
- -- Function: -sort (comparator list)
- Sort LIST, stably, comparing elements using COMPARATOR. Return the
- sorted list. LIST is NOT modified by side effects. COMPARATOR is
- called with two elements of LIST, and should return non-nil if the
- first element should sort before the second.
-
- (-sort '< '(3 1 2))
- ⇒ (1 2 3)
- (-sort '> '(3 1 2))
- ⇒ (3 2 1)
- (--sort (< it other) '(3 1 2))
- ⇒ (1 2 3)
-
- -- Function: -list (arg)
- Ensure ARG is a list. If ARG is already a list, return it as is
- (not a copy). Otherwise, return a new list with ARG as its only
- element.
-
- Another supported calling convention is (-list &rest ARGS). In
- this case, if ARG is not a list, a new list with all of ARGS as
- elements is returned. This use is supported for backward
- compatibility and is otherwise deprecated.
-
- (-list 1)
- ⇒ (1)
- (-list ())
- ⇒ ()
- (-list '(1 2 3))
- ⇒ (1 2 3)
-
- -- Function: -fix (fn list)
- Compute the (least) fixpoint of FN with initial input LIST.
-
- FN is called at least once, results are compared with ‘equal’.
-
- (-fix (lambda (l) (-non-nil (--mapcat (-split-at (/ (length it) 2) it) l))) '((1 2 3)))
- ⇒ ((1) (2) (3))
- (let ((l '((starwars scifi) (jedi starwars warrior)))) (--fix (-uniq (--mapcat (cons it (cdr (assq it l))) it)) '(jedi book)))
- ⇒ (jedi starwars warrior scifi book)
-
-
-File: dash.info, Node: Tree operations, Next: Threading macros, Prev: Other list operations, Up: Functions
-
-2.11 Tree operations
-====================
-
-Functions pretending lists are trees.
-
- -- Function: -tree-seq (branch children tree)
- Return a sequence of the nodes in TREE, in depth-first search
- order.
-
- BRANCH is a predicate of one argument that returns non-nil if the
- passed argument is a branch, that is, a node that can have
- children.
-
- CHILDREN is a function of one argument that returns the children of
- the passed branch node.
-
- Non-branch nodes are simply copied.
-
- (-tree-seq 'listp 'identity '(1 (2 3) 4 (5 (6 7))))
- ⇒ ((1 (2 3) 4 (5 (6 7))) 1 (2 3) 2 3 4 (5 (6 7)) 5 (6 7) 6 7)
- (-tree-seq 'listp 'reverse '(1 (2 3) 4 (5 (6 7))))
- ⇒ ((1 (2 3) 4 (5 (6 7))) (5 (6 7)) (6 7) 7 6 5 4 (2 3) 3 2 1)
- (--tree-seq (vectorp it) (append it nil) [1 [2 3] 4 [5 [6 7]]])
- ⇒ ([1 [2 3] 4 [5 [6 7]]] 1 [2 3] 2 3 4 [5 [6 7]] 5 [6 7] 6 7)
-
- -- Function: -tree-map (fn tree)
- Apply FN to each element of TREE while preserving the tree
- structure.
-
- (-tree-map '1+ '(1 (2 3) (4 (5 6) 7)))
- ⇒ (2 (3 4) (5 (6 7) 8))
- (-tree-map '(lambda (x) (cons x (expt 2 x))) '(1 (2 3) 4))
- ⇒ ((1 . 2) ((2 . 4) (3 . 8)) (4 . 16))
- (--tree-map (length it) '("<body>" ("<p>" "text" "</p>") "</body>"))
- ⇒ (6 (3 4 4) 7)
-
- -- Function: -tree-map-nodes (pred fun tree)
- Call FUN on each node of TREE that satisfies PRED.
-
- If PRED returns nil, continue descending down this node. If PRED
- returns non-nil, apply FUN to this node and do not descend further.
-
- (-tree-map-nodes 'vectorp (lambda (x) (-sum (append x nil))) '(1 [2 3] 4 (5 [6 7] 8)))
- ⇒ (1 5 4 (5 13 8))
- (-tree-map-nodes 'keywordp (lambda (x) (symbol-name x)) '(1 :foo 4 ((5 6 :bar) :baz 8)))
- ⇒ (1 ":foo" 4 ((5 6 ":bar") ":baz" 8))
- (--tree-map-nodes (eq (car-safe it) 'add-mode) (-concat it (list :mode 'emacs-lisp-mode)) '(with-mode emacs-lisp-mode (foo bar) (add-mode a b) (baz (add-mode c d))))
- ⇒ (with-mode emacs-lisp-mode (foo bar) (add-mode a b :mode emacs-lisp-mode) (baz (add-mode c d :mode emacs-lisp-mode)))
-
- -- Function: -tree-reduce (fn tree)
- Use FN to reduce elements of list TREE. If elements of TREE are
- lists themselves, apply the reduction recursively.
-
- FN is first applied to first element of the list and second
- element, then on this result and third element from the list etc.
-
- See ‘-reduce-r’ (*note -reduce-r::) for how exactly are lists of
- zero or one element handled.
-
- (-tree-reduce '+ '(1 (2 3) (4 5)))
- ⇒ 15
- (-tree-reduce 'concat '("strings" (" on" " various") ((" levels"))))
- ⇒ "strings on various levels"
- (--tree-reduce (cond ((stringp it) (concat it " " acc)) (t (let ((sn (symbol-name it))) (concat "<" sn ">" acc "</" sn ">")))) '(body (p "some words") (div "more" (b "bold") "words")))
- ⇒ "<body><p>some words</p> <div>more <b>bold</b> words</div></body>"
-
- -- Function: -tree-reduce-from (fn init-value tree)
- Use FN to reduce elements of list TREE. If elements of TREE are
- lists themselves, apply the reduction recursively.
-
- FN is first applied to INIT-VALUE and first element of the list,
- then on this result and second element from the list etc.
-
- The initial value is ignored on cons pairs as they always contain
- two elements.
-
- (-tree-reduce-from '+ 1 '(1 (1 1) ((1))))
- ⇒ 8
- (--tree-reduce-from (-concat acc (list it)) nil '(1 (2 3 (4 5)) (6 7)))
- ⇒ ((7 6) ((5 4) 3 2) 1)
-
- -- Function: -tree-mapreduce (fn folder tree)
- Apply FN to each element of TREE, and make a list of the results.
- If elements of TREE are lists themselves, apply FN recursively to
- elements of these nested lists.
-
- Then reduce the resulting lists using FOLDER and initial value
- INIT-VALUE. See ‘-reduce-r-from’ (*note -reduce-r-from::).
-
- This is the same as calling ‘-tree-reduce’ (*note -tree-reduce::)
- after ‘-tree-map’ (*note -tree-map::) but is twice as fast as it
- only traverse the structure once.
-
- (-tree-mapreduce 'list 'append '(1 (2 (3 4) (5 6)) (7 (8 9))))
- ⇒ (1 2 3 4 5 6 7 8 9)
- (--tree-mapreduce 1 (+ it acc) '(1 (2 (4 9) (2 1)) (7 (4 3))))
- ⇒ 9
- (--tree-mapreduce 0 (max acc (1+ it)) '(1 (2 (4 9) (2 1)) (7 (4 3))))
- ⇒ 3
-
- -- Function: -tree-mapreduce-from (fn folder init-value tree)
- Apply FN to each element of TREE, and make a list of the results.
- If elements of TREE are lists themselves, apply FN recursively to
- elements of these nested lists.
-
- Then reduce the resulting lists using FOLDER and initial value
- INIT-VALUE. See ‘-reduce-r-from’ (*note -reduce-r-from::).
-
- This is the same as calling ‘-tree-reduce-from’ (*note
- -tree-reduce-from::) after ‘-tree-map’ (*note -tree-map::) but is
- twice as fast as it only traverse the structure once.
-
- (-tree-mapreduce-from 'identity '* 1 '(1 (2 (3 4) (5 6)) (7 (8 9))))
- ⇒ 362880
- (--tree-mapreduce-from (+ it it) (cons it acc) nil '(1 (2 (4 9) (2 1)) (7 (4 3))))
- ⇒ (2 (4 (8 18) (4 2)) (14 (8 6)))
- (concat "{" (--tree-mapreduce-from (cond ((-cons-pair? it) (concat (symbol-name (car it)) " -> " (symbol-name (cdr it)))) (t (concat (symbol-name it) " : {"))) (concat it (unless (or (equal acc "}") (equal (substring it (1- (length it))) "{")) ", ") acc) "}" '((elisp-mode (foo (bar . booze)) (baz . qux)) (c-mode (foo . bla) (bum . bam)))))
- ⇒ "{elisp-mode : {foo : {bar -> booze}, baz -> qux}, c-mode : {foo -> bla, bum -> bam}}"
-
- -- Function: -clone (list)
- Create a deep copy of LIST. The new list has the same elements and
- structure but all cons are replaced with new ones. This is useful
- when you need to clone a structure such as plist or alist.
-
- (let* ((a '(1 2 3)) (b (-clone a))) (nreverse a) b)
- ⇒ (1 2 3)
-
-
-File: dash.info, Node: Threading macros, Next: Binding, Prev: Tree operations, Up: Functions
-
-2.12 Threading macros
-=====================
-
-Macros that conditionally combine sequential forms for brevity or
-readability.
-
- -- Macro: -> (x &optional form &rest more)
- Thread the expr through the forms. Insert X as the second item in
- the first form, making a list of it if it is not a list already.
- If there are more forms, insert the first form as the second item
- in second form, etc.
-
- (-> '(2 3 5))
- ⇒ (2 3 5)
- (-> '(2 3 5) (append '(8 13)))
- ⇒ (2 3 5 8 13)
- (-> '(2 3 5) (append '(8 13)) (-slice 1 -1))
- ⇒ (3 5 8)
-
- -- Macro: ->> (x &optional form &rest more)
- Thread the expr through the forms. Insert X as the last item in
- the first form, making a list of it if it is not a list already.
- If there are more forms, insert the first form as the last item in
- second form, etc.
-
- (->> '(1 2 3) (-map 'square))
- ⇒ (1 4 9)
- (->> '(1 2 3) (-map 'square) (-remove 'even?))
- ⇒ (1 9)
- (->> '(1 2 3) (-map 'square) (-reduce '+))
- ⇒ 14
-
- -- Macro: --> (x &rest forms)
- Starting with the value of X, thread each expression through FORMS.
-
- Insert X at the position signified by the symbol ‘it’ in the first
- form. If there are more forms, insert the first form at the
- position signified by ‘it’ in in second form, etc.
-
- (--> "def" (concat "abc" it "ghi"))
- ⇒ "abcdefghi"
- (--> "def" (concat "abc" it "ghi") (upcase it))
- ⇒ "ABCDEFGHI"
- (--> "def" (concat "abc" it "ghi") upcase)
- ⇒ "ABCDEFGHI"
-
- -- Macro: -as-> (value variable &rest forms)
- Starting with VALUE, thread VARIABLE through FORMS.
-
- In the first form, bind VARIABLE to VALUE. In the second form,
- bind VARIABLE to the result of the first form, and so forth.
-
- (-as-> 3 my-var (1+ my-var) (list my-var) (mapcar (lambda (ele) (* 2 ele)) my-var))
- ⇒ (8)
- (-as-> 3 my-var 1+)
- ⇒ 4
- (-as-> 3 my-var)
- ⇒ 3
-
- -- Macro: -some-> (x &optional form &rest more)
- When expr is non-nil, thread it through the first form (via ‘->’
- (*note ->::)), and when that result is non-nil, through the next
- form, etc.
-
- (-some-> '(2 3 5))
- ⇒ (2 3 5)
- (-some-> 5 square)
- ⇒ 25
- (-some-> 5 even? square)
- ⇒ nil
-
- -- Macro: -some->> (x &optional form &rest more)
- When expr is non-nil, thread it through the first form (via ‘->>’
- (*note ->>::)), and when that result is non-nil, through the next
- form, etc.
-
- (-some->> '(1 2 3) (-map 'square))
- ⇒ (1 4 9)
- (-some->> '(1 3 5) (-last 'even?) (+ 100))
- ⇒ nil
- (-some->> '(2 4 6) (-last 'even?) (+ 100))
- ⇒ 106
-
- -- Macro: -some--> (expr &rest forms)
- Thread EXPR through FORMS via ‘-->’ (*note -->::), while the result
- is non-nil. When EXPR evaluates to non-nil, thread the result
- through the first of FORMS, and when that result is non-nil, thread
- it through the next form, etc.
-
- (-some--> "def" (concat "abc" it "ghi"))
- ⇒ "abcdefghi"
- (-some--> nil (concat "abc" it "ghi"))
- ⇒ nil
- (-some--> '(0 1) (-remove #'natnump it) (append it it) (-map #'1+ it))
- ⇒ ()
-
- -- Macro: -doto (init &rest forms)
- Evaluate INIT and pass it as argument to FORMS with ‘->’ (*note
- ->::). The RESULT of evaluating INIT is threaded through each of
- FORMS individually using ‘->’ (*note ->::), which see. The return
- value is RESULT, which FORMS may have modified by side effect.
-
- (-doto (list 1 2 3) pop pop)
- ⇒ (3)
- (-doto (cons 1 2) (setcar 3) (setcdr 4))
- ⇒ (3 . 4)
- (gethash 'k (--doto (make-hash-table) (puthash 'k 'v it)))
- ⇒ v
-
-
-File: dash.info, Node: Binding, Next: Side effects, Prev: Threading macros, Up: Functions
-
-2.13 Binding
-============
-
-Macros that combine ‘let’ and ‘let*’ with destructuring and flow
-control.
-
- -- Macro: -when-let ((var val) &rest body)
- If VAL evaluates to non-nil, bind it to VAR and execute body.
-
- Note: binding is done according to ‘-let’ (*note -let::).
-
- (-when-let (match-index (string-match "d" "abcd")) (+ match-index 2))
- ⇒ 5
- (-when-let ((&plist :foo foo) (list :foo "foo")) foo)
- ⇒ "foo"
- (-when-let ((&plist :foo foo) (list :bar "bar")) foo)
- ⇒ nil
-
- -- Macro: -when-let* (vars-vals &rest body)
- If all VALS evaluate to true, bind them to their corresponding VARS
- and execute body. VARS-VALS should be a list of (VAR VAL) pairs.
-
- Note: binding is done according to ‘-let*’ (*note -let*::). VALS
- are evaluated sequentially, and evaluation stops after the first
- nil VAL is encountered.
-
- (-when-let* ((x 5) (y 3) (z (+ y 4))) (+ x y z))
- ⇒ 15
- (-when-let* ((x 5) (y nil) (z 7)) (+ x y z))
- ⇒ nil
-
- -- Macro: -if-let ((var val) then &rest else)
- If VAL evaluates to non-nil, bind it to VAR and do THEN, otherwise
- do ELSE.
-
- Note: binding is done according to ‘-let’ (*note -let::).
-
- (-if-let (match-index (string-match "d" "abc")) (+ match-index 3) 7)
- ⇒ 7
- (--if-let (even? 4) it nil)
- ⇒ t
-
- -- Macro: -if-let* (vars-vals then &rest else)
- If all VALS evaluate to true, bind them to their corresponding VARS
- and do THEN, otherwise do ELSE. VARS-VALS should be a list of (VAR
- VAL) pairs.
-
- Note: binding is done according to ‘-let*’ (*note -let*::). VALS
- are evaluated sequentially, and evaluation stops after the first
- nil VAL is encountered.
-
- (-if-let* ((x 5) (y 3) (z 7)) (+ x y z) "foo")
- ⇒ 15
- (-if-let* ((x 5) (y nil) (z 7)) (+ x y z) "foo")
- ⇒ "foo"
- (-if-let* (((_ _ x) '(nil nil 7))) x)
- ⇒ 7
-
- -- Macro: -let (varlist &rest body)
- Bind variables according to VARLIST then eval BODY.
-
- VARLIST is a list of lists of the form (PATTERN SOURCE). Each
- PATTERN is matched against the SOURCE "structurally". SOURCE is
- only evaluated once for each PATTERN. Each PATTERN is matched
- recursively, and can therefore contain sub-patterns which are
- matched against corresponding sub-expressions of SOURCE.
-
- All the SOURCEs are evalled before any symbols are bound (i.e. "in
- parallel").
-
- If VARLIST only contains one (PATTERN SOURCE) element, you can
- optionally specify it using a vector and discarding the outer-most
- parens. Thus
-
- (-let ((PATTERN SOURCE)) ...)
-
- becomes
-
- (-let [PATTERN SOURCE] ...).
-
- ‘-let’ (*note -let::) uses a convention of not binding places
- (symbols) starting with _ whenever it’s possible. You can use this
- to skip over entries you don’t care about. However, this is not
- *always* possible (as a result of implementation) and these symbols
- might get bound to undefined values.
-
- Following is the overview of supported patterns. Remember that
- patterns can be matched recursively, so every a, b, aK in the
- following can be a matching construct and not necessarily a
- symbol/variable.
-
- Symbol:
-
- a - bind the SOURCE to A. This is just like regular ‘let’.
-
- Conses and lists:
-
- (a) - bind ‘car’ of cons/list to A
-
- (a . b) - bind car of cons to A and ‘cdr’ to B
-
- (a b) - bind car of list to A and ‘cadr’ to B
-
- (a1 a2 a3 ...) - bind 0th car of list to A1, 1st to A2, 2nd to
- A3...
-
- (a1 a2 a3 ... aN . rest) - as above, but bind the Nth cdr to REST.
-
- Vectors:
-
- [a] - bind 0th element of a non-list sequence to A (works with
- vectors, strings, bit arrays...)
-
- [a1 a2 a3 ...] - bind 0th element of non-list sequence to A0, 1st
- to A1, 2nd to A2, ... If the PATTERN is shorter than SOURCE, the
- values at places not in PATTERN are ignored. If the PATTERN is
- longer than SOURCE, an ‘error’ is thrown.
-
- [a1 a2 a3 ... &rest rest] - as above, but bind the rest of the
- sequence to REST. This is conceptually the same as improper list
- matching (a1 a2 ... aN . rest)
-
- Key/value stores:
-
- (&plist key0 a0 ... keyN aN) - bind value mapped by keyK in the
- SOURCE plist to aK. If the value is not found, aK is nil. Uses
- ‘plist-get’ to fetch values.
-
- (&alist key0 a0 ... keyN aN) - bind value mapped by keyK in the
- SOURCE alist to aK. If the value is not found, aK is nil. Uses
- ‘assoc’ to fetch values.
-
- (&hash key0 a0 ... keyN aN) - bind value mapped by keyK in the
- SOURCE hash table to aK. If the value is not found, aK is nil.
- Uses ‘gethash’ to fetch values.
-
- Further, special keyword &keys supports "inline" matching of
- plist-like key-value pairs, similarly to &keys keyword of
- ‘cl-defun’.
-
- (a1 a2 ... aN &keys key1 b1 ... keyN bK)
-
- This binds N values from the list to a1 ... aN, then interprets the
- cdr as a plist (see key/value matching above).
-
- A shorthand notation for kv-destructuring exists which allows the
- patterns be optionally left out and derived from the key name in
- the following fashion:
-
- - a key :foo is converted into ‘foo’ pattern, - a key ’bar is
- converted into ‘bar’ pattern, - a key "baz" is converted into ‘baz’
- pattern.
-
- That is, the entire value under the key is bound to the derived
- variable without any further destructuring.
-
- This is possible only when the form following the key is not a
- valid pattern (i.e. not a symbol, a cons cell or a vector).
- Otherwise the matching proceeds as usual and in case of an invalid
- spec fails with an error.
-
- Thus the patterns are normalized as follows:
-
- ;; derive all the missing patterns (&plist :foo ’bar "baz") =>
- (&plist :foo foo ’bar bar "baz" baz)
-
- ;; we can specify some but not others (&plist :foo ’bar
- explicit-bar) => (&plist :foo foo ’bar explicit-bar)
-
- ;; nothing happens, we store :foo in x (&plist :foo x) => (&plist
- :foo x)
-
- ;; nothing happens, we match recursively (&plist :foo (a b c)) =>
- (&plist :foo (a b c))
-
- You can name the source using the syntax SYMBOL &as PATTERN. This
- syntax works with lists (proper or improper), vectors and all types
- of maps.
-
- (list &as a b c) (list 1 2 3)
-
- binds A to 1, B to 2, C to 3 and LIST to (1 2 3).
-
- Similarly:
-
- (bounds &as beg . end) (cons 1 2)
-
- binds BEG to 1, END to 2 and BOUNDS to (1 . 2).
-
- (items &as first . rest) (list 1 2 3)
-
- binds FIRST to 1, REST to (2 3) and ITEMS to (1 2 3)
-
- [vect &as _ b c] [1 2 3]
-
- binds B to 2, C to 3 and VECT to [1 2 3] (_ avoids binding as
- usual).
-
- (plist &as &plist :b b) (list :a 1 :b 2 :c 3)
-
- binds B to 2 and PLIST to (:a 1 :b 2 :c 3). Same for &alist and
- &hash.
-
- This is especially useful when we want to capture the result of a
- computation and destructure at the same time. Consider the form
- (function-returning-complex-structure) returning a list of two
- vectors with two items each. We want to capture this entire result
- and pass it to another computation, but at the same time we want to
- get the second item from each vector. We can achieve it with
- pattern
-
- (result &as [_ a] [_ b]) (function-returning-complex-structure)
-
- Note: Clojure programmers may know this feature as the ":as
- binding". The difference is that we put the &as at the front
- because we need to support improper list binding.
-
- (-let (([a (b c) d] [1 (2 3) 4])) (list a b c d))
- ⇒ (1 2 3 4)
- (-let [(a b c . d) (list 1 2 3 4 5 6)] (list a b c d))
- ⇒ (1 2 3 (4 5 6))
- (-let [(&plist :foo foo :bar bar) (list :baz 3 :foo 1 :qux 4 :bar 2)] (list foo bar))
- ⇒ (1 2)
-
- -- Macro: -let* (varlist &rest body)
- Bind variables according to VARLIST then eval BODY.
-
- VARLIST is a list of lists of the form (PATTERN SOURCE). Each
- PATTERN is matched against the SOURCE structurally. SOURCE is only
- evaluated once for each PATTERN.
-
- Each SOURCE can refer to the symbols already bound by this VARLIST.
- This is useful if you want to destructure SOURCE recursively but
- also want to name the intermediate structures.
-
- See ‘-let’ (*note -let::) for the list of all possible patterns.
-
- (-let* (((a . b) (cons 1 2)) ((c . d) (cons 3 4))) (list a b c d))
- ⇒ (1 2 3 4)
- (-let* (((a . b) (cons 1 (cons 2 3))) ((c . d) b)) (list a b c d))
- ⇒ (1 (2 . 3) 2 3)
- (-let* (((&alist "foo" foo "bar" bar) (list (cons "foo" 1) (cons "bar" (list 'a 'b 'c)))) ((a b c) bar)) (list foo a b c bar))
- ⇒ (1 a b c (a b c))
-
- -- Macro: -lambda (match-form &rest body)
- Return a lambda which destructures its input as MATCH-FORM and
- executes BODY.
-
- Note that you have to enclose the MATCH-FORM in a pair of parens,
- such that:
-
- (-lambda (x) body) (-lambda (x y ...) body)
-
- has the usual semantics of ‘lambda’. Furthermore, these get
- translated into normal ‘lambda’, so there is no performance
- penalty.
-
- See ‘-let’ (*note -let::) for a description of the destructuring
- mechanism.
-
- (-map (-lambda ((x y)) (+ x y)) '((1 2) (3 4) (5 6)))
- ⇒ (3 7 11)
- (-map (-lambda ([x y]) (+ x y)) '([1 2] [3 4] [5 6]))
- ⇒ (3 7 11)
- (funcall (-lambda ((_ . a) (_ . b)) (-concat a b)) '(1 2 3) '(4 5 6))
- ⇒ (2 3 5 6)
-
- -- Macro: -setq ([match-form val] ...)
- Bind each MATCH-FORM to the value of its VAL.
-
- MATCH-FORM destructuring is done according to the rules of ‘-let’
- (*note -let::).
-
- This macro allows you to bind multiple variables by destructuring
- the value, so for example:
-
- (-setq (a b) x (&plist :c c) plist)
-
- expands roughly speaking to the following code
-
- (setq a (car x) b (cadr x) c (plist-get plist :c))
-
- Care is taken to only evaluate each VAL once so that in case of
- multiple assignments it does not cause unexpected side effects.
-
- (let (a) (-setq a 1) a)
- ⇒ 1
- (let (a b) (-setq (a b) (list 1 2)) (list a b))
- ⇒ (1 2)
- (let (c) (-setq (&plist :c c) (list :c "c")) c)
- ⇒ "c"
-
-
-File: dash.info, Node: Side effects, Next: Destructive operations, Prev: Binding, Up: Functions
-
-2.14 Side effects
-=================
-
-Functions iterating over lists for side effect only.
-
- -- Function: -each (list fn)
- Call FN on each element of LIST. Return nil; this function is
- intended for side effects.
-
- Its anaphoric counterpart is ‘--each’.
-
- For access to the current element’s index in LIST, see
- ‘-each-indexed’ (*note -each-indexed::).
-
- (let (l) (-each '(1 2 3) (lambda (x) (push x l))) l)
- ⇒ (3 2 1)
- (let (l) (--each '(1 2 3) (push it l)) l)
- ⇒ (3 2 1)
- (-each '(1 2 3) #'identity)
- ⇒ nil
-
- -- Function: -each-while (list pred fn)
- Call FN on each ITEM in LIST, while (PRED ITEM) is non-nil. Once
- an ITEM is reached for which PRED returns nil, FN is no longer
- called. Return nil; this function is intended for side effects.
-
- Its anaphoric counterpart is ‘--each-while’.
-
- (let (l) (-each-while '(2 4 5 6) #'even? (lambda (x) (push x l))) l)
- ⇒ (4 2)
- (let (l) (--each-while '(1 2 3 4) (< it 3) (push it l)) l)
- ⇒ (2 1)
- (let ((s 0)) (--each-while '(1 3 4 5) (< it 5) (setq s (+ s it))) s)
- ⇒ 8
-
- -- Function: -each-indexed (list fn)
- Call FN on each index and element of LIST. For each ITEM at INDEX
- in LIST, call (funcall FN INDEX ITEM). Return nil; this function
- is intended for side effects.
-
- See also: ‘-map-indexed’ (*note -map-indexed::).
-
- (let (l) (-each-indexed '(a b c) (lambda (i x) (push (list x i) l))) l)
- ⇒ ((c 2) (b 1) (a 0))
- (let (l) (--each-indexed '(a b c) (push (list it it-index) l)) l)
- ⇒ ((c 2) (b 1) (a 0))
- (let (l) (--each-indexed () (push it l)) l)
- ⇒ ()
-
- -- Function: -each-r (list fn)
- Call FN on each element of LIST in reversed order. Return nil;
- this function is intended for side effects.
-
- Its anaphoric counterpart is ‘--each-r’.
-
- (let (l) (-each-r '(1 2 3) (lambda (x) (push x l))) l)
- ⇒ (1 2 3)
- (let (l) (--each-r '(1 2 3) (push it l)) l)
- ⇒ (1 2 3)
- (-each-r '(1 2 3) #'identity)
- ⇒ nil
-
- -- Function: -each-r-while (list pred fn)
- Call FN on each ITEM in reversed LIST, while (PRED ITEM) is
- non-nil. Once an ITEM is reached for which PRED returns nil, FN is
- no longer called. Return nil; this function is intended for side
- effects.
-
- Its anaphoric counterpart is ‘--each-r-while’.
-
- (let (l) (-each-r-while '(2 4 5 6) #'even? (lambda (x) (push x l))) l)
- ⇒ (6)
- (let (l) (--each-r-while '(1 2 3 4) (>= it 3) (push it l)) l)
- ⇒ (3 4)
- (let ((s 0)) (--each-r-while '(1 2 3 5) (> it 1) (setq s (+ s it))) s)
- ⇒ 10
-
- -- Function: -dotimes (num fn)
- Call FN NUM times, presumably for side effects. FN is called with
- a single argument on successive integers running from 0, inclusive,
- to NUM, exclusive. FN is not called if NUM is less than 1.
-
- This function’s anaphoric counterpart is ‘--dotimes’.
-
- (let (s) (-dotimes 3 (lambda (n) (push n s))) s)
- ⇒ (2 1 0)
- (let (s) (-dotimes 0 (lambda (n) (push n s))) s)
- ⇒ ()
- (let (s) (--dotimes 5 (push it s)) s)
- ⇒ (4 3 2 1 0)
-
-
-File: dash.info, Node: Destructive operations, Next: Function combinators, Prev: Side effects, Up: Functions
-
-2.15 Destructive operations
-===========================
-
-Macros that modify variables holding lists.
-
- -- Macro: !cons (car cdr)
- Destructive: Set CDR to the cons of CAR and CDR.
-
- (let (l) (!cons 5 l) l)
- ⇒ (5)
- (let ((l '(3))) (!cons 5 l) l)
- ⇒ (5 3)
-
- -- Macro: !cdr (list)
- Destructive: Set LIST to the cdr of LIST.
-
- (let ((l '(3))) (!cdr l) l)
- ⇒ ()
- (let ((l '(3 5))) (!cdr l) l)
- ⇒ (5)
-
-
-File: dash.info, Node: Function combinators, Prev: Destructive operations, Up: Functions
-
-2.16 Function combinators
-=========================
-
-Functions that manipulate and compose other functions.
-
- -- Function: -partial (fun &rest args)
- Return a function that is a partial application of FUN to ARGS.
- ARGS is a list of the first N arguments to pass to FUN. The result
- is a new function which does the same as FUN, except that the first
- N arguments are fixed at the values with which this function was
- called.
-
- (funcall (-partial #'+ 5))
- ⇒ 5
- (funcall (-partial #'- 5) 3)
- ⇒ 2
- (funcall (-partial #'+ 5 2) 3)
- ⇒ 10
-
- -- Function: -rpartial (fn &rest args)
- Return a function that is a partial application of FN to ARGS.
- ARGS is a list of the last N arguments to pass to FN. The result
- is a new function which does the same as FN, except that the last N
- arguments are fixed at the values with which this function was
- called. This is like ‘-partial’ (*note -partial::), except the
- arguments are fixed starting from the right rather than the left.
-
- (funcall (-rpartial #'- 5))
- ⇒ -5
- (funcall (-rpartial #'- 5) 8)
- ⇒ 3
- (funcall (-rpartial #'- 5 2) 10)
- ⇒ 3
-
- -- Function: -juxt (&rest fns)
- Return a function that is the juxtaposition of FNS. The returned
- function takes a variable number of ARGS, applies each of FNS in
- turn to ARGS, and returns the list of results.
-
- (funcall (-juxt) 1 2)
- ⇒ ()
- (funcall (-juxt #'+ #'- #'* #'/) 7 5)
- ⇒ (12 2 35 1)
- (mapcar (-juxt #'number-to-string #'1+) '(1 2))
- ⇒ (("1" 2) ("2" 3))
-
- -- Function: -compose (&rest fns)
- Compose FNS into a single composite function. Return a function
- that takes a variable number of ARGS, applies the last function in
- FNS to ARGS, and returns the result of calling each remaining
- function on the result of the previous function, right-to-left. If
- no FNS are given, return a variadic ‘identity’ function.
-
- (funcall (-compose #'- #'1+ #'+) 1 2 3)
- ⇒ -7
- (funcall (-compose #'identity #'1+) 3)
- ⇒ 4
- (mapcar (-compose #'not #'stringp) '(nil ""))
- ⇒ (t nil)
-
- -- Function: -applify (fn)
- Return a function that applies FN to a single list of args. This
- changes the arity of FN from taking N distinct arguments to taking
- 1 argument which is a list of N arguments.
-
- (funcall (-applify #'+) nil)
- ⇒ 0
- (mapcar (-applify #'+) '((1 1 1) (1 2 3) (5 5 5)))
- ⇒ (3 6 15)
- (funcall (-applify #'<) '(3 6))
- ⇒ t
-
- -- Function: -on (op trans)
- Return a function that calls TRANS on each arg and OP on the
- results. The returned function takes a variable number of
- arguments, calls the function TRANS on each one in turn, and then
- passes those results as the list of arguments to OP, in the same
- order.
-
- For example, the following pairs of expressions are morally
- equivalent:
-
- (funcall (-on #’+ #’1+) 1 2 3) = (+ (1+ 1) (1+ 2) (1+ 3)) (funcall
- (-on #’+ #’1+)) = (+)
-
- (-sort (-on #'< #'length) '((1 2 3) (1) (1 2)))
- ⇒ ((1) (1 2) (1 2 3))
- (funcall (-on #'min #'string-to-number) "22" "2" "1" "12")
- ⇒ 1
- (-min-by (-on #'> #'length) '((1 2 3) (4) (1 2)))
- ⇒ (4)
-
- -- Function: -flip (fn)
- Return a function that calls FN with its arguments reversed. The
- returned function takes the same number of arguments as FN.
-
- For example, the following two expressions are morally equivalent:
-
- (funcall (-flip #’-) 1 2) = (- 2 1)
-
- See also: ‘-rotate-args’ (*note -rotate-args::).
-
- (-sort (-flip #'<) '(4 3 6 1))
- ⇒ (6 4 3 1)
- (funcall (-flip #'-) 3 2 1 10)
- ⇒ 4
- (funcall (-flip #'1+) 1)
- ⇒ 2
-
- -- Function: -rotate-args (n fn)
- Return a function that calls FN with args rotated N places to the
- right. The returned function takes the same number of arguments as
- FN, rotates the list of arguments N places to the right (left if N
- is negative) just like ‘-rotate’ (*note -rotate::), and applies FN
- to the result.
-
- See also: ‘-flip’ (*note -flip::).
-
- (funcall (-rotate-args -1 #'list) 1 2 3 4)
- ⇒ (2 3 4 1)
- (funcall (-rotate-args 1 #'-) 1 10 100)
- ⇒ 89
- (funcall (-rotate-args 2 #'list) 3 4 5 1 2)
- ⇒ (1 2 3 4 5)
-
- -- Function: -const (c)
- Return a function that returns C ignoring any additional arguments.
-
- In types: a -> b -> a
-
- (funcall (-const 2) 1 3 "foo")
- ⇒ 2
- (mapcar (-const 1) '("a" "b" "c" "d"))
- ⇒ (1 1 1 1)
- (-sum (mapcar (-const 1) '("a" "b" "c" "d")))
- ⇒ 4
-
- -- Macro: -cut (&rest params)
- Take n-ary function and n arguments and specialize some of them.
- Arguments denoted by <> will be left unspecialized.
-
- See SRFI-26 for detailed description.
-
- (funcall (-cut list 1 <> 3 <> 5) 2 4)
- ⇒ (1 2 3 4 5)
- (-map (-cut funcall <> 5) `(1+ 1- ,(lambda (x) (/ 1.0 x))))
- ⇒ (6 4 0.2)
- (-map (-cut <> 1 2 3) '(list vector string))
- ⇒ ((1 2 3) [1 2 3] "\1\2\3")
-
- -- Function: -not (pred)
- Return a predicate that negates the result of PRED. The returned
- predicate passes its arguments to PRED. If PRED returns nil, the
- result is non-nil; otherwise the result is nil.
-
- See also: ‘-andfn’ (*note -andfn::) and ‘-orfn’ (*note -orfn::).
-
- (funcall (-not #'numberp) "5")
- ⇒ t
- (-sort (-not #'<) '(5 2 1 0 6))
- ⇒ (6 5 2 1 0)
- (-filter (-not (-partial #'< 4)) '(1 2 3 4 5 6 7 8))
- ⇒ (1 2 3 4)
-
- -- Function: -orfn (&rest preds)
- Return a predicate that returns the first non-nil result of PREDS.
- The returned predicate takes a variable number of arguments, passes
- them to each predicate in PREDS in turn until one of them returns
- non-nil, and returns that non-nil result without calling the
- remaining PREDS. If all PREDS return nil, or if no PREDS are
- given, the returned predicate returns nil.
-
- See also: ‘-andfn’ (*note -andfn::) and ‘-not’ (*note -not::).
-
- (-filter (-orfn #'natnump #'booleanp) '(1 nil "a" -4 b c t))
- ⇒ (1 nil t)
- (funcall (-orfn #'symbolp (-cut string-match-p "x" <>)) "axe")
- ⇒ 1
- (funcall (-orfn #'= #'+) 1 1)
- ⇒ t
-
- -- Function: -andfn (&rest preds)
- Return a predicate that returns non-nil if all PREDS do so. The
- returned predicate P takes a variable number of arguments and
- passes them to each predicate in PREDS in turn. If any one of
- PREDS returns nil, P also returns nil without calling the remaining
- PREDS. If all PREDS return non-nil, P returns the last such value.
- If no PREDS are given, P always returns non-nil.
-
- See also: ‘-orfn’ (*note -orfn::) and ‘-not’ (*note -not::).
-
- (-filter (-andfn #'numberp (-cut < <> 5)) '(a 1 b 6 c 2))
- ⇒ (1 2)
- (mapcar (-andfn #'numberp #'1+) '(a 1 b 6))
- ⇒ (nil 2 nil 7)
- (funcall (-andfn #'= #'+) 1 1)
- ⇒ 2
-
- -- Function: -iteratefn (fn n)
- Return a function FN composed N times with itself.
-
- FN is a unary function. If you need to use a function of higher
- arity, use ‘-applify’ (*note -applify::) first to turn it into a
- unary function.
-
- With n = 0, this acts as identity function.
-
- In types: (a -> a) -> Int -> a -> a.
-
- This function satisfies the following law:
-
- (funcall (-iteratefn fn n) init) = (-last-item (-iterate fn init
- (1+ n))).
-
- (funcall (-iteratefn (lambda (x) (* x x)) 3) 2)
- ⇒ 256
- (funcall (-iteratefn '1+ 3) 1)
- ⇒ 4
- (funcall (-iteratefn 'cdr 3) '(1 2 3 4 5))
- ⇒ (4 5)
-
- -- Function: -fixfn (fn &optional equal-test halt-test)
- Return a function that computes the (least) fixpoint of FN.
-
- FN must be a unary function. The returned lambda takes a single
- argument, X, the initial value for the fixpoint iteration. The
- iteration halts when either of the following conditions is
- satisfied:
-
- 1. Iteration converges to the fixpoint, with equality being tested
- using EQUAL-TEST. If EQUAL-TEST is not specified, ‘equal’ is used.
- For functions over the floating point numbers, it may be necessary
- to provide an appropriate approximate comparison test.
-
- 2. HALT-TEST returns a non-nil value. HALT-TEST defaults to a
- simple counter that returns t after ‘-fixfn-max-iterations’, to
- guard against infinite iteration. Otherwise, HALT-TEST must be a
- function that accepts a single argument, the current value of X,
- and returns non-nil as long as iteration should continue. In this
- way, a more sophisticated convergence test may be supplied by the
- caller.
-
- The return value of the lambda is either the fixpoint or, if
- iteration halted before converging, a cons with car ‘halted’ and
- cdr the final output from HALT-TEST.
-
- In types: (a -> a) -> a -> a.
-
- (funcall (-fixfn #'cos #'approx=) 0.7)
- ⇒ 0.7390851332151607
- (funcall (-fixfn (lambda (x) (expt (+ x 10) 0.25))) 2.0)
- ⇒ 1.8555845286409378
- (funcall (-fixfn #'sin #'approx=) 0.1)
- ⇒ (halted . t)
-
- -- Function: -prodfn (&rest fns)
- Take a list of n functions and return a function that takes a list
- of length n, applying i-th function to i-th element of the input
- list. Returns a list of length n.
-
- In types (for n=2): ((a -> b), (c -> d)) -> (a, c) -> (b, d)
-
- This function satisfies the following laws:
-
- (-compose (-prodfn f g ...) (-prodfn f’ g’ ...)) = (-prodfn
- (-compose f f’) (-compose g g’) ...) (-prodfn f g ...) = (-juxt
- (-compose f (-partial ’nth 0)) (-compose g (-partial ’nth 1)) ...)
- (-compose (-prodfn f g ...) (-juxt f’ g’ ...)) = (-juxt (-compose f
- f’) (-compose g g’) ...) (-compose (-partial ’nth n) (-prod f1 f2
- ...)) = (-compose fn (-partial ’nth n))
-
- (funcall (-prodfn '1+ '1- 'number-to-string) '(1 2 3))
- ⇒ (2 1 "3")
- (-map (-prodfn '1+ '1-) '((1 2) (3 4) (5 6) (7 8)))
- ⇒ ((2 1) (4 3) (6 5) (8 7))
- (apply '+ (funcall (-prodfn 'length 'string-to-number) '((1 2 3) "15")))
- ⇒ 18
-
-
-File: dash.info, Node: Development, Next: FDL, Prev: Functions, Up: Top
-
-3 Development
-*************
-
-The Dash repository is hosted on GitHub at
-<https://github.com/magnars/dash.el>.
-
-* Menu:
-
-* Contribute:: How to contribute.
-* Contributors:: List of contributors.
-
-
-File: dash.info, Node: Contribute, Next: Contributors, Up: Development
-
-3.1 Contribute
-==============
-
-Yes, please do. Pure functions in the list manipulation realm only,
-please. There’s a suite of examples/tests in ‘dev/examples.el’, so
-remember to add tests for your additions, or they may get broken later.
-
- Run the tests with ‘make check’. Regenerate the docs with ‘make
-docs’. Contributors are encouraged to install these commands as a Git
-pre-commit hook, so that the tests are always running and the docs are
-always in sync:
-
- $ cp dev/pre-commit.sh .git/hooks/pre-commit
-
- Oh, and don’t edit ‘README.md’ or ‘dash.texi’ directly, as they are
-auto-generated. Instead, change their respective templates
-‘readme-template.md’ or ‘dash-template.texi’.
-
- To ensure that Dash can be distributed with GNU ELPA or Emacs, we
-require that all contributors assign copyright to the Free Software
-Foundation. For more on this, *note (emacs)Copyright Assignment::.
-
-
-File: dash.info, Node: Contributors, Prev: Contribute, Up: Development
-
-3.2 Contributors
-================
-
- • Matus Goljer (https://github.com/Fuco1) contributed lots of
- features and functions.
- • Takafumi Arakaki (https://github.com/tkf) contributed ‘-group-by’.
- • tali713 (https://github.com/tali713) is the author of ‘-applify’.
- • Víctor M. Valenzuela (https://github.com/vemv) contributed
- ‘-repeat’.
- • Nic Ferrier (https://github.com/nicferrier) contributed ‘-cons*’.
- • Wilfred Hughes (https://github.com/Wilfred) contributed ‘-slice’,
- ‘-first-item’, and ‘-last-item’.
- • Emanuel Evans (https://github.com/shosti) contributed ‘-if-let’,
- ‘-when-let’, and ‘-insert-at’.
- • Johan Andersson (https://github.com/rejeep) contributed ‘-sum’,
- ‘-product’, and ‘-same-items?’.
- • Christina Whyte (https://github.com/kurisuwhyte) contributed
- ‘-compose’.
- • Steve Lamb (https://github.com/steventlamb) contributed ‘-cycle’,
- ‘-pad’, ‘-annotate’, ‘-zip-fill’, and a variadic version of ‘-zip’.
- • Fredrik Bergroth (https://github.com/fbergroth) made the ‘-if-let’
- family use ‘-let’ destructuring and improved the script for
- generating documentation.
- • Mark Oteiza (https://github.com/holomorph) contributed ‘-iota’ and
- the script to create an Info manual.
- • Vasilij Schneidermann (https://github.com/wasamasa) contributed
- ‘-some’.
- • William West (https://github.com/occidens) made ‘-fixfn’ more
- robust at handling floats.
- • Cam Saul (https://github.com/camsaul) contributed ‘-some->’,
- ‘-some->>’, and ‘-some-->’.
- • Basil L. Contovounesios (https://github.com/basil-conto)
- contributed ‘-common-prefix’, ‘-common-suffix’, and various other
- improvements.
- • Paul Pogonyshev (https://github.com/doublep) contributed ‘-each-r’
- and ‘-each-r-while’.
-
- Thanks!
-
- New contributors are very welcome. *Note Contribute::.
-
-
-File: dash.info, Node: FDL, Next: GPL, Prev: Development, Up: Top
-
-Appendix A GNU Free Documentation License
-*****************************************
-
- Version 1.3, 3 November 2008
-
- Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
- <https://fsf.org/>
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 0. PREAMBLE
-
- The purpose of this License is to make a manual, textbook, or other
- functional and useful document “free†in the sense of freedom: to
- assure everyone the effective freedom to copy and redistribute it,
- with or without modifying it, either commercially or
- noncommercially. Secondarily, this License preserves for the
- author and publisher a way to get credit for their work, while not
- being considered responsible for modifications made by others.
-
- This License is a kind of “copyleftâ€, which means that derivative
- works of the document must themselves be free in the same sense.
- It complements the GNU General Public License, which is a copyleft
- license designed for free software.
-
- We have designed this License in order to use it for manuals for
- free software, because free software needs free documentation: a
- free program should come with manuals providing the same freedoms
- that the software does. But this License is not limited to
- software manuals; it can be used for any textual work, regardless
- of subject matter or whether it is published as a printed book. We
- recommend this License principally for works whose purpose is
- instruction or reference.
-
- 1. APPLICABILITY AND DEFINITIONS
-
- This License applies to any manual or other work, in any medium,
- that contains a notice placed by the copyright holder saying it can
- be distributed under the terms of this License. Such a notice
- grants a world-wide, royalty-free license, unlimited in duration,
- to use that work under the conditions stated herein. The
- “Documentâ€, below, refers to any such manual or work. Any member
- of the public is a licensee, and is addressed as “youâ€. You accept
- the license if you copy, modify or distribute the work in a way
- requiring permission under copyright law.
-
- A “Modified Version†of the Document means any work containing the
- Document or a portion of it, either copied verbatim, or with
- modifications and/or translated into another language.
-
- A “Secondary Section†is a named appendix or a front-matter section
- of the Document that deals exclusively with the relationship of the
- publishers or authors of the Document to the Document’s overall
- subject (or to related matters) and contains nothing that could
- fall directly within that overall subject. (Thus, if the Document
- is in part a textbook of mathematics, a Secondary Section may not
- explain any mathematics.) The relationship could be a matter of
- historical connection with the subject or with related matters, or
- of legal, commercial, philosophical, ethical or political position
- regarding them.
-
- The “Invariant Sections†are certain Secondary Sections whose
- titles are designated, as being those of Invariant Sections, in the
- notice that says that the Document is released under this License.
- If a section does not fit the above definition of Secondary then it
- is not allowed to be designated as Invariant. The Document may
- contain zero Invariant Sections. If the Document does not identify
- any Invariant Sections then there are none.
-
- The “Cover Texts†are certain short passages of text that are
- listed, as Front-Cover Texts or Back-Cover Texts, in the notice
- that says that the Document is released under this License. A
- Front-Cover Text may be at most 5 words, and a Back-Cover Text may
- be at most 25 words.
-
- A “Transparent†copy of the Document means a machine-readable copy,
- represented in a format whose specification is available to the
- general public, that is suitable for revising the document
- straightforwardly with generic text editors or (for images composed
- of pixels) generic paint programs or (for drawings) some widely
- available drawing editor, and that is suitable for input to text
- formatters or for automatic translation to a variety of formats
- suitable for input to text formatters. A copy made in an otherwise
- Transparent file format whose markup, or absence of markup, has
- been arranged to thwart or discourage subsequent modification by
- readers is not Transparent. An image format is not Transparent if
- used for any substantial amount of text. A copy that is not
- “Transparent†is called “Opaqueâ€.
-
- Examples of suitable formats for Transparent copies include plain
- ASCII without markup, Texinfo input format, LaTeX input format,
- SGML or XML using a publicly available DTD, and standard-conforming
- simple HTML, PostScript or PDF designed for human modification.
- Examples of transparent image formats include PNG, XCF and JPG.
- Opaque formats include proprietary formats that can be read and
- edited only by proprietary word processors, SGML or XML for which
- the DTD and/or processing tools are not generally available, and
- the machine-generated HTML, PostScript or PDF produced by some word
- processors for output purposes only.
-
- The “Title Page†means, for a printed book, the title page itself,
- plus such following pages as are needed to hold, legibly, the
- material this License requires to appear in the title page. For
- works in formats which do not have any title page as such, “Title
- Page†means the text near the most prominent appearance of the
- work’s title, preceding the beginning of the body of the text.
-
- The “publisher†means any person or entity that distributes copies
- of the Document to the public.
-
- A section “Entitled XYZ†means a named subunit of the Document
- whose title either is precisely XYZ or contains XYZ in parentheses
- following text that translates XYZ in another language. (Here XYZ
- stands for a specific section name mentioned below, such as
- “Acknowledgementsâ€, “Dedicationsâ€, “Endorsementsâ€, or “Historyâ€.)
- To “Preserve the Title†of such a section when you modify the
- Document means that it remains a section “Entitled XYZ†according
- to this definition.
-
- The Document may include Warranty Disclaimers next to the notice
- which states that this License applies to the Document. These
- Warranty Disclaimers are considered to be included by reference in
- this License, but only as regards disclaiming warranties: any other
- implication that these Warranty Disclaimers may have is void and
- has no effect on the meaning of this License.
-
- 2. VERBATIM COPYING
-
- You may copy and distribute the Document in any medium, either
- commercially or noncommercially, provided that this License, the
- copyright notices, and the license notice saying this License
- applies to the Document are reproduced in all copies, and that you
- add no other conditions whatsoever to those of this License. You
- may not use technical measures to obstruct or control the reading
- or further copying of the copies you make or distribute. However,
- you may accept compensation in exchange for copies. If you
- distribute a large enough number of copies you must also follow the
- conditions in section 3.
-
- You may also lend copies, under the same conditions stated above,
- and you may publicly display copies.
-
- 3. COPYING IN QUANTITY
-
- If you publish printed copies (or copies in media that commonly
- have printed covers) of the Document, numbering more than 100, and
- the Document’s license notice requires Cover Texts, you must
- enclose the copies in covers that carry, clearly and legibly, all
- these Cover Texts: Front-Cover Texts on the front cover, and
- Back-Cover Texts on the back cover. Both covers must also clearly
- and legibly identify you as the publisher of these copies. The
- front cover must present the full title with all words of the title
- equally prominent and visible. You may add other material on the
- covers in addition. Copying with changes limited to the covers, as
- long as they preserve the title of the Document and satisfy these
- conditions, can be treated as verbatim copying in other respects.
-
- If the required texts for either cover are too voluminous to fit
- legibly, you should put the first ones listed (as many as fit
- reasonably) on the actual cover, and continue the rest onto
- adjacent pages.
-
- If you publish or distribute Opaque copies of the Document
- numbering more than 100, you must either include a machine-readable
- Transparent copy along with each Opaque copy, or state in or with
- each Opaque copy a computer-network location from which the general
- network-using public has access to download using public-standard
- network protocols a complete Transparent copy of the Document, free
- of added material. If you use the latter option, you must take
- reasonably prudent steps, when you begin distribution of Opaque
- copies in quantity, to ensure that this Transparent copy will
- remain thus accessible at the stated location until at least one
- year after the last time you distribute an Opaque copy (directly or
- through your agents or retailers) of that edition to the public.
-
- It is requested, but not required, that you contact the authors of
- the Document well before redistributing any large number of copies,
- to give them a chance to provide you with an updated version of the
- Document.
-
- 4. MODIFICATIONS
-
- You may copy and distribute a Modified Version of the Document
- under the conditions of sections 2 and 3 above, provided that you
- release the Modified Version under precisely this License, with the
- Modified Version filling the role of the Document, thus licensing
- distribution and modification of the Modified Version to whoever
- possesses a copy of it. In addition, you must do these things in
- the Modified Version:
-
- A. Use in the Title Page (and on the covers, if any) a title
- distinct from that of the Document, and from those of previous
- versions (which should, if there were any, be listed in the
- History section of the Document). You may use the same title
- as a previous version if the original publisher of that
- version gives permission.
-
- B. List on the Title Page, as authors, one or more persons or
- entities responsible for authorship of the modifications in
- the Modified Version, together with at least five of the
- principal authors of the Document (all of its principal
- authors, if it has fewer than five), unless they release you
- from this requirement.
-
- C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
- D. Preserve all the copyright notices of the Document.
-
- E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
- F. Include, immediately after the copyright notices, a license
- notice giving the public permission to use the Modified
- Version under the terms of this License, in the form shown in
- the Addendum below.
-
- G. Preserve in that license notice the full lists of Invariant
- Sections and required Cover Texts given in the Document’s
- license notice.
-
- H. Include an unaltered copy of this License.
-
- I. Preserve the section Entitled “Historyâ€, Preserve its Title,
- and add to it an item stating at least the title, year, new
- authors, and publisher of the Modified Version as given on the
- Title Page. If there is no section Entitled “History†in the
- Document, create one stating the title, year, authors, and
- publisher of the Document as given on its Title Page, then add
- an item describing the Modified Version as stated in the
- previous sentence.
-
- J. Preserve the network location, if any, given in the Document
- for public access to a Transparent copy of the Document, and
- likewise the network locations given in the Document for
- previous versions it was based on. These may be placed in the
- “History†section. You may omit a network location for a work
- that was published at least four years before the Document
- itself, or if the original publisher of the version it refers
- to gives permission.
-
- K. For any section Entitled “Acknowledgements†or “Dedicationsâ€,
- Preserve the Title of the section, and preserve in the section
- all the substance and tone of each of the contributor
- acknowledgements and/or dedications given therein.
-
- L. Preserve all the Invariant Sections of the Document, unaltered
- in their text and in their titles. Section numbers or the
- equivalent are not considered part of the section titles.
-
- M. Delete any section Entitled “Endorsementsâ€. Such a section
- may not be included in the Modified Version.
-
- N. Do not retitle any existing section to be Entitled
- “Endorsements†or to conflict in title with any Invariant
- Section.
-
- O. Preserve any Warranty Disclaimers.
-
- If the Modified Version includes new front-matter sections or
- appendices that qualify as Secondary Sections and contain no
- material copied from the Document, you may at your option designate
- some or all of these sections as invariant. To do this, add their
- titles to the list of Invariant Sections in the Modified Version’s
- license notice. These titles must be distinct from any other
- section titles.
-
- You may add a section Entitled “Endorsementsâ€, provided it contains
- nothing but endorsements of your Modified Version by various
- parties—for example, statements of peer review or that the text has
- been approved by an organization as the authoritative definition of
- a standard.
-
- You may add a passage of up to five words as a Front-Cover Text,
- and a passage of up to 25 words as a Back-Cover Text, to the end of
- the list of Cover Texts in the Modified Version. Only one passage
- of Front-Cover Text and one of Back-Cover Text may be added by (or
- through arrangements made by) any one entity. If the Document
- already includes a cover text for the same cover, previously added
- by you or by arrangement made by the same entity you are acting on
- behalf of, you may not add another; but you may replace the old
- one, on explicit permission from the previous publisher that added
- the old one.
-
- The author(s) and publisher(s) of the Document do not by this
- License give permission to use their names for publicity for or to
- assert or imply endorsement of any Modified Version.
-
- 5. COMBINING DOCUMENTS
-
- You may combine the Document with other documents released under
- this License, under the terms defined in section 4 above for
- modified versions, provided that you include in the combination all
- of the Invariant Sections of all of the original documents,
- unmodified, and list them all as Invariant Sections of your
- combined work in its license notice, and that you preserve all
- their Warranty Disclaimers.
-
- The combined work need only contain one copy of this License, and
- multiple identical Invariant Sections may be replaced with a single
- copy. If there are multiple Invariant Sections with the same name
- but different contents, make the title of each such section unique
- by adding at the end of it, in parentheses, the name of the
- original author or publisher of that section if known, or else a
- unique number. Make the same adjustment to the section titles in
- the list of Invariant Sections in the license notice of the
- combined work.
-
- In the combination, you must combine any sections Entitled
- “History†in the various original documents, forming one section
- Entitled “Historyâ€; likewise combine any sections Entitled
- “Acknowledgementsâ€, and any sections Entitled “Dedicationsâ€. You
- must delete all sections Entitled “Endorsements.â€
-
- 6. COLLECTIONS OF DOCUMENTS
-
- You may make a collection consisting of the Document and other
- documents released under this License, and replace the individual
- copies of this License in the various documents with a single copy
- that is included in the collection, provided that you follow the
- rules of this License for verbatim copying of each of the documents
- in all other respects.
-
- You may extract a single document from such a collection, and
- distribute it individually under this License, provided you insert
- a copy of this License into the extracted document, and follow this
- License in all other respects regarding verbatim copying of that
- document.
-
- 7. AGGREGATION WITH INDEPENDENT WORKS
-
- A compilation of the Document or its derivatives with other
- separate and independent documents or works, in or on a volume of a
- storage or distribution medium, is called an “aggregate†if the
- copyright resulting from the compilation is not used to limit the
- legal rights of the compilation’s users beyond what the individual
- works permit. When the Document is included in an aggregate, this
- License does not apply to the other works in the aggregate which
- are not themselves derivative works of the Document.
-
- If the Cover Text requirement of section 3 is applicable to these
- copies of the Document, then if the Document is less than one half
- of the entire aggregate, the Document’s Cover Texts may be placed
- on covers that bracket the Document within the aggregate, or the
- electronic equivalent of covers if the Document is in electronic
- form. Otherwise they must appear on printed covers that bracket
- the whole aggregate.
-
- 8. TRANSLATION
-
- Translation is considered a kind of modification, so you may
- distribute translations of the Document under the terms of section
- 4. Replacing Invariant Sections with translations requires special
- permission from their copyright holders, but you may include
- translations of some or all Invariant Sections in addition to the
- original versions of these Invariant Sections. You may include a
- translation of this License, and all the license notices in the
- Document, and any Warranty Disclaimers, provided that you also
- include the original English version of this License and the
- original versions of those notices and disclaimers. In case of a
- disagreement between the translation and the original version of
- this License or a notice or disclaimer, the original version will
- prevail.
-
- If a section in the Document is Entitled “Acknowledgementsâ€,
- “Dedicationsâ€, or “Historyâ€, the requirement (section 4) to
- Preserve its Title (section 1) will typically require changing the
- actual title.
-
- 9. TERMINATION
-
- You may not copy, modify, sublicense, or distribute the Document
- except as expressly provided under this License. Any attempt
- otherwise to copy, modify, sublicense, or distribute it is void,
- and will automatically terminate your rights under this License.
-
- However, if you cease all violation of this License, then your
- license from a particular copyright holder is reinstated (a)
- provisionally, unless and until the copyright holder explicitly and
- finally terminates your license, and (b) permanently, if the
- copyright holder fails to notify you of the violation by some
- reasonable means prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
- reinstated permanently if the copyright holder notifies you of the
- violation by some reasonable means, this is the first time you have
- received notice of violation of this License (for any work) from
- that copyright holder, and you cure the violation prior to 30 days
- after your receipt of the notice.
-
- Termination of your rights under this section does not terminate
- the licenses of parties who have received copies or rights from you
- under this License. If your rights have been terminated and not
- permanently reinstated, receipt of a copy of some or all of the
- same material does not give you any rights to use it.
-
- 10. FUTURE REVISIONS OF THIS LICENSE
-
- The Free Software Foundation may publish new, revised versions of
- the GNU Free Documentation License from time to time. Such new
- versions will be similar in spirit to the present version, but may
- differ in detail to address new problems or concerns. See
- <https://www.gnu.org/licenses/>.
-
- Each version of the License is given a distinguishing version
- number. If the Document specifies that a particular numbered
- version of this License “or any later version†applies to it, you
- have the option of following the terms and conditions either of
- that specified version or of any later version that has been
- published (not as a draft) by the Free Software Foundation. If the
- Document does not specify a version number of this License, you may
- choose any version ever published (not as a draft) by the Free
- Software Foundation. If the Document specifies that a proxy can
- decide which future versions of this License can be used, that
- proxy’s public statement of acceptance of a version permanently
- authorizes you to choose that version for the Document.
-
- 11. RELICENSING
-
- “Massive Multiauthor Collaboration Site†(or “MMC Siteâ€) means any
- World Wide Web server that publishes copyrightable works and also
- provides prominent facilities for anybody to edit those works. A
- public wiki that anybody can edit is an example of such a server.
- A “Massive Multiauthor Collaboration†(or “MMCâ€) contained in the
- site means any set of copyrightable works thus published on the MMC
- site.
-
- “CC-BY-SA†means the Creative Commons Attribution-Share Alike 3.0
- license published by Creative Commons Corporation, a not-for-profit
- corporation with a principal place of business in San Francisco,
- California, as well as future copyleft versions of that license
- published by that same organization.
-
- “Incorporate†means to publish or republish a Document, in whole or
- in part, as part of another Document.
-
- An MMC is “eligible for relicensing†if it is licensed under this
- License, and if all works that were first published under this
- License somewhere other than this MMC, and subsequently
- incorporated in whole or in part into the MMC, (1) had no cover
- texts or invariant sections, and (2) were thus incorporated prior
- to November 1, 2008.
-
- The operator of an MMC Site may republish an MMC contained in the
- site under CC-BY-SA on the same site at any time before August 1,
- 2009, provided the MMC is eligible for relicensing.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
- Copyright (C) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
- Texts. A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
-
- If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the “with...Texts.†line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with
- the Front-Cover Texts being LIST, and with the Back-Cover Texts
- being LIST.
-
- If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of free
-software license, such as the GNU General Public License, to permit
-their use in free software.
-
-
-File: dash.info, Node: GPL, Next: Index, Prev: FDL, Up: Top
-
-Appendix B GNU General Public License
-*************************************
-
- Version 3, 29 June 2007
-
- Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
-
- Everyone is permitted to copy and distribute verbatim copies of this
- license document, but changing it is not allowed.
-
-Preamble
-========
-
-The GNU General Public License is a free, copyleft license for software
-and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program—to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers’ and authors’ protection, the GPL clearly explains
-that there is no warranty for this free software. For both users’ and
-authors’ sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users’ freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
-TERMS AND CONDITIONS
-====================
-
- 0. Definitions.
-
- “This License†refers to version 3 of the GNU General Public
- License.
-
- “Copyright†also means copyright-like laws that apply to other
- kinds of works, such as semiconductor masks.
-
- “The Program†refers to any copyrightable work licensed under this
- License. Each licensee is addressed as “youâ€. “Licensees†and
- “recipients†may be individuals or organizations.
-
- To “modify†a work means to copy from or adapt all or part of the
- work in a fashion requiring copyright permission, other than the
- making of an exact copy. The resulting work is called a “modified
- version†of the earlier work or a work “based on†the earlier work.
-
- A “covered work†means either the unmodified Program or a work
- based on the Program.
-
- To “propagate†a work means to do anything with it that, without
- permission, would make you directly or secondarily liable for
- infringement under applicable copyright law, except executing it on
- a computer or modifying a private copy. Propagation includes
- copying, distribution (with or without modification), making
- available to the public, and in some countries other activities as
- well.
-
- To “convey†a work means any kind of propagation that enables other
- parties to make or receive copies. Mere interaction with a user
- through a computer network, with no transfer of a copy, is not
- conveying.
-
- An interactive user interface displays “Appropriate Legal Noticesâ€
- to the extent that it includes a convenient and prominently visible
- feature that (1) displays an appropriate copyright notice, and (2)
- tells the user that there is no warranty for the work (except to
- the extent that warranties are provided), that licensees may convey
- the work under this License, and how to view a copy of this
- License. If the interface presents a list of user commands or
- options, such as a menu, a prominent item in the list meets this
- criterion.
-
- 1. Source Code.
-
- The “source code†for a work means the preferred form of the work
- for making modifications to it. “Object code†means any non-source
- form of a work.
-
- A “Standard Interface†means an interface that either is an
- official standard defined by a recognized standards body, or, in
- the case of interfaces specified for a particular programming
- language, one that is widely used among developers working in that
- language.
-
- The “System Libraries†of an executable work include anything,
- other than the work as a whole, that (a) is included in the normal
- form of packaging a Major Component, but which is not part of that
- Major Component, and (b) serves only to enable use of the work with
- that Major Component, or to implement a Standard Interface for
- which an implementation is available to the public in source code
- form. A “Major Componentâ€, in this context, means a major
- essential component (kernel, window system, and so on) of the
- specific operating system (if any) on which the executable work
- runs, or a compiler used to produce the work, or an object code
- interpreter used to run it.
-
- The “Corresponding Source†for a work in object code form means all
- the source code needed to generate, install, and (for an executable
- work) run the object code and to modify the work, including scripts
- to control those activities. However, it does not include the
- work’s System Libraries, or general-purpose tools or generally
- available free programs which are used unmodified in performing
- those activities but which are not part of the work. For example,
- Corresponding Source includes interface definition files associated
- with source files for the work, and the source code for shared
- libraries and dynamically linked subprograms that the work is
- specifically designed to require, such as by intimate data
- communication or control flow between those subprograms and other
- parts of the work.
-
- The Corresponding Source need not include anything that users can
- regenerate automatically from other parts of the Corresponding
- Source.
-
- The Corresponding Source for a work in source code form is that
- same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
- copyright on the Program, and are irrevocable provided the stated
- conditions are met. This License explicitly affirms your unlimited
- permission to run the unmodified Program. The output from running
- a covered work is covered by this License only if the output, given
- its content, constitutes a covered work. This License acknowledges
- your rights of fair use or other equivalent, as provided by
- copyright law.
-
- You may make, run and propagate covered works that you do not
- convey, without conditions so long as your license otherwise
- remains in force. You may convey covered works to others for the
- sole purpose of having them make modifications exclusively for you,
- or provide you with facilities for running those works, provided
- that you comply with the terms of this License in conveying all
- material for which you do not control copyright. Those thus making
- or running the covered works for you must do so exclusively on your
- behalf, under your direction and control, on terms that prohibit
- them from making any copies of your copyrighted material outside
- their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
- the conditions stated below. Sublicensing is not allowed; section
- 10 makes it unnecessary.
-
- 3. Protecting Users’ Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
- measure under any applicable law fulfilling obligations under
- article 11 of the WIPO copyright treaty adopted on 20 December
- 1996, or similar laws prohibiting or restricting circumvention of
- such measures.
-
- When you convey a covered work, you waive any legal power to forbid
- circumvention of technological measures to the extent such
- circumvention is effected by exercising rights under this License
- with respect to the covered work, and you disclaim any intention to
- limit operation or modification of the work as a means of
- enforcing, against the work’s users, your or third parties’ legal
- rights to forbid circumvention of technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program’s source code as you
- receive it, in any medium, provided that you conspicuously and
- appropriately publish on each copy an appropriate copyright notice;
- keep intact all notices stating that this License and any
- non-permissive terms added in accord with section 7 apply to the
- code; keep intact all notices of the absence of any warranty; and
- give all recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
- and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
- produce it from the Program, in the form of source code under the
- terms of section 4, provided that you also meet all of these
- conditions:
-
- a. The work must carry prominent notices stating that you
- modified it, and giving a relevant date.
-
- b. The work must carry prominent notices stating that it is
- released under this License and any conditions added under
- section 7. This requirement modifies the requirement in
- section 4 to “keep intact all noticesâ€.
-
- c. You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable
- section 7 additional terms, to the whole of the work, and all
- its parts, regardless of how they are packaged. This License
- gives no permission to license the work in any other way, but
- it does not invalidate such permission if you have separately
- received it.
-
- d. If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has
- interactive interfaces that do not display Appropriate Legal
- Notices, your work need not make them do so.
-
- A compilation of a covered work with other separate and independent
- works, which are not by their nature extensions of the covered
- work, and which are not combined with it such as to form a larger
- program, in or on a volume of a storage or distribution medium, is
- called an “aggregate†if the compilation and its resulting
- copyright are not used to limit the access or legal rights of the
- compilation’s users beyond what the individual works permit.
- Inclusion of a covered work in an aggregate does not cause this
- License to apply to the other parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
- of sections 4 and 5, provided that you also convey the
- machine-readable Corresponding Source under the terms of this
- License, in one of these ways:
-
- a. Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b. Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that
- product model, to give anyone who possesses the object code
- either (1) a copy of the Corresponding Source for all the
- software in the product that is covered by this License, on a
- durable physical medium customarily used for software
- interchange, for a price no more than your reasonable cost of
- physically performing this conveying of source, or (2) access
- to copy the Corresponding Source from a network server at no
- charge.
-
- c. Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially,
- and only if you received the object code with such an offer,
- in accord with subsection 6b.
-
- d. Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to
- the Corresponding Source in the same way through the same
- place at no further charge. You need not require recipients
- to copy the Corresponding Source along with the object code.
- If the place to copy the object code is a network server, the
- Corresponding Source may be on a different server (operated by
- you or a third party) that supports equivalent copying
- facilities, provided you maintain clear directions next to the
- object code saying where to find the Corresponding Source.
- Regardless of what server hosts the Corresponding Source, you
- remain obligated to ensure that it is available for as long as
- needed to satisfy these requirements.
-
- e. Convey the object code using peer-to-peer transmission,
- provided you inform other peers where the object code and
- Corresponding Source of the work are being offered to the
- general public at no charge under subsection 6d.
-
- A separable portion of the object code, whose source code is
- excluded from the Corresponding Source as a System Library, need
- not be included in conveying the object code work.
-
- A “User Product†is either (1) a “consumer productâ€, which means
- any tangible personal property which is normally used for personal,
- family, or household purposes, or (2) anything designed or sold for
- incorporation into a dwelling. In determining whether a product is
- a consumer product, doubtful cases shall be resolved in favor of
- coverage. For a particular product received by a particular user,
- “normally used†refers to a typical or common use of that class of
- product, regardless of the status of the particular user or of the
- way in which the particular user actually uses, or expects or is
- expected to use, the product. A product is a consumer product
- regardless of whether the product has substantial commercial,
- industrial or non-consumer uses, unless such uses represent the
- only significant mode of use of the product.
-
- “Installation Information†for a User Product means any methods,
- procedures, authorization keys, or other information required to
- install and execute modified versions of a covered work in that
- User Product from a modified version of its Corresponding Source.
- The information must suffice to ensure that the continued
- functioning of the modified object code is in no case prevented or
- interfered with solely because modification has been made.
-
- If you convey an object code work under this section in, or with,
- or specifically for use in, a User Product, and the conveying
- occurs as part of a transaction in which the right of possession
- and use of the User Product is transferred to the recipient in
- perpetuity or for a fixed term (regardless of how the transaction
- is characterized), the Corresponding Source conveyed under this
- section must be accompanied by the Installation Information. But
- this requirement does not apply if neither you nor any third party
- retains the ability to install modified object code on the User
- Product (for example, the work has been installed in ROM).
-
- The requirement to provide Installation Information does not
- include a requirement to continue to provide support service,
- warranty, or updates for a work that has been modified or installed
- by the recipient, or for the User Product in which it has been
- modified or installed. Access to a network may be denied when the
- modification itself materially and adversely affects the operation
- of the network or violates the rules and protocols for
- communication across the network.
-
- Corresponding Source conveyed, and Installation Information
- provided, in accord with this section must be in a format that is
- publicly documented (and with an implementation available to the
- public in source code form), and must require no special password
- or key for unpacking, reading or copying.
-
- 7. Additional Terms.
-
- “Additional permissions†are terms that supplement the terms of
- this License by making exceptions from one or more of its
- conditions. Additional permissions that are applicable to the
- entire Program shall be treated as though they were included in
- this License, to the extent that they are valid under applicable
- law. If additional permissions apply only to part of the Program,
- that part may be used separately under those permissions, but the
- entire Program remains governed by this License without regard to
- the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
- remove any additional permissions from that copy, or from any part
- of it. (Additional permissions may be written to require their own
- removal in certain cases when you modify the work.) You may place
- additional permissions on material, added by you to a covered work,
- for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material
- you add to a covered work, you may (if authorized by the copyright
- holders of that material) supplement the terms of this License with
- terms:
-
- a. Disclaiming warranty or limiting liability differently from
- the terms of sections 15 and 16 of this License; or
-
- b. Requiring preservation of specified reasonable legal notices
- or author attributions in that material or in the Appropriate
- Legal Notices displayed by works containing it; or
-
- c. Prohibiting misrepresentation of the origin of that material,
- or requiring that modified versions of such material be marked
- in reasonable ways as different from the original version; or
-
- d. Limiting the use for publicity purposes of names of licensors
- or authors of the material; or
-
- e. Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f. Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified
- versions of it) with contractual assumptions of liability to
- the recipient, for any liability that these contractual
- assumptions directly impose on those licensors and authors.
-
- All other non-permissive additional terms are considered “further
- restrictions†within the meaning of section 10. If the Program as
- you received it, or any part of it, contains a notice stating that
- it is governed by this License along with a term that is a further
- restriction, you may remove that term. If a license document
- contains a further restriction but permits relicensing or conveying
- under this License, you may add to a covered work material governed
- by the terms of that license document, provided that the further
- restriction does not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
- must place, in the relevant source files, a statement of the
- additional terms that apply to those files, or a notice indicating
- where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in
- the form of a separately written license, or stated as exceptions;
- the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
- provided under this License. Any attempt otherwise to propagate or
- modify it is void, and will automatically terminate your rights
- under this License (including any patent licenses granted under the
- third paragraph of section 11).
-
- However, if you cease all violation of this License, then your
- license from a particular copyright holder is reinstated (a)
- provisionally, unless and until the copyright holder explicitly and
- finally terminates your license, and (b) permanently, if the
- copyright holder fails to notify you of the violation by some
- reasonable means prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
- reinstated permanently if the copyright holder notifies you of the
- violation by some reasonable means, this is the first time you have
- received notice of violation of this License (for any work) from
- that copyright holder, and you cure the violation prior to 30 days
- after your receipt of the notice.
-
- Termination of your rights under this section does not terminate
- the licenses of parties who have received copies or rights from you
- under this License. If your rights have been terminated and not
- permanently reinstated, you do not qualify to receive new licenses
- for the same material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
- run a copy of the Program. Ancillary propagation of a covered work
- occurring solely as a consequence of using peer-to-peer
- transmission to receive a copy likewise does not require
- acceptance. However, nothing other than this License grants you
- permission to propagate or modify any covered work. These actions
- infringe copyright if you do not accept this License. Therefore,
- by modifying or propagating a covered work, you indicate your
- acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
- receives a license from the original licensors, to run, modify and
- propagate that work, subject to this License. You are not
- responsible for enforcing compliance by third parties with this
- License.
-
- An “entity transaction†is a transaction transferring control of an
- organization, or substantially all assets of one, or subdividing an
- organization, or merging organizations. If propagation of a
- covered work results from an entity transaction, each party to that
- transaction who receives a copy of the work also receives whatever
- licenses to the work the party’s predecessor in interest had or
- could give under the previous paragraph, plus a right to possession
- of the Corresponding Source of the work from the predecessor in
- interest, if the predecessor has it or can get it with reasonable
- efforts.
-
- You may not impose any further restrictions on the exercise of the
- rights granted or affirmed under this License. For example, you
- may not impose a license fee, royalty, or other charge for exercise
- of rights granted under this License, and you may not initiate
- litigation (including a cross-claim or counterclaim in a lawsuit)
- alleging that any patent claim is infringed by making, using,
- selling, offering for sale, or importing the Program or any portion
- of it.
-
- 11. Patents.
-
- A “contributor†is a copyright holder who authorizes use under this
- License of the Program or a work on which the Program is based.
- The work thus licensed is called the contributor’s “contributor
- versionâ€.
-
- A contributor’s “essential patent claims†are all patent claims
- owned or controlled by the contributor, whether already acquired or
- hereafter acquired, that would be infringed by some manner,
- permitted by this License, of making, using, or selling its
- contributor version, but do not include claims that would be
- infringed only as a consequence of further modification of the
- contributor version. For purposes of this definition, “controlâ€
- includes the right to grant patent sublicenses in a manner
- consistent with the requirements of this License.
-
- Each contributor grants you a non-exclusive, worldwide,
- royalty-free patent license under the contributor’s essential
- patent claims, to make, use, sell, offer for sale, import and
- otherwise run, modify and propagate the contents of its contributor
- version.
-
- In the following three paragraphs, a “patent license†is any
- express agreement or commitment, however denominated, not to
- enforce a patent (such as an express permission to practice a
- patent or covenant not to sue for patent infringement). To “grantâ€
- such a patent license to a party means to make such an agreement or
- commitment not to enforce a patent against the party.
-
- If you convey a covered work, knowingly relying on a patent
- license, and the Corresponding Source of the work is not available
- for anyone to copy, free of charge and under the terms of this
- License, through a publicly available network server or other
- readily accessible means, then you must either (1) cause the
- Corresponding Source to be so available, or (2) arrange to deprive
- yourself of the benefit of the patent license for this particular
- work, or (3) arrange, in a manner consistent with the requirements
- of this License, to extend the patent license to downstream
- recipients. “Knowingly relying†means you have actual knowledge
- that, but for the patent license, your conveying the covered work
- in a country, or your recipient’s use of the covered work in a
- country, would infringe one or more identifiable patents in that
- country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
- arrangement, you convey, or propagate by procuring conveyance of, a
- covered work, and grant a patent license to some of the parties
- receiving the covered work authorizing them to use, propagate,
- modify or convey a specific copy of the covered work, then the
- patent license you grant is automatically extended to all
- recipients of the covered work and works based on it.
-
- A patent license is “discriminatory†if it does not include within
- the scope of its coverage, prohibits the exercise of, or is
- conditioned on the non-exercise of one or more of the rights that
- are specifically granted under this License. You may not convey a
- covered work if you are a party to an arrangement with a third
- party that is in the business of distributing software, under which
- you make payment to the third party based on the extent of your
- activity of conveying the work, and under which the third party
- grants, to any of the parties who would receive the covered work
- from you, a discriminatory patent license (a) in connection with
- copies of the covered work conveyed by you (or copies made from
- those copies), or (b) primarily for and in connection with specific
- products or compilations that contain the covered work, unless you
- entered into that arrangement, or that patent license was granted,
- prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
- any implied license or other defenses to infringement that may
- otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others’ Freedom.
-
- If conditions are imposed on you (whether by court order, agreement
- or otherwise) that contradict the conditions of this License, they
- do not excuse you from the conditions of this License. If you
- cannot convey a covered work so as to satisfy simultaneously your
- obligations under this License and any other pertinent obligations,
- then as a consequence you may not convey it at all. For example,
- if you agree to terms that obligate you to collect a royalty for
- further conveying from those to whom you convey the Program, the
- only way you could satisfy both those terms and this License would
- be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
- permission to link or combine any covered work with a work licensed
- under version 3 of the GNU Affero General Public License into a
- single combined work, and to convey the resulting work. The terms
- of this License will continue to apply to the part which is the
- covered work, but the special requirements of the GNU Affero
- General Public License, section 13, concerning interaction through
- a network will apply to the combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new
- versions of the GNU General Public License from time to time. Such
- new versions will be similar in spirit to the present version, but
- may differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
- Program specifies that a certain numbered version of the GNU
- General Public License “or any later version†applies to it, you
- have the option of following the terms and conditions either of
- that numbered version or of any later version published by the Free
- Software Foundation. If the Program does not specify a version
- number of the GNU General Public License, you may choose any
- version ever published by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
- versions of the GNU General Public License can be used, that
- proxy’s public statement of acceptance of a version permanently
- authorizes you to choose that version for the Program.
-
- Later license versions may give you additional or different
- permissions. However, no additional obligations are imposed on any
- author or copyright holder as a result of your choosing to follow a
- later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
- COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS ISâ€
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
- RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
- SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
- NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
- AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
- DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
- THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
- BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
- PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
- PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
- THE POSSIBILITY OF SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
- above cannot be given local legal effect according to their terms,
- reviewing courts shall apply local law that most closely
- approximates an absolute waiver of all civil liability in
- connection with the Program, unless a warranty or assumption of
- liability accompanies a copy of the Program in return for a fee.
-
-END OF TERMS AND CONDITIONS
-===========================
-
-How to Apply These Terms to Your New Programs
-=============================================
-
-If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least the
-“copyright†line and a pointer to where the full notice is found.
-
- ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
- Copyright (C) YEAR NAME OF AUTHOR
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or (at
- your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- Also add information on how to contact you by electronic and paper
-mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- PROGRAM Copyright (C) YEAR NAME OF AUTHOR
- This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type ‘show c’ for details.
-
- The hypothetical commands ‘show w’ and ‘show c’ should show the
-appropriate parts of the General Public License. Of course, your
-program’s commands might be different; for a GUI interface, you would
-use an “about boxâ€.
-
- You should also get your employer (if you work as a programmer) or
-school, if any, to sign a “copyright disclaimer†for the program, if
-necessary. For more information on this, and how to apply and follow
-the GNU GPL, see <https://www.gnu.org/licenses/>.
-
- The GNU General Public License does not permit incorporating your
-program into proprietary programs. If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library. If this is what you want to do, use the
-GNU Lesser General Public License instead of this License. But first,
-please read <https://www.gnu.org/licenses/why-not-lgpl.html>.
-
-
-File: dash.info, Node: Index, Prev: GPL, Up: Top
-
-Index
-*****
-
-
-* Menu:
-
-* !cdr: Destructive operations.
- (line 16)
-* !cons: Destructive operations.
- (line 8)
-* -->: Threading macros. (line 35)
-* ->: Threading macros. (line 9)
-* ->>: Threading macros. (line 22)
-* -all?: Predicates. (line 53)
-* -andfn: Function combinators.
- (line 184)
-* -annotate: Maps. (line 84)
-* -any?: Predicates. (line 41)
-* -applify: Function combinators.
- (line 63)
-* -as->: Threading macros. (line 49)
-* -butlast: Other list operations.
- (line 335)
-* -clone: Tree operations. (line 122)
-* -common-prefix: Reductions. (line 242)
-* -common-suffix: Reductions. (line 252)
-* -compose: Function combinators.
- (line 49)
-* -concat: List to list. (line 23)
-* -cons*: Other list operations.
- (line 30)
-* -cons-pair?: Predicates. (line 167)
-* -const: Function combinators.
- (line 128)
-* -contains?: Predicates. (line 100)
-* -copy: Maps. (line 139)
-* -count: Reductions. (line 172)
-* -cut: Function combinators.
- (line 140)
-* -cycle: Other list operations.
- (line 180)
-* -difference: Set operations. (line 20)
-* -distinct: Set operations. (line 62)
-* -dotimes: Side effects. (line 80)
-* -doto: Threading macros. (line 99)
-* -drop: Sublist selection. (line 147)
-* -drop-last: Sublist selection. (line 161)
-* -drop-while: Sublist selection. (line 192)
-* -each: Side effects. (line 8)
-* -each-indexed: Side effects. (line 38)
-* -each-r: Side effects. (line 52)
-* -each-r-while: Side effects. (line 65)
-* -each-while: Side effects. (line 24)
-* -elem-index: Indexing. (line 9)
-* -elem-indices: Indexing. (line 21)
-* -every: Predicates. (line 23)
-* -fifth-item: Other list operations.
- (line 315)
-* -filter: Sublist selection. (line 8)
-* -find-index: Indexing. (line 32)
-* -find-indices: Indexing. (line 60)
-* -find-last-index: Indexing. (line 46)
-* -first: Other list operations.
- (line 246)
-* -first-item: Other list operations.
- (line 272)
-* -fix: Other list operations.
- (line 375)
-* -fixfn: Function combinators.
- (line 224)
-* -flatten: List to list. (line 34)
-* -flatten-n: List to list. (line 56)
-* -flip: Function combinators.
- (line 95)
-* -fourth-item: Other list operations.
- (line 305)
-* -grade-down: Indexing. (line 81)
-* -grade-up: Indexing. (line 71)
-* -group-by: Partitioning. (line 194)
-* -if-let: Binding. (line 34)
-* -if-let*: Binding. (line 45)
-* -inits: Reductions. (line 222)
-* -insert-at: List to list. (line 110)
-* -interleave: Other list operations.
- (line 67)
-* -interpose: Other list operations.
- (line 57)
-* -intersection: Set operations. (line 32)
-* -iota: Other list operations.
- (line 78)
-* -is-infix?: Predicates. (line 153)
-* -is-prefix?: Predicates. (line 129)
-* -is-suffix?: Predicates. (line 141)
-* -iterate: Unfolding. (line 9)
-* -iteratefn: Function combinators.
- (line 201)
-* -juxt: Function combinators.
- (line 37)
-* -keep: List to list. (line 8)
-* -lambda: Binding. (line 247)
-* -last: Other list operations.
- (line 262)
-* -last-item: Other list operations.
- (line 325)
-* -let: Binding. (line 61)
-* -let*: Binding. (line 227)
-* -list: Other list operations.
- (line 358)
-* -map: Maps. (line 10)
-* -map-first: Maps. (line 38)
-* -map-indexed: Maps. (line 66)
-* -map-last: Maps. (line 52)
-* -map-when: Maps. (line 22)
-* -mapcat: Maps. (line 128)
-* -max: Reductions. (line 286)
-* -max-by: Reductions. (line 296)
-* -min: Reductions. (line 262)
-* -min-by: Reductions. (line 272)
-* -non-nil: Sublist selection. (line 94)
-* -none?: Predicates. (line 73)
-* -not: Function combinators.
- (line 153)
-* -on: Function combinators.
- (line 75)
-* -only-some?: Predicates. (line 85)
-* -orfn: Function combinators.
- (line 167)
-* -pad: Other list operations.
- (line 191)
-* -partial: Function combinators.
- (line 8)
-* -partition: Partitioning. (line 80)
-* -partition-after-item: Partitioning. (line 184)
-* -partition-after-pred: Partitioning. (line 151)
-* -partition-all: Partitioning. (line 92)
-* -partition-all-in-steps: Partitioning. (line 115)
-* -partition-before-item: Partitioning. (line 174)
-* -partition-before-pred: Partitioning. (line 163)
-* -partition-by: Partitioning. (line 127)
-* -partition-by-header: Partitioning. (line 138)
-* -partition-in-steps: Partitioning. (line 103)
-* -permutations: Set operations. (line 52)
-* -powerset: Set operations. (line 44)
-* -prodfn: Function combinators.
- (line 258)
-* -product: Reductions. (line 201)
-* -reduce: Reductions. (line 53)
-* -reduce-from: Reductions. (line 8)
-* -reduce-r: Reductions. (line 72)
-* -reduce-r-from: Reductions. (line 26)
-* -reductions: Reductions. (line 136)
-* -reductions-from: Reductions. (line 100)
-* -reductions-r: Reductions. (line 154)
-* -reductions-r-from: Reductions. (line 118)
-* -remove: Sublist selection. (line 26)
-* -remove-at: List to list. (line 146)
-* -remove-at-indices: List to list. (line 159)
-* -remove-first: Sublist selection. (line 43)
-* -remove-item: Sublist selection. (line 83)
-* -remove-last: Sublist selection. (line 64)
-* -repeat: Other list operations.
- (line 19)
-* -replace: List to list. (line 68)
-* -replace-at: List to list. (line 121)
-* -replace-first: List to list. (line 82)
-* -replace-last: List to list. (line 96)
-* -rotate: Other list operations.
- (line 8)
-* -rotate-args: Function combinators.
- (line 112)
-* -rpartial: Function combinators.
- (line 22)
-* -running-product: Reductions. (line 211)
-* -running-sum: Reductions. (line 190)
-* -same-items?: Predicates. (line 115)
-* -second-item: Other list operations.
- (line 285)
-* -select-by-indices: Sublist selection. (line 208)
-* -select-column: Sublist selection. (line 238)
-* -select-columns: Sublist selection. (line 219)
-* -separate: Partitioning. (line 69)
-* -setq: Binding. (line 270)
-* -slice: Sublist selection. (line 104)
-* -snoc: Other list operations.
- (line 43)
-* -some: Predicates. (line 8)
-* -some-->: Threading macros. (line 86)
-* -some->: Threading macros. (line 62)
-* -some->>: Threading macros. (line 74)
-* -sort: Other list operations.
- (line 345)
-* -splice: Maps. (line 95)
-* -splice-list: Maps. (line 115)
-* -split-at: Partitioning. (line 8)
-* -split-on: Partitioning. (line 34)
-* -split-when: Partitioning. (line 52)
-* -split-with: Partitioning. (line 23)
-* -sum: Reductions. (line 180)
-* -table: Other list operations.
- (line 202)
-* -table-flat: Other list operations.
- (line 221)
-* -tails: Reductions. (line 232)
-* -take: Sublist selection. (line 120)
-* -take-last: Sublist selection. (line 133)
-* -take-while: Sublist selection. (line 175)
-* -third-item: Other list operations.
- (line 295)
-* -tree-map: Tree operations. (line 28)
-* -tree-map-nodes: Tree operations. (line 39)
-* -tree-mapreduce: Tree operations. (line 84)
-* -tree-mapreduce-from: Tree operations. (line 103)
-* -tree-reduce: Tree operations. (line 52)
-* -tree-reduce-from: Tree operations. (line 69)
-* -tree-seq: Tree operations. (line 8)
-* -unfold: Unfolding. (line 25)
-* -union: Set operations. (line 8)
-* -unzip: Other list operations.
- (line 158)
-* -update-at: List to list. (line 133)
-* -when-let: Binding. (line 9)
-* -when-let*: Binding. (line 21)
-* -zip: Other list operations.
- (line 107)
-* -zip-fill: Other list operations.
- (line 150)
-* -zip-lists: Other list operations.
- (line 131)
-* -zip-with: Other list operations.
- (line 91)
-* dash-fontify-mode: Fontification of special variables.
- (line 6)
-* dash-register-info-lookup: Info symbol lookup. (line 6)
-* global-dash-fontify-mode: Fontification of special variables.
- (line 12)
-
-
-
-Tag Table:
-Node: Top742
-Node: Installation2397
-Node: Using in a package3159
-Node: Fontification of special variables3504
-Node: Info symbol lookup4294
-Node: Functions4877
-Node: Maps6361
-Ref: -map6658
-Ref: -map-when7031
-Ref: -map-first7606
-Ref: -map-last8081
-Ref: -map-indexed8551
-Ref: -annotate9237
-Ref: -splice9724
-Ref: -splice-list10502
-Ref: -mapcat10961
-Ref: -copy11334
-Node: Sublist selection11522
-Ref: -filter11715
-Ref: -remove12262
-Ref: -remove-first12800
-Ref: -remove-last13642
-Ref: -remove-item14367
-Ref: -non-nil14767
-Ref: -slice15043
-Ref: -take15572
-Ref: -take-last15979
-Ref: -drop16410
-Ref: -drop-last16851
-Ref: -take-while17277
-Ref: -drop-while17892
-Ref: -select-by-indices18508
-Ref: -select-columns19019
-Ref: -select-column19722
-Node: List to list20185
-Ref: -keep20377
-Ref: -concat20941
-Ref: -flatten21235
-Ref: -flatten-n21991
-Ref: -replace22375
-Ref: -replace-first22836
-Ref: -replace-last23331
-Ref: -insert-at23819
-Ref: -replace-at24144
-Ref: -update-at24531
-Ref: -remove-at25019
-Ref: -remove-at-indices25504
-Node: Reductions26083
-Ref: -reduce-from26279
-Ref: -reduce-r-from27003
-Ref: -reduce28266
-Ref: -reduce-r29017
-Ref: -reductions-from30295
-Ref: -reductions-r-from31101
-Ref: -reductions31931
-Ref: -reductions-r32642
-Ref: -count33387
-Ref: -sum33611
-Ref: -running-sum33799
-Ref: -product34120
-Ref: -running-product34328
-Ref: -inits34669
-Ref: -tails34914
-Ref: -common-prefix35158
-Ref: -common-suffix35452
-Ref: -min35746
-Ref: -min-by35972
-Ref: -max36493
-Ref: -max-by36718
-Node: Unfolding37244
-Ref: -iterate37485
-Ref: -unfold37932
-Node: Predicates38737
-Ref: -some38914
-Ref: -every39331
-Ref: -any?40010
-Ref: -all?40341
-Ref: -none?41048
-Ref: -only-some?41350
-Ref: -contains?41835
-Ref: -same-items?42224
-Ref: -is-prefix?42609
-Ref: -is-suffix?42935
-Ref: -is-infix?43261
-Ref: -cons-pair?43615
-Node: Partitioning43940
-Ref: -split-at44128
-Ref: -split-with44792
-Ref: -split-on45192
-Ref: -split-when45863
-Ref: -separate46500
-Ref: -partition46939
-Ref: -partition-all47388
-Ref: -partition-in-steps47813
-Ref: -partition-all-in-steps48307
-Ref: -partition-by48789
-Ref: -partition-by-header49167
-Ref: -partition-after-pred49768
-Ref: -partition-before-pred50215
-Ref: -partition-before-item50600
-Ref: -partition-after-item50907
-Ref: -group-by51209
-Node: Indexing51642
-Ref: -elem-index51844
-Ref: -elem-indices52239
-Ref: -find-index52619
-Ref: -find-last-index53108
-Ref: -find-indices53612
-Ref: -grade-up54017
-Ref: -grade-down54424
-Node: Set operations54838
-Ref: -union55021
-Ref: -difference55459
-Ref: -intersection55871
-Ref: -powerset56303
-Ref: -permutations56513
-Ref: -distinct56809
-Node: Other list operations57183
-Ref: -rotate57408
-Ref: -repeat57761
-Ref: -cons*58040
-Ref: -snoc58456
-Ref: -interpose58866
-Ref: -interleave59160
-Ref: -iota59526
-Ref: -zip-with60009
-Ref: -zip60723
-Ref: -zip-lists61552
-Ref: -zip-fill62250
-Ref: -unzip62572
-Ref: -cycle63314
-Ref: -pad63713
-Ref: -table64032
-Ref: -table-flat64818
-Ref: -first65823
-Ref: -last66309
-Ref: -first-item66643
-Ref: -second-item67042
-Ref: -third-item67306
-Ref: -fourth-item67568
-Ref: -fifth-item67834
-Ref: -last-item68096
-Ref: -butlast68387
-Ref: -sort68632
-Ref: -list69118
-Ref: -fix69687
-Node: Tree operations70176
-Ref: -tree-seq70372
-Ref: -tree-map71227
-Ref: -tree-map-nodes71667
-Ref: -tree-reduce72514
-Ref: -tree-reduce-from73396
-Ref: -tree-mapreduce73996
-Ref: -tree-mapreduce-from74855
-Ref: -clone76140
-Node: Threading macros76467
-Ref: ->76692
-Ref: ->>77180
-Ref: -->77683
-Ref: -as->78239
-Ref: -some->78693
-Ref: -some->>79066
-Ref: -some-->79501
-Ref: -doto80050
-Node: Binding80603
-Ref: -when-let80810
-Ref: -when-let*81265
-Ref: -if-let81788
-Ref: -if-let*82148
-Ref: -let82765
-Ref: -let*88837
-Ref: -lambda89774
-Ref: -setq90580
-Node: Side effects91381
-Ref: -each91575
-Ref: -each-while92096
-Ref: -each-indexed92698
-Ref: -each-r93284
-Ref: -each-r-while93720
-Ref: -dotimes94346
-Node: Destructive operations94899
-Ref: !cons95117
-Ref: !cdr95321
-Node: Function combinators95514
-Ref: -partial95718
-Ref: -rpartial96236
-Ref: -juxt96884
-Ref: -compose97336
-Ref: -applify97943
-Ref: -on98373
-Ref: -flip99145
-Ref: -rotate-args99669
-Ref: -const100298
-Ref: -cut100640
-Ref: -not101120
-Ref: -orfn101646
-Ref: -andfn102408
-Ref: -iteratefn103164
-Ref: -fixfn103866
-Ref: -prodfn105422
-Node: Development106480
-Node: Contribute106769
-Node: Contributors107781
-Node: FDL109874
-Node: GPL135194
-Node: Index172943
-
-End Tag Table
-
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/emacs.d/elpa/dash-20210708.2009/dir b/emacs.d/elpa/dash-20210708.2009/dir
deleted file mode 100644
index 7d473f4..0000000
--- a/emacs.d/elpa/dash-20210708.2009/dir
+++ /dev/null
@@ -1,18 +0,0 @@
-This is the file .../info/dir, which contains the
-topmost node of the Info hierarchy, called (dir)Top.
-The first time you invoke Info you start off looking at this node.
-
-File: dir, Node: Top This is the top of the INFO tree
-
- This (the Directory node) gives a menu of major topics.
- Typing "q" exits, "H" lists all Info commands, "d" returns here,
- "h" gives a primer for first-timers,
- "mEmacs<Return>" visits the Emacs manual, etc.
-
- In Emacs, you can click mouse button 2 on a menu item or cross reference
- to select it.
-
-* Menu:
-
-Emacs
-* Dash: (dash.info). A modern list library for GNU Emacs.
diff --git a/emacs.d/elpa/editorconfig-20230109.633/dir b/emacs.d/elpa/editorconfig-20230109.633/dir
deleted file mode 100644
index 3738902..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/dir
+++ /dev/null
@@ -1,18 +0,0 @@
-This is the file .../info/dir, which contains the
-topmost node of the Info hierarchy, called (dir)Top.
-The first time you invoke Info you start off looking at this node.
-
-File: dir, Node: Top This is the top of the INFO tree
-
- This (the Directory node) gives a menu of major topics.
- Typing "q" exits, "H" lists all Info commands, "d" returns here,
- "h" gives a primer for first-timers,
- "mEmacs<Return>" visits the Emacs manual, etc.
-
- In Emacs, you can click mouse button 2 on a menu item or cross reference
- to select it.
-
-* Menu:
-
-Emacs
-* EditorConfig: (editorconfig). EditorConfig Emacs Plugin.
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-autoloads.el b/emacs.d/elpa/editorconfig-20230109.633/editorconfig-autoloads.el
deleted file mode 100644
index 29f7461..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-autoloads.el
+++ /dev/null
@@ -1,159 +0,0 @@
-;;; editorconfig-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "editorconfig" "editorconfig.el" (0 0 0 0))
-;;; Generated autoloads from editorconfig.el
-
-(autoload 'editorconfig-apply "editorconfig" "\
-Get and apply EditorConfig properties to current buffer.
-
-This function does not respect the values of `editorconfig-exclude-modes' and
-`editorconfig-exclude-regexps' and always applies available properties.
-Use `editorconfig-mode-apply' instead to make use of these variables." t nil)
-
-(defvar editorconfig-mode nil "\
-Non-nil if Editorconfig mode is enabled.
-See the `editorconfig-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `editorconfig-mode'.")
-
-(custom-autoload 'editorconfig-mode "editorconfig" nil)
-
-(autoload 'editorconfig-mode "editorconfig" "\
-Toggle EditorConfig feature.
-
-If called interactively, enable Editorconfig mode if ARG is
-positive, and disable it if ARG is zero or negative. If called
-from Lisp, also enable the mode if ARG is omitted or nil, and
-toggle it if ARG is `toggle'; disable the mode otherwise.
-
-To disable EditorConfig in some buffers, modify
-`editorconfig-exclude-modes' or `editorconfig-exclude-regexps'.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'editorconfig-find-current-editorconfig "editorconfig" "\
-Find the closest .editorconfig file for current file." t nil)
-
-(autoload 'editorconfig-display-current-properties "editorconfig" "\
-Display EditorConfig properties extracted for current buffer." t nil)
-
-(defalias 'describe-editorconfig-properties 'editorconfig-display-current-properties)
-
-(autoload 'editorconfig-format-buffer "editorconfig" "\
-Format buffer according to .editorconfig indent_style and indent_width." t nil)
-
-(autoload 'editorconfig-version "editorconfig" "\
-Get EditorConfig version as string.
-
-If called interactively or if SHOW-VERSION is non-nil, show the
-version in the echo area and the messages buffer.
-
-\(fn &optional SHOW-VERSION)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "editorconfig" '("editorconfig-")))
-
-;;;***
-
-;;;### (autoloads nil "editorconfig-conf-mode" "editorconfig-conf-mode.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from editorconfig-conf-mode.el
-
-(autoload 'editorconfig-conf-mode "editorconfig-conf-mode" "\
-Major mode for editing .editorconfig files.
-
-\(fn)" t nil)
-
-(add-to-list 'auto-mode-alist '("\\.editorconfig\\'" . editorconfig-conf-mode))
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "editorconfig-conf-mode" '("editorconfig-conf-mode-")))
-
-;;;***
-
-;;;### (autoloads nil "editorconfig-core" "editorconfig-core.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from editorconfig-core.el
-
-(autoload 'editorconfig-core-get-nearest-editorconfig "editorconfig-core" "\
-Return path to .editorconfig file that is closest to DIRECTORY.
-
-\(fn DIRECTORY)" nil nil)
-
-(autoload 'editorconfig-core-get-properties "editorconfig-core" "\
-Get EditorConfig properties for FILE.
-If FILE is not given, use currently visiting file.
-Give CONFNAME for basename of config file other than .editorconfig.
-If need to specify config format version, give CONFVERSION.
-
-This functions returns alist of properties. Each element will look like
-'(KEY . VALUE) .
-
-\(fn &optional FILE CONFNAME CONFVERSION)" nil nil)
-
-(autoload 'editorconfig-core-get-properties-hash "editorconfig-core" "\
-Get EditorConfig properties for FILE.
-If FILE is not given, use currently visiting file.
-Give CONFNAME for basename of config file other than .editorconfig.
-If need to specify config format version, give CONFVERSION.
-
-This function is almost same as `editorconfig-core-get-properties', but returns
-hash object instead.
-
-\(fn &optional FILE CONFNAME CONFVERSION)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "editorconfig-core" '("editorconfig-core--")))
-
-;;;***
-
-;;;### (autoloads nil "editorconfig-core-handle" "editorconfig-core-handle.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from editorconfig-core-handle.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "editorconfig-core-handle" '("editorconfig-core-handle")))
-
-;;;***
-
-;;;### (autoloads nil "editorconfig-fnmatch" "editorconfig-fnmatch.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from editorconfig-fnmatch.el
-
-(autoload 'editorconfig-fnmatch-p "editorconfig-fnmatch" "\
-Test whether STRING match PATTERN.
-
-Matching ignores case if `case-fold-search' is non-nil.
-
-PATTERN should be a shell glob pattern, and some zsh-like wildcard matchings can
-be used:
-
-* Matches any string of characters, except path separators (/)
-** Matches any string of characters
-? Matches any single character
-\[name] Matches any single character in name
-\[^name] Matches any single character not in name
-{s1,s2,s3} Matches any of the strings given (separated by commas)
-{min..max} Matches any number between min and max
-
-\(fn STRING PATTERN)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "editorconfig-fnmatch" '("editorconfig-fnmatch-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("editorconfig-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; editorconfig-autoloads.el ends here
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-conf-mode.el b/emacs.d/elpa/editorconfig-20230109.633/editorconfig-conf-mode.el
deleted file mode 100644
index 07c4436..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-conf-mode.el
+++ /dev/null
@@ -1,95 +0,0 @@
-;;; editorconfig-conf-mode.el --- Major mode for editing .editorconfig files -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2022 EditorConfig Team
-
-;; Author: EditorConfig Team <editorconfig@googlegroups.com>
-
-;; See
-;; https://github.com/editorconfig/editorconfig-emacs/graphs/contributors
-;; or the CONTRIBUTORS file for the list of contributors.
-
-;; This file is part of EditorConfig Emacs Plugin.
-
-;; EditorConfig Emacs Plugin is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or (at your
-;; option) any later version.
-
-;; EditorConfig Emacs Plugin is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-;; Public License for more details.
-
-;; You should have received a copy of the GNU General Public License along with
-;; EditorConfig Emacs Plugin. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Major mode for editing .editorconfig files.
-
-;;; Code:
-
-(require 'conf-mode)
-
-(defvar editorconfig-conf-mode-syntax-table
- (let ((table (make-syntax-table conf-unix-mode-syntax-table)))
- (modify-syntax-entry ?\; "<" table)
- table)
- "Syntax table in use in `editorconfig-conf-mode' buffers.")
-
-(defvar editorconfig-conf-mode-abbrev-table nil
- "Abbrev table in use in `editorconfig-conf-mode' buffers.")
-(define-abbrev-table 'editorconfig-conf-mode-abbrev-table ())
-
-;;;###autoload
-(define-derived-mode editorconfig-conf-mode conf-unix-mode "Conf[EditorConfig]"
- "Major mode for editing .editorconfig files."
- (set-variable 'indent-line-function 'indent-relative)
- (let ((key-property-list
- '("charset"
- "end_of_line"
- "file_type_emacs"
- "file_type_ext"
- "indent_size"
- "indent_style"
- "insert_final_newline"
- "max_line_length"
- "root"
- "tab_width"
- "trim_trailing_whitespace"))
- (key-value-list
- '("unset"
- "true"
- "false"
- "lf"
- "cr"
- "crlf"
- "space"
- "tab"
- "latin1"
- "utf-8"
- "utf-8-bom"
- "utf-16be"
- "utf-16le"))
- (font-lock-value
- '(("^[ \t]*\\[\\(.+?\\)\\]" 1 font-lock-type-face)
- ("^[ \t]*\\(.+?\\)[ \t]*[=:]" 1 font-lock-variable-name-face))))
-
- ;; Highlight all key values
- (dolist (key-value key-value-list)
- (push `(,(format "[=:][ \t]*\\(%s\\)\\([ \t]\\|$\\)" key-value)
- 1 font-lock-constant-face)
- font-lock-value))
- ;; Highlight all key properties
- (dolist (key-property key-property-list)
- (push `(,(format "^[ \t]*\\(%s\\)[ \t]*[=:]" key-property)
- 1 font-lock-builtin-face)
- font-lock-value))
-
- (conf-mode-initialize "#" font-lock-value)))
-
-;;;###autoload
-(add-to-list 'auto-mode-alist '("\\.editorconfig\\'" . editorconfig-conf-mode))
-
-(provide 'editorconfig-conf-mode)
-;;; editorconfig-conf-mode.el ends here
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-core-handle.el b/emacs.d/elpa/editorconfig-20230109.633/editorconfig-core-handle.el
deleted file mode 100644
index f5f3f6f..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-core-handle.el
+++ /dev/null
@@ -1,243 +0,0 @@
-;;; editorconfig-core-handle.el --- Handle Class for EditorConfig File -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2022 EditorConfig Team
-
-;; Author: EditorConfig Team <editorconfig@googlegroups.com>
-
-;; See
-;; https://github.com/editorconfig/editorconfig-emacs/graphs/contributors
-;; or the CONTRIBUTORS file for the list of contributors.
-
-;; This file is part of EditorConfig Emacs Plugin.
-
-;; EditorConfig Emacs Plugin is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or (at your
-;; option) any later version.
-
-;; EditorConfig Emacs Plugin is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-;; Public License for more details.
-
-;; You should have received a copy of the GNU General Public License along with
-;; EditorConfig Emacs Plugin. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Handle structures for EditorConfig config file. This library is used
-;; internally from editorconfig-core.el .
-
-;;; Code:
-
-(require 'cl-lib)
-
-(require 'editorconfig-fnmatch)
-
-(defvar editorconfig-core-handle--cache-hash
- (make-hash-table :test 'equal)
- "Hash of EditorConfig filename and its `editorconfig-core-handle' instance.")
-
-(cl-defstruct editorconfig-core-handle-section
- "Structure representing one section in a .editorconfig file.
-
-Slots:
-
-`name'
- String of section name (glob string).
-
-`props'
- Alist of properties: (KEY . VALUE)."
- (name nil)
- (props nil))
-
-(defun editorconfig-core-handle-section-get-properties (section file dir)
- "Return properties alist when SECTION name match FILE.
-
-DIR should be the directory where .editorconfig file which has SECTION lives.
-IF not match, return nil."
- (when (editorconfig-core-handle--fnmatch-p
- file (editorconfig-core-handle-section-name section) dir)
- (editorconfig-core-handle-section-props section)))
-
-(cl-defstruct editorconfig-core-handle
- "Structure representing an .editorconfig file.
-
-Slots:
-`top-props'
- Alist of top properties like ((\"root\" . \"true\"))
-
-`sections'
- List of `editorconfig-core-handle-section' structure objects.
-
-`mtime'
- Last modified time of .editorconfig file.
-
-`path'
- Absolute path to .editorconfig file.'
-"
- (top-props nil)
- (sections nil)
- (mtime nil)
- (path nil))
-
-
-(defun editorconfig-core-handle (conf)
- "Return EditorConfig handle for CONF, which should be a file path.
-
-If CONF does not exist return nil."
- (when (file-readable-p conf)
- (let ((cached (gethash conf editorconfig-core-handle--cache-hash))
- (mtime (nth 5 (file-attributes conf))))
- (if (and cached
- (equal (editorconfig-core-handle-mtime cached) mtime))
- cached
- (let ((parsed (editorconfig-core-handle--parse-file conf)))
- (puthash conf
- (make-editorconfig-core-handle :top-props (plist-get parsed :top-props)
- :sections (plist-get parsed :sections)
- :mtime mtime
- :path conf)
- editorconfig-core-handle--cache-hash))))))
-
-(defun editorconfig-core-handle-root-p (handle)
- "Return non-nil if HANDLE represent root EditorConfig file.
-
-If HANDLE is nil return nil."
- (when handle
- (string-equal "true"
- (downcase (or (cdr (assoc "root"
- (editorconfig-core-handle-top-props handle)))
- "")))))
-
-(defun editorconfig-core-handle-get-properties (handle file)
- "Return list of alist of properties from HANDLE for FILE.
-The list returned will be ordered by the lines they appear.
-
-If HANDLE is nil return nil."
- (when handle
- (let ((dir (file-name-directory (editorconfig-core-handle-path handle))))
- (cl-loop for section in (editorconfig-core-handle-sections handle)
- for props = (editorconfig-core-handle-section-get-properties section
- file
- dir)
- when props collect (copy-alist props)))))
-(make-obsolete 'editorconfig-core-handle-get-properties
- 'editorconfig-core-handle-get-properties-hash
- "0.8.0")
-
-
-(defun editorconfig-core-handle-get-properties-hash (handle file)
- "Return hash of properties from HANDLE for FILE.
-
-If HANDLE is nil return nil."
- (when handle
- (let ((hash (make-hash-table))
- (dir (file-name-directory (editorconfig-core-handle-path
- handle))))
- (dolist (section (editorconfig-core-handle-sections handle))
- (cl-loop for (key . value) in (editorconfig-core-handle-section-get-properties section file dir)
- do (puthash (intern key) value hash)))
- hash)))
-
-(defun editorconfig-core-handle--fnmatch-p (name pattern dir)
- "Return non-nil if NAME match PATTERN.
-If pattern has slash, pattern should be relative to DIR.
-
-This function is a fnmatch with a few modification for EditorConfig usage."
- (if (string-match-p "/" pattern)
- (let ((pattern (replace-regexp-in-string "^/" "" pattern))
- (dir (file-name-as-directory dir)))
- (editorconfig-fnmatch-p name (concat dir pattern)))
- (editorconfig-fnmatch-p name (concat "**/" pattern))))
-
-(defsubst editorconfig-core-handle--string-trim (str)
- "Remove leading and trailing whitespaces from STR."
- (replace-regexp-in-string "[[:space:]]+\\'"
- ""
- (replace-regexp-in-string "\\`[[:space:]]+"
- ""
- str)))
-
-(defun editorconfig-core-handle--parse-file (conf)
- "Parse EditorConfig file CONF.
-
-This function returns cons of its top properties alist and
-alist of patterns and its properties alist.
-The list returned will be ordered by the lines they appear.
-
-If CONF is not found return nil."
- (when (file-readable-p conf)
- (with-temp-buffer
- ;; NOTE: Use this instead of insert-file-contents-literally to enable
- ;; code conversion
- (insert-file-contents conf)
- (goto-char (point-min))
- (let ((point-max (point-max))
- (sections ())
- (top-props nil)
-
- ;; String of current line
- (line "")
- ;; nil when pattern not appeared yet, "" when pattern is empty ("[]")
- (pattern nil)
- ;; Alist of properties for current PATTERN
- (props ())
-
- ;; Current line num
- (current-line-number 1))
- (while (not (eq (point) point-max))
- (setq line
- (buffer-substring-no-properties (line-beginning-position)
- (line-end-position)))
- (setq line
- (replace-regexp-in-string "\\(^\\| \\)\\(#\\|;\\).*$"
- ""
- (editorconfig-core-handle--string-trim line)))
-
- (cond
- ((string-equal "" line)
- nil)
-
- ;; Start of section
- ((string-match "^\\[\\(.*\\)\\]$"
- line)
- (when pattern
- (setq sections
- `(,@sections ,(make-editorconfig-core-handle-section
- :name pattern
- :props props)))
- (setq pattern nil)
- (setq props nil))
- (setq pattern (match-string 1 line)))
-
- (t
- (let ((idx (string-match "=\\|:" line)))
- (unless idx
- (error "Error while reading config file: %s:%d:\n %s\n"
- conf current-line-number line))
- (let ((key (downcase (editorconfig-core-handle--string-trim
- (substring line 0 idx))))
- (value (editorconfig-core-handle--string-trim
- (substring line (1+ idx)))))
- (when (and (< (length key) 51)
- (< (length value) 256))
- (if pattern
- (when (< (length pattern) 4097)
- (setq props
- `(,@props (,key . ,value))))
- (setq top-props
- `(,@top-props (,key . ,value)))))))))
- (setq current-line-number (1+ current-line-number))
- (goto-char (point-min))
- (forward-line (1- current-line-number)))
- (when pattern
- (setq sections
- `(,@sections ,(make-editorconfig-core-handle-section
- :name pattern
- :props props))))
- (list :top-props top-props
- :sections sections)))))
-
-(provide 'editorconfig-core-handle)
-;;; editorconfig-core-handle.el ends here
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-core.el b/emacs.d/elpa/editorconfig-20230109.633/editorconfig-core.el
deleted file mode 100644
index 3e0097b..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-core.el
+++ /dev/null
@@ -1,179 +0,0 @@
-;;; editorconfig-core.el --- EditorConfig Core library in Emacs Lisp -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2022 EditorConfig Team
-
-;; Author: EditorConfig Team <editorconfig@googlegroups.com>
-
-;; See
-;; https://github.com/editorconfig/editorconfig-emacs/graphs/contributors
-;; or the CONTRIBUTORS file for the list of contributors.
-
-;; This file is part of EditorConfig Emacs Plugin.
-
-;; EditorConfig Emacs Plugin is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or (at your
-;; option) any later version.
-
-;; EditorConfig Emacs Plugin is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-;; Public License for more details.
-
-;; You should have received a copy of the GNU General Public License along with
-;; EditorConfig Emacs Plugin. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This library is one implementation of EditorConfig Core, which parses
-;; .editorconfig files and returns properties for given files.
-;; This can be used in place of, for example, editorconfig-core-c.
-
-
-;; Use from EditorConfig Emacs Plugin
-
-;; Emacs plugin (v0.5 or later) can utilize this implementation.
-;; By default, the plugin first search for any EditorConfig executable,
-;; and fallback to this library if not found.
-;; If you always want to use this library, add following lines to your init.el:
-
-;; (setq editorconfig-get-properties-function
-;; 'editorconfig-core-get-properties-hash)
-
-
-;; Functions
-
-;; editorconfig-core-get-properties (&optional file confname confversion)
-
-;; Get EditorConfig properties for FILE.
-
-;; If FILE is not given, use currently visiting file.
-;; Give CONFNAME for basename of config file other than .editorconfig.
-;; If need to specify config format version, give CONFVERSION.
-
-;; This functions returns alist of properties. Each element will look like
-;; (KEY . VALUE) .
-
-
-;; editorconfig-core-get-properties-hash (&optional file confname confversion)
-
-;; Get EditorConfig properties for FILE.
-
-;; This function is almost same as `editorconfig-core-get-properties', but
-;; returns hash object instead.
-
-;;; Code:
-
-(require 'cl-lib)
-
-(require 'editorconfig-core-handle)
-
-
-(defun editorconfig-core--get-handles (dir confname &optional result)
- "Get list of EditorConfig handlers for DIR from CONFNAME.
-
-In the resulting list, the handle for root config file comes first, and the
-nearest comes last.
-The list may contains nil when no file was found for directories.
-RESULT is used internally and normally should not be used."
- (setq dir (expand-file-name dir))
- (let ((handle (editorconfig-core-handle (concat (file-name-as-directory dir)
- confname)))
- (parent (file-name-directory (directory-file-name dir))))
- (if (or (string= parent dir)
- (and handle (editorconfig-core-handle-root-p handle)))
- (cl-remove-if-not 'identity (cons handle result))
- (editorconfig-core--get-handles parent
- confname
- (cons handle result)))))
-
-;;;###autoload
-(defun editorconfig-core-get-nearest-editorconfig (directory)
- "Return path to .editorconfig file that is closest to DIRECTORY."
- (when-let ((handle (car (last
- (editorconfig-core--get-handles directory
- ".editorconfig")))))
- (editorconfig-core-handle-path handle)))
-
-;;;###autoload
-(defun editorconfig-core-get-properties (&optional file confname confversion)
- "Get EditorConfig properties for FILE.
-If FILE is not given, use currently visiting file.
-Give CONFNAME for basename of config file other than .editorconfig.
-If need to specify config format version, give CONFVERSION.
-
-This functions returns alist of properties. Each element will look like
-'(KEY . VALUE) ."
- (let ((hash (editorconfig-core-get-properties-hash file confname confversion))
- (result nil))
- (maphash (lambda (key value)
- (add-to-list 'result (cons (symbol-name key) value)))
- hash)
- result))
-
-(defun editorconfig-core--hash-merge (into update)
- "Merge two hashes INTO and UPDATE.
-
-This is a destructive function, hash INTO will be modified.
-When the same key exists in both two hashes, values of UPDATE takes precedence."
- (maphash (lambda (key value) (puthash key value into)) update)
- into)
-
-;;;###autoload
-(defun editorconfig-core-get-properties-hash (&optional file confname confversion)
- "Get EditorConfig properties for FILE.
-If FILE is not given, use currently visiting file.
-Give CONFNAME for basename of config file other than .editorconfig.
-If need to specify config format version, give CONFVERSION.
-
-This function is almost same as `editorconfig-core-get-properties', but returns
-hash object instead."
- (setq file
- (expand-file-name (or file
- buffer-file-name
- (error "FILE is not given and `buffer-file-name' is nil"))))
- (setq confname (or confname ".editorconfig"))
- (setq confversion (or confversion "0.12.0"))
- (let ((result (make-hash-table)))
- (dolist (handle (editorconfig-core--get-handles (file-name-directory file)
- confname))
- (editorconfig-core--hash-merge result
- (editorconfig-core-handle-get-properties-hash handle
- file)))
-
- ;; Downcase known boolean values
- (dolist (key '( end_of_line indent_style indent_size insert_final_newline
- trim_trailing_whitespace charset))
- (when-let ((val (gethash key result)))
- (puthash key (downcase val) result)))
-
- ;; Add indent_size property
- (let ((v-indent-size (gethash 'indent_size result))
- (v-indent-style (gethash 'indent_style result)))
- (when (and (not v-indent-size)
- (string= v-indent-style "tab")
- ;; If VERSION < 0.9.0, indent_size should have no default value
- (version<= "0.9.0"
- confversion))
- (puthash 'indent_size
- "tab"
- result)))
- ;; Add tab_width property
- (let ((v-indent-size (gethash 'indent_size result))
- (v-tab-width (gethash 'tab_width result)))
- (when (and v-indent-size
- (not v-tab-width)
- (not (string= v-indent-size "tab")))
- (puthash 'tab_width v-indent-size result)))
- ;; Update indent-size property
- (let ((v-indent-size (gethash 'indent_size result))
- (v-tab-width (gethash 'tab_width result)))
- (when (and v-indent-size
- v-tab-width
- (string= v-indent-size "tab"))
- (puthash 'indent_size v-tab-width result)))
-
- result))
-
-(provide 'editorconfig-core)
-;;; editorconfig-core.el ends here
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-fnmatch.el b/emacs.d/elpa/editorconfig-20230109.633/editorconfig-fnmatch.el
deleted file mode 100644
index 50a5d66..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-fnmatch.el
+++ /dev/null
@@ -1,284 +0,0 @@
-;;; editorconfig-fnmatch.el --- Glob pattern matching in Emacs lisp -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2022 EditorConfig Team
-
-;; Author: EditorConfig Team <editorconfig@googlegroups.com>
-
-;; See
-;; https://github.com/editorconfig/editorconfig-emacs/graphs/contributors
-;; or the CONTRIBUTORS file for the list of contributors.
-
-;; This file is part of EditorConfig Emacs Plugin.
-
-;; EditorConfig Emacs Plugin is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or (at your
-;; option) any later version.
-
-;; EditorConfig Emacs Plugin is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-;; Public License for more details.
-
-;; You should have received a copy of the GNU General Public License along with
-;; EditorConfig Emacs Plugin. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; editorconfig-fnmatch.el provides a fnmatch implementation with a few
-;; extensions.
-;; The main usage of this library is glob pattern matching for EditorConfig, but
-;; it can also act solely.
-
-;; editorconfig-fnmatch-p (name pattern)
-
-;; Test whether NAME match PATTERN.
-
-;; PATTERN should be a shell glob pattern, and some zsh-like wildcard matchings
-;; can be used:
-
-;; * Matches any string of characters, except path separators (/)
-;; ** Matches any string of characters
-;; ? Matches any single character
-;; [name] Matches any single character in name
-;; [^name] Matches any single character not in name
-;; {s1,s2,s3} Matches any of the strings given (separated by commas)
-;; {min..max} Matches any number between min and max
-
-
-;; This library is a port from editorconfig-core-py library.
-;; https://github.com/editorconfig/editorconfig-core-py/blob/master/editorconfig/fnmatch.py
-
-;;; Code:
-
-(require 'cl-lib)
-
-(defvar editorconfig-fnmatch--cache-hashtable
- nil
- "Cache of shell pattern and its translation.")
-;; Clear cache on file reload
-(setq editorconfig-fnmatch--cache-hashtable
- (make-hash-table :test 'equal))
-
-
-(defconst editorconfig-fnmatch--left-brace-regexp
- "\\(^\\|[^\\]\\){"
- "Regular expression for left brace ({).")
-
-(defconst editorconfig-fnmatch--right-brace-regexp
- "\\(^\\|[^\\]\\)}"
- "Regular expression for right brace (}).")
-
-
-(defconst editorconfig-fnmatch--numeric-range-regexp
- "\\([+-]?[0-9]+\\)\\.\\.\\([+-]?[0-9]+\\)"
- "Regular expression for numeric range (like {-3..+3}).")
-
-(defun editorconfig-fnmatch--match-num (regexp string)
- "Return how many times REGEXP is found in STRING."
- (let ((num 0))
- ;; START arg does not work as expected in this case
- (while (string-match regexp string)
- (setq num (1+ num)
- string (substring string (match-end 0))))
- num))
-
-;;;###autoload
-(defun editorconfig-fnmatch-p (string pattern)
- "Test whether STRING match PATTERN.
-
-Matching ignores case if `case-fold-search' is non-nil.
-
-PATTERN should be a shell glob pattern, and some zsh-like wildcard matchings can
-be used:
-
-* Matches any string of characters, except path separators (/)
-** Matches any string of characters
-? Matches any single character
-[name] Matches any single character in name
-[^name] Matches any single character not in name
-{s1,s2,s3} Matches any of the strings given (separated by commas)
-{min..max} Matches any number between min and max"
- (string-match (editorconfig-fnmatch-translate pattern)
- string))
-
-;;(editorconfig-fnmatch-translate "{a,{-3..3}}.js")
-;;(editorconfig-fnmatch-p "1.js" "{a,{-3..3}}.js")
-
-(defun editorconfig-fnmatch-translate (pattern)
- "Translate a shell PATTERN to a regular expression.
-
-Translation result will be cached, so same translation will not be done twice."
- (let ((cached (gethash pattern
- editorconfig-fnmatch--cache-hashtable)))
- (or cached
- (puthash pattern
- (editorconfig-fnmatch--do-translate pattern)
- editorconfig-fnmatch--cache-hashtable))))
-
-
-(defun editorconfig-fnmatch--do-translate (pattern &optional nested)
- "Translate a shell PATTERN to a regular expression.
-
-Set NESTED to t when this function is called from itself.
-
-This function is called from `editorconfig-fnmatch-translate', when no cached
-translation is found for PATTERN."
- (let ((index 0)
- (length (length pattern))
- (brace-level 0)
- (in-brackets nil)
- ;; List of strings of resulting regexp
- (result ())
- (is-escaped nil)
- (matching-braces (= (editorconfig-fnmatch--match-num
- editorconfig-fnmatch--left-brace-regexp
- pattern)
- (editorconfig-fnmatch--match-num
- editorconfig-fnmatch--right-brace-regexp
- pattern)))
-
- current-char
- pos
- has-slash
- has-comma
- num-range)
-
- (while (< index length)
- (if (and (not is-escaped)
- (string-match "[^]\\*?[{},/\\-]+"
- ;;(string-match "[^]\\*?[{},/\\-]+" "?.a")
- pattern
- index)
- (eq index (match-beginning 0)))
- (setq result `(,@result ,(regexp-quote (match-string 0 pattern)))
- index (match-end 0)
- is-escaped nil)
-
- (setq current-char (aref pattern index)
- index (1+ index))
-
- (cl-case current-char
- (?*
- (setq pos index)
- (if (and (< pos length)
- (= (aref pattern pos) ?*))
- (setq result `(,@result ".*"))
- (setq result `(,@result "[^/]*"))))
-
- (??
- (setq result `(,@result "[^/]")))
-
- (?\[
- (if in-brackets
- (setq result `(,@result "\\["))
- (if (= (aref pattern index) ?/)
- ;; Slash after an half-open bracket
- (setq result `(,@result "\\[/")
- index (+ index 1))
- (setq pos index
- has-slash nil)
- (while (and (< pos length)
- (not (= (aref pattern pos) ?\]))
- (not has-slash))
- (if (and (= (aref pattern pos) ?/)
- (not (= (aref pattern (- pos 1)) ?\\)))
- (setq has-slash t)
- (setq pos (1+ pos))))
- (if has-slash
- (setq result `(,@result ,(concat "\\["
- (substring pattern
- index
- (1+ pos))
- "\\]"))
- index (+ pos 2))
- (if (and (< index length)
- (memq (aref pattern index)
- '(?! ?^)))
- (setq index (1+ index)
- result `(,@result "[^"))
- (setq result `(,@result "[")))
- (setq in-brackets t)))))
-
- (?-
- (if in-brackets
- (setq result `(,@result "-"))
- (setq result `(,@result "\\-"))))
-
- (?\]
- (setq result `(,@result "]")
- in-brackets nil))
-
- (?{
- (setq pos index
- has-comma nil)
- (while (and (or (and (< pos length)
- (not (= (aref pattern pos) ?})))
- is-escaped)
- (not has-comma))
- (if (and (eq (aref pattern pos) ?,)
- (not is-escaped))
- (setq has-comma t)
- (setq is-escaped (and (eq (aref pattern pos)
- ?\\)
- (not is-escaped))
- pos (1+ pos))))
- (if (and (not has-comma)
- (< pos length))
- (let ((pattern-sub (substring pattern index pos)))
- (setq num-range (string-match editorconfig-fnmatch--numeric-range-regexp
- pattern-sub))
- (if num-range
- (let ((number-start (string-to-number (match-string 1
- pattern-sub)))
- (number-end (string-to-number (match-string 2
- pattern-sub))))
- (setq result `(,@result ,(concat "\\(?:"
- (mapconcat 'number-to-string
- (cl-loop for i from number-start to number-end
- collect i)
- "\\|")
- "\\)"))))
- (let ((inner (editorconfig-fnmatch--do-translate pattern-sub t)))
- (setq result `(,@result ,(format "{%s}" inner)))))
- (setq index (1+ pos)))
- (if matching-braces
- (setq result `(,@result "\\(?:")
- brace-level (1+ brace-level))
- (setq result `(,@result "{")))))
-
- (?,
- (if (and (> brace-level 0)
- (not is-escaped))
- (setq result `(,@result "\\|"))
- (setq result `(,@result "\\,"))))
-
- (?}
- (if (and (> brace-level 0)
- (not is-escaped))
- (setq result `(,@result "\\)")
- brace-level (- brace-level 1))
- (setq result `(,@result "}"))))
-
- (?/
- (if (and (<= (+ index 3) (length pattern))
- (string= (substring pattern index (+ index 3)) "**/"))
- (setq result `(,@result "\\(?:/\\|/.*/\\)")
- index (+ index 3))
- (setq result `(,@result "/"))))
-
- (t
- (unless (= current-char ?\\)
- (setq result `(,@result ,(regexp-quote (char-to-string current-char)))))))
-
- (if (= current-char ?\\)
- (progn (when is-escaped
- (setq result `(,@result "\\\\")))
- (setq is-escaped (not is-escaped)))
- (setq is-escaped nil))))
- (unless nested
- (setq result `("^" ,@result "\\'")))
- (apply #'concat result)))
-
-(provide 'editorconfig-fnmatch)
-;;; editorconfig-fnmatch.el ends here
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-pkg.el b/emacs.d/elpa/editorconfig-20230109.633/editorconfig-pkg.el
deleted file mode 100644
index 0bd37c1..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig-pkg.el
+++ /dev/null
@@ -1,13 +0,0 @@
-(define-package "editorconfig" "20230109.633" "EditorConfig Emacs Plugin"
- '((emacs "26.1")
- (nadvice "0.3"))
- :commit "ce5d4358394252f506fc789d46368621dbaaf064" :authors
- '(("EditorConfig Team" . "editorconfig@googlegroups.com"))
- :maintainer
- '("EditorConfig Team" . "editorconfig@googlegroups.com")
- :keywords
- '("convenience" "editorconfig")
- :url "https://github.com/editorconfig/editorconfig-emacs#readme")
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig.el b/emacs.d/elpa/editorconfig-20230109.633/editorconfig.el
deleted file mode 100644
index f1ceaa2..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig.el
+++ /dev/null
@@ -1,973 +0,0 @@
-;;; editorconfig.el --- EditorConfig Emacs Plugin -*- lexical-binding: t -*-
-
-;; Copyright (C) 2011-2022 EditorConfig Team
-
-;; Author: EditorConfig Team <editorconfig@googlegroups.com>
-;; Version: 0.9.1
-;; URL: https://github.com/editorconfig/editorconfig-emacs#readme
-;; Package-Requires: ((emacs "26.1") (nadvice "0.3"))
-;; Keywords: convenience editorconfig
-
-;; See
-;; https://github.com/editorconfig/editorconfig-emacs/graphs/contributors
-;; or the CONTRIBUTORS file for the list of contributors.
-
-;; This file is part of EditorConfig Emacs Plugin.
-
-;; EditorConfig Emacs Plugin is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or (at your
-;; option) any later version.
-
-;; EditorConfig Emacs Plugin is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-;; Public License for more details.
-
-;; You should have received a copy of the GNU General Public License along with
-;; EditorConfig Emacs Plugin. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; EditorConfig helps developers define and maintain consistent
-;; coding styles between different editors and IDEs.
-
-;; The EditorConfig project consists of a file format for defining
-;; coding styles and a collection of text editor plugins that enable
-;; editors to read the file format and adhere to defined styles.
-;; EditorConfig files are easily readable and they work nicely with
-;; version control systems.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'pcase)
-
-(require 'nadvice)
-
-(eval-when-compile
- (require 'rx)
- (defvar tex-indent-basic)
- (defvar tex-indent-item)
- (defvar tex-indent-arg)
- (defvar evil-shift-width))
-
-(require 'editorconfig-core)
-
-(defgroup editorconfig nil
- "EditorConfig Emacs Plugin.
-
-EditorConfig helps developers define and maintain consistent
-coding styles between different editors and IDEs."
- :tag "EditorConfig"
- :prefix "editorconfig-"
- :group 'tools)
-
-(define-obsolete-variable-alias
- 'edconf-exec-path
- 'editorconfig-exec-path
- "0.5")
-(defcustom editorconfig-exec-path
- "editorconfig"
- "Path to EditorConfig executable.
-
-Used by `editorconfig--execute-editorconfig-exec'."
- :type 'string
- :group 'editorconfig)
-
-(define-obsolete-variable-alias
- 'edconf-get-properties-function
- 'editorconfig-get-properties-function
- "0.5")
-(defcustom editorconfig-get-properties-function
- 'editorconfig-core-get-properties-hash
- "A function which gets EditorConfig properties for specified file.
-
-This function will be called with one argument, full path of the target file,
-and should return a hash object containing properties, or nil if any core
-program is not available. Keys of this hash should be symbols of properties,
-and values should be strings of their values.
-
-
-For example, if you always want to use built-in core library instead
-of any EditorConfig executable to get properties, add following to
-your init.el:
-
- (set-variable 'editorconfig-get-properties-function
- #'editorconfig-core-get-properties-hash)
-
-Possible known values are:
-
-* `editorconfig-core-get-properties-hash\\=' (default)
- * Always use built-in Emacs-Lisp implementation to get properties
-* `editorconfig-get-properties'
- * Use `editorconfig-get-properties-from-exec\\=' when
- `editorconfig-exec-path' executable is found, otherwise
- use `editorconfig-core-get-properties-hash\\='
-* `editorconfig-get-properties-from-exec\\='
- * Get properties by executing EditorConfig executable"
- :type 'function
- :group 'editorconfig)
-
-(defcustom editorconfig-mode-lighter " EditorConfig"
- "Command `editorconfig-mode' lighter string."
- :type 'string
- :group 'editorconfig)
-
-(define-obsolete-variable-alias
- 'edconf-custom-hooks
- 'editorconfig-after-apply-functions
- "0.5")
-(define-obsolete-variable-alias
- 'editorconfig-custom-hooks
- 'editorconfig-after-apply-functions
- "0.7.14")
-(defcustom editorconfig-after-apply-functions ()
- "A list of functions after loading common EditorConfig settings.
-
-Each element in this list is a hook function. This hook function
-takes one parameter, which is a property hash table. The value
-of properties can be obtained through gethash function.
-
-The hook does not have to be coding style related; you can add
-whatever functionality you want. For example, the following is
-an example to add a new property emacs_linum to decide whether to
-show line numbers on the left:
-
- (add-hook 'editorconfig-after-apply-functions
- '(lambda (props)
- (let ((show-line-num (gethash 'emacs_linum props)))
- (cond ((equal show-line-num \"true\") (linum-mode 1))
- ((equal show-line-num \"false\") (linum-mode 0))))))
-
-This hook will be run even when there are no matching sections in
-\".editorconfig\", or no \".editorconfig\" file was found at all."
- :type 'hook
- :group 'editorconfig)
-
-(defcustom editorconfig-hack-properties-functions ()
- "A list of function to alter property values before applying them.
-
-These functions will be run after loading \".editorconfig\" files and before
-applying them to current buffer, so that you can alter some properties from
-\".editorconfig\" before they take effect.
-\(Since 2021/08/30 (v0.9.0): Buffer coding-systems are set before running
-this functions, so this variable cannot be used to change coding-systems.)
-
-For example, Makefiles always use tab characters for indentation: you can
-overwrite \"indent_style\" property when current `major-mode' is a
-`makefile-mode' with following code:
-
- (add-hook 'editorconfig-hack-properties-functions
- '(lambda (props)
- (when (derived-mode-p 'makefile-mode)
- (puthash 'indent_style \"tab\" props))))
-
-This hook will be run even when there are no matching sections in
-\".editorconfig\", or no \".editorconfig\" file was found at all."
- :type 'hook
- :group 'editorconfig)
-(make-obsolete-variable 'editorconfig-hack-properties-functions
- "Using `editorconfig-after-apply-functions' instead is recommended,
- because since 2021/08/30 (v0.9.0) this variable cannot support all properties:
- charset values will be referenced before running this hook."
- "v0.9.0")
-
-(define-obsolete-variable-alias
- 'edconf-indentation-alist
- 'editorconfig-indentation-alist
- "0.5")
-(defcustom editorconfig-indentation-alist
- ;; For contributors: Sort modes in alphabetical order
- '((apache-mode apache-indent-level)
- (awk-mode c-basic-offset)
- (bpftrace-mode c-basic-offset)
- (c++-mode c-basic-offset)
- (c++-ts-mode c-basic-offset)
- (c-mode c-basic-offset)
- (c-ts-mode c-basic-offset)
- (cmake-mode cmake-tab-width)
- (cmake-ts-mode cmake-tab-width)
- (coffee-mode coffee-tab-width)
- (cperl-mode cperl-indent-level)
- (crystal-mode crystal-indent-level)
- (csharp-mode c-basic-offset)
- (csharp-ts-mode c-basic-offset)
- (css-mode css-indent-offset)
- (css-ts-mode css-indent-offset)
- (d-mode c-basic-offset)
- (emacs-lisp-mode lisp-indent-offset)
- (enh-ruby-mode enh-ruby-indent-level)
- (erlang-mode erlang-indent-level)
- (ess-mode ess-indent-offset)
- (f90-mode f90-associate-indent
- f90-continuation-indent
- f90-critical-indent
- f90-do-indent
- f90-if-indent
- f90-program-indent
- f90-type-indent)
- (feature-mode feature-indent-offset
- feature-indent-level)
- (fsharp-mode fsharp-continuation-offset
- fsharp-indent-level
- fsharp-indent-offset)
- (groovy-mode groovy-indent-offset)
- (haskell-mode haskell-indent-spaces
- haskell-indent-offset
- haskell-indentation-layout-offset
- haskell-indentation-left-offset
- haskell-indentation-starter-offset
- haskell-indentation-where-post-offset
- haskell-indentation-where-pre-offset
- shm-indent-spaces)
- (haxor-mode haxor-tab-width)
- (idl-mode c-basic-offset)
- (jade-mode jade-tab-width)
- (java-mode c-basic-offset)
- (java-ts-mode c-basic-offset)
- (js-mode js-indent-level)
- (js-jsx-mode js-indent-level sgml-basic-offset)
- (js2-mode js2-basic-offset)
- (js2-jsx-mode js2-basic-offset sgml-basic-offset)
- (js3-mode js3-indent-level)
- (json-mode js-indent-level)
- (json-ts-mode json-ts-mode-indent-offset)
- (julia-mode julia-indent-offset)
- (kotlin-mode kotlin-tab-width)
- (latex-mode . editorconfig-set-indentation-latex-mode)
- (lisp-mode lisp-indent-offset)
- (livescript-mode livescript-tab-width)
- (lua-mode lua-indent-level)
- (matlab-mode matlab-indent-level)
- (meson-mode meson-indent-basic)
- (mips-mode mips-tab-width)
- (mustache-mode mustache-basic-offset)
- (nasm-mode nasm-basic-offset)
- (nginx-mode nginx-indent-level)
- (nxml-mode nxml-child-indent (nxml-attribute-indent . 2))
- (objc-mode c-basic-offset)
- (octave-mode octave-block-offset)
- (perl-mode perl-indent-level)
- ;; No need to change `php-mode-coding-style' value for php-mode
- ;; since we run editorconfig later than it resets `c-basic-offset'.
- ;; See https://github.com/editorconfig/editorconfig-emacs/issues/116
- ;; for details.
- (php-mode c-basic-offset)
- (pike-mode c-basic-offset)
- (ps-mode ps-mode-tab)
- (pug-mode pug-tab-width)
- (puppet-mode puppet-indent-level)
- (python-mode . editorconfig-set-indentation-python-mode)
- (python-ts-mode . editorconfig-set-indentation-python-mode)
- (rjsx-mode js-indent-level sgml-basic-offset)
- (ruby-mode ruby-indent-level)
- (ruby-ts-mode ruby-indent-level)
- (rust-mode rust-indent-offset)
- (rust-ts-mode rust-indent-offset)
- (rustic-mode rustic-indent-offset)
- (scala-mode scala-indent:step)
- (scss-mode css-indent-offset)
- (sgml-mode sgml-basic-offset)
- (sh-mode sh-basic-offset sh-indentation)
- (slim-mode slim-indent-offset)
- (sml-mode sml-indent-level)
- (tcl-mode tcl-indent-level
- tcl-continued-indent-level)
- (terra-mode terra-indent-level)
- (typescript-mode typescript-indent-level)
- (typescript-ts-base-mode typescript-ts-mode-indent-offset)
- (verilog-mode verilog-indent-level
- verilog-indent-level-behavioral
- verilog-indent-level-declaration
- verilog-indent-level-module
- verilog-cexp-indent
- verilog-case-indent)
- (web-mode (web-mode-indent-style . (lambda (size) 2))
- web-mode-attr-indent-offset
- web-mode-attr-value-indent-offset
- web-mode-code-indent-offset
- web-mode-css-indent-offset
- web-mode-markup-indent-offset
- web-mode-sql-indent-offset
- web-mode-block-padding
- web-mode-script-padding
- web-mode-style-padding)
- (yaml-mode yaml-indent-offset)
- (yaml-ts-mode yaml-indent-offset))
- "Alist of indentation setting methods by modes.
-
-Each element looks like (MODE . FUNCTION) or (MODE . INDENT-SPEC-LIST).
-
-If FUNCTION is provided, it will be called when setting the
-indentation. The indent size will be passed.
-
-If INDENT-SPEC-LIST is provided, each element of it must have one of the
-following forms:
-
- 1. VARIABLE
- It means (VARIABLE . 1).
-
- 2. (VARIABLE . SPEC)
- Setting VARIABLE according to the type of SPEC:
-
- - Integer
- The value is (* SPEC INDENT-SIZE);
-
- - Function
- The value is (funcall SPEC INDENT-SIZE);
-
- - Any other type.
- The value is SPEC.
-
-NOTE: Only the **buffer local** value of VARIABLE will be set."
- :type '(alist :key-type symbol :value-type sexp)
- :risky t
- :group 'editorconfig)
-
-(defcustom editorconfig-exclude-modes ()
- "Modes in which `editorconfig-mode-apply' will not run."
- :type '(repeat (symbol :tag "Major Mode"))
- :group 'editorconfig)
-
-(defcustom editorconfig-exclude-regexps ()
- "List of regexp for buffer filenames `editorconfig-mode-apply' will not run.
-
-When variable `buffer-file-name' matches any of the regexps, then
-`editorconfig-mode-apply' will not do its work."
- :type '(repeat string)
- :group 'editorconfig)
-(with-eval-after-load 'recentf
- (add-to-list 'editorconfig-exclude-regexps
- (rx-to-string '(seq string-start
- (eval (file-truename (expand-file-name recentf-save-file))))
- t)))
-
-(defcustom editorconfig-trim-whitespaces-mode nil
- "Buffer local minor-mode to use to trim trailing whitespaces.
-
-If set, enable that mode when `trim_trailing_whitespace` is set to true.
-Otherwise, use `delete-trailing-whitespace'."
- :type 'symbol
- :group 'editorconfig)
-
-(defvar editorconfig-properties-hash nil
- "Hash object of EditorConfig properties that was enabled for current buffer.
-Set by `editorconfig-apply' and nil if that is not invoked in
-current buffer yet.")
-(make-variable-buffer-local 'editorconfig-properties-hash)
-(put 'editorconfig-properties-hash
- 'permanent-local
- t)
-
-(defvar editorconfig-lisp-use-default-indent nil
- "Selectively ignore the value of indent_size for Lisp files.
-Prevents `lisp-indent-offset' from being set selectively.
-
-nil - `lisp-indent-offset' is always set normally.
-t - `lisp-indent-offset' is never set normally
- (always use default indent for lisps).
-number - `lisp-indent-offset' is not set only if indent_size is
- equal to this number. For example, if this is set to 2,
- `lisp-indent-offset' will not be set only if indent_size is 2.")
-
-(define-error 'editorconfig-error
- "Error thrown from editorconfig lib")
-
-(defun editorconfig-error (&rest args)
- "Signal an `editorconfig-error'.
-Make a message by passing ARGS to `format-message'."
- (signal 'editorconfig-error (list (apply #'format-message args))))
-
-(defun editorconfig--disabled-for-filename (filename)
- "Return non-nil when EditorConfig is disabled for FILENAME."
- (cl-assert (stringp filename))
- (cl-loop for regexp in editorconfig-exclude-regexps
- if (string-match regexp filename) return t
- finally return nil))
-
-(defun editorconfig--disabled-for-majormode (majormode)
- "Return non-nil when Editorconfig is disabled for MAJORMODE."
- (cl-assert majormode)
- (or (provided-mode-derived-p majormode 'special-mode)
- (memq majormode
- editorconfig-exclude-modes)))
-
-(defun editorconfig-string-integer-p (string)
- "Return non-nil if STRING represents integer."
- (and (stringp string)
- (string-match-p "\\`[0-9]+\\'" string)))
-
-(defun editorconfig-set-indentation-python-mode (size)
- "Set `python-mode' indent size to SIZE."
- (setq-local python-indent-offset size)
- ;; For https://launchpad.net/python-mode
- (when (boundp 'py-indent-offset)
- (setq-local py-indent-offset size)))
-
-(defun editorconfig-set-indentation-latex-mode (size)
- "Set `latex-mode' indent size to SIZE."
- (setq-local tex-indent-basic size)
- (setq-local tex-indent-item size)
- (setq-local tex-indent-arg (* 2 size))
- ;; For AUCTeX
- (when (boundp 'TeX-brace-indent-level)
- (setq-local TeX-brace-indent-level size))
- (when (boundp 'LaTeX-indent-level)
- (setq-local LaTeX-indent-level size))
- (when (boundp 'LaTeX-item-indent)
- (setq-local LaTeX-item-indent (- size))))
-
-(defun editorconfig--should-set (size symbol)
- "Determines if editorconfig should set SYMBOL using SIZE."
- (if (eq symbol 'lisp-indent-offset)
- (cond
- ((null editorconfig-lisp-use-default-indent) t)
- ((eql t editorconfig-lisp-use-default-indent) nil)
- ((numberp editorconfig-lisp-use-default-indent)
- (not (eql size editorconfig-lisp-use-default-indent)))
- (t t))
- t))
-
-(defun editorconfig-set-indentation (style &optional size tab_width)
- "Set indentation type from STYLE, SIZE and TAB_WIDTH."
- (if (editorconfig-string-integer-p size)
- (setq size (string-to-number size))
- (unless (equal size "tab") (setq size nil)))
- (cond (tab_width
- (setq tab-width (string-to-number tab_width)))
- ((numberp size)
- (setq tab-width size)))
- (when (equal size "tab")
- (setq size tab-width))
- (cond ((equal style "space")
- (setq indent-tabs-mode nil))
- ((equal style "tab")
- (setq indent-tabs-mode t)))
- (when size
- (when (featurep 'evil)
- (setq-local evil-shift-width size))
- (let ((parent major-mode)
- entry)
- ;; Find the closet parent mode of `major-mode' in
- ;; `editorconfig-indentation-alist'.
- (while (and (not (setq entry (assoc parent editorconfig-indentation-alist)))
- (setq parent (get parent 'derived-mode-parent))))
- (when entry
- (let ((fn-or-list (cdr entry)))
- (cond ((functionp fn-or-list) (funcall fn-or-list size))
- ((listp fn-or-list)
- (dolist (elem fn-or-list)
- (cond ((and (symbolp elem)
- (editorconfig--should-set size elem))
- (set (make-local-variable elem) size))
- ((and (consp elem)
- (editorconfig--should-set size (car elem)))
- (let ((spec (cdr elem)))
- (set (make-local-variable (car elem))
- (cond ((functionp spec) (funcall spec size))
- ((integerp spec) (* spec size))
- (t spec))))))))))))))
-
-(defvar-local editorconfig--apply-coding-system-currently nil
- "Used internally.")
-(put 'editorconfig--apply-coding-system-currently
- 'permanent-local
- t)
-
-(defun editorconfig-merge-coding-systems (end-of-line charset)
- "Return merged coding system symbol of END-OF-LINE and CHARSET."
- (let ((eol (cond
- ((equal end-of-line "lf") 'undecided-unix)
- ((equal end-of-line "cr") 'undecided-mac)
- ((equal end-of-line "crlf") 'undecided-dos)
- (t 'undecided)))
- (cs (cond
- ((equal charset "latin1") 'iso-latin-1)
- ((equal charset "utf-8") 'utf-8)
- ((equal charset "utf-8-bom") 'utf-8-with-signature)
- ((equal charset "utf-16be") 'utf-16be-with-signature)
- ((equal charset "utf-16le") 'utf-16le-with-signature)
- (t 'undecided))))
- (merge-coding-systems cs eol)))
-
-(cl-defun editorconfig-set-coding-system-revert (end-of-line charset)
- "Set buffer coding system by END-OF-LINE and CHARSET.
-
-This function will revert buffer when the coding-system has been changed."
- ;; `editorconfig--advice-find-file-noselect' does not use this function
- (let ((coding-system (editorconfig-merge-coding-systems end-of-line
- charset)))
- (display-warning '(editorconfig editorconfig-set-coding-system-revert)
- (format "editorconfig-set-coding-system-revert: buffer-file-name: %S | buffer-file-coding-system: %S | coding-system: %S | apply-currently: %S"
- buffer-file-name
- buffer-file-coding-system
- coding-system
- editorconfig--apply-coding-system-currently)
- :debug)
- (when (eq coding-system 'undecided)
- (cl-return-from editorconfig-set-coding-system-revert))
- (when (and buffer-file-coding-system
- (memq buffer-file-coding-system
- (coding-system-aliases (merge-coding-systems coding-system
- buffer-file-coding-system))))
- (cl-return-from editorconfig-set-coding-system-revert))
- (unless (file-readable-p buffer-file-name)
- (set-buffer-file-coding-system coding-system)
- (cl-return-from editorconfig-set-coding-system-revert))
- (unless (memq coding-system
- (coding-system-aliases editorconfig--apply-coding-system-currently))
- ;; Revert functions might call editorconfig-apply again
- (unwind-protect
- (progn
- (setq editorconfig--apply-coding-system-currently coding-system)
- ;; Revert without query if buffer is not modified
- (let ((revert-without-query '(".")))
- (revert-buffer-with-coding-system coding-system)))
- (setq editorconfig--apply-coding-system-currently nil)))))
-
-(defun editorconfig-set-trailing-nl (final-newline)
- "Set up requiring final newline by FINAL-NEWLINE.
-
-This function will set `require-final-newline' and `mode-require-final-newline'
-to non-nil when FINAL-NEWLINE is true."
- (pcase final-newline
- ("true"
- ;; keep prefs around how/when the nl is added, if set - otherwise add on save
- (setq-local require-final-newline (or require-final-newline t))
- (setq-local mode-require-final-newline (or mode-require-final-newline t)))
- ("false"
- ;; FIXME: Add functionality for actually REMOVING any trailing newlines here!
- ;; (rather than just making sure we don't automagically ADD a new one)
- (setq-local require-final-newline nil)
- (setq-local mode-require-final-newline nil))))
-
-(defun editorconfig-set-trailing-ws (trim-trailing-ws)
- "Set up trimming of trailing whitespace at end of lines by TRIM-TRAILING-WS."
- (make-local-variable 'write-file-functions) ;; just current buffer
- (when (and (equal trim-trailing-ws "true")
- (not buffer-read-only))
- ;; when true we push delete-trailing-whitespace (emacs > 21)
- ;; to write-file-functions
- (if editorconfig-trim-whitespaces-mode
- (funcall editorconfig-trim-whitespaces-mode 1)
- (add-to-list 'write-file-functions 'delete-trailing-whitespace)))
- (when (or (equal trim-trailing-ws "false")
- buffer-read-only)
- ;; when false we remove every delete-trailing-whitespace
- ;; from write-file-functions
- (when editorconfig-trim-whitespaces-mode
- (funcall editorconfig-trim-whitespaces-mode 0))
- (setq write-file-functions
- (delete 'delete-trailing-whitespace write-file-functions))))
-
-(defun editorconfig-set-line-length (length)
- "Set the max line length (`fill-column') to LENGTH."
- (when (and (editorconfig-string-integer-p length)
- (> (string-to-number length) 0))
- (setq fill-column (string-to-number length))))
-
-
-(defun editorconfig--execute-editorconfig-exec (filename)
- "Execute EditorConfig core with FILENAME and return output."
- (if filename
- (with-temp-buffer
- (let ((remote (file-remote-p filename))
- (remote-localname (file-remote-p filename
- 'localname)))
- (display-warning '(editorconfig editorconfig--execute-editorconfig-exec)
- (format "editorconfig--execute-editorconfig-exec: filename: %S | remote: %S | remote-localname: %S"
- filename
- remote
- remote-localname)
- :debug)
- (if remote
- (progn
- (cd (concat remote "/"))
- (setq filename remote-localname))
- (cd "/")))
- (display-warning '(editorconfig editorconfig--execute-editorconfig-exec)
- (format "editorconfig--execute-editorconfig-exec: default-directory: %S | filename: %S"
- default-directory
- filename
- )
- :debug)
- (if (eq 0
- (process-file editorconfig-exec-path nil t nil filename))
- (buffer-string)
- (editorconfig-error (buffer-string))))
- ""))
-
-(defun editorconfig--parse-properties (props-string)
- "Create properties hash table from PROPS-STRING."
- (let ((props-list (split-string props-string "\n"))
- (properties (make-hash-table)))
- (dolist (prop props-list properties)
- (let ((key-val (split-string prop " *= *")))
- (when (> (length key-val) 1)
- (let ((key (intern (car key-val)))
- (val (mapconcat 'identity (cdr key-val) "")))
- (puthash key val properties)))))))
-
-(defun editorconfig-get-properties-from-exec (filename)
- "Get EditorConfig properties of file FILENAME.
-
-This function uses value of `editorconfig-exec-path' to get properties."
- (if (executable-find editorconfig-exec-path)
- (editorconfig--parse-properties (editorconfig--execute-editorconfig-exec filename))
- (editorconfig-error "Unable to find editorconfig executable")))
-
-(defun editorconfig-get-properties (filename)
- "Get EditorConfig properties for file FILENAME.
-
-It calls `editorconfig-get-properties-from-exec' if
-`editorconfig-exec-path' is found, otherwise
-`editorconfig-core-get-properties-hash'."
- (if (and (executable-find editorconfig-exec-path)
- (not (file-remote-p filename)))
- (editorconfig-get-properties-from-exec filename)
- (require 'editorconfig-core)
- (editorconfig-core-get-properties-hash filename)))
-
-(defun editorconfig-call-get-properties-function (filename)
- "Call `editorconfig-get-properties-function' with FILENAME and return result.
-
-This function also removes 'unset'ted properties and calls
-`editorconfig-hack-properties-functions'."
- (unless (functionp editorconfig-get-properties-function)
- (editorconfig-error "Invalid editorconfig-get-properties-function value"))
- (if (stringp filename)
- (setq filename (expand-file-name filename))
- (editorconfig-error "Invalid argument: %S" filename))
- (let ((props nil))
- (condition-case err
- (setq props (funcall editorconfig-get-properties-function
- filename))
- (error
- (editorconfig-error "Error from editorconfig-get-properties-function: %S"
- err)))
- (cl-loop for k being the hash-keys of props using (hash-values v)
- when (equal v "unset") do (remhash k props))
- props))
-
-(defun editorconfig-set-local-variables (props)
- "Set buffer variables according to EditorConfig PROPS."
- (editorconfig-set-indentation (gethash 'indent_style props)
- (gethash 'indent_size props)
- (gethash 'tab_width props))
- (editorconfig-set-trailing-nl (gethash 'insert_final_newline props))
- (editorconfig-set-trailing-ws (gethash 'trim_trailing_whitespace props))
- (editorconfig-set-line-length (gethash 'max_line_length props)))
-
-;;;###autoload
-(defun editorconfig-apply ()
- "Get and apply EditorConfig properties to current buffer.
-
-This function does not respect the values of `editorconfig-exclude-modes' and
-`editorconfig-exclude-regexps' and always applies available properties.
-Use `editorconfig-mode-apply' instead to make use of these variables."
- (interactive)
- (when buffer-file-name
- (condition-case err
- (progn
- (let ((props (editorconfig-call-get-properties-function buffer-file-name)))
- (condition-case err
- (run-hook-with-args 'editorconfig-hack-properties-functions props)
- (error
- (display-warning '(editorconfig editorconfig-hack-properties-functions)
- (format "Error while running editorconfig-hack-properties-functions, abort running hook: %S"
- err)
- :warning)))
- (setq editorconfig-properties-hash props)
- (editorconfig-set-local-variables props)
- (editorconfig-set-coding-system-revert
- (gethash 'end_of_line props)
- (gethash 'charset props))
- (condition-case err
- (run-hook-with-args 'editorconfig-after-apply-functions props)
- (error
- (display-warning '(editorconfig editorconfig-after-apply-functions)
- (format "Error while running editorconfig-after-apply-functions, abort running hook: %S"
- err)
- :warning)))))
- (error
- (display-warning '(editorconfig editorconfig-apply)
- (format "Error in editorconfig-apply, styles will not be applied: %S" err)
- :error)))))
-
-(defun editorconfig-mode-apply ()
- "Get and apply EditorConfig properties to current buffer.
-
-This function does nothing when the major mode is listed in
-`editorconfig-exclude-modes', or variable `buffer-file-name' matches
-any of regexps in `editorconfig-exclude-regexps'."
- (interactive)
- (when (and major-mode
- (not (editorconfig--disabled-for-majormode major-mode))
- buffer-file-name
- (not (editorconfig--disabled-for-filename buffer-file-name)))
- (editorconfig-apply)))
-
-(defun editorconfig-major-mode-hook ()
- "Function to run when `major-mode' has been changed.
-
-This functions does not reload .editorconfig file, just sets local variables
-again. Changing major mode can reset these variables.
-
-This function also executes `editorconfig-after-apply-functions' functions."
- (display-warning '(editorconfig editorconfig-major-mode-hook)
- (format "editorconfig-major-mode-hook: editorconfig-mode: %S, major-mode: %S, -properties-hash: %S"
- (and (boundp 'editorconfig-mode)
- editorconfig-mode)
- major-mode
- editorconfig-properties-hash)
- :debug)
- (when (and (bound-and-true-p editorconfig-mode)
- editorconfig-properties-hash)
- (editorconfig-set-local-variables editorconfig-properties-hash)
- (condition-case err
- (run-hook-with-args 'editorconfig-after-apply-functions editorconfig-properties-hash)
- (error
- (display-warning '(editorconfig editorconfig-major-mode-hook)
- (format "Error while running `editorconfig-after-apply-functions': %S"
- err))))))
-
-(defvar editorconfig--cons-filename-codingsystem nil
- "Used interally.
-
-`editorconfig--advice-find-file-noselect' will set this variable, and
-`editorconfig--advice-insert-file-contents' will use this variable to set
-`coding-system-for-read' value.")
-
-(defun editorconfig--advice-insert-file-contents (f filename &rest args)
- "Set `coding-system-for-read'.
-
-This function should be added as an advice function to `insert-file-contents'.
-F is that function, and FILENAME and ARGS are arguments passed to F."
- ;; This function uses `editorconfig--cons-filename-codingsystem' to decide what coding-system
- ;; should be used, which will be set by `editorconfig--advice-find-file-noselect'.
- (display-warning '(editorconfig editorconfig--advice-insert-file-contents)
- (format "editorconfig--advice-insert-file-contents: filename: %S args: %S codingsystem: %S bufferfilename: %S"
- filename args
- editorconfig--cons-filename-codingsystem
- buffer-file-name)
- :debug)
- (if (and (stringp filename)
- (stringp (car editorconfig--cons-filename-codingsystem))
- (string= (expand-file-name filename)
- (car editorconfig--cons-filename-codingsystem))
- (cdr editorconfig--cons-filename-codingsystem)
- (not (eq (cdr editorconfig--cons-filename-codingsystem)
- 'undecided)))
- (let ((coding-system-for-read (cdr editorconfig--cons-filename-codingsystem))
- ;; (coding-system-for-read 'undecided)
- )
- (apply f filename args))
- (apply f filename args)))
-
-(defun editorconfig--advice-find-file-noselect (f filename &rest args)
- "Get EditorConfig properties and apply them to buffer to be visited.
-
-This function should be added as an advice function to `find-file-noselect'.
-F is that function, and FILENAME and ARGS are arguments passed to F."
- (let ((props nil)
- (coding-system nil)
- (ret nil))
- (condition-case err
- (when (and (stringp filename)
- (not (editorconfig--disabled-for-filename filename)))
- (setq props (editorconfig-call-get-properties-function filename))
- (setq coding-system
- (editorconfig-merge-coding-systems (gethash 'end_of_line props)
- (gethash 'charset props))))
- (error
- (display-warning '(editorconfig editorconfig--advice-find-file-noselect)
- (format "Failed to get properties, styles will not be applied: %S"
- err)
- :warning)))
-
- (let ((editorconfig--cons-filename-codingsystem (cons (expand-file-name filename)
- coding-system)))
- (setq ret (apply f filename args)))
-
- (condition-case err
- (with-current-buffer ret
- (when (and props
- ;; filename has already been checked
- (not (editorconfig--disabled-for-majormode major-mode)))
- (when (and (file-remote-p filename)
- (not (local-variable-p 'buffer-file-coding-system))
- (not (file-exists-p filename))
- coding-system
- (not (eq coding-system
- 'undecided)))
- ;; When file path indicates it is a remote file and it actually
- ;; does not exists, `buffer-file-coding-system' will not be set.
- ;; (Seems `insert-file-contents' will not be called)
- ;; For that case, explicitly set this value so that saving will be done
- ;; with expected coding system.
- (set-buffer-file-coding-system coding-system))
-
- ;; NOTE: When using editorconfig-2-mode, hack-properties-functions cannot affect coding-system value,
- ;; because it has to be set before initializing buffers.
- (condition-case err
- (run-hook-with-args 'editorconfig-hack-properties-functions props)
- (error
- (display-warning '(editorconfig editorconfig-hack-properties-functions)
- (format "Error while running editorconfig-hack-properties-functions, abort running hook: %S"
- err)
- :warning)))
- (setq editorconfig-properties-hash props)
- ;; When initializing buffer, `editorconfig-major-mode-hook'
- ;; will be called before setting `editorconfig-properties-hash', so
- ;; execute this explicitly here.
- (editorconfig-set-local-variables props)
-
- (condition-case err
- (run-hook-with-args 'editorconfig-after-apply-functions props)
- (error
- (display-warning '(editorconfig editorconfig--advice-find-file-noselect)
- (format "Error while running `editorconfig-after-apply-functions': %S"
- err))))))
- (error
- (display-warning '(editorconfig editorconfig--advice-find-file-noselect)
- (format "Error while setting variables from EditorConfig: %S" err))))
- ret))
-
-(defvar editorconfig--legacy-version nil
- "Use legacy version of editorconfig-mode.
-
-As of 2021/08/30, `editorconfig-mode' uses totally new implementation by
-default. This flag disables this and go back to previous version.")
-
-;;;###autoload
-(define-minor-mode editorconfig-mode
- "Toggle EditorConfig feature.
-
-To disable EditorConfig in some buffers, modify
-`editorconfig-exclude-modes' or `editorconfig-exclude-regexps'."
- :global t
- :lighter editorconfig-mode-lighter
- (if (not editorconfig--legacy-version)
- (let ((modehooks '(prog-mode-hook
- text-mode-hook
- read-only-mode-hook
- ;; Some modes call `kill-all-local-variables' in their init
- ;; code, which clears some values set by editorconfig.
- ;; For those modes, editorconfig-apply need to be called
- ;; explicitly through their hooks.
- rpm-spec-mode-hook)))
- (if editorconfig-mode
- (progn
- (advice-add 'find-file-noselect :around 'editorconfig--advice-find-file-noselect)
- (advice-add 'insert-file-contents :around 'editorconfig--advice-insert-file-contents)
- (dolist (hook modehooks)
- (add-hook hook
- 'editorconfig-major-mode-hook
- t)))
- (advice-remove 'find-file-noselect 'editorconfig--advice-find-file-noselect)
- (advice-remove 'insert-file-contents 'editorconfig--advice-insert-file-contents)
- (dolist (hook modehooks)
- (remove-hook hook 'editorconfig-major-mode-hook))))
-
- ;; editorconfig--legacy-version is enabled
- ;; See https://github.com/editorconfig/editorconfig-emacs/issues/141 for why
- ;; not `after-change-major-mode-hook'
- (dolist (hook '(change-major-mode-after-body-hook
- read-only-mode-hook
- ;; Some modes call `kill-all-local-variables' in their init
- ;; code, which clears some values set by editorconfig.
- ;; For those modes, editorconfig-apply need to be called
- ;; explicitly through their hooks.
- rpm-spec-mode-hook))
- (if editorconfig-mode
- (add-hook hook 'editorconfig-mode-apply)
- (remove-hook hook 'editorconfig-mode-apply)))))
-
-
-;; Tools
-;; Some useful commands for users, not required for EditorConfig to work
-
-;;;###autoload
-(defun editorconfig-find-current-editorconfig ()
- "Find the closest .editorconfig file for current file."
- (interactive)
- (eval-and-compile (require 'editorconfig-core))
- (when-let ((file (editorconfig-core-get-nearest-editorconfig
- default-directory)))
- (find-file file)))
-
-;;;###autoload
-(defun editorconfig-display-current-properties ()
- "Display EditorConfig properties extracted for current buffer."
- (interactive)
- (if editorconfig-properties-hash
- (let ((buf (get-buffer-create "*EditorConfig Properties*"))
- (file buffer-file-name)
- (props editorconfig-properties-hash))
- (with-current-buffer buf
- (erase-buffer)
- (insert (format "# EditorConfig for %s\n" file))
- (maphash (lambda (k v)
- (insert (format "%S = %s\n" k v)))
- props))
- (display-buffer buf))
- (message "Properties are not applied to current buffer yet.")
- nil))
-;;;###autoload
-(defalias 'describe-editorconfig-properties
- 'editorconfig-display-current-properties)
-
-;;;###autoload
-(defun editorconfig-format-buffer()
- "Format buffer according to .editorconfig indent_style and indent_width."
- (interactive)
- (when (string= (gethash 'indent_style editorconfig-properties-hash) "tab")
- (tabify (point-min) (point-max)))
- (when (string= (gethash 'indent_style editorconfig-properties-hash) "space")
- (untabify (point-min) (point-max)))
- (indent-region (point-min) (point-max)))
-
-
-
-;; (defconst editorconfig--version
-;; (eval-when-compile
-;; (require 'lisp-mnt)
-;; (declare-function lm-version "lisp-mnt" nil)
-;; (lm-version))
-;; "EditorConfig version.")
-
-(declare-function find-library-name "find-func" (library))
-(declare-function lm-version "lisp-mnt" nil)
-
-;;;###autoload
-(defun editorconfig-version (&optional show-version)
- "Get EditorConfig version as string.
-
-If called interactively or if SHOW-VERSION is non-nil, show the
-version in the echo area and the messages buffer."
- (interactive (list t))
- (let* ((version (with-temp-buffer
- (require 'find-func)
- (insert-file-contents (find-library-name "editorconfig"))
- (require 'lisp-mnt)
- (lm-version)))
- (pkg (and (eval-and-compile (require 'package nil t))
- (cadr (assq 'editorconfig
- package-alist))))
- (pkg-version (and pkg
- (package-version-join (package-desc-version pkg))))
- (version-full (if (and pkg-version
- (not (string= version pkg-version)))
- (concat version "-" pkg-version)
- version)))
- (when show-version
- (message "EditorConfig Emacs v%s" version-full))
- version-full))
-
-(provide 'editorconfig)
-;;; editorconfig.el ends here
-
-;; Local Variables:
-;; sentence-end-double-space: t
-;; End:
diff --git a/emacs.d/elpa/editorconfig-20230109.633/editorconfig.info b/emacs.d/elpa/editorconfig-20230109.633/editorconfig.info
deleted file mode 100644
index bdcf25e..0000000
--- a/emacs.d/elpa/editorconfig-20230109.633/editorconfig.info
+++ /dev/null
@@ -1,353 +0,0 @@
-This is editorconfig.info, produced by makeinfo version 6.7 from
-editorconfig.texi.
-
-INFO-DIR-SECTION Emacs
-START-INFO-DIR-ENTRY
-* EditorConfig: (editorconfig). EditorConfig Emacs Plugin.
-END-INFO-DIR-ENTRY
-
-
-File: editorconfig.info, Node: Top, Next: Getting Started, Up: (dir)
-
-1 EditorConfig Emacs Plugin
-***************************
-
-This is an EditorConfig (https://editorconfig.org) plugin for Emacs
-(https://www.gnu.org/software/emacs/).
-
-* Menu:
-
-* Getting Started::
-* Supported properties::
-* Customize::
-* Troubleshooting::
-* Submitting Bugs and Feature Requests::
-* License::
-
-
-File: editorconfig.info, Node: Getting Started, Next: Supported properties, Prev: Top, Up: Top
-
-1.1 Getting Started
-===================
-
-* Menu:
-
-* packageel::
-* use-package::
-* Manual installation::
-
-
-File: editorconfig.info, Node: packageel, Next: use-package, Up: Getting Started
-
-1.1.1 package.el
-----------------
-
-This package is available from MELPA (https://melpa.org/#/editorconfig),
-MELPA Stable (https://stable.melpa.org/#/editorconfig) and NonGNU ELPA
-(http://elpa.nongnu.org/nongnu/editorconfig.html). Install from these
-repositories and enable global minor-mode 'editorconfig-mode':
-
-(editorconfig-mode 1)
-
- Normally, enabling 'editorconfig-mode' should be enough for this
-plugin to work: all other configurations are optional. This mode sets
-up hooks so that EditorConfig properties will be loaded and applied to
-the new buffers automatically when visiting files.
-
-
-File: editorconfig.info, Node: use-package, Next: Manual installation, Prev: packageel, Up: Getting Started
-
-1.1.2 use-package
------------------
-
-If you use *use-package* (https://www.emacswiki.org/emacs/UsePackage),
-add the following to your 'init.el' file:
-
-(use-package editorconfig
- :ensure t
- :config
- (editorconfig-mode 1))
-
-
-File: editorconfig.info, Node: Manual installation, Prev: use-package, Up: Getting Started
-
-1.1.3 Manual installation
--------------------------
-
-Copy all '.el' files in this repository to '~/.emacs.d/lisp' and add the
-following:
-
-(add-to-list 'load-path "~/.emacs.d/lisp")
-(require 'editorconfig)
-(editorconfig-mode 1)
-
-
-File: editorconfig.info, Node: Supported properties, Next: Customize, Prev: Getting Started, Up: Top
-
-1.2 Supported properties
-========================
-
-Current Emacs plugin coverage for EditorConfig's properties
-(https://editorconfig.org/#supported-properties):
-
- * 'indent_style'
- * 'indent_size'
- * 'tab_width'
- * 'end_of_line'
- * 'charset'
- * 'trim_trailing_whitespace'
- * 'insert_final_newline = true' is supported
- * 'insert_final_newline = false' is not enforced (as in trailing
- newlines actually being removed automagically), we just
- buffer-locally override any preferences that would auto-add them to
- files '.editorconfig' marks as trailing-newline-free
- * 'max_line_length'
- * 'file_type_ext' (Experimental) (See below)
- * 'file_type_emacs' (Experimental) (See below)
- * 'root' (only used by EditorConfig core)
-
- Not yet covered properties marked with over-strike - pull requests
-implementing missing features warmly welcomed! Typically, you will want
-to tie these to native functionality, or the configuration of existing
-packages handling the feature.
-
- As several packages have their own handling of, say, indentation, we
-might not yet cover some mode you use, but we try to add the ones that
-show up on our radar.
-
-* Menu:
-
-* File Type file_type_ext file_type_emacs::
-
-
-File: editorconfig.info, Node: File Type file_type_ext file_type_emacs, Up: Supported properties
-
-1.2.1 File Type (file_type_ext, file_type_emacs)
-------------------------------------------------
-
-File-type feature is currently disabled, because this package is now
-undergoing big internal refactoring. For those who want this
-functionality, please consider using editorconfig-custom-majormode
-(https://github.com/10sr/editorconfig-custom-majormode-el).
-
-
-File: editorconfig.info, Node: Customize, Next: Troubleshooting, Prev: Supported properties, Up: Top
-
-1.3 Customize
-=============
-
-'editorconfig-emacs' provides some customize variables.
-
- Here are some of these variables: for the full list of available
-variables, type M-x customize-group [RET] editorconfig [RET].
-
-* Menu:
-
-* editorconfig-trim-whitespaces-mode::
-* editorconfig-after-apply-functions::
-* editorconfig-hack-properties-functions::
-
-
-File: editorconfig.info, Node: editorconfig-trim-whitespaces-mode, Next: editorconfig-after-apply-functions, Up: Customize
-
-1.3.1 'editorconfig-trim-whitespaces-mode'
-------------------------------------------
-
-Buffer local minor-mode to use to trim trailing whitespaces.
-
- If set, editorconfig will enable/disable this mode in accord with
-'trim_trailing_whitespace' property in '.editorconfig'. Otherwise, use
-Emacs built-in 'delete-trailing-whitespace' function.
-
- One possible value is 'ws-butler-mode'
-(https://github.com/lewang/ws-butler), with which only lines touched get
-trimmed. To use it, add following to your init.el:
-
-(setq editorconfig-trim-whitespaces-mode
- 'ws-butler-mode)
-
-
-File: editorconfig.info, Node: editorconfig-after-apply-functions, Next: editorconfig-hack-properties-functions, Prev: editorconfig-trim-whitespaces-mode, Up: Customize
-
-1.3.2 'editorconfig-after-apply-functions'
-------------------------------------------
-
-(Formerly 'editorconfig-custom-hooks')
-
- A list of functions which will be called after loading common
-EditorConfig settings, when you can set some custom variables.
-
- For example, 'web-mode' has several variables for indentation offset
-size and EditorConfig sets them at once by 'indent_size'. You can stop
-indenting only blocks of 'web-mode' by adding following to your init.el:
-
-(add-hook 'editorconfig-after-apply-functions
- (lambda (props) (setq web-mode-block-padding 0)))
-
-
-File: editorconfig.info, Node: editorconfig-hack-properties-functions, Prev: editorconfig-after-apply-functions, Up: Customize
-
-1.3.3 'editorconfig-hack-properties-functions'
-----------------------------------------------
-
-A list of functions to alter property values before applying them.
-
- These functions will be run after loading ".editorconfig" files and
-before applying them to current buffer, so that you can alter some
-properties from ".editorconfig" before they take effect.
-
- For example, Makefile files always use tab characters for
-indentation: you can overwrite "indent_style" property when current
-'major-mode' is 'makefile-mode':
-
-(add-hook 'editorconfig-hack-properties-functions
- '(lambda (props)
- (when (derived-mode-p 'makefile-mode)
- (puthash 'indent_style "tab" props))))
-
-
-File: editorconfig.info, Node: Troubleshooting, Next: Submitting Bugs and Feature Requests, Prev: Customize, Up: Top
-
-1.4 Troubleshooting
-===================
-
-Enabling 'editorconfig-mode' should be enough for normal cases.
-
- When EditorConfig properties are not effective for unknown reason, we
-recommend first trying 'M-x editorconfig-display-current-properties'.
-
- This command will open a new buffer and display the EditorConfig
-properties loaded for current buffer. You can check if EditorConfig
-properties were not read for buffers at all, or they were loaded but did
-not take effect for some other reasons.
-
-* Menu:
-
-* Indentation for new major-modes::
-* Not work at all for FOO-mode!::
-
-
-File: editorconfig.info, Node: Indentation for new major-modes, Next: Not work at all for FOO-mode!, Up: Troubleshooting
-
-1.4.1 Indentation for new major-modes
--------------------------------------
-
-Because most Emacs major-modes have their own indentation settings, this
-plugin requires explicit support for each major-mode for 'indent_size'
-property.
-
- By default this plugin ships with settings for many major-modes, but,
-sorry to say, it cannot be perfect. Especially it is difficult to
-support brand-new major-modes. Please feel free to submit issue or
-pull-request for such major-mode!
-
- Supported major-modes and their indentation configs are defined in
-the variable 'editorconfig-indentation-alist'.
-
-
-File: editorconfig.info, Node: Not work at all for FOO-mode!, Prev: Indentation for new major-modes, Up: Troubleshooting
-
-1.4.2 Not work at all for FOO-mode!
------------------------------------
-
-Most cases properties are loaded just after visiting files when
-'editorconfig-mode' is enabled. But it is known that there are
-major-modes that this mechanism does not work for and require explicit
-call of 'editorconfig-apply'.
-
- Typically it will occur when the major-mode is not defined using
-'define-derived-mode' ('rpm-spec-mode' is an example for this). Please
-feel free to submit issues if you find such modes!
-
-
-File: editorconfig.info, Node: Submitting Bugs and Feature Requests, Next: License, Prev: Troubleshooting, Up: Top
-
-1.5 Submitting Bugs and Feature Requests
-========================================
-
-Bugs, feature requests, and other issues should be submitted to the
-issue tracker: https://github.com/editorconfig/editorconfig-emacs/issues
-
-* Menu:
-
-* Development::
-
-
-File: editorconfig.info, Node: Development, Up: Submitting Bugs and Feature Requests
-
-1.5.1 Development
------------------
-
-Make and CMake (https://cmake.org) must be installed to run the tests
-locally:
-
-$ make check
-
- To start a new Emacs process with current '*.el' and without loading
-user init file, run:
-
-$ make sandbox
-
-
-File: editorconfig.info, Node: License, Prev: Submitting Bugs and Feature Requests, Up: Top
-
-1.6 License
-===========
-
-EditorConfig Emacs Plugin is free software: you can redistribute it
-and/or modify it under the terms of the GNU General Public License as
-published by the Free Software Foundation, either version 3 of the
-License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
-Public License for more details.
-
- You should have received a copy of the GNU General Public License
-along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-
-
-Tag Table:
-Node: Top208
-Ref: #editorconfig-emacs-plugin340
-Node: Getting Started590
-Ref: #getting-started733
-Node: packageel797
-Ref: #package.el919
-Node: use-package1483
-Ref: #use-package1635
-Node: Manual installation1823
-Ref: #manual-installation1973
-Node: Supported properties2148
-Ref: #supported-properties2307
-Node: File Type file_type_ext file_type_emacs3481
-Ref: #file-type-file_type_ext-file_type_emacs3682
-Node: Customize3941
-Ref: #customize4078
-Node: editorconfig-trim-whitespaces-mode4397
-Ref: #editorconfig-trim-whitespaces-mode4613
-Node: editorconfig-after-apply-functions5104
-Ref: #editorconfig-after-apply-functions5367
-Node: editorconfig-hack-properties-functions5853
-Ref: #editorconfig-hack-properties-functions6081
-Node: Troubleshooting6691
-Ref: #troubleshooting6856
-Node: Indentation for new major-modes7396
-Ref: #indentation-for-new-major-modes7600
-Node: Not work at all for FOO-mode!8116
-Ref: #not-work-at-all-for-foo-mode8316
-Node: Submitting Bugs and Feature Requests8738
-Ref: #submitting-bugs-and-feature-requests8943
-Node: Development9111
-Ref: #development9238
-Node: License9442
-Ref: #license9565
-
-End Tag Table
-
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/emacs.d/elpa/epl-20180205.2049/epl-autoloads.el b/emacs.d/elpa/epl-20180205.2049/epl-autoloads.el
deleted file mode 100644
index c6221c5..0000000
--- a/emacs.d/elpa/epl-20180205.2049/epl-autoloads.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; epl-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "epl" "epl.el" (0 0 0 0))
-;;; Generated autoloads from epl.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "epl" '("epl-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; epl-autoloads.el ends here
diff --git a/emacs.d/elpa/epl-20180205.2049/epl-pkg.el b/emacs.d/elpa/epl-20180205.2049/epl-pkg.el
deleted file mode 100644
index a977868..0000000
--- a/emacs.d/elpa/epl-20180205.2049/epl-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "epl" "20180205.2049" "Emacs Package Library" '((cl-lib "0.3")) :commit "78ab7a85c08222cd15582a298a364774e3282ce6" :keywords '("convenience") :authors '(("Sebastian Wiesner" . "swiesner@lunaryorn.com")) :maintainer '("Johan Andersson" . "johan.rejeep@gmail.com") :url "http://github.com/cask/epl")
diff --git a/emacs.d/elpa/epl-20180205.2049/epl.el b/emacs.d/elpa/epl-20180205.2049/epl.el
deleted file mode 100644
index 5bbd76a..0000000
--- a/emacs.d/elpa/epl-20180205.2049/epl.el
+++ /dev/null
@@ -1,711 +0,0 @@
-;;; epl.el --- Emacs Package Library -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013-2015 Sebastian Wiesner
-;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2015 Free Software
-
-;; Author: Sebastian Wiesner <swiesner@lunaryorn.com>
-;; Maintainer: Johan Andersson <johan.rejeep@gmail.com>
-;; Sebastian Wiesner <swiesner@lunaryorn.com>
-;; Version: 0.10-cvs
-;; Package-Version: 20180205.2049
-;; Package-Requires: ((cl-lib "0.3"))
-;; Keywords: convenience
-;; URL: http://github.com/cask/epl
-
-;; This file is NOT part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; A package management library for Emacs, based on package.el.
-
-;; The purpose of this library is to wrap all the quirks and hassle of
-;; package.el into a sane API.
-
-;; The following functions comprise the public interface of this library:
-
-;;; Package directory selection
-
-;; `epl-package-dir' gets the directory of packages.
-
-;; `epl-default-package-dir' gets the default package directory.
-
-;; `epl-change-package-dir' changes the directory of packages.
-
-;;; Package system management
-
-;; `epl-initialize' initializes the package system and activates all
-;; packages.
-
-;; `epl-reset' resets the package system.
-
-;; `epl-refresh' refreshes all package archives.
-
-;; `epl-add-archive' adds a new package archive.
-
-;;; Package objects
-
-;; Struct `epl-requirement' describes a requirement of a package with `name' and
-;; `version' slots.
-
-;; `epl-requirement-version-string' gets a requirement version as string.
-
-;; Struct `epl-package' describes an installed or installable package with a
-;; `name' and some internal `description'.
-
-;; `epl-package-version' gets the version of a package.
-
-;; `epl-package-version-string' gets the version of a package as string.
-
-;; `epl-package-summary' gets the summary of a package.
-
-;; `epl-package-requirements' gets the requirements of a package.
-
-;; `epl-package-directory' gets the installation directory of a package.
-
-;; `epl-package-from-buffer' creates a package object for the package contained
-;; in the current buffer.
-
-;; `epl-package-from-file' creates a package object for a package file, either
-;; plain lisp or tarball.
-
-;; `epl-package-from-descriptor-file' creates a package object for a package
-;; description (i.e. *-pkg.el) file.
-
-;;; Package database access
-
-;; `epl-package-installed-p' determines whether a package is installed, either
-;; built-in or explicitly installed.
-
-;; `epl-package-outdated-p' determines whether a package is outdated, that is,
-;; whether a package with a higher version number is available.
-
-;; `epl-built-in-packages', `epl-installed-packages', `epl-outdated-packages'
-;; and `epl-available-packages' get all packages built-in, installed, outdated,
-;; or available for installation respectively.
-
-;; `epl-find-built-in-package', `epl-find-installed-packages' and
-;; `epl-find-available-packages' find built-in, installed and available packages
-;; by name.
-
-;; `epl-find-upgrades' finds all upgradable packages.
-
-;; `epl-built-in-p' return true if package is built-in to Emacs.
-
-;;; Package operations
-
-;; `epl-install-file' installs a package file.
-
-;; `epl-package-install' installs a package.
-
-;; `epl-package-delete' deletes a package.
-
-;; `epl-upgrade' upgrades packages.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'package)
-
-
-(unless (fboundp #'define-error)
- ;; `define-error' for 24.3 and earlier, copied from subr.el
- (defun define-error (name message &optional parent)
- "Define NAME as a new error signal.
-MESSAGE is a string that will be output to the echo area if such an error
-is signaled without being caught by a `condition-case'.
-PARENT is either a signal or a list of signals from which it inherits.
-Defaults to `error'."
- (unless parent (setq parent 'error))
- (let ((conditions
- (if (consp parent)
- (apply #'append
- (mapcar (lambda (parent)
- (cons parent
- (or (get parent 'error-conditions)
- (error "Unknown signal `%s'" parent))))
- parent))
- (cons parent (get parent 'error-conditions)))))
- (put name 'error-conditions
- (delete-dups (copy-sequence (cons name conditions))))
- (when message (put name 'error-message message)))))
-
-(defsubst epl--package-desc-p (package)
- "Whether PACKAGE is a `package-desc' object.
-
-Like `package-desc-p', but return nil, if `package-desc-p' is not
-defined as function."
- (and (fboundp 'package-desc-p) (package-desc-p package)))
-
-
-;;; EPL errors
-(define-error 'epl-error "EPL error")
-
-(define-error 'epl-invalid-package "Invalid EPL package" 'epl-error)
-
-(define-error 'epl-invalid-package-file "Invalid EPL package file"
- 'epl-invalid-package)
-
-
-;;; Package directory
-(defun epl-package-dir ()
- "Get the directory of packages."
- package-user-dir)
-
-(defun epl-default-package-dir ()
- "Get the default directory of packages."
- (eval (car (get 'package-user-dir 'standard-value))))
-
-(defun epl-change-package-dir (directory)
- "Change the directory of packages to DIRECTORY."
- (setq package-user-dir directory)
- (epl-initialize))
-
-
-;;; Package system management
-(defvar epl--load-path-before-initialize nil
- "Remember the load path for `epl-reset'.")
-
-(defun epl-initialize (&optional no-activate)
- "Load Emacs Lisp packages and activate them.
-
-With NO-ACTIVATE non-nil, do not activate packages."
- (setq epl--load-path-before-initialize load-path)
- (package-initialize no-activate))
-
-(defalias 'epl-refresh 'package-refresh-contents)
-
-(defun epl-add-archive (name url)
- "Add a package archive with NAME and URL."
- (add-to-list 'package-archives (cons name url)))
-
-(defun epl-reset ()
- "Reset the package system.
-
-Clear the list of installed and available packages, the list of
-package archives and reset the package directory."
- (setq package-alist nil
- package-archives nil
- package-archive-contents nil
- load-path epl--load-path-before-initialize)
- (when (boundp 'package-obsolete-alist) ; Legacy package.el
- (setq package-obsolete-alist nil))
- (epl-change-package-dir (epl-default-package-dir)))
-
-
-;;; Package structures
-(cl-defstruct (epl-requirement
- (:constructor epl-requirement-create))
- "Structure describing a requirement.
-
-Slots:
-
-`name' The name of the required package, as symbol.
-
-`version' The version of the required package, as version list."
- name
- version)
-
-(defun epl-requirement-version-string (requirement)
- "The version of a REQUIREMENT, as string."
- (package-version-join (epl-requirement-version requirement)))
-
-(cl-defstruct (epl-package (:constructor epl-package-create))
- "Structure representing a package.
-
-Slots:
-
-`name' The package name, as symbol.
-
-`description' The package description.
-
-The format package description varies between package.el
-variants. For `package-desc' variants, it is simply the
-corresponding `package-desc' object. For legacy variants, it is
-a vector `[VERSION REQS DOCSTRING]'.
-
-Do not access `description' directly, but instead use the
-`epl-package' accessors."
- name
- description)
-
-(defmacro epl-package-as-description (var &rest body)
- "Cast VAR to a package description in BODY.
-
-VAR is a symbol, bound to an `epl-package' object. This macro
-casts this object to the `description' object, and binds the
-description to VAR in BODY."
- (declare (indent 1))
- (unless (symbolp var)
- (signal 'wrong-type-argument (list #'symbolp var)))
- `(if (epl-package-p ,var)
- (let ((,var (epl-package-description ,var)))
- ,@body)
- (signal 'wrong-type-argument (list #'epl-package-p ,var))))
-
-(defsubst epl-package--package-desc-p (package)
- "Whether the description of PACKAGE is a `package-desc'."
- (epl--package-desc-p (epl-package-description package)))
-
-(defun epl-package-version (package)
- "Get the version of PACKAGE, as version list."
- (epl-package-as-description package
- (cond
- ((fboundp 'package-desc-version) (package-desc-version package))
- ;; Legacy
- ((fboundp 'package-desc-vers)
- (let ((version (package-desc-vers package)))
- (if (listp version) version (version-to-list version))))
- (:else (error "Cannot get version from %S" package)))))
-
-(defun epl-package-version-string (package)
- "Get the version from a PACKAGE, as string."
- (package-version-join (epl-package-version package)))
-
-(defun epl-package-summary (package)
- "Get the summary of PACKAGE, as string."
- (epl-package-as-description package
- (cond
- ((fboundp 'package-desc-summary) (package-desc-summary package))
- ((fboundp 'package-desc-doc) (package-desc-doc package)) ; Legacy
- (:else (error "Cannot get summary from %S" package)))))
-
-(defsubst epl-requirement--from-req (req)
- "Create a `epl-requirement' from a `package-desc' REQ."
- (let ((version (cadr req)))
- (epl-requirement-create :name (car req)
- :version (if (listp version) version
- (version-to-list version)))))
-
-(defun epl-package-requirements (package)
- "Get the requirements of PACKAGE.
-
-The requirements are a list of `epl-requirement' objects."
- (epl-package-as-description package
- (mapcar #'epl-requirement--from-req (package-desc-reqs package))))
-
-(defun epl-package-directory (package)
- "Get the directory PACKAGE is installed to.
-
-Return the absolute path of the installation directory of
-PACKAGE, or nil, if PACKAGE is not installed."
- (cond
- ((fboundp 'package-desc-dir)
- (package-desc-dir (epl-package-description package)))
- ((fboundp 'package--dir)
- (package--dir (symbol-name (epl-package-name package))
- (epl-package-version-string package)))
- (:else (error "Cannot get package directory from %S" package))))
-
-(defun epl-package-->= (pkg1 pkg2)
- "Determine whether PKG1 is before PKG2 by version."
- (not (version-list-< (epl-package-version pkg1)
- (epl-package-version pkg2))))
-
-(defun epl-package--from-package-desc (package-desc)
- "Create an `epl-package' from a PACKAGE-DESC.
-
-PACKAGE-DESC is a `package-desc' object, from recent package.el
-variants."
- (if (and (fboundp 'package-desc-name)
- (epl--package-desc-p package-desc))
- (epl-package-create :name (package-desc-name package-desc)
- :description package-desc)
- (signal 'wrong-type-argument (list 'epl--package-desc-p package-desc))))
-
-(defun epl-package--parse-info (info)
- "Parse a package.el INFO."
- (if (epl--package-desc-p info)
- (epl-package--from-package-desc info)
- ;; For legacy package.el, info is a vector [NAME REQUIRES DESCRIPTION
- ;; VERSION COMMENTARY]. We need to re-shape this vector into the
- ;; `package-alist' format [VERSION REQUIRES DESCRIPTION] to attach it to the
- ;; new `epl-package'.
- (let ((name (intern (aref info 0)))
- (info (vector (aref info 3) (aref info 1) (aref info 2))))
- (epl-package-create :name name :description info))))
-
-(defun epl-package-from-buffer (&optional buffer)
- "Create an `epl-package' object from BUFFER.
-
-BUFFER defaults to the current buffer.
-
-Signal `epl-invalid-package' if the buffer does not contain a
-valid package file."
- (let ((info (with-current-buffer (or buffer (current-buffer))
- (condition-case err
- (package-buffer-info)
- (error (signal 'epl-invalid-package (cdr err)))))))
- (epl-package--parse-info info)))
-
-(defun epl-package-from-lisp-file (file-name)
- "Parse the package headers the file at FILE-NAME.
-
-Return an `epl-package' object with the header metadata."
- (with-temp-buffer
- (insert-file-contents file-name)
- (condition-case err
- (epl-package-from-buffer (current-buffer))
- ;; Attach file names to invalid package errors
- (epl-invalid-package
- (signal 'epl-invalid-package-file (cons file-name (cdr err))))
- ;; Forward other errors
- (error (signal (car err) (cdr err))))))
-
-(defun epl-package-from-tar-file (file-name)
- "Parse the package tarball at FILE-NAME.
-
-Return a `epl-package' object with the meta data of the tarball
-package in FILE-NAME."
- (condition-case nil
- ;; In legacy package.el, `package-tar-file-info' takes the name of the tar
- ;; file to parse as argument. In modern package.el, it has no arguments
- ;; and works on the current buffer. Hence, we just try to call the legacy
- ;; version, and if that fails because of a mismatch between formal and
- ;; actual arguments, we use the modern approach. To avoid spurious
- ;; signature warnings by the byte compiler, we suppress warnings when
- ;; calling the function.
- (epl-package--parse-info (with-no-warnings
- (package-tar-file-info file-name)))
- (wrong-number-of-arguments
- (with-temp-buffer
- (insert-file-contents-literally file-name)
- ;; Switch to `tar-mode' to enable extraction of the file. Modern
- ;; `package-tar-file-info' relies on `tar-mode', and signals an error if
- ;; called in a buffer with a different mode.
- (tar-mode)
- (epl-package--parse-info (with-no-warnings
- (package-tar-file-info)))))))
-
-(defun epl-package-from-file (file-name)
- "Parse the package at FILE-NAME.
-
-Return an `epl-package' object with the meta data of the package
-at FILE-NAME."
- (if (string-match-p (rx ".tar" string-end) file-name)
- (epl-package-from-tar-file file-name)
- (epl-package-from-lisp-file file-name)))
-
-(defun epl-package--parse-descriptor-requirement (requirement)
- "Parse a REQUIREMENT in a package descriptor."
- ;; This function is only called on legacy package.el. On package-desc
- ;; package.el, we just let package.el do the work.
- (cl-destructuring-bind (name version-string) requirement
- (list name (version-to-list version-string))))
-
-(defun epl-package-from-descriptor-file (descriptor-file)
- "Load a `epl-package' from a package DESCRIPTOR-FILE.
-
-A package descriptor is a file defining a new package. Its name
-typically ends with -pkg.el."
- (with-temp-buffer
- (insert-file-contents descriptor-file)
- (goto-char (point-min))
- (let ((sexp (read (current-buffer))))
- (unless (eq (car sexp) 'define-package)
- (error "%S is no valid package descriptor" descriptor-file))
- (if (and (fboundp 'package-desc-from-define)
- (fboundp 'package-desc-name))
- ;; In Emacs snapshot, we can conveniently call a function to parse the
- ;; descriptor
- (let ((desc (apply #'package-desc-from-define (cdr sexp))))
- (epl-package-create :name (package-desc-name desc)
- :description desc))
- ;; In legacy package.el, we must manually deconstruct the descriptor,
- ;; because the load function has eval's the descriptor and has a lot of
- ;; global side-effects.
- (cl-destructuring-bind
- (name version-string summary requirements) (cdr sexp)
- (epl-package-create
- :name (intern name)
- :description
- (vector (version-to-list version-string)
- (mapcar #'epl-package--parse-descriptor-requirement
- ;; Strip the leading `quote' from the package list
- (cadr requirements))
- summary)))))))
-
-
-;;; Package database access
-(defun epl-package-installed-p (package &optional min-version)
- "Determine whether a PACKAGE, of MIN-VERSION or newer, is installed.
-
-PACKAGE is either a package name as symbol, or a package object.
-When a explicit MIN-VERSION is provided it overwrites the version of the PACKAGE object."
- (let ((name (if (epl-package-p package)
- (epl-package-name package)
- package))
- (min-version (or min-version (and (epl-package-p package)
- (epl-package-version package)))))
- (package-installed-p name min-version)))
-
-(defun epl--parse-built-in-entry (entry)
- "Parse an ENTRY from the list of built-in packages.
-
-Return the corresponding `epl-package' object."
- (if (fboundp 'package--from-builtin)
- ;; In package-desc package.el, convert the built-in package to a
- ;; `package-desc' and convert that to an `epl-package'
- (epl-package--from-package-desc (package--from-builtin entry))
- (epl-package-create :name (car entry) :description (cdr entry))))
-
-(defun epl-built-in-packages ()
- "Get all built-in packages.
-
-Return a list of `epl-package' objects."
- ;; This looks mighty strange, but it's the only way to force package.el to
- ;; build the list of built-in packages. Without this, `package--builtins'
- ;; might be empty.
- (package-built-in-p 'foo)
- (mapcar #'epl--parse-built-in-entry package--builtins))
-
-(defun epl-find-built-in-package (name)
- "Find a built-in package with NAME.
-
-NAME is a package name, as symbol.
-
-Return the built-in package as `epl-package' object, or nil if
-there is no built-in package with NAME."
- (when (package-built-in-p name)
- ;; We must call `package-built-in-p' *before* inspecting
- ;; `package--builtins', because otherwise `package--builtins' might be
- ;; empty.
- (epl--parse-built-in-entry (assq name package--builtins))))
-
-(defun epl-package-outdated-p (package)
- "Determine whether a PACKAGE is outdated.
-
-A package is outdated, if there is an available package with a
-higher version.
-
-PACKAGE is either a package name as symbol, or a package object.
-In the former case, test the installed or built-in package with
-the highest version number, in the later case, test the package
-object itself.
-
-Return t, if the package is outdated, or nil otherwise."
- (let* ((package (if (epl-package-p package)
- package
- (or (car (epl-find-installed-packages package))
- (epl-find-built-in-package package))))
- (available (car (epl-find-available-packages
- (epl-package-name package)))))
- (and package available (version-list-< (epl-package-version package)
- (epl-package-version available)))))
-
-(defun epl--parse-package-list-entry (entry)
- "Parse a list of packages from ENTRY.
-
-ENTRY is a single entry in a package list, e.g. `package-alist',
-`package-archive-contents', etc. Typically it is a cons cell,
-but the exact format varies between package.el versions. This
-function tries to parse all known variants.
-
-Return a list of `epl-package' objects parsed from ENTRY."
- (let ((descriptions (cdr entry)))
- (cond
- ((listp descriptions)
- (sort (mapcar #'epl-package--from-package-desc descriptions)
- #'epl-package-->=))
- ;; Legacy package.el has just a single package in an entry, which is a
- ;; standard description vector
- ((vectorp descriptions)
- (list (epl-package-create :name (car entry)
- :description descriptions)))
- (:else (error "Cannot parse entry %S" entry)))))
-
-(defun epl-installed-packages ()
- "Get all installed packages.
-
-Return a list of package objects."
- (apply #'append (mapcar #'epl--parse-package-list-entry package-alist)))
-
-(defsubst epl--filter-outdated-packages (packages)
- "Filter outdated packages from PACKAGES."
- (let (res)
- (dolist (package packages)
- (when (epl-package-outdated-p package)
- (push package res)))
- (nreverse res)))
-
-(defun epl-outdated-packages ()
- "Get all outdated packages, as in `epl-package-outdated-p'.
-
-Return a list of package objects."
- (epl--filter-outdated-packages (epl-installed-packages)))
-
-(defsubst epl--find-package-in-list (name list)
- "Find a package by NAME in a package LIST.
-
-Return a list of corresponding `epl-package' objects."
- (let ((entry (assq name list)))
- (when entry
- (epl--parse-package-list-entry entry))))
-
-(defun epl-find-installed-package (name)
- "Find the latest installed package by NAME.
-
-NAME is a package name, as symbol.
-
-Return the installed package with the highest version number as
-`epl-package' object, or nil, if no package with NAME is
-installed."
- (car (epl-find-installed-packages name)))
-(make-obsolete 'epl-find-installed-package 'epl-find-installed-packages "0.7")
-
-(defun epl-find-installed-packages (name)
- "Find all installed packages by NAME.
-
-NAME is a package name, as symbol.
-
-Return a list of all installed packages with NAME, sorted by
-version number in descending order. Return nil, if there are no
-packages with NAME."
- (epl--find-package-in-list name package-alist))
-
-(defun epl-available-packages ()
- "Get all packages available for installation.
-
-Return a list of package objects."
- (apply #'append (mapcar #'epl--parse-package-list-entry
- package-archive-contents)))
-
-(defun epl-find-available-packages (name)
- "Find available packages for NAME.
-
-NAME is a package name, as symbol.
-
-Return a list of available packages for NAME, sorted by version
-number in descending order. Return nil, if there are no packages
-for NAME."
- (epl--find-package-in-list name package-archive-contents))
-
-(cl-defstruct (epl-upgrade
- (:constructor epl-upgrade-create))
- "Structure describing an upgradable package.
-Slots:
-
-`installed' The installed package
-
-`available' The package available for installation."
- installed
- available)
-
-(defun epl-find-upgrades (&optional packages)
- "Find all upgradable PACKAGES.
-
-PACKAGES is a list of package objects to upgrade, defaulting to
-all installed packages.
-
-Return a list of `epl-upgrade' objects describing all upgradable
-packages."
- (let ((packages (or packages (epl-installed-packages)))
- upgrades)
- (dolist (pkg packages)
- (let* ((version (epl-package-version pkg))
- (name (epl-package-name pkg))
- ;; Find the latest available package for NAME
- (available-pkg (car (epl-find-available-packages name)))
- (available-version (when available-pkg
- (epl-package-version available-pkg))))
- (when (and available-version (version-list-< version available-version))
- (push (epl-upgrade-create :installed pkg
- :available available-pkg)
- upgrades))))
- (nreverse upgrades)))
-
-(defalias 'epl-built-in-p 'package-built-in-p)
-
-
-;;; Package operations
-
-(defun epl-install-file (file)
- "Install a package from FILE, like `package-install-file'."
- (interactive (advice-eval-interactive-spec
- (cadr (interactive-form #'package-install-file))))
- (apply #'package-install-file (list file))
- (let ((package (epl-package-from-file file)))
- (unless (epl-package--package-desc-p package)
- (epl--kill-autoload-buffer package))))
-
-(defun epl--kill-autoload-buffer (package)
- "Kill the buffer associated with autoloads for PACKAGE."
- (let* ((auto-name (format "%s-autoloads.el" (epl-package-name package)))
- (generated-autoload-file (expand-file-name auto-name (epl-package-directory package)))
- (buf (find-buffer-visiting generated-autoload-file)))
- (when buf (kill-buffer buf))))
-
-(defun epl-package-install (package &optional force)
- "Install a PACKAGE.
-
-PACKAGE is a `epl-package' object. If FORCE is given and
-non-nil, install PACKAGE, even if it is already installed."
- (when (or force (not (epl-package-installed-p package)))
- (if (epl-package--package-desc-p package)
- (package-install (epl-package-description package))
- ;; The legacy API installs by name. We have no control over versioning,
- ;; etc.
- (package-install (epl-package-name package))
- (epl--kill-autoload-buffer package))))
-
-(defun epl-package-delete (package)
- "Delete a PACKAGE.
-
-PACKAGE is a `epl-package' object to delete."
- ;; package-delete allows for packages being trashed instead of fully deleted.
- ;; Let's prevent his silly behavior
- (let ((delete-by-moving-to-trash nil))
- ;; The byte compiler will warn us that we are calling `package-delete' with
- ;; the wrong number of arguments, since it can't infer that we guarantee to
- ;; always call the correct version. Thus we suppress all warnings when
- ;; calling `package-delete'. I wish there was a more granular way to
- ;; disable just that specific warning, but it is what it is.
- (if (epl-package--package-desc-p package)
- (with-no-warnings
- (package-delete (epl-package-description package)))
- ;; The legacy API deletes by name (as string!) and version instead by
- ;; descriptor. Hence `package-delete' takes two arguments. For some
- ;; insane reason, the arguments are strings here!
- (let ((name (symbol-name (epl-package-name package)))
- (version (epl-package-version-string package)))
- (with-no-warnings
- (package-delete name version))
- ;; Legacy package.el does not remove the deleted package
- ;; from the `package-alist', so we do it manually here.
- (let ((pkg (assq (epl-package-name package) package-alist)))
- (when pkg
- (setq package-alist (delq pkg package-alist))))))))
-
-(defun epl-upgrade (&optional packages preserve-obsolete)
- "Upgrade PACKAGES.
-
-PACKAGES is a list of package objects to upgrade, defaulting to
-all installed packages.
-
-The old versions of the updated packages are deleted, unless
-PRESERVE-OBSOLETE is non-nil.
-
-Return a list of all performed upgrades, as a list of
-`epl-upgrade' objects."
- (let ((upgrades (epl-find-upgrades packages)))
- (dolist (upgrade upgrades)
- (epl-package-install (epl-upgrade-available upgrade) 'force)
- (unless preserve-obsolete
- (epl-package-delete (epl-upgrade-installed upgrade))))
- upgrades))
-
-(provide 'epl)
-
-;;; epl.el ends here
diff --git a/emacs.d/elpa/f-20191110.1357/f-autoloads.el b/emacs.d/elpa/f-20191110.1357/f-autoloads.el
deleted file mode 100644
index 366a50c..0000000
--- a/emacs.d/elpa/f-20191110.1357/f-autoloads.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; f-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "f" "f.el" (0 0 0 0))
-;;; Generated autoloads from f.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "f" '("f-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; f-autoloads.el ends here
diff --git a/emacs.d/elpa/f-20191110.1357/f-pkg.el b/emacs.d/elpa/f-20191110.1357/f-pkg.el
deleted file mode 100644
index 984e0b0..0000000
--- a/emacs.d/elpa/f-20191110.1357/f-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "f" "20191110.1357" "Modern API for working with files and directories" '((s "1.7.0") (dash "2.2.0")) :commit "1814209e2ff43cf2e6d38c4cd476218915f550fb" :keywords '("files" "directories") :authors '(("Johan Andersson" . "johan.rejeep@gmail.com")) :maintainer '("Johan Andersson" . "johan.rejeep@gmail.com") :url "http://github.com/rejeep/f.el")
diff --git a/emacs.d/elpa/f-20191110.1357/f.el b/emacs.d/elpa/f-20191110.1357/f.el
deleted file mode 100644
index b1212c1..0000000
--- a/emacs.d/elpa/f-20191110.1357/f.el
+++ /dev/null
@@ -1,625 +0,0 @@
-;;; f.el --- Modern API for working with files and directories -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013 Johan Andersson
-
-;; Author: Johan Andersson <johan.rejeep@gmail.com>
-;; Maintainer: Johan Andersson <johan.rejeep@gmail.com>
-;; Version: 0.20.0
-;; Package-Version: 20191110.1357
-;; Package-Commit: 1814209e2ff43cf2e6d38c4cd476218915f550fb
-;; Keywords: files, directories
-;; URL: http://github.com/rejeep/f.el
-;; Package-Requires: ((s "1.7.0") (dash "2.2.0"))
-
-;; This file is NOT part of GNU Emacs.
-
-;;; License:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
-
-;;; Code:
-
-
-
-(require 's)
-(require 'dash)
-
-(put 'f-guard-error 'error-conditions '(error f-guard-error))
-(put 'f-guard-error 'error-message "Destructive operation outside sandbox")
-
-(defvar f--guard-paths nil
- "List of allowed paths to modify when guarded.
-
-Do not modify this variable.")
-
-(defmacro f--destructive (path &rest body)
- "If PATH is allowed to be modified, yield BODY.
-
-If PATH is not allowed to be modified, throw error."
- (declare (indent 1))
- `(if f--guard-paths
- (if (--any? (or (f-same? it ,path)
- (f-ancestor-of? it ,path)) f--guard-paths)
- (progn ,@body)
- (signal 'f-guard-error (list ,path f--guard-paths)))
- ,@body))
-
-
-;;;; Paths
-
-(defun f-join (&rest args)
- "Join ARGS to a single path."
- (let (path (relative (f-relative? (car args))))
- (-map
- (lambda (arg)
- (setq path (f-expand arg path)))
- args)
- (if relative (f-relative path) path)))
-
-(defun f-split (path)
- "Split PATH and return list containing parts."
- (let ((parts (s-split (f-path-separator) path 'omit-nulls)))
- (if (f-absolute? path)
- (push (f-path-separator) parts)
- parts)))
-
-(defun f-expand (path &optional dir)
- "Expand PATH relative to DIR (or `default-directory').
-PATH and DIR can be either a directory names or directory file
-names. Return a directory name if PATH is a directory name, and
-a directory file name otherwise. File name handlers are
-ignored."
- (let (file-name-handler-alist)
- (expand-file-name path dir)))
-
-(defun f-filename (path)
- "Return the name of PATH."
- (file-name-nondirectory (directory-file-name path)))
-
-(defalias 'f-parent 'f-dirname)
-(defun f-dirname (path)
- "Return the parent directory to PATH."
- (let ((parent (file-name-directory
- (directory-file-name (f-expand path default-directory)))))
- (unless (f-same? path parent)
- (if (f-relative? path)
- (f-relative parent)
- (directory-file-name parent)))))
-
-(defun f-common-parent (paths)
- "Return the deepest common parent directory of PATHS."
- (cond
- ((not paths) nil)
- ((not (cdr paths)) (f-parent (car paths)))
- (:otherwise
- (let* ((paths (-map 'f-split paths))
- (common (caar paths))
- (re nil))
- (while (and (not (null (car paths))) (--all? (equal (car it) common) paths))
- (setq paths (-map 'cdr paths))
- (push common re)
- (setq common (caar paths)))
- (cond
- ((null re) "")
- ((and (= (length re) 1) (f-root? (car re)))
- (f-root))
- (:otherwise
- (concat (apply 'f-join (nreverse re)) "/")))))))
-
-(defun f-ext (path)
- "Return the file extension of PATH.
-
-The extension, in a file name, is the part that follows the last
-'.', excluding version numbers and backup suffixes."
- (file-name-extension path))
-
-(defun f-no-ext (path)
- "Return everything but the file extension of PATH."
- (file-name-sans-extension path))
-
-(defun f-swap-ext (path ext)
- "Return PATH but with EXT as the new extension.
-EXT must not be nil or empty."
- (if (s-blank? ext)
- (error "Extension cannot be empty or nil")
- (concat (f-no-ext path) "." ext)))
-
-(defun f-base (path)
- "Return the name of PATH, excluding the extension of file."
- (f-no-ext (f-filename path)))
-
-(defun f-relative (path &optional dir)
- "Return PATH relative to DIR."
- (file-relative-name path dir))
-
-(defalias 'f-abbrev 'f-short)
-(defun f-short (path)
- "Return abbrev of PATH. See `abbreviate-file-name'."
- (abbreviate-file-name path))
-
-(defun f-long (path)
- "Return long version of PATH."
- (f-expand path))
-
-(defun f-canonical (path)
- "Return the canonical name of PATH."
- (file-truename path))
-
-(defun f-slash (path)
- "Append slash to PATH unless one already.
-
-Some functions, such as `call-process' requires there to be an
-ending slash."
- (if (f-dir? path)
- (file-name-as-directory path)
- path))
-
-(defun f-full (path)
- "Return absolute path to PATH, with ending slash."
- (f-slash (f-long path)))
-
-(defun f--uniquify (paths)
- "Helper for `f-uniquify' and `f-uniquify-alist'."
- (let* ((files-length (length paths))
- (uniq-filenames (--map (cons it (f-filename it)) paths))
- (uniq-filenames-next (-group-by 'cdr uniq-filenames)))
- (while (/= files-length (length uniq-filenames-next))
- (setq uniq-filenames-next
- (-group-by 'cdr
- (--mapcat
- (let ((conf-files (cdr it)))
- (if (> (length conf-files) 1)
- (--map (cons (car it) (concat (f-filename (s-chop-suffix (cdr it) (car it))) (f-path-separator) (cdr it))) conf-files)
- conf-files))
- uniq-filenames-next))))
- uniq-filenames-next))
-
-(defun f-uniquify (files)
- "Return unique suffixes of FILES.
-
-This function expects no duplicate paths."
- (-map 'car (f--uniquify files)))
-
-(defun f-uniquify-alist (files)
- "Return alist mapping FILES to unique suffixes of FILES.
-
-This function expects no duplicate paths."
- (-map 'cadr (f--uniquify files)))
-
-
-;;;; I/O
-
-(defun f-read-bytes (path)
- "Read binary data from PATH.
-
-Return the binary data as unibyte string."
- (with-temp-buffer
- (set-buffer-multibyte nil)
- (setq buffer-file-coding-system 'binary)
- (insert-file-contents-literally path)
- (buffer-substring-no-properties (point-min) (point-max))))
-
-(defalias 'f-read 'f-read-text)
-(defun f-read-text (path &optional coding)
- "Read text with PATH, using CODING.
-
-CODING defaults to `utf-8'.
-
-Return the decoded text as multibyte string."
- (decode-coding-string (f-read-bytes path) (or coding 'utf-8)))
-
-(defalias 'f-write 'f-write-text)
-(defun f-write-text (text coding path)
- "Write TEXT with CODING to PATH.
-
-TEXT is a multibyte string. CODING is a coding system to encode
-TEXT with. PATH is a file name to write to."
- (f-write-bytes (encode-coding-string text coding) path))
-
-(defun f-unibyte-string-p (s)
- "Determine whether S is a unibyte string."
- (not (multibyte-string-p s)))
-
-(defun f-write-bytes (data path)
- "Write binary DATA to PATH.
-
-DATA is a unibyte string. PATH is a file name to write to."
- (f--write-bytes data path nil))
-
-(defalias 'f-append 'f-append-text)
-(defun f-append-text (text coding path)
- "Append TEXT with CODING to PATH.
-
-If PATH does not exist, it is created."
- (f-append-bytes (encode-coding-string text coding) path))
-
-(defun f-append-bytes (data path)
- "Append binary DATA to PATH.
-
-If PATH does not exist, it is created."
- (f--write-bytes data path :append))
-
-(defun f--write-bytes (data filename append)
- "Write binary DATA to FILENAME.
-If APPEND is non-nil, append the DATA to the existing contents."
- (f--destructive filename
- (unless (f-unibyte-string-p data)
- (signal 'wrong-type-argument (list 'f-unibyte-string-p data)))
- (let ((coding-system-for-write 'binary)
- (write-region-annotate-functions nil)
- (write-region-post-annotation-function nil))
- (write-region data nil filename append :silent)
- nil)))
-
-
-;;;; Destructive
-
-(defun f-mkdir (&rest dirs)
- "Create directories DIRS."
- (let (path)
- (-each
- dirs
- (lambda (dir)
- (setq path (f-expand dir path))
- (unless (f-directory? path)
- (f--destructive path (make-directory path)))))))
-
-(defun f-delete (path &optional force)
- "Delete PATH, which can be file or directory.
-
-If FORCE is t, a directory will be deleted recursively."
- (f--destructive path
- (if (or (f-file? path) (f-symlink? path))
- (delete-file path)
- (delete-directory path force))))
-
-(defun f-symlink (source path)
- "Create a symlink to SOURCE from PATH."
- (f--destructive path (make-symbolic-link source path)))
-
-(defun f-move (from to)
- "Move or rename FROM to TO.
-If TO is a directory name, move FROM into TO."
- (f--destructive to (rename-file from to t)))
-
-(defun f-copy (from to)
- "Copy file or directory FROM to TO.
-If FROM names a directory and TO is a directory name, copy FROM
-into TO as a subdirectory."
- (f--destructive to
- (if (f-file? from)
- (copy-file from to)
- ;; The behavior of `copy-directory' differs between Emacs 23 and
- ;; 24 in that in Emacs 23, the contents of `from' is copied to
- ;; `to', while in Emacs 24 the directory `from' is copied to
- ;; `to'. We want the Emacs 24 behavior.
- (if (> emacs-major-version 23)
- (copy-directory from to)
- (if (f-dir? to)
- (progn
- (apply 'f-mkdir (f-split to))
- (let ((new-to (f-expand (f-filename from) to)))
- (copy-directory from new-to)))
- (copy-directory from to))))))
-
-(defun f-copy-contents (from to)
- "Copy contents in directory FROM, to directory TO."
- (unless (f-exists? to)
- (error "Cannot copy contents to non existing directory %s" to))
- (unless (f-dir? from)
- (error "Cannot copy contents as %s is a file" from))
- (--each (f-entries from)
- (f-copy it (file-name-as-directory to))))
-
-(defun f-touch (path)
- "Update PATH last modification date or create if it does not exist."
- (f--destructive path
- (if (f-file? path)
- (set-file-times path)
- (f-write-bytes "" path))))
-
-
-;;;; Predicates
-
-(defun f-exists? (path)
- "Return t if PATH exists, false otherwise."
- (file-exists-p path))
-
-(defalias 'f-exists-p 'f-exists?)
-
-(defalias 'f-dir? 'f-directory?)
-(defalias 'f-dir-p 'f-dir?)
-
-(defun f-directory? (path)
- "Return t if PATH is directory, false otherwise."
- (file-directory-p path))
-
-(defalias 'f-directory-p 'f-directory?)
-
-(defun f-file? (path)
- "Return t if PATH is file, false otherwise."
- (file-regular-p path))
-
-(defalias 'f-file-p 'f-file?)
-
-(defun f-symlink? (path)
- "Return t if PATH is symlink, false otherwise."
- (not (not (file-symlink-p path))))
-
-(defalias 'f-symlink-p 'f-symlink?)
-
-(defun f-readable? (path)
- "Return t if PATH is readable, false otherwise."
- (file-readable-p path))
-
-(defalias 'f-readable-p 'f-readable?)
-
-(defun f-writable? (path)
- "Return t if PATH is writable, false otherwise."
- (file-writable-p path))
-
-(defalias 'f-writable-p 'f-writable?)
-
-(defun f-executable? (path)
- "Return t if PATH is executable, false otherwise."
- (file-executable-p path))
-
-(defalias 'f-executable-p 'f-executable?)
-
-(defun f-absolute? (path)
- "Return t if PATH is absolute, false otherwise."
- (file-name-absolute-p path))
-
-(defalias 'f-absolute-p 'f-absolute?)
-
-(defun f-relative? (path)
- "Return t if PATH is relative, false otherwise."
- (not (f-absolute? path)))
-
-(defalias 'f-relative-p 'f-relative?)
-
-(defun f-root? (path)
- "Return t if PATH is root directory, false otherwise."
- (not (f-parent path)))
-
-(defalias 'f-root-p 'f-root?)
-
-(defun f-ext? (path &optional ext)
- "Return t if extension of PATH is EXT, false otherwise.
-
-If EXT is nil or omitted, return t if PATH has any extension,
-false otherwise.
-
-The extension, in a file name, is the part that follows the last
-'.', excluding version numbers and backup suffixes."
- (if ext
- (string= (f-ext path) ext)
- (not (eq (f-ext path) nil))))
-
-(defalias 'f-ext-p 'f-ext?)
-
-(defalias 'f-equal? 'f-same?)
-(defalias 'f-equal-p 'f-equal?)
-
-(defun f-same? (path-a path-b)
- "Return t if PATH-A and PATH-B are references to same file."
- (when (and (f-exists? path-a)
- (f-exists? path-b))
- (equal
- (f-canonical (directory-file-name (f-expand path-a)))
- (f-canonical (directory-file-name (f-expand path-b))))))
-
-(defalias 'f-same-p 'f-same?)
-
-(defun f-parent-of? (path-a path-b)
- "Return t if PATH-A is parent of PATH-B."
- (--when-let (f-parent path-b)
- (f-same? path-a it)))
-
-(defalias 'f-parent-of-p 'f-parent-of?)
-
-(defun f-child-of? (path-a path-b)
- "Return t if PATH-A is child of PATH-B."
- (--when-let (f-parent path-a)
- (f-same? it path-b)))
-
-(defalias 'f-child-of-p 'f-child-of?)
-
-(defun f-ancestor-of? (path-a path-b)
- "Return t if PATH-A is ancestor of PATH-B."
- (unless (f-same? path-a path-b)
- (s-starts-with? (f-full path-a)
- (f-full path-b))))
-
-(defalias 'f-ancestor-of-p 'f-ancestor-of?)
-
-(defun f-descendant-of? (path-a path-b)
- "Return t if PATH-A is desendant of PATH-B."
- (unless (f-same? path-a path-b)
- (s-starts-with? (f-full path-b)
- (f-full path-a))))
-
-(defalias 'f-descendant-of-p 'f-descendant-of?)
-
-(defun f-hidden? (path)
- "Return t if PATH is hidden, nil otherwise."
- (unless (f-exists? path)
- (error "Path does not exist: %s" path))
- (string= (substring path 0 1) "."))
-
-(defalias 'f-hidden-p 'f-hidden?)
-
-(defun f-empty? (path)
- "If PATH is a file, return t if the file in PATH is empty, nil otherwise.
-If PATH is directory, return t if directory has no files, nil otherwise."
- (if (f-directory? path)
- (equal (f-files path nil t) nil)
- (= (f-size path) 0)))
-
-(defalias 'f-empty-p 'f-empty?)
-
-
-;;;; Stats
-
-(defun f-size (path)
- "Return size of PATH.
-
-If PATH is a file, return size of that file. If PATH is
-directory, return sum of all files in PATH."
- (if (f-directory? path)
- (-sum (-map 'f-size (f-files path nil t)))
- (nth 7 (file-attributes path))))
-
-(defun f-depth (path)
- "Return the depth of PATH.
-
-At first, PATH is expanded with `f-expand'. Then the full path is used to
-detect the depth.
-'/' will be zero depth, '/usr' will be one depth. And so on."
- (- (length (f-split (f-expand path))) 1))
-
-
-;;;; Misc
-
-(defun f-this-file ()
- "Return path to this file."
- (cond
- (load-in-progress load-file-name)
- ((and (boundp 'byte-compile-current-file) byte-compile-current-file)
- byte-compile-current-file)
- (:else (buffer-file-name))))
-
-(defvar f--path-separator nil
- "A variable to cache result of `f-path-separator'.")
-
-(defun f-path-separator ()
- "Return path separator."
- (or f--path-separator
- (setq f--path-separator (substring (f-join "x" "y") 1 2))))
-
-(defun f-glob (pattern &optional path)
- "Find PATTERN in PATH."
- (file-expand-wildcards
- (f-join (or path default-directory) pattern)))
-
-(defun f--collect-entries (path recursive)
- (let (result
- (entries
- (-reject
- (lambda (file)
- (or
- (equal (f-filename file) ".")
- (equal (f-filename file) "..")))
- (directory-files path t))))
- (cond (recursive
- (-map
- (lambda (entry)
- (if (f-file? entry)
- (setq result (cons entry result))
- (when (f-directory? entry)
- (setq result (cons entry result))
- (setq result (append result (f--collect-entries entry recursive))))))
- entries))
- (t (setq result entries)))
- result))
-
-(defmacro f--entries (path body &optional recursive)
- "Anaphoric version of `f-entries'."
- `(f-entries
- ,path
- (lambda (path)
- (let ((it path))
- ,body))
- ,recursive))
-
-(defun f-entries (path &optional fn recursive)
- "Find all files and directories in PATH.
-
-FN - called for each found file and directory. If FN returns a thruthy
-value, file or directory will be included.
-RECURSIVE - Search for files and directories recursive."
- (let ((entries (f--collect-entries path recursive)))
- (if fn (-select fn entries) entries)))
-
-(defmacro f--directories (path body &optional recursive)
- "Anaphoric version of `f-directories'."
- `(f-directories
- ,path
- (lambda (path)
- (let ((it path))
- ,body))
- ,recursive))
-
-(defun f-directories (path &optional fn recursive)
- "Find all directories in PATH. See `f-entries'."
- (let ((directories (-select 'f-directory? (f--collect-entries path recursive))))
- (if fn (-select fn directories) directories)))
-
-(defmacro f--files (path body &optional recursive)
- "Anaphoric version of `f-files'."
- `(f-files
- ,path
- (lambda (path)
- (let ((it path))
- ,body))
- ,recursive))
-
-(defun f-files (path &optional fn recursive)
- "Find all files in PATH. See `f-entries'."
- (let ((files (-select 'f-file? (f--collect-entries path recursive))))
- (if fn (-select fn files) files)))
-
-(defmacro f--traverse-upwards (body &optional path)
- "Anaphoric version of `f-traverse-upwards'."
- `(f-traverse-upwards
- (lambda (dir)
- (let ((it dir))
- ,body))
- ,path))
-
-(defun f-traverse-upwards (fn &optional path)
- "Traverse up as long as FN return nil, starting at PATH.
-
-If FN returns a non-nil value, the path sent as argument to FN is
-returned. If no function callback return a non-nil value, nil is
-returned."
- (unless path
- (setq path default-directory))
- (when (f-relative? path)
- (setq path (f-expand path)))
- (if (funcall fn path)
- path
- (unless (f-root? path)
- (f-traverse-upwards fn (f-parent path)))))
-
-(defun f-root ()
- "Return absolute root."
- (f-traverse-upwards 'f-root?))
-
-(defmacro f-with-sandbox (path-or-paths &rest body)
- "Only allow PATH-OR-PATHS and descendants to be modified in BODY."
- (declare (indent 1))
- `(let ((paths (if (listp ,path-or-paths)
- ,path-or-paths
- (list ,path-or-paths))))
- (unwind-protect
- (let ((f--guard-paths paths))
- ,@body)
- (setq f--guard-paths nil))))
-
-(provide 'f)
-
-;;; f.el ends here
diff --git a/emacs.d/elpa/flycheck-20200427.12/flycheck-autoloads.el b/emacs.d/elpa/flycheck-20200427.12/flycheck-autoloads.el
deleted file mode 100644
index 61c0239..0000000
--- a/emacs.d/elpa/flycheck-20200427.12/flycheck-autoloads.el
+++ /dev/null
@@ -1,274 +0,0 @@
-;;; flycheck-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "flycheck" "flycheck.el" (0 0 0 0))
-;;; Generated autoloads from flycheck.el
-
-(autoload 'flycheck-manual "flycheck" "\
-Open the Flycheck manual.
-
-\(fn)" t nil)
-
-(autoload 'flycheck-mode "flycheck" "\
-Minor mode for on-the-fly syntax checking.
-
-When called interactively, toggle `flycheck-mode'. With prefix
-ARG, enable `flycheck-mode' if ARG is positive, otherwise disable
-it.
-
-When called from Lisp, enable `flycheck-mode' if ARG is omitted,
-nil or positive. If ARG is `toggle', toggle `flycheck-mode'.
-Otherwise behave as if called interactively.
-
-In `flycheck-mode' the buffer is automatically syntax-checked
-using the first suitable syntax checker from `flycheck-checkers'.
-Use `flycheck-select-checker' to select a checker for the current
-buffer manually.
-
-\\{flycheck-mode-map}
-
-\(fn &optional ARG)" t nil)
-
-(defvar global-flycheck-mode nil "\
-Non-nil if Global Flycheck mode is enabled.
-See the `global-flycheck-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `global-flycheck-mode'.")
-
-(custom-autoload 'global-flycheck-mode "flycheck" nil)
-
-(autoload 'global-flycheck-mode "flycheck" "\
-Toggle Flycheck mode in all buffers.
-With prefix ARG, enable Global Flycheck mode if ARG is positive;
-otherwise, disable it. If called from Lisp, enable the mode if
-ARG is omitted or nil.
-
-Flycheck mode is enabled in all buffers where
-`flycheck-mode-on-safe' would do it.
-See `flycheck-mode' for more information on Flycheck mode.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'flycheck-define-error-level "flycheck" "\
-Define a new error LEVEL with PROPERTIES.
-
-The following PROPERTIES constitute an error level:
-
-`:severity SEVERITY'
- A number denoting the severity of this level. The higher
- the number, the more severe is this level compared to other
- levels. Defaults to 0.
-
- The severity is used by `flycheck-error-level-<' to
- determine the ordering of errors according to their levels.
-
-`:compilation-level LEVEL'
-
- A number indicating the broad class of messages that errors
- at this level belong to: one of 0 (info), 1 (warning), or
- 2 or nil (error). Defaults to nil.
-
- This is used by `flycheck-checker-pattern-to-error-regexp'
- to map error levels into `compilation-mode''s hierarchy and
- to get proper highlighting of errors in `compilation-mode'.
-
-`:overlay-category CATEGORY'
- A symbol denoting the overlay category to use for error
- highlight overlays for this level. See Info
- node `(elisp)Overlay Properties' for more information about
- overlay categories.
-
- A category for an error level overlay should at least define
- the `face' property, for error highlighting. Another useful
- property for error level categories is `priority', to
- influence the stacking of multiple error level overlays.
-
-`:fringe-bitmap BITMAPS'
- A fringe bitmap symbol denoting the bitmap to use for fringe
- indicators for this level, or a cons of two bitmaps (one for
- narrow fringes and one for wide fringes). See Info node
- `(elisp)Fringe Bitmaps' for more information about fringe
- bitmaps, including a list of built-in fringe bitmaps.
-
-`:fringe-face FACE'
- A face symbol denoting the face to use for fringe indicators
- for this level.
-
-`:error-list-face FACE'
- A face symbol denoting the face to use for messages of this
- level in the error list. See `flycheck-list-errors'.
-
-\(fn LEVEL &rest PROPERTIES)" nil nil)
-
-(function-put 'flycheck-define-error-level 'lisp-indent-function '1)
-
-(autoload 'flycheck-define-command-checker "flycheck" "\
-Define SYMBOL as syntax checker to run a command.
-
-Define SYMBOL as generic syntax checker via
-`flycheck-define-generic-checker', which uses an external command
-to check the buffer. SYMBOL and DOCSTRING are the same as for
-`flycheck-define-generic-checker'.
-
-In addition to the properties understood by
-`flycheck-define-generic-checker', the following PROPERTIES
-constitute a command syntax checker. Unless otherwise noted, all
-properties are mandatory. Note that the default `:error-filter'
-of command checkers is `flycheck-sanitize-errors'.
-
-`:command COMMAND'
- The command to run for syntax checking.
-
- COMMAND is a list of the form `(EXECUTABLE [ARG ...])'.
-
- EXECUTABLE is a string with the executable of this syntax
- checker. It can be overridden with the variable
- `flycheck-SYMBOL-executable'. Note that this variable is
- NOT implicitly defined by this function. Use
- `flycheck-def-executable-var' to define this variable.
-
- Each ARG is an argument to the executable, either as string,
- or as special symbol or form for
- `flycheck-substitute-argument', which see.
-
-`:error-patterns PATTERNS'
- A list of patterns to parse the output of the `:command'.
-
- Each ITEM in PATTERNS is a list `(LEVEL SEXP ...)', where
- LEVEL is a Flycheck error level (see
- `flycheck-define-error-level'), followed by one or more RX
- `SEXP's which parse an error of that level and extract line,
- column, file name and the message.
-
- See `rx' for general information about RX, and
- `flycheck-rx-to-string' for some special RX forms provided
- by Flycheck.
-
- All patterns are applied in the order of declaration to the
- whole output of the syntax checker. Output already matched
- by a pattern will not be matched by subsequent patterns. In
- other words, the first pattern wins.
-
- This property is optional. If omitted, however, an
- `:error-parser' is mandatory.
-
-`:error-parser FUNCTION'
- A function to parse errors with.
-
- The function shall accept three arguments OUTPUT CHECKER
- BUFFER. OUTPUT is the syntax checker output as string,
- CHECKER the syntax checker that was used, and BUFFER a
- buffer object representing the checked buffer. The function
- must return a list of `flycheck-error' objects parsed from
- OUTPUT.
-
- This property is optional. If omitted, it defaults to
- `flycheck-parse-with-patterns'. In this case,
- `:error-patterns' is mandatory.
-
-`:standard-input t'
- Whether to send the buffer contents on standard input.
-
- If this property is given and has a non-nil value, send the
- contents of the buffer on standard input.
-
- Defaults to nil.
-
-Note that you may not give `:start', `:interrupt', and
-`:print-doc' for a command checker. You can give a custom
-`:verify' function, though, whose results will be appended to the
-default `:verify' function of command checkers.
-
-\(fn SYMBOL DOCSTRING &rest PROPERTIES)" nil nil)
-
-(function-put 'flycheck-define-command-checker 'lisp-indent-function '1)
-
-(function-put 'flycheck-define-command-checker 'doc-string-elt '2)
-
-(autoload 'flycheck-def-config-file-var "flycheck" "\
-Define SYMBOL as config file variable for CHECKER, with default FILE-NAME.
-
-SYMBOL is declared as customizable variable using `defcustom', to
-provide configuration files for the given syntax CHECKER.
-CUSTOM-ARGS are forwarded to `defcustom'.
-
-FILE-NAME is the initial value of the new variable. If omitted,
-the default value is nil. It can be either a string or a list of
-strings.
-
-Use this together with the `config-file' form in the `:command'
-argument to `flycheck-define-checker'.
-
-\(fn SYMBOL CHECKER &optional FILE-NAME &rest CUSTOM-ARGS)" nil t)
-
-(function-put 'flycheck-def-config-file-var 'lisp-indent-function '3)
-
-(autoload 'flycheck-def-option-var "flycheck" "\
-Define SYMBOL as option variable with INIT-VALUE for CHECKER.
-
-SYMBOL is declared as customizable variable using `defcustom', to
-provide an option for the given syntax CHECKERS (a checker or a
-list of checkers). INIT-VALUE is the initial value of the
-variable, and DOCSTRING is its docstring. CUSTOM-ARGS are
-forwarded to `defcustom'.
-
-Use this together with the `option', `option-list' and
-`option-flag' forms in the `:command' argument to
-`flycheck-define-checker'.
-
-\(fn SYMBOL INIT-VALUE CHECKERS DOCSTRING &rest CUSTOM-ARGS)" nil t)
-
-(function-put 'flycheck-def-option-var 'lisp-indent-function '3)
-
-(function-put 'flycheck-def-option-var 'doc-string-elt '4)
-
-(autoload 'flycheck-define-checker "flycheck" "\
-Define SYMBOL as command syntax checker with DOCSTRING and PROPERTIES.
-
-Like `flycheck-define-command-checker', but PROPERTIES must not
-be quoted. Also, implicitly define the executable variable for
-SYMBOL with `flycheck-def-executable-var'.
-
-\(fn SYMBOL DOCSTRING &rest PROPERTIES)" nil t)
-
-(function-put 'flycheck-define-checker 'lisp-indent-function '1)
-
-(function-put 'flycheck-define-checker 'doc-string-elt '2)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flycheck" '("flycheck-" "list-flycheck-errors" "help-flycheck-checker-d")))
-
-;;;***
-
-;;;### (autoloads nil "flycheck-buttercup" "flycheck-buttercup.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from flycheck-buttercup.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flycheck-buttercup" '("flycheck-buttercup-format-error-list")))
-
-;;;***
-
-;;;### (autoloads nil "flycheck-ert" "flycheck-ert.el" (0 0 0 0))
-;;; Generated autoloads from flycheck-ert.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flycheck-ert" '("flycheck-er")))
-
-;;;***
-
-;;;### (autoloads nil nil ("flycheck-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; flycheck-autoloads.el ends here
diff --git a/emacs.d/elpa/flycheck-20200427.12/flycheck-buttercup.el b/emacs.d/elpa/flycheck-20200427.12/flycheck-buttercup.el
deleted file mode 100644
index 9802265..0000000
--- a/emacs.d/elpa/flycheck-20200427.12/flycheck-buttercup.el
+++ /dev/null
@@ -1,157 +0,0 @@
-;;; flycheck-buttercup.el --- Flycheck: Extensions to Buttercup -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017 Flycheck contributors
-;; Copyright (C) 2016 Sebastian Wiesner and Flycheck contributors
-
-;; Author: Sebastian Wiesner <swiesner@lunaryorn.com>
-;; Maintainer: Clément Pit-Claudel <clement.pitclaudel@live.com>
-;; fmdkdd <fmdkdd@gmail.com>
-;; Keywords: lisp, tools
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Extensions to Buttercup to write BDD tests for Flycheck.
-;;
-;; Buttercup is a BDD testing framework for Emacs, see URL
-;; `https://github.com/jorgenschaefer/emacs-buttercup/'. Flycheck uses
-;; Buttercup extensively for new tests.
-;;
-;; This library provides extensions to Buttercup to write Specs for Flycheck.
-;;
-;; * Custom matchers
-;;
-;; (expect 'foo :to-be-local) - Is `foo' a local variable in the current buffer?
-
-;;; Code:
-
-(require 'buttercup)
-(require 'flycheck)
-(require 'seq)
-
-
-;;; Buttercup helpers
-
-(defun flycheck-buttercup-format-error-list (errors)
- "Format ERRORS into a human-readable string."
- (mapconcat (lambda (e) (flycheck-error-format e 'with-file-name))
- errors "\n"))
-
-
-;;; Data matchers
-
-(buttercup-define-matcher :to-be-empty-string (s)
- (let ((s (funcall s)))
- (if (equal s "")
- (cons t (format "Expected %S not be an empty string" s))
- (cons nil (format "Expected %S to be an empty string" s)))))
-
-(buttercup-define-matcher :to-match-with-group (re s index match)
- (let* ((re (funcall re))
- (s (funcall s))
- (index (funcall index))
- (match (funcall match))
- (matches? (string-match re s))
- (result (and matches? (match-string index s))))
- (if (and matches? (equal result match))
- (cons t (format "Expected %S not to match %S with %S in group %s"
- re s match index))
-
- (cons nil (format "Expected %S to match %S with %S in group %s, %s"
- re s match index
- (if matches?
- (format "but got %S" result)
- "but did not match"))))))
-
-
-;;; Emacs feature matchers
-
-(buttercup-define-matcher :to-be-live (buffer)
- (let ((buffer (get-buffer (funcall buffer))))
- (if (buffer-live-p buffer)
- (cons t (format "Expected %S not to be a live buffer, but it is"
- buffer))
- (cons nil (format "Expected %S to be a live buffer, but it is not"
- buffer)))))
-
-(buttercup-define-matcher :to-be-visible (buffer)
- (let ((buffer (get-buffer (funcall buffer))))
- (cond
- ((and buffer (get-buffer-window buffer))
- (cons t (format "Expected %S not to be a visible buffer, but it is"
- buffer)))
- ((not (bufferp buffer))
- (cons nil
- (format "Expected %S to be a visible buffer, but it is not a buffer"
- buffer)))
- (t (cons
- nil
- (format "Expected %S to be a visible buffer, but it is not visible"
- buffer))))))
-
-(buttercup-define-matcher :to-be-local (symbol)
- (let ((symbol (funcall symbol)))
- (if (local-variable-p symbol)
- (cons t (format "Expected %S not to be a local variable, but it is"
- symbol))
- (cons nil (format "Expected %S to be a local variable, but it is not"
- symbol)))))
-
-(buttercup-define-matcher :to-contain-match (buffer re)
- (let ((buffer (funcall buffer))
- (re (funcall re)))
- (if (not (get-buffer buffer))
- (cons nil (format "Expected %S to contain a match of %s, \
-but is not a buffer" buffer re))
- (with-current-buffer buffer
- (save-excursion
- (goto-char (point-min))
- (if (re-search-forward re nil 'noerror)
- (cons t (format "Expected %S to contain a match \
-for %s, but it did not" buffer re))
- (cons nil (format "Expected %S not to contain a match for \
-%s but it did not." buffer re))))))))
-
-
-;;; Flycheck matchers
-
-(buttercup-define-matcher :to-be-equal-flycheck-errors (a b)
- (let* ((a (funcall a))
- (b (funcall b))
- (a-formatted (flycheck-buttercup-format-error-list a))
- (b-formatted (flycheck-buttercup-format-error-list b)))
- (if (equal a b)
- (cons t (format "Expected
-%s
-not to be equal to
-%s" a-formatted b-formatted))
- (cons nil (format "Expected
-%s
-to be equal to
-%s" a-formatted b-formatted)))))
-
-(provide 'flycheck-buttercup)
-
-;; Disable byte compilation for this library, to prevent package.el choking on a
-;; missing `buttercup' library. See
-;; https://github.com/flycheck/flycheck/issues/860
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-;;; flycheck-buttercup.el ends here
diff --git a/emacs.d/elpa/flycheck-20200427.12/flycheck-ert.el b/emacs.d/elpa/flycheck-20200427.12/flycheck-ert.el
deleted file mode 100644
index c58b294..0000000
--- a/emacs.d/elpa/flycheck-20200427.12/flycheck-ert.el
+++ /dev/null
@@ -1,495 +0,0 @@
-;;; flycheck-ert.el --- Flycheck: ERT extensions -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017-2018 Flycheck contributors
-;; Copyright (C) 2013-2016 Sebastian Wiesner and Flycheck contributors
-
-;; Author: Sebastian Wiesner <swiesner@lunaryorn.com>
-;; Maintainer: Clément Pit-Claudel <clement.pitclaudel@live.com>
-;; fmdkdd <fmdkdd@gmail.com>
-;; URL: https://github.com/flycheck/flycheck
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Unit testing library for Flycheck, the modern on-the-fly syntax checking
-;; extension for GNU Emacs.
-
-;; Provide various utility functions and unit test helpers to test Flycheck and
-;; Flycheck extensions.
-
-;;; Code:
-
-(require 'flycheck)
-(require 'ert)
-(require 'macroexp) ; For macro utilities
-
-
-;;; Compatibility
-
-(eval-and-compile
- ;; Provide `ert-skip' and friends for Emacs 24.3
- (defconst flycheck-ert-ert-can-skip (fboundp 'ert-skip)
- "Whether ERT supports test skipping.")
-
- (unless (fboundp 'define-error)
- ;; from Emacs `subr.el'
- (defun define-error (name message &optional parent)
- "Define NAME as a new error signal.
-MESSAGE is a string that will be output to the echo area if such an error
-is signaled without being caught by a `condition-case'.
-PARENT is either a signal or a list of signals from which it inherits.
-Defaults to `error'."
- (unless parent (setq parent 'error))
- (let ((conditions
- (if (consp parent)
- (apply #'append
- (mapcar
- (lambda (parent)
- (cons parent
- (or (get parent 'error-conditions)
- (error "Unknown signal `%s'" parent))))
- parent))
- (cons parent (get parent 'error-conditions)))))
- (put name 'error-conditions
- (delete-dups (copy-sequence (cons name conditions))))
- (when message (put name 'error-message message)))))
-
- (unless flycheck-ert-ert-can-skip
- ;; Fake skipping
-
- (define-error 'flycheck-ert-skipped "Test skipped")
-
- (defun ert-skip (data)
- (signal 'flycheck-ert-skipped data))
-
- (defmacro skip-unless (form)
- `(unless (ignore-errors ,form)
- (signal 'flycheck-ert-skipped ',form)))
-
- (defun ert-test-skipped-p (result)
- (and (ert-test-failed-p result)
- (eq (car (ert-test-failed-condition result))
- 'flycheck-ert-skipped)))))
-
-
-;;; Internal variables
-
-(defvar flycheck-ert--resource-directory nil
- "The directory to get resources from in this test suite.")
-
-
-;;; Resource management macros
-
-(defmacro flycheck-ert-with-temp-buffer (&rest body)
- "Eval BODY within a temporary buffer.
-
-Like `with-temp-buffer', but resets the modification state of the
-temporary buffer to make sure that it is properly killed even if
-it has a backing file and is modified."
- (declare (indent 0) (debug t))
- `(with-temp-buffer
- (unwind-protect
- ,(macroexp-progn body)
- ;; Reset modification state of the buffer, and unlink it from its backing
- ;; file, if any, because Emacs refuses to kill modified buffers with
- ;; backing files, even if they are temporary.
- (set-buffer-modified-p nil)
- (set-visited-file-name nil 'no-query))))
-
-(defmacro flycheck-ert-with-file-buffer (file-name &rest body)
- "Create a buffer from FILE-NAME and eval BODY.
-
-BODY is evaluated with `current-buffer' being a buffer with the
-contents FILE-NAME."
- (declare (indent 1) (debug t))
- `(let ((file-name ,file-name))
- (unless (file-exists-p file-name)
- (error "%s does not exist" file-name))
- (flycheck-ert-with-temp-buffer
- (insert-file-contents file-name 'visit)
- (set-visited-file-name file-name 'no-query)
- (cd (file-name-directory file-name))
- ;; Mark the buffer as not modified, because we just loaded the file up to
- ;; now.
- (set-buffer-modified-p nil)
- ,@body)))
-
-(defmacro flycheck-ert-with-help-buffer (&rest body)
- "Execute BODY and kill the help buffer afterwards.
-
-Use this macro to test functions that create a Help buffer."
- (declare (indent 0))
- `(unwind-protect
- ,(macroexp-progn body)
- (when (buffer-live-p (get-buffer (help-buffer)))
- (kill-buffer (help-buffer)))))
-
-(defmacro flycheck-ert-with-global-mode (&rest body)
- "Execute BODY with Global Flycheck Mode enabled.
-
-After BODY, restore the old state of Global Flycheck Mode."
- (declare (indent 0))
- `(let ((old-state global-flycheck-mode))
- (unwind-protect
- (progn
- (global-flycheck-mode 1)
- ,@body)
- (global-flycheck-mode (if old-state 1 -1)))))
-
-(defmacro flycheck-ert-with-env (env &rest body)
- "Add ENV to `process-environment' in BODY.
-
-Execute BODY with a `process-environment' which contains all
-variables from ENV added.
-
-ENV is an alist, where each cons cell `(VAR . VALUE)' is a
-environment variable VAR to be added to `process-environment'
-with VALUE."
- (declare (indent 1))
- `(let ((process-environment (copy-sequence process-environment)))
- (pcase-dolist (`(,var . ,value) ,env)
- (setenv var value))
- ,@body))
-
-
-;;; Test resources
-(defun flycheck-ert-resource-filename (resource-file)
- "Determine the absolute file name of a RESOURCE-FILE.
-
-Relative file names are expanded against
-`flycheck-ert--resource-directory'."
- (expand-file-name resource-file flycheck-ert--resource-directory))
-
-(defmacro flycheck-ert-with-resource-buffer (resource-file &rest body)
- "Create a temp buffer from a RESOURCE-FILE and execute BODY.
-
-The absolute file name of RESOURCE-FILE is determined with
-`flycheck-ert-resource-filename'."
- (declare (indent 1))
- `(flycheck-ert-with-file-buffer
- (flycheck-ert-resource-filename ,resource-file)
- ,@body))
-
-
-;;; Test suite initialization
-
-(defun flycheck-ert-initialize (resource-dir)
- "Initialize a test suite with RESOURCE-DIR.
-
-RESOURCE-DIR is the directory, `flycheck-ert-resource-filename'
-should use to lookup resource files."
- (when flycheck-ert--resource-directory
- (error "Test suite already initialized"))
- (let ((tests (ert-select-tests t t)))
- ;; Select all tests
- (unless tests
- (error "No tests defined. \
-Call `flycheck-ert-initialize' after defining all tests!"))
-
- (setq flycheck-ert--resource-directory resource-dir)
-
- ;; Emacs 24.3 don't support skipped tests, so we add poor man's test
- ;; skipping: We mark skipped tests as expected failures by adjusting the
- ;; expected result of all test cases. Not particularly pretty, but works :)
- (unless flycheck-ert-ert-can-skip
- (dolist (test tests)
- (let ((result (ert-test-expected-result-type test)))
- (setf (ert-test-expected-result-type test)
- `(or ,result (satisfies ert-test-skipped-p))))))))
-
-
-;;; Test case definitions
-(defmacro flycheck-ert-def-checker-test (checker language name
- &rest keys-and-body)
- "Define a test case for a syntax CHECKER for LANGUAGE.
-
-CHECKER is a symbol or a list of symbols denoting syntax checkers
-being tested by the test. The test case is skipped, if any of
-these checkers cannot be used. LANGUAGE is a symbol or a list of
-symbols denoting the programming languages supported by the
-syntax checkers. This is currently only used for tagging the
-test appropriately.
-
-NAME is a symbol denoting the local name of the test. The test
-itself is ultimately named
-`flycheck-define-checker/CHECKER/NAME'. If CHECKER is a list,
-the first checker in the list is used for naming the test.
-
-Optionally, the keyword arguments `:tags' and `:expected-result'
-may be given. They have the same meaning as in `ert-deftest.',
-and are added to the tags and result expectations set up by this
-macro.
-
-The remaining forms KEYS-AND-BODY denote the body of the test
-case, including assertions and setup code."
- (declare (indent 3))
- (unless checker
- (error "No syntax checkers specified"))
- (unless language
- (error "No languages specified"))
- (let* ((checkers (if (symbolp checker) (list checker) checker))
- (checker (car checkers))
- (languages (if (symbolp language) (list language) language))
- (language-tags (mapcar (lambda (l) (intern (format "language-%s" l)))
- languages))
- (checker-tags (mapcar (lambda (c) (intern (format "checker-%s" c)))
- checkers))
- (local-name (or name 'default))
- (full-name (intern (format "flycheck-define-checker/%s/%s"
- checker local-name)))
- (keys-and-body (ert--parse-keys-and-body keys-and-body))
- (body (cadr keys-and-body))
- (keys (car keys-and-body))
- (default-tags '(syntax-checker external-tool)))
- `(ert-deftest ,full-name ()
- :expected-result ,(or (plist-get keys :expected-result) :passed)
- :tags (append ',(append default-tags language-tags checker-tags)
- ,(plist-get keys :tags))
- ,@(mapcar (lambda (c)
- `(skip-unless
- ;; Ignore non-command checkers
- (or (not (flycheck-checker-get ',c 'command))
- (executable-find (flycheck-checker-executable ',c)))))
- checkers)
- ,@body)))
-
-
-;;; Test case results
-
-(defun flycheck-ert-syntax-check-timed-out-p (result)
- "Whether RESULT denotes a timed-out test.
-
-RESULT is an ERT test result object."
- (and (ert-test-failed-p result)
- (eq (car (ert-test-failed-condition result))
- 'flycheck-ert-syntax-check-timed-out)))
-
-
-;;; Syntax checking in tests
-
-(defvar-local flycheck-ert-syntax-checker-finished nil
- "Non-nil if the current checker has finished.")
-
-(add-hook 'flycheck-after-syntax-check-hook
- (lambda () (setq flycheck-ert-syntax-checker-finished t)))
-
-(defconst flycheck-ert-checker-wait-time 10
- "Time to wait until a checker is finished in seconds.
-
-After this time has elapsed, the checker is considered to have
-failed, and the test aborted with failure.")
-
-(define-error 'flycheck-ert-syntax-check-timed-out "Syntax check timed out.")
-
-(defun flycheck-ert-wait-for-syntax-checker ()
- "Wait until the syntax check in the current buffer is finished."
- (let ((starttime (float-time)))
- (while (and (not flycheck-ert-syntax-checker-finished)
- (< (- (float-time) starttime) flycheck-ert-checker-wait-time))
- (accept-process-output nil 0.02))
- (unless (< (- (float-time) starttime) flycheck-ert-checker-wait-time)
- (flycheck-stop)
- (signal 'flycheck-ert-syntax-check-timed-out nil)))
- (setq flycheck-ert-syntax-checker-finished nil))
-
-(defun flycheck-ert-buffer-sync ()
- "Like `flycheck-buffer', but synchronously."
- (setq flycheck-ert-syntax-checker-finished nil)
- (should (not (flycheck-running-p)))
- (flycheck-mode) ;; This will only start a deferred check,
- (should (flycheck-get-checker-for-buffer))
- (flycheck-buffer) ;; …so we need an explicit manual check
- ;; After starting the check, the checker should either be running now, or
- ;; already be finished (if it was fast).
- (should (or flycheck-current-syntax-check
- flycheck-ert-syntax-checker-finished))
- ;; Also there should be no deferred check pending anymore
- (should-not (flycheck-deferred-check-p))
- (flycheck-ert-wait-for-syntax-checker))
-
-(defun flycheck-ert-ensure-clear ()
- "Clear the current buffer.
-
-Raise an assertion error if the buffer is not clear afterwards."
- (flycheck-clear)
- (should (not flycheck-current-errors))
- (should (not (-any? (lambda (ov) (overlay-get ov 'flycheck-overlay))
- (overlays-in (point-min) (point-max))))))
-
-
-;;; Test assertions
-
-(defun flycheck-error-without-group (err)
- "Return a copy ERR with the `group' property set to nil."
- (let ((copy (copy-flycheck-error err)))
- (setf (flycheck-error-group copy) nil)
- copy))
-
-(defun flycheck-ert-should-overlay (error)
- "Test that ERROR has a proper overlay in the current buffer.
-
-ERROR is a Flycheck error object."
- (let* ((overlay (-first (lambda (ov)
- (equal (flycheck-error-without-group
- (overlay-get ov 'flycheck-error))
- (flycheck-error-without-group error)))
- (flycheck-overlays-in 0 (+ 1 (buffer-size)))))
- (region
- ;; Overlays of errors from other files are on the first line
- (if (flycheck-relevant-error-other-file-p error)
- (cons (point-min)
- (save-excursion (goto-char (point-min)) (point-at-eol)))
- (flycheck-error-region-for-mode error 'symbols)))
- (level (flycheck-error-level error))
- (category (flycheck-error-level-overlay-category level))
- (face (get category 'face))
- (fringe-bitmap (flycheck-error-level-fringe-bitmap level))
- (fringe-face (flycheck-error-level-fringe-face level))
- (fringe-icon (list 'left-fringe fringe-bitmap fringe-face)))
- (should overlay)
- (should (overlay-get overlay 'flycheck-overlay))
- (should (= (overlay-start overlay) (car region)))
- (should (= (overlay-end overlay) (cdr region)))
- (should (eq (overlay-get overlay 'face) face))
- (should (equal (get-char-property 0 'display
- (overlay-get overlay 'before-string))
- fringe-icon))
- (should (eq (overlay-get overlay 'category) category))
- (should (equal (flycheck-error-without-group (overlay-get overlay
- 'flycheck-error))
- (flycheck-error-without-group error)))))
-
-(defun flycheck-ert-should-errors (&rest errors)
- "Test that the current buffers has ERRORS.
-
-ERRORS is a list of errors expected to be present in the current
-buffer. Each error is given as a list of arguments to
-`flycheck-error-new-at'.
-
-If ERRORS are omitted, test that there are no errors at all in
-the current buffer.
-
-With ERRORS, test that each error in ERRORS is present in the
-current buffer, and that the number of errors in the current
-buffer is equal to the number of given ERRORS. In other words,
-check that the buffer has all ERRORS, and no other errors."
- (let ((expected (mapcar (apply-partially #'apply #'flycheck-error-new-at)
- errors)))
- (should (equal (mapcar #'flycheck-error-without-group expected)
- (mapcar #'flycheck-error-without-group
- flycheck-current-errors)))
- ;; Check that related errors are the same
- (cl-mapcar (lambda (err1 err2)
- (should (equal (mapcar #'flycheck-error-without-group
- (flycheck-related-errors err1 expected))
- (mapcar #'flycheck-error-without-group
- (flycheck-related-errors err2)))))
- expected flycheck-current-errors)
- (mapc #'flycheck-ert-should-overlay expected))
- (should (= (length errors)
- (length (flycheck-overlays-in (point-min) (point-max))))))
-
-(define-error 'flycheck-ert-suspicious-checker "Suspicious state from checker")
-
-(defun flycheck-ert-should-syntax-check-in-buffer (&rest errors)
- "Test a syntax check in BUFFER, expecting ERRORS.
-
-This is like `flycheck-ert-should-syntax-check', but with a
-buffer in the right mode instead of a file."
- ;; Load safe file-local variables because some tests depend on them
- (let ((enable-local-variables :safe)
- ;; Disable all hooks at this place, to prevent 3rd party packages
- ;; from interfering
- (hack-local-variables-hook))
- (hack-local-variables))
- ;; Configure config file locating for unit tests
- (let ((process-hook-called 0)
- (suspicious nil))
- (add-hook 'flycheck-process-error-functions
- (lambda (_err)
- (setq process-hook-called (1+ process-hook-called))
- nil)
- nil :local)
- (add-hook 'flycheck-status-changed-functions
- (lambda (status)
- (when (eq status 'suspicious)
- (setq suspicious t)))
- nil :local)
- (flycheck-ert-buffer-sync)
- (when suspicious
- (signal 'flycheck-ert-suspicious-checker nil))
- (apply #'flycheck-ert-should-errors errors)
- (should (= process-hook-called (length errors))))
- (flycheck-ert-ensure-clear))
-
-(defun flycheck-ert-should-syntax-check (resource-file modes &rest errors)
- "Test a syntax check in RESOURCE-FILE with MODES.
-
-RESOURCE-FILE is the file to check. MODES is a single major mode
-symbol or a list thereof, specifying the major modes to syntax
-check with. If more than one major mode is specified, the test
-is run for each mode separately, so if you give three major
-modes, the entire test will run three times. ERRORS is the list
-of expected errors, as in `flycheck-ert-should-errors'. If
-omitted, the syntax check must not emit any errors. The errors
-are cleared after each test.
-
-The syntax checker is selected via standard syntax checker
-selection. To test a specific checker, you need to set
-`flycheck-checker' or `flycheck-disabled-checkers' accordingly
-before using this predicate, depending on whether you want to use
-manual or automatic checker selection.
-
-During the syntax check, configuration files of syntax checkers
-are also searched in the `config-files' sub-directory of the
-resource directory."
- (when (symbolp modes)
- (setq modes (list modes)))
- (dolist (mode modes)
- (unless (fboundp mode)
- (ert-skip (format "%S missing" mode)))
- (flycheck-ert-with-resource-buffer resource-file
- (funcall mode)
- (apply #'flycheck-ert-should-syntax-check-in-buffer errors))))
-
-(defun flycheck-ert-at-nth-error (n)
- "Determine whether point is at the N'th Flycheck error.
-
-Return non-nil if the point is at the N'th Flycheck error in the
-current buffer. Otherwise return nil."
- (let* ((error (nth (1- n) flycheck-current-errors))
- (mode flycheck-highlighting-mode)
- (region (flycheck-error-region-for-mode error mode)))
- (and (member error (flycheck-overlay-errors-at (point)))
- (= (point) (car region)))))
-
-(defun flycheck-ert-explain--at-nth-error (n)
- "Explain a failed at-nth-error predicate at N."
- (let ((errors (flycheck-overlay-errors-at (point))))
- (if (null errors)
- (format "Expected to be at error %s, but no error at point %s"
- n (point))
- (let ((pos (cl-position (car errors) flycheck-current-errors)))
- (format "Expected to be at error %s, but point %s is at error %s"
- n (point) (1+ pos))))))
-
-(put 'flycheck-ert-at-nth-error 'ert-explainer
- 'flycheck-ert-explain--at-nth-error)
-
-(provide 'flycheck-ert)
-
-;;; flycheck-ert.el ends here
diff --git a/emacs.d/elpa/flycheck-20200427.12/flycheck-pkg.el b/emacs.d/elpa/flycheck-20200427.12/flycheck-pkg.el
deleted file mode 100644
index 23c5624..0000000
--- a/emacs.d/elpa/flycheck-20200427.12/flycheck-pkg.el
+++ /dev/null
@@ -1,16 +0,0 @@
-(define-package "flycheck" "20200427.12" "On-the-fly syntax checking"
- '((dash "2.12.1")
- (pkg-info "0.4")
- (let-alist "1.0.4")
- (seq "1.11")
- (emacs "24.3"))
- :keywords
- '("convenience" "languages" "tools")
- :authors
- '(("Sebastian Wiesner" . "swiesner@lunaryorn.com"))
- :maintainer
- '("Clément Pit-Claudel" . "clement.pitclaudel@live.com")
- :url "http://www.flycheck.org")
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/flycheck-20200427.12/flycheck.el b/emacs.d/elpa/flycheck-20200427.12/flycheck.el
deleted file mode 100644
index bce312a..0000000
--- a/emacs.d/elpa/flycheck-20200427.12/flycheck.el
+++ /dev/null
@@ -1,11825 +0,0 @@
-;;; flycheck.el --- On-the-fly syntax checking -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017-2019 Flycheck contributors
-;; Copyright (C) 2012-2016 Sebastian Wiesner and Flycheck contributors
-;; Copyright (C) 2013, 2014 Free Software Foundation, Inc.
-;;
-;; Author: Sebastian Wiesner <swiesner@lunaryorn.com>
-;; Maintainer: Clément Pit-Claudel <clement.pitclaudel@live.com>
-;; fmdkdd <fmdkdd@gmail.com>
-;; URL: http://www.flycheck.org
-;; Keywords: convenience, languages, tools
-;; Version: 32-cvs
-;; Package-Requires: ((dash "2.12.1") (pkg-info "0.4") (let-alist "1.0.4") (seq "1.11") (emacs "24.3"))
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; On-the-fly syntax checking for GNU Emacs 24.
-;;
-;; Flycheck is a modern on-the-fly syntax checking extension for GNU Emacs,
-;; intended as replacement for the older Flymake extension which is part of GNU
-;; Emacs.
-;;
-;; Flycheck automatically checks buffers for errors while you type, and reports
-;; warnings and errors directly in the buffer and in an optional IDE-like error
-;; list.
-;;
-;; It comes with a rich interface for custom syntax checkers and other
-;; extensions, and has already many 3rd party extensions adding new features.
-;;
-;; Please read the online manual at http://www.flycheck.org for more
-;; information. You can open the manual directly from Emacs with `M-x
-;; flycheck-manual'.
-;;
-;; # Setup
-;;
-;; Flycheck works best on Unix systems. It does not officially support Windows,
-;; but tries to maintain Windows compatibility and should generally work fine on
-;; Windows, too.
-;;
-;; To enable Flycheck add the following to your init file:
-;;
-;; (add-hook 'after-init-hook #'global-flycheck-mode)
-;;
-;; Flycheck will then automatically check buffers in supported languages, as
-;; long as all necessary tools are present. Use `flycheck-verify-setup' to
-;; troubleshoot your Flycheck setup.
-
-;;; Code:
-
-(eval-when-compile
- (require 'let-alist) ; `let-alist'
- (require 'compile) ; Compile Mode integration
- (require 'jka-compr) ; To inhibit compression of temp files
- (require 'pcase) ; `pcase-dolist' (`pcase' itself is autoloaded)
- )
-
-(require 'dash)
-
-(require 'seq) ; Sequence functions
-(require 'subr-x nil 'no-error) ; Additional utilities, Emacs 24.4 and upwards
-(require 'cl-lib) ; `cl-defstruct' and CL utilities
-(require 'tabulated-list) ; To list errors
-(require 'easymenu) ; Flycheck Mode menu definition
-(require 'rx) ; Regexp fanciness in `flycheck-define-checker'
-(require 'help-mode) ; `define-button-type'
-(require 'find-func) ; `find-function-regexp-alist'
-(require 'json) ; `flycheck-parse-tslint'
-(require 'ansi-color) ; `flycheck-parse-with-patterns-without-color'
-
-
-;; Declare a bunch of dynamic variables that we need from other modes
-(defvar sh-shell) ; For shell script checker predicates
-(defvar ess-language) ; For r-lintr predicate
-
-;; Tell the byte compiler about autoloaded functions from packages
-(declare-function pkg-info-version-info "pkg-info" (package))
-
-
-;;; Compatibility
-(eval-and-compile
- (unless (fboundp 'string-suffix-p)
- ;; TODO: Remove when dropping support for Emacs 24.3 and earlier
- (defun string-suffix-p (suffix string &optional ignore-case)
- "Return non-nil if SUFFIX is a suffix of STRING.
-If IGNORE-CASE is non-nil, the comparison is done without paying
-attention to case differences."
- (let ((start-pos (- (length string) (length suffix))))
- (and (>= start-pos 0)
- (eq t (compare-strings suffix nil nil
- string start-pos nil ignore-case))))))
-
- ;; TODO: Remove when dropping support for Emacs 24.3 and earlier
- (unless (featurep 'subr-x)
- ;; `subr-x' function for Emacs 24.3 and below
- (defsubst string-join (strings &optional separator)
- "Join all STRINGS using SEPARATOR."
- (mapconcat 'identity strings separator))
-
- (defsubst string-trim-left (string)
- "Remove leading whitespace from STRING."
- (if (string-match "\\`[ \t\n\r]+" string)
- (replace-match "" t t string)
- string))
-
- (defsubst string-trim-right (string)
- "Remove trailing whitespace from STRING."
- (if (string-match "[ \t\n\r]+\\'" string)
- (replace-match "" t t string)
- string))
-
- (defsubst string-trim (string)
- "Remove leading and trailing whitespace from STRING."
- (string-trim-left (string-trim-right string)))
-
- (defsubst string-empty-p (string)
- "Check whether STRING is empty."
- (string= string ""))))
-
-
-;;; Customization
-(defgroup flycheck nil
- "Modern on-the-fly syntax checking for GNU Emacs."
- :prefix "flycheck-"
- :group 'tools
- :link '(url-link :tag "Website" "http://www.flycheck.org")
- :link '(url-link :tag "Github" "https://github.com/flycheck/flycheck"))
-
-(defgroup flycheck-config-files nil
- "Configuration files for on-the-fly syntax checkers."
- :prefix "flycheck-"
- :group 'flycheck)
-
-(defgroup flycheck-options nil
- "Options for on-the-fly syntax checkers."
- :prefix "flycheck-"
- :group 'flycheck)
-
-(defgroup flycheck-executables nil
- "Executables of syntax checkers."
- :prefix "flycheck-"
- :group 'flycheck)
-
-(defgroup flycheck-faces nil
- "Faces used by on-the-fly syntax checking."
- :prefix "flycheck-"
- :group 'flycheck)
-
-(defcustom flycheck-checkers
- '(ada-gnat
- asciidoctor
- asciidoc
- awk-gawk
- bazel-buildifier
- c/c++-clang
- c/c++-gcc
- c/c++-cppcheck
- cfengine
- chef-foodcritic
- coffee
- coffee-coffeelint
- coq
- css-csslint
- css-stylelint
- cuda-nvcc
- cwl
- d-dmd
- dockerfile-hadolint
- elixir-credo
- emacs-lisp
- emacs-lisp-checkdoc
- ember-template
- erlang-rebar3
- erlang
- eruby-erubis
- eruby-ruumba
- fortran-gfortran
- go-gofmt
- go-golint
- go-vet
- go-build
- go-test
- go-errcheck
- go-unconvert
- go-staticcheck
- groovy
- haml
- handlebars
- haskell-stack-ghc
- haskell-ghc
- haskell-hlint
- html-tidy
- javascript-eslint
- javascript-jshint
- javascript-standard
- json-jsonlint
- json-python-json
- json-jq
- jsonnet
- less
- less-stylelint
- llvm-llc
- lua-luacheck
- lua
- markdown-markdownlint-cli
- markdown-mdl
- nix
- nix-linter
- opam
- perl
- perl-perlcritic
- php
- php-phpmd
- php-phpcs
- processing
- proselint
- protobuf-protoc
- protobuf-prototool
- pug
- puppet-parser
- puppet-lint
- python-flake8
- python-pylint
- python-pycompile
- python-mypy
- r-lintr
- racket
- rpm-rpmlint
- rst-sphinx
- rst
- ruby-rubocop
- ruby-standard
- ruby-reek
- ruby-rubylint
- ruby
- ruby-jruby
- rust-cargo
- rust
- rust-clippy
- scala
- scala-scalastyle
- scheme-chicken
- scss-lint
- scss-stylelint
- sass/scss-sass-lint
- sass
- scss
- sh-bash
- sh-posix-dash
- sh-posix-bash
- sh-zsh
- sh-shellcheck
- slim
- slim-lint
- sql-sqlint
- systemd-analyze
- tcl-nagelfar
- terraform
- terraform-tflint
- tex-chktex
- tex-lacheck
- texinfo
- textlint
- typescript-tslint
- verilog-verilator
- vhdl-ghdl
- xml-xmlstarlet
- xml-xmllint
- yaml-jsyaml
- yaml-ruby
- yaml-yamllint)
- "Syntax checkers available for automatic selection.
-
-A list of Flycheck syntax checkers to choose from when syntax
-checking a buffer. Flycheck will automatically select a suitable
-syntax checker from this list, unless `flycheck-checker' is set,
-either directly or with `flycheck-select-checker'.
-
-You should not need to change this variable normally. In order
-to disable syntax checkers, please use
-`flycheck-disabled-checkers'. This variable is intended for 3rd
-party extensions to tell Flycheck about new syntax checkers.
-
-Syntax checkers in this list must be defined with
-`flycheck-define-checker'."
- :group 'flycheck
- :type '(repeat (symbol :tag "Checker"))
- :risky t)
-
-(defcustom flycheck-disabled-checkers nil
- "Syntax checkers excluded from automatic selection.
-
-A list of Flycheck syntax checkers to exclude from automatic
-selection. Flycheck will never automatically select a syntax
-checker in this list, regardless of the value of
-`flycheck-checkers'.
-
-However, syntax checkers in this list are still available for
-manual selection with `flycheck-select-checker'.
-
-Use this variable to disable syntax checkers, instead of removing
-the syntax checkers from `flycheck-checkers'. You may also use
-this option as a file or directory local variable to disable
-specific checkers in individual files and directories
-respectively."
- :group 'flycheck
- :type '(repeat (symbol :tag "Checker"))
- :package-version '(flycheck . "0.16")
- :safe #'flycheck-symbol-list-p)
-(make-variable-buffer-local 'flycheck-disabled-checkers)
-
-(defvar-local flycheck--automatically-disabled-checkers nil
- "List of syntax checkers automatically disabled for this buffer.
-
-A checker can be automatically disabled in two cases:
-
-1. Its `:enabled' predicate returned false.
-2. It returned too many errors (see `flycheck-checker-error-threshold').
-
-To trigger a reverification from Emacs Lisp code, do not modify
-this variable: use `flycheck-reset-enabled-checker'.")
-
-(defvar-local flycheck-checker nil
- "Syntax checker to use for the current buffer.
-
-If unset or nil, automatically select a suitable syntax checker
-from `flycheck-checkers' on every syntax check.
-
-If set to a syntax checker only use this syntax checker and never
-select one from `flycheck-checkers' automatically. The syntax
-checker is used regardless of whether it is contained in
-`flycheck-checkers' or `flycheck-disabled-checkers'. If the
-syntax checker is unusable in the current buffer an error is
-signaled.
-
-A syntax checker assigned to this variable must be defined with
-`flycheck-define-checker'.
-
-Use the command `flycheck-select-checker' to select a syntax
-checker for the current buffer, or set this variable as file
-local variable to always use a specific syntax checker for a
-file. See Info Node `(emacs)Specifying File Variables' for more
-information about file variables.")
-(put 'flycheck-checker 'safe-local-variable 'flycheck-registered-checker-p)
-
-(defcustom flycheck-locate-config-file-functions nil
- "Functions to locate syntax checker configuration files.
-
-Each function in this hook must accept two arguments: The value
-of the configuration file variable, and the syntax checker
-symbol. It must return either a string with an absolute path to
-the configuration file, or nil, if it cannot locate the
-configuration file.
-
-The functions in this hook are called in order of appearance, until a
-function returns non-nil. The configuration file returned by that
-function is then given to the syntax checker if it exists.
-
-This variable is an abnormal hook. See Info
-node `(elisp)Hooks'."
- :group 'flycheck
- :type 'hook
- :risky t)
-
-(defcustom flycheck-checker-error-threshold 400
- "Maximum errors allowed per syntax checker.
-
-The value of this variable is either an integer denoting the
-maximum number of errors per syntax checker and buffer, or nil to
-not limit the errors reported from a syntax checker.
-
-If this variable is a number and a syntax checker reports more
-errors than the value of this variable, its errors are not
-discarded, and not highlighted in the buffer or available in the
-error list. The affected syntax checker is also disabled for
-future syntax checks of the buffer."
- :group 'flycheck
- :type '(choice (const :tag "Do not limit reported errors" nil)
- (integer :tag "Maximum number of errors"))
- :risky t
- :package-version '(flycheck . "0.22"))
-
-(defcustom flycheck-process-error-functions nil
- "Functions to process errors.
-
-Each function in this hook must accept a single argument: A
-Flycheck error to process.
-
-All functions in this hook are called in order of appearance,
-until a function returns non-nil. Thus, a function in this hook
-may return nil, to allow for further processing of the error, or
-any non-nil value, to indicate that the error was fully processed
-and inhibit any further processing.
-
-The functions are called for each newly parsed error immediately
-after the corresponding syntax checker finished. At this stage,
-the overlays from the previous syntax checks are still present,
-and there may be further syntax checkers in the chain.
-
-This variable is an abnormal hook. See Info
-node `(elisp)Hooks'."
- :group 'flycheck
- :type 'hook
- :package-version '(flycheck . "0.13")
- :risky t)
-
-(defcustom flycheck-display-errors-delay 0.9
- "Delay in seconds before displaying errors at point.
-
-Use floating point numbers to express fractions of seconds."
- :group 'flycheck
- :type 'number
- :package-version '(flycheck . "0.15")
- :safe #'numberp)
-
-(defcustom flycheck-display-errors-function #'flycheck-display-error-messages
- "Function to display error messages.
-
-If set to a function, call the function with the list of errors
-to display as single argument. Each error is an instance of the
-`flycheck-error' struct.
-
-If set to nil, do not display errors at all."
- :group 'flycheck
- :type '(choice (const :tag "Display error messages"
- flycheck-display-error-messages)
- (const :tag "Display error messages only if no error list"
- flycheck-display-error-messages-unless-error-list)
- (function :tag "Error display function"))
- :package-version '(flycheck . "0.13")
- :risky t)
-
-(defcustom flycheck-help-echo-function #'flycheck-help-echo-all-error-messages
- "Function to compute the contents of the error tooltips.
-
-If set to a function, call the function with the list of errors
-to display as single argument. Each error is an instance of the
-`flycheck-error' struct. The function is used to set the
-help-echo property of flycheck error overlays. It should return
-a string, which is displayed when the user hovers over an error
-or presses \\[display-local-help].
-
-If set to nil, do not show error tooltips."
- :group 'flycheck
- :type '(choice (const :tag "Concatenate error messages to form a tooltip"
- flycheck-help-echo-all-error-messages)
- (function :tag "Help echo function"))
- :package-version '(flycheck . "0.25")
- :risky t)
-
-(defcustom flycheck-command-wrapper-function #'identity
- "Function to modify checker commands before execution.
-
-The value of this option is a function which is given a list
-containing the full command of a syntax checker after
-substitution through `flycheck-substitute-argument' but before
-execution. The function may return a new command for Flycheck to
-execute.
-
-The default value is `identity' which does not change the
-command. You may provide your own function to run Flycheck
-commands through `bundle exec', `nix-shell' or similar wrappers."
- :group 'flycheck
- :type '(choice (const :tag "Do not modify commands" identity)
- (function :tag "Modify command with a custom function"))
- :package-version '(flycheck . "0.25")
- :risky t)
-
-(defcustom flycheck-executable-find #'flycheck-default-executable-find
- "Function to search for executables.
-
-The value of this option is a function which is given the name or
-path of an executable and shall return the full path to the
-executable, or nil if the executable does not exit.
-
-The default is `flycheck-default-executable-find', which searches
-variable `exec-path' when given a command name, and resolves
-paths to absolute ones. You can customize this option to search
-for checkers in other environments such as bundle or NixOS
-sandboxes."
- :group 'flycheck
- :type '(choice
- (const :tag "Search executables in `exec-path'"
- flycheck-default-executable-find)
- (function :tag "Search executables with a custom function"))
- :package-version '(flycheck . "32")
- :risky t)
-
-(defun flycheck-default-executable-find (executable)
- "Resolve EXECUTABLE to a full path.
-
-Like `executable-find', but supports relative paths.
-
-Attempts invoking `executable-find' first; if that returns nil,
-and EXECUTABLE contains a directory component, expands to a full
-path and tries invoking `executable-find' again."
- ;; file-name-directory returns non-nil iff the given path has a
- ;; directory component.
- (or
- (executable-find executable)
- (when (file-name-directory executable)
- (executable-find (expand-file-name executable)))))
-
-(defcustom flycheck-indication-mode 'left-fringe
- "The indication mode for Flycheck errors and warnings.
-
-This variable controls how Flycheck indicates errors in buffers.
-May either be `left-fringe', `right-fringe', or nil.
-
-If set to `left-fringe' or `right-fringe', indicate errors and
-warnings via icons in the left and right fringe respectively.
-
-If set to nil, do not indicate errors and warnings, but just
-highlight them according to `flycheck-highlighting-mode'."
- :group 'flycheck
- :type '(choice (const :tag "Indicate in the left fringe" left-fringe)
- (const :tag "Indicate in the right fringe" right-fringe)
- (const :tag "Do not indicate" nil))
- :safe #'symbolp)
-
-(defcustom flycheck-highlighting-mode 'symbols
- "The highlighting mode for Flycheck errors and warnings.
-
-The highlighting mode controls how Flycheck highlights errors in
-buffers when a checker only reports the starting position of an
-error. The following modes are known:
-
-`columns'
- Highlight a single character. If the error does not have a column,
- highlight the whole line.
-
-`symbols'
- Highlight a full symbol if there is any, otherwise behave like `columns'.
- This is the default.
-
-`sexps'
- Highlight a full expression, if there is any, otherwise behave like
- `columns'. Note that this mode can be *very* slow in some major modes.
-
-`lines'
- Highlight the whole line.
-
-nil
- Do not highlight errors at all. However, errors will still
- be reported in the mode line and in error message popups,
- and indicated according to `flycheck-indication-mode'."
- :group 'flycheck
- :type '(choice (const :tag "Highlight columns only" columns)
- (const :tag "Highlight symbols" symbols)
- (const :tag "Highlight expressions" sexps)
- (const :tag "Highlight whole lines" lines)
- (const :tag "Do not highlight errors" nil))
- :package-version '(flycheck . "0.14")
- :safe #'symbolp)
-
-(defcustom flycheck-check-syntax-automatically '(save
- idle-change
- new-line
- mode-enabled)
- "When Flycheck should check syntax automatically.
-
-This variable is a list of events that may trigger syntax checks.
-The following events are known:
-
-`save'
- Check syntax immediately after the buffer was saved.
-
-`idle-change'
- Check syntax a short time (see `flycheck-idle-change-delay')
- after the last change to the buffer.
-
-`idle-buffer-switch'
- Check syntax a short time (see `flycheck-idle-buffer-switch-delay')
- after the user switches to a buffer.
-
-`new-line'
- Check syntax immediately after a new line was inserted into
- the buffer.
-
-`mode-enabled'
- Check syntax immediately when variable `flycheck-mode' is
- non-nil.
-
-Flycheck performs a syntax checks only on events, which are
-contained in this list. For instance, if the value of this
-variable is `(mode-enabled save)', Flycheck will only check if
-the mode is enabled or the buffer was saved, but never after
-changes to the buffer contents.
-
-If nil, never check syntax automatically. In this case, use
-`flycheck-buffer' to start a syntax check manually."
- :group 'flycheck
- :type '(set (const :tag "After the buffer was saved" save)
- (const :tag "After the buffer was changed and idle" idle-change)
- (const
- :tag "After switching the current buffer" idle-buffer-switch)
- (const :tag "After a new line was inserted" new-line)
- (const :tag "After `flycheck-mode' was enabled" mode-enabled))
- :package-version '(flycheck . "0.12")
- :safe #'flycheck-symbol-list-p)
-
-(defcustom flycheck-idle-change-delay 0.5
- "How many seconds to wait after a change before checking syntax.
-
-After the buffer was changed, Flycheck will wait as many seconds
-as the value of this variable before starting a syntax check. If
-the buffer is modified during this time, Flycheck will wait
-again.
-
-This variable has no effect, if `idle-change' is not contained in
-`flycheck-check-syntax-automatically'."
- :group 'flycheck
- :type 'number
- :package-version '(flycheck . "0.13")
- :safe #'numberp)
-
-(defcustom flycheck-idle-buffer-switch-delay 0.5
- "How many seconds to wait after switching buffers before checking syntax.
-
-After the user switches to a new buffer, Flycheck will wait as
-many seconds as the value of this variable before starting a
-syntax check. If the user switches to another buffer during this
-time, whether a syntax check is still performed depends on the
-value of `flycheck-buffer-switch-check-intermediate-buffers'.
-
-This variable has no effect if `idle-buffer-switch' is not
-contained in `flycheck-check-syntax-automatically'."
- :group 'flycheck
- :type 'number
- :package-version '(flycheck . "32")
- :safe #'numberp)
-
-(defcustom flycheck-buffer-switch-check-intermediate-buffers nil
- "Whether to check syntax in a buffer you only visit briefly.
-
-If nil, then when you switch to a buffer but switch to another
-buffer before the syntax check is performed, then the check is
-canceled. If non-nil, then syntax checks due to switching
-buffers are always performed. This only affects buffer switches
-that happen less than `flycheck-idle-buffer-switch-delay' seconds
-apart.
-
-This variable has no effect if `idle-buffer-switch' is not
-contained in `flycheck-check-syntax-automatically'."
- :group 'flycheck
- :type 'boolean
- :package-version '(flycheck . "32")
- :safe #'booleanp)
-
-(defcustom flycheck-standard-error-navigation t
- "Whether to support error navigation with `next-error'.
-
-If non-nil, enable navigation of Flycheck errors with
-`next-error', `previous-error' and `first-error'. Otherwise,
-these functions just navigate errors from compilation modes.
-
-Flycheck error navigation with `flycheck-next-error',
-`flycheck-previous-error' and `flycheck-first-error' is always
-enabled, regardless of the value of this variable.
-
-Note that this setting only takes effect when variable
-`flycheck-mode' is non-nil. Changing it will not affect buffers
-where variable `flycheck-mode' is already non-nil."
- :group 'flycheck
- :type 'boolean
- :package-version '(flycheck . "0.15")
- :safe #'booleanp)
-
-(define-widget 'flycheck-minimum-level 'lazy
- "A radio-type choice of minimum error levels.
-
-See `flycheck-navigation-minimum-level' and
-`flycheck-error-list-minimum-level'."
- :type '(radio (const :tag "All locations" nil)
- (const :tag "Informational messages" info)
- (const :tag "Warnings" warning)
- (const :tag "Errors" error)
- (symbol :tag "Custom error level")))
-
-(defcustom flycheck-navigation-minimum-level nil
- "The minimum level of errors to navigate.
-
-If set to an error level, only navigate errors whose error level
-is at least as severe as this one. If nil, navigate all errors."
- :group 'flycheck
- :type 'flycheck-minimum-level
- :safe #'flycheck-error-level-p
- :package-version '(flycheck . "0.21"))
-
-(defcustom flycheck-error-list-minimum-level nil
- "The minimum level of errors to display in the error list.
-
-If set to an error level, only display errors whose error level
-is at least as severe as this one in the error list. If nil,
-display all errors.
-
-This is the default level, used when the error list is opened.
-You can temporarily change the level using
-\\[flycheck-error-list-set-filter], or reset it to this value
-using \\[flycheck-error-list-reset-filter]."
- :group 'flycheck
- :type 'flycheck-minimum-level
- :safe #'flycheck-error-level-p
- :package-version '(flycheck . "0.24"))
-
-(defcustom flycheck-relevant-error-other-file-minimum-level 'error
- "The minimum level of errors from other files to display in this buffer.
-
-If set to an error level, only display errors from other files
-whose error level is at least as severe as this one. If nil,
-display all errors from other files."
- :group 'flycheck
- :type 'flycheck-minimum-level
- :safe #'flycheck-error-level-p
- :package-version '(flycheck . "32"))
-
-(defcustom flycheck-relevant-error-other-file-show t
- "Whether to show errors from other files."
- :group 'flycheck
- :type 'boolean
- :package-version '(flycheck . "32")
- :safe #'booleanp)
-
-(defcustom flycheck-completing-read-function #'completing-read
- "Function to read from minibuffer with completion.
-
-The function must be compatible to the built-in `completing-read'
-function."
- :group 'flycheck
- :type '(choice (const :tag "Default" completing-read)
- (const :tag "IDO" ido-completing-read)
- (function :tag "Custom function"))
- :risky t
- :package-version '(flycheck . "26"))
-
-(defcustom flycheck-temp-prefix "flycheck"
- "Prefix for temporary files created by Flycheck."
- :group 'flycheck
- :type 'string
- :package-version '(flycheck . "0.19")
- :risky t)
-
-(defcustom flycheck-mode-hook nil
- "Hooks to run after command `flycheck-mode' is toggled."
- :group 'flycheck
- :type 'hook
- :risky t)
-
-(defcustom flycheck-after-syntax-check-hook nil
- "Functions to run after each syntax check.
-
-This hook is run after a syntax check was finished.
-
-At this point, *all* chained checkers were run, and all errors
-were parsed, highlighted and reported. The variable
-`flycheck-current-errors' contains all errors from all syntax
-checkers run during the syntax check, so you can apply any error
-analysis functions.
-
-Note that this hook does *not* run after each individual syntax
-checker in the syntax checker chain, but only after the *last
-checker*.
-
-This variable is a normal hook. See Info node `(elisp)Hooks'."
- :group 'flycheck
- :type 'hook
- :risky t)
-
-(defcustom flycheck-before-syntax-check-hook nil
- "Functions to run before each syntax check.
-
-This hook is run right before a syntax check starts.
-
-Error information from the previous syntax check is *not*
-cleared before this hook runs.
-
-Note that this hook does *not* run before each individual syntax
-checker in the syntax checker chain, but only before the *first
-checker*.
-
-This variable is a normal hook. See Info node `(elisp)Hooks'."
- :group 'flycheck
- :type 'hook
- :risky t)
-
-(defcustom flycheck-syntax-check-failed-hook nil
- "Functions to run if a syntax check failed.
-
-This hook is run whenever an error occurs during Flycheck's
-internal processing. No information about the error is given to
-this hook.
-
-You should use this hook to conduct additional cleanup actions
-when Flycheck failed.
-
-This variable is a normal hook. See Info node `(elisp)Hooks'."
- :group 'flycheck
- :type 'hook
- :risky t)
-
-(defcustom flycheck-status-changed-functions nil
- "Functions to run if the Flycheck status changed.
-
-This hook is run whenever the status of Flycheck changes. Each
-hook function takes the status symbol as single argument, as
-given to `flycheck-report-status', which see.
-
-This variable is an abnormal hook. See Info
-node `(elisp)Hooks'."
- :group 'flycheck
- :type 'hook
- :risky t
- :package-version '(flycheck . "0.20"))
-
-(defcustom flycheck-error-list-after-refresh-hook nil
- "Functions to run after the error list was refreshed.
-
-This hook is run whenever the error list is refreshed.
-
-This variable is a normal hook. See Info node `(elisp)Hooks'."
- :group 'flycheck
- :type 'hook
- :risky t
- :package-version '(flycheck . "0.21"))
-
-(defface flycheck-error
- '((((supports :underline (:style wave)))
- :underline (:style wave :color "Red1"))
- (t
- :underline t :inherit error))
- "Flycheck face for errors."
- :package-version '(flycheck . "0.13")
- :group 'flycheck-faces)
-
-(defface flycheck-warning
- '((((supports :underline (:style wave)))
- :underline (:style wave :color "DarkOrange"))
- (t
- :underline t :inherit warning))
- "Flycheck face for warnings."
- :package-version '(flycheck . "0.13")
- :group 'flycheck-faces)
-
-(defface flycheck-info
- '((((supports :underline (:style wave)))
- :underline (:style wave :color "ForestGreen"))
- (t
- :underline t :inherit success))
- "Flycheck face for informational messages."
- :package-version '(flycheck . "0.15")
- :group 'flycheck-faces)
-
-(defface flycheck-fringe-error
- '((t :inherit error))
- "Flycheck face for fringe error indicators."
- :package-version '(flycheck . "0.13")
- :group 'flycheck-faces)
-
-(defface flycheck-fringe-warning
- '((t :inherit warning))
- "Flycheck face for fringe warning indicators."
- :package-version '(flycheck . "0.13")
- :group 'flycheck-faces)
-
-(defface flycheck-fringe-info
- ;; Semantically `success' is probably not the right face, but it looks nice as
- ;; a base face
- '((t :inherit success))
- "Flycheck face for fringe info indicators."
- :package-version '(flycheck . "0.15")
- :group 'flycheck-faces)
-
-(defface flycheck-error-list-error
- '((t :inherit error))
- "Flycheck face for error messages in the error list."
- :package-version '(flycheck . "0.16")
- :group 'flycheck-faces)
-
-(defface flycheck-error-list-warning
- '((t :inherit warning))
- "Flycheck face for warning messages in the error list."
- :package-version '(flycheck . "0.16")
- :group 'flycheck-faces)
-
-(defface flycheck-error-list-info
- '((t :inherit success))
- "Flycheck face for info messages in the error list."
- :package-version '(flycheck . "0.16")
- :group 'flycheck-faces)
-
-;; The base faces for the following two faces are inspired by Compilation Mode
-(defface flycheck-error-list-line-number
- '((t :inherit font-lock-constant-face))
- "Face for line numbers in the error list."
- :group 'flycheck-faces
- :package-version '(flycheck . "0.16"))
-
-(defface flycheck-error-list-column-number
- '((t :inherit font-lock-constant-face))
- "Face for line numbers in the error list."
- :group 'flycheck-faces
- :package-version '(flycheck . "0.16"))
-
-(defface flycheck-error-list-filename
- '((t :inherit font-lock-variable-name-face))
- "Face for filenames in the error list."
- :group 'flycheck-faces
- :package-version '(flycheck . "32"))
-
-(defface flycheck-error-list-id
- '((t :inherit font-lock-type-face))
- "Face for the error ID in the error list."
- :group 'flycheck-faces
- :package-version '(flycheck . "0.22"))
-
-(defface flycheck-error-list-id-with-explainer
- '((t :inherit flycheck-error-list-id
- :box (:style released-button)))
- "Face for the error ID in the error list, for errors that have an explainer."
- :group 'flycheck-faces
- :package-version '(flycheck . "30"))
-
-(defface flycheck-error-list-checker-name
- '((t :inherit font-lock-function-name-face))
- "Face for the syntax checker name in the error list."
- :group 'flycheck-faces
- :package-version '(flycheck . "0.21"))
-
-(defface flycheck-error-list-highlight
- '((t :inherit highlight))
- "Flycheck face to highlight errors in the error list."
- :package-version '(flycheck . "0.15")
- :group 'flycheck-faces)
-
-(defface flycheck-verify-select-checker
- '((t :box (:style released-button)))
- "Flycheck face for the 'select' button in the verify setup buffer."
- :package-version '(flycheck . "32")
- :group 'flycheck-faces)
-
-(defvar flycheck-command-map
- (let ((map (make-sparse-keymap)))
- (define-key map "c" #'flycheck-buffer)
- (define-key map "C" #'flycheck-clear)
- (define-key map (kbd "C-c") #'flycheck-compile)
- (define-key map "n" #'flycheck-next-error)
- (define-key map "p" #'flycheck-previous-error)
- (define-key map "l" #'flycheck-list-errors)
- (define-key map (kbd "C-w") #'flycheck-copy-errors-as-kill)
- (define-key map "s" #'flycheck-select-checker)
- (define-key map "?" #'flycheck-describe-checker)
- (define-key map "h" #'flycheck-display-error-at-point)
- (define-key map "e" #'flycheck-explain-error-at-point)
- (define-key map "H" #'display-local-help)
- (define-key map "i" #'flycheck-manual)
- (define-key map "V" #'flycheck-version)
- (define-key map "v" #'flycheck-verify-setup)
- (define-key map "x" #'flycheck-disable-checker)
- map)
- "Keymap of Flycheck interactive commands.")
-
-(defcustom flycheck-keymap-prefix (kbd "C-c !")
- "Prefix for key bindings of Flycheck.
-
-Changing this variable outside Customize does not have any
-effect. To change the keymap prefix from Lisp, you need to
-explicitly re-define the prefix key:
-
- (define-key flycheck-mode-map flycheck-keymap-prefix nil)
- (setq flycheck-keymap-prefix (kbd \"C-c f\"))
- (define-key flycheck-mode-map flycheck-keymap-prefix
- flycheck-command-map)
-
-Please note that Flycheck's manual documents the default
-keybindings. Changing this variable is at your own risk."
- :group 'flycheck
- :package-version '(flycheck . "0.19")
- :type 'string
- :risky t
- :set
- (lambda (variable key)
- (when (and (boundp variable) (boundp 'flycheck-mode-map))
- (define-key flycheck-mode-map (symbol-value variable) nil)
- (define-key flycheck-mode-map key flycheck-command-map))
- (set-default variable key)))
-
-(defcustom flycheck-mode-line '(:eval (flycheck-mode-line-status-text))
- "Mode line lighter for Flycheck.
-
-The value of this variable is a mode line template as in
-`mode-line-format'. See Info Node `(elisp)Mode Line Format' for
-more information. Note that it should contain a _single_ mode
-line construct only.
-
-Customize this variable to change how Flycheck reports its status
-in the mode line. You may use `flycheck-mode-line-status-text'
-to obtain a human-readable status text, including an
-error/warning count.
-
-You may also assemble your own status text. The current status
-of Flycheck is available in `flycheck-last-status-change'. The
-errors in the current buffer are stored in
-`flycheck-current-errors', and the function
-`flycheck-count-errors' may be used to obtain the number of
-errors grouped by error level.
-
-Set this variable to nil to disable the mode line completely."
- :group 'flycheck
- :type 'sexp
- :risky t
- :package-version '(flycheck . "0.20"))
-
-(defcustom flycheck-mode-line-prefix "FlyC"
- "Base mode line lighter for Flycheck.
-
-This will have an effect only with the default
-`flycheck-mode-line'.
-
-If you've customized `flycheck-mode-line' then the customized
-function must be updated to use this variable."
- :group 'flycheck
- :type 'string
- :package-version '(flycheck . "26"))
-
-(defcustom flycheck-error-list-mode-line
- `(,(propertized-buffer-identification "%12b")
- " for buffer "
- (:eval (flycheck-error-list-propertized-source-name))
- (:eval (flycheck-error-list-mode-line-filter-indicator)))
- "Mode line construct for Flycheck error list.
-
-The value of this variable is a mode line template as in
-`mode-line-format', to be used as
-`mode-line-buffer-identification' in `flycheck-error-list-mode'.
-See Info Node `(elisp)Mode Line Format' for more information.
-
-Customize this variable to change how the error list appears in
-the mode line. The default shows the name of the buffer and the
-name of the source buffer, i.e. the buffer whose errors are
-currently listed."
- :group 'flycheck
- :type 'sexp
- :risky t
- :package-version '(flycheck . "0.20"))
-
-(defcustom flycheck-global-modes t
- "Modes for which option `flycheck-mode' is turned on.
-
-If t, Flycheck Mode is turned on for all major modes. If a list,
-Flycheck Mode is turned on for all `major-mode' symbols in that
-list. If the `car' of the list is `not', Flycheck Mode is turned
-on for all `major-mode' symbols _not_ in that list. If nil,
-Flycheck Mode is never turned on by command
-`global-flycheck-mode'.
-
-Note that Flycheck is never turned on for modes whose
-`mode-class' property is `special' (see Info node `(elisp)Major
-Mode Conventions'), regardless of the value of this option.
-
-Only has effect when variable `global-flycheck-mode' is non-nil."
- :group 'flycheck
- :type '(choice (const :tag "none" nil)
- (const :tag "all" t)
- (set :menu-tag "mode specific" :tag "modes"
- :value (not)
- (const :tag "Except" not)
- (repeat :inline t (symbol :tag "mode"))))
- :risky t
- :package-version '(flycheck . "0.23"))
-
-;; Add built-in functions to our hooks, via `add-hook', to make sure that our
-;; functions are really present, even if the variable was implicitly defined by
-;; another call to `add-hook' that occurred before Flycheck was loaded. See
-;; http://lists.gnu.org/archive/html/emacs-devel/2015-02/msg01271.html for why
-;; we don't initialize the hook variables right away. We append our own
-;; functions, because a user likely expects that their functions come first,
-;; even if they added them before Flycheck was loaded.
-(dolist (hook (list #'flycheck-locate-config-file-by-path
- #'flycheck-locate-config-file-ancestor-directories
- #'flycheck-locate-config-file-home))
- (add-hook 'flycheck-locate-config-file-functions hook 'append))
-
-(add-hook 'flycheck-process-error-functions #'flycheck-add-overlay 'append)
-
-
-;;; Global Flycheck menu
-(defvar flycheck-mode-menu-map
- (easy-menu-create-menu
- "Syntax Checking"
- '(["Enable on-the-fly syntax checking" flycheck-mode
- :style toggle :selected flycheck-mode
- :enable (or flycheck-mode
- ;; Don't let users toggle the mode if there is no syntax
- ;; checker for this buffer
- (seq-find #'flycheck-checker-supports-major-mode-p
- flycheck-checkers))]
- ["Check current buffer" flycheck-buffer flycheck-mode]
- ["Clear errors in buffer" flycheck-clear t]
- "---"
- ["Go to next error" flycheck-next-error flycheck-mode]
- ["Go to previous error" flycheck-previous-error flycheck-mode]
- ["Show all errors" flycheck-list-errors flycheck-mode]
- "---"
- ["Copy messages at point" flycheck-copy-errors-as-kill
- (flycheck-overlays-at (point))]
- ["Explain error at point" flycheck-explain-error-at-point]
- "---"
- ["Select syntax checker" flycheck-select-checker flycheck-mode]
- ["Disable syntax checker" flycheck-disable-checker flycheck-mode]
- ["Set executable of syntax checker" flycheck-set-checker-executable
- flycheck-mode]
- "---"
- ["Describe syntax checker" flycheck-describe-checker t]
- ["Verify setup" flycheck-verify-setup t]
- ["Show Flycheck version" flycheck-version t]
- ["Read the Flycheck manual" flycheck-info t]))
- "Menu of command `flycheck-mode'.")
-
-(easy-menu-add-item nil '("Tools") flycheck-mode-menu-map "Spell Checking")
-
-
-;;; Version information, manual and loading of Flycheck
-(defun flycheck-version (&optional show-version)
- "Get the Flycheck version as string.
-
-If called interactively or if SHOW-VERSION is non-nil, show the
-version in the echo area and the messages buffer.
-
-The returned string includes both, the version from package.el
-and the library version, if both a present and different.
-
-If the version number could not be determined, signal an error,
-if called interactively, or if SHOW-VERSION is non-nil, otherwise
-just return nil."
- (interactive (list t))
- (let ((version (pkg-info-version-info 'flycheck)))
- (when show-version
- (message "Flycheck version: %s" version))
- version))
-
-(defun flycheck-unload-function ()
- "Unload function for Flycheck."
- (global-flycheck-mode -1)
- (easy-menu-remove-item nil '("Tools") (cadr flycheck-mode-menu-map))
- (remove-hook 'kill-emacs-hook #'flycheck-global-teardown)
- (setq find-function-regexp-alist
- (assq-delete-all 'flycheck-checker find-function-regexp-alist)))
-
-;;;###autoload
-(defun flycheck-manual ()
- "Open the Flycheck manual."
- (interactive)
- (browse-url "http://www.flycheck.org"))
-
-(define-obsolete-function-alias 'flycheck-info
- 'flycheck-manual "26" "Open the Flycheck manual.")
-
-
-;;; Utility functions
-(defun flycheck-sexp-to-string (sexp)
- "Convert SEXP to a string.
-
-Like `prin1-to-string' but ensure that the returned string
-is loadable."
- (let ((print-quoted t)
- (print-length nil)
- (print-level nil))
- (prin1-to-string sexp)))
-
-(defun flycheck-string-to-number-safe (string)
- "Safely convert STRING to a number.
-
-If STRING is of string type and a numeric string, convert STRING
-to a number and return it. Otherwise return nil."
- (let ((number-re (rx string-start (one-or-more (any digit)) string-end)))
- (when (and (stringp string) (string-match-p number-re string))
- (string-to-number string))))
-
-(defun flycheck-string-or-nil-p (obj)
- "Determine if OBJ is a string or nil."
- (or (null obj) (stringp obj)))
-
-(defun flycheck-string-list-p (obj)
- "Determine if OBJ is a list of strings."
- (and (listp obj) (seq-every-p #'stringp obj)))
-
-(defun flycheck-string-or-string-list-p (obj)
- "Determine if OBJ is a string or a list of strings."
- (or (stringp obj) (flycheck-string-list-p obj)))
-
-(defun flycheck-symbol-list-p (obj)
- "Determine if OBJ is a list of symbols."
- (and (listp obj) (seq-every-p #'symbolp obj)))
-
-(defvar-local flycheck--file-truename-cache nil)
-
-(defun flycheck--file-truename (file)
- "Memoize the result of `file-truename' on (directory-file-name FILE)."
- ;; `file-truename' is slow, but alternatives are incomplete, so memoizing is
- ;; our best bet. See https://github.com/flycheck/flycheck/pull/1698.
- (unless flycheck--file-truename-cache
- (setq-local flycheck--file-truename-cache (make-hash-table :test 'equal)))
- (or (gethash file flycheck--file-truename-cache)
- (puthash file (file-truename (directory-file-name file))
- flycheck--file-truename-cache)))
-
-(defun flycheck-same-files-p (file-a file-b)
- "Determine whether FILE-A and FILE-B refer to the same file.
-
-Files are the same if (in the order checked) they are equal, or
-if they resolve to the same canonical paths."
- (or (string= file-a file-b)
- (string= (flycheck--file-truename file-a)
- (flycheck--file-truename file-b))))
-
-(defvar-local flycheck-temporaries nil
- "Temporary files and directories created by Flycheck.")
-
-(defun flycheck-temp-dir-system ()
- "Create a unique temporary directory.
-
-Use `flycheck-temp-prefix' as prefix, and add the directory to
-`flycheck-temporaries'.
-
-Return the path of the directory"
- (let* ((tempdir (make-temp-file flycheck-temp-prefix 'directory)))
- (push tempdir flycheck-temporaries)
- tempdir))
-
-(defun flycheck-temp-file-system (filename &optional suffix)
- "Create a temporary file named after FILENAME.
-
-If FILENAME is non-nil, this function creates a temporary
-directory with `flycheck-temp-dir-system', and creates a file
-with the same name as FILENAME in this directory.
-
-Otherwise this function creates a temporary file starting with
-`flycheck-temp-prefix'. If present, SUFFIX is appended;
-otherwise, a random suffix is used. The path of the file is
-added to `flycheck-temporaries'.
-
-Return the path of the file."
- (let ((tempfile (convert-standard-filename
- (if filename
- (expand-file-name (file-name-nondirectory filename)
- (flycheck-temp-dir-system))
- (make-temp-file flycheck-temp-prefix nil suffix)))))
- (push tempfile flycheck-temporaries)
- tempfile))
-
-(defun flycheck-temp-file-inplace (filename &optional suffix)
- "Create an in-place copy of FILENAME.
-
-Prefix the file with `flycheck-temp-prefix' and add the path of
-the file to `flycheck-temporaries'.
-
-If FILENAME is nil, fall back to `flycheck-temp-file-system' with
-the specified SUFFIX.
-
-Return the path of the file."
- (if filename
- (let* ((tempname (format "%s_%s"
- flycheck-temp-prefix
- (file-name-nondirectory filename)))
- (tempfile (convert-standard-filename
- (expand-file-name tempname
- (file-name-directory filename)))))
- (push tempfile flycheck-temporaries)
- tempfile)
- (flycheck-temp-file-system filename suffix)))
-
-(defun flycheck-temp-directory (checker)
- "Return the directory where CHECKER writes temporary files.
-
-Return nil if the CHECKER does not write temporary files."
- (let ((args (flycheck-checker-arguments checker)))
- (cond
- ((memq 'source args) temporary-file-directory)
- ((memq 'source-inplace args)
- (if buffer-file-name (file-name-directory buffer-file-name)
- temporary-file-directory))
- (t nil))))
-
-(defun flycheck-temp-files-writable-p (checker)
- "Whether CHECKER can write temporary files.
-
-If CHECKER has `source' or `source-inplace' in its `:command',
-return whether flycheck has the permissions to create the
-respective temporary files.
-
-Return t if CHECKER does not use temporary files."
- (let ((dir (flycheck-temp-directory checker)))
- (or (not dir) (file-writable-p dir))))
-
-(defun flycheck-save-buffer-to-file (file-name)
- "Save the contents of the current buffer to FILE-NAME."
- (make-directory (file-name-directory file-name) t)
- (let ((jka-compr-inhibit t))
- (write-region nil nil file-name nil 0)))
-
-(defun flycheck-save-buffer-to-temp (temp-file-fn)
- "Save buffer to temp file returned by TEMP-FILE-FN.
-
-Return the name of the temporary file."
- (let ((filename (funcall temp-file-fn (buffer-file-name))))
- ;; Do not flush short-lived temporary files onto disk
- (let ((write-region-inhibit-fsync t))
- (flycheck-save-buffer-to-file filename))
- filename))
-
-(defun flycheck-prepend-with-option (option items &optional prepend-fn)
- "Prepend OPTION to each item in ITEMS, using PREPEND-FN.
-
-Prepend OPTION to each item in ITEMS.
-
-ITEMS is a list of strings to pass to the syntax checker. OPTION
-is the option, as string. PREPEND-FN is a function called to
-prepend OPTION to each item in ITEMS. It receives the option and
-a single item from ITEMS as argument, and must return a string or
-a list of strings with OPTION prepended to the item. If
-PREPEND-FN is nil or omitted, use `list'.
-
-Return a list of strings where OPTION is prepended to each item
-in ITEMS using PREPEND-FN. If PREPEND-FN returns a list, it is
-spliced into the resulting list."
- (unless (stringp option)
- (error "Option %S is not a string" option))
- (unless prepend-fn
- (setq prepend-fn #'list))
- (let ((prepend
- (lambda (item)
- (let ((result (funcall prepend-fn option item)))
- (cond
- ((and (listp result) (seq-every-p #'stringp result)) result)
- ((stringp result) (list result))
- (t (error "Invalid result type for option: %S" result)))))))
- (apply #'append (seq-map prepend items))))
-
-(defun flycheck-find-in-buffer (pattern)
- "Find PATTERN in the current buffer.
-
-Return the result of the first matching group of PATTERN, or nil,
-if PATTERN did not match."
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (when (re-search-forward pattern nil 'no-error)
- (match-string-no-properties 1)))))
-
-(defun flycheck-buffer-empty-p (&optional buffer)
- "Check whether a BUFFER is empty, defaulting to the current one."
- (= (buffer-size buffer) 0))
-
-(defun flycheck-buffer-nonempty-p (&optional buffer)
- "Check whether a BUFFER is nonempty, defaulting to the current one."
- (> (buffer-size buffer) 0))
-
-(defun flycheck-ephemeral-buffer-p ()
- "Determine whether the current buffer is an ephemeral buffer.
-
-See Info node `(elisp)Buffer Names' for information about
-ephemeral buffers."
- (string-prefix-p " " (buffer-name)))
-
-(defun flycheck-encrypted-buffer-p ()
- "Determine whether the current buffer is an encrypted file.
-
-See Info node `(epa)Top' for Emacs' interface to encrypted
-files."
- ;; The EPA file handler sets this variable locally to remember the recipients
- ;; of the encrypted file for re-encryption. Hence, a local binding of this
- ;; variable is a good indication that the buffer is encrypted. I haven't
- ;; found any better indicator anyway.
- (local-variable-p 'epa-file-encrypt-to))
-
-(defun flycheck-autoloads-file-p ()
- "Determine whether the current buffer is an autoloads file.
-
-Autoloads are generated by package.el during installation."
- (string-suffix-p "-autoloads.el" (buffer-name)))
-
-(defun flycheck-in-user-emacs-directory-p (filename)
- "Whether FILENAME is in `user-emacs-directory'."
- (string-prefix-p (file-name-as-directory
- (flycheck--file-truename user-emacs-directory))
- (flycheck--file-truename filename)))
-
-(defun flycheck-safe-delete (file-or-dir)
- "Safely delete FILE-OR-DIR."
- (ignore-errors
- (if (file-directory-p file-or-dir)
- (delete-directory file-or-dir 'recursive)
- (delete-file file-or-dir))))
-
-(defun flycheck-safe-delete-temporaries ()
- "Safely delete all temp files and directories of Flycheck.
-
-Safely delete all files and directories listed in
-`flycheck-temporaries' and set the variable's value to nil."
- (seq-do #'flycheck-safe-delete flycheck-temporaries)
- (setq flycheck-temporaries nil))
-
-(defun flycheck-rx-file-name (form)
- "Translate the `(file-name)' FORM into a regular expression."
- (let ((body (or (cdr form) '((minimal-match
- (one-or-more not-newline))))))
- (rx-to-string `(group-n 1 ,@body) t)))
-
-(defun flycheck-rx-message (form)
- "Translate the `(message)' FORM into a regular expression."
- (let ((body (or (cdr form) '((one-or-more not-newline)))))
- (rx-to-string `(group-n 4 ,@body) t)))
-
-(defun flycheck-rx-id (form)
- "Translate the `(id)' FORM into a regular expression."
- (rx-to-string `(group-n 5 ,@(cdr form)) t))
-
-(defun flycheck-rx-to-string (form &optional no-group)
- "Like `rx-to-string' for FORM, but with special keywords:
-
-`line'
- matches the initial line number.
-
-`column'
- matches the initial column number.
-
-`end-line'
- matches the final line number.
-
-`end-column'
- matches the final column number (exclusive).
-
-
-`(file-name SEXP ...)'
- matches the file name. SEXP describes the file name. If no
- SEXP is given, use a default body of `(minimal-match
- (one-or-more not-newline))'.
-
-`(message SEXP ...)'
- matches the message. SEXP constitutes the body of the
- message. If no SEXP is given, use a default body
- of `(one-or-more not-newline)'.
-
-`(id SEXP ...)'
- matches an error ID. SEXP describes the ID.
-
-NO-GROUP is passed to `rx-to-string'.
-
-See `rx' for a complete list of all built-in `rx' forms."
- (let ((rx-constituents
- (append
- `((file-name flycheck-rx-file-name 0 nil) ;; group 1
- (line . ,(rx (group-n 2 (one-or-more digit))))
- (column . ,(rx (group-n 3 (one-or-more digit))))
- (message flycheck-rx-message 0 nil) ;; group 4
- (id flycheck-rx-id 0 nil) ;; group 5
- (end-line . ,(rx (group-n 6 (one-or-more digit))))
- (end-column . ,(rx (group-n 7 (one-or-more digit)))))
- rx-constituents nil)))
- (rx-to-string form no-group)))
-
-(defun flycheck-current-load-file ()
- "Get the source file currently being loaded.
-
-Always return the name of the corresponding source file, never
-any byte-compiled file.
-
-Return nil, if the currently loaded file cannot be determined."
- (-when-let* ((this-file (cond
- (load-in-progress load-file-name)
- ((bound-and-true-p byte-compile-current-file))
- (t (buffer-file-name))))
- ;; A best guess for the source file of a compiled library. Works
- ;; well in most cases, and especially for ELPA packages
- (source-file (concat (file-name-sans-extension this-file)
- ".el")))
- (when (file-exists-p source-file)
- source-file)))
-
-(defun flycheck-module-root-directory (module &optional file-name)
- "Get the root directory for a MODULE in FILE-NAME.
-
-MODULE is a qualified module name, either a string with
-components separated by a dot, or as list of components.
-FILE-NAME is the name of the file or directory containing the
-module as string. When nil or omitted, defaults to the return
-value of function `buffer-file-name'.
-
-Return the root directory of the module, that is, the directory,
-from which FILE-NAME can be reached by descending directories
-along each part of MODULE.
-
-If the MODULE name does not match the directory hierarchy upwards
-from FILE-NAME, return the directory containing FILE-NAME. When
-FILE-NAME is nil, return `default-directory'."
- (let ((file-name (or file-name (buffer-file-name)))
- (module-components (if (stringp module)
- (split-string module (rx "."))
- (copy-sequence module))))
- (if (and module-components file-name)
- (let ((parts (nreverse module-components))
- (base-directory (directory-file-name
- (file-name-sans-extension file-name))))
- (while (and parts
- (string= (file-name-nondirectory base-directory)
- (car parts)))
- (pop parts)
- (setq base-directory (directory-file-name
- (file-name-directory base-directory))))
- (file-name-as-directory base-directory))
- (if file-name
- (file-name-directory file-name)
- (expand-file-name default-directory)))))
-
-(defun flycheck-goto-line (line)
- "Move point to beginning of line number LINE."
- (goto-char (point-min))
- (forward-line (- line 1)))
-
-(defun flycheck-line-column-to-position (line column)
- "Return the point closest to LINE, COLUMN on line LINE.
-
-COLUMN is one-based."
- (save-excursion
- (flycheck-goto-line line)
- (min (+ (point) (1- column)) (line-end-position))))
-
-(defun flycheck-line-column-at-point ()
- "Return the line and column number at point."
- (cons (line-number-at-pos) (1+ (- (point) (line-beginning-position)))))
-
-(defun flycheck-line-column-at-pos (pos)
- "Return the line and column number at position POS.
-
-COLUMN is one-based."
- (let ((inhibit-field-text-motion t))
- (save-excursion
- (goto-char pos)
- (flycheck-line-column-at-point))))
-
-
-;;; Minibuffer tools
-(defvar flycheck-read-checker-history nil
- "`completing-read' history of `flycheck-read-checker'.")
-
-(defun flycheck-completing-read (prompt candidates default &optional history)
- "Read a value from the minibuffer.
-
-Use `flycheck-completing-read-function' to read input from the
-minibuffer with completion.
-
-Show PROMPT and read one of CANDIDATES, defaulting to DEFAULT.
-HISTORY is passed to `flycheck-completing-read-function'.
-
-Note that `flycheck-completing-read-function' may return an empty
-string instead of nil, even when \"\" isn't among the candidates.
-See `completing-read' for more details."
- (funcall flycheck-completing-read-function
- prompt candidates nil 'require-match nil history default))
-
-(defun flycheck-read-checker (prompt &optional default property candidates)
- "Read a flycheck checker from minibuffer with PROMPT and DEFAULT.
-
-PROMPT is a string to show in the minibuffer as prompt. It
-should end with a single space. DEFAULT is a symbol denoting the
-default checker to use, if the user did not select any checker.
-PROPERTY is a symbol denoting a syntax checker property. If
-non-nil, only complete syntax checkers which have a non-nil value
-for PROPERTY. CANDIDATES is an optional list of all syntax
-checkers available for completion, defaulting to all defined
-checkers. If given, PROPERTY is ignored.
-
-Return the checker as symbol, or DEFAULT if no checker was
-chosen. If DEFAULT is nil and no checker was chosen, signal a
-`user-error' if the underlying completion system does not provide
-a default on its own."
- (when (and default (not (flycheck-valid-checker-p default)))
- (error "%S is no valid Flycheck checker" default))
- (let* ((candidates (seq-map #'symbol-name
- (or candidates
- (flycheck-defined-checkers property))))
- (default (and default (symbol-name default)))
- (input (flycheck-completing-read
- prompt candidates default
- 'flycheck-read-checker-history)))
- (when (string-empty-p input)
- (unless default
- (user-error "No syntax checker selected"))
- (setq input default))
- (let ((checker (intern input)))
- (unless (flycheck-valid-checker-p checker)
- (error "%S is not a valid Flycheck syntax checker" checker))
- checker)))
-
-(defun flycheck-read-error-level (prompt)
- "Read an error level from the user with PROMPT.
-
-Only offers level for which errors currently exist, in addition
-to the default levels."
- (let* ((levels (seq-map #'flycheck-error-level
- (flycheck-error-list-current-errors)))
- (levels-with-defaults (append '(info warning error) levels))
- (uniq-levels (seq-uniq levels-with-defaults))
- (level (flycheck-completing-read prompt uniq-levels nil)))
- (when (string-empty-p level) (setq level nil))
- (and level (intern level))))
-
-
-;;; Checker API
-(defun flycheck-defined-checkers (&optional property)
- "Find all defined syntax checkers, optionally with PROPERTY.
-
-PROPERTY is a symbol. If given, only return syntax checkers with
-a non-nil value for PROPERTY.
-
-The returned list is sorted alphapetically by the symbol name of
-the syntax checkers."
- (let (defined-checkers)
- (mapatoms (lambda (symbol)
- (when (and (flycheck-valid-checker-p symbol)
- (or (null property)
- (flycheck-checker-get symbol property)))
- (push symbol defined-checkers))))
- (sort defined-checkers #'string<)))
-
-(defun flycheck-registered-checker-p (checker)
- "Determine whether CHECKER is registered.
-
-A checker is registered if it is contained in
-`flycheck-checkers'."
- (and (flycheck-valid-checker-p checker)
- (memq checker flycheck-checkers)))
-
-(defun flycheck-disabled-checker-p (checker)
- "Determine whether CHECKER is disabled.
-
-A checker is disabled if it is contained in
-`flycheck-disabled-checkers'."
- (or (memq checker flycheck-disabled-checkers)
- (flycheck-automatically-disabled-checker-p checker)))
-
-(defun flycheck-automatically-disabled-checker-p (checker)
- "Determine whether CHECKER has been automatically disabled.
-
-A checker has been automatically disabled if it is contained in
-`flycheck--automatically-disabled-checkers'."
- (memq checker flycheck--automatically-disabled-checkers))
-
-
-
-;;; Generic syntax checkers
-(defconst flycheck-generic-checker-version 2
- "The internal version of generic syntax checker declarations.
-
-Flycheck will not use syntax checkers whose generic version is
-less than this constant.")
-
-(defsubst flycheck--checker-property-name (property)
- "Return the SYMBOL property for checker PROPERTY."
- (intern (concat "flycheck-" (symbol-name property))))
-
-(defun flycheck-checker-get (checker property)
- "Get the value of CHECKER's PROPERTY."
- (get checker (flycheck--checker-property-name property)))
-
-(gv-define-setter flycheck-checker-get (value checker property)
- `(setf (get ,checker (flycheck--checker-property-name ,property)) ,value))
-
-(defun flycheck-validate-next-checker (next &optional strict)
- "Validate NEXT checker.
-
-With STRICT non-nil, also check whether the syntax checker and
-the error level in NEXT are valid. Otherwise just check whether
-these are symbols.
-
-Signal an error if NEXT is not a valid entry for
-`:next-checkers'."
- (when (symbolp next)
- (setq next (cons t next)))
- (pcase next
- (`(,level . ,checker)
- (if strict
- (progn
- (unless (or (eq level t) (flycheck-error-level-p level))
- (error "%S is not a valid Flycheck error level" level))
- (unless (flycheck-valid-checker-p checker)
- (error "%s is not a valid Flycheck syntax checker" checker)))
- (unless (symbolp level)
- (error "Error level %S must be a symbol" level))
- (unless (symbolp checker)
- (error "Checker %S must be a symbol" checker))))
- (_ (error "%S must be a symbol or cons cell" next)))
- t)
-
-(defun flycheck-define-generic-checker (symbol docstring &rest properties)
- "Define SYMBOL as generic syntax checker.
-
-Any syntax checker defined with this macro is eligible for manual
-syntax checker selection with `flycheck-select-checker'. To make
-the new syntax checker available for automatic selection, it must
-be registered in `flycheck-checkers'.
-
-DOCSTRING is the documentation of the syntax checker, for
-`flycheck-describe-checker'. The following PROPERTIES constitute
-a generic syntax checker. Unless otherwise noted, all properties
-are mandatory.
-
-`:start FUNCTION'
- A function to start the syntax checker.
-
- FUNCTION shall take two arguments and return a context
- object if the checker is started successfully. Otherwise it
- shall signal an error.
-
- The first argument is the syntax checker being started. The
- second is a callback function to report state changes to
- Flycheck. The callback takes two arguments STATUS DATA,
- where STATUS is a symbol denoting the syntax checker status
- and DATA an optional argument with additional data for the
- status report. See `flycheck-report-buffer-checker-status'
- for more information about STATUS and DATA.
-
- FUNCTION may be synchronous or asynchronous, i.e. it may
- call the given callback either immediately, or at some later
- point (e.g. from a process sentinel).
-
- A syntax checker _must_ call CALLBACK at least once with a
- STATUS that finishes the current syntax checker. Otherwise
- Flycheck gets stuck at the current syntax check with this
- syntax checker.
-
- The context object returned by FUNCTION is passed to
- `:interrupt'.
-
-`:interrupt FUNCTION'
- A function to interrupt the syntax check.
-
- FUNCTION is called with the syntax checker and the context
- object returned by the `:start' function and shall try to
- interrupt the syntax check. The context may be nil, if the
- syntax check is interrupted before actually started.
- FUNCTION should handle this situation.
-
- If it cannot interrupt the syntax check, it may either
- signal an error or silently ignore the attempt to interrupt
- the syntax checker, depending on the severity of the
- situation.
-
- If interrupting the syntax check failed, Flycheck will let
- the syntax check continue, but ignore any status reports.
- Notably, it won't highlight any errors reported by the
- syntax check in the buffer.
-
- This property is optional. If omitted, Flycheck won't
- attempt to interrupt syntax checks wit this syntax checker,
- and simply ignore their results.
-
-`:print-doc FUNCTION'
- A function to print additional documentation into the Help
- buffer of this checker.
-
- FUNCTION is called when creating the Help buffer for the
- syntax checker, with the syntax checker as single argument,
- after printing the name of the syntax checker and its modes
- and predicate, but before printing DOCSTRING. It may insert
- additional documentation into the current buffer.
-
- The call occurs within `with-help-window'. Hence
- `standard-output' points to the current buffer, so you may
- use `princ' and friends to add content. Also, the current
- buffer is put into Help mode afterwards, which automatically
- turns symbols into references, if possible.
-
- This property is optional. If omitted, no additional
- documentation is printed for this syntax checker.
-
-:verify FUNCTION
- A function to verify the checker for the current buffer.
-
- FUNCTION is called with the syntax checker as single
- argument, and shall return a list of
- `flycheck-verification-result' objects indicating whether
- the syntax checker could be used in the current buffer, and
- highlighting potential setup problems.
-
- This property is optional. If omitted, no additional
- verification occurs for this syntax checker. It is however
- absolutely recommended that you add a `:verify' function to
- your syntax checker, because it will help users to spot
- potential setup problems.
-
-`:modes MODES'
- A major mode symbol or a list thereof, denoting major modes
- to use this syntax checker in.
-
- This syntax checker will only be used in buffers whose
- `major-mode' is contained in MODES.
-
- If `:predicate' is also given the syntax checker will only
- be used in buffers for which the `:predicate' returns
- non-nil.
-
-`:predicate FUNCTION'
- A function to determine whether to use the syntax checker in
- the current buffer.
-
- FUNCTION is called without arguments and shall return
- non-nil if this syntax checker shall be used to check the
- current buffer. Otherwise it shall return nil.
-
- If this checker has a `:working-directory' FUNCTION is
- called with `default-directory' bound to the checker's
- working directory.
-
- FUNCTION is only called in matching major modes.
-
- This property is optional.
-
-`:enabled FUNCTION'
- A function to determine whether to use the syntax checker in
- the current buffer.
-
- This property behaves as `:predicate', except that it's only
- called the first time a syntax checker is to be used in a buffer.
-
- FUNCTION is called without arguments and shall return
- non-nil if this syntax checker shall be used to check the
- current buffer. Otherwise it shall return nil.
-
- If FUNCTION returns a non-nil value the checker is put in a
- whitelist in `flycheck--automatically-enabled-checkers' to
- prevent further invocations of `:enabled'. Otherwise it is
- disabled via `flycheck--automatically-disabled-checkers' to
- prevent any further use of it.
-
- If this checker has a `:working-directory' FUNCTION is
- called with `default-directory' bound to the checker's
- working directory.
-
- FUNCTION is only called in matching major modes.
-
- This property is optional.
-
-`:error-filter FUNCTION'
- A function to filter the errors returned by this checker.
-
- FUNCTION is called with the list of `flycheck-error' objects
- returned by the syntax checker and shall return another list
- of `flycheck-error' objects, which is considered the final
- result of this syntax checker.
-
- FUNCTION is free to add, remove or modify errors, whether in
- place or by copying.
-
- This property is optional. The default filter is
- `identity'.
-
-`:error-explainer FUNCTION'
- A function to return an explanation text for errors
- generated by this checker.
-
- FUNCTION is called with a `flycheck-error' object and shall
- return an explanation message for this error as a string, or
- nil if there is no explanation for this error.
-
- This property is optional.
-
-`:next-checkers NEXT-CHECKERS'
- A list denoting syntax checkers to apply after this syntax
- checker, in what we call \"chaining\" of syntax checkers.
-
- Each ITEM is a cons cell `(LEVEL . CHECKER)'. CHECKER is a
- syntax checker to run after this syntax checker. LEVEL is
- an error level. CHECKER will only be used if there are no
- current errors of at least LEVEL. LEVEL may also be t, in
- which case CHECKER is used regardless of the current errors.
-
- ITEM may also be a syntax checker symbol, which is
- equivalent to `(t . ITEM)'.
-
- Flycheck tries all items in order of declaration, and uses
- the first whose LEVEL matches and whose CHECKER is
- registered and can be used for the current buffer.
-
- This feature is typically used to apply more than one syntax
- checker to a buffer. For instance, you might first use a
- compiler to check a buffer for syntax and type errors, and
- then run a linting tool that checks for insecure code, or
- questionable style.
-
- This property is optional. If omitted, it defaults to the
- nil, i.e. no other syntax checkers are applied after this
- syntax checker.
-
-`:working-directory FUNCTION'
- The value of `default-directory' when invoking `:start'.
-
- FUNCTION is a function taking the syntax checker as sole
- argument. It shall return the absolute path to an existing
- directory to use as `default-directory' for `:start' or
- nil to fall back to the `default-directory' of the current
- buffer.
-
- This property is optional. If omitted, invoke `:start'
- from the `default-directory' of the buffer being checked.
-
-Signal an error, if any property has an invalid value."
- (declare (indent 1)
- (doc-string 2))
- (let ((start (plist-get properties :start))
- (interrupt (plist-get properties :interrupt))
- (print-doc (plist-get properties :print-doc))
- (modes (plist-get properties :modes))
- (predicate (plist-get properties :predicate))
- (verify (plist-get properties :verify))
- (enabled (plist-get properties :enabled))
- (filter (or (plist-get properties :error-filter) #'identity))
- (explainer (plist-get properties :error-explainer))
- (next-checkers (plist-get properties :next-checkers))
- (file (flycheck-current-load-file))
- (working-directory (plist-get properties :working-directory)))
-
- (unless (listp modes)
- (setq modes (list modes)))
-
- (unless (functionp start)
- (error ":start %S of syntax checker %s is not a function" start symbol))
- (unless (or (null interrupt) (functionp interrupt))
- (error ":interrupt %S of syntax checker %s is not a function"
- interrupt symbol))
- (unless (or (null print-doc) (functionp print-doc))
- (error ":print-doc %S of syntax checker %s is not a function"
- print-doc symbol))
- (unless (or (null verify) (functionp verify))
- (error ":verify %S of syntax checker %S is not a function"
- verify symbol))
- (unless (or (null enabled) (functionp enabled))
- (error ":enabled %S of syntax checker %S is not a function"
- enabled symbol))
- (unless modes
- (error "Missing :modes in syntax checker %s" symbol))
- (dolist (mode modes)
- (unless (symbolp mode)
- (error "Invalid :modes %s in syntax checker %s, %s must be a symbol"
- modes symbol mode)))
- (unless (or (null predicate) (functionp predicate))
- (error ":predicate %S of syntax checker %s is not a function"
- predicate symbol))
- (unless (functionp filter)
- (error ":error-filter %S of syntax checker %s is not a function"
- filter symbol))
- (unless (or (null explainer) (functionp explainer))
- (error ":error-explainer %S of syntax checker %S is not a function"
- explainer symbol))
- (dolist (checker next-checkers)
- (flycheck-validate-next-checker checker))
-
- (let ((real-predicate
- (and predicate
- (lambda ()
- ;; Run predicate in the checker's default directory
- (let ((default-directory
- (flycheck-compute-working-directory symbol)))
- (funcall predicate)))))
- (real-enabled
- (lambda ()
- (if (flycheck-valid-checker-p symbol)
- (or (null enabled)
- ;; Run enabled in the checker's default directory
- (let ((default-directory
- (flycheck-compute-working-directory symbol)))
- (funcall enabled)))
- (lwarn 'flycheck
- :warning "%S is no valid Flycheck syntax checker.
-Try to reinstall the package defining this syntax checker." symbol)
- nil))))
- (pcase-dolist (`(,prop . ,value)
- `((start . ,start)
- (interrupt . ,interrupt)
- (print-doc . ,print-doc)
- (modes . ,modes)
- (predicate . ,real-predicate)
- (verify . ,verify)
- (enabled . ,real-enabled)
- (error-filter . ,filter)
- (error-explainer . ,explainer)
- (next-checkers . ,next-checkers)
- (documentation . ,docstring)
- (file . ,file)
- (working-directory . ,working-directory)))
- (setf (flycheck-checker-get symbol prop) value)))
-
- ;; Track the version, to avoid breakage if the internal format changes
- (setf (flycheck-checker-get symbol 'generic-checker-version)
- flycheck-generic-checker-version)))
-
-(defun flycheck-valid-checker-p (checker)
- "Check whether a CHECKER is valid.
-
-A valid checker is a symbol defined as syntax checker with
-`flycheck-define-checker'."
- (and (symbolp checker)
- (= (or (get checker 'flycheck-generic-checker-version) 0)
- flycheck-generic-checker-version)))
-
-(defun flycheck-checker-supports-major-mode-p (checker &optional mode)
- "Whether CHECKER supports the given major MODE.
-
-CHECKER is a syntax checker symbol and MODE a major mode symbol.
-Look at the `modes' property of CHECKER to determine whether
-CHECKER supports buffers in the given major MODE.
-
-MODE defaults to the value of `major-mode' if omitted or nil.
-
-Return non-nil if CHECKER supports MODE and nil otherwise."
- (let ((mode (or mode major-mode)))
- (memq mode (flycheck-checker-get checker 'modes))))
-
-(define-obsolete-variable-alias 'flycheck-enabled-checkers
- 'flycheck--automatically-enabled-checkers "32")
-
-(defvar flycheck--automatically-enabled-checkers nil
- "Syntax checkers included in automatic selection.
-
-A list of Flycheck syntax checkers included in automatic
-selection for the current buffer.")
-(make-variable-buffer-local 'flycheck--automatically-enabled-checkers)
-
-(defun flycheck-may-enable-checker (checker)
- "Whether a generic CHECKER may be enabled for current buffer.
-
-Return non-nil if CHECKER may be used for the current buffer, and
-nil otherwise."
- (let* ((enabled (flycheck-checker-get checker 'enabled))
- (shall-enable
- (and (not (flycheck-disabled-checker-p checker))
- (or (memq checker flycheck--automatically-enabled-checkers)
- (null enabled)
- (funcall enabled)))))
- (if shall-enable
- (cl-pushnew checker flycheck--automatically-enabled-checkers)
- (cl-pushnew checker flycheck--automatically-disabled-checkers))
- shall-enable))
-
-(defun flycheck-reset-enabled-checker (checker)
- "Reset the `:enabled' test of CHECKER.
-
-Forget that CHECKER has been enabled or automatically disabled
-from a previous `:enabled' test. Once a checker has been enabled
-or automatically disabled, `flycheck-may-enable-checker' will
-always be constant (t or nil respectively).
-
-If you wish to test the `:enabled' predicate again, you must
-first reset its state using this function."
- (when (memq checker flycheck--automatically-disabled-checkers)
- (setq flycheck--automatically-disabled-checkers
- (remq checker flycheck--automatically-disabled-checkers)))
- (when (memq checker flycheck--automatically-enabled-checkers)
- (setq flycheck--automatically-enabled-checkers
- (remq checker flycheck--automatically-enabled-checkers))))
-
-(defun flycheck-may-use-checker (checker)
- "Whether a generic CHECKER may be used.
-
-Return non-nil if CHECKER may be used for the current buffer, and
-nil otherwise."
- (let ((predicate (flycheck-checker-get checker 'predicate)))
- (and (flycheck-valid-checker-p checker)
- (flycheck-checker-supports-major-mode-p checker)
- (flycheck-may-enable-checker checker)
- (or (null predicate) (funcall predicate)))))
-
-(defun flycheck-may-use-next-checker (next-checker)
- "Determine whether NEXT-CHECKER may be used."
- (when (symbolp next-checker)
- (push t next-checker))
- (let ((level (car next-checker))
- (next-checker (cdr next-checker)))
- (and (or (eq level t)
- (flycheck-has-max-current-errors-p level))
- (flycheck-registered-checker-p next-checker)
- (flycheck-may-use-checker next-checker))))
-
-
-;;; Help for generic syntax checkers
-(define-button-type 'help-flycheck-checker-def
- :supertype 'help-xref
- 'help-function #'flycheck-goto-checker-definition
- 'help-echo "mouse-1, RET: find Flycheck checker definition")
-
-(defconst flycheck-find-checker-regexp
- (rx line-start (zero-or-more (syntax whitespace))
- "(" symbol-start
- (or "flycheck-define-checker" "flycheck-define-command-checker")
- symbol-end
- (eval (list 'regexp find-function-space-re))
- (? "'")
- symbol-start "%s" symbol-end
- (or (syntax whitespace) line-end))
- "Regular expression to find a checker definition.")
-
-(add-to-list 'find-function-regexp-alist
- '(flycheck-checker . flycheck-find-checker-regexp))
-
-(defun flycheck-goto-checker-definition (checker file)
- "Go to to the definition of CHECKER in FILE."
- (let ((location (find-function-search-for-symbol
- checker 'flycheck-checker file)))
- (pop-to-buffer (car location))
- (if (cdr location)
- (goto-char (cdr location))
- (message "Unable to find checker location in file"))))
-
-(defun flycheck-checker-at-point ()
- "Return the Flycheck checker found at or before point.
-
-Return nil if there is no checker."
- (let ((symbol (variable-at-point 'any-symbol)))
- (when (flycheck-valid-checker-p symbol)
- symbol)))
-
-(defun flycheck-describe-checker (checker)
- "Display the documentation of CHECKER.
-
-CHECKER is a checker symbol.
-
-Pop up a help buffer with the documentation of CHECKER."
- (interactive
- (let* ((enable-recursive-minibuffers t)
- (default (or (flycheck-checker-at-point)
- (ignore-errors (flycheck-get-checker-for-buffer))))
- (prompt (if default
- (format "Describe syntax checker (default %s): " default)
- "Describe syntax checker: ")))
- (list (flycheck-read-checker prompt default))))
- (unless (flycheck-valid-checker-p checker)
- (user-error "You didn't specify a Flycheck syntax checker"))
- (help-setup-xref (list #'flycheck-describe-checker checker)
- (called-interactively-p 'interactive))
- (save-excursion
- (with-help-window (help-buffer)
- (let ((filename (flycheck-checker-get checker 'file))
- (modes (flycheck-checker-get checker 'modes))
- (predicate (flycheck-checker-get checker 'predicate))
- (print-doc (flycheck-checker-get checker 'print-doc))
- (next-checkers (flycheck-checker-get checker 'next-checkers)))
- (princ (format "%s is a Flycheck syntax checker" checker))
- (when filename
- (princ (format " in `%s'" (file-name-nondirectory filename)))
- (with-current-buffer standard-output
- (save-excursion
- (re-search-backward "`\\([^`']+\\)'" nil t)
- (help-xref-button 1 'help-flycheck-checker-def
- checker filename))))
- (princ ".\n\n")
-
- (let ((modes-start (with-current-buffer standard-output (point-max))))
- ;; Track the start of the modes documentation, to properly re-fill
- ;; it later
- (princ " This syntax checker checks syntax in the major mode(s) ")
- (princ (string-join
- (seq-map (apply-partially #'format "`%s'") modes)
- ", "))
- (when predicate
- (princ ", and uses a custom predicate"))
- (princ ".")
- (when next-checkers
- (princ " It runs the following checkers afterwards:"))
- (with-current-buffer standard-output
- (save-excursion
- (fill-region-as-paragraph modes-start (point-max))))
- (princ "\n")
-
- ;; Print the list of next checkers
- (when next-checkers
- (princ "\n")
- (let ((beg-checker-list (with-current-buffer standard-output
- (point))))
- (dolist (next-checker next-checkers)
- (if (symbolp next-checker)
- (princ (format " * `%s'\n" next-checker))
- (princ (format " * `%s' (maximum level `%s')\n"
- (cdr next-checker) (car next-checker)))))
- ;;
- (with-current-buffer standard-output
- (save-excursion
- (while (re-search-backward "`\\([^`']+\\)'"
- beg-checker-list t)
- (let ((checker (intern-soft (match-string 1))))
- (when (flycheck-valid-checker-p checker)
- (help-xref-button 1 'help-flycheck-checker-doc
- checker)))))))))
- ;; Call the custom print-doc function of the checker, if present
- (when print-doc
- (funcall print-doc checker))
- ;; Ultimately, print the docstring
- (princ "\nDocumentation:\n")
- (princ (flycheck-checker-get checker 'documentation))))))
-
-
-;;; Syntax checker verification
-(cl-defstruct (flycheck-verification-result
- (:constructor flycheck-verification-result-new))
- "Structure for storing a single verification result.
-
-Slots:
-
-`label'
- A label for this result, as string
-
-`message'
- A message for this result, as string
-
-`face'
- The face to use for the `message'.
-
- You can either use a face symbol, or a list of face symbols."
- label message face)
-
-(defun flycheck-verify-generic-checker (checker)
- "Verify a generic CHECKER in the current buffer.
-
-Return a list of `flycheck-verification-result' objects."
- (let (results
- (predicate (flycheck-checker-get checker 'predicate))
- (enabled (flycheck-checker-get checker 'enabled))
- (verify (flycheck-checker-get checker 'verify)))
- (when enabled
- (let ((result (flycheck-may-enable-checker checker)))
- (push (flycheck-verification-result-new
- :label "may enable"
- :message (if result "yes" "Automatically disabled!")
- :face (if result 'success '(bold warning)))
- results)))
- (when predicate
- (let ((result (funcall predicate)))
- (push (flycheck-verification-result-new
- :label "predicate"
- :message (prin1-to-string (not (null result)))
- :face (if result 'success '(bold warning)))
- results)))
- (append (nreverse results)
- (and verify (funcall verify checker)))))
-
-(define-button-type 'help-flycheck-checker-doc
- :supertype 'help-xref
- 'help-function #'flycheck-describe-checker
- 'help-echo "mouse-1, RET: describe Flycheck checker")
-
-(define-button-type 'flycheck-checker-select
- :supertype 'help-xref
- 'help-function (lambda (buffer checker)
- (with-current-buffer buffer
- (flycheck-select-checker checker))
- ;; Revert the verify-setup buffer since it is now stale
- (revert-buffer))
- 'help-echo "mouse-1, RET: select Flycheck checker"
- 'face 'flycheck-verify-select-checker)
-
-(defun flycheck--verify-princ-checker (checker buffer
- &optional with-mm with-select)
- "Print verification result of CHECKER for BUFFER.
-
-When WITH-MM is given and non-nil, also include the major mode
-into the verification results.
-
-When WITH-SELECT is non-nil, add a button to select this checker."
- (princ " ")
- (insert-button (symbol-name checker)
- 'type 'help-flycheck-checker-doc
- 'help-args (list checker))
- (when (with-current-buffer buffer (flycheck-disabled-checker-p checker))
- (insert (propertize " (disabled)" 'face '(bold error))))
- (when (eq checker (buffer-local-value 'flycheck-checker buffer))
- (insert (propertize " (explicitly selected)" 'face 'bold)))
- (when with-select
- (princ " ")
- (insert-text-button "select"
- 'type 'flycheck-checker-select
- 'help-args (list buffer checker)))
- (princ "\n")
- (let ((results (with-current-buffer buffer
- (append (flycheck-verify-generic-checker checker)
- (flycheck--verify-next-checkers checker)))))
- (when with-mm
- (with-current-buffer buffer
- (let ((message-and-face
- (if (flycheck-checker-supports-major-mode-p checker)
- (cons (format "`%s' supported" major-mode) 'success)
- (cons (format "`%s' not supported" major-mode) 'error))))
- (push (flycheck-verification-result-new
- :label "major mode"
- :message (car message-and-face)
- :face (cdr message-and-face))
- results))))
- (let* ((label-length
- (seq-max (mapcar
- (lambda (res)
- (length (flycheck-verification-result-label res)))
- results)))
- (message-column (+ 8 label-length)))
- (dolist (result results)
- (princ " - ")
- (princ (flycheck-verification-result-label result))
- (princ ": ")
- (princ (make-string (- message-column (current-column)) ?\ ))
- (let ((message (flycheck-verification-result-message result))
- (face (flycheck-verification-result-face result)))
- ;; If face is nil, using propertize erases the face already contained
- ;; by the message. We don't want that, since this would remove the
- ;; button face from the checker chain result.
- (insert (if face (propertize message 'face face) message)))
- (princ "\n"))))
- (princ "\n"))
-
-(defun flycheck--get-next-checker-symbol (next)
- "Get the checker symmbol of NEXT checker.
-
-NEXT should be either a cons (NEXT-CHECKER . LEVEL) or a
-symbol."
- (if (consp next) (cdr next) next))
-
-(defun flycheck-get-next-checkers (checker)
- "Return the immediate next checkers of CHECKER.
-
-This is a list of checker symbols. The error levels of the
-`:next-checker' property are ignored."
- (mapcar #'flycheck--get-next-checker-symbol
- (flycheck-checker-get checker 'next-checkers)))
-
-(defun flycheck-all-next-checkers (checker)
- "Return all checkers that may follow CHECKER.
-
-Return the transitive closure of the next-checker relation. The
-return value is a list of checkers, not including CHECKER."
- (let ((next-checkers)
- (visited)
- (queue (list checker)))
- (while queue
- (let ((c (pop queue)))
- (push c visited)
- (dolist (n (flycheck-get-next-checkers c))
- (push n next-checkers)
- (unless (memq n visited)
- (cl-pushnew n queue)))))
- (seq-uniq next-checkers)))
-
-(defun flycheck--verify-next-checkers (checker)
- "Return a verification result for the next checkers of CHECKER."
- (-when-let (next (flycheck-get-next-checkers checker))
- (list
- (flycheck-verification-result-new
- :label "next checkers"
- ;; We use `make-text-button' to preserve the button properties in the
- ;; string
- :message (mapconcat
- (lambda (checker)
- (make-text-button (symbol-name checker) nil
- 'type 'help-flycheck-checker-doc
- 'help-args (list checker)))
- next
- ", ")))))
-
-(defun flycheck--verify-print-header (desc buffer)
- "Print a title with DESC for BUFFER in the current buffer.
-
-DESC is an arbitrary string containing a description, and BUFFER
-is the buffer being verified. The name and the major mode mode
-of BUFFER are printed.
-
-DESC and information about BUFFER are printed in the current
-buffer."
- (princ desc)
- (insert (propertize (buffer-name buffer) 'face 'bold))
- (princ " in ")
- (let ((mode (buffer-local-value 'major-mode buffer)))
- (insert-button (symbol-name mode)
- 'type 'help-function
- 'help-args (list mode)))
- (princ ":\n\n"))
-
-(defun flycheck--verify-print-footer (buffer)
- "Print a footer for BUFFER in the current buffer.
-
-BUFFER is the buffer being verified."
- (princ "Flycheck Mode is ")
- (let ((enabled (buffer-local-value 'flycheck-mode buffer)))
- (insert (propertize (if enabled "enabled" "disabled")
- 'face (if enabled 'success '(warning bold)))))
- (princ
- (with-current-buffer buffer
- ;; Use key binding state in the verified buffer to print the help.
- (substitute-command-keys
- ". Use \\[universal-argument] \\[flycheck-disable-checker] \
-to enable disabled checkers.")))
- (save-excursion
- (let ((end (point)))
- (backward-paragraph)
- (fill-region-as-paragraph (point) end)))
-
- (princ "\n\n--------------------\n\n")
- (princ (format "Flycheck version: %s\n" (flycheck-version)))
- (princ (format "Emacs version: %s\n" emacs-version))
- (princ (format "System: %s\n" system-configuration))
- (princ (format "Window system: %S\n" window-system)))
-
-(defun flycheck-verify-checker (checker)
- "Check whether a CHECKER can be used in this buffer.
-
-Show a buffer listing possible problems that prevent CHECKER from
-being used for the current buffer.
-
-Note: Do not use this function to check whether a syntax checker
-is applicable from Emacs Lisp code. Use
-`flycheck-may-use-checker' instead."
- (interactive (list (flycheck-read-checker "Checker to verify: ")))
- (unless (flycheck-valid-checker-p checker)
- (user-error "%s is not a syntax checker" checker))
-
- ;; Save the buffer to make sure that all predicates are good
- ;; FIXME: this may be surprising to users, with unintended side-effects.
- (when (and (buffer-file-name) (buffer-modified-p))
- (save-buffer))
-
- (let ((buffer (current-buffer)))
- (with-help-window (get-buffer-create " *Flycheck checker*")
- (with-current-buffer standard-output
- (flycheck--verify-print-header "Syntax checker in buffer " buffer)
- (flycheck--verify-princ-checker checker buffer 'with-mm)
- (if (with-current-buffer buffer (flycheck-may-use-checker checker))
- (insert (propertize
- "Flycheck can use this syntax checker for this buffer.\n"
- 'face 'success))
- (insert (propertize
- "Flycheck cannot use this syntax checker for this buffer.\n"
- 'face 'error)))
- (insert "\n")
- (flycheck--verify-print-footer buffer)))))
-
-(defun flycheck-verify-setup ()
- "Check whether Flycheck can be used in this buffer.
-
-Display a new buffer listing all syntax checkers that could be
-applicable in the current buffer. For each syntax checkers,
-possible problems are shown."
- (interactive)
- ;; Save to make sure checkers that only work on saved buffers will pass the
- ;; verification
- (when (and (buffer-file-name) (buffer-modified-p))
- (save-buffer))
-
- (let* ((buffer (current-buffer))
- (first-checker (flycheck-get-checker-for-buffer))
- (valid-checkers
- (remq first-checker
- (seq-filter #'flycheck-may-use-checker flycheck-checkers)))
- (valid-next-checkers
- (when first-checker
- (seq-intersection valid-checkers
- (flycheck-all-next-checkers first-checker))))
- (valid-remaining (seq-difference valid-checkers valid-next-checkers))
- (other-checkers
- (seq-difference (seq-filter #'flycheck-checker-supports-major-mode-p
- flycheck-checkers)
- (cons first-checker valid-checkers)))
- (help-buffer (get-buffer-create " *Flycheck checkers*")))
-
- ;; Print all applicable checkers for this buffer
- (with-help-window help-buffer
- (with-current-buffer standard-output
- (flycheck--verify-print-header "Syntax checkers for buffer " buffer)
-
- (if first-checker
- (progn
- (princ "First checker to run:\n\n")
- (flycheck--verify-princ-checker first-checker buffer))
- (insert (propertize
- "No checker to run in this buffer.\n\n"
- 'face '(bold error))))
-
- (when valid-next-checkers
- (princ
- "Checkers that may run as part of the first checker's chain:\n\n")
- (dolist (checker valid-next-checkers)
- (flycheck--verify-princ-checker checker buffer)))
-
- (when valid-remaining
- (princ "Checkers that could run if selected:\n\n")
- (dolist (checker valid-remaining)
- (flycheck--verify-princ-checker checker buffer nil 'with-select)))
-
- (when other-checkers
- (princ
- "Checkers that are compatible with this mode, \
-but will not run until properly configured:\n\n")
- (dolist (checker other-checkers)
- (flycheck--verify-princ-checker checker buffer)))
-
- ;; If we have no checkers at all, that's worth mentioning
- (unless (or first-checker valid-checkers other-checkers)
- (insert (propertize
- "No checkers are available for this buffer.\n\n"
- 'face '(bold error))))
-
- (let ((unregistered-checkers
- (seq-difference (flycheck-defined-checkers) flycheck-checkers)))
- (when unregistered-checkers
- (insert (propertize
- "\nThe following syntax checkers are not registered:\n\n"
- 'face '(bold warning)))
- (dolist (checker unregistered-checkers)
- (princ " - ")
- (princ checker)
- (princ "\n"))
- (princ
- "\nTry adding these syntax checkers to `flycheck-checkers'.\n")))
-
- (flycheck--verify-print-footer buffer)))
-
- (with-current-buffer help-buffer
- (setq-local revert-buffer-function
- (lambda (_ignore-auto _noconfirm)
- (with-current-buffer buffer (flycheck-verify-setup)))))))
-
-
-;;; Predicates for generic syntax checkers
-(defun flycheck-buffer-saved-p (&optional buffer)
- "Determine whether BUFFER is saved to a file.
-
-BUFFER is the buffer to check. If omitted or nil, use the
-current buffer as BUFFER.
-
-Return non-nil if the BUFFER is backed by a file, and not
-modified, or nil otherwise."
- (let ((file-name (buffer-file-name buffer)))
- (and file-name (file-exists-p file-name) (not (buffer-modified-p buffer)))))
-
-
-;;; Extending generic checkers
-(defun flycheck-remove-next-checker (checker next)
- "After CHECKER remove a NEXT checker.
-
-CHECKER is a syntax checker symbol, from which to remove NEXT
-checker.
-
-NEXT is a cons or a symbol, as documented in
-`flycheck-add-next-checker'."
- (unless (flycheck-valid-checker-p checker)
- (error "%s is not a valid syntax checker" checker))
- (let* ((next-symbol (flycheck--get-next-checker-symbol next)))
- (setf
- (flycheck-checker-get checker 'next-checkers)
- (seq-remove
- (lambda (next) (eq (flycheck--get-next-checker-symbol next) next-symbol))
- (flycheck-checker-get checker 'next-checkers)))))
-
-(defun flycheck-add-next-checker (checker next &optional append)
- "After CHECKER add a NEXT checker.
-
-CHECKER is a syntax checker symbol, to which to add NEXT checker.
-
-NEXT is a cons cell `(LEVEL . NEXT-CHECKER)'. NEXT-CHECKER is a
-symbol denoting the syntax checker to run after CHECKER. LEVEL
-is an error level. NEXT-CHECKER will only be used if there is no
-current error whose level is more severe than LEVEL. LEVEL may
-also be t, in which case NEXT-CHECKER is used regardless of the
-current errors.
-
-NEXT can also be a syntax checker symbol only, which is
-equivalent to `(t . NEXT)'.
-
-NEXT-CHECKER is prepended before other next checkers, unless
-APPEND is non-nil."
- (unless (flycheck-valid-checker-p checker)
- (error "%s is not a valid syntax checker" checker))
- (flycheck-validate-next-checker next 'strict)
- (flycheck-remove-next-checker checker next)
- (let ((next-checkers (flycheck-checker-get checker 'next-checkers)))
- (setf (flycheck-checker-get checker 'next-checkers)
- (if append (append next-checkers (list next))
- (cons next next-checkers)))))
-
-(defun flycheck-add-mode (checker mode)
- "To CHECKER add a new major MODE.
-
-CHECKER and MODE are symbols denoting a syntax checker and a
-major mode respectively.
-
-Add MODE to the `:modes' property of CHECKER, so that CHECKER
-will be used in buffers with MODE."
- (unless (flycheck-valid-checker-p checker)
- (error "%s is not a valid syntax checker" checker))
- (unless (symbolp mode)
- (error "%s is not a symbol" mode))
- (push mode (flycheck-checker-get checker 'modes)))
-
-
-;;; Generic syntax checks
-(cl-defstruct (flycheck-syntax-check
- (:constructor flycheck-syntax-check-new))
- "Structure for storing syntax check state.
-
-Slots:
-
-`buffer'
- The buffer being checked.
-
-`checker'
- The syntax checker being used.
-
-`context'
- The context object.
-
-`working-directory'
- Working directory for the syntax checker. Serve as a value for
- `default-directory' for a checker."
- buffer checker context working-directory)
-
-(defun flycheck-syntax-check-start (syntax-check callback)
- "Start a SYNTAX-CHECK with CALLBACK."
- (let ((checker (flycheck-syntax-check-checker syntax-check))
- (default-directory
- (flycheck-syntax-check-working-directory syntax-check)))
- (setf (flycheck-syntax-check-context syntax-check)
- (funcall (flycheck-checker-get checker 'start) checker callback))))
-
-(defun flycheck-syntax-check-interrupt (syntax-check)
- "Interrupt a SYNTAX-CHECK."
- (let* ((checker (flycheck-syntax-check-checker syntax-check))
- (interrupt-fn (flycheck-checker-get checker 'interrupt))
- (context (flycheck-syntax-check-context syntax-check)))
- (when interrupt-fn
- (funcall interrupt-fn checker context))))
-
-
-;;; Syntax checking mode
-
-(defvar flycheck-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map flycheck-keymap-prefix flycheck-command-map)
- ;; We place the menu under a custom menu key. Since this menu key is not
- ;; present in the menu of the global map, no top-level menu entry is added
- ;; to the global menu bar. However, it still appears on the mode line
- ;; lighter.
- (define-key map [menu-bar flycheck] flycheck-mode-menu-map)
- map)
- "Keymap of command `flycheck-mode'.")
-
-(defvar-local flycheck-old-next-error-function nil
- "Remember the old `next-error-function'.")
-
-(defconst flycheck-hooks-alist
- '(
- ;; Handle events that may start automatic syntax checks
- (after-save-hook . flycheck-handle-save)
- (after-change-functions . flycheck-handle-change)
- ;; Handle events that may triggered pending deferred checks
- (window-configuration-change-hook . flycheck-perform-deferred-syntax-check)
- (post-command-hook . flycheck-perform-deferred-syntax-check)
- ;; Teardown Flycheck whenever the buffer state is about to get lost, to
- ;; clean up temporary files and directories.
- (kill-buffer-hook . flycheck-teardown)
- (change-major-mode-hook . flycheck-teardown)
- (before-revert-hook . flycheck-teardown)
- ;; Update the error list if necessary
- (post-command-hook . flycheck-error-list-update-source)
- (post-command-hook . flycheck-error-list-highlight-errors)
- ;; Display errors. Show errors at point after commands (like movements) and
- ;; when Emacs gets focus. Cancel the display timer when Emacs looses focus
- ;; (as there's no need to display errors if the user can't see them), and
- ;; hide the error buffer (for large error messages) if necessary. Note that
- ;; the focus hooks only work on Emacs 24.4 and upwards, but since undefined
- ;; hooks are perfectly ok we don't need a version guard here. They'll just
- ;; not work silently.
- (post-command-hook . flycheck-maybe-display-error-at-point-soon)
- (focus-in-hook . flycheck-display-error-at-point-soon)
- (focus-out-hook . flycheck-cancel-error-display-error-at-point-timer)
- (post-command-hook . flycheck-hide-error-buffer)
- ;; Immediately show error popups when navigating to an error
- (next-error-hook . flycheck-display-error-at-point))
- "Hooks which Flycheck needs to hook in.
-
-The `car' of each pair is a hook variable, the `cdr' a function
-to be added or removed from the hook variable if Flycheck mode is
-enabled and disabled respectively.")
-
-;;;###autoload
-(define-minor-mode flycheck-mode
- "Minor mode for on-the-fly syntax checking.
-
-When called interactively, toggle `flycheck-mode'. With prefix
-ARG, enable `flycheck-mode' if ARG is positive, otherwise disable
-it.
-
-When called from Lisp, enable `flycheck-mode' if ARG is omitted,
-nil or positive. If ARG is `toggle', toggle `flycheck-mode'.
-Otherwise behave as if called interactively.
-
-In `flycheck-mode' the buffer is automatically syntax-checked
-using the first suitable syntax checker from `flycheck-checkers'.
-Use `flycheck-select-checker' to select a checker for the current
-buffer manually.
-
-\\{flycheck-mode-map}"
- :init-value nil
- :keymap flycheck-mode-map
- :lighter flycheck-mode-line
- :after-hook (flycheck-buffer-automatically 'mode-enabled 'force-deferred)
- (cond
- (flycheck-mode
- (flycheck-clear)
-
- (pcase-dolist (`(,hook . ,fn) (reverse flycheck-hooks-alist))
- (add-hook hook fn nil 'local))
-
- (setq flycheck-old-next-error-function
- (if flycheck-standard-error-navigation
- next-error-function
- :unset))
- (when flycheck-standard-error-navigation
- (setq next-error-function #'flycheck-next-error-function))
-
- ;; This hook must be added globally since otherwise we cannot
- ;; detect a change from a buffer where Flycheck is enabled to a
- ;; buffer where Flycheck is not enabled, and therefore cannot
- ;; notice that there has been any change when the user switches
- ;; back to the buffer where Flycheck is enabled.
- (add-hook 'buffer-list-update-hook #'flycheck-handle-buffer-switch))
- (t
- (unless (eq flycheck-old-next-error-function :unset)
- (setq next-error-function flycheck-old-next-error-function))
-
- (pcase-dolist (`(,hook . ,fn) flycheck-hooks-alist)
- (remove-hook hook fn 'local))
-
- (flycheck-teardown))))
-
-
-;;; Syntax checker selection for the current buffer
-(defun flycheck-get-checker-for-buffer ()
- "Find the checker for the current buffer.
-
-Use the selected checker for the current buffer, if any,
-otherwise search for the best checker from `flycheck-checkers'.
-
-Return checker if there is a checker for the current buffer, or
-nil otherwise."
- (if flycheck-checker
- (when (flycheck-may-use-checker flycheck-checker)
- flycheck-checker)
- (seq-find #'flycheck-may-use-checker flycheck-checkers)))
-
-(defun flycheck-get-next-checker-for-buffer (checker)
- "Get the checker to run after CHECKER for the current buffer."
- (let ((next (seq-find #'flycheck-may-use-next-checker
- (flycheck-checker-get checker 'next-checkers))))
- (when next
- (if (symbolp next) next (cdr next)))))
-
-(defun flycheck-select-checker (checker)
- "Select CHECKER for the current buffer.
-
-CHECKER is a syntax checker symbol (see `flycheck-checkers') or
-nil. In the former case, use CHECKER for the current buffer,
-otherwise deselect the current syntax checker (if any) and use
-automatic checker selection via `flycheck-checkers'.
-
-If called interactively prompt for CHECKER. With prefix arg
-deselect the current syntax checker and enable automatic
-selection again.
-
-Set `flycheck-checker' to CHECKER and automatically start a new
-syntax check if the syntax checker changed.
-
-CHECKER will be used, even if it is not contained in
-`flycheck-checkers', or if it is disabled via
-`flycheck-disabled-checkers'."
- (interactive
- (if current-prefix-arg
- (list nil)
- (list (flycheck-read-checker "Select checker: "
- (flycheck-get-checker-for-buffer)))))
- (when (not (eq checker flycheck-checker))
- (unless (or (not checker) (flycheck-may-use-checker checker))
- (flycheck-verify-checker checker)
- (user-error "Can't use syntax checker %S in this buffer" checker))
- (setq flycheck-checker checker)
- (when flycheck-mode
- (flycheck-buffer))))
-
-(defun flycheck-disable-checker (checker &optional enable)
- "Interactively disable CHECKER for the current buffer.
-
-Interactively, prompt for a syntax checker to disable, and add
-the syntax checker to the buffer-local value of
-`flycheck-disabled-checkers'.
-
-With non-nil ENABLE or with prefix arg, prompt for a disabled
-syntax checker and re-enable it by removing it from the
-buffer-local value of `flycheck-disabled-checkers'."
- (declare
- (interactive-only "Directly set `flycheck-disabled-checkers' instead"))
- (interactive
- (let* ((enable current-prefix-arg)
- (candidates (if enable
- (append flycheck-disabled-checkers
- flycheck--automatically-disabled-checkers)
- flycheck-checkers))
- (prompt (if enable "Enable syntax checker: "
- "Disable syntax checker: ")))
- (when (and enable (not candidates))
- (user-error "No syntax checkers disabled in this buffer"))
- (list (flycheck-read-checker prompt nil nil candidates) enable)))
- (unless checker
- (user-error "No syntax checker given"))
- (if enable
- ;; We must use `remq' instead of `delq', because we must _not_ modify the
- ;; list. Otherwise we could potentially modify the global default value,
- ;; in case the list is the global default.
- (progn
- (when (memq checker flycheck-disabled-checkers)
- (setq flycheck-disabled-checkers
- (remq checker flycheck-disabled-checkers))
- (flycheck-buffer))
- (when (memq checker flycheck--automatically-disabled-checkers)
- (setq flycheck--automatically-disabled-checkers
- (remq checker flycheck--automatically-disabled-checkers))
- (flycheck-buffer)))
- (unless (memq checker flycheck-disabled-checkers)
- (push checker flycheck-disabled-checkers)
- (flycheck-buffer))))
-
-
-;;; Syntax checks for the current buffer
-(defvar-local flycheck-current-syntax-check nil
- "The current syntax check in the this buffer.")
-(put 'flycheck-current-syntax-check 'permanent-local t)
-
-(defun flycheck-start-current-syntax-check (checker)
- "Start a syntax check in the current buffer with CHECKER.
-
-Set `flycheck-current-syntax-check' accordingly."
- ;; Allocate the current syntax check *before* starting it. This allows for
- ;; synchronous checks, which call the status callback immediately in their
- ;; start function.
- (let* ((check
- (flycheck-syntax-check-new
- :buffer (current-buffer)
- :checker checker
- :context nil
- :working-directory (flycheck-compute-working-directory checker)))
- (callback (flycheck-buffer-status-callback check)))
- (setq flycheck-current-syntax-check check)
- (flycheck-report-status 'running)
- (flycheck-syntax-check-start check callback)))
-
-(defun flycheck-running-p ()
- "Determine whether a syntax check is running in the current buffer."
- (not (null flycheck-current-syntax-check)))
-
-(defun flycheck-stop ()
- "Stop any ongoing syntax check in the current buffer."
- (when (flycheck-running-p)
- (flycheck-syntax-check-interrupt flycheck-current-syntax-check)
- ;; Remove the current syntax check, to reset Flycheck into a non-running
- ;; state, and to make `flycheck-report-buffer-checker-status' ignore any
- ;; status reports from the current syntax check.
- (setq flycheck-current-syntax-check nil)
- (flycheck-report-status 'interrupted)))
-
-(defun flycheck-buffer-status-callback (syntax-check)
- "Create a status callback for SYNTAX-CHECK in the current buffer."
- (lambda (&rest args)
- (apply #'flycheck-report-buffer-checker-status
- syntax-check args)))
-
-(defun flycheck-buffer ()
- "Start checking syntax in the current buffer.
-
-Get a syntax checker for the current buffer with
-`flycheck-get-checker-for-buffer', and start it."
- (interactive)
- (flycheck-clean-deferred-check)
- (if flycheck-mode
- (unless (flycheck-running-p)
- ;; Clear error list and mark all overlays for deletion. We do not
- ;; delete all overlays immediately to avoid excessive re-displays and
- ;; flickering, if the same errors gets highlighted again after the check
- ;; completed.
- (run-hooks 'flycheck-before-syntax-check-hook)
- (flycheck-clear-errors)
- (flycheck-mark-all-overlays-for-deletion)
- (condition-case err
- (let* ((checker (flycheck-get-checker-for-buffer)))
- (if checker
- (flycheck-start-current-syntax-check checker)
- (flycheck-clear)
- (flycheck-report-status 'no-checker)))
- (error
- (flycheck-report-failed-syntax-check)
- (signal (car err) (cdr err)))))
- (user-error "Flycheck mode disabled")))
-
-(defun flycheck-report-buffer-checker-status
- (syntax-check status &optional data)
- "In BUFFER, report a SYNTAX-CHECK STATUS with DATA.
-
-SYNTAX-CHECK is the `flycheck-syntax-check' which reported
-STATUS. STATUS denotes the status of CHECKER, with an optional
-DATA. STATUS may be one of the following symbols:
-
-`errored'
- The syntax checker has errored. DATA is an optional error
- message.
-
- This report finishes the current syntax check.
-
-`interrupted'
- The syntax checker was interrupted. DATA is ignored.
-
- This report finishes the current syntax check.
-
-`finished'
- The syntax checker has finished with a proper error report
- for the current buffer. DATA is the (potentially empty)
- list of `flycheck-error' objects reported by the syntax
- check.
-
- This report finishes the current syntax check.
-
-`suspicious'
- The syntax checker encountered a suspicious state, which the
- user needs to be informed about. DATA is an optional
- message.
-
-A syntax checker _must_ report a status at least once with any
-symbol that finishes the current syntax checker. Otherwise
-Flycheck gets stuck with the current syntax check.
-
-If CHECKER is not the currently used syntax checker in
-`flycheck-current-syntax-check', the status report is largely
-ignored. Notably, any errors reported by the checker are
-discarded."
- (let ((buffer (flycheck-syntax-check-buffer syntax-check)))
- ;; Ignore the status report if the buffer is gone, or if this syntax check
- ;; isn't the current one in buffer (which can happen if this is an old
- ;; report of an interrupted syntax check, and a new syntax check was started
- ;; since this check was interrupted)
- (when (and (buffer-live-p buffer)
- (eq syntax-check
- (buffer-local-value 'flycheck-current-syntax-check buffer)))
- (with-current-buffer buffer
- (let ((checker (flycheck-syntax-check-checker syntax-check)))
- (pcase status
- ((or `errored `interrupted)
- (flycheck-report-failed-syntax-check status)
- (when (eq status 'errored)
- ;; In case of error, show the error message
- (message "Error from syntax checker %s: %s"
- checker (or data "UNKNOWN!"))))
- (`suspicious
- (when flycheck-mode
- (message "Suspicious state from syntax checker %s: %s"
- checker (or data "UNKNOWN!")))
- (flycheck-report-status 'suspicious))
- (`finished
- (when flycheck-mode
- ;; Only report errors from the checker if Flycheck Mode is
- ;; still enabled.
- (flycheck-finish-current-syntax-check
- data
- (flycheck-syntax-check-working-directory syntax-check))))
- (_
- (error "Unknown status %s from syntax checker %s"
- status checker))))))))
-
-(defun flycheck-finish-current-syntax-check (errors working-dir)
- "Finish the current syntax-check in the current buffer with ERRORS.
-
-ERRORS is a list of `flycheck-error' objects reported by the
-current syntax check in `flycheck-current-syntax-check'.
-
-Report all ERRORS and potentially start any next syntax checkers.
-
-If the current syntax checker reported excessive errors, it is
-disabled via `flycheck-disable-excessive-checker' for subsequent
-syntax checks.
-
-Relative file names in ERRORS will be expanded relative to
-WORKING-DIR."
- (let* ((syntax-check flycheck-current-syntax-check)
- (checker (flycheck-syntax-check-checker syntax-check))
- (errors (flycheck-relevant-errors
- (flycheck-fill-and-expand-error-file-names
- (flycheck-filter-errors
- (flycheck-assert-error-list-p errors) checker)
- working-dir))))
- (unless (flycheck-disable-excessive-checker checker errors)
- (flycheck-report-current-errors errors))
- (let ((next-checker (flycheck-get-next-checker-for-buffer checker)))
- (if next-checker
- (flycheck-start-current-syntax-check next-checker)
- (setq flycheck-current-syntax-check nil)
- (flycheck-report-status 'finished)
- ;; Delete overlays only after the very last checker has run, to avoid
- ;; flickering on intermediate re-displays
- (flycheck-delete-marked-overlays)
- (flycheck-error-list-refresh)
- (run-hooks 'flycheck-after-syntax-check-hook)
- (when (eq (current-buffer) (window-buffer))
- (flycheck-display-error-at-point))
- ;; Immediately try to run any pending deferred syntax check, which
- ;; were triggered by intermediate automatic check event, to make sure
- ;; that we quickly refine outdated error information
- (flycheck-perform-deferred-syntax-check)))))
-
-(defun flycheck-disable-excessive-checker (checker errors)
- "Disable CHECKER if it reported excessive ERRORS.
-
-If ERRORS has more items than `flycheck-checker-error-threshold',
-add CHECKER to `flycheck--automatically-disabled-checkers', and
-show a warning.
-
-Return t when CHECKER was disabled, or nil otherwise."
- (when (and flycheck-checker-error-threshold
- (> (length errors) flycheck-checker-error-threshold))
- ;; Disable CHECKER for this buffer
- ;; (`flycheck--automatically-disabled-checkers' is a local variable).
- (lwarn '(flycheck syntax-checker) :warning
- (substitute-command-keys
- "Syntax checker %s reported too many errors (%s) and is disabled.
-Use `\\[customize-variable] RET flycheck-checker-error-threshold' to
-change the threshold or `\\[universal-argument] \
-\\[flycheck-disable-checker]' to re-enable the checker.")
- checker (length errors))
- (push checker flycheck--automatically-disabled-checkers)
- t))
-
-(defun flycheck-clear (&optional shall-interrupt)
- "Clear all errors in the current buffer.
-
-With prefix arg or SHALL-INTERRUPT non-nil, also interrupt the
-current syntax check."
- (interactive "P")
- (when shall-interrupt
- (flycheck-stop))
- (flycheck-delete-all-overlays)
- (flycheck-clear-errors)
- (flycheck-error-list-refresh)
- (flycheck-hide-error-buffer))
-
-(defun flycheck--empty-variables ()
- "Empty variables used by Flycheck."
- (kill-local-variable 'flycheck--file-truename-cache)
- (kill-local-variable 'flycheck--idle-trigger-timer)
- (kill-local-variable 'flycheck--idle-trigger-conditions)
- (kill-local-variable 'flycheck--last-error-display-tick))
-
-(defun flycheck-teardown (&optional ignore-global)
- "Teardown Flycheck in the current buffer.
-
-Completely clear the whole Flycheck state. Remove overlays, kill
-running checks, and empty all variables used by Flycheck.
-
-Unless optional argument IGNORE-GLOBAL is non-nil, check to see
-if no more Flycheck buffers remain (aside from the current
-buffer), and if so then clean up global hooks."
- (flycheck-safe-delete-temporaries)
- (flycheck-stop)
- (flycheck-clean-deferred-check)
- (flycheck-clear)
- (flycheck-cancel-error-display-error-at-point-timer)
- (flycheck--clear-idle-trigger-timer)
- (flycheck--empty-variables)
- (unless (or ignore-global
- (seq-some (lambda (buf)
- (and (not (equal buf (current-buffer)))
- (buffer-local-value 'flycheck-mode buf)))
- (buffer-list)))
- (flycheck-global-teardown 'ignore-local)))
-
-
-;;; Automatic syntax checking in a buffer
-(defun flycheck-may-check-automatically (&rest conditions)
- "Determine whether the buffer may be checked under one of CONDITIONS.
-
-Read-only buffers may never be checked automatically.
-
-If CONDITIONS are given, determine whether syntax may be checked
-under at least one of them, according to
-`flycheck-check-syntax-automatically'."
- (and (not (or buffer-read-only (flycheck-ephemeral-buffer-p)))
- (file-exists-p default-directory)
- (or (not conditions)
- (seq-some
- (lambda (condition)
- (memq condition flycheck-check-syntax-automatically))
- conditions))))
-
-(defvar-local flycheck--idle-trigger-timer nil
- "Timer used to trigger a syntax check after an idle delay.")
-
-(defvar-local flycheck--idle-trigger-conditions nil
- "List of conditions under which an idle syntax check will be triggered.
-This will be some subset of the allowable values for
-`flycheck-check-syntax-automatically'.
-
-For example, if the user switches to a buffer and then makes an
-edit, this list will have the values `idle-change' and
-`idle-buffer-switch' in it, at least until the idle timer
-expires.")
-
-(defun flycheck-buffer-automatically (&optional condition force-deferred)
- "Automatically check syntax at CONDITION.
-
-Syntax is not checked if `flycheck-may-check-automatically'
-returns nil for CONDITION. (CONDITION may be a single condition
-or a list of them.)
-
-The syntax check is deferred if FORCE-DEFERRED is non-nil, or if
-`flycheck-must-defer-check' returns t."
- (when (and flycheck-mode (if (listp condition)
- (apply #'flycheck-may-check-automatically
- condition)
- (flycheck-may-check-automatically condition)))
- (flycheck--clear-idle-trigger-timer)
- (setq flycheck--idle-trigger-conditions nil)
- (if (or force-deferred (flycheck-must-defer-check))
- (flycheck-buffer-deferred)
- (with-demoted-errors "Error while checking syntax automatically: %S"
- (flycheck-buffer)))))
-
-(defun flycheck--clear-idle-trigger-timer ()
- "Clear the idle trigger timer."
- (when flycheck--idle-trigger-timer
- (cancel-timer flycheck--idle-trigger-timer)
- (setq flycheck--idle-trigger-timer nil)))
-
-(defun flycheck--handle-idle-trigger (buffer)
- "Run a syntax check in BUFFER if appropriate.
-This function is called by `flycheck--idle-trigger-timer'."
- (let ((current-buffer (current-buffer)))
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (unless (or flycheck-buffer-switch-check-intermediate-buffers
- (eq buffer current-buffer))
- (setq flycheck--idle-trigger-conditions
- (delq 'idle-buffer-switch
- flycheck--idle-trigger-conditions)))
- (when flycheck--idle-trigger-conditions
- (flycheck-buffer-automatically flycheck--idle-trigger-conditions)
- (setq flycheck--idle-trigger-conditions nil))))))
-
-(defun flycheck-handle-change (beg end _len)
- "Handle a buffer change between BEG and END.
-
-BEG and END mark the beginning and end of the change text. _LEN
-is ignored.
-
-Start a syntax check if a new line has been inserted into the
-buffer."
- ;; Save and restore the match data, as recommended in (elisp)Change Hooks
- (save-match-data
- (when flycheck-mode
- (if (string-match-p (rx "\n") (buffer-substring beg end))
- (flycheck-buffer-automatically 'new-line 'force-deferred)
- (when (memq 'idle-change flycheck-check-syntax-automatically)
- (flycheck--clear-idle-trigger-timer)
- (cl-pushnew 'idle-change flycheck--idle-trigger-conditions)
- (setq flycheck--idle-trigger-timer
- (run-at-time flycheck-idle-change-delay nil
- #'flycheck--handle-idle-trigger
- (current-buffer))))))))
-
-(defvar flycheck--last-buffer (current-buffer)
- "The current buffer or the buffer that was previously current.
-This is usually equal to the current buffer, unless the user just
-switched buffers. After a buffer switch, it is the previous
-buffer.")
-
-(defun flycheck-handle-buffer-switch ()
- "Handle a possible switch to another buffer.
-
-If a buffer switch actually happened, schedule a syntax check."
- ;; Switching buffers here is weird, but unfortunately necessary. It
- ;; turns out that `with-temp-buffer' triggers
- ;; `buffer-list-update-hook' twice, and the value of
- ;; `current-buffer' is bogus in one of those triggers (the one just
- ;; after the temp buffer is killed). If we rely on the bogus value,
- ;; Flycheck will think that the user is switching back and forth
- ;; between different buffers during the `with-temp-buffer' call
- ;; (note: two different normal buffers, not the current buffer and
- ;; the temp buffer!), and that would trigger spurious syntax checks.
- ;; It seems that reading (window-buffer) gets us the correct current
- ;; buffer in all important real-life situations (although it doesn't
- ;; necessarily catch uses of `set-buffer').
- (with-current-buffer (window-buffer)
- (unless (or (equal flycheck--last-buffer (current-buffer))
- ;; Don't bother keeping track of changes to and from
- ;; the minibuffer, as they will never require us to
- ;; run a syntax check.
- (minibufferp))
- (setq flycheck--last-buffer (current-buffer))
- (when (and flycheck-mode
- (memq 'idle-buffer-switch flycheck-check-syntax-automatically))
- (flycheck--clear-idle-trigger-timer)
- (cl-pushnew 'idle-buffer-switch flycheck--idle-trigger-conditions)
- (setq flycheck--idle-trigger-timer
- (run-at-time flycheck-idle-buffer-switch-delay nil
- #'flycheck--handle-idle-trigger
- (current-buffer)))))))
-
-(defun flycheck-handle-save ()
- "Handle a save of the buffer."
- (flycheck-buffer-automatically 'save))
-
-
-;;; Deferred syntax checking
-(defvar-local flycheck-deferred-syntax-check nil
- "If non-nil, a deferred syntax check is pending.")
-
-(defun flycheck-must-defer-check ()
- "Determine whether the syntax check has to be deferred.
-
-A check has to be deferred if the buffer is not visible, or if the buffer is
-currently being reverted.
-
-Return t if the check is to be deferred, or nil otherwise."
- (or (not (get-buffer-window))
- ;; We defer the syntax check if Flycheck is already running, to
- ;; immediately start a new syntax check after the current one finished,
- ;; because the result of the current check will most likely be outdated by
- ;; the time it is finished.
- (flycheck-running-p)
- ;; We must defer checks while a buffer is being reverted, to avoid race
- ;; conditions while the buffer contents are being restored.
- revert-buffer-in-progress-p))
-
-(defun flycheck-deferred-check-p ()
- "Determine whether the current buffer has a deferred check.
-
-Return t if so, or nil otherwise."
- flycheck-deferred-syntax-check)
-
-(defun flycheck-buffer-deferred ()
- "Defer syntax check for the current buffer."
- (setq flycheck-deferred-syntax-check t))
-
-(defun flycheck-clean-deferred-check ()
- "Clean a deferred syntax checking state."
- (setq flycheck-deferred-syntax-check nil))
-
-(defun flycheck-perform-deferred-syntax-check ()
- "Perform the deferred syntax check."
- (when (flycheck-deferred-check-p)
- (flycheck-clean-deferred-check)
- (flycheck-buffer-automatically)))
-
-
-;;; Syntax checking in all buffers
-(defun flycheck-may-enable-mode ()
- "Determine whether Flycheck mode may be enabled.
-
-Flycheck mode is not enabled for
-
-- the minibuffer,
-- `fundamental-mode'
-- major modes whose `mode-class' property is `special',
-- ephemeral buffers (see `flycheck-ephemeral-buffer-p'),
-- encrypted buffers (see `flycheck-encrypted-buffer-p'),
-- remote files (see `file-remote-p'),
-- and major modes excluded by `flycheck-global-modes'.
-
-Return non-nil if Flycheck mode may be enabled, and nil
-otherwise."
- (and (pcase flycheck-global-modes
- ;; Whether `major-mode' is disallowed by `flycheck-global-modes'
- (`t t)
- (`(not . ,modes) (not (memq major-mode modes)))
- (modes (memq major-mode modes)))
- (not (or (minibufferp)
- (eq major-mode 'fundamental-mode)
- (eq (get major-mode 'mode-class) 'special)
- (flycheck-ephemeral-buffer-p)
- (flycheck-encrypted-buffer-p)
- (and (buffer-file-name)
- (file-remote-p (buffer-file-name) 'method))))))
-
-(defun flycheck-mode-on-safe ()
- "Enable command `flycheck-mode' if it is safe to do so.
-
-Command `flycheck-mode' is only enabled if
-`flycheck-may-enable-mode' returns a non-nil result."
- (when (flycheck-may-enable-mode)
- (flycheck-mode)))
-
-;;;###autoload
-(define-globalized-minor-mode global-flycheck-mode flycheck-mode
- flycheck-mode-on-safe
- :init-value nil
- ;; Do not expose Global Flycheck Mode on customize interface, because the
- ;; interaction between package.el and customize is currently broken. See
- ;; https://github.com/flycheck/flycheck/issues/595
-
- ;; :require 'flycheck :group
- ;; 'flycheck
- )
-
-(defun flycheck-global-teardown (&optional ignore-local)
- "Teardown Flycheck in all buffers.
-
-Completely clear the whole Flycheck state in all buffers, stop
-all running checks, remove all temporary files, and empty all
-variables of Flycheck.
-
-Also remove global hooks. (If optional argument IGNORE-LOCAL is
-non-nil, then only do this and skip per-buffer teardown.)"
- (unless ignore-local
- (dolist (buffer (buffer-list))
- (with-current-buffer buffer
- (when flycheck-mode
- (flycheck-teardown 'ignore-global)))))
- (remove-hook 'buffer-list-update-hook #'flycheck-handle-buffer-switch))
-
-;; Clean up the entire state of Flycheck when Emacs is killed, to get rid of any
-;; pending temporary files.
-(add-hook 'kill-emacs-hook #'flycheck-global-teardown)
-
-
-;;; Errors from syntax checks
-(cl-defstruct (flycheck-error
- (:constructor nil)
- (:constructor
- flycheck-error-new
- (&key
- line column end-line end-column
- buffer checker filename message level id group
- &aux (-end-line end-line) (-end-column end-column)))
- (:constructor
- flycheck-error-new-at
- (line
- column
- &optional level message
- &key end-line end-column checker id group
- (filename (buffer-file-name)) (buffer (current-buffer))
- &aux (-end-line end-line) (-end-column end-column)))
- (:constructor
- flycheck-error-new-at-pos
- (pos
- &optional level message
- &key end-pos checker id group
- (filename (buffer-file-name)) (buffer (current-buffer))
- &aux
- ((line . column)
- (if pos (flycheck-line-column-at-pos pos)
- '(nil . nil)))
- ((-end-line . -end-column)
- (if end-pos (flycheck-line-column-at-pos end-pos)
- '(nil . nil))))))
- "Structure representing an error reported by a syntax checker.
-Slots:
-
-`buffer'
- The buffer that the error was reported for, as buffer object.
-
-`checker'
- The syntax checker which reported this error, as symbol.
-
-`filename'
- The file name the error refers to, as string.
-
-`line'
- The line on which the error starts, as number.
-
-`column' (optional)
- The column at which the error starts, as number.
-
- For compatibility with external tools and unlike Emacs
- itself (e.g. in Compile Mode) Flycheck uses _1-based_
- columns: The first character on a line is column 1.
-
- Occasionally some tools try to proactively adapt to Emacs
- and emit 0-based columns automatically. In these cases, the
- columns must be adjusted for Flycheck, see
- `flycheck-increment-error-columns'.
-
- If nil, the whole line is highlighted.
-
-`end-line' (optional)
- The line on which the error ends. If nil, this is computed according to
- `flycheck-highlighting-mode'.
-
-`end-column'
- The column at which the error ends. If nil, this is computed according to
- `flycheck-highlighting-mode'. Error intervals are right-open: the
- end-column points to the first character not included in the error. For
- example, 1:1 is an empty range. and in \"line-number-at-pos\", the range
- 6:12 covers the word \"number\".
-
-`message' (optional)
- The error message as a string, if any.
-
-`level'
- The error level, as either `info', `warning' or `error'.
-
-`id' (optional)
- An ID identifying the kind of error.
-
-`group' (optional)
- A symbol identifying the group the error belongs to.
-
- Some tools will emit multiple errors that relate to the same
- issue (e.g., lifetime errors in Rust). All related errors
- collected by a checker should have the same `group` value,
- in order to be able to present them to the user.
-
- See `flycheck-related-errors`."
- buffer checker filename line column message level id group
- ;; The fields below are at the end of the record to preserve backwards
- ;; compatibility; see https://github.com/flycheck/flycheck/pull/1400 and
- ;; https://lists.gnu.org/archive/html/emacs-devel/2018-07/msg00436.html
- -end-line -end-column)
-
-;; These accessors are defined for backwards compatibility
-;; FIXME: Clean up once package.el learns how to recompile dependencies.
-
-(defun flycheck-error-end-line (err)
- "Return the end line of a Flycheck error ERR."
- (condition-case nil (flycheck-error--end-line err)
- (args-out-of-range nil)))
-
-(defun flycheck-error-end-column (err)
- "Return the end column of a Flycheck error ERR."
- (condition-case nil (flycheck-error--end-column err)
- (args-out-of-range nil)))
-
-(defun flycheck-error--set-end-line (err line)
- "Set the end line of a Flycheck error ERR to LINE."
- (condition-case nil (setf (flycheck-error--end-line err) line)
- (args-out-of-range nil)))
-
-(defun flycheck-error--set-end-column (err column)
- "Set the end column of a Flycheck error ERR to COLUMN."
- (condition-case nil (setf (flycheck-error--end-column err) column)
- (args-out-of-range nil)))
-
-(gv-define-simple-setter flycheck-error-end-line
- flycheck-error--set-end-line)
-(gv-define-simple-setter flycheck-error-end-column
- flycheck-error--set-end-column)
-
-(defmacro flycheck-error-with-buffer (err &rest forms)
- "Switch to the buffer of ERR and evaluate FORMS.
-
-If the buffer of ERR is not live, FORMS are not evaluated."
- (declare (indent 1) (debug t))
- `(when (buffer-live-p (flycheck-error-buffer ,err))
- (with-current-buffer (flycheck-error-buffer ,err)
- ,@forms)))
-
-(defun flycheck--exact-region (line col end-line end-col)
- "Get the region of range LINE, COL, END-LINE, END-COL.
-
-Return a cons cell `(BEG . END)'. If the input range is empty,
-it is expanded to cover at least one character so that END is
-always greater than BEG."
- (let ((beg (flycheck-line-column-to-position line col))
- (end (flycheck-line-column-to-position end-line end-col)))
- (cond
- ((< beg end) (cons beg end))
- ((= end (point-max)) (cons (1- end) end))
- (t (cons end (1+ end))))))
-
-(defun flycheck--line-region (pos)
- "Get the line region of position POS.
-
-Return a cons cell `(BEG . END)' where BEG is the first
-non-whitespace character on the line ERR refers to, and END the
-end of the line."
- (save-excursion
- (goto-char pos)
- (forward-line 0)
- (let ((bol (point))
- (end (line-end-position)))
- ;; Move to the beginning of this line's indentation, similar to
- ;; `back-to-indentation'
- (skip-syntax-forward " " end)
- (backward-prefix-chars)
- ;; If the current line is blank, highlight it in full; if it's
- ;; empty, include the previous line break character(s) to have
- ;; any region at all (when called with 0, `line-end-position'
- ;; gives us the end of the previous line).
- (cons (if (eolp) (if (= bol end) (line-end-position 0) bol) (point))
- end))))
-
-(defun flycheck--column-region (pos)
- "Get the column region of position POS.
-
-Return a cons cell `(BEG . END)' where BEG is the character
-before the column, and END the actual column."
- (save-excursion
- (goto-char pos)
- ;; (eobp): No enough lines in the buffer
- (if (eobp) (cons (1- (point-max)) (point-max))
- (cons pos (1+ pos)))))
-
-(defun flycheck-bounds-of-thing-at-point (thing pos)
- "Get the region of THING at position POS.
-
-THING is a understood by `thing-at-point'.
-
-Return a cons cell `(BEG . END)' where BEG is the beginning of
-the THING at the column, and END the end of the THING."
- (save-excursion
- (goto-char pos)
- (bounds-of-thing-at-point thing)))
-
-(defun flycheck--approximate-region (line column mode)
- "Compute the region of LINE, COLUMN based on MODE."
- (let* ((beg (flycheck-line-column-to-position line (or column 1))))
- (if (or (null column)
- (eq mode 'lines))
- (flycheck--line-region beg)
- (or (pcase mode
- (`symbols
- ;; Ensure that we're on a word or symbol. See
- ;; https://github.com/flycheck/flycheck/issues/1519
- (and (< beg (point-max))
- (memq (char-syntax (char-after beg)) '(?w ?_))
- (flycheck-bounds-of-thing-at-point 'symbol beg)))
- (`sexps
- (flycheck-bounds-of-thing-at-point 'sexp beg)))
- (flycheck--column-region beg)))))
-
-(defun flycheck-error-region-for-mode (err mode)
- "Get the region of ERR for the highlighting MODE.
-
-ERR is a Flycheck error. If its position is fully specified, use
-that to compute a region; otherwise, use MODE, as documented in
-`flycheck-highlighting-mode'. If MODE is nil, signal an error."
- (flycheck-error-with-buffer err
- (save-excursion
- (save-restriction
- (widen)
- ;; Ignoring fields speeds up calls to `line-end-position'.
- (let* ((inhibit-field-text-motion t)
- (line (flycheck-error-line err))
- (column (flycheck-error-column err))
- (end-line (or (flycheck-error-end-line err) line))
- (end-column (flycheck-error-end-column err)))
- (if (and line column end-line end-column)
- (flycheck--exact-region line column end-line end-column)
- (flycheck--approximate-region line column mode)))))))
-
-(defun flycheck-error-pos (err)
- "Get the buffer position of ERR.
-
-ERR is a Flycheck error whose position to get.
-
-The error position is the error column, or the first
-non-whitespace character of the error line, if ERR has no error column."
- (car (flycheck-error-region-for-mode err 'columns)))
-
-(defun flycheck-error-format-message-and-id (err)
- "Format the message and id of ERR as human-readable string."
- (let ((id (flycheck-error-id err))
- (filename (flycheck-error-filename err)))
- (concat (when (and filename (not (equal filename (buffer-file-name))))
- (format "In \"%s\":\n"
- (file-relative-name filename default-directory)))
- (flycheck-error-message err)
- (when id
- (format " [%s]" id)))))
-
-(defun flycheck-error-format-position (err)
- "Format the position of ERR as a human-readable string."
- (let ((line (flycheck-error-line err))
- (column (flycheck-error-column err))
- (end-line (flycheck-error-end-line err))
- (end-column (flycheck-error-end-column err)))
- (if (and line column)
- (if (or (null end-line) (equal line end-line))
- (if (or (null end-column) (equal column (1- end-column)))
- (format "%d:%d" line column)
- (format "%d:%d-%d" line column end-column))
- (format "(%d:%d)-(%d:%d)" line column end-line end-column))
- (if (or (null end-line) (equal line end-line))
- (format "%d" line)
- (format "%d-%d" line end-line)))))
-
-(defun flycheck-error-format (err &optional with-file-name)
- "Format ERR as human-readable string, optionally WITH-FILE-NAME.
-
-Return a string that represents the given ERR. If WITH-FILE-NAME
-is given and non-nil, include the file-name as well, otherwise
-omit it."
- (let* ((level (symbol-name (flycheck-error-level err)))
- (checker (symbol-name (flycheck-error-checker err)))
- (format `(,@(when with-file-name
- (list (flycheck-error-filename err) ":"))
- ,(flycheck-error-format-position err) ":"
- ,level ": "
- ,(flycheck-error-format-message-and-id err)
- " (" ,checker ")")))
- (apply #'concat format)))
-
-(defun flycheck-error-< (err1 err2)
- "Determine whether ERR1 is less than ERR2 by location."
- (let ((l1 (flycheck-error-line err1))
- (l2 (flycheck-error-line err2)))
- (if (/= l1 l2)
- (< l1 l2)
- (let ((c1 (or (flycheck-error-column err1) 1))
- (c2 (or (flycheck-error-column err2) 1)))
- (if (/= c1 c2)
- (< c1 c2)
- (let ((el1 (or (flycheck-error-end-line err1) l1))
- (el2 (or (flycheck-error-end-line err2) l2)))
- (if (/= el1 el2)
- (< el1 el2)
- (let ((cl1 (or (flycheck-error-end-column err1) 1))
- (cl2 (or (flycheck-error-end-column err2) 1)))
- (< cl1 cl2)))))))))
-
-(defun flycheck-error-level-< (err1 err2)
- "Determine whether ERR1 is less than ERR2 by error level.
-
-Like `flycheck-error-<', but compares by error level severity
-first. Levels of the same severity are compared by name."
- (let* ((level1 (flycheck-error-level err1))
- (level2 (flycheck-error-level err2))
- (severity1 (flycheck-error-level-severity level1))
- (severity2 (flycheck-error-level-severity level2)))
- (cond
- ((= severity1 severity2)
- (if (string= level1 level2)
- (flycheck-error-< err1 err2)
- (string< level1 level2)))
- (t (< severity1 severity2)))))
-
-(defun flycheck-assert-error-list-p (errors)
- "Assert that all items in ERRORS are of `flycheck-error' type.
-
-Signal an error if any item in ERRORS is not a `flycheck-error'
-object, as by `flycheck-error-p'. Otherwise return ERRORS
-again."
- (unless (listp errors)
- (signal 'wrong-type-argument (list 'listp errors)))
- (dolist (err errors)
- (unless (flycheck-error-p err)
- (signal 'wrong-type-argument (list 'flycheck-error-p err))))
- errors)
-
-
-;;; Errors in the current buffer
-(defvar-local flycheck-current-errors nil
- "A list of all errors and warnings in the current buffer.")
-
-(defun flycheck-report-current-errors (errors)
- "Report ERRORS in the current buffer.
-
-Add ERRORS to `flycheck-current-errors' and process each error
-with `flycheck-process-error-functions'."
- (setq flycheck-current-errors (sort (append errors flycheck-current-errors)
- #'flycheck-error-<))
- (overlay-recenter (point-max))
- (seq-do (lambda (err)
- (run-hook-with-args-until-success 'flycheck-process-error-functions
- err))
- errors))
-
-(defun flycheck-clear-errors ()
- "Remove all error information from the current buffer."
- (setq flycheck-current-errors nil)
- (flycheck-report-status 'not-checked))
-
-(defun flycheck-fill-and-expand-error-file-names (errors directory)
- "Fill and expand file names in ERRORS relative to DIRECTORY.
-
-Expand all file names of ERRORS against DIRECTORY. If the file
-name of an error is nil fill in the result of function
-`buffer-file-name' in the current buffer.
-
-Return ERRORS, modified in-place."
- (seq-do (lambda (err)
- (setf (flycheck-error-filename err)
- (-if-let (filename (flycheck-error-filename err))
- (expand-file-name filename directory)
- (buffer-file-name))))
- errors)
- errors)
-
-(defun flycheck-relevant-error-other-file-p (err)
- "Determine whether ERR is a relevant error for another file."
- (let ((file-name (flycheck-error-filename err)))
- (and file-name
- flycheck-relevant-error-other-file-show
- (or (null buffer-file-name)
- (not (flycheck-same-files-p buffer-file-name file-name)))
- (<= (flycheck-error-level-severity
- flycheck-relevant-error-other-file-minimum-level)
- (flycheck-error-level-severity (flycheck-error-level err))))))
-
-(defun flycheck-relevant-error-p (err)
- "Determine whether ERR is relevant for the current buffer.
-
-Return t if ERR may be shown for the current buffer, or nil
-otherwise."
- (flycheck-error-with-buffer err
- (let ((file-name (flycheck-error-filename err))
- (message (flycheck-error-message err)))
- (and
- (or
- ;; Neither the error nor buffer have a file name
- (and (not file-name) (not buffer-file-name))
- ;; Both have files, and they match
- (and buffer-file-name file-name
- (flycheck-same-files-p file-name buffer-file-name))
- ;; This is a significant error from another file
- (flycheck-relevant-error-other-file-p err))
- message
- (not (string-empty-p message))
- ;; Errors without line numbers are discarded. If a linter
- ;; reports relevant errors without line numbers, use
- ;; `flycheck-fill-empty-line-numbers' as the checker's
- ;; `:error-filter' to set them to line 0.
- (flycheck-error-line err)))))
-
-(defun flycheck-relevant-errors (errors)
- "Filter the relevant errors from ERRORS.
-
-Return a list of all errors that are relevant for their
-corresponding buffer."
- (seq-filter #'flycheck-relevant-error-p errors))
-
-(defun flycheck-related-errors (err &optional error-set)
- "Get all the errors that are in the same group as ERR.
-
-Return a list of all errors (from ERROR-SET) that have the same
-`flycheck-error-group' as ERR, including ERR itself.
-
-If ERROR-SET is nil, `flycheck-current-errors' is used instead."
- (let ((group (flycheck-error-group err))
- (checker (flycheck-error-checker err)))
- (if group
- (seq-filter (lambda (e)
- (and (eq (flycheck-error-checker e) checker)
- (eq (flycheck-error-group e) group)))
- (or error-set flycheck-current-errors))
- (list err))))
-
-
-;;; Status reporting for the current buffer
-(defvar-local flycheck-last-status-change 'not-checked
- "The last status change in the current buffer.")
-
-(defun flycheck-report-failed-syntax-check (&optional status)
- "Report a failed Flycheck syntax check with STATUS.
-
-STATUS is a status symbol for `flycheck-report-status',
-defaulting to `errored'.
-
-Clear Flycheck state, run `flycheck-syntax-check-failed-hook' and
-report an error STATUS."
- (flycheck-clear)
- (setq flycheck-current-syntax-check nil)
- (run-hooks 'flycheck-syntax-check-failed-hook)
- (flycheck-report-status (or status 'errored)))
-
-(defun flycheck-report-status (status)
- "Report Flycheck STATUS.
-
-STATUS is one of the following symbols:
-
-`not-checked'
- The current buffer was not checked.
-
-`no-checker'
- Automatic syntax checker selection did not find a suitable
- syntax checker.
-
-`running'
- A syntax check is now running in the current buffer.
-
-`errored'
- The current syntax check has errored.
-
-`finished'
- The current syntax check was finished normally.
-
-`interrupted'
- The current syntax check was interrupted.
-
-`suspicious'
- The last syntax check had a suspicious result.
-
-Set `flycheck-last-status-change' and call
-`flycheck-status-changed-functions' with STATUS. Afterwards
-refresh the mode line."
- (setq flycheck-last-status-change status)
- (run-hook-with-args 'flycheck-status-changed-functions status)
- (force-mode-line-update))
-
-(defun flycheck-mode-line-status-text (&optional status)
- "Get a text describing STATUS for use in the mode line.
-
-STATUS defaults to `flycheck-last-status-change' if omitted or
-nil."
- (let ((text (pcase (or status flycheck-last-status-change)
- (`not-checked "")
- (`no-checker "-")
- (`running "*")
- (`errored "!")
- (`finished
- (let-alist (flycheck-count-errors flycheck-current-errors)
- (if (or .error .warning)
- (format ":%s/%s" (or .error 0) (or .warning 0))
- "")))
- (`interrupted ".")
- (`suspicious "?"))))
- (concat " " flycheck-mode-line-prefix text)))
-
-
-;;; Error levels
-;;;###autoload
-(defun flycheck-define-error-level (level &rest properties)
- "Define a new error LEVEL with PROPERTIES.
-
-The following PROPERTIES constitute an error level:
-
-`:severity SEVERITY'
- A number denoting the severity of this level. The higher
- the number, the more severe is this level compared to other
- levels. Defaults to 0.
-
- The severity is used by `flycheck-error-level-<' to
- determine the ordering of errors according to their levels.
-
-`:compilation-level LEVEL'
-
- A number indicating the broad class of messages that errors
- at this level belong to: one of 0 (info), 1 (warning), or
- 2 or nil (error). Defaults to nil.
-
- This is used by `flycheck-checker-pattern-to-error-regexp'
- to map error levels into `compilation-mode''s hierarchy and
- to get proper highlighting of errors in `compilation-mode'.
-
-`:overlay-category CATEGORY'
- A symbol denoting the overlay category to use for error
- highlight overlays for this level. See Info
- node `(elisp)Overlay Properties' for more information about
- overlay categories.
-
- A category for an error level overlay should at least define
- the `face' property, for error highlighting. Another useful
- property for error level categories is `priority', to
- influence the stacking of multiple error level overlays.
-
-`:fringe-bitmap BITMAPS'
- A fringe bitmap symbol denoting the bitmap to use for fringe
- indicators for this level, or a cons of two bitmaps (one for
- narrow fringes and one for wide fringes). See Info node
- `(elisp)Fringe Bitmaps' for more information about fringe
- bitmaps, including a list of built-in fringe bitmaps.
-
-`:fringe-face FACE'
- A face symbol denoting the face to use for fringe indicators
- for this level.
-
-`:error-list-face FACE'
- A face symbol denoting the face to use for messages of this
- level in the error list. See `flycheck-list-errors'."
- (declare (indent 1))
- (setf (get level 'flycheck-error-level) t)
- (setf (get level 'flycheck-error-severity)
- (or (plist-get properties :severity) 0))
- (setf (get level 'flycheck-compilation-level)
- (plist-get properties :compilation-level))
- (setf (get level 'flycheck-overlay-category)
- (plist-get properties :overlay-category))
- (setf (get level 'flycheck-fringe-bitmaps)
- (let ((bitmap (plist-get properties :fringe-bitmap)))
- (if (consp bitmap) bitmap (cons bitmap bitmap))))
- ;; Kept for compatibility
- (setf (get level 'flycheck-fringe-bitmap-double-arrow)
- (car (get level 'flycheck-fringe-bitmaps)))
- (setf (get level 'flycheck-fringe-face)
- (plist-get properties :fringe-face))
- (setf (get level 'flycheck-error-list-face)
- (plist-get properties :error-list-face)))
-
-(defun flycheck-error-level-p (level)
- "Determine whether LEVEL is a Flycheck error level."
- (get level 'flycheck-error-level))
-
-(defun flycheck-error-level-severity (level)
- "Get the numeric severity of LEVEL."
- (or (get level 'flycheck-error-severity) 0))
-
-(defun flycheck-error-level-compilation-level (level)
- "Get the compilation level for LEVEL."
- (get level 'flycheck-compilation-level))
-
-(defun flycheck-error-level-overlay-category (level)
- "Get the overlay category for LEVEL."
- (get level 'flycheck-overlay-category))
-
-(defun flycheck-error-level-fringe-bitmap (level &optional hi-res)
- "Get the fringe bitmap for LEVEL.
-
-Optional argument HI-RES non-nil means that the returned bitmap
-will be the high resolution version."
- (let ((bitmaps (get level 'flycheck-fringe-bitmaps)))
- (if hi-res (cdr bitmaps) (car bitmaps))))
-
-(defun flycheck-error-level-fringe-face (level)
- "Get the fringe face for LEVEL."
- (get level 'flycheck-fringe-face))
-
-(defun flycheck-error-level-error-list-face (level)
- "Get the error list face for LEVEL."
- (get level 'flycheck-error-list-face))
-
-(defun flycheck-error-level-make-fringe-icon (level side)
- "Create the fringe icon for LEVEL at SIDE.
-
-Return a propertized string that shows a fringe bitmap according
-to LEVEL and the given fringe SIDE.
-
-LEVEL is a Flycheck error level defined with
-`flycheck-define-error-level', and SIDE is either `left-fringe'
-or `right-fringe'.
-
-Return a propertized string representing the fringe icon,
-intended for use as `before-string' of an overlay to actually
-show the icon."
- (unless (memq side '(left-fringe right-fringe))
- (error "Invalid fringe side: %S" side))
- (let* ((fringe-width (pcase side
- (`left-fringe (car (window-fringes)))
- (`right-fringe (cadr (window-fringes)))))
- (high-res (= 16 fringe-width)))
- (propertize "!" 'display
- (list side
- (flycheck-error-level-fringe-bitmap level high-res)
- (flycheck-error-level-fringe-face level)))))
-
-
-;;; Built-in error levels
-(when (fboundp 'define-fringe-bitmap)
- (define-fringe-bitmap 'flycheck-fringe-bitmap-double-arrow
- [#b11011000
- #b01101100
- #b00110110
- #b00011011
- #b00110110
- #b01101100
- #b11011000
- #b00000000])
- (define-fringe-bitmap 'flycheck-fringe-bitmap-double-arrow-hi-res
- [#b0000000000000000
- #b0000000000000000
- #b1111001111000000
- #b0111100111100000
- #b0011110011110000
- #b0001111001111000
- #b0000111100111100
- #b0000011110011110
- #b0000011110011110
- #b0000111100111100
- #b0001111001111000
- #b0011110011110000
- #b0111100111100000
- #b1111001111000000
- #b0000000000000000
- #b0000000000000000]
- nil 16))
-
-(defconst flycheck-default-fringe-bitmaps
- (cons 'flycheck-fringe-bitmap-double-arrow
- 'flycheck-fringe-bitmap-double-arrow-hi-res))
-
-(setf (get 'flycheck-error-overlay 'face) 'flycheck-error)
-(setf (get 'flycheck-error-overlay 'priority) 110)
-
-(flycheck-define-error-level 'error
- :severity 100
- :compilation-level 2
- :overlay-category 'flycheck-error-overlay
- :fringe-bitmap flycheck-default-fringe-bitmaps
- :fringe-face 'flycheck-fringe-error
- :error-list-face 'flycheck-error-list-error)
-
-(setf (get 'flycheck-warning-overlay 'face) 'flycheck-warning)
-(setf (get 'flycheck-warning-overlay 'priority) 100)
-
-(flycheck-define-error-level 'warning
- :severity 10
- :compilation-level 1
- :overlay-category 'flycheck-warning-overlay
- :fringe-bitmap flycheck-default-fringe-bitmaps
- :fringe-face 'flycheck-fringe-warning
- :error-list-face 'flycheck-error-list-warning)
-
-(setf (get 'flycheck-info-overlay 'face) 'flycheck-info)
-(setf (get 'flycheck-info-overlay 'priority) 90)
-
-(flycheck-define-error-level 'info
- :severity -10
- :compilation-level 0
- :overlay-category 'flycheck-info-overlay
- :fringe-bitmap flycheck-default-fringe-bitmaps
- :fringe-face 'flycheck-fringe-info
- :error-list-face 'flycheck-error-list-info)
-
-
-;;; Error filtering
-(defun flycheck-filter-errors (errors checker)
- "Filter ERRORS from CHECKER.
-
-Apply the error filter of CHECKER to ERRORs and return the
-result. If CHECKER has no error filter, fall back to
-`flycheck-sanitize-errors'."
- (let ((filter (or (flycheck-checker-get checker 'error-filter)
- #'flycheck-sanitize-errors)))
- (funcall filter errors)))
-
-(defun flycheck-sanitize-errors (errors)
- "Sanitize ERRORS.
-
-Sanitize ERRORS by trimming leading and trailing whitespace in
-all error messages, and by replacing 0 columns and empty error
-messages with nil.
-
-Returns sanitized ERRORS."
- (dolist (err errors)
- (flycheck-error-with-buffer err
- (let ((message (flycheck-error-message err))
- (id (flycheck-error-id err)))
- (when message
- (setq message (string-trim message))
- (setf (flycheck-error-message err)
- (if (string-empty-p message) nil message)))
- (when (and id (string-empty-p id))
- (setf (flycheck-error-id err) nil))
- (when (eq (flycheck-error-column err) 0)
- (setf (flycheck-error-column err) nil))
- (when (eq (flycheck-error-end-column err) 0)
- (setf (flycheck-error-end-column err) nil)))))
- errors)
-
-(defun flycheck-remove-error-file-names (file-name errors)
- "Remove matching FILE-NAME from ERRORS.
-
-Use as `:error-filter' for syntax checkers that output faulty
-filenames. Flycheck will later fill in the buffer file name.
-
-Return ERRORS."
- (seq-do (lambda (err)
- (when (and (flycheck-error-filename err)
- (string= (flycheck-error-filename err) file-name))
- (setf (flycheck-error-filename err) nil)))
- errors)
- errors)
-
-(defun flycheck-increment-error-columns (errors &optional offset)
- "Increment all columns of ERRORS by OFFSET (default: 1).
-
- Use this as `:error-filter' if a syntax checker outputs 0-based
- columns."
- (setq offset (or offset 1)) ;; Emacs bug #31715
- (seq-do (lambda (err)
- (when (flycheck-error-column err)
- (cl-incf (flycheck-error-column err) offset))
- (when (flycheck-error-end-column err)
- (cl-incf (flycheck-error-end-column err) offset)))
- errors)
- errors)
-
-(defun flycheck-collapse-error-message-whitespace (errors)
- "Collapse whitespace in all messages of ERRORS.
-
-Return ERRORS."
- (dolist (err errors)
- (-when-let (message (flycheck-error-message err))
- (setf (flycheck-error-message err)
- (replace-regexp-in-string (rx (one-or-more (any space "\n" "\r")))
- " " message 'fixed-case 'literal))))
- errors)
-
-(defun flycheck-dedent-error-messages (errors)
- "Dedent all messages of ERRORS.
-
-For each error in ERRORS, determine the indentation offset from
-the leading whitespace of the first line, and dedent all further
-lines accordingly.
-
-Return ERRORS, with in-place modifications."
- (dolist (err errors)
- (-when-let (message (flycheck-error-message err))
- (with-temp-buffer
- (insert message)
- ;; Determine the indentation offset
- (goto-char (point-min))
- (back-to-indentation)
- (let* ((indent-offset (- (point) (point-min))))
- ;; Now iterate over all lines and dedent each according to
- ;; `indent-offset'
- (while (not (eobp))
- (back-to-indentation)
- ;; If the current line starts with sufficient whitespace, delete the
- ;; indentation offset. Otherwise keep the line intact, as we might
- ;; loose valuable information
- (when (>= (- (point) (line-beginning-position)) indent-offset)
- (delete-char (- indent-offset)))
- (forward-line 1)))
- (delete-trailing-whitespace (point-min) (point-max))
- (setf (flycheck-error-message err)
- (buffer-substring-no-properties (point-min) (point-max))))))
- errors)
-
-(defun flycheck-fold-include-levels (errors sentinel-message)
- "Fold levels of ERRORS from included files.
-
-ERRORS is a list of `flycheck-error' objects. SENTINEL-MESSAGE
-is a regular expression matched against the error message to
-determine whether the error denotes errors from an included
-file. Alternatively, it is a function that is given an error and
-shall return non-nil, if the error denotes errors from an
-included file."
- (unless (or (stringp sentinel-message) (functionp sentinel-message))
- (error "Sentinel must be string or function: %S" sentinel-message))
- (let ((sentinel (if (functionp sentinel-message)
- sentinel-message
- (lambda (err)
- (string-match-p sentinel-message
- (flycheck-error-message err)))))
- (remaining-errors errors))
- (while remaining-errors
- (let* ((current-error (pop remaining-errors)))
- (when (funcall sentinel current-error)
- ;; We found an error denoting errors in the included file:
- ;; 1. process all subsequent errors until faulty include file is found
- ;; 2. process again all subsequent errors until an error has the
- ;; current file name again
- ;; 3. find the most severe error level
- (let ((current-filename (flycheck-error-filename current-error))
- (current-level nil)
- (faulty-include-filename nil)
- (filename nil)
- (done (null remaining-errors)))
-
- (while (not done)
- (setq filename (flycheck-error-filename (car remaining-errors)))
- (unless faulty-include-filename
- (unless (string= filename current-filename)
- (setq faulty-include-filename filename)))
-
- (let* ((error-in-include (pop remaining-errors))
- (in-include-level (flycheck-error-level error-in-include)))
- (unless (funcall sentinel error-in-include)
- ;; Ignore nested "included file" errors, we are only
- ;; interested in real errors because these define our level
- (when (or (not current-level)
- (> (flycheck-error-level-severity in-include-level)
- (flycheck-error-level-severity current-level)))
- (setq current-level in-include-level))))
-
- (setq done (or (null remaining-errors)
- (and faulty-include-filename
- (string= filename current-filename)))))
-
- (setf (flycheck-error-level current-error) current-level
- (flycheck-error-message current-error)
- (format "In include %s" faulty-include-filename))))))
- errors))
-
-(defun flycheck-dequalify-error-ids (errors)
- "De-qualify error ids in ERRORS.
-
-Remove all qualifications from error ids in ERRORS, by stripping
-all leading dotted components from error IDs. For instance, if
-the error ID is com.foo.E100, replace it with E100.
-
-This error filter is mainly useful to simplify error IDs obtained
-from parsing Checkstyle XML, which frequently has very verbose
-IDs, that include the name of the tool."
- (seq-do (lambda (err)
- (let ((id (flycheck-error-id err)))
- (when id
- (setf (flycheck-error-id err)
- (replace-regexp-in-string
- (rx string-start
- (group
- (optional (zero-or-more not-newline) "."))
- (one-or-more (not (any ".")))
- string-end)
- "" id 'fixedcase 'literal 1)))))
- errors)
- errors)
-
-(defun flycheck-remove-error-ids (errors)
- "Remove all error ids from ERRORS."
- (seq-do (lambda (err) (setf (flycheck-error-id err) nil)) errors)
- errors)
-
-(defun flycheck-fill-empty-line-numbers (errors)
- "Set ERRORS without lines to line 0.
-
-Use as `:error-filter' for syntax checkers that output errors
-without line numbers.
-
-Return ERRORS."
- (seq-do (lambda (err)
- (unless (flycheck-error-line err)
- (setf (flycheck-error-line err) 0)))
- errors)
- errors)
-
-
-;;; Error analysis
-(defun flycheck-count-errors (errors)
- "Count the number of ERRORS, grouped by level.
-
-Return an alist, where each ITEM is a cons cell whose `car' is an
-error level, and whose `cdr' is the number of errors of that
-level."
- (let (counts-by-level)
- (dolist (err errors)
- (let* ((level (flycheck-error-level err))
- (item (assq level counts-by-level)))
- (if item
- (cl-incf (cdr item))
- (push (cons level 1) counts-by-level))))
- counts-by-level))
-
-(defun flycheck-has-max-errors-p (errors level)
- "Check if there is no error in ERRORS more severe than LEVEL."
- (let ((severity (flycheck-error-level-severity level)))
- (seq-every-p (lambda (e) (<= (flycheck-error-level-severity
- (flycheck-error-level e))
- severity))
- errors)))
-
-(defun flycheck-has-max-current-errors-p (level)
- "Check if there is no current error more severe than LEVEL."
- (flycheck-has-max-errors-p flycheck-current-errors level))
-
-(defun flycheck-has-errors-p (errors level)
- "Determine if there are any ERRORS with LEVEL."
- (seq-some (lambda (e) (eq (flycheck-error-level e) level)) errors))
-
-(defun flycheck-has-current-errors-p (&optional level)
- "Determine if the current buffer has errors with LEVEL.
-
-If LEVEL is omitted if the current buffer has any errors at all."
- (if level
- (flycheck-has-errors-p flycheck-current-errors level)
- (and flycheck-current-errors t)))
-
-
-;;; Error overlays in the current buffer
-(defvar-local flycheck--last-overlay-index 0
- "Last index given to a Flycheck overlay.
-
-These indices are used to preserve error order (Emacs doesn't
-preserve overlay order when calling `overlays-at').")
-
-(defun flycheck--next-overlay-index ()
- "Compute the index to assign to a new Flycheck overlay."
- (cl-incf flycheck--last-overlay-index))
-
-(defun flycheck-add-overlay (err)
- "Add overlay for ERR.
-
-Return the created overlay."
- ;; We must have a proper error region for the sake of fringe indication,
- ;; error display and error navigation, even if the highlighting is disabled.
- ;; We erase the highlighting later on in this case
- (pcase-let* ((`(,beg . ,end)
- (if (flycheck-relevant-error-other-file-p err)
- ;; Display overlays for other-file errors on the first line
- (cons (point-min)
- (save-excursion (goto-char (point-min))
- (point-at-eol)))
- (flycheck-error-region-for-mode
- err (or flycheck-highlighting-mode 'lines))))
- (overlay (make-overlay beg end))
- (level (flycheck-error-level err))
- (category (flycheck-error-level-overlay-category level))
- (index (flycheck--next-overlay-index)))
- (unless (flycheck-error-level-p level)
- (error "Undefined error level: %S" level))
- (setf (overlay-get overlay 'flycheck-error-index) index)
- (setf (overlay-get overlay 'flycheck-overlay) t)
- (setf (overlay-get overlay 'flycheck-error) err)
- (setf (overlay-get overlay 'category) category)
- (unless flycheck-highlighting-mode
- ;; Erase the highlighting from the overlay if requested by the user
- (setf (overlay-get overlay 'face) nil))
- (when flycheck-indication-mode
- (setf (overlay-get overlay 'before-string)
- (flycheck-error-level-make-fringe-icon
- level flycheck-indication-mode)))
- (setf (overlay-get overlay 'help-echo) #'flycheck-help-echo)
- overlay))
-
-(defun flycheck-help-echo (_window object pos)
- "Construct a tooltip message.
-
-Most of the actual work is done by calling
-`flycheck-help-echo-function' with the appropriate list of
-errors. Arguments WINDOW, OBJECT and POS are as described in
-info node `(elisp)Special properties', as this function is
-intended to be used as the 'help-echo property of flycheck error
-overlays."
- (-when-let (buf (cond ((bufferp object) object)
- ((overlayp object) (overlay-buffer object))))
- (with-current-buffer buf
- (-when-let* ((fn flycheck-help-echo-function)
- (errs (flycheck-overlay-errors-at pos)))
- (propertize (funcall fn errs) 'help-echo-inhibit-substitution t)))))
-
-(defun flycheck-help-echo-all-error-messages (errs)
- "Concatenate error messages and ids from ERRS."
- (mapconcat
- (lambda (err)
- (when err
- (if (flycheck-error-message err)
- (flycheck-error-format-message-and-id err)
- (format "Unknown %s" (flycheck-error-level err)))))
- errs "\n\n"))
-
-(defun flycheck-filter-overlays (overlays)
- "Get all Flycheck overlays from OVERLAYS, in original order."
- ;; The order of errors returned from overlays is not stable, so we sort
- ;; them again using the internal index to guarantee errors are always
- ;; displayed in the same order.
- (seq-sort
- (lambda (o1 o2) (< (overlay-get o1 'flycheck-error-index)
- (overlay-get o2 'flycheck-error-index)))
- (seq-filter (lambda (o) (overlay-get o 'flycheck-overlay)) overlays)))
-
-(defun flycheck-overlays-at (pos)
- "Get all Flycheck overlays at POS."
- (flycheck-filter-overlays (overlays-at pos)))
-
-(defun flycheck-overlays-in (beg end)
- "Get all Flycheck overlays between BEG and END."
- (flycheck-filter-overlays (overlays-in beg end)))
-
-(defun flycheck-overlay-errors-at (pos)
- "Return a list of all flycheck errors overlaid at POS."
- (seq-map (lambda (o) (overlay-get o 'flycheck-error))
- (flycheck-overlays-at pos)))
-
-(defun flycheck-overlay-errors-in (beg end)
- "Return a list of all flycheck errors overlaid between BEG and END."
- (seq-map (lambda (o) (overlay-get o 'flycheck-error))
- (flycheck-overlays-in beg end)))
-
-(defvar-local flycheck-overlays-to-delete nil
- "Overlays mark for deletion after all syntax checks completed.")
-(put 'flycheck-overlays-to-delete 'permanent-local t)
-
-(defun flycheck-delete-all-overlays ()
- "Remove all flycheck overlays in the current buffer."
- (overlay-recenter (point-max))
- (flycheck-delete-marked-overlays)
- (setq flycheck--last-overlay-index 0)
- (save-restriction
- (widen)
- (seq-do #'delete-overlay (flycheck-overlays-in (point-min) (point-max)))))
-
-(defun flycheck-mark-all-overlays-for-deletion ()
- "Mark all current overlays for deletion."
- (setq flycheck-overlays-to-delete
- (append (flycheck-overlays-in (point-min) (point-max))
- flycheck-overlays-to-delete)))
-
-(defun flycheck-delete-marked-overlays ()
- "Delete all overlays marked for deletion."
- (overlay-recenter (point-max))
- (seq-do #'delete-overlay flycheck-overlays-to-delete)
- (setq flycheck-overlays-to-delete nil))
-
-
-;;; Error navigation in the current buffer
-(defun flycheck-error-level-interesting-at-pos-p (pos)
- "Check if error severity at POS passes `flycheck-error-level-interesting-p'."
- (flycheck-error-level-interesting-p (get-char-property pos 'flycheck-error)))
-
-(defun flycheck-error-level-interesting-p (err)
- "Check if ERR severity is >= `flycheck-navigation-minimum-level'.
-
-ERR is also interesting (the function returns true) if there are
-no errors as or more severe than `flycheck-navigation-minimum-level'."
- (when (flycheck-error-p err)
- (-if-let (min-level flycheck-navigation-minimum-level)
- (or (<= (flycheck-error-level-severity min-level)
- (flycheck-error-level-severity (flycheck-error-level err)))
- (not (flycheck-has-current-errors-p min-level)))
- t)))
-
-(defun flycheck-next-error-pos (n &optional reset)
- "Get the position of the N-th next error.
-
-With negative N, get the position of the (-N)-th previous error
-instead. With non-nil RESET, search from `point-min', otherwise
-search from the current point.
-
-Return the position of the next or previous error, or nil if
-there is none. If N is zero, return `point', or `point-min' if
-RESET is non-nil."
- (let ((n (or n 1))
- (pos (if reset (point-min) (point))))
- (if (>= n 0)
- ;; Search forwards
- (while (and pos (> n 0))
- (setq n (1- n))
- (when (get-char-property pos 'flycheck-error)
- ;; Move beyond from the current error if any
- (setq pos (next-single-char-property-change pos 'flycheck-error)))
- (while (not (or (= pos (point-max))
- (flycheck-error-level-interesting-at-pos-p pos)))
- ;; Scan for the next error
- (setq pos (next-single-char-property-change pos 'flycheck-error)))
- (when (and (= pos (point-max))
- (not (flycheck-error-level-interesting-at-pos-p pos)))
- ;; If we reached the end of the buffer, but no error, we didn't find
- ;; any
- (setq pos nil)))
- ;; Search backwards
- (while (and pos (< n 0))
- (setq n (1+ n))
- ;; Loop until we find an error. We need to check the position *before*
- ;; the current one, because `previous-single-char-property-change'
- ;; always moves to the position *of* the change.
- (while (not (or (= pos (point-min))
- (flycheck-error-level-interesting-at-pos-p (1- pos))))
- (setq pos (previous-single-char-property-change pos 'flycheck-error)))
- (when (and (= pos (point-min))
- (not (flycheck-error-level-interesting-at-pos-p pos)))
- ;; We didn't find any error.
- (setq pos nil))
- (when pos
- ;; We found an error, so move to its beginning
- (setq pos (previous-single-char-property-change pos
- 'flycheck-error)))))
- pos))
-
-(defun flycheck-next-error-function (n reset)
- "Visit the N-th error from the current point.
-
-N is the number of errors to advance by, where a negative N
-advances backwards. With non-nil RESET, advance from the
-beginning of the buffer, otherwise advance from the current
-position.
-
-Intended for use with `next-error-function'."
- (-if-let* ((pos (flycheck-next-error-pos n reset))
- (err (get-char-property pos 'flycheck-error)))
- (flycheck-jump-to-error err)
- (user-error "No more Flycheck errors")))
-
-(defun flycheck-next-error (&optional n reset)
- "Visit the N-th error from the current point.
-
-N is the number of errors to advance by, where a negative N
-advances backwards. With non-nil RESET, advance from the
-beginning of the buffer, otherwise advance from the current
-position."
- (interactive "P")
- (when (consp n)
- ;; Universal prefix argument means reset
- (setq reset t n nil))
- (flycheck-next-error-function n reset)
- (flycheck-display-error-at-point))
-
-(defun flycheck-previous-error (&optional n)
- "Visit the N-th previous error.
-
-If given, N specifies the number of errors to move backwards by.
-If N is negative, move forwards instead."
- (interactive "P")
- (flycheck-next-error (- (or n 1))))
-
-(defun flycheck-first-error (&optional n)
- "Visit the N-th error from beginning of the buffer.
-
-If given, N specifies the number of errors to move forward from
-the beginning of the buffer."
- (interactive "P")
- (flycheck-next-error n 'reset))
-
-
-;;; Listing errors in buffers
-(defconst flycheck-error-list-buffer "*Flycheck errors*"
- "The name of the buffer to show error lists.")
-
-(defvar flycheck-error-list-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "f") #'flycheck-error-list-set-filter)
- (define-key map (kbd "F") #'flycheck-error-list-reset-filter)
- (define-key map (kbd "n") #'flycheck-error-list-next-error)
- (define-key map (kbd "p") #'flycheck-error-list-previous-error)
- (define-key map (kbd "g") #'flycheck-error-list-check-source)
- (define-key map (kbd "e") #'flycheck-error-list-explain-error)
- (define-key map (kbd "RET") #'flycheck-error-list-goto-error)
- map)
- "The keymap of `flycheck-error-list-mode'.")
-
-(defun flycheck-error-list-make-last-column (message checker)
- "Compute contents of the last error list cell.
-
-MESSAGE and CHECKER are displayed in a single column to allow the
-message to stretch arbitrarily far."
- (let ((checker-name (propertize (symbol-name checker)
- 'face 'flycheck-error-list-checker-name)))
- (format "%s (%s)" message checker-name)))
-
-(defconst flycheck-error-list-format
- `[("File" 6)
- ("Line" 5 flycheck-error-list-entry-< :right-align t)
- ("Col" 3 nil :right-align t)
- ("Level" 8 flycheck-error-list-entry-level-<)
- ("ID" 6 t)
- (,(flycheck-error-list-make-last-column "Message" 'Checker) 0 t)]
- "Table format for the error list.")
-
-(defconst flycheck-error-list-padding 1
- "Padding used in error list.")
-
-(defconst flycheck--error-list-msg-offset
- (seq-reduce
- (lambda (offset fmt)
- (pcase-let* ((`(,_ ,width ,_ . ,props) fmt)
- (padding (or (plist-get props :pad-right) 1)))
- (+ offset width padding)))
- (seq-subseq flycheck-error-list-format 0 -1)
- flycheck-error-list-padding)
- "Amount of space to use in `flycheck-flush-multiline-message'.")
-
-(define-derived-mode flycheck-error-list-mode tabulated-list-mode
- "Flycheck errors"
- "Major mode for listing Flycheck errors.
-
-\\{flycheck-error-list-mode-map}"
- (setq tabulated-list-format flycheck-error-list-format
- ;; Sort by location initially
- tabulated-list-sort-key (cons "Line" nil)
- tabulated-list-padding flycheck-error-list-padding
- tabulated-list-entries #'flycheck-error-list-entries
- ;; `revert-buffer' updates the mode line for us, so all we need to do is
- ;; set the corresponding mode line construct.
- mode-line-buffer-identification flycheck-error-list-mode-line)
- ;; Guard `truncate-string-ellipsis' for Emacs 24.
- ;; TODO: Remove when dropping Emacs 24 compatibility
- (when (boundp 'truncate-string-ellipsis)
- ;; See https://github.com/flycheck/flycheck/issues/1101
- (setq-local truncate-string-ellipsis "…"))
- (tabulated-list-init-header))
-
-(defvar-local flycheck-error-list-source-buffer nil
- "The current source buffer of the error list.")
-;; Needs to permanently local to preserve the source buffer across buffer
-;; reversions
-(put 'flycheck-error-list-source-buffer 'permanent-local t)
-
-(defun flycheck-error-list-set-source (buffer)
- "Set BUFFER as the source buffer of the error list."
- (when (get-buffer flycheck-error-list-buffer)
- (with-current-buffer flycheck-error-list-buffer
- ;; Only update the source when required
- (unless (eq buffer flycheck-error-list-source-buffer)
- (setq flycheck-error-list-source-buffer buffer)
- (flycheck-error-list-refresh)))))
-
-(defun flycheck-error-list-update-source ()
- "Update the source buffer of the error list."
- (unless (eq (current-buffer) (get-buffer flycheck-error-list-buffer))
- ;; We must not update the source buffer, if the current buffer is the error
- ;; list itself.
- (flycheck-error-list-set-source (current-buffer))))
-
-(defun flycheck-error-list-check-source ()
- "Trigger a syntax check in the source buffer of the error list."
- (interactive)
- (let ((buffer (get-buffer flycheck-error-list-source-buffer)))
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (flycheck-buffer)))))
-
-(define-button-type 'flycheck-error-list
- 'action #'flycheck-error-list-button-goto-error
- 'help-echo "mouse-1, RET: goto error"
- 'face nil)
-
-(defun flycheck-error-list-button-goto-error (button)
- "Go to the error at BUTTON."
- (flycheck-error-list-goto-error (button-start button)))
-
-(define-button-type 'flycheck-error-list-explain-error
- 'action #'flycheck-error-list-button-explain-error
- 'help-echo "mouse-1, RET: explain error")
-
-(defun flycheck-error-list-button-explain-error (button)
- "Explain the error at BUTTON."
- (flycheck-error-list-explain-error (button-start button)))
-
-(defsubst flycheck-error-list-make-cell (text &optional face help-echo type)
- "Make an error list cell with TEXT and FACE.
-
-If FACE is nil don't set a FACE on TEXT. If TEXT already has
-face properties, do not specify a FACE. Note though, that if
-TEXT gets truncated it will not inherit any previous face
-properties. If you expect TEXT to be truncated in the error
-list, do specify a FACE explicitly!
-
-If HELP-ECHO is non-nil, set a help-echo property on TEXT, with
-value HELP-ECHO. This is convenient if you expect TEXT to be
-truncated.
-
-The cell will have the type TYPE unless TYPE is nil, and the
-default type `flycheck-error-list' will be used instead."
- (append (list text 'type (if type type
- 'flycheck-error-list))
- (and face (list 'face face))
- (and help-echo (list 'help-echo help-echo))))
-
-(defsubst flycheck-error-list-make-number-cell (number face)
- "Make a table cell for a NUMBER with FACE.
-
-Convert NUMBER to string, fontify it with FACE and return the
-string with attached text properties."
- (flycheck-error-list-make-cell
- (if (numberp number) (number-to-string number) "")
- face))
-
-(defun flycheck-error-list-make-entry (error)
- "Make a table cell for the given ERROR.
-
-Return a list with the contents of the table cell."
- (let* ((level (flycheck-error-level error))
- (level-face (flycheck-error-level-error-list-face level))
- (filename (flycheck-error-filename error))
- (line (flycheck-error-line error))
- (column (flycheck-error-column error))
- (message (or (flycheck-error-message error)
- (format "Unknown %s" (symbol-name level))))
- (flushed-msg (flycheck-flush-multiline-message message))
- (id (flycheck-error-id error))
- (id-str (if id (format "%s" id) ""))
- (checker (flycheck-error-checker error))
- (msg-and-checker
- (flycheck-error-list-make-last-column flushed-msg checker))
- (explainer (flycheck-checker-get checker 'error-explainer)))
- (list error
- (vector (flycheck-error-list-make-cell
- (if filename
- (file-name-nondirectory filename)
- "")
- 'flycheck-error-list-filename)
- (flycheck-error-list-make-number-cell
- line 'flycheck-error-list-line-number)
- (flycheck-error-list-make-number-cell
- column 'flycheck-error-list-column-number)
- (flycheck-error-list-make-cell
- (symbol-name (flycheck-error-level error)) level-face)
- ;; Error ID use a different face when an error-explainer is
- ;; present
- (flycheck-error-list-make-cell
- id-str (if explainer 'flycheck-error-list-id-with-explainer
- 'flycheck-error-list-id)
- id-str 'flycheck-error-list-explain-error)
- (flycheck-error-list-make-cell
- msg-and-checker nil msg-and-checker)))))
-
-(defun flycheck-flush-multiline-message (msg)
- "Prepare error message MSG for display in the error list.
-
-Prepend all lines of MSG except the first with enough space to
-ensure that they line up properly once the message is displayed."
- (let* ((spc-spec `(space . (:width ,flycheck--error-list-msg-offset)))
- (spc (propertize " " 'display spc-spec))
- (rep (concat "\\1" spc "\\2")))
- (replace-regexp-in-string "\\([\r\n]+\\)\\(.\\)" rep msg)))
-
-(defun flycheck-error-list-current-errors ()
- "Read the list of errors in `flycheck-error-list-source-buffer'."
- (when (buffer-live-p flycheck-error-list-source-buffer)
- (buffer-local-value 'flycheck-current-errors
- flycheck-error-list-source-buffer)))
-
-(defun flycheck-error-list-entries ()
- "Create the entries for the error list."
- (-when-let* ((errors (flycheck-error-list-current-errors))
- (filtered (flycheck-error-list-apply-filter errors)))
- (seq-map #'flycheck-error-list-make-entry filtered)))
-
-(defun flycheck-error-list-entry-< (entry1 entry2)
- "Determine whether ENTRY1 is before ENTRY2 by location.
-
-See `flycheck-error-<'."
- (flycheck-error-< (car entry1) (car entry2)))
-
-(defun flycheck-error-list-entry-level-< (entry1 entry2)
- "Determine whether ENTRY1 is before ENTRY2 by level.
-
-See `flycheck-error-level-<'."
- (not (flycheck-error-level-< (car entry1) (car entry2))))
-
-(defvar flycheck-error-list-mode-line-map
- (let ((map (make-sparse-keymap)))
- (define-key map [mode-line mouse-1]
- #'flycheck-error-list-mouse-switch-to-source)
- map)
- "Keymap for error list mode line.")
-
-(defun flycheck-error-list-propertized-source-name ()
- "Get the name of the current source buffer for the mode line.
-
-Propertize the name of the current source buffer for use in the
-mode line indication of `flycheck-error-list-mode'."
- (let ((name (replace-regexp-in-string
- (rx "%") "%%"
- (buffer-name flycheck-error-list-source-buffer)
- 'fixed-case 'literal)))
- (propertize name 'face 'mode-line-buffer-id
- 'mouse-face 'mode-line-highlight
- 'help-echo "mouse-1: switch to source"
- 'local-map flycheck-error-list-mode-line-map)))
-
-(defun flycheck-error-list-mouse-switch-to-source (event)
- "Switch to the error list source buffer of the EVENT window."
- (interactive "e")
- (save-selected-window
- (when (eventp event)
- (select-window (posn-window (event-start event))))
- (when (buffer-live-p flycheck-error-list-source-buffer)
- (switch-to-buffer flycheck-error-list-source-buffer))))
-
-(defun flycheck-get-error-list-window-list (&optional all-frames)
- "Get all windows displaying the error list.
-
-ALL-FRAMES specifies the frames to consider, as in
-`get-buffer-window-list'."
- (-when-let (buf (get-buffer flycheck-error-list-buffer))
- (get-buffer-window-list buf nil all-frames)))
-
-(defun flycheck-get-error-list-window (&optional all-frames)
- "Get a window displaying the error list, or nil if none.
-
-ALL-FRAMES specifies the frames to consider, as in
-`get-buffer-window'."
- (-when-let (buf (get-buffer flycheck-error-list-buffer))
- (get-buffer-window buf all-frames)))
-
-(defun flycheck-error-list-recenter-at (pos)
- "Recenter the error list at POS."
- (dolist (window (flycheck-get-error-list-window-list t))
- (with-selected-window window
- (goto-char pos)
- (let ((recenter-redisplay nil))
- (recenter)))))
-
-(defun flycheck-error-list-refresh ()
- "Refresh the current error list.
-
-Add all errors currently reported for the current
-`flycheck-error-list-source-buffer', and recenter the error
-list."
- ;; We only refresh the error list, when it is visible in a window, and we
- ;; select this window while reverting, because Tabulated List mode attempts to
- ;; recenter the error at the old location, so it must have the proper window
- ;; selected.
- (-when-let (window (flycheck-get-error-list-window t))
- (with-selected-window window
- (revert-buffer))
- (run-hooks 'flycheck-error-list-after-refresh-hook)
- (let ((preserve-pos (eq (current-buffer)
- (get-buffer flycheck-error-list-buffer))))
- ;; If the error list is the current buffer, don't recenter when
- ;; highlighting
- (flycheck-error-list-highlight-errors preserve-pos))))
-
-(defun flycheck-error-list-mode-line-filter-indicator ()
- "Create a string representing the current error list filter."
- (if flycheck-error-list-minimum-level
- (format " [>= %s]" flycheck-error-list-minimum-level)
- ""))
-
-(defun flycheck-error-list-set-filter (level)
- "Restrict the error list to errors at level LEVEL or higher.
-
-LEVEL is either an error level symbol, or nil, to remove the filter."
- (interactive
- (list (flycheck-read-error-level
- "Minimum error level (errors at lower levels will be hidden): ")))
- (when (and level (not (flycheck-error-level-p level)))
- (user-error "Invalid level: %s" level))
- (-when-let (buf (get-buffer flycheck-error-list-buffer))
- (with-current-buffer buf
- (setq-local flycheck-error-list-minimum-level level))
- (flycheck-error-list-refresh)
- (flycheck-error-list-recenter-at (point-min))))
-
-(defun flycheck-error-list-reset-filter (&optional refresh)
- "Remove local error filters and reset to the default filter.
-
-Interactively, or with non-nil REFRESH, refresh the error list."
- (interactive '(t))
- (kill-local-variable 'flycheck-error-list-minimum-level)
- (when refresh
- (flycheck-error-list-refresh)
- (flycheck-error-list-recenter-at (point-min))))
-
-(defun flycheck-error-list-apply-filter (errors)
- "Filter ERRORS according to `flycheck-error-list-minimum-level'."
- (-if-let* ((min-level flycheck-error-list-minimum-level)
- (min-severity (flycheck-error-level-severity min-level)))
- (seq-filter (lambda (err) (>= (flycheck-error-level-severity
- (flycheck-error-level err))
- min-severity))
- errors)
- errors))
-
-(defun flycheck-error-list-goto-error (&optional pos)
- "Go to the location of the error at POS in the error list.
-
-POS defaults to `point'."
- (interactive)
- (-when-let* ((error (tabulated-list-get-id pos)))
- (flycheck-jump-to-error error)))
-
-(defun flycheck-jump-to-error (error)
- "Go to the location of ERROR."
- (let* ((error-copy (copy-flycheck-error error))
- (filename (flycheck-error-filename error))
- (other-file-error (flycheck-relevant-error-other-file-p error))
- (buffer (if filename
- (find-file-noselect filename)
- (flycheck-error-buffer error))))
- (when (buffer-live-p buffer)
- (setf (flycheck-error-buffer error-copy) buffer)
- (flycheck-jump-in-buffer buffer error-copy)
- ;; When jumping to an error in another file, it may not have
- ;; this error available for highlighting yet, so we trigger a check
- ;; if necessary.
- (when other-file-error
- (with-current-buffer buffer
- ;; `seq-contains-p' is only in seq >= 2.21
- (unless (with-no-warnings
- (seq-contains flycheck-current-errors error-copy 'equal))
- (when flycheck-mode
- (flycheck-buffer))))))))
-
-(defun flycheck-jump-in-buffer (buffer error)
- "In BUFFER, jump to ERROR."
- ;; FIXME: we assume BUFFER and the buffer of ERROR are the same. We don't
- ;; need the first argument then.
- (if (eq (window-buffer) (get-buffer flycheck-error-list-buffer))
- ;; When called from within the error list, keep the error list,
- ;; otherwise replace the current buffer.
- (pop-to-buffer buffer 'other-window)
- (switch-to-buffer buffer))
- (let ((pos (flycheck-error-pos error)))
- (unless (eq (goto-char pos) (point))
- ;; If widening gets in the way of moving to the right place, remove it
- ;; and try again
- (widen)
- (goto-char pos)))
- ;; Re-highlight the errors. We have post-command-hook for that, but calls to
- ;; `flycheck-jump-in-buffer' that come from other buffers (e.g. from the error
- ;; list) won't trigger it.
- (flycheck-error-list-highlight-errors 'preserve-pos))
-
-(defun flycheck-error-list-explain-error (&optional pos)
- "Explain the error at POS in the error list.
-
-POS defaults to `point'."
- (interactive)
- (-when-let* ((error (tabulated-list-get-id pos))
- (explainer (flycheck-checker-get (flycheck-error-checker error)
- 'error-explainer))
- (explanation (funcall explainer error)))
- (flycheck-display-error-explanation explanation)))
-
-(defun flycheck-error-list-next-error-pos (pos &optional n)
- "Starting from POS get the N'th next error in the error list.
-
-N defaults to 1. If N is negative, search for the previous error
-instead.
-
-Get the beginning position of the N'th next error from POS, or
-nil, if there is no next error."
- (let ((n (or n 1)))
- (if (>= n 0)
- ;; Search forward
- (while (and pos (/= n 0))
- (setq n (1- n))
- (setq pos (next-single-property-change pos 'tabulated-list-id)))
- ;; Search backwards
- (while (/= n 0)
- (setq n (1+ n))
- ;; We explicitly give the limit here to explicitly have the minimum
- ;; point returned, to be able to move to the first error (which starts
- ;; at `point-min')
- (setq pos (previous-single-property-change pos 'tabulated-list-id
- nil (point-min)))))
- pos))
-
-(defun flycheck-error-list-previous-error (n)
- "Go to the N'th previous error in the error list."
- (interactive "P")
- (flycheck-error-list-next-error (- (or n 1))))
-
-(defun flycheck-error-list-next-error (n)
- "Go to the N'th next error in the error list."
- (interactive "P")
- (let ((pos (flycheck-error-list-next-error-pos (point) n)))
- (when (and pos (/= pos (point)))
- (goto-char pos)
- (save-selected-window
- ;; Keep the error list selected, so that the user can navigate errors by
- ;; repeatedly pressing n/p, without having to re-select the error list
- ;; window.
- (flycheck-error-list-goto-error)))))
-
-(defvar-local flycheck-error-list-highlight-overlays nil
- "Error highlight overlays in the error list buffer.")
-(put 'flycheck-error-list-highlight-overlays 'permanent-local t)
-
-(defun flycheck-error-list-highlight-errors (&optional preserve-pos)
- "Highlight errors in the error list.
-
-Highlight all errors in the error lists that are at point in the
-source buffer, and on the same line as point. Then recenter the
-error list to the highlighted error, unless PRESERVE-POS is
-non-nil."
- (when (get-buffer flycheck-error-list-buffer)
- (with-current-buffer flycheck-error-list-buffer
- (let ((current-errors
- (when (buffer-live-p flycheck-error-list-source-buffer)
- (with-current-buffer flycheck-error-list-source-buffer
- (flycheck-overlay-errors-in (line-beginning-position)
- (line-end-position))))))
- (let ((old-overlays flycheck-error-list-highlight-overlays)
- (min-point (point-max))
- (max-point (point-min)))
- ;; Display the new overlays first, to avoid re-display flickering
- (setq flycheck-error-list-highlight-overlays nil)
- (when current-errors
- (let ((next-error-pos (point-min)))
- (while next-error-pos
- (let* ((beg next-error-pos)
- (end (flycheck-error-list-next-error-pos beg))
- (err (tabulated-list-get-id beg)))
- (when (member err current-errors)
- (setq min-point (min min-point beg)
- max-point (max max-point beg))
- (let ((ov (make-overlay beg
- ;; Extend overlay to the beginning
- ;; of the next line, to highlight
- ;; the whole line
- (or end (point-max)))))
- (push ov flycheck-error-list-highlight-overlays)
- (setf (overlay-get ov 'flycheck-error-highlight-overlay)
- t)
- (setf (overlay-get ov 'face)
- 'flycheck-error-list-highlight)))
- (setq next-error-pos end)))))
- ;; Delete the old overlays
- (seq-do #'delete-overlay old-overlays)
- (when (and (not preserve-pos) current-errors)
- ;; Move point to the middle error
- (goto-char (+ min-point (/ (- max-point min-point) 2)))
- (beginning-of-line)
- ;; And recenter the error list at this position
- (flycheck-error-list-recenter-at (point))))))))
-
-(defun flycheck-list-errors ()
- "Show the error list for the current buffer."
- (interactive)
- (unless flycheck-mode
- (user-error "Flycheck mode not enabled"))
- ;; Create and initialize the error list
- (unless (get-buffer flycheck-error-list-buffer)
- (with-current-buffer (get-buffer-create flycheck-error-list-buffer)
- (flycheck-error-list-mode)))
- (flycheck-error-list-set-source (current-buffer))
- ;; Reset the error filter
- (flycheck-error-list-reset-filter)
- ;; Show the error list in a window, and re-select the old window
- (display-buffer flycheck-error-list-buffer)
- ;; Finally, refresh the error list to show the most recent errors
- (flycheck-error-list-refresh))
-
-(defalias 'list-flycheck-errors 'flycheck-list-errors)
-
-
-;;; Displaying errors in the current buffer
-(defun flycheck-display-errors (errors)
- "Display ERRORS using `flycheck-display-errors-function'."
- (when flycheck-display-errors-function
- (funcall flycheck-display-errors-function errors)))
-
-(defvar-local flycheck-display-error-at-point-timer nil
- "Timer to automatically show errors.")
-
-(defun flycheck-cancel-error-display-error-at-point-timer ()
- "Cancel the error display timer for the current buffer."
- (when flycheck-display-error-at-point-timer
- (cancel-timer flycheck-display-error-at-point-timer)
- (setq flycheck-display-error-at-point-timer nil)))
-
-(defun flycheck--error-display-tick ()
- "Return point and tick counter of current buffer."
- (cons (point) (buffer-modified-tick)))
-
-(defvar-local flycheck--last-error-display-tick nil
- "Value of `flycheck--error-display-tick' when errors were last displayed.")
-
-(defun flycheck-display-error-at-point ()
- "Display all the error messages at point."
- (interactive)
- ;; This function runs from a timer, so we must take care to not ignore any
- ;; errors
- (with-demoted-errors "Flycheck error display error: %s"
- (flycheck-cancel-error-display-error-at-point-timer)
- (setq flycheck--last-error-display-tick (flycheck--error-display-tick))
- (when flycheck-mode
- (-when-let (errors (flycheck-overlay-errors-at (point)))
- (flycheck-display-errors errors)))))
-
-(defun flycheck-display-error-at-point-soon ()
- "Display error messages at point, with a delay."
- (setq flycheck--last-error-display-tick nil)
- (flycheck-maybe-display-error-at-point-soon))
-
-(defun flycheck-maybe-display-error-at-point-soon ()
- "Display error message at point with a delay, unless already displayed."
- (flycheck-cancel-error-display-error-at-point-timer)
- (when (and (not (equal flycheck--last-error-display-tick
- (setq flycheck--last-error-display-tick
- (flycheck--error-display-tick))))
- (flycheck-overlays-at (point)))
- (setq flycheck-display-error-at-point-timer
- (run-at-time flycheck-display-errors-delay nil
- 'flycheck-display-error-at-point))))
-
-
-;;; Functions to display errors
-(defconst flycheck-error-message-buffer "*Flycheck error messages*"
- "The name of the buffer to show long error messages in.")
-
-(defun flycheck-error-message-buffer ()
- "Get the buffer object to show long error messages in.
-
-Get the buffer named by variable `flycheck-error-message-buffer',
-or nil if the buffer does not exist."
- (get-buffer flycheck-error-message-buffer))
-
-(defun flycheck-may-use-echo-area-p ()
- "Determine whether the echo area may be used.
-
-The echo area may be used if the cursor is not in the echo area,
-and if the echo area is not occupied by minibuffer input."
- (not (or cursor-in-echo-area (active-minibuffer-window))))
-
-(define-derived-mode flycheck-error-message-mode text-mode
- "Flycheck error messages"
- "Major mode for extended error messages.")
-
-(defun flycheck-display-error-messages (errors)
- "Display the messages of ERRORS.
-
-Concatenate all non-nil messages of ERRORS separated by empty
-lines, and display them with `display-message-or-buffer', which
-shows the messages either in the echo area or in a separate
-buffer, depending on the number of lines. See Info
-node `(elisp)Displaying Messages' for more information.
-
-In the latter case, show messages in the buffer denoted by
-variable `flycheck-error-message-buffer'."
- (when (and errors (flycheck-may-use-echo-area-p))
- (let ((messages (seq-map #'flycheck-error-format-message-and-id errors)))
- (display-message-or-buffer (string-join messages "\n\n")
- flycheck-error-message-buffer
- 'not-this-window)
- ;; We cannot rely on `display-message-or-buffer' returning the right
- ;; window. See URL `https://github.com/flycheck/flycheck/issues/1643'.
- (-when-let ((buf (get-buffer flycheck-error-message-buffer)))
- (with-current-buffer buf
- (unless (derived-mode-p 'flycheck-error-message-mode)
- (flycheck-error-message-mode)))))))
-
-(defun flycheck-display-error-messages-unless-error-list (errors)
- "Show messages of ERRORS unless the error list is visible.
-
-Like `flycheck-display-error-messages', but only if the error
-list (see `flycheck-list-errors') is not visible in any window in
-the current frame."
- (unless (flycheck-get-error-list-window 'current-frame)
- (flycheck-display-error-messages errors)))
-
-(defun flycheck-hide-error-buffer ()
- "Hide the Flycheck error buffer if necessary.
-
-Hide the error buffer if there is no error under point."
- (-when-let* ((buffer (flycheck-error-message-buffer))
- (window (get-buffer-window buffer)))
- (unless (flycheck-overlays-at (point))
- ;; save-selected-window prevents `quit-window' from changing the current
- ;; buffer (see https://github.com/flycheck/flycheck/issues/648).
- (save-selected-window
- (quit-window nil window)))))
-
-
-;;; Working with errors
-(defun flycheck-copy-errors-as-kill (pos &optional formatter)
- "Copy each error at POS into kill ring, using FORMATTER.
-
-FORMATTER is a function to turn an error into a string,
-defaulting to `flycheck-error-message'.
-
-Interactively, use `flycheck-error-format-message-and-id' as
-FORMATTER with universal prefix arg, and `flycheck-error-id' with
-normal prefix arg, i.e. copy the message and the ID with
-universal prefix arg, and only the id with normal prefix arg."
- (interactive (list (point)
- (pcase current-prefix-arg
- ((pred not) #'flycheck-error-message)
- ((pred consp) #'flycheck-error-format-message-and-id)
- (_ #'flycheck-error-id))))
- (let ((messages (delq nil (seq-map (or formatter #'flycheck-error-message)
- (flycheck-overlay-errors-at pos)))))
- (when messages
- (seq-do #'kill-new (reverse messages))
- (message (string-join messages "\n")))))
-
-(defun flycheck-explain-error-at-point ()
- "Display an explanation for the first explainable error at point.
-
-The first explainable error at point is the first error at point
-with a non-nil `:error-explainer' function defined in its
-checker. The `:error-explainer' function is then called with
-this error to produce the explanation to display."
- (interactive)
- (-when-let* ((first-error
- ;; Get the first error at point that has an `error-explainer'.
- (seq-find (lambda (error)
- (flycheck-checker-get
- (flycheck-error-checker error) 'error-explainer))
- (flycheck-overlay-errors-at (point))))
- (explainer
- (flycheck-checker-get (flycheck-error-checker first-error)
- 'error-explainer))
- (explanation (funcall explainer first-error)))
- (flycheck-display-error-explanation explanation)))
-
-(defconst flycheck-explain-error-buffer "*Flycheck error explanation*"
- "The name of the buffer to show error explanations.")
-
-(defun flycheck-display-error-explanation (explanation)
- "Display the EXPLANATION string in a help buffer."
- (with-help-window (get-buffer-create flycheck-explain-error-buffer)
- (princ explanation)))
-
-
-;;; Syntax checkers using external commands
-(defun flycheck-command-argument-p (arg)
- "Check whether ARG is a valid command argument."
- (pcase arg
- ((pred stringp) t)
- ((or `source `source-inplace `source-original) t)
- (`(,(or `source `source-inplace) ,suffix)
- (stringp suffix))
- ((or `temporary-directory `temporary-file-name) t)
- (`null-device t)
- (`(config-file ,option-name ,config-file-var)
- (and (stringp option-name)
- (symbolp config-file-var)))
- (`(config-file ,option-name ,config-file-var ,prepender)
- (and (stringp option-name)
- (symbolp config-file-var)
- (symbolp prepender)))
- (`(,(or `option `option-list) ,option-name ,option-var)
- (and (stringp option-name)
- (symbolp option-var)))
- (`(,(or `option `option-list) ,option-name ,option-var ,prepender)
- (and (stringp option-name)
- (symbolp option-var)
- (symbolp prepender)))
- (`(,(or `option `option-list) ,option-name ,option-var ,prepender ,filter)
- (and (stringp option-name)
- (symbolp option-var)
- (symbolp prepender)
- (symbolp filter)))
- (`(option-flag ,option-name ,option-var)
- (and (stringp option-name)
- (symbolp option-var)))
- (`(eval ,_) t)
- (_ nil)))
-
-(defun flycheck-compute-working-directory (checker)
- "Get the default working directory for CHECKER.
-
-Compute the value of `default-directory' for the invocation of
-the syntax checker command, by calling the function in the
-`working-directory' property of CHECKER, with CHECKER as sole
-argument, and returning its value. Signal an error if the
-function returns a non-existing working directory.
-
-If the property is undefined or if the function returns nil
-return the `default-directory' of the current buffer."
- (let* ((def-directory-fn (flycheck-checker-get checker 'working-directory))
- (directory (or (and def-directory-fn
- (funcall def-directory-fn checker))
- ;; Default to the `default-directory' of the current
- ;; buffer
- default-directory)))
- (unless (file-exists-p directory)
- (error ":working-directory %s of syntax checker %S does not exist"
- directory checker))
- directory))
-
-;;;###autoload
-(defun flycheck-define-command-checker (symbol docstring &rest properties)
- "Define SYMBOL as syntax checker to run a command.
-
-Define SYMBOL as generic syntax checker via
-`flycheck-define-generic-checker', which uses an external command
-to check the buffer. SYMBOL and DOCSTRING are the same as for
-`flycheck-define-generic-checker'.
-
-In addition to the properties understood by
-`flycheck-define-generic-checker', the following PROPERTIES
-constitute a command syntax checker. Unless otherwise noted, all
-properties are mandatory. Note that the default `:error-filter'
-of command checkers is `flycheck-sanitize-errors'.
-
-`:command COMMAND'
- The command to run for syntax checking.
-
- COMMAND is a list of the form `(EXECUTABLE [ARG ...])'.
-
- EXECUTABLE is a string with the executable of this syntax
- checker. It can be overridden with the variable
- `flycheck-SYMBOL-executable'. Note that this variable is
- NOT implicitly defined by this function. Use
- `flycheck-def-executable-var' to define this variable.
-
- Each ARG is an argument to the executable, either as string,
- or as special symbol or form for
- `flycheck-substitute-argument', which see.
-
-`:error-patterns PATTERNS'
- A list of patterns to parse the output of the `:command'.
-
- Each ITEM in PATTERNS is a list `(LEVEL SEXP ...)', where
- LEVEL is a Flycheck error level (see
- `flycheck-define-error-level'), followed by one or more RX
- `SEXP's which parse an error of that level and extract line,
- column, file name and the message.
-
- See `rx' for general information about RX, and
- `flycheck-rx-to-string' for some special RX forms provided
- by Flycheck.
-
- All patterns are applied in the order of declaration to the
- whole output of the syntax checker. Output already matched
- by a pattern will not be matched by subsequent patterns. In
- other words, the first pattern wins.
-
- This property is optional. If omitted, however, an
- `:error-parser' is mandatory.
-
-`:error-parser FUNCTION'
- A function to parse errors with.
-
- The function shall accept three arguments OUTPUT CHECKER
- BUFFER. OUTPUT is the syntax checker output as string,
- CHECKER the syntax checker that was used, and BUFFER a
- buffer object representing the checked buffer. The function
- must return a list of `flycheck-error' objects parsed from
- OUTPUT.
-
- This property is optional. If omitted, it defaults to
- `flycheck-parse-with-patterns'. In this case,
- `:error-patterns' is mandatory.
-
-`:standard-input t'
- Whether to send the buffer contents on standard input.
-
- If this property is given and has a non-nil value, send the
- contents of the buffer on standard input.
-
- Defaults to nil.
-
-Note that you may not give `:start', `:interrupt', and
-`:print-doc' for a command checker. You can give a custom
-`:verify' function, though, whose results will be appended to the
-default `:verify' function of command checkers."
- (declare (indent 1)
- (doc-string 2))
- (dolist (prop '(:start :interrupt :print-doc))
- (when (plist-get properties prop)
- (error "%s not allowed in definition of command syntax checker %s"
- prop symbol)))
-
- (unless (plist-get properties :error-filter)
- ;; Default to `flycheck-sanitize-errors' as error filter
- (setq properties (plist-put properties :error-filter
- #'flycheck-sanitize-errors)))
- (let ((verify-fn (plist-get properties :verify)))
- (setq properties
- (plist-put properties :verify
- (lambda (checker)
- (append (flycheck-verify-command-checker checker)
- (and verify-fn
- (funcall verify-fn checker)))))))
-
- (let ((command (plist-get properties :command))
- (patterns (plist-get properties :error-patterns))
- (parser (or (plist-get properties :error-parser)
- #'flycheck-parse-with-patterns))
- (enabled (plist-get properties :enabled))
- (standard-input (plist-get properties :standard-input)))
- (unless command
- (error "Missing :command in syntax checker %s" symbol))
- (unless (stringp (car command))
- (error "Command executable for syntax checker %s must be a string: %S"
- symbol (car command)))
- (dolist (arg (cdr command))
- (unless (flycheck-command-argument-p arg)
- (error "Invalid command argument %S in syntax checker %s" arg symbol)))
- (when (and (eq parser 'flycheck-parse-with-patterns)
- (not patterns))
- (error "Missing :error-patterns in syntax checker %s" symbol))
-
- (setq properties
- ;; Automatically disable command checkers if the executable does not
- ;; exist.
- (plist-put properties :enabled
- (lambda ()
- (and (flycheck-find-checker-executable symbol)
- (flycheck-temp-files-writable-p symbol)
- (or (not enabled) (funcall enabled))))))
-
- (apply #'flycheck-define-generic-checker symbol docstring
- :start #'flycheck-start-command-checker
- :interrupt #'flycheck-interrupt-command-checker
- :print-doc #'flycheck-command-checker-print-doc
- properties)
-
- ;; Pre-compile all errors patterns into strings, so that we don't need to do
- ;; that on each error parse
- (let ((patterns (seq-map (lambda (p)
- (cons (flycheck-rx-to-string `(and ,@(cdr p))
- 'no-group)
- (car p)))
- patterns)))
- (pcase-dolist (`(,prop . ,value)
- `((command . ,command)
- (error-parser . ,parser)
- (error-patterns . ,patterns)
- (standard-input . ,standard-input)))
- (setf (flycheck-checker-get symbol prop) value)))))
-
-(eval-and-compile
- ;; Make this function available during byte-compilation, since we need it
- ;; at macro expansion of `flycheck-def-executable-var'.
- (defun flycheck-checker-executable-variable (checker)
- "Get the executable variable of CHECKER.
-
-The executable variable is named `flycheck-CHECKER-executable'."
- (intern (format "flycheck-%s-executable" checker))))
-
-(defun flycheck-checker-default-executable (checker)
- "Get the default executable of CHECKER."
- (car (flycheck-checker-get checker 'command)))
-
-(defun flycheck-checker-executable (checker)
- "Get the command executable of CHECKER.
-
-The executable is either the value of the variable
-`flycheck-CHECKER-executable', or the default executable given in
-the syntax checker definition, if the variable is nil."
- (let ((var (flycheck-checker-executable-variable checker)))
- (or (and (boundp var) (symbol-value var))
- (flycheck-checker-default-executable checker))))
-
-(defun flycheck-find-checker-executable (checker)
- "Get the full path of the executable of CHECKER.
-
-Return the full absolute path to the executable of CHECKER, or
-nil if the executable does not exist."
- (funcall flycheck-executable-find (flycheck-checker-executable checker)))
-
-(defun flycheck-checker-arguments (checker)
- "Get the command arguments of CHECKER."
- (cdr (flycheck-checker-get checker 'command)))
-
-(defun flycheck-substitute-argument (arg checker)
- "Substitute ARG for CHECKER.
-
-Return a list of real arguments for the executable of CHECKER,
-substituted for the symbolic argument ARG. Single arguments,
-e.g. if ARG is a literal strings, are wrapped in a list.
-
-ARG may be one of the following forms:
-
-STRING
- Return ARG unchanged.
-
-`source', `source-inplace'
- Create a temporary file to check and return its path. With
- `source-inplace' create the temporary file in the same
- directory as the original file. The value of
- `flycheck-temp-prefix' is used as prefix of the file name.
-
- With `source', try to retain the non-directory component of
- the buffer's file name in the temporary file.
-
- `source' is the preferred way to pass the input file to a
- syntax checker. `source-inplace' should only be used if the
- syntax checker needs other files from the source directory,
- such as include files in C.
-
-`(source SUFFIX)', `(source-inplace SUFFIX)'
- Like `source' and `source-inplace', but ensure generated
- file names end with the given suffix. Use this when the
- checker requires that file names on its command line have a
- certain suffix (file extension).
-
-`source-original'
- Return the path of the actual file to check, or an empty
- string if the buffer has no file name.
-
- Note that the contents of the file may not be up to date
- with the contents of the buffer to check. Do not use this
- as primary input to a checker, unless absolutely necessary.
-
- When using this symbol as primary input to the syntax
- checker, add `flycheck-buffer-saved-p' to the `:predicate'.
-
-`temporary-directory'
- Create a unique temporary directory and return its path.
-
-`temporary-file-name'
- Return a unique temporary filename. The file is *not*
- created.
-
- To ignore the output of syntax checkers, try `null-device'
- first.
-
-`null-device'
- Return the value of `null-device', i.e the system null
- device.
-
- Use this option to ignore the output of a syntax checker.
- If the syntax checker cannot handle the null device, or
- won't write to an existing file, try `temporary-file-name'
- instead.
-
-`(config-file OPTION VARIABLE [PREPEND-FN])'
- Search the configuration file bound to VARIABLE with
- `flycheck-locate-config-file' and return a list of arguments
- that pass this configuration file to the syntax checker, or
- nil if the configuration file was not found.
-
- PREPEND-FN is called with the OPTION and the located
- configuration file, and should return OPTION prepended
- before the file, either a string or as list. If omitted,
- PREPEND-FN defaults to `list'.
-
-`(option OPTION VARIABLE [PREPEND-FN [FILTER]])'
- Retrieve the value of VARIABLE and return a list of
- arguments that pass this value as value for OPTION to the
- syntax checker.
-
- PREPEND-FN is called with the OPTION and the value of
- VARIABLE, and should return OPTION prepended before the
- file, either a string or as list. If omitted, PREPEND-FN
- defaults to `list'.
-
- FILTER is an optional function to be applied to the value of
- VARIABLE before prepending. This function must return nil
- or a string. In the former case, return nil. In the latter
- case, return a list of arguments as described above.
-
-`(option-list OPTION VARIABLE [PREPEND-FN [FILTER]])'
- Retrieve the value of VARIABLE, which must be a list,
- and prepend OPTION before each item in this list, using
- PREPEND-FN.
-
- PREPEND-FN is called with the OPTION and each item of the
- list as second argument, and should return OPTION prepended
- before the item, either as string or as list. If omitted,
- PREPEND-FN defaults to `list'.
-
- FILTER is an optional function to be applied to each item in
- the list before prepending OPTION. It shall return the
- option value for each item as string, or nil, if the item is
- to be ignored.
-
-`(option-flag OPTION VARIABLE)'
- Retrieve the value of VARIABLE and return OPTION, if the
- value is non-nil. Otherwise return nil.
-
-`(eval FORM)'
- Return the result of evaluating FORM in the buffer to be
- checked. FORM must either return a string or a list of
- strings, or nil to indicate that nothing should be
- substituted for CELL. For all other return types, signal an
- error
-
- _No_ further substitutions are performed, neither in FORM
- before it is evaluated, nor in the result of evaluating
- FORM.
-
-In all other cases, signal an error.
-
-Note that substitution is *not* recursive. No symbols or cells
-are substituted within the body of cells!"
- (pcase arg
- ((pred stringp) (list arg))
- (`source
- (list (flycheck-save-buffer-to-temp #'flycheck-temp-file-system)))
- (`source-inplace
- (list (flycheck-save-buffer-to-temp #'flycheck-temp-file-inplace)))
- (`(source ,suffix)
- (list (flycheck-save-buffer-to-temp
- (lambda (filename) (flycheck-temp-file-system filename suffix)))))
- (`(source-inplace ,suffix)
- (list (flycheck-save-buffer-to-temp
- (lambda (filename) (flycheck-temp-file-inplace filename suffix)))))
- (`source-original (list (or (buffer-file-name) "")))
- (`temporary-directory (list (flycheck-temp-dir-system)))
- (`temporary-file-name
- (let ((directory (flycheck-temp-dir-system)))
- (list (make-temp-name (expand-file-name "flycheck" directory)))))
- (`null-device (list null-device))
- (`(config-file ,option-name ,file-name-var)
- (-when-let* ((value (symbol-value file-name-var))
- (file-name (flycheck-locate-config-file value checker)))
- (flycheck-prepend-with-option option-name (list file-name))))
- (`(config-file ,option-name ,file-name-var ,prepend-fn)
- (-when-let* ((value (symbol-value file-name-var))
- (file-name (flycheck-locate-config-file value checker)))
- (flycheck-prepend-with-option option-name (list file-name) prepend-fn)))
- (`(option ,option-name ,variable)
- (-when-let (value (symbol-value variable))
- (unless (stringp value)
- (error "Value %S of %S for option %s is not a string"
- value variable option-name))
- (flycheck-prepend-with-option option-name (list value))))
- (`(option ,option-name ,variable ,prepend-fn)
- (-when-let (value (symbol-value variable))
- (unless (stringp value)
- (error "Value %S of %S for option %s is not a string"
- value variable option-name))
- (flycheck-prepend-with-option option-name (list value) prepend-fn)))
- (`(option ,option-name ,variable ,prepend-fn ,filter)
- (-when-let (value (funcall filter (symbol-value variable)))
- (unless (stringp value)
- (error "Value %S of %S (filter: %S) for option %s is not a string"
- value variable filter option-name))
- (flycheck-prepend-with-option option-name (list value) prepend-fn)))
- (`(option-list ,option-name ,variable)
- (let ((value (symbol-value variable)))
- (unless (and (listp value) (seq-every-p #'stringp value))
- (error "Value %S of %S for option %S is not a list of strings"
- value variable option-name))
- (flycheck-prepend-with-option option-name value)))
- (`(option-list ,option-name ,variable ,prepend-fn)
- (let ((value (symbol-value variable)))
- (unless (and (listp value) (seq-every-p #'stringp value))
- (error "Value %S of %S for option %S is not a list of strings"
- value variable option-name))
- (flycheck-prepend-with-option option-name value prepend-fn)))
- (`(option-list ,option-name ,variable ,prepend-fn ,filter)
- (let ((value (delq nil (seq-map filter (symbol-value variable)))))
- (unless (and (listp value) (seq-every-p #'stringp value))
- (error "Value %S of %S for option %S is not a list of strings"
- value variable option-name))
- (flycheck-prepend-with-option option-name value prepend-fn)))
- (`(option-flag ,option-name ,variable)
- (when (symbol-value variable)
- (list option-name)))
- (`(eval ,form)
- (let ((result (eval form)))
- (cond
- ((and (listp result) (seq-every-p #'stringp result)) result)
- ((stringp result) (list result))
- (t (error "Invalid result from evaluation of %S: %S" form result)))))
- (_ (error "Unsupported argument %S" arg))))
-
-(defun flycheck-checker-substituted-arguments (checker)
- "Get the substituted arguments of a CHECKER.
-
-Substitute each argument of CHECKER using
-`flycheck-substitute-argument'. This replaces any special
-symbols in the command."
- (apply #'append
- (seq-map (lambda (arg) (flycheck-substitute-argument arg checker))
- (flycheck-checker-arguments checker))))
-
-(defun flycheck--process-send-buffer-contents-chunked (process)
- "Send contents of current buffer to PROCESS in small batches.
-
-Send the entire buffer to the standard input of PROCESS in chunks
-of 4096 characters. Chunking is done in Emacs Lisp, hence this
-function is probably far less efficient than
-`send-process-region'. Use only when required."
- (let ((from (point-min)))
- (while (< from (point-max))
- (let ((to (min (+ from 4096) (point-max))))
- (process-send-region process from to)
- (setq from to)))))
-
-(defvar flycheck-chunked-process-input
- ;; Chunk process output on Windows to work around
- ;; https://github.com/flycheck/flycheck/issues/794 and
- ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22344. The presence of
- ;; `w32-pipe-buffer-size' denotes an Emacs version (> Emacs 25.1) where pipe
- ;; writes on Windows are fixed.
- ;;
- ;; TODO: Remove option and chunking when dropping Emacs 24 support, see
- ;; https://github.com/flycheck/flycheck/issues/856
- (and (eq system-type 'windows-nt) (not (boundp 'w32-pipe-buffer-size)))
- "If non-nil send process input in small chunks.
-
-If this variable is non-nil `flycheck-process-send-buffer' sends
-buffer contents in small chunks.
-
-Defaults to nil, except on Windows to work around Emacs bug
-#22344.")
-
-(defun flycheck-process-send-buffer (process)
- "Send all contents of current buffer to PROCESS.
-
-Sends all contents of the current buffer to the standard input of
-PROCESS, and terminates standard input with EOF.
-
-If `flycheck-chunked-process-input' is non-nil, send buffer
-contents in chunks via
-`flycheck--process-send-buffer-contents-chunked', which see.
-Otherwise use `process-send-region' to send all contents at once
-and rely on Emacs' own buffering and chunking."
- (save-restriction
- (widen)
- (if flycheck-chunked-process-input
- (flycheck--process-send-buffer-contents-chunked process)
- (process-send-region process (point-min) (point-max))))
- (process-send-eof process))
-
-(defun flycheck--wrap-command (prog args)
- "Wrap PROG and ARGS using `flycheck-command-wrapper-function'."
- ;; We don't call `flycheck-executable-find' on the output of the wrapper
- ;; function, since it might not expect it (an executable-find function
- ;; designed to find binaries in a sandbox could get confused if we asked it
- ;; about the sandboxing program itself).
- (funcall flycheck-command-wrapper-function (cons prog args)))
-
-(defun flycheck-start-command-checker (checker callback)
- "Start a command CHECKER with CALLBACK."
- (let (process)
- (condition-case err
- (let* ((program (flycheck-find-checker-executable checker))
- (args (flycheck-checker-substituted-arguments checker))
- (command (flycheck--wrap-command program args))
- (sentinel-events nil)
- ;; Use pipes to receive output from the syntax checker. They are
- ;; more efficient and more robust than PTYs, which Emacs uses by
- ;; default, and since we don't need any job control features, we
- ;; can easily use pipes.
- (process-connection-type nil))
- ;; We pass do not associate the process with any buffer, by
- ;; passing nil for the BUFFER argument of `start-process'.
- ;; Instead, we just remember the buffer being checked in a
- ;; process property (see below). This neatly avoids all
- ;; side-effects implied by attached a process to a buffer, which
- ;; may cause conflicts with other packages.
- ;;
- ;; See https://github.com/flycheck/flycheck/issues/298 for an
- ;; example for such a conflict.
- (setq process (apply 'start-process (format "flycheck-%s" checker)
- nil command))
- ;; Process sentinels can be called while sending input to the process.
- ;; We want to record errors raised by process-send before calling
- ;; `flycheck-handle-signal', so initially just accumulate events.
- (setf (process-sentinel process)
- (lambda (_ event) (push event sentinel-events)))
- (setf (process-filter process) #'flycheck-receive-checker-output)
- (set-process-query-on-exit-flag process nil)
- ;; Remember the syntax checker, the buffer and the callback
- (process-put process 'flycheck-checker checker)
- (process-put process 'flycheck-callback callback)
- (process-put process 'flycheck-buffer (current-buffer))
- ;; The default directory is bound in the `flycheck-syntax-check-start'
- ;; function.
- (process-put process 'flycheck-working-directory default-directory)
- ;; Track the temporaries created by argument substitution in the
- ;; process itself, to get rid of the global state ASAP.
- (process-put process 'flycheck-temporaries flycheck-temporaries)
- (setq flycheck-temporaries nil)
- ;; Send the buffer to the process on standard input, if enabled.
- (when (flycheck-checker-get checker 'standard-input)
- (condition-case err
- (flycheck-process-send-buffer process)
- ;; Some checkers exit before reading all input, causing errors
- ;; such as a `file-error' for a closed pipe, or a plain “no longer
- ;; connected to pipe; closed it†error for a disconnection. We
- ;; report them if needed in `flycheck-finish-checker-process' (see
- ;; `https://github.com/flycheck/flycheck/issues/1278').
- (error (process-put process 'flycheck-error err))))
- ;; Set the actual sentinel and process any events that might have
- ;; happened while we were sending input.
- (setf (process-sentinel process) #'flycheck-handle-signal)
- (dolist (event (nreverse sentinel-events))
- (flycheck-handle-signal process event))
- ;; Return the process.
- process)
- (error
- ;; In case of error, clean up our resources, and report the error back to
- ;; Flycheck.
- (flycheck-safe-delete-temporaries)
- (when process
- ;; No need to explicitly delete the temporary files of the process,
- ;; because deleting runs the sentinel, which will delete them anyway.
- (delete-process process))
- (signal (car err) (cdr err))))))
-
-(defun flycheck-interrupt-command-checker (_checker process)
- "Interrupt a PROCESS."
- ;; Deleting the process always triggers the sentinel, which does the cleanup
- (when process
- (delete-process process)))
-
-(defun flycheck-command-checker-print-doc (checker)
- "Print additional documentation for a command CHECKER."
- (let ((executable (flycheck-checker-default-executable checker))
- (config-file-var (flycheck-checker-get checker 'config-file-var))
- (option-vars (seq-sort #'string<
- (flycheck-checker-get checker 'option-vars))))
- (princ "\n")
-
- (let ((doc-start (with-current-buffer standard-output (point-max))))
- ;; Track the start of our documentation so that we can re-indent it
- ;; properly
- (princ " This syntax checker executes \"")
- (princ executable)
- (princ "\"")
- (when config-file-var
- (princ ", using a configuration file from `")
- (princ (symbol-name config-file-var))
- (princ "'"))
- (princ ". The executable can be overridden with `")
- (princ (symbol-name (flycheck-checker-executable-variable checker)))
- (princ "'.")
-
- (with-current-buffer standard-output
- (save-excursion
- (fill-region-as-paragraph doc-start (point-max)))))
- (princ "\n")
- (when option-vars
- (princ
- "\n This syntax checker can be configured with these options:\n\n")
- (dolist (var option-vars)
- (princ (format " * `%s'\n" var))))))
-
-(defun flycheck-verify-command-checker (checker)
- "Verify a command CHECKER in the current buffer.
-
-Return a list of `flycheck-verification-result' objects for
-CHECKER."
- (let ((executable (flycheck-find-checker-executable checker))
- (config-file-var (flycheck-checker-get checker 'config-file-var)))
- `(
- ,(flycheck-verification-result-new
- :label "executable"
- :message (if executable (format "Found at %s" executable) "Not found")
- :face (if executable 'success '(bold error)))
- ,@(when config-file-var
- (let* ((value (symbol-value config-file-var))
- (path (and value (flycheck-locate-config-file value checker))))
- (list (flycheck-verification-result-new
- :label "configuration file"
- :message (if path (format "Found at %S" path) "Not found")
- :face (if path 'success 'warning)))))
- ,@(when (not (flycheck-temp-files-writable-p checker))
- (list (flycheck-verification-result-new
- :label "temp directory"
- :message (format "%s is not writable"
- (flycheck-temp-directory checker))
- :face 'error))))))
-
-
-;;; Process management for command syntax checkers
-(defun flycheck-receive-checker-output (process output)
- "Receive a syntax checking PROCESS OUTPUT."
- (push output (process-get process 'flycheck-pending-output)))
-
-(defun flycheck-get-output (process)
- "Get the complete output of PROCESS."
- (with-demoted-errors "Error while retrieving process output: %S"
- (let ((pending-output (process-get process 'flycheck-pending-output)))
- (apply #'concat (nreverse pending-output)))))
-
-(defun flycheck-handle-signal (process _event)
- "Handle a signal from the syntax checking PROCESS.
-
-_EVENT is ignored."
- (when (memq (process-status process) '(signal exit))
- (let ((files (process-get process 'flycheck-temporaries))
- (buffer (process-get process 'flycheck-buffer))
- (callback (process-get process 'flycheck-callback))
- (cwd (process-get process 'flycheck-working-directory))
- (err (process-get process 'flycheck-error)))
- ;; Delete the temporary files
- (seq-do #'flycheck-safe-delete files)
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (condition-case err
- (pcase (process-status process)
- (`signal
- (funcall callback 'interrupted))
- (`exit
- (flycheck-finish-checker-process
- (process-get process 'flycheck-checker)
- (or err (process-exit-status process))
- files
- (flycheck-get-output process) callback cwd)))
- ((debug error)
- (funcall callback 'errored (error-message-string err)))))))))
-
-(defun flycheck-finish-checker-process
- (checker exit-status files output callback cwd)
- "Finish a checker process from CHECKER with EXIT-STATUS.
-
-EXIT-STATUS can be a number or an arbitrary form (if it is not 0,
-a `suspicious' status is reported to CALLBACK).
-
-FILES is a list of files given as input to the checker. OUTPUT
-is the output of the syntax checker. CALLBACK is the status
-callback to use for reporting.
-
-Parse the OUTPUT and report an appropriate error status.
-
-Resolve all errors in OUTPUT using CWD as working directory."
- (let ((errors (flycheck-parse-output output checker (current-buffer))))
- (when (and (not (equal exit-status 0)) (null errors))
- ;; Warn about a suspicious result from the syntax checker. We do right
- ;; after parsing the errors, before filtering, because a syntax checker
- ;; might report errors from other files (e.g. includes) even if there
- ;; are no errors in the file being checked.
- (funcall callback 'suspicious
- (format "Flycheck checker %S returned %S, but \
-its output contained no errors: %s\nTry installing a more \
-recent version of %S, and please open a bug report if the issue \
-persists in the latest release. Thanks!" checker exit-status
-output checker)))
- (funcall callback 'finished
- ;; Fix error file names, by substituting them backwards from the
- ;; temporaries.
- (seq-map (lambda (e) (flycheck-fix-error-filename e files cwd))
- errors))))
-
-
-;;; Executables of command checkers.
-(defmacro flycheck-def-executable-var (checker default-executable)
- "Define the executable variable for CHECKER.
-
-DEFAULT-EXECUTABLE is the default executable. It is only used in
-the docstring of the variable.
-
-The variable is defined with `defcustom' in the
-`flycheck-executables' group. It's also defined to be risky as
-file-local variable, to avoid arbitrary executables being used
-for syntax checking."
- (let ((executable-var (flycheck-checker-executable-variable checker)))
- `(progn
- (defcustom ,executable-var nil
- ,(format "The executable of the %s syntax checker.
-
-Either a string containing the name or the path of the
-executable, or nil to use the default executable from the syntax
-checker declaration.
-
-The default executable is %S." checker default-executable)
- :type '(choice (const :tag "Default executable" nil)
- (string :tag "Name or path"))
- :group 'flycheck-executables
- :risky t))))
-
-(defun flycheck-set-checker-executable (checker &optional executable)
- "Set the executable of CHECKER in the current buffer.
-
-CHECKER is a syntax checker symbol. EXECUTABLE is a string with
-the name of an executable or the path to an executable file, which
-is to be used as executable for CHECKER. If omitted or nil,
-reset the executable of CHECKER.
-
-Interactively, prompt for a syntax checker and an executable
-file, and set the executable of the selected syntax checker.
-With prefix arg, prompt for a syntax checker only, and reset the
-executable of the select checker to the default.
-
-Set the executable variable of CHECKER, that is,
-`flycheck-CHECKER-executable' to EXECUTABLE. Signal
-`user-error', if EXECUTABLE does not denote a command or an
-executable file.
-
-This command is intended for interactive use only. In Lisp, just
-`let'-bind the corresponding variable, or set it directly. Use
-`flycheck-checker-executable-variable' to obtain the executable
-variable symbol for a syntax checker."
- (declare (interactive-only "Set the executable variable directly instead"))
- (interactive
- (let* ((checker (flycheck-read-checker "Syntax checker: "))
- (default-executable (flycheck-checker-default-executable checker))
- (executable (if current-prefix-arg
- nil
- (read-file-name "Executable: " nil default-executable
- nil nil flycheck-executable-find))))
- (list checker executable)))
- (when (and executable (not (funcall flycheck-executable-find executable)))
- (user-error "%s is no executable" executable))
- (let ((variable (flycheck-checker-executable-variable checker)))
- (set (make-local-variable variable) executable)))
-
-
-;;; Configuration files and options for command checkers
-(defun flycheck-register-config-file-var (var checkers)
- "Register VAR as config file var for CHECKERS.
-
-CHECKERS is a single syntax checker or a list thereof."
- (when (symbolp checkers)
- (setq checkers (list checkers)))
- (dolist (checker checkers)
- (setf (flycheck-checker-get checker 'config-file-var) var)))
-
-;;;###autoload
-(defmacro flycheck-def-config-file-var (symbol checker &optional file-name
- &rest custom-args)
- "Define SYMBOL as config file variable for CHECKER, with default FILE-NAME.
-
-SYMBOL is declared as customizable variable using `defcustom', to
-provide configuration files for the given syntax CHECKER.
-CUSTOM-ARGS are forwarded to `defcustom'.
-
-FILE-NAME is the initial value of the new variable. If omitted,
-the default value is nil. It can be either a string or a list of
-strings.
-
-Use this together with the `config-file' form in the `:command'
-argument to `flycheck-define-checker'."
- (declare (indent 3))
- `(progn
- (defcustom ,symbol ,file-name
- ,(format "Configuration file for `%s'.
-
-If set to a string, locate the configuration file using the
-functions from `flycheck-locate-config-file-functions'. If the
-file is found pass it to the syntax checker as configuration
-file.
-
-If no configuration file is found, or if this variable is set to
-nil, invoke the syntax checker without a configuration file.
-
-Use this variable as file-local variable if you need a specific
-configuration file for a buffer." checker)
- :type '(choice (const :tag "No configuration file" nil)
- (string :tag "File name or path")
- (repeat :tag "File names or paths" string))
- :safe #'flycheck-string-or-string-list-p
- :group 'flycheck-config-files
- ,@custom-args)
- (flycheck-register-config-file-var ',symbol ',checker)))
-
-(defun flycheck-locate-config-file (filenames checker)
- "Locate the configuration file for CHECKER, based on FILENAMES.
-
-FILENAMES can be either a single file, or a list. Each filename
-is passed to all `flycheck-locate-config-file-functions', until
-one returns non-nil.
-
-Return the absolute path of the configuration file, or nil if no
-configuration file was found."
- (when (stringp filenames)
- (setq filenames (list filenames)))
- (let ((config-file nil))
- (while (and filenames (null config-file))
- (setq config-file (run-hook-with-args-until-success
- 'flycheck-locate-config-file-functions
- (pop filenames) checker)))
- (when (and config-file (file-exists-p config-file))
- config-file)))
-
-(defun flycheck-locate-config-file-by-path (filepath _checker)
- "Locate a configuration file by a FILEPATH.
-
-If FILEPATH is a contains a path separator, expand it against the
-default directory and return it if it points to an existing file.
-Otherwise return nil.
-
-_CHECKER is ignored."
- ;; If the path is just a plain file name, skip it.
- (unless (string= (file-name-nondirectory filepath) filepath)
- (let ((file-name (expand-file-name filepath)))
- (and (file-exists-p file-name) file-name))))
-
-(defun flycheck-locate-config-file-ancestor-directories (filename _checker)
- "Locate a configuration FILENAME in ancestor directories.
-
-If the current buffer has a file name, search FILENAME in the
-directory of the current buffer and all ancestors thereof (see
-`locate-dominating-file'). If the file is found, return its
-absolute path. Otherwise return nil.
-
-_CHECKER is ignored."
- (-when-let* ((basefile (buffer-file-name))
- (directory (locate-dominating-file basefile filename)))
- (expand-file-name filename directory)))
-
-(defun flycheck-locate-config-file-home (filename _checker)
- "Locate a configuration FILENAME in the home directory.
-
-Return the absolute path, if FILENAME exists in the user's home
-directory, or nil otherwise."
- (let ((path (expand-file-name filename "~")))
- (when (file-exists-p path)
- path)))
-
-(seq-do (apply-partially #'custom-add-frequent-value
- 'flycheck-locate-config-file-functions)
- '(flycheck-locate-config-file-by-path
- flycheck-locate-config-file-ancestor-directories
- flycheck-locate-config-file-home))
-
-(defun flycheck-register-option-var (var checkers)
- "Register an option VAR with CHECKERS.
-
-VAR is an option symbol, and CHECKERS a syntax checker symbol or
-a list thereof. Register VAR with all CHECKERS so that it
-appears in the help output."
- (when (symbolp checkers)
- (setq checkers (list checkers)))
- (dolist (checker checkers)
- (cl-pushnew var (flycheck-checker-get checker 'option-vars))))
-
-;;;###autoload
-(defmacro flycheck-def-option-var (symbol init-value checkers docstring
- &rest custom-args)
- "Define SYMBOL as option variable with INIT-VALUE for CHECKER.
-
-SYMBOL is declared as customizable variable using `defcustom', to
-provide an option for the given syntax CHECKERS (a checker or a
-list of checkers). INIT-VALUE is the initial value of the
-variable, and DOCSTRING is its docstring. CUSTOM-ARGS are
-forwarded to `defcustom'.
-
-Use this together with the `option', `option-list' and
-`option-flag' forms in the `:command' argument to
-`flycheck-define-checker'."
- (declare (indent 3)
- (doc-string 4))
- `(progn
- (defcustom ,symbol ,init-value
- ,(concat docstring "
-
-This variable is an option for the following syntax checkers:
-
-"
- (mapconcat (lambda (c) (format " - `%s'" c))
- (if (symbolp checkers) (list checkers) checkers)
- "\n"))
- :group 'flycheck-options
- ,@custom-args)
- (flycheck-register-option-var ',symbol ',checkers)))
-
-(defun flycheck-option-int (value)
- "Convert an integral option VALUE to a string.
-
-If VALUE is nil, return nil. Otherwise return VALUE converted to
-a string."
- (and value (number-to-string value)))
-
-(defun flycheck-option-symbol (value)
- "Convert a symbol option VALUE to string.
-
-If VALUE is nil return nil. Otherwise return VALUE converted to
-a string."
- (and value (symbol-name value)))
-
-(defun flycheck-option-comma-separated-list (value &optional separator filter)
- "Convert VALUE into a list separated by SEPARATOR.
-
-SEPARATOR is a string to separate items in VALUE, defaulting to
-\",\". FILTER is an optional function, which takes a single
-argument and returns either a string or nil.
-
-If VALUE is a list, apply FILTER to each item in VALUE, remove
-all nil items, and return a single string of all remaining items
-separated by SEPARATOR.
-
-Otherwise, apply FILTER to VALUE and return the result.
-SEPARATOR is ignored in this case."
- (let ((filter (or filter #'identity))
- (separator (or separator ",")))
- (if (listp value)
- (-when-let (value (delq nil (seq-map filter value)))
- (string-join value separator))
- (funcall filter value))))
-
-(defmacro flycheck-def-args-var (symbol checkers &rest custom-args)
- "Define SYMBOL as argument variable for CHECKERS.
-
-SYMBOL is declared as customizable, risky and buffer-local
-variable using `defcustom' to provide an option for arbitrary
-arguments for the given syntax CHECKERS (either a single checker
-or a list of checkers). CUSTOM-ARGS is forwarded to `defcustom'.
-
-Use the `eval' form to splice this variable into the
-`:command'."
- (declare (indent 2))
- `(flycheck-def-option-var ,symbol nil ,checkers
- "A list of additional command line arguments.
-
-The value of this variable is a list of strings with additional
-command line arguments."
- :risky t
- :type '(repeat (string :tag "Argument"))
- ,@custom-args))
-
-
-;;; Command syntax checkers as compile commands
-(defun flycheck-checker-pattern-to-error-regexp (pattern)
- "Convert PATTERN into an error regexp for compile.el.
-
-Return a list representing PATTERN, suitable as element in
-`compilation-error-regexp-alist'."
- (let* ((regexp (car pattern))
- (level (cdr pattern))
- (level-no (flycheck-error-level-compilation-level level)))
- `(,regexp 1 (2 . 6) (3 . 7) ,level-no)))
-
-(defun flycheck-checker-compilation-error-regexp-alist (checker)
- "Convert error patterns of CHECKER for use with compile.el.
-
-Return an alist of all error patterns of CHECKER, suitable for
-use with `compilation-error-regexp-alist'."
- (seq-map #'flycheck-checker-pattern-to-error-regexp
- (flycheck-checker-get checker 'error-patterns)))
-
-(defun flycheck--substitute-shell-command-argument (arg checker)
- "Substitute ARG for CHECKER.
-
-Like `flycheck-substitute-argument', except for source,
-source-inplace, and source-original."
- (if (memq arg '(source source-inplace source-original))
- (list buffer-file-name)
- (flycheck-substitute-argument arg checker)))
-
-(defun flycheck--checker-substituted-shell-command-arguments (checker)
- "Get the substituted arguments of a CHECKER to run as a shell command.
-
-Substitute each argument of CHECKER using
-`flycheck-substitute-shell-command-argument'."
- (apply #'append
- (seq-map (lambda (arg)
- (flycheck--substitute-shell-command-argument arg checker))
- (flycheck-checker-arguments checker))))
-
-(defun flycheck-checker-shell-command (checker)
- "Get a shell command for CHECKER.
-
-Perform substitution in the arguments of CHECKER, but with
-`flycheck--substitute-shell-command-argument'.
-
-Return the command of CHECKER as single string, suitable for
-shell execution."
- ;; Note: Do NOT use `combine-and-quote-strings' here. Despite it's name it
- ;; does not properly quote shell arguments, and actually breaks for special
- ;; characters. See https://github.com/flycheck/flycheck/pull/522
- (let* ((args (flycheck--checker-substituted-shell-command-arguments checker))
- (program
- (or (flycheck-find-checker-executable checker)
- (user-error "Cannot find `%s' using `flycheck-executable-find'"
- (flycheck-checker-executable checker))))
- (wrapped (flycheck--wrap-command program args))
- (abs-prog
- ;; The executable path returned by `flycheck-command-wrapper-function'
- ;; may not be absolute, so expand it here. See URL
- ;; `https://github.com/flycheck/flycheck/issues/1461'.
- (or (executable-find (car wrapped))
- (user-error "Cannot find `%s' using `executable-find'"
- (car wrapped))))
- (command (mapconcat #'shell-quote-argument
- (cons abs-prog (cdr wrapped)) " ")))
- (if (flycheck-checker-get checker 'standard-input)
- ;; If the syntax checker expects the source from standard input add an
- ;; appropriate shell redirection
- (concat command " < " (shell-quote-argument (buffer-file-name)))
- command)))
-
-(defun flycheck-compile-name (_name)
- "Get a name for a Flycheck compilation buffer.
-
-_NAME is ignored."
- (format "*Flycheck %s*" (buffer-file-name)))
-
-(defun flycheck-compile (checker)
- "Run CHECKER via `compile'.
-
-CHECKER must be a valid syntax checker. Interactively, prompt
-for a syntax checker to run.
-
-Instead of highlighting errors in the buffer, this command pops
-up a separate buffer with the entire output of the syntax checker
-tool, just like `compile' (\\[compile])."
- (interactive
- (let ((default (flycheck-get-checker-for-buffer)))
- (list (flycheck-read-checker "Run syntax checker as compile command: "
- (when (flycheck-checker-get default 'command)
- default)
- 'command))))
- (unless (flycheck-valid-checker-p checker)
- (user-error "%S is not a valid syntax checker" checker))
- (unless (buffer-file-name)
- (user-error "Cannot compile a buffer without a backing file"))
- (unless (flycheck-may-use-checker checker)
- (user-error "Cannot use syntax checker %S in this buffer" checker))
- (unless (flycheck-checker-executable checker)
- (user-error "Cannot run checker %S as shell command" checker))
- (save-some-buffers)
- (let* ((default-directory (flycheck-compute-working-directory checker))
- (command (flycheck-checker-shell-command checker))
- (buffer (compilation-start command nil #'flycheck-compile-name)))
- (with-current-buffer buffer
- (setq-local compilation-error-regexp-alist
- (flycheck-checker-compilation-error-regexp-alist checker)))))
-
-
-;;; General error parsing for command checkers
-(defun flycheck-parse-output (output checker buffer)
- "Parse OUTPUT from CHECKER in BUFFER.
-
-OUTPUT is a string with the output from the checker symbol
-CHECKER. BUFFER is the buffer which was checked.
-
-Return the errors parsed with the error patterns of CHECKER."
- (funcall (flycheck-checker-get checker 'error-parser) output checker buffer))
-
-(defun flycheck-fix-error-filename (err buffer-files cwd)
- "Fix the file name of ERR from BUFFER-FILES.
-
-Resolves error file names relative to CWD directory.
-
-Make the file name of ERR absolute. If the absolute file name of
-ERR is in BUFFER-FILES, replace it with the value of variable
-`buffer-file-name'."
- (flycheck-error-with-buffer err
- (-when-let (filename (flycheck-error-filename err))
- (when (seq-some (apply-partially #'flycheck-same-files-p
- (expand-file-name filename cwd))
- buffer-files)
- (setf (flycheck-error-filename err) buffer-file-name)
- (when (and buffer-file-name (flycheck-error-message err))
- (setf (flycheck-error-message err)
- (replace-regexp-in-string
- (regexp-quote filename) buffer-file-name
- (flycheck-error-message err) 'fixed-case 'literal))))))
- err)
-
-
-;;; Error parsers for command syntax checkers
-(defun flycheck-parse-xml-region (beg end)
- "Parse the xml region between BEG and END.
-
-Wrapper around `xml-parse-region' which transforms the return
-value of this function into one compatible to
-`libxml-parse-xml-region' by simply returning the first element
-from the node list."
- (ignore-errors (car (xml-parse-region beg end))))
-
-(defun flycheck-parse-xml-region-with-fallback (beg end)
- "Parse the xml region between BEG and END.
-
-Try parsing with libxml first; if that fails, revert to
-`flycheck-parse-xml-region'. Failures can be caused by incorrect
-XML (see URL `https://github.com/flycheck/flycheck/issues/1298'),
-or on Windows by a missing libxml DLL with a libxml-enabled Emacs
-\(see URL `https://github.com/flycheck/flycheck/issues/1330')."
- ;; FIXME use `libxml-available-p' when it gets implemented.
- (or (and (fboundp 'libxml-parse-xml-region)
- (libxml-parse-xml-region beg end))
- (flycheck-parse-xml-region beg end)))
-
-(defvar flycheck-xml-parser 'flycheck-parse-xml-region-with-fallback
- "Function used to parse an xml string from a region.
-
-The default uses libxml if available, and falls back to
-`flycheck-parse-xml-region' otherwise.")
-
-(defun flycheck-parse-xml-string (xml)
- "Parse an XML string.
-
-Return the document tree parsed from XML in the form `(ROOT ATTRS
-BODY...)'. ROOT is a symbol identifying the name of the root
-element. ATTRS is an alist of the attributes of the root node.
-BODY is zero or more body elements, either as strings (in case of
-text nodes) or as XML nodes, in the same for as the root node."
- (with-temp-buffer
- (insert xml)
- (funcall flycheck-xml-parser (point-min) (point-max))))
-
-(defun flycheck-parse-checkstyle (output checker buffer)
- "Parse Checkstyle errors from OUTPUT.
-
-Parse Checkstyle-like XML output. Use this error parser for
-checkers that have an option to output errors in this format.
-
-CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `http://checkstyle.sourceforge.net/' for information
-about Checkstyle."
- (pcase (flycheck-parse-xml-string output)
- (`(checkstyle ,_ . ,file-nodes)
- (let (errors)
- (dolist (node file-nodes)
- (pcase node
- (`(file ,file-attrs . ,error-nodes)
- (dolist (node error-nodes)
- (pcase node
- (`(error ,error-attrs . ,_)
- (let-alist error-attrs
- (push (flycheck-error-new-at
- (flycheck-string-to-number-safe .line)
- (flycheck-string-to-number-safe .column)
- (pcase .severity
- (`"error" 'error)
- (`"warning" 'warning)
- (`"info" 'info)
- ;; Default to error for unknown .severity
- (_ 'error))
- .message
- :checker checker :id .source
- :buffer buffer
- :filename (cdr (assq 'name file-attrs)))
- errors))))))))
- (nreverse errors)))))
-
-(defun flycheck-parse-cppcheck (output checker buffer)
- "Parse Cppcheck errors from OUTPUT.
-
-Parse Cppcheck XML v2 output.
-
-CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `http://cppcheck.sourceforge.net/' for more information
-about Cppcheck."
- (pcase (flycheck-parse-xml-string output)
- (`(results ,_ . ,body)
- (let (errors)
- (dolist (node body)
- (pcase node
- (`(errors ,_ . ,error-nodes)
- (dolist (node error-nodes)
- (pcase node
- (`(error ,error-attrs . ,loc-nodes)
- (let ((id (cdr (assq 'id error-attrs)))
- (message (cdr (assq 'verbose error-attrs)))
- (level (pcase (cdr (assq 'severity error-attrs))
- (`"error" 'error)
- (`"style" 'info)
- (`"information" 'info)
- (_ 'warning))))
- (dolist (node loc-nodes)
- (pcase node
- (`(location ,loc-attrs . ,_)
- (let-alist loc-attrs
- (push (flycheck-error-new-at
- (flycheck-string-to-number-safe .line)
- nil
- level
- ;; cppcheck return newline characters as "\012"
- (replace-regexp-in-string "\\\\012" "\n"
- message)
- :id id
- :checker checker
- :buffer buffer
- :filename .file)
- errors))))))))))))
- (nreverse errors)))))
-
-(defun flycheck-parse-phpmd (output checker buffer)
- "Parse phpmd errors from OUTPUT.
-
-CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `http://phpmd.org/' for more information about phpmd."
- (pcase (flycheck-parse-xml-string output)
- (`(pmd ,_ . ,body)
- (let (errors)
- (dolist (node body)
- (pcase node
- (`(file ,file-attrs . ,violation-nodes)
- (let ((filename (cdr (assq 'name file-attrs))))
- (dolist (node violation-nodes)
- (pcase node
- (`(violation ,vio-attrs ,(and message (pred stringp)))
- (let-alist vio-attrs
- (push
- (flycheck-error-new-at
- (flycheck-string-to-number-safe .beginline)
- nil
- 'warning (string-trim message)
- ;; Ignore .endline (phpmd marks giant spans as errors)
- ;; :end-line (flycheck-string-to-number-safe .endline)
- :id .rule
- :checker checker
- :buffer buffer
- :filename filename)
- errors)))))))))
- (nreverse errors)))))
-
-(defun flycheck-parse-reek (output checker buffer)
- "Parse Reek warnings from JSON OUTPUT.
-
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `https://github.com/troessner/reek' for more information
-about Reek."
- (let ((errors nil))
- (dolist (message (car (flycheck-parse-json output)))
- (let-alist message
- (dolist (line (delete-dups .lines))
- (push
- (flycheck-error-new-at
- line
- nil
- 'warning (concat .context " " .message)
- :id .smell_type
- :checker checker
- :buffer buffer
- :filename .source)
- errors))))
- (nreverse errors)))
-
-(defun flycheck-parse-go-staticcheck (output checker buffer)
- "Parse staticheck warnings from JSON OUTPUT.
-
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `https://staticcheck.io/docs/formatters' for more
-information about staticheck."
- (let ((errors nil))
- (dolist (msg (flycheck-parse-json output))
- (let-alist msg
- (push
- (flycheck-error-new-at
- .location.line
- .location.column
- (pcase .severity
- (`"error" 'error)
- (`"warning" 'warning)
- (`"ignored" 'info)
- ;; Default to warning for unknown .severity
- (_ 'warning))
- .message
- :id .code
- :checker checker
- :buffer buffer
- :filename .location.file)
- errors)))
- (nreverse errors)))
-
-(defun flycheck-parse-tslint (output checker buffer)
- "Parse TSLint errors from JSON OUTPUT.
-
-CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `https://palantir.github.io/tslint/' for more information
-about TSLint."
- (seq-map (lambda (message)
- (let-alist message
- (flycheck-error-new-at
- (+ 1 .startPosition.line)
- (+ 1 .startPosition.character)
- (pcase .ruleSeverity
- ("ERROR" 'error)
- ("WARNING" 'warning)
- (_ 'warning))
- .failure
- :id .ruleName
- :checker checker
- :buffer buffer
- :filename .name
- :end-line (+ 1 .endPosition.line)
- :end-column (+ 1 .endPosition.character))))
- (car (flycheck-parse-json output))))
-
-(defun flycheck-parse-rust-collect-spans (span)
- "Return a list of spans contained in a SPAN object."
- (let ((spans))
- (let-alist span
- ;; With macro expansion errors, some spans will point to phony file names
- ;; to indicate an error inside the std rust lib. We skip these spans as
- ;; they won't appear in flycheck anyway.
- (unless (string= .file_name "<std macros>")
- (push span spans))
-
- ;; Macro expansion errors will have a span in the 'expansion' field, so we
- ;; recursively collect it.
- (if .expansion.span
- (append (flycheck-parse-rust-collect-spans .expansion.span)
- spans)
- spans))))
-
-(defun flycheck-parse-rustc-diagnostic (diagnostic checker buffer)
- "Turn a rustc DIAGNOSTIC into a `flycheck-error'.
-
-CHECKER and BUFFER denote the CHECKER that returned DIAGNOSTIC
-and the BUFFER that was checked respectively.
-
-DIAGNOSTIC should be a parsed JSON object describing a rustc
-diagnostic, following the format described there:
-
-https://github.com/rust-lang/rust/blob/master/src/librustc_errors/json.rs#L154"
- (let ((error-message)
- (error-level)
- (error-code)
- (primary-filename)
- (primary-line)
- (primary-column)
- (primary-end-line)
- (primary-end-column)
- (group (make-symbol "group"))
- (spans)
- (children)
- (errors))
- ;; The diagnostic format is described in the link above. The gist of it is
- ;; that a diagnostic can have several causes in the source text; these
- ;; causes are represented by spans. The diagnostic has a message and a
- ;; level (error, warning), while the spans have a filename, line, column,
- ;; and an optional label. The primary span points to the root cause of the
- ;; error in the source text, while non-primary spans point to related
- ;; causes. Spans may have an 'expansion' field for macro expansion errors;
- ;; these expansion fields will contain another span (and so on). In
- ;; addition, a diagnostic can also have children diagnostics that are used
- ;; to provide additional information through their message field, but do not
- ;; seem to contain any spans (yet).
- ;;
- ;; We first gather spans in order to turn every span into a flycheck error
- ;; object, that we collect into the `errors' list.
-
- ;; Nested `let-alist' cause compilation warnings, hence we `setq' all
- ;; these values here first to avoid nesting.
- (let-alist diagnostic
- (setq error-message .message
- error-level (pcase .level
- (`"error" 'error)
- (`"warning" 'warning)
- (`"note" 'info)
- (_ 'error))
- ;; The 'code' field of the diagnostic contains the actual error
- ;; code and an optional explanation that we ignore
- error-code .code.code
- ;; Collect all spans recursively
- spans (seq-mapcat #'flycheck-parse-rust-collect-spans .spans)
- children .children))
-
- ;; Turn each span into a flycheck error
- (dolist (span spans)
- (let-alist span
- ;; Children may not have filename/line/column information, so we use
- ;; those from the primary span
- (when .is_primary
- (setq primary-filename .file_name
- primary-line .line_start
- primary-column .column_start
- primary-end-line .line_end
- primary-end-column .column_end))
- (push
- (flycheck-error-new-at
- .line_start
- .column_start
- ;; Non-primary spans are used for notes
- (if .is_primary error-level 'info)
- (if .is_primary
- ;; Primary spans may have labels with additional information
- (concat error-message (when .label
- (format " (%s)" .label)))
- ;; If the label is empty, fallback on the error message,
- ;; otherwise we won't be able to display anything
- (or .label error-message))
- :id error-code
- :checker checker
- :buffer buffer
- :filename .file_name
- :group group
- :end-line .line_end
- :end-column .column_end)
- errors)))
-
- ;; Then we turn children messages into flycheck errors pointing to the
- ;; location of the primary span.
- (dolist (child children)
- (let ((message (let-alist child .message)))
- (let-alist (car (let-alist child .spans))
- (push
- (flycheck-error-new-at
- ;; Use the line/column from the first span if there is one, or
- ;; fallback to the line/column information from the primary span of
- ;; the diagnostic.
- (or .line_start primary-line)
- (or .column_start primary-column)
- 'info
- ;; Messages from `cargo clippy' may suggest replacement code. In
- ;; these cases, the `message' field itself is an unhelpful `try' or
- ;; `change this to'. We add the `suggested_replacement' field in
- ;; these cases.
- (if .suggested_replacement
- (format "%s: `%s`" message .suggested_replacement)
- message)
- :id error-code
- :checker checker
- :buffer buffer
- :filename primary-filename
- :group group
- :end-line (or .line_end primary-end-line)
- :end-column (or .column_end primary-end-column))
- errors))))
-
- ;; If there are no spans, the error is not associated with a specific
- ;; file but with the project as a whole. We still need to report it to
- ;; the user by emitting a corresponding flycheck-error object.
- (unless spans
- (push (flycheck-error-new-at
- ;; We have no specific position to attach the error to, so
- ;; let's use the top of the file.
- 1 1
- error-level
- error-message
- :id error-code
- :checker checker
- :buffer buffer
- :group group)
- errors))
- (nreverse errors)))
-
-(defconst flycheck--json-parser
- (if (and (functionp 'json-parse-buffer)
- ;; json-parse-buffer only supports keyword arguments in Emacs 27+
- (>= emacs-major-version 27))
- (lambda ()
- (json-parse-buffer
- :object-type 'alist :array-type 'list
- :null-object nil :false-object nil))
- #'json-read)
- "Function to use to parse JSON strings.")
-
-(defun flycheck-parse-json (output)
- "Return parsed JSON data from OUTPUT.
-
-OUTPUT is a string that contains JSON data. Each line of OUTPUT
-may be either plain text, a JSON array (starting with `['), or a
-JSON object (starting with `{').
-
-This function ignores the plain text lines, parses the JSON
-lines, and returns the parsed JSON lines in a list."
- (let ((objects nil)
- (json-array-type 'list)
- (json-false nil))
- (with-temp-buffer
- (insert output)
- (goto-char (point-min))
- (while (not (eobp))
- (when (memq (char-after) '(?\{ ?\[))
- (push (funcall flycheck--json-parser) objects))
- (forward-line)))
- (nreverse objects)))
-
-(defun flycheck-parse-rustc (output checker buffer)
- "Parse rustc errors from OUTPUT and return a list of `flycheck-error'.
-
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-The expected format for OUTPUT is a mix of plain text lines and
-JSON lines. This function ignores the plain text lines and
-parses only JSON lines. Each JSON line is expected to be a JSON
-object that corresponds to a diagnostic from the compiler. The
-expected diagnostic format is described there:
-
-https://github.com/rust-lang/rust/blob/master/src/libsyntax/json.rs#L67-L139"
- (seq-mapcat (lambda (msg)
- (flycheck-parse-rustc-diagnostic msg checker buffer))
- (flycheck-parse-json output)))
-
-(defun flycheck-parse-cargo-rustc (output checker buffer)
- "Parse Cargo errors from OUTPUT and return a list of `flycheck-error'.
-
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-The expected format for OUTPUT is a mix of plain text lines and
-JSON lines. This function ignores the plain text lines and
-parses only JSON lines. Each JSON line is expected to be a JSON
-object that represents a message from Cargo. The format of
-messages emitted by Cargo is described in cargo's
-machine_message.rs at URL `https://git.io/vh24R'."
- (let ((errors))
- (dolist (msg (flycheck-parse-json output))
- (let-alist msg
- ;; Errors and warnings from rustc are wrapped by cargo, so we filter and
- ;; unwrap them, and delegate the actual construction of `flycheck-error'
- ;; objects to `flycheck-parse-rustc-diagnostic'.
- (when (string= .reason "compiler-message")
- (push (flycheck-parse-rustc-diagnostic .message checker buffer)
- errors))))
- (apply #'nconc errors)))
-
-;; Some checkers output ANSI terminal colors, which don't match up
-;; with :error-patterns, so we strip those color codes from the output
-;; here before passing it along to the default behavior. This is
-;; originally only used in the rebar3 checker, but the systemd checker
-;; now also makes use of it.
-;;
-;; The relevant discussion can be found at
-;; https://github.com/flycheck/flycheck/pull/1144
-(defun flycheck-parse-with-patterns-without-color (output checker buffer)
- "Strip color codes from OUTPUT before passing it to the default behavior.
-
-CHECKER and BUFFER are passed along as well."
- (flycheck-parse-with-patterns
- (and (fboundp 'ansi-color-filter-apply) (ansi-color-filter-apply output))
- checker buffer))
-
-
-;;; Error parsing with regular expressions
-(defun flycheck-get-regexp (patterns)
- "Create a single regular expression from PATTERNS."
- (rx-to-string `(or ,@(seq-map (lambda (p) (list 'regexp (car p))) patterns))
- 'no-group))
-
-(defun flycheck-tokenize-output-with-patterns (output patterns)
- "Tokenize OUTPUT with PATTERNS.
-
-Split the output into error tokens, using all regular expressions
-from the error PATTERNS. An error token is simply a string
-containing a single error from OUTPUT. Such a token can then be
-parsed into a structured error by applying the PATTERNS again,
-see `flycheck-parse-errors-with-patterns'.
-
-Return a list of error tokens."
- (let ((regexp (flycheck-get-regexp patterns))
- (last-match 0)
- errors)
- (while (string-match regexp output last-match)
- (push (match-string 0 output) errors)
- (setq last-match (match-end 0)))
- (reverse errors)))
-
-(defun flycheck-try-parse-error-with-pattern (err pattern checker)
- "Try to parse a single ERR with a PATTERN for CHECKER.
-
-Return the parsed error if PATTERN matched ERR, or nil
-otherwise.
-
-`end-line' defaults to the value of `line' when `end-column' is
-set, since checkers often omit redundant end lines (as in
-<file>:<line>:<column>-<end-column>)."
- (let ((regexp (car pattern))
- (level (cdr pattern)))
- (when (string-match regexp err)
- (let ((filename (match-string 1 err))
- (line (flycheck-string-to-number-safe (match-string 2 err)))
- (column (flycheck-string-to-number-safe (match-string 3 err)))
- (message (match-string 4 err))
- (id (match-string 5 err))
- (end-line (flycheck-string-to-number-safe (match-string 6 err)))
- (end-column (flycheck-string-to-number-safe (match-string 7 err))))
- (flycheck-error-new-at
- line
- column
- level
- (unless (string-empty-p message) message)
- :id (unless (string-empty-p id) id)
- :checker checker
- :filename (if (or (null filename) (string-empty-p filename))
- (buffer-file-name)
- filename)
- :end-line (or end-line (and end-column line))
- :end-column end-column)))))
-
-(defun flycheck-parse-error-with-patterns (err patterns checker)
- "Parse a single ERR with error PATTERNS for CHECKER.
-
-Apply each pattern in PATTERNS to ERR, in the given order, and
-return the first parsed error."
- ;; Try to parse patterns in the order of declaration to make sure that the
- ;; first match wins.
- (let (parsed-error)
- (while (and patterns
- (not (setq parsed-error
- (flycheck-try-parse-error-with-pattern
- err (car patterns) checker))))
- (setq patterns (cdr patterns)))
- parsed-error))
-
-(defun flycheck-parse-with-patterns (output checker buffer)
- "Parse OUTPUT from CHECKER with error patterns.
-
-Uses the error patterns of CHECKER to tokenize the output and
-tries to parse each error token with all patterns, in the order
-of declaration. Hence an error is never matched twice by two
-different patterns. The pattern declared first always wins.
-
-_BUFFER is ignored.
-
-Return a list of parsed errors and warnings (as `flycheck-error'
-objects)."
- (with-current-buffer buffer
- (let ((patterns (flycheck-checker-get checker 'error-patterns)))
- (seq-map (lambda (err)
- (flycheck-parse-error-with-patterns err patterns checker))
- (flycheck-tokenize-output-with-patterns output patterns)))))
-
-
-;;; Convenience definition of command-syntax checkers
-
-;; This macro is autoloaded to prevent `with-eval-after-load' from expanding its
-;; arguments. See https://github.com/flycheck/flycheck/issues/1398.
-;;;###autoload
-(defmacro flycheck-define-checker (symbol docstring &rest properties)
- "Define SYMBOL as command syntax checker with DOCSTRING and PROPERTIES.
-
-Like `flycheck-define-command-checker', but PROPERTIES must not
-be quoted. Also, implicitly define the executable variable for
-SYMBOL with `flycheck-def-executable-var'."
- (declare (indent 1)
- (doc-string 2))
- (let ((command (plist-get properties :command))
- (parser (plist-get properties :error-parser))
- (filter (plist-get properties :error-filter))
- (explainer (plist-get properties :error-explainer))
- (predicate (plist-get properties :predicate))
- (enabled-fn (plist-get properties :enabled))
- (verify-fn (plist-get properties :verify)))
-
- `(progn
- (flycheck-def-executable-var ,symbol ,(car command))
-
- (flycheck-define-command-checker ',symbol
- ,docstring
- :command ',command
- ,@(when parser
- `(:error-parser #',parser))
- :error-patterns ',(plist-get properties :error-patterns)
- ,@(when filter
- `(:error-filter #',filter))
- ,@(when explainer
- `(:error-explainer #',explainer))
- :modes ',(plist-get properties :modes)
- ,@(when predicate
- `(:predicate #',predicate))
- :next-checkers ',(plist-get properties :next-checkers)
- ,@(when enabled-fn
- `(:enabled #',enabled-fn))
- ,@(when verify-fn
- `(:verify #',verify-fn))
- :standard-input ',(plist-get properties :standard-input)
- :working-directory ',(plist-get properties :working-directory)))))
-
-
-;;; Built-in checkers
-(flycheck-def-args-var flycheck-gnat-args ada-gnat
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gnat-include-path nil ada-gnat
- "A list of include directories for GNAT.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of gcc.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gnat-language-standard "2012" ada-gnat
- "The language standard to use in GNAT.
-
-The value of this variable is either a string denoting a language
-standard, or nil, to use the default standard. When non-nil, pass
-the language standard via the `-std' option."
- :type '(choice (const :tag "Default standard" nil)
- (string :tag "Language standard"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gnat-warnings
- '("wa") ada-gnat
- "A list of additional Ada warnings to enable in GNAT.
-
-The value of this variable is a list of strings, where each
-string is the name of a warning category to enable. By default,
-most optional warnings are recommended, as in `-gnata'.
-
-Refer to Info Node `(gnat_ugn_unw)Warning Message Control' for
-more information about GNAT warnings."
- :type '(repeat :tag "Warnings" (string :tag "Warning name"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-define-checker ada-gnat
- "An Ada syntax checker using GNAT.
-
-Uses the GNAT compiler from GCC. See URL
-`https://www.adacore.com/community/'."
- :command ("gnatmake"
- "-c" ; Just compile, don't bind
- "-f" ; Force re-compilation
- "-u" ; Compile the main file only
- "-gnatf" ; Full error information
- "-gnatef" ; Full source file name
- "-D" temporary-directory
- (option-list "-gnat" flycheck-gnat-warnings concat)
- (option-list "-I" flycheck-gnat-include-path concat)
- (option "-gnat" flycheck-gnat-language-standard concat)
- (eval flycheck-gnat-args)
- source)
- :error-patterns
- ((error line-start
- (message "In file included from") " " (file-name) ":" line ":"
- column ":"
- line-end)
- (info line-start (file-name) ":" line ":" column
- ": note: " (message) line-end)
- (warning line-start (file-name) ":" line ":" column
- ": warning: " (message) line-end)
- ;; no specific error prefix in Ada
- (error line-start (file-name) ":" line ":" column
- ": " (message) line-end))
- :modes ada-mode)
-
-(flycheck-define-checker asciidoc
- "A AsciiDoc syntax checker using the AsciiDoc compiler.
-
-See URL `http://www.methods.co.nz/asciidoc'."
- :command ("asciidoc" "-o" null-device "-")
- :standard-input t
- :error-patterns
- ((error line-start
- "asciidoc: ERROR: <stdin>: Line " line ": " (message)
- line-end)
- (warning line-start
- "asciidoc: WARNING: <stdin>: Line " line ": " (message)
- line-end)
- (info line-start
- "asciidoc: DEPRECATED: <stdin>: Line " line ": " (message)
- line-end))
- :modes adoc-mode)
-
-(flycheck-define-checker asciidoctor
- "An AsciiDoc syntax checker using the Asciidoctor compiler.
-
-See URL `http://asciidoctor.org'."
- :command ("asciidoctor" "-o" null-device "-")
- :standard-input t
- :error-patterns
- ((error line-start
- "asciidoctor: ERROR: <stdin>: Line " line ": " (message)
- line-end)
- (warning line-start
- "asciidoctor: WARNING: <stdin>: Line " line ": " (message)
- line-end))
- :modes adoc-mode)
-
-(defun flycheck-awk-gawk-fix-message (err)
- "Remove the repeated file-name/line from the error message of ERR."
- (setf (flycheck-error-message err)
- (replace-regexp-in-string
- (rx line-start
- (group (zero-or-more (any " " "\t")))
- (group (zero-or-more nonl) "\n")
- (backref 1))
- "\\2"
- (replace-regexp-in-string
- (rx "\ngawk: " (zero-or-more (not (any " "))) ":")
- "\n"
- (flycheck-error-message err))))
- err)
-
-(defun flycheck-awk-gawk-error-filter (errors)
- "Remove repeated file-name/line from ERRORS."
- (seq-do #'flycheck-awk-gawk-fix-message errors)
- errors)
-
-(flycheck-define-checker awk-gawk
- "GNU awk's built-in --lint checker."
- :command ("gawk"
- ;; Avoid code execution. See https://github.com/w0rp/ale/pull/1411
- "--source" "'BEGIN{exit} END{exit 1}'"
- "-f" source
- "--lint"
- "/dev/null")
- :standard-input nil
- :error-patterns
- ((warning line-start
- "gawk: "
- (file-name) ":" line ":" (optional column ":")
- (message (one-or-more not-newline)
- (optional "\n"
- (one-or-more not-newline)
- " ^ "
- (one-or-more not-newline)))
- line-end))
- :error-filter flycheck-awk-gawk-error-filter
- :modes awk-mode)
-
-(flycheck-define-checker bazel-buildifier
- "An Bazel checker using the buildifier.
-
-See URL `https://github.com/bazelbuild/buildtools/blob/master/buildifier'."
- :command ("buildifier" "-lint=warn")
- :standard-input t
- :error-patterns
- ((error line-start
- "<stdin>:" line ":" column ": " (message)
- line-end)
- (warning line-start
- "<stdin>:" line ": " (id (one-or-more (in word "-"))) ": " (message)
- line-end))
- :modes bazel-mode)
-
-(flycheck-def-args-var flycheck-clang-args c/c++-clang
- :package-version '(flycheck . "0.22"))
-
-(flycheck-def-option-var flycheck-clang-blocks nil c/c++-clang
- "Enable blocks in Clang.
-
-When non-nil, enable blocks in Clang with `-fblocks'. See URL
-`http://clang.llvm.org/docs/BlockLanguageSpec.html' for more
-information about blocks."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-clang-definitions nil c/c++-clang
- "Additional preprocessor definitions for Clang.
-
-The value of this variable is a list of strings, where each
-string is an additional definition to pass to Clang, via the `-D'
-option."
- :type '(repeat (string :tag "Definition"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.15"))
-
-(flycheck-def-option-var flycheck-clang-include-path nil c/c++-clang
- "A list of include directories for Clang.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of Clang.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.14"))
-
-(flycheck-def-option-var flycheck-clang-includes nil c/c++-clang
- "A list of additional include files for Clang.
-
-The value of this variable is a list of strings, where each
-string is a file to include before syntax checking. Relative
-paths are relative to the file being checked."
- :type '(repeat (file :tag "Include file"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.15"))
-
-(flycheck-def-option-var flycheck-clang-language-standard nil c/c++-clang
- "The language standard to use in Clang.
-
-The value of this variable is either a string denoting a language
-standard, or nil, to use the default standard. When non-nil,
-pass the language standard via the `-std' option."
- :type '(choice (const :tag "Default standard" nil)
- (string :tag "Language standard"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "0.15"))
-(make-variable-buffer-local 'flycheck-clang-language-standard)
-
-(flycheck-def-option-var flycheck-clang-ms-extensions nil c/c++-clang
- "Whether to enable Microsoft extensions to C/C++ in Clang.
-
-When non-nil, enable Microsoft extensions to C/C++ via
-`-fms-extensions'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.16"))
-
-(flycheck-def-option-var flycheck-clang-no-exceptions nil c/c++-clang
- "Whether to disable exceptions in Clang.
-
-When non-nil, disable exceptions for syntax checks, via
-`-fno-exceptions'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-clang-no-rtti nil c/c++-clang
- "Whether to disable RTTI in Clang.
-
-When non-nil, disable RTTI for syntax checks, via `-fno-rtti'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.15"))
-
-(flycheck-def-option-var flycheck-clang-pedantic nil c/c++-clang
- "Whether to warn about language extensions in Clang.
-
-For ISO C, follows the version specified by any -std option used.
-When non-nil, disable non-ISO extensions to C/C++ via
-`-pedantic'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.23"))
-
-(flycheck-def-option-var flycheck-clang-pedantic-errors nil c/c++-clang
- "Whether to error on language extensions in Clang.
-
-For ISO C, follows the version specified by any -std option used.
-When non-nil, disable non-ISO extensions to C/C++ via
-`-pedantic-errors'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.23"))
-
-(flycheck-def-option-var flycheck-clang-standard-library nil c/c++-clang
- "The standard library to use for Clang.
-
-The value of this variable is the name of a standard library as
-string, or nil to use the default standard library.
-
-Refer to the Clang manual at URL
-`http://clang.llvm.org/docs/UsersManual.html' for more
-information about the standard library."
- :type '(choice (const :tag "Default standard library" nil)
- (const "libc++")
- (const :tag "GNU libstdc++" "libstdc++")
- (string :tag "Library name"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "0.15"))
-
-(flycheck-def-option-var flycheck-clang-warnings '("all" "extra") c/c++-clang
- "A list of additional warnings to enable in Clang.
-
-The value of this variable is a list of strings, where each string
-is the name of a warning category to enable. By default, all
-recommended warnings and some extra warnings are enabled (as by
-`-Wall' and `-Wextra' respectively).
-
-Refer to the Clang manual at URL
-`http://clang.llvm.org/docs/UsersManual.html' for more
-information about warnings."
- :type '(choice (const :tag "No additional warnings" nil)
- (repeat :tag "Additional warnings"
- (string :tag "Warning name")))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.14"))
-
-(defun flycheck-c/c++-quoted-include-directory ()
- "Get the directory for quoted includes.
-
-C/C++ compilers typically look up includes with quotation marks
-in the directory of the file being compiled. However, since
-Flycheck uses temporary copies for syntax checking, it needs to
-explicitly determine the directory for quoted includes.
-
-This function determines the directory by looking at function
-`buffer-file-name', or if that is nil, at `default-directory'."
- (-if-let (fn (buffer-file-name))
- (file-name-directory fn)
- ;; If the buffer has no file name, fall back to its default directory
- default-directory))
-
-(flycheck-define-checker c/c++-clang
- "A C/C++ syntax checker using Clang.
-
-See URL `http://clang.llvm.org/'."
- :command ("clang"
- "-fsyntax-only"
- "-fno-color-diagnostics" ; Do not include color codes in output
- "-fno-caret-diagnostics" ; Do not visually indicate the source
- ; location
- "-fno-diagnostics-show-option" ; Do not show the corresponding
- ; warning group
- "-iquote" (eval (flycheck-c/c++-quoted-include-directory))
- (option "-std=" flycheck-clang-language-standard concat)
- (option-flag "-pedantic" flycheck-clang-pedantic)
- (option-flag "-pedantic-errors" flycheck-clang-pedantic-errors)
- (option "-stdlib=" flycheck-clang-standard-library concat)
- (option-flag "-fms-extensions" flycheck-clang-ms-extensions)
- (option-flag "-fno-exceptions" flycheck-clang-no-exceptions)
- (option-flag "-fno-rtti" flycheck-clang-no-rtti)
- (option-flag "-fblocks" flycheck-clang-blocks)
- (option-list "-include" flycheck-clang-includes)
- (option-list "-W" flycheck-clang-warnings concat)
- (option-list "-D" flycheck-clang-definitions concat)
- (option-list "-I" flycheck-clang-include-path)
- (eval flycheck-clang-args)
- "-x" (eval
- (pcase major-mode
- (`c++-mode "c++")
- (`c-mode "c")))
- ;; Read from standard input
- "-")
- :standard-input t
- :error-patterns
- ((info line-start (or "<stdin>" (file-name)) ":" line ":" column
- ": note: " (optional (message)) line-end)
- (warning line-start (or "<stdin>" (file-name)) ":" line ":" column
- ": warning: " (optional (message)) line-end)
- (error line-start (or "<stdin>" (file-name)) ":" line ":" column
- ": " (or "fatal error" "error") ": " (optional (message)) line-end))
- :error-filter
- (lambda (errors)
- (let ((errors (flycheck-sanitize-errors errors)))
- (dolist (err errors)
- ;; Clang will output empty messages for #error/#warning pragmas without
- ;; messages. We fill these empty errors with a dummy message to get
- ;; them past our error filtering
- (setf (flycheck-error-message err)
- (or (flycheck-error-message err) "no message")))
- errors))
- :modes (c-mode c++-mode)
- :next-checkers ((warning . c/c++-cppcheck)))
-
-(flycheck-def-args-var flycheck-gcc-args c/c++-gcc
- :package-version '(flycheck . "0.22"))
-
-(flycheck-def-option-var flycheck-gcc-definitions nil c/c++-gcc
- "Additional preprocessor definitions for GCC.
-
-The value of this variable is a list of strings, where each
-string is an additional definition to pass to GCC, via the `-D'
-option."
- :type '(repeat (string :tag "Definition"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gcc-include-path nil c/c++-gcc
- "A list of include directories for GCC.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of gcc.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gcc-includes nil c/c++-gcc
- "A list of additional include files for GCC.
-
-The value of this variable is a list of strings, where each
-string is a file to include before syntax checking. Relative
-paths are relative to the file being checked."
- :type '(repeat (file :tag "Include file"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gcc-language-standard nil c/c++-gcc
- "The language standard to use in GCC.
-
-The value of this variable is either a string denoting a language
-standard, or nil, to use the default standard. When non-nil,
-pass the language standard via the `-std' option."
- :type '(choice (const :tag "Default standard" nil)
- (string :tag "Language standard"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "0.20"))
-(make-variable-buffer-local 'flycheck-gcc-language-standard)
-
-(flycheck-def-option-var flycheck-gcc-no-exceptions nil c/c++-gcc
- "Whether to disable exceptions in GCC.
-
-When non-nil, disable exceptions for syntax checks, via
-`-fno-exceptions'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gcc-no-rtti nil c/c++-gcc
- "Whether to disable RTTI in GCC.
-
-When non-nil, disable RTTI for syntax checks, via `-fno-rtti'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gcc-openmp nil c/c++-gcc
- "Whether to enable OpenMP in GCC.
-
-When non-nil, enable OpenMP for syntax checkers, via
-`-fopenmp'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.21"))
-
-(flycheck-def-option-var flycheck-gcc-pedantic nil c/c++-gcc
- "Whether to warn about language extensions in GCC.
-
-For ISO C, follows the version specified by any -std option used.
-When non-nil, disable non-ISO extensions to C/C++ via
-`-pedantic'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.23"))
-
-(flycheck-def-option-var flycheck-gcc-pedantic-errors nil c/c++-gcc
- "Whether to error on language extensions in GCC.
-
-For ISO C, follows the version specified by any -std option used.
-When non-nil, disable non-ISO extensions to C/C++ via
-`-pedantic-errors'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.23"))
-
-(flycheck-def-option-var flycheck-gcc-warnings '("all" "extra") c/c++-gcc
- "A list of additional warnings to enable in GCC.
-
-The value of this variable is a list of strings, where each string
-is the name of a warning category to enable. By default, all
-recommended warnings and some extra warnings are enabled (as by
-`-Wall' and `-Wextra' respectively).
-
-Refer to the gcc manual at URL
-`https://gcc.gnu.org/onlinedocs/gcc/' for more information about
-warnings."
- :type '(choice (const :tag "No additional warnings" nil)
- (repeat :tag "Additional warnings"
- (string :tag "Warning name")))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-define-checker c/c++-gcc
- "A C/C++ syntax checker using GCC.
-
-Requires GCC 4.4 or newer. See URL `https://gcc.gnu.org/'."
- :command ("gcc"
- "-fshow-column"
- "-iquote" (eval (flycheck-c/c++-quoted-include-directory))
- (option "-std=" flycheck-gcc-language-standard concat)
- (option-flag "-pedantic" flycheck-gcc-pedantic)
- (option-flag "-pedantic-errors" flycheck-gcc-pedantic-errors)
- (option-flag "-fno-exceptions" flycheck-gcc-no-exceptions)
- (option-flag "-fno-rtti" flycheck-gcc-no-rtti)
- (option-flag "-fopenmp" flycheck-gcc-openmp)
- (option-list "-include" flycheck-gcc-includes)
- (option-list "-W" flycheck-gcc-warnings concat)
- (option-list "-D" flycheck-gcc-definitions concat)
- (option-list "-I" flycheck-gcc-include-path)
- (eval flycheck-gcc-args)
- "-x" (eval
- (pcase major-mode
- (`c++-mode "c++")
- (`c-mode "c")))
- ;; GCC performs full checking only when actually compiling, so
- ;; `-fsyntax-only' is not enough. Just let it generate assembly
- ;; code.
- "-S" "-o" null-device
- ;; Read from standard input
- "-")
- :standard-input t
- :error-patterns
- ((info line-start (or "<stdin>" (file-name))
- ":" line (optional ":" column)
- ": note: " (message) line-end)
- (warning line-start (or "<stdin>" (file-name))
- ":" line (optional ":" column)
- ": warning: " (message (one-or-more (not (any "\n["))))
- (optional "[" (id (one-or-more not-newline)) "]") line-end)
- (error line-start (or "<stdin>" (file-name))
- ":" line (optional ":" column)
- ": " (or "fatal error" "error") ": " (message) line-end))
- :modes (c-mode c++-mode)
- :next-checkers ((warning . c/c++-cppcheck)))
-
-(flycheck-def-option-var flycheck-cppcheck-checks '("style") c/c++-cppcheck
- "Enabled checks for Cppcheck.
-
-The value of this variable is a list of strings, where each
-string is the name of an additional check to enable. By default,
-all coding style checks are enabled.
-
-See section \"Enable message\" in the Cppcheck manual at URL
-`http://cppcheck.sourceforge.net/manual.pdf', and the
-documentation of the `--enable' option for more information,
-including a list of supported checks."
- :type '(repeat :tag "Additional checks"
- (string :tag "Check name"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.14"))
-
-(flycheck-def-option-var flycheck-cppcheck-standards nil c/c++-cppcheck
- "The standards to use in cppcheck.
-
-The value of this variable is either a list of strings denoting
-the standards to use, or nil to pass nothing to cppcheck. When
-non-nil, pass the standards via one or more `--std=' options."
- :type '(choice (const :tag "Default" nil)
- (repeat :tag "Custom standards"
- (string :tag "Standard name")))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "28"))
-(make-variable-buffer-local 'flycheck-cppcheck-standards)
-
-(flycheck-def-option-var flycheck-cppcheck-suppressions-file nil c/c++-cppcheck
- "The suppressions file to use in cppcheck.
-
-The value of this variable is a file with the suppressions to
-use, or nil to pass nothing to cppcheck. When non-nil, pass the
-suppressions file via the `--suppressions-list=' option."
- :type '(choice (const :tag "Default" nil)
- (file :tag "Suppressions file"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-(make-variable-buffer-local 'flycheck-cppcheck-suppressions-file)
-
-(flycheck-def-option-var flycheck-cppcheck-suppressions nil c/c++-cppcheck
- "The suppressions to use in cppcheck.
-
-The value of this variable is either a list of strings denoting
-the suppressions to use, or nil to pass nothing to cppcheck.
-When non-nil, pass the suppressions via one or more `--suppress='
-options."
- :type '(choice (const :tag "Default" nil)
- (repeat :tag "Additional suppressions"
- (string :tag "Suppression")))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "28"))
-
-(flycheck-def-option-var flycheck-cppcheck-inconclusive nil c/c++-cppcheck
- "Whether to enable Cppcheck inconclusive checks.
-
-When non-nil, enable Cppcheck inconclusive checks. This allows Cppcheck to
-report warnings it's not certain of, but it may result in false positives.
-
-This will have no effect when using Cppcheck 1.53 and older."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.19"))
-
-(flycheck-def-option-var flycheck-cppcheck-include-path nil c/c++-cppcheck
- "A list of include directories for cppcheck.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of cppcheck.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-define-checker c/c++-cppcheck
- "A C/C++ checker using cppcheck.
-
-See URL `http://cppcheck.sourceforge.net/'."
- :command ("cppcheck" "--quiet" "--xml-version=2" "--inline-suppr"
- (option "--enable=" flycheck-cppcheck-checks concat
- flycheck-option-comma-separated-list)
- (option-flag "--inconclusive" flycheck-cppcheck-inconclusive)
- (option-list "-I" flycheck-cppcheck-include-path)
- (option-list "--std=" flycheck-cppcheck-standards concat)
- (option-list "--suppress=" flycheck-cppcheck-suppressions concat)
- (option "--suppressions-list="
- flycheck-cppcheck-suppressions-file concat)
- "-x" (eval
- (pcase major-mode
- (`c++-mode "c++")
- (`c-mode "c")))
- source)
- :error-parser flycheck-parse-cppcheck
- :modes (c-mode c++-mode))
-
-(flycheck-define-checker cfengine
- "A CFEngine syntax checker using cf-promises.
-
-See URL `https://cfengine.com/'."
- :command ("cf-promises" "-Wall" "-f"
- ;; We must stay in the same directory to resolve @include
- source-inplace)
- :error-patterns
- ((warning line-start (file-name) ":" line ":" column
- ": warning: " (message) line-end)
- (error line-start (file-name) ":" line ":" column
- ": error: " (message) line-end))
- :modes (cfengine-mode cfengine3-mode))
-
-(flycheck-def-option-var flycheck-foodcritic-tags nil chef-foodcritic
- "A list of tags to select for Foodcritic.
-
-The value of this variable is a list of strings where each string
-is a tag expression describing Foodcritic rules to enable or
-disable, via the `--tags' option. To disable a tag, prefix it
-with `~'."
- :type '(repeat :tag "Tags" (string :tag "Tag expression"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.23"))
-
-(flycheck-define-checker chef-foodcritic
- "A Chef cookbooks syntax checker using Foodcritic.
-
-See URL `http://www.foodcritic.io'."
- ;; Use `source-inplace' to allow resource discovery with relative paths.
- ;; foodcritic interprets these as relative to the source file, so we need to
- ;; stay within the source tree. See
- ;; https://github.com/flycheck/flycheck/pull/556
- :command ("foodcritic"
- (option-list "--tags" flycheck-foodcritic-tags)
- source-inplace)
- :error-patterns
- ((error line-start (id (one-or-more alnum)) ": "
- (message) ": " (file-name) ":" line line-end))
- :modes (enh-ruby-mode ruby-mode)
- :predicate
- (lambda ()
- (let ((parent-dir (file-name-directory
- (directory-file-name
- (expand-file-name default-directory)))))
- (or
- ;; Chef CookBook
- ;; http://docs.opscode.com/chef/knife.html#id38
- (locate-dominating-file parent-dir "recipes")
- ;; Knife Solo
- ;; http://matschaffer.github.io/knife-solo/#label-Init+command
- (locate-dominating-file parent-dir "cookbooks")))))
-
-(flycheck-define-checker coffee
- "A CoffeeScript syntax checker using coffee.
-
-See URL `https://coffeescript.org/'."
- ;; --print suppresses generation of compiled .js files
- :command ("coffee" "--compile" "--print" "--stdio")
- :standard-input t
- :error-patterns
- ((error line-start "[stdin]:" line ":" column
- ": error: " (message) line-end))
- :modes coffee-mode
- :next-checkers ((warning . coffee-coffeelint)))
-
-(flycheck-def-config-file-var flycheck-coffeelintrc coffee-coffeelint
- ".coffeelint.json")
-
-(flycheck-define-checker coffee-coffeelint
- "A CoffeeScript style checker using coffeelint.
-
-See URL `http://www.coffeelint.org/'."
- :command
- ("coffeelint"
- (config-file "--file" flycheck-coffeelintrc)
- "--stdin" "--reporter" "checkstyle")
- :standard-input t
- :error-parser flycheck-parse-checkstyle
- :error-filter (lambda (errors)
- (flycheck-remove-error-file-names
- "stdin" (flycheck-remove-error-ids
- (flycheck-sanitize-errors errors))))
- :modes coffee-mode)
-
-(defun flycheck-coq-error-filter (errors)
- "Sanitize Coq ERRORS and compute end-lines and end-columns."
- (flycheck-increment-error-columns errors)
- (dolist (err errors)
- (setf (flycheck-error-message err)
- (replace-regexp-in-string (rx (1+ (syntax whitespace)) line-end)
- "" (flycheck-error-message err)
- 'fixedcase 'literal))
- (-when-let* ((end-col (flycheck-error-end-column err)))
- ;; Coq reports an offset (potentially past eol), not an end column
- (let* ((line (flycheck-error-line err))
- (end-lc (save-excursion
- (flycheck-goto-line line)
- (goto-char (+ (point) (1- end-col)))
- (flycheck-line-column-at-point))))
- (setf (flycheck-error-end-line err) (car end-lc))
- (setf (flycheck-error-end-column err) (cdr end-lc)))))
- (flycheck-sanitize-errors errors))
-
-(flycheck-define-checker coq
- "A Coq syntax checker using the Coq compiler.
-
-See URL `https://coq.inria.fr/'."
- ;; We use coqtop in batch mode, because coqc is picky about file names.
- :command ("coqtop" "-batch" "-load-vernac-source" source)
- :error-patterns
- ((error line-start "File \"" (file-name) "\", line " line
- ", characters " column "-" end-column ":\n"
- (or "Syntax error:" "Error:")
- ;; Most Coq error messages span multiple lines, and end with a dot.
- ;; There are simple one-line messages, too, though.
- (message (or (and (one-or-more (or not-newline "\n")) ".")
- (one-or-more not-newline)))
- line-end))
- :error-filter flycheck-coq-error-filter
- :modes coq-mode)
-
-(flycheck-define-checker css-csslint
- "A CSS syntax and style checker using csslint.
-
-See URL `https://github.com/CSSLint/csslint'."
- :command ("csslint" "--format=checkstyle-xml" source)
- :error-parser flycheck-parse-checkstyle
- :error-filter flycheck-dequalify-error-ids
- :modes css-mode)
-
-(defconst flycheck-stylelint-args '("--formatter" "json")
- "Common arguments to stylelint invocations.")
-
-(flycheck-def-config-file-var flycheck-stylelintrc
- (css-stylelint scss-stylelint less-stylelint) nil)
-
-(flycheck-def-option-var flycheck-stylelint-quiet
- nil (css-stylelint scss-stylelint less-stylelint)
- "Whether to run stylelint in quiet mode.
-
-When non-nil, enable quiet mode, via `--quiet'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . 26))
-
-(defconst flycheck-stylelint-error-re
- (flycheck-rx-to-string
- '(: line-start (id (one-or-more word)) ": " (message) line-end)))
-
-(defun flycheck-parse-stylelint (output checker buffer)
- "Parse stylelint errors from OUTPUT.
-
-CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-The CHECKER usually returns the errors as JSON.
-
-If the CHECKER throws an Error it returns an Error message with a stacktrace."
- (condition-case nil
- (flycheck-parse-stylelint-json output checker buffer)
-
- ;; The output could not be parsed as JSON
- (json-error
-
- ;; Extract a flycheck error from the output (with a regular expression)
- ;; For match-string 4/5 see flycheck-rx-message/flycheck-rx-id
- (when (string-match flycheck-stylelint-error-re output)
- (list (flycheck-error-new-at
- 1 nil 'error
- (match-string 4 output)
- :id (match-string 5 output)
- :checker checker
- :buffer buffer
- :filename (buffer-file-name buffer)))))))
-
-(defun flycheck-parse-stylelint-json (output checker buffer)
- "Parse stylelint JSON errors from OUTPUT.
-
-CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `http://stylelint.io/developer-guide/formatters/' for information
-about the JSON format of stylelint."
- (let ((json-object-type 'plist))
-
- ;; stylelint returns a vector of result objects
- ;; Since we only passed one file, the first element is enough
- (let* ((stylelint-output (elt (json-read-from-string output) 0))
- (filename (buffer-file-name buffer))
-
- ;; Turn all deprecations into warnings
- (deprecations
- (mapcar (lambda (d)
- (flycheck-error-new-at
- 1 nil 'warning
- (plist-get d :text)
- :id "Deprecation Warning"
- :checker checker
- :buffer buffer
- :filename filename))
- (plist-get stylelint-output :deprecations)))
-
- ;; Turn all invalid options into errors
- (invalid-options
- (mapcar (lambda (io)
- (flycheck-error-new-at
- 1 nil 'error
- (plist-get io :text)
- :id "Invalid Option"
- :checker checker
- :buffer buffer
- :filename filename))
- (plist-get stylelint-output :invalidOptionWarnings)))
-
- ;; Read all linting warnings
- (warnings
- (mapcar (lambda (w)
- (flycheck-error-new-at
- (plist-get w :line) (plist-get w :column)
- (pcase (plist-get w :severity)
- (`"error" 'error)
- (`"warning" 'warning)
- ;; Default to info for unknown .severity
- (_ 'info))
- (plist-get w :text)
- :id (plist-get w :rule)
- :checker checker
- :buffer buffer
- :filename filename))
- (plist-get stylelint-output :warnings))))
-
- ;; Return the combined errors (deprecations, invalid options, warnings)
- (append deprecations invalid-options warnings))))
-
-(flycheck-define-checker css-stylelint
- "A CSS syntax and style checker using stylelint.
-
-See URL `http://stylelint.io/'."
- :command ("stylelint"
- (eval flycheck-stylelint-args)
- (option-flag "--quiet" flycheck-stylelint-quiet)
- (config-file "--config" flycheck-stylelintrc)
- "--stdin-filename" (eval (or (buffer-file-name) "style.css")))
- :standard-input t
- :error-parser flycheck-parse-stylelint
- :predicate flycheck-buffer-nonempty-p
- :modes (css-mode))
-
-(flycheck-def-option-var flycheck-cuda-language-standard nil cuda-nvcc
- "Our CUDA Language Standard."
- :type '(choice (const :tag "Default standard" nil)
- (string :tag "Language standard"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-(make-variable-buffer-local 'flycheck-cuda-language-standard)
-
-(flycheck-def-option-var flycheck-cuda-includes nil cuda-nvcc
- "Our include directories to pass to nvcc."
- :type '(repeat (file :tag "Include file"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "32"))
-
-(flycheck-def-option-var flycheck-cuda-definitions nil cuda-nvcc
- "Additional preprocessor definitions for nvcc.
-A list of strings to pass to cuda, a la flycheck-clang"
- :type '(repeat (string :tag "Definitions"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "32"))
-
-(flycheck-def-option-var flycheck-cuda-include-path nil cuda-nvcc
- "A list of include directories for nvcc."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker cuda-nvcc
- "A CUDA C/C++ syntax checker using nvcc.
-
-See URL `https://developer.nvidia.com/cuda-llvm-compiler'."
- :command ("nvcc"
- "-c" ;; Compile Only
- "--output-file" "/dev/null" ;; avoid creating output .o
- "--x=cu" ;; explicitly specify it's a CUDA language file
- (option "-std=" flycheck-cuda-language-standard concat)
- (option-list "-include" flycheck-cuda-includes)
- (option-list "-D" flycheck-cuda-definitions concat)
- (option-list "-I" flycheck-cuda-include-path)
- source)
- :error-patterns
- ((error line-start
- (message "In file included from")
- " " (or "<stdin>" (file-name))
- ":" line ":" line-end)
- (error line-start (or "<stdin>" (file-name))
- "(" line "): error: " (message) line-end)
- (error line-start (or "<stdin>" (file-name))
- ":" line ":" column
- ": fatal error: " (optional (message)) line-end)
- (warning line-start (or "<stdin>" (file-name))
- "(" line "): warning: " (message) line-end))
- :modes cuda-mode)
-
-
-(flycheck-def-option-var flycheck-cwl-schema-path nil cwl
- "A path for the schema file for Common Workflow Language.
-
-The value of this variable is a string that denotes a path for
-the schema file of Common Workflow Language."
- :type '(choice (const :tag "None" nil)
- (file :tag "Schema file"))
- :safe #'flycheck-string-or-nil-p)
-
-(flycheck-define-checker cwl
- "A CWL syntax checker using Schema Salad validator.
-
-Requires Schema Salad 2.6.20171101113912 or newer.
-See URL `https://www.commonwl.org/v1.0/SchemaSalad.html'."
- :command ("schema-salad-tool"
- "--quiet"
- "--print-oneline"
- (eval flycheck-cwl-schema-path)
- source-inplace)
- :error-patterns
- ((error line-start
- (file-name) ":" line ":" column ":" (zero-or-more blank)
- (message (one-or-more not-newline))
- line-end))
- :modes cwl-mode)
-
-(defconst flycheck-d-module-re
- (rx "module" (one-or-more (syntax whitespace))
- (group (one-or-more (not (syntax whitespace))))
- (zero-or-more (syntax whitespace))
- ";")
- "Regular expression to match a D module declaration.")
-
-(defun flycheck-d-base-directory ()
- "Get the relative base directory path for this module."
- (let* ((file-name (buffer-file-name))
- (module-file (if (and file-name
- (string= (file-name-nondirectory file-name)
- "package.d"))
- (directory-file-name (file-name-directory file-name))
- file-name)))
- (flycheck-module-root-directory
- (flycheck-find-in-buffer flycheck-d-module-re)
- module-file)))
-
-(flycheck-def-option-var flycheck-dmd-include-path nil d-dmd
- "A list of include directories for dmd.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of dmd.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.18"))
-
-(flycheck-def-args-var flycheck-dmd-args d-dmd
- :package-version '(flycheck . "0.24"))
-
-(flycheck-define-checker d-dmd
- "A D syntax checker using the DMD compiler.
-
-Requires DMD 2.066 or newer. See URL `https://dlang.org/'."
- :command ("dmd"
- "-debug" ; Compile in debug mode
- "-o-" ; Don't generate an object file
- "-vcolumns" ; Add columns in output
- "-wi" ; Compilation will continue even if there are warnings
- (eval (concat "-I" (flycheck-d-base-directory)))
- (option-list "-I" flycheck-dmd-include-path concat)
- (eval flycheck-dmd-args)
- (source ".d"))
- :error-patterns
- ((error line-start
- (file-name) "(" line "," column "): Error: " (message)
- line-end)
- (warning line-start (file-name) "(" line "," column "): "
- (or "Warning" "Deprecation") ": " (message) line-end)
- (info line-start (file-name) "(" line "," column "): "
- (one-or-more " ") (message) line-end))
- :modes d-mode)
-
-(flycheck-define-checker dockerfile-hadolint
- "A Dockerfile syntax checker using the hadolint.
-
-See URL `http://github.com/hadolint/hadolint/'."
- :command ("hadolint" "-")
- :standard-input t
- :error-patterns
- ((error line-start
- (file-name) ":" line ":" column " " (message)
- line-end)
- (warning line-start
- (file-name) ":" line " " (id (one-or-more alnum)) " " (message)
- line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors
- (flycheck-remove-error-file-names "/dev/stdin" errors)))
- :modes dockerfile-mode)
-
-(defun flycheck-credo--working-directory (&rest _ignored)
- "Check if `credo' is installed as dependency in the application."
- (and buffer-file-name
- (locate-dominating-file buffer-file-name "deps/credo")))
-
-(flycheck-def-option-var flycheck-elixir-credo-strict nil elixir-credo
- "Enable strict mode in `credo'.
-
-When non-nil, pass the `--strict' flag to credo."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker elixir-credo
- "An Elixir checker for static code analysis using Credo.
-
-See `http://credo-ci.org/'."
- :command ("mix" "credo"
- (option-flag "--strict" flycheck-elixir-credo-strict)
- "--format" "flycheck"
- "--read-from-stdin" source-original)
- :standard-input t
- :working-directory flycheck-credo--working-directory
- :enabled flycheck-credo--working-directory
- :error-patterns
- ((info line-start
- (file-name) ":" line (optional ":" column) ": "
- (or "F" "R" "C") ": " (message) line-end)
- (warning line-start
- (file-name) ":" line (optional ":" column) ": "
- (or "D" "W") ": " (message) line-end))
- :modes elixir-mode)
-
-(defconst flycheck-this-emacs-executable
- (concat invocation-directory invocation-name)
- "The path to the currently running Emacs executable.")
-
-(defconst flycheck-emacs-args '("-Q" "--batch")
- "Common arguments to Emacs invocations.")
-
-(defmacro flycheck-prepare-emacs-lisp-form (&rest body)
- "Prepare BODY for use as check form in a subprocess."
- (declare (indent 0))
- `(flycheck-sexp-to-string
- '(progn
- (defvar jka-compr-inhibit)
- (unwind-protect
- ;; Flycheck inhibits compression of temporary files, thus we
- ;; must not attempt to decompress.
- (let ((jka-compr-inhibit t))
- ;; Strip option-argument separator from arguments, if present
- (when (equal (car command-line-args-left) "--")
- (setq command-line-args-left (cdr command-line-args-left)))
- ,@body)
- ;; Prevent Emacs from processing the arguments on its own, see
- ;; https://github.com/flycheck/flycheck/issues/319
- (setq command-line-args-left nil)))))
-
-(defun flycheck-emacs-lisp-bytecomp-config-form ()
- "Prepare an Emacs Lisp form to set byte-compiler variables."
- (flycheck-sexp-to-string
- `(progn
- (require 'bytecomp)
- (setq byte-compile-root-dir
- ,(if buffer-file-name
- (file-name-directory buffer-file-name)
- default-directory)))))
-
-(defconst flycheck-emacs-lisp-check-form
- (flycheck-prepare-emacs-lisp-form
- ;; Keep track of the generated bytecode files, to delete them after byte
- ;; compilation.
- (require 'bytecomp)
- (defvar flycheck-byte-compiled-files nil)
- (let ((byte-compile-dest-file-function
- (lambda (source)
- (let ((temp-file (make-temp-file (file-name-nondirectory source))))
- (push temp-file flycheck-byte-compiled-files)
- temp-file))))
- (unwind-protect
- (byte-compile-file (car command-line-args-left))
- (mapc (lambda (f) (ignore-errors (delete-file f)))
- flycheck-byte-compiled-files))
- (when (bound-and-true-p flycheck-emacs-lisp-check-declare)
- (check-declare-file (car command-line-args-left))))))
-
-(flycheck-def-option-var flycheck-emacs-lisp-load-path nil emacs-lisp
- "Load path to use in the Emacs Lisp syntax checker.
-
-When set to `inherit', use the `load-path' of the current Emacs
-session during syntax checking.
-
-When set to a list of strings, add each directory in this list to
-the `load-path' before invoking the byte compiler. Relative
-paths in this list are expanded against the `default-directory'
-of the buffer to check.
-
-When nil, do not explicitly set the `load-path' during syntax
-checking. The syntax check only uses the built-in `load-path' of
-Emacs in this case.
-
-Note that changing this variable can lead to wrong results of the
-syntax check, e.g. if an unexpected version of a required library
-is used."
- :type '(choice (const :tag "Inherit current `load-path'" inherit)
- (repeat :tag "Load path" directory))
- :risky t
- :package-version '(flycheck . "0.14"))
-
-(flycheck-def-option-var flycheck-emacs-lisp-initialize-packages
- 'auto emacs-lisp
- "Whether to initialize packages in the Emacs Lisp syntax checker.
-
-When nil, never initialize packages. When `auto', initialize
-packages only when checking `user-init-file' or files from
-`user-emacs-directory'. For any other non-nil value, always
-initialize packages.
-
-When initializing packages is enabled the `emacs-lisp' syntax
-checker calls `package-initialize' before byte-compiling the file
-to be checked. It also sets `package-user-dir' according to
-`flycheck-emacs-lisp-package-user-dir'."
- :type '(choice (const :tag "Do not initialize packages" nil)
- (const :tag "Initialize packages for configuration only" auto)
- (const :tag "Always initialize packages" t))
- :risky t
- :package-version '(flycheck . "0.14"))
-
-(defconst flycheck-emacs-lisp-package-initialize-form
- (flycheck-sexp-to-string
- '(with-demoted-errors "Error during package initialization: %S"
- (package-initialize)))
- "Form used to initialize packages.")
-
-(defun flycheck-option-emacs-lisp-package-initialize (value)
- "Option VALUE filter for `flycheck-emacs-lisp-initialize-packages'."
- (let ((shall-initialize
- (if (eq value 'auto)
- (or (flycheck-in-user-emacs-directory-p
- (or buffer-file-name default-directory))
- ;; `user-init-file' is nil in non-interactive sessions. Now,
- ;; no user would possibly use Flycheck in a non-interactive
- ;; session, but our unit tests run non-interactively, so we
- ;; have to handle this case anyway
- (and user-init-file buffer-file-name
- (flycheck-same-files-p buffer-file-name user-init-file)))
- value)))
- (when shall-initialize
- ;; If packages shall be initialized, return the corresponding form,
- ;; otherwise make Flycheck ignore the option by returning nil.
- flycheck-emacs-lisp-package-initialize-form)))
-
-(flycheck-def-option-var flycheck-emacs-lisp-package-user-dir nil emacs-lisp
- "Package directory for the Emacs Lisp syntax checker.
-
-If set to a string set `package-user-dir' to the value of this
-variable before initializing packages. If set to nil just inherit
-the value of `package-user-dir' from the running Emacs session.
-
-This variable has no effect, if
-`flycheck-emacs-lisp-initialize-packages' is nil."
- :type '(choice (const :tag "Default package directory" nil)
- (directory :tag "Custom package directory"))
- :risky t
- :package-version '(flycheck . "0.14"))
-
-(defun flycheck-option-emacs-lisp-package-user-dir (value)
- "Option VALUE filter for `flycheck-emacs-lisp-package-user-dir'."
- ;; Inherit the package directory from our Emacs session
- (let ((value (or value (bound-and-true-p package-user-dir))))
- (when value
- (flycheck-sexp-to-string `(setq package-user-dir ,value)))))
-
-(flycheck-def-option-var flycheck-emacs-lisp-check-declare nil emacs-lisp
- "If non-nil, check ‘declare-function’ forms using ‘check-declare-file’."
- :type '(choice (const :tag "Do not check declare forms" nil)
- (const :tag "Check declare forms" t))
- :risky t
- :package-version '(flycheck . "31"))
-
-(defun flycheck-option-emacs-lisp-check-declare (value)
- "Option VALUE filter for `flycheck-emacs-lisp-check-declare'."
- (when value
- (flycheck-sexp-to-string
- `(progn
- (defvar flycheck-emacs-lisp-check-declare)
- (setq flycheck-emacs-lisp-check-declare ,value)))))
-
-(defun flycheck--emacs-lisp-enabled-p ()
- "Check whether to enable Emacs Lisp checkers in the current buffer."
- (not
- (or
- ;; Do not check buffers used for autoloads generation during package
- ;; installation. These buffers are too short-lived for being checked, and
- ;; doing so causes spurious errors. See
- ;; https://github.com/flycheck/flycheck/issues/45 and
- ;; https://github.com/bbatsov/prelude/issues/248. We must also not check
- ;; compilation buffers, but as these are ephemeral, Flycheck won't check
- ;; them anyway.
- (flycheck-autoloads-file-p)
- ;; Cask/Carton and dir-locals files contain data, not code, and don't need
- ;; to follow Checkdoc conventions either.
- (and (buffer-file-name)
- (member (file-name-nondirectory (buffer-file-name))
- '("Cask" "Carton" ".dir-locals.el" ".dir-locals-2.el"))))))
-
-(flycheck-define-checker emacs-lisp
- "An Emacs Lisp syntax checker using the Emacs Lisp Byte compiler.
-
-See Info Node `(elisp)Byte Compilation'."
- :command ("emacs" (eval flycheck-emacs-args)
- (eval
- (let ((path (pcase flycheck-emacs-lisp-load-path
- (`inherit load-path)
- (p (seq-map #'expand-file-name p)))))
- (flycheck-prepend-with-option "--directory" path)))
- (option "--eval" flycheck-emacs-lisp-package-user-dir nil
- flycheck-option-emacs-lisp-package-user-dir)
- (option "--eval" flycheck-emacs-lisp-initialize-packages nil
- flycheck-option-emacs-lisp-package-initialize)
- (option "--eval" flycheck-emacs-lisp-check-declare nil
- flycheck-option-emacs-lisp-check-declare)
- "--eval" (eval (flycheck-emacs-lisp-bytecomp-config-form))
- "--eval" (eval flycheck-emacs-lisp-check-form)
- "--"
- source-inplace)
- :error-patterns
- ((error line-start (file-name) ":" line ":" column ":"
- (zero-or-more whitespace) "Error:" (zero-or-more whitespace)
- (message (zero-or-more not-newline)
- (zero-or-more "\n " (zero-or-more not-newline)))
- line-end)
- (warning line-start (file-name) ":" line ":" column ":"
- (zero-or-more whitespace) "Warning:" (zero-or-more whitespace)
- (message (zero-or-more not-newline)
- (zero-or-more "\n " (zero-or-more not-newline)))
- line-end)
- (warning line-start (file-name) ":" line (optional ":" column) ":"
- (zero-or-more whitespace) "Warning (check-declare): said\n"
- (message (zero-or-more " " (zero-or-more not-newline))
- (zero-or-more "\n " (zero-or-more not-newline)))
- line-end)
- ;; The following is for Emacs 24 ‘check-declare-file’, which uses a
- ;; less informative format.
- (warning line-start "Warning (check-declare): " (file-name) " said "
- (message (zero-or-more not-newline))
- line-end))
- :error-filter
- (lambda (errors)
- (flycheck-fill-empty-line-numbers
- (flycheck-collapse-error-message-whitespace
- (flycheck-sanitize-errors errors))))
- :modes (emacs-lisp-mode lisp-interaction-mode)
- :enabled flycheck--emacs-lisp-enabled-p
- :predicate
- (lambda ()
- ;; Do not check buffers that should not be byte-compiled. The checker
- ;; process will refuse to compile these, which would confuse Flycheck
- (not (bound-and-true-p no-byte-compile)))
- :next-checkers (emacs-lisp-checkdoc))
-
-(defconst flycheck-emacs-lisp-checkdoc-form
- (flycheck-prepare-emacs-lisp-form
- (unless (require 'elisp-mode nil 'no-error)
- ;; TODO: Fallback for Emacs 24, remove when dropping support for 24
- (require 'lisp-mode))
- (require 'checkdoc)
-
- (let ((source (car command-line-args-left))
- ;; Remember the default directory of the process
- (process-default-directory default-directory))
- ;; Note that we deliberately use our custom approach even despite of
- ;; `checkdoc-file' which was added to Emacs 25.1. While it's conceptually
- ;; the better thing, its implementation has too many flaws to be of use
- ;; for us.
- (with-temp-buffer
- (insert-file-contents source 'visit)
- (setq buffer-file-name source)
- ;; And change back to the process default directory to make file-name
- ;; back-substutition work
- (setq default-directory process-default-directory)
- (with-demoted-errors "Error in checkdoc: %S"
- ;; Checkdoc needs the Emacs Lisp syntax table and comment syntax to
- ;; parse sexps and identify docstrings correctly; see
- ;; https://github.com/flycheck/flycheck/issues/833
- (delay-mode-hooks (emacs-lisp-mode))
- (setq delayed-mode-hooks nil)
- (checkdoc-current-buffer t)
- (with-current-buffer checkdoc-diagnostic-buffer
- (princ (buffer-substring-no-properties (point-min) (point-max)))
- (kill-buffer)))))))
-
-(defconst flycheck-emacs-lisp-checkdoc-variables
- '(checkdoc-symbol-words
- checkdoc-arguments-in-order-flag
- checkdoc-force-history-flag
- checkdoc-permit-comma-termination-flag
- checkdoc-force-docstrings-flag
- checkdoc-package-keywords-flag
- checkdoc-spellcheck-documentation-flag
- checkdoc-verb-check-experimental-flag
- checkdoc-max-keyref-before-warn
- sentence-end-double-space)
- "Variables inherited by the checkdoc subprocess.")
-
-(defun flycheck-emacs-lisp-checkdoc-variables-form ()
- "Make a sexp to pass relevant variables to a checkdoc subprocess.
-
-Variables are taken from `flycheck-emacs-lisp-checkdoc-variables'."
- `(progn
- ,@(seq-map (lambda (opt) `(setq-default ,opt ',(symbol-value opt)))
- (seq-filter #'boundp flycheck-emacs-lisp-checkdoc-variables))))
-
-(flycheck-define-checker emacs-lisp-checkdoc
- "An Emacs Lisp style checker using CheckDoc.
-
-The checker runs `checkdoc-current-buffer'."
- :command ("emacs" (eval flycheck-emacs-args)
- "--eval" (eval (flycheck-sexp-to-string
- (flycheck-emacs-lisp-checkdoc-variables-form)))
- "--eval" (eval flycheck-emacs-lisp-checkdoc-form)
- "--" source)
- :error-patterns
- ((warning line-start (file-name) ":" line ": " (message) line-end))
- :modes (emacs-lisp-mode)
- :enabled flycheck--emacs-lisp-enabled-p)
-
-(dolist (checker '(emacs-lisp emacs-lisp-checkdoc))
- (setf (car (flycheck-checker-get checker 'command))
- flycheck-this-emacs-executable))
-
-(defun flycheck-ember-template--check-for-config (&rest _ignored)
- "Check the required config file is available up the file system."
- (and buffer-file-name
- (locate-dominating-file buffer-file-name ".template-lintrc.js")))
-
-(defun flycheck-ember-template--parse-error (output checker buffer)
- "Parse Ember-template-lint errors/warnings from JSON OUTPUT.
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively."
- (mapcar (lambda (err)
- (let-alist err
- (flycheck-error-new-at
- .line
- .column
- (pcase .severity
- (2 'error)
- (1 'warning)
- (_ 'warning))
- .message
- :id .rule
- :checker checker
- :buffer buffer
- :filename (buffer-file-name buffer))))
- (cdr (car (car (flycheck-parse-json output))))))
-
-(flycheck-def-config-file-var flycheck-ember-template-lintrc
- ember-template
- ".template-lintrc.js")
-
-(flycheck-define-checker ember-template
- "An Ember template checker using ember-template-lint."
- :command ("ember-template-lint"
- (config-file "--config-path" flycheck-ember-template-lintrc)
- "--filename" source-original
- "--json")
- :standard-input t
- :error-parser flycheck-ember-template--parse-error
- :modes web-mode
- :enabled flycheck-ember-template--check-for-config
- :working-directory flycheck-ember-template--check-for-config)
-
-(flycheck-def-option-var flycheck-erlang-include-path nil erlang
- "A list of include directories for Erlang.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of erlc.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-def-option-var flycheck-erlang-library-path nil erlang
- "A list of library directories for Erlang.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the library path of erlc.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Library directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-define-checker erlang
- "An Erlang syntax checker using the Erlang interpreter.
-
-See URL `http://www.erlang.org/'."
- :command ("erlc"
- "-o" temporary-directory
- (option-list "-I" flycheck-erlang-include-path)
- (option-list "-pa" flycheck-erlang-library-path)
- "-Wall"
- source)
- :error-patterns
- ((warning line-start (file-name) ":" line ": Warning:" (message) line-end)
- (error line-start (file-name) ":" line ": " (message) line-end))
- :modes erlang-mode
- :enabled (lambda () (string-suffix-p ".erl" (buffer-file-name))))
-
-(defun flycheck--contains-rebar-config (dir-name)
- "Return DIR-NAME if rebar config file exists in DIR-NAME, nil otherwise."
- (when (or (file-exists-p (expand-file-name "rebar.config" dir-name))
- (file-exists-p (expand-file-name "rebar.config.script" dir-name)))
- dir-name))
-
-(defun flycheck--locate-rebar3-project-root
- (file-name &optional prev-file-name acc)
- "Find the top-most rebar project root for source FILE-NAME.
-
-A project root directory is any directory containing a
-rebar.config file. Find the top-most directory to move out of any
-nested dependencies.
-
-FILE-NAME is a source file for which to find the project.
-
-PREV-FILE-NAME helps us prevent infinite looping
-
-ACC is an accumulator that keeps the list of results, the first
-non-nil of which will be our project root.
-
-Return the absolute path to the directory"
- (if (string= file-name prev-file-name)
- (car (remove nil acc))
- (let ((current-dir (file-name-directory file-name)))
- (flycheck--locate-rebar3-project-root
- (directory-file-name current-dir)
- file-name
- (cons (flycheck--contains-rebar-config current-dir) acc)))))
-
-(defun flycheck-rebar3-project-root (&optional _checker)
- "Return directory where rebar.config is located."
- (flycheck--locate-rebar3-project-root buffer-file-name))
-
-(flycheck-def-option-var flycheck-erlang-rebar3-profile nil erlang-rebar3
- "The rebar3 profile to use.
-
-The profile used when compiling, if VALUE is nil \"test\" will be used
-when the file is located in test directory, otherwise \"default\" will be
-used as profile."
- :type '(choice (const :tag "Automatic" nil)
- (string :tag "Profile"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-
-(defun flycheck-erlang-rebar3-get-profile ()
- "Return rebar3 profile.
-
-Use flycheck-erlang-rebar3-profile if set, otherwise use test or eqc profile if
-directory name is \"test\" or \"eqc\", or else \"default\"."
- (or
- flycheck-erlang-rebar3-profile
- (with-no-warnings
- ;; `seq-contains-p' is only in seq >= 2.21
- (seq-contains '("test" "eqc")
- (and buffer-file-name
- (file-name-base
- (directory-file-name
- (file-name-directory buffer-file-name))))))
- "default"))
-
-(flycheck-define-checker erlang-rebar3
- "An Erlang syntax checker using the rebar3 build tool."
- :command ("rebar3" "as" (eval (flycheck-erlang-rebar3-get-profile)) "compile")
- :error-parser flycheck-parse-with-patterns-without-color
- :error-patterns
- ((warning line-start
- (file-name) ":" line ": Warning:" (message) line-end)
- (error line-start
- (file-name) ":" line ": " (message) line-end))
- :modes erlang-mode
- :enabled flycheck-rebar3-project-root
- :predicate flycheck-buffer-saved-p
- :working-directory flycheck-rebar3-project-root)
-
-(flycheck-define-checker eruby-erubis
- "An eRuby syntax checker using the `erubis' command.
-
-See URL `http://www.kuwata-lab.com/erubis/'."
- :command ("erubis" "-z" source)
- :error-patterns
- ((error line-start (file-name) ":" line ": " (message) line-end))
- :modes (html-erb-mode rhtml-mode)
- :next-checkers ((warning . eruby-ruumba)))
-
-(flycheck-def-config-file-var flycheck-ruumbarc eruby-ruumba ".ruumba.yml")
-
-(flycheck-def-option-var flycheck-ruumba-lint-only nil eruby-ruumba
- "Whether to only report code issues in Ruumba.
-
-When non-nil, only report code issues in Ruumba, via `--lint'.
-Otherwise report style issues as well."
- :safe #'booleanp
- :type 'boolean
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker eruby-ruumba
- "An eRuby syntax and style checker using the Ruumba tool.
-
-You need at least Ruumba 0.1.7 for this syntax checker.
-
-See URL `https://github.com/ericqweinstein/ruumba'."
- :command ("ruumba"
- "--display-cop-names"
- "--force-exclusion"
- "--format" "emacs"
- "--cache" "false"
- (config-file "--config" flycheck-ruumbarc)
- (option-flag "--lint" flycheck-ruumba-lint-only)
- ;; Ruumba takes the original file name as argument when reading
- ;; from standard input
- "--stdin" source-original)
- :standard-input t
- :working-directory flycheck-ruby--find-project-root
- :error-patterns
- ((info line-start (file-name) ":" line ":" column ": C: "
- (optional (id (one-or-more (not (any ":")))) ": ") (message) line-end)
- (warning line-start (file-name) ":" line ":" column ": W: "
- (optional (id (one-or-more (not (any ":")))) ": ") (message)
- line-end)
- (error line-start (file-name) ":" line ":" column ": " (or "E" "F") ": "
- (optional (id (one-or-more (not (any ":")))) ": ") (message)
- line-end))
- :modes (html-erb-mode rhtml-mode))
-
-(flycheck-def-args-var flycheck-gfortran-args fortran-gfortran
- :package-version '(flycheck . "0.22"))
-
-(flycheck-def-option-var flycheck-gfortran-include-path nil fortran-gfortran
- "A list of include directories for GCC Fortran.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of gcc.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gfortran-language-standard "f95"
- fortran-gfortran
- "The language standard to use in GFortran.
-
-The value of this variable is either a string denoting a language
-standard, or nil, to use the default standard. When non-nil,
-pass the language standard via the `-std' option."
- :type '(choice (const :tag "Default standard" nil)
- (string :tag "Language standard"))
- :package-version '(flycheck . "0.20"))
-
-(flycheck-def-option-var flycheck-gfortran-layout nil fortran-gfortran
- "The source code layout to use in GFortran.
-
-The value of this variable is one of the following symbols:
-
-nil
- Let gfortran determine the layout from the extension
-
-`free'
- Use free form layout
-
-
-`fixed'
- Use fixed form layout
-
-In any other case, an error is signaled."
- :type '(choice (const :tag "Guess layout from extension" nil)
- (const :tag "Free form layout" free)
- (const :tag "Fixed form layout" fixed))
- :safe (lambda (value) (or (not value) (memq value '(free fixed))))
- :package-version '(flycheck . "0.20"))
-
-(defun flycheck-option-gfortran-layout (value)
- "Option VALUE filter for `flycheck-gfortran-layout'."
- (pcase value
- (`nil nil)
- (`free "free-form")
- (`fixed "fixed-form")
- (_ (error "Invalid value for flycheck-gfortran-layout: %S" value))))
-
-(flycheck-def-option-var flycheck-gfortran-warnings '("all" "extra")
- fortran-gfortran
- "A list of warnings for GCC Fortran.
-
-The value of this variable is a list of strings, where each string
-is the name of a warning category to enable. By default, all
-recommended warnings and some extra warnings are enabled (as by
-`-Wall' and `-Wextra' respectively).
-
-Refer to the gfortran manual at URL
-`https://gcc.gnu.org/onlinedocs/gfortran/' for more information
-about warnings"
- :type '(choice (const :tag "No additional warnings" nil)
- (repeat :tag "Additional warnings"
- (string :tag "Warning name")))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.20"))
-
-(flycheck-define-checker fortran-gfortran
- "An Fortran syntax checker using GCC.
-
-Uses GCC's Fortran compiler gfortran. See URL
-`https://gcc.gnu.org/onlinedocs/gfortran/'."
- :command ("gfortran"
- "-fsyntax-only"
- "-fshow-column"
- ;; Do not visually indicate the source location
- "-fno-diagnostics-show-caret"
- ;; Do not show the corresponding warning group
- "-fno-diagnostics-show-option"
- ;; Fortran has similar include processing as C/C++
- "-iquote" (eval (flycheck-c/c++-quoted-include-directory))
- (option "-std=" flycheck-gfortran-language-standard concat)
- (option "-f" flycheck-gfortran-layout concat
- flycheck-option-gfortran-layout)
- (option-list "-W" flycheck-gfortran-warnings concat)
- (option-list "-I" flycheck-gfortran-include-path concat)
- (eval flycheck-gfortran-args)
- source)
- :error-patterns
- ((error line-start (file-name) ":" line (or ":" ".") column (or ": " ":\n")
- (or (= 3 (zero-or-more not-newline) "\n") "")
- (or "Error" "Fatal Error") ": "
- (message) line-end)
- (warning line-start (file-name) ":" line (or ":" ".") column (or ": " ":\n")
- (or (= 3 (zero-or-more not-newline) "\n") "")
- "Warning: " (message) line-end))
- :modes (fortran-mode f90-mode))
-
-(flycheck-define-checker go-gofmt
- "A Go syntax and style checker using the gofmt utility.
-
-See URL `https://golang.org/cmd/gofmt/'."
- :command ("gofmt")
- :standard-input t
- :error-patterns
- ((error line-start "<standard input>:" line ":" column ": "
- (message) line-end))
- :modes go-mode
- :next-checkers ((warning . go-golint)
- ;; Fall back, if go-golint doesn't exist
- (warning . go-vet)
- ;; Fall back, if go-vet doesn't exist
- (warning . go-build) (warning . go-test)
- (warning . go-errcheck)
- (warning . go-unconvert)
- (warning . go-staticcheck)))
-
-(flycheck-define-checker go-golint
- "A Go style checker using Golint.
-
-See URL `https://github.com/golang/lint'."
- :command ("golint" source)
- :error-patterns
- ((warning line-start (file-name) ":" line ":" column ": " (message) line-end))
- :modes go-mode
- :next-checkers (go-vet
- ;; Fall back, if go-vet doesn't exist
- go-build go-test go-errcheck go-unconvert))
-
-(flycheck-def-option-var flycheck-go-vet-print-functions nil go-vet
- "A list of print-like functions for `go vet'.
-
-Go vet will check these functions for format string problems and
-issues, such as a mismatch between the number of formats used,
-and the number of arguments given.
-
-Each entry is in the form Name:N where N is the zero-based
-argument position of the first argument involved in the print:
-either the format or the first print argument for non-formatted
-prints. For example, if you have Warn and Warnf functions that
-take an io.Writer as their first argument, like Fprintf,
--printfuncs=Warn:1,Warnf:1 "
- :type '(repeat :tag "print-like functions"
- (string :tag "function"))
- :safe #'flycheck-string-list-p)
-
-(flycheck-define-checker go-vet
- "A Go syntax checker using the `go vet' command.
-
-See URL `https://golang.org/cmd/go/' and URL
-`https://golang.org/cmd/vet/'."
- :command ("go" "vet"
- (option "-printf.funcs=" flycheck-go-vet-print-functions concat
- flycheck-option-comma-separated-list)
- source)
- :error-patterns
- ((warning line-start (file-name) ":" line ": " (message) line-end))
- :modes go-mode
- :next-checkers (go-build
- go-test
- ;; Fall back if `go build' or `go test' can be used
- go-errcheck
- go-unconvert
- go-staticcheck)
- :verify (lambda (_)
- (let* ((go (flycheck-checker-executable 'go-vet))
- (have-vet (member "vet" (ignore-errors
- (process-lines go "tool")))))
- (list
- (flycheck-verification-result-new
- :label "go tool vet"
- :message (if have-vet "present" "missing")
- :face (if have-vet 'success '(bold error)))))))
-
-(flycheck-def-option-var flycheck-go-build-install-deps nil (go-build go-test)
- "Whether to install dependencies in `go build' and `go test'.
-
-If non-nil automatically install dependencies with `go build'
-while syntax checking."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.25"))
-
-(flycheck-def-option-var flycheck-go-build-tags nil
- (go-build go-test go-errcheck go-staticcheck)
- "A list of tags for `go build'.
-
-Each item is a string with a tag to be given to `go build'."
- :type '(repeat (string :tag "Tag"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.25"))
-
-
-(flycheck-def-option-var flycheck-go-version nil go-staticcheck
- "The version of go that should be targeted by `staticcheck'.
-
-Should be a string representing a version, like 1.6 or 1.11.4.
-See `https://staticcheck.io/docs/#targeting-go-versions' for
-details."
- :type '(choice (const :tag "Unspecified" nil)
- (string :tag "Version"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "0.32"))
-
-(flycheck-define-checker go-build
- "A Go syntax and type checker using the `go build' command.
-
-Requires Go 1.6 or newer. See URL `https://golang.org/cmd/go'."
- :command ("go" "build"
- (option-flag "-i" flycheck-go-build-install-deps)
- ;; multiple tags are listed as "dev debug ..."
- (option-list "-tags=" flycheck-go-build-tags concat)
- "-o" null-device)
- :error-patterns
- ((error line-start (file-name) ":" line ":"
- (optional column ":") " "
- (message (one-or-more not-newline)
- (zero-or-more "\n\t" (one-or-more not-newline)))
- line-end)
- ;; Catch error message about multiple packages in a directory, which doesn't
- ;; follow the standard error message format.
- (info line-start
- (message "can't load package: package "
- (one-or-more (not (any ?: ?\n)))
- ": found packages "
- (one-or-more not-newline))
- line-end))
- :error-filter
- (lambda (errors)
- (dolist (error errors)
- (unless (flycheck-error-line error)
- ;; Flycheck ignores errors without line numbers, but the error
- ;; message about multiple packages in a directory doesn't come with a
- ;; line number, so inject a fake one.
- (setf (flycheck-error-line error) 1)))
- errors)
- :modes go-mode
- :predicate (lambda ()
- (and (flycheck-buffer-saved-p)
- (not (string-suffix-p "_test.go" (buffer-file-name)))))
- :next-checkers ((warning . go-errcheck)
- (warning . go-unconvert)
- (warning . go-staticcheck)))
-
-(flycheck-define-checker go-test
- "A Go syntax and type checker using the `go test' command.
-
-Requires Go 1.6 or newer. See URL `https://golang.org/cmd/go'."
- :command ("go" "test"
- (option-flag "-i" flycheck-go-build-install-deps)
- (option-list "-tags=" flycheck-go-build-tags concat)
- "-c" "-o" null-device)
- :error-patterns
- ((error line-start (file-name) ":" line ":"
- (optional column ":") " "
- (message (one-or-more not-newline)
- (zero-or-more "\n\t" (one-or-more not-newline)))
- line-end))
- :modes go-mode
- :predicate
- (lambda () (and (flycheck-buffer-saved-p)
- (string-suffix-p "_test.go" (buffer-file-name))))
- :next-checkers ((warning . go-errcheck)
- (warning . go-unconvert)
- (warning . go-staticcheck)))
-
-(flycheck-define-checker go-errcheck
- "A Go checker for unchecked errors.
-
-Requires errcheck newer than commit 8515d34 (Aug 28th, 2015).
-
-See URL `https://github.com/kisielk/errcheck'."
- :command ("errcheck"
- "-abspath"
- (option-list "-tags=" flycheck-go-build-tags concat)
- ".")
- :error-patterns
- ((warning line-start
- (file-name) ":" line ":" column (or (one-or-more "\t") ": " ":\t")
- (message)
- line-end))
- :error-filter
- (lambda (errors)
- (let ((errors (flycheck-sanitize-errors errors)))
- (dolist (err errors)
- (-when-let (message (flycheck-error-message err))
- ;; Improve the messages reported by errcheck to make them more clear.
- (setf (flycheck-error-message err)
- (format "Ignored `error` returned from `%s`" message)))))
- errors)
- :modes go-mode
- :predicate (lambda () (flycheck-buffer-saved-p))
- :next-checkers ((warning . go-unconvert)
- (warning . go-staticcheck)))
-
-(flycheck-define-checker go-unconvert
- "A Go checker looking for unnecessary type conversions.
-
-See URL `https://github.com/mdempsky/unconvert'."
- :command ("unconvert" ".")
- :error-patterns
- ((warning line-start (file-name) ":" line ":" column ": " (message) line-end))
- :modes go-mode
- :predicate (lambda () (flycheck-buffer-saved-p)))
-
-(flycheck-define-checker go-staticcheck
- "A Go checker that performs static analysis and linting using
-the `staticcheck' command.
-
-`staticcheck' is explicitly fully compatible with \"the last two
-versions of go\". `staticheck' can target earlier versions (with
-limited features) if `flycheck-go-version' is set. See URL
-`https://staticcheck.io/'."
- :command ("staticcheck" "-f" "json"
- (option-list "-tags" flycheck-go-build-tags concat)
- (option "-go" flycheck-go-version))
-
- :error-parser flycheck-parse-go-staticcheck
- :modes go-mode)
-
-(flycheck-define-checker groovy
- "A groovy syntax checker using groovy compiler API.
-
-See URL `http://www.groovy-lang.org'."
- :command ("groovy" "-e"
- "import org.codehaus.groovy.control.*
-
-unit = new CompilationUnit()
-unit.addSource(\"input\", System.in)
-
-try {
- unit.compile(Phases.CONVERSION)
-} catch (MultipleCompilationErrorsException e) {
- e.errorCollector.write(new PrintWriter(System.out, true), null)
-}")
- :standard-input t
- :error-patterns
- ((error line-start "input: " line ":" (message)
- " @ line " line ", column " column "." line-end))
- :modes groovy-mode)
-
-(flycheck-define-checker haml
- "A Haml syntax checker using the Haml compiler.
-
-See URL `http://haml.info'."
- :command ("haml" "-c" "--stdin")
- :standard-input t
- :error-patterns
- ((error line-start "Syntax error on line " line ": " (message) line-end)
- (error line-start ":" line ": syntax error, " (message) line-end))
- :modes haml-mode)
-
-(flycheck-define-checker handlebars
- "A Handlebars syntax checker using the Handlebars compiler.
-
-See URL `http://handlebarsjs.com/'."
- :command ("handlebars" "-i-")
- :standard-input t
- :error-patterns
- ((error line-start
- "Error: Parse error on line " line ":" (optional "\r") "\n"
- (zero-or-more not-newline) "\n" (zero-or-more not-newline) "\n"
- (message) line-end))
- :modes (handlebars-mode handlebars-sgml-mode web-mode)
- :predicate
- (lambda ()
- (if (eq major-mode 'web-mode)
- ;; Check if this is a handlebars file since web-mode does not store the
- ;; non-canonical engine name
- (let* ((regexp-alist (bound-and-true-p web-mode-engine-file-regexps))
- (pattern (cdr (assoc "handlebars" regexp-alist))))
- (and pattern (buffer-file-name)
- (string-match-p pattern (buffer-file-name))))
- t)))
-
-(defconst flycheck-haskell-module-re
- (rx line-start (zero-or-more (or "\n" (any space)))
- "module" (one-or-more (or "\n" (any space)))
- (group (one-or-more (not (any space "(" "\n")))))
- "Regular expression for a Haskell module name.")
-
-(flycheck-def-args-var flycheck-ghc-args (haskell-stack-ghc haskell-ghc)
- :package-version '(flycheck . "0.22"))
-
-(flycheck-def-option-var flycheck-ghc-stack-use-nix nil haskell-stack-ghc
- "Whether to enable nix support in stack.
-
-When non-nil, stack will append '--nix' flag to any call."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "26"))
-
-(flycheck-def-option-var flycheck-ghc-stack-project-file nil haskell-stack-ghc
- "Override project stack.yaml file.
-
-The value of this variable is a file path that refers to a yaml
-file for the current stack project. Relative file paths are
-resolved against the checker's working directory. When non-nil,
-stack will get overridden value via `--stack-yaml'."
- :type '(choice (const :tag "Unspecified" nil)
- (file :tag "Project file"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-
-(flycheck-def-option-var flycheck-ghc-no-user-package-database nil haskell-ghc
- "Whether to disable the user package database in GHC.
-
-When non-nil, disable the user package database in GHC, via
-`-no-user-package-db'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.16"))
-
-(flycheck-def-option-var flycheck-ghc-package-databases nil haskell-ghc
- "Additional module databases for GHC.
-
-The value of this variable is a list of strings, where each
-string is a directory of a package database. Each package
-database is given to GHC via `-package-db'."
- :type '(repeat (directory :tag "Package database"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.16"))
-
-(flycheck-def-option-var flycheck-ghc-search-path nil
- (haskell-stack-ghc haskell-ghc)
- "Module search path for (Stack) GHC.
-
-The value of this variable is a list of strings, where each
-string is a directory containing Haskell modules. Each directory
-is added to the GHC search path via `-i'."
- :type '(repeat (directory :tag "Module directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.16"))
-
-(flycheck-def-option-var flycheck-ghc-language-extensions nil
- (haskell-stack-ghc haskell-ghc)
- "Language extensions for (Stack) GHC.
-
-The value of this variable is a list of strings, where each
-string is a Haskell language extension, as in the LANGUAGE
-pragma. Each extension is enabled via `-X'."
- :type '(repeat (string :tag "Language extension"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.19"))
-
-(defvar flycheck-haskell-ghc-cache-directory nil
- "The cache directory for `ghc' output.")
-
-(defun flycheck-haskell-ghc-cache-directory ()
- "Get the cache location for `ghc' output.
-
-If no cache directory exists yet, create one and return it.
-Otherwise return the previously used cache directory."
- (setq flycheck-haskell-ghc-cache-directory
- (or flycheck-haskell-ghc-cache-directory
- (make-temp-file "flycheck-haskell-ghc-cache" 'directory))))
-
-(defun flycheck--locate-dominating-file-matching (directory regexp)
- "Search for a file in directory hierarchy starting at DIRECTORY.
-
-Look up the directory hierarchy from DIRECTORY for a directory
-containing a file that matches REGEXP."
- (locate-dominating-file
- directory
- (lambda (dir)
- (directory-files dir nil regexp t))))
-
-(defun flycheck-haskell--find-stack-default-directory ()
- "Find a directory to run haskell-stack-ghc.
-
-Return a parent directory with a stack*.y[a]ml file, or the
-directory returned by \"stack path --project-root\"."
- (or
- (when (buffer-file-name)
- (flycheck--locate-dominating-file-matching
- (file-name-directory (buffer-file-name))
- (rx "stack" (* any) "." (or "yml" "yaml") eos)))
- (-when-let* ((stack (funcall flycheck-executable-find "stack"))
- (output (ignore-errors
- (process-lines stack
- "--no-install-ghc"
- "path" "--project-root")))
- (stack-dir (car output)))
- (and (file-directory-p stack-dir) stack-dir))))
-
-(defun flycheck-haskell--ghc-find-default-directory (_checker)
- "Find a parent directory containing a cabal or package.yaml file."
- (when (buffer-file-name)
- (flycheck--locate-dominating-file-matching
- (file-name-directory (buffer-file-name))
- "\\.cabal\\'\\|\\`package\\.yaml\\'")))
-
-(flycheck-define-checker haskell-stack-ghc
- "A Haskell syntax and type checker using `stack ghc'.
-
-See URL `https://github.com/commercialhaskell/stack'."
- :command ("stack"
- "--no-install-ghc"
- (option "--stack-yaml" flycheck-ghc-stack-project-file)
- (option-flag "--nix" flycheck-ghc-stack-use-nix)
- "ghc" "--" "-Wall" "-no-link"
- "-outputdir" (eval (flycheck-haskell-ghc-cache-directory))
- (option-list "-X" flycheck-ghc-language-extensions concat)
- (option-list "-i" flycheck-ghc-search-path concat)
- (eval (concat
- "-i"
- (flycheck-module-root-directory
- (flycheck-find-in-buffer flycheck-haskell-module-re))))
- (eval flycheck-ghc-args)
- "-x" (eval
- (pcase major-mode
- (`haskell-mode "hs")
- (`haskell-literate-mode "lhs")))
- source)
- :error-patterns
- ((warning line-start (file-name) ":" line ":" column ":"
- (or " " "\n ") (in "Ww") "arning:"
- (optional " " "[" (id (one-or-more not-newline)) "]")
- (optional "\n")
- (message
- (one-or-more " ") (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more (not (any ?\n ?|)))))
- line-end)
- (error line-start (file-name) ":" line ":" column ":" (optional " error:")
- (or (message (one-or-more not-newline))
- (and "\n"
- (message
- (one-or-more " ") (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more (not (any ?\n ?|)))))))
- line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors (flycheck-dedent-error-messages errors)))
- :modes (haskell-mode haskell-literate-mode)
- :next-checkers ((warning . haskell-hlint))
- :working-directory (lambda (_)
- (flycheck-haskell--find-stack-default-directory))
- :enabled flycheck-haskell--find-stack-default-directory
- :verify (lambda (_)
- (let* ((stack (flycheck-haskell--find-stack-default-directory)))
- (list
- (flycheck-verification-result-new
- :label "stack config"
- :message (or stack "Not found")
- :face (if stack 'success '(bold error)))))))
-
-(flycheck-define-checker haskell-ghc
- "A Haskell syntax and type checker using ghc.
-
-See URL `https://www.haskell.org/ghc/'."
- :command ("ghc" "-Wall" "-no-link"
- "-outputdir" (eval (flycheck-haskell-ghc-cache-directory))
- (option-flag "-no-user-package-db"
- flycheck-ghc-no-user-package-database)
- (option-list "-package-db" flycheck-ghc-package-databases)
- (option-list "-i" flycheck-ghc-search-path concat)
- ;; Include the parent directory of the current module tree, to
- ;; properly resolve local imports
- (eval (concat
- "-i"
- (flycheck-module-root-directory
- (flycheck-find-in-buffer flycheck-haskell-module-re))))
- (option-list "-X" flycheck-ghc-language-extensions concat)
- (eval flycheck-ghc-args)
- "-x" (eval
- (pcase major-mode
- (`haskell-mode "hs")
- (`haskell-literate-mode "lhs")))
- source)
- :error-patterns
- ((warning line-start (file-name) ":" line ":" column ":"
- (or " " "\n ") (in "Ww") "arning:"
- (optional " " "[" (id (one-or-more not-newline)) "]")
- (optional "\n")
- (message
- (one-or-more " ") (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more (not (any ?\n ?|)))))
- line-end)
- (error line-start (file-name) ":" line ":" column ":" (optional " error:")
- (or (message (one-or-more not-newline))
- (and "\n"
- (message
- (one-or-more " ") (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more (not (any ?\n ?|)))))))
- line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors (flycheck-dedent-error-messages errors)))
- :modes (haskell-mode haskell-literate-mode)
- :next-checkers ((warning . haskell-hlint))
- :working-directory flycheck-haskell--ghc-find-default-directory)
-
-(flycheck-def-config-file-var flycheck-hlintrc haskell-hlint "HLint.hs")
-
-(flycheck-def-args-var flycheck-hlint-args haskell-hlint
- :package-version '(flycheck . "0.25"))
-
-(flycheck-def-option-var flycheck-hlint-language-extensions
- nil haskell-hlint
- "Extensions list to enable for hlint.
-
-The value of this variable is a list of strings, where each
-string is a name of extension to enable in
-hlint (e.g. \"QuasiQuotes\")."
- :type '(repeat :tag "Extensions" (string :tag "Extension"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-def-option-var flycheck-hlint-ignore-rules
- nil haskell-hlint
- "Ignore rules list for hlint checks.
-
-The value of this variable is a list of strings, where each
-string is an ignore rule (e.g. \"Use fmap\")."
- :type '(repeat :tag "Ignore rules" (string :tag "Ignore rule"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-def-option-var flycheck-hlint-hint-packages
- nil haskell-hlint
- "Hint packages to include for hlint checks.
-
-The value of this variable is a list of strings, where each
-string is a default hint package (e.g. (\"Generalise\"
-\"Default\" \"Dollar\"))."
- :type '(repeat :tag "Hint packages" (string :tag "Hint package"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-define-checker haskell-hlint
- "A Haskell style checker using hlint.
-
-See URL `https://github.com/ndmitchell/hlint'."
- :command ("hlint"
- (option-list "-X" flycheck-hlint-language-extensions concat)
- (option-list "-i=" flycheck-hlint-ignore-rules concat)
- (option-list "-h" flycheck-hlint-hint-packages concat)
- (config-file "-h" flycheck-hlintrc)
- (eval flycheck-hlint-args)
- source-inplace)
- :error-patterns
- ((info line-start
- (file-name) ":" line ":" column
- ": Suggestion: "
- (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n)))
- line-end)
- (warning line-start
- (file-name) ":" line ":" column
- ": Warning: "
- (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n)))
- line-end)
- (error line-start
- (file-name) ":" line ":" column
- ": Error: "
- (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n)))
- line-end))
- :modes (haskell-mode haskell-literate-mode))
-
-(flycheck-def-config-file-var flycheck-tidyrc html-tidy ".tidyrc")
-
-(flycheck-define-checker html-tidy
- "A HTML syntax and style checker using Tidy.
-
-See URL `https://github.com/htacg/tidy-html5'."
- :command ("tidy" (config-file "-config" flycheck-tidyrc)
- "-lang" "en"
- "-e" "-q")
- :standard-input t
- :error-patterns
- ((error line-start
- "line " line
- " column " column
- " - Error: " (message) line-end)
- (warning line-start
- "line " line
- " column " column
- " - Warning: " (message) line-end))
- :modes (html-mode mhtml-mode nxhtml-mode))
-
-(flycheck-def-config-file-var flycheck-jshintrc javascript-jshint ".jshintrc")
-
-(flycheck-def-option-var flycheck-jshint-extract-javascript nil
- javascript-jshint
- "Whether jshint should extract Javascript from HTML.
-
-If nil no extract rule is given to jshint. If `auto' only
-extract Javascript if a HTML file is detected. If `always' or
-`never' extract Javascript always or never respectively.
-
-Refer to the jshint manual at the URL
-`http://jshint.com/docs/cli/#flags' for more information."
- :type
- '(choice (const :tag "No extraction rule" nil)
- (const :tag "Try to extract Javascript when detecting HTML files"
- auto)
- (const :tag "Always try to extract Javascript" always)
- (const :tag "Never try to extract Javascript" never))
- :safe #'symbolp
- :package-version '(flycheck . "26"))
-
-(flycheck-define-checker javascript-jshint
- "A Javascript syntax and style checker using jshint.
-
-See URL `http://www.jshint.com'."
- :command ("jshint" "--reporter=checkstyle"
- "--filename" source-original
- (config-file "--config" flycheck-jshintrc)
- (option "--extract=" flycheck-jshint-extract-javascript
- concat flycheck-option-symbol)
- "-")
- :standard-input t
- :error-parser flycheck-parse-checkstyle
- :error-filter
- (lambda (errors)
- (flycheck-remove-error-file-names
- "stdin" (flycheck-dequalify-error-ids errors)))
- :modes (js-mode js2-mode js3-mode rjsx-mode))
-
-(flycheck-def-args-var flycheck-eslint-args javascript-eslint
- :package-version '(flycheck . "32"))
-
-(flycheck-def-option-var flycheck-eslint-rules-directories nil javascript-eslint
- "A list of directories with custom rules for ESLint.
-
-The value of this variable is a list of strings, where each
-string is a directory with custom rules for ESLint.
-
-Refer to the ESLint manual at URL
-`http://eslint.org/docs/user-guide/command-line-interface#--rulesdir'
-for more information about the custom directories."
- :type '(repeat (directory :tag "Custom rules directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "29"))
-
-(defun flycheck-eslint-config-exists-p ()
- "Whether there is a valid eslint config for the current buffer."
- (let* ((executable (flycheck-find-checker-executable 'javascript-eslint))
- (exitcode (and executable
- (call-process executable nil nil nil
- "--print-config" (or buffer-file-name
- "index.js")))))
- (eq exitcode 0)))
-
-(defun flycheck-parse-eslint (output checker buffer)
- "Parse ESLint errors/warnings from JSON OUTPUT.
-
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `https://eslint.org' for more information about ESLint."
- (mapcar (lambda (err)
- (let-alist err
- (flycheck-error-new-at
- .line
- .column
- (pcase .severity
- (2 'error)
- (1 'warning)
- (_ 'warning))
- .message
- :id .ruleId
- :checker checker
- :buffer buffer
- :filename (buffer-file-name buffer)
- :end-line .endLine
- :end-column .endColumn)))
- (let-alist (caar (flycheck-parse-json output))
- .messages)))
-
-(defun flycheck-eslint--find-working-directory (_checker)
- "Look for a working directory to run ESLint CHECKER in.
-
-This will be the directory that contains the `node_modules'
-directory. If no such directory is found in the directory
-hierarchy, it looks first for `.eslintignore' and then for
-`.eslintrc' files to detect the project root."
- (let* ((regex-config (concat "\\`\\.eslintrc"
- "\\(\\.\\(js\\|ya?ml\\|json\\)\\)?\\'")))
- (when buffer-file-name
- (or (locate-dominating-file buffer-file-name "node_modules")
- (locate-dominating-file buffer-file-name ".eslintignore")
- (locate-dominating-file
- (file-name-directory buffer-file-name)
- (lambda (directory)
- (> (length (directory-files directory nil regex-config t)) 0)))))))
-
-(flycheck-define-checker javascript-eslint
- "A Javascript syntax and style checker using eslint.
-
-See URL `https://eslint.org/'."
- :command ("eslint" "--format=json"
- (option-list "--rulesdir" flycheck-eslint-rules-directories)
- (eval flycheck-eslint-args)
- "--stdin" "--stdin-filename" source-original)
- :standard-input t
- :error-parser flycheck-parse-eslint
- :enabled (lambda () (flycheck-eslint-config-exists-p))
- :modes (js-mode js-jsx-mode js2-mode js2-jsx-mode js3-mode rjsx-mode
- typescript-mode)
- :working-directory flycheck-eslint--find-working-directory
- :verify
- (lambda (_)
- (let* ((default-directory
- (flycheck-compute-working-directory 'javascript-eslint))
- (have-config (flycheck-eslint-config-exists-p)))
- (list
- (flycheck-verification-result-new
- :label "config file"
- :message (if have-config "found" "missing or incorrect")
- :face (if have-config 'success '(bold error)))))))
-
-(flycheck-define-checker javascript-standard
- "A Javascript code and style checker for the (Semi-)Standard Style.
-
-This checker works with `standard' and `semistandard', defaulting
-to the former. To use it with the latter, set
-`flycheck-javascript-standard-executable' to `semistandard'.
-
-See URL `https://github.com/standard/standard' and URL
-`https://github.com/Flet/semistandard'."
- :command ("standard" "--stdin")
- :standard-input t
- :error-patterns
- ((error line-start " <text>:" line ":" column ":" (message) line-end))
- :modes (js-mode js-jsx-mode js2-mode js2-jsx-mode js3-mode rjsx-mode))
-
-(flycheck-define-checker json-jsonlint
- "A JSON syntax and style checker using jsonlint.
-
-See URL `https://github.com/zaach/jsonlint'."
- ;; We can't use standard input for jsonlint, because it doesn't output errors
- ;; anymore when using -c -q with standard input :/
- :command ("jsonlint" "-c" "-q" source)
- :error-patterns
- ((error line-start
- (file-name)
- ": line " line
- ", col " column ", "
- (message) line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors (flycheck-increment-error-columns errors)))
- :modes json-mode)
-
-(flycheck-define-checker json-python-json
- "A JSON syntax checker using Python json.tool module.
-
-See URL `https://docs.python.org/3.5/library/json.html#command-line-interface'."
- :command ("python3" "-m" "json.tool" source
- ;; Send the pretty-printed output to the null device
- null-device)
- :error-patterns
- ((error line-start
- (message) ": line " line " column " column
- ;; Ignore the rest of the line which shows the char position.
- (one-or-more not-newline)
- line-end))
- :modes json-mode
- ;; The JSON parser chokes if the buffer is empty and has no JSON inside
- :predicate flycheck-buffer-nonempty-p)
-
-(flycheck-define-checker json-jq
- "JSON checker using the jq tool.
-
-This checker accepts multiple consecutive JSON values in a
-single input, which is useful for jsonlines data.
-
-See URL `https://stedolan.github.io/jq/'."
- :command ("jq" "." source null-device)
- ;; Example error message:
- ;; parse error: Expected another key-value pair at line 3, column 1
- :error-patterns
- ((error line-start
- (optional "parse error: ")
- (message) "at line " line ", column " column
- (zero-or-more not-newline) line-end))
- :modes json-mode)
-
-(flycheck-define-checker jsonnet
- "A Jsonnet syntax checker using the jsonnet binary.
-
-See URL `https://jsonnet.org'."
- :command ("jsonnet" source-inplace)
- :error-patterns
- ((error line-start "STATIC ERROR: " (file-name) ":"
- (or (seq line ":" column (zero-or-one (seq "-" end-column)))
- (seq "(" line ":" column ")" "-"
- "(" end-line ":" end-column ")"))
- ": " (message) line-end)
- (error line-start "RUNTIME ERROR: " (message) "\n"
- (? "\t" (file-name) ":" ;; first line of the backtrace
- (or (seq line ":" column (zero-or-one (seq "-" end-column)))
- (seq "(" line ":" column ")" "-"
- "(" end-line ":" end-column ")")))))
- :error-filter
- (lambda (errs)
- ;; Some errors are missing line numbers. See URL
- ;; `https://github.com/google/jsonnet/issues/786'.
- (dolist (err errs)
- (unless (flycheck-error-line err)
- (setf (flycheck-error-line err) 1)))
- (flycheck-sanitize-errors errs))
- :modes jsonnet-mode)
-
-(flycheck-define-checker less
- "A LESS syntax checker using lessc.
-
-Requires lessc 1.4 or newer.
-
-See URL `http://lesscss.org'."
- :command ("lessc" "--lint" "--no-color"
- "-")
- :standard-input t
- :error-patterns
- ((error line-start (one-or-more word) ":"
- (message)
- " in - on line " line
- ", column " column ":"
- line-end))
- :modes less-css-mode)
-
-(flycheck-define-checker less-stylelint
- "A LESS syntax and style checker using stylelint.
-
-See URL `http://stylelint.io/'."
- :command ("stylelint"
- (eval flycheck-stylelint-args)
- "--syntax" "less"
- (option-flag "--quiet" flycheck-stylelint-quiet)
- (config-file "--config" flycheck-stylelintrc))
- :standard-input t
- :error-parser flycheck-parse-stylelint
- :predicate flycheck-buffer-nonempty-p
- :modes (less-css-mode))
-
-(flycheck-define-checker llvm-llc
- "Flycheck LLVM IR checker using llc.
-
-See URL `http://llvm.org/docs/CommandGuide/llc.html'."
- :command ("llc" "-o" null-device source)
- :error-patterns
- ((error line-start
- ;; llc prints the executable path
- (zero-or-one (minimal-match (one-or-more not-newline)) ": ")
- (file-name) ":" line ":" column ": error: " (message)
- line-end))
- :error-filter
- (lambda (errors)
- ;; sanitize errors occurring in inline assembly
- (flycheck-sanitize-errors
- (flycheck-remove-error-file-names "<inline asm>" errors)))
- :modes llvm-mode)
-
-(flycheck-def-config-file-var flycheck-luacheckrc lua-luacheck ".luacheckrc")
-
-(flycheck-def-option-var flycheck-luacheck-standards nil lua-luacheck
- "The standards to use in luacheck.
-
-The value of this variable is either a list of strings denoting
-the standards to use, or nil to pass nothing to luacheck. When
-non-nil, pass the standards via one or more `--std' options."
- :type '(choice (const :tag "Default" nil)
- (repeat :tag "Custom standards"
- (string :tag "Standard name")))
- :safe #'flycheck-string-list-p)
-(make-variable-buffer-local 'flycheck-luacheck-standards)
-
-(flycheck-define-checker lua-luacheck
- "A Lua syntax checker using luacheck.
-
-See URL `https://github.com/mpeterv/luacheck'."
- :command ("luacheck"
- "--formatter" "plain"
- "--codes" ; Show warning codes
- "--no-color"
- (option-list "--std" flycheck-luacheck-standards)
- (config-file "--config" flycheck-luacheckrc)
- "--filename" source-original
- ;; Read from standard input
- "-")
- :standard-input t
- :error-patterns
- ((warning line-start
- (optional (file-name))
- ":" line ":" column
- ": (" (id "W" (one-or-more digit)) ") "
- (message) line-end)
- (error line-start
- (optional (file-name))
- ":" line ":" column ":"
- ;; `luacheck' before 0.11.0 did not output codes for errors, hence
- ;; the ID is optional here
- (optional " (" (id "E" (one-or-more digit)) ") ")
- (message) line-end))
- :modes lua-mode)
-
-(flycheck-define-checker lua
- "A Lua syntax checker using the Lua compiler.
-
-See URL `http://www.lua.org/'."
- :command ("luac" "-p" "-")
- :standard-input t
- :error-patterns
- ((error line-start
- ;; Skip the name of the luac executable.
- (minimal-match (zero-or-more not-newline))
- ": stdin:" line ": " (message) line-end))
- :modes lua-mode)
-
-(flycheck-define-checker opam
- "A Opam syntax and style checker using opam lint.
-
-See URL `https://opam.ocaml.org/doc/man/opam-lint.html'."
- :command ("opam" "lint" "-")
- :standard-input t
- :error-patterns
- ((error line-start ; syntax error
- (one-or-more space) "error " (id ?2)
- ": File format error"
- (or (and " at line " line ", column " column ": " (message))
- (and ": " (message)))
- line-end)
- (error line-start
- (one-or-more space) "error " (id ?3)
- (minimal-match (zero-or-more not-newline))
- "at line " line ", column " column ": " (message)
- line-end)
- (error line-start
- (one-or-more space) "error " (id (one-or-more num))
- ": " (message (one-or-more not-newline))
- line-end)
- (warning line-start
- (one-or-more space) "warning " (id (one-or-more num))
- ": " (message)
- line-end))
- :error-filter
- (lambda (errors)
- (flycheck-increment-error-columns
- (flycheck-fill-empty-line-numbers errors)))
- :modes tuareg-opam-mode)
-
-(flycheck-def-option-var flycheck-perl-include-path nil perl
- "A list of include directories for Perl.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of Perl.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-def-option-var flycheck-perl-module-list nil perl
- "A list of modules to use for Perl.
-
-The value of this variable is a list of strings, where each
-string is a module to 'use' in Perl."
- :type '(repeat :tag "Module")
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker perl
- "A Perl syntax checker using the Perl interpreter.
-
-See URL `https://www.perl.org'."
- :command ("perl" "-w" "-c"
- (option-list "-I" flycheck-perl-include-path)
- (option-list "-M" flycheck-perl-module-list concat))
- :standard-input t
- :error-patterns
- ((error line-start (minimal-match (message))
- " at - line " line
- (or "." (and ", " (zero-or-more not-newline))) line-end))
- :modes (perl-mode cperl-mode)
- :next-checkers (perl-perlcritic))
-
-(flycheck-def-option-var flycheck-perlcritic-severity nil perl-perlcritic
- "The message severity for Perl Critic.
-
-The value of this variable is a severity level as integer, for
-the `--severity' option to Perl Critic."
- :type '(integer :tag "Severity level")
- :safe #'integerp
- :package-version '(flycheck . "0.18"))
-
-(flycheck-def-option-var flycheck-perlcritic-theme nil perl-perlcritic
- "The theme expression for Perl Critic.
-
-The value of this variable is passed as the `--theme' option to
-`Perl::Critic'. See the documentation of `Perl::Critic' for
-details."
- :type '(choice (const :tag "None" nil)
- (string :tag "Theme expression"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32-csv"))
-
-(flycheck-def-config-file-var flycheck-perlcriticrc perl-perlcritic
- ".perlcriticrc"
- :package-version '(flycheck . "26"))
-
-(flycheck-define-checker perl-perlcritic
- "A Perl syntax checker using Perl::Critic.
-
-See URL `https://metacpan.org/pod/Perl::Critic'."
- :command ("perlcritic" "--no-color" "--verbose" "%f/%l/%c/%s/%p/%m (%e)\n"
- (config-file "--profile" flycheck-perlcriticrc)
- (option "--severity" flycheck-perlcritic-severity nil
- flycheck-option-int)
- (option "--theme" flycheck-perlcritic-theme))
- :standard-input t
- :error-patterns
- ((info line-start
- "STDIN/" line "/" column "/" (any "1") "/"
- (id (one-or-more (not (any "/")))) "/" (message)
- line-end)
- (warning line-start
- "STDIN/" line "/" column "/" (any "234") "/"
- (id (one-or-more (not (any "/")))) "/" (message)
- line-end)
- (error line-start
- "STDIN/" line "/" column "/" (any "5") "/"
- (id (one-or-more (not (any "/")))) "/" (message)
- line-end))
- :modes (cperl-mode perl-mode))
-
-(flycheck-define-checker php
- "A PHP syntax checker using the PHP command line interpreter.
-
-See URL `http://php.net/manual/en/features.commandline.php'."
- :command ("php" "-l" "-d" "error_reporting=E_ALL" "-d" "display_errors=1"
- "-d" "log_errors=0" source)
- :error-patterns
- ((error line-start (or "Parse" "Fatal" "syntax") " error" (any ":" ",") " "
- (message) " in " (file-name) " on line " line line-end))
- :modes (php-mode php+-mode)
- :next-checkers ((warning . php-phpmd)
- (warning . php-phpcs)))
-
-(flycheck-def-option-var flycheck-phpmd-rulesets
- '("cleancode" "codesize" "controversial" "design" "naming" "unusedcode")
- php-phpmd
- "The rule sets for PHP Mess Detector.
-
-Set default rule sets and custom rule set files.
-
-See section \"Using multiple rule sets\" in the PHP Mess Detector
-manual at URL `https://phpmd.org/documentation/index.html'."
- :type '(repeat :tag "rule sets"
- (string :tag "A filename or rule set"))
- :safe #'flycheck-string-list-p)
-
-(flycheck-define-checker php-phpmd
- "A PHP style checker using PHP Mess Detector.
-
-See URL `https://phpmd.org/'."
- :command ("phpmd" source "xml"
- (eval (flycheck-option-comma-separated-list
- flycheck-phpmd-rulesets)))
- :error-parser flycheck-parse-phpmd
- :modes (php-mode php+-mode)
- :next-checkers (php-phpcs))
-
-(flycheck-def-option-var flycheck-phpcs-standard nil php-phpcs
- "The coding standard for PHP CodeSniffer.
-
-When nil, use the default standard from the global PHP
-CodeSniffer configuration. When set to a string, pass the string
-to PHP CodeSniffer which will interpret it as name as a standard,
-or as path to a standard specification."
- :type '(choice (const :tag "Default standard" nil)
- (string :tag "Standard name or file"))
- :safe #'flycheck-string-or-nil-p)
-
-(flycheck-define-checker php-phpcs
- "A PHP style checker using PHP Code Sniffer.
-
-Needs PHP Code Sniffer 2.6 or newer.
-
-See URL `http://pear.php.net/package/PHP_CodeSniffer/'."
- :command ("phpcs" "--report=checkstyle"
- ;; Use -q flag to force quiet mode
- ;; Quiet mode prevents errors from extra output when phpcs has
- ;; been configured with show_progress enabled
- "-q"
- (option "--standard=" flycheck-phpcs-standard concat)
- ;; Some files are not detected correctly
- ;; so it is necessary to pass the extension.
- (eval
- (-when-let* ((fname buffer-file-name)
- (ext (file-name-extension fname)))
- (concat "--extensions=" ext)))
-
- ;; Pass original file name to phpcs. We need to concat explicitly
- ;; here, because phpcs really insists to get option and argument as
- ;; a single command line argument :|
- (eval (when (buffer-file-name)
- (concat "--stdin-path=" (buffer-file-name))))
- ;; Read from standard input
- "-")
- :standard-input t
- :error-parser flycheck-parse-checkstyle
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors
- (flycheck-remove-error-file-names "STDIN" errors)))
- :modes (php-mode php+-mode)
- ;; phpcs seems to choke on empty standard input, hence skip phpcs if the
- ;; buffer is empty, see https://github.com/flycheck/flycheck/issues/907
- :predicate flycheck-buffer-nonempty-p)
-
-(flycheck-define-checker processing
- "Processing command line tool.
-
-See https://github.com/processing/processing/wiki/Command-Line"
- :command ("processing-java" "--force"
- ;; Don't change the order of these arguments, processing is pretty
- ;; picky
- (eval (concat "--sketch=" (file-name-directory (buffer-file-name))))
- (eval (concat "--output=" (flycheck-temp-dir-system)))
- "--build")
- :error-patterns
- ((error line-start (file-name) ":" line ":" column
- (zero-or-more (or digit ":")) (message) line-end))
- :modes processing-mode
- ;; This syntax checker needs a file name
- :predicate (lambda () (buffer-file-name)))
-
-(defun flycheck-proselint-parse-errors (output checker buffer)
- "Parse proselint json output errors from OUTPUT.
-
-CHECKER and BUFFER denoted the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `http://proselint.com/' for more information about proselint."
- (mapcar (lambda (err)
- (let-alist err
- (flycheck-error-new-at-pos
- .start
- (pcase .severity
- (`"suggestion" 'info)
- (`"warning" 'warning)
- (`"error" 'error)
- ;; Default to error
- (_ 'error))
- .message
- :id .check
- :buffer buffer
- :checker checker
- ;; See https://github.com/amperser/proselint/issues/1048
- :end-pos .end)))
- (let-alist (car (flycheck-parse-json output))
- .data.errors)))
-
-(flycheck-define-checker proselint
- "Flycheck checker using Proselint.
-
-See URL `http://proselint.com/'."
- :command ("proselint" "--json" "-")
- :standard-input t
- :error-parser flycheck-proselint-parse-errors
- :modes (text-mode markdown-mode gfm-mode message-mode org-mode))
-
-(flycheck-def-option-var flycheck-protoc-import-path nil protobuf-protoc
- "A list of directories to resolve import directives.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the import path. Relative paths
-are relative to the file being checked."
- :type '(repeat (directory :tag "Import directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker protobuf-protoc
- "A protobuf syntax checker using the protoc compiler.
-
-See URL `https://developers.google.com/protocol-buffers/'."
- :command ("protoc" "--error_format" "gcc"
- (eval (concat "--java_out=" (flycheck-temp-dir-system)))
- ;; Add the current directory to resolve imports
- (eval (concat "--proto_path="
- (file-name-directory (buffer-file-name))))
- ;; Add other import paths; this needs to be after the current
- ;; directory to produce the right output. See URL
- ;; `https://github.com/flycheck/flycheck/pull/1655'
- (option-list "--proto_path=" flycheck-protoc-import-path concat)
- source-inplace)
- :error-patterns
- ((info line-start (file-name) ":" line ":" column
- ": note: " (message) line-end)
- (error line-start (file-name) ":" line ":" column
- ": " (message) line-end)
- (error line-start
- (message "In file included from") " " (file-name) ":" line ":"
- column ":" line-end))
- :modes protobuf-mode
- :predicate (lambda () (buffer-file-name)))
-
-(defun flycheck-prototool-project-root (&optional _checker)
- "Return the nearest directory holding the prototool.yaml configuration."
- (and buffer-file-name
- (locate-dominating-file buffer-file-name "prototool.yaml")))
-
-(flycheck-define-checker protobuf-prototool
- "A protobuf syntax checker using prototool.
-
-See URL `https://github.com/uber/prototool'."
- :command ("prototool" "lint" source-original)
- :error-patterns
- ((warning line-start (file-name) ":" line ":" column ":" (message) line-end))
- :modes protobuf-mode
- :enabled flycheck-prototool-project-root
- :predicate flycheck-buffer-saved-p)
-
-(flycheck-define-checker pug
- "A Pug syntax checker using the pug compiler.
-
-See URL `https://pugjs.org/'."
- :command ("pug" "-p" (eval (expand-file-name (buffer-file-name))))
- :standard-input t
- :error-patterns
- ;; errors with includes/extends (e.g. missing files)
- ((error "Error: " (message) (zero-or-more not-newline) "\n"
- (zero-or-more not-newline) "at "
- (zero-or-more not-newline) " line " line)
- ;; error when placing anything other than a mixin or
- ;; block at the top-level of an extended template
- ;; also unknown filters
- (error line-start "Error: " (file-name) ":"
- line ":" column "\n\n" (message) line-end)
- ;; syntax/runtime errors (e.g. type errors, bad indentation, etc.)
- (error line-start
- (optional "Type") "Error: " (file-name) ":"
- line (optional ":" column)
- (zero-or-more not-newline) "\n"
- (one-or-more (or (zero-or-more not-newline) "|"
- (zero-or-more not-newline) "\n")
- (zero-or-more "-") (zero-or-more not-newline) "|"
- (zero-or-more not-newline) "\n")
- (zero-or-more not-newline) "\n"
- (one-or-more
- (zero-or-more not-newline) "|"
- (zero-or-more not-newline) "\n")
- (zero-or-more not-newline) "\n"
- (message)
- line-end))
- :modes pug-mode)
-
-(flycheck-define-checker puppet-parser
- "A Puppet DSL syntax checker using puppet's own parser.
-
-See URL `https://puppet.com/'."
- :command ("puppet" "parser" "validate" "--color=false")
- :standard-input t
- :error-patterns
- (
- ;; Patterns for Puppet 4
- (error line-start "Error: Could not parse for environment "
- (one-or-more (in "a-z" "0-9" "_")) ":"
- (message) "(line: " line ", column: " column ")" line-end)
- ;; Errors from Puppet < 4
- (error line-start "Error: Could not parse for environment "
- (one-or-more (in "a-z" "0-9" "_")) ":"
- (message (minimal-match (one-or-more anything)))
- " at line " line line-end)
- (error line-start
- ;; Skip over the path of the Puppet executable
- (minimal-match (zero-or-more not-newline))
- ": Could not parse for environment " (one-or-more word)
- ": " (message (minimal-match (zero-or-more anything)))
- " at " (file-name "/" (zero-or-more not-newline)) ":" line line-end))
- :modes puppet-mode
- :next-checkers ((warning . puppet-lint)))
-
-(flycheck-def-config-file-var flycheck-puppet-lint-rc puppet-lint
- ".puppet-lint.rc"
- :package-version '(flycheck . "26"))
-
-(flycheck-def-option-var flycheck-puppet-lint-disabled-checks nil puppet-lint
- "Disabled checkers for `puppet-lint'.
-
-The value of this variable is a list of strings, where each
-string is the name of a check to disable (e.g. \"80chars\" or
-\"double_quoted_strings\").
-
-See URL `http://puppet-lint.com/checks/' for a list of all checks
-and their names."
- :type '(repeat (string :tag "Check Name"))
- :package-version '(flycheck . "26"))
-
-(defun flycheck-puppet-lint-disabled-arg-name (check)
- "Create an argument to disable a puppetlint CHECK."
- (concat "--no-" check "-check"))
-
-(flycheck-define-checker puppet-lint
- "A Puppet DSL style checker using puppet-lint.
-
-See URL `http://puppet-lint.com/'."
- ;; We must check the original file, because Puppetlint is quite picky on the
- ;; names of files and there place in the directory structure, to comply with
- ;; Puppet's autoload directory layout. For instance, a class foo::bar is
- ;; required to be in a file foo/bar.pp. Any other place, such as a Flycheck
- ;; temporary file will cause an error.
- :command ("puppet-lint"
- (config-file "--config" flycheck-puppet-lint-rc)
- "--log-format"
- "%{path}:%{line}:%{kind}: %{message} (%{check})"
- (option-list "" flycheck-puppet-lint-disabled-checks concat
- flycheck-puppet-lint-disabled-arg-name)
- source-original)
- :error-patterns
- ((warning line-start (file-name) ":" line ":warning: " (message) line-end)
- (error line-start (file-name) ":" line ":error: " (message) line-end))
- :modes puppet-mode
- ;; Since we check the original file, we can only use this syntax checker if
- ;; the buffer is actually linked to a file, and if it is not modified.
- :predicate flycheck-buffer-saved-p)
-
-(defun flycheck-python-find-module (checker module)
- "Check if a Python MODULE is available.
-CHECKER's executable is assumed to be a Python REPL."
- (-when-let* ((py (flycheck-find-checker-executable checker))
- (script (concat "import sys; sys.path.pop(0);"
- (format "import %s; print(%s.__file__)"
- module module))))
- (with-temp-buffer
- (and (eq (ignore-errors (call-process py nil t nil "-c" script)) 0)
- (string-trim (buffer-string))))))
-
-(defun flycheck-python-needs-module-p (checker)
- "Determines whether CHECKER needs to be invoked through Python.
-Previous versions of Flycheck called pylint and flake8 directly;
-this check ensures that we don't break existing code."
- (not (string-match-p (rx (or "pylint" "flake8")
- (or "-script.pyw" ".exe" ".bat" "")
- eos)
- (flycheck-checker-executable checker))))
-
-(defun flycheck-python-verify-module (checker module)
- "Verify that a Python MODULE is available.
-Return nil if CHECKER's executable is not a Python REPL. This
-function's is suitable for a checker's :verify."
- (when (flycheck-python-needs-module-p checker)
- (let ((mod-path (flycheck-python-find-module checker module)))
- (list (flycheck-verification-result-new
- :label (format "`%s' module" module)
- :message (if mod-path (format "Found at %S" mod-path) "Missing")
- :face (if mod-path 'success '(bold error)))))))
-
-(defun flycheck-python-module-args (checker module-name)
- "Compute arguments to pass to CHECKER's executable to run MODULE-NAME.
-Return nil if CHECKER's executable is not a Python REPL.
-Otherwise, return a list starting with -c (-m is not enough
-because it adds the current directory to Python's path)."
- (when (flycheck-python-needs-module-p checker)
- `("-c" ,(concat "import sys;sys.path.pop(0);import runpy;"
- (format "runpy.run_module(%S)" module-name)))))
-
-(flycheck-def-config-file-var flycheck-flake8rc python-flake8 ".flake8rc")
-
-(flycheck-def-option-var flycheck-flake8-error-level-alist
- '(("^E9.*$" . error) ; Syntax errors from pep8
- ("^F82.*$" . error) ; undefined variables from pyflakes
- ("^F83.*$" . error) ; Duplicate arguments from flake8
- ("^D.*$" . info) ; Docstring issues from flake8-pep257
- ("^N.*$" . info) ; Naming issues from pep8-naming
- )
- python-flake8
- "An alist mapping flake8 error IDs to Flycheck error levels.
-
-Each item in this list is a cons cell `(PATTERN . LEVEL)' where
-PATTERN is a regular expression matched against the error ID, and
-LEVEL is a Flycheck error level symbol.
-
-Each PATTERN is matched in the order of appearance in this list
-against the error ID. If it matches the ID, the level of the
-corresponding error is set to LEVEL. An error that is not
-matched by any PATTERN defaults to warning level.
-
-The default value of this option matches errors from flake8
-itself and from the following flake8 plugins:
-
-- pep8-naming
-- flake8-pep257
-
-You may add your own mappings to this option in order to support
-further flake8 plugins."
- :type '(repeat (cons (regexp :tag "Error ID pattern")
- (symbol :tag "Error level")))
- :package-version '(flycheck . "0.22"))
-
-(flycheck-def-option-var flycheck-flake8-maximum-complexity nil python-flake8
- "The maximum McCabe complexity of methods.
-
-If nil, do not check the complexity of methods. If set to an
-integer, report any complexity greater than the value of this
-variable as warning.
-
-If set to an integer, this variable overrules any similar setting
-in the configuration file denoted by `flycheck-flake8rc'."
- :type '(choice (const :tag "Do not check McCabe complexity" nil)
- (integer :tag "Maximum complexity"))
- :safe #'integerp)
-
-(flycheck-def-option-var flycheck-flake8-maximum-line-length nil python-flake8
- "The maximum length of lines.
-
-If set to an integer, the value of this variable denotes the
-maximum length of lines, overruling any similar setting in the
-configuration file denoted by `flycheck-flake8rc'. An error will
-be reported for any line longer than the value of this variable.
-
-If set to nil, use the maximum line length from the configuration
-file denoted by `flycheck-flake8rc', or the PEP 8 recommendation
-of 79 characters if there is no configuration with this setting."
- :type '(choice (const :tag "Default value")
- (integer :tag "Maximum line length in characters"))
- :safe #'integerp)
-
-(defun flycheck-flake8-fix-error-level (err)
- "Fix the error level of ERR.
-
-Update the error level of ERR according to
-`flycheck-flake8-error-level-alist'."
- (pcase-dolist (`(,pattern . ,level) flycheck-flake8-error-level-alist)
- (when (string-match-p pattern (flycheck-error-id err))
- (setf (flycheck-error-level err) level)))
- err)
-
-(defun flycheck-flake8--find-project-root (_checker)
- "Find setup.cfg in a parent directory of the current buffer."
- ;; This is a workaround for `https://gitlab.com/pycqa/flake8/issues/517'; see
- ;; also `https://github.com/flycheck/flycheck/issues/1722'
- (locate-dominating-file (or buffer-file-name default-directory) "setup.cfg"))
-
-(flycheck-define-checker python-flake8
- "A Python syntax and style checker using Flake8.
-
-Requires Flake8 3.0 or newer. See URL
-`https://flake8.readthedocs.io/'."
- ;; Not calling flake8 directly makes it easier to switch between different
- ;; Python versions; see https://github.com/flycheck/flycheck/issues/1055.
- :command ("python3"
- (eval (flycheck-python-module-args 'python-flake8 "flake8"))
- "--format=default"
- (config-file "--append-config" flycheck-flake8rc)
- (option "--max-complexity" flycheck-flake8-maximum-complexity nil
- flycheck-option-int)
- (option "--max-line-length" flycheck-flake8-maximum-line-length nil
- flycheck-option-int)
- (eval (when buffer-file-name
- (concat "--stdin-display-name=" buffer-file-name)))
- "-")
- :standard-input t
- :working-directory flycheck-flake8--find-project-root
- :error-filter (lambda (errors)
- (let ((errors (flycheck-sanitize-errors errors)))
- (seq-map #'flycheck-flake8-fix-error-level errors)))
- :error-patterns
- ((warning line-start
- (file-name) ":" line ":" (optional column ":") " "
- (id (one-or-more (any alpha)) (one-or-more digit)) " "
- (message (one-or-more not-newline))
- line-end))
- :enabled (lambda ()
- (or (not (flycheck-python-needs-module-p 'python-flake8))
- (flycheck-python-find-module 'python-flake8 "flake8")))
- :verify (lambda (_) (flycheck-python-verify-module 'python-flake8 "flake8"))
- :modes python-mode
- :next-checkers ((warning . python-pylint)
- (warning . python-mypy)))
-
-(flycheck-def-config-file-var flycheck-pylintrc python-pylint ".pylintrc")
-
-(flycheck-def-option-var flycheck-pylint-use-symbolic-id t python-pylint
- "Whether to use pylint message symbols or message codes.
-
-A pylint message has both an opaque identifying code (such as `F0401') and a
-more meaningful symbolic code (such as `import-error'). This option governs
-which should be used and reported to the user."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.25"))
-
-(defun flycheck-parse-pylint (output checker buffer)
- "Parse JSON OUTPUT of CHECKER on BUFFER as Pylint errors."
- (mapcar (lambda (err)
- (let-alist err
- ;; Pylint can return -1 as a line or a column, hence the call to
- ;; `max'. See `https://github.com/flycheck/flycheck/issues/1383'.
- (flycheck-error-new-at
- (and .line (max .line 1))
- (and .column (max (1+ .column) 1))
- (pcase .type
- ;; See "pylint/utils.py"
- ((or "fatal" "error") 'error)
- ((or "info" "convention") 'info)
- ((or "warning" "refactor" _) 'warning))
- ;; Drop lines showing the error in context
- (and (string-match (rx (*? nonl) eol) .message)
- (match-string 0 .message))
- :id (if flycheck-pylint-use-symbolic-id .symbol .message-id)
- :checker checker
- :buffer buffer
- :filename .path)))
- (car (flycheck-parse-json output))))
-
-(flycheck-define-checker python-pylint
- "A Python syntax and style checker using Pylint.
-
-This syntax checker requires Pylint 1.0 or newer.
-
-See URL `https://www.pylint.org/'."
- ;; --reports=n disables the scoring report.
- ;; Not calling pylint directly makes it easier to switch between different
- ;; Python versions; see https://github.com/flycheck/flycheck/issues/1055.
- :command ("python3"
- (eval (flycheck-python-module-args 'python-pylint "pylint"))
- "--reports=n"
- "--output-format=json"
- (config-file "--rcfile=" flycheck-pylintrc concat)
- ;; Need `source-inplace' for relative imports (e.g. `from .foo
- ;; import bar'), see https://github.com/flycheck/flycheck/issues/280
- source-inplace)
- :error-parser flycheck-parse-pylint
- :enabled (lambda ()
- (or (not (flycheck-python-needs-module-p 'python-pylint))
- (flycheck-python-find-module 'python-pylint "pylint")))
- :verify (lambda (_) (flycheck-python-verify-module 'python-pylint "pylint"))
- :modes python-mode
- :next-checkers ((warning . python-mypy)))
-
-(flycheck-define-checker python-pycompile
- "A Python syntax checker using Python's builtin compiler.
-
-See URL `https://docs.python.org/3.4/library/py_compile.html'."
- :command ("python3" "-m" "py_compile" source)
- :error-patterns
- ;; Python 2.7
- ((error line-start " File \"" (file-name) "\", line " line "\n"
- (>= 2 (zero-or-more not-newline) "\n")
- "SyntaxError: " (message) line-end)
- (error line-start "Sorry: IndentationError: "
- (message) "(" (file-name) ", line " line ")"
- line-end)
- ;; 2.6
- (error line-start "SyntaxError: ('" (message (one-or-more (not (any "'"))))
- "', ('" (file-name (one-or-more (not (any "'")))) "', "
- line ", " column ", " (one-or-more not-newline) line-end))
- :modes python-mode
- :next-checkers ((warning . python-mypy)))
-
-(define-obsolete-variable-alias 'flycheck-python-mypy-ini
- 'flycheck-python-mypy-config "32")
-
-(flycheck-def-config-file-var flycheck-python-mypy-config python-mypy
- '("mypy.ini" "setup.cfg"))
-
-(flycheck-def-option-var flycheck-python-mypy-cache-dir nil python-mypy
- "Directory used to write .mypy_cache directories."
- :type '(choice
- (const :tag "Write to the working directory" nil)
- (const :tag "Never write .mypy_cache directories" null-device)
- (string :tag "Path"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker python-mypy
- "Mypy syntax and type checker. Requires mypy>=0.580.
-
-See URL `http://mypy-lang.org/'."
- :command ("mypy"
- "--show-column-numbers"
- (config-file "--config-file" flycheck-python-mypy-config)
- (option "--cache-dir" flycheck-python-mypy-cache-dir)
- source-original)
- :error-patterns
- ((error line-start (file-name) ":" line (optional ":" column)
- ": error:" (message) line-end)
- (warning line-start (file-name) ":" line (optional ":" column)
- ": warning:" (message) line-end)
- (info line-start (file-name) ":" line (optional ":" column)
- ": note:" (message) line-end))
- :modes python-mode
- ;; Ensure the file is saved, to work around
- ;; https://github.com/python/mypy/issues/4746.
- :predicate flycheck-buffer-saved-p)
-
-(flycheck-def-option-var flycheck-lintr-caching t r-lintr
- "Whether to enable caching in lintr.
-
-By default, lintr caches all expressions in a file and re-checks
-only those that have changed. Setting this option to nil
-disables caching in case there are problems."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.23"))
-
-(flycheck-def-option-var flycheck-lintr-linters "default_linters" r-lintr
- "Linters to use with lintr.
-
-The value of this variable is a string containing an R
-expression, which selects linters for lintr."
- :type 'string
- :risky t
- :package-version '(flycheck . "0.23"))
-
-(defun flycheck-r-has-lintr (R)
- "Whether R has installed the `lintr' library."
- (with-temp-buffer
- (let ((process-environment (append '("LC_ALL=C") process-environment)))
- (call-process R nil t nil
- "--slave" "--restore" "--no-save" "-e"
- "library('lintr')")
- (goto-char (point-min))
- (not (re-search-forward "there is no package called 'lintr'"
- nil 'no-error)))))
-
-(flycheck-define-checker r-lintr
- "An R style and syntax checker using the lintr package.
-
-See URL `https://github.com/jimhester/lintr'."
- :command ("R" "--slave" "--restore" "--no-save" "-e"
- (eval (concat
- "library(lintr);"
- "try(lint(commandArgs(TRUE)"
- ", cache=" (if flycheck-lintr-caching "TRUE" "FALSE")
- ", " flycheck-lintr-linters
- "))"))
- "--args" source)
- :error-patterns
- ((info line-start (file-name) ":" line ":" column ": style: " (message)
- line-end)
- (warning line-start (file-name) ":" line ":" column ": warning: " (message)
- line-end)
- (error line-start (file-name) ":" line ":" column ": error: " (message)
- line-end))
- :modes (ess-mode ess-r-mode)
- :predicate
- ;; Don't check ESS files which do not contain R, and make sure that lintr is
- ;; actually available
- (lambda ()
- (and (equal ess-language "S")
- (flycheck-r-has-lintr (flycheck-checker-executable 'r-lintr))))
- :verify (lambda (checker)
- (let ((has-lintr (flycheck-r-has-lintr
- (flycheck-checker-executable checker))))
- (list
- (flycheck-verification-result-new
- :label "lintr library"
- :message (if has-lintr "present" "missing")
- :face (if has-lintr 'success '(bold error)))))))
-
-(defun flycheck-racket-has-expand-p (checker)
- "Whether the executable of CHECKER provides the `expand' command."
- (let ((raco (flycheck-find-checker-executable checker)))
- (when raco
- (with-temp-buffer
- (call-process raco nil t nil "expand")
- (goto-char (point-min))
- (not (looking-at-p (rx bol (1+ not-newline)
- "Unrecognized command: expand"
- eol)))))))
-
-(flycheck-define-checker racket
- "A Racket syntax checker with `raco expand'.
-
-The `compiler-lib' racket package is required for this syntax
-checker.
-
-See URL `https://racket-lang.org/'."
- :command ("raco" "expand" source-inplace)
- :predicate
- (lambda ()
- (and (or (not (eq major-mode 'scheme-mode))
- ;; In `scheme-mode' we must check the current Scheme implementation
- ;; being used
- (and (boundp 'geiser-impl--implementation)
- (eq geiser-impl--implementation 'racket)))
- (flycheck-racket-has-expand-p 'racket)))
- :verify
- (lambda (checker)
- (let ((has-expand (flycheck-racket-has-expand-p checker))
- (in-scheme-mode (eq major-mode 'scheme-mode))
- (geiser-impl (bound-and-true-p geiser-impl--implementation)))
- (list
- (flycheck-verification-result-new
- :label "compiler-lib package"
- :message (if has-expand "present" "missing")
- :face (if has-expand 'success '(bold error)))
- (flycheck-verification-result-new
- :label "Geiser Implementation"
- :message (cond
- ((not in-scheme-mode) "Using Racket Mode")
- ((eq geiser-impl 'racket) "Racket")
- (geiser-impl (format "Other: %s" geiser-impl))
- (t "Geiser not active"))
- :face (cond
- ((or (not in-scheme-mode) (eq geiser-impl 'racket)) 'success)
- (t '(bold error)))))))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors
- (flycheck-increment-error-columns
- (seq-remove
- (lambda (err)
- (string-suffix-p
- "/share/racket/pkgs/compiler-lib/compiler/commands/expand.rkt"
- (flycheck-error-filename err)))
- errors))))
- :error-patterns
- ((error line-start (zero-or-more space)
- (file-name) ":" line ":" column ":" (message) line-end))
- :modes (racket-mode scheme-mode))
-
-(flycheck-define-checker rpm-rpmlint
- "A RPM SPEC file syntax checker using rpmlint.
-
-See URL `https://sourceforge.net/projects/rpmlint/'."
- :command ("rpmlint" source)
- :error-patterns
- ((error line-start
- (file-name) ":" (optional line ":") " E: " (message)
- line-end)
- (warning line-start
- (file-name) ":" (optional line ":") " W: " (message)
- line-end))
- :error-filter
- ;; Add fake line numbers if they are missing in the lint output
- (lambda (errors)
- (dolist (err errors)
- (unless (flycheck-error-line err)
- (setf (flycheck-error-line err) 1)))
- errors)
- :error-explainer
- (lambda (error)
- (-when-let* ((error-message (flycheck-error-message error))
- (message-id (save-match-data
- (string-match "\\([^ ]+\\)" error-message)
- (match-string 1 error-message))))
- (with-output-to-string
- (call-process "rpmlint" nil standard-output nil "-I" message-id))))
- :modes (sh-mode rpm-spec-mode)
- :predicate (lambda () (or (not (eq major-mode 'sh-mode))
- ;; In `sh-mode', we need the proper shell
- (eq sh-shell 'rpm))))
-
-(flycheck-def-config-file-var flycheck-markdown-markdownlint-cli-config
- markdown-markdownlint-cli nil
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker markdown-markdownlint-cli
- "Markdown checker using markdownlint-cli.
-
-See URL `https://github.com/igorshubovych/markdownlint-cli'."
- :command ("markdownlint"
- (config-file "--config" flycheck-markdown-markdownlint-cli-config)
- source)
- :error-patterns
- ((error line-start
- (file-name) ":" line " " (id (one-or-more (not (any space))))
- " " (message) line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors
- (flycheck-remove-error-file-names "(string)" errors)))
- :modes (markdown-mode gfm-mode))
-
-(flycheck-def-option-var flycheck-markdown-mdl-rules nil markdown-mdl
- "Rules to enable for mdl.
-
-The value of this variable is a list of strings each of which is
-the name of a rule to enable.
-
-By default all rules are enabled.
-
-See URL `https://git.io/vhi2t'."
- :type '(repeat :tag "Enabled rules"
- (string :tag "rule name"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "27"))
-
-(flycheck-def-option-var flycheck-markdown-mdl-tags nil markdown-mdl
- "Rule tags to enable for mdl.
-
-The value of this variable is a list of strings each of which is
-the name of a rule tag. Only rules with these tags are enabled.
-
-By default all rules are enabled.
-
-See URL `https://git.io/vhi2t'."
- :type '(repeat :tag "Enabled tags"
- (string :tag "tag name"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "27"))
-
-(flycheck-def-config-file-var flycheck-markdown-mdl-style markdown-mdl nil
- :package-version '(flycheck . "27"))
-
-(flycheck-define-checker markdown-mdl
- "Markdown checker using mdl.
-
-See URL `https://github.com/markdownlint/markdownlint'."
- :command ("mdl"
- (config-file "--style" flycheck-markdown-mdl-style)
- (option "--tags=" flycheck-markdown-mdl-rules concat
- flycheck-option-comma-separated-list)
- (option "--rules=" flycheck-markdown-mdl-rules concat
- flycheck-option-comma-separated-list))
- :standard-input t
- :error-patterns
- ((error line-start
- (file-name) ":" line ": " (id (one-or-more alnum)) " " (message)
- line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors
- (flycheck-remove-error-file-names "(stdin)" errors)))
- :modes (markdown-mode gfm-mode))
-
-(flycheck-define-checker nix
- "Nix checker using nix-instantiate.
-
-See URL `https://nixos.org/nix/manual/#sec-nix-instantiate'."
- :command ("nix-instantiate" "--parse" "-")
- :standard-input t
- :error-patterns
- ((error line-start
- "error: " (message) " at " (file-name) ":" line ":" column
- line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors
- (flycheck-remove-error-file-names "(string)" errors)))
- :next-checkers ((warning . nix-linter))
- :modes nix-mode)
-
-(defun flycheck-parse-nix-linter (output checker buffer)
- "Parse nix-linter warnings from JSON OUTPUT.
-
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `https://github.com/Synthetica9/nix-linter' for more
-information about nix-linter."
- (mapcar (lambda (err)
- (let-alist err
- (flycheck-error-new-at
- .pos.spanBegin.sourceLine
- .pos.spanBegin.sourceColumn
- 'warning
- .description
- :id .offense
- :checker checker
- :buffer buffer
- :filename (buffer-file-name buffer)
- :end-line .pos.spanEnd.sourceLine
- :end-column .pos.spanEnd.sourceColumn)))
- (flycheck-parse-json output)))
-
-(flycheck-define-checker nix-linter
- "Nix checker using nix-linter.
-
-See URL `https://github.com/Synthetica9/nix-linter'."
- :command ("nix-linter" "--json-stream" "-")
- :standard-input t
- :error-parser flycheck-parse-nix-linter
- :error-explainer
- (lambda (error)
- (-when-let (error-code (flycheck-error-id error))
- (with-output-to-string
- (call-process "nix-linter" nil standard-output nil "--help-for"
- error-code))))
- :modes nix-mode)
-
-(defun flycheck-locate-sphinx-source-directory ()
- "Locate the Sphinx source directory for the current buffer.
-
-Return the source directory, or nil, if the current buffer is not
-part of a Sphinx project."
- (-when-let* ((filename (buffer-file-name))
- (dir (locate-dominating-file filename "conf.py")))
- (expand-file-name dir)))
-
-(flycheck-define-checker rst
- "A ReStructuredText (RST) syntax checker using Docutils.
-
-See URL `http://docutils.sourceforge.net/'."
- ;; include:: directives
- :command ("rst2pseudoxml.py" "--report=2" "--halt=5"
- ;; Read from standard input and throw output away
- "-" null-device)
- :standard-input t
- :error-patterns
- ((warning line-start "<stdin>:" line ": (WARNING/2) " (message) line-end)
- (error line-start "<stdin>:" line
- ": (" (or "ERROR/3" "SEVERE/4") ") "
- (message) line-end))
- :modes rst-mode)
-
-(flycheck-def-option-var flycheck-sphinx-warn-on-missing-references t rst-sphinx
- "Whether to warn about missing references in Sphinx.
-
-When non-nil (the default), warn about all missing references in
-Sphinx via `-n'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.17"))
-
-(flycheck-define-checker rst-sphinx
- "A ReStructuredText (RST) syntax checker using Sphinx.
-
-Requires Sphinx 1.2 or newer. See URL `http://sphinx-doc.org'."
- :command ("sphinx-build" "-b" "pseudoxml"
- "-q" "-N" ; Reduced output and no colors
- (option-flag "-n" flycheck-sphinx-warn-on-missing-references)
- (eval (flycheck-locate-sphinx-source-directory))
- temporary-directory ; Redirect the output to a temporary
- ; directory
- source-original) ; Sphinx needs the original document
- :error-patterns
- ((warning line-start (file-name) ":" line ": WARNING: " (message) line-end)
- (error line-start
- (file-name) ":" line
- ": " (or "ERROR" "SEVERE") ": "
- (message) line-end))
- :modes rst-mode
- :predicate (lambda () (and (flycheck-buffer-saved-p)
- (flycheck-locate-sphinx-source-directory))))
-
-(defun flycheck-ruby--find-project-root (_checker)
- "Compute an appropriate working-directory for flycheck-ruby.
-
-This is either a parent directory containing a Gemfile, or nil."
- (and
- buffer-file-name
- (locate-dominating-file buffer-file-name "Gemfile")))
-
-(flycheck-def-config-file-var flycheck-rubocoprc ruby-rubocop ".rubocop.yml")
-
-(flycheck-def-option-var flycheck-rubocop-lint-only nil
- (ruby-rubocop ruby-standard)
- "Whether to only report code issues in Rubocop and Standard.
-
-When non-nil, only report code issues, via `--lint'. Otherwise
-report style issues as well."
- :safe #'booleanp
- :type 'boolean
- :package-version '(flycheck . "0.16"))
-
-(defconst flycheck-ruby-rubocop-error-patterns
- '((info line-start (file-name) ":" line ":" column ": C: "
- (optional (id (one-or-more (not (any ":")))) ": ") (message) line-end)
- (warning line-start (file-name) ":" line ":" column ": W: "
- (optional (id (one-or-more (not (any ":")))) ": ") (message)
- line-end)
- (error line-start (file-name) ":" line ":" column ": " (or "E" "F") ": "
- (optional (id (one-or-more (not (any ":")))) ": ") (message)
- line-end)))
-
-(flycheck-def-executable-var ruby-rubocop "rubocop")
-(flycheck-define-command-checker 'ruby-rubocop
- "A Ruby syntax and style checker using the RuboCop tool.
-
-You need at least RuboCop 0.34 for this syntax checker.
-
-See URL `http://batsov.com/rubocop/'."
- ;; ruby-standard is defined based on this checker
- :command '("rubocop"
- "--display-cop-names"
- "--force-exclusion"
- "--format" "emacs"
- ;; Explicitly disable caching to prevent Rubocop 0.35.1 and earlier
- ;; from caching standard input. Later versions of Rubocop
- ;; automatically disable caching with --stdin, see
- ;; https://github.com/flycheck/flycheck/issues/844 and
- ;; https://github.com/bbatsov/rubocop/issues/2576
- "--cache" "false"
- (config-file "--config" flycheck-rubocoprc)
- (option-flag "--lint" flycheck-rubocop-lint-only)
- ;; Rubocop takes the original file name as argument when reading
- ;; from standard input
- "--stdin" source-original)
- :standard-input t
- :working-directory #'flycheck-ruby--find-project-root
- :error-patterns flycheck-ruby-rubocop-error-patterns
- :modes '(enh-ruby-mode ruby-mode)
- :next-checkers '((warning . ruby-reek)
- (warning . ruby-rubylint)))
-
-(flycheck-def-config-file-var flycheck-ruby-standardrc ruby-standard
- ".standard.yml")
-
-(flycheck-def-executable-var ruby-standard "standardrb")
-(flycheck-define-command-checker 'ruby-standard
- "A Ruby syntax and style checker using the StandardRB gem.
-
-See URL `https://github.com/testdouble/standard' for more information."
- ;; This checker is derived from ruby-rubocop; see above
- :command '("standardrb"
- "--display-cop-names"
- "--force-exclusion"
- "--format" "emacs"
- "--cache" "false"
- (config-file "--config" flycheck-ruby-standardrc)
- (option-flag "--lint" flycheck-rubocop-lint-only)
- "--stdin" source-original)
- :standard-input t
- :working-directory #'flycheck-ruby--find-project-root
- :error-patterns flycheck-ruby-rubocop-error-patterns
- :modes '(enh-ruby-mode ruby-mode)
- :next-checkers '((warning . ruby-reek)
- (warning . ruby-rubylint)))
-
-;; Default to `nil' to let Reek find its configuration file by itself
-(flycheck-def-config-file-var flycheck-reekrc ruby-reek nil
- :safe #'string-or-null-p
- :package-version '(flycheck . "30"))
-
-(flycheck-define-checker ruby-reek
- "A Ruby smell checker using reek.
-
-See URL `https://github.com/troessner/reek'."
- :command ("reek" "--format" "json"
- (config-file "--config" flycheck-reekrc)
- source)
- :error-parser flycheck-parse-reek
- :modes (enh-ruby-mode ruby-mode)
- :next-checkers ((warning . ruby-rubylint)))
-
-;; Default to `nil' to let Rubylint find its configuration file by itself, and
-;; to maintain backwards compatibility with older Rubylint and Flycheck releases
-(flycheck-def-config-file-var flycheck-rubylintrc ruby-rubylint nil)
-
-(flycheck-define-checker ruby-rubylint
- "A Ruby syntax and code analysis checker using ruby-lint.
-
-Requires ruby-lint 2.0.2 or newer. See URL
-`https://github.com/YorickPeterse/ruby-lint'."
- :command ("ruby-lint" "--presenter=syntastic"
- (config-file "--config" flycheck-rubylintrc)
- source)
- ;; Ruby Lint can't read from standard input
- :error-patterns
- ((info line-start
- (file-name) ":I:" line ":" column ": " (message) line-end)
- (warning line-start
- (file-name) ":W:" line ":" column ": " (message) line-end)
- (error line-start
- (file-name) ":E:" line ":" column ": " (message) line-end))
- :modes (enh-ruby-mode ruby-mode))
-
-(flycheck-define-checker ruby
- "A Ruby syntax checker using the standard Ruby interpreter.
-
-Please note that the output of different Ruby versions and
-implementations varies wildly. This syntax checker supports
-current versions of MRI and JRuby, but may break when used with
-other implementations or future versions of these
-implementations.
-
-Please consider using `ruby-rubocop' or `ruby-reek' instead.
-
-See URL `https://www.ruby-lang.org/'."
- :command ("ruby" "-w" "-c")
- :standard-input t
- :error-patterns
- ;; These patterns support output from JRuby, too, to deal with RVM or Rbenv
- ((error line-start "SyntaxError in -:" line ": " (message) line-end)
- (warning line-start "-:" line ":" (optional column ":")
- " warning: " (message) line-end)
- (error line-start "-:" line ": " (message) line-end))
- :modes (enh-ruby-mode ruby-mode)
- :next-checkers ((warning . ruby-rubylint)))
-
-(flycheck-define-checker ruby-jruby
- "A Ruby syntax checker using the JRuby interpreter.
-
-This syntax checker is very primitive, and may break on future
-versions of JRuby.
-
-Please consider using `ruby-rubocop' or `ruby-rubylint' instead.
-
-See URL `http://jruby.org/'."
- :command ("jruby" "-w" "-c")
- :standard-input t
- :error-patterns
- ((error line-start "SyntaxError in -:" line ": " (message) line-end)
- (warning line-start "-:" line ": warning: " (message) line-end)
- (error line-start "-:" line ": " (message) line-end))
- :modes (enh-ruby-mode ruby-mode)
- :next-checkers ((warning . ruby-rubylint)))
-
-(flycheck-def-args-var flycheck-cargo-check-args (rust-cargo)
- :package-version '(flycheck . "32"))
-
-(flycheck-def-args-var flycheck-rust-args (rust)
- :package-version '(flycheck . "0.24"))
-
-(flycheck-def-option-var flycheck-rust-check-tests t (rust-cargo rust)
- "Whether to check test code in Rust.
-
-For the `rust' checker: When non-nil, `rustc' is passed the
-`--test' flag, which will check any code marked with the
-`#[cfg(test)]' attribute and any functions marked with
-`#[test]'. Otherwise, `rustc' is not passed `--test' and test
-code will not be checked. Skipping `--test' is necessary when
-using `#![no_std]', because compiling the test runner requires
-`std'.
-
-For the `rust-cargo' checker: When non-nil, calls `cargo test
---no-run' instead of `cargo check'."
- :type 'boolean
- :safe #'booleanp
- :package-version '("flycheck" . "0.19"))
-
-(flycheck-def-option-var flycheck-rust-crate-root nil rust
- "A path to the crate root for the current buffer.
-
-The value of this variable is either a string with the path to
-the crate root for the current buffer, or nil if the current buffer
-is a crate. A relative path is relative to the current buffer.
-
-If this variable is non nil the current buffer will only be checked
-if it is not modified, i.e. after it has been saved."
- :type '(choice (const :tag "Unspecified" nil)
- (file :tag "Root"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "0.20"))
-(make-variable-buffer-local 'flycheck-rust-crate-root)
-
-(flycheck-def-option-var flycheck-rust-crate-type "lib" (rust-cargo rust)
- "The type of the Rust Crate to check.
-
-For `rust-cargo', the value should be a string denoting the
-target type passed to Cargo. See
-`flycheck-rust-valid-crate-type-p' for the list of allowed
-values.
-
-For `rust', the value should be a string denoting the crate type
-for the `--crate-type' flag of rustc."
- :type '(choice (const :tag "nil (rust/rust-cargo)" nil)
- (const :tag "lib (rust/rust-cargo)" "lib")
- (const :tag "bin (rust/rust-cargo)" "bin")
- (const :tag "example (rust-cargo)" "example")
- (const :tag "test (rust-cargo)" "test")
- (const :tag "bench (rust-cargo)" "bench")
- (const :tag "rlib (rust)" "rlib")
- (const :tag "dylib (rust)" "dylib")
- (const :tag "cdylib (rust)" "cdylib")
- (const :tag "staticlib (rust)" "staticlib")
- (const :tag "metadata (rust)" "metadata"))
- :safe #'stringp
- :package-version '(flycheck . "0.20"))
-(make-variable-buffer-local 'flycheck-rust-crate-type)
-
-(flycheck-def-option-var flycheck-rust-binary-name nil rust-cargo
- "The name of the binary to pass to `cargo check --CRATE-TYPE'.
-
-The value of this variable is a string denoting the name of the
-target to check: usually the name of the crate, or the name of
-one of the files under `src/bin', `tests', `examples' or
-`benches'.
-
-This always requires a non-nil value, unless
-`flycheck-rust-crate-type' is `lib' or nil, in which case it is
-ignored."
- :type '(choice (const :tag "Unspecified" nil)
- (string :tag "Binary name"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "28"))
-(make-variable-buffer-local 'flycheck-rust-binary-name)
-
-(flycheck-def-option-var flycheck-rust-features nil rust-cargo
- "List of features to activate during build or check.
-
-The value of this variable is a list of strings denoting features
-that will be activated to build the target to check. Features will
-be passed to `cargo check --features=FEATURES'."
- :type '(repeat :tag "Features to activate"
- (string :tag "Feature"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "32"))
-(make-variable-buffer-local 'flycheck-rust-features)
-
-(flycheck-def-option-var flycheck-rust-library-path nil rust
- "A list of library directories for Rust.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the library path of Rust.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Library directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.18"))
-
-(defun flycheck-rust-error-explainer (error)
- "Return an explanation text for the given `flycheck-error' ERROR."
- (-when-let (error-code (flycheck-error-id error))
- (with-output-to-string
- (call-process "rustc" nil standard-output nil "--explain" error-code))))
-
-(defun flycheck-rust-error-filter (errors)
- "Filter ERRORS from rustc output that have no explanatory value."
- (seq-remove
- (lambda (err)
- (or
- ;; Macro errors emit a diagnostic in a phony file,
- ;; e.g. "<println macros>".
- (-when-let (filename (flycheck-error-filename err))
- (string-match-p (rx "macros>" line-end) filename))
- ;; Redundant message giving the number of failed errors
- (-when-let (msg (flycheck-error-message err))
- (string-match-p
- (rx
- (or (: "aborting due to " (optional (one-or-more num) " ")
- "previous error")
- (: "For more information about this error, try `rustc --explain "
- (one-or-more alnum) "`.")))
- msg))))
- errors))
-
-(defun flycheck-rust-manifest-directory ()
- "Return the nearest directory holding the Cargo manifest.
-
-Return the nearest directory containing the `Cargo.toml' manifest
-file, starting from the current buffer and using
-`locate-dominating-file'. Return nil if there is no such file,
-or if the current buffer has no file name."
- (and buffer-file-name
- (locate-dominating-file buffer-file-name "Cargo.toml")))
-
-(defun flycheck-rust-cargo-metadata ()
- "Run 'cargo metadata' and return the result as parsed JSON object."
- (car (flycheck-parse-json
- (with-output-to-string
- (call-process "cargo" nil standard-output nil
- "metadata" "--no-deps" "--format-version" "1")))))
-
-(defun flycheck-rust-cargo-workspace-root ()
- "Return the path to the workspace root of a Rust Cargo project.
-
-Return nil if the workspace root does not exist (for Rust
-versions inferior to 1.25)."
- (let-alist (flycheck-rust-cargo-metadata)
- .workspace_root))
-
-(defun flycheck-rust-cargo-has-command-p (command)
- "Whether Cargo has COMMAND in its list of commands.
-
-Execute `cargo --list' to find out whether COMMAND is present."
- (let ((cargo (funcall flycheck-executable-find "cargo")))
- (member command (mapcar #'string-trim-left
- (ignore-errors (process-lines cargo "--list"))))))
-
-(defun flycheck-rust-valid-crate-type-p (crate-type)
- "Whether CRATE-TYPE is a valid target type for Cargo.
-
-A valid Cargo target type is one of `lib', `bin', `example',
-`test' or `bench'."
- (member crate-type '(nil "lib" "bin" "example" "test" "bench")))
-
-(flycheck-define-checker rust-cargo
- "A Rust syntax checker using Cargo.
-
-This syntax checker requires Rust 1.17 or newer. See URL
-`https://www.rust-lang.org'."
- :command ("cargo"
- (eval (if flycheck-rust-check-tests
- "test"
- "check"))
- (eval (when flycheck-rust-check-tests
- "--no-run"))
- (eval (when flycheck-rust-crate-type
- (concat "--" flycheck-rust-crate-type)))
- ;; All crate targets except "lib" need a binary name
- (eval (when (and flycheck-rust-crate-type
- (not (string= flycheck-rust-crate-type "lib")))
- flycheck-rust-binary-name))
- (option "--features=" flycheck-rust-features concat
- flycheck-option-comma-separated-list)
- (eval flycheck-cargo-check-args)
- "--message-format=json")
- :error-parser flycheck-parse-cargo-rustc
- :error-filter (lambda (errors)
- ;; In Rust 1.25+, filenames are relative to the workspace
- ;; root.
- (let ((root (flycheck-rust-cargo-workspace-root)))
- (seq-do (lambda (err)
- ;; Some errors are crate level and do not have a
- ;; filename
- (when (flycheck-error-filename err)
- (setf (flycheck-error-filename err)
- (expand-file-name
- (flycheck-error-filename err) root))))
- (flycheck-rust-error-filter errors))))
- :error-explainer flycheck-rust-error-explainer
- :modes rust-mode
- :predicate flycheck-buffer-saved-p
- :enabled flycheck-rust-manifest-directory
- :working-directory (lambda (_) (flycheck-rust-manifest-directory))
- :verify
- (lambda (_)
- (and buffer-file-name
- (let* ((has-toml (flycheck-rust-manifest-directory))
- (valid-crate-type (flycheck-rust-valid-crate-type-p
- flycheck-rust-crate-type))
- (need-binary-name
- (and flycheck-rust-crate-type
- (not (string= flycheck-rust-crate-type "lib")))))
- (list
- (flycheck-verification-result-new
- :label "Cargo.toml"
- :message (if has-toml "Found" "Missing")
- :face (if has-toml 'success '(bold warning)))
- (flycheck-verification-result-new
- :label "Crate type"
- :message (if valid-crate-type
- (format "%s" flycheck-rust-crate-type)
- (format "%s (invalid, should be one of 'lib', 'bin', \
-'test', 'example' or 'bench')"
- flycheck-rust-crate-type))
- :face (if valid-crate-type 'success '(bold error)))
- (flycheck-verification-result-new
- :label "Binary name"
- :message (cond
- ((not need-binary-name) "Not required")
- ((not flycheck-rust-binary-name) "Required")
- (t (format "%s" flycheck-rust-binary-name)))
- :face (cond
- ((not need-binary-name) 'success)
- ((not flycheck-rust-binary-name) '(bold error))
- (t 'success))))))))
-
-(flycheck-define-checker rust
- "A Rust syntax checker using Rust compiler.
-
-This syntax checker needs Rust 1.18 or newer. See URL
-`https://www.rust-lang.org'."
- :command ("rustc"
- (option "--crate-type" flycheck-rust-crate-type)
- "--emit=mir" "-o" "/dev/null" ; avoid creating binaries
- "--error-format=json"
- (option-flag "--test" flycheck-rust-check-tests)
- (option-list "-L" flycheck-rust-library-path concat)
- (eval flycheck-rust-args)
- (eval (or flycheck-rust-crate-root
- (flycheck-substitute-argument 'source-original 'rust))))
- :error-parser flycheck-parse-rustc
- :error-filter flycheck-rust-error-filter
- :error-explainer flycheck-rust-error-explainer
- :modes rust-mode
- :predicate flycheck-buffer-saved-p)
-
-(flycheck-define-checker rust-clippy
- "A Rust syntax checker using clippy.
-
-See URL `https://github.com/rust-lang-nursery/rust-clippy'."
- :command ("cargo" "clippy" "--message-format=json")
- :error-parser flycheck-parse-cargo-rustc
- :error-filter flycheck-rust-error-filter
- :error-explainer flycheck-rust-error-explainer
- :modes rust-mode
- :predicate flycheck-buffer-saved-p
- :enabled (lambda ()
- (and (flycheck-rust-cargo-has-command-p "clippy")
- (flycheck-rust-manifest-directory)))
- :working-directory (lambda (_) (flycheck-rust-manifest-directory))
- :verify
- (lambda (_)
- (and buffer-file-name
- (let ((has-toml (flycheck-rust-manifest-directory))
- (has-clippy (flycheck-rust-cargo-has-command-p "clippy")))
- (list
- (flycheck-verification-result-new
- :label "Clippy"
- :message (if has-clippy "Found"
- "Cannot find the `cargo clippy' command")
- :face (if has-clippy 'success '(bold warning)))
- (flycheck-verification-result-new
- :label "Cargo.toml"
- :message (if has-toml "Found" "Missing")
- :face (if has-toml 'success '(bold warning))))))))
-
-(defvar flycheck-sass-scss-cache-directory nil
- "The cache directory for `sass' and `scss'.")
-
-(defun flycheck-sass-scss-cache-location ()
- "Get the cache location for `sass' and `scss'.
-
-If no cache directory exists yet, create one and return it.
-Otherwise return the previously used cache directory."
- (setq flycheck-sass-scss-cache-directory
- (or flycheck-sass-scss-cache-directory
- (make-temp-file "flycheck-sass-scss-cache" 'directory))))
-
-(flycheck-def-option-var flycheck-sass-compass nil sass
- "Whether to enable the Compass CSS framework.
-
-When non-nil, enable the Compass CSS framework, via `--compass'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.16"))
-
-(flycheck-define-checker sass
- "A Sass syntax checker using the Sass compiler.
-
-See URL `http://sass-lang.com'."
- :command ("sass"
- "--cache-location" (eval (flycheck-sass-scss-cache-location))
- (option-flag "--compass" flycheck-sass-compass)
- "--check" "--stdin")
- :standard-input t
- :error-patterns
- ((error line-start
- (or "Syntax error: " "Error: ")
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more not-newline)))
- (optional "\r") "\n" (one-or-more " ") "on line " line
- " of standard input"
- line-end)
- (warning line-start
- "WARNING: "
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more not-newline)))
- (optional "\r") "\n" (one-or-more " ") "on line " line
- " of " (one-or-more not-newline)
- line-end))
- :modes sass-mode)
-
-(flycheck-def-config-file-var flycheck-sass-lintrc sass/scss-sass-lint
- ".sass-lint.yml"
- :package-version '(flycheck . "30"))
-
-(flycheck-define-checker sass/scss-sass-lint
- "A SASS/SCSS syntax checker using sass-Lint.
-
-See URL `https://github.com/sasstools/sass-lint'."
- :command ("sass-lint"
- "--verbose"
- "--no-exit"
- "--format" "Checkstyle"
- (config-file "--config" flycheck-sass-lintrc)
- source)
- :error-parser flycheck-parse-checkstyle
- :modes (sass-mode scss-mode))
-
-(flycheck-define-checker scala
- "A Scala syntax checker using the Scala compiler.
-
-See URL `https://www.scala-lang.org/'."
- :command ("scalac" "-Ystop-after:parser" source)
- :error-patterns
- ((error line-start (file-name) ":" line ": error: " (message) line-end))
- :modes scala-mode
- :next-checkers ((warning . scala-scalastyle)))
-
-(flycheck-def-config-file-var flycheck-scalastylerc scala-scalastyle nil
- :package-version '(flycheck . "0.20"))
-
-(flycheck-define-checker scala-scalastyle
- "A Scala style checker using scalastyle.
-
-Note that this syntax checker is not used if
-`flycheck-scalastylerc' is nil or refers to a non-existing file.
-
-See URL `http://www.scalastyle.org'."
- :command ("scalastyle"
- (config-file "-c" flycheck-scalastylerc)
- source)
- :error-patterns
- ((error line-start "error file=" (file-name) " message="
- (message) " line=" line (optional " column=" column) line-end)
- (warning line-start "warning file=" (file-name) " message="
- (message) " line=" line (optional " column=" column) line-end))
- :error-filter (lambda (errors)
- (flycheck-sanitize-errors
- (flycheck-increment-error-columns errors)))
- :modes scala-mode
- :predicate
- ;; Inhibit this syntax checker if the JAR or the configuration are unset or
- ;; missing
- (lambda () (and flycheck-scalastylerc
- (flycheck-locate-config-file flycheck-scalastylerc
- 'scala-scalastyle)))
- :verify (lambda (checker)
- (let ((config-file (and flycheck-scalastylerc
- (flycheck-locate-config-file
- flycheck-scalastylerc checker))))
- (list
- (flycheck-verification-result-new
- :label "Configuration file"
- :message (cond
- ((not flycheck-scalastylerc)
- "`flycheck-scalastyletrc' not set")
- ((not config-file)
- (format "file %s not found" flycheck-scalastylerc))
- (t (format "found at %s" config-file)))
- :face (cond
- ((not flycheck-scalastylerc) '(bold warning))
- ((not config-file) '(bold error))
- (t 'success)))))))
-
-(flycheck-def-args-var flycheck-scheme-chicken-args scheme-chicken
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker scheme-chicken
- "A CHICKEN Scheme syntax checker using the CHICKEN compiler `csc'.
-
-See URL `http://call-cc.org/'."
- :command ("csc" "-analyze-only" "-local"
- (eval flycheck-scheme-chicken-args)
- source)
- :error-patterns
- ((info line-start
- "Note: " (zero-or-more not-newline) ":\n"
- (one-or-more (any space)) "(" (file-name) ":" line ") " (message)
- line-end)
- (warning line-start
- "Warning: " (zero-or-more not-newline) ",\n"
- (one-or-more (any space)) (zero-or-more not-newline) ":\n"
- (one-or-more (any space)) "(" (file-name) ":" line ") " (message)
- line-end)
- (warning line-start
- "Warning: " (zero-or-more not-newline) ":\n"
- (one-or-more (any space)) "(" (file-name) ":" line ") " (message)
- line-end)
- (error line-start "Error: (line " line ") " (message) line-end)
- (error line-start "Syntax error: (" (file-name) ":" line ")"
- (zero-or-more not-newline) " - "
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (zero-or-more space)
- (zero-or-more not-newline))
- (one-or-more space) "<--")
- line-end)
- ;; A of version 4.12.0, the chicken compiler doesn't provide a
- ;; line number for this error.
- (error line-start "Syntax error: "
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (zero-or-more space)
- (zero-or-more not-newline))
- (one-or-more space) "<--")
- line-end)
- (error line-start
- "Error: " (zero-or-more not-newline) ":\n"
- (one-or-more (any space)) "(" (file-name) ":" line ") " (message)
- line-end)
- ;; A of version 4.12.0, the chicken compiler doesn't provide a
- ;; line number for this error.
- (error line-start "Error: "
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (zero-or-more space)
- (zero-or-more not-newline))
- (one-or-more space) "<--")))
- :error-filter flycheck-fill-empty-line-numbers
- :predicate
- (lambda ()
- ;; In `scheme-mode' we must check the current Scheme implementation
- ;; being used
- (and (boundp 'geiser-impl--implementation)
- (eq geiser-impl--implementation 'chicken)))
- :verify
- (lambda (_checker)
- (let ((geiser-impl (bound-and-true-p geiser-impl--implementation)))
- (list
- (flycheck-verification-result-new
- :label "Geiser Implementation"
- :message (cond
- ((eq geiser-impl 'chicken) "Chicken Scheme")
- (geiser-impl (format "Other: %s" geiser-impl))
- (t "Geiser not active"))
- :face (cond
- ((eq geiser-impl 'chicken) 'success)
- (t '(bold error)))))))
- :modes scheme-mode)
-
-(defconst flycheck-scss-lint-checkstyle-re
- (rx "cannot load such file" (1+ not-newline) "scss_lint_reporter_checkstyle")
- "Regular expression to parse missing checkstyle error.")
-
-(defun flycheck-parse-scss-lint (output checker buffer)
- "Parse SCSS-Lint OUTPUT from CHECKER and BUFFER.
-
-Like `flycheck-parse-checkstyle', but catches errors about
-missing checkstyle reporter from SCSS-Lint."
- (if (string-match-p flycheck-scss-lint-checkstyle-re output)
- (list (flycheck-error-new-at
- 1 nil 'error "Checkstyle reporter for SCSS-Lint missing.
-Please run gem install scss_lint_reporter_checkstyle"
- :checker checker
- :buffer buffer
- :filename (buffer-file-name buffer)))
- (flycheck-parse-checkstyle output checker buffer)))
-
-(flycheck-def-config-file-var flycheck-scss-lintrc scss-lint ".scss-lint.yml"
- :package-version '(flycheck . "0.23"))
-
-(flycheck-define-checker scss-lint
- "A SCSS syntax checker using SCSS-Lint.
-
-Needs SCSS-Lint 0.43.2 or newer.
-
-See URL `https://github.com/brigade/scss-lint'."
- :command ("scss-lint"
- "--require=scss_lint_reporter_checkstyle"
- "--format=Checkstyle"
- (config-file "--config" flycheck-scss-lintrc)
- "--stdin-file-path" source-original "-")
- :standard-input t
- ;; We cannot directly parse Checkstyle XML, since for some mysterious reason
- ;; SCSS-Lint doesn't have a built-in Checkstyle reporter, and instead ships it
- ;; as an addon which might not be installed. We use a custom error parser to
- ;; check whether the addon is missing and turn that into a special kind of
- ;; Flycheck error.
- :error-parser flycheck-parse-scss-lint
- :modes scss-mode
- :verify
- (lambda (checker)
- (let* ((executable (flycheck-find-checker-executable checker))
- (reporter-missing
- (and executable
- (with-temp-buffer
- (call-process executable nil t nil
- "--require=scss_lint_reporter_checkstyle")
- (goto-char (point-min))
- (re-search-forward
- flycheck-scss-lint-checkstyle-re
- nil 'no-error)))))
- (when executable
- (list
- (flycheck-verification-result-new
- :label "checkstyle reporter"
- :message (if reporter-missing
- "scss_lint_reporter_checkstyle missing"
- "present")
- :face (if reporter-missing
- '(bold error)
- 'success)))))))
-
-(flycheck-define-checker scss-stylelint
- "A SCSS syntax and style checker using stylelint.
-
-See URL `http://stylelint.io/'."
- :command ("stylelint"
- (eval flycheck-stylelint-args)
- "--syntax" "scss"
- (option-flag "--quiet" flycheck-stylelint-quiet)
- (config-file "--config" flycheck-stylelintrc))
- :standard-input t
- :error-parser flycheck-parse-stylelint
- :predicate flycheck-buffer-nonempty-p
- :modes (scss-mode))
-
-(flycheck-def-option-var flycheck-scss-compass nil scss
- "Whether to enable the Compass CSS framework.
-
-When non-nil, enable the Compass CSS framework, via `--compass'."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "0.16"))
-
-(flycheck-define-checker scss
- "A SCSS syntax checker using the SCSS compiler.
-
-See URL `http://sass-lang.com'."
- :command ("scss"
- "--cache-location" (eval (flycheck-sass-scss-cache-location))
- (option-flag "--compass" flycheck-scss-compass)
- "--check" "--stdin")
- :standard-input t
- :error-patterns
- ((error line-start
- (or "Syntax error: " "Error: ")
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more not-newline)))
- (optional "\r") "\n" (one-or-more " ") "on line " line
- " of standard input"
- line-end)
- (warning line-start
- "WARNING: "
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more not-newline)))
- (optional "\r") "\n" (one-or-more " ") "on line " line
- " of an unknown file"
- line-end))
- :modes scss-mode)
-
-(flycheck-def-args-var flycheck-sh-bash-args (sh-bash)
- :package-version '(flycheck . "32"))
-
-(flycheck-define-checker sh-bash
- "A Bash syntax checker using the Bash shell.
-
-See URL `http://www.gnu.org/software/bash/'."
- :command ("bash" "--norc" "-n"
- (eval flycheck-sh-bash-args)
- "--")
- :standard-input t
- :error-patterns
- ((error line-start
- ;; The name/path of the bash executable
- (one-or-more (not (any ":"))) ":"
- ;; A label "line", possibly localized
- (one-or-more (not (any digit)))
- line (zero-or-more " ") ":" (zero-or-more " ")
- (message) line-end))
- :modes sh-mode
- :predicate (lambda () (eq sh-shell 'bash))
- :next-checkers ((warning . sh-shellcheck)))
-
-(flycheck-define-checker sh-posix-dash
- "A POSIX Shell syntax checker using the Dash shell.
-
-See URL `http://gondor.apana.org.au/~herbert/dash/'."
- :command ("dash" "-n")
- :standard-input t
- :error-patterns
- ((error line-start (one-or-more (not (any ":"))) ": " line ": " (message)))
- :modes sh-mode
- :predicate (lambda () (eq sh-shell 'sh))
- :next-checkers ((warning . sh-shellcheck)))
-
-(flycheck-define-checker sh-posix-bash
- "A POSIX Shell syntax checker using the Bash shell.
-
-See URL `http://www.gnu.org/software/bash/'."
- :command ("bash" "--posix" "--norc" "-n" "--")
- :standard-input t
- :error-patterns
- ((error line-start
- ;; The name/path of the bash executable
- (one-or-more (not (any ":"))) ":"
- ;; A label "line", possibly localized
- (one-or-more (not (any digit)))
- line (zero-or-more " ") ":" (zero-or-more " ")
- (message) line-end))
- :modes sh-mode
- :predicate (lambda () (eq sh-shell 'sh))
- :next-checkers ((warning . sh-shellcheck)))
-
-(flycheck-define-checker sh-zsh
- "A Zsh syntax checker using the Zsh shell.
-
-See URL `http://www.zsh.org/'."
- :command ("zsh" "--no-exec" "--no-globalrcs" "--no-rcs" source)
- :error-patterns
- ((error line-start (file-name) ":" line ": " (message) line-end))
- :modes sh-mode
- :predicate (lambda () (eq sh-shell 'zsh))
- :next-checkers ((warning . sh-shellcheck)))
-
-(defconst flycheck-shellcheck-supported-shells '(bash ksh88 sh)
- "Shells supported by ShellCheck.")
-
-(flycheck-def-option-var flycheck-shellcheck-excluded-warnings nil sh-shellcheck
- "A list of excluded warnings for ShellCheck.
-
-The value of this variable is a list of strings, where each
-string is a warning code to be excluded from ShellCheck reports.
-By default, no warnings are excluded."
- :type '(repeat :tag "Excluded warnings"
- (string :tag "Warning code"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.21"))
-
-(flycheck-def-option-var flycheck-shellcheck-follow-sources t sh-shellcheck
- "Whether to follow external sourced files in scripts.
-
-Shellcheck will follow and parse sourced files so long as a
-pre-runtime resolvable path to the file is present. This can
-either be part of the source command itself:
- source /full/path/to/file.txt
-or added as a shellcheck directive before the source command:
- # shellcheck source=/full/path/to/file.txt."
- :type 'boolean
- :safe #'booleanp
- :package-version '(flycheck . "31"))
-
-(flycheck-define-checker sh-shellcheck
- "A shell script syntax and style checker using Shellcheck.
-
-See URL `https://github.com/koalaman/shellcheck/'."
- :command ("shellcheck"
- "--format" "checkstyle"
- "--shell" (eval (symbol-name sh-shell))
- (option-flag "--external-sources"
- flycheck-shellcheck-follow-sources)
- (option "--exclude" flycheck-shellcheck-excluded-warnings list
- flycheck-option-comma-separated-list)
- "-")
- :standard-input t
- :error-parser flycheck-parse-checkstyle
- :error-filter
- (lambda (errors)
- (flycheck-remove-error-file-names
- "-" (flycheck-dequalify-error-ids errors)))
- :modes sh-mode
- :predicate (lambda () (memq sh-shell flycheck-shellcheck-supported-shells))
- :verify (lambda (_)
- (let ((supports-shell (memq sh-shell
- flycheck-shellcheck-supported-shells)))
- (list
- (flycheck-verification-result-new
- :label (format "Shell %s supported" sh-shell)
- :message (if supports-shell "yes" "no")
- :face (if supports-shell 'success '(bold warning)))))))
-
-(flycheck-define-checker slim
- "A Slim syntax checker using the Slim compiler.
-
-See URL `http://slim-lang.com'."
- :command ("slimrb" "--compile")
- :standard-input t
- :error-patterns
- ((error line-start
- "Slim::Parser::SyntaxError:" (message) (optional "\r") "\n "
- "STDIN, Line " line (optional ", Column " column)
- line-end))
- :modes slim-mode
- :next-checkers ((warning . slim-lint)))
-
-(flycheck-define-checker slim-lint
- "A Slim linter.
-
-See URL `https://github.com/sds/slim-lint'."
- :command ("slim-lint" "--reporter=checkstyle" source)
- :error-parser flycheck-parse-checkstyle
- :modes slim-mode)
-
-(flycheck-define-checker sql-sqlint
- "A SQL syntax checker using the sqlint tool.
-
-See URL `https://github.com/purcell/sqlint'."
- :command ("sqlint")
- :standard-input t
- :error-patterns
- ((warning line-start "stdin:" line ":" column ":WARNING "
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more not-newline)))
- line-end)
- (error line-start "stdin:" line ":" column ":ERROR "
- (message (one-or-more not-newline)
- (zero-or-more "\n"
- (one-or-more " ")
- (one-or-more not-newline)))
- line-end))
- :modes (sql-mode))
-
-(flycheck-define-checker systemd-analyze
- "A systemd unit checker using systemd-analyze(1).
-
-See URL
-`https://www.freedesktop.org/software/systemd/man/systemd-analyze.html'."
- :command ("systemd-analyze" "verify" source)
- :error-parser flycheck-parse-with-patterns-without-color
- :error-patterns
- ((error line-start (file-name) ":" (optional line ":") (message) line-end)
- (error line-start "[" (file-name) ":" line "]" (message) line-end))
- :error-filter flycheck-fill-empty-line-numbers
- :modes (systemd-mode))
-
-(flycheck-def-config-file-var flycheck-chktexrc tex-chktex ".chktexrc")
-
-(flycheck-define-checker tcl-nagelfar
- "An extensible tcl syntax checker
-
-See URL `http://nagelfar.sourceforge.net/'."
- :command ("nagelfar" "-H" source)
- :error-patterns
- ;; foo.tcl: 29: E Wrong number of arguments (4) to "set"
- ;; foo.tcl: 29: W Expr without braces
- ((info line-start (file-name) ": " line ": N " (message) line-end)
- (warning line-start (file-name) ": " line ": W " (message) line-end)
- (error line-start (file-name) ": " line ": E " (message) line-end))
- :modes tcl-mode)
-
-(flycheck-define-checker terraform
- "A Terraform syntax checker with `terraform fmt'.
-
-See URL `https://www.terraform.io/docs/commands/fmt.html'."
- :command ("terraform" "fmt" "-no-color" "-")
- :standard-input t
- :error-patterns
- ((error line-start "Error: " (one-or-more not-newline)
- "\n\n on <stdin> line " line ":\n (source code not available)\n\n"
- (message (one-or-more (and (one-or-more (not (any ?\n))) ?\n)))
- line-end))
- :next-checkers ((warning . terraform-tflint))
- :modes terraform-mode)
-
-(flycheck-def-option-var flycheck-tflint-variable-files nil terraform-tflint
- "A list of files to resolve terraform variables.
-
-The value of this variable is a list of strings, where each
-string is a file to add to the terraform variables files.
-Relative files are relative to the file being checked."
- :type '(repeat (directory :tag "Variable file"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "32"))
-
-(defun flycheck-parse-tflint-linter (output checker buffer)
- "Parse tflint warnings from JSON OUTPUT.
-
-CHECKER and BUFFER denote the CHECKER that returned OUTPUT and
-the BUFFER that was checked respectively.
-
-See URL `https://github.com/wata727/tflint' for more
-information about tflint."
- (mapcar (lambda (err)
- (let-alist err
- (flycheck-error-new-at
- .line
- nil
- (pcase .type
- ("ERROR" 'error)
- ("WARNING" 'warning)
- (_ 'error))
- .message
- :id .detector
- :checker checker
- :buffer buffer
- :filename (buffer-file-name buffer))))
- (car (flycheck-parse-json output))))
-
-(flycheck-define-checker terraform-tflint
- "A Terraform checker using tflint.
-
-See URL `https://github.com/wata727/tflint'."
- :command ("tflint" "--format=json"
- (option-list "--var-file=" flycheck-tflint-variable-files concat)
- source-original)
- :error-parser flycheck-parse-tflint-linter
- :predicate flycheck-buffer-saved-p
- :modes terraform-mode)
-
-(flycheck-define-checker tex-chktex
- "A TeX and LaTeX syntax and style checker using chktex.
-
-See URL `http://www.nongnu.org/chktex/'."
- :command ("chktex"
- (config-file "--localrc" flycheck-chktexrc)
- ;; Compact error messages, and no version information, and execute
- ;; \input statements
- "--verbosity=0" "--quiet" "--inputfiles")
- :standard-input t
- :error-patterns
- ((warning line-start "stdin:" line ":" column ":"
- (id (one-or-more digit)) ":" (message) line-end))
- :error-filter
- (lambda (errors)
- (flycheck-sanitize-errors (flycheck-increment-error-columns errors)))
- :modes (latex-mode plain-tex-mode))
-
-(flycheck-define-checker tex-lacheck
- "A LaTeX syntax and style checker using lacheck.
-
-See URL `http://www.ctan.org/pkg/lacheck'."
- :command ("lacheck" source-inplace)
- :error-patterns
- ((warning line-start
- "\"" (file-name) "\", line " line ": " (message)
- line-end))
- :modes latex-mode)
-
-(flycheck-define-checker texinfo
- "A Texinfo syntax checker using makeinfo.
-
-See URL `http://www.gnu.org/software/texinfo/'."
- :command ("makeinfo" "-o" null-device "-")
- :standard-input t
- :error-patterns
- ((warning line-start
- "-:" line (optional ":" column) ": " "warning: " (message)
- line-end)
- (error line-start
- "-:" line (optional ":" column) ": " (message)
- line-end))
- :modes texinfo-mode)
-
-(flycheck-def-config-file-var flycheck-textlint-config
- textlint "textlintrc.json")
-
-;; This needs to be set because textlint plugins are installed separately,
-;; and there is no way to check their installation status -- textlint simply
-;; prints a backtrace.
-(flycheck-def-option-var flycheck-textlint-plugin-alist
- '((markdown-mode . "@textlint/markdown")
- (gfm-mode . "@textlint/markdown")
- (t . "@textlint/text"))
- textlint
- "An alist mapping major modes to textlint plugins.
-
-Each item is a cons cell `(MAJOR-MODE . PLUGIN)', where MAJOR-MODE is a mode
-`flycheck-textlint' supports and PLUGIN is a textlint plugin. As a catch-all,
-when MAJOR-MODE is t, that PLUGIN will be used for any supported mode that
-isn't specified.
-
-See URL `https://npms.io/search?q=textlint-plugin' for all textlint plugins
-published on NPM."
- :type '(repeat (choice (cons symbol string)
- (cons (const t) string))))
-
-(defun flycheck--textlint-get-plugin ()
- "Return the textlint plugin for the current mode."
- (cdr (-first
- (lambda (arg)
- (pcase-let ((`(,mode . _) arg))
- (or (and (booleanp mode) mode) ; mode is t
- (derived-mode-p mode))))
- flycheck-textlint-plugin-alist)))
-
-(flycheck-define-checker textlint
- "A text prose linter using textlint.
-
-See URL `https://textlint.github.io/'."
- :command ("textlint"
- (config-file "--config" flycheck-textlint-config)
- "--format" "json"
- ;; get the first matching plugin from plugin-alist
- "--plugin"
- (eval (flycheck--textlint-get-plugin))
- source)
- ;; textlint seems to say that its json output is compatible with ESLint.
- ;; https://textlint.github.io/docs/formatter.html
- :error-parser flycheck-parse-eslint
- ;; textlint can support different formats with textlint plugins, but
- ;; only text and markdown formats are installed by default. Ask the
- ;; user to add mode->plugin mappings manually in
- ;; `flycheck-textlint-plugin-alist'.
- :modes
- (text-mode markdown-mode gfm-mode message-mode adoc-mode
- mhtml-mode latex-mode org-mode rst-mode)
- :enabled
- (lambda () (flycheck--textlint-get-plugin))
- :verify
- (lambda (_)
- (let ((plugin (flycheck--textlint-get-plugin)))
- (list
- (flycheck-verification-result-new
- :label "textlint plugin"
- :message plugin
- :face 'success)))))
-
-(flycheck-def-config-file-var flycheck-typescript-tslint-config
- typescript-tslint "tslint.json"
- :package-version '(flycheck . "27"))
-
-(flycheck-def-option-var flycheck-typescript-tslint-rulesdir
- nil typescript-tslint
- "The directory of custom rules for TSLint.
-
-The value of this variable is either a string containing the path
-to a directory with custom rules, or nil, to not give any custom
-rules to TSLint.
-
-Refer to the TSLint manual at URL
-`http://palantir.github.io/tslint/usage/cli/'
-for more information about the custom directory."
- :type '(choice (const :tag "No custom rules directory" nil)
- (directory :tag "Custom rules directory"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "27"))
-
-(flycheck-def-args-var flycheck-tslint-args (typescript-tslint)
- :package-version '(flycheck . "31"))
-
-(flycheck-define-checker typescript-tslint
- "TypeScript style checker using TSLint.
-
-Note that this syntax checker is not used if
-`flycheck-typescript-tslint-config' is nil or refers to a
-non-existing file.
-
-See URL `https://github.com/palantir/tslint'."
- :command ("tslint" "--format" "json"
- (config-file "--config" flycheck-typescript-tslint-config)
- (option "--rules-dir" flycheck-typescript-tslint-rulesdir)
- (eval flycheck-tslint-args)
- source-inplace)
- :error-parser flycheck-parse-tslint
- :modes (typescript-mode))
-
-(flycheck-def-option-var flycheck-verilator-include-path nil verilog-verilator
- "A list of include directories for Verilator.
-
-The value of this variable is a list of strings, where each
-string is a directory to add to the include path of Verilator.
-Relative paths are relative to the file being checked."
- :type '(repeat (directory :tag "Include directory"))
- :safe #'flycheck-string-list-p
- :package-version '(flycheck . "0.24"))
-
-(flycheck-define-checker verilog-verilator
- "A Verilog syntax checker using the Verilator Verilog HDL simulator.
-
-See URL `https://www.veripool.org/wiki/verilator'."
- :command ("verilator" "--lint-only" "-Wall"
- (option-list "-I" flycheck-verilator-include-path concat)
- source)
- :error-patterns
- ((warning line-start "%Warning-" (zero-or-more not-newline) ": "
- (file-name) ":" line ": " (message) line-end)
- (error line-start "%Error: " (file-name) ":"
- line ": " (message) line-end))
- :modes verilog-mode)
-
-(flycheck-def-option-var flycheck-ghdl-language-standard nil vhdl-ghdl
- "The language standard to use in GHDL.
-
-The value of this variable is either a string denoting a language
-standard, or nil, to use the default standard. When non-nil,
-pass the language standard via the `--std' option."
- :type '(choice (const :tag "Default standard" nil)
- (string :tag "Language standard"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-(make-variable-buffer-local 'flycheck-ghdl-language-standard)
-
-(flycheck-def-option-var flycheck-ghdl-workdir nil vhdl-ghdl
- "The directory to use for the file library.
-
-The value of this variable is either a string with the directory
-to use for the file library, or nil, to use the default value.
-When non-nil, pass the directory via the `--workdir' option."
- :type '(choice (const :tag "Default directory" nil)
- (string :tag "Directory for the file library"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-(make-variable-buffer-local 'flycheck-ghdl-workdir)
-
-(flycheck-def-option-var flycheck-ghdl-ieee-library nil vhdl-ghdl
- "The standard to use for the IEEE library.
-
-The value of this variable is either a string denoting an ieee library
-standard, or nil, to use the default standard. When non-nil,
-pass the ieee library standard via the `--ieee' option."
- :type '(choice (const :tag "Default standard" nil)
- (const :tag "No IEEE Library" "none")
- (const :tag "IEEE standard" "standard")
- (const :tag "Synopsys standard" "synopsys")
- (const :tag "Mentor standard" "mentor"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "32"))
-(make-variable-buffer-local 'flycheck-ghdl-ieee-library)
-
-(flycheck-define-checker vhdl-ghdl
- "A VHDL syntax checker using GHDL.
-
-See URL `https://github.com/ghdl/ghdl'."
- :command ("ghdl"
- "-s" ; only do the syntax checking
- (option "--std=" flycheck-ghdl-language-standard concat)
- (option "--workdir=" flycheck-ghdl-workdir concat)
- (option "--ieee=" flycheck-ghdl-ieee-library concat)
- source)
- :error-patterns
- ((error line-start (file-name) ":" line ":" column ": " (message) line-end))
- :modes vhdl-mode)
-
-(flycheck-def-option-var flycheck-xml-xmlstarlet-xsd-path nil xml-xmlstarlet
- "An XSD schema to validate against."
- :type '(choice (const :tag "None" nil)
- (file :tag "XSD schema"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "31"))
-
-(flycheck-define-checker xml-xmlstarlet
- "A XML syntax checker and validator using the xmlstarlet utility.
-
-See URL `http://xmlstar.sourceforge.net/'."
- ;; Validate standard input with verbose error messages, and do not dump
- ;; contents to standard output
- :command ("xmlstarlet" "val" "--err" "--quiet"
- (option "--xsd" flycheck-xml-xmlstarlet-xsd-path)
- "-")
- :standard-input t
- :error-patterns
- ((error line-start "-:" line "." column ": " (message) line-end))
- :modes (xml-mode nxml-mode))
-
-(flycheck-def-option-var flycheck-xml-xmllint-xsd-path nil xml-xmllint
- "An XSD schema to validate against."
- :type '(choice (const :tag "None" nil)
- (file :tag "XSD schema"))
- :safe #'flycheck-string-or-nil-p
- :package-version '(flycheck . "31"))
-
-(flycheck-define-checker xml-xmllint
- "A XML syntax checker and validator using the xmllint utility.
-
-The xmllint is part of libxml2, see URL
-`http://www.xmlsoft.org/'."
- :command ("xmllint" "--noout"
- (option "--schema" flycheck-xml-xmllint-xsd-path)
- "-")
- :standard-input t
- :error-patterns
- ((error line-start "-:" line ": " (message) line-end))
- :modes (xml-mode nxml-mode))
-
-(flycheck-define-checker yaml-jsyaml
- "A YAML syntax checker using JS-YAML.
-
-See URL `https://github.com/nodeca/js-yaml'."
- :command ("js-yaml")
- :standard-input t
- :error-patterns
- ((error line-start
- (or "JS-YAML" "YAMLException") ": "
- (message) " at line " line ", column " column ":"
- line-end))
- :modes yaml-mode
- :next-checkers ((warning . cwl)))
-
-(flycheck-define-checker yaml-ruby
- "A YAML syntax checker using Ruby's YAML parser.
-
-This syntax checker uses the YAML parser from Ruby's standard
-library.
-
-See URL `http://www.ruby-doc.org/stdlib-2.0.0/libdoc/yaml/rdoc/YAML.html'."
- :command ("ruby" "-ryaml" "-e" "begin;
- YAML.load(STDIN); \
- rescue Exception => e; \
- STDERR.puts \"stdin:#{e}\"; \
- end")
- :standard-input t
- :error-patterns
- ((error line-start "stdin:" (zero-or-more not-newline) ":" (message)
- "at line " line " column " column line-end))
- :modes yaml-mode
- :next-checkers ((warning . cwl)))
-
-(flycheck-def-config-file-var flycheck-yamllintrc yaml-yamllint ".yamllint")
-
-(flycheck-define-checker yaml-yamllint
- "A YAML syntax checker using YAMLLint.
-See URL `https://github.com/adrienverge/yamllint'."
- :standard-input t
- :command ("yamllint" "-f" "parsable" "-"
- (config-file "-c" flycheck-yamllintrc))
- :error-patterns
- ((error line-start
- "stdin:" line ":" column ": [error] " (message) line-end)
- (warning line-start
- "stdin:" line ":" column ": [warning] " (message) line-end))
- :modes yaml-mode)
-
-(provide 'flycheck)
-
-;; Local Variables:
-;; coding: utf-8
-;; indent-tabs-mode: nil
-;; End:
-
-;;; flycheck.el ends here
diff --git a/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-autoloads.el b/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-autoloads.el
deleted file mode 100644
index 00824ad..0000000
--- a/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-autoloads.el
+++ /dev/null
@@ -1,39 +0,0 @@
-;;; flycheck-color-mode-line-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "flycheck-color-mode-line" "flycheck-color-mode-line.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from flycheck-color-mode-line.el
-
-(autoload 'flycheck-color-mode-line-mode "flycheck-color-mode-line" "\
-Minor mode to color the mode line with the Flycheck status.
-
-When called interactively, toggle
-`flycheck-color-mode-line-mode'. With prefix ARG, enable
-`flycheck-color-mode-line-mode' if ARG is positive, otherwise
-disable it.
-
-When called from Lisp, enable `flycheck-color-mode-line-mode' if ARG is omitted,
-nil or positive. If ARG is `toggle', toggle `flycheck-color-mode-line-mode'.
-Otherwise behave as if called interactively.
-
-\(fn &optional ARG)" t nil)
-
-(custom-add-frequent-value 'flycheck-mode-hook 'flycheck-color-mode-line-mode)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flycheck-color-mode-line" '("flycheck-color-mode-line-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; flycheck-color-mode-line-autoloads.el ends here
diff --git a/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-pkg.el b/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-pkg.el
deleted file mode 100644
index 0d5d5a4..0000000
--- a/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "flycheck-color-mode-line" "20171122.707" "Change mode line color with Flycheck status" '((flycheck "0.15") (dash "1.2") (emacs "24.1")) :commit "cc474804d4e8088a627485faaf4217a5781aec7d" :keywords '("convenience" "language" "tools") :authors '(("Sylvain Benner" . "sylvain.benner@gmail.com")) :maintainer '("Sylvain Benner" . "sylvain.benner@gmail.com"))
diff --git a/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line.el b/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line.el
deleted file mode 100644
index 930fea8..0000000
--- a/emacs.d/elpa/flycheck-color-mode-line-20171122.707/flycheck-color-mode-line.el
+++ /dev/null
@@ -1,162 +0,0 @@
-;;; flycheck-color-mode-line.el --- Change mode line color with Flycheck status -*- lexical-binding: t -*-
-
-;; Copyright (c) 2013 Sylvain Benner <sylvain.benner@gmail.com>
-;;
-;; Author: Sylvain Benner <sylvain.benner@gmail.com>
-;; Keywords: convenience language tools
-;; Package-Version: 20171122.707
-;; Version: 0.3
-;; Package-Requires: ((flycheck "0.15") (dash "1.2") (emacs "24.1"))
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Colorize the mode line according to the Flycheck status.
-;;
-;; This package provides the `flycheck-color-mode-line-mode' minor mode which
-;; changes the color of the mode line according to the status of Flycheck syntax
-;; checking.
-;;
-;; To enable this mode in Flycheck, add it to `flycheck-mode-hook':
-;;
-;; (add-hook 'flycheck-mode-hook 'flycheck-color-mode-line-mode)
-;;
-;; Thanks go to:
-;; - Thomas Järvstrand (tjarvstrand) for the initial code from the excellent
-;; EDTS package
-;; - Sebastian Wiesner (lunaryorn) for flycheck and his awesome support.
-
-;;; Code:
-
-(require 'dash)
-(require 'flycheck)
-(require 'face-remap)
-
-;;;; Customization
-(defface flycheck-color-mode-line-error-face
- '((t :inherit flycheck-fringe-error))
- "Face remapping for the modeline in buffers with Flycheck errors.
-This is applied to the face named in `flycheck-color-mode-line-face-to-color'."
- :group 'flycheck-faces)
-
-(defface flycheck-color-mode-line-warning-face
- '((t :inherit flycheck-fringe-warning))
- "Face remapping for the modeline in buffers with only Flycheck warnings.
-This is applied to the face named in `flycheck-color-mode-line-face-to-color'."
- :group 'flycheck-faces)
-
-(defface flycheck-color-mode-line-info-face
- '((t :inherit flycheck-fringe-info))
- "Face remapping for the modeline in buffers with only Flycheck info.
-This is applied to the face named in `flycheck-color-mode-line-face-to-color'."
- :group 'flycheck-faces)
-
-(defface flycheck-color-mode-line-success-face
- '((t))
- "Face remapping for the modeline in buffers with no Flycheck feedback items.
-This is applied to the face named in `flycheck-color-mode-line-face-to-color'.
-Customize this to actively mark buffers in which Flycheck has run
-but not reported any issues."
- :group 'flycheck-faces)
-
-(defcustom flycheck-color-mode-line-show-running t
- "When non-nil, apply `flycheck-color-mode-line-running-face' when Flycheck is running."
- :type 'boolean)
-
-(put 'flycheck-color-mode-line-show-running 'safe-local-variable 'booleanp)
-
-(defface flycheck-color-mode-line-running-face
- '((t :inherit font-lock-comment-face))
- "Face remapping for the modeline in buffers where Flycheck is running.
-This is applied to the face named in `flycheck-color-mode-line-face-to-color'."
- :group 'flycheck-faces)
-
-(defcustom flycheck-color-mode-line-face-to-color
- 'mode-line
- "Symbol identifying which face to remap.
-While 'mode-line is the default, you might prefer to modify a
-different face, e.g. 'mode-line-buffer-id, 'fringe, 'line-number or 'linum."
- :type 'symbol
- :group 'flycheck-faces)
-
-;;;; Modeline face remapping
-(defvar-local flycheck-color-mode-line-cookie nil
- "Cookie for the remapped modeline face.
-
-Used to restore the original mode line face.")
-
-(defun flycheck-color-mode-line-reset ()
- "Reset the mode line face."
- (when flycheck-color-mode-line-cookie
- (face-remap-remove-relative flycheck-color-mode-line-cookie)
- (setq flycheck-color-mode-line-cookie nil)))
-
-(defun flycheck-color-mode-line-update (status)
- "Update the mode line face according to the Flycheck STATUS."
- (let ((face (pcase status
- (`finished
- (cond
- ((flycheck-has-current-errors-p 'error)
- 'flycheck-color-mode-line-error-face)
- ((flycheck-has-current-errors-p 'warning)
- 'flycheck-color-mode-line-warning-face)
- ((flycheck-has-current-errors-p 'info)
- 'flycheck-color-mode-line-info-face)
- (t
- 'flycheck-color-mode-line-success-face)))
- (`running
- (when flycheck-color-mode-line-show-running
- 'flycheck-color-mode-line-running-face)))))
- (when face
- (flycheck-color-mode-line-reset)
- (setq flycheck-color-mode-line-cookie
- (face-remap-add-relative flycheck-color-mode-line-face-to-color face)))))
-
-;;;###autoload
-(define-minor-mode flycheck-color-mode-line-mode
- "Minor mode to color the mode line with the Flycheck status.
-
-When called interactively, toggle
-`flycheck-color-mode-line-mode'. With prefix ARG, enable
-`flycheck-color-mode-line-mode' if ARG is positive, otherwise
-disable it.
-
-When called from Lisp, enable `flycheck-color-mode-line-mode' if ARG is omitted,
-nil or positive. If ARG is `toggle', toggle `flycheck-color-mode-line-mode'.
-Otherwise behave as if called interactively."
- :init-value nil
- :keymap nil
- :lighter nil
- :group 'flycheck
- :require 'flycheck-color-mode-line
- (cond
- (flycheck-color-mode-line-mode
- (add-hook 'flycheck-status-changed-functions
- #'flycheck-color-mode-line-update nil t)
- (flycheck-color-mode-line-update 'unknown))
- (:else
- (remove-hook 'flycheck-status-changed-functions
- #'flycheck-color-mode-line-update t)
-
- (flycheck-color-mode-line-reset))))
-
-;;;###autoload
-(custom-add-frequent-value 'flycheck-mode-hook 'flycheck-color-mode-line-mode)
-
-(provide 'flycheck-color-mode-line)
-
-;;; flycheck-color-mode-line.el ends here
diff --git a/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-autoloads.el b/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-autoloads.el
deleted file mode 100644
index 8ec491f..0000000
--- a/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-autoloads.el
+++ /dev/null
@@ -1,30 +0,0 @@
-;;; flycheck-rust-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "flycheck-rust" "flycheck-rust.el" (0 0 0 0))
-;;; Generated autoloads from flycheck-rust.el
-
-(autoload 'flycheck-rust-setup "flycheck-rust" "\
-Setup Rust in Flycheck.
-
-If the current file is part of a Cargo project, configure
-Flycheck according to the Cargo project layout.
-
-\(fn)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "flycheck-rust" '("flycheck-rust-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; flycheck-rust-autoloads.el ends here
diff --git a/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-pkg.el b/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-pkg.el
deleted file mode 100644
index 152631d..0000000
--- a/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "flycheck-rust" "20190319.1546" "Flycheck: Rust additions and Cargo support" '((emacs "24.1") (flycheck "28") (dash "2.13.0") (seq "2.3") (let-alist "1.0.4")) :commit "a139cd53c5062697e9ed94ad80b803c37d999600" :keywords '("tools" "convenience") :authors '(("Sebastian Wiesner" . "swiesner@lunaryorn.com")) :maintainer '("Sebastian Wiesner" . "swiesner@lunaryorn.com") :url "https://github.com/flycheck/flycheck-rust")
diff --git a/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust.el b/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust.el
deleted file mode 100644
index c057beb..0000000
--- a/emacs.d/elpa/flycheck-rust-20190319.1546/flycheck-rust.el
+++ /dev/null
@@ -1,210 +0,0 @@
-;;; flycheck-rust.el --- Flycheck: Rust additions and Cargo support -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2016, 2017 fmdkdd
-;; Copyright (C) 2014, 2015 Sebastian Wiesner <swiesner@lunaryorn.com>
-
-;; Author: Sebastian Wiesner <swiesner@lunaryorn.com>
-;; URL: https://github.com/flycheck/flycheck-rust
-;; Package-Version: 20190319.1546
-;; Keywords: tools, convenience
-;; Version: 1.1
-;; Package-Requires: ((emacs "24.1") (flycheck "28") (dash "2.13.0") (seq "2.3") (let-alist "1.0.4"))
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This Flycheck extension configures Flycheck automatically for the current
-;; Cargo project.
-;;
-;; # Setup
-;;
-;; (with-eval-after-load 'rust-mode
-;; (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))
-;;
-;; # Usage
-;;
-;; Just use Flycheck as usual in your Rust/Cargo projects.
-
-;;; Code:
-
-(eval-when-compile
- (require 'pcase)
- (require 'let-alist))
-
-(require 'dash)
-(require 'flycheck)
-(require 'seq)
-(require 'json)
-
-(defun flycheck-rust-find-manifest (file-name)
- "Get the Cargo.toml manifest for FILE-NAME.
-
-FILE-NAME is the path of a file in a cargo project given as a
-string.
-
-See http://doc.crates.io/guide.html for an introduction to the
-Cargo.toml manifest.
-
-Return the path to the Cargo.toml manifest file, or nil if the
-manifest could not be located."
- (-when-let (root-dir (locate-dominating-file file-name "Cargo.toml"))
- (expand-file-name "Cargo.toml" root-dir)))
-
-(defun flycheck-rust-dirs-list (start end)
- "Return a list of directories from START (inclusive) to END (exclusive).
-
-E.g., if START is '/a/b/c/d' and END is '/a', return the list
-'(/a/b/c/d /a/b/c /a/b) in this order.
-
-START and END are strings representing file paths. END should be
-above START in the file hierarchy; if not, the list stops at the
-root of the file hierarchy."
- (let ((dirlist)
- (dir (expand-file-name start))
- (end (expand-file-name end)))
- (while (not (or (equal dir (car dirlist)) ; avoid infinite loop
- (file-equal-p dir end)))
- (push dir dirlist)
- (setq dir (directory-file-name (file-name-directory dir))))
- (nreverse dirlist)))
-
-(defun flycheck-rust-get-cargo-targets (manifest)
- "Return the list of available Cargo targets for the given project.
-
-MANIFEST is the path to the Cargo.toml file of the project.
-
-Calls `cargo metadata --no-deps --manifest-path MANIFEST
---format-version 1', parses and collects the targets for the
-current workspace, and returns them in a list, or nil if no
-targets could be found."
- (let ((cargo (funcall flycheck-executable-find "cargo")))
- (unless cargo
- (user-error "flycheck-rust cannot find `cargo'. Please \
-make sure that cargo is installed and on your PATH. See \
-http://www.flycheck.org/en/latest/user/troubleshooting.html for \
-more information on setting your PATH with Emacs."))
- ;; metadata contains a list of packages, and each package has a list of
- ;; targets. We concatenate all targets, regardless of the package.
- (-when-let (packages (let-alist
- (with-temp-buffer
- (call-process cargo nil '(t nil) nil
- "metadata" "--no-deps"
- "--manifest-path" manifest
- "--format-version" "1")
- (goto-char (point-min))
- (let ((json-array-type 'list))
- (json-read)))
- .packages))
- (seq-map (lambda (pkg)
- (let-alist pkg .targets))
- packages))))
-
-(defun flycheck-rust-find-cargo-target (file-name)
- "Return the Cargo build target associated with FILE-NAME.
-
-FILE-NAME is the path of the file that is matched against the
-`src_path' value in the list of `targets' returned by `cargo
-read-manifest'.
-
-Return an alist ((KIND . k) (NAME . n) (REQUIRED-FEATURES . rf))
-where KIND is the target kind (lib, bin, test, example or bench),
-NAME the target name (usually, the crate name), and REQUIRED-FEATURES is the
-optional list of features required to build the selected target. If FILE-NAME
-exactly matches a target `src-path', this target is returned. Otherwise, return
-the closest matching target, or nil if no targets could be found.
-
-See http://doc.crates.io/manifest.html#the-project-layout for a
-description of the conventional Cargo project layout."
- (-when-let* ((manifest (flycheck-rust-find-manifest file-name))
- (packages (flycheck-rust-get-cargo-targets manifest))
- (targets (-flatten-n 1 packages)))
- (let ((target
- (or
- ;; If there is a target that matches the file-name exactly, pick
- ;; that one
- (seq-find (lambda (target)
- (let-alist target (string= file-name .src_path)))
- targets)
- ;; Otherwise find the closest matching target by walking up the tree
- ;; from FILE-NAME and looking for targets in each directory. E.g.,
- ;; the file 'tests/common/a.rs' will look for a target in
- ;; 'tests/common', then in 'tests/', etc.
- (car (seq-find
- (lambda (pair)
- (-let [((&alist 'src_path target-path) . dir) pair]
- (file-equal-p dir (file-name-directory target-path))))
- ;; build a list of (target . dir) candidates
- (-table-flat
- 'cons targets
- (flycheck-rust-dirs-list file-name
- (file-name-directory manifest)))))
- ;; If all else fails, just pick the first target
- (car targets))))
- ;; If target is 'custom-build', we pick another target from the same package (see GH-62)
- (when (string= "custom-build" (let-alist target (car .kind)))
- (setq target (->> packages
- ;; find the same package as current build-script buffer
- (--find (--any? (equal target it) it))
- (--find (not (equal target it))))))
- (when target
- (let-alist target
- (seq-filter (lambda (kv) (cdr kv))
- (list (cons 'kind (flycheck-rust-normalize-target-kind .kind))
- (cons 'name .name)
- (cons 'required-features .required-features))))))))
-
-
-(defun flycheck-rust-normalize-target-kind (kinds)
- "Return the normalized target name from KIND.
-
-KIND is a list of target name as returned by `cargo metadata',
-which do not necessarily correspond to to target names that can
-be passed as argument to `cargo rustc'.
-
-The normalization returns a valid cargo target based on KINDS."
- ;; Assumption: we only care about the first kind name. Multiple kinds only
- ;; seem to happen for library crate types, and those all maps to the same
- ;; `lib' target.
- (pcase (car kinds)
- (`"dylib" "lib")
- (`"rlib" "lib")
- (`"staticlib" "lib")
- (`"cdylib" "lib")
- (`"proc-macro" "lib")
- (_ (car kinds))))
-
-;;;###autoload
-(defun flycheck-rust-setup ()
- "Setup Rust in Flycheck.
-
-If the current file is part of a Cargo project, configure
-Flycheck according to the Cargo project layout."
- (interactive)
- ;; We should avoid raising any error in this function, as in combination
- ;; with `global-flycheck-mode' it will render Emacs unusable (see
- ;; https://github.com/flycheck/flycheck-rust/issues/40#issuecomment-253760883).
- (with-demoted-errors "Error in flycheck-rust-setup: %S"
- (-when-let* ((file-name (buffer-file-name))
- (target (flycheck-rust-find-cargo-target file-name)))
- (let-alist target
- (setq-local flycheck-rust-features .required-features)
- (setq-local flycheck-rust-crate-type .kind)
- (setq-local flycheck-rust-binary-name .name)))))
-
-(provide 'flycheck-rust)
-
-;;; flycheck-rust.el ends here
diff --git a/emacs.d/elpa/gnupg/pubring.kbx b/emacs.d/elpa/gnupg/pubring.kbx
deleted file mode 100644
index 87ba260..0000000
--- a/emacs.d/elpa/gnupg/pubring.kbx
+++ /dev/null
Binary files differ
diff --git a/emacs.d/elpa/gnupg/pubring.kbx~ b/emacs.d/elpa/gnupg/pubring.kbx~
deleted file mode 100644
index 11895d0..0000000
--- a/emacs.d/elpa/gnupg/pubring.kbx~
+++ /dev/null
Binary files differ
diff --git a/emacs.d/elpa/gnupg/trustdb.gpg b/emacs.d/elpa/gnupg/trustdb.gpg
deleted file mode 100644
index a699eb6..0000000
--- a/emacs.d/elpa/gnupg/trustdb.gpg
+++ /dev/null
Binary files differ
diff --git a/emacs.d/elpa/ht-20210119.741/ht-autoloads.el b/emacs.d/elpa/ht-20210119.741/ht-autoloads.el
deleted file mode 100644
index c860d46..0000000
--- a/emacs.d/elpa/ht-20210119.741/ht-autoloads.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; ht-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "ht" "ht.el" (0 0 0 0))
-;;; Generated autoloads from ht.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "ht" 'nil))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; ht-autoloads.el ends here
diff --git a/emacs.d/elpa/ht-20210119.741/ht-pkg.el b/emacs.d/elpa/ht-20210119.741/ht-pkg.el
deleted file mode 100644
index 15125c7..0000000
--- a/emacs.d/elpa/ht-20210119.741/ht-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; Generated package description from ht-20210119.741/ht.el -*- no-byte-compile: t -*-
-(define-package "ht" "20210119.741" "The missing hash table library for Emacs" '((dash "2.12.0")) :commit "c4c1be487d6ecb353d07881526db05d7fc90ea87" :authors '(("Wilfred Hughes" . "me@wilfred.me.uk")) :maintainer '("Wilfred Hughes" . "me@wilfred.me.uk") :keywords '("hash table" "hash map" "hash"))
diff --git a/emacs.d/elpa/ht-20210119.741/ht.el b/emacs.d/elpa/ht-20210119.741/ht.el
deleted file mode 100644
index 0809ef1..0000000
--- a/emacs.d/elpa/ht-20210119.741/ht.el
+++ /dev/null
@@ -1,337 +0,0 @@
-;;; ht.el --- The missing hash table library for Emacs -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013 Wilfred Hughes
-
-;; Author: Wilfred Hughes <me@wilfred.me.uk>
-;; Version: 2.4
-;; Package-Version: 20210119.741
-;; Package-Commit: c4c1be487d6ecb353d07881526db05d7fc90ea87
-;; Keywords: hash table, hash map, hash
-;; Package-Requires: ((dash "2.12.0"))
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; The missing hash table library for Emacs.
-;;
-;; See documentation at https://github.com/Wilfred/ht.el
-
-;;; Code:
-
-(require 'dash)
-(require 'gv)
-(eval-when-compile
- (require 'inline))
-
-(defmacro ht (&rest pairs)
- "Create a hash table with the key-value pairs given.
-Keys are compared with `equal'.
-
-\(fn (KEY-1 VALUE-1) (KEY-2 VALUE-2) ...)"
- (let* ((table-symbol (make-symbol "ht-temp"))
- (assignments
- (mapcar
- (lambda (pair) `(ht-set! ,table-symbol ,@pair))
- pairs)))
- `(let ((,table-symbol (ht-create)))
- ,@assignments
- ,table-symbol)))
-
-(define-inline ht-set! (table key value)
- "Associate KEY in TABLE with VALUE."
- (inline-quote
- (prog1 nil
- (puthash ,key ,value ,table))))
-
-(defalias 'ht-set 'ht-set!)
-
-(define-inline ht-create (&optional test)
- "Create an empty hash table.
-
-TEST indicates the function used to compare the hash
-keys. Default is `equal'. It can be `eq', `eql', `equal' or a
-user-supplied test created via `define-hash-table-test'."
- (declare (side-effect-free t))
- (inline-quote (make-hash-table :test (or ,test 'equal))))
-
-(defun ht<-alist (alist &optional test)
- "Create a hash table with initial values according to ALIST.
-
-TEST indicates the function used to compare the hash
-keys. Default is `equal'. It can be `eq', `eql', `equal' or a
-user-supplied test created via `define-hash-table-test'."
- (declare (side-effect-free t))
- (let ((h (ht-create test)))
- ;; the first key-value pair in an alist gets precedence, so we
- ;; start from the end of the list:
- (dolist (pair (reverse alist) h)
- (let ((key (car pair))
- (value (cdr pair)))
- (ht-set! h key value)))))
-
-(defalias 'ht-from-alist 'ht<-alist)
-
-(defun ht<-plist (plist &optional test)
- "Create a hash table with initial values according to PLIST.
-
-TEST indicates the function used to compare the hash
-keys. Default is `equal'. It can be `eq', `eql', `equal' or a
-user-supplied test created via `define-hash-table-test'."
- (declare (side-effect-free t))
- (let ((h (ht-create test)))
- (dolist (pair (nreverse (-partition 2 plist)) h)
- (let ((key (car pair))
- (value (cadr pair)))
- (ht-set! h key value)))))
-
-(defalias 'ht-from-plist 'ht<-plist)
-
-(define-inline ht-get (table key &optional default)
- "Look up KEY in TABLE, and return the matching value.
-If KEY isn't present, return DEFAULT (nil if not specified)."
- (declare (side-effect-free t))
- (inline-quote
- (gethash ,key ,table ,default)))
-
-;; Don't use `ht-set!' here, gv setter was assumed to return the value
-;; to be set.
-(gv-define-setter ht-get (value table key) `(puthash ,key ,value ,table))
-
-(define-inline ht-get* (table &rest keys)
- "Look up KEYS in nested hash tables, starting with TABLE.
-The lookup for each key should return another hash table, except
-for the final key, which may return any value."
- (declare (side-effect-free t))
- (inline-letevals (table keys)
- (inline-quote
- (progn
- (while ,keys
- (setf ,table (ht-get ,table (pop ,keys))))
- ,table))))
-
-(put 'ht-get* 'compiler-macro
- (lambda (_ table &rest keys)
- (--reduce-from `(ht-get ,acc ,it) table keys)))
-
-(defun ht-update! (table from-table)
- "Update TABLE according to every key-value pair in FROM-TABLE."
- (maphash
- (lambda (key value) (puthash key value table))
- from-table)
- nil)
-
-(defalias 'ht-update 'ht-update!)
-
-(defun ht-merge (&rest tables)
- "Crete a new tables that includes all the key-value pairs from TABLES.
-If multiple have tables have the same key, the value in the last
-table is used."
- (let ((merged (ht-create)))
- (mapc (lambda (table) (ht-update! merged table)) tables)
- merged))
-
-(define-inline ht-remove! (table key)
- "Remove KEY from TABLE."
- (inline-quote (remhash ,key ,table)))
-
-(defalias 'ht-remove 'ht-remove!)
-
-(define-inline ht-clear! (table)
- "Remove all keys from TABLE."
- (inline-quote
- (prog1 nil
- (clrhash ,table))))
-
-(defalias 'ht-clear 'ht-clear!)
-
-(defun ht-map (function table)
- "Apply FUNCTION to each key-value pair of TABLE, and make a list of the results.
-FUNCTION is called with two arguments, KEY and VALUE."
- (let (results)
- (maphash
- (lambda (key value)
- (push (funcall function key value) results))
- table)
- results))
-
-(defmacro ht-amap (form table)
- "Anaphoric version of `ht-map'.
-For every key-value pair in TABLE, evaluate FORM with the
-variables KEY and VALUE bound. If you don't use both of
-these variables, then use `ht-map' to avoid warnings."
- `(ht-map (lambda (key value) ,form) ,table))
-
-(defun ht-keys (table)
- "Return a list of all the keys in TABLE."
- (declare (side-effect-free t))
- (ht-map (lambda (key _value) key) table))
-
-(defun ht-values (table)
- "Return a list of all the values in TABLE."
- (declare (side-effect-free t))
- (ht-map (lambda (_key value) value) table))
-
-(defun ht-items (table)
- "Return a list of two-element lists '(key value) from TABLE."
- (declare (side-effect-free t))
- (ht-amap (list key value) table))
-
-(defalias 'ht-each 'maphash
- "Apply FUNCTION to each key-value pair of TABLE.
-Returns nil, used for side-effects only.")
-
-(defmacro ht-aeach (form table)
- "Anaphoric version of `ht-each'.
-For every key-value pair in TABLE, evaluate FORM with the
-variables key and value bound."
- `(ht-each (lambda (key value) ,form) ,table))
-
-(defun ht-select-keys (table keys)
- "Return a copy of TABLE with only the specified KEYS."
- (declare (side-effect-free t))
- (let (result)
- (setq result (make-hash-table :test (hash-table-test table)))
- (dolist (key keys result)
- (if (not (equal (gethash key table 'key-not-found) 'key-not-found))
- (puthash key (gethash key table) result)))))
-
-(defun ht->plist (table)
- "Return a flat list '(key1 value1 key2 value2...) from TABLE.
-
-Note that hash tables are unordered, so this cannot be an exact
-inverse of `ht<-plist'. The following is not guaranteed:
-
-\(let ((data '(a b c d)))
- (equalp data
- (ht->plist (ht<-plist data))))"
- (declare (side-effect-free t))
- (apply 'append (ht-items table)))
-
-(defalias 'ht-to-plist 'ht->plist)
-
-(define-inline ht-copy (table)
- "Return a shallow copy of TABLE (keys and values are shared)."
- (declare (side-effect-free t))
- (inline-quote (copy-hash-table ,table)))
-
-(defun ht->alist (table)
- "Return a list of two-element lists '(key . value) from TABLE.
-
-Note that hash tables are unordered, so this cannot be an exact
-inverse of `ht<-alist'. The following is not guaranteed:
-
-\(let ((data '((a . b) (c . d))))
- (equalp data
- (ht->alist (ht<-alist data))))"
- (declare (side-effect-free t))
- (ht-amap (cons key value) table))
-
-(defalias 'ht-to-alist 'ht->alist)
-
-(defalias 'ht? 'hash-table-p)
-
-(defalias 'ht-p 'hash-table-p)
-
-(define-inline ht-contains? (table key)
- "Return 't if TABLE contains KEY."
- (declare (side-effect-free t))
- (inline-quote
- (let ((not-found-symbol (make-symbol "ht--not-found")))
- (not (eq (ht-get ,table ,key not-found-symbol) not-found-symbol)))))
-
-(defalias 'ht-contains-p 'ht-contains?)
-
-(define-inline ht-size (table)
- "Return the actual number of entries in TABLE."
- (declare (side-effect-free t))
- (inline-quote
- (hash-table-count ,table)))
-
-(define-inline ht-empty? (table)
- "Return true if the actual number of entries in TABLE is zero."
- (declare (side-effect-free t))
- (inline-quote
- (zerop (ht-size ,table))))
-
-(defalias 'ht-empty-p 'ht-empty?)
-
-(defun ht-select (function table)
- "Return a hash table containing all entries in TABLE for which
-FUNCTION returns a truthy value.
-
-FUNCTION is called with two arguments, KEY and VALUE."
- (let ((results (ht-create)))
- (ht-each
- (lambda (key value)
- (when (funcall function key value)
- (ht-set! results key value)))
- table)
- results))
-
-(defun ht-reject (function table)
- "Return a hash table containing all entries in TABLE for which
-FUNCTION returns a falsy value.
-
-FUNCTION is called with two arguments, KEY and VALUE."
- (let ((results (ht-create)))
- (ht-each
- (lambda (key value)
- (unless (funcall function key value)
- (ht-set! results key value)))
- table)
- results))
-
-(defun ht-reject! (function table)
- "Delete entries from TABLE for which FUNCTION returns a falsy value.
-
-FUNCTION is called with two arguments, KEY and VALUE."
- (ht-each
- (lambda (key value)
- (when (funcall function key value)
- (remhash key table)))
- table)
- nil)
-
-(defalias 'ht-delete-if 'ht-reject!)
-
-(defun ht-find (function table)
- "Return (key, value) from TABLE for which FUNCTION returns a truthy value.
-Return nil otherwise.
-
-FUNCTION is called with two arguments, KEY and VALUE."
- (catch 'break
- (ht-each
- (lambda (key value)
- (when (funcall function key value)
- (throw 'break (list key value))))
- table)))
-
-(defun ht-equal? (table1 table2)
- "Return t if TABLE1 and TABLE2 have the same keys and values.
-Does not compare equality predicates."
- (declare (side-effect-free t))
- (let ((keys1 (ht-keys table1))
- (keys2 (ht-keys table2))
- (sentinel (make-symbol "ht-sentinel")))
- (and (equal (length keys1) (length keys2))
- (--all?
- (equal (ht-get table1 it)
- (ht-get table2 it sentinel))
- keys1))))
-
-(defalias 'ht-equal-p 'ht-equal?)
-
-(provide 'ht)
-;;; ht.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-actionscript.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-actionscript.el
deleted file mode 100644
index 6e368dc..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-actionscript.el
+++ /dev/null
@@ -1,134 +0,0 @@
-;;; lsp-actionscript.el --- ActionScript Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 Jen-Chieh Shen
-
-;; Author: Jen-Chieh Shen <jcs090218@gmail.com>
-;; Keywords: actionscript lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for ActionScript
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-actionscript nil
- "LSP support for ActionScript."
- :group 'lsp-mode
- :link '(url-link "https://github.com/BowlerHatLLC/vscode-as3mxml")
- :package-version `(lsp-mode . "7.1.0"))
-
-(defcustom lsp-actionscript-java-path "java"
- "Path of the java executable."
- :group 'lsp-actionscript
- :type 'string)
-
-(defcustom lsp-actionscript-sdk-path ""
- "Path to supported SDK.
-See https://github.com/BowlerHatLLC/vscode-as3mxml/wiki/Choose-an-ActionScript-SDK-for-the-current-workspace-in-Visual-Studio-Code."
- :type 'string
- :group 'lsp-actionscript
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-actionscript-version "1.5.0"
- "Version of ActionScript language server."
- :type 'string
- :group 'lsp-actionscript
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-actionscript-extension-name
- (format "vscode-nextgenas-%s.vsix" lsp-actionscript-version)
- "File name of the extension file from language server."
- :type 'string
- :group 'lsp-actionscript
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-actionscript-server-download-url
- (format "https://github.com/BowlerHatLLC/vscode-as3mxml/releases/download/v%s/%s"
- lsp-actionscript-version lsp-actionscript-extension-name)
- "Automatic download url for lsp-actionscript."
- :type 'string
- :group 'lsp-actionscript
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-actionscript-server-store-path
- (f-join lsp-server-install-dir "as3mxml")
- "The path to the file in which `lsp-actionscript' will be stored."
- :type 'file
- :group 'lsp-actionscript
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-actionscript-option-charset "UTF8"
- "The charset to use by the ActionScript Language server."
- :type 'string
- :group 'lsp-actionscript
- :package-version '(lsp-mode . "7.1.0"))
-
-(defun lsp-actionscript--extension-root ()
- "The path that the downloaded extension will extract to."
- (f-join lsp-actionscript-server-store-path
- (format "vscode-nextgenas-%s" lsp-actionscript-version)))
-
-(defun lsp-actionscript--extension-path ()
- "Return full path of the downloaded extension."
- (f-join lsp-actionscript-server-store-path lsp-actionscript-extension-name))
-
-(defun lsp-actionscript--extension-dir ()
- "Return as3mxml extension path."
- (f-join (lsp-actionscript--extension-root) "extension"))
-
-(defun lsp-actionscript--server-command ()
- "Startup command for ActionScript language server."
- (list lsp-actionscript-java-path
- (format "-Droyalelib=%s" lsp-actionscript-sdk-path)
- (format "-Dfile.encoding=%s" lsp-actionscript-option-charset)
- "-cp"
- (format "%s/bundled-compiler/*;%s/bin/*"
- (lsp-actionscript--extension-dir) (lsp-actionscript--extension-dir))
- "com.as3mxml.vscode.Main"))
-
-(defun lsp-actionscript--extension-path-zip ()
- "Change extension path from .vsix to .zip."
- (concat (f-no-ext (lsp-actionscript--extension-path)) ".zip"))
-
-(lsp-dependency
- 'as3mxml
- '(:system "as3mxml")
- `(:download :url lsp-actionscript-server-download-url
- :store-path ,(lsp-actionscript--extension-path-zip)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection
- #'lsp-actionscript--server-command
- (lambda () (f-exists? (lsp-actionscript--extension-path-zip))))
- :major-modes '(actionscript-mode)
- :priority -1
- :server-id 'as3mxml-ls
- :download-server-fn (lambda (_client _callback error-callback _update?)
- (lsp-package-ensure
- 'as3mxml
- (lambda ()
- ;; TODO: Error handling when unzip failed
- (lsp-unzip (lsp-actionscript--extension-path-zip)
- (lsp-actionscript--extension-root)))
- error-callback))))
-
-(lsp-consistency-check lsp-actionscript)
-
-(provide 'lsp-actionscript)
-;;; lsp-actionscript.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ada.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ada.el
deleted file mode 100644
index 9b105b3..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ada.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;;; lsp-ada.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, ada
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Ada Programming Language
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-ada nil
- "Settings for Ada Language Server."
- :group 'tools
- :tag "Language Server"
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-ada-project-file "default.gpr"
- "Set the project file full path to configure the language server with.
- The ~ prefix (for the user home directory) is supported.
- See https://github.com/AdaCore/ada_language_server for a per-project
- configuration example."
- :type 'string
- :group 'lsp-ada
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-ada-option-charset "UTF-8"
- "The charset to use by the Ada Language server. Defaults to 'UTF-8'."
- :type 'string
- :group 'lsp-ada
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-ada-enable-diagnostics t
- "A boolean to disable diagnostics. Defaults to true."
- :type 'boolean
- :group 'lsp-ada
- :package-version '(lsp-mode . "6.2"))
-
-(lsp-register-custom-settings
- '(("ada.projectFile" lsp-ada-project-file)
- ("ada.enableDiagnostics" lsp-ada-enable-diagnostics)
- ("ada.defaultCharset" lsp-ada-option-charset)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection '("ada_language_server"))
- :major-modes '(ada-mode)
- :priority -1
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "ada"))))
- :server-id 'ada-ls))
-
-(lsp-consistency-check lsp-ada)
-
-(provide 'lsp-ada)
-;;; lsp-ada.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-angular.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-angular.el
deleted file mode 100644
index 65a021a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-angular.el
+++ /dev/null
@@ -1,82 +0,0 @@
-;;; lsp-angular.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp,
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Angular Web application framework.
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'f)
-
-
-;;; Angular
-(defgroup lsp-angular nil
- "Angular LSP client, provided by the Angular Language Service Server."
- :group 'lsp-mode
- :version "7.1"
- :link '(url-link "https://github.com/angular/vscode-ng-language-service"))
-
-(defcustom lsp-clients-angular-language-server-command
- nil
- "The command that starts the angular language server."
- :group 'lsp-angular
- :type '(choice
- (string :tag "Single string value")
- (repeat :tag "List of string values"
- string)))
-
-(defun lsp-client--angular-start-loading (_workspace params)
- (lsp--info "Started loading project %s" params))
-
-(defun lsp-client--angular-finished-loading (_workspace params)
- (lsp--info "Finished loading project %s" params))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda () (if lsp-clients-angular-language-server-command
- lsp-clients-angular-language-server-command
- (let ((node-modules-path
- (concat (string-trim (shell-command-to-string "npm config get --global prefix"))
- "/lib/node_modules")))
- (list
- "node"
- (concat node-modules-path "/@angular/language-server")
- "--ngProbeLocations"
- node-modules-path
- "--tsProbeLocations"
- node-modules-path
- "--stdio")))))
- :activation-fn (lambda (&rest _args)
- (and (string-match-p "\\(\\.html\\|\\.ts\\)\\'" (buffer-file-name))
- (lsp-workspace-root)
- (file-exists-p (f-join (lsp-workspace-root) "angular.json"))))
- :priority -1
- :notification-handlers (ht ("angular/projectLoadingStart" #'lsp-client--angular-start-loading)
- ("angular/projectLoadingFinish" #'lsp-client--angular-finished-loading))
- :add-on? t
- :server-id 'angular-ls))
-
-
-(lsp-consistency-check lsp-angular)
-
-(provide 'lsp-angular)
-;;; lsp-angular.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-bash.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-bash.el
deleted file mode 100644
index ee8a28e..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-bash.el
+++ /dev/null
@@ -1,90 +0,0 @@
-;;; lsp-bash.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, bash, shell-script
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Bash Programming Language
-
-;;; Code:
-
-(require 'lsp-mode)
-
-;;; Bash
-(defgroup lsp-bash nil
- "Settings for the Bash Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/bash-lsp/bash-language-server")
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-bash-explainshell-endpoint nil
- "The endpoint to use explainshell.com to answer 'onHover' queries.
-See instructions at https://marketplace.visualstudio.com/items?itemName=mads-hartmann.bash-ide-vscode"
- :type 'string
- :risky t
- :group 'lsp-bash
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-bash-highlight-parsing-errors nil
- "Consider parsing errors in scripts as 'problems'."
- :type 'boolean
- :group 'lsp-bash
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-bash-glob-pattern nil
- "Glob pattern used to find shell script files to parse."
- :type 'string
- :group 'lsp-bash
- :package-version '(lsp-mode . "6.3"))
-
-(defun lsp-bash--bash-ls-server-command ()
- "Startup command for Bash language server."
- (list (lsp-package-path 'bash-language-server) "start"))
-
-(lsp-dependency 'bash-language-server
- '(:system "bash-language-server")
- '(:npm :package "bash-language-server"
- :path "bash-language-server"))
-
-(defvar sh-shell)
-
-(defun lsp-bash-check-sh-shell (&rest _)
- "Check whether `sh-shell' is sh or bash.
-
-This prevents the Bash server from being turned on in zsh files."
- (and (eq major-mode 'sh-mode)
- (memq sh-shell '(sh bash))))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection #'lsp-bash--bash-ls-server-command)
- :priority -1
- :activation-fn #'lsp-bash-check-sh-shell
- :environment-fn (lambda ()
- '(("EXPLAINSHELL_ENDPOINT" . lsp-bash-explainshell-endpoint)
- ("HIGHLIGHT_PARSING_ERRORS" . lsp-bash-highlight-parsing-errors)
- ("GLOB_PATTERN" . lsp-bash-glob-pattern)))
- :server-id 'bash-ls
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'bash-language-server callback error-callback))))
-
-(lsp-consistency-check lsp-bash)
-
-(provide 'lsp-bash)
-;;; lsp-bash.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-beancount.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-beancount.el
deleted file mode 100644
index f1f8c74..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-beancount.el
+++ /dev/null
@@ -1,71 +0,0 @@
-;;; lsp-beancount.el --- Beancount Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, beancount
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for Beancount
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-beancount nil
- "Settings for the Beancount Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/polarmutex/beancount-language-server")
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-beancount-langserver-executable "beancount-langserver"
- "Command to start Beancount language server."
- :type 'string
- :group 'lsp-beancount
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-beancount-python-interpreter nil
- "Path to Python executable."
- :type 'string
- :group 'lsp-beancount
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-beancount-journal-file nil
- "Pathg to Beancount journal file."
- :type 'string
- :group 'lsp-beancount
- :package-version '(lsp-mode . "7.1.0"))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection
- (lsp-stdio-connection
- (lambda ()
- (when (null lsp-beancount-python-interpreter)
- (setq lsp-beancount-python-interpreter (or (executable-find "python3")
- (executable-find "python"))))
- `(,lsp-beancount-langserver-executable "--stdio")))
- :major-modes '(beancount-mode)
- :initialization-options
- `((journalFile . ,lsp-beancount-journal-file)
- (pythonPath . ,lsp-beancount-python-interpreter))
- :server-id 'beancount-ls))
-
-(lsp-consistency-check lsp-beancount)
-
-(provide 'lsp-beancount)
-;;; lsp-beancount.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-clangd.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-clangd.el
deleted file mode 100644
index fc37a17..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-clangd.el
+++ /dev/null
@@ -1,304 +0,0 @@
-;;; lsp-clangd.el --- LSP clients for the C Languages Family -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Daniel Martín & emacs-lsp maintainers
-;; URL: https://github.com/emacs-lsp/lsp-mode
-;; Keywords: languages, c, cpp, clang
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP clients for the C Languages Family.
-
-;; ** Clang-tidy Flycheck integration (Clangd) **
-;;
-;; If you invoke `flycheck-display-error-explanation' on a
-;; `clang-tidy' error (if Clangd is configured to show `clang-tidy'
-;; diagnostics), Emacs will open a detailed explanation about the
-;; message by querying the LLVM website. As an embedded web browser is
-;; used to show the documentation, this feature requires that Emacs is
-;; compiled with libxml2 support.
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'cl-lib)
-(require 'rx)
-(require 'seq)
-(require 'dom)
-(eval-when-compile (require 'subr-x))
-
-(require 'dash)
-(require 's)
-
-(defvar flycheck-explain-error-buffer)
-(declare-function flycheck-error-id "ext:flycheck" (err) t)
-(declare-function flycheck-error-group "ext:flycheck" (err) t)
-(declare-function flycheck-error-message "ext:flycheck" (err) t)
-
-(defcustom lsp-clangd-version "12.0.0"
- "Clangd version to download.
-It has to be set before `lsp-clangd.el' is loaded and it has to
-be available here: https://github.com/clangd/clangd/releases/"
- :type 'string
- :group 'lsp-clangd
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-clangd-download-url
- (format (pcase system-type
- ('darwin "https://github.com/clangd/clangd/releases/download/%s/clangd-mac-%s.zip")
- ('windows-nt "https://github.com/clangd/clangd/releases/download/%s/clangd-windows-%s.zip")
- (_ "https://github.com/clangd/clangd/releases/download/%s/clangd-linux-%s.zip"))
- lsp-clangd-version
- lsp-clangd-version)
- "Automatic download url for clangd"
- :type 'string
- :group 'lsp-clangd
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-clangd-binary-path
- (f-join lsp-server-install-dir (format "clangd/clangd_%s/bin"
- lsp-clangd-version)
- (pcase system-type
- ('windows-nt "clangd.exe")
- (_ "clangd")))
- "The path to `clangd' binary."
- :type 'file
- :group 'lsp-clangd
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-dependency
- 'clangd
- `(:download :url lsp-clangd-download-url
- :decompress :zip
- :store-path ,(f-join lsp-server-install-dir "clangd" "clangd.zip")
- :binary-path lsp-clangd-binary-path
- :set-executable? t))
-
-(defun lsp-cpp-flycheck-clang-tidy--skip-http-headers ()
- "Position point just after HTTP headers."
- (re-search-forward "^$"))
-
-(defun lsp-cpp-flycheck-clang-tidy--narrow-to-http-body ()
- "Narrow the current buffer to contain the body of an HTTP response."
- (lsp-cpp-flycheck-clang-tidy--skip-http-headers)
- (narrow-to-region (point) (point-max)))
-
-(defun lsp-cpp-flycheck-clang-tidy--decode-region-as-utf8 (start end)
- "Decode a region from START to END in UTF-8."
- (condition-case nil
- (decode-coding-region start end 'utf-8)
- (coding-system-error nil)))
-
-(defun lsp-cpp-flycheck-clang-tidy--remove-crlf ()
- "Remove carriage return and line feeds from the current buffer."
- (save-excursion
- (while (re-search-forward "\r$" nil t)
- (replace-match "" t t))))
-
-(defun lsp-cpp-flycheck-clang-tidy--extract-relevant-doc-section ()
- "Extract the parts of the LLVM clang-tidy documentation that are relevant.
-
-This function assumes that the current buffer contains the result
-of browsing 'clang.llvm.org', as returned by `url-retrieve'.
-More concretely, this function returns the main <div> element
-with class 'section', and also removes 'headerlinks'."
- (goto-char (point-min))
- (lsp-cpp-flycheck-clang-tidy--narrow-to-http-body)
- (lsp-cpp-flycheck-clang-tidy--decode-region-as-utf8 (point-min) (point-max))
- (lsp-cpp-flycheck-clang-tidy--remove-crlf)
- (let* ((dom (libxml-parse-html-region (point-min) (point-max)))
- (section (dom-by-class dom "section")))
- (dolist (headerlink (dom-by-class section "headerlink"))
- (dom-remove-node section headerlink))
- section))
-
-(defun lsp-cpp-flycheck-clang-tidy--explain-error (explanation &rest args)
- "Explain an error in the Flycheck error explanation buffer using EXPLANATION.
-
-EXPLANATION is a function with optional ARGS that, when
-evaluated, inserts the content in the appropriate Flycheck
-buffer."
- (with-current-buffer flycheck-explain-error-buffer
- (let ((inhibit-read-only t)
- (inhibit-modification-hooks t))
- (erase-buffer)
- (apply explanation args)
- (goto-char (point-min)))))
-
-(defun lsp-cpp-flycheck-clang-tidy--show-loading-status ()
- "Show a loading string while clang-tidy documentation is fetched from llvm.org.
-Recent versions of `flycheck' call `display-message-or-buffer' to
-display error explanations. `display-message-or-buffer' displays
-the documentation string either in the echo area or in a separate
-window, depending on the string's height. This function forces to
-always display it in a separate window by appending the required
-number of newlines."
- (let* ((num-lines-threshold
- (round (if resize-mini-windows
- (cond ((floatp max-mini-window-height)
- (* (frame-height)
- max-mini-window-height))
- ((integerp max-mini-window-height)
- max-mini-window-height)
- (t
- 1))
- 1)))
- (extra-new-lines (make-string (1+ num-lines-threshold) ?\n)))
- (concat "Loading documentation..." extra-new-lines)))
-
-(defun lsp-cpp-flycheck-clang-tidy--show-documentation (error-id)
- "Show clang-tidy documentation about ERROR-ID.
-
-Information comes from the clang.llvm.org website."
- (url-retrieve (format
- "https://clang.llvm.org/extra/clang-tidy/checks/%s.html" error-id)
- (lambda (status)
- (if-let ((error-status (plist-get status :error)))
- (lsp-cpp-flycheck-clang-tidy--explain-error
- #'insert
- (format
- "Error accessing clang-tidy documentation: %s"
- (error-message-string error-status)))
- (let ((doc-contents
- (lsp-cpp-flycheck-clang-tidy--extract-relevant-doc-section)))
- (lsp-cpp-flycheck-clang-tidy--explain-error
- #'shr-insert-document doc-contents)))))
- (lsp-cpp-flycheck-clang-tidy--show-loading-status))
-
-;;;###autoload
-(defun lsp-cpp-flycheck-clang-tidy-error-explainer (error)
- "Explain a clang-tidy ERROR by scraping documentation from llvm.org."
- (unless (fboundp 'libxml-parse-html-region)
- (error "This function requires Emacs to be compiled with libxml2"))
- (if-let ((clang-tidy-error-id (flycheck-error-id error)))
- (condition-case err
- (lsp-cpp-flycheck-clang-tidy--show-documentation clang-tidy-error-id)
- (error
- (format
- "Error accessing clang-tidy documentation: %s"
- (error-message-string err))))
- (error "The clang-tidy error message does not contain an [error-id]")))
-
-
-;;; lsp-clangd
-(defgroup lsp-clangd nil
- "LSP support for C-family languages (C, C++, Objective-C, Objective-C++), using clangd."
- :group 'lsp-mode
- :link '(url-link "https://clang.llvm.org/extra/clangd"))
-
-(defcustom lsp-clients-clangd-executable nil
- "The clangd executable to use.
-When `'non-nil' use the name of the clangd executable file
-available in your path to use. Otherwise the system will try to
-find a suitable one. Set this variable before loading lsp."
- :group 'lsp-clangd
- :risky t
- :type '(choice (file :tag "Path")
- (const :tag "Auto" nil)))
-
-(defvar lsp-clients--clangd-default-executable nil
- "Clang default executable full path when found.
-This must be set only once after loading the clang client.")
-
-(defcustom lsp-clients-clangd-args '("--header-insertion-decorators=0")
- "Extra arguments for the clangd executable."
- :group 'lsp-clangd
- :risky t
- :type '(repeat string))
-
-(defun lsp-clients--clangd-command ()
- "Generate the language server startup command."
- (unless lsp-clients--clangd-default-executable
- (setq lsp-clients--clangd-default-executable
- (or (lsp-package-path 'clangd)
- (-first #'executable-find
- (-map (lambda (version)
- (concat "clangd" version))
- '("" "-12" "-11" "-10" "-9" "-8" "-7" "-6")))
- (lsp-clients-executable-find "xcodebuild" "-find-executable" "clangd")
- (lsp-clients-executable-find "xcrun" "--find" "clangd"))))
-
- `(,(or lsp-clients-clangd-executable lsp-clients--clangd-default-executable "clangd")
- ,@lsp-clients-clangd-args))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- 'lsp-clients--clangd-command)
- :activation-fn (lsp-activate-on "c" "cpp" "objective-c")
- :priority -1
- :server-id 'clangd
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'clangd callback error-callback))))
-
-(defun lsp-clangd-join-region (beg end)
- "Apply join-line from BEG to END.
-This function is useful when an indented function prototype needs
-to be shown in a single line."
- (save-excursion
- (let ((end (copy-marker end)))
- (goto-char beg)
- (while (< (point) end)
- (join-line 1)))
- (s-trim (buffer-string))))
-
-(cl-defmethod lsp-clients-extract-signature-on-hover (contents (_server-id (eql clangd)))
- "Extract a representative line from clangd's CONTENTS, to show in the echo area.
-This function tries to extract the type signature from CONTENTS,
-or the first line if it cannot do so. A single line is always
-returned to avoid that the echo area grows uncomfortably."
- (with-temp-buffer
- (-let [value (lsp:markup-content-value contents)]
- (insert value)
- (goto-char (point-min))
- (if (re-search-forward (rx (seq "```cpp\n"
- (opt (group "//"
- (zero-or-more nonl)
- "\n"))
- (group
- (one-or-more
- (not (any "`")))
- "\n")
- "```")) nil t nil)
- (progn (narrow-to-region (match-beginning 2) (match-end 2))
- (lsp--render-element (lsp-make-marked-string
- :language "cpp"
- :value (lsp-clangd-join-region (point-min) (point-max)))))
- (car (s-lines (lsp--render-element contents)))))))
-
-(cl-defmethod lsp-diagnostics-flycheck-error-explainer (e (_server-id (eql clangd)))
- "Explain a `flycheck-error' E that was generated by the Clangd language server."
- (cond ((string-equal "clang-tidy" (flycheck-error-group e))
- (lsp-cpp-flycheck-clang-tidy-error-explainer e))
- (t (flycheck-error-message e))))
-
-(defun lsp-clangd-find-other-file (&optional new-window)
- "Switch between the corresponding C/C++ source and header file.
-If NEW-WINDOW (interactively the prefix argument) is non-nil,
-open in a new window.
-
-Only works with clangd."
- (interactive "P")
- (let ((other (lsp-send-request (lsp-make-request
- "textDocument/switchSourceHeader"
- (lsp--text-document-identifier)))))
- (unless (s-present? other)
- (user-error "Could not find other file"))
- (funcall (if new-window #'find-file-other-window #'find-file)
- (lsp--uri-to-path other))))
-
-(lsp-consistency-check lsp-clangd)
-
-(provide 'lsp-clangd)
-;;; lsp-clangd.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-clojure.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-clojure.el
deleted file mode 100644
index 9855983..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-clojure.el
+++ /dev/null
@@ -1,308 +0,0 @@
-;;; lsp-clojure.el --- Clojure Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Benedek Fazekas
-
-;; Author: Benedek Fazekas <benedek.fazekas@gmail.com>
-;; Keywords: languages,tools
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-clojure client
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'lsp-protocol)
-(require 'cl-lib)
-
-(defgroup lsp-clojure nil
- "LSP support for Clojure."
- :link '(url-link "https://github.com/snoe/clojure-lsp")
- :group 'lsp-mode
- :tag "Lsp Clojure")
-
-(define-obsolete-variable-alias 'lsp-clojure-server-command
- 'lsp-clojure-custom-server-command "lsp-mode 7.1")
-
-(defcustom lsp-clojure-custom-server-command nil
- "The clojure-lisp server command."
- :group 'lsp-clojure
- :risky t
- :type '(repeat string))
-
-(defcustom lsp-clojure-server-download-url
- (format "https://github.com/clojure-lsp/clojure-lsp/releases/latest/download/clojure-lsp-native-%s-amd64.zip"
- (pcase system-type
- ('gnu/linux "linux")
- ('darwin "macos")
- ('windows-nt "windows")))
- "Automatic download url for lsp-clojure."
- :type 'string
- :group 'lsp-clojure
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-clojure-server-store-path
- (f-join lsp-server-install-dir
- "clojure"
- (if (eq system-type 'windows-nt)
- "clojure-lsp.exe"
- "clojure-lsp"))
- "The path to the file in which `clojure-lsp' will be stored."
- :type 'file
- :group 'lsp-clojure
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-clojure-workspace-dir (expand-file-name (locate-user-emacs-file "workspace/"))
- "LSP clojure workspace directory."
- :group 'lsp-clojure
- :risky t
- :type 'directory)
-
-(defcustom lsp-clojure-workspace-cache-dir (expand-file-name ".cache/" lsp-clojure-workspace-dir)
- "LSP clojure workspace cache directory."
- :group 'lsp-clojure
- :risky t
- :type 'directory)
-
-;; Internal
-
-(lsp-interface
- (Clojure:CursorInfoParams (:textDocument :position) nil))
-
-(lsp-dependency
- 'clojure-lsp
- `(:download :url lsp-clojure-server-download-url
- :decompress :zip
- :store-path lsp-clojure-server-store-path
- :set-executable? t)
- '(:system "clojure-lsp"))
-
-;; Refactorings
-
-(defun lsp-clojure--execute-command (command &optional args)
- "Send an executeCommand request for COMMAND with ARGS."
- (lsp--cur-workspace-check)
- (lsp-send-execute-command command (apply #'vector args)))
-
-(defun lsp-clojure--refactoring-call (refactor-name &rest additional-args)
- "Send an executeCommand request for REFACTOR-NAME with ADDITIONAL-ARGS.
-If there are more arguments expected after the line and column numbers."
- (lsp--cur-workspace-check)
- (lsp-clojure--execute-command refactor-name (cl-list* (lsp--buffer-uri)
- (- (line-number-at-pos) 1) ;; clojure-lsp expects line numbers to start at 0
- (current-column)
- additional-args)))
-
-(defun lsp-clojure-add-import-to-namespace (import-name)
- "Add to IMPORT-NAME to :import form."
- (interactive "MImport name: ")
- (lsp-clojure--refactoring-call "add-import-to-namespace" import-name))
-
-(defun lsp-clojure-add-missing-libspec ()
- "Apply add-missing-libspec refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "add-missing-libspec"))
-
-(defun lsp-clojure-clean-ns ()
- "Apply clean-ns refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "clean-ns"))
-
-(defun lsp-clojure-cycle-coll ()
- "Apply cycle-coll refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "cycle-coll"))
-
-(defun lsp-clojure-cycle-privacy ()
- "Apply cycle-privacy refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "cycle-privacy"))
-
-(defun lsp-clojure-expand-let ()
- "Apply expand-let refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "expand-let"))
-
-(defun lsp-clojure-extract-function (function-name)
- "Move form at point into a new function named FUNCTION-NAME."
- (interactive "MFunction name: ") ;; Name of the function
- (lsp-clojure--refactoring-call "extract-function" function-name))
-
-(defun lsp-clojure-inline-symbol ()
- "Apply inline-symbol refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "inline-symbol"))
-
-(defun lsp-clojure-introduce-let (binding-name)
- "Move form at point into a new let binding as BINDING-NAME."
- (interactive "MBinding name: ") ;; Name of the let binding
- (lsp-clojure--refactoring-call "introduce-let" binding-name))
-
-(defun lsp-clojure-move-to-let (binding-name)
- "Move form at point into nearest existing let binding as BINDING-NAME."
- (interactive "MBinding name: ") ;; Name of the let binding
- (lsp-clojure--refactoring-call "move-to-let" binding-name))
-
-(defun lsp-clojure-thread-first ()
- "Apply thread-first refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "thread-first"))
-
-(defun lsp-clojure-thread-first-all ()
- "Apply thread-first-all refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "thread-first-all"))
-
-(defun lsp-clojure-thread-last ()
- "Apply thread-last refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "thread-last"))
-
-(defun lsp-clojure-thread-last-all ()
- "Apply thread-last-all refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "thread-last-all"))
-
-(defun lsp-clojure-unwind-all ()
- "Apply unwind-all refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "unwind-all"))
-
-(defun lsp-clojure-unwind-thread ()
- "Apply unwind-thread refactoring at point."
- (interactive)
- (lsp-clojure--refactoring-call "unwind-thread"))
-
-(defun lsp-clojure-server-info ()
- "Request server info."
- (interactive)
- (lsp--cur-workspace-check)
- (lsp-notify "clojure/serverInfo/log" nil))
-
-(defun lsp-clojure-server-info-raw ()
- "Request server info raw data."
- (interactive)
- (lsp--cur-workspace-check)
- (message "%s" (lsp--json-serialize (lsp-request "clojure/serverInfo/raw" nil))))
-
-(defun lsp-clojure-cursor-info ()
- "Request cursor info at point."
- (interactive)
- (lsp--cur-workspace-check)
- (lsp-notify "clojure/cursorInfo/log"
- (lsp-make-clojure-cursor-info-params
- :textDocument (lsp-make-text-document-identifier :uri (lsp--buffer-uri))
- :position (lsp-make-position :line (- (line-number-at-pos) 1)
- :character (current-column)))))
-
-(defun lsp-clojure--ask-macro-to-resolve ()
- "Ask to user the macro to resolve."
- (lsp--completing-read
- "Select how LSP should resolve this macro:"
- '("clojure.core/def"
- "clojure.core/defn"
- "clojure.core/let"
- "clojure.core/for"
- "clojure.core/->"
- "clojure.core/->>"
- "clj-kondo.lint-as/def-catch-all")
- #'identity
- nil
- t))
-
-(defun lsp-clojure--ask-clj-kondo-config-dir ()
- "Ask to user the clj-kondo config dir path."
- (lsp--completing-read
- "Select where LSP should save this setting:"
- (list (f-join (expand-file-name "~/") ".config/clj-kondo/config.edn")
- (f-join (or (lsp-workspace-root) "project") ".clj-kondo/config.edn"))
- #'identity
- nil
- t))
-
-(defun lsp-clojure-resolve-macro-as ()
- "Ask to user how the unresolved macro should be resolved."
- (interactive)
- (lsp--cur-workspace-check)
- (lsp-clojure--execute-command "resolve-macro-as"
- (list (lsp--buffer-uri)
- (- (line-number-at-pos) 1) ;; clojure-lsp expects line numbers to start at 0
- (current-column)
- (lsp-clojure--ask-macro-to-resolve)
- (lsp-clojure--ask-clj-kondo-config-dir))))
-
-(lsp-defun lsp-clojure--resolve-macro-as ((&Command :command :arguments?))
- "Intercept resolve-macro-as command and send all necessary data."
- (let ((chosen-macro (lsp-clojure--ask-macro-to-resolve))
- (clj-kondo-config-path (lsp-clojure--ask-clj-kondo-config-dir)))
- (lsp-clojure--execute-command command (append arguments? (list chosen-macro clj-kondo-config-path)))))
-
-(defun lsp-clojure--ensure-dir (path)
- "Ensure that directory PATH exists."
- (unless (file-directory-p path)
- (make-directory path t)))
-
-(defun lsp-clojure--get-metadata-location (file-location)
- "Given a FILE-LOCATION return the file containing the metadata for the file."
- (format "%s.%s.metadata"
- (file-name-directory file-location)
- (file-name-base file-location)))
-
-(defun lsp-clojure--file-in-jar (uri)
- "Check URI for a valid jar and include it in workspace."
- (string-match "^\\(jar\\|zip\\):\\(file:.+\\)!/\\(.+\\)" uri)
- (let* ((ns-path (match-string 3 uri))
- (ns (s-replace "/" "." ns-path))
- (file-location (concat lsp-clojure-workspace-cache-dir ns)))
- (unless (file-readable-p file-location)
- (lsp-clojure--ensure-dir (file-name-directory file-location))
- (with-lsp-workspace (lsp-find-workspace 'clojure-lsp nil)
- (let ((content (lsp-send-request (lsp-make-request "clojure/dependencyContents" (list :uri uri)))))
- (with-temp-file file-location
- (insert content))
- (with-temp-file (lsp-clojure--get-metadata-location file-location)
- (insert uri)))))
- file-location))
-
-(defun lsp-clojure--server-executable-path ()
- "Return the clojure-lsp server command."
- (or (executable-find "clojure-lsp")
- (lsp-package-path 'clojure-lsp)))
-
-(lsp-register-client
- (make-lsp-client
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'clojure-lsp callback error-callback))
- :semantic-tokens-faces-overrides '(:types (("macro" . font-lock-keyword-face)
- ("keyword" . clojure-keyword-face)))
- :new-connection (lsp-stdio-connection
- (lambda ()
- (or lsp-clojure-custom-server-command
- `(,(lsp-clojure--server-executable-path))))
- (lambda ()
- (or lsp-clojure-custom-server-command
- (lsp-clojure--server-executable-path))))
- :major-modes '(clojure-mode clojurec-mode clojurescript-mode)
- :library-folders-fn (lambda (_workspace) (list lsp-clojure-workspace-cache-dir))
- :uri-handlers (lsp-ht ("jar" #'lsp-clojure--file-in-jar))
- :action-handlers (lsp-ht ("resolve-macro-as" #'lsp-clojure--resolve-macro-as))
- :initialization-options '(:dependency-scheme "jar")
- :server-id 'clojure-lsp))
-
-(lsp-consistency-check lsp-clojure)
-
-(provide 'lsp-clojure)
-;;; lsp-clojure.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-cmake.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-cmake.el
deleted file mode 100644
index beffa5d..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-cmake.el
+++ /dev/null
@@ -1,43 +0,0 @@
-;;; lsp-cmake.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, cmake
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the CMake build tool.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-cmake nil
- "LSP support for CMake, using cmake-language-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/regen100/cmake-language-server"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection "cmake-language-server")
- :major-modes '(cmake-mode)
- :priority -1
- :server-id 'cmakels))
-
-(lsp-consistency-check lsp-cmake)
-
-(provide 'lsp-cmake)
-;;; lsp-cmake.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-completion.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-completion.el
deleted file mode 100644
index d8d131e..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-completion.el
+++ /dev/null
@@ -1,779 +0,0 @@
-;;; lsp-completion.el --- LSP completion -*- lexical-binding: t; -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; LSP completion
-;;
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-completion nil
- "LSP support for completion"
- :prefix "lsp-completion-"
- :group 'lsp-mode
- :tag "LSP Completion")
-
-;;;###autoload
-(define-obsolete-variable-alias 'lsp-prefer-capf
- 'lsp-completion-provider "lsp-mode 7.0.1")
-
-(defcustom lsp-completion-provider :capf
- "The completion backend provider."
- :type '(choice
- (const :tag "Use company-capf" :capf)
- (const :tag "None" :none))
- :group 'lsp-completion
- :package-version '(lsp-mode . "7.0.1"))
-
-;;;###autoload
-(define-obsolete-variable-alias 'lsp-enable-completion-at-point
- 'lsp-completion-enable "lsp-mode 7.0.1")
-
-(defcustom lsp-completion-enable t
- "Enable `completion-at-point' integration."
- :type 'boolean
- :group 'lsp-completion)
-
-(defcustom lsp-completion-enable-additional-text-edit t
- "Whether or not to apply additional text edit when performing completion.
-
-If set to non-nil, `lsp-mode' will apply additional text edits
-from the server. Otherwise, the additional text edits are
-ignored."
- :type 'boolean
- :group 'lsp-completion
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-completion-show-kind t
- "Whether or not to show kind of completion candidates."
- :type 'boolean
- :group 'lsp-completion
- :package-version '(lsp-mode . "7.0.1"))
-
-(defcustom lsp-completion-show-detail t
- "Whether or not to show detail of completion candidates."
- :type 'boolean
- :group 'lsp-completion)
-
-(defcustom lsp-completion-no-cache nil
- "Whether or not caching the returned completions from server."
- :type 'boolean
- :group 'lsp-completion
- :package-version '(lsp-mode . "7.0.1"))
-
-(defcustom lsp-completion-filter-on-incomplete t
- "Whether or not filter incomplete results."
- :type 'boolean
- :group 'lsp-completion
- :package-version '(lsp-mode . "7.0.1"))
-
-(defcustom lsp-completion-sort-initial-results t
- "Whether or not filter initial results from server."
- :type 'boolean
- :group 'lsp-completion
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-completion-use-last-result t
- "Temporarily use last server result when interrupted by keyboard.
-This will help minimize popup flickering issue in `company-mode'."
- :type 'boolean
- :group 'lsp-completion
- :package-version '(lsp-mode . "7.1"))
-
-(defconst lsp-completion--item-kind
- [nil
- "Text"
- "Method"
- "Function"
- "Constructor"
- "Field"
- "Variable"
- "Class"
- "Interface"
- "Module"
- "Property"
- "Unit"
- "Value"
- "Enum"
- "Keyword"
- "Snippet"
- "Color"
- "File"
- "Reference"
- "Folder"
- "EnumMember"
- "Constant"
- "Struct"
- "Event"
- "Operator"
- "TypeParameter"])
-
-(defvar yas-indent-line)
-(defvar company-backends)
-(defvar company-abort-on-unique-match)
-
-(defvar lsp-completion--no-reordering nil
- "Dont do client-side reordering completion items when set.")
-
-(declare-function company-mode "ext:company")
-(declare-function company-doc-buffer "ext:company")
-(declare-function yas-expand-snippet "ext:yasnippet")
-
-(defun lsp-falsy? (val)
- "Non-nil if VAL is falsy."
- ;; https://developer.mozilla.org/en-US/docs/Glossary/Falsy
- (or (not val) (equal val "") (equal val 0)))
-
-(cl-defun lsp-completion--make-item (item &key markers prefix)
- "Make completion item from lsp ITEM and with MARKERS and PREFIX."
- (-let (((&CompletionItem :label
- :sort-text?
- :_emacsStartPoint start-point)
- item))
- (propertize label
- 'lsp-completion-item item
- 'lsp-sort-text sort-text?
- 'lsp-completion-start-point start-point
- 'lsp-completion-markers markers
- 'lsp-completion-prefix prefix)))
-
-(defun lsp-completion--annotate (item)
- "Annotate ITEM detail."
- (-let (((&CompletionItem :detail? :kind?) (plist-get (text-properties-at 0 item)
- 'lsp-completion-item)))
- (concat (when (and lsp-completion-show-detail detail?)
- (concat " " (s-replace "\r" "" detail?)))
- (when lsp-completion-show-kind
- (when-let ((kind-name (and kind? (aref lsp-completion--item-kind kind?))))
- (format " (%s)" kind-name))))))
-
-(defun lsp-completion--looking-back-trigger-characterp (trigger-characters)
- "Return trigger character if text before point match any of the TRIGGER-CHARACTERS."
- (unless (= (point) (point-at-bol))
- (seq-some
- (lambda (trigger-char)
- (and (equal (buffer-substring-no-properties (- (point) (length trigger-char)) (point))
- trigger-char)
- trigger-char))
- trigger-characters)))
-
-(defvar lsp-completion--cache nil
- "Cached candidates for completion at point function.
-In the form of plist (prefix-pos items :lsp-items :prefix ...).
-When the completion is incomplete, `items' contains value of :incomplete.")
-
-(defvar lsp-completion--last-result nil
- "Last completion result.")
-
-(defun lsp-completion--clear-cache (&optional keep-last-result)
- "Clear completion caches.
-KEEP-LAST-RESULT if specified."
- (-some-> lsp-completion--cache
- (cddr)
- (plist-get :markers)
- (cl-second)
- (set-marker nil))
- (setq lsp-completion--cache nil)
- (unless keep-last-result (setq lsp-completion--last-result nil)))
-
-(defcustom lsp-completion-default-behaviour :replace
- "Default behaviour of `InsertReplaceEdit'."
- :type '(choice
- (const :insert :tag "Default completion inserts")
- (const :replace :tag "Default completion replaces"))
- :group 'lsp-mode
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-defun lsp-completion--guess-prefix ((item &as &CompletionItem :text-edit?))
- "Guess ITEM's prefix start point according to following heuristics:
-- If `textEdit' exists, use insertion range start as prefix start point.
-- Else, find the point before current point is longest prefix match of
-`insertText' or `label'. And:
- - The character before prefix is not word constitute
-Return `nil' when fails to guess prefix."
- (cond
- ((lsp-insert-replace-edit? text-edit?)
- (lsp--position-to-point (lsp:range-start (lsp:insert-replace-edit-insert text-edit?))))
- (text-edit?
- (lsp--position-to-point (lsp:range-start (lsp:text-edit-range text-edit?))))
- (t
- (-let* (((&CompletionItem :label :insert-text?) item)
- (text (or (unless (lsp-falsy? insert-text?) insert-text?) label))
- (point (point))
- (start (max 1 (- point (length text))))
- (char-before (char-before start))
- start-point)
- (while (and (< start point) (not start-point))
- (unless (or (and char-before (equal (char-syntax char-before) ?w))
- (not (string-prefix-p (buffer-substring-no-properties start point)
- text)))
- (setq start-point start))
- (cl-incf start)
- (setq char-before (char-before start)))
- start-point))))
-
-(defun lsp-completion--to-internal (items)
- "Convert ITEMS into internal form."
- (--> items
- (-map (-lambda ((item &as &CompletionItem
- :label
- :filter-text?
- :_emacsStartPoint start-point
- :score?))
- `( :label ,(or (unless (lsp-falsy? filter-text?) filter-text?) label)
- :item ,item
- :start-point ,start-point
- :score ,score?))
- it)))
-
-(cl-defun lsp-completion--filter-candidates (items &key
- lsp-items
- markers
- prefix
- &allow-other-keys)
- "List all possible completions in cached ITEMS with their prefixes.
-We can pass LSP-ITEMS, which will be used when there's no cache.
-The MARKERS and PREFIX value will be attached to each candidate."
- (lsp--while-no-input
- (->>
- (if items
- (-->
- (let (queries fuz-queries)
- (-keep (-lambda ((cand &as &plist :label :start-point :score))
- (let* ((query (or (plist-get queries start-point)
- (let ((s (buffer-substring-no-properties
- start-point (point))))
- (setq queries (plist-put queries start-point s))
- s)))
- (fuz-query (or (plist-get fuz-queries start-point)
- (let ((s (lsp-completion--regex-fuz query)))
- (setq fuz-queries
- (plist-put fuz-queries start-point s))
- s)))
- (label-len (length label)))
- (when (string-match fuz-query label)
- (put-text-property 0 label-len 'match-data (match-data) label)
- (plist-put cand
- :sort-score
- (* (or (lsp-completion--fuz-score query label) 1e-05)
- (or score 0.001)))
- cand)))
- items))
- (if lsp-completion--no-reordering
- it
- (sort it (lambda (o1 o2)
- (> (plist-get o1 :sort-score)
- (plist-get o2 :sort-score)))))
- ;; TODO: pass additional function to sort the candidates
- (-map (-rpartial #'plist-get :item) it))
- lsp-items)
- (-map (lambda (item) (lsp-completion--make-item item
- :markers markers
- :prefix prefix))))))
-
-(defconst lsp-completion--kind->symbol
- '((1 . text)
- (2 . method)
- (3 . function)
- (4 . constructor)
- (5 . field)
- (6 . variable)
- (7 . class)
- (8 . interface)
- (9 . module)
- (10 . property)
- (11 . unit)
- (12 . value)
- (13 . enum)
- (14 . keyword)
- (15 . snippet)
- (16 . color)
- (17 . file)
- (18 . reference)
- (19 . folder)
- (20 . enum-member)
- (21 . constant)
- (22 . struct)
- (23 . event)
- (24 . operator)
- (25 . type-parameter)))
-
-(defun lsp-completion--candidate-kind (item)
- "Return ITEM's kind."
- (alist-get (lsp:completion-item-kind? (get-text-property 0 'lsp-completion-item item))
- lsp-completion--kind->symbol))
-
-(defun lsp-completion--company-match (candidate)
- "Return highlight of typed prefix inside CANDIDATE."
- (let* ((prefix (downcase
- (buffer-substring-no-properties
- (plist-get (text-properties-at 0 candidate) 'lsp-completion-start-point)
- (point))))
- (prefix-len (length prefix))
- (prefix-pos 0)
- (label (downcase candidate))
- (label-len (length label))
- (label-pos 0)
- matches start)
- (while (and (not matches)
- (< prefix-pos prefix-len))
- (while (and (< prefix-pos prefix-len)
- (< label-pos label-len))
- (if (equal (aref prefix prefix-pos) (aref label label-pos))
- (progn
- (unless start (setq start label-pos))
- (cl-incf prefix-pos))
- (when start
- (setq matches (nconc matches `((,start . ,label-pos))))
- (setq start nil)))
- (cl-incf label-pos))
- (when start (setq matches (nconc matches `((,start . ,label-pos)))))
- ;; Search again when the whole prefix is not matched
- (when (< prefix-pos prefix-len)
- (setq matches nil))
- ;; Start search from next offset of prefix to find a match with label
- (unless matches
- (cl-incf prefix-pos)
- (setq label-pos 0)))
- matches))
-
-(defun lsp-completion--get-documentation (item)
- "Get doc comment for completion ITEM."
- (unless (get-text-property 0 'lsp-completion-resolved item)
- (let ((resolved-item
- (-some->> item
- (get-text-property 0 'lsp-completion-item)
- (lsp-completion--resolve)))
- (len (length item)))
- (put-text-property 0 len 'lsp-completion-item resolved-item item)
- (put-text-property 0 len 'lsp-completion-resolved t item)))
- (-some->> item
- (get-text-property 0 'lsp-completion-item)
- (lsp:completion-item-documentation?)
- (lsp--render-element)))
-
-(defun lsp-completion--get-context (trigger-characters)
- "Get completion context with provided TRIGGER-CHARACTERS."
- (let* ((triggered-by-char non-essential)
- (trigger-char (when triggered-by-char
- (lsp-completion--looking-back-trigger-characterp
- trigger-characters)))
- (trigger-kind (cond
- (trigger-char
- lsp/completion-trigger-kind-trigger-character)
- ((equal (cl-second lsp-completion--cache) :incomplete)
- lsp/completion-trigger-kind-trigger-for-incomplete-completions)
- (t lsp/completion-trigger-kind-invoked))))
- (apply #'lsp-make-completion-context
- (nconc
- `(:trigger-kind ,trigger-kind)
- (when trigger-char
- `(:trigger-character? ,trigger-char))))))
-
-(defun lsp-completion--sort-completions (completions)
- "Sort COMPLETIONS."
- (sort
- completions
- (-lambda ((&CompletionItem :sort-text? sort-text-left :label label-left)
- (&CompletionItem :sort-text? sort-text-right :label label-right))
- (if (equal sort-text-left sort-text-right)
- (string-lessp label-left label-right)
- (string-lessp sort-text-left sort-text-right)))))
-
-;;;###autoload
-(defun lsp-completion-at-point ()
- "Get lsp completions."
- (when (or (--some (lsp--client-completion-in-comments? (lsp--workspace-client it))
- (lsp-workspaces))
- (not (nth 4 (syntax-ppss))))
- (let* ((trigger-chars (->> (lsp--server-capabilities)
- (lsp:server-capabilities-completion-provider?)
- (lsp:completion-options-trigger-characters?)))
- (bounds-start (or (-some--> (cl-first (bounds-of-thing-at-point 'symbol))
- (save-excursion
- (ignore-errors
- (goto-char (+ it 1))
- (while (lsp-completion--looking-back-trigger-characterp
- trigger-chars)
- (cl-incf it)
- (forward-char))
- it)))
- (point)))
- result done?
- (candidates
- (lambda ()
- (lsp--catch 'input
- (let ((lsp--throw-on-input lsp-completion-use-last-result)
- (same-session? (and lsp-completion--cache
- ;; Special case for empty prefix and empty result
- (or (cl-second lsp-completion--cache)
- (not (string-empty-p
- (plist-get (cddr lsp-completion--cache) :prefix))))
- (equal (cl-first lsp-completion--cache) bounds-start)
- (s-prefix?
- (plist-get (cddr lsp-completion--cache) :prefix)
- (buffer-substring-no-properties bounds-start (point))))))
- (cond
- ((or done? result) result)
- ((and (not lsp-completion-no-cache)
- same-session?
- (listp (cl-second lsp-completion--cache)))
- (setf result (apply #'lsp-completion--filter-candidates
- (cdr lsp-completion--cache))))
- (t
- (-let* ((resp (lsp-request-while-no-input
- "textDocument/completion"
- (plist-put (lsp--text-document-position-params)
- :context (lsp-completion--get-context trigger-chars))))
- (completed (and resp
- (not (and (lsp-completion-list? resp)
- (lsp:completion-list-is-incomplete resp)))))
- (items (lsp--while-no-input
- (--> (cond
- ((lsp-completion-list? resp)
- (lsp:completion-list-items resp))
- (t resp))
- (if (or completed
- (seq-some #'lsp:completion-item-sort-text? it))
- (lsp-completion--sort-completions it)
- it)
- (-map (lambda (item)
- (lsp-put item
- :_emacsStartPoint
- (or (lsp-completion--guess-prefix item)
- bounds-start)))
- it))))
- (markers (list bounds-start (copy-marker (point) t)))
- (prefix (buffer-substring-no-properties bounds-start (point)))
- (lsp-completion--no-reordering (not lsp-completion-sort-initial-results)))
- (lsp-completion--clear-cache same-session?)
- (setf done? completed
- lsp-completion--cache (list bounds-start
- (cond
- ((and done? (not (seq-empty-p items)))
- (lsp-completion--to-internal items))
- ((not done?) :incomplete))
- :lsp-items nil
- :markers markers
- :prefix prefix)
- result (lsp-completion--filter-candidates
- (cond (done?
- (cl-second lsp-completion--cache))
- (lsp-completion-filter-on-incomplete
- (lsp-completion--to-internal items)))
- :lsp-items items
- :markers markers
- :prefix prefix))))))
- (:interrupted lsp-completion--last-result)
- (`,res (setq lsp-completion--last-result res))))))
- (list
- bounds-start
- (point)
- (lambda (probe _pred action)
- (cond
- ;; metadata
- ((equal action 'metadata)
- `(metadata (category . lsp-capf)
- (display-sort-function . identity)))
- ;; boundaries
- ((equal (car-safe action) 'boundaries) nil)
- ;; try-completion
- ((null action)
- (when-let ((cands (funcall candidates)))
- (if (cl-rest cands) probe (cl-first cands))))
- ;; test-completion: not return exact match so that the selection will
- ;; always be shown
- ((equal action 'lambda) nil)
- ;; retrieve candidates
- ((equal action t) (funcall candidates))))
- :annotation-function #'lsp-completion--annotate
- :company-kind #'lsp-completion--candidate-kind
- :company-require-match 'never
- :company-prefix-length
- (save-excursion
- (goto-char bounds-start)
- (and (lsp-completion--looking-back-trigger-characterp trigger-chars) t))
- :company-match #'lsp-completion--company-match
- :company-doc-buffer (-compose #'company-doc-buffer
- #'lsp-completion--get-documentation)
- :exit-function
- (-rpartial #'lsp-completion--exit-fn candidates)))))
-
-(defun lsp-completion--exit-fn (candidate _status &optional candidates)
- "Exit function of `completion-at-point'.
-CANDIDATE is the selected completion item.
-Others: CANDIDATES"
- (unwind-protect
- (-let* ((candidate (if (plist-member (text-properties-at 0 candidate)
- 'lsp-completion-item)
- candidate
- (cl-find candidate (funcall candidates) :test #'equal)))
- ((&plist 'lsp-completion-item item
- 'lsp-completion-start-point start-point
- 'lsp-completion-markers markers
- 'lsp-completion-prefix prefix)
- (text-properties-at 0 candidate))
- ((&CompletionItem? :label :insert-text? :text-edit? :insert-text-format?
- :additional-text-edits? :insert-text-mode? :command?)
- item))
- (cond
- (text-edit?
- (apply #'delete-region markers)
- (insert prefix)
- (pcase text-edit?
- ((TextEdit) (lsp--apply-text-edit text-edit?))
- ((InsertReplaceEdit :insert :replace :new-text)
- (lsp--apply-text-edit
- (lsp-make-text-edit
- :new-text new-text
- :range (if (or (and current-prefix-arg (eq lsp-completion-default-behaviour :replace))
- (and (not current-prefix-arg) (eq lsp-completion-default-behaviour :insert)))
- insert
- replace))))))
- ((or (unless (lsp-falsy? insert-text?) insert-text?) label)
- (apply #'delete-region markers)
- (insert prefix)
- (delete-region start-point (point))
- (insert (or (unless (lsp-falsy? insert-text?) insert-text?) label))))
-
- (lsp--indent-lines start-point (point) insert-text-mode?)
- (when (equal insert-text-format? lsp/insert-text-format-snippet)
- (lsp--expand-snippet (buffer-substring start-point (point))
- start-point
- (point)))
-
- (when lsp-completion-enable-additional-text-edit
- (if (or (get-text-property 0 'lsp-completion-resolved candidate)
- (not (seq-empty-p additional-text-edits?)))
- (lsp--apply-text-edits additional-text-edits? 'completion)
- (-let [(callback cleanup-fn) (lsp--create-apply-text-edits-handlers)]
- (lsp-completion--resolve-async
- item
- (-compose callback #'lsp:completion-item-additional-text-edits?)
- cleanup-fn))))
-
- (if (or (get-text-property 0 'lsp-completion-resolved candidate)
- command?)
- (when command? (lsp--execute-command command?))
- (lsp-completion--resolve-async
- item
- (-lambda ((&CompletionItem? :command?))
- (when command? (lsp--execute-command command?)))))
-
- (when (and (or
- (equal lsp-signature-auto-activate t)
- (memq :after-completion lsp-signature-auto-activate)
- (and (memq :on-trigger-char lsp-signature-auto-activate)
- (-when-let ((&SignatureHelpOptions? :trigger-characters?)
- (lsp--capability :signatureHelpProvider))
- (lsp-completion--looking-back-trigger-characterp
- trigger-characters?))))
- (lsp-feature? "textDocument/signatureHelp"))
- (lsp-signature-activate))
-
- (setq-local lsp-inhibit-lsp-hooks nil))
- (lsp-completion--clear-cache)))
-
-(defun lsp-completion--regex-fuz (str)
- "Build a regex sequence from STR. Insert .* between each char."
- (apply #'concat
- (cl-mapcar
- #'concat
- (cons "" (cdr (seq-map (lambda (c) (format "[^%c]*" c)) str)))
- (seq-map (lambda (c)
- (format "\\(%s\\)" (regexp-quote (char-to-string c))))
- str))))
-
-(defun lsp-completion--fuz-score (query str)
- "Calculate fuzzy score for STR with query QUERY.
-The return is nil or in range of (0, inf)."
- (-when-let* ((md (cddr (or (get-text-property 0 'match-data str)
- (let ((re (lsp-completion--regex-fuz query)))
- (when (string-match re str)
- (match-data))))))
- (start (pop md))
- (len (length str))
- ;; To understand how this works, consider these bad ascii(tm)
- ;; diagrams showing how the pattern "foo" flex-matches
- ;; "fabrobazo", "fbarbazoo" and "barfoobaz":
-
- ;; f abr o baz o
- ;; + --- + --- +
-
- ;; f barbaz oo
- ;; + ------ ++
-
- ;; bar foo baz
- ;; --- +++ ---
-
- ;; "+" indicates parts where the pattern matched. A "hole" in
- ;; the middle of the string is indicated by "-". Note that there
- ;; are no "holes" near the edges of the string. The completion
- ;; score is a number bound by ]0..1]: the higher the better and
- ;; only a perfect match (pattern equals string) will have score
- ;; 1. The formula takes the form of a quotient. For the
- ;; numerator, we use the number of +, i.e. the length of the
- ;; pattern. For the denominator, it first computes
- ;;
- ;; hole_i_contrib = 1 + (Li-1)^1.05 for first hole
- ;; hole_i_contrib = 1 + (Li-1)^0.25 for hole i of length Li
- ;;
- ;; The final value for the denominator is then given by:
- ;;
- ;; (SUM_across_i(hole_i_contrib) + 1)
- ;;
- (score-numerator 0)
- (score-denominator 0)
- (last-b -1)
- (q-ind 0)
- (update-score
- (lambda (a b)
- "Update score variables given match range (A B)."
- (setq score-numerator (+ score-numerator (- b a)))
- (unless (= a len)
- ;; case mis-match will be pushed to near next rank
- (unless (equal (aref query q-ind) (aref str a))
- (cl-incf a 0.9))
- (setq score-denominator
- (+ score-denominator
- (if (= a last-b) 0
- (+ 1 (* (if (< 0 (- a last-b 1)) 1 -1)
- (expt (abs (- a last-b 1))
- ;; Give a higher score for match near start
- (if (eq last-b -1) 0.75 0.25))))))))
- (setq last-b b))))
- (while md
- (funcall update-score start (cl-first md))
- ;; Due to the way completion regex is constructed, `(eq end (+ start 1))`
- (cl-incf q-ind)
- (pop md)
- (setq start (pop md)))
- (unless (zerop len)
- (/ score-numerator (1+ score-denominator) 1.0))))
-
-(defun lsp-completion--fix-resolve-data (item)
- ;; patch `CompletionItem' for rust-analyzer otherwise resolve will fail
- ;; see #2675
- (let ((data (lsp:completion-item-data? item)))
- (when (lsp-member? data :import_for_trait_assoc_item)
- (unless (lsp-get data :import_for_trait_assoc_item)
- (lsp-put data :import_for_trait_assoc_item :json-false)))))
-
-(defun lsp-completion--resolve (item)
- "Resolve completion ITEM."
- (cl-assert item nil "Completion item must not be nil")
- (lsp-completion--fix-resolve-data item)
- (or (ignore-errors
- (when (lsp-feature? "completionItem/resolve")
- (lsp-request "completionItem/resolve" item)))
- item))
-
-(defun lsp-completion--resolve-async (item callback &optional cleanup-fn)
- "Resolve completion ITEM asynchronously with CALLBACK.
-The CLEANUP-FN will be called to cleanup."
- (cl-assert item nil "Completion item must not be nil")
- (lsp-completion--fix-resolve-data item)
- (ignore-errors
- (if (lsp-feature? "completionItem/resolve")
- (lsp-request-async "completionItem/resolve" item
- (lambda (result)
- (funcall callback result)
- (when cleanup-fn (funcall cleanup-fn)))
- :error-handler (lambda (err)
- (when cleanup-fn (funcall cleanup-fn))
- (error (lsp:json-error-message err)))
- :cancel-handler cleanup-fn
- :mode 'alive)
- (funcall callback item)
- (when cleanup-fn (funcall cleanup-fn)))))
-
-
-;;;###autoload
-(defun lsp-completion--enable ()
- "Enable LSP completion support."
- (when (and lsp-completion-enable
- (lsp-feature? "textDocument/completion"))
- (lsp-completion-mode 1)))
-
-(defun lsp-completion--disable ()
- "Disable LSP completion support."
- (lsp-completion-mode -1))
-
-;;;###autoload
-(define-minor-mode lsp-completion-mode
- "Toggle LSP completion support."
- :group 'lsp-completion
- :global nil
- :lighter ""
- (let ((completion-started-fn (lambda (&rest _)
- (setq-local lsp-inhibit-lsp-hooks t)))
- (after-completion-fn (lambda (result)
- (when (stringp result)
- (lsp-completion--clear-cache))
- (setq-local lsp-inhibit-lsp-hooks nil))))
- (cond
- (lsp-completion-mode
- (setq-local completion-at-point-functions nil)
- (add-hook 'completion-at-point-functions #'lsp-completion-at-point nil t)
- (setq-local completion-category-defaults
- (add-to-list 'completion-category-defaults '(lsp-capf (styles basic))))
-
- (cond
- ((equal lsp-completion-provider :none))
- ((and (not (equal lsp-completion-provider :none))
- (fboundp 'company-mode))
- (setq-local company-abort-on-unique-match nil)
- (company-mode 1)
- (setq-local company-backends (cl-adjoin 'company-capf company-backends :test #'equal)))
- (t
- (lsp--warn "Unable to autoconfigure company-mode.")))
-
- (when (bound-and-true-p company-mode)
- (add-hook 'company-completion-started-hook
- completion-started-fn
- nil
- t)
- (add-hook 'company-after-completion-hook
- after-completion-fn
- nil
- t))
- (add-hook 'lsp-unconfigure-hook #'lsp-completion--disable nil t))
- (t
- (remove-hook 'completion-at-point-functions #'lsp-completion-at-point t)
- (setq-local completion-category-defaults
- (cl-remove 'lsp-capf completion-category-defaults :key #'cl-first))
- (remove-hook 'lsp-unconfigure-hook #'lsp-completion--disable t)
- (when (featurep 'company)
- (remove-hook 'company-completion-started-hook
- completion-started-fn
- t)
- (remove-hook 'company-after-completion-hook
- after-completion-fn
- t))))))
-
-;;;###autoload
-(add-hook 'lsp-configure-hook (lambda ()
- (when (and lsp-auto-configure
- lsp-completion-enable)
- (lsp-completion--enable))))
-
-(lsp-consistency-check lsp-completion)
-
-(provide 'lsp-completion)
-;;; lsp-completion.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-crystal.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-crystal.el
deleted file mode 100644
index f0aca59..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-crystal.el
+++ /dev/null
@@ -1,48 +0,0 @@
-;;; lsp-crystal.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, crystal
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Crystal Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-scry nil
- "LSP support for Crystal via scry."
- :group 'lsp-mode
- :link '(url-link "https://github.com/crystal-lang-tools/scry"))
-
-(defcustom lsp-clients-crystal-executable '("scry" "--stdio")
- "Command to start the scry language server."
- :group 'lsp-scry
- :risky t
- :type 'file)
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection lsp-clients-crystal-executable)
- :major-modes '(crystal-mode)
- :server-id 'scry))
-
-(lsp-consistency-check lsp-crystal)
-
-(provide 'lsp-crystal)
-;;; lsp-crystal.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-csharp.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-csharp.el
deleted file mode 100644
index ea36425..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-csharp.el
+++ /dev/null
@@ -1,365 +0,0 @@
-;;; lsp-csharp.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Jostein Kjønigsen, Saulius Menkevicius
-
-;; Author: Saulius Menkevicius <saulius.menkevicius@fastmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-csharp client
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'gnutls)
-(require 'f)
-
-(defgroup lsp-csharp nil
- "LSP support for C#, using the Omnisharp Language Server.
-Version 1.34.3 minimum is required."
- :group 'lsp-mode
- :link '(url-link "https://github.com/OmniSharp/omnisharp-roslyn"))
-
-(defcustom lsp-csharp-server-install-dir
- (f-join lsp-server-install-dir "omnisharp-roslyn/")
- "Installation directory for OmniSharp Roslyn server."
- :group 'lsp-csharp
- :type 'directory)
-
-(defcustom lsp-csharp-server-path
- nil
- "The path to the OmniSharp Roslyn language-server binary.
-Set this if you have the binary installed or have it built yourself."
- :group 'lsp-csharp
- :type '(string :tag "Single string value or nil"))
-
-(defcustom lsp-csharp-test-run-buffer-name
- "*lsp-csharp test run*"
- "The name of buffer used for outputing lsp-csharp test run results."
- :group 'lsp-csharp
- :type 'string)
-
-(defcustom lsp-csharp-solution-file
- nil
- "Solution to load when starting the server.
-Usually this is to be set in your .dir-locals.el on the project root directory."
- :group 'lsp-csharp
- :type 'string)
-
-(defcustom lsp-csharp-omnisharp-roslyn-download-url
- (concat "https://github.com/omnisharp/omnisharp-roslyn/releases/latest/download/"
- (cond ((eq system-type 'windows-nt)
- ; On Windows we're trying to avoid a crash starting 64bit .NET PE binaries in
- ; Emacs by using x86 version of omnisharp-roslyn on older (<= 26.4) versions
- ; of Emacs. See https://lists.nongnu.org/archive/html/bug-gnu-emacs/2017-06/msg00893.html"
- (if (and (string-match "^x86_64-.*" system-configuration)
- (version<= "26.4" emacs-version))
- "omnisharp-win-x64.zip"
- "omnisharp-win-x86.zip"))
-
- ((eq system-type 'darwin)
- "omnisharp-osx.zip")
-
- ((and (eq system-type 'gnu/linux)
- (or (eq (string-match "^x86_64" system-configuration) 0)
- (eq (string-match "^i[3-6]86" system-configuration) 0)))
- "omnisharp-linux-x64.zip")
-
- (t "omnisharp-mono.zip")))
- "Automatic download url for omnisharp-roslyn."
- :group 'lsp-csharp
- :type 'string)
-
-(defcustom lsp-csharp-omnisharp-roslyn-store-path
- (f-join lsp-csharp-server-install-dir "latest" "omnisharp-roslyn.zip")
- "The path where omnisharp-roslyn .zip archive will be stored."
- :group 'lsp-csharp
- :type 'file)
-
-(defcustom lsp-csharp-omnisharp-roslyn-server-dir
- (f-join lsp-csharp-server-install-dir "latest" "omnisharp-roslyn")
- "The path where omnisharp-roslyn .zip archive will be extracted."
- :group 'lsp-csharp
- :type 'file)
-
-(lsp-dependency
- 'omnisharp-roslyn
- `(:download :url lsp-csharp-omnisharp-roslyn-download-url
- :store-path lsp-csharp-omnisharp-roslyn-store-path))
-
-(defun lsp-csharp--download-server (_client callback error-callback _update?)
- "Download zip package for omnisharp-roslyn and install it.
-Will invoke CALLBACK on success, ERROR-CALLBACK on error."
- (lsp-package-ensure
- 'omnisharp-roslyn
- (lambda ()
- (lsp-unzip lsp-csharp-omnisharp-roslyn-store-path
- lsp-csharp-omnisharp-roslyn-server-dir)
- (unless (eq system-type 'windows-nt)
- (let ((run-script (f-join lsp-csharp-omnisharp-roslyn-server-dir "run")))
- (when (not (f-exists-p run-script))
- ; create the `run' script when missing (e.g. when server binaries are extracted from omnisharp-mono.zip)
- ; NOTE: we do not check for presence or version of mono in the system
- (with-temp-file run-script
- (insert "#!/bin/bash\n")
- (insert "BASEDIR=$(dirname \"$0\")\n")
- (insert "exec mono $BASEDIR/OmniSharp.exe $@\n")))
- (set-file-modes run-script #o755)))
- (funcall callback))
- error-callback))
-
-(defun lsp-csharp--language-server-path ()
- "Resolve path to use to start the server."
- (if lsp-csharp-server-path
- lsp-csharp-server-path
- (let ((server-dir lsp-csharp-omnisharp-roslyn-server-dir))
- (when (f-exists? server-dir)
- (f-join server-dir (cond ((eq system-type 'windows-nt) "OmniSharp.exe")
- (t "run")))))))
-
-(defun lsp-csharp--language-server-command ()
- "Resolves path and arguments to use to start the server."
- (append
- (list (lsp-csharp--language-server-path) "-lsp")
- (when lsp-csharp-solution-file (list "-s" (expand-file-name lsp-csharp-solution-file)))))
-
-(lsp-defun lsp-csharp-open-project-file ()
- "Open corresponding project file (.csproj) for the current file."
- (interactive)
- (-let* ((project-info-req (lsp-make-omnisharp-project-information-request :file-name (buffer-file-name)))
- (project-info (lsp-request "o#/project" project-info-req))
- ((&omnisharp:ProjectInformation :ms-build-project) project-info)
- ((&omnisharp:MsBuildProject :path) ms-build-project))
- (find-file path)))
-
-(defun lsp-csharp--get-buffer-code-elements ()
- "Retrieve code structure by calling into the /v2/codestructure endpoint.
-Returns :elements from omnisharp:CodeStructureResponse."
- (-let* ((code-structure (lsp-request "o#/v2/codestructure"
- (lsp-make-omnisharp-code-structure-request :file-name (buffer-file-name))))
- ((&omnisharp:CodeStructureResponse :elements) code-structure))
- elements))
-
-(defun lsp-csharp--inspect-code-elements-recursively (fn elements)
- "Invoke FN for every omnisharp:CodeElement found recursively in ELEMENTS."
- (seq-each
- (lambda (el)
- (funcall fn el)
- (-let (((&omnisharp:CodeElement :children) el))
- (lsp-csharp--inspect-code-elements-recursively fn children)))
- elements))
-
-(defun lsp-csharp--collect-code-elements-recursively (predicate elements)
- "Flatten the omnisharp:CodeElement tree in ELEMENTS matching PREDICATE."
- (let ((results nil))
- (lsp-csharp--inspect-code-elements-recursively (lambda (el)
- (when (funcall predicate el)
- (setq results (cons el results))))
- elements)
- results))
-
-(lsp-defun lsp-csharp--l-c-within-range (l c (&omnisharp:Range :start :end))
- "Determine if L (line) and C (column) are within RANGE."
- (-let* (((&omnisharp:Point :line start-l :column start-c) start)
- ((&omnisharp:Point :line end-l :column end-c) end))
- (or (and (= l start-l) (>= c start-c) (or (> end-l start-l) (<= c end-c)))
- (and (> l start-l) (< l end-l))
- (and (= l end-l) (<= c end-c)))))
-
-(defun lsp-csharp--code-element-stack-on-l-c (l c elements)
- "Return omnisharp:CodeElement stack at L (line) and C (column) in ELEMENTS tree."
- (when-let ((matching-element (seq-find (lambda (el)
- (-when-let* (((&omnisharp:CodeElement :ranges) el)
- ((&omnisharp:RangeList :full?) ranges))
- (lsp-csharp--l-c-within-range l c full?)))
- elements)))
- (-let (((&omnisharp:CodeElement :children) matching-element))
- (cons matching-element (lsp-csharp--code-element-stack-on-l-c l c children)))))
-
-(defun lsp-csharp--code-element-stack-at-point ()
- "Return omnisharp:CodeElement stack at point as a list."
- (let ((pos-line (plist-get (lsp--cur-position) :line))
- (pos-col (plist-get (lsp--cur-position) :character)))
- (lsp-csharp--code-element-stack-on-l-c pos-line
- pos-col
- (lsp-csharp--get-buffer-code-elements))))
-
-(lsp-defun lsp-csharp--code-element-test-method-p (element)
- "Return test method name and test framework for a given ELEMENT."
- (when element
- (-when-let* (((&omnisharp:CodeElement :properties) element)
- ((&omnisharp:CodeElementProperties :test-method-name? :test-framework?) properties))
- (list test-method-name? test-framework?))))
-
-(defun lsp-csharp--reset-test-buffer (present-buffer)
- "Create new or reuse an existing test result output buffer.
-PRESENT-BUFFER will make the buffer be presented to the user."
- (with-current-buffer (get-buffer-create lsp-csharp-test-run-buffer-name)
- (compilation-mode)
- (read-only-mode)
- (let ((inhibit-read-only t))
- (erase-buffer)))
-
- (when present-buffer
- (display-buffer lsp-csharp-test-run-buffer-name)))
-
-(defun lsp-csharp--start-tests (test-method-framework test-method-names)
- "Run test(s) identified by TEST-METHOD-NAMES using TEST-METHOD-FRAMEWORK."
- (if (and test-method-framework test-method-names)
- (let ((request-message (lsp-make-omnisharp-run-tests-in-class-request
- :file-name (buffer-file-name)
- :test-frameworkname test-method-framework
- :method-names (vconcat test-method-names))))
- (lsp-csharp--reset-test-buffer t)
- (lsp-session-set-metadata "last-test-method-framework" test-method-framework)
- (lsp-session-set-metadata "last-test-method-names" test-method-names)
- (lsp-request-async "o#/v2/runtestsinclass"
- request-message
- (-lambda ((&omnisharp:RunTestResponse))
- (message "lsp-csharp: Test run has started"))))
- (message "lsp-csharp: No test methods to run")))
-
-(defun lsp-csharp--test-message (message)
- "Emit a MESSAGE to lsp-csharp test run buffer."
- (when-let ((existing-buffer (get-buffer lsp-csharp-test-run-buffer-name))
- (inhibit-read-only t))
- (with-current-buffer existing-buffer
- (save-excursion
- (goto-char (point-max))
- (insert message "\n")))))
-
-(defun lsp-csharp-run-test-at-point ()
- "Start test run at current point (if any)."
- (interactive)
- (let* ((stack (lsp-csharp--code-element-stack-at-point))
- (element-on-point (car (last stack)))
- (test-method (lsp-csharp--code-element-test-method-p element-on-point))
- (test-method-name (car test-method))
- (test-method-framework (car (cdr test-method))))
- (lsp-csharp--start-tests test-method-framework (list test-method-name))))
-
-(defun lsp-csharp-run-all-tests-in-buffer ()
- "Run all test methods in the current buffer."
- (interactive)
- (let* ((elements (lsp-csharp--get-buffer-code-elements))
- (test-methods (lsp-csharp--collect-code-elements-recursively 'lsp-csharp--code-element-test-method-p elements))
- (test-method-framework (car (cdr (lsp-csharp--code-element-test-method-p (car test-methods)))))
- (test-method-names (mapcar (lambda (method)
- (car (lsp-csharp--code-element-test-method-p method)))
- test-methods)))
- (lsp-csharp--start-tests test-method-framework test-method-names)))
-
-(defun lsp-csharp-run-test-in-buffer ()
- "Run selected test in current buffer."
- (interactive)
- (when-let* ((elements (lsp-csharp--get-buffer-code-elements))
- (test-methods (lsp-csharp--collect-code-elements-recursively 'lsp-csharp--code-element-test-method-p elements))
- (test-method-framework (car (cdr (lsp-csharp--code-element-test-method-p (car test-methods)))))
- (test-method-names (mapcar (lambda (method)
- (car (lsp-csharp--code-element-test-method-p method)))
- test-methods))
- (selected-test-method-name (lsp--completing-read "Select test:" test-method-names 'identity)))
- (lsp-csharp--start-tests test-method-framework (list selected-test-method-name))))
-
-(defun lsp-csharp-run-last-tests ()
- "Re-run test(s) that were run last time."
- (interactive)
- (if-let ((last-test-method-framework (lsp-session-get-metadata "last-test-method-framework"))
- (last-test-method-names (lsp-session-get-metadata "last-test-method-names")))
- (lsp-csharp--start-tests last-test-method-framework last-test-method-names)
- (message "lsp-csharp: No test method(s) found to be ran previously on this workspace")))
-
-(lsp-defun lsp-csharp--handle-os-error (_workspace (&omnisharp:ErrorMessage :file-name :text))
- "Handle the 'o#/error' (interop) notification by displaying a message with lsp-warn."
- (lsp-warn "%s: %s" file-name text))
-
-(lsp-defun lsp-csharp--handle-os-testmessage (_workspace (&omnisharp:TestMessageEvent :message))
- "Handle the 'o#/testmessage and display test message on lsp-csharp
-test output buffer."
- (lsp-csharp--test-message message))
-
-(lsp-defun lsp-csharp--handle-os-testcompleted (_workspace (&omnisharp:DotNetTestResult
- :method-name
- :outcome
- :error-message
- :error-stack-trace
- :standard-output
- :standard-error))
- "Handle the 'o#/testcompleted' message from the server.
-
-Will display the results of the test on the lsp-csharp test output buffer."
- (let ((passed (string-equal "passed" outcome)))
- (lsp-csharp--test-message
- (format "[%s] %s "
- (propertize (upcase outcome) 'font-lock-face (if passed 'success 'error))
- method-name))
-
- (unless passed
- (lsp-csharp--test-message error-message)
-
- (when error-stack-trace
- (lsp-csharp--test-message error-stack-trace))
-
- (unless (seq-empty-p standard-output)
- (lsp-csharp--test-message "STANDARD OUTPUT:")
- (seq-doseq (stdout-line standard-output)
- (lsp-csharp--test-message stdout-line)))
-
- (unless (seq-empty-p standard-error)
- (lsp-csharp--test-message "STANDARD ERROR:")
- (seq-doseq (stderr-line standard-error)
- (lsp-csharp--test-message stderr-line))))))
-
-(lsp-defun lsp-csharp--action-client-find-references ((&Command :arguments?))
- "Read first argument from ACTION as Location and display xrefs for that location
-using the `textDocument/references' request."
- (-if-let* (((&Location :uri :range) (lsp-seq-first arguments?))
- ((&Range :start range-start) range)
- (find-refs-params (append (lsp--text-document-position-params (list :uri uri) range-start)
- (list :context (list :includeDeclaration json-false))))
- (locations-found (lsp-request "textDocument/references" find-refs-params)))
- (lsp-show-xrefs (lsp--locations-to-xref-items locations-found) nil t)
- (message "No references found")))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- #'lsp-csharp--language-server-command
- (lambda ()
- (when-let ((binary (lsp-csharp--language-server-path)))
- (f-exists? binary))))
-
- :major-modes '(csharp-mode csharp-tree-sitter-mode)
- :server-id 'csharp
- :action-handlers (ht ("omnisharp/client/findReferences" 'lsp-csharp--action-client-find-references))
- :notification-handlers (ht ("o#/projectadded" 'ignore)
- ("o#/projectchanged" 'ignore)
- ("o#/projectremoved" 'ignore)
- ("o#/packagerestorestarted" 'ignore)
- ("o#/msbuildprojectdiagnostics" 'ignore)
- ("o#/packagerestorefinished" 'ignore)
- ("o#/unresolveddependencies" 'ignore)
- ("o#/error" 'lsp-csharp--handle-os-error)
- ("o#/testmessage" 'lsp-csharp--handle-os-testmessage)
- ("o#/testcompleted" 'lsp-csharp--handle-os-testcompleted)
- ("o#/projectconfiguration" 'ignore)
- ("o#/projectdiagnosticstatus" 'ignore))
- :download-server-fn #'lsp-csharp--download-server))
-
-(lsp-consistency-check lsp-csharp)
-
-(provide 'lsp-csharp)
-;;; lsp-csharp.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-css.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-css.el
deleted file mode 100644
index 2363699..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-css.el
+++ /dev/null
@@ -1,254 +0,0 @@
-;;; lsp-css.el --- CSS language server configuration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'lsp-protocol)
-(require 'lsp-mode)
-
-(defgroup lsp-css nil
- "LSP support for CSS."
- :group 'lsp-mode
- :link '(url-link
- "https://github.com/vscode-langservers/vscode-css-languageserver-bin"))
-
-(defcustom lsp-css-experimental-custom-data nil
- "A list of JSON file paths that define custom CSS data that
-loads custom properties, at directives, pseudo classes /
-elements."
- :type '(repeat string))
-
-(defcustom lsp-css-completion-trigger-property-value-completion t
- "By default, VS Code triggers property value completion after
-selecting a CSS property. Use this setting to disable this
-behavior."
- :type 'boolean)
-
-(defcustom lsp-css-validate t
- "Enables or disables all validations."
- :type 'boolean)
-
-(defcustom lsp-css-lint-compatible-vendor-prefixes "ignore"
- "When using a vendor-specific prefix make sure to also include
-all other vendor-specific properties."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-vendor-prefix "warning"
- "When using a vendor-specific prefix, also include the standard
-property."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-duplicate-properties "ignore"
- "Do not use duplicate style definitions."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-empty-rules "warning"
- "Do not use empty rulesets."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-import-statement "ignore"
- "Import statements do not load in parallel."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-box-model "ignore"
- nil
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-universal-selector "ignore"
- nil
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-zero-units "ignore"
- "No unit for zero needed."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-font-face-properties "warning"
- nil
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-hex-color-length "error"
- "Hex colors must consist of three or six hex numbers."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-arguments-in-color-function "error"
- "Invalid number of parameters."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-unknown-properties "warning"
- "Unknown property."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-valid-properties nil
- "A list of properties that are not validated against the
-`unknownProperties` rule."
- :type '(repeat string))
-
-(defcustom lsp-css-lint-ie-hack "ignore"
- "IE hacks are only necessary when supporting IE7 and older."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-unknown-vendor-specific-properties "ignore"
- "Unknown vendor specific property."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-property-ignored-due-to-display "warning"
- nil
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-important "ignore"
- nil
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-float "ignore"
- nil
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-id-selector "ignore"
- "Selectors should not contain IDs because these rules are too
-tightly coupled with the HTML."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-lint-unknown-at-rules "warning"
- "Unknown at-rule."
- :type '(choice
- (const "ignore")
- (const "warning")
- (const "error")))
-
-(defcustom lsp-css-trace-server "off"
- "Traces the communication between VS Code and the CSS language
-server."
- :type '(choice
- (const "off")
- (const "messages")
- (const "verbose")))
-
-(lsp-register-custom-settings
- '(("css.trace.server" lsp-css-trace-server)
- ("css.lint.unknownAtRules" lsp-css-lint-unknown-at-rules)
- ("css.lint.idSelector" lsp-css-lint-id-selector)
- ("css.lint.float" lsp-css-lint-float)
- ("css.lint.important" lsp-css-lint-important)
- ("css.lint.propertyIgnoredDueToDisplay" lsp-css-lint-property-ignored-due-to-display)
- ("css.lint.unknownVendorSpecificProperties" lsp-css-lint-unknown-vendor-specific-properties)
- ("css.lint.ieHack" lsp-css-lint-ie-hack)
- ("css.lint.validProperties" lsp-css-lint-valid-properties)
- ("css.lint.unknownProperties" lsp-css-lint-unknown-properties)
- ("css.lint.argumentsInColorFunction" lsp-css-lint-arguments-in-color-function)
- ("css.lint.hexColorLength" lsp-css-lint-hex-color-length)
- ("css.lint.fontFaceProperties" lsp-css-lint-font-face-properties)
- ("css.lint.zeroUnits" lsp-css-lint-zero-units)
- ("css.lint.universalSelector" lsp-css-lint-universal-selector)
- ("css.lint.boxModel" lsp-css-lint-box-model)
- ("css.lint.importStatement" lsp-css-lint-import-statement)
- ("css.lint.emptyRules" lsp-css-lint-empty-rules)
- ("css.lint.duplicateProperties" lsp-css-lint-duplicate-properties)
- ("css.lint.vendorPrefix" lsp-css-lint-vendor-prefix)
- ("css.lint.compatibleVendorPrefixes" lsp-css-lint-compatible-vendor-prefixes)
- ("css.validate" lsp-css-validate t)
- ("css.completion.triggerPropertyValueCompletion" lsp-css-completion-trigger-property-value-completion t)
- ("css.experimental.customData" lsp-css-experimental-custom-data)))
-
-(defun lsp-css--server-command ()
- "Generate startup command for CSS language server."
- (list (lsp-package-path 'css-languageserver) "--stdio"))
-
-;;; CSS
-(lsp-defun lsp-css--apply-code-action ((&Command :arguments?))
- "Apply ACTION as workspace edit command."
- (lsp--apply-text-edits (cl-caddr arguments?) 'code-action))
-
-(lsp-dependency 'css-languageserver
- '(:system "css-languageserver")
- '(:npm :package "vscode-css-languageserver-bin"
- :path "css-languageserver"))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection #'lsp-css--server-command)
- :activation-fn (lsp-activate-on "css" "scss" "sass")
- :priority -1
- :action-handlers (lsp-ht ("_css.applyCodeAction" #'lsp-css--apply-code-action))
- :server-id 'css-ls
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'css-languageserver callback error-callback))))
-
-(lsp-consistency-check lsp-css)
-
-(provide 'lsp-css)
-;;; lsp-css.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-d.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-d.el
deleted file mode 100644
index f9c7b13..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-d.el
+++ /dev/null
@@ -1,37 +0,0 @@
-;;; lsp-d.el --- lsp-mode dlang integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 lsp-mode maintainers
-
-;; Author: lsp-mode maintainers
-;; Keywords: languages
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; client for serve-d
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection "serve-d")
- :major-modes '(d-mode)
- :server-id 'serve-d))
-
-(lsp-consistency-check lsp-d)
-
-(provide 'lsp-d)
-;;; lsp-d.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dhall.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dhall.el
deleted file mode 100644
index 7b10597..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dhall.el
+++ /dev/null
@@ -1,43 +0,0 @@
-;;; lsp-dhall.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, dhall
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Dhall Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-dhall nil
- "LSP support for Dhall, using dhall-lsp-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/dhall-lang/dhall-haskell"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection "dhall-lsp-server")
- :major-modes '(dhall-mode)
- :priority -1
- :server-id 'dhallls))
-
-(lsp-consistency-check lsp-dhall)
-
-(provide 'lsp-dhall)
-;;; lsp-dhall.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-diagnostics.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-diagnostics.el
deleted file mode 100644
index ac1512d..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-diagnostics.el
+++ /dev/null
@@ -1,369 +0,0 @@
-;;; lsp-diagnostics.el --- LSP diagnostics integration -*- lexical-binding: t; -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; LSP diagnostics integration
-;;
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-diagnostics nil
- "LSP support for diagnostics"
- :prefix "lsp-disagnostics-"
- :group 'lsp-mode
- :tag "LSP Diagnostics")
-
-;;;###autoload
-(define-obsolete-variable-alias 'lsp-diagnostic-package
- 'lsp-diagnostics-provider "lsp-mode 7.0.1")
-
-(defcustom lsp-diagnostics-provider :auto
- "The checker backend provider."
- :type
- '(choice
- (const :tag "Pick flycheck if present and fallback to flymake" :auto)
- (const :tag "Pick flycheck" :flycheck)
- (const :tag "Pick flymake" :flymake)
- (const :tag "Use neither flymake nor lsp" :none)
- (const :tag "Prefer flymake" t)
- (const :tag "Prefer flycheck" nil))
- :group 'lsp-diagnostics
- :package-version '(lsp-mode . "6.3"))
-
-;;;###autoload
-(define-obsolete-variable-alias 'lsp-flycheck-default-level
- 'lsp-diagnostics-flycheck-default-level "lsp-mode 7.0.1")
-
-(defcustom lsp-diagnostics-flycheck-default-level 'error
- "Error level to use when the server does not report back a diagnostic level."
- :type '(choice
- (const error)
- (const warning)
- (const info))
- :group 'lsp-diagnostics)
-
-(defcustom lsp-diagnostics-attributes
- `((unnecessary :foreground "gray")
- (deprecated :strike-through t))
- "The Attributes used on the diagnostics.
-List containing (tag attributes) where tag is the LSP diagnostic tag and
-attributes is a `plist' containing face attributes which will be applied
-on top the flycheck face for that error level."
- :type '(repeat list)
- :group 'lsp-diagnostics)
-
-(defcustom lsp-diagnostics-disabled-modes nil
- "A list of major models for which `lsp-diagnostics-mode' should be disabled."
- :type '(repeat symbol)
- :group 'lsp-diagnostics
- :package-version '(lsp-mode . "7.1"))
-
-;; Flycheck integration
-
-(declare-function flycheck-mode "ext:flycheck")
-(declare-function flycheck-define-generic-checker
- "ext:flycheck" (symbol docstring &rest properties))
-(declare-function flycheck-error-new "ext:flycheck" t t)
-(declare-function flycheck-error-message "ext:flycheck" (err) t)
-(declare-function flycheck-define-error-level "ext:flycheck" (level &rest properties))
-(declare-function flycheck-buffer "ext:flycheck")
-(declare-function flycheck-valid-checker-p "ext:flycheck")
-(declare-function flycheck-stop "ext:flycheck")
-
-(defvar flycheck-mode)
-(defvar flycheck-check-syntax-automatically)
-(defvar flycheck-checker)
-(defvar flycheck-checkers)
-
-
-(defvar-local lsp-diagnostics--flycheck-enabled nil
- "True when lsp diagnostics flycheck integration has been enabled in this buffer.")
-
-(defvar-local lsp-diagnostics--flycheck-checker nil
- "The value of flycheck-checker before lsp diagnostics was activated.")
-
-(defun lsp-diagnostics--flycheck-level (flycheck-level tags)
- "Generate flycheck level from the original FLYCHECK-LEVEL (e.
-g. `error', `warning') and list of LSP TAGS."
- (let ((name (format "lsp-flycheck-%s-%s"
- flycheck-level
- (mapconcat #'symbol-name tags "-"))))
- (or (intern-soft name)
- (let* ((face (--doto (intern (format "lsp-%s-face" name))
- (copy-face (-> flycheck-level
- (get 'flycheck-overlay-category)
- (get 'face))
- it)
- (mapc (lambda (tag)
- (apply #'set-face-attribute it nil
- (cl-rest (assoc tag lsp-diagnostics-attributes))))
- tags)))
- (category (--doto (intern (format "lsp-%s-category" name))
- (setf (get it 'face) face
- (get it 'priority) 100)))
- (new-level (intern name))
- (bitmap (or (get flycheck-level 'flycheck-fringe-bitmaps)
- (get flycheck-level 'flycheck-fringe-bitmap-double-arrow))))
- (flycheck-define-error-level new-level
- :severity (get flycheck-level 'flycheck-error-severity)
- :compilation-level (get flycheck-level 'flycheck-compilation-level)
- :overlay-category category
- :fringe-bitmap bitmap
- :fringe-face (get flycheck-level 'flycheck-fringe-face)
- :error-list-face face)
- new-level))))
-
-(defun lsp-diagnostics--flycheck-calculate-level (severity tags)
- "Calculate flycheck level by SEVERITY and TAGS."
- (let ((level (pcase severity
- (1 'error)
- (2 'warning)
- (3 'info)
- (4 'info)
- (_ lsp-flycheck-default-level)))
- ;; materialize only first tag.
- (tags (seq-map (lambda (tag)
- (cond
- ((= tag lsp/diagnostic-tag-unnecessary) 'unnecessary)
- ((= tag lsp/diagnostic-tag-deprecated) 'deprecated)))
- tags)))
- (if tags
- (lsp-diagnostics--flycheck-level level tags)
- level)))
-
-(defun lsp-diagnostics--flycheck-start (checker callback)
- "Start an LSP syntax check with CHECKER.
-
-CALLBACK is the status callback passed by Flycheck."
-
- (remove-hook 'lsp-on-idle-hook #'lsp-diagnostics--flycheck-buffer t)
-
- (->> (lsp--get-buffer-diagnostics)
- (-map (-lambda ((&Diagnostic :message :severity? :tags? :code? :source?
- :range (&Range :start (&Position :line start-line
- :character start-character)
- :end (&Position :line end-line
- :character end-character))))
- (flycheck-error-new
- :buffer (current-buffer)
- :checker checker
- :filename buffer-file-name
- :message message
- :level (lsp-diagnostics--flycheck-calculate-level severity? tags?)
- :id code?
- :group source?
- :line (lsp-translate-line (1+ start-line))
- :column (1+ (lsp-translate-column start-character))
- :end-line (lsp-translate-line (1+ end-line))
- :end-column (1+ (lsp-translate-column end-character)))))
- (funcall callback 'finished)))
-
-(defun lsp-diagnostics--flycheck-buffer ()
- "Trigger flyckeck on buffer."
- (remove-hook 'lsp-on-idle-hook #'lsp-diagnostics--flycheck-buffer t)
- (flycheck-buffer))
-
-(defun lsp-diagnostics--flycheck-report ()
- "Report flycheck.
-This callback is invoked when new diagnostics are received
-from the language server."
- (when (and (or (memq 'idle-change flycheck-check-syntax-automatically)
- (and (memq 'save flycheck-check-syntax-automatically)
- (not (buffer-modified-p))))
- lsp--cur-workspace)
- ;; make sure diagnostics are published even if the diagnostics
- ;; have been received after idle-change has been triggered
- (->> lsp--cur-workspace
- (lsp--workspace-buffers)
- (mapc (lambda (buffer)
- (when (and (lsp-buffer-live-p buffer)
- (or
- (not (bufferp buffer))
- (and (get-buffer-window buffer)
- (not (-contains? (buffer-local-value 'lsp-on-idle-hook buffer)
- 'lsp-diagnostics--flycheck-buffer)))))
- (lsp-with-current-buffer buffer
- (add-hook 'lsp-on-idle-hook #'lsp-diagnostics--flycheck-buffer nil t)
- (lsp--idle-reschedule (current-buffer)))))))))
-
-(cl-defgeneric lsp-diagnostics-flycheck-error-explainer (e _server-id)
- "Explain a `flycheck-error' E in a generic way depending on the SERVER-ID."
- (flycheck-error-message e))
-
-(defvar lsp-diagnostics-mode) ;; properly defined by define-minor-mode below
-
-;;;###autoload
-(defun lsp-diagnostics-lsp-checker-if-needed ()
- (unless (flycheck-valid-checker-p 'lsp)
- (flycheck-define-generic-checker 'lsp
- "A syntax checker using the Language Server Protocol (LSP)
-provided by lsp-mode.
-See https://github.com/emacs-lsp/lsp-mode."
- :start #'lsp-diagnostics--flycheck-start
- :modes '(lsp-placeholder-mode) ;; placeholder
- :predicate (lambda () lsp-diagnostics-mode)
- :error-explainer (lambda (e)
- (lsp-diagnostics-flycheck-error-explainer
- e (lsp--workspace-server-id (car-safe (lsp-workspaces))))))))
-
-(defun lsp-diagnostics-flycheck-enable (&rest _)
- "Enable flycheck integration for the current buffer."
- (require 'flycheck)
- (lsp-diagnostics-lsp-checker-if-needed)
- (and (not lsp-diagnostics--flycheck-enabled)
- (not (eq flycheck-checker 'lsp))
- (setq lsp-diagnostics--flycheck-checker flycheck-checker))
- (setq-local lsp-diagnostics--flycheck-enabled t)
- (flycheck-mode 1)
- (flycheck-stop)
- (setq-local flycheck-checker 'lsp)
- (lsp-flycheck-add-mode major-mode)
- (add-to-list 'flycheck-checkers 'lsp)
- (add-hook 'lsp-diagnostics-updated-hook #'lsp-diagnostics--flycheck-report nil t)
- (add-hook 'lsp-managed-mode-hook #'lsp-diagnostics--flycheck-report nil t))
-
-(defun lsp-diagnostics-flycheck-disable ()
- "Disable flycheck integration for the current buffer is it was enabled."
- (when lsp-diagnostics--flycheck-enabled
- (flycheck-stop)
- (when (eq flycheck-checker 'lsp)
- (setq-local flycheck-checker lsp-diagnostics--flycheck-checker))
- (setq lsp-diagnostics--flycheck-checker nil)
- (setq-local lsp-diagnostics--flycheck-enabled nil)
- (when flycheck-mode
- (flycheck-mode 1))))
-
-;; Flymake integration
-
-(declare-function flymake-mode "ext:flymake")
-(declare-function flymake-make-diagnostic "ext:flymake")
-(declare-function flymake-diag-region "ext:flymake")
-
-(defvar flymake-diagnostic-functions)
-(defvar flymake-mode)
-(defvar-local lsp-diagnostics--flymake-report-fn nil)
-
-(defun lsp-diagnostics--flymake-setup ()
- "Setup flymake."
- (setq lsp-diagnostics--flymake-report-fn nil)
- (add-hook 'flymake-diagnostic-functions 'lsp-diagnostics--flymake-backend nil t)
- (add-hook 'lsp-diagnostics-updated-hook 'lsp-diagnostics--flymake-after-diagnostics nil t)
- (flymake-mode 1))
-
-(defun lsp-diagnostics--flymake-after-diagnostics ()
- "Handler for `lsp-diagnostics-updated-hook'."
- (cond
- ((and lsp-diagnostics--flymake-report-fn flymake-mode)
- (lsp-diagnostics--flymake-update-diagnostics))
- ((not flymake-mode)
- (setq lsp-diagnostics--flymake-report-fn nil))))
-
-(defun lsp-diagnostics--flymake-backend (report-fn &rest _args)
- "Flymake backend using REPORT-FN."
- (let ((first-run (null lsp-diagnostics--flymake-report-fn)))
- (setq lsp-diagnostics--flymake-report-fn report-fn)
- (when first-run
- (lsp-diagnostics--flymake-update-diagnostics))))
-
-(defun lsp-diagnostics--flymake-update-diagnostics ()
- "Report new diagnostics to flymake."
- (funcall lsp-diagnostics--flymake-report-fn
- (-some->> (lsp-diagnostics t)
- (gethash (lsp--fix-path-casing buffer-file-name))
- (--map (-let* (((&Diagnostic :message :severity?
- :range (range &as &Range
- :start (&Position :line start-line :character)
- :end (&Position :line end-line))) it)
- ((start . end) (lsp--range-to-region range)))
- (when (= start end)
- (if-let ((region (flymake-diag-region (current-buffer)
- (1+ start-line)
- character)))
- (setq start (car region)
- end (cdr region))
- (lsp-save-restriction-and-excursion
- (goto-char (point-min))
- (setq start (point-at-bol (1+ start-line))
- end (point-at-eol (1+ end-line))))))
- (flymake-make-diagnostic (current-buffer)
- start
- end
- (cl-case severity?
- (1 :error)
- (2 :warning)
- (t :note))
- message))))
- ;; This :region keyword forces flymake to delete old diagnostics in
- ;; case the buffer hasn't changed since the last call to the report
- ;; function. See https://github.com/joaotavora/eglot/issues/159
- :region (cons (point-min) (point-max))))
-
-
-
-;;;###autoload
-(defun lsp-diagnostics--enable ()
- "Enable LSP checker support."
- (when (and (member lsp-diagnostics-provider '(:auto :none :flycheck :flymake t nil))
- (not (member major-mode lsp-diagnostics-disabled-modes)))
- (lsp-diagnostics-mode 1)))
-
-(defun lsp-diagnostics--disable ()
- "Disable LSP checker support."
- (lsp-diagnostics-mode -1))
-
-;;;###autoload
-(define-minor-mode lsp-diagnostics-mode
- "Toggle LSP diagnostics integration."
- :group 'lsp-diagnostics
- :global nil
- :lighter ""
- (cond
- (lsp-diagnostics-mode
- (cond
- ((and (or
- (and (eq lsp-diagnostics-provider :auto)
- (functionp 'flycheck-mode))
- (and (eq lsp-diagnostics-provider :flycheck)
- (or (functionp 'flycheck-mode)
- (user-error "The lsp-diagnostics-provider is set to :flycheck but flycheck is not installed?")))
- ;; legacy
- (null lsp-diagnostics-provider))
- (require 'flycheck nil t))
- (lsp-diagnostics-flycheck-enable))
- ((or (eq lsp-diagnostics-provider :auto)
- (eq lsp-diagnostics-provider :flymake)
- (eq lsp-diagnostics-provider t))
- (require 'flymake)
- (lsp-diagnostics--flymake-setup))
- ((not (eq lsp-diagnostics-provider :none))
- (lsp--warn "Unable to autoconfigure flycheck/flymake. The diagnostics won't be rendered.")))
-
- (add-hook 'lsp-unconfigure-hook #'lsp-diagnostics--disable nil t))
- (t (lsp-diagnostics-flycheck-disable)
- (remove-hook 'lsp-unconfigure-hook #'lsp-diagnostics--disable t))))
-
-;;;###autoload
-(add-hook 'lsp-configure-hook (lambda ()
- (when lsp-auto-configure
- (lsp-diagnostics--enable))))
-
-(lsp-consistency-check lsp-diagnostics)
-
-(provide 'lsp-diagnostics)
-;;; lsp-diagnostics.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dired.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dired.el
deleted file mode 100644
index 8b84af7..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dired.el
+++ /dev/null
@@ -1,178 +0,0 @@
-;;; lsp-dired.el --- `lsp-mode' diagnostics integrated into `dired' -*- lexical-binding: t -*-
-
-;; Copyright (C) 2021
-
-;; Author: Alexander Miller <alexanderm@web.de>
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;; `lsp-mode' diagnostics integrated into `dired'
-
-;;; Code:
-
-(require 'dired)
-(require 'pcase)
-(require 'lsp-mode)
-
-(defgroup lsp-dired nil
- "LSP support for dired"
- :prefix "lsp-dired-"
- :group 'lsp-mode
- :tag "LSP Dired")
-
-(defvar lsp-dired--ranger-adjust nil)
-(with-eval-after-load 'ranger (setf lsp-dired--ranger-adjust t))
-
-(defvar-local lsp-dired-displayed nil
- "Flags whether icons have been added.")
-
-(defvar-local lsp-dired--covered-subdirs nil
- "List of subdirs icons were already added for.")
-
-(defun lsp-dired--display ()
- "Display the icons of files in a dired buffer."
- (when (and (display-graphic-p)
- (not lsp-dired-displayed)
- dired-subdir-alist)
- (setq-local lsp-dired-displayed t)
- (pcase-dolist (`(,path . ,pos) dired-subdir-alist)
- (lsp-dired--insert-for-subdir path pos))))
-
-(defun lsp-dired--insert-for-subdir (path pos)
- "Display icons for subdir PATH at given POS."
- (let ((buf (current-buffer)))
- ;; run the function after current to make sure that we are creating the
- ;; overlays after `treemacs-icons-dired' has run.
- (run-with-idle-timer
- 0.0 nil
- (lambda ()
- (unless (and (member path lsp-dired--covered-subdirs)
- (not (buffer-live-p buf)))
- (with-current-buffer buf
- (add-to-list 'lsp-dired--covered-subdirs path)
- (let (buffer-read-only)
- (save-excursion
- (goto-char pos)
- (forward-line (if lsp-dired--ranger-adjust 1 2))
- (cl-block :file
- (while (not (eobp))
- (if (dired-move-to-filename nil)
- (let* ((file (dired-get-filename nil t))
- (bol (progn
- (point-at-bol)
- (search-forward-regexp "^[[:space:]]*" (line-end-position) t)
- (point)))
- (face (lsp-dired--face-for-path file)))
- (when face
- (-doto (make-overlay bol (point-at-eol))
- (overlay-put 'evaporate t)
- (overlay-put 'face face))))
- (cl-return-from :file nil))
- (forward-line 1)))))))))))
-
-(defface lsp-dired-path-face '((t :inherit font-lock-string-face))
- "Face used for breadcrumb paths on headerline."
- :group 'lsp-dired)
-
-(defface lsp-dired-path-error-face
- '((t :underline (:style wave :color "Red1")))
- "Face used for breadcrumb paths on headerline when there is an error under that path"
- :group 'lsp-dired)
-
-(defface lsp-dired-path-warning-face
- '((t :underline (:style wave :color "Yellow")))
- "Face used for breadcrumb paths on headerline when there is an warning under that path"
- :group 'lsp-dired)
-
-(defface lsp-dired-path-info-face
- '((t :underline (:style wave :color "Green")))
- "Face used for breadcrumb paths on headerline when there is an info under that path"
- :group 'lsp-dired)
-
-(defface lsp-dired-path-hint-face
- '((t :underline (:style wave :color "Green")))
- "Face used for breadcrumb paths on headerline when there is an hint under that path"
- :group 'lsp-dired)
-
-(defun lsp-dired--face-for-path (dir)
- "Calculate the face for DIR."
- (when-let ((diags (lsp-diagnostics-stats-for (directory-file-name dir))))
- (cl-labels ((check-severity
- (severity)
- (not (zerop (aref diags severity)))))
- (cond
- ((check-severity lsp/diagnostic-severity-error)
- 'lsp-dired-path-error-face)
- ((check-severity lsp/diagnostic-severity-warning)
- 'lsp-dired-path-warning-face)
- ((check-severity lsp/diagnostic-severity-information)
- 'lsp-dired-path-info-face)
- ((check-severity lsp/diagnostic-severity-hint)
- 'lsp-dired-path-hint-face)))))
-
-(defun lsp-dired--insert-subdir-advice (&rest args)
- "Advice to dired & dired+ insert-subdir commands.
-Will add icons for the subdir in the `car' of ARGS."
- (let* ((path (car args))
- (pos (cdr (assoc path dired-subdir-alist))))
- (when pos
- (lsp-dired--insert-for-subdir path pos))))
-
-(defun lsp-dired--kill-subdir-advice (&rest _args)
- "Advice to dired kill-subdir commands.
-Will remove the killed subdir from `lsp-dired--covered-subdirs'."
- (setf lsp-dired--covered-subdirs (delete (dired-current-directory)
- lsp-dired--covered-subdirs)))
-
-(defun lsp-dired--reset (&rest _args)
- "Reset metadata on revert."
- (setq-local lsp-dired--covered-subdirs nil)
- (setq-local lsp-dired-displayed nil))
-
-;;;###autoload
-(define-minor-mode lsp-dired-mode
- "Display `lsp-mode' icons for each file in a dired buffer."
- :require 'lsp-dired
- :init-value nil
- :global t
- :group 'lsp-dired
- (cond
- (lsp-dired-mode
- (add-hook 'dired-after-readin-hook #'lsp-dired--display)
- (advice-add 'dired-kill-subdir :before #'lsp-dired--kill-subdir-advice)
- (advice-add 'dired-insert-subdir :after #'lsp-dired--insert-subdir-advice)
- (advice-add 'diredp-insert-subdirs :after #'lsp-dired--insert-subdir-advice)
- (advice-add 'dired-revert :before #'lsp-dired--reset)
- (dolist (buffer (buffer-list))
- (with-current-buffer buffer
- (when (derived-mode-p 'dired-mode)
- (lsp-dired--display)))))
- (t
- (advice-remove 'dired-kill-subdir #'lsp-dired--kill-subdir-advice)
- (advice-remove 'dired-insert-subdir #'lsp-dired--insert-subdir-advice)
- (advice-remove 'diredp-insert-subdirs #'lsp-dired--insert-subdir-advice)
- (advice-remove 'dired-revert #'lsp-dired--reset)
- (remove-hook 'dired-after-readin-hook #'lsp-dired--display)
- (dolist (buffer (buffer-list))
- (with-current-buffer buffer
- (when (derived-mode-p 'dired-mode)
- (dired-revert)))))))
-
-
-(lsp-consistency-check lsp-dired)(provide 'lsp-dired)
-
-
-;;; lsp-dired.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dockerfile.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dockerfile.el
deleted file mode 100644
index a095137..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-dockerfile.el
+++ /dev/null
@@ -1,66 +0,0 @@
-;;; lsp-dockerfile.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, dockerfile
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for Dockerfile documents.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-
-;;; Dockerfile
-
-(defgroup lsp-dockerfile nil
- "Dockerfile LSP client, provided by the Dockerfile Language Server."
- :group 'lsp-mode
- :version "7.1"
- :link '(url-link "https://github.com/rcjsuen/dockerfile-language-server-nodejs"))
-
-(defcustom lsp-dockerfile-language-server-command
- '("docker-langserver" "--stdio")
- "The command that starts the docker language server."
- :group 'lsp-dockerfile
- :type '(repeat :tag "List of string values" string))
-
-(lsp-dependency 'docker-langserver
- '(:system "docker-langserver")
- '(:npm :package "dockerfile-language-server-nodejs"
- :path "docker-langserver"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(or (executable-find
- (cl-first lsp-dockerfile-language-server-command))
- (lsp-package-path 'docker-langserver))
- ,@(cl-rest lsp-dockerfile-language-server-command))))
- :major-modes '(dockerfile-mode)
- :priority -1
- :server-id 'dockerfile-ls
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'docker-langserver
- callback error-callback))))
-
-(lsp-consistency-check lsp-dockerfile)
-
-(provide 'lsp-dockerfile)
-;;; lsp-dockerfile.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-elixir.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-elixir.el
deleted file mode 100644
index c36579d..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-elixir.el
+++ /dev/null
@@ -1,190 +0,0 @@
-;;; lsp-elixir.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, elixir
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Elixir Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'ht)
-
-(defcustom lsp-elixir-dialyzer-enabled t
- "Run ElixirLS's rapid Dialyzer when code is saved."
- :type 'boolean
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-dialyzer-warn-opts '()
- "Dialyzer options to enable or disable warnings.
-
-See Dialyzer's documentation for options. Note that the \"race_conditions\"
-option is unsupported"
- :type '(repeat string)
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-dialyzer-format "dialyxir_long"
- "Formatter to use for Dialyzer warnings."
- :type 'string
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-mix-env "test"
- "Mix environment to use for compilation."
- :type 'string
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-mix-target nil
- "Mix target to use for compilation (requires Elixir >= 1.8)."
- :type 'string
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-project-dir nil
- "Subdirectory containing Mix project if not in the project root.
-
-If value is `\"\"` then defaults to the workspace rootUri."
- :type 'string
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-fetch-deps t
- "Automatically fetch project dependencies when compiling."
- :type 'boolean
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-suggest-specs t
- "Suggest @spec annotations inline using Dialyzer's inferred success typings.
-This requires Dialyzer."
- :type 'boolean
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-signature-after-complete t
- "Show signature help after confirming autocomplete."
- :type 'boolean
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defgroup lsp-elixir nil
- "LSP support for Elixir, using elixir-ls."
- :group 'lsp-mode
- :link '(url-link "https://github.com/elixir-lsp/elixir-ls"))
-
-(define-obsolete-variable-alias 'lsp-clients-elixir-server-executable 'lsp-elixir-server-command "2021-04-05")
-
-(defcustom lsp-elixir-server-command
- (if (equal system-type 'windows-nt)
- '("language_server.bat")
- '("language_server.sh"))
- "Command to start elixir-ls.
-
-Leave as default to let `executable-find' search for it."
- :group 'lsp-elixir
- :type '(repeat string)
- :package-version '(lsp-mode . "7.1"))
-
-
-(defconst lsp-elixir-ls-server-dir
- (f-join lsp-server-install-dir "elixir-ls")
- "Elixir-ls local server Directory")
-
-(defcustom lsp-elixir-local-server-command
- (f-join lsp-elixir-ls-server-dir
- (cl-first lsp-elixir-server-command))
- "Command to start local elixir-ls binary."
- :group 'lsp-elixir
- :type '(repeat string)
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-elixir-enable-test-lenses t
- "Suggest Tests."
- :type 'boolean
- :group 'lsp-elixir
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp-elixir--build-test-command (argument)
- "Builds the test command from the ARGUMENT."
- (let ((test-name (lsp-get argument :testName))
- (module (lsp-get argument :module))
- (describe (lsp-get argument :describe)))
- (cond (module (concat "\"" "module:" module "\""))
- ((not test-name) (concat "\"" "describe:" describe "\""))
- (describe (concat "\"" "test:test " describe " " test-name "\"" ))
- (t (concat "\"" "test:test " test-name "\"" )))))
-
-(lsp-defun lsp-elixir--run-test ((&Command :arguments?))
- "Runs tests."
- (let* ((argument (lsp-seq-first arguments?))
- (file-path (lsp-get argument :filePath))
- (test-command (lsp-elixir--build-test-command argument)))
- (compile
- (concat "cd " (lsp-workspace-root file-path) " && "
- "mix test --exclude test --include " test-command " " file-path
- " --no-color"))
- file-path))
-
-(lsp-dependency 'elixir-ls
- '(:system "elixir-ls"))
-
-(lsp-register-custom-settings
- '(("elixirLS.dialyzerEnabled" lsp-elixir-dialyzer-enabled t)
- ("elixirLS.dialyzerWarnOpts" lsp-elixir-dialyzer-warn-opts)
- ("elixirLS.dialyzerFormat" lsp-elixir-dialyzer-format)
- ("elixirLS.mixEnv" lsp-elixir-mix-env)
- ("elixirLS.mixTarget" lsp-elixir-mix-target)
- ("elixirLS.projectDir" lsp-elixir-project-dir)
- ("elixirLS.fetchDeps" lsp-elixir-fetch-deps t)
- ("elixirLS.suggestSpecs" lsp-elixir-suggest-specs t)
- ("elixirLS.signatureAfterComplete" lsp-elixir-signature-after-complete t)
- ("elixirLS.enableTestLenses" lsp-elixir-enable-test-lenses t)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(or (when (f-exists? lsp-elixir-local-server-command)
- lsp-elixir-local-server-command)
- (or (executable-find
- (cl-first lsp-elixir-server-command))
- (lsp-package-path 'elixir-ls))
- "language_server.bat")
- ,@(cl-rest lsp-elixir-server-command))))
- :major-modes '(elixir-mode)
- :priority -1
- :server-id 'elixir-ls
- :action-handlers (ht ("elixir.lens.test.run" 'lsp-elixir--run-test))
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "elixirLS")))
- (puthash
- "textDocumentSync"
- (ht ("save" t)
- ("change" 2))
- (lsp--workspace-server-capabilities workspace)))))
-
-(lsp-consistency-check lsp-elixir)
-
-(provide 'lsp-elixir)
-;;; lsp-elixir.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-elm.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-elm.el
deleted file mode 100644
index 55f9f27..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-elm.el
+++ /dev/null
@@ -1,137 +0,0 @@
-;;; lsp-elm.el --- Elm Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Daniel V
-
-;; Author: Daniel V
-;; Keywords: elm lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-elm client
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-elm nil
- "LSP support for the Elm programming language, using the server from https://github.com/elm-tooling/elm-language-server"
- :group 'lsp-mode
- :link '(url-link "https://github.com/elm-tooling/elm-language-server"))
-
-(defcustom lsp-elm-elm-language-server-path nil
- "Path for elm-language-server.
-Can be installed globally with: npm i -g @elm-tooling/elm-language-server,
-or manually by cloning the repo and following the installing instructions."
- :group 'lsp-elm
- :risky t
- :type 'file)
-
-(defcustom lsp-elm-trace-server
- nil
- "Enable/disable trace logging of client and server communication."
- :type 'boolean
- :group 'lsp-elm)
-
-(defcustom lsp-elm-elm-path
- ""
- "The path to your elm executable.
-
-Should be empty by default, in that case it will assume the name and try
-to first get it from a local npm installation or a global one. If you
-set it manually it will not try to load from the npm folder."
- :type 'file
- :group 'lsp-elm)
-
-(defcustom lsp-elm-elm-format-path
- ""
- "The path to your elm-format executable.
-
-Should be empty by default, in that case it will assume the name and try
-to first get it from a local npm installation or a global one. If you
-set it manually it will not try to load from the npm folder."
- :type 'file
- :group 'lsp-elm)
-
-(defcustom lsp-elm-elm-test-path
- ""
- "The path to your elm-test executable.
-
-Should be empty by default, in that case it will assume the name and try
-to first get it from a local npm installation or a global one. If you
-set it manually it will not try to load from the npm folder."
- :type 'file
- :group 'lsp-elm)
-
-(defcustom lsp-elm-disable-elmls-diagnostics
- nil
- "Enable/Disable linting diagnostics from the language server."
- :type 'boolean
- :group 'lsp-elm)
-
-(defcustom lsp-elm-only-update-diagnostics-on-save
- nil
- "Only update compiler diagnostics on save, not on document change."
- :type 'boolean
- :group 'lsp-elm)
-
-(defcustom lsp-elm-skip-install-package-confirmation
- nil
- "Skip confirmation for the Install Package code action."
- :type 'boolean
- :group 'lsp-elm)
-
-(defcustom lsp-elm-server-args
- '("--stdio")
- "Arguments to pass to the server."
- :type '(repeat string)
- :group 'lsp-elm)
-
-(defun lsp-elm--elm-language-server-command ()
- "Generate LSP startup command for the Elm Language Server."
- (cons
- (or lsp-elm-elm-language-server-path
- (lsp-package-path 'elm-language-server))
- lsp-elm-server-args))
-
-(defun lsp-clients-elm--make-init-options ()
- "Init options for elm-language-server."
- `(:elmPath ,lsp-elm-elm-path
- :elmFormatPath ,lsp-elm-elm-format-path
- :elmTestPath ,lsp-elm-elm-test-path
- :disableElmLSDiagnostics ,(lsp-json-bool lsp-elm-disable-elmls-diagnostics)
- :onlyUpdateDiagnosticsOnSave ,(lsp-json-bool lsp-elm-only-update-diagnostics-on-save)
- :skipInstallPackageConfirmation ,(lsp-json-bool lsp-elm-skip-install-package-confirmation)
- :trace.server ,(lsp-json-bool lsp-elm-trace-server)))
-
-(lsp-dependency 'elm-language-server
- '(:system "elm-language-server")
- '(:npm :package "@elm-tooling/elm-language-server"
- :path "elm-language-server"))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection #'lsp-elm--elm-language-server-command)
- :major-modes '(elm-mode)
- :priority -1
- :initialization-options #'lsp-clients-elm--make-init-options
- :server-id 'elm-ls
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'elm-language-server callback error-callback))))
-
-(lsp-consistency-check lsp-elm)
-
-(provide 'lsp-elm)
-;;; lsp-elm.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-erlang.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-erlang.el
deleted file mode 100644
index 2deae83..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-erlang.el
+++ /dev/null
@@ -1,67 +0,0 @@
-;;; lsp-erlang.el --- Erlang Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Roberto Aloi
-
-;; Author: Roberto Aloi
-;; Keywords: erlang lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-erlang client
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-erlang nil
- "LSP support for the Erlang programming language, using erlang-ls"
- :group 'lsp-mode
- :link '(url-link "https://github.com/erlang-ls/erlang_ls"))
-
-(defcustom lsp-erlang-server-path
- "erlang_ls"
- "Path to the Erlang Language Server binary."
- :group 'lsp-erlang
- :risky t
- :type 'file)
-
-(defcustom lsp-erlang-server-connection-type
- 'stdio
- "Type of connection to use with the Erlang Language Server: tcp or stdio"
- :group 'lsp-erlang
- :risky t
- :type 'symbol)
-
-(defun lsp-erlang-server-start-fun (port)
- `(,lsp-erlang-server-path
- "--transport" "tcp"
- "--port" ,(number-to-string port)))
-
-(defun lsp-erlang-server-connection ()
- (if (eq lsp-erlang-server-connection-type 'tcp)
- (lsp-tcp-connection 'lsp-erlang-server-start-fun)
- (lsp-stdio-connection `(,lsp-erlang-server-path "--transport" "stdio"))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-erlang-server-connection)
- :major-modes '(erlang-mode)
- :priority -1
- :server-id 'erlang-ls))
-
-(lsp-consistency-check lsp-erlang)
-
-(provide 'lsp-erlang)
-;;; lsp-erlang.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-eslint.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-eslint.el
deleted file mode 100644
index 1420b45..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-eslint.el
+++ /dev/null
@@ -1,355 +0,0 @@
-;;; lsp-eslint.el --- lsp-mode eslint integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords: languages
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'lsp-protocol)
-(require 'lsp-mode)
-
-(defconst lsp-eslint/status-ok 1)
-(defconst lsp-eslint/status-warn 2)
-(defconst lsp-eslint/status-error 3)
-
-(defgroup lsp-eslint nil
- "ESlint language server group."
- :group 'lsp-mode
- :link '(url-link "https://github.com/Microsoft/vscode-eslint"))
-
-(defcustom lsp-eslint-unzipped-path (f-join lsp-server-install-dir "eslint/unzipped")
- "The path to the file in which `eslint' will be stored."
- :type 'file
- :group 'lsp-eslint
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-eslint-server-command `("node"
- "~/server/out/eslintServer.js"
- "--stdio")
- "Command to start eslint server."
- :risky t
- :type '(repeat string)
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-enable t
- "Controls whether eslint is enabled for JavaScript files or not."
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-package-manager "npm"
- "The package manager you use to install node modules."
- :type '(choice (const :tag "npm" "npm")
- (const :tag "yarn" "yarn")
- (const :tag "pnpm" "pnpm")
- (string :tag "other"))
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-format t
- "Whether to perform format."
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-node-path nil
- "A path added to NODE_PATH when resolving the eslint module."
- :type '(repeat string)
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-node "node"
- "Path to nodejs."
- :type 'file
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-eslint-options nil
- "The eslint options object to provide args normally passed to
- eslint when executed from a command line (see
- http://eslint.org/docs/developer-guide/nodejs-api#cliengine)."
- :type 'alist)
-
-(defcustom lsp-eslint-trace-server "off"
- "Traces the communication between VSCode and the eslint linter service."
- :type 'string)
-
-(defcustom lsp-eslint-run "onType"
- "Run the linter on save (onSave) or on type (onType)"
- :type '(choice (const :tag "onSave" "onSave")
- (const :tag "onType" "onType"))
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-auto-fix-on-save nil
- "Turns auto fix on save on or off."
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-fix-all-problem-type
- "all"
- "Determines which problems are fixed when running the
-source.fixAll code action."
- :type '(choice
- (const "all")
- (const "problems")
- string)
- :package-version '(lsp-mode . "7.0.1"))
-
-(defcustom lsp-eslint-quiet nil
- "Turns on quiet mode, which ignores warnings."
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-working-directories []
- ""
- :type 'lsp-string-vector
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-validate ["javascript" "javascriptreact"]
- "An array of language ids which should be validated by ESLint"
- :type 'lsp-string-vector
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-provide-lint-task nil
- "Controls whether a task for linting the whole workspace will be available."
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-lint-task-enable nil
- "Controls whether a task for linting the whole workspace will be available."
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-lint-task-options "."
- "Command line options applied when running the task for linting the whole
-workspace (see https://eslint.org/docs/user-guide/command-line-interface)."
- :type 'string
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-runtime nil
- "The location of the node binary to run ESLint under."
- :type '(repeat string)
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-code-action-disable-rule-comment '((enable . t) (location . "separateLine"))
- ""
- :type 'alist
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-code-action-show-documentation '((enable . t))
- ""
- :type 'alist)
-
-(defcustom lsp-eslint-experimental-incremental-sync t
- "Controls whether the new incremental text document synchronization should
-be used."
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-eslint-save-library-choices t
- "Controls whether to remember choices made to permit or deny ESLint libraries
-from running."
- :type 'boolean
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-eslint-library-choices-file (expand-file-name (locate-user-emacs-file ".lsp-eslint-choices"))
- "The file where choices to permit or deny ESLint libraries from running is
-stored."
- :type 'string
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp--find-eslint ()
- (or
- (when-let ((workspace-folder (lsp-find-session-folder (lsp-session) default-directory)))
- (let ((eslint-local-path (f-join workspace-folder "node_modules" ".bin"
- (if (eq system-type 'windows-nt) "eslint.cmd" "eslint"))))
- (when (f-exists? eslint-local-path)
- eslint-local-path)))
- "eslint"))
-
-(defun lsp-eslint-create-default-configuration ()
- "Create default eslint configuration."
- (interactive)
- (unless (lsp-session-folders (lsp-session))
- (user-error "There are no workspace folders"))
- (pcase (->> (lsp-session)
- lsp-session-folders
- (-filter (lambda (dir)
- (-none?
- (lambda (file) (f-exists? (f-join dir file)))
- '(".eslintrc.js" ".eslintrc.yaml" ".eslintrc.yml" ".eslintrc" ".eslintrc.json")))))
- (`nil (user-error "All workspace folders contain eslint configuration"))
- (folders (let ((default-directory (completing-read "Select project folder: " folders nil t)))
- (async-shell-command (format "%s --init" (lsp--find-eslint)))))))
-
-(lsp-defun lsp-eslint-status-handler (workspace (&eslint:StatusParams :state))
- (setf (lsp--workspace-status-string workspace)
- (propertize "ESLint"
- 'face (cond
- ((eq state lsp-eslint/status-error) 'error)
- ((eq state lsp-eslint/status-warn) 'warn)
- (t 'success)))))
-
-(lsp-defun lsp-eslint--configuration (_workspace (&ConfigurationParams :items))
- (->> items
- (seq-map (-lambda ((&ConfigurationItem :scope-uri?))
- (-when-let* ((file (lsp--uri-to-path scope-uri?))
- (buffer (find-buffer-visiting file))
- (workspace-folder (lsp-find-session-folder (lsp-session) file)))
- (with-current-buffer buffer
- (list :validate "probe"
- :packageManager lsp-eslint-package-manager
- :codeActionOnSave (list :enable t
- :mode lsp-eslint-fix-all-problem-type)
- :format (lsp-json-bool lsp-eslint-format)
- :options (or lsp-eslint-options (ht))
- :run (or lsp-eslint-run "onType")
- :nodePath lsp-eslint-node-path
- :onIgnoredFiles "off"
- :quiet (lsp-json-bool lsp-eslint-quiet)
- :workspaceFolder (list :uri (lsp--path-to-uri workspace-folder)
- :name (f-filename workspace-folder))
- :codeAction (list
- :disableRuleComment (or lsp-eslint-code-action-disable-rule-comment
- (list :enable t
- :location "separateLine"))
- :showDocumentation (or lsp-eslint-code-action-show-documentation
- (list :enable t))))))))
- (apply #'vector)))
-
-(lsp-defun lsp-eslint--open-doc (_workspace (&eslint:OpenESLintDocParams :url))
- "Open documentation."
- (browse-url url))
-
-(defun lsp-eslint-apply-all-fixes ()
- "Apply all autofixes in the current buffer."
- (interactive)
- (lsp-send-execute-command "eslint.applyAllFixes" (vector (lsp--versioned-text-document-identifier))))
-
-;; XXX: replace with `lsp-make-interactive-code-action' macro
-;; (lsp-make-interactive-code-action eslint-fix-all "source.fixAll.eslint")
-
-(defun lsp-eslint-fix-all ()
- "Perform the source.fixAll.eslint code action, if available."
- (interactive)
- (condition-case nil
- (lsp-execute-code-action-by-kind "source.fixAll.eslint")
- (lsp-no-code-actions
- (when (called-interactively-p 'any)
- (lsp--info "source.fixAll.eslint action not available")))))
-
-(defun lsp-eslint-server-command ()
- (if (lsp-eslint-server-exists? lsp-eslint-server-command)
- lsp-eslint-server-command
- `(,lsp-eslint-node ,(f-join lsp-eslint-unzipped-path
- "extension/server/out/eslintServer.js")
- "--stdio")))
-
-(defun lsp-eslint-server-exists? (eslint-server-command)
- (let* ((command-name (f-base (f-filename (cl-first eslint-server-command))))
- (first-argument (cl-second eslint-server-command))
- (first-argument-exist (and first-argument (file-exists-p first-argument))))
- (if (equal command-name lsp-eslint-node)
- first-argument-exist
- (executable-find (cl-first eslint-server-command)))))
-
-(defvar lsp-eslint--stored-libraries (ht)
- "Hash table defining if a given path to an ESLint library is allowed to run.
-If the value for a key is 4, it will be allowed. If it is 1, it will not. If a
-value does not exist for the key, or the value is nil, the user will be prompted
-to allow or deny it.")
-
-(when (and (file-exists-p lsp-eslint-library-choices-file)
- lsp-eslint-save-library-choices)
- (setq lsp-eslint--stored-libraries (lsp--read-from-file lsp-eslint-library-choices-file)))
-
-(lsp-defun lsp-eslint--confirm-local (_workspace (&eslint:ConfirmExecutionParams :library-path) callback)
- (if-let ((option-alist '(("Always" 4 . t)
- ("Yes" 4 . nil)
- ("No" 1 . nil)
- ("Never" 1 . t)))
- (remembered-answer (gethash library-path lsp-eslint--stored-libraries)))
- (funcall callback remembered-answer)
- (lsp-ask-question
- (format "Allow lsp-mode to execute %s?" library-path)
- (mapcar 'car option-alist)
- (lambda (response)
- (let ((option (cdr (assoc response option-alist))))
- (when (cdr option)
- (puthash library-path (car option) lsp-eslint--stored-libraries)
- (when lsp-eslint-save-library-choices
- (lsp--persist lsp-eslint-library-choices-file lsp-eslint--stored-libraries)))
- (funcall callback (car option)))))))
-
-(defun lsp-eslint--probe-failed (_workspace _message)
- "Called when the server detects a misconfiguration in ESLint."
- (lsp--error "ESLint is not configured correctly. Please ensure your eslintrc is set up for the languages you are using."))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection
- (lsp-stdio-connection
- (lambda () (lsp-eslint-server-command))
- (lambda () (lsp-eslint-server-exists? (lsp-eslint-server-command))))
- :activation-fn (lambda (filename &optional _)
- (when lsp-eslint-enable
- (or (string-match-p (rx (one-or-more anything) "."
- (or "ts" "js" "jsx" "tsx" "html" "vue")eos)
- filename)
- (derived-mode-p 'js-mode 'js2-mode 'typescript-mode 'html-mode))))
- :priority -1
- :completion-in-comments? t
- :add-on? t
- :multi-root t
- :notification-handlers (ht ("eslint/status" #'lsp-eslint-status-handler))
- :request-handlers (ht ("workspace/configuration" #'lsp-eslint--configuration)
- ("eslint/openDoc" #'lsp-eslint--open-doc)
- ("eslint/probeFailed" #'lsp-eslint--probe-failed))
- :async-request-handlers (ht ("eslint/confirmESLintExecution" #'lsp-eslint--confirm-local))
- :server-id 'eslint
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--server-register-capability
- (lsp-make-registration
- :id "random-id"
- :method "workspace/didChangeWatchedFiles"
- :register-options? (lsp-make-did-change-watched-files-registration-options
- :watchers
- `[,(lsp-make-file-system-watcher
- :glob-pattern "**/.eslintr{c.js,c.yaml,c.yml,c,c.json}")
- ,(lsp-make-file-system-watcher
- :glob-pattern "**/.eslintignore")
- ,(lsp-make-file-system-watcher
- :glob-pattern "**/package.json")])))))
- :download-server-fn (lambda (_client callback error-callback _update?)
- (let ((tmp-zip (make-temp-file "ext" nil ".zip")))
- (delete-file tmp-zip)
- (lsp-download-install
- (lambda (&rest _)
- (condition-case err
- (progn
- (lsp-unzip tmp-zip lsp-eslint-unzipped-path)
- (funcall callback))
- (error (funcall error-callback err))))
- error-callback
- :url (lsp-vscode-extension-url "dbaeumer" "vscode-eslint" "2.1.14")
- :store-path tmp-zip)))))
-
-(lsp-consistency-check lsp-eslint)
-
-(provide 'lsp-eslint)
-;;; lsp-eslint.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-fortran.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-fortran.el
deleted file mode 100644
index c9ffb7a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-fortran.el
+++ /dev/null
@@ -1,61 +0,0 @@
-;;; lsp-fortran.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, fortran
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Fortran Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-fortran nil
- "LSP support for Fortran, using the Fortran Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/hansec/fortran-language-server"))
-
-(defcustom lsp-clients-fortls-executable "fortls"
- "The fortls executable to use.
-Leave as just the executable name to use the default behavior of
-finding the executable with `exec-path'."
- :group 'lsp-fortran
- :risky t
- :type 'file)
-
-(defcustom lsp-clients-fortls-args '()
- "Extra arguments for the fortls executable"
- :group 'lsp-fortran
- :risky t
- :type '(repeat string))
-
-(defun lsp-clients--fortls-command ()
- "Generate the language server startup command."
- `(,lsp-clients-fortls-executable,@lsp-clients-fortls-args))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection 'lsp-clients--fortls-command)
- :major-modes '(f90-mode fortran-mode)
- :priority -1
- :server-id 'fortls))
-
-(lsp-consistency-check lsp-fortran)
-
-(provide 'lsp-fortran)
-;;; lsp-fortran.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-fsharp.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-fsharp.el
deleted file mode 100644
index 6552d83..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-fsharp.el
+++ /dev/null
@@ -1,305 +0,0 @@
-;;; lsp-fsharp.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Reed Mullanix
-
-;; Author: Reed Mullanix <reedmullanix@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-fsharp client
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-fsharp nil
- "LSP support for the F# Programming Language, using the FsharpAutoComplete server."
- :link '(url-link "https://github.com/fsharp/FsAutoComplete")
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-fsharp-server-runtime 'net-core
- "The .NET runtime to use."
- :group 'lsp-fsharp
- :type '(choice (const :tag "Use .Net Core" net-core)
- (const :tag "Use Mono" mono)
- (const :tag "Use .Net Framework" net-framework))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-fsharp-server-install-dir (f-join lsp-server-install-dir "fsautocomplete/")
- "Install directory for fsautocomplete server.
-The slash is expected at the end."
- :group 'lsp-fsharp
- :risky t
- :type 'directory
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-fsharp-server-args nil
- "Extra arguments for the F# language server."
- :type '(repeat string)
- :group 'lsp-fsharp
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-fsharp-keywords-autocomplete t
- "Provides keywords in autocomplete list."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-external-autocomplete nil
- "Provides autocompletion for symbols from not opened namespaces/modules;
-inserts open on accept."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-linter t
- "Enables FSharpLint integration, provides additional warnings and code
-action fixes."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-union-case-stub-generation t
- "Enables a code action to generate pattern matching cases."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-union-case-stub-generation-body "failwith \"Not Implemented\""
- "Defines dummy body used by pattern matching generator."
- :group 'lsp-fsharp
- :type 'string
- :risky t
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-record-stub-generation t
- "Enables code action to generate record stub."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-record-stub-generation-body "failwith \"Not Implemented\""
- "Defines dummy body used by record stub generator."
- :group 'lsp-fsharp
- :type 'string
- :risky t
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-interface-stub-generation t
- "Enables code action to generate an interface stub."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-interface-stub-generation-object-identifier "this"
- "Defines object identifier used by interface stub generator,
-e.g. `this' or `self'."
- :group 'lsp-fsharp
- :type 'string
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-interface-stub-generation-method-body "failwith \"Not Implemented\""
- "Defines dummy body used by interface stub generator."
- :group 'lsp-fsharp
- :type 'string
- :risky t
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-unused-opens-analyzer t
- "Enables unused open detection."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-unused-declarations-analyzer t
- "Enables unused symbol detection."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-simplify-name-analyzer nil
- "Enables simplify name analyzer and remove redundant qualifier quick fix."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-resolve-namespaces t
- "Enables resolve namespace quick fix; adds `open' if symbol is from not yet
-opened module/namespace."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-enable-reference-code-lens t
- "Enables reference count code lenses.
-It is recommended to disable if `--backgorund-service-enabled' is not used."
- :group 'lsp-fsharp
- :type 'bool
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-fsharp-auto-workspace-init nil
- "Enable automatic workspace initialization.
-Do note that this can cause unexpected or challenging behaviors, as solutions
-with test projects are not autoloaded by FSharpAutoComplete."
- :group 'lsp-fsharp
- :type 'bool
- :risky t)
-
-(defun lsp-fsharp--fsac-runtime-cmd ()
- "Get the command required to run fsautocomplete based off of the
-current runtime."
- (pcase lsp-fsharp-server-runtime
- ('net-core "dotnet")
- ('mono "mono")
- ('net-framework nil)))
-
-(defun lsp-fsharp--fsac-cmd ()
- "The location of fsautocomplete executable."
- (let ((file-ext (if (eq lsp-fsharp-server-runtime 'net-core)
- ".dll"
- ".exe")))
- (expand-file-name (concat "fsautocomplete" file-ext) lsp-fsharp-server-install-dir)))
-
-(defun lsp-fsharp--version-list-latest (lst)
- "Return latest version from LST (if any)."
- (->> lst
- (-map (lambda (x) (car (s-split " " x))))
- (-filter (lambda (x) (> (length x) 0)))
- (-sort (lambda (a b) (not (version<= (substring a 1)
- (substring b 1)))))
- cl-first))
-
-(defun lsp-fsharp--fetch-json (url)
- "Retrieve and parse JSON from URL."
- (with-temp-buffer
- (url-insert-file-contents url)
- (let ((json-false :false))
- (json-read))))
-
-(defun lsp-fsharp--latest-version-from-github ()
- "Return latest version of the server available from github."
- (lsp-fsharp--version-list-latest
- (seq-map (lambda (elt) (s-trim (cdr (assq 'name elt))))
- (lsp-fsharp--fetch-json "https://api.github.com/repos/fsharp/FsAutoComplete/releases"))))
-
-(defun lsp-fsharp--server-download-url (version)
- "Return url for .zip file to download for given VERSION, depending on `lsp-fsharp-server-runtime'."
- (concat "https://github.com/fsharp/FsAutoComplete/releases/download"
- "/" version
- "/" (if (eq lsp-fsharp-server-runtime 'net-core)
- "fsautocomplete.netcore.zip"
- "fsautocomplete.zip")))
-
-(defun lsp-fsharp--fsac-install (_client callback _error-callback _update?)
- "Download the latest version of fsautocomplete and extract it to `lsp-fsharp-server-install-dir'."
- (let* ((temp-file (make-temp-file "fsautocomplete" nil ".zip"))
- (install-dir-full (expand-file-name lsp-fsharp-server-install-dir))
- (unzip-script (cond ((executable-find "unzip") (format "mkdir -p %s && unzip -qq %s -d %s" install-dir-full temp-file install-dir-full))
- ((executable-find "powershell") (format "powershell -noprofile -noninteractive -nologo -ex bypass Expand-Archive -path '%s' -dest '%s'" temp-file install-dir-full))
- (t (user-error (format "Unable to unzip server - file %s cannot be extracted, please extract it manually" temp-file)))))
- (latest-version (lsp-fsharp--latest-version-from-github))
- (server-download-url (lsp-fsharp--server-download-url latest-version)))
- (url-copy-file server-download-url temp-file t)
- (shell-command unzip-script)
- (shell-command (format "%s %s --version" (lsp-fsharp--fsac-runtime-cmd) (lsp-fsharp--fsac-cmd)))
- (funcall callback)))
-
-(defun lsp-fsharp-update-fsac ()
- "Update fsautocomplete to the latest version."
- (interactive)
- (-let [install-dir (f-expand lsp-fsharp-server-install-dir)]
- (f-delete install-dir t)
- (lsp-fsharp--fsac-install nil #'ignore #'lsp--error t)))
-
-(defun lsp-fsharp--make-launch-cmd ()
- "Build the command required to launch fsautocomplete."
- (append (list (lsp-fsharp--fsac-runtime-cmd) (lsp-fsharp--fsac-cmd) "--background-service-enabled")
- lsp-fsharp-server-args))
-
-(defun lsp-fsharp--project-list ()
- "Get the list of files we need to send to fsharp/workspaceLoad."
- (let* ((response (lsp-request "fsharp/workspacePeek"
- `(:directory ,(lsp-workspace-root)
- :deep 10
- :excludedDirs ["paket-files" ".git" "packages" "node_modules"])))
- (data (lsp--read-json (lsp-get response :content)))
- (found (-> data (lsp-get :Data) (lsp-get :Found)))
- (directory (seq-find (lambda (d) (equal "directory" (lsp-get d :Type))) found)))
- (-> directory (lsp-get :Data) (lsp-get :Fsprojs))))
-
-;;;###autoload
-(defun lsp-fsharp--workspace-load (projects)
- "Load all of the provided PROJECTS."
- (lsp-request-async "fsharp/workspaceLoad"
- `(:textDocuments ,(vconcat [] (mapcar (lambda (p) `(:uri ,p)) projects)))
- (lambda (_)
- (lsp--info "Workspace Loaded!"))))
-
-(defvar lsp-fsharp--default-init-options (list)
- "Default init options to be passed to FSharpAutoComplete,
- updated conditionally by `lsp-fsharp--make-init-options'.")
-
-(defun lsp-fsharp--make-init-options ()
- "Init options for F#."
- (-let [opts lsp-fsharp--default-init-options]
- (if lsp-fsharp-auto-workspace-init
- (push '(:AutomaticWorkspaceInit . t) opts)
- opts)))
-
-(lsp-register-custom-settings
- `(("FSharp.KeywordsAutocomplete" lsp-fsharp-keywords-autocomplete t)
- ("FSharp.ExternalAutocomplete" lsp-fsharp-external-autocomplete t)
- ("FSharp.Linter" lsp-fsharp-linter t)
- ("FSharp.UnionCaseStubGeneration" lsp-fsharp-union-case-stub-generation t)
- ("FSharp.UnionCaseStubGenerationBody" lsp-fsharp-union-case-stub-generation-body)
- ("FSharp.RecordStubGeneration" lsp-fsharp-record-stub-generation t)
- ("FSharp.RecordStubGenerationBody" lsp-fsharp-record-stub-generation-body)
- ("FSharp.InterfaceStubGeneration" lsp-fsharp-interface-stub-generation t)
- ("FSharp.InterfaceStubGenerationObjectIdentifier" lsp-fsharp-interface-stub-generation-object-identifier)
- ("FSharp.InterfaceStubGenerationMethodBody" lsp-fsharp-interface-stub-generation-method-body)
- ("FSharp.UnusedOpensAnalyzer" lsp-fsharp-unused-opens-analyzer t)
- ("FSharp.UnusedDeclarationsAnalyzer" lsp-fsharp-unused-declarations-analyzer t)
- ("FSharp.SimplifyNameAnalyzer" lsp-fsharp-simplify-name-analyzer t)
- ("FSharp.ResolveNamespaces" lsp-fsharp-resolve-namespaces t)
- ("FSharp.EnableReferenceCodeLens" lsp-fsharp-enable-reference-code-lens t)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- #'lsp-fsharp--make-launch-cmd
- (lambda () (f-exists? (lsp-fsharp--fsac-cmd))))
- :major-modes '(fsharp-mode)
- :notification-handlers (ht ("fsharp/notifyCancel" #'ignore)
- ("fsharp/notifyWorkspace" #'ignore)
- ("fsharp/fileParsed" #'ignore)
- ("fsharp/notifyWorkspacePeek" #'ignore))
- :initialization-options 'lsp-fsharp--make-init-options
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- ;; Something needs to be calling lsp--set-configuration
- (progn
- (lsp--set-configuration
- (lsp-configuration-section "fsharp"))
- (lsp-fsharp--workspace-load
- (lsp-fsharp--project-list)))))
- :server-id 'fsac
- :download-server-fn #'lsp-fsharp--fsac-install))
-
-(lsp-consistency-check lsp-fsharp)
-
-(provide 'lsp-fsharp)
-;;; lsp-fsharp.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-gdscript.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-gdscript.el
deleted file mode 100644
index 4a52ec8..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-gdscript.el
+++ /dev/null
@@ -1,61 +0,0 @@
-;;; lsp-gdscript.el --- LSP mode -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Oliver Frank
-
-;; Author: Oliver Frank <oliverfrank321@gmail.com>
-;; Keywords: languages
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-gdscript client
-
-;;; Code:
-(require 'lsp-mode)
-
-(defgroup lsp-gdscript nil
- "LSP support for GDScript, using godot's language server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/godotengine/godot")
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-gdscript-port 6008
- "Port to connect server to"
- :type 'integer
- :group 'lsp-gdscript)
-
-(defun lsp-gdscript-tcp-connect-to-port ()
- (list
- :connect (lambda (filter sentinel name _environment-fn)
- (let* ((host "localhost")
- (port lsp-gdscript-port)
- (tcp-proc (lsp--open-network-stream host port (concat name "::tcp"))))
-
- (set-process-query-on-exit-flag tcp-proc nil)
- (set-process-filter tcp-proc filter)
- (set-process-sentinel tcp-proc sentinel)
- (cons tcp-proc tcp-proc)))
- :test? (lambda () t)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-gdscript-tcp-connect-to-port)
- :major-modes '(gdscript-mode)
- :server-id 'gdscript))
-
-
-(lsp-consistency-check lsp-gdscript)(provide 'lsp-gdscript)
-
-
-;;; lsp-gdscript.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-go.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-go.el
deleted file mode 100644
index 880a705..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-go.el
+++ /dev/null
@@ -1,338 +0,0 @@
-;;; lsp-go.el --- Go Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Muir Manders
-
-;; Author: Muir Manders <muir@mnd.rs>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-go client
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'lsp-completion)
-
-(defgroup lsp-go nil
- "LSP support for the Go Programming Language, using the gopls language server."
- :link '(url-link "https://github.com/golang/tools/blob/master/gopls/README.md")
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.3.2"))
-
-(define-obsolete-variable-alias
- 'lsp-gopls-server-path
- 'lsp-go-gopls-server-path
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-gopls-server-path "gopls"
- "Path to gopls server binary."
- :type 'string
- :group 'lsp-go)
-
-(define-obsolete-variable-alias
- 'lsp-gopls-server-args
- 'lsp-go-gopls-server-args
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-gopls-server-args nil
- "Extra CLI arguments for gopls."
- :type '(repeat string)
- :group 'lsp-go)
-
-(define-obsolete-variable-alias
- 'lsp-gopls-use-placeholders
- 'lsp-go-use-placeholders
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-use-placeholders t
- "Cause gopls to provide placeholder parameter snippets when
-completing function calls."
- :type 'boolean
- :group 'lsp-go)
-
-(define-obsolete-variable-alias
- 'lsp-gopls-build-flags
- 'lsp-go-build-flags
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-build-flags []
- "A vector of flags passed on to the build system when invoked,
- applied to queries like `go list'."
- :type 'lsp-string-vector
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "6.2"))
-
-(define-obsolete-variable-alias
- 'lsp-gopls-env
- 'lsp-go-env
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-env nil
- "`gopls' has the unusual ability to set environment variables,
- intended to affect the behavior of commands invoked by `gopls'
- on the user's behalf. This variable takes a hash table of env
- var names to desired values."
- :type '(alist :key-type (string :tag "env var name") :value-type (string :tag "value"))
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "6.2"))
-
-(defcustom lsp-go-directory-filters []
- "A vector of directory filters."
- :link '(url-link "https://github.com/golang/tools/blob/67e49ef2d0f326051e22a4a55bdf9344ae1a8ed8/gopls/doc/settings.md#directoryfilters-string")
- :group 'lsp-go
- :type 'lsp-string-vector
- :package-version '(lsp-mode "7.1"))
-
-(define-obsolete-variable-alias
- 'lsp-gopls-hover-kind
- 'lsp-go-hover-kind
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-hover-kind "SynopsisDocumentation"
- "`gopls' allows the end user to select the desired amount of
- documentation returned during e.g. hover and thing-at-point
- operations."
- :type '(choice (const "SynopsisDocumentation")
- (const "NoDocumentation")
- (const "FullDocumentation")
- (const "SingleLine")
- (const "Structured"))
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "6.2"))
-
-(define-obsolete-variable-alias
- 'lsp-gopls-available-codelens
- 'lsp-go-available-codelenses
- "lsp-mode 7.0.1")
-
-(define-obsolete-variable-alias
- 'lsp-go-available-codelens
- 'lsp-go-available-codelenses
- "lsp-mode 7.0.1")
-
-(defvar lsp-go-available-codelenses
- '(
- (gc_details . "Toggle the calculation of gc annotations")
- (generate . "Run `go generate` for a directory")
- (regenerate_cgo . "Regenerate cgo definitions")
- (test . "Run `go test` for a specific set of test or benchmark functions (lgeacy)")
- (tidy . "Run `go mod tidy` for a module")
- (upgrade_dependency . "Upgrade a dependency")
- (vendor . "Runs `go mod vendor' for a module"))
- "Available codelenses that can be further enabled or disabled
- through `lsp-go-codelenses'.")
-
-(defun lsp-go--defcustom-available-as-alist-type (alist)
- "Returns a list suitable for the `:type' field in a `defcustom' used to populate an alist.
-
-The input ALIST has the form `((\"name\" . \"documentation sentence\") [...])'
-
-The returned type provides a tri-state that either:
- - does not include the element in the alist
- - sets element to false (actually, :json-false)
- - sets element to true (actually, t)
-"
- (let ((list '()))
- (dolist (v alist)
- (push `(cons
- :tag ,(cdr v)
- (const :format "" ,(car v))
- (choice (const :tag "Enable" t) (const :tag "Disable" :json-false)))
- list))
- (push 'set list)
- list))
-
-(define-obsolete-variable-alias
- 'lsp-gopls-codelens
- 'lsp-go-codelenses
- "lsp-mode 7.0.1")
-
-(define-obsolete-variable-alias
- 'lsp-go-codelens
- 'lsp-go-codelenses
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-codelenses '((gc_details . :json-false)
- (generate . t)
- (regenerate_cgo . t)
- (tidy . t)
- (upgrade_dependency . t)
- (test . t)
- (vendor . t))
- "Select what codelenses should be enabled or not.
-
-The codelenses can be found at https://github.com/golang/tools/blob/3fa0e8f87c1aae0a9adc2a63af1a1945d16d9359/internal/lsp/source/options.go#L106-L112."
- :type (lsp-go--defcustom-available-as-alist-type lsp-go-available-codelenses)
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "7.0"))
-
-(define-obsolete-variable-alias
- 'lsp-clients-go-library-directories
- 'lsp-go-library-directories
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-library-directories '("/usr")
- "List of directories which will be considered to be libraries."
- :group 'lsp-go
- :risky t
- :type '(repeat string))
-
-(define-obsolete-variable-alias
- 'lsp-clients-go-library-directories-include-go-modules
- 'lsp-go-library-directories-include-go-modules
- "lsp-mode 7.0.1")
-
-(defcustom lsp-go-library-directories-include-go-modules t
- "Whether or not $GOPATH/pkg/mod should be included as a library directory."
- :type 'boolean
- :group 'lsp-go)
-
-(defun lsp-go--library-default-directories (_workspace)
- "Calculate go library directories.
-
-If `lsp-go-library-directories-include-go-modules' is non-nil
-and the environment variable GOPATH is set this function will return
-$GOPATH/pkg/mod along with the value of
-`lsp-go-library-directories'."
- (let ((library-dirs lsp-go-library-directories))
- (when (and lsp-go-library-directories-include-go-modules
- (or (and (not (file-remote-p default-directory)) (executable-find "go"))
- (and (version<= "27.0" emacs-version) (with-no-warnings (executable-find "go" (file-remote-p default-directory))))))
- (with-temp-buffer
- (when (zerop (process-file "go" nil t nil "env" "GOPATH"))
- (setq library-dirs
- (append
- library-dirs
- (list
- (concat
- (string-trim-right (buffer-substring (point-min) (point-max)))
- "/pkg/mod")))))))
- (if (file-remote-p default-directory)
- (mapcar (lambda (path) (concat (file-remote-p default-directory) path)) library-dirs)
- library-dirs)))
-
-(defcustom lsp-go-link-target "godoc.org"
- "Which website to use for displaying Go documentation."
- :type '(choice (const "godoc.org")
- (const "pkg.go.dev")
- (string :tag "A custom website"))
- :group 'lsp-go
- :package-version '(lsp-mode "7.0.1"))
-
-(defcustom lsp-go-links-in-hover t
- "If non-nil, hover documentation includes links."
- :type 'boolean
- :group 'lsp-go
- :package-version '(lsp-mode "7.1"))
-
-(defcustom lsp-go-use-gofumpt nil
- "If non-nil, use gofumpt formatting."
- :type 'boolean
- :group 'lsp-go
- :package-version '(lsp-mode "7.1"))
-
-(defcustom lsp-go-goimports-local ""
- "Equivalent of the goimports -local flag, which puts imports beginning with
- this string after third-party packages. It should be the prefix of the import
- path whose imports should be grouped separately."
- :type 'string
- :group 'lsp-go
- :package-version '(lsp-mode "7.1"))
-
-(defcustom lsp-go-analyses nil
- "Specify analyses that the user would like to enable or disable. A map of the
- names of analysis passes that should be enabled/disabled. A full list of
- analyzers that gopls uses can be found at
- https://github.com/golang/tools/blob/master/gopls/doc/analyzers.md"
- :type '(alist :key-type (string :tag "analyzer name") :value-type (boolean :tag "value"))
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "7.1"))
-
-(defcustom lsp-go-import-shortcut "Both"
- "Specifies whether import statements should link to documentation or go to
- definitions."
- :type '(choice (const "Both")
- (const "Link")
- (const "Definition"))
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "7.1"))
-
-(defcustom lsp-go-symbol-matcher "Fuzzy"
- "Sets the algorithm that is used when finding workspace symbols."
- :type '(choice (const "Fuzzy")
- (const "CaseInsensitive")
- (const "CaseSensitive"))
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "7.1"))
-
-(defcustom lsp-go-symbol-style "Dynamic"
- "Controls how symbols are qualified in symbol responses.
-
- 'Dynamic' uses whichever qualifier results in the highest scoring match for
- the given symbol query. Here a 'qualifier' is any '/' or '.' delimited suffix
- of the fully qualified symbol. i.e. 'to/pkg.Foo.Field' or just 'Foo.Field'.
-
- 'Full' is fully qualified symbols, i.e. 'path/to/pkg.Foo.Field'.
-
- 'Package' is package qualified symbols i.e. 'pkg.Foo.Field'."
- :type '(choice (const "Dynamic")
- (const "Full")
- (const "Package"))
- :group 'lsp-go
- :risky t
- :package-version '(lsp-mode "7.1"))
-
-(lsp-register-custom-settings
- '(("gopls.usePlaceholders" lsp-go-use-placeholders t)
- ("gopls.hoverKind" lsp-go-hover-kind)
- ("gopls.buildFlags" lsp-go-build-flags)
- ("gopls.env" lsp-go-env)
- ("gopls.linkTarget" lsp-go-link-target)
- ("gopls.codelenses" lsp-go-codelenses)
- ("gopls.linksInHover" lsp-go-links-in-hover t)
- ("gopls.gofumpt" lsp-go-use-gofumpt t)
- ("gopls.local" lsp-go-goimports-local)
- ("gopls.directoryFilters" lsp-go-directory-filters)
- ("gopls.analyses" lsp-go-analyses)
- ("gopls.importShortcut" lsp-go-import-shortcut)
- ("gopls.symbolMatcher" lsp-go-symbol-matcher)
- ("gopls.symbolStyle" lsp-go-symbol-style)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda () (cons lsp-go-gopls-server-path lsp-go-gopls-server-args)))
- :major-modes '(go-mode go-dot-mod-mode)
- :language-id "go"
- :priority 0
- :server-id 'gopls
- :completion-in-comments? t
- :library-folders-fn #'lsp-go--library-default-directories
- :after-open-fn (lambda ()
- ;; https://github.com/golang/tools/commit/b2d8b0336
- (setq-local lsp-completion-filter-on-incomplete nil))))
-
-(lsp-consistency-check lsp-go)
-
-(provide 'lsp-go)
-;;; lsp-go.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-groovy.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-groovy.el
deleted file mode 100644
index c1fcaaf..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-groovy.el
+++ /dev/null
@@ -1,66 +0,0 @@
-;;; lsp-groovy.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, groovy
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Groovy Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'f)
-
-(defgroup lsp-groovy nil
- "LSP support for Groovy, using groovy-language-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/prominic/groovy-language-server"))
-
-(defcustom lsp-groovy-server-file (f-join lsp-server-install-dir "groovy-language-server-all.jar")
- "JAR file path for groovy-language-server-all.jar."
- :group 'lsp-groovy
- :risky t
- :type 'file)
-
-(defun lsp-groovy--lsp-command ()
- "Generate LSP startup command."
- `("java" "-jar" ,(expand-file-name lsp-groovy-server-file)))
-
-(defcustom lsp-groovy-classpath ["/usr/local/opt/groovy/libexec/lib"]
- "List of paths to Groovy JARs."
- :group 'lsp-groovy
- :risky t
- :type 'lsp-string-vector)
-
-(lsp-register-custom-settings
- '(("groovy.classpath" lsp-groovy-classpath)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection 'lsp-groovy--lsp-command)
- :major-modes '(groovy-mode)
- :priority -1
- :server-id 'groovy-ls
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration (lsp-configuration-section "groovy"))))))
-
-(lsp-consistency-check lsp-groovy)
-
-(provide 'lsp-groovy)
-;;; lsp-groovy.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-hack.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-hack.el
deleted file mode 100644
index 161659a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-hack.el
+++ /dev/null
@@ -1,54 +0,0 @@
-;;; lsp-xxx.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, hack
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Hack Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-hack nil
- "LSP support for Hack, using HHVM."
- :group 'lsp-mode
- :link '(url-link "https://docs.hhvm.com/hhvm"))
-
-(defcustom lsp-clients-hack-command '("hh_client" "lsp" "--from" "emacs")
- "Command to start hh_client."
- :group 'lsp-hack
- :risky t
- :type '(repeat string))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda () lsp-clients-hack-command))
- :major-modes '(hack-mode)
- :priority -1
- :server-id 'hack
- ;; ignore some unsupported messages from Nuclide
- :notification-handlers (lsp-ht ("telemetry/event" 'ignore)
- ("$/cancelRequest" 'ignore))
- :request-handlers (lsp-ht ("window/showStatus" 'ignore))))
-
-
-(lsp-consistency-check lsp-hack)
-
-(provide 'lsp-hack)
-;;; lsp-hack.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-haxe.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-haxe.el
deleted file mode 100644
index 62707be..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-haxe.el
+++ /dev/null
@@ -1,226 +0,0 @@
-;;; lsp-haxe.el --- Haxe Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Yannik Böttcher
-
-;; Author: Yannik Böttcher <yannikboettcher@outlook.de>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-haxe client
-
-;;; Code:
-
-
-;; adapted from lsp-clangd configuration
-(require 'lsp-protocol)
-(require 'lsp-mode)
-
-(defgroup lsp-haxe nil
- "LSP support for Haxe using the language server provided by vshaxe"
- :group 'lsp-mode
- :link '(url-link "https://github.com/vshaxe/vshaxe"))
-
-
-;; Haxe ls is executed via node
-(defcustom lsp-clients--haxe-executable "node"
- "Haxe ls is executed via node."
- :group 'lsp-haxe
- :risky t
- :type 'file)
-
-;; The server.js is being passed to node as an argument
-(defcustom lsp-clients--haxe-server-path (expand-file-name "~/.haxe-language-server/bin/server.js")
- "The path to the server.js file."
- :group 'lsp-haxe
- :risky t
- :type 'file)
-
-;; Build the actual Haxe ls command.
-(defun lsp-clients--haxe-command ()
- "Haxe ls startup command."
- `(,lsp-clients--haxe-executable ,lsp-clients--haxe-server-path))
-
-;; https://github.com/yyoncho/lsp-mode/commit/72186e1adc089d772c87ed8f287eb3333b66bfa7
-;; This is to force the client to send a didChangeConfiguration Message. Without this, the server won't start, https://github.com/vshaxe/vshaxe/issues/328#issuecomment-471809093
-(defcustom lsp-clients--haxe-settings (list :haxe.executable "haxe")
- "Lsp clients configuration settings."
- :group 'lsp-haxe
- :risky t
- :type '(repeat string))
-
-;; The build spec for the project.
-(defcustom lsp-haxe-hxml "build.hxml"
- "The compile file for the haxe project."
- :type 'file
- :group 'lsp-haxe
- :package-version '(lsp-mode . "7.0"))
-
-;; https://github.com/emacs-lsp/lsp-mode/blob/150a933694349df960dc8fd7a15e04f5727e6433/lsp-rust.el#L251
-(lsp-defun lsp-clients--haxe-processStart (_workspace (&haxe:ProcessStartNotification :title))
- "Handle processStart notification. Just logs PARAMS."
- (lsp-log title))
-
-(defcustom lsp-haxe-executable "haxe"
- nil
- :type 'file
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-configurations nil
- nil
- :type '(repeat string)
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-display-configurations nil
- nil
- :type '(repeat string)
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-display-server nil
- nil
- :type 'string
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-display-port "auto"
- nil
- :type 'number
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-enable-compilation-server t
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-task-presentation
- '((echo . t)
- (reveal . "always")
- (focus . :json-false)
- (panel . "shared")
- (showReuseMessage . t)
- (clear . :json-false))
- nil
- :type 'plist
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-enable-code-lens t
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-enable-diagnostics t
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-enable-server-view nil
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-enable-methods-view nil
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-enable-signature-help-documentation t
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-diagnostics-path-filter "${workspaceRoot}"
- nil
- :type 'string
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-build-completion-cache t
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-enable-completion-cache-warning t
- nil
- :type 'boolean
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-code-generation nil
- nil
- :type 'string
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-exclude ["zpp_nape"]
- nil
- :type '(repeat string)
- :group 'lsp-haxe)
-
-(defcustom lsp-haxe-postfix-completion nil
- nil
- :type 'string
- :group 'lsp-haxe)
-
-(lsp-register-custom-settings
- '(("haxe.hxml" lsp-haxe-hxml)
- ("haxe.postfixCompletion" lsp-haxe-postfix-completion)
- ("haxe.exclude" lsp-haxe-exclude)
- ("haxe.codeGeneration" lsp-haxe-code-generation)
- ("haxe.enableCompletionCacheWarning" lsp-haxe-enable-completion-cache-warning t)
- ("haxe.buildCompletionCache" lsp-haxe-build-completion-cache t)
- ("haxe.diagnosticsPathFilter" lsp-haxe-diagnostics-path-filter)
- ("haxe.enableSignatureHelpDocumentation" lsp-haxe-enable-signature-help-documentation t)
- ("haxe.enableMethodsView" lsp-haxe-enable-methods-view t)
- ("haxe.enableServerView" lsp-haxe-enable-server-view t)
- ("haxe.enableDiagnostics" lsp-haxe-enable-diagnostics t)
- ("haxe.enableCodeLens" lsp-haxe-enable-code-lens t)
- ("haxe.taskPresentation" lsp-haxe-task-presentation)
- ("haxe.enableCompilationServer" lsp-haxe-enable-compilation-server t)
- ("haxe.displayPort" lsp-haxe-display-port)
- ("haxe.displayServer" lsp-haxe-display-server)
- ("haxe.displayConfigurations" lsp-haxe-display-configurations)
- ("haxe.configurations" lsp-haxe-configurations)
- ("haxe.executable" lsp-haxe-executable)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection #'lsp-clients--haxe-command)
- :major-modes '(haxe-mode) ; force didChangeConfiguration message
- :initialized-fn
- (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration (lsp-configuration-section "haxe"))))
- :priority -1
- :server-id 'haxe
- :initialization-options
- (lambda ()
- `(:sendMethodResults t
- :haxelibConfig (:executable "haxelib")
- :displayServerConfig
- ( :print (:reusing :json-false :completion :json-false)
- :arguments []
- :env nil
- :path "haxe")
- :displayArguments [,lsp-haxe-hxml]))
- :notification-handlers
- (lsp-ht ("haxe/progressStart" 'lsp-clients--haxe-processStart)
- ("haxe/progressStop" 'ignore)
- ("haxe/didDetectOldPreview" 'ignore)
- ("haxe/didChangeDisplayPort" 'ignore)
- ("haxe/didRunHaxeMethod" 'ignore)
- ("haxe/didChangeRequestQueue" 'ignore)
- ("haxe/cacheBuildFailed" 'ignore))))
-
-(lsp-consistency-check lsp-haxe)
-
-(provide 'lsp-haxe)
-;;; lsp-haxe.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-headerline.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-headerline.el
deleted file mode 100644
index 3ed62e5..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-headerline.el
+++ /dev/null
@@ -1,473 +0,0 @@
-;;; lsp-headerline.el --- LSP headerline features -*- lexical-binding: t; -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; LSP headerline features
-;;
-;;; Code:
-
-(require 'lsp-icons)
-(require 'lsp-mode)
-
-(defgroup lsp-headerline nil
- "LSP support for headerline"
- :prefix "lsp-headerline-"
- :group 'lsp-mode
- :tag "LSP Headerline")
-
-(defcustom lsp-headerline-breadcrumb-segments '(path-up-to-project file symbols)
- "Segments used in breadcrumb text on headerline."
- :type '(repeat
- (choice (const :tag "Include the project name." project)
- (const :tag "Include the open file name." file)
- (const :tag "Include the directories up to project." path-up-to-project)
- (const :tag "Include document symbols if server supports it." symbols)))
- :group 'lsp-headerline)
-
-(defcustom lsp-headerline-breadcrumb-enable-symbol-numbers nil
- "Whether to label symbols with numbers on the breadcrumb."
- :type 'boolean
- :group 'lsp-headerline)
-
-(defcustom lsp-headerline-breadcrumb-enable-diagnostics t
- "If non-nil, apply different face on the breadcrumb based on the errors."
- :type 'boolean
- :group 'lsp-headerline
- :package-version '(lsp-mode . "7.1"))
-
-(defface lsp-headerline-breadcrumb-separator-face '((t :inherit shadow :height 0.8))
- "Face used for breadcrumb separator on headerline."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-path-face '((t :inherit font-lock-string-face))
- "Face used for breadcrumb paths on headerline."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-path-error-face
- '((t :underline (:style wave :color "Red1")
- :inherit lsp-headerline-breadcrumb-path-face))
- "Face used for breadcrumb paths on headerline when there is an error under that path"
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-path-warning-face
- '((t :underline (:style wave :color "Yellow")
- :inherit lsp-headerline-breadcrumb-path-face))
- "Face used for breadcrumb paths on headerline when there is an warning under that path"
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-path-info-face
- '((t :underline (:style wave :color "Green")
- :inherit lsp-headerline-breadcrumb-path-face))
- "Face used for breadcrumb paths on headerline when there is an info under that path"
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-path-hint-face
- '((t :underline (:style wave :color "Green")
- :inherit lsp-headerline-breadcrumb-path-face))
- "Face used for breadcrumb paths on headerline when there is an hint under that path"
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-project-prefix-face
- '((t :inherit font-lock-string-face :weight bold))
- "Face used for breadcrumb prefix on headerline.
-Only if `lsp-headerline-breadcrumb-prefix` is `project-name-only`."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-unknown-project-prefix-face
- '((t :inherit shadow :weight bold))
- "Face used for breadcrumb prefix on headerline.
-Only if `lsp-headerline-breadcrumb-prefix` is `project-name-only`."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-symbols-face
- '((t :inherit font-lock-doc-face :weight bold))
- "Face used for breadcrumb symbols text on headerline."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-symbols-error-face
- '((t :inherit lsp-headerline-breadcrumb-symbols-face
- :underline (:style wave :color "Red1")))
- "Face used for breadcrumb symbols text on headerline when there
-is an error in symbols range."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-symbols-warning-face
- '((t :inherit lsp-headerline-breadcrumb-symbols-face
- :underline (:style wave :color "Yellow")))
- "Face used for breadcrumb symbols text on headerline when there
-is an warning in symbols range."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-symbols-info-face
- '((t :inherit lsp-headerline-breadcrumb-symbols-face
- :underline (:style wave :color "Green")))
- "Face used for breadcrumb symbols text on headerline when there
-is an info in symbols range."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-symbols-hint-face
- '((t :inherit lsp-headerline-breadcrumb-symbols-face
- :underline (:style wave :color "Green")))
- "Face used for breadcrumb symbols text on headerline when there
-is an hints in symbols range."
- :group 'lsp-headerline)
-
-(defface lsp-headerline-breadcrumb-deprecated-face
- '((t :inherit lsp-headerline-breadcrumb-symbols-face
- :strike-through t))
- "Face used on breadcrumb deprecated text on modeline."
- :group 'lsp-headerline)
-
-(defvar-local lsp-headerline--string nil
- "Holds the current breadcrumb string on headerline.")
-
-(defvar lsp-headerline-arrow nil
- "Holds the current breadcrumb string on headerline.")
-
-(defvar-local lsp-headerline--path-up-to-project-segments nil
- "Holds the current breadcrumb path-up-to-project segments for
-caching purposes.")
-
-(defun lsp-headerline--arrow-icon ()
- "Build the arrow icon for headerline breadcrumb."
- (or
- lsp-headerline-arrow
- (setq lsp-headerline-arrow (lsp-icons-all-the-icons-material-icon
- "chevron_right"
- 'lsp-headerline-breadcrumb-separator-face
- ">"
- 'headerline-breadcrumb))))
-
-(lsp-defun lsp-headerline--symbol-icon ((&DocumentSymbol :kind))
- "Build the SYMBOL icon for headerline breadcrumb."
- (concat (lsp-icons-get-by-symbol-kind kind 'headerline-breadcrumb)
- " "))
-
-(lsp-defun lsp-headerline--go-to-symbol ((&DocumentSymbol
- :selection-range (&RangeToPoint :start selection-start)
- :range (&RangeToPoint :start narrowing-start
- :end narrowing-end)))
- "Go to breadcrumb symbol.
-If the buffer is narrowed and the target symbol lies before the
-minimum reachable point in the narrowed buffer, then widen and
-narrow to the outer symbol."
- (when (buffer-narrowed-p)
- (narrow-to-region
- (min (point-min) narrowing-start)
- (max (point-max) narrowing-end)))
- (goto-char selection-start))
-
-(lsp-defun lsp-headerline--narrow-to-symbol ((&DocumentSymbol :range (&RangeToPoint :start :end)))
- "Narrow to breadcrumb symbol range."
- (narrow-to-region start end))
-
-(defun lsp-headerline--with-action (local-map help-echo-string display-string)
- "Assign LOCAL-MAP and HELP-ECHO-STRING to the region around the DISPLAY-STRING."
- (propertize display-string
- 'mouse-face 'header-line-highlight
- 'help-echo help-echo-string
- 'local-map local-map))
-
-(defmacro lsp-headerline--make-mouse-handler (&rest body)
- "Making mouse event handler.
-Switch to current mouse interacting window before doing BODY."
- (declare (debug t) (indent 0))
- `(lambda (event)
- (interactive "e")
- (select-window (posn-window (elt event 1)))
- ,@body))
-
-(defun lsp-headerline--directory-with-action (full-path directory-display-string)
- "Build action for FULL-PATH and DIRECTORY-DISPLAY-STRING."
- (lsp-headerline--with-action (let ((map (make-sparse-keymap)))
- (define-key map [header-line mouse-1]
- (lsp-headerline--make-mouse-handler
- (dired full-path)))
- (define-key map [header-line mouse-2]
- (lsp-headerline--make-mouse-handler
- (dired-other-window full-path)))
- map)
- (format "mouse-1: browse '%s' with Dired\nmouse-2: browse '%s' with Dired in other window"
- directory-display-string
- directory-display-string)
- (propertize directory-display-string
- 'lsp-full-path full-path)))
-
-(declare-function evil-set-jump "ext:evil-jumps")
-
-(lsp-defun lsp-headerline--symbol-with-action ((symbol &as &DocumentSymbol :name) symbol-display-string)
- "Build action for SYMBOL and SYMBOL-STRING."
- (lsp-headerline--with-action (let ((map (make-sparse-keymap)))
- (define-key map [header-line mouse-1]
- (lsp-headerline--make-mouse-handler
- (when (bound-and-true-p evil-mode)
- (evil-set-jump))
- (lsp-headerline--go-to-symbol symbol)))
- (define-key map [header-line mouse-2]
- (lsp-headerline--make-mouse-handler
- (-let (((&DocumentSymbol :range (&RangeToPoint :start :end)) symbol))
- (if (and (eq (point-min) start) (eq (point-max) end))
- (widen)
- (lsp-headerline--narrow-to-symbol symbol)))))
- map)
- (format "mouse-1: go to '%s' symbol\nmouse-2: %s"
- name
- (-let (((&DocumentSymbol :range (&RangeToPoint :start :end)) symbol))
- (if (and (eq (point-min) start) (eq (point-max) end))
- "widen"
- (format "narrow to '%s' range" name))))
- symbol-display-string))
-
-(defun lsp-headerline--path-up-to-project-root (root-path path)
- "Find recursively the folders until the project ROOT-PATH.
-PATH is the current folder to be checked."
- (let ((current-path path)
- headerline-path-components)
- (while (not (lsp-f-same? root-path current-path))
- (push (lsp-headerline--directory-with-action current-path
- (f-filename current-path))
- headerline-path-components)
- (setq current-path (lsp-f-parent current-path)))
- headerline-path-components))
-
-(defun lsp-headerline--build-project-string ()
- "Build the project-segment string for the breadcrumb."
- (-if-let (root (lsp-workspace-root))
- (propertize (lsp-headerline--directory-with-action
- root
- (f-filename root))
- 'font-lock-face
- 'lsp-headerline-breadcrumb-project-prefix-face)
- (propertize "<unknown>"
- 'font-lock-face
- 'lsp-headerline-breadcrumb-unknown-project-prefix-face)))
-
-(defun lsp-headerline--build-file-string ()
- "Build the file-segment string for the breadcrumb."
- (let* ((file-path (buffer-file-name))
- (filename (f-filename file-path)))
- (if-let ((file-ext (f-ext file-path)))
- (concat (lsp-icons-get-by-file-ext file-ext 'headerline-breadcrumb)
- " "
- (propertize filename
- 'font-lock-face
- (lsp-headerline--face-for-path file-path)))
- filename)))
-
-
-(defun lsp-headerline--face-for-path (dir)
- "Calculate the face for DIR."
- (if-let ((diags (lsp-diagnostics-stats-for (directory-file-name dir))))
- (cl-labels ((check-severity
- (severity)
- (not (zerop (aref diags severity)))))
- (cond
- ((not lsp-headerline-breadcrumb-enable-diagnostics)
- 'lsp-headerline-breadcrumb-path-face)
- ((check-severity lsp/diagnostic-severity-error)
- 'lsp-headerline-breadcrumb-path-error-face)
- ((check-severity lsp/diagnostic-severity-warning)
- 'lsp-headerline-breadcrumb-path-warning-face)
- ((check-severity lsp/diagnostic-severity-information)
- 'lsp-headerline-breadcrumb-path-info-face)
- ((check-severity lsp/diagnostic-severity-hint)
- 'lsp-headerline-breadcrumb-path-hint-face)
- (t 'lsp-headerline-breadcrumb-path-face)))
- 'lsp-headerline-breadcrumb-path-face))
-
-(defun lsp-headerline--severity-level-for-range (range)
- "Get the severiy level for RANGE."
- (let ((range-severity 10))
- (mapc (-lambda ((&Diagnostic :range (&Range :start) :severity?))
- (when (lsp-point-in-range? start range)
- (setq range-severity (min range-severity severity?))))
- (lsp--get-buffer-diagnostics))
- range-severity))
-
-(defun lsp-headerline--build-path-up-to-project-string ()
- "Build the path-up-to-project segment for the breadcrumb."
- (if-let ((root (lsp-workspace-root)))
- (let ((segments (or
- lsp-headerline--path-up-to-project-segments
- (setq lsp-headerline--path-up-to-project-segments
- (lsp-headerline--path-up-to-project-root
- root
- (lsp-f-parent (buffer-file-name)))))))
- (mapconcat (lambda (next-dir)
- (propertize next-dir
- 'font-lock-face
- (lsp-headerline--face-for-path
- (get-text-property
- 0 'lsp-full-path next-dir))))
- segments
- (concat " " (lsp-headerline--arrow-icon) " ")))
- ""))
-
-(lsp-defun lsp-headerline--face-for-symbol ((&DocumentSymbol :deprecated?
- :range))
- "Get the face for SYMBOL."
- (let ((range-severity (lsp-headerline--severity-level-for-range range)))
- (cond
- (deprecated? 'lsp-headerline-breadcrumb-deprecated-face)
- ((not lsp-headerline-breadcrumb-enable-diagnostics)
- 'lsp-headerline-breadcrumb-symbols-face)
- ((= range-severity lsp/diagnostic-severity-error)
- 'lsp-headerline-breadcrumb-symbols-error-face)
- ((= range-severity lsp/diagnostic-severity-warning)
- 'lsp-headerline-breadcrumb-symbols-warning-face)
- ((= range-severity lsp/diagnostic-severity-information)
- 'lsp-headerline-breadcrumb-symbols-info-face)
- ((= range-severity lsp/diagnostic-severity-hint)
- 'lsp-headerline-breadcrumb-symbols-hint-face)
- (t 'lsp-headerline-breadcrumb-symbols-face))))
-
-(defun lsp-headerline--build-symbol-string ()
- "Build the symbol segment for the breadcrumb."
- (if (lsp-feature? "textDocument/documentSymbol")
- (-if-let* ((lsp--document-symbols-request-async t)
- (symbols (lsp--get-document-symbols))
- (symbols-hierarchy (lsp--symbols->document-symbols-hierarchy symbols))
- (enumerated-symbols-hierarchy
- (-map-indexed (lambda (index elt)
- (cons elt (1+ index)))
- symbols-hierarchy)))
- (mapconcat
- (-lambda (((symbol &as &DocumentSymbol :name)
- . index))
- (let* ((symbol2-name
- (propertize name
- 'font-lock-face
- (lsp-headerline--face-for-symbol symbol)))
- (symbol2-icon (lsp-headerline--symbol-icon symbol))
- (full-symbol-2
- (concat
- (if lsp-headerline-breadcrumb-enable-symbol-numbers
- (concat
- (propertize (number-to-string index)
- 'face
- 'lsp-headerline-breadcrumb-symbols-face)
- " ")
- "")
- (if symbol2-icon
- (concat symbol2-icon symbol2-name)
- symbol2-name))))
- (lsp-headerline--symbol-with-action symbol full-symbol-2)))
- enumerated-symbols-hierarchy
- (concat " " (lsp-headerline--arrow-icon) " "))
- "")
- ""))
-
-(defun lsp-headerline--build-string ()
- "Build the header-line string."
- (string-trim-right
- (mapconcat
- (lambda (segment)
- (let ((segment-string
- (pcase segment
- ('project (lsp-headerline--build-project-string))
- ('file (lsp-headerline--build-file-string))
- ('path-up-to-project (lsp-headerline--build-path-up-to-project-string))
- ('symbols (lsp-headerline--build-symbol-string))
- (_ (lsp-log "'%s' is not a valid entry for `lsp-headerline-breadcrumb-segments'"
- (symbol-name segment))
- ""))))
- (if (eq segment-string "")
- ""
- (concat (lsp-headerline--arrow-icon)
- " "
- segment-string
- " "))))
- lsp-headerline-breadcrumb-segments
- "")))
-
-(defun lsp-headerline--check-breadcrumb (&rest _)
- "Request for document symbols to build the breadcrumb."
- (setq lsp-headerline--string (lsp-headerline--build-string))
- (force-mode-line-update))
-
-(defun lsp-headerline--enable-breadcrumb ()
- "Enable headerline breadcrumb mode."
- (when (and lsp-headerline-breadcrumb-enable
- (lsp-feature? "textDocument/documentSymbol"))
- (lsp-headerline-breadcrumb-mode 1)))
-
-(defun lsp-headerline--disable-breadcrumb ()
- "Disable headerline breadcrumb mode."
- (lsp-headerline-breadcrumb-mode -1))
-
-;;;###autoload
-(define-minor-mode lsp-headerline-breadcrumb-mode
- "Toggle breadcrumb on headerline."
- :group 'lsp-headerline
- :global nil
- (cond
- (lsp-headerline-breadcrumb-mode
- (add-to-list 'header-line-format '(t (:eval lsp-headerline--string)))
-
- (add-hook 'xref-after-jump-hook #'lsp-headerline--check-breadcrumb nil t)
-
- (add-hook 'lsp-on-idle-hook #'lsp-headerline--check-breadcrumb nil t)
- (add-hook 'lsp-configure-hook #'lsp-headerline--enable-breadcrumb nil t)
- (add-hook 'lsp-unconfigure-hook #'lsp-headerline--disable-breadcrumb nil t))
- (t
- (remove-hook 'lsp-on-idle-hook #'lsp-headerline--check-breadcrumb t)
- (remove-hook 'lsp-configure-hook #'lsp-headerline--enable-breadcrumb t)
- (remove-hook 'lsp-unconfigure-hook #'lsp-headerline--disable-breadcrumb t)
-
- (remove-hook 'xref-after-jump-hook #'lsp-headerline--check-breadcrumb t)
-
- (setq lsp-headerline--path-up-to-project-segments nil)
- (setq header-line-format (remove '(t (:eval lsp-headerline--string)) header-line-format)))))
-
-;;;###autoload
-(defun lsp-breadcrumb-go-to-symbol (symbol-position)
- "Go to the symbol on breadcrumb at SYMBOL-POSITION."
- (interactive "P")
- (if (numberp symbol-position)
- (if (lsp-feature? "textDocument/documentSymbol")
- (-if-let* ((lsp--document-symbols-request-async t)
- (symbols (lsp--get-document-symbols))
- (symbols-hierarchy (lsp--symbols->document-symbols-hierarchy symbols)))
- (lsp-headerline--go-to-symbol (nth (1- symbol-position) symbols-hierarchy))
- (lsp--info "Symbol not found for position %s" symbol-position))
- (lsp--info "Server does not support breadcrumb."))
- (lsp--info "Call this function with a number representing the symbol position on breadcrumb")))
-
-(declare-function evil-set-command-property "ext:evil-common")
-
-(with-eval-after-load 'evil
- (evil-set-command-property 'lsp-breadcrumb-go-to-symbol :jump t))
-
-;;;###autoload
-(defun lsp-breadcrumb-narrow-to-symbol (symbol-position)
- "Narrow to the symbol range on breadcrumb at SYMBOL-POSITION."
- (interactive "P")
- (if (numberp symbol-position)
- (if (lsp-feature? "textDocument/documentSymbol")
- (-if-let* ((lsp--document-symbols-request-async t)
- (symbols (lsp--get-document-symbols))
- (symbols-hierarchy (lsp--symbols->document-symbols-hierarchy symbols)))
- (lsp-headerline--narrow-to-symbol (nth (1- symbol-position) symbols-hierarchy))
- (lsp--info "Symbol not found for position %s" symbol-position))
- (lsp--info "Server does not support breadcrumb."))
- (lsp--info "Call this function with a number representing the symbol position on breadcrumb")))
-
-(lsp-consistency-check lsp-headerline)
-
-(provide 'lsp-headerline)
-;;; lsp-headerline.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-html.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-html.el
deleted file mode 100644
index 0b44e16..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-html.el
+++ /dev/null
@@ -1,198 +0,0 @@
-;;; lsp-html.el --- vscode-html-languageserver configuration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Vibhav Pant
-
-;; Author: Vibhav Pant <vibhavp@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-html nil
- "LSP support for HTML, using vscode-html-languageserver."
- :group 'lsp-mode
- :link '(url-link "https://github.com/vscode-langservers/vscode-html-languageserver")
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-experimental-custom-data nil
- "A list of JSON file paths that define custom tags, properties and other HTML
-syntax constructs. Only workspace folder setting will be read."
- :type '(choice (const nil) string)
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-enable t
- "Enable/disable default HTML formatter."
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-wrap-line-length 120
- "Maximum amount of characters per line (0 = disable)."
- :type 'number
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-unformatted "wbr"
- nil
- :type '(choice (const nil) string)
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-content-unformatted "pre,code,textarea"
- nil
- :group 'lsp-html
- :type '(choice (const nil) string)
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-indent-inner-html nil
- nil
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-preserve-new-lines t
- "Controls whether existing line breaks before elements should be preserved.
-Only works before elements, not inside tags or for text."
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-max-preserve-new-lines nil
- nil
- :type '(choice (const nil) integer)
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-indent-handlebars nil nil
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-end-with-newline nil
- "End with a newline."
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-extra-liners "head, body, /html"
- nil
- :type '(choice (const nil) string)
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-format-wrap-attributes "auto"
- "Wrap attributes."
- :type '(choice
- (const "auto")
- (const "force")
- (const "force-aligned")
- (const "force-expand-multiline")
- (const "aligned-multiple")
- (const "preserve")
- (const "preserve-aligned"))
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-suggest-html5 t
- "Controls whether the built-in HTML language support suggests HTML5 tags,
-properties and values."
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-validate-scripts t
- "Controls whether the built-in HTML language support validates embedded
-scripts."
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-validate-styles t
- "Controls whether the built-in HTML language support validates embedded
-styles."
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-auto-closing-tags t
- "Enable/disable autoclosing of HTML tags."
- :type 'boolean
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-html-trace-server "off"
- "Traces the communication between VS Code and the HTML language server."
- :type '(choice
- (const "off")
- (const "messages")
- (const "verbose"))
- :group 'lsp-html
- :package-version '(lsp-mode . "6.1"))
-
-(lsp-register-custom-settings
- '(("html.trace.server" lsp-html-trace-server)
- ("html.autoClosingTags" lsp-html-auto-closing-tags t)
- ("html.validate.styles" lsp-html-validate-styles t)
- ("html.validate.scripts" lsp-html-validate-scripts t)
- ("html.suggest.html5" lsp-html-suggest-html5 t)
- ("html.format.wrapAttributes" lsp-html-format-wrap-attributes)
- ("html.format.extraLiners" lsp-html-format-extra-liners)
- ("html.format.endWithNewline" lsp-html-format-end-with-newline t)
- ("html.format.indentHandlebars" lsp-html-format-indent-handlebars t)
- ("html.format.maxPreserveNewLines" lsp-html-format-max-preserve-new-lines)
- ("html.format.preserveNewLines" lsp-html-format-preserve-new-lines t)
- ("html.format.indentInnerHtml" lsp-html-format-indent-inner-html t)
- ("html.format.contentUnformatted" lsp-html-format-content-unformatted)
- ("html.format.unformatted" lsp-html-format-unformatted)
- ("html.format.wrapLineLength" lsp-html-format-wrap-line-length)
- ("html.format.enable" lsp-html-format-enable t)
- ("html.experimental.customData" lsp-html-experimental-custom-data)))
-
-(defcustom lsp-html-server-command-args '("--stdio")
- "Command to start html-languageserver."
- :type '(repeat string)
- :group 'lsp-html
- :package-version '(lsp-mode . "6.3"))
-
-(lsp-dependency 'html-language-server
- '(:system "html-languageserver")
- '(:npm :package "vscode-html-languageserver-bin"
- :path "html-languageserver"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- (cons (lsp-package-path 'html-language-server)
- lsp-html-server-command-args)))
- :activation-fn (lsp-activate-on "html")
- :priority -4
- :completion-in-comments? t
- :server-id 'html-ls
- :initialized-fn (lambda (w)
- (with-lsp-workspace w
- (lsp--set-configuration
- (lsp-configuration-section "html"))))
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure
- 'html-language-server callback
- error-callback))))
-
-(lsp-consistency-check lsp-html)
-
-(provide 'lsp-html)
-;;; lsp-html.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-icons.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-icons.el
deleted file mode 100644
index 7bd8bc6..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-icons.el
+++ /dev/null
@@ -1,96 +0,0 @@
-;;; lsp-icons.el --- LSP icons management -*- lexical-binding: t; -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; LSP icons management
-;;
-;;; Code:
-(require 'lsp-mode)
-
-(defgroup lsp-icons nil
- "LSP icons"
- :group 'lsp-mode
- :tag "LSP Icons")
-
-(defcustom lsp-headerline-breadcrumb-icons-enable t
- "If non-nil, icons support is enabled for headerline-breadcrumb."
- :type 'boolean
- :group 'lsp-icons)
-
-(declare-function all-the-icons-material "ext:all-the-icons" t t)
-(declare-function lsp-treemacs-symbol-icon "ext:lsp-treemacs" (kind))
-(declare-function lsp-treemacs-get-icon "ext:lsp-treemacs" (icon-name))
-
-(defun lsp-icons--enabled-for-feature (feature)
- "Check if icons support is enabled for FEATURE."
- (cond
- ((eq feature 'headerline-breadcrumb) lsp-headerline-breadcrumb-icons-enable)
- (t t)))
-
-(defun lsp-icons--fix-image-background (image)
- "Fix IMAGE background if it is a file otherwise return as an icon."
- (if image
- (let ((display-image (get-text-property 0 'display image)))
- (if (and (listp display-image)
- (plist-member (cl-copy-list (cl-rest display-image)) :type))
- (propertize " " 'display
- (cl-list* 'image
- (plist-put
- (cl-copy-list
- (cl-rest display-image))
- :background (face-attribute 'header-line :background nil t))))
- (if (stringp display-image)
- (replace-regexp-in-string "\s\\|\t" "" display-image)
- (replace-regexp-in-string "\s\\|\t" "" image))))
- ""))
-
-(defun lsp-icons-get-by-file-ext (file-ext &optional feature)
- "Get an icon by file FILE-EXT.
-FEATURE is the feature that will use the icon which we should check
-if its enabled."
- (when (and file-ext
- (lsp-icons--enabled-for-feature feature)
- (functionp 'lsp-treemacs-get-icon))
- (lsp-icons--fix-image-background
- (lsp-treemacs-get-icon file-ext))))
-
-(defun lsp-icons-get-by-symbol-kind (kind &optional feature)
- "Get an icon by symbol KIND.
-FEATURE is the feature that will use the icon which we should check
-if its enabled."
- (when (and kind
- (lsp-icons--enabled-for-feature feature)
- (functionp 'lsp-treemacs-symbol-icon))
- (lsp-icons--fix-image-background
- (lsp-treemacs-symbol-icon kind))))
-
-(defun lsp-icons-all-the-icons-material-icon (icon-name face fallback &optional feature)
- "Get a material icon from all-the-icons by ICON-NAME using FACE.
-Fallback to FALLBACK string if not found or not available.
-FEATURE is the feature that will use the icon which we should check
-if its enabled."
- (if (and (functionp 'all-the-icons-material)
- (lsp-icons--enabled-for-feature feature))
- (all-the-icons-material icon-name
- :face face)
- (propertize fallback 'face face)))
-
-(lsp-consistency-check lsp-icons)
-
-(provide 'lsp-icons)
-;;; lsp-icons.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ido.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ido.el
deleted file mode 100644
index ac34dd7..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ido.el
+++ /dev/null
@@ -1,142 +0,0 @@
-;;; lsp-ido.el --- `ido' integration -*- lexical-binding: t -*-
-;;
-;; Copyright (C) 2021 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This module provides an interactive ido interface to the workspace symbol
-;; functionality offered by lsp-mode.
-
-;;; Code:
-
-(require 'ido)
-(require 'lsp-protocol)
-(require 'lsp-mode)
-
-(defgroup lsp-ido nil
- "LSP support for ido-based symbol completion"
- :group 'lsp-mode
- :tag "LSP ido")
-
-(defcustom lsp-ido-symbol-kind-to-string
- [" " ; Unknown - 0
- "File" ; File - 1
- "Modu" ; Module - 2
- "Nmsp" ; Namespace - 3
- "Pack" ; Package - 4
- "Clss" ; Class - 5
- "Meth" ; Method - 6
- "Prop" ; Property - 7
- "Fld " ; Field - 8
- "Cons" ; Constructor - 9
- "Enum" ; Enum - 10
- "Intf" ; Interface - 11
- "Func" ; Function - 12
- "Var " ; Variable - 13
- "Cnst" ; Constant - 14
- "Str " ; String - 15
- "Num " ; Number - 16
- "Bool " ; Boolean - 17
- "Arr " ; Array - 18
- "Obj " ; Object - 19
- "Key " ; Key - 20
- "Null" ; Null - 21
- "EmMm" ; EnumMember - 22
- "Srct" ; Struct - 23
- "Evnt" ; Event - 24
- "Op " ; Operator - 25
- "TPar"] ; TypeParameter - 26
- "A vector of 26 itens representing the SymbolKind."
- :group 'lsp-ido
- :type 'vector)
-
-(defcustom lsp-ido-show-symbol-filename
- t
- "Whether to show the project-relative path to a symbol's point of definition."
- :group 'lsp-ido
- :type 'boolean)
-
-(defcustom lsp-ido-show-symbol-kind
- t
- "Whether to show the symbol's kind when showing lsp symbols."
- :group 'lsp-ido
- :type 'boolean)
-
-(eval-when-compile
- (lsp-interface
- (lsp-ido:FormattedSymbolInformation
- (:kind :name :location :textualRepresentation)
- (:containerName :deprecated))))
-
-(lsp-defun lsp-ido--transform-candidate
- ((symbol-information &as &SymbolInformation :kind :location (&Location :uri))
- lsp-ido--results project-root)
- (let* ((sanitized-kind (if (< kind (length lsp-ido-symbol-kind-to-string)) kind 0))
- (type (elt lsp-ido-symbol-kind-to-string sanitized-kind))
- (typestr (if lsp-ido-show-symbol-kind
- (format "[%s] " type)
- ""))
- (pathstr (if lsp-ido-show-symbol-filename
- (propertize (format " . %s" (file-relative-name (lsp--uri-to-path uri) project-root))
- 'face 'font-lock-comment-face)
- ""))
- (textual-representation
- (lsp-render-symbol-information symbol-information "."))
- (entry (concat typestr textual-representation pathstr)))
- (puthash entry symbol-information lsp-ido--results)))
-
-(lsp-defun lsp-ido--jump-selected-candidate
- ((&SymbolInformation
- :location (&Location :uri :range (&Range :start (&Position :line :character)))))
- "Jump to selected candidate."
- (find-file (lsp--uri-to-path uri))
- (goto-char (point-min))
- (forward-line line)
- (forward-char character))
-
-(defun lsp-ido--workspace-symbol (workspaces query)
- "Search against WORKSPACES based on QUERY."
- (let* ((lsp-ido--results (make-hash-table :test 'equal))
- (workspace-root (lsp-workspace-root))
- (raw-choices
- (with-lsp-workspaces workspaces
- (lsp-request
- "workspace/symbol"
- (lsp-make-workspace-symbol-params :query query)))))
- (mapc (lambda (it)
- (lsp-ido--transform-candidate it lsp-ido--results workspace-root))
- raw-choices)
- lsp-ido--results))
-
-;;;###autoload
-(defun lsp-ido-workspace-symbol (arg)
- "`ido' for lsp workspace/symbol.
-When called with prefix ARG the default selection will be symbol at point."
- (interactive "P")
- (let* ((query (if arg "" (read-string "Workspace symbol: ")))
- (hash-table-candidates (lsp-ido--workspace-symbol (lsp-workspaces) query))
- (choice (ido-completing-read
- "Workspace symbol: "
- (hash-table-keys hash-table-candidates)
- nil
- nil
- (when arg (thing-at-point 'symbol)))))
- (lsp-ido--jump-selected-candidate (gethash choice hash-table-candidates))))
-
-(lsp-consistency-check lsp-ido)
-
-(provide 'lsp-ido)
-;;; lsp-ido.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-iedit.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-iedit.el
deleted file mode 100644
index ff1af0d..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-iedit.el
+++ /dev/null
@@ -1,101 +0,0 @@
-;;; lsp-iedit.el --- `iedit' integration -*- lexical-binding: t -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This module provides features that allow starting `iedit' on various
-;; different lsp-based, semantic units (like documentHighlights, and
-;; linkedEditingRanges in the future).
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'dash)
-
-(declare-function iedit-make-occurrence-overlay "iedit-lib" (begin end))
-(declare-function iedit-start-buffering "iedit-lib" ())
-(declare-function iedit-lib-start "iedit-lib" (mode-exit-func))
-(declare-function iedit-done "iedit" ())
-(declare-function evil-multiedit-state "evil-multiedit" ())
-
-(defvar iedit-mode)
-(defvar iedit-auto-buffering)
-(defvar iedit-occurrences-overlays)
-(defvar iedit-occurrence-keymap)
-(defvar iedit-mode-occurrence-keymap)
-(defvar evil-multiedit--dont-recall)
-
-(defun lsp-iedit--on-ranges (ranges)
- "Start an `iedit' operation using RANGES.
-RANGES shall be a list of lsp-`&Range's. They can be acquired
-from various lsp protocol requests, e.g.
-`textDocument/documentHighlight', ...."
- (require 'iedit)
- (unless (seq-empty-p ranges)
- (mapc (-lambda ((&RangeToPoint :start :end))
- (push (iedit-make-occurrence-overlay start end)
- iedit-occurrences-overlays))
- ranges)
- ;; See `iedit-start'; TODO: upstream this
- (setq iedit-occurrence-keymap iedit-mode-occurrence-keymap)
- (setq iedit-mode t)
- (when iedit-auto-buffering
- (iedit-start-buffering))
- (iedit-lib-start 'iedit-done)
- (run-hooks 'iedit-mode-hook)
- (add-hook 'before-revert-hook 'iedit-done nil t)
- (add-hook 'kbd-macro-termination-hook 'iedit-done nil t)
- (add-hook 'change-major-mode-hook 'iedit-done nil t)
- (add-hook 'iedit-aborting-hook 'iedit-done nil t)
- (message "%d occurrences of \"%s\""
- (seq-length ranges)
- (lsp--range-text (lsp-seq-first ranges)))))
-
-;;;###autoload
-(defun lsp-iedit-highlights ()
- "Start an `iedit' operation on the documentHighlights at point.
-This can be used as a primitive `lsp-rename' replacement if the
-language server doesn't support renaming.
-
-See also `lsp-enable-symbol-highlighting'."
- (interactive)
- (let ((highlights (lsp-request "textDocument/documentHighlight"
- (lsp--text-document-position-params)))
- (-compare-fn (-lambda ((&Location :range (&Range :start l-start :end l-end))
- (&Location :range (&Range :start r-start :end r-end)))
- (and (lsp--position-equal l-start r-start)
- (lsp--position-equal l-end r-end)))))
- (lsp-iedit--on-ranges (mapcar #'lsp:document-highlight-range (-distinct highlights)))))
-
-;;;###autoload
-(defun lsp-evil-multiedit-highlights ()
- "Start an `evil-multiedit' operation on the documentHighlights at point.
-This can be used as a primitive `lsp-rename' replacement if the
-language server doesn't support renaming.
-
-See also `lsp-enable-symbol-highlighting'."
- (interactive)
- (require 'evil-multiedit)
- (when (fboundp 'ahs-clear) (ahs-clear))
- (setq evil-multiedit--dont-recall t)
- (lsp-iedit-highlights)
- (evil-multiedit-state))
-
-(lsp-consistency-check lsp-iedit)
-
-(provide 'lsp-iedit)
-;;; lsp-iedit.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-javascript.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-javascript.el
deleted file mode 100644
index 2f9e61f..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-javascript.el
+++ /dev/null
@@ -1,334 +0,0 @@
-;;; lsp-javascript.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp,
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the JavaScript and TypeScript Programming Languages.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(lsp-dependency 'javascript-typescript-langserver
- '(:system "javascript-typescript-stdio")
- '(:npm :package "javascript-typescript-langserver"
- :path "javascript-typescript-stdio"))
-
-(defgroup lsp-typescript-javascript nil
- "Support for TypeScript/JavaScript, using Sourcegraph's JavaScript/TypeScript language server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/sourcegraph/javascript-typescript-langserver"))
-
-(defcustom lsp-clients-typescript-javascript-server-args '()
- "Extra arguments for the typescript-language-server language server."
- :group 'lsp-typescript-javascript
- :risky t
- :type '(repeat string))
-
-(defun lsp-typescript-javascript-tsx-jsx-activate-p (filename &optional _)
- "Check if the javascript-typescript language server should be enabled based on FILENAME."
- (or (string-match-p "\\.mjs\\|\\.[jt]sx?\\'" filename)
- (and (derived-mode-p 'js-mode 'typescript-mode)
- (not (derived-mode-p 'json-mode)))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda ()
- (cons (lsp-package-path 'javascript-typescript-langserver)
- lsp-clients-typescript-javascript-server-args)))
- :activation-fn 'lsp-typescript-javascript-tsx-jsx-activate-p
- :priority -3
- :completion-in-comments? t
- :server-id 'jsts-ls
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure
- 'javascript-typescript-langserver
- callback
- error-callback))))
-
-
-(defgroup lsp-typescript nil
- "LSP support for TypeScript, using Theia/Typefox's TypeScript Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/theia-ide/typescript-language-server"))
-
-(defcustom lsp-clients-typescript-tls-path "typescript-language-server"
- "Path to the typescript-language-server binary."
- :group 'lsp-typescript
- :risky t
- :type 'string)
-
-(defcustom lsp-clients-typescript-server-args '("--stdio")
- "Extra arguments for the typescript-language-server language server."
- :group 'lsp-typescript
- :risky t
- :type '(repeat string))
-
-(defcustom lsp-clients-typescript-log-verbosity "info"
- "The server log verbosity."
- :group 'lsp-typescript
- :type 'string)
-
-(defcustom lsp-clients-typescript-plugins (vector)
- "The list of plugins to load.
-It should be a vector of plist with keys `:location' and `:name'
-where `:name' is the name of the package and `:location' is the
-directory containing the package. Example:
-\(vector
- \(list :name \"@vsintellicode/typescript-intellicode-plugin\"
- :location \"<path>.vscode/extensions/visualstudioexptteam.
- vscodeintellicode-1.1.9/\"))"
- :group 'lsp-typescript
- :type '(restricted-sexp :tag "Vector"
- :match-alternatives
- (lambda (xs)
- (and (vectorp xs) (seq-every-p
- (-lambda ((&plist :name :location))
- (and name location))
- xs)))))
-
-(lsp-dependency 'typescript-language-server
- '(:system lsp-clients-typescript-tls-path)
- '(:npm :package "typescript-language-server"
- :path "typescript-language-server"))
-
-(lsp-dependency 'typescript
- '(:system "tsserver")
- '(:npm :package "typescript"
- :path "tsserver"))
-
-(defun lsp-javascript--rename (_workspace args)
- (let ((path (lsp--uri-to-path (lsp-get (lsp-get args :textDocument) :uri))))
- (if (f-exists? path)
- (with-current-buffer (find-file path)
- (goto-char (lsp--position-to-point
- (lsp-get args :position))))
- (error "There is no file %s" path)))
- (call-interactively #'lsp-rename)
- nil)
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda ()
- `(,(lsp-package-path 'typescript-language-server)
- "--tsserver-path"
- ,(lsp-package-path 'typescript)
- ,@lsp-clients-typescript-server-args)))
- :activation-fn 'lsp-typescript-javascript-tsx-jsx-activate-p
- :priority -2
- :completion-in-comments? t
- :initialization-options (lambda ()
- (list :plugins lsp-clients-typescript-plugins
- :logVerbosity lsp-clients-typescript-log-verbosity
- :tsServerPath (lsp-package-path 'typescript)))
- :ignore-messages '("readFile .*? requested by TypeScript but content not available")
- :server-id 'ts-ls
- :request-handlers (ht ("_typescript.rename" #'lsp-javascript--rename))
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure
- 'typescript
- (-partial #'lsp-package-ensure
- 'typescript-language-server
- callback
- error-callback)
- error-callback))))
-
-
-(defgroup lsp-flow nil
- "LSP support for the Flow Javascript type checker."
- :group 'lsp-mode
- :link '(url-link "https://flow.org"))
-
-(defcustom lsp-clients-flow-server "flow"
- "The Flow executable to use.
-Leave as just the executable name to use the default behavior of
-finding the executable with variable `exec-path'."
- :group 'lsp-flow
- :risky t
- :type 'file)
-
-(defcustom lsp-clients-flow-server-args '("lsp")
- "Extra arguments for starting the Flow language server."
- :group 'lsp-flow
- :risky t
- :type '(repeat string))
-
-(defun lsp-clients-flow-tag-file-present-p (file-name)
- "Check if the '// @flow' or `/* @flow */' tag is present in
-the contents of FILE-NAME."
- (if-let ((buffer (find-buffer-visiting file-name)))
- (with-current-buffer buffer
- (lsp-clients-flow-tag-string-present-p))
- (with-temp-buffer
- (insert-file-contents file-name)
- (lsp-clients-flow-tag-string-present-p))))
-
-(defun lsp-clients-flow-tag-string-present-p ()
- "Helper for `lsp-clients-flow-tag-file-present-p' that works
-with the file contents."
- (save-excursion
- (goto-char (point-min))
- (let (stop found)
- (while (not stop)
- (unless (re-search-forward "[^\n[:space:]]" nil t)
- (setq stop t))
- (if (= (point) (point-min)) (setq stop t) (backward-char))
- (cond ((or (looking-at "//+[ ]*@flow")
- (looking-at "/\\**[ ]*@flow")
- (looking-at "[ ]*\\*[ ]*@flow"))
- (setq found t) (setq stop t))
- ((or (looking-at "//") (looking-at "*"))
- (forward-line))
- ((looking-at "/\\*")
- (save-excursion
- (unless (re-search-forward "*/" nil t) (setq stop t)))
- (forward-line))
- (t (setq stop t))))
- found)))
-
-(defun lsp-clients-flow-project-p (file-name)
- "Check if FILE-NAME is part of a Flow project, that is, if
-there is a .flowconfig file in the folder hierarchy."
- (locate-dominating-file file-name ".flowconfig"))
-
-(defun lsp-clients-flow-activate-p (file-name _mode)
- "Check if the Flow language server should be enabled for a
-particular FILE-NAME and MODE."
- (and (derived-mode-p 'js-mode 'web-mode 'js2-mode 'flow-js2-mode 'rjsx-mode)
- (not (derived-mode-p 'json-mode))
- (or (lsp-clients-flow-project-p file-name)
- (lsp-clients-flow-tag-file-present-p file-name))))
-
-(lsp-register-client
- (make-lsp-client :new-connection
- (lsp-stdio-connection (lambda ()
- (cons lsp-clients-flow-server
- lsp-clients-flow-server-args)))
- :priority -1
- :activation-fn 'lsp-clients-flow-activate-p
- :server-id 'flow-ls))
-
-(defgroup lsp-deno nil
- "LSP support for the Deno language server."
- :group 'lsp-mode
- :link '(url-link "https://deno.land/"))
-
-(defcustom lsp-clients-deno-server "deno"
- "The Deno executable to use.
-Leave as just the executable name to use the default behavior of
-finding the executable with variable `exec-path'."
- :group 'lsp-deno
- :risky t
- :type 'file
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-server-args '("lsp")
- "Extra arguments for starting the Deno language server."
- :group 'lsp-deno
- :risky t
- :type '(repeat string)
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-enable-lint t
- "Controls if linting information will be provided by the Deno Language Server."
- :group 'lsp-deno
- :risky t
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-enable-code-lens-references t
- "Enables or disables the display of code lens information."
- :group 'lsp-deno
- :risky t
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-enable-code-lens-references-all-functions t
- "Enables or disables the display of code lens information for all functions.
-Setting this variable to `non-nil' implicitly enables
-`lsp-clients-deno-enable-code-lens-references'."
- :group 'lsp-deno
- :risky t
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-enable-code-lens-implementations t
- "Enables or disables the display of code lens information for implementations."
- :group 'lsp-deno
- :risky t
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-config nil
- "The file path to a tsconfig.json file.
-The path can be either be relative to the workspace, or an
-absolute path.
-
-Examples: `./tsconfig.json',
-`/path/to/tsconfig.json', `C:\\path\\to\\tsconfig.json'"
- :group 'lsp-deno
- :risky t
- :type 'file
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-import-map nil
- "The file path to an import map.
-Import maps provide a way to relocate modules based on their
-specifiers. The path can either be relative to the workspace, or
-an absolute path.
-
-Examples: `./import-map.json',
-`/path/to/import-map.json', `C:\\path\\to\\import-map.json'."
- :group 'lsp-deno
- :risky t
- :type 'file
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-deno-enable-unstable nil
- "Controls if code will be type checked with Deno's unstable APIs."
- :group 'lsp-deno
- :risky t
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defun lsp-clients-deno--make-init-options ()
- "Initialization options for the Deno language server."
- `(:enable t
- :config ,lsp-clients-deno-config
- :importMap ,lsp-clients-deno-import-map
- :lint ,(lsp-json-bool lsp-clients-deno-enable-lint)
- :unstable ,(lsp-json-bool lsp-clients-deno-enable-unstable)
- :codeLens (:implementations ,(lsp-json-bool lsp-clients-deno-enable-code-lens-implementations)
- :references ,(lsp-json-bool (or lsp-clients-deno-enable-code-lens-references
- lsp-clients-deno-enable-code-lens-references-all-functions))
- :referencesAllFunctions ,(lsp-json-bool lsp-clients-deno-enable-code-lens-references-all-functions))))
-
-(lsp-register-client
- (make-lsp-client :new-connection
- (lsp-stdio-connection (lambda ()
- (cons lsp-clients-deno-server
- lsp-clients-deno-server-args)))
- :initialization-options #'lsp-clients-deno--make-init-options
- :priority -5
- :activation-fn #'lsp-typescript-javascript-tsx-jsx-activate-p
- :server-id 'deno-ls))
-
-(lsp-consistency-check lsp-javascript)
-
-(provide 'lsp-javascript)
-;;; lsp-javascript.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-json.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-json.el
deleted file mode 100644
index 127d5e4..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-json.el
+++ /dev/null
@@ -1,131 +0,0 @@
-;;; lsp-json.el --- vscode-json-languageserver integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Kien Nguyen
-
-;; Author: kien.n.quang at gmail.com
-;; Keywords: lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'ht)
-(require 'url)
-(require 'url-util)
-
-(defgroup lsp-json nil
- "LSP support for JSON, using vscode-json-languageserver."
- :group 'lsp-mode
- :link '(url-link "https://github.com/vscode-langservers/vscode-json-languageserver")
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-json-schemas nil
- "Associate schemas to JSON files in the current project"
- :type '(repeat alist)
- :group 'lsp-json
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-http-proxy nil
- "The URL of the proxy server to use when fetching schema."
- :type 'string
- :group 'lsp-json
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-http-proxyStrictSSL t
- "The URL of the proxy server to use when fetching schema."
- :type 'boolean
- :group 'lsp-json
- :package-version '(lsp-mode . "6.3"))
-
-(lsp-register-custom-settings
- '(("json.schemas" lsp-json-schemas)
- ("http.proxy" lsp-http-proxy)
- ("http.proxyStrictSSL" lsp-http-proxyStrictSSL)))
-
-(defvar lsp-json--extra-init-params
- `(:provideFormatter t
- :handledSchemaProtocols ["file" "http" "https"]))
-
-(defvar lsp-json--schema-associations
- `(:/*.css-data.json ["https://raw.githubusercontent.com/Microsoft/vscode-css-languageservice/master/docs/customData.schema.json"]
- :/package.json ["http://json.schemastore.org/package"]
- :/*.html-data.json ["https://raw.githubusercontent.com/Microsoft/vscode-html-languageservice/master/docs/customData.schema.json"]
- :/*.schema.json ["http://json-schema.org/draft-07/schema#"]
- :/bower.json ["http://json.schemastore.org/bower"]
- :/composer.json ["http://json.schemastore.org/composer"]
- :/tsconfig.json ["http://json.schemastore.org/tsconfig"]
- :/tsconfig.*.json ["http://json.schemastore.org/tsconfig"]
- :/typings.json ["http://json.schemastore.org/typings"]
- :/.bowerrc ["http://json.schemastore.org/bowerrc"]
- :/.babelrc ["http://json.schemastore.org/babelrc"]
- :/.babelrc.json ["http://json.schemastore.org/babelrc"]
- :/babel.config.json ["http://json.schemastore.org/babelrc"]
- :/jsconfig.json ["http://json.schemastore.org/jsconfig"]
- :/jsconfig.*.json ["http://json.schemastore.org/jsconfig"]
- :/project.json ["http://json.schemastore.org/project"]
- :/omnisharp.json ["http://json.schemastore.org/omnisharp"]
- :/.eslintrc.json ["http://json.schemastore.org/eslintrc"]
- :/.eslintrc ["http://json.schemastore.org/eslintrc"])
- "Default json schemas.")
-
-(defun lsp-json--get-content (_workspace uri callback)
- "Get content from URI."
- (ignore-errors
- (url-retrieve uri
- (lambda (_status callback)
- (goto-char (point-min))
- (re-search-forward "\n\n" nil 'noerror)
- (funcall
- callback
- (decode-coding-string (buffer-substring (point) (point-max))
- 'utf-8-unix)))
- (list callback))))
-
-(lsp-dependency 'vscode-json-languageserver
- '(:system "vscode-json-languageserver")
- '(:npm :package "vscode-json-languageserver"
- :path "vscode-json-languageserver"))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection
- (lsp-stdio-connection
- (lambda () (list (lsp-package-path 'vscode-json-languageserver) "--stdio")))
- :activation-fn (lsp-activate-on "json" "jsonc")
- :server-id 'json-ls
- :priority 0
- :multi-root t
- :completion-in-comments? t
- :initialization-options lsp-json--extra-init-params
- :async-request-handlers (ht ("vscode/content" #'lsp-json--get-content))
- :initialized-fn
- (lambda (w)
- (with-lsp-workspace w
- (lsp--set-configuration
- (ht-merge (lsp-configuration-section "json")
- (lsp-configuration-section "http")))
- (lsp-notify "json/schemaAssociations" lsp-json--schema-associations)))
- :download-server-fn
- (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'vscode-json-languageserver callback error-callback))))
-
-(lsp-consistency-check lsp-json)
-
-(provide 'lsp-json)
-;;; lsp-json.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-kotlin.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-kotlin.el
deleted file mode 100644
index 329debc..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-kotlin.el
+++ /dev/null
@@ -1,121 +0,0 @@
-;;; lsp-kotlin.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, kotlin
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Kotlin Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-kotlin nil
- "LSP support for Kotlin, using KotlinLanguageServer."
- :group 'lsp-mode
- :link '(url-link "https://github.com/fwcd/KotlinLanguageServer"))
-
-(define-obsolete-variable-alias
- 'lsp-kotlin-language-server-path
- 'lsp-clients-kotlin-server-executable
- "lsp-mode 6.4")
-
-(defcustom lsp-clients-kotlin-server-executable "kotlin-language-server"
- "The kotlin-language-server executable to use.
-Leave as just the executable name to use the default behavior of finding the
-executable with `exec-path'."
- :type 'string
- :group 'lsp-kotlin)
-
-(defcustom lsp-kotlin-trace-server "off"
- "Traces the communication between VSCode and the Kotlin language server."
- :type '(choice (:tag "off" "messages" "verbose"))
- :group 'lsp-kotlin
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-kotlin-compiler-jvm-target "1.8"
- "Specifies the JVM target, e.g. \"1.6\" or \"1.8\"."
- :type 'string
- :group 'lsp-kotlin
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-kotlin-linting-debounce-time 250
- "[DEBUG] Specifies the debounce time limit.
-Lower to increase responsiveness at the cost of possible stability issues."
- :type 'number
- :group 'lsp-kotlin
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-kotlin-completion-snippets-enabled t
- "Specifies whether code completion should provide snippets (true) or
-plain-text items (false)."
- :type 'boolean
- :group 'lsp-kotlin
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-kotlin-debug-adapter-enabled t
- "[Recommended] Specifies whether the debug adapter should be used.
-When enabled a debugger for Kotlin will be available."
- :type 'boolean)
-
-(defcustom lsp-kotlin-debug-adapter-path ""
- "Optionally a custom path to the debug adapter executable."
- :type 'string
- :group 'lsp-kotlin
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-kotlin-external-sources-use-kls-scheme t
- "[Recommended] Specifies whether URIs inside JARs should be represented
-using the 'kls'-scheme."
- :type 'boolean
- :group 'lsp-kotlin
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-kotlin-external-sources-auto-convert-to-kotlin t
- "Specifies whether decompiled/external classes should be auto-converted
-to Kotlin."
- :type 'boolean
- :group 'lsp-kotlin
- :package-version '(lsp-mode . "6.1"))
-
-(lsp-register-custom-settings
- '(("kotlin.externalSources.autoConvertToKotlin" lsp-kotlin-external-sources-auto-convert-to-kotlin t)
- ("kotlin.externalSources.useKlsScheme" lsp-kotlin-external-sources-use-kls-scheme t)
- ("kotlin.debugAdapter.path" lsp-kotlin-debug-adapter-path)
- ("kotlin.debugAdapter.enabled" lsp-kotlin-debug-adapter-enabled t)
- ("kotlin.completion.snippets.enabled" lsp-kotlin-completion-snippets-enabled t)
- ("kotlin.linting.debounceTime" lsp-kotlin-linting-debounce-time)
- ("kotlin.compiler.jvm.target" lsp-kotlin-compiler-jvm-target)
- ("kotlin.trace.server" lsp-kotlin-trace-server)
- ("kotlin.languageServer.path" lsp-clients-kotlin-server-executable)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection lsp-clients-kotlin-server-executable)
- :major-modes '(kotlin-mode)
- :priority -1
- :server-id 'kotlin-ls
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration (lsp-configuration-section "kotlin"))))))
-
-(lsp-consistency-check lsp-kotlin)
-
-(provide 'lsp-kotlin)
-;;; lsp-kotlin.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-lens.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-lens.el
deleted file mode 100644
index d08580a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-lens.el
+++ /dev/null
@@ -1,425 +0,0 @@
-;;; lsp-lens.el --- LSP lens -*- lexical-binding: t; -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; LSP lens
-;;
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-lens nil
- "LSP support for lens"
- :prefix "lsp-lens-"
- :group 'lsp-mode
- :tag "LSP Lens")
-
-(defcustom lsp-lens-debounce-interval 0.001
- "Debounce interval for loading lenses."
- :group 'lsp-lens
- :type 'number)
-
-(defcustom lsp-lens-place-position 'end-of-line
- "The position to place lens relative to returned lens position."
- :group 'lsp-lens
- :type '(choice (const above-line)
- (const end-of-line))
- :package-version '(lsp-mode . "7.1"))
-
-(defface lsp-lens-mouse-face
- '((t :height 0.8 :inherit link))
- "The face used for code lens overlays."
- :group 'lsp-lens)
-
-(defface lsp-lens-face
- '((t :inherit lsp-details-face))
- "The face used for code lens overlays."
- :group 'lsp-lens)
-
-(defvar-local lsp-lens--modified? nil)
-
-(defvar-local lsp-lens--overlays nil
- "Current lenses.")
-
-(defvar-local lsp-lens--page nil
- "Pair of points which holds the last window location the lenses were loaded.")
-
-(defvar-local lsp-lens--last-count nil
- "The number of lenses the last time they were rendered.")
-
-(defvar lsp-lens-backends '(lsp-lens--backend)
- "Backends providing lenses.")
-
-(defvar-local lsp-lens--refresh-timer nil
- "Refresh timer for the lenses.")
-
-(defvar-local lsp-lens--data nil
- "Pair of points which holds the last window location the lenses were loaded.")
-
-(defvar-local lsp-lens--backend-cache nil)
-
-(defun lsp-lens--text-width (from to)
- "Measure the width of the text between FROM and TO.
-Results are meaningful only if FROM and TO are on the same line."
- ;; `current-column' takes prettification into account
- (- (save-excursion (goto-char to) (current-column))
- (save-excursion (goto-char from) (current-column))))
-
-(defun lsp-lens--update (ov)
- "Redraw quick-peek overlay OV."
- (let* ((offset (lsp-lens--text-width (save-excursion
- (beginning-of-visual-line)
- (point))
- (save-excursion
- (beginning-of-line-text)
- (point))))
- (str (if (eq 'end-of-line lsp-lens-place-position)
- (overlay-get ov 'lsp--lens-contents)
- (concat (make-string offset ?\s)
- (overlay-get ov 'lsp--lens-contents)))))
- (save-excursion
- (goto-char (overlay-start ov))
- (if (eq 'end-of-line lsp-lens-place-position)
- (overlay-put ov 'after-string (propertize (concat " " str) 'cursor t))
- (overlay-put ov 'before-string (concat str "\n")))
- (overlay-put ov 'lsp-original str))))
-
-(defun lsp-lens--overlay-ensure-at (pos)
- "Find or create a lens for the line at POS."
- (-doto (save-excursion
- (goto-char pos)
- (if (eq 'end-of-line lsp-lens-place-position)
- (make-overlay (point-at-eol) -1 nil t t)
- (make-overlay (point-at-bol) (1+ (point-at-eol)) nil t t)))
- (overlay-put 'lsp-lens t)
- (overlay-put 'evaporate t)
- (overlay-put 'lsp-lens-position pos)))
-
-(defun lsp-lens--show (str pos metadata)
- "Show STR in an inline window at POS including METADATA."
- (let ((ov (lsp-lens--overlay-ensure-at pos)))
- (save-excursion
- (goto-char pos)
- (setf (overlay-get ov 'lsp--lens-contents) str)
- (setf (overlay-get ov 'lsp--metadata) metadata)
- (lsp-lens--update ov)
- ov)))
-
-(defun lsp-lens--idle-function (&optional buffer)
- "Create idle function for buffer BUFFER."
- (when (and (or (not buffer) (eq (current-buffer) buffer))
- (not (equal (cons (window-start) (window-end)) lsp-lens--page)))
- (lsp-lens--schedule-refresh nil)))
-
-(defun lsp-lens--overlay-matches-pos (ov pos)
- "Check if OV is a lens covering POS."
- (and (overlay-get ov 'lsp-lens)
- (overlay-start ov)
- (<= (overlay-start ov) pos)
- (< pos (overlay-end ov))))
-
-(defun lsp-lens--after-save ()
- "Handler for `after-save-hook' for lens mode."
- (lsp-lens--schedule-refresh t))
-
-(defun lsp-lens--schedule-refresh (&optional buffer-modified?)
- "Call each of the backend.
-BUFFER-MODIFIED? determines whether the buffer was modified or
-not."
- (-some-> lsp-lens--refresh-timer cancel-timer)
-
- (setq lsp-lens--page (cons (window-start) (window-end)))
- (setq lsp-lens--refresh-timer
- (run-with-timer lsp-lens-debounce-interval
- nil
- #'lsp-lens-refresh
- (or lsp-lens--modified? buffer-modified?)
- (current-buffer))))
-
-(defun lsp-lens--schedule-refresh-modified ()
- "Schedule a lens refresh due to a buffer-modification.
-See `lsp-lens--schedule-refresh' for details."
- (lsp-lens--schedule-refresh t))
-
-(defun lsp-lens--keymap (command)
- "Build the lens keymap for COMMAND."
- (-doto (make-sparse-keymap)
- (define-key [mouse-1] (lsp-lens--create-interactive-command command))))
-
-(defun lsp-lens--create-interactive-command (command?)
- "Create an interactive COMMAND? for the lens.
-COMMAND? shall be an `&Command' (e.g. `&CodeLens' :command?) and
-mustn't be nil."
- (if (functionp (lsp:command-command command?))
- (lsp:command-command command?)
- (lambda ()
- (interactive)
- (lsp--execute-command command?))))
-
-(defun lsp-lens--display (lenses)
- "Show LENSES."
- ;; rerender only if there are lenses which are not processed or if their count
- ;; has changed(e. g. delete lens should trigger redisplay).
- (let ((scroll-preserve-screen-position t))
- (setq lsp-lens--modified? nil)
- (when (or (-any? (-lambda ((&CodeLens :_processed processed))
- (not processed))
- lenses)
- (eq (length lenses) lsp-lens--last-count)
- (not lenses))
- (setq lsp-lens--last-count (length lenses))
- (mapc #'delete-overlay lsp-lens--overlays)
- (setq lsp-lens--overlays
- (->> lenses
- (-filter #'lsp:code-lens-command?)
- (--map (prog1 it (lsp-put it :_processed t)))
- (-group-by (-compose #'lsp:position-line #'lsp:range-start #'lsp:code-lens-range))
- (-map
- (-lambda ((_ . lenses))
- (let* ((sorted (-sort (-on #'< (-compose #'lsp:position-character
- #'lsp:range-start
- #'lsp:code-lens-range))
- lenses))
- (data (-map
- (-lambda ((lens &as &CodeLens
- :command? (command &as
- &Command :title :_face face)))
- (propertize
- title
- 'face (or face 'lsp-lens-face)
- 'action (lsp-lens--create-interactive-command command)
- 'pointer 'hand
- 'mouse-face 'lsp-lens-mouse-face
- 'local-map (lsp-lens--keymap command)))
- sorted)))
- (lsp-lens--show
- (s-join (propertize "|" 'face 'lsp-lens-face) data)
- (-> sorted cl-first lsp:code-lens-range lsp:range-start lsp--position-to-point)
- data)))))))))
-
-(defun lsp-lens-refresh (buffer-modified? &optional buffer)
- "Refresh lenses using lenses backend.
-BUFFER-MODIFIED? determines whether the BUFFER is modified or not."
- (let ((buffer (or buffer (current-buffer))))
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (dolist (backend lsp-lens-backends)
- (funcall backend buffer-modified?
- (lambda (lenses version)
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (lsp-lens--process backend lenses version))))))))))
-
-(defun lsp-lens--process (backend lenses version)
- "Process LENSES originated from BACKEND.
-VERSION is the version of the file. The lenses has to be
-refreshed only when all backends have reported for the same
-version."
- (setq lsp-lens--data (or lsp-lens--data (make-hash-table)))
- (puthash backend (cons version (append lenses nil)) lsp-lens--data)
-
- (-let [backend-data (->> lsp-lens--data ht-values (-filter #'cl-rest))]
- (when (and
- (= (length lsp-lens-backends) (ht-size lsp-lens--data))
- (seq-every-p (-lambda ((version))
- (or (not version) (eq version lsp--cur-version)))
- backend-data))
- ;; display the data only when the backends have reported data for the
- ;; current version of the file
- (lsp-lens--display (apply #'append (-map #'cl-rest backend-data)))))
- version)
-
-(lsp-defun lsp--lens-backend-not-loaded? ((&CodeLens :range
- (&Range :start)
- :command?
- :_pending pending))
- "Return t if LENS has to be loaded."
- (and (< (window-start) (lsp--position-to-point start) (window-end))
- (not command?)
- (not pending)))
-
-(lsp-defun lsp--lens-backend-present? ((&CodeLens :range (&Range :start) :command?))
- "Return t if LENS has to be loaded."
- (or command?
- (not (< (window-start) (lsp--position-to-point start) (window-end)))))
-
-(defun lsp-lens--backend-fetch-missing (lenses callback file-version)
- "Fetch LENSES without command in for the current window.
-
-TICK is the buffer modified tick. If it does not match
-`buffer-modified-tick' at the time of receiving the updates the
-updates must be discarded..
-CALLBACK - the callback for the lenses.
-FILE-VERSION - the version of the file."
- (seq-each
- (lambda (it)
- (with-lsp-workspace (lsp-get it :_workspace)
- (lsp-put it :_pending t)
- (lsp-put it :_workspace nil)
- (lsp-request-async "codeLens/resolve" it
- (-lambda ((&CodeLens :command?))
- (lsp-put it :_pending nil)
- (lsp-put it :command command?)
- (when (seq-every-p #'lsp--lens-backend-present? lenses)
- (funcall callback lenses file-version)))
- :mode 'tick)))
- (seq-filter #'lsp--lens-backend-not-loaded? lenses)))
-
-(defun lsp-lens--backend (modified? callback)
- "Lenses backend using `textDocument/codeLens'.
-MODIFIED? - t when buffer is modified since the last invocation.
-CALLBACK - callback for the lenses."
- (when (lsp--find-workspaces-for "textDocument/codeLens")
- (if modified?
- (progn
- (setq lsp-lens--backend-cache nil)
- (lsp-request-async "textDocument/codeLens"
- `(:textDocument (:uri ,(lsp--buffer-uri)))
- (lambda (lenses)
- (setq lsp-lens--backend-cache
- (seq-mapcat
- (-lambda ((workspace . workspace-lenses))
- ;; preserve the original workspace so we can later use it to resolve the lens
- (seq-do (-rpartial #'lsp-put :_workspace workspace) workspace-lenses)
- workspace-lenses)
- lenses))
- (if (-every? #'lsp:code-lens-command? lsp-lens--backend-cache)
- (funcall callback lsp-lens--backend-cache lsp--cur-version)
- (lsp-lens--backend-fetch-missing lsp-lens--backend-cache callback lsp--cur-version)))
- :error-handler #'ignore
- :mode 'tick
- :no-merge t
- :cancel-token (concat (buffer-name (current-buffer)) "-lenses")))
- (if (-all? #'lsp--lens-backend-present? lsp-lens--backend-cache)
- (funcall callback lsp-lens--backend-cache lsp--cur-version)
- (lsp-lens--backend-fetch-missing lsp-lens--backend-cache callback lsp--cur-version)))))
-
-;;;###autoload
-(defun lsp-lens--enable ()
- "Enable lens mode."
- (when (and lsp-lens-enable
- (lsp-feature? "textDocument/codeLens"))
- (lsp-lens-mode 1)))
-
-(defun lsp-lens--disable ()
- "Disable lens mode."
- (lsp-lens-mode -1))
-
-;;;###autoload
-(defun lsp-lens-show ()
- "Display lenses in the buffer."
- (interactive)
- (->> (lsp-request "textDocument/codeLens"
- `(:textDocument (:uri
- ,(lsp--path-to-uri buffer-file-name))))
- (seq-map (-lambda ((lens &as &CodeAction :command?))
- (if command?
- lens
- (lsp-request "codeLens/resolve" lens))))
- lsp-lens--display))
-
-;;;###autoload
-(defun lsp-lens-hide ()
- "Delete all lenses."
- (interactive)
- (let ((scroll-preserve-screen-position t))
- (seq-do #'delete-overlay lsp-lens--overlays)
- (setq lsp-lens--overlays nil)))
-
-;;;###autoload
-(define-minor-mode lsp-lens-mode
- "Toggle code-lens overlays."
- :group 'lsp-lens
- :global nil
- :init-value nil
- :lighter " Lens"
- (cond
- (lsp-lens-mode
- (add-hook 'lsp-unconfigure-hook #'lsp-lens--disable nil t)
- (add-hook 'lsp-configure-hook #'lsp-lens--enable nil t)
- (add-hook 'lsp-on-idle-hook #'lsp-lens--idle-function nil t)
- (add-hook 'lsp-on-change-hook #'lsp-lens--schedule-refresh-modified nil t)
- (add-hook 'after-save-hook #'lsp-lens--after-save nil t)
- (add-hook 'before-revert-hook #'lsp-lens-hide nil t)
- (lsp-lens-refresh t))
- (t
- (remove-hook 'lsp-on-idle-hook #'lsp-lens--idle-function t)
- (remove-hook 'lsp-on-change-hook #'lsp-lens--schedule-refresh-modified t)
- (remove-hook 'after-save-hook #'lsp-lens--after-save t)
- (remove-hook 'before-revert-hook #'lsp-lens-hide t)
- (when lsp-lens--refresh-timer
- (cancel-timer lsp-lens--refresh-timer))
- (setq lsp-lens--refresh-timer nil)
- (lsp-lens-hide)
- (setq lsp-lens--last-count nil)
- (setq lsp-lens--backend-cache nil)
- (remove-hook 'lsp-configure-hook #'lsp-lens--enable t)
- (remove-hook 'lsp-unconfigure-hook #'lsp-lens--disable t))))
-
-
-;; avy integration
-
-(declare-function avy-process "ext:avy" (candidates &optional overlay-fn cleanup-fn))
-(declare-function avy--key-to-char "ext:avy" (c))
-(defvar avy-action)
-
-;;;###autoload
-(defun lsp-avy-lens ()
- "Click lsp lens using `avy' package."
- (interactive)
- (unless lsp-lens--overlays
- (user-error "No lenses in current buffer"))
- (let* ((avy-action 'identity)
- (action (cl-third
- (avy-process
- (-mapcat
- (lambda (overlay)
- (-map-indexed
- (lambda (index lens-token)
- (list overlay index
- (get-text-property 0 'action lens-token)))
- (overlay-get overlay 'lsp--metadata)))
- lsp-lens--overlays)
- (-lambda (path ((ov index) . _win))
- (let* ((path (mapcar #'avy--key-to-char path))
- (str (propertize (string (car (last path)))
- 'face 'avy-lead-face))
- (old-str (overlay-get ov 'before-string))
- (old-str-tokens (s-split "|" old-str))
- (old-token (seq-elt old-str-tokens index))
- (tokens `(,@(-take index old-str-tokens)
- ,(-if-let ((_ prefix suffix)
- (s-match "\\(^[[:space:]]+\\)\\(.*\\)" old-token))
- (concat prefix str suffix)
- (concat str old-token))
- ,@(-drop (1+ index) old-str-tokens)))
- (new-str (s-join (propertize "|" 'face 'lsp-lens-face) tokens))
- (new-str (if (s-ends-with? "\n" new-str)
- new-str
- (concat new-str "\n"))))
- (overlay-put ov 'before-string new-str)))
- (lambda ()
- (--map (overlay-put it 'before-string
- (overlay-get it 'lsp-original))
- lsp-lens--overlays))))))
- (when action (funcall-interactively action))))
-
-(lsp-consistency-check lsp-lens)
-
-(provide 'lsp-lens)
-;;; lsp-lens.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-lua.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-lua.el
deleted file mode 100644
index 2e76745..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-lua.el
+++ /dev/null
@@ -1,678 +0,0 @@
-;;; lsp-lua.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 E. Alexander Barbosa
-
-;; Author: E. Alexander Barbosa <elxbarbosa@outlook.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Lua Programming Language
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'f)
-(require 'files)
-
-(defgroup lsp-emmy-lua nil
- "Lua LSP client, provided by the EmmyLua Language Server."
- :group 'lsp-mode
- :version "7.1"
- :link '(url-link "https://github.com/EmmyLua/EmmyLua-LanguageServer"))
-
-(defcustom lsp-clients-emmy-lua-java-path "java"
- "Java Runtime binary location."
- :group 'lsp-emmy-lua
- :version "7.1"
- :risky t
- :type 'file)
-
-(defcustom lsp-clients-emmy-lua-jar-path (f-join lsp-server-install-dir "EmmyLua-LS-all.jar")
- "Emmy Lua language server jar file."
- :group 'lsp-emmy-lua
- :version "7.1"
- :risky t
- :type 'file)
-
-(defcustom lsp-clients-emmy-lua-args '("-jar")
- "Arguments to the Lua Language server."
- :group 'lsp-emmy-lua
- :version "7.1"
- :risky t
- :type '(repeat string))
-
-(defcustom lsp-clients-emmy-lua-command nil
- "Final command to call the Lua Language server."
- :group 'lsp-emmy-lua
- :version "7.1"
- :risky t
- :type '(repeat string))
-
-(defun lsp-clients-emmy-lua-test ()
- "Test the Emmy Lua binaries and files."
- (and (executable-find lsp-clients-emmy-lua-java-path)
- (f-exists? lsp-clients-emmy-lua-jar-path)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection (lambda () (or lsp-clients-emmy-lua-command
- `(,lsp-clients-emmy-lua-java-path
- ,@lsp-clients-emmy-lua-args
- ,lsp-clients-emmy-lua-jar-path)))
- #'lsp-clients-emmy-lua-test)
- :major-modes '(lua-mode)
- :server-id 'emmy-lua
- :priority -1
- :notification-handlers (lsp-ht ("emmy/progressReport" #'ignore))))
-
-
-;;; lua-language-server
-(defgroup lsp-lua-language-server nil
- "Lua LSP client, provided by the Lua Language Server."
- :group 'lsp-mode
- :version "7.1"
- :link '(url-link "https://github.com/sumneko/lua-language-server"))
-
-(defcustom lsp-clients-lua-language-server-install-dir (f-join lsp-server-install-dir "lua-language-server/")
- "Installation directory for Lua Language Server."
- :group 'lsp-lua-language-server
- :version "7.1"
- :risky t
- :type 'directory)
-
-(defcustom lsp-clients-lua-language-server-bin
- (f-join lsp-clients-lua-language-server-install-dir
- "extension/server/bin/"
- (pcase system-type
- ('gnu/linux "Linux/lua-language-server")
- ('darwin "macOS/lua-language-server")
- ('windows-nt "Windows/lua-language-server.exe")
- (_ "Linux/lua-language-server")))
- "Location of Lua Language Server."
- :group 'lsp-lua-language-server
- :version "7.1"
- :risky t
- :type 'file)
-
-(defcustom lsp-clients-lua-language-server-main-location
- (f-join lsp-clients-lua-language-server-install-dir
- "extension/server/main.lua")
- "Location of Lua Language Server main.lua."
- :group 'lsp-lua-language-server
- :version "7.1"
- :risky t
- :type 'file)
-
-(defcustom lsp-clients-lua-language-server-args '("-E")
- "Arguments to run the Lua Language server."
- :group 'lsp-lua-language-server
- :version "7.1"
- :risky t
- :type '(repeat string))
-
-(defcustom lsp-clients-lua-language-server-command nil
- "Command to start Lua Language server."
- :group 'lsp-lua-language-server
- :type '(repeat string))
-
-
-(defun lsp-clients-lua-language-server-test ()
- "Test Lua language server binaries and files."
- (and (f-exists? lsp-clients-lua-language-server-main-location)
- (f-exists? lsp-clients-lua-language-server-bin)))
-
-(defcustom lsp-lua-color-mode "Semantic"
- "Color mode."
- :type '(choice (:tag "Grammar" "Semantic"))
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-completion-call-snippet "Disable"
- "Shows function call snippets."
- :type '(choice (:tag "Disable" "Both" "Replace"))
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-completion-display-context 6
- "Previewing the relevant code snippet of the suggestion may help you
-understand the usage of the suggestion.
-
-The number set indicates the number of intercepted lines in the code
-fragment. If it is set to `0`, this feature can be disabled."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-completion-enable t
- "Enable completion."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-completion-keyword-snippet "Replace"
- "Shows keyword syntax snippets."
- :type '(choice (:tag "Disable" "Both" "Replace"))
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-completion-workspace-word t
- "Show words within the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-develop-debugger-port 11412
- "Listen port of debugger."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-develop-debugger-wait nil
- "Suspend before debugger connects."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-develop-enable nil
- "Developer mode. Do not enable, performance will be affected."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-diagnostics-disable nil
- "Disabled diagnostic (Use code in hover brackets).
-```json
-\"Lua.diagnostics.disable\" : [
-\"unused-local\",
-\"lowercase-global\"
-]
-```"
- :type 'lsp-string-vector
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-diagnostics-enable t
- "Enable diagnostics."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-diagnostics-globals nil
- "Defined global variables.
-```json
-\"Lua.diagnostics.globals\" : [
-\"GLOBAL1\",
-\"GLOBAL2\"
-]
-```"
- :type 'lsp-string-vector
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-diagnostics-needed-file-status nil
- "If you want to check only opened files, choice Opened; else choice Any.
-```json
-\"Lua.diagnostics.neededFileStatus\" : {
-\"ambiguity-1\" : \"Any\",
-\"circle-doc-class\" : \"Opened\"
-}
-```"
- :type 'alist
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-diagnostics-severity nil
- "Modified diagnostic severity.
-```json
-\"Lua.diagnostics.severity\" : {
-\"redefined-local\" : \"Warning\",
-\"emmy-lua\" : \"Hint\"
-}
-```"
- :type 'alist
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-diagnostics-workspace-delay 0
- "Latency (milliseconds) for workspace diagnostics. When you start the
-workspace, or edit any file, the entire workspace will be re-diagnosed in the
-background. Set to negative to disable workspace diagnostics."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-diagnostics-workspace-rate 100
- "Workspace diagnostics run rate (%). Decreasing this value reduces CPU usage,
-but also reduces the speed of workspace diagnostics. The diagnosis of the file
-you are currently editing is always done at full speed and is not affected by
-this setting."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hint-enable nil
- "Enable hint."
- :type 'boolean
- :package-version '(lsp-mmode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hint-param-name t
- "Hint parameter name when the parameter called is literal."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hint-param-type t
- "Show type hints at the parameter of the function."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hint-set-type nil
- "Hint type at assignment operation."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hover-enable t
- "Enable hover."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hover-field-infer 3000
- "When hovering to view a table, type infer will be performed for each field.
-When the accumulated time of type infer reaches the set value (MS), the type
-infer of subsequent fields will be skipped."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hover-preview-fields 100
- "When hovering to view a table, limits the maximum number of previews for
-fields."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hover-view-number t
- "Hover to view numeric content (only if literal is not decimal)."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hover-view-string t
- "Hover to view the contents of a string (only if the literal contains an
-escape character)."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-hover-view-string-max 1000
- "The maximum length of a hover to view the contents of a string."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-intelli-sense-search-depth 0
- "Set the search depth for IntelliSense. Increasing this value increases
-accuracy, but decreases performance. Different workspace have different
-tolerance for this setting. Please adjust it to the appropriate value."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-runtime-file-encoding "utf8"
- "File encoding. The 'ansi' option is only available under the 'Windows'
-platform."
- :type '(choice (:tag "utf8" "ansi"))
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-runtime-nonstandard-symbol nil
- "Supports non-standard symbols. Make sure that your runtime environment
-supports these symbols."
- :type 'lsp-string-vector
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-runtime-path
- ["?.lua" "?/init.lua" "?/?.lua"]
- "`package.path`."
- :type 'lsp-string-vector
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-runtime-plugin nil
- "(Proposed) Plugin path. Default is `.vscode/lua/plugin.lua`"
- :type 'file
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-runtime-special nil
- "The custom global variables are regarded as some special built-in variables,
-and the language server will provide special support.
-```json
-\"Lua.runtime.special\" : {
-\"include\" : \"require\"
-}
-```"
- :type 'alist
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-runtime-unicode-name nil
- "Allows Unicode characters in name."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-runtime-version "Lua 5.4"
- "Lua runtime version."
- :type '(choice (:tag "Lua 5.1" "Lua 5.2" "Lua 5.3" "Lua 5.4" "LuaJIT"))
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-signature-help-enable t
- "Enable signature help."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-telemetry-enable nil
- "Enable telemetry to send your editor information and error logs over the
-network."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-window-progress-bar t
- "Show progress bar in status bar."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-window-status-bar t
- "Show extension status in status bar."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-workspace-ignore-dir
- [".vscode"]
- "Ignored directories (Use `.gitignore` grammar).
-```json
-\"Lua.workspace.ignoreDir\" : [
-\"temp/*.*\",
-\"!temp/*.lua\"
-]
-```"
- :type 'lsp-string-vector
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-workspace-ignore-submodules t
- "Ignore submodules."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-workspace-library nil
- "Load external library.
-
-This feature can load external Lua files, which can be used for definition,
-automatic completion and other functions. Note that the language server does
-not monitor changes in external files and needs to restart if the external
-files are modified. The following example shows loaded files in `C:/lua`
-and `../lib` ,exclude `../lib/temp`.
-
-```json
-\"Lua.workspace.library\": {
-\"C:/lua\": true,
-\"../lib\": [
-\"temp/*\"
-]
-}
-```"
- :type 'alist
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-workspace-max-preload 1000
- "Max preloaded files."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-workspace-preload-file-size 100
- "Skip files larger than this value (KB) when preloading."
- :type 'number
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-workspace-use-git-ignore t
- "Ignore files list in `.gitignore` ."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-files-associations nil
- "Files.associations."
- :type 'alist
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(defcustom lsp-lua-files-exclude nil
- "Files.exclude."
- :type 'alist
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-lua-language-server)
-
-(lsp-register-custom-settings
- '(("files.associations" lsp-lua-files-associations t)
- ("files.exclude" lsp-lua-files-exclude t)
- ("Lua.workspace.useGitIgnore" lsp-lua-workspace-use-git-ignore t)
- ("Lua.workspace.preloadFileSize" lsp-lua-workspace-preload-file-size)
- ("Lua.workspace.maxPreload" lsp-lua-workspace-max-preload)
- ("Lua.workspace.library" lsp-lua-workspace-library)
- ("Lua.workspace.ignoreSubmodules" lsp-lua-workspace-ignore-submodules t)
- ("Lua.workspace.ignoreDir" lsp-lua-workspace-ignore-dir)
- ("Lua.window.statusBar" lsp-lua-window-status-bar t)
- ("Lua.window.progressBar" lsp-lua-window-progress-bar t)
- ("Lua.telemetry.enable" lsp-lua-telemetry-enable t)
- ("Lua.signatureHelp.enable" lsp-lua-signature-help-enable t)
- ("Lua.runtime.version" lsp-lua-runtime-version)
- ("Lua.runtime.unicodeName" lsp-lua-runtime-unicode-name nil)
- ("Lua.runtime.special" lsp-lua-runtime-special)
- ("Lua.runtime.plugin" lsp-lua-runtime-plugin)
- ("Lua.runtime.path" lsp-lua-runtime-path)
- ("Lua.runtime.nonstandardSymbol" lsp-lua-runtime-nonstandard-symbol)
- ("Lua.runtime.fileEncoding" lsp-lua-runtime-file-encoding)
- ("Lua.intelliSense.searchDepth" lsp-lua-intelli-sense-search-depth)
- ("Lua.hover.viewStringMax" lsp-lua-hover-view-string-max)
- ("Lua.hover.viewString" lsp-lua-hover-view-string t)
- ("Lua.hover.viewNumber" lsp-lua-hover-view-number t)
- ("Lua.hover.previewFields" lsp-lua-hover-preview-fields)
- ("Lua.hover.fieldInfer" lsp-lua-hover-field-infer)
- ("Lua.hover.enable" lsp-lua-hover-enable t)
- ("Lua.hint.setType" lsp-lua-hint-set-type nil)
- ("Lua.hint.paramType" lsp-lua-hint-param-type t)
- ("Lua.hint.paramName" lsp-lua-hint-param-name t)
- ("Lua.hint.enable" lsp-lua-hint-enable t)
- ("Lua.diagnostics.workspaceRate" lsp-lua-diagnostics-workspace-rate)
- ("Lua.diagnostics.workspaceDelay" lsp-lua-diagnostics-workspace-delay)
- ("Lua.diagnostics.severity" lsp-lua-diagnostics-severity)
- ("Lua.diagnostics.neededFileStatus" lsp-lua-diagnostics-needed-file-status)
- ("Lua.diagnostics.globals" lsp-lua-diagnostics-globals)
- ("Lua.diagnostics.enable" lsp-lua-diagnostics-enable t)
- ("Lua.diagnostics.disable" lsp-lua-diagnostics-disable)
- ("Lua.develop.enable" lsp-lua-develop-enable t)
- ("Lua.develop.debuggerWait" lsp-lua-develop-debugger-wait t)
- ("Lua.develop.debuggerPort" lsp-lua-develop-debugger-port)
- ("Lua.completion.workspaceWord" lsp-lua-completion-workspace-word t)
- ("Lua.completion.keywordSnippet" lsp-lua-completion-keyword-snippet)
- ("Lua.completion.enable" lsp-lua-completion-enable t)
- ("Lua.completion.displayContext" lsp-lua-completion-display-context)
- ("Lua.completion.callSnippet" lsp-lua-completion-call-snippet)
- ("Lua.color.mode" lsp-lua-color-mode)))
-
-(defun lsp-lua-language-server-install (client callback error-callback update?)
- "Download the latest version of lua-language-server and extract it to
-`lsp-lua-language-server-install-dir'."
- (ignore client update?)
- (let ((store-path (expand-file-name "vs-lua" lsp-clients-lua-language-server-install-dir)))
- (lsp-download-install
- (lambda (&rest _)
- (set-file-modes lsp-clients-lua-language-server-bin #o0700)
- (funcall callback))
- error-callback
- :url (lsp-vscode-extension-url "sumneko" "lua" "1.17.4")
- :store-path store-path
- :decompress :zip)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection (lambda () (or lsp-clients-lua-language-server-command
- `(,lsp-clients-lua-language-server-bin
- ,@lsp-clients-lua-language-server-args
- ,lsp-clients-lua-language-server-main-location)))
- #'lsp-clients-lua-language-server-test)
- :major-modes '(lua-mode)
- :priority -2
- :server-id 'lua-language-server
- :download-server-fn #'lsp-lua-language-server-install))
-
-
-;;; lua-lsp
-(defgroup lsp-lua-lsp nil
- "Lua LSP client, provided by the Lua-Lsp."
- :group 'lsp-mode
- :version "7.1"
- :link '(url-link "https://github.com/Alloyed/lua-lsp"))
-
-(defcustom lsp-clients-luarocks-bin-dir (f-join (getenv "HOME") ".luarocks/bin/")
- "LuaRocks bin directory."
- :group 'lsp-lua-lsp
- :version "7.1"
- :risky t
- :type 'directory)
-
-(defcustom lsp-clients-lua-lsp-server-install-dir nil
- "Installation directory for Lua-Lsp Language Server."
- :group 'lsp-lua-lsp
- :version "7.1"
- :risky t
- :type 'file)
-
-(defun lsp-clients-lua-lsp-test ()
- "Test Lua-lsp language server files."
- (and (f-exists? lsp-clients-lua-lsp-server-install-dir)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection (lambda ()
- (or lsp-clients-lua-lsp-server-install-dir
- (f-join lsp-clients-luarocks-bin-dir "lua-lsp")))
- #'lsp-clients-lua-lsp-test)
- :major-modes '(lua-mode)
- :priority -3
- :server-id 'lsp-lua-lsp))
-
-;;; lua-roblox-language-server
-(defgroup lsp-lua-roblox-language-server nil
- "Roblox Lua LSP client, provided by the Roblox Lua Language Server."
- :group 'lsp-mode
- :version "7.1"
- :link '(url-link "https://github.com/NightrainsRbx/RobloxLsp"))
-
-(defcustom lsp-lua-roblox-language-server-install-dir (f-join lsp-server-install-dir "lua-roblox-language-server/")
- "Installation directory for Lua Language Server."
- :group 'lsp-lua-roblox-language-server
- :version "7.1"
- :risky t
- :type 'directory)
-
-(defcustom lsp-lua-roblox-language-server-bin
- (f-join lsp-lua-roblox-language-server-install-dir
- "extension/server/bin/"
- (pcase system-type
- ('gnu/linux "Linux/lua-language-server")
- ('darwin "macOS/lua-language-server")
- ('windows-nt "Windows/lua-language-server.exe")
- (_ "Linux/lua-language-server")))
- "Location of Roblox Lua Language Server."
- :group 'lsp-lua-roblox-language-server
- :version "7.1"
- :risky t
- :type 'file)
-
-(defcustom lsp-lua-roblox-language-server-main-location
- (f-join lsp-lua-roblox-language-server-install-dir
- "extension/server/main.lua")
- "Location of Roblox Lua Language Server main.lua."
- :group 'lsp-lua-roblox-language-server
- :version "7.1"
- :risky t
- :type 'file)
-
-(defcustom lsp-lua-roblox-server-download-url
- (lsp-vscode-extension-url "Nightrains" "robloxlsp" "0.15.8")
- "Download url for Roblox Lua vscode extension."
- :group 'lsp-lua-roblox-language-server
- :version "7.1"
- :type 'string)
-
-(defcustom lsp-lua-roblox-server-store-path
- (expand-file-name "vs-lua-roblox" lsp-lua-roblox-language-server-install-dir)
- "Server file name for the vscode extension."
- :group 'lsp-lua-roblox-language-server
- :version "7.1"
- :type 'string)
-
-(defun lsp-lua-roblox-language-server-test ()
- "Test Lua language server binaries and files."
- (and (f-exists? lsp-lua-roblox-language-server-main-location)
- (f-exists? lsp-lua-roblox-language-server-bin)))
-
-(defun lsp-lua-roblox-language-server-install (_client callback error-callback _update?)
- "Download the latest version of lua-language-server and extract it to
-`lsp-lua-roblox-language-server-download-url'."
- (lsp-download-install
- (lambda (&rest _)
- (set-file-modes lsp-lua-roblox-language-server-bin #o0700)
- (funcall callback))
- error-callback
- :url lsp-lua-roblox-server-download-url
- :store-path lsp-lua-roblox-server-store-path
- :decompress :zip))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection (lambda () (or lsp-clients-lua-language-server-command
- `(,lsp-lua-roblox-language-server-bin
- ,@lsp-clients-lua-language-server-args
- ,lsp-lua-roblox-language-server-main-location)))
- #'lsp-lua-roblox-language-server-test)
- :major-modes '(lua-mode)
- :priority -4
- :server-id 'lua-roblox-language-server
- :download-server-fn #'lsp-lua-roblox-language-server-install))
-
-(lsp-consistency-check lsp-lua)
-
-(provide 'lsp-lua)
-;;; lsp-lua.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-markdown.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-markdown.el
deleted file mode 100644
index ae01dfa..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-markdown.el
+++ /dev/null
@@ -1,105 +0,0 @@
-;;; lsp-markdown.el --- lsp-mode markdown integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 lsp-mode maintainers
-
-;; Author: lsp-mode maintainers
-;; Keywords: languages
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for unified-language-server
-
-;;; Code:
-
-(require 'lsp-mode)
-
-;;; Markdown
-(defgroup lsp-markdown nil
- "Settings for the markdown language server client."
- :group 'lsp-mode
- :link '(url-link "https://github.com/unifiedjs/unified-language-server")
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-markdown-server-command "unified-language-server"
- "The binary (or full path to binary) which executes the server."
- :type 'string
- :group 'lsp-markdown
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-markdown-server-command-args '("--parser=remark-parse" "--stdio")
- "Command-line arguments for the markdown lsp server."
- :type '(repeat 'string)
- :group 'lsp-markdown
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-markdown-remark-plugins [["#remark-preset-lint-markdown-style-guide"]]
- "The JSON configuration object for plugins.
-
-For a complete list of plugins, check:
- https://github.com/unifiedjs/unified-language-server/blob/main/CONFIGURATION.md#re-using-settings"
- :type 'lsp-string-vector
- :group 'lsp-markdown
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-markdown-remark-check-text-with-setting "retext-english"
- "Configure `checkTextWith' subproperty.
-
-For a complete list of plugins, check:
- https://github.com/unifiedjs/unified-language-server/blob/main/CONFIGURATION.md#re-using-settings"
- :type '(choice (
- (const "retext-english")
- (const "remark-parse")))
- :group 'lsp-markdown
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-markdown-remark-check-text-with-mutator ["#remark-retext" "#parse-latin"]
- "Vector of additional mutators.
-
-For a complete list of plugins, check:
- https://github.com/unifiedjs/unified-language-server/blob/main/CONFIGURATION.md#re-using-settings"
- :type 'lsp-string-vector
- :group 'lsp-markdown
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-dependency 'unified-language-server
- '(:system "unified-language-server")
- '(:npm :package "unified-language-server"
- :path "unified-language-server"))
-
-(lsp-register-custom-settings
- `(("unified-language-server.remark-parse.plugins" lsp-markdown-remark-plugins)
- ("unified-language-server.remark-parse.checkTextWith.setting" lsp-markdown-remark-check-text-with-setting)
- ("unified-language-server.remark-parse.checkTextWith.mutator" lsp-markdown-remark-check-text-with-mutator)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- (cons (or (executable-find lsp-markdown-server-command)
- (lsp-package-path 'unified-language-server))
- lsp-markdown-server-command-args)))
- :activation-fn (lsp-activate-on "markdown")
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration (lsp-configuration-section "unified-language-server"))))
- :major-modes '(markdown-mode)
- :priority -1
- :major-modes '(markdown-mode)
- :server-id 'unified))
-
-(lsp-consistency-check lsp-markdown)
-
-(provide 'lsp-markdown)
-;;; lsp-markdown.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-autoloads.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-autoloads.el
deleted file mode 100644
index 6f040a4..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-autoloads.el
+++ /dev/null
@@ -1,745 +0,0 @@
-;;; lsp-mode-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "lsp-actionscript" "lsp-actionscript.el" (0
-;;;;;; 0 0 0))
-;;; Generated autoloads from lsp-actionscript.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-actionscript" '("lsp-actionscript-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ada" "lsp-ada.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ada.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ada" '("lsp-ada-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-angular" "lsp-angular.el" (0 0 0 0))
-;;; Generated autoloads from lsp-angular.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-angular" '("lsp-client")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-bash" "lsp-bash.el" (0 0 0 0))
-;;; Generated autoloads from lsp-bash.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-bash" '("lsp-bash-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-beancount" "lsp-beancount.el" (0 0 0 0))
-;;; Generated autoloads from lsp-beancount.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-beancount" '("lsp-beancount-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-clangd" "lsp-clangd.el" (0 0 0 0))
-;;; Generated autoloads from lsp-clangd.el
-
-(autoload 'lsp-cpp-flycheck-clang-tidy-error-explainer "lsp-clangd" "\
-Explain a clang-tidy ERROR by scraping documentation from llvm.org.
-
-\(fn ERROR)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-clangd" '("lsp-c")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-clojure" "lsp-clojure.el" (0 0 0 0))
-;;; Generated autoloads from lsp-clojure.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-clojure" '("lsp-clojure-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-completion" "lsp-completion.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from lsp-completion.el
-
-(define-obsolete-variable-alias 'lsp-prefer-capf 'lsp-completion-provider "lsp-mode 7.0.1")
-
-(define-obsolete-variable-alias 'lsp-enable-completion-at-point 'lsp-completion-enable "lsp-mode 7.0.1")
-
-(autoload 'lsp-completion-at-point "lsp-completion" "\
-Get lsp completions." nil nil)
-
-(autoload 'lsp-completion--enable "lsp-completion" "\
-Enable LSP completion support." nil nil)
-
-(autoload 'lsp-completion-mode "lsp-completion" "\
-Toggle LSP completion support.
-
-If called interactively, enable Lsp-Completion mode if ARG is
-positive, and disable it if ARG is zero or negative. If called
-from Lisp, also enable the mode if ARG is omitted or nil, and
-toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(add-hook 'lsp-configure-hook (lambda nil (when (and lsp-auto-configure lsp-completion-enable) (lsp-completion--enable))))
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-completion" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-crystal" "lsp-crystal.el" (0 0 0 0))
-;;; Generated autoloads from lsp-crystal.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-crystal" '("lsp-clients-crystal-executable")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-csharp" "lsp-csharp.el" (0 0 0 0))
-;;; Generated autoloads from lsp-csharp.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-csharp" '("lsp-csharp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-css" "lsp-css.el" (0 0 0 0))
-;;; Generated autoloads from lsp-css.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-css" '("lsp-css-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-diagnostics" "lsp-diagnostics.el" (0 0
-;;;;;; 0 0))
-;;; Generated autoloads from lsp-diagnostics.el
-
-(define-obsolete-variable-alias 'lsp-diagnostic-package 'lsp-diagnostics-provider "lsp-mode 7.0.1")
-
-(define-obsolete-variable-alias 'lsp-flycheck-default-level 'lsp-diagnostics-flycheck-default-level "lsp-mode 7.0.1")
-
-(autoload 'lsp-diagnostics-lsp-checker-if-needed "lsp-diagnostics" nil nil nil)
-
-(autoload 'lsp-diagnostics--enable "lsp-diagnostics" "\
-Enable LSP checker support." nil nil)
-
-(autoload 'lsp-diagnostics-mode "lsp-diagnostics" "\
-Toggle LSP diagnostics integration.
-
-If called interactively, enable Lsp-Diagnostics mode if ARG is
-positive, and disable it if ARG is zero or negative. If called
-from Lisp, also enable the mode if ARG is omitted or nil, and
-toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(add-hook 'lsp-configure-hook (lambda nil (when lsp-auto-configure (lsp-diagnostics--enable))))
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-diagnostics" '("lsp-diagnostics-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-dired" "lsp-dired.el" (0 0 0 0))
-;;; Generated autoloads from lsp-dired.el
-
-(defvar lsp-dired-mode nil "\
-Non-nil if Lsp-Dired mode is enabled.
-See the `lsp-dired-mode' command
-for a description of this minor mode.
-Setting this variable directly does not take effect;
-either customize it (see the info node `Easy Customization')
-or call the function `lsp-dired-mode'.")
-
-(custom-autoload 'lsp-dired-mode "lsp-dired" nil)
-
-(autoload 'lsp-dired-mode "lsp-dired" "\
-Display `lsp-mode' icons for each file in a dired buffer.
-
-If called interactively, enable Lsp-Dired mode if ARG is
-positive, and disable it if ARG is zero or negative. If called
-from Lisp, also enable the mode if ARG is omitted or nil, and
-toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-dired" '("lsp-dired-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-dockerfile" "lsp-dockerfile.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from lsp-dockerfile.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-dockerfile" '("lsp-dockerfile-language-server-command")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-elixir" "lsp-elixir.el" (0 0 0 0))
-;;; Generated autoloads from lsp-elixir.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-elixir" '("lsp-elixir-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-elm" "lsp-elm.el" (0 0 0 0))
-;;; Generated autoloads from lsp-elm.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-elm" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-erlang" "lsp-erlang.el" (0 0 0 0))
-;;; Generated autoloads from lsp-erlang.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-erlang" '("lsp-erlang-server-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-eslint" "lsp-eslint.el" (0 0 0 0))
-;;; Generated autoloads from lsp-eslint.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-eslint" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-fortran" "lsp-fortran.el" (0 0 0 0))
-;;; Generated autoloads from lsp-fortran.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-fortran" '("lsp-clients-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-fsharp" "lsp-fsharp.el" (0 0 0 0))
-;;; Generated autoloads from lsp-fsharp.el
-
-(autoload 'lsp-fsharp--workspace-load "lsp-fsharp" "\
-Load all of the provided PROJECTS.
-
-\(fn PROJECTS)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-fsharp" '("lsp-fsharp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-gdscript" "lsp-gdscript.el" (0 0 0 0))
-;;; Generated autoloads from lsp-gdscript.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-gdscript" '("lsp-gdscript-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-go" "lsp-go.el" (0 0 0 0))
-;;; Generated autoloads from lsp-go.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-go" '("lsp-go-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-groovy" "lsp-groovy.el" (0 0 0 0))
-;;; Generated autoloads from lsp-groovy.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-groovy" '("lsp-groovy-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-hack" "lsp-hack.el" (0 0 0 0))
-;;; Generated autoloads from lsp-hack.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-hack" '("lsp-clients-hack-command")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-haxe" "lsp-haxe.el" (0 0 0 0))
-;;; Generated autoloads from lsp-haxe.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-haxe" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-headerline" "lsp-headerline.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from lsp-headerline.el
-
-(autoload 'lsp-headerline-breadcrumb-mode "lsp-headerline" "\
-Toggle breadcrumb on headerline.
-
-If called interactively, enable Lsp-Headerline-Breadcrumb mode if
-ARG is positive, and disable it if ARG is zero or negative. If
-called from Lisp, also enable the mode if ARG is omitted or nil,
-and toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'lsp-breadcrumb-go-to-symbol "lsp-headerline" "\
-Go to the symbol on breadcrumb at SYMBOL-POSITION.
-
-\(fn SYMBOL-POSITION)" t nil)
-
-(autoload 'lsp-breadcrumb-narrow-to-symbol "lsp-headerline" "\
-Narrow to the symbol range on breadcrumb at SYMBOL-POSITION.
-
-\(fn SYMBOL-POSITION)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-headerline" '("lsp-headerline-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-html" "lsp-html.el" (0 0 0 0))
-;;; Generated autoloads from lsp-html.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-html" '("lsp-html-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-icons" "lsp-icons.el" (0 0 0 0))
-;;; Generated autoloads from lsp-icons.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-icons" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ido" "lsp-ido.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ido.el
-
-(autoload 'lsp-ido-workspace-symbol "lsp-ido" "\
-`ido' for lsp workspace/symbol.
-When called with prefix ARG the default selection will be symbol at point.
-
-\(fn ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ido" '("lsp-ido-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-iedit" "lsp-iedit.el" (0 0 0 0))
-;;; Generated autoloads from lsp-iedit.el
-
-(autoload 'lsp-iedit-highlights "lsp-iedit" "\
-Start an `iedit' operation on the documentHighlights at point.
-This can be used as a primitive `lsp-rename' replacement if the
-language server doesn't support renaming.
-
-See also `lsp-enable-symbol-highlighting'." t nil)
-
-(autoload 'lsp-evil-multiedit-highlights "lsp-iedit" "\
-Start an `evil-multiedit' operation on the documentHighlights at point.
-This can be used as a primitive `lsp-rename' replacement if the
-language server doesn't support renaming.
-
-See also `lsp-enable-symbol-highlighting'." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-iedit" '("lsp-iedit--on-ranges")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-javascript" "lsp-javascript.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from lsp-javascript.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-javascript" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-json" "lsp-json.el" (0 0 0 0))
-;;; Generated autoloads from lsp-json.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-json" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-kotlin" "lsp-kotlin.el" (0 0 0 0))
-;;; Generated autoloads from lsp-kotlin.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-kotlin" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-lens" "lsp-lens.el" (0 0 0 0))
-;;; Generated autoloads from lsp-lens.el
-
-(autoload 'lsp-lens--enable "lsp-lens" "\
-Enable lens mode." nil nil)
-
-(autoload 'lsp-lens-show "lsp-lens" "\
-Display lenses in the buffer." t nil)
-
-(autoload 'lsp-lens-hide "lsp-lens" "\
-Delete all lenses." t nil)
-
-(autoload 'lsp-lens-mode "lsp-lens" "\
-Toggle code-lens overlays.
-
-If called interactively, enable Lsp-Lens mode if ARG is positive,
-and disable it if ARG is zero or negative. If called from Lisp,
-also enable the mode if ARG is omitted or nil, and toggle it if
-ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'lsp-avy-lens "lsp-lens" "\
-Click lsp lens using `avy' package." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-lens" '("lsp-lens-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-lua" "lsp-lua.el" (0 0 0 0))
-;;; Generated autoloads from lsp-lua.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-lua" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-markdown" "lsp-markdown.el" (0 0 0 0))
-;;; Generated autoloads from lsp-markdown.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-markdown" '("lsp-markdown-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-mode" "lsp-mode.el" (0 0 0 0))
-;;; Generated autoloads from lsp-mode.el
-(put 'lsp-enable-file-watchers 'safe-local-variable #'booleanp)
-(put 'lsp-file-watch-threshold 'safe-local-variable (lambda (i) (or (numberp i) (not i))))
-
-(autoload 'lsp-load-vscode-workspace "lsp-mode" "\
-Load vscode workspace from FILE
-
-\(fn FILE)" t nil)
-
-(autoload 'lsp-save-vscode-workspace "lsp-mode" "\
-Save vscode workspace to FILE
-
-\(fn FILE)" t nil)
-
-(autoload 'lsp-install-server "lsp-mode" "\
-Interactively install server.
-When prefix UPDATE? is t force installation even if the server is present.
-
-\(fn UPDATE\\=\\? &optional SERVER-ID)" t nil)
-
-(autoload 'lsp-ensure-server "lsp-mode" "\
-Ensure server SERVER-ID
-
-\(fn SERVER-ID)" nil nil)
-
-(autoload 'lsp "lsp-mode" "\
-Entry point for the server startup.
-When ARG is t the lsp mode will start new language server even if
-there is language server which can handle current language. When
-ARG is nil current file will be opened in multi folder language
-server if there is such. When `lsp' is called with prefix
-argument ask the user to select which language server to start.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'lsp-deferred "lsp-mode" "\
-Entry point that defers server startup until buffer is visible.
-`lsp-deferred' will wait until the buffer is visible before invoking `lsp'.
-This avoids overloading the server with many files when starting Emacs." nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-mode" '("lsp-" "make-lsp-client" "when-lsp-workspace" "with-lsp-workspace")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-modeline" "lsp-modeline.el" (0 0 0 0))
-;;; Generated autoloads from lsp-modeline.el
-
-(define-obsolete-variable-alias 'lsp-diagnostics-modeline-scope 'lsp-modeline-diagnostics-scope "lsp-mode 7.0.1")
-
-(autoload 'lsp-modeline-code-actions-mode "lsp-modeline" "\
-Toggle code actions on modeline.
-
-If called interactively, enable Lsp-Modeline-Code-Actions mode if
-ARG is positive, and disable it if ARG is zero or negative. If
-called from Lisp, also enable the mode if ARG is omitted or nil,
-and toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(define-obsolete-function-alias 'lsp-diagnostics-modeline-mode 'lsp-modeline-diagnostics-mode "lsp-mode 7.0.1")
-
-(autoload 'lsp-modeline-diagnostics-mode "lsp-modeline" "\
-Toggle diagnostics modeline.
-
-If called interactively, enable Lsp-Modeline-Diagnostics mode if
-ARG is positive, and disable it if ARG is zero or negative. If
-called from Lisp, also enable the mode if ARG is omitted or nil,
-and toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'lsp-modeline-workspace-status-mode "lsp-modeline" "\
-Toggle workspace status on modeline.
-
-If called interactively, enable Lsp-Modeline-Workspace-Status
-mode if ARG is positive, and disable it if ARG is zero or
-negative. If called from Lisp, also enable the mode if ARG is
-omitted or nil, and toggle it if ARG is `toggle'; disable the
-mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-modeline" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-nix" "lsp-nix.el" (0 0 0 0))
-;;; Generated autoloads from lsp-nix.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-nix" '("lsp-nix-server-path")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ocaml" "lsp-ocaml.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ocaml.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ocaml" '("lsp-ocaml-l")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-perl" "lsp-perl.el" (0 0 0 0))
-;;; Generated autoloads from lsp-perl.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-perl" '("lsp-perl-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-php" "lsp-php.el" (0 0 0 0))
-;;; Generated autoloads from lsp-php.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-php" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-prolog" "lsp-prolog.el" (0 0 0 0))
-;;; Generated autoloads from lsp-prolog.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-prolog" '("lsp-prolog-server-command")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-protocol" "lsp-protocol.el" (0 0 0 0))
-;;; Generated autoloads from lsp-protocol.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-protocol" '("dash-expand:&RangeToPoint" "lsp")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-purescript" "lsp-purescript.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from lsp-purescript.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-purescript" '("lsp-purescript-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-pwsh" "lsp-pwsh.el" (0 0 0 0))
-;;; Generated autoloads from lsp-pwsh.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-pwsh" '("lsp-pwsh-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-pyls" "lsp-pyls.el" (0 0 0 0))
-;;; Generated autoloads from lsp-pyls.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-pyls" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-pylsp" "lsp-pylsp.el" (0 0 0 0))
-;;; Generated autoloads from lsp-pylsp.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-pylsp" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-r" "lsp-r.el" (0 0 0 0))
-;;; Generated autoloads from lsp-r.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-r" '("lsp-clients-r-server-command")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-racket" "lsp-racket.el" (0 0 0 0))
-;;; Generated autoloads from lsp-racket.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-racket" '("lsp-racket-lang")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-rf" "lsp-rf.el" (0 0 0 0))
-;;; Generated autoloads from lsp-rf.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-rf" '("expand-start-command" "lsp-rf-language-server-" "parse-rf-language-server-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-rust" "lsp-rust.el" (0 0 0 0))
-;;; Generated autoloads from lsp-rust.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-rust" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-semantic-tokens" "lsp-semantic-tokens.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from lsp-semantic-tokens.el
-
-(autoload 'lsp--semantic-tokens-initialize-buffer "lsp-semantic-tokens" "\
-Initialize the buffer for semantic tokens.
-IS-RANGE-PROVIDER is non-nil when server supports range requests." nil nil)
-
-(autoload 'lsp--semantic-tokens-initialize-workspace "lsp-semantic-tokens" "\
-Initialize semantic tokens for WORKSPACE.
-
-\(fn WORKSPACE)" nil nil)
-
-(autoload 'lsp-semantic-tokens--warn-about-deprecated-setting "lsp-semantic-tokens" "\
-Warn about deprecated semantic highlighting variable." nil nil)
-
-(autoload 'lsp-semantic-tokens--enable "lsp-semantic-tokens" "\
-Enable semantic tokens mode." nil nil)
-
-(autoload 'lsp-semantic-tokens-mode "lsp-semantic-tokens" "\
-Toggle semantic-tokens support.
-
-If called interactively, enable Lsp-Semantic-Tokens mode if ARG
-is positive, and disable it if ARG is zero or negative. If
-called from Lisp, also enable the mode if ARG is omitted or nil,
-and toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-semantic-tokens" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-solargraph" "lsp-solargraph.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from lsp-solargraph.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-solargraph" '("lsp-solargraph-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-sorbet" "lsp-sorbet.el" (0 0 0 0))
-;;; Generated autoloads from lsp-sorbet.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-sorbet" '("lsp-sorbet-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-sqls" "lsp-sqls.el" (0 0 0 0))
-;;; Generated autoloads from lsp-sqls.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-sqls" '("lsp-sql")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-steep" "lsp-steep.el" (0 0 0 0))
-;;; Generated autoloads from lsp-steep.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-steep" '("lsp-steep-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-svelte" "lsp-svelte.el" (0 0 0 0))
-;;; Generated autoloads from lsp-svelte.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-svelte" '("lsp-svelte-plugin-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-terraform" "lsp-terraform.el" (0 0 0 0))
-;;; Generated autoloads from lsp-terraform.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-terraform" '("lsp-terraform-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-tex" "lsp-tex.el" (0 0 0 0))
-;;; Generated autoloads from lsp-tex.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-tex" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-v" "lsp-v.el" (0 0 0 0))
-;;; Generated autoloads from lsp-v.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-v" '("lsp-v-vls-executable")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-vala" "lsp-vala.el" (0 0 0 0))
-;;; Generated autoloads from lsp-vala.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-vala" '("lsp-clients-vala-ls-executable")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-verilog" "lsp-verilog.el" (0 0 0 0))
-;;; Generated autoloads from lsp-verilog.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-verilog" '("lsp-clients-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-vetur" "lsp-vetur.el" (0 0 0 0))
-;;; Generated autoloads from lsp-vetur.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-vetur" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-vhdl" "lsp-vhdl.el" (0 0 0 0))
-;;; Generated autoloads from lsp-vhdl.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-vhdl" '("ghdl-ls-bin-name" "hdl-checker-bin-name" "lsp-vhdl-" "vhdl-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-vimscript" "lsp-vimscript.el" (0 0 0 0))
-;;; Generated autoloads from lsp-vimscript.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-vimscript" '("lsp-clients-vim-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-xml" "lsp-xml.el" (0 0 0 0))
-;;; Generated autoloads from lsp-xml.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-xml" '("lsp-xml-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-yaml" "lsp-yaml.el" (0 0 0 0))
-;;; Generated autoloads from lsp-yaml.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-yaml" '("lsp-yaml-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-zig" "lsp-zig.el" (0 0 0 0))
-;;; Generated autoloads from lsp-zig.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-zig" '("lsp-zig-zls-executable")))
-
-;;;***
-
-;;;### (autoloads nil nil ("lsp-cmake.el" "lsp-d.el" "lsp-dhall.el"
-;;;;;; "lsp-mode-pkg.el" "lsp-nim.el" "lsp.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; lsp-mode-autoloads.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-pkg.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-pkg.el
deleted file mode 100644
index 3093b63..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode-pkg.el
+++ /dev/null
@@ -1,18 +0,0 @@
-(define-package "lsp-mode" "20210716.2233" "LSP mode"
- '((emacs "26.1")
- (dash "2.18.0")
- (f "0.20.0")
- (ht "2.3")
- (spinner "1.7.3")
- (markdown-mode "2.3")
- (lv "0"))
- :commit "21dd93ee4add2086d9006e0e6143553bdaa61519" :authors
- '(("Vibhav Pant, Fangrui Song, Ivan Yonchovski"))
- :maintainer
- '("Vibhav Pant, Fangrui Song, Ivan Yonchovski")
- :keywords
- '("languages")
- :url "https://github.com/emacs-lsp/lsp-mode")
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode.el
deleted file mode 100644
index 0fd635b..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-mode.el
+++ /dev/null
@@ -1,8656 +0,0 @@
-;;; lsp-mode.el --- LSP mode -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: Vibhav Pant, Fangrui Song, Ivan Yonchovski
-;; Keywords: languages
-;; Package-Requires: ((emacs "26.1") (dash "2.18.0") (f "0.20.0") (ht "2.3") (spinner "1.7.3") (markdown-mode "2.3") (lv "0"))
-;; Version: 7.1.0
-
-;; URL: https://github.com/emacs-lsp/lsp-mode
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Emacs client/library for the Language Server Protocol
-
-;;; Code:
-
-(require 'cl-generic)
-(require 'cl-lib)
-(require 'compile)
-(require 'dash)
-(require 'epg)
-(require 'ewoc)
-(require 'f)
-(require 'filenotify)
-(require 'files)
-(require 'ht)
-(require 'imenu)
-(require 'inline)
-(require 'json)
-(require 'lv)
-(require 'markdown-mode)
-(require 'network-stream)
-(require 'pcase)
-(require 'rx)
-(require 's)
-(require 'seq)
-(require 'spinner)
-(require 'subr-x)
-(require 'tree-widget)
-(require 'url-parse)
-(require 'url-util)
-(require 'widget)
-(require 'xref)
-(require 'minibuffer)
-(require 'yasnippet nil t)
-(require 'lsp-protocol)
-
-(defgroup lsp-mode nil
- "Language Server Protocol client."
- :group 'tools
- :tag "Language Server (lsp-mode)")
-
-(declare-function evil-set-command-property "ext:evil-common")
-(declare-function projectile-project-root "ext:projectile")
-(declare-function yas-expand-snippet "ext:yasnippet")
-(declare-function dap-mode "ext:dap-mode")
-(declare-function dap-auto-configure-mode "ext:dap-mode")
-
-(defvar yas-inhibit-overlay-modification-protection)
-(defvar yas-indent-line)
-(defvar yas-wrap-around-region)
-(defvar yas-also-auto-indent-first-line)
-(defvar dap-auto-configure-mode)
-(defvar dap-ui-menu-items)
-(defvar company-minimum-prefix-length)
-
-(defconst lsp--message-type-face
- `((1 . ,compilation-error-face)
- (2 . ,compilation-warning-face)
- (3 . ,compilation-message-face)
- (4 . ,compilation-info-face)))
-
-(defconst lsp--errors
- '((-32700 "Parse Error")
- (-32600 "Invalid Request")
- (-32601 "Method not Found")
- (-32602 "Invalid Parameters")
- (-32603 "Internal Error")
- (-32099 "Server Start Error")
- (-32000 "Server End Error")
- (-32002 "Server Not Initialized")
- (-32001 "Unknown Error Code")
- (-32800 "Request Cancelled"))
- "Alist of error codes to user friendly strings.")
-
-(defconst lsp--empty-ht (make-hash-table))
-
-(eval-and-compile
- (defun dash-expand:&lsp-wks (key source)
- `(,(intern-soft (format "lsp--workspace-%s" (eval key))) ,source))
-
- (defun dash-expand:&lsp-cln (key source)
- `(,(intern-soft (format "lsp--client-%s" (eval key))) ,source)))
-
-(define-obsolete-variable-alias 'lsp-print-io 'lsp-log-io "lsp-mode 6.1")
-
-(defcustom lsp-log-io nil
- "If non-nil, log all messages from the language server to a *lsp-log* buffer."
- :group 'lsp-mode
- :type 'boolean)
-
-(defcustom lsp-log-max message-log-max
- "Maximum number of lines to keep in the log buffer.
-If nil, disable message logging. If t, log messages but don’t truncate
-the buffer when it becomes large."
- :group 'lsp-mode
- :type '(choice (const :tag "Disable" nil)
- (integer :tag "lines")
- (const :tag "Unlimited" t))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-io-messages-max t
- "Maximum number of messages that can be locked in a `lsp-io' buffer."
- :group 'lsp-mode
- :type '(choice (const :tag "Unlimited" t)
- (integer :tag "Messages"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-keep-workspace-alive t
- "If non nil keep workspace alive when the last workspace buffer is closed."
- :group 'lsp-mode
- :type 'boolean)
-
-(defcustom lsp-enable-snippet t
- "Enable/disable snippet completion support."
- :group 'lsp-completion
- :type 'boolean)
-
-(defcustom lsp-enable-folding t
- "Enable/disable code folding support."
- :group 'lsp-mode
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(define-obsolete-variable-alias 'lsp-enable-semantic-highlighting 'lsp-semantic-tokens-enable "lsp-mode 7.1")
-
-(defcustom lsp-semantic-tokens-enable nil
- "Enable/disable support for semantic tokens.
-As defined by the Language Server Protocol 3.16."
- :group 'lsp-semantic-tokens
- :type 'boolean)
-
-(defcustom lsp-folding-range-limit nil
- "The maximum number of folding ranges to receive from the language server."
- :group 'lsp-mode
- :type '(choice (const :tag "No limit." nil)
- (integer :tag "Number of lines."))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-folding-line-folding-only nil
- "If non-nil, only fold complete lines."
- :group 'lsp-mode
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-client-packages
- '(ccls lsp-actionscript lsp-ada lsp-angular lsp-bash lsp-beancount lsp-clangd lsp-clojure lsp-cmake
- lsp-crystal lsp-csharp lsp-css lsp-d lsp-dart lsp-dhall lsp-dockerfile lsp-elm
- lsp-elixir lsp-erlang lsp-eslint lsp-fortran lsp-fsharp lsp-gdscript lsp-go
- lsp-hack lsp-grammarly lsp-groovy lsp-haskell lsp-haxe lsp-java lsp-javascript lsp-json
- lsp-kotlin lsp-ltex lsp-lua lsp-markdown lsp-nim lsp-nix lsp-metals lsp-ocaml lsp-perl lsp-php lsp-pwsh
- lsp-pyls lsp-pylsp lsp-python-ms lsp-purescript lsp-r lsp-rf lsp-rust lsp-solargraph lsp-sorbet
- lsp-tex lsp-terraform lsp-v lsp-vala lsp-verilog lsp-vetur lsp-vhdl lsp-vimscript lsp-xml
- lsp-yaml lsp-sqls lsp-svelte lsp-steep lsp-zig)
- "List of the clients to be automatically required."
- :group 'lsp-mode
- :type '(repeat symbol))
-
-(defcustom lsp-progress-via-spinner t
- "If non-nil, display LSP $/progress reports via a spinner in the modeline."
- :group 'lsp-mode
- :type 'boolean)
-
-(defvar-local lsp--cur-workspace nil)
-
-(defvar-local lsp--cur-version 0)
-(defvar-local lsp--virtual-buffer-connections nil)
-(defvar-local lsp--virtual-buffer nil)
-(defvar lsp--virtual-buffer-mappings (ht))
-
-(defvar lsp--uri-file-prefix (pcase system-type
- (`windows-nt "file:///")
- (_ "file://"))
- "Prefix for a file-uri.")
-
-(defvar-local lsp-buffer-uri nil
- "If set, return it instead of calculating it using `buffer-file-name'.")
-
-(define-error 'lsp-error "Unknown lsp-mode error")
-(define-error 'lsp-empty-response-error
- "Empty response from the language server" 'lsp-error)
-(define-error 'lsp-timed-out-error
- "Timed out while waiting for a response from the language server" 'lsp-error)
-(define-error 'lsp-capability-not-supported
- "Capability not supported by the language server" 'lsp-error)
-(define-error 'lsp-file-scheme-not-supported
- "Unsupported file scheme" 'lsp-error)
-(define-error 'lsp-client-already-exists-error
- "A client with this server-id already exists" 'lsp-error)
-(define-error 'lsp-no-code-actions
- "No code actions" 'lsp-error)
-
-(defcustom lsp-auto-guess-root nil
- "Automatically guess the project root using projectile/project.
-Do *not* use this setting unless you are familiar with `lsp-mode'
-internals and you are sure that all of your projects are
-following `projectile'/`project.el' conventions."
- :group 'lsp-mode
- :type 'boolean)
-
-(defcustom lsp-restart 'interactive
- "Defines how server-exited events must be handled."
- :group 'lsp-mode
- :type '(choice (const interactive)
- (const auto-restart)
- (const ignore)))
-
-(defcustom lsp-session-file (expand-file-name (locate-user-emacs-file ".lsp-session-v1"))
- "File where session information is stored."
- :group 'lsp-mode
- :type 'file)
-
-(defcustom lsp-auto-configure t
- "Auto configure `lsp-mode' main features.
-When set to t `lsp-mode' will auto-configure completion,
-code-actions, breadcrumb, `flycheck', `flymake', `imenu', symbol highlighting,
-lenses, links, and so on.
-
-For finer granularity you may use `lsp-enable-*' properties."
- :group 'lsp-mode
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-disabled-clients nil
- "A list of disabled/blacklisted clients.
-Each entry in the list can be either:
-a symbol, the server-id for the LSP client, or
-a cons pair (MAJOR-MODE . CLIENTS), where MAJOR-MODE is the major-mode,
-and CLIENTS is either a client or a list of clients.
-
-This option can also be used as a file- or directory-local variable to
-disable a language server for individual files or directories/projects
-respectively."
- :group 'lsp-mode
- :type '(repeat (symbol))
- :safe 'listp
- :package-version '(lsp-mode . "6.1"))
-
-(defvar lsp-clients (make-hash-table :test 'eql)
- "Hash table server-id -> client.
-It contains all of the clients that are currently registered.")
-
-(defvar lsp-enabled-clients nil
- "List of clients allowed to be used for projects.
-When nil, all registered clients are considered candidates.")
-
-(defvar lsp-last-id 0
- "Last request id.")
-
-(defcustom lsp-before-initialize-hook nil
- "List of functions to be called before a Language Server has been initialized
-for a new workspace."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-after-initialize-hook nil
- "List of functions to be called after a Language Server has been initialized
-for a new workspace."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-before-open-hook nil
- "List of functions to be called before a new file with LSP support is opened."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-after-open-hook nil
- "List of functions to be called after a new file with LSP support is opened."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-enable-file-watchers t
- "If non-nil lsp-mode will watch the files in the workspace if
-the server has requested that."
- :type 'boolean
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.1"))
-;;;###autoload(put 'lsp-enable-file-watchers 'safe-local-variable #'booleanp)
-
-(define-obsolete-variable-alias 'lsp-file-watch-ignored 'lsp-file-watch-ignored-directories "7.1.0")
-
-(defcustom lsp-file-watch-ignored-directories
- '(; SCM tools
- "[/\\\\]\\.git\\'"
- "[/\\\\]\\.github\\'"
- "[/\\\\]\\.circleci\\'"
- "[/\\\\]\\.hg\\'"
- "[/\\\\]\\.bzr\\'"
- "[/\\\\]_darcs\\'"
- "[/\\\\]\\.svn\\'"
- "[/\\\\]_FOSSIL_\\'"
- ;; IDE or build tools
- "[/\\\\]\\.idea\\'"
- "[/\\\\]\\.ensime_cache\\'"
- "[/\\\\]\\.eunit\\'"
- "[/\\\\]node_modules"
- "[/\\\\]\\.yarn\\'"
- "[/\\\\]\\.fslckout\\'"
- "[/\\\\]\\.tox\\'"
- "[/\\\\]dist\\'"
- "[/\\\\]dist-newstyle\\'"
- "[/\\\\]\\.stack-work\\'"
- "[/\\\\]\\.bloop\\'"
- "[/\\\\]\\.metals\\'"
- "[/\\\\]target\\'"
- "[/\\\\]\\.ccls-cache\\'"
- "[/\\\\]\\.vscode\\'"
- ;; Autotools output
- "[/\\\\]\\.deps\\'"
- "[/\\\\]build-aux\\'"
- "[/\\\\]autom4te.cache\\'"
- "[/\\\\]\\.reference\\'"
- ;; Clojure
- "[/\\\\]\\.lsp\\'"
- "[/\\\\]\\.clj-kondo\\'"
- "[/\\\\]\\.shadow-cljs\\'"
- "[/\\\\]\\.babel_cache\\'"
- "[/\\\\]\\.cpcache\\'"
- ;; .Net Core build-output
- "[/\\\\]bin/Debug\\'"
- "[/\\\\]obj\\'"
- ;; OCaml and Dune
- "[/\\\\]_opam\\'"
- "[/\\\\]_build\\'"
- ;; nix-direnv
- "[/\\\\]\\.direnv\\'")
- "List of regexps matching directory paths which won't be monitored when
-creating file watches. Customization of this variable is only honored at
-the global level or at a root of an lsp workspace."
- :group 'lsp-mode
- :type '(repeat string)
- :package-version '(lsp-mode . "7.1.0"))
-
-(define-obsolete-function-alias 'lsp-file-watch-ignored 'lsp-file-watch-ignored-directories "7.0.1")
-
-(defun lsp-file-watch-ignored-directories ()
- lsp-file-watch-ignored-directories)
-
-;; Allow lsp-file-watch-ignored-directories as a file or directory-local variable
-(put 'lsp-file-watch-ignored-directories 'safe-local-variable 'lsp--string-listp)
-
-(defcustom lsp-file-watch-ignored-files
- '(
- ;; Flycheck tempfiles
- "[/\\\\]flycheck_[^/\\\\]+\\'"
- ;; lockfiles
- "[/\\\\]\\.#[^/\\\\]+\\'"
- ;; backup files
- "[/\\\\][^/\\\\]+~\\'" )
- "List of regexps matching files for which change events will
-not be sent to the server.
-
-This setting has no impact on whether a file-watch is created for
-a directory; it merely prevents notifications pertaining to
-matched files from being sent to the server. To prevent a
-file-watch from being created for a directory, customize
-`lsp-file-watch-ignored-directories'
-
-Customization of this variable is only honored at the global
-level or at a root of an lsp workspace."
- :group 'lsp-mode
- :type '(repeat string)
- :package-version '(lsp-mode . "7.1.0"))
-
-;; Allow lsp-file-watch-ignored-files as a file or directory-local variable
-(put 'lsp-file-watch-ignored-files 'safe-local-variable 'lsp--string-listp)
-
-(defcustom lsp-after-uninitialized-functions nil
- "List of functions to be called after a Language Server has been uninitialized."
- :type 'hook
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.3"))
-
-(defconst lsp--sync-none 0)
-(defconst lsp--sync-full 1)
-(defconst lsp--sync-incremental 2)
-
-(defcustom lsp-debounce-full-sync-notifications t
- "If non-nil debounce full sync events.
-This flag affects only servers which do not support incremental updates."
- :type 'boolean
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-debounce-full-sync-notifications-interval 1.0
- "Time to wait before sending full sync synchronization after buffer modification."
- :type 'float
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.1"))
-
-(defvar lsp--stderr-index 0)
-
-(defvar lsp--delayed-requests nil)
-(defvar lsp--delay-timer nil)
-
-(defcustom lsp-document-sync-method nil
- "How to sync the document with the language server."
- :type '(choice (const :tag "Documents should not be synced at all." nil)
- (const :tag "Documents are synced by always sending the full content of the document." lsp--sync-full)
- (const :tag "Documents are synced by always sending incremental changes to the document." lsp--sync-incremental)
- (const :tag "Use the method recommended by the language server." nil))
- :group 'lsp-mode)
-
-(defcustom lsp-auto-execute-action t
- "Auto-execute single action."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-enable-links t
- "If non-nil, all references to links in a file will be made clickable, if
-supported by the language server."
- :type 'boolean
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-enable-imenu t
- "If non-nil, automatically enable `imenu' integration when server provides
-`textDocument/documentSymbol'."
- :type 'boolean
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-enable-dap-auto-configure t
- "If non-nil, enable `dap-auto-configure-mode`."
- :type 'boolean
- :group 'lsp-mode
- :package-version '(lsp-mode . "7.0"))
-
-(defcustom lsp-eldoc-enable-hover t
- "If non-nil, `eldoc' will display hover info when it is present."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-eldoc-render-all nil
- "Display all of the info returned by document/onHover.
-If this is set to nil, `eldoc' will show only the symbol information."
- :type 'boolean
- :group 'lsp-mode)
-
-(define-obsolete-variable-alias 'lsp-enable-completion-at-point
- 'lsp-completion-enable "lsp-mode 7.0.1")
-
-(defcustom lsp-completion-enable t
- "Enable `completion-at-point' integration."
- :type 'boolean
- :group 'lsp-completion)
-
-(defcustom lsp-enable-symbol-highlighting t
- "Highlight references of the symbol at point."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-enable-xref t
- "Enable xref integration."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-enable-indentation t
- "Indent regions using the file formatting functionality provided by the
-language server."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-enable-on-type-formatting t
- "Enable `textDocument/onTypeFormatting' integration."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-enable-text-document-color t
- "Enable `textDocument/documentColor' integration."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-before-save-edits t
- "If non-nil, `lsp-mode' will apply edits suggested by the language server
-before saving a document."
- :type 'boolean
- :group 'lsp-mode)
-
-(defcustom lsp-after-apply-edits-hook nil
- "Hooks to run when text edit is applied.
-It contains the operation source."
- :type 'hook
- :group 'lsp-mode
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-modeline-code-actions-enable t
- "Whether to show code actions on modeline."
- :type 'boolean
- :group 'lsp-modeline)
-
-(defcustom lsp-modeline-diagnostics-enable t
- "Whether to show diagnostics on modeline."
- :type 'boolean
- :group 'lsp-modeline)
-
-(defcustom lsp-modeline-workspace-status-enable t
- "Whether to show workspace status on modeline."
- :type 'boolean
- :group 'lsp-modeline
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-headerline-breadcrumb-enable t
- "Whether to enable breadcrumb on headerline."
- :type 'boolean
- :group 'lsp-headerline)
-
-(defcustom lsp-configure-hook nil
- "Hooks to run when `lsp-configure-buffer' is called."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-unconfigure-hook nil
- "Hooks to run when `lsp-unconfig-buffer' is called."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-after-diagnostics-hook nil
- "Hooks to run after diagnostics are received.
-Note: it runs only if the receiving buffer is open. Use
-`lsp-diagnostics-updated-hook'if you want to be notified when
-diagnostics have changed."
- :type 'hook
- :group 'lsp-mode)
-
-(define-obsolete-variable-alias 'lsp-after-diagnostics-hook
- 'lsp-diagnostics-updated-hook "lsp-mode 6.4")
-
-(defcustom lsp-diagnostics-updated-hook nil
- "Hooks to run after diagnostics are received."
- :type 'hook
- :group 'lsp-mode)
-
-(define-obsolete-variable-alias 'lsp-workspace-folders-changed-hook
- 'lsp-workspace-folders-changed-functions "lsp-mode 6.3")
-
-(defcustom lsp-workspace-folders-changed-functions nil
- "Hooks to run after the folders has changed.
-The hook will receive two parameters list of added and removed folders."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-eldoc-hook '(lsp-hover)
- "Hooks to run for eldoc."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-before-apply-edits-hook nil
- "Hooks to run before applying edits."
- :type 'hook
- :group 'lsp-mode)
-
-(defgroup lsp-imenu nil
- "LSP Imenu."
- :group 'lsp-mode
- :tag "LSP Imenu")
-
-(defcustom lsp-imenu-show-container-name t
- "Display the symbol's container name in an imenu entry."
- :type 'boolean
- :group 'lsp-imenu)
-
-(defcustom lsp-imenu-container-name-separator "/"
- "Separator string to use to separate the container name from the symbol while
-displaying imenu entries."
- :type 'string
- :group 'lsp-imenu)
-
-(defcustom lsp-imenu-sort-methods '(kind name)
- "How to sort the imenu items.
-
-The value is a list of `kind' `name' or `position'. Priorities
-are determined by the index of the element."
- :type '(repeat (choice (const name)
- (const position)
- (const kind)))
- :group 'lsp-imenu)
-
-(defcustom lsp-imenu-index-symbol-kinds nil
- "Which symbol kinds to show in imenu."
- :type '(repeat (choice (const :tag "Miscellaneous" nil)
- (const :tag "File" File)
- (const :tag "Module" Module)
- (const :tag "Namespace" Namespace)
- (const :tag "Package" Package)
- (const :tag "Class" Class)
- (const :tag "Method" Method)
- (const :tag "Property" Property)
- (const :tag "Field" Field)
- (const :tag "Constructor" Constuctor)
- (const :tag "Enum" Enum)
- (const :tag "Interface" Interface)
- (const :tag "Function" Function)
- (const :tag "Variable" Variable)
- (const :tag "Constant" Constant)
- (const :tag "String" String)
- (const :tag "Number" Number)
- (const :tag "Boolean" Boolean)
- (const :tag "Array" Array)
- (const :tag "Object" Object)
- (const :tag "Key" Key)
- (const :tag "Null" Null)
- (const :tag "Enum Member" EnumMember)
- (const :tag "Struct" Struct)
- (const :tag "Event" Event)
- (const :tag "Operator" Operator)
- (const :tag "Type Parameter" TypeParameter)))
- :group 'lsp-imenu)
-
-;; vibhavp: Should we use a lower value (5)?
-(defcustom lsp-response-timeout 10
- "Number of seconds to wait for a response from the language server before
-timing out."
- :type 'number
- :group 'lsp-mode)
-
-(defcustom lsp-tcp-connection-timeout 2
- "The timeout for tcp connection in seconds."
- :type 'number
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.2"))
-
-(defconst lsp--imenu-compare-function-alist
- (list (cons 'name #'lsp--imenu-compare-name)
- (cons 'kind #'lsp--imenu-compare-kind)
- (cons 'position #'lsp--imenu-compare-line-col))
- "An alist of (METHOD . FUNCTION).
-METHOD is one of the symbols accepted by
-`lsp-imenu-sort-methods'.
-
-FUNCTION takes two hash tables representing DocumentSymbol. It
-returns a negative number, 0, or a positive number indicating
-whether the first parameter is less than, equal to, or greater
-than the second parameter.")
-
-(defcustom lsp-diagnostic-clean-after-change nil
- "When non-nil, clean the diagnostics on change.
-
-Note that when that setting is nil, `lsp-mode' will show stale
-diagnostics until server publishes the new set of diagnostics"
- :type 'boolean
- :group 'lsp-diagnostics
- :package-version '(lsp-mode . "7.0.1"))
-
-(defcustom lsp-server-trace nil
- "Request tracing on the server side.
-The actual trace output at each level depends on the language server in use.
-Changes take effect only when a new session is started."
- :type '(choice (const :tag "Disabled" "off")
- (const :tag "Messages only" "messages")
- (const :tag "Verbose" "verbose")
- (const :tag "Default (disabled)" nil))
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.1"))
-
-(defvar lsp-language-id-configuration '((".*\\.vue$" . "vue")
- (".*\\.tsx$" . "typescriptreact")
- (".*\\.ts$" . "typescript")
- (".*\\.jsx$" . "javascriptreact")
- (".*\\.js$" . "javascript")
- (".*\\.xml$" . "xml")
- (".*\\.hx$" . "haxe")
- (".*\\.lua$" . "lua")
- (".*\\.sql$" . "sql")
- (".*\\.html$" . "html")
- (".*\\.css" . "css")
- (".*/settings.json$" . "jsonc")
- (".*\\.json$" . "json")
- (".*\\.jsonc$" . "jsonc")
- (".*\\.php$" . "php")
- (".*\\.svelte$" . "svelte")
- (ada-mode . "ada")
- (nxml-mode . "xml")
- (sql-mode . "sql")
- (vimrc-mode . "vim")
- (sh-mode . "shellscript")
- (scala-mode . "scala")
- (julia-mode . "julia")
- (clojure-mode . "clojure")
- (clojurec-mode . "clojure")
- (clojurescript-mode . "clojurescript")
- (java-mode . "java")
- (jdee-mode . "java")
- (groovy-mode . "groovy")
- (python-mode . "python")
- (cython-mode . "python")
- (lsp--render-markdown . "markdown")
- (rust-mode . "rust")
- (rustic-mode . "rust")
- (kotlin-mode . "kotlin")
- (css-mode . "css")
- (less-mode . "less")
- (less-css-mode . "less")
- (lua-mode . "lua")
- (sass-mode . "sass")
- (scss-mode . "scss")
- (xml-mode . "xml")
- (c-mode . "c")
- (c++-mode . "cpp")
- (objc-mode . "objective-c")
- (html-mode . "html")
- (sgml-mode . "html")
- (mhtml-mode . "html")
- (go-dot-mod-mode . "go.mod")
- (go-mode . "go")
- (haskell-mode . "haskell")
- (hack-mode . "hack")
- (php-mode . "php")
- (powershell-mode . "powershell")
- (powershell-mode . "PowerShell")
- (json-mode . "json")
- (jsonc-mode . "jsonc")
- (rjsx-mode . "javascript")
- (js2-mode . "javascript")
- (js-mode . "javascript")
- (typescript-mode . "typescript")
- (fsharp-mode . "fsharp")
- (reason-mode . "reason")
- (caml-mode . "ocaml")
- (tuareg-mode . "ocaml")
- (swift-mode . "swift")
- (elixir-mode . "elixir")
- (conf-javaprop-mode . "spring-boot-properties")
- (yaml-mode . "spring-boot-properties-yaml")
- (ruby-mode . "ruby")
- (enh-ruby-mode . "ruby")
- (fortran-mode . "fortran")
- (f90-mode . "fortran")
- (elm-mode . "elm")
- (dart-mode . "dart")
- (erlang-mode . "erlang")
- (dockerfile-mode . "dockerfile")
- (csharp-mode . "csharp")
- (csharp-tree-sitter-mode . "csharp")
- (plain-tex-mode . "plaintex")
- (latex-mode . "latex")
- (v-mode . "v")
- (vhdl-mode . "vhdl")
- (verilog-mode . "verilog")
- (terraform-mode . "terraform")
- (ess-julia-mode . "julia")
- (ess-r-mode . "r")
- (crystal-mode . "crystal")
- (nim-mode . "nim")
- (dhall-mode . "dhall")
- (cmake-mode . "cmake")
- (purescript-mode . "purescript")
- (gdscript-mode . "gdscript")
- (perl-mode . "perl")
- (cperl-mode . "perl")
- (robot-mode . "robot")
- (racket-mode . "racket")
- (nix-mode . "nix")
- (prolog-mode . "prolog")
- (vala-mode . "vala")
- (actionscript-mode . "actionscript")
- (d-mode . "d")
- (zig-mode . "zig")
- (text-mode . "plaintext")
- (markdown-mode . "markdown")
- (beancount-mode . "beancount"))
- "Language id configuration.")
-
-(defvar lsp--last-active-workspaces nil
- "Keep track of last active workspace.
-We want to try the last workspace first when jumping into a library
-directory")
-
-(defvar lsp-method-requirements
- '(("textDocument/callHierarchy" :capability :callHierarchyProvider)
- ("textDocument/codeAction" :capability :codeActionProvider)
- ("codeAction/resolve"
- :check-command (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp:code-action-options-resolve-provider?
- (or (lsp--capability :codeActionProvider)
- (when-let ((maybe-capability (lsp--registered-capability "textDocument/codeAction"))
- (capability-options (lsp--registered-capability-options maybe-capability)))
- capability-options))))))
- ("textDocument/codeLens" :capability :codeLensProvider)
- ("textDocument/completion" :capability :completionProvider)
- ("completionItem/resolve"
- :check-command (lambda (wk)
- (with-lsp-workspace wk
- (lsp:completion-options-resolve-provider?
- (lsp--capability :completionProvider)))))
- ("textDocument/declaration" :capability :declarationProvider)
- ("textDocument/definition" :capability :definitionProvider)
- ("textDocument/documentColor" :capability :colorProvider)
- ("textDocument/documentLink" :capability :documentLinkProvider)
- ("textDocument/documentHighlight" :capability :documentHighlightProvider)
- ("textDocument/documentSymbol" :capability :documentSymbolProvider)
- ("textDocument/foldingRange" :capability :foldingRangeProvider)
- ("textDocument/formatting" :capability :documentFormattingProvider)
- ("textDocument/hover" :capability :hoverProvider)
- ("textDocument/implementation" :capability :implementationProvider)
- ("textDocument/onTypeFormatting" :capability :documentOnTypeFormattingProvider)
- ("textDocument/prepareRename"
- :check-command (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp:rename-options-prepare-provider?
- (or (lsp--capability :renameProvider)
- (when-let ((maybe-capability (lsp--registered-capability "textDocument/rename")))
- (lsp--registered-capability-options maybe-capability)))))))
- ("textDocument/rangeFormatting" :capability :documentRangeFormattingProvider)
- ("textDocument/references" :capability :referencesProvider)
- ("textDocument/rename" :capability :renameProvider)
- ("textDocument/selectionRange" :capability :selectionRangeProvider)
- ("textDocument/semanticTokens" :capability :semanticTokensProvider)
- ("textDocument/semanticTokensFull"
- :check-command (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp-get (lsp--capability :semanticTokensProvider) :full))))
- ("textDocument/semanticTokensFull/Delta"
- :check-command (lambda (workspace)
- (with-lsp-workspace workspace
- (let ((capFull (lsp-get (lsp--capability :semanticTokensProvider) :full)))
- (and (not (booleanp capFull)) (lsp-get capFull :delta))))))
- ("textDocument/semanticTokensRangeProvider"
- :check-command (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp-get (lsp--capability :semanticTokensProvider) :range))))
- ("textDocument/signatureHelp" :capability :signatureHelpProvider)
- ("textDocument/typeDefinition" :capability :typeDefinitionProvider)
- ("workspace/executeCommand" :capability :executeCommandProvider)
- ("workspace/symbol" :capability :workspaceSymbolProvider))
-
- "Map methods to requirements.
-It is used by request-sending functions to determine which server
-must be used for handling a particular message.")
-
-(defconst lsp--file-change-type
- `((created . 1)
- (changed . 2)
- (deleted . 3)))
-
-(defconst lsp--watch-kind
- `((create . 1)
- (change . 2)
- (delete . 4)))
-
-(defvar lsp-window-body-width 40
- "Window body width when rendering doc.")
-
-(defface lsp-face-highlight-textual
- '((t :inherit highlight))
- "Face used for textual occurrences of symbols."
- :group 'lsp-mode)
-
-(defface lsp-face-highlight-read
- '((t :inherit highlight :underline t))
- "Face used for highlighting symbols being read."
- :group 'lsp-mode)
-
-(defface lsp-face-highlight-write
- '((t :inherit highlight :weight bold))
- "Face used for highlighting symbols being written to."
- :group 'lsp-mode)
-
-(define-obsolete-variable-alias 'lsp-lens-auto-enable
- 'lsp-lens-enable "lsp-mode 7.0.1")
-
-(defcustom lsp-lens-enable nil
- "Auto enable lenses if server supports."
- :group 'lsp-lens
- :type 'boolean
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-symbol-highlighting-skip-current nil
- "If non-nil skip current symbol when setting symbol highlights."
- :group 'lsp-mode
- :type 'boolean)
-
-(defcustom lsp-file-watch-threshold 1000
- "Show warning if the files to watch are more than.
-Set to nil to disable the warning."
- :type 'number
- :group 'lsp-mode)
-;;;###autoload(put 'lsp-file-watch-threshold 'safe-local-variable (lambda (i) (or (numberp i) (not i))))
-
-(defvar lsp-custom-markup-modes
- '((rust-mode "no_run" "rust,no_run" "rust,ignore" "rust,should_panic"))
- "Mode to uses with markdown code blocks.
-They are added to `markdown-code-lang-modes'")
-
-(defcustom lsp-signature-render-documentation t
- "Display signature documentation in `eldoc'."
- :type 'boolean
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-signature-auto-activate '(:on-trigger-char :on-server-request)
- "Auto activate signature conditions."
- :type '(repeat (choice (const :tag "On trigger chars pressed." :on-trigger-char)
- (const :tag "After selected completion." :after-completion)
- (const :tag "When the server has sent show signature help." :on-server-request)))
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-signature-doc-lines 20
- "If number, limit the number of lines to show in the docs."
- :type 'number
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-signature-function 'lsp-lv-message
- "The function used for displaying signature info.
-It will be called with one param - the signature info. When
-called with nil the signature info must be cleared."
- :type 'function
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-keymap-prefix "s-l"
- "LSP-mode keymap prefix."
- :group 'lsp-mode
- :type 'string
- :package-version '(lsp-mode . "6.3"))
-
-(defvar-local lsp--buffer-workspaces ()
- "List of the buffer workspaces.")
-
-(defvar lsp--session nil
- "Contain the `lsp-session' for the current Emacs instance.")
-
-(defvar lsp--tcp-port 10000)
-
-(defvar lsp--client-packages-required nil
- "If nil, `lsp-client-packages' are yet to be required.")
-
-(defvar lsp--tcp-server-port 0
- "The server socket which is opened when using `lsp-tcp-server' (a server
-socket is opened in Emacs and the language server connects to it). The
-default value of 0 ensures that a random high port is used. Set it to a positive
-integer to use a specific port.")
-
-(defvar lsp--tcp-server-wait-seconds 10
- "Wait this amount of time for the client to connect to our server socket
-when using `lsp-tcp-server'.")
-
-(defvar-local lsp--document-symbols nil
- "The latest document symbols.")
-
-(defvar-local lsp--document-selection-range-cache nil
- "The document selection cache.")
-
-(defvar-local lsp--document-symbols-request-async nil
- "If non-nil, request document symbols asynchronously.")
-
-(defvar-local lsp--document-symbols-tick -1
- "The value of `buffer-chars-modified-tick' when document
- symbols were last retrieved.")
-
-(defvar-local lsp--have-document-highlights nil
- "Set to `t' on symbol highlighting, cleared on
-`lsp--cleanup-highlights-if-needed'. Checking a separately
-defined flag is substantially faster than unconditionally
-calling `remove-overlays'.")
-
-;; Buffer local variable for storing number of lines.
-(defvar lsp--log-lines)
-
-(defvar-local lsp--eldoc-saved-message nil)
-
-(defvar lsp--on-change-timer nil)
-(defvar lsp--on-idle-timer nil)
-
-(defvar-local lsp--signature-last nil)
-(defvar-local lsp--signature-last-index nil)
-(defvar lsp--signature-last-buffer nil)
-
-(defvar-local lsp--virtual-buffer-point-max nil)
-
-(cl-defgeneric lsp-execute-command (server command arguments)
- "Ask SERVER to execute COMMAND with ARGUMENTS.")
-
-(defun lsp-elt (sequence n)
- "Return Nth element of SEQUENCE or nil if N is out of range."
- (cond
- ((listp sequence) (elt sequence n))
- ((arrayp sequence)
- (and (> (length sequence) n) (aref sequence n)))
- (t (and (> (length sequence) n) (elt sequence n)))))
-
-;; define seq-first and seq-rest for older emacs
-(defun lsp-seq-first (sequence)
- "Return the first element of SEQUENCE."
- (lsp-elt sequence 0))
-
-(defun lsp-seq-rest (sequence)
- "Return a sequence of the elements of SEQUENCE except the first one."
- (seq-drop sequence 1))
-
-(defun lsp--string-listp (sequence)
- "Return t if all elements of SEQUENCE are strings, else nil."
- (not (seq-find (lambda (x) (not (stringp x))) sequence)))
-
-(defun lsp--string-vector-p (candidate)
- "Returns true if CANDIDATE is a vector data structure and
-every element of it is of type string, else nil."
- (and
- (vectorp candidate)
- (seq-every-p #'stringp candidate)))
-
-(make-obsolete 'lsp--string-vector-p nil "lsp-mode 7.1")
-
-(defun lsp--editable-vector-match (widget value)
- "Function for `lsp-editable-vector' :match."
- ;; Value must be a list or a vector and all the members must match the type.
- (and (or (listp value) (vectorp value))
- (length (cdr (lsp--editable-vector-match-inline widget value)))))
-
-(defun lsp--editable-vector-match-inline (widget value)
- "Value for `lsp-editable-vector' :match-inline."
- (let ((type (nth 0 (widget-get widget :args)))
- (ok t)
- found)
- (while (and value ok)
- (let ((answer (widget-match-inline type value)))
- (if answer
- (let ((head (if (vectorp answer) (aref answer 0) (car answer)))
- (tail (if (vectorp answer) (seq-drop 1 answer) (cdr answer))))
- (setq found (append found head)
- value tail))
- (setq ok nil))))
- (cons found value)))
-
-(defun lsp--editable-vector-value-to-external (_widget internal-value)
- "Convert the internal list value to a vector."
- (if (listp internal-value)
- (apply 'vector internal-value)
- internal-value))
-
-(defun lsp--editable-vector-value-to-internal (_widget external-value)
- "Convert the external vector value to a list."
- (if (vectorp external-value)
- (append external-value nil)
- external-value))
-
-(define-widget 'lsp--editable-vector 'editable-list
- "A subclass of `editable-list' that accepts and returns a
-vector instead of a list."
- :value-to-external 'lsp--editable-vector-value-to-external
- :value-to-internal 'lsp--editable-vector-value-to-internal
- :match 'lsp--editable-vector-match
- :match-inline 'lsp--editable-vector-match-inline)
-
-(define-widget 'lsp-repeatable-vector 'lsp--editable-vector
- "A variable length homogeneous vector."
- :tag "Repeat"
- :format "%{%t%}:\n%v%i\n")
-
-(define-widget 'lsp-string-vector 'lazy
- "A vector of zero or more elements, every element of which is a string.
-Appropriate for any language-specific `defcustom' that needs to
-serialize as a JSON array of strings.
-
-Deprecated. Use `lsp-repeatable-vector' instead. "
- :offset 4
- :tag "Vector"
- :type '(lsp-repeatable-vector string))
-
-(make-obsolete 'lsp-string-vector nil "lsp-mode 7.1")
-
-(defvar lsp--show-message t
- "If non-nil, show debug message from `lsp-mode'.")
-
-(defun lsp--message (format &rest args)
- "Wrapper for `message'
-
-We `inhibit-message' the message when the cursor is in the
-minibuffer and when emacs version is before emacs 27 due to the
-fact that we often use `lsp--info', `lsp--warn' and `lsp--error'
-in async context and the call to these function is removing the
-minibuffer prompt. The issue with async messages is already fixed
-in emacs 27.
-
-See #2049"
- (when lsp--show-message
- (let ((inhibit-message (and (minibufferp)
- (version< emacs-version "27.0"))))
- (apply #'message format args))))
-
-(defun lsp--info (format &rest args)
- "Display lsp info message with FORMAT with ARGS."
- (lsp--message "%s :: %s" (propertize "LSP" 'face 'success) (apply #'format format args)))
-
-(defun lsp--warn (format &rest args)
- "Display lsp warn message with FORMAT with ARGS."
- (lsp--message "%s :: %s" (propertize "LSP" 'face 'warning) (apply #'format format args)))
-
-(defun lsp--error (format &rest args)
- "Display lsp error message with FORMAT with ARGS."
- (lsp--message "%s :: %s" (propertize "LSP" 'face 'error) (apply #'format format args)))
-
-(defun lsp--eldoc-message (&optional msg)
- "Show MSG in eldoc."
- (setq lsp--eldoc-saved-message msg)
- (run-with-idle-timer 0 nil (lambda ()
- ;; XXX: new eldoc in Emacs 28
- ;; recommends running the hook variable
- ;; `eldoc-documentation-functions'
- ;; instead of using eldoc-message
- (with-no-warnings
- (eldoc-message msg)))))
-
-(defun lsp-log (format &rest args)
- "Log message to the ’*lsp-log*’ buffer.
-
-FORMAT and ARGS i the same as for `message'."
- (when lsp-log-max
- (let ((log-buffer (get-buffer "*lsp-log*"))
- (inhibit-read-only t))
- (unless log-buffer
- (setq log-buffer (get-buffer-create "*lsp-log*"))
- (with-current-buffer log-buffer
- (buffer-disable-undo)
- (view-mode 1)
- (set (make-local-variable 'lsp--log-lines) 0)))
- (with-current-buffer log-buffer
- (save-excursion
- (let* ((message (apply 'format format args))
- ;; Count newlines in message.
- (newlines (1+ (cl-loop with start = 0
- for count from 0
- while (string-match "\n" message start)
- do (setq start (match-end 0))
- finally return count))))
- (goto-char (point-max))
-
- ;; in case the buffer is not empty insert before last \n to preserve
- ;; the point position(in case it is in the end)
- (if (eq (point) (point-min))
- (progn
- (insert "\n")
- (backward-char))
- (backward-char)
- (insert "\n"))
- (insert message)
-
- (setq lsp--log-lines (+ lsp--log-lines newlines))
-
- (when (and (integerp lsp-log-max) (> lsp--log-lines lsp-log-max))
- (let ((to-delete (- lsp--log-lines lsp-log-max)))
- (goto-char (point-min))
- (forward-line to-delete)
- (delete-region (point-min) (point))
- (setq lsp--log-lines lsp-log-max)))))))))
-
-(defalias 'lsp-message 'lsp-log)
-
-(defalias 'lsp-ht 'ht)
-
-(defalias 'lsp-file-local-name 'file-local-name)
-
-(defun lsp-f-canonical (file-name)
- "Return the canonical FILE-NAME, without a trailing slash."
- (directory-file-name (expand-file-name file-name)))
-
-(defalias 'lsp-canonical-file-name 'lsp-f-canonical)
-
-(defun lsp-f-same? (path-a path-b)
- "Return t if PATH-A and PATH-B are references to the same file.
-Symlinks are not followed."
- (when (and (f-exists? path-a)
- (f-exists? path-b))
- (equal
- (lsp-f-canonical (directory-file-name (f-expand path-a)))
- (lsp-f-canonical (directory-file-name (f-expand path-b))))))
-
-(defun lsp-f-parent (path)
- "Return the parent directory to PATH.
-Symlinks are not followed."
- (let ((parent (file-name-directory
- (directory-file-name (f-expand path default-directory)))))
- (unless (lsp-f-same? path parent)
- (if (f-relative? path)
- (f-relative parent)
- (directory-file-name parent)))))
-
-(defun lsp-f-ancestor-of? (path-a path-b)
- "Return t if PATH-A is an ancestor of PATH-B.
-Symlinks are not followed."
- (unless (lsp-f-same? path-a path-b)
- (s-prefix? (concat (lsp-f-canonical path-a) (f-path-separator))
- (lsp-f-canonical path-b))))
-
-(defun lsp--merge-results (results method)
- "Merge RESULTS by filtering the empty hash-tables and merging
-the lists according to METHOD."
- (pcase (--map (if (vectorp it)
- (append it nil) it)
- (-filter #'identity results))
- (`() ())
- ;; only one result - simply return it
- (`(,fst) fst)
- ;; multiple results merge it based on strategy
- (results
- (pcase method
- ("textDocument/hover" (pcase (seq-filter
- (-compose #'not #'lsp-empty?)
- results)
- (`(,hover) hover)
- (hovers (lsp-make-hover
- :contents
- (-mapcat
- (-lambda ((&Hover :contents))
- (if (and (sequencep contents)
- (not (stringp contents)))
- (append contents ())
- (list contents)))
- hovers)))))
- ("textDocument/completion"
- (lsp-make-completion-list
- :is-incomplete (seq-some
- #'lsp:completion-list-is-incomplete
- results)
- :items (cl-mapcan (lambda (it) (append (if (lsp-completion-list? it)
- (lsp:completion-list-items it)
- it)
- nil))
- results)))
- ("completionItem/resolve"
- (let ((item (cl-first results)))
- (when-let ((details (seq-filter #'identity
- (seq-map #'lsp:completion-item-detail? results))))
- (lsp:set-completion-item-detail?
- item
- (string-join details " ")))
- (when-let ((docs (seq-filter #'identity
- (seq-map #'lsp:completion-item-documentation? results))))
- (lsp:set-completion-item-documentation?
- item
- (lsp-make-markup-content
- :kind (or (seq-some (lambda (it)
- (when (equal (lsp:markup-content-kind it)
- lsp/markup-kind-markdown)
- lsp/markup-kind-markdown))
- docs)
- lsp/markup-kind-plain-text)
- :value (string-join (seq-map (lambda (doc)
- (or (lsp:markup-content-value doc)
- (and (stringp doc) doc)))
- docs)
- "\n"))))
- (when-let ((edits (seq-filter #'identity
- (seq-map #'lsp:completion-item-additional-text-edits? results))))
- (lsp:set-completion-item-additional-text-edits?
- item
- (cl-mapcan (lambda (it) (if (seqp it) it (list it))) edits)))
- item))
- (_ (cl-mapcan (lambda (it) (if (seqp it) it (list it))) results))))))
-
-(defun lsp--spinner-start ()
- "Start spinner indication."
- (condition-case _err (spinner-start 'progress-bar-filled) (error)))
-
-(defun lsp--propertize (str type)
- "Propertize STR as per TYPE."
- (propertize str 'face (alist-get type lsp--message-type-face)))
-
-(defun lsp-workspaces ()
- "Return the lsp workspaces associated with the current project."
- (if lsp--cur-workspace (list lsp--cur-workspace) lsp--buffer-workspaces))
-
-(defun lsp--completing-read (prompt collection transform-fn &optional predicate
- require-match initial-input
- hist def inherit-input-method)
- "Wrap `completing-read' to provide transformation function.
-
-TRANSFORM-FN will be used to transform each of the items before displaying.
-
-PROMPT COLLECTION PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF
-INHERIT-INPUT-METHOD will be proxied to `completing-read' without changes."
- (let* ((col (--map (cons (funcall transform-fn it) it) collection))
- (completion (completing-read prompt col
- predicate require-match initial-input hist
- def inherit-input-method)))
- (cdr (assoc completion col))))
-
-(defmacro lsp-with-current-buffer (buffer-id &rest body)
- (declare (indent 1) (debug t))
- `(if-let ((wcb (plist-get ,buffer-id :with-current-buffer)))
- (with-lsp-workspaces (plist-get ,buffer-id :workspaces)
- (funcall wcb (lambda () ,@body)))
- (with-current-buffer ,buffer-id
- ,@body)))
-
-(defvar lsp--throw-on-input nil
- "Make `lsp-*-while-no-input' throws `input' on interrupted.")
-
-(defmacro lsp--catch (tag bodyform &rest handlers)
- "Catch TAG thrown in BODYFORM.
-The return value from TAG will be handled in HANDLERS by `pcase'."
- (declare (debug (form form &rest (pcase-PAT body))) (indent 2))
- (let ((re-sym (make-symbol "re")))
- `(let ((,re-sym (catch ,tag ,bodyform)))
- (pcase ,re-sym
- ,@handlers))))
-
-(defmacro lsp--while-no-input (&rest body)
- "Wrap BODY in `while-no-input' and respecting `non-essential'.
-If `lsp--throw-on-input' is set, will throw if input is pending, else
-return value of `body' or nil if interrupted."
- (declare (debug t) (indent 0))
- `(if non-essential
- (let ((res (while-no-input ,@body)))
- (cond
- ((and lsp--throw-on-input (equal res t))
- (throw 'input :interrupted))
- ((booleanp res) nil)
- (t res)))
- ,@body))
-
-;; A ‘lsp--client’ object describes the client-side behavior of a language
-;; server. It is used to start individual server processes, each of which is
-;; represented by a ‘lsp--workspace’ object. Client objects are normally
-;; created using ‘lsp-define-stdio-client’ or ‘lsp-define-tcp-client’. Each
-;; workspace refers to exactly one client, but there can be multiple workspaces
-;; for a single client.
-(cl-defstruct lsp--client
- ;; ‘language-id’ is a function that receives a buffer as a single argument
- ;; and should return the language identifier for that buffer. See
- ;; https://microsoft.github.io/language-server-protocol/specification#textdocumentitem
- ;; for a list of language identifiers. Also consult the documentation for
- ;; the language server represented by this client to find out what language
- ;; identifiers it supports or expects.
- (language-id nil)
-
- ;; ‘add-on?’ when set to t the server will be started no matter whether there
- ;; is another server handling the same mode.
- (add-on? nil)
- ;; ‘new-connection’ is a function that should start a language server process
- ;; and return a cons (COMMAND-PROCESS . COMMUNICATION-PROCESS).
- ;; COMMAND-PROCESS must be a process object representing the server process
- ;; just started. COMMUNICATION-PROCESS must be a process (including pipe and
- ;; network processes) that ‘lsp-mode’ uses to communicate with the language
- ;; server using the language server protocol. COMMAND-PROCESS and
- ;; COMMUNICATION-PROCESS may be the same process; in that case
- ;; ‘new-connection’ may also return that process as a single
- ;; object. ‘new-connection’ is called with two arguments, FILTER and
- ;; SENTINEL. FILTER should be used as process filter for
- ;; COMMUNICATION-PROCESS, and SENTINEL should be used as process sentinel for
- ;; COMMAND-PROCESS.
- (new-connection nil)
-
- ;; ‘ignore-regexps’ is a list of regexps. When a data packet from the
- ;; language server matches any of these regexps, it will be ignored. This is
- ;; intended for dealing with language servers that output non-protocol data.
- (ignore-regexps nil)
-
- ;; ‘ignore-messages’ is a list of regexps. When a message from the language
- ;; server matches any of these regexps, it will be ignored. This is useful
- ;; for filtering out unwanted messages; such as servers that send nonstandard
- ;; message types, or extraneous log messages.
- (ignore-messages nil)
-
- ;; ‘notification-handlers’ is a hash table mapping notification method names
- ;; (strings) to functions handling the respective notifications. Upon
- ;; receiving a notification, ‘lsp-mode’ will call the associated handler
- ;; function passing two arguments, the ‘lsp--workspace’ object and the
- ;; deserialized notification parameters.
- (notification-handlers (make-hash-table :test 'equal))
-
- ;; ‘request-handlers’ is a hash table mapping request method names
- ;; (strings) to functions handling the respective notifications. Upon
- ;; receiving a request, ‘lsp-mode’ will call the associated handler function
- ;; passing two arguments, the ‘lsp--workspace’ object and the deserialized
- ;; request parameters.
- (request-handlers (make-hash-table :test 'equal))
-
- ;; ‘response-handlers’ is a hash table mapping integral JSON-RPC request
- ;; identifiers for pending asynchronous requests to functions handling the
- ;; respective responses. Upon receiving a response from the language server,
- ;; ‘lsp-mode’ will call the associated response handler function with a
- ;; single argument, the deserialized response parameters.
- (response-handlers (make-hash-table :test 'eql))
-
- ;; ‘prefix-function’ is called for getting the prefix for completion.
- ;; The function takes no parameter and returns a cons (start . end) representing
- ;; the start and end bounds of the prefix. If it's not set, the client uses a
- ;; default prefix function."
- (prefix-function nil)
-
- ;; Contains mapping of scheme to the function that is going to be used to load
- ;; the file.
- (uri-handlers (make-hash-table :test #'equal))
-
- ;; ‘action-handlers’ is a hash table mapping action to a handler function. It
- ;; can be used in `lsp-execute-code-action' to determine whether the action
- ;; current client is interested in executing the action instead of sending it
- ;; to the server.
- (action-handlers (make-hash-table :test 'equal))
-
- ;; major modes supported by the client.
- major-modes
- ;; Function that will be called to decide if this language client
- ;; should manage a particular buffer. The function will be passed
- ;; the file name and major mode to inform the decision. Setting
- ;; `activation-fn' will override `major-modes', if
- ;; present.
- activation-fn
- ;; Break the tie when major-mode is supported by multiple clients.
- (priority 0)
- ;; Unique identifier for representing the client object.
- server-id
- ;; defines whether the client supports multi root workspaces.
- multi-root
- ;; Initialization options or a function that returns initialization options.
- initialization-options
- ;; Overrides semantic tokens faces for specific clients
- semantic-tokens-faces-overrides
- ;; Provides support for registering LSP Server specific capabilities.
- custom-capabilities
- ;; Function which returns the folders that are considered to be not projects but library files.
- ;; The function accepts one parameter currently active workspace.
- ;; See: https://github.com/emacs-lsp/lsp-mode/issues/225.
- library-folders-fn
- ;; function which will be called when opening file in the workspace to perform
- ;; client specific initialization. The function accepts one parameter
- ;; currently active workspace.
- before-file-open-fn
- ;; Function which will be called right after a workspace has been initialized.
- initialized-fn
- ;; ‘remote?’ indicate whether the client can be used for LSP server over TRAMP.
- (remote? nil)
-
- ;; ‘completion-in-comments?’ t if the client supports completion in comments.
- (completion-in-comments? nil)
-
- ;; ‘path->uri-fn’ the function to use for path->uri conversion for the client.
- (path->uri-fn nil)
-
- ;; ‘uri->path-fn’ the function to use for uri->path conversion for the client.
- (uri->path-fn nil)
- ;; Function that returns an environment structure that will be used
- ;; to set some environment variables when starting the language
- ;; server process. These environment variables enable some
- ;; additional features in the language server. The environment
- ;; structure is an alist of the form (KEY . VALUE), where KEY is a
- ;; string (regularly in all caps), and VALUE may be a string, a
- ;; boolean, or a sequence of strings.
- environment-fn
-
- ;; ‘after-open-fn’ workspace after open specific hooks.
- (after-open-fn nil)
-
- ;; ‘async-request-handlers’ is a hash table mapping request method names
- ;; (strings) to functions handling the respective requests that may take
- ;; time to finish. Upon receiving a request, ‘lsp-mode’ will call the
- ;; associated handler function passing three arguments, the ‘lsp--workspace’
- ;; object, the deserialized request parameters and the callback which accept
- ;; result as its parameter.
- (async-request-handlers (make-hash-table :test 'equal))
- download-server-fn
- download-in-progress?
- buffers)
-
-(defun lsp-clients-executable-find (find-command &rest args)
- "Finds an executable by invoking a search command.
-
-FIND-COMMAND is the executable finder that searches for the
-actual language server executable. ARGS is a list of arguments to
-give to FIND-COMMAND to find the language server. Returns the
-output of FIND-COMMAND if it exits successfully, nil otherwise.
-
-Typical uses include finding an executable by invoking 'find' in
-a project, finding LLVM commands on macOS with 'xcrun', or
-looking up project-specific language servers for projects written
-in the various dynamic languages, e.g. 'nvm', 'pyenv' and 'rbenv'
-etc."
- (when-let* ((find-command-path (executable-find find-command))
- (executable-path
- (with-temp-buffer
- (when (zerop (apply 'call-process find-command-path nil t nil args))
- (buffer-substring-no-properties (point-min) (point-max))))))
- (string-trim executable-path)))
-
-(defvar lsp--already-widened nil)
-
-(defmacro lsp-save-restriction-and-excursion (&rest form)
- (declare (indent 0) (debug t))
- `(if lsp--already-widened
- (save-excursion ,@form)
- (-let [lsp--already-widened t]
- (save-restriction
- (widen)
- (save-excursion ,@form)))))
-
-;; from http://emacs.stackexchange.com/questions/8082/how-to-get-buffer-position-given-line-number-and-column-number
-(defun lsp--line-character-to-point (line character)
- "Return the point for character CHARACTER on line LINE."
- (or (lsp-virtual-buffer-call :line/character->point line character)
- (let ((inhibit-field-text-motion t))
- (lsp-save-restriction-and-excursion
- (goto-char (point-min))
- (forward-line line)
- ;; server may send character position beyond the current line and we
- ;; should fallback to line end.
- (-let [line-end (line-end-position)]
- (if (> character (- line-end (point)))
- line-end
- (forward-char character)
- (point)))))))
-
-(lsp-defun lsp--position-to-point ((&Position :line :character))
- "Convert `Position' object in PARAMS to a point."
- (lsp--line-character-to-point line character))
-
-(lsp-defun lsp--range-to-region ((&RangeToPoint :start :end))
- (cons start end))
-
-(lsp-defun lsp--range-text ((&RangeToPoint :start :end))
- (buffer-substring start end))
-
-(lsp-defun lsp--find-wrapping-range ((&SelectionRange :parent? :range (&RangeToPoint :start :end)))
- (cond
- ((and
- (region-active-p)
- (<= start (region-beginning) end)
- (<= start (region-end) end)
- (or (not (= start (region-beginning)))
- (not (= end (region-end)))))
- (cons start end))
- ((and (<= start (point) end)
- (not (region-active-p)))
- (cons start end))
- (parent? (lsp--find-wrapping-range parent?))))
-
-(defun lsp--get-selection-range ()
- (or
- (-when-let ((cache . cache-tick) lsp--document-selection-range-cache)
- (when (= cache-tick (buffer-modified-tick)) cache))
- (let ((response (cl-first
- (lsp-request
- "textDocument/selectionRange"
- (list :textDocument (lsp--text-document-identifier)
- :positions (vector (lsp--cur-position)))))))
- (setq lsp--document-selection-range-cache
- (cons response (buffer-modified-tick)))
- response)))
-
-(defun lsp-extend-selection ()
- "Extend selection."
- (interactive)
- (unless (lsp--capability :selectionRangeProvider)
- (signal 'lsp-capability-not-supported (list "selectionRangeProvider")))
- (-when-let ((start . end) (lsp--find-wrapping-range (lsp--get-selection-range)))
- (goto-char start)
- (set-mark (point))
- (goto-char end)
- (exchange-point-and-mark)))
-
-(defun lsp-warn (message &rest args)
- "Display a warning message made from (`format-message' MESSAGE ARGS...).
-This is equivalent to `display-warning', using `lsp-mode' as the type and
-`:warning' as the level."
- (display-warning 'lsp-mode (apply #'format-message message args)))
-
-(defun lsp--get-uri-handler (scheme)
- "Get uri handler for SCHEME in the current workspace."
- (--some (gethash scheme (lsp--client-uri-handlers (lsp--workspace-client it)))
- (or (lsp-workspaces) (lsp--session-workspaces (lsp-session)))))
-
-(defun lsp--fix-path-casing (path)
- "On windows, downcases path because the windows file system is
-case-insensitive.
-
-On other systems, returns path without change."
- (if (eq system-type 'windows-nt) (downcase path) path))
-
-(defun lsp--uri-to-path (uri)
- "Convert URI to a file path."
- (if-let ((fn (->> (lsp-workspaces)
- (-keep (-compose #'lsp--client-uri->path-fn #'lsp--workspace-client))
- (cl-first))))
- (funcall fn uri)
- (lsp--uri-to-path-1 uri)))
-
-(defun lsp-remap-path-if-needed (file-name)
- (-if-let ((virtual-buffer &as &plist :buffer) (gethash file-name lsp--virtual-buffer-mappings))
- (propertize (buffer-local-value 'buffer-file-name buffer)
- 'lsp-virtual-buffer virtual-buffer)
- file-name))
-
-(defun lsp--uri-to-path-1 (uri)
- "Convert URI to a file path."
- (let* ((url (url-generic-parse-url (url-unhex-string uri)))
- (type (url-type url))
- (file (decode-coding-string (url-filename url)
- (or locale-coding-system 'utf-8)))
- (file-name (if (and type (not (string= type "file")))
- (if-let ((handler (lsp--get-uri-handler type)))
- (funcall handler uri)
- uri)
- ;; `url-generic-parse-url' is buggy on windows:
- ;; https://github.com/emacs-lsp/lsp-mode/pull/265
- (or (and (eq system-type 'windows-nt)
- (eq (elt file 0) ?\/)
- (substring file 1))
- file))))
- (->> file-name
- (concat (-some #'lsp--workspace-host-root (lsp-workspaces)))
- (lsp-remap-path-if-needed))))
-
-(defun lsp--buffer-uri ()
- "Return URI of the current buffer."
- (or lsp-buffer-uri
- (plist-get lsp--virtual-buffer :buffer-uri)
- (lsp--path-to-uri
- (or (buffer-file-name) (buffer-file-name (buffer-base-buffer))))))
-
-(defun lsp-register-client-capabilities (&rest _args)
- "Implemented only to make `company-lsp' happy.
-DELETE when `lsp-mode.el' is deleted.")
-
-(defconst lsp--url-path-allowed-chars
- (url--allowed-chars (append '(?/) url-unreserved-chars))
- "`url-unreserved-chars' with additional delim ?/.
-This set of allowed chars is enough for hexifying local file paths.")
-
-(defun lsp--path-to-uri-1 (path)
- (concat lsp--uri-file-prefix
- (--> path
- (expand-file-name it)
- (or (file-remote-p it 'localname t) it)
- (url-hexify-string it lsp--url-path-allowed-chars))))
-
-(defun lsp--path-to-uri (path)
- "Convert PATH to a uri."
- (if-let ((uri-fn (->> (lsp-workspaces)
- (-keep (-compose #'lsp--client-path->uri-fn #'lsp--workspace-client))
- (cl-first))))
- (funcall uri-fn path)
- (lsp--path-to-uri-1 path)))
-
-(defun lsp--string-match-any (regex-list str)
- "Return the first regex, if any, within REGEX-LIST matching STR."
- (--first (string-match it str) regex-list))
-
-(cl-defstruct lsp-watch
- (descriptors (make-hash-table :test 'equal))
- root-directory)
-
-(defun lsp--folder-watch-callback (event callback watch ignored-files ignored-directories)
- (let ((file-name (cl-third event))
- (event-type (cl-second event)))
- (cond
- ((and (file-directory-p file-name)
- (equal 'created event-type)
- (not (lsp--string-match-any ignored-directories file-name)))
-
- (lsp-watch-root-folder (file-truename file-name) callback ignored-files ignored-directories watch)
-
- ;; process the files that are already present in
- ;; the directory.
- (->> (directory-files-recursively file-name ".*" t)
- (seq-do (lambda (f)
- (unless (file-directory-p f)
- (funcall callback (list nil 'created f)))))))
- ((and (memq event-type '(created deleted changed))
- (not (file-directory-p file-name))
- (not (lsp--string-match-any ignored-files file-name)))
- (funcall callback event))
- ((and (memq event-type '(renamed))
- (not (file-directory-p file-name))
- (not (lsp--string-match-any ignored-files file-name)))
- (funcall callback `(,(cl-first event) deleted ,(cl-third event)))
- (funcall callback `(,(cl-first event) created ,(cl-fourth event)))))))
-
-(defun lsp--ask-about-watching-big-repo (number-of-directories dir)
- "Ask the user if they want to watch NUMBER-OF-DIRECTORIES from a repository DIR.
-This is useful when there is a lot of files in a repository, as
-that may slow Emacs down. Returns t if the user wants to watch
-the entire repository, nil otherwise."
- (prog1
- (yes-or-no-p
- (format
- "Watching all the files in %s would require adding watches to %s directories, so watching the repo may slow Emacs down.
-Do you want to watch all files in %s? "
- dir
- number-of-directories
- dir))
- (lsp--info
- (concat "You can configure this warning with the `lsp-enable-file-watchers' "
- "and `lsp-file-watch-threshold' variables"))))
-
-
-(defun lsp--path-is-watchable-directory (path dir ignored-directories)
- "Figure out whether PATH (inside of DIR) is meant to have a file watcher set.
-IGNORED-DIRECTORIES is a list of regexes to filter out directories we don't want to watch."
- (let
- ((full-path (f-join dir path)))
- (and (f-dir-p full-path)
- (not (equal path "."))
- (not (equal path ".."))
- (not (lsp--string-match-any ignored-directories full-path)))))
-
-
-(defun lsp--all-watchable-directories (dir ignored-directories)
- "Traverse DIR recursively and return a list of paths that should have watchers set on them.
-IGNORED-DIRECTORIES will be used for exclusions"
- (let* ((dir (if (f-symlink? dir)
- (file-truename dir)
- dir)))
- (apply #'nconc
- ;; the directory itself is assumed to be part of the set
- (list dir)
- ;; collect all subdirectories that are watchable
- (-map
- (lambda (path) (lsp--all-watchable-directories (f-join dir path) ignored-directories))
- ;; but only look at subdirectories that are watchable
- (-filter (lambda (path) (lsp--path-is-watchable-directory path dir ignored-directories))
- (directory-files dir))))))
-
-(defun lsp-watch-root-folder (dir callback ignored-files ignored-directories &optional watch warn-big-repo?)
- "Create recursive file notification watch in DIR.
-CALLBACK will be called when there are changes in any of
-the monitored files. WATCHES is a hash table directory->file
-notification handle which contains all of the watch that
-already have been created. Watches will not be created for
-any directory that matches any regex in IGNORED-DIRECTORIES.
-Watches will not be created for any file that matches any
-regex in IGNORED-FILES."
- (let* ((dir (if (f-symlink? dir)
- (file-truename dir)
- dir))
- (watch (or watch (make-lsp-watch :root-directory dir)))
- (dirs-to-watch (lsp--all-watchable-directories dir ignored-directories)))
- (lsp-log "Creating watchers for following %s folders:\n %s"
- (length dirs-to-watch)
- (s-join "\n " dirs-to-watch))
- (when (or
- (not warn-big-repo?)
- (not lsp-file-watch-threshold)
- (let ((number-of-directories (length dirs-to-watch)))
- (or
- (< number-of-directories lsp-file-watch-threshold)
- (condition-case _err
- (lsp--ask-about-watching-big-repo number-of-directories dir)
- ('quit)))))
- (dolist (current-dir dirs-to-watch)
- (condition-case err
- (progn
- (puthash
- current-dir
- (file-notify-add-watch current-dir
- '(change)
- (lambda (event)
- (lsp--folder-watch-callback event callback watch ignored-files ignored-directories)))
- (lsp-watch-descriptors watch)))
- (error (lsp-log "Failed to create a watch for %s: message" (error-message-string err)))
- (file-missing (lsp-log "Failed to create a watch for %s: message" (error-message-string err))))))
- watch))
-
-(defun lsp-kill-watch (watch)
- "Delete WATCH."
- (-> watch lsp-watch-descriptors hash-table-values (-each #'file-notify-rm-watch))
- (ht-clear! (lsp-watch-descriptors watch)))
-
-(defun lsp-json-bool (val)
- "Convert VAL to JSON boolean."
- (if val t :json-false))
-
-(defmacro with-lsp-workspace (workspace &rest body)
- "Helper macro for invoking BODY in WORKSPACE context."
- (declare (debug (form body))
- (indent 1))
- `(let ((lsp--cur-workspace ,workspace)) ,@body))
-
-(defmacro with-lsp-workspaces (workspaces &rest body)
- "Helper macro for invoking BODY against multiple WORKSPACES."
- (declare (debug (form body))
- (indent 1))
- `(let ((lsp--buffer-workspaces ,workspaces)) ,@body))
-
-
-
-(defconst lsp-downstream-deps
- '(;; external packages
- ccls consult-lsp dap-mode helm-lsp lsp-dart lsp-docker lsp-focus lsp-grammarly
- lsp-haskell lsp-ivy lsp-java lsp-javacomp lsp-jedi lsp-julia lsp-latex lsp-ltex
- lsp-metals lsp-mssql lsp-origami lsp-p4 lsp-pascal lsp-pyre lsp-pyright
- lsp-python-ms lsp-rescript lsp-sonarlint lsp-sourcekit lsp-tailwindcss lsp-treemacs
- lsp-ui swift-helpful
- ;; clients
- lsp-actionscript lsp-ada lsp-angular lsp-bash lsp-beancount lsp-clangd
- lsp-clojure lsp-cmake lsp-crystal lsp-csharp lsp-css lsp-d lsp-dhall
- lsp-dockerfile lsp-elixir lsp-elm lsp-erlang lsp-eslint lsp-fortran lsp-fsharp lsp-gdscript
- lsp-go lsp-groovy lsp-hack lsp-haxe lsp-html lsp-javascript lsp-json lsp-kotlin lsp-lua
- lsp-markdown lsp-nim lsp-nix lsp-ocaml lsp-perl lsp-php lsp-prolog lsp-purescript lsp-pwsh
- lsp-pyls lsp-pylsp lsp-racket lsp-r lsp-rf lsp-rust lsp-solargraph lsp-sorbet lsp-sqls
- lsp-steep lsp-svelte lsp-terraform lsp-tex lsp-v lsp-vala lsp-verilog lsp-vetur lsp-vhdl
- lsp-vimscript lsp-xml lsp-yaml lsp-zig)
- "List of downstream deps.")
-
-(defmacro lsp-consistency-check (package)
- `(defconst ,(intern (concat (symbol-name package)
- "-plist-value-when-compiled"))
- (eval-when-compile lsp-use-plists)))
-
-;; (mapc
-;; (lambda (package)
-;; (with-eval-after-load package
-;; (let ((symbol-name (intern
-;; (concat (symbol-name package)
-;; "-plist-value-when-compiled"))))
-;; (cond
-;; ((not (boundp symbol-name))
-;; (warn "We have detected that you are using version of %s that is not compatible with current version of lsp-mode.el, please update it." (propertize (symbol-name package)
-;; 'face 'bold)))
-;; ((not (eq (symbol-value symbol-name) lsp-use-plists))
-;; (warn "Package %s is inconsistent with lsp-mode.el. This is indication of race during installation. In order to solve that please delete all packages related to lsp-mode, restar Emacs and install them again." (propertize (symbol-name package) 'face 'bold)))))))
-;; lsp-downstream-deps)
-
-
-;; loading code-workspace files
-
-;;;###autoload
-(defun lsp-load-vscode-workspace (file)
- "Load vscode workspace from FILE"
- (interactive "fSelect file to import: ")
- (mapc #'lsp-workspace-folders-remove (lsp-session-folders (lsp-session)))
-
- (let ((dir (f-dirname file)))
- (->> file
- (json-read-file)
- (alist-get 'folders)
- (-map (-lambda ((&alist 'path))
- (lsp-workspace-folders-add (expand-file-name path dir)))))))
-
-;;;###autoload
-(defun lsp-save-vscode-workspace (file)
- "Save vscode workspace to FILE"
- (interactive "FSelect file to save to: ")
-
- (let ((json-encoding-pretty-print t))
- (f-write-text (json-encode
- `((folders . ,(->> (lsp-session)
- (lsp-session-folders)
- (--map `((path . ,it)))))))
- 'utf-8
- file)))
-
-
-(defmacro lsp-foreach-workspace (&rest body)
- "Execute BODY for each of the current workspaces."
- (declare (debug (form body)))
- `(--map (with-lsp-workspace it ,@body) (lsp-workspaces)))
-
-(defmacro when-lsp-workspace (workspace &rest body)
- "Helper macro for invoking BODY in WORKSPACE context if present."
- (declare (debug (form body))
- (indent 1))
- `(when-let ((lsp--cur-workspace ,workspace)) ,@body))
-
-(lsp-defun lsp--window-show-message (_workspace (&ShowMessageRequestParams :message :type))
- "Send the server's messages to log.
-PARAMS - the data sent from _WORKSPACE."
- (funcall (cl-case type
- (1 'lsp--error)
- (2 'lsp--warn)
- (t 'lsp--info))
- "%s"
- message))
-
-(lsp-defun lsp--window-log-message (workspace (&ShowMessageRequestParams :message :type))
- "Send the server's messages to log.
-PARAMS - the data sent from WORKSPACE."
- (ignore
- (let ((client (lsp--workspace-client workspace)))
- (when (or (not client)
- (cl-notany (-rpartial #'string-match-p message)
- (lsp--client-ignore-messages client)))
- (lsp-log "%s" (lsp--propertize message type))))))
-
-(lsp-defun lsp--window-log-message-request ((&ShowMessageRequestParams :message :type :actions?))
- "Display a message request to the user and send the user's selection back to the server."
- (let* ((message (lsp--propertize message type))
- (choices (seq-map #'lsp:message-action-item-title actions?)))
- (if choices
- (completing-read (concat message " ") (seq-into choices 'list) nil t)
- (lsp-log message))))
-
-(defcustom lsp-progress-prefix " ⌛ "
- "Progress prefix."
- :group 'lsp-mode
- :type 'string
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-progress-function #'lsp-on-progress-modeline
- "Function for handling the progress notifications."
- :group 'lsp-mode
- :type '(choice
- (const :tag "Use modeline" lsp-on-progress-modeline)
- (const :tag "Legacy(uses either `progress-reporter' or `spinner' based on `lsp-progress-via-spinner')"
- lsp-on-progress-legacy)
- (const ignore :tag "Ignore")
- (function :tag "Other function"))
- :package-version '(lsp-mode . "7.1.0"))
-
-(defun lsp--progress-status ()
- "Returns the status of the progress for the current workspaces."
- (-let ((progress-status
- (s-join
- "|"
- (-keep
- (lambda (workspace)
- (let ((tokens (lsp--workspace-work-done-tokens workspace)))
- (unless (ht-empty? tokens)
- (mapconcat
- (-lambda ((&WorkDoneProgressBegin :message? :title :percentage?))
- (concat (if percentage?
- (format "%s%%%% " percentage?)
- "")
- (or message? title)))
- (ht-values tokens)
- "|"))))
- (lsp-workspaces)))))
- (unless (s-blank? progress-status)
- (concat lsp-progress-prefix progress-status))))
-
-(lsp-defun lsp-on-progress-modeline (workspace (&ProgressParams :token :value
- (value &as &WorkDoneProgress :kind)))
- "PARAMS contains the progress data.
-WORKSPACE is the workspace that contains the progress token."
- (add-to-list 'global-mode-string '(t (:eval (lsp--progress-status))))
- (pcase kind
- ("begin" (lsp-workspace-set-work-done-token token value workspace))
- ("report" (lsp-workspace-set-work-done-token token value workspace))
- ("end" (lsp-workspace-rem-work-done-token token workspace)))
- (force-mode-line-update))
-
-(lsp-defun lsp-on-progress-legacy (workspace (&ProgressParams :token :value
- (value &as &WorkDoneProgress :kind)))
- "PARAMS contains the progress data.
-WORKSPACE is the workspace that contains the progress token."
- (pcase kind
- ("begin"
- (-let* (((&WorkDoneProgressBegin :title :percentage?) value)
- (reporter
- (if lsp-progress-via-spinner
- (let* ((spinner-strings (alist-get 'progress-bar spinner-types))
- ;; Set message as a tooltip for the spinner strings
- (propertized-strings
- (seq-map (lambda (string) (propertize string 'help-echo title))
- spinner-strings))
- (spinner-type (vconcat propertized-strings)))
- ;; The progress relates to the server as a whole,
- ;; display it on all buffers.
- (mapcar (lambda (buffer)
- (lsp-with-current-buffer buffer
- (spinner-start spinner-type))
- buffer)
- (lsp--workspace-buffers workspace)))
- (if percentage?
- (make-progress-reporter title 0 100 percentage?)
- ;; No percentage, just progress
- (make-progress-reporter title nil nil)))))
- (lsp-workspace-set-work-done-token token reporter workspace)))
- ("report"
- (when-let ((reporter (lsp-workspace-get-work-done-token token workspace)))
- (unless lsp-progress-via-spinner
- (progress-reporter-update reporter (lsp:work-done-progress-report-percentage? value)))))
-
- ("end"
- (when-let ((reporter (lsp-workspace-get-work-done-token token workspace)))
- (if lsp-progress-via-spinner
- (mapc (lambda (buffer)
- (when (lsp-buffer-live-p buffer)
- (lsp-with-current-buffer buffer
- (spinner-stop))))
- reporter)
- (progress-reporter-done reporter))
- (lsp-workspace-rem-work-done-token token workspace)))))
-
-
-;; diagnostics
-
-(defvar lsp-diagnostic-filter nil
- "A a function which will be called with
- `&PublishDiagnosticsParams' and `workspace' which can be used
- to filter out the diagnostics. The function should return
- `&PublishDiagnosticsParams'.
-
-Common usecase are:
-1. Filter the diagnostics for a particular language server.
-2. Filter out the diagnostics under specific level.")
-
-(defvar lsp-diagnostic-stats (ht))
-
-(defun lsp-diagnostics (&optional current-workspace?)
- "Return the diagnostics from all workspaces."
- (or (pcase (if current-workspace?
- (lsp-workspaces)
- (lsp--session-workspaces (lsp-session)))
- (`() ())
- (`(,workspace) (lsp--workspace-diagnostics workspace))
- (`,workspaces (let ((result (make-hash-table :test 'equal)))
- (mapc (lambda (workspace)
- (->> workspace
- (lsp--workspace-diagnostics)
- (maphash (lambda (file-name diagnostics)
- (puthash file-name
- (append (gethash file-name result) diagnostics)
- result)))))
- workspaces)
- result)))
- (ht)))
-
-(defun lsp-diagnostics-stats-for (path)
- "Get diagnostics statistics for PATH.
-The result format is vector [_ errors warnings infos hints] or nil."
- (gethash (lsp--fix-path-casing path) lsp-diagnostic-stats))
-
-(defun lsp-diagnostics--update-path (path new-stats)
- (let ((new-stats (copy-sequence new-stats))
- (path (lsp--fix-path-casing (directory-file-name path))))
- (if-let ((old-data (gethash path lsp-diagnostic-stats)))
- (dotimes (idx 5)
- (cl-callf + (aref old-data idx)
- (aref new-stats idx)))
- (puthash path new-stats lsp-diagnostic-stats))))
-
-(lsp-defun lsp--on-diagnostics-update-stats (workspace
- (&PublishDiagnosticsParams :uri :diagnostics))
- (let ((path (lsp--fix-path-casing (lsp--uri-to-path uri)))
- (new-stats (make-vector 5 0)))
- (mapc (-lambda ((&Diagnostic :severity?))
- (cl-incf (aref new-stats (or severity? 1))))
- diagnostics)
- (when-let ((old-diags (gethash path (lsp--workspace-diagnostics workspace))))
- (mapc (-lambda ((&Diagnostic :severity?))
- (cl-decf (aref new-stats (or severity? 1))))
- old-diags))
- (lsp-diagnostics--update-path path new-stats)
- (while (not (string= path (setf path (file-name-directory
- (directory-file-name path)))))
- (lsp-diagnostics--update-path path new-stats))))
-
-(defun lsp--on-diagnostics (workspace params)
- "Callback for textDocument/publishDiagnostics.
-interface PublishDiagnosticsParams {
- uri: string;
- diagnostics: Diagnostic[];
-}
-PARAMS contains the diagnostics data.
-WORKSPACE is the workspace that contains the diagnostics."
- (when lsp-diagnostic-filter
- (setf params (funcall lsp-diagnostic-filter params workspace)))
-
- (lsp--on-diagnostics-update-stats workspace params)
-
- (-let* (((&PublishDiagnosticsParams :uri :diagnostics) params)
- (lsp--virtual-buffer-mappings (ht))
- (file (lsp--fix-path-casing (lsp--uri-to-path uri)))
- (workspace-diagnostics (lsp--workspace-diagnostics workspace)))
-
- (if (seq-empty-p diagnostics)
- (remhash file workspace-diagnostics)
- (puthash file (append diagnostics nil) workspace-diagnostics))
-
- (run-hooks 'lsp-diagnostics-updated-hook)))
-
-(defun lsp-diagnostics--workspace-cleanup (workspace)
- (->> workspace
- (lsp--workspace-diagnostics)
- (maphash (lambda (key _)
- (lsp--on-diagnostics-update-stats
- workspace
- (lsp-make-publish-diagnostics-params
- :uri (lsp--path-to-uri key)
- :diagnostics [])))))
- (clrhash (lsp--workspace-diagnostics workspace)))
-
-
-
-;; textDocument/foldingRange support
-
-(cl-defstruct lsp--folding-range beg end kind children)
-
-(defvar-local lsp--cached-folding-ranges nil)
-(defvar-local lsp--cached-nested-folding-ranges nil)
-
-(defun lsp--folding-range-width (range)
- (- (lsp--folding-range-end range)
- (lsp--folding-range-beg range)))
-
-(defun lsp--get-folding-ranges ()
- "Get the folding ranges for the current buffer."
- (unless (eq (buffer-chars-modified-tick) (car lsp--cached-folding-ranges))
- (let* ((ranges (lsp-request "textDocument/foldingRange"
- `(:textDocument ,(lsp--text-document-identifier))))
- (sorted-line-col-pairs (->> ranges
- (cl-mapcan (-lambda ((&FoldingRange :start-line
- :start-character?
- :end-line
- :end-character?))
- (list (cons start-line start-character?)
- (cons end-line end-character?))))
- (-sort #'lsp--line-col-comparator)))
- (line-col-to-point-map (lsp--convert-line-col-to-points-batch
- sorted-line-col-pairs)))
- (setq lsp--cached-folding-ranges
- (cons (buffer-chars-modified-tick)
- (--> ranges
- (seq-map (-lambda ((range &as
- &FoldingRange :start-line
- :start-character?
- :end-line
- :end-character?
- :kind?))
- (make-lsp--folding-range
- :beg (ht-get line-col-to-point-map
- (cons start-line start-character?))
- :end (ht-get line-col-to-point-map
- (cons end-line end-character?))
- :kind kind?))
- it)
- (seq-filter (lambda (folding-range)
- (< (lsp--folding-range-beg folding-range)
- (lsp--folding-range-end folding-range)))
- it)
- (seq-into it 'list)
- (delete-dups it))))))
- (cdr lsp--cached-folding-ranges))
-
-(defun lsp--get-nested-folding-ranges ()
- "Get a list of nested folding ranges for the current buffer."
- (-let [(tick . _) lsp--cached-folding-ranges]
- (if (and (eq tick (buffer-chars-modified-tick))
- lsp--cached-nested-folding-ranges)
- lsp--cached-nested-folding-ranges
- (setq lsp--cached-nested-folding-ranges
- (lsp--folding-range-build-trees (lsp--get-folding-ranges))))))
-
-(defun lsp--folding-range-build-trees (ranges)
- (setq ranges (seq-sort #'lsp--range-before-p ranges))
- (let* ((dummy-node (make-lsp--folding-range
- :beg most-negative-fixnum
- :end most-positive-fixnum))
- (stack (list dummy-node)))
- (dolist (range ranges)
- (while (not (lsp--range-inside-p range (car stack)))
- (pop stack))
- (push range (lsp--folding-range-children (car stack)))
- (push range stack))
- (lsp--folding-range-children dummy-node)))
-
-(defun lsp--range-inside-p (r1 r2)
- "Return non-nil if folding range R1 lies inside R2"
- (and (>= (lsp--folding-range-beg r1) (lsp--folding-range-beg r2))
- (<= (lsp--folding-range-end r1) (lsp--folding-range-end r2))))
-
-(defun lsp--range-before-p (r1 r2)
- "Return non-nil if folding range R1 ends before R2"
- ;; Ensure r1 comes before r2
- (or (< (lsp--folding-range-beg r1)
- (lsp--folding-range-beg r2))
- ;; If beg(r1) == beg(r2) make sure r2 ends first
- (and (= (lsp--folding-range-beg r1)
- (lsp--folding-range-beg r2))
- (< (lsp--folding-range-end r2)
- (lsp--folding-range-end r1)))))
-
-(defun lsp--point-inside-range-p (point range)
- "Return non-nil if POINT lies inside folding range RANGE."
- (and (>= point (lsp--folding-range-beg range))
- (<= point (lsp--folding-range-end range))))
-
-(cl-defun lsp--get-current-innermost-folding-range (&optional (point (point)))
- "Return the innermost folding range POINT lies in."
- (seq-reduce (lambda (innermost-range curr-range)
- (if (and (lsp--point-inside-range-p point curr-range)
- (or (null innermost-range)
- (lsp--range-inside-p curr-range innermost-range)))
- curr-range
- innermost-range))
- (lsp--get-folding-ranges)
- nil))
-
-(cl-defun lsp--get-current-outermost-folding-range (&optional (point (point)))
- "Return the outermost folding range POINT lies in."
- (cdr (seq-reduce (-lambda ((best-pair &as outermost-width . _) curr-range)
- (let ((curr-width (lsp--folding-range-width curr-range)))
- (if (and (lsp--point-inside-range-p point curr-range)
- (or (null best-pair)
- (> curr-width outermost-width)))
- (cons curr-width curr-range)
- best-pair)))
- (lsp--get-folding-ranges)
- nil)))
-
-(defun lsp--folding-range-at-point-bounds ()
- (if (and (or (lsp--capability :foldingRangeProvider)
- (lsp--registered-capability "textDocument/foldingRange"))
- lsp-enable-folding)
- (if-let ((range (lsp--get-current-innermost-folding-range)))
- (cons (lsp--folding-range-beg range)
- (lsp--folding-range-end range)))
- nil))
-(put 'lsp--folding-range 'bounds-of-thing-at-point
- #'lsp--folding-range-at-point-bounds)
-
-(defun lsp--get-nearest-folding-range (&optional backward)
- (let ((point (point))
- (found nil))
- (while (not
- (or found
- (if backward
- (<= point (point-min))
- (>= point (point-max)))))
- (if backward (cl-decf point) (cl-incf point))
- (setq found (lsp--get-current-innermost-folding-range point)))
- found))
-
-(defun lsp--folding-range-at-point-forward-op (n)
- (when (and (or (lsp--capability :foldingRangeProvider)
- (lsp--registered-capability "textDocument/foldingRange"))
- lsp-enable-folding
- (not (zerop n)))
- (cl-block break
- (dotimes (_ (abs n))
- (if-let ((range (lsp--get-nearest-folding-range (< n 0))))
- (goto-char (if (< n 0)
- (lsp--folding-range-beg range)
- (lsp--folding-range-end range)))
- (cl-return-from break))))))
-(put 'lsp--folding-range 'forward-op
- #'lsp--folding-range-at-point-forward-op)
-
-(defun lsp--folding-range-at-point-beginning-op ()
- (goto-char (car (lsp--folding-range-at-point-bounds))))
-(put 'lsp--folding-range 'beginning-op
- #'lsp--folding-range-at-point-beginning-op)
-
-(defun lsp--folding-range-at-point-end-op ()
- (goto-char (cdr (lsp--folding-range-at-point-bounds))))
-(put 'lsp--folding-range 'end-op
- #'lsp--folding-range-at-point-end-op)
-
-(defun lsp--range-at-point-bounds ()
- (or (lsp--folding-range-at-point-bounds)
- (when-let ((range (and
- (lsp--capability :hoverProvider)
- (->> (lsp--text-document-position-params)
- (lsp-request "textDocument/hover")
- (lsp:hover-range?)))))
- (lsp--range-to-region range))))
-
-;; A more general purpose "thing", useful for applications like focus.el
-(put 'lsp--range 'bounds-of-thing-at-point
- #'lsp--range-at-point-bounds)
-
-
-;; toggles
-
-(defun lsp-toggle-trace-io ()
- "Toggle client-server protocol logging."
- (interactive)
- (setq lsp-print-io (not lsp-print-io))
- (lsp--info "Server logging %s." (if lsp-print-io "enabled" "disabled")))
-
-(defun lsp-toggle-signature-auto-activate ()
- "Toggle signature auto activate."
- (interactive)
- (setq lsp-signature-auto-activate
- (unless lsp-signature-auto-activate '(:on-trigger-char)))
- (lsp--info "Signature autoactivate %s." (if lsp-signature-auto-activate "enabled" "disabled"))
- (lsp--update-signature-help-hook))
-
-(defun lsp-toggle-on-type-formatting ()
- "Toggle on type formatting."
- (interactive)
- (setq lsp-enable-on-type-formatting (not lsp-enable-on-type-formatting))
- (lsp--info "On type formatting is %s." (if lsp-enable-on-type-formatting "enabled" "disabled"))
- (lsp--update-on-type-formatting-hook))
-
-(defun lsp-toggle-symbol-highlight ()
- "Toggle symbol highlighting."
- (interactive)
- (setq lsp-enable-symbol-highlighting (not lsp-enable-symbol-highlighting))
-
- (cond
- ((and lsp-enable-symbol-highlighting
- (lsp-feature? "textDocument/documentHighlight"))
- (add-hook 'lsp-on-idle-hook #'lsp--document-highlight nil t)
- (lsp--info "Symbol highlighting enabled in current buffer."))
- ((not lsp-enable-symbol-highlighting)
- (remove-hook 'lsp-on-idle-hook #'lsp--document-highlight t)
- (lsp--remove-overlays 'lsp-highlight)
- (lsp--info "Symbol highlighting disabled in current buffer."))))
-
-
-;; keybindings
-(defvar lsp--binding-descriptions nil
- "List of key binding/short description pair.")
-
-(defmacro lsp-define-conditional-key (keymap key def desc cond &rest bindings)
- "In KEYMAP, define key sequence KEY as DEF conditionally.
-This is like `define-key', except the definition disappears
-whenever COND evaluates to nil.
-DESC is the short-description for the binding.
-BINDINGS is a list of (key def desc cond)."
- (declare (indent defun)
- (debug (form form form form form &rest sexp)))
- (->> (cl-list* key def desc cond bindings)
- (-partition 4)
- (-mapcat (-lambda ((key def desc cond))
- `((define-key ,keymap ,key
- '(menu-item
- ,(format "maybe-%s" def)
- ,def
- :filter
- (lambda (item)
- (when (with-current-buffer (or (when (buffer-live-p lsp--describe-buffer)
- lsp--describe-buffer)
- (current-buffer))
- ,cond)
- item))))
- (when (stringp ,key)
- (setq lsp--binding-descriptions
- (nconc lsp--binding-descriptions '(,key ,desc)))))))
- macroexp-progn))
-
-(defvar lsp--describe-buffer nil)
-
-(defun lsp-describe-buffer-bindings-advice (fn buffer &optional prefix menus)
- (let ((lsp--describe-buffer buffer))
- (funcall fn buffer prefix menus)))
-
-(advice-add 'describe-buffer-bindings
- :around
- #'lsp-describe-buffer-bindings-advice)
-
-(defun lsp--prepend-prefix (mappings)
- (->> mappings
- (-partition 2)
- (-mapcat (-lambda ((key description))
- (list (concat lsp-keymap-prefix " " key)
- description)))))
-
-(defvar lsp-command-map
- (-doto (make-sparse-keymap)
- (lsp-define-conditional-key
- ;; workspaces
- "wD" lsp-disconnect "disconnect" (lsp-workspaces)
- "wd" lsp-describe-session "describe session" t
- "wq" lsp-workspace-shutdown "shutdown server" (lsp-workspaces)
- "wr" lsp-workspace-restart "restart server" (lsp-workspaces)
- "ws" lsp "start server" t
-
- ;; formatting
- "==" lsp-format-buffer "format buffer" (or (lsp-feature? "textDocument/rangeFormatting")
- (lsp-feature? "textDocument/formatting"))
- "=r" lsp-format-region "format region" (lsp-feature? "textDocument/rangeFormatting")
-
- ;; folders
- "Fa" lsp-workspace-folders-add "add folder" t
- "Fb" lsp-workspace-blacklist-remove "un-blacklist folder" t
- "Fr" lsp-workspace-folders-remove "remove folder" t
-
- ;; toggles
- "TD" lsp-modeline-diagnostics-mode "toggle modeline diagnostics" (lsp-feature?
- "textDocument/publishDiagnostics")
- "TL" lsp-toggle-trace-io "toggle log io" t
- "TS" lsp-ui-sideline-mode "toggle sideline" (featurep 'lsp-ui-sideline)
- "TT" lsp-treemacs-sync-mode "toggle treemacs integration" (featurep 'lsp-treemacs)
- "Ta" lsp-modeline-code-actions-mode "toggle modeline code actions" (lsp-feature?
- "textDocument/codeAction")
- "Tb" lsp-headerline-breadcrumb-mode "toggle breadcrumb" (lsp-feature?
- "textDocument/documentSymbol")
- "Td" lsp-ui-doc-mode "toggle documentation popup" (featurep 'lsp-ui-doc)
- "Tf" lsp-toggle-on-type-formatting "toggle on type formatting" (lsp-feature?
- "textDocument/onTypeFormatting")
- "Th" lsp-toggle-symbol-highlight "toggle highlighting" (lsp-feature? "textDocument/documentHighlight")
- "Tl" lsp-lens-mode "toggle lenses" (lsp-feature? "textDocument/codeLens")
- "Ts" lsp-toggle-signature-auto-activate "toggle signature" (lsp-feature? "textDocument/signatureHelp")
-
- ;; goto
- "ga" xref-find-apropos "find symbol in workspace" (lsp-feature? "workspace/symbol")
- "gd" lsp-find-declaration "find declarations" (lsp-feature? "textDocument/declaration")
- "ge" lsp-treemacs-errors-list "show errors" (fboundp 'lsp-treemacs-errors-list)
- "gg" lsp-find-definition "find definitions" (lsp-feature? "textDocument/definition")
- "gh" lsp-treemacs-call-hierarchy "call hierarchy" (and (lsp-feature? "callHierarchy/incomingCalls")
- (fboundp 'lsp-treemacs-call-hierarchy))
- "gi" lsp-find-implementation "find implementations" (lsp-feature? "textDocument/implementation")
- "gr" lsp-find-references "find references" (lsp-feature? "textDocument/references")
- "gt" lsp-find-type-definition "find type definition" (lsp-feature? "textDocument/typeDefinition")
-
- ;; help
- "hg" lsp-ui-doc-glance "glance symbol" (and (featurep 'lsp-ui-doc)
- (lsp-feature? "textDocument/hover"))
- "hh" lsp-describe-thing-at-point "describe symbol at point" (lsp-feature? "textDocument/hover")
- "hs" lsp-signature-activate "signature help" (lsp-feature? "textDocument/signatureHelp")
-
- ;; refactoring
- "ro" lsp-organize-imports "organize imports" (lsp-feature? "textDocument/codeAction")
- "rr" lsp-rename "rename" (lsp-feature? "textDocument/rename")
-
- ;; actions
- "aa" lsp-execute-code-action "code actions" (lsp-feature? "textDocument/codeAction")
- "ah" lsp-document-highlight "highlight symbol" (lsp-feature? "textDocument/documentHighlight")
- "al" lsp-avy-lens "lens" (and (bound-and-true-p lsp-lens-mode) (featurep 'avy))
-
- ;; peeks
- "Gg" lsp-ui-peek-find-definitions "peek definitions" (and (lsp-feature? "textDocument/definition")
- (fboundp 'lsp-ui-peek-find-definitions))
- "Gi" lsp-ui-peek-find-implementation "peek implementations" (and
- (fboundp 'lsp-ui-peek-find-implementation)
- (lsp-feature? "textDocument/implementation"))
- "Gr" lsp-ui-peek-find-references "peek references" (and (fboundp 'lsp-ui-peek-find-references)
- (lsp-feature? "textDocument/references"))
- "Gs" lsp-ui-peek-find-workspace-symbol "peek workspace symbol" (and (fboundp
- 'lsp-ui-peek-find-workspace-symbol)
- (lsp-feature? "workspace/symbol")))))
-
-
-;; which-key integration
-
-(declare-function which-key-add-major-mode-key-based-replacements "ext:which-key")
-(declare-function which-key-add-key-based-replacements "ext:which-key")
-
-(defun lsp-enable-which-key-integration (&optional all-modes)
- "Adds descriptions for `lsp-mode-map' to `which-key-mode' for the current
-active `major-mode', or for all major modes when ALL-MODES is t."
- (cl-flet ((which-key-fn (if all-modes
- 'which-key-add-key-based-replacements
- (apply-partially 'which-key-add-major-mode-key-based-replacements major-mode))))
- (apply
- #'which-key-fn
- (lsp--prepend-prefix
- (cl-list*
- "" "lsp"
- "w" "workspaces"
- "F" "folders"
- "=" "formatting"
- "T" "toggle"
- "g" "goto"
- "h" "help"
- "r" "refactor"
- "a" "code actions"
- "G" "peek"
- lsp--binding-descriptions)))))
-
-
-;; Globbing syntax
-
-;; We port VSCode's glob-to-regexp code
-;; (https://github.com/Microsoft/vscode/blob/466da1c9013c624140f6d1473b23a870abc82d44/src/vs/base/common/glob.ts)
-;; since the LSP globbing syntax seems to be the same as that of
-;; VSCode.
-
-(defconst lsp-globstar "**"
- "Globstar pattern.")
-
-(defconst lsp-glob-split ?/
- "The character by which we split path components in a glob
-pattern.")
-
-(defconst lsp-path-regexp "[/\\\\]"
- "Forward or backslash to be used as a path separator in
-computed regexps.")
-
-(defconst lsp-non-path-regexp "[^/\\\\]"
- "A regexp matching anything other than a slash.")
-
-(defconst lsp-globstar-regexp
- (format "\\(?:%s\\|%s+%s\\|%s%s+\\)*?"
- lsp-path-regexp
- lsp-non-path-regexp lsp-path-regexp
- lsp-path-regexp lsp-non-path-regexp)
- "Globstar in regexp form.")
-
-(defun lsp-split-glob-pattern (pattern split-char)
- "Split PATTERN at SPLIT-CHAR while respecting braces and brackets."
- (when pattern
- (let ((segments nil)
- (in-braces nil)
- (in-brackets nil)
- (current-segment ""))
- (dolist (char (string-to-list pattern))
- (cl-block 'exit-point
- (if (eq char split-char)
- (when (and (null in-braces)
- (null in-brackets))
- (push current-segment segments)
- (setq current-segment "")
- (cl-return-from 'exit-point))
- (pcase char
- (?{
- (setq in-braces t))
- (?}
- (setq in-braces nil))
- (?\[
- (setq in-brackets t))
- (?\]
- (setq in-brackets nil))))
- (setq current-segment (concat current-segment
- (char-to-string char)))))
- (unless (string-empty-p current-segment)
- (push current-segment segments))
- (nreverse segments))))
-
-(defun lsp--glob-to-regexp (pattern)
- "Helper function to convert a PATTERN from LSP's glob syntax to
-an Elisp regexp."
- (if (string-empty-p pattern)
- ""
- (let ((current-regexp "")
- (glob-segments (lsp-split-glob-pattern pattern lsp-glob-split)))
- (if (-all? (lambda (segment) (eq segment lsp-globstar))
- glob-segments)
- ".*"
- (let ((prev-segment-was-globstar nil))
- (seq-do-indexed
- (lambda (segment index)
- (if (string-equal segment lsp-globstar)
- (unless prev-segment-was-globstar
- (setq current-regexp (concat current-regexp
- lsp-globstar-regexp))
- (setq prev-segment-was-globstar t))
- (let ((in-braces nil)
- (brace-val "")
- (in-brackets nil)
- (bracket-val ""))
- (dolist (char (string-to-list segment))
- (cond
- ((and (not (char-equal char ?\}))
- in-braces)
- (setq brace-val (concat brace-val
- (char-to-string char))))
- ((and in-brackets
- (or (not (char-equal char ?\]))
- (string-empty-p bracket-val)))
- (let ((curr (cond
- ((char-equal char ?-)
- "-")
- ;; NOTE: ?\^ and ?^ are different characters
- ((and (memq char '(?^ ?!))
- (string-empty-p bracket-val))
- "^")
- ((char-equal char lsp-glob-split)
- "")
- (t
- (regexp-quote (char-to-string char))))))
- (setq bracket-val (concat bracket-val curr))))
- (t
- (cl-case char
- (?{
- (setq in-braces t))
- (?\[
- (setq in-brackets t))
- (?}
- (let* ((choices (lsp-split-glob-pattern brace-val ?\,))
- (brace-regexp (concat "\\(?:"
- (mapconcat #'lsp--glob-to-regexp choices "\\|")
- "\\)")))
- (setq current-regexp (concat current-regexp
- brace-regexp))
- (setq in-braces nil)
- (setq brace-val "")))
- (?\]
- (setq current-regexp
- (concat current-regexp
- "[" bracket-val "]"))
- (setq in-brackets nil)
- (setq bracket-val ""))
- (??
- (setq current-regexp
- (concat current-regexp
- lsp-non-path-regexp)))
- (?*
- (setq current-regexp
- (concat current-regexp
- lsp-non-path-regexp "*?")))
- (t
- (setq current-regexp
- (concat current-regexp
- (regexp-quote (char-to-string char)))))))))
- (when (and (< index (1- (length glob-segments)))
- (or (not (string-equal (nth (1+ index) glob-segments)
- lsp-globstar))
- (< (+ index 2)
- (length glob-segments))))
- (setq current-regexp
- (concat current-regexp
- lsp-path-regexp)))
- (setq prev-segment-was-globstar nil))))
- glob-segments)
- current-regexp)))))
-
-;; See https://github.com/emacs-lsp/lsp-mode/issues/2365
-(defun lsp-glob-unbrace-at-top-level (glob-pattern)
- "If GLOB-PATTERN does not start with a brace, return a singleton list containing GLOB-PATTERN.
-
-If GLOB-PATTERN does start with a brace, return a list of the
-comma-separated globs within the top-level braces."
- (if (not (string-prefix-p "{" glob-pattern))
- (list glob-pattern)
- (lsp-split-glob-pattern (substring glob-pattern 1 -1) ?\,)))
-
-(defun lsp-glob-convert-to-wrapped-regexp (glob-pattern)
- "Convert GLOB-PATTERN to a regexp wrapped with the beginning-
-and end-of-string meta-characters."
- (concat "\\`" (lsp--glob-to-regexp (string-trim glob-pattern)) "\\'"))
-
-(defun lsp-glob-to-regexps (glob-pattern)
- "Convert a GLOB-PATTERN to a list of Elisp regexps."
- (let* ((trimmed-pattern (string-trim glob-pattern))
- (top-level-unbraced-patterns (lsp-glob-unbrace-at-top-level trimmed-pattern)))
- (seq-map #'lsp-glob-convert-to-wrapped-regexp
- top-level-unbraced-patterns)))
-
-
-
-(defvar lsp-mode-menu)
-
-(defun lsp-mouse-click (event)
- (interactive "e")
- (let* ((ec (event-start event))
- (choice (x-popup-menu event lsp-mode-menu))
- (action (lookup-key lsp-mode-menu (apply 'vector choice))))
-
- (select-window (posn-window ec))
-
- (unless (and (region-active-p) (eq action 'lsp-execute-code-action))
- (goto-char (posn-point ec)))
- (run-with-idle-timer
- 0.001 nil
- (lambda ()
- (cl-labels ((check (value) (not (null value))))
- (when choice
- (call-interactively action)))))))
-
-(defvar lsp-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "C-<down-mouse-1>") #'lsp-find-definition-mouse)
- (define-key map (kbd "C-<mouse-1>") #'ignore)
- (define-key map (kbd "<mouse-3>") #'lsp-mouse-click)
- (define-key map (kbd "C-S-SPC") #'lsp-signature-activate)
- (when lsp-keymap-prefix
- (define-key map (kbd lsp-keymap-prefix) lsp-command-map))
- map)
- "Keymap for `lsp-mode'.")
-
-(define-minor-mode lsp-mode ""
- :keymap lsp-mode-map
- :lighter
- (" LSP["
- (lsp--buffer-workspaces
- (:eval (mapconcat #'lsp--workspace-print lsp--buffer-workspaces "]["))
- (:propertize "Disconnected" face warning))
- "]")
- :group 'lsp-mode)
-
-(defvar lsp-mode-menu
- (easy-menu-create-menu
- nil
- `(["Go to definition" lsp-find-definition
- :active (lsp-feature? "textDocument/definition")]
- ["Find references" lsp-find-references
- :active (lsp-feature? "textDocument/references")]
- ["Find implementations" lsp-find-implementation
- :active (lsp-feature? "textDocument/implementation")]
- ["Find declarations" lsp-find-declaration
- :active (lsp-feature? "textDocument/declaration")]
- ["Go to type declaration" lsp-find-type-definition
- :active (lsp-feature? "textDocument/typeDefinition")]
- "--"
- ["Describe" lsp-describe-thing-at-point]
- ["Code action" lsp-execute-code-action]
- ["Format" lsp-format-buffer]
- ["Highlight references" lsp-document-highlight]
- ["Type Hierarchy" lsp-java-type-hierarchy
- :visible (lsp-can-execute-command? "java.navigate.resolveTypeHierarchy")]
- ["Type Hierarchy" lsp-treemacs-type-hierarchy
- :visible (and (not (lsp-can-execute-command? "java.navigate.resolveTypeHierarchy"))
- (functionp 'lsp-treemacs-type-hierarchy)
- (lsp-feature? "textDocument/typeHierarchy"))]
- ["Call Hierarchy" lsp-treemacs-call-hierarchy
- :visible (and (functionp 'lsp-treemacs-call-hierarchy)
- (lsp-feature? "textDocument/callHierarchy"))]
- ["Rename" lsp-rename
- :active (lsp-feature? "textDocument/rename")]
- "--"
- ("Session"
- ["View logs" lsp-workspace-show-log]
- ["Describe" lsp-describe-session]
- ["Shutdown" lsp-shutdown-workspace]
- ["Restart" lsp-restart-workspace])
- ("Workspace Folders"
- ["Add" lsp-workspace-folders-add]
- ["Remove" lsp-workspace-folders-remove]
- ["Open" lsp-workspace-folders-open])
- ("Toggle features"
- ["Lenses" lsp-lens-mode]
- ["Headerline breadcrumb" lsp-headerline-breadcrumb-mode]
- ["Modeline code actions" lsp-modeline-code-actions-mode]
- ["Modeline diagnostics" lsp-modeline-diagnostics-mode])
- "---"
- ("Debug"
- :active (bound-and-true-p dap-ui-mode)
- :filter ,(lambda (_)
- (and (boundp 'dap-ui-menu-items)
- (nthcdr 3 dap-ui-menu-items))))))
- "Menu for lsp-mode.")
-
-(defalias 'make-lsp-client 'make-lsp--client)
-
-(cl-defstruct lsp--registered-capability
- (id "")
- (method " ")
- (options nil))
-
-;; A ‘lsp--workspace’ object represents exactly one language server process.
-(cl-defstruct lsp--workspace
- ;; the `ewoc' object for displaying I/O to and from the server
- (ewoc nil)
-
- ;; ‘server-capabilities’ is a hash table of the language server capabilities.
- ;; It is the hash table representation of a LSP ServerCapabilities structure;
- ;; cf. https://microsoft.github.io/language-server-protocol/specification#initialize.
- (server-capabilities nil)
-
- ;; ‘registered-server-capabilities’ is a list of hash tables that represent
- ;; dynamically-registered Registration objects. See
- ;; https://microsoft.github.io/language-server-protocol/specification#client_registerCapability.
- (registered-server-capabilities nil)
-
- ;; ‘root’ is a directory name or a directory file name for the workspace
- ;; root. ‘lsp-mode’ passes this directory to the ‘initialize’ method of the
- ;; language server; see
- ;; https://microsoft.github.io/language-server-protocol/specification#initialize.
- (root nil)
-
- ;; ‘client’ is the ‘lsp--client’ object associated with this workspace.
- (client nil)
-
- ;; ‘host-root’ contains the host root info as derived from `file-remote-p'. It
- ;; used to derive the file path in `lsp--uri-to-path' when using tramp
- ;; connection.
- (host-root nil)
-
- ;; ‘proc’ is a process object; it may represent a regular process, a pipe, or
- ;; a network connection. ‘lsp-mode’ communicates with ‘proc’ using the
- ;; language server protocol. ‘proc’ corresponds to the COMMUNICATION-PROCESS
- ;; element of the return value of the client’s ‘get-root’ field, which see.
- (proc nil)
-
- ;; ‘proc’ is a process object; it must represent a regular process, not a
- ;; pipe or network process. It represents the actual server process that
- ;; corresponds to this workspace. ‘cmd-proc’ corresponds to the
- ;; COMMAND-PROCESS element of the return value of the client’s ‘get-root’
- ;; field, which see.
- (cmd-proc nil)
-
- ;; ‘buffers’ is a list of buffers associated with this workspace.
- (buffers nil)
-
- ;; if semantic tokens is enabled, `semantic-tokens-faces' contains
- ;; one face (or nil) for each token type supported by the language server.
- (semantic-tokens-faces nil)
-
- ;; If semantic highlighting is enabled, `semantic-tokens-modifier-faces'
- ;; contains one face (or nil) for each modifier type supported by the language
- ;; server
- (semantic-tokens-modifier-faces nil)
-
- ;; Extra client capabilities provided by third-party packages using
- ;; `lsp-register-client-capabilities'. It's value is an alist of (PACKAGE-NAME
- ;; . CAPS), where PACKAGE-NAME is a symbol of the third-party package name,
- ;; and CAPS is either a plist of the client capabilities, or a function that
- ;; takes no argument and returns a plist of the client capabilities or nil.")
- (extra-client-capabilities nil)
-
- ;; Workspace status
- (status nil)
-
- ;; ‘metadata’ is a generic storage for workspace specific data. It is
- ;; accessed via `lsp-workspace-set-metadata' and `lsp-workspace-set-metadata'
- (metadata (make-hash-table :test 'equal))
-
- ;; contains all the file notification watches that have been created for the
- ;; current workspace in format filePath->file notification handle.
- (watches (make-hash-table :test 'equal))
-
- ;; list of workspace folders
- (workspace-folders nil)
-
- ;; ‘last-id’ the last request id for the current workspace.
- (last-id 0)
-
- ;; ‘status-string’ allows extensions to specify custom status string based on
- ;; the Language Server specific messages.
- (status-string nil)
-
- ;; ‘shutdown-action’ flag used to mark that workspace should not be restarted (e.g. it
- ;; was stopped).
- shutdown-action
-
- ;; ‘diagnostics’ a hashmap with workspace diagnostics.
- (diagnostics (make-hash-table :test 'equal))
-
- ;; contains all the workDone progress tokens that have been created
- ;; for the current workspace.
- (work-done-tokens (make-hash-table :test 'equal)))
-
-
-(cl-defstruct lsp-session
- ;; contains the folders that are part of the current session
- folders
- ;; contains the folders that must not be imported in the current workspace.
- folders-blacklist
- ;; contains the list of folders that must be imported in a project in case of
- ;; multi root LSP server.
- (server-id->folders (make-hash-table :test 'equal))
- ;; folder to list of the servers that are associated with the folder.
- (folder->servers (make-hash-table :test 'equal))
- ;; ‘metadata’ is a generic storage for workspace specific data. It is
- ;; accessed via `lsp-workspace-set-metadata' and `lsp-workspace-set-metadata'
- (metadata (make-hash-table :test 'equal)))
-
-(defun lsp-workspace-status (status-string &optional workspace)
- "Set current workspace status to STATUS-STRING.
-If WORKSPACE is not specified defaults to lsp--cur-workspace."
- (let ((status-string (when status-string (replace-regexp-in-string "%" "%%" status-string))))
- (setf (lsp--workspace-status-string (or workspace lsp--cur-workspace)) status-string)))
-
-(defun lsp-session-set-metadata (key value &optional _workspace)
- "Associate KEY with VALUE in the WORKSPACE metadata.
-If WORKSPACE is not provided current workspace will be used."
- (puthash key value (lsp-session-metadata (lsp-session))))
-
-(defalias 'lsp-workspace-set-metadata 'lsp-session-set-metadata)
-
-(defun lsp-session-get-metadata (key &optional _workspace)
- "Lookup KEY in WORKSPACE metadata.
-If WORKSPACE is not provided current workspace will be used."
- (gethash key (lsp-session-metadata (lsp-session))))
-
-(defalias 'lsp-workspace-get-metadata 'lsp-session-get-metadata)
-
-(defun lsp-workspace-set-work-done-token (token value workspace)
- "Associate TOKEN with VALUE in the WORKSPACE work-done-tokens."
- (puthash token value (lsp--workspace-work-done-tokens workspace)))
-
-(defun lsp-workspace-get-work-done-token (token workspace)
- "Lookup TOKEN in the WORKSPACE work-done-tokens."
- (gethash token (lsp--workspace-work-done-tokens workspace)))
-
-(defun lsp-workspace-rem-work-done-token (token workspace)
- "Remove TOKEN from the WORKSPACE work-done-tokens."
- (remhash token (lsp--workspace-work-done-tokens workspace)))
-
-
-(defun lsp--make-notification (method &optional params)
- "Create notification body for method METHOD and parameters PARAMS."
- (list :jsonrpc "2.0" :method method :params params))
-
-(defalias 'lsp--make-request 'lsp--make-notification)
-(defalias 'lsp-make-request 'lsp--make-notification)
-
-(defun lsp--make-response (id result)
- "Create response for REQUEST with RESULT."
- `(:jsonrpc "2.0" :id ,id :result ,result))
-
-(defun lsp-make-notification (method &optional params)
- "Create notification body for method METHOD and parameters PARAMS."
- (lsp--make-notification method params))
-
-(defmacro lsp--json-serialize (params)
- (if (progn
- (require 'json)
- (fboundp 'json-serialize))
- `(json-serialize ,params
- :null-object nil
- :false-object :json-false)
- `(let ((json-false :json-false))
- (json-encode ,params))))
-
-(defun lsp--make-message (params)
- "Create a LSP message from PARAMS, after encoding it to a JSON string."
- (let ((body (lsp--json-serialize params)))
- (concat "Content-Length: "
- (number-to-string (1+ (string-bytes body)))
- "\r\n\r\n"
- body
- "\n")))
-
-(cl-defstruct lsp--log-entry timestamp process-time type method id body)
-
-(defun lsp--make-log-entry (method id body type &optional process-time)
- "Create an outgoing log object from BODY with method METHOD and id ID.
-If ID is non-nil, then the body is assumed to be a notification.
-TYPE can either be 'incoming or 'outgoing"
- (cl-assert (memq type '(incoming-req outgoing-req incoming-notif
- outgoing-notif incoming-resp
- outgoing-resp)))
- (make-lsp--log-entry
- :timestamp (format-time-string "%I:%M:%S %p")
- :process-time process-time
- :method method
- :id id
- :type type
- :body body))
-
-(defun lsp--log-entry-pp (entry)
- (cl-assert (lsp--log-entry-p entry))
- (pcase-let (((cl-struct lsp--log-entry timestamp method id type process-time
- body)
- entry)
- (json-false :json-false)
- (json-encoding-pretty-print t)
- (str nil))
- (setq str
- (concat (format "[Trace - %s] " timestamp)
- (pcase type
- ('incoming-req (format "Received request '%s - (%s)." method id))
- ('outgoing-req (format "Sending request '%s - (%s)'." method id))
-
- ('incoming-notif (format "Received notification '%s'." method))
- ('outgoing-notif (format "Sending notification '%s'." method))
-
- ('incoming-resp (format "Received response '%s - (%s)' in %dms."
- method id process-time))
- ('outgoing-resp
- (format
- "Sending response '%s - (%s)'. Processing request took %dms"
- method id process-time)))
- "\n"
- (if (memq type '(incoming-resp ougoing-resp))
- "Result: "
- "Params: ")
- (json-encode body)
- "\n\n\n"))
- (setq str (propertize str 'mouse-face 'highlight 'read-only t))
- (insert str)))
-
-(defvar-local lsp--log-io-ewoc nil)
-
-(defun lsp--get-create-io-ewoc (workspace)
- (if (and (lsp--workspace-ewoc workspace)
- (buffer-live-p (ewoc-buffer (lsp--workspace-ewoc workspace))))
- (lsp--workspace-ewoc workspace)
- (with-current-buffer (lsp--get-log-buffer-create workspace)
- (unless (eq 'lsp-log-io-mode major-mode) (lsp-log-io-mode))
- (setq-local window-point-insertion-type t)
- (setq lsp--log-io-ewoc (ewoc-create #'lsp--log-entry-pp nil nil t))
- (setf (lsp--workspace-ewoc workspace) lsp--log-io-ewoc))
- (lsp--workspace-ewoc workspace)))
-
-(defun lsp--ewoc-count (ewoc)
- (let* ((count 0)
- (count-fn (lambda (_) (setq count (1+ count)))))
- (ewoc-map count-fn ewoc)
- count))
-
-(defun lsp--log-entry-new (entry workspace)
- (let* ((ewoc (lsp--get-create-io-ewoc workspace))
- (count (and (not (eq lsp-io-messages-max t)) (lsp--ewoc-count ewoc)))
- (node (if (or (eq lsp-io-messages-max t)
- (>= lsp-io-messages-max count))
- nil
- (ewoc-nth ewoc (1- lsp-io-messages-max))))
- (prev nil)
- (inhibit-read-only t))
- (while node
- (setq prev (ewoc-prev ewoc node))
- (ewoc-delete ewoc node)
- (setq node prev))
- (ewoc-enter-last ewoc entry)))
-
-(defun lsp--send-notification (body)
- "Send BODY as a notification to the language server."
- (lsp-foreach-workspace
- (when lsp-print-io
- (lsp--log-entry-new (lsp--make-log-entry
- (plist-get body :method)
- nil (plist-get body :params) 'outgoing-notif)
- lsp--cur-workspace))
- (lsp--send-no-wait (lsp--make-message body)
- (lsp--workspace-proc lsp--cur-workspace))))
-
-(defalias 'lsp-send-notification 'lsp--send-notification)
-
-(defun lsp-notify (method params)
- "Send notification METHOD with PARAMS."
- (lsp--send-notification (lsp--make-notification method params)))
-
-(defun lsp--cur-workspace-check ()
- "Check whether buffer lsp workspace(s) are set."
- (cl-assert (lsp-workspaces) nil
- "No language server(s) is associated with this buffer."))
-
-(defun lsp--send-request (body &optional no-wait no-merge)
- "Send BODY as a request to the language server, get the response.
-If NO-WAIT is non-nil, don't synchronously wait for a response.
-If NO-MERGE is non-nil, don't merge the results but return an
-alist mapping workspace->result."
- (lsp-request (plist-get body :method)
- (plist-get body :params)
- :no-wait no-wait
- :no-merge no-merge))
-
-(defalias 'lsp-send-request 'lsp--send-request
- "Send BODY as a request to the language server and return the response
-synchronously.
-\n(fn BODY)")
-
-(cl-defun lsp-request (method params &key no-wait no-merge)
- "Send request METHOD with PARAMS.
-If NO-MERGE is non-nil, don't merge the results but return alist workspace->result.
-If NO-WAIT is non-nil send the request as notification."
- (if no-wait
- (lsp-notify method params)
- (let* ((send-time (time-to-seconds (current-time)))
- ;; max time by which we must get a response
- (expected-time (+ send-time lsp-response-timeout))
- resp-result resp-error done?)
- (unwind-protect
- (progn
- (lsp-request-async method params
- (lambda (res) (setf resp-result (or res :finished)) (throw 'lsp-done '_))
- :error-handler (lambda (err) (setf resp-error err) (throw 'lsp-done '_))
- :no-merge no-merge
- :mode 'detached
- :cancel-token :sync-request)
- (while (not (or resp-error resp-result))
- (catch 'lsp-done
- (accept-process-output nil (- expected-time send-time)))
- (setq send-time (time-to-seconds (current-time)))
- (when (< expected-time send-time)
- (error "Timeout while waiting for response. Method: %s" method)))
- (setq done? t)
- (cond
- ((eq resp-result :finished) nil)
- (resp-result resp-result)
- ((lsp-json-error? resp-error) (error (lsp:json-error-message resp-error)))
- ((lsp-json-error? (cl-first resp-error))
- (error (lsp:json-error-message (cl-first resp-error))))))
- (unless done?
- (lsp-cancel-request-by-token :sync-request))))))
-
-(cl-defun lsp-request-while-no-input (method params)
- "Send request METHOD with PARAMS and waits until there is no input.
-Return same value as `lsp--while-no-input' and respecting `non-essential'."
- (if non-essential
- (let* ((send-time (time-to-seconds (current-time)))
- ;; max time by which we must get a response
- (expected-time (+ send-time lsp-response-timeout))
- resp-result resp-error done?)
- (unwind-protect
- (progn
- (lsp-request-async method params
- (lambda (res) (setf resp-result (or res :finished)) (throw 'lsp-done '_))
- :error-handler (lambda (err) (setf resp-error err) (throw 'lsp-done '_))
- :mode 'detached
- :cancel-token :sync-request)
- (while (not (or resp-error resp-result (input-pending-p)))
- (catch 'lsp-done
- (sit-for (- expected-time send-time)))
- (setq send-time (time-to-seconds (current-time)))
- (when (< expected-time send-time)
- (error "Timeout while waiting for response. Method: %s" method)))
- (setq done? (or resp-error resp-result))
- (cond
- ((eq resp-result :finished) nil)
- (resp-result resp-result)
- ((lsp-json-error? resp-error) (error (lsp:json-error-message resp-error)))
- ((lsp-json-error? (cl-first resp-error))
- (error (lsp:json-error-message (cl-first resp-error))))))
- (unless done?
- (lsp-cancel-request-by-token :sync-request))
- (when (and (input-pending-p) lsp--throw-on-input)
- (throw 'input :interrupted))))
- (lsp-request method params)))
-
-(defvar lsp--cancelable-requests (ht))
-
-(cl-defun lsp-request-async (method params callback
- &key mode error-handler cancel-handler no-merge cancel-token)
- "Send METHOD with PARAMS as a request to the language server.
-Call CALLBACK with the response received from the server
-asynchronously.
-MODE determines when the callback will be called depending on the
-condition of the original buffer. It could be:
-- `detached' which means that the callback will be executed no
-matter what has happened to the buffer.
-- `alive' - the callback will be executed only if the buffer from
-which the call was executed is still alive.
-- `current' the callback will be executed only if the original buffer
-is still selected.
-- `tick' - the callback will be executed only if the buffer was not modified.
-- `unchanged' - the callback will be executed only if the buffer hasn't
-changed and if the buffer is not modified.
-
-ERROR-HANDLER will be called in case the request has failed.
-CANCEL-HANDLER will be called in case the request is being canceled.
-If NO-MERGE is non-nil, don't merge the results but return alist
-workspace->result.
-CANCEL-TOKEN is the token that can be used to cancel request."
- (lsp--send-request-async `(:jsonrpc "2.0" :method ,method :params ,params)
- callback mode error-handler cancel-handler no-merge cancel-token))
-
-(defun lsp--create-request-cancel (id workspaces hook buf method cancel-callback)
- (lambda (&rest _)
- (unless (and (equal 'post-command-hook hook)
- (equal (current-buffer) buf))
- (lsp--request-cleanup-hooks id)
- (with-lsp-workspaces workspaces
- (lsp--cancel-request id)
- (when cancel-callback (funcall cancel-callback)))
- (lsp-log "Cancelling %s(%s) in hook %s" method id hook))))
-
-(defun lsp--create-async-callback
- (callback method no-merge workspaces)
- "Create async handler expecting COUNT results, merge them and call CALLBACK.
-MODE determines when the callback will be called depending on the
-condition of the original buffer. METHOD is the invoked method.
-If NO-MERGE is non-nil, don't merge the results but return alist workspace->result.
-ID is the request id. "
- (let (results errors)
- (lambda (result)
- (push (cons lsp--cur-workspace result)
- (if (eq result :error) errors results))
- (when (and (not (eq (length errors) (length workspaces)))
- (eq (+ (length errors) (length results)) (length workspaces)))
- (funcall callback
- (if no-merge
- results
- (lsp--merge-results (-map #'cl-rest results) method)))))))
-
-(defun lsp--create-default-error-handler (method)
- "Default error handler.
-METHOD is the executed method."
- (lambda (error)
- (lsp--warn "%s" (or (lsp--error-string error)
- (format "%s Request has failed" method)))))
-
-(defvar lsp--request-cleanup-hooks (ht))
-
-(defun lsp--request-cleanup-hooks (request-id)
- (when-let ((cleanup-function (gethash request-id lsp--request-cleanup-hooks)))
- (funcall cleanup-function)
- (remhash request-id lsp--request-cleanup-hooks)))
-
-(defun lsp-cancel-request-by-token (cancel-token)
- "Cancel request using CANCEL-TOKEN."
- (-when-let ((request-id . workspaces) (gethash cancel-token lsp--cancelable-requests))
- (with-lsp-workspaces workspaces
- (lsp--cancel-request request-id))
- (remhash cancel-token lsp--cancelable-requests)
- (lsp--request-cleanup-hooks request-id)))
-
-(defun lsp--send-request-async (body callback
- &optional mode error-callback cancel-callback
- no-merge cancel-token)
- "Send BODY as a request to the language server.
-Call CALLBACK with the response received from the server
-asynchronously.
-MODE determines when the callback will be called depending on the
-condition of the original buffer. It could be:
-- `detached' which means that the callback will be executed no
-matter what has happened to the buffer.
-- `alive' - the callback will be executed only if the buffer from
-which the call was executed is still alive.
-- `current' the callback will be executed only if the original buffer
-is still selected.
-- `tick' - the callback will be executed only if the buffer was not modified.
-- `unchanged' - the callback will be executed only if the buffer hasn't
-changed and if the buffer is not modified.
-
-ERROR-CALLBACK will be called in case the request has failed.
-CANCEL-CALLBACK will be called in case the request is being canceled.
-If NO-MERGE is non-nil, don't merge the results but return alist
-workspace->result.
-CANCEL-TOKEN is the token that can be used to cancel request."
- (when cancel-token
- (lsp-cancel-request-by-token cancel-token))
-
- (if-let ((target-workspaces (lsp--find-workspaces-for body)))
- (let* ((start-time (current-time))
- (method (plist-get body :method))
- (id (cl-incf lsp-last-id))
- ;; calculate what are the (hook . local) pairs which will cancel
- ;; the request
- (hooks (pcase mode
- ('alive '((kill-buffer-hook . t)))
- ('tick '((kill-buffer-hook . t) (after-change-functions . t)))
- ('unchanged '((after-change-functions . t) (post-command-hook . nil)))
- ('current '((post-command-hook . nil)))))
- (buf (current-buffer))
- ;; note: lambdas in emacs can be compared but we should make sure
- ;; that all of the captured arguments are the same - in our case
- ;; `lsp--create-request-cancel' will return the same lambda when
- ;; called with the same params.
- (cleanup-hooks
- (lambda () (mapc
- (-lambda ((hook . local))
- (if local
- (when (buffer-live-p buf)
- (with-current-buffer buf
- (remove-hook hook
- (lsp--create-request-cancel
- id target-workspaces hook buf method cancel-callback)
- t)))
- (remove-hook hook (lsp--create-request-cancel
- id target-workspaces hook buf method cancel-callback))))
- hooks)
- (remhash cancel-token lsp--cancelable-requests)))
- (callback (pcase mode
- ((or 'alive 'tick) (lambda (&rest args)
- (with-current-buffer buf
- (apply callback args))))
- (_ callback)))
- (callback (lsp--create-async-callback callback
- method
- no-merge
- target-workspaces))
- (callback (lambda (result)
- (lsp--request-cleanup-hooks id)
- (funcall callback result)))
- (error-callback (lsp--create-async-callback
- (or error-callback
- (lsp--create-default-error-handler method))
- method
- nil
- target-workspaces))
- (error-callback (lambda (error)
- (funcall callback :error)
- (lsp--request-cleanup-hooks id)
- (funcall error-callback error)))
- (cancel-callback (when cancel-callback
- (pcase mode
- ((or 'alive 'tick 'unchanged)
- (lambda ()
- (with-current-buffer buf
- (funcall cancel-callback))))
- (_ cancel-callback))))
- (body (plist-put body :id id)))
-
- ;; cancel request in any of the hooks
- (mapc (-lambda ((hook . local))
- (add-hook hook
- (lsp--create-request-cancel
- id target-workspaces hook buf method cancel-callback)
- nil local))
- hooks)
- (puthash id cleanup-hooks lsp--request-cleanup-hooks)
-
- (setq lsp--last-active-workspaces target-workspaces)
-
- (when cancel-token
- (puthash cancel-token (cons id target-workspaces) lsp--cancelable-requests))
-
- (seq-doseq (workspace target-workspaces)
- (when lsp-log-io
- (lsp--log-entry-new (lsp--make-log-entry method id
- (plist-get body :params)
- 'outgoing-req)
- workspace))
- (let ((message (lsp--make-message body)))
- (puthash id
- (list callback error-callback method start-time (current-time))
- (-> workspace
- (lsp--workspace-client)
- (lsp--client-response-handlers)))
- (lsp--send-no-wait message (lsp--workspace-proc workspace))))
- body)
- (error "The connected server(s) does not support method %s.
-To find out what capabilities support your server use `M-x lsp-describe-session'
-and expand the capabilities section"
- (plist-get body :method))))
-
-;; deprecated, use lsp-request-async.
-(defalias 'lsp-send-request-async 'lsp--send-request-async)
-(make-obsolete 'lsp-send-request-async 'lsp-request-async "lsp-mode 7.0.1")
-
-;; Clean up the entire state of lsp mode when Emacs is killed, to get rid of any
-;; pending language servers.
-(add-hook 'kill-emacs-hook #'lsp--global-teardown)
-
-(defun lsp--global-teardown ()
- "Unload working workspaces."
- (lsp-foreach-workspace (lsp--shutdown-workspace)))
-
-(defun lsp--shutdown-workspace (&optional restart)
- "Shut down the language server process for ‘lsp--cur-workspace’."
- (with-demoted-errors "LSP error: %S"
- (let ((lsp-response-timeout 0.5))
- (condition-case _err
- (lsp-request "shutdown" lsp--empty-ht)
- (error (lsp--error "Timeout while sending shutdown request"))))
- (lsp-notify "exit" nil))
- (setf (lsp--workspace-shutdown-action lsp--cur-workspace) (or (and restart 'restart) 'shutdown))
- (lsp--uninitialize-workspace))
-
-(defun lsp--uninitialize-workspace ()
- "Cleanup buffer state.
-When a workspace is shut down, by request or from just
-disappearing, unset all the variables related to it."
- (let ((proc (lsp--workspace-cmd-proc lsp--cur-workspace))
- (buffers (lsp--workspace-buffers lsp--cur-workspace)))
- (when (process-live-p proc)
- (kill-process proc))
- (mapc (lambda (buf)
- (when (lsp-buffer-live-p buf)
- (lsp-with-current-buffer buf
- (lsp-managed-mode -1))))
- buffers)
- (lsp-diagnostics--workspace-cleanup lsp--cur-workspace)))
-
-(defun lsp--client-capabilities (&optional custom-capabilities)
- "Return the client capabilities appending CUSTOM-CAPABILITIES."
- (append
- `((workspace . ((workspaceEdit . ((documentChanges . t)
- (resourceOperations . ["create" "rename" "delete"])))
- (applyEdit . t)
- (symbol . ((symbolKind . ((valueSet . ,(apply 'vector (number-sequence 1 26)))))))
- (executeCommand . ((dynamicRegistration . :json-false)))
- ,@(when lsp-enable-file-watchers '((didChangeWatchedFiles . ((dynamicRegistration . t)))))
- (workspaceFolders . t)
- (configuration . t)
- ,@(when lsp-semantic-tokens-enable '((semanticTokens . ((refreshSupport . t)))))
- ,@(when lsp-lens-enable '((codeLens . ((refreshSupport . :json-false)))))
- (fileOperations . ((didCreate . :json-false)
- (willCreate . :json-false)
- (didRename . :json-false)
- (willRename . :json-false)
- (didDelete . :json-false)
- (willDelete . :json-false)))))
- (textDocument . ((declaration . ((linkSupport . t)))
- (definition . ((linkSupport . t)))
- (implementation . ((linkSupport . t)))
- (typeDefinition . ((linkSupport . t)))
- (synchronization . ((willSave . t) (didSave . t) (willSaveWaitUntil . t)))
- (documentSymbol . ((symbolKind . ((valueSet . ,(apply 'vector (number-sequence 1 26)))))
- (hierarchicalDocumentSymbolSupport . t)))
- (formatting . ((dynamicRegistration . t)))
- (rangeFormatting . ((dynamicRegistration . t)))
- ,@(when (and lsp-semantic-tokens-enable
- (boundp 'lsp-semantic-tokens-capabilities))
- lsp-semantic-tokens-capabilities)
- (rename . ((dynamicRegistration . t) (prepareSupport . t)))
- (codeAction . ((dynamicRegistration . t)
- (isPreferredSupport . t)
- (codeActionLiteralSupport . ((codeActionKind . ((valueSet . [""
- "quickfix"
- "refactor"
- "refactor.extract"
- "refactor.inline"
- "refactor.rewrite"
- "source"
- "source.organizeImports"])))))
- (resolveSupport . ((properties . ["edit" "command"])))
- (dataSupport . t)))
- (completion . ((completionItem . ((snippetSupport . ,(cond
- ((and lsp-enable-snippet (not (featurep 'yasnippet)) t)
- (lsp--warn (concat
- "Yasnippet is not installed, but `lsp-enable-snippet' is set to `t'. "
- "You must either install yasnippet, or disable snippet support."))
- :json-false)
- (lsp-enable-snippet t)
- (t :json-false)))
- (documentationFormat . ["markdown" "plaintext"])
- ;; Remove this after jdtls support resolveSupport
- (resolveAdditionalTextEditsSupport . t)
- (insertReplaceSupport . t)
- (resolveSupport
- . ((properties . ["documentation"
- "details"
- "additionalTextEdits"
- "command"])))
- (insertTextModeSupport . ((valueSet . [1 2])))))
- (contextSupport . t)))
- (signatureHelp . ((signatureInformation . ((parameterInformation . ((labelOffsetSupport . t)))))))
- (documentLink . ((dynamicRegistration . t)
- (tooltipSupport . t)))
- (hover . ((contentFormat . ["markdown" "plaintext"])))
- (foldingRange . ,(when lsp-enable-folding
- `((dynamicRegistration . t)
- ,@(when lsp-folding-range-limit
- `((rangeLimit . ,lsp-folding-range-limit)))
- ,@(when lsp-folding-line-folding-only
- `((lineFoldingOnly . t))))))
- (callHierarchy . ((dynamicRegistration . :json-false)))
- (publishDiagnostics . ((relatedInformation . t)
- (tagSupport . ((valueSet . [1 2])))
- (versionSupport . t)))
- (moniker . nil)
- (linkedEditingRange . nil)))
- (window . ((workDoneProgress . t)
- (showMessage . nil)
- (showDocument . nil))))
- custom-capabilities))
-
-(defun lsp-find-roots-for-workspace (workspace session)
- "Get all roots for the WORKSPACE."
- (-filter #'identity (ht-map (lambda (folder workspaces)
- (when (-contains? workspaces workspace)
- folder))
- (lsp-session-folder->servers session))))
-
-(defun lsp-session-watches (&optional session)
- "Get watches created for SESSION."
- (or (gethash "__watches" (lsp-session-metadata (or session (lsp-session))))
- (-let [res (make-hash-table :test 'equal)]
- (puthash "__watches" res (lsp-session-metadata (or session (lsp-session))))
- res)))
-
-(defun lsp--file-process-event (session root-folder event)
- "Process file event."
- (let* ((changed-file (cl-third event))
- (rel-changed-file (f-relative changed-file root-folder))
- (event-numeric-kind (alist-get (cl-second event) lsp--file-change-type))
- (bit-position (1- event-numeric-kind))
- (watch-bit (ash 1 bit-position)))
- (->>
- session
- lsp-session-folder->servers
- (gethash root-folder)
- (seq-do (lambda (workspace)
- (when (->>
- workspace
- lsp--workspace-registered-server-capabilities
- (-any?
- (lambda (capability)
- (and
- (equal (lsp--registered-capability-method capability)
- "workspace/didChangeWatchedFiles")
- (->>
- capability
- lsp--registered-capability-options
- (lsp:did-change-watched-files-registration-options-watchers)
- (seq-find
- (-lambda ((&FileSystemWatcher :glob-pattern :kind?))
- (when (or (null kind?)
- (> (logand kind? watch-bit) 0))
- (-let [regexes (lsp-glob-to-regexps glob-pattern)]
- (-any? (lambda (re)
- (or (string-match re changed-file)
- (string-match re rel-changed-file)))
- regexes))))))))))
- (with-lsp-workspace workspace
- (lsp-notify
- "workspace/didChangeWatchedFiles"
- `((changes . [((type . ,event-numeric-kind)
- (uri . ,(lsp--path-to-uri changed-file)))]))))))))))
-
-(lsp-defun lsp--server-register-capability ((&Registration :method :id :register-options?))
- "Register capability REG."
- (when (and lsp-enable-file-watchers
- (equal method "workspace/didChangeWatchedFiles"))
- (-let* ((created-watches (lsp-session-watches (lsp-session)))
- (root-folders (cl-set-difference
- (lsp-find-roots-for-workspace lsp--cur-workspace (lsp-session))
- (ht-keys created-watches))))
- ;; create watch for each root folder without such
- (dolist (folder root-folders)
- (let* ((watch (make-lsp-watch :root-directory folder))
- (ignored-things (lsp--get-ignored-regexes-for-workspace-root folder))
- (ignored-files-regex-list (car ignored-things))
- (ignored-directories-regex-list (cadr ignored-things)))
- (puthash folder watch created-watches)
- (lsp-watch-root-folder (file-truename folder)
- (-partial #'lsp--file-process-event (lsp-session) folder)
- ignored-files-regex-list
- ignored-directories-regex-list
- watch
- t)))))
-
- (push
- (make-lsp--registered-capability :id id :method method :options register-options?)
- (lsp--workspace-registered-server-capabilities lsp--cur-workspace)))
-
-(defmacro lsp--with-workspace-temp-buffer (workspace-root &rest body)
- "With a temp-buffer under `WORKSPACE-ROOT' and evaluate `BODY', useful to access dir-local variables."
- (declare (indent 1) (debug t))
- `(with-temp-buffer
- ;; Set the buffer's name to something under the root so that we can hack the local variables
- ;; This file doesn't need to exist and will not be created due to this.
- (setq-local buffer-file-name (expand-file-name "lsp-mode-temp" (expand-file-name ,workspace-root)))
- (hack-local-variables)
- (prog1 ,@body
- (setq-local buffer-file-name nil))))
-
-(defun lsp--get-ignored-regexes-for-workspace-root (workspace-root)
- "Return a list of the form (lsp-file-watch-ignored-files lsp-file-watch-ignored-directories) for the given WORKSPACE-ROOT."
- ;; The intent of this function is to provide per-root workspace-level customization of the
- ;; lsp-file-watch-ignored-directories and lsp-file-watch-ignored-files variables.
- (lsp--with-workspace-temp-buffer workspace-root
- (list lsp-file-watch-ignored-files (lsp-file-watch-ignored-directories))))
-
-
-(defun lsp--cleanup-hanging-watches ()
- "Cleanup watches in case there are no more workspaces that are interested
-in that particular folder."
- (let* ((session (lsp-session))
- (watches (lsp-session-watches session)))
- (dolist (watched-folder (ht-keys watches))
- (when (-none? (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--registered-capability "workspace/didChangeWatchedFiles")))
- (gethash watched-folder (lsp-session-folder->servers (lsp-session))))
- (lsp-log "Cleaning up watches for folder %s. There is no workspace watching this folder..." watched-folder)
- (lsp-kill-watch (gethash watched-folder watches))
- (remhash watched-folder watches)))))
-
-(lsp-defun lsp--server-unregister-capability ((&Unregistration :id :method))
- "Unregister capability UNREG."
- (setf (lsp--workspace-registered-server-capabilities lsp--cur-workspace)
- (seq-remove (lambda (e) (equal (lsp--registered-capability-id e) id))
- (lsp--workspace-registered-server-capabilities lsp--cur-workspace)))
- (when (equal method "workspace/didChangeWatchedFiles")
- (lsp--cleanup-hanging-watches)))
-
-(defun lsp--server-capabilities ()
- "Return the capabilities of the language server associated with the buffer."
- (->> (lsp-workspaces)
- (-keep #'lsp--workspace-server-capabilities)
- (apply #'lsp-merge)))
-
-(defun lsp--send-open-close-p ()
- "Return whether open and close notifications should be sent to the server."
- (let ((sync (lsp:server-capabilities-text-document-sync? (lsp--server-capabilities))))
- (or (memq sync '(1 2))
- (lsp:text-document-sync-options-open-close? sync))))
-
-(defun lsp--send-will-save-p ()
- "Return whether willSave notifications should be sent to the server."
- (-> (lsp--server-capabilities)
- (lsp:server-capabilities-text-document-sync?)
- (lsp:text-document-sync-options-will-save?)))
-
-(defun lsp--send-will-save-wait-until-p ()
- "Return whether willSaveWaitUntil notifications should be sent to the server."
- (-> (lsp--server-capabilities)
- (lsp:server-capabilities-text-document-sync?)
- (lsp:text-document-sync-options-will-save-wait-until?)))
-
-(defun lsp--send-did-save-p ()
- "Return whether didSave notifications should be sent to the server."
- (let ((sync (lsp:server-capabilities-text-document-sync? (lsp--server-capabilities))))
- (or (memq sync '(1 2))
- (lsp:text-document-sync-options-save? sync))))
-
-(defun lsp--save-include-text-p ()
- "Return whether save notifications should include the text document's contents."
- (->> (lsp--server-capabilities)
- (lsp:server-capabilities-text-document-sync?)
- (lsp:text-document-sync-options-save?)
- (lsp:text-document-save-registration-options-include-text?)))
-
-(declare-function project-roots "ext:project" (project) t)
-(declare-function project-root "ext:project" (project) t)
-
-(defun lsp--suggest-project-root ()
- "Get project root."
- (or
- (when (featurep 'projectile) (condition-case nil
- (projectile-project-root)
- (error nil)))
- (when (featurep 'project)
- (when-let ((project (project-current)))
- (if (fboundp 'project-root)
- (project-root project)
- (car (with-no-warnings
- (project-roots project))))))
- default-directory))
-
-(defun lsp--read-from-file (file)
- "Read FILE content."
- (when (file-exists-p file)
- (cl-first (read-from-string (f-read-text file 'utf-8)))))
-
-(defun lsp--persist (file-name to-persist)
- "Persist TO-PERSIST in FILE-NAME.
-
-This function creates the parent directories if they don't exist
-yet."
- (let ((print-length nil)
- (print-level nil))
- ;; Create all parent directories:
- (apply #'f-mkdir (f-split (f-parent file-name)))
- (f-write-text (prin1-to-string to-persist) 'utf-8 file-name)))
-
-(defun lsp-workspace-folders-add (project-root)
- "Add PROJECT-ROOT to the list of workspace folders."
- (interactive
- (list (read-directory-name "Select folder to add: "
- (or (lsp--suggest-project-root) default-directory) nil t)))
- (cl-pushnew (lsp-f-canonical project-root)
- (lsp-session-folders (lsp-session)) :test 'equal)
- (lsp--persist-session (lsp-session))
-
- (run-hook-with-args 'lsp-workspace-folders-changed-functions (list project-root) nil))
-
-(defun lsp-workspace-folders-remove (project-root)
- "Remove PROJECT-ROOT from the list of workspace folders."
- (interactive (list (completing-read "Select folder to remove: "
- (lsp-session-folders (lsp-session))
- nil t nil nil
- (lsp-find-session-folder (lsp-session) default-directory))))
-
- (setq project-root (lsp-f-canonical project-root))
-
- ;; send remove folder to each multiroot workspace associated with the folder
- (dolist (wks (->> (lsp-session)
- (lsp-session-folder->servers)
- (gethash project-root)
- (--filter (lsp--client-multi-root (lsp--workspace-client it)))))
- (with-lsp-workspace wks
- (lsp-notify "workspace/didChangeWorkspaceFolders"
- (lsp-make-did-change-workspace-folders-params
- :event (lsp-make-workspace-folders-change-event
- :removed (vector (lsp-make-workspace-folder
- :uri (lsp--path-to-uri project-root)
- :name (f-filename project-root)))
- :added [])))))
-
- ;; turn off servers in the removed directory
- (let* ((session (lsp-session))
- (folder->servers (lsp-session-folder->servers session))
- (server-id->folders (lsp-session-server-id->folders session))
- (workspaces (gethash project-root folder->servers)))
-
- (remhash project-root folder->servers)
-
- ;; turn off the servers without root folders
- (dolist (workspace workspaces)
- (when (--none? (-contains? it workspace) (ht-values folder->servers))
- (lsp--info "Shutdown %s since folder %s is removed..."
- (lsp--workspace-print workspace) project-root)
- (with-lsp-workspace workspace (lsp--shutdown-workspace))))
-
- (setf (lsp-session-folders session)
- (-remove-item project-root (lsp-session-folders session)))
-
- (ht-aeach (puthash key
- (-remove-item project-root value)
- server-id->folders)
- server-id->folders)
- (lsp--persist-session (lsp-session)))
-
- (run-hook-with-args 'lsp-workspace-folders-changed-functions nil (list project-root)))
-
-(defun lsp-workspace-blacklist-remove (project-root)
- "Remove PROJECT-ROOT from the workspace blacklist."
- (interactive (list (completing-read "Select folder to remove:"
- (lsp-session-folders-blacklist (lsp-session))
- nil t)))
- (setf (lsp-session-folders-blacklist (lsp-session))
- (delete project-root
- (lsp-session-folders-blacklist (lsp-session))))
- (lsp--persist-session (lsp-session)))
-
-(define-obsolete-function-alias 'lsp-workspace-folders-switch
- 'lsp-workspace-folders-open "lsp-mode 6.1")
-
-(defun lsp-workspace-folders-open (project-root)
- "Open the directory located at PROJECT-ROOT"
- (interactive (list (completing-read "Open folder: "
- (lsp-session-folders (lsp-session))
- nil t)))
- (find-file project-root))
-
-(defun lsp--maybe-enable-signature-help (trigger-characters)
- (let ((ch last-command-event))
- (when (cl-find ch trigger-characters :key #'string-to-char)
- (lsp-signature-activate))))
-
-(defun lsp--on-type-formatting-handler-create ()
- (when-let ((provider (lsp--capability :documentOnTypeFormattingProvider)))
- (-let [(&DocumentOnTypeFormattingOptions :more-trigger-character?
- :first-trigger-character) provider]
- (lambda ()
- (lsp--on-type-formatting first-trigger-character
- more-trigger-character?)))))
-
-(defun lsp--update-on-type-formatting-hook (&optional cleanup?)
- (let ((on-type-formatting-handler (lsp--on-type-formatting-handler-create)))
- (cond
- ((and lsp-enable-on-type-formatting on-type-formatting-handler (not cleanup?))
- (add-hook 'post-self-insert-hook on-type-formatting-handler nil t))
- ((or cleanup?
- (not lsp-enable-on-type-formatting))
- (remove-hook 'post-self-insert-hook on-type-formatting-handler t)))))
-
-(defun lsp--signature-help-handler-create ()
- (-when-let ((&SignatureHelpOptions? :trigger-characters?)
- (lsp--capability :signatureHelpProvider))
- (lambda ()
- (lsp--maybe-enable-signature-help trigger-characters?))))
-
-(defun lsp--update-signature-help-hook (&optional cleanup?)
- (let ((signature-help-handler (lsp--signature-help-handler-create)))
- (cond
- ((and (or (equal lsp-signature-auto-activate t)
- (memq :on-trigger-char lsp-signature-auto-activate))
- signature-help-handler)
- (add-hook 'post-self-insert-hook signature-help-handler nil t))
-
- ((or cleanup?
- (not (or (equal lsp-signature-auto-activate t)
- (memq :on-trigger-char lsp-signature-auto-activate))))
- (remove-hook 'post-self-insert-hook signature-help-handler t)))))
-
-(defun lsp--after-set-visited-file-name ()
- (lsp-disconnect)
- (lsp))
-
-(define-minor-mode lsp-managed-mode
- "Mode for source buffers managed by lsp-mode."
- :lighter nil
- (cond
- (lsp-managed-mode
- (when (lsp-feature? "textDocument/hover")
- (add-function :before-until (local 'eldoc-documentation-function) #'lsp-eldoc-function)
- (eldoc-mode 1))
-
- (add-hook 'after-change-functions #'lsp-on-change nil t)
- (add-hook 'after-revert-hook #'lsp-on-revert nil t)
- (add-hook 'after-save-hook #'lsp-on-save nil t)
- (add-hook 'auto-save-hook #'lsp--on-auto-save nil t)
- (add-hook 'before-change-functions #'lsp-before-change nil t)
- (add-hook 'before-save-hook #'lsp--before-save nil t)
- (add-hook 'kill-buffer-hook #'lsp--text-document-did-close nil t)
- (add-hook 'post-command-hook #'lsp--post-command nil t)
-
- (lsp--update-on-type-formatting-hook)
- (lsp--update-signature-help-hook)
-
- (when lsp-enable-xref
- (add-hook 'xref-backend-functions #'lsp--xref-backend nil t))
-
- (lsp-configure-buffer)
-
- ;; make sure we turn off lsp-mode in case major mode changes, because major
- ;; mode change will wipe the buffer locals.
- (add-hook 'change-major-mode-hook #'lsp-disconnect nil t)
- (add-hook 'after-set-visited-file-name-hook #'lsp--after-set-visited-file-name nil t)
-
- (let ((buffer (lsp-current-buffer)))
- (run-with-idle-timer
- 0.0 nil
- (lambda ()
- (when (lsp-buffer-live-p buffer)
- (lsp-with-current-buffer buffer
- (lsp--on-change-debounce buffer)
- (lsp--on-idle buffer)))))))
- (t
- (lsp-unconfig-buffer)
- (remove-function (local 'eldoc-documentation-function) #'lsp-eldoc-function)
-
- (remove-hook 'post-command-hook #'lsp--post-command t)
- (remove-hook 'after-change-functions #'lsp-on-change t)
- (remove-hook 'after-revert-hook #'lsp-on-revert t)
- (remove-hook 'after-save-hook #'lsp-on-save t)
- (remove-hook 'auto-save-hook #'lsp--on-auto-save t)
- (remove-hook 'before-change-functions #'lsp-before-change t)
- (remove-hook 'before-save-hook #'lsp--before-save t)
- (remove-hook 'kill-buffer-hook #'lsp--text-document-did-close t)
-
- (lsp--update-on-type-formatting-hook :cleanup)
- (lsp--update-signature-help-hook :cleanup)
-
- (when lsp--on-idle-timer
- (cancel-timer lsp--on-idle-timer)
- (setq lsp--on-idle-timer nil))
-
- (remove-hook 'lsp-on-idle-hook #'lsp--document-links t)
- (remove-hook 'lsp-on-idle-hook #'lsp--document-highlight t)
-
- (lsp--remove-overlays 'lsp-highlight)
- (lsp--remove-overlays 'lsp-links)
-
- (remove-hook 'xref-backend-functions #'lsp--xref-backend t)
- (remove-hook 'change-major-mode-hook #'lsp-disconnect t)
- (remove-hook 'after-set-visited-file-name-hook #'lsp--after-set-visited-file-name t)
- (setq-local lsp-buffer-uri nil))))
-
-(defun lsp-configure-buffer ()
- "Configure LSP features for current buffer."
- ;; make sure the core is running in the context of all available workspaces
- ;; to avoid misconfiguration in case we are running in `with-lsp-workspace' context
- (let ((lsp--buffer-workspaces (cond
- (lsp--buffer-workspaces)
- (lsp--cur-workspace (list lsp--cur-workspace))))
- lsp--cur-workspace)
- (when lsp-auto-configure
- (when (and lsp-enable-text-document-color
- (lsp-feature? "textDocument/documentColor"))
- (add-hook 'lsp-on-change-hook #'lsp--document-color nil t))
-
- (when (and lsp-enable-imenu
- (lsp-feature? "textDocument/documentSymbol"))
- (lsp-enable-imenu))
-
- (when (and lsp-enable-indentation
- (lsp-feature? "textDocument/rangeFormatting"))
- (setq-local indent-region-function #'lsp-format-region))
-
- (when (and lsp-enable-symbol-highlighting
- (lsp-feature? "textDocument/documentHighlight"))
- (add-hook 'lsp-on-idle-hook #'lsp--document-highlight nil t))
-
- (when (and lsp-enable-links
- (lsp-feature? "textDocument/documentLink"))
- (add-hook 'lsp-on-idle-hook #'lsp--document-links nil t))
-
- (when (and lsp-enable-dap-auto-configure
- (functionp 'dap-mode))
- (dap-auto-configure-mode 1)))
- (run-hooks 'lsp-configure-hook)))
-
-(defun lsp-unconfig-buffer ()
- "Unconfigure LSP features for buffer."
- (run-hooks 'lsp-unconfigure-hook)
-
- (lsp--remove-overlays 'lsp-color)
- (when (eq indent-region-function #'lsp-format-region)
- (setq-local indent-region-function nil))
- (remove-hook 'lsp-on-change-hook #'lsp--document-color t)
- (remove-hook 'lsp-on-idle-hook #'lsp--document-highlight t)
- (remove-hook 'lsp-on-idle-hook #'lsp--document-links t))
-
-(defun lsp--buffer-content ()
- (lsp-save-restriction-and-excursion
- (or (lsp-virtual-buffer-call :buffer-string)
- (buffer-substring-no-properties (point-min)
- (point-max)))))
-
-(defun lsp--text-document-did-open ()
- "'document/didOpen' event."
- (run-hooks 'lsp-before-open-hook)
- (setq lsp--cur-version (or lsp--cur-version 0))
- (cl-pushnew (lsp-current-buffer) (lsp--workspace-buffers lsp--cur-workspace))
- (lsp-notify
- "textDocument/didOpen"
- (list :textDocument
- (list :uri (lsp--buffer-uri)
- :languageId (lsp-buffer-language)
- :version lsp--cur-version
- :text (lsp--buffer-content))))
-
- (lsp-managed-mode 1)
-
- (run-hooks 'lsp-after-open-hook)
- (when-let ((client (-some-> lsp--cur-workspace (lsp--workspace-client))))
- (-some-> (lsp--client-after-open-fn client)
- (funcall))
- (-some-> (format "lsp-%s-after-open-hook" (lsp--client-server-id client))
- (intern-soft)
- (run-hooks))))
-
-(defun lsp--text-document-identifier ()
- "Make TextDocumentIdentifier."
- (list :uri (lsp--buffer-uri)))
-
-(defun lsp--versioned-text-document-identifier ()
- "Make VersionedTextDocumentIdentifier."
- (plist-put (lsp--text-document-identifier) :version lsp--cur-version))
-
-(defun lsp--cur-line (&optional point)
- (1- (line-number-at-pos point)))
-
-(defun lsp--cur-position ()
- "Make a Position object for the current point."
- (or (lsp-virtual-buffer-call :cur-position)
- (lsp-save-restriction-and-excursion
- (list :line (lsp--cur-line)
- :character (- (point) (line-beginning-position))))))
-
-(defun lsp--point-to-position (point)
- "Convert POINT to Position."
- (lsp-save-restriction-and-excursion
- (goto-char point)
- (lsp--cur-position)))
-
-(defun lsp--range (start end)
- "Make Range body from START and END."
- ;; make sure start and end are Position objects
- (list :start start :end end))
-
-(defun lsp--region-to-range (start end)
- "Make Range object for the current region."
- (lsp--range (lsp--point-to-position start)
- (lsp--point-to-position end)))
-
-(defun lsp--region-or-line ()
- "The active region or the current line."
- (if (use-region-p)
- (lsp--region-to-range (region-beginning) (region-end))
- (lsp--region-to-range (point-at-bol) (point-at-eol))))
-
-(defun lsp--check-document-changes-version (document-changes)
- "Verify that DOCUMENT-CHANGES have the proper version."
- (unless (seq-every-p
- (-lambda ((&TextDocumentEdit :text-document))
- (or
- (not text-document)
- (let* ((filename (-> text-document
- lsp:versioned-text-document-identifier-uri
- lsp--uri-to-path))
- (version (lsp:versioned-text-document-identifier-version? text-document)))
- (with-current-buffer (find-file-noselect filename)
- (or (null version) (zerop version)
- (equal version lsp--cur-version))))))
- document-changes)
- (error "Document changes cannot be applied")))
-
-(defun lsp--apply-workspace-edit (workspace-edit &optional operation)
- "Apply the WorkspaceEdit object WORKSPACE-EDIT.
-OPERATION is symbol representing the source of this text edit."
- (-let (((&WorkspaceEdit :document-changes? :changes?) workspace-edit))
- (if-let ((document-changes (seq-reverse document-changes?)))
- (progn
- (lsp--check-document-changes-version document-changes)
- (->> document-changes
- (seq-filter (-lambda ((&CreateFile :kind))
- (or (not kind) (equal kind "edit"))))
- (seq-do (lambda (change) (lsp--apply-text-document-edit change operation))))
- (->> document-changes
- (seq-filter (-lambda ((&CreateFile :kind))
- (not (or (not kind) (equal kind "edit")))))
- (seq-do (lambda (change) (lsp--apply-text-document-edit change operation)))))
- (lsp-map
- (lambda (uri text-edits)
- (with-current-buffer (-> uri lsp--uri-to-path find-file-noselect)
- (lsp--apply-text-edits text-edits operation)))
- changes?))))
-
-(defmacro lsp-with-filename (file &rest body)
- "Execute BODY with FILE as a context.
-Need to handle the case when FILE indicates virtual buffer."
- (declare (indent 1) (debug t))
- `(if-let ((lsp--virtual-buffer (get-text-property 0 'lsp-virtual-buffer ,file)))
- (lsp-with-current-buffer lsp--virtual-buffer
- ,@body)
- ,@body))
-
-(defun lsp--apply-text-document-edit (edit &optional operation)
- "Apply the TextDocumentEdit object EDIT.
-OPERATION is symbol representing the source of this text edit.
-If the file is not being visited by any buffer, it is opened with
-`find-file-noselect'.
-Because lsp-mode does not store previous document versions, the edit is only
-applied if the version of the textDocument matches the version of the
-corresponding file.
-
-interface TextDocumentEdit {
- textDocument: VersionedTextDocumentIdentifier;
- edits: TextEdit[];
-}"
- (pcase (lsp:edit-kind edit)
- ("create" (-let* (((&CreateFile :uri :options?) edit)
- (file-name (lsp--uri-to-path uri)))
- (mkdir (f-dirname file-name) t)
- (f-touch file-name)
- (when (lsp:create-file-options-overwrite? options?)
- (f-write-text "" nil file-name))))
- ("delete" (-let (((&DeleteFile :uri :options? (&DeleteFileOptions? :recursive?)) edit))
- (f-delete (lsp--uri-to-path uri) recursive?)))
- ("rename" (-let* (((&RenameFile :old-uri :new-uri :options? (&RenameFileOptions? :overwrite?)) edit)
- (old-file-name (lsp--uri-to-path old-uri))
- (new-file-name (lsp--uri-to-path new-uri))
- (buf (find-buffer-visiting old-file-name)))
- (when buf
- (lsp-with-current-buffer buf
- (save-buffer)
- (lsp--text-document-did-close)))
- (mkdir (f-dirname new-file-name) t)
- (rename-file old-file-name new-file-name overwrite?)
- (when buf
- (lsp-with-current-buffer buf
- (set-buffer-modified-p nil)
- (setq lsp-buffer-uri nil)
- (set-visited-file-name new-file-name)
- (lsp)))))
- (_ (let ((file-name (->> edit
- (lsp:text-document-edit-text-document)
- (lsp:versioned-text-document-identifier-uri)
- (lsp--uri-to-path))))
- (lsp-with-current-buffer (find-buffer-visiting file-name)
- (lsp-with-filename file-name
- (lsp--apply-text-edits (lsp:text-document-edit-edits edit) operation)))))))
-
-(lsp-defun lsp--position-compare ((&Position :line left-line
- :character left-character)
- (&Position :line right-line
- :character right-character))
- "Return t if position LEFT is greater than RIGHT."
- (if (= left-line right-line)
- (> left-character right-character)
- (> left-line right-line)))
-
-(lsp-defun lsp-point-in-range? (position (&Range :start :end))
- "Returns if POINT is in RANGE."
- (not (or (lsp--position-compare start position)
- (lsp--position-compare position end))))
-
-(lsp-defun lsp--position-equal ((&Position :line left-line
- :character left-character)
- (&Position :line right-line
- :character right-character))
- "Return whether LEFT and RIGHT positions are equal."
- (and (= left-line right-line)
- (= left-character right-character)))
-
-(lsp-defun lsp--text-edit-sort-predicate ((&TextEdit :range (&Range :start left-start :end left-end))
- (&TextEdit :range (&Range :start right-start :end right-end)))
- (if (lsp--position-equal left-start right-start)
- (lsp--position-compare left-end right-end)
- (lsp--position-compare left-start right-start)))
-
-(lsp-defun lsp--apply-text-edit ((edit &as &TextEdit :range (&RangeToPoint :start :end) :new-text))
- "Apply the edits described in the TextEdit object in TEXT-EDIT."
- ;; We sort text edits so as to apply edits that modify latter parts of the
- ;; document first. Furthermore, because the LSP spec dictates that:
- ;; "If multiple inserts have the same position, the order in the array
- ;; defines which edit to apply first."
- ;; We reverse the initial list and sort stably to make sure the order among
- ;; edits with the same position is preserved.
- (setq new-text (s-replace "\r" "" (or new-text "")))
- (lsp:set-text-edit-new-text edit new-text)
- (goto-char start)
- (delete-region start end)
- (insert new-text))
-
-;; WORKAROUND: typescript-language might send -1 when applying code actions.
-;; see https://github.com/emacs-lsp/lsp-mode/issues/1582
-(lsp-defun lsp--fix-point ((point &as &Position :character :line))
- (-doto point
- (lsp:set-position-line (max 0 line))
- (lsp:set-position-character (max 0 character))))
-
-(lsp-defun lsp--apply-text-edit-replace-buffer-contents ((edit &as
- &TextEdit
- :range (&Range :start :end)
- :new-text))
- "Apply the edits described in the TextEdit object in TEXT-EDIT.
-The method uses `replace-buffer-contents'."
- (setq new-text (s-replace "\r" "" (or new-text "")))
- (lsp:set-text-edit-new-text edit new-text)
- (-let* ((source (current-buffer))
- ((beg . end) (lsp--range-to-region (lsp-make-range :start (lsp--fix-point start)
- :end (lsp--fix-point end)))))
- (with-temp-buffer
- (insert new-text)
- (let ((temp (current-buffer)))
- (with-current-buffer source
- (save-excursion
- (save-restriction
- (narrow-to-region beg end)
-
- ;; On emacs versions < 26.2,
- ;; `replace-buffer-contents' is buggy - it calls
- ;; change functions with invalid arguments - so we
- ;; manually call the change functions here.
- ;;
- ;; See emacs bugs #32237, #32278:
- ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32237
- ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32278
- (let ((inhibit-modification-hooks t)
- (length (- end beg)))
- (run-hook-with-args 'before-change-functions
- beg end)
- (replace-buffer-contents temp)
- (run-hook-with-args 'after-change-functions
- beg (+ beg (length new-text))
- length)))))))))
-
-(defun lsp--to-yasnippet-snippet (snippet)
- "Convert LSP SNIPPET to yasnippet snippet."
- ;; LSP snippet doesn't escape "{" and "`", but yasnippet requires escaping it.
- (replace-regexp-in-string (rx (or bos (not (any "$" "\\"))) (group (or "{" "`")))
- (rx "\\" (backref 1))
- snippet
- nil nil 1))
-
-(defvar-local lsp-enable-relative-indentation nil
- "Enable relative indentation when insert texts, snippets ...
-from language server.")
-
-(defun lsp--expand-snippet (snippet &optional start end expand-env)
- "Wrapper of `yas-expand-snippet' with all of it arguments.
-The snippet will be convert to LSP style and indent according to
-LSP server result."
- (let* ((inhibit-field-text-motion t)
- (yas-wrap-around-region nil)
- (yas-indent-line 'none)
- (yas-also-auto-indent-first-line nil))
- (yas-expand-snippet
- (lsp--to-yasnippet-snippet snippet)
- start end expand-env)))
-
-(defun lsp--indent-lines (start end &optional insert-text-mode?)
- "Indent from START to END based on INSERT-TEXT-MODE? value.
-- When INSERT-TEXT-MODE? is provided
- - if it's `lsp/insert-text-mode-as-it', do no editor indentation.
- - if it's `lsp/insert-text-mode-adjust-indentation', adjust leading
- whitespaces to match the line where text is inserted.
-- When it's not provided, using `indent-line-function' for each line."
- (save-excursion
- (goto-char end)
- (let* ((end-line (line-number-at-pos))
- (offset (save-excursion
- (goto-char start)
- (current-indentation)))
- (indent-line-function
- (cond ((equal insert-text-mode? lsp/insert-text-mode-as-it)
- #'ignore)
- ((or (equal insert-text-mode? lsp/insert-text-mode-adjust-indentation)
- lsp-enable-relative-indentation
- ;; Indenting snippets is extremely slow in `org-mode' buffers
- ;; since it has to calculate indentation based on SRC block
- ;; position. Thus we use relative indentation as default.
- (derived-mode-p 'org-mode))
- (lambda () (save-excursion
- (beginning-of-line)
- (indent-to-column offset))))
- (t indent-line-function))))
- (goto-char start)
- (while (and (equal (forward-line 1) 0)
- (<= (line-number-at-pos) end-line))
- (funcall indent-line-function)))))
-
-(defun lsp--apply-text-edits (edits &optional operation)
- "Apply the EDITS described in the TextEdit[] object.
-OPERATION is symbol representing the source of this text edit."
- (unless (seq-empty-p edits)
- (atomic-change-group
- (run-hooks 'lsp-before-apply-edits-hook)
- (let* ((change-group (prepare-change-group))
- (howmany (length edits))
- (message (format "Applying %s edits to `%s' ..." howmany (current-buffer)))
- (_ (lsp--info message))
- (reporter (make-progress-reporter message 0 howmany))
- (done 0)
- (apply-edit (if (not lsp--virtual-buffer)
- #'lsp--apply-text-edit-replace-buffer-contents
- #'lsp--apply-text-edit)))
- (unwind-protect
- (->> edits
- (nreverse)
- (seq-sort #'lsp--text-edit-sort-predicate)
- (mapc (lambda (edit)
- (progress-reporter-update reporter (cl-incf done))
- (funcall apply-edit edit)
- (when (lsp:snippet-text-edit-insert-text-format? edit)
- (-when-let ((&SnippetTextEdit :range (&RangeToPoint :start)
- :insert-text-format? :new-text) edit)
- (when (eq insert-text-format? lsp/insert-text-format-snippet)
- ;; No `save-excursion' needed since expand snippet will change point anyway
- (goto-char (+ start (length new-text)))
- (lsp--indent-lines start (point))
- (lsp--expand-snippet new-text start (point)))))
- (run-hook-with-args 'lsp-after-apply-edits-hook operation))))
- (undo-amalgamate-change-group change-group)
- (progress-reporter-done reporter))))))
-
-(defun lsp--create-apply-text-edits-handlers ()
- "Create (handler cleanup-fn) for applying text edits in async request.
-Only works when mode is 'tick or 'alive."
- (let* (first-edited
- (func (lambda (start &rest _)
- (setq first-edited (if first-edited
- (min start first-edited)
- start)))))
- (add-hook 'before-change-functions func nil t)
- (list
- (lambda (edits)
- (if (and first-edited
- (seq-find (-lambda ((&TextEdit :range (&RangeToPoint :end)))
- ;; Text edit region is overlapped
- (> end first-edited))
- edits))
- (lsp--warn "TextEdits will not be applied since document has been modified before of them.")
- (lsp--apply-text-edits edits 'completion-cleanup)))
- (lambda ()
- (remove-hook 'before-change-functions func t)))))
-
-(defun lsp--capability (cap &optional capabilities)
- "Get the value of capability CAP. If CAPABILITIES is non-nil, use them instead."
- (when (stringp cap)
- (setq cap (intern (concat ":" cap))))
-
- (lsp-get (or capabilities
- (lsp--server-capabilities))
- cap))
-
-(defun lsp--registered-capability (method)
- "Check whether there is workspace providing METHOD."
- (->> (lsp-workspaces)
- (--keep (seq-find (lambda (reg)
- (equal (lsp--registered-capability-method reg) method))
- (lsp--workspace-registered-server-capabilities it)))
- cl-first))
-
-(defvar-local lsp--before-change-vals nil
- "Store the positions from the `lsp-before-change' function call, for
-validation and use in the `lsp-on-change' function.")
-
-(defun lsp--text-document-content-change-event (start end length)
- "Make a TextDocumentContentChangeEvent body for START to END, of length LENGTH."
- ;; So (47 54 0) means add 7 chars starting at pos 47
- ;; must become
- ;; {"range":{"start":{"line":5,"character":6}
- ;; ,"end" :{"line":5,"character":6}}
- ;; ,"rangeLength":0
- ;; ,"text":"\nbb = 5"}
- ;;
- ;; And (47 47 7) means delete 7 chars starting at pos 47
- ;; must become
- ;; {"range":{"start":{"line":6,"character":0}
- ;; ,"end" :{"line":7,"character":0}}
- ;; ,"rangeLength":7
- ;; ,"text":""}
- ;;
- ;; (208 221 3) means delete 3 chars starting at pos 208, and replace them with
- ;; 13 chars. So it must become
- ;; {"range":{"start":{"line":5,"character":8}
- ;; ,"end" :{"line":5,"character":11}}
- ;; ,"rangeLength":3
- ;; ,"text":"new-chars-xxx"}
- ;;
-
- ;; Adding text:
- ;; lsp-before-change:(start,end)=(33,33)
- ;; lsp-on-change:(start,end,length)=(33,34,0)
- ;;
- ;; Changing text:
- ;; lsp-before-change:(start,end)=(208,211)
- ;; lsp-on-change:(start,end,length)=(208,221,3)
- ;;
- ;; Deleting text:
- ;; lsp-before-change:(start,end)=(19,27)
- ;; lsp-on-change:(start,end,length)=(19,19,8)
- (if (zerop length)
- ;; Adding something only, work from start only
- `( :range ,(lsp--range
- (lsp--point-to-position start)
- (lsp--point-to-position start))
- :rangeLength 0
- :text ,(buffer-substring-no-properties start end))
-
- (if (eq start end)
- ;; Deleting something only
- (if (lsp--bracketed-change-p start length)
- ;; The before-change value is bracketed, use it
- `( :range ,(lsp--range
- (lsp--point-to-position start)
- (plist-get lsp--before-change-vals :end-pos))
- :rangeLength ,length
- :text "")
- ;; If the change is not bracketed, send a full change event instead.
- (lsp--full-change-event))
-
- ;; Deleting some things, adding others
- (if (lsp--bracketed-change-p start length)
- ;; The before-change value is valid, use it
- `( :range ,(lsp--range
- (lsp--point-to-position start)
- (plist-get lsp--before-change-vals :end-pos))
- :rangeLength ,length
- :text ,(buffer-substring-no-properties start end))
- (lsp--full-change-event)))))
-
-(defun lsp--bracketed-change-p (start length)
- "If the before and after positions are the same, and the length
-is the size of the start range, we are probably good."
- (-let [(&plist :end before-end :start before-start) lsp--before-change-vals]
- (and (eq start before-start)
- (eq length (- before-end before-start)))))
-
-(defun lsp--full-change-event ()
- `(:text ,(lsp--buffer-content)))
-
-(defun lsp-before-change (start end)
- "Executed before a file is changed.
-Added to `before-change-functions'."
- ;; Note:
- ;;
- ;; This variable holds a list of functions to call when Emacs is about to
- ;; modify a buffer. Each function gets two arguments, the beginning and end of
- ;; the region that is about to change, represented as integers. The buffer
- ;; that is about to change is always the current buffer when the function is
- ;; called.
- ;;
- ;; WARNING:
- ;;
- ;; Do not expect the before-change hooks and the after-change hooks be called
- ;; in balanced pairs around each buffer change. Also don't expect the
- ;; before-change hooks to be called for every chunk of text Emacs is about to
- ;; delete. These hooks are provided on the assumption that Lisp programs will
- ;; use either before- or the after-change hooks, but not both, and the
- ;; boundaries of the region where the changes happen might include more than
- ;; just the actual changed text, or even lump together several changes done
- ;; piecemeal.
- (save-match-data
- (lsp-save-restriction-and-excursion
- (setq lsp--before-change-vals
- (list :start start
- :end end
- :end-pos (lsp--point-to-position end))))))
-
-(defun lsp--flush-delayed-changes ()
- (let ((inhibit-quit t))
- (when lsp--delay-timer
- (cancel-timer lsp--delay-timer))
- (mapc (-lambda ((workspace buffer document change))
- (with-current-buffer buffer
- (with-lsp-workspace workspace
- (lsp-notify "textDocument/didChange"
- (list :textDocument document
- :contentChanges (vector change))))))
- (prog1 (nreverse lsp--delayed-requests)
- (setq lsp--delayed-requests nil)))))
-
-(defun lsp--workspace-sync-method (workspace)
- (let* ((sync (-> workspace
- (lsp--workspace-server-capabilities)
- (lsp:server-capabilities-text-document-sync?))))
- (if (lsp-text-document-sync-options? sync)
- (lsp:text-document-sync-options-change? sync)
- sync)))
-
-(defun lsp-on-change (start end length &optional content-change-event-fn)
- "Executed when a file is changed.
-Added to `after-change-functions'."
- ;; Note:
- ;;
- ;; Each function receives three arguments: the beginning and end of the region
- ;; just changed, and the length of the text that existed before the change.
- ;; All three arguments are integers. The buffer that has been changed is
- ;; always the current buffer when the function is called.
- ;;
- ;; The length of the old text is the difference between the buffer positions
- ;; before and after that text as it was before the change. As for the
- ;; changed text, its length is simply the difference between the first two
- ;; arguments.
- ;;
- ;; So (47 54 0) means add 7 chars starting at pos 47
- ;; So (47 47 7) means delete 7 chars starting at pos 47
- (save-match-data
- (let ((inhibit-quit t))
- ;; A (revert-buffer) call with the 'preserve-modes parameter (eg, as done
- ;; by auto-revert-mode) will cause this handler to get called with a nil
- ;; buffer-file-name. We need the buffer-file-name to send notifications;
- ;; so we skip handling revert-buffer-caused changes and instead handle
- ;; reverts separately in lsp-on-revert
- (when (not revert-buffer-in-progress-p)
- (cl-incf lsp--cur-version)
- (mapc
- (lambda (workspace)
- (pcase (or lsp-document-sync-method
- (lsp--workspace-sync-method workspace))
- (1
- (if lsp-debounce-full-sync-notifications
- (setq lsp--delayed-requests
- (->> lsp--delayed-requests
- (-remove (-lambda ((_ buffer))
- (equal (current-buffer) buffer)))
- (cons (list workspace
- (current-buffer)
- (lsp--versioned-text-document-identifier)
- (lsp--full-change-event)))))
- (with-lsp-workspace workspace
- (lsp-notify "textDocument/didChange"
- (list :contentChanges (vector (lsp--full-change-event))
- :textDocument (lsp--versioned-text-document-identifier))))))
- (2
- (with-lsp-workspace workspace
- (lsp-notify
- "textDocument/didChange"
- (list :textDocument (lsp--versioned-text-document-identifier)
- :contentChanges (vector
- (if content-change-event-fn
- (funcall content-change-event-fn start end length)
- (lsp--text-document-content-change-event
- start end length)))))))))
- (lsp-workspaces))
- (when lsp--delay-timer (cancel-timer lsp--delay-timer))
- (setq lsp--delay-timer (run-with-idle-timer
- lsp-debounce-full-sync-notifications-interval
- nil
- #'lsp--flush-delayed-changes))
- ;; force cleanup overlays after each change
- (lsp--remove-overlays 'lsp-highlight)
- (lsp--after-change (current-buffer))
- (setq lsp--signature-last-index nil
- lsp--signature-last nil)
- ;; cleanup diagnostics
- (when lsp-diagnostic-clean-after-change
- (lsp-foreach-workspace
- (-let [diagnostics (lsp--workspace-diagnostics lsp--cur-workspace)]
- (remhash (lsp--fix-path-casing (buffer-file-name)) diagnostics))))))))
-
-
-
-;; facilities for on change hooks. We do not want to make lsp calls on each
-;; change event so we add debounce to avoid flooding the server with events.
-;; Additionally, we want to have a mechanism for stopping the server calls in
-;; particular cases like, e. g. when performing completion.
-
-(defvar lsp-inhibit-lsp-hooks nil
- "Flag to control.")
-
-(defcustom lsp-on-change-hook nil
- "Hooks to run when buffer has changed."
- :type 'hook
- :group 'lsp-mode)
-
-(defcustom lsp-idle-delay 0.500
- "Debounce interval for `after-change-functions'."
- :type 'number
- :group 'lsp-mode)
-
-(defcustom lsp-on-idle-hook nil
- "Hooks to run after `lsp-idle-delay'."
- :type 'hook
- :group 'lsp-mode)
-
-(defun lsp--idle-reschedule (buffer)
- (when lsp--on-idle-timer
- (cancel-timer lsp--on-idle-timer))
-
- (setq lsp--on-idle-timer (run-with-idle-timer
- lsp-idle-delay
- nil
- #'lsp--on-idle
- buffer)))
-
-(defun lsp--post-command ()
- (lsp--cleanup-highlights-if-needed)
- (lsp--idle-reschedule (current-buffer)))
-
-(defun lsp--on-idle (buffer)
- "Start post command loop."
- (when (and (buffer-live-p buffer)
- (equal buffer (current-buffer))
- (not lsp-inhibit-lsp-hooks)
- lsp-managed-mode)
- (run-hooks 'lsp-on-idle-hook)))
-
-(defun lsp--on-change-debounce (buffer)
- (when (and (buffer-live-p buffer)
- (equal buffer (current-buffer))
- (not lsp-inhibit-lsp-hooks)
- lsp-managed-mode)
- (run-hooks 'lsp-on-change-hook)))
-
-(defun lsp--after-change (buffer)
- (when lsp--on-change-timer
- (cancel-timer lsp--on-change-timer))
- (setq lsp--on-change-timer (run-with-idle-timer
- lsp-idle-delay
- nil
- #'lsp--on-change-debounce
- buffer))
- (lsp--idle-reschedule buffer))
-
-
-
-(defun lsp--on-type-formatting (first-trigger-characters more-trigger-characters)
- "Self insert handling.
-Applies on type formatting."
- (let ((ch last-command-event))
- (when (or (eq (string-to-char first-trigger-characters) ch)
- (cl-find ch more-trigger-characters :key #'string-to-char))
- (lsp-request-async "textDocument/onTypeFormatting"
- (lsp-make-document-on-type-formatting-params
- :text-document (lsp--text-document-identifier)
- :options (lsp-make-formatting-options
- :tab-size (symbol-value (lsp--get-indent-width major-mode))
- :insert-spaces (if indent-tabs-mode :json-false t))
- :ch (char-to-string ch)
- :position (lsp--cur-position))
- (lambda (data) (lsp--apply-text-edits data 'format))
- :mode 'tick))))
-
-
-;; links
-(defun lsp--document-links ()
- (when (lsp-feature? "textDocument/documentLink")
- (lsp-request-async
- "textDocument/documentLink"
- `(:textDocument ,(lsp--text-document-identifier))
- (lambda (links)
- (lsp--remove-overlays 'lsp-link)
- (seq-do
- (-lambda ((link &as &DocumentLink :range (&Range :start :end)))
- (-doto (make-button (lsp--position-to-point start)
- (lsp--position-to-point end)
- 'action (lsp--document-link-keymap link)
- 'keymap (let ((map (make-sparse-keymap)))
- (define-key map [M-return] 'push-button)
- (define-key map [mouse-2] 'push-button)
- map)
- 'help-echo "mouse-2, M-RET: Visit this link")
- (overlay-put 'lsp-link t)))
- links))
- :mode 'unchanged)))
-
-(defun lsp--document-link-handle-target (url)
- (let* ((parsed-url (url-generic-parse-url (url-unhex-string url)))
- (type (url-type parsed-url)))
- (pcase type
- ("file"
- (find-file (lsp--uri-to-path url))
- (-when-let ((_ line column) (s-match (rx "#" (group (1+ num)) "," (group (1+ num))) url))
- (goto-char (lsp--position-to-point
- (lsp-make-position :character (1- (string-to-number column))
- :line (1- (string-to-number line)))))))
- ((or "http" "https") (browse-url url))
- (type (if-let ((handler (lsp--get-uri-handler type)))
- (funcall handler url)
- (signal 'lsp-file-scheme-not-supported (list url)))))))
-
-(lsp-defun lsp--document-link-keymap ((link &as &DocumentLink :target?))
- (if target?
- (lambda (_)
- (interactive)
- (lsp--document-link-handle-target target?))
- (lambda (_)
- (interactive)
- (when (lsp:document-link-registration-options-resolve-provider?
- (lsp--capability :documentLinkProvider))
- (lsp-request-async
- "documentLink/resolve"
- link
- (-lambda ((&DocumentLink :target?))
- (lsp--document-link-handle-target target?)))))))
-
-
-
-(defun lsp-buffer-language ()
- "Get language corresponding current buffer."
- (or (->> lsp-language-id-configuration
- (-first (-lambda ((mode-or-pattern . language))
- (cond
- ((and (stringp mode-or-pattern)
- (s-matches? mode-or-pattern (buffer-file-name))) language)
- ((eq mode-or-pattern major-mode) language))))
- cl-rest)
- (lsp-warn "Unable to calculate the languageId for buffer `%s'. Take a look at `lsp-language-id-configuration'. The `major-mode' is %s"
- (buffer-name)
- major-mode)))
-
-(defun lsp-activate-on (&rest languages)
- "Returns language activation function.
-The function will return t when the `lsp-buffer-language' returns
-one of the LANGUAGES."
- (lambda (_file-name _mode)
- (-contains? languages (lsp-buffer-language))))
-
-(defun lsp-workspace-root (&optional path)
- "Find the workspace root for the current file or PATH."
- (-when-let* ((file-name (or path (buffer-file-name)))
- (file-name (lsp-f-canonical file-name)))
- (->> (lsp-session)
- (lsp-session-folders)
- (--filter (and (lsp--files-same-host it file-name)
- (or (lsp-f-ancestor-of? it file-name)
- (equal it file-name))))
- (--max-by (> (length it) (length other))))))
-
-(defun lsp-on-revert ()
- "Executed when a file is reverted.
-Added to `after-revert-hook'."
- (let ((n (buffer-size))
- (revert-buffer-in-progress-p nil))
- (lsp-on-change 0 n n)))
-
-(defun lsp--text-document-did-close (&optional keep-workspace-alive)
- "Executed when the file is closed, added to `kill-buffer-hook'.
-
-If KEEP-WORKSPACE-ALIVE is non-nil, do not shutdown the workspace
-if it's closing the last buffer in the workspace."
- (lsp-foreach-workspace
- (cl-callf2 delq (lsp-current-buffer) (lsp--workspace-buffers lsp--cur-workspace))
- (with-demoted-errors "Error sending didClose notification in ‘lsp--text-document-did-close’: %S"
- (lsp-notify "textDocument/didClose"
- `(:textDocument ,(lsp--text-document-identifier))))
- (when (and (not lsp-keep-workspace-alive)
- (not keep-workspace-alive)
- (not (lsp--workspace-buffers lsp--cur-workspace)))
- (lsp--shutdown-workspace))))
-
-(defun lsp--will-save-text-document-params (reason)
- (list :textDocument (lsp--text-document-identifier)
- :reason reason))
-
-(defun lsp--before-save ()
- "Before save handler."
- (with-demoted-errors "Error in ‘lsp--before-save’: %S"
- (let ((params (lsp--will-save-text-document-params 1)))
- (when (lsp--send-will-save-p)
- (lsp-notify "textDocument/willSave" params))
- (when (and (lsp--send-will-save-wait-until-p) lsp-before-save-edits)
- (let ((lsp-response-timeout 0.1))
- (condition-case nil
- (lsp--apply-text-edits
- (lsp-request "textDocument/willSaveWaitUntil"
- params)
- 'before-save)
- (error)))))))
-
-(defun lsp--on-auto-save ()
- "Handler for auto-save."
- (when (lsp--send-will-save-p)
- (with-demoted-errors "Error in ‘lsp--on-auto-save’: %S"
- (lsp-notify "textDocument/willSave" (lsp--will-save-text-document-params 2)))))
-
-(defun lsp--text-document-did-save ()
- "Executed when the file is closed, added to `after-save-hook''."
- (when (lsp--send-did-save-p)
- (with-demoted-errors "Error on ‘lsp--text-document-did-save: %S’"
- (lsp-notify "textDocument/didSave"
- `( :textDocument ,(lsp--versioned-text-document-identifier)
- ,@(when (lsp--save-include-text-p)
- (list :text (lsp--buffer-content))))))))
-
-(defun lsp--text-document-position-params (&optional identifier position)
- "Make TextDocumentPositionParams for the current point in the current document.
-If IDENTIFIER and POSITION are non-nil, they will be used as the document identifier
-and the position respectively."
- (list :textDocument (or identifier (lsp--text-document-identifier))
- :position (or position (lsp--cur-position))))
-
-(defun lsp--get-buffer-diagnostics ()
- "Return buffer diagnostics."
- (gethash (or
- (plist-get lsp--virtual-buffer :buffer-file-name)
- (lsp--fix-path-casing (buffer-file-name)))
- (lsp-diagnostics t)))
-
-(defun lsp-cur-line-diagnostics ()
- "Return any diagnostics that apply to the current line."
- (-let [(&plist :start (&plist :line start) :end (&plist :line end)) (lsp--region-or-line)]
- (cl-coerce (-filter
- (-lambda ((&Diagnostic :range (&Range :start (&Position :line))))
- (and (>= line start) (<= line end)))
- (lsp--get-buffer-diagnostics))
- 'vector)))
-
-(defalias 'lsp--cur-line-diagnotics 'lsp-cur-line-diagnostics)
-
-(defun lsp--extract-line-from-buffer (pos)
- "Return the line pointed to by POS (a Position object) in the current buffer."
- (let* ((point (lsp--position-to-point pos))
- (inhibit-field-text-motion t))
- (save-excursion
- (goto-char point)
- (buffer-substring (line-beginning-position) (line-end-position)))))
-
-(lsp-defun lsp--xref-make-item (filename (&Range :start (start &as &Position :character start-char :line start-line)
- :end (end &as &Position :character end-char)))
- "Return a xref-item from a RANGE in FILENAME."
- (let* ((line (lsp--extract-line-from-buffer start))
- (len (length line)))
- (add-face-text-property (max (min start-char len) 0)
- (max (min end-char len) 0)
- 'highlight t line)
- ;; LINE is nil when FILENAME is not being current visited by any buffer.
- (xref-make (or line filename)
- (xref-make-file-location
- filename
- (lsp-translate-line (1+ start-line))
- (lsp-translate-column start-char)))))
-
-(defun lsp--location-uri (loc)
- (if (lsp-location? loc)
- (lsp:location-uri loc)
- (lsp:location-link-target-uri loc)))
-
-(lsp-defun lsp-goto-location ((loc &as &Location :uri :range (&Range :start)))
- "Go to location."
- (let ((path (lsp--uri-to-path uri)))
- (if (f-exists? path)
- (with-current-buffer (find-file path)
- (goto-char (lsp--position-to-point start)))
- (error "There is no file %s" path))))
-
-(defun lsp--location-range (loc)
- (if (lsp-location? loc)
- (lsp:location-range loc)
- (lsp:location-link-target-selection-range loc)))
-
-(defun lsp--locations-to-xref-items (locations)
- "Return a list of `xref-item' given LOCATIONS, which can be of
-type Location, LocationLink, Location[] or LocationLink[]."
- (setq locations
- (pcase locations
- ((seq (or (Location)
- (LocationLink)))
- (append locations nil))
- ((or (Location)
- (LocationLink))
- (list locations))))
-
- (cl-labels ((get-xrefs-in-file
- (file-locs)
- (-let [(filename . matches) file-locs]
- (condition-case err
- (let ((visiting (find-buffer-visiting filename))
- (fn (lambda (loc)
- (lsp-with-filename filename
- (lsp--xref-make-item filename
- (lsp--location-range loc))))))
- (if visiting
- (with-current-buffer visiting
- (seq-map fn matches))
- (when (file-readable-p filename)
- (with-temp-buffer
- (insert-file-contents-literally filename)
- (seq-map fn matches)))))
- (error (lsp-warn "Failed to process xref entry for filename '%s': %s"
- filename (error-message-string err)))
- (file-error (lsp-warn "Failed to process xref entry, file-error, '%s': %s"
- filename (error-message-string err)))))))
-
- (->> locations
- (seq-sort #'lsp--location-before-p)
- (seq-group-by (-compose #'lsp--uri-to-path #'lsp--location-uri))
- (seq-map #'get-xrefs-in-file)
- (apply #'nconc))))
-
-(defun lsp--location-before-p (left right)
- "Sort first by file, then by line, then by column."
- (let ((left-uri (lsp--location-uri left))
- (right-uri (lsp--location-uri right)))
- (if (not (string= left-uri right-uri))
- (string< left-uri right-uri)
- (-let (((&Range :start left-start) (lsp--location-range left))
- ((&Range :start right-start) (lsp--location-range right)))
- (lsp--position-compare right-start left-start)))))
-
-(defun lsp--make-reference-params (&optional td-position include-declaration)
- "Make a ReferenceParam object.
-If TD-POSITION is non-nil, use it as TextDocumentPositionParams object instead.
-If INCLUDE-DECLARATION is non-nil, request the server to include declarations."
- (let ((json-false :json-false))
- (plist-put (or td-position (lsp--text-document-position-params))
- :context `(:includeDeclaration ,(or include-declaration json-false)))))
-
-(defun lsp--cancel-request (id)
- "Cancel request with ID in all workspaces."
- (lsp-foreach-workspace
- (->> lsp--cur-workspace lsp--workspace-client lsp--client-response-handlers (remhash id))
- (lsp-notify "$/cancelRequest" `(:id ,id))))
-
-(defun lsp-eldoc-function ()
- "`lsp-mode' eldoc function."
- (run-hooks 'lsp-eldoc-hook)
- eldoc-last-message)
-
-(defun lsp--point-on-highlight? ()
- (-some? (lambda (overlay)
- (overlay-get overlay 'lsp-highlight))
- (overlays-at (point))))
-
-(defun lsp--cleanup-highlights-if-needed ()
- (when (and lsp-enable-symbol-highlighting
- lsp--have-document-highlights
- (not (lsp--point-on-highlight?)))
- (lsp--remove-overlays 'lsp-highlight)
- (setq lsp--have-document-highlights nil)
- (lsp-cancel-request-by-token :highlights)))
-
-(defvar-local lsp--symbol-bounds-of-last-highlight-invocation nil
- "The bounds of the symbol from which `lsp--document-highlight'
- most recently requested highlights.")
-
-(defun lsp--document-highlight ()
- (let ((curr-sym-bounds (bounds-of-thing-at-point 'symbol)))
- (unless (or (looking-at "[[:space:]\n]")
- (not lsp-enable-symbol-highlighting)
- (and lsp--have-document-highlights
- curr-sym-bounds
- (equal curr-sym-bounds
- lsp--symbol-bounds-of-last-highlight-invocation)))
- (setq lsp--symbol-bounds-of-last-highlight-invocation
- curr-sym-bounds)
- (lsp-request-async "textDocument/documentHighlight"
- (lsp--text-document-position-params)
- #'lsp--document-highlight-callback
- :mode 'tick
- :cancel-token :highlights))))
-
-(defun lsp-describe-thing-at-point ()
- "Display the type signature and documentation of the thing at
-point."
- (interactive)
- (let ((contents (-some->> (lsp--text-document-position-params)
- (lsp--make-request "textDocument/hover")
- (lsp--send-request)
- (lsp:hover-contents))))
- (if (and contents (not (equal contents "")))
- (let ((lsp-help-buf-name "*lsp-help*"))
- (with-current-buffer (get-buffer-create lsp-help-buf-name)
- (with-help-window lsp-help-buf-name
- (insert (string-trim-right (lsp--render-on-hover-content contents t))))))
- (lsp--info "No content at point."))))
-
-(defun lsp--point-in-bounds-p (bounds)
- "Return whether the current point is within BOUNDS."
- (and (<= (car bounds) (point)) (< (point) (cdr bounds))))
-
-(defun lsp-get-renderer (language)
- "Get renderer for LANGUAGE."
- (lambda (str)
- (lsp--render-string str language)))
-
-(defun lsp--setup-markdown (mode)
- "Setup the ‘markdown-mode’ in the frame.
-MODE is the mode used in the parent frame."
- (make-local-variable 'markdown-code-lang-modes)
- (dolist (mark (alist-get mode lsp-custom-markup-modes))
- (add-to-list 'markdown-code-lang-modes (cons mark mode)))
- (setq-local markdown-fontify-code-blocks-natively t)
- (setq-local markdown-fontify-code-block-default-mode mode)
- (setq-local markdown-hide-markup t)
-
- ;; Render some common HTML entities.
- ;; This should really happen in markdown-mode instead,
- ;; but it doesn't, so we do it here for now.
- (setq prettify-symbols-alist
- (cl-loop for i from 0 to 255
- collect (cons (format "&#x%02X;" i) i)))
- (push '("&lt;" . ?<) prettify-symbols-alist)
- (push '("&gt;" . ?>) prettify-symbols-alist)
- (push '("&amp;" . ?&) prettify-symbols-alist)
- (push '("&nbsp;" . ? ) prettify-symbols-alist)
- (setq prettify-symbols-compose-predicate
- (lambda (_start _end _match) t))
- (prettify-symbols-mode 1))
-
-(defun lsp--buffer-string-visible ()
- "Return visible buffer string.
-Stolen from `org-copy-visible'."
- (let ((temp (generate-new-buffer " *temp*"))
- (beg (point-min))
- (end (point-max)))
- (while (/= beg end)
- (when (get-char-property beg 'invisible)
- (setq beg (next-single-char-property-change beg 'invisible nil end)))
- (let* ((next (next-single-char-property-change beg 'invisible nil end))
- (substring (buffer-substring beg next)))
- (with-current-buffer temp (insert substring))
- ;; (setq result (concat result substring))
- (setq beg next)))
- (setq deactivate-mark t)
- (prog1 (with-current-buffer temp
- (s-chop-suffix "\n" (buffer-string)))
- (kill-buffer temp))))
-
-(defvar lsp-buffer-major-mode nil
- "Holds the major mode when fontification function is running.
-See #2588")
-
-(defvar view-inhibit-help-message)
-
-(defun lsp--render-markdown ()
- "Render markdown."
-
- (let ((markdown-enable-math nil))
- (goto-char (point-min))
- (while (re-search-forward
- (rx (and "\\" (group (or "\\" "`" "*" "_" ":" "/"
- "{" "}" "[" "]" "(" ")"
- "#" "+" "-" "." "!" "|"))))
- nil t)
- (replace-match (rx (backref 1))))
-
- ;; markdown-mode v2.3 does not yet provide gfm-view-mode
- (if (fboundp 'gfm-view-mode)
- (let ((view-inhibit-help-message t))
- (gfm-view-mode))
- (gfm-mode))
-
- (lsp--setup-markdown lsp-buffer-major-mode)))
-
-(defvar lsp--display-inline-image-alist
- '((lsp--render-markdown
- (:regexp
- "!\\[.*?\\](data:image/[a-zA-Z]+;base64,\\([A-Za-z0-9+/\n]+?=*?\\)\\(|[^)]+\\)?)"
- :sexp
- (create-image
- (base64-decode-string
- (buffer-substring-no-properties (match-beginning 1) (match-end 1)))
- nil t))))
- "Replaced string regexp and function returning image.
-Each element should have the form (MODE . (PROPERTY-LIST...)).
-MODE (car) is function which is defined in `lsp-language-id-configuration'.
-Cdr should be list of PROPERTY-LIST.
-
-Each PROPERTY-LIST should have properties:
-:regexp Regexp which determines what string is relpaced to image.
- You should also get information of image, by parenthesis constructs.
- By default, all matched string is replaced to image, but you can
- change index of replaced string by keyword :replaced-index.
-
-:sexp Return image when evaluated. You can use information of regexp
- by using (match-beggining N), (match-end N) or (match-substring N).
-
-In addition, each can have property:
-:replaced-index Determine index which is used to replace regexp to image.
- The value means first argument of `match-beginning' and
- `match-end'. If omitted, interpreted as index 0.")
-
-(defcustom lsp-display-inline-image t
- "Showing inline image or not."
- :group 'lsp-mode
- :type 'boolean)
-
-(defun lsp--display-inline-image (mode)
- "Add image property if available."
- (let ((plist-list (cdr (assq mode lsp--display-inline-image-alist))))
- (when (and (display-images-p) lsp-display-inline-image)
- (cl-loop
- for plist in plist-list
- with regexp with replaced-index
- do
- (setq regexp (plist-get plist :regexp))
- (setq replaced-index (or (plist-get plist :replaced-index) 0))
-
- (font-lock-remove-keywords nil (list regexp replaced-index))
- (let ((inhibit-read-only t))
- (save-excursion
- (goto-char (point-min))
- (while (re-search-forward regexp nil t)
- (set-text-properties
- (match-beginning replaced-index) (match-end replaced-index)
- nil)
- (add-text-properties
- (match-beginning replaced-index) (match-end replaced-index)
- `(display ,(eval (plist-get plist :sexp)))))))))))
-
-(defun lsp--fontlock-with-mode (str mode)
- "Fontlock STR with MODE."
- (let ((lsp-buffer-major-mode major-mode))
- (condition-case nil
- (with-temp-buffer
- (insert str)
- (delay-mode-hooks (funcall mode))
- (cl-flet ((window-body-width () lsp-window-body-width))
- ;; This can go wrong in some cases, and the fontification would
- ;; not work as expected.
- ;;
- ;; See #2984
- (ignore-errors (font-lock-ensure))
- (lsp--display-inline-image mode))
- (lsp--buffer-string-visible))
- (error str))))
-
-(defun lsp--render-string (str language)
- "Render STR using `major-mode' corresponding to LANGUAGE.
-When language is nil render as markup if `markdown-mode' is loaded."
- (setq str (s-replace "\r" "" (or str "")))
- (if-let ((mode (-some (-lambda ((mode . lang))
- (when (and (equal lang language) (functionp mode))
- mode))
- lsp-language-id-configuration)))
- (lsp--fontlock-with-mode str mode)
- str))
-
-(defun lsp--render-element (content)
- "Render CONTENT element."
- (let ((inhibit-message t))
- (or
- (pcase content
- ((MarkedString :value :language)
- (lsp--render-string value language))
- ((MarkupContent :value :kind)
- (lsp--render-string value kind))
- ;; plain string
- ((pred stringp) (lsp--render-string content "markdown"))
- ((pred null) "")
- (_ (error "Failed to handle %s" content)))
- "")))
-
-(defun lsp--create-unique-string-fn ()
- (let (elements)
- (lambda (element)
- (let ((count (cl-count element elements :test #'string=)))
- (prog1 (if (zerop count)
- element
- (format "%s (%s)" element count))
- (push element elements))))))
-
-(defun lsp--select-action (actions)
- "Select an action to execute from ACTIONS."
- (cond
- ((seq-empty-p actions) (signal 'lsp-no-code-actions nil))
- ((and (eq (seq-length actions) 1) lsp-auto-execute-action)
- (lsp-seq-first actions))
- (t (let ((completion-ignore-case t))
- (lsp--completing-read "Select code action: "
- (seq-into actions 'list)
- (-compose (lsp--create-unique-string-fn)
- #'lsp:code-action-title)
- nil t)))))
-
-(defun lsp--workspace-server-id (workspace)
- "Return the server ID of WORKSPACE."
- (-> workspace lsp--workspace-client lsp--client-server-id))
-
-(defun lsp--handle-rendered-for-echo-area (contents)
- "Return a single line from RENDERED, appropriate for display in the echo area."
- (pcase (lsp-workspaces)
- (`(,workspace)
- (lsp-clients-extract-signature-on-hover contents (lsp--workspace-server-id workspace)))
- ;; For projects with multiple active workspaces we also default to
- ;; render the first line.
- (_ (lsp-clients-extract-signature-on-hover contents nil))))
-
-(cl-defgeneric lsp-clients-extract-signature-on-hover (contents _server-id)
- "Extract a representative line from CONTENTS, to show in the echo area."
- (car (s-lines (s-trim (lsp--render-element contents)))))
-
-(defun lsp--render-on-hover-content (contents render-all)
- "Render the content received from 'document/onHover' request.
-CONTENTS - MarkedString | MarkedString[] | MarkupContent
-RENDER-ALL - nil if only the signature should be rendered."
- (cond
- ((lsp-markup-content? contents)
- ;; MarkupContent.
- ;; It tends to be long and is not suitable to display fully in the echo area.
- ;; Just display the first line which is typically the signature.
- (if render-all
- (lsp--render-element contents)
- (lsp--handle-rendered-for-echo-area contents)))
- ((and (stringp contents) (not (string-match-p "\n" contents)))
- ;; If the contents is a single string containing a single line,
- ;; render it always.
- (lsp--render-element contents))
- (t
- ;; MarkedString -> MarkedString[]
- (when (or (lsp-marked-string? contents) (stringp contents))
- (setq contents (list contents)))
- ;; Consider the signature consisting of the elements who have a renderable
- ;; "language" property. When render-all is nil, ignore other elements.
- (string-join
- (seq-map
- #'lsp--render-element
- (if render-all
- contents
- ;; Only render contents that have an available renderer.
- (seq-filter
- (-andfn #'lsp-marked-string?
- (-compose #'lsp-get-renderer #'lsp:marked-string-language))
- contents)))
- (if (bound-and-true-p page-break-lines-mode)
- "\n \n"
- "\n")))))
-
-
-
-(defvar lsp-signature-mode-map
- (-doto (make-sparse-keymap)
- (define-key (kbd "M-n") #'lsp-signature-next)
- (define-key (kbd "M-p") #'lsp-signature-previous)
- (define-key (kbd "M-a") #'lsp-signature-toggle-full-docs)
- (define-key (kbd "C-c C-k") #'lsp-signature-stop)
- (define-key (kbd "C-g") #'lsp-signature-stop))
- "Keymap for `lsp-signature-mode-map'.")
-
-(define-minor-mode lsp-signature-mode
- "Mode used to show signature popup."
- :keymap lsp-signature-mode-map
- :lighter ""
- :group 'lsp-mode)
-
-(defun lsp-signature-stop ()
- "Stop showing current signature help."
- (interactive)
- (lsp-cancel-request-by-token :signature)
- (remove-hook 'post-command-hook #'lsp-signature)
- (funcall lsp-signature-function nil)
- (lsp-signature-mode -1))
-
-(defun lsp-lv-message (message)
- (if message
- (progn
- (setq lsp--signature-last-buffer (current-buffer))
- (let ((lv-force-update t))
- (lv-message "%s" message)))
- (lv-delete-window)))
-
-(declare-function posframe-show "ext:posframe")
-(declare-function posframe-hide "ext:posframe")
-(declare-function posframe-poshandler-point-bottom-left-corner-upward "ext:posframe")
-
-(defface lsp-signature-posframe
- '((t :inherit tooltip))
- "Background and foreground for `lsp-signature-posframe'."
- :group 'lsp-mode)
-
-(defvar lsp-signature-posframe-params
- (list :poshandler #'posframe-poshandler-point-bottom-left-corner-upward
- :height 6
- :width 60
- :border-width 10
- :min-width 60)
- "Params for signature and `posframe-show'.")
-
-(defun lsp-signature-posframe (str)
- "Use posframe to show the STR signatureHelp string."
- (if str
- (apply #'posframe-show
- (with-current-buffer (get-buffer-create "*lsp-signature*")
- (erase-buffer)
- (insert str)
- (visual-line-mode 1)
- (current-buffer))
- (append lsp-signature-posframe-params
- (list
- :position (point)
- :background-color (face-attribute 'lsp-signature-posframe :background nil t)
- :foreground-color (face-attribute 'lsp-signature-posframe :foreground nil t)
- :border-color (face-attribute 'lsp-signature-posframe :background nil t))))
- (posframe-hide "*lsp-signature*")))
-
-(defun lsp--handle-signature-update (signature)
- (let ((message
- (if (lsp-signature-help? signature)
- (lsp--signature->message signature)
- (mapconcat #'lsp--signature->message signature "\n"))))
- (if (s-present? message)
- (funcall lsp-signature-function message)
- (lsp-signature-stop))))
-
-(defun lsp-signature-activate ()
- "Activate signature help.
-It will show up only if current point has signature help."
- (interactive)
- (setq lsp--signature-last nil
- lsp--signature-last-index nil
- lsp--signature-last-buffer (current-buffer))
- (add-hook 'post-command-hook #'lsp-signature)
- (lsp-signature-mode t))
-
-(defcustom lsp-signature-cycle t
- "Whether `lsp-signature-next' and prev should cycle."
- :type 'boolean
- :group 'lsp-mode)
-
-(defun lsp-signature-next ()
- "Show next signature."
- (interactive)
- (let ((nsigs (length (lsp:signature-help-signatures lsp--signature-last))))
- (when (and lsp--signature-last-index
- lsp--signature-last
- (or lsp-signature-cycle (< (1+ lsp--signature-last-index) nsigs)))
- (setq lsp--signature-last-index (% (1+ lsp--signature-last-index) nsigs))
- (funcall lsp-signature-function (lsp--signature->message lsp--signature-last)))))
-
-(defun lsp-signature-previous ()
- "Next signature."
- (interactive)
- (when (and lsp--signature-last-index
- lsp--signature-last
- (or lsp-signature-cycle (not (zerop lsp--signature-last-index))))
- (setq lsp--signature-last-index (1- (if (zerop lsp--signature-last-index)
- (length (lsp:signature-help-signatures lsp--signature-last))
- lsp--signature-last-index)))
- (funcall lsp-signature-function (lsp--signature->message lsp--signature-last))))
-
-(defun lsp-signature-toggle-full-docs ()
- "Toggle full/partial signature documentation."
- (interactive)
- (let ((all? (not (numberp lsp-signature-doc-lines))))
- (setq lsp-signature-doc-lines (if all?
- (or (car-safe lsp-signature-doc-lines)
- 20)
- (list lsp-signature-doc-lines))))
- (lsp-signature-activate))
-
-(defun lsp--signature->message (signature-help)
- "Generate eldoc message from SIGNATURE-HELP response."
- (setq lsp--signature-last signature-help)
-
- (when (and signature-help (not (seq-empty-p (lsp:signature-help-signatures signature-help))))
- (-let* (((&SignatureHelp :active-signature?
- :active-parameter?
- :signatures) signature-help)
- (active-signature? (or lsp--signature-last-index active-signature? 0))
- (_ (setq lsp--signature-last-index active-signature?))
- ((signature &as &SignatureInformation? :label :parameters?) (seq-elt signatures active-signature?))
- (prefix (if (= (length signatures) 1)
- ""
- (concat (propertize (format " %s/%s"
- (1+ active-signature?)
- (length signatures))
- 'face 'success)
- " ")))
- (method-docs (when
- (and lsp-signature-render-documentation
- (or (not (numberp lsp-signature-doc-lines)) (< 0 lsp-signature-doc-lines)))
- (let ((docs (lsp--render-element
- (lsp:parameter-information-documentation? signature))))
- (when (s-present? docs)
- (concat
- "\n"
- (if (and (numberp lsp-signature-doc-lines)
- (> (length (s-lines docs)) lsp-signature-doc-lines))
- (concat (s-join "\n" (-take lsp-signature-doc-lines (s-lines docs)))
- (propertize "\nTruncated..." 'face 'highlight))
- docs)))))))
- (when (and active-parameter? (not (seq-empty-p parameters?)))
- (-when-let* ((param (when (and (< -1 active-parameter? (length parameters?)))
- (seq-elt parameters? active-parameter?)))
- (selected-param-label (let ((label (lsp:parameter-information-label param)))
- (if (stringp label) label (append label nil))))
- (start (if (stringp selected-param-label)
- (s-index-of selected-param-label label)
- (cl-first selected-param-label)))
- (end (if (stringp selected-param-label)
- (+ start (length selected-param-label))
- (cl-second selected-param-label))))
- (add-face-text-property start end 'eldoc-highlight-function-argument nil label)))
- (concat prefix label method-docs))))
-
-(defun lsp-signature ()
- "Display signature info (based on `textDocument/signatureHelp')"
- (if (and lsp--signature-last-buffer
- (not (equal (current-buffer) lsp--signature-last-buffer)))
- (lsp-signature-stop)
- (lsp-request-async "textDocument/signatureHelp"
- (lsp--text-document-position-params)
- #'lsp--handle-signature-update
- :cancel-token :signature)))
-
-
-(defcustom lsp-overlay-document-color-char "â– "
- "Display the char represent the document color in overlay"
- :type 'string
- :group 'lsp-mode)
-
-;; color presentation
-(defun lsp--color-create-interactive-command (color range)
- (lambda ()
- (interactive)
- (-let [(&ColorPresentation? :text-edit?
- :additional-text-edits?)
- (lsp--completing-read
- "Select color presentation: "
- (lsp-request
- "textDocument/colorPresentation"
- `( :textDocument ,(lsp--text-document-identifier)
- :color ,color
- :range ,range))
- #'lsp:color-presentation-label
- nil
- t)]
- (when text-edit?
- (lsp--apply-text-edit text-edit?))
- (when additional-text-edits?
- (lsp--apply-text-edits additional-text-edits? 'color-presentation)))))
-
-(defun lsp--number->color (number)
- (let ((result (format "%x"
- (round (* (or number 0) 255.0)))))
- (if (= 1 (length result))
- (concat "0" result)
- result)))
-
-(defun lsp--document-color ()
- "Document color handler."
- (when (lsp-feature? "textDocument/documentColor")
- (lsp-request-async
- "textDocument/documentColor"
- `(:textDocument ,(lsp--text-document-identifier))
- (lambda (result)
- (lsp--remove-overlays 'lsp-color)
- (seq-do
- (-lambda ((&ColorInformation :color (color &as &Color :red :green :blue)
- :range))
- (-let* (((beg . end) (lsp--range-to-region range))
- (overlay (make-overlay beg end))
- (command (lsp--color-create-interactive-command color range)))
- (overlay-put overlay 'lsp-color t)
- (overlay-put overlay 'evaporate t)
- (overlay-put overlay
- 'before-string
- (propertize
- lsp-overlay-document-color-char
- 'face `((:foreground ,(format
- "#%s%s%s"
- (lsp--number->color red)
- (lsp--number->color green)
- (lsp--number->color blue))))
- 'action command
- 'mouse-face 'lsp-lens-mouse-face
- 'local-map (-doto (make-sparse-keymap)
- (define-key [mouse-1] command))))))
- result))
- :mode 'unchanged
- :cancel-token :document-color-token)))
-
-
-;; hover
-
-(defvar-local lsp--hover-saved-bounds nil)
-
-(defun lsp-hover ()
- "Display hover info (based on `textDocument/signatureHelp')."
- (if (and lsp--hover-saved-bounds
- (lsp--point-in-bounds-p lsp--hover-saved-bounds))
- (lsp--eldoc-message lsp--eldoc-saved-message)
- (setq lsp--hover-saved-bounds nil
- lsp--eldoc-saved-message nil)
- (if (looking-at "[[:space:]\n]")
- (lsp--eldoc-message nil)
- (when (and lsp-eldoc-enable-hover (lsp--capability :hoverProvider))
- (lsp-request-async
- "textDocument/hover"
- (lsp--text-document-position-params)
- (-lambda ((hover &as &Hover? :range? :contents))
- (when hover
- (when range?
- (setq lsp--hover-saved-bounds (lsp--range-to-region range?)))
- (lsp--eldoc-message (and contents
- (lsp--render-on-hover-content
- contents
- lsp-eldoc-render-all)))))
- :error-handler #'ignore
- :mode 'tick
- :cancel-token :eldoc-hover)))))
-
-
-
-(defun lsp--action-trigger-parameter-hints (_command)
- "Handler for editor.action.triggerParameterHints."
- (when (member :on-server-request lsp-signature-auto-activate)
- (lsp-signature-activate)))
-
-(defun lsp--action-trigger-suggest (_command)
- "Handler for editor.action.triggerSuggest."
- (cond
- ((and (bound-and-true-p company-mode)
- (fboundp 'company-auto-begin)
- (fboundp 'company-post-command))
- (run-at-time 0 nil
- (lambda ()
- (let ((this-command 'company-idle-begin)
- (company-minimum-prefix-length 0))
- (company-auto-begin)
- (company-post-command)))))
- (t
- (completion-at-point))))
-
-(defconst lsp--default-action-handlers
- (ht ("editor.action.triggerParameterHints" #'lsp--action-trigger-parameter-hints)
- ("editor.action.triggerSuggest" #'lsp--action-trigger-suggest))
- "Default action handlers.")
-
-(defun lsp--find-action-handler (command)
- "Find action handler for particular COMMAND."
- (or
- (--some (-some->> it
- (lsp--workspace-client)
- (lsp--client-action-handlers)
- (gethash command))
- (lsp-workspaces))
- (gethash command lsp--default-action-handlers)))
-
-(defun lsp--text-document-code-action-params (&optional kind)
- "Code action params."
- (list :textDocument (lsp--text-document-identifier)
- :range (if (use-region-p)
- (lsp--region-to-range (region-beginning) (region-end))
- (lsp--region-to-range (point) (point)))
- :context `( :diagnostics ,(lsp-cur-line-diagnostics)
- ,@(when kind (list :only (vector kind))))))
-
-(defun lsp-code-actions-at-point (&optional kind)
- "Retrieve the code actions for the active region or the current line.
-It will filter by KIND if non nil."
- (lsp-request "textDocument/codeAction" (lsp--text-document-code-action-params kind)))
-
-(defun lsp-execute-code-action-by-kind (command-kind)
- "Execute code action by COMMAND-KIND."
- (if-let ((action (->> (lsp-get-or-calculate-code-actions command-kind)
- (-filter (-lambda ((&CodeAction :kind?))
- (and kind? (equal command-kind kind?))))
- lsp--select-action)))
- (lsp-execute-code-action action)
- (signal 'lsp-no-code-actions '(command-kind))))
-
-(defalias 'lsp-get-or-calculate-code-actions 'lsp-code-actions-at-point)
-
-(lsp-defun lsp--execute-command ((action &as &Command :command :arguments?))
- "Parse and execute a code ACTION represented as a Command LSP type."
- (let ((server-id (->> (lsp-workspaces)
- (cl-first)
- (or lsp--cur-workspace)
- (lsp--workspace-client)
- (lsp--client-server-id))))
- (condition-case nil
- (with-no-warnings
- (lsp-execute-command server-id (intern command) arguments?))
- (cl-no-applicable-method
- (if-let ((action-handler (lsp--find-action-handler command)))
- (funcall action-handler action)
- (lsp-send-execute-command command arguments?))))))
-
-(lsp-defun lsp-execute-code-action ((action &as &CodeAction :command? :edit?))
- "Execute code action ACTION.
-If ACTION is not set it will be selected from `lsp-code-actions-at-point'.
-Request codeAction/resolve for more info if server supports."
- (interactive (list (lsp--select-action (lsp-code-actions-at-point))))
- (if (and (lsp-feature? "codeAction/resolve")
- (not command?)
- (not edit?))
- (lsp--execute-code-action (lsp-request "codeAction/resolve" action))
- (lsp--execute-code-action action)))
-
-(lsp-defun lsp--execute-code-action ((action &as &CodeAction :command? :edit?))
- "Execute code action ACTION."
- (when edit?
- (lsp--apply-workspace-edit edit? 'code-action))
-
- (cond
- ((stringp command?) (lsp--execute-command action))
- ((lsp-command? command?) (lsp--execute-command command?))))
-
-(defvar lsp--formatting-indent-alist
- ;; Taken from `dtrt-indent-mode'
- '((c-mode . c-basic-offset) ; C
- (c++-mode . c-basic-offset) ; C++
- (d-mode . c-basic-offset) ; D
- (java-mode . c-basic-offset) ; Java
- (jde-mode . c-basic-offset) ; Java (JDE)
- (js-mode . js-indent-level) ; JavaScript
- (js2-mode . js2-basic-offset) ; JavaScript-IDE
- (js3-mode . js3-indent-level) ; JavaScript-IDE
- (json-mode . js-indent-level) ; JSON
- (lua-mode . lua-indent-level) ; Lua
- (objc-mode . c-basic-offset) ; Objective C
- (php-mode . c-basic-offset) ; PHP
- (perl-mode . perl-indent-level) ; Perl
- (cperl-mode . cperl-indent-level) ; Perl
- (raku-mode . raku-indent-offset) ; Perl6/Raku
- (erlang-mode . erlang-indent-level) ; Erlang
- (ada-mode . ada-indent) ; Ada
- (sgml-mode . sgml-basic-offset) ; SGML
- (nxml-mode . nxml-child-indent) ; XML
- (pascal-mode . pascal-indent-level) ; Pascal
- (typescript-mode . typescript-indent-level) ; Typescript
- (sh-mode . sh-basic-offset) ; Shell Script
- (ruby-mode . ruby-indent-level) ; Ruby
- (enh-ruby-mode . enh-ruby-indent-level) ; Ruby
- (crystal-mode . crystal-indent-level) ; Crystal (Ruby)
- (css-mode . css-indent-offset) ; CSS
- (rust-mode . rust-indent-offset) ; Rust
- (rustic-mode . rustic-indent-offset) ; Rust
- (scala-mode . scala-indent:step) ; Scala
- (powershell-mode . powershell-indent) ; PowerShell
- (ess-mode . ess-indent-offset) ; ESS (R)
- (yaml-mode . yaml-indent-offset) ; YAML
- (hack-mode . hack-indent-offset) ; Hack
-
- (default . standard-indent)) ; default fallback
- "A mapping from `major-mode' to its indent variable.")
-
-(defun lsp--get-indent-width (mode)
- "Get indentation offset for MODE."
- (or (alist-get mode lsp--formatting-indent-alist)
- (lsp--get-indent-width (or (get mode 'derived-mode-parent) 'default))))
-
-(defun lsp--make-document-formatting-params ()
- "Create document formatting params."
- (lsp-make-document-formatting-params
- :text-document (lsp--text-document-identifier)
- :options (lsp-make-formatting-options
- :tab-size (symbol-value (lsp--get-indent-width major-mode))
- :insert-spaces (if indent-tabs-mode :json-false t))))
-
-(defun lsp-format-buffer ()
- "Ask the server to format this document."
- (interactive "*")
- (cond ((lsp-feature? "textDocument/formatting")
- (let ((edits (lsp-request "textDocument/formatting"
- (lsp--make-document-formatting-params))))
- (if (seq-empty-p edits)
- (lsp--info "No formatting changes provided")
- (lsp--apply-text-edits edits 'format))))
- ((lsp-feature? "textDocument/rangeFormatting")
- (save-restriction
- (widen)
- (lsp-format-region (point-min) (point-max))))
- (t (signal 'lsp-capability-not-supported (list "documentFormattingProvider")))))
-
-(defun lsp-format-region (s e)
- "Ask the server to format the region, or if none is selected, the current line."
- (interactive "r")
- (let ((edits (lsp-request
- "textDocument/rangeFormatting"
- (lsp--make-document-range-formatting-params s e))))
- (if (seq-empty-p edits)
- (lsp--info "No formatting changes provided")
- (lsp--apply-text-edits edits 'format))))
-
-(defmacro lsp-make-interactive-code-action (func-name code-action-kind)
- "Define an interactive function FUNC-NAME that attempts to
-execute a CODE-ACTION-KIND action."
- `(defun ,(intern (concat "lsp-" (symbol-name func-name))) ()
- ,(format "Perform the %s code action, if available." code-action-kind)
- (interactive)
- (condition-case nil
- (lsp-execute-code-action-by-kind ,code-action-kind)
- (lsp-no-code-actions
- (when (called-interactively-p 'any)
- (lsp--info ,(format "%s action not available" code-action-kind)))))))
-
-(lsp-make-interactive-code-action organize-imports "source.organizeImports")
-
-(defun lsp--make-document-range-formatting-params (start end)
- "Make DocumentRangeFormattingParams for selected region."
- (lsp:set-document-range-formatting-params-range (lsp--make-document-formatting-params)
- (lsp--region-to-range start end)))
-
-(defconst lsp--highlight-kind-face
- '((1 . lsp-face-highlight-textual)
- (2 . lsp-face-highlight-read)
- (3 . lsp-face-highlight-write)))
-
-(defun lsp--remove-overlays (name)
- (save-restriction
- (widen)
- (remove-overlays (point-min) (point-max) name t)))
-
-(defun lsp-document-highlight ()
- "Highlight all relevant references to the symbol under point."
- (interactive)
- (lsp--remove-overlays 'lsp-highlight) ;; clear any previous highlights
- (setq lsp--have-document-highlights nil
- lsp--symbol-bounds-of-last-highlight-invocation nil)
- (let ((lsp-enable-symbol-highlighting t))
- (lsp--document-highlight)))
-
-(defun lsp--document-highlight-callback (highlights)
- "Create a callback to process the reply of a
-'textDocument/documentHighlight' message for the buffer BUF.
-A reference is highlighted only if it is visible in a window."
- (lsp--remove-overlays 'lsp-highlight)
-
- (let* ((wins-visible-pos (-map (lambda (win)
- (cons (1- (line-number-at-pos (window-start win) t))
- (1+ (line-number-at-pos (window-end win) t))))
- (get-buffer-window-list nil nil 'visible))))
- (setq lsp--have-document-highlights t)
- (-map
- (-lambda ((&DocumentHighlight :range (&Range :start (start &as &Position :line start-line)
- :end (end &as &Position :line end-line))
- :kind?))
- (-map
- (-lambda ((start-window . end-window))
- ;; Make the overlay only if the reference is visible
- (let ((start-point (lsp--position-to-point start))
- (end-point (lsp--position-to-point end)))
- (when (and (> (1+ start-line) start-window)
- (< (1+ end-line) end-window)
- (not (and lsp-symbol-highlighting-skip-current
- (<= start-point (point) end-point))))
- (-doto (make-overlay start-point end-point)
- (overlay-put 'face (cdr (assq (or kind? 1) lsp--highlight-kind-face)))
- (overlay-put 'lsp-highlight t)))))
- wins-visible-pos))
- highlights)))
-
-(defcustom lsp-symbol-kinds
- '((1 . "File")
- (2 . "Module")
- (3 . "Namespace")
- (4 . "Package")
- (5 . "Class")
- (6 . "Method")
- (7 . "Property")
- (8 . "Field")
- (9 . "Constructor")
- (10 . "Enum")
- (11 . "Interface")
- (12 . "Function")
- (13 . "Variable")
- (14 . "Constant")
- (15 . "String")
- (16 . "Number")
- (17 . "Boolean")
- (18 . "Array")
- (19 . "Object")
- (20 . "Key")
- (21 . "Null")
- (22 . "Enum Member")
- (23 . "Struct")
- (24 . "Event")
- (25 . "Operator")
- (26 . "Type Parameter"))
- "Alist mapping SymbolKinds to human-readable strings.
-Various Symbol objects in the LSP protocol have an integral type,
-specifying what they are. This alist maps such type integrals to
-readable representations of them. See
-`https://microsoft.github.io/language-server-protocol/specifications/specification-current/',
-namespace SymbolKind."
- :group 'lsp-mode
- :type '(alist :key-type integer :value-type string))
-(defalias 'lsp--symbol-kind 'lsp-symbol-kinds)
-
-(lsp-defun lsp--symbol-information-to-xref
- ((&SymbolInformation :kind :name
- :location (&Location :uri :range (&Range :start
- (&Position :line :character)))))
- "Return a `xref-item' from SYMBOL information."
- (xref-make (format "[%s] %s" (alist-get kind lsp-symbol-kinds) name)
- (xref-make-file-location (lsp--uri-to-path uri)
- line
- character)))
-
-(defun lsp--get-document-symbols ()
- "Get document symbols.
-
-If the buffer has not been modified since symbols were last
-retrieved, simply return the latest result.
-
-Else, if the request was initiated by Imenu updating its menu-bar
-entry, perform it asynchronously; i.e., give Imenu the latest
-result and then force a refresh when a new one is available.
-
-Else (e.g., due to interactive use of `imenu' or `xref'),
-perform the request synchronously."
- (if (= (buffer-chars-modified-tick) lsp--document-symbols-tick)
- lsp--document-symbols
- (let ((method "textDocument/documentSymbol")
- (params `(:textDocument ,(lsp--text-document-identifier)))
- (tick (buffer-chars-modified-tick)))
- (if (not lsp--document-symbols-request-async)
- (prog1
- (setq lsp--document-symbols (lsp-request method params))
- (setq lsp--document-symbols-tick tick))
- (lsp-request-async method params
- (lambda (document-symbols)
- (setq lsp--document-symbols document-symbols
- lsp--document-symbols-tick tick)
- (lsp--imenu-refresh))
- :mode 'alive)
- lsp--document-symbols))))
-
-(advice-add 'imenu-update-menubar :around
- (lambda (oldfun &rest r)
- (let ((lsp--document-symbols-request-async t))
- (apply oldfun r))))
-
-(defun lsp--document-symbols->document-symbols-hierarchy (document-symbols current-position)
- "Convert DOCUMENT-SYMBOLS to symbols hierarchy on CURRENT-POSITION."
- (-let (((symbol &as &DocumentSymbol? :children?)
- (seq-find (-lambda ((&DocumentSymbol :range))
- (lsp-point-in-range? current-position range))
- document-symbols)))
- (if children?
- (cons symbol (lsp--document-symbols->document-symbols-hierarchy children? current-position))
- (when symbol
- (list symbol)))))
-
-(lsp-defun lsp--symbol-information->document-symbol ((&SymbolInformation :name :kind :location :container-name? :deprecated?))
- "Convert a SymbolInformation to a DocumentInformation"
- (lsp-make-document-symbol :name name
- :kind kind
- :range (lsp:location-range location)
- :children? nil
- :deprecated? deprecated?
- :selection-range (lsp:location-range location)
- :detail? container-name?))
-
-(defun lsp--symbols-informations->document-symbols-hierarchy (symbols-informations current-position)
- "Convert SYMBOLS-INFORMATIONS to symbols hierarchy on CURRENT-POSITION."
- (--> symbols-informations
- (-keep (-lambda ((symbol &as &SymbolInformation :location (&Location :range)))
- (when (lsp-point-in-range? current-position range)
- (lsp--symbol-information->document-symbol symbol)))
- it)
- (sort it (-lambda ((&DocumentSymbol :range (&Range :start a-start-position :end a-end-position))
- (&DocumentSymbol :range (&Range :start b-start-position :end b-end-position)))
- (and (lsp--position-compare b-start-position a-start-position)
- (lsp--position-compare a-end-position b-end-position))))))
-
-(defun lsp--symbols->document-symbols-hierarchy (symbols)
- "Convert SYMBOLS to symbols-hierarchy."
- (when-let ((first-symbol (lsp-seq-first symbols)))
- (let ((cur-position (lsp-make-position :line (plist-get (lsp--cur-position) :line)
- :character (plist-get (lsp--cur-position) :character))))
- (if (lsp-symbol-information? first-symbol)
- (lsp--symbols-informations->document-symbols-hierarchy symbols cur-position)
- (lsp--document-symbols->document-symbols-hierarchy symbols cur-position)))))
-
-(defun lsp--xref-backend () 'xref-lsp)
-
-(cl-defmethod xref-backend-identifier-at-point ((_backend (eql xref-lsp)))
- (propertize (or (thing-at-point 'symbol) "")
- 'identifier-at-point t))
-
-(defun lsp--xref-elements-index (symbols path)
- (-mapcat
- (-lambda (sym)
- (pcase-exhaustive sym
- ((DocumentSymbol :name :children? :selection-range (Range :start))
- (cons (cons (concat path name)
- (lsp--position-to-point start))
- (lsp--xref-elements-index children? (concat path name " / "))))
- ((SymbolInformation :name :location (Location :range (Range :start)))
- (list (cons (concat path name)
- (lsp--position-to-point start))))))
- symbols))
-
-(defvar-local lsp--symbols-cache nil)
-
-(cl-defmethod xref-backend-identifier-completion-table ((_backend (eql xref-lsp)))
- (if (lsp--find-workspaces-for "textDocument/documentSymbol")
- (progn
- (setq lsp--symbols-cache (lsp--xref-elements-index
- (lsp--get-document-symbols) nil))
- lsp--symbols-cache)
- (list (propertize (or (thing-at-point 'symbol) "")
- 'identifier-at-point t))))
-
-(cl-defmethod xref-backend-definitions ((_backend (eql xref-lsp)) identifier)
- (save-excursion
- (unless (get-text-property 0 'identifier-at-point identifier)
- (goto-char (cl-rest (or (assoc identifier lsp--symbols-cache)
- (user-error "Unable to find symbol %s in current document" identifier)))))
- (lsp--locations-to-xref-items (lsp-request "textDocument/definition"
- (lsp--text-document-position-params)))))
-
-(cl-defmethod xref-backend-references ((_backend (eql xref-lsp)) identifier)
- (save-excursion
- (unless (get-text-property 0 'identifier-at-point identifier)
- (goto-char (cl-rest (or (assoc identifier lsp--symbols-cache)
- (user-error "Unable to find symbol %s" identifier)))))
- (lsp--locations-to-xref-items (lsp-request "textDocument/references"
- (lsp--make-reference-params)))))
-
-(cl-defmethod xref-backend-apropos ((_backend (eql xref-lsp)) pattern)
- (seq-map #'lsp--symbol-information-to-xref
- (lsp-request "workspace/symbol" `(:query ,pattern))))
-
-(defcustom lsp-rename-use-prepare t
- "Whether `lsp-rename' should do a prepareRename first.
-For some language servers, textDocument/prepareRename might be
-too slow, in which case this variable may be set to nil.
-`lsp-rename' will then use `thing-at-point' `symbol' to determine
-the symbol to rename at point."
- :group 'lsp-mode
- :type 'boolean)
-
-(defun lsp--get-symbol-to-rename ()
- "Get a symbol to rename and placeholder at point.
-Returns a cons ((START . END) . PLACEHOLDER?), and nil if
-renaming is generally supported but cannot be done at point.
-START and END are the bounds of the identifiers being renamed,
-while PLACEHOLDER?, is either nil or a string suggested by the
-language server as the initial input of a new-name prompt."
- (unless (lsp-feature? "textDocument/rename")
- (error "The connected server(s) doesn't support renaming"))
- (if (and lsp-rename-use-prepare (lsp-feature? "textDocument/prepareRename"))
- (when-let ((response
- (lsp-request "textDocument/prepareRename"
- (lsp--text-document-position-params))))
- (let* ((bounds (lsp--range-to-region
- (if (lsp-range? response)
- response
- (lsp:prepare-rename-result-range response))))
- (placeholder
- (and (not (lsp-range? response))
- (lsp:prepare-rename-result-placeholder response))))
- (cons bounds placeholder)))
- (when-let ((bounds (bounds-of-thing-at-point 'symbol)))
- (cons bounds nil))))
-
-(defface lsp-face-rename '((t :underline t))
- "Face used to highlight the identifier being renamed.
-Renaming can be done using `lsp-rename'."
- :group 'lsp-mode)
-
-(defface lsp-rename-placeholder-face '((t :inherit font-lock-variable-name-face))
- "Face used to display the rename placeholder in.
-When calling `lsp-rename' interactively, this will be the face of
-the new name."
- :group 'lsp-mode)
-
-(defvar lsp-rename-history '()
- "History for `lsp--read-rename'.")
-
-(defun lsp--read-rename (at-point)
- "Read a new name for a `lsp-rename' at `point' from the user.
-AT-POINT shall be a structure as returned by
-`lsp--get-symbol-to-rename'.
-
-Returns a string, which should be the new name for the identifier
-at point. If renaming cannot be done at point (as determined from
-AT-POINT), throw a `user-error'.
-
-This function is for use in `lsp-rename' only, and shall not be
-relied upon."
- (unless at-point
- (user-error "`lsp-rename' is invalid here"))
- (-let* ((((start . end) . placeholder?) at-point)
- ;; Do the `buffer-substring' first to not include `lsp-face-rename'
- (rename-me (buffer-substring start end))
- (placeholder (or placeholder? rename-me))
- (placeholder (propertize placeholder 'face 'lsp-rename-placeholder-face))
-
- overlay)
- ;; We need unwind protect, as the user might cancel here, causing the
- ;; overlay to linger.
- (unwind-protect
- (progn
- (setq overlay (make-overlay start end))
- (overlay-put overlay 'face 'lsp-face-rename)
-
- (read-string (format "Rename %s to: " rename-me) placeholder
- 'lsp-rename-history))
- (and overlay (delete-overlay overlay)))))
-
-(defun lsp-rename (newname)
- "Rename the symbol (and all references to it) under point to NEWNAME."
- (interactive (list (lsp--read-rename (lsp--get-symbol-to-rename))))
- (when-let ((edits (lsp-request "textDocument/rename"
- `( :textDocument ,(lsp--text-document-identifier)
- :position ,(lsp--cur-position)
- :newName ,newname))))
- (lsp--apply-workspace-edit edits 'rename)))
-
-(defun lsp-show-xrefs (xrefs display-action references?)
- (unless (region-active-p) (push-mark nil t))
- (if (boundp 'xref-show-definitions-function)
- (with-no-warnings
- (xref-push-marker-stack)
- (funcall (if references? xref-show-xrefs-function xref-show-definitions-function)
- (-const xrefs)
- `((window . ,(selected-window))
- (display-action . ,display-action))))
- (xref--show-xrefs xrefs display-action)))
-
-(cl-defmethod seq-empty-p ((ht hash-table))
- "Function `seq-empty-p' for hash-table."
- (hash-table-empty-p ht))
-
-(cl-defun lsp-find-locations (method &optional extra &key display-action references?)
- "Send request named METHOD and get cross references of the symbol under point.
-EXTRA is a plist of extra parameters.
-REFERENCES? t when METHOD returns references."
- (let ((loc (lsp-request method
- (append (lsp--text-document-position-params) extra))))
- (if (seq-empty-p loc)
- (lsp--error "Not found for: %s" (or (thing-at-point 'symbol t) ""))
- (lsp-show-xrefs (lsp--locations-to-xref-items loc) display-action references?))))
-
-(cl-defun lsp-find-declaration (&key display-action)
- "Find declarations of the symbol under point."
- (interactive)
- (lsp-find-locations "textDocument/declaration" nil :display-action display-action))
-
-(cl-defun lsp-find-definition (&key display-action)
- "Find definitions of the symbol under point."
- (interactive)
- (lsp-find-locations "textDocument/definition" nil :display-action display-action))
-
-(defun lsp-find-definition-mouse (click)
- "Click to start `lsp-find-definition' at clicked point."
- (interactive "e")
- (let* ((ec (event-start click))
- (p1 (posn-point ec))
- (w1 (posn-window ec)))
- (select-window w1)
- (goto-char p1)
- (lsp-find-definition)))
-
-(cl-defun lsp-find-implementation (&key display-action)
- "Find implementations of the symbol under point."
- (interactive)
- (lsp-find-locations "textDocument/implementation" nil :display-action display-action))
-
-(cl-defun lsp-find-references (&optional include-declaration &key display-action)
- "Find references of the symbol under point."
- (interactive "P")
- (lsp-find-locations "textDocument/references"
- (list :context `(:includeDeclaration ,(lsp-json-bool include-declaration)))
- :display-action display-action
- :references? t))
-
-(cl-defun lsp-find-type-definition (&key display-action)
- "Find type definitions of the symbol under point."
- (interactive)
- (lsp-find-locations "textDocument/typeDefinition" nil :display-action display-action))
-
-(defalias 'lsp-find-custom #'lsp-find-locations)
-(defalias 'lsp-goto-implementation #'lsp-find-implementation)
-(defalias 'lsp-goto-type-definition #'lsp-find-type-definition)
-
-(with-eval-after-load 'evil
- (evil-set-command-property 'lsp-find-definition :jump t)
- (evil-set-command-property 'lsp-find-implementation :jump t)
- (evil-set-command-property 'lsp-find-references :jump t)
- (evil-set-command-property 'lsp-find-type-definition :jump t))
-
-(defun lsp--find-workspaces-for (msg-or-method)
- "Find all workspaces in the current project that can handle MSG."
- (let ((method (if (stringp msg-or-method)
- msg-or-method
- (plist-get msg-or-method :method))))
- (-if-let (reqs (cdr (assoc method lsp-method-requirements)))
- (-let (((&plist :capability :check-command) reqs))
- (--filter
- (with-lsp-workspace it
- (or
- (when check-command (funcall check-command it))
- (when capability (lsp--capability capability))
- (lsp--registered-capability method)
- (and (not capability) (not check-command))))
- (lsp-workspaces)))
- (lsp-workspaces))))
-
-(defun lsp-can-execute-command? (command-name)
- "Returns non-nil if current language server(s) can execute COMMAND-NAME.
-The command is executed via `workspace/executeCommand'"
- (cl-position
- command-name
- (lsp:execute-command-options-commands
- (lsp:server-capabilities-execute-command-provider?
- (lsp--server-capabilities)))
- :test #'equal))
-
-(defalias 'lsp-feature? 'lsp--find-workspaces-for)
-
-(cl-defmethod lsp-execute-command (_server _command _arguments)
- "Dispatch COMMAND execution."
- (signal 'cl-no-applicable-method nil))
-
-(defun lsp-workspace-command-execute (command &optional args)
- "Execute workspace COMMAND with ARGS."
- (condition-case-unless-debug err
- (let ((params (if args
- (list :command command :arguments args)
- (list :command command))))
- (lsp-request "workspace/executeCommand" params))
- (error
- (lsp--error "`workspace/executeCommand' with `%s' failed.\n\n%S"
- command err))))
-
-(defun lsp-send-execute-command (command &optional args)
- "Create and send a 'workspace/executeCommand' message having command COMMAND and optional ARGS."
- (lsp-workspace-command-execute command args))
-
-(defalias 'lsp-point-to-position #'lsp--point-to-position)
-(defalias 'lsp-text-document-identifier #'lsp--text-document-identifier)
-(defalias 'lsp--send-execute-command #'lsp-send-execute-command)
-(defalias 'lsp-on-open #'lsp--text-document-did-open)
-(defalias 'lsp-on-save #'lsp--text-document-did-save)
-
-(defun lsp--set-configuration (settings)
- "Set the SETTINGS for the lsp server."
- (lsp-notify "workspace/didChangeConfiguration" `(:settings ,settings)))
-
-(defun lsp-current-buffer ()
- (or lsp--virtual-buffer
- (current-buffer)))
-
-(defun lsp-buffer-live-p (buffer-id)
- (if-let ((buffer-live (plist-get buffer-id :buffer-live?)))
- (funcall buffer-live buffer-id)
- (buffer-live-p buffer-id)))
-
-(defun lsp--on-set-visited-file-name (old-func &rest args)
- "Advice around function `set-visited-file-name'.
-
-This advice sends textDocument/didClose for the old file and
-textDocument/didOpen for the new file."
- (when lsp--cur-workspace
- (lsp--text-document-did-close t))
- (prog1 (apply old-func args)
- (when lsp--cur-workspace
- (lsp--text-document-did-open))))
-
-(advice-add 'set-visited-file-name :around #'lsp--on-set-visited-file-name)
-
-(defvar lsp--flushing-delayed-changes nil)
-
-(defun lsp--send-no-wait (message proc)
- "Send MESSAGE to PROC without waiting for further output."
-
- (unless lsp--flushing-delayed-changes
- (let ((lsp--flushing-delayed-changes t))
- (lsp--flush-delayed-changes)))
-
- (condition-case err
- (process-send-string proc message)
- ('error (lsp--error "Sending to process failed with the following error: %s"
- (error-message-string err)))))
-
-(define-error 'lsp-parse-error
- "Error parsing message from language server" 'lsp-error)
-(define-error 'lsp-unknown-message-type
- "Unknown message type" '(lsp-error lsp-parse-error))
-(define-error 'lsp-unknown-json-rpc-version
- "Unknown JSON-RPC protocol version" '(lsp-error lsp-parse-error))
-(define-error 'lsp-no-content-length
- "Content-Length header missing in message" '(lsp-error lsp-parse-error))
-(define-error 'lsp-invalid-header-name
- "Invalid header name" '(lsp-error lsp-parse-error))
-
-;; id method
-;; x x request
-;; x . response
-;; . x notification
-(defun lsp--get-message-type (json-data)
- "Get the message type from JSON-DATA."
- (if (lsp:json-message-id? json-data)
- (if (lsp:json-message-error? json-data)
- 'response-error
- (if (lsp:json-message-method? json-data)
- 'request
- 'response))
- 'notification))
-
-(defconst lsp--default-notification-handlers
- (ht ("window/showMessage" #'lsp--window-show-message)
- ("window/logMessage" #'lsp--window-log-message)
- ("textDocument/publishDiagnostics" #'lsp--on-diagnostics)
- ("textDocument/diagnosticsEnd" #'ignore)
- ("textDocument/diagnosticsBegin" #'ignore)
- ("telemetry/event" #'ignore)
- ("$/progress" (lambda (workspace params)
- (funcall lsp-progress-function workspace params)))))
-
-(lsp-defun lsp--on-notification (workspace (&JSONNotification :params :method))
- "Call the appropriate handler for NOTIFICATION."
- (-let ((client (lsp--workspace-client workspace)))
- (when lsp-print-io
- (lsp--log-entry-new (lsp--make-log-entry method nil params 'incoming-notif)
- lsp--cur-workspace))
- (if-let ((handler (or (gethash method (lsp--client-notification-handlers client))
- (gethash method lsp--default-notification-handlers))))
- (funcall handler workspace params)
- (when (and method (not (string-prefix-p "$" method)))
- (lsp-warn "Unknown notification: %s" method)))))
-
-(lsp-defun lsp--build-workspace-configuration-response ((&ConfigurationParams :items))
- "Get section configuration.
-PARAMS are the `workspace/configuration' request params"
- (->> items
- (-map (-lambda ((&ConfigurationItem :section?))
- (-let* ((path-parts (split-string section? "\\."))
- (path-without-last (s-join "." (-slice path-parts 0 -1)))
- (path-parts-len (length path-parts)))
- (cond
- ((<= path-parts-len 1)
- (ht-get (lsp-configuration-section section?)
- (car-safe path-parts)
- (ht-create)))
- ((> path-parts-len 1)
- (when-let ((section (lsp-configuration-section path-without-last))
- (keys path-parts))
- (while (and keys section)
- (setf section (ht-get section (pop keys))))
- section))))))
- (apply #'vector)))
-
-(defun lsp--send-request-response (workspace recv-time request response)
- "Send the RESPONSE for REQUEST in WORKSPACE and log if needed."
- (-let* (((&JSONResponse :params :method :id) request)
- (process (lsp--workspace-proc workspace))
- (response (lsp--make-response id response))
- (req-entry (and lsp-print-io
- (lsp--make-log-entry method id params 'incoming-req)))
- (resp-entry (and lsp-print-io
- (lsp--make-log-entry method id response 'outgoing-resp
- (/ (nth 2 (time-since recv-time)) 1000)))))
- ;; Send response to the server.
- (when lsp-print-io
- (lsp--log-entry-new req-entry workspace)
- (lsp--log-entry-new resp-entry workspace))
- (lsp--send-no-wait (lsp--make-message response) process)))
-
-(lsp-defun lsp--on-request (workspace (request &as &JSONRequest :params :method))
- "Call the appropriate handler for REQUEST, and send the return value to the server.
-WORKSPACE is the active workspace."
- (-let* ((recv-time (current-time))
- (client (lsp--workspace-client workspace))
- (buffers (lsp--workspace-buffers workspace))
- handler
- (response (cond
- ((setq handler (gethash method (lsp--client-request-handlers client) nil))
- (funcall handler workspace params))
- ((setq handler (gethash method (lsp--client-async-request-handlers client) nil))
- (funcall handler workspace params
- (-partial #'lsp--send-request-response
- workspace recv-time request))
- 'delay-response)
- ((equal method "client/registerCapability")
- (mapc #'lsp--server-register-capability
- (lsp:registration-params-registrations params))
- (mapc (lambda (buf)
- (when (lsp-buffer-live-p buf)
- (lsp-with-current-buffer buf
- (lsp-unconfig-buffer)
- (lsp-configure-buffer))))
- buffers)
- nil)
- ((equal method "window/showMessageRequest")
- (let ((choice (lsp--window-log-message-request params)))
- `(:title ,choice)))
- ((equal method "client/unregisterCapability")
- (mapc #'lsp--server-unregister-capability
- (lsp:unregistration-params-unregisterations params))
- (mapc (lambda (buf)
- (when (lsp-buffer-live-p buf)
- (lsp-with-current-buffer buf
- (lsp-unconfig-buffer)
- (lsp-configure-buffer))))
- buffers)
- nil)
- ((equal method "workspace/applyEdit")
- (list :applied (condition-case err
- (prog1 t
- (lsp--apply-workspace-edit (lsp:apply-workspace-edit-params-edit params) 'server-requested))
- (error
- (lsp--error "Failed to apply edits with message %s"
- (error-message-string err))
- :json-false))))
- ((equal method "workspace/configuration")
- (with-lsp-workspace workspace
- (if-let ((buf (car buffers)))
- (lsp-with-current-buffer buf
- (lsp--build-workspace-configuration-response params))
- (lsp--with-workspace-temp-buffer (lsp--workspace-root workspace)
- (lsp--build-workspace-configuration-response params)))))
- ((equal method "workspace/workspaceFolders")
- (let ((folders (or (-> workspace
- (lsp--workspace-client)
- (lsp--client-server-id)
- (gethash (lsp-session-server-id->folders (lsp-session))))
- (lsp-session-folders (lsp-session)))))
- (->> folders
- (-distinct)
- (-map (lambda (folder)
- (list :uri (lsp--path-to-uri folder))))
- (apply #'vector))))
- ((equal method "window/workDoneProgress/create")
- nil ;; no specific reply, no processing required
- )
- ((equal method "workspace/semanticTokens/refresh")
- (when (and lsp-semantic-tokens-enable
- (fboundp 'lsp--semantic-tokens-on-refresh))
- (lsp--semantic-tokens-on-refresh))
- nil)
- (t (lsp-warn "Unknown request method: %s" method) nil))))
- ;; Send response to the server.
- (unless (eq response 'delay-response)
- (lsp--send-request-response workspace recv-time request response))))
-
-(lsp-defun lsp--error-string ((&JSONError :message :code))
- "Format ERR as a user friendly string."
- (format "Error from the Language Server: %s (%s)"
- message
- (or (car (alist-get code lsp--errors)) "Unknown error")))
-
-(defun lsp--get-body-length (headers)
- (let ((content-length (cdr (assoc "Content-Length" headers))))
- (if content-length
- (string-to-number content-length)
-
- ;; This usually means either the server or our parser is
- ;; screwed up with a previous Content-Length
- (error "No Content-Length header"))))
-
-(defun lsp--parse-header (s)
- "Parse string S as a LSP (KEY . VAL) header."
- (let ((pos (string-match "\:" s))
- key val)
- (unless pos
- (signal 'lsp-invalid-header-name (list s)))
- (setq key (substring s 0 pos)
- val (s-trim-left (substring s (+ 1 pos))))
- (when (equal key "Content-Length")
- (cl-assert (cl-loop for c across val
- when (or (> c ?9) (< c ?0)) return nil
- finally return t)
- nil (format "Invalid Content-Length value: %s" val)))
- (cons key val)))
-
-(defmacro lsp--read-json (str)
- "Read json string STR."
- (if (progn
- (require 'json)
- (fboundp 'json-parse-string))
- `(json-parse-string ,str
- :object-type (if lsp-use-plists
- 'plist
- 'hash-table)
- :null-object nil
- :false-object nil)
- `(let ((json-array-type 'vector)
- (json-object-type (if lsp-use-plists
- 'plist
- 'hash-table))
- (json-false nil))
- (json-read-from-string ,str))))
-
-(defmacro lsp-json-read-buffer ()
- "Read json from the current buffer."
- (if (progn
- (require 'json)
- (fboundp 'json-parse-string))
- `(json-parse-buffer :object-type (if lsp-use-plists
- 'plist
- 'hash-table)
- :null-object nil
- :false-object nil)
- `(let ((json-array-type 'vector)
- (json-object-type (if lsp-use-plists
- 'plist
- 'hash-table))
- (json-false nil))
- (json-read))))
-
-(defun lsp--read-json-file (file-path)
- "Read json file."
- (-> file-path
- (f-read-text)
- (lsp--read-json)))
-
-(defun lsp--parser-on-message (json-data workspace)
- "Called when the parser P read a complete MSG from the server."
- (with-demoted-errors "Error processing message %S."
- (with-lsp-workspace workspace
- (let* ((client (lsp--workspace-client workspace))
- (id (--when-let (lsp:json-response-id json-data)
- (if (stringp it) (string-to-number it) it)))
- (data (lsp:json-response-result json-data)))
- (pcase (lsp--get-message-type json-data)
- ('response
- (cl-assert id)
- (-let [(callback _ method _ before-send) (gethash id (lsp--client-response-handlers client))]
- (when lsp-print-io
- (lsp--log-entry-new
- (lsp--make-log-entry method id data 'incoming-resp
- (/ (nth 2 (time-since before-send)) 1000))
- workspace))
- (when callback
- (funcall callback (lsp:json-response-result json-data))
- (remhash id (lsp--client-response-handlers client)))))
- ('response-error
- (cl-assert id)
- (-let [(_ callback method _ before-send) (gethash id (lsp--client-response-handlers client))]
- (when lsp-print-io
- (lsp--log-entry-new
- (lsp--make-log-entry method id (lsp:json-response-error-error json-data)
- 'incoming-resp (/ (nth 2 (time-since before-send)) 1000))
- workspace))
- (when callback
- (funcall callback (lsp:json-response-error-error json-data))
- (remhash id (lsp--client-response-handlers client)))))
- ('notification
- (lsp--on-notification workspace json-data))
- ('request (lsp--on-request workspace json-data)))))))
-
-(defvar lsp-parsed-message nil
- "This will store the string representation of the json message.
-
-In some cases like #1807 we lose information during json
-deserialization.")
-
-(defun lsp--create-filter-function (workspace)
- "Make filter for the workspace."
- (let ((body-received 0)
- leftovers body-length body chunk)
- (lambda (_proc input)
- (setf chunk (if (s-blank? leftovers)
- input
- (concat leftovers input)))
-
- (let (messages)
- (while (not (s-blank? chunk))
- (if (not body-length)
- ;; Read headers
- (if-let ((body-sep-pos (string-match-p "\r\n\r\n" chunk)))
- ;; We've got all the headers, handle them all at once:
- (setf body-length (lsp--get-body-length
- (mapcar #'lsp--parse-header
- (split-string
- (substring-no-properties chunk
- (or (string-match-p "Content-Length" chunk)
- (error "Unable to find Content-Length header."))
- body-sep-pos)
- "\r\n")))
- body-received 0
- leftovers nil
- chunk (substring-no-properties chunk (+ body-sep-pos 4)))
-
- ;; Haven't found the end of the headers yet. Save everything
- ;; for when the next chunk arrives and await further input.
- (setf leftovers chunk
- chunk nil))
- (let* ((chunk-length (string-bytes chunk))
- (left-to-receive (- body-length body-received))
- (this-body (if (< left-to-receive chunk-length)
- (prog1 (substring-no-properties chunk 0 left-to-receive)
- (setf chunk (substring-no-properties chunk left-to-receive)))
- (prog1 chunk
- (setf chunk nil))))
- (body-bytes (string-bytes this-body)))
- (push this-body body)
- (setf body-received (+ body-received body-bytes))
- (when (>= chunk-length left-to-receive)
- (condition-case err
- (with-temp-buffer
- (apply #'insert
- (nreverse
- (prog1 body
- (setf leftovers nil
- body-length nil
- body-received nil
- body nil))))
- (decode-coding-region (point-min)
- (point-max)
- 'utf-8)
- (goto-char (point-min))
- (push (lsp-json-read-buffer) messages))
-
- (error
- (lsp-warn "Failed to parse the following chunk:\n'''\n%s\n'''\nwith message %s"
- (concat leftovers input)
- err)))))))
- (mapc (lambda (msg)
- (lsp--parser-on-message msg workspace))
- (nreverse messages))))))
-
-(defvar-local lsp--line-col-to-point-hash-table nil
- "Hash table with keys (line . col) and values that are either point positions
-or markers.")
-
-(defcustom lsp-imenu-detailed-outline t
- "Whether `lsp-imenu' should include signatures.
-This will be ignored if the server doesn't provide the necessary
-information, for example if it doesn't support DocumentSymbols."
- :group 'lsp-imenu
- :type 'boolean)
-
-(defface lsp-details-face '((t :height 0.8 :inherit shadow))
- "Used to display additional information troughout `lsp'.
-Things like line numbers, signatures, ... are considered
-additional information. Often, additional faces are defined that
-inherit from this face by default, like `lsp-signature-face', and
-they may be customized for finer control."
- :group 'lsp-mode)
-
-(defface lsp-signature-face '((t :inherit lsp-details-face))
- "Used to display signatures in `imenu', ...."
- :group 'lsp-mode)
-
-(lsp-defun lsp-render-symbol ((&DocumentSymbol :name :detail? :deprecated?)
- show-detail?)
- "Render INPUT0, an `&DocumentSymbol', to a string.
-If SHOW-DETAIL? is set, make use of its `:detail?' field (often
-the signature)."
- (let ((detail (and show-detail? (s-present? detail?)
- (propertize (concat " " (s-trim-left detail?))
- 'face 'lsp-signature-face)))
- (name (if deprecated?
- (propertize name 'face 'lsp-face-semhl-deprecated) name)))
- (concat name detail)))
-
-(lsp-defun lsp-render-symbol-information ((&SymbolInformation :name :deprecated? :container-name?)
- separator)
- "Render a piece of SymbolInformation.
-Handle :deprecated?. If SEPARATOR is non-nil, the
-symbol's (optional) parent, SEPARATOR and the symbol itself are
-concatenated."
- (when (and separator container-name? (not (string-empty-p container-name?)))
- (setq name (concat name separator container-name?)))
- (if deprecated? (propertize name 'face 'lsp-face-semhl-deprecated) name))
-
-(defun lsp--symbol-to-imenu-elem (sym)
- "Convert SYM to imenu element.
-
-SYM is a SymbolInformation message.
-
-Return a cons cell (full-name . start-point)."
- (let ((start-point (ht-get lsp--line-col-to-point-hash-table
- (lsp--get-line-and-col sym))))
- (cons (lsp-render-symbol-information
- sym (and lsp-imenu-show-container-name
- lsp-imenu-container-name-separator))
- start-point)))
-
-(lsp-defun lsp--symbol-to-hierarchical-imenu-elem ((sym &as &DocumentSymbol :children?))
- "Convert SYM to hierarchical imenu elements.
-
-SYM is a DocumentSymbol message.
-
-Return cons cell (\"symbol-name (symbol-kind)\" . start-point) if
-SYM doesn't have any children. Otherwise return a cons cell with
-an alist
-
- (\"symbol-name\" . ((\"(symbol-kind)\" . start-point)
- cons-cells-from-children))"
- (let ((filtered-children (lsp--imenu-filter-symbols children?))
- (signature (lsp-render-symbol sym lsp-imenu-detailed-outline)))
- (if (seq-empty-p filtered-children)
- (cons signature
- (ht-get lsp--line-col-to-point-hash-table
- (lsp--get-line-and-col sym)))
- (cons signature
- (lsp--imenu-create-hierarchical-index filtered-children)))))
-
-(lsp-defun lsp--symbol-ignore ((&SymbolInformation :kind :location))
- "Determine if SYM is for the current document and is to be shown."
- ;; It's a SymbolInformation or DocumentSymbol, which is always in the
- ;; current buffer file.
- (or (and lsp-imenu-index-symbol-kinds
- (numberp kind)
- (let ((clamped-kind (if (< 0 kind (length lsp/symbol-kind-lookup))
- kind
- 0)))
- (not (memql (aref lsp/symbol-kind-lookup clamped-kind)
- lsp-imenu-index-symbol-kinds))))
- (and location
- (not (eq (->> location
- (lsp:location-uri)
- (lsp--uri-to-path)
- (find-buffer-visiting))
- (current-buffer))))))
-
-(lsp-defun lsp--get-symbol-type ((&SymbolInformation :kind))
- "The string name of the kind of SYM."
- (alist-get kind lsp-symbol-kinds "Other"))
-
-(defun lsp--get-line-and-col (sym)
- "Obtain the line and column corresponding to SYM."
- (-let* ((location (lsp:symbol-information-location sym))
- (name-range (or (and location (lsp:location-range location))
- (lsp:document-symbol-selection-range sym)))
- ((&Range :start (&Position :line :character)) name-range))
- (cons line character)))
-
-(defun lsp--collect-lines-and-cols (symbols)
- "Return a sorted list ((line . col) ...) of the locations of SYMBOLS."
- (let ((stack (mapcar 'identity symbols))
- line-col-list)
- (while stack
- (let ((sym (pop stack)))
- (push (lsp--get-line-and-col sym) line-col-list)
- (unless (seq-empty-p (lsp:document-symbol-children? sym))
- (setf stack (nconc (lsp--imenu-filter-symbols (lsp:document-symbol-children? sym)) stack)))))
- (-sort #'lsp--line-col-comparator line-col-list)))
-
-(defun lsp--convert-line-col-to-points-batch (line-col-list)
- "Convert a sorted list of positions from line-column
-representation to point representation."
- (let ((line-col-to-point-map (ht-create))
- (inhibit-field-text-motion t)
- (curr-line 0))
- (lsp-save-restriction-and-excursion
- (goto-char (point-min))
- (cl-loop for (line . col) in line-col-list do
- (forward-line (- line curr-line))
- (setq curr-line line)
- (let ((line-end (line-end-position)))
- (if (or (not col) (> col (- line-end (point))))
- (goto-char line-end)
- (forward-char col)))
- (ht-set! line-col-to-point-map (cons line col) (if imenu-use-markers
- (point-marker)
- (point)))))
- line-col-to-point-map))
-
-(cl-defun lsp--line-col-comparator ((l1 . c1) (l2 . c2))
- (or (< l1 l2)
- (and (= l1 l2)
- (cond ((and c1 c2)
- (< c1 c2))
- (c1 t)))))
-
-(defun lsp-imenu-create-uncategorized-index (symbols)
- "Create imenu index from document SYMBOLS.
-This function, unlike `lsp-imenu-create-categorized-index', does
-not categorize by type, but instead returns an `imenu' index
-corresponding to the symbol hierarchy returned by the server
-directly."
- (let* ((lsp--line-col-to-point-hash-table (-> symbols
- lsp--collect-lines-and-cols
- lsp--convert-line-col-to-points-batch)))
- (if (lsp--imenu-hierarchical-p symbols)
- (lsp--imenu-create-hierarchical-index symbols)
- (lsp--imenu-create-non-hierarchical-index symbols))))
-
-(defcustom lsp-imenu-symbol-kinds
- '((1 . "Files")
- (2 . "Modules")
- (3 . "Namespaces")
- (4 . "Packages")
- (5 . "Classes")
- (6 . "Methods")
- (7 . "Properties")
- (8 . "Fields")
- (9 . "Constructors")
- (10 . "Enums")
- (11 . "Interfaces")
- (12 . "Functions")
- (13 . "Variables")
- (14 . "Constants")
- (15 . "Strings")
- (16 . "Numbers")
- (17 . "Booleans")
- (18 . "Arrays")
- (19 . "Objects")
- (20 . "Keys")
- (21 . "Nulls")
- (22 . "Enum Members")
- (23 . "Structs")
- (24 . "Events")
- (25 . "Operators")
- (26 . "Type Parameters"))
- "`lsp-symbol-kinds', but only used by `imenu'.
-A new variable is needed, as it is `imenu' convention to use
-pluralized categories, which `lsp-symbol-kinds' doesn't. If the
-non-pluralized names are preferred, this can be set to
-`lsp-symbol-kinds'."
- :type '(alist :key-type integer :value-type string))
-
-(defun lsp--imenu-kind->name (kind)
- (alist-get kind lsp-imenu-symbol-kinds "?"))
-
-(defun lsp-imenu-create-top-level-categorized-index (symbols)
- "Create an `imenu' index categorizing SYMBOLS by type.
-Only root symbols are categorized.
-
-See `lsp-symbol-kinds' to customize the category naming. SYMBOLS
-shall be a list of DocumentSymbols or SymbolInformation."
- (mapcan
- (-lambda ((type . symbols))
- (let ((cat (lsp--imenu-kind->name type))
- (symbols (lsp-imenu-create-uncategorized-index symbols)))
- ;; If there is no :kind (this is being defensive), or we couldn't look it
- ;; up, just display the symbols inline, without categories.
- (if cat (list (cons cat symbols)) symbols)))
- (sort (seq-group-by #'lsp:document-symbol-kind symbols)
- (-lambda ((kinda) (kindb)) (< kinda kindb)))))
-
-(lsp-defun lsp--symbol->imenu ((sym &as &DocumentSymbol :selection-range (&RangeToPoint :start)))
- "Convert an `&DocumentSymbol' to an `imenu' entry."
- (cons (lsp-render-symbol sym lsp-imenu-detailed-outline) start))
-
-(defun lsp--imenu-create-categorized-index-1 (symbols)
- "Returns an `imenu' index from SYMBOLS categorized by type.
-The result looks like this: ((\"Variables\" . (...)))."
- (->>
- symbols
- (mapcan
- (-lambda ((sym &as &DocumentSymbol :kind :children?))
- (if (seq-empty-p children?)
- (list (list kind (lsp--symbol->imenu sym)))
- (let ((parent (lsp-render-symbol sym lsp-imenu-detailed-outline)))
- (cons
- (list kind (lsp--symbol->imenu sym))
- (mapcar (-lambda ((type . imenu-items))
- (list type (cons parent (mapcan #'cdr imenu-items))))
- (-group-by #'car (lsp--imenu-create-categorized-index-1 children?))))))))
- (-group-by #'car)
- (mapcar
- (-lambda ((kind . syms))
- (cons kind (mapcan #'cdr syms))))))
-
-(defun lsp--imenu-create-categorized-index (symbols)
- (let ((syms (lsp--imenu-create-categorized-index-1 symbols)))
- (dolist (sym syms)
- (setcar sym (lsp--imenu-kind->name (car sym))))
- syms))
-
-(lsp-defun lsp--symbol-information->imenu ((sym &as &SymbolInformation :location (&Location :range (&RangeToPoint :start))))
- (cons (lsp-render-symbol-information sym nil) start))
-
-(defun lsp--imenu-create-categorized-index-flat (symbols)
- "Create a kind-categorized index for SymbolInformation."
- (mapcar (-lambda ((kind . syms))
- (cons (lsp--imenu-kind->name kind)
- (mapcan (-lambda ((parent . children))
- (let ((children (mapcar #'lsp--symbol-information->imenu children)))
- (if parent (list (cons parent children)) children)))
- (-group-by #'lsp:symbol-information-container-name? syms))))
- (seq-group-by #'lsp:symbol-information-kind symbols)))
-
-(defun lsp-imenu-create-categorized-index (symbols)
- (if (lsp--imenu-hierarchical-p symbols)
- (lsp--imenu-create-categorized-index symbols)
- (lsp--imenu-create-categorized-index-flat symbols)))
-
-(defcustom lsp-imenu-index-function #'lsp-imenu-create-uncategorized-index
- "Function that should create an `imenu' index.
-It will be called with a list of SymbolInformation or
-DocumentSymbols, whose first level is already filtered. It shall
-then return an appropriate `imenu' index (see
-`imenu-create-index-function').
-
-Note that this interface is not stable, and subject to change any
-time."
- :group 'lsp-imenu
- :type '(radio
- (const :tag "Categorize by type"
- lsp-imenu-create-categorized-index)
- (const :tag "Categorize root symbols by type"
- lsp-imenu-create-top-level-categorized-index)
- (const :tag "Uncategorized, inline entries"
- lsp-imenu-create-uncategorized-index)
- (function :tag "Custom function")))
-
-(defun lsp--imenu-create-index ()
- "Create an `imenu' index based on the language server.
-Respects `lsp-imenu-index-function'."
- (let ((symbols (lsp--imenu-filter-symbols (lsp--get-document-symbols))))
- (funcall lsp-imenu-index-function symbols)))
-
-(defun lsp--imenu-filter-symbols (symbols)
- "Filter out unsupported symbols from SYMBOLS."
- (seq-remove #'lsp--symbol-ignore symbols))
-
-(defun lsp--imenu-hierarchical-p (symbols)
- "Determine whether any element in SYMBOLS has children."
- (seq-some #'lsp-document-symbol? symbols))
-
-(defun lsp--imenu-create-non-hierarchical-index (symbols)
- "Create imenu index for non-hierarchical SYMBOLS.
-
-SYMBOLS are a list of DocumentSymbol messages.
-
-Return a nested alist keyed by symbol names. e.g.
-
- ((\"SomeClass\" (\"(Class)\" . 10)
- (\"someField (Field)\" . 20)
- (\"someFunction (Function)\" . 25)
- (\"SomeSubClass\" (\"(Class)\" . 30)
- (\"someSubField (Field)\" . 35))
- (\"someFunction (Function)\" . 40))"
- (seq-map (lambda (nested-alist)
- (cons (car nested-alist)
- (seq-map #'lsp--symbol-to-imenu-elem (cdr nested-alist))))
- (seq-group-by #'lsp--get-symbol-type symbols)))
-
-(defun lsp--imenu-create-hierarchical-index (symbols)
- "Create imenu index for hierarchical SYMBOLS.
-
-SYMBOLS are a list of DocumentSymbol messages.
-
-Return a nested alist keyed by symbol names. e.g.
-
- ((\"SomeClass\" (\"(Class)\" . 10)
- (\"someField (Field)\" . 20)
- (\"someFunction (Function)\" . 25)
- (\"SomeSubClass\" (\"(Class)\" . 30)
- (\"someSubField (Field)\" . 35))
- (\"someFunction (Function)\" . 40))"
- (seq-map #'lsp--symbol-to-hierarchical-imenu-elem
- (seq-sort #'lsp--imenu-symbol-lessp symbols)))
-
-(defun lsp--imenu-symbol-lessp (sym1 sym2)
- (let* ((compare-results (mapcar (lambda (method)
- (funcall (alist-get method lsp--imenu-compare-function-alist)
- sym1 sym2))
- lsp-imenu-sort-methods))
- (result (seq-find (lambda (result)
- (not (= result 0)))
- compare-results
- 0)))
- (and (numberp result) (< result 0))))
-
-(lsp-defun lsp--imenu-compare-kind ((&SymbolInformation :kind left)
- (&SymbolInformation :kind right))
- "Compare SYM1 and SYM2 by kind."
- (- left right))
-
-(defun lsp--imenu-compare-line-col (sym1 sym2)
- (if (lsp--line-col-comparator
- (lsp--get-line-and-col sym1)
- (lsp--get-line-and-col sym2))
- -1
- 1))
-
-(lsp-defun lsp--imenu-compare-name ((&SymbolInformation :name name1)
- (&SymbolInformation :name name2))
- "Compare SYM1 and SYM2 by name."
- (let ((result (compare-strings name1 0 (length name1) name2 0 (length name2))))
- (if (numberp result) result 0)))
-
-(defun lsp--imenu-refresh ()
- "Force Imenu to refresh itself."
- (imenu--menubar-select imenu--rescan-item))
-
-(defun lsp-enable-imenu ()
- "Use lsp-imenu for the current buffer."
- (imenu--cleanup)
- (setq-local imenu-create-index-function #'lsp--imenu-create-index)
- (setq-local imenu-menubar-modified-tick -1)
- (setq-local imenu--index-alist nil)
- (when menu-bar-mode
- (lsp--imenu-refresh)))
-
-(defun lsp-resolve-final-function (command)
- "Resolve final function COMMAND."
- (-let [command (if (functionp command) (funcall command) command)]
- (cl-etypecase command
- (list
- (cl-assert (seq-every-p (apply-partially #'stringp) command) nil
- "Invalid command list")
- command)
- (string (list command)))))
-
-(defun lsp-server-present? (final-command)
- "Check whether FINAL-COMMAND is present."
- ;; executable-find only gained support for remote checks after 27 release
- (or (and (cond
- ((not (file-remote-p default-directory))
- (executable-find (cl-first final-command)))
- ((version<= "27.0" emacs-version)
- (with-no-warnings (executable-find (cl-first final-command) (file-remote-p default-directory))))
- (t))
- (prog1 t
- (lsp-log "Command \"%s\" is present on the path." (s-join " " final-command))))
- (ignore (lsp-log "Command \"%s\" is not present on the path." (s-join " " final-command)))))
-
-(defun lsp--value-to-string (value)
- "Convert VALUE to a string that can be set as value in an environment variable."
- (cond
- ((stringp value) value)
- ((booleanp value) (if value
- "1"
- "0"))
- ((and (sequencep value)
- (seq-every-p #'stringp value)) (string-join value ":"))
- (t (user-error "Only strings, booleans, and sequences of strings are supported as environment variables"))))
-
-(defun lsp--compute-process-environment (environment-fn)
- "Append a list of KEY=VALUE from the alist ENVIRONMENT to `process-environment'.
-Ignore non-boolean keys whose value is nil."
- (let ((environment (if environment-fn
- (funcall environment-fn)
- nil)))
- (-flatten (cons (cl-loop for (key . value) in environment
- if (or (eval value)
- (eq (get value 'custom-type) 'boolean))
- collect (concat key "=" (lsp--value-to-string
- (eval value))))
- process-environment))))
-
-(defun lsp-stdio-connection (command &optional test-command)
- "Returns a connection property list using COMMAND.
-COMMAND can be: A string, denoting the command to launch the
-language server. A list of strings, denoting an executable with
-its command line arguments. A function, that either returns a
-string or a list of strings. In all cases, the launched language
-server should send and receive messages on standard I/O.
-TEST-COMMAND is a function with no arguments which returns
-whether the command is present or not. When not specified
-`lsp-mode' will check whether the first element of the list
-returned by COMMAND is available via `executable-find'"
- (cl-check-type command (or string
- function
- (and list
- (satisfies (lambda (l)
- (seq-every-p (lambda (el)
- (stringp el))
- l))))))
- (list :connect (lambda (filter sentinel name environment-fn)
- (let ((final-command (lsp-resolve-final-function command))
- (process-name (generate-new-buffer-name name))
- (process-environment
- (lsp--compute-process-environment environment-fn)))
- (let* ((stderr-buf (format "*%s::stderr*" process-name))
- (proc (make-process
- :name process-name
- :connection-type 'pipe
- :buffer (format "*%s*" process-name)
- :coding 'no-conversion
- :command final-command
- :filter filter
- :sentinel sentinel
- :stderr stderr-buf
- :noquery t)))
- (set-process-query-on-exit-flag proc nil)
- (set-process-query-on-exit-flag (get-buffer-process stderr-buf) nil)
- (with-current-buffer (get-buffer stderr-buf)
- ;; Make the *NAME::stderr* buffer buffer-read-only, q to bury, etc.
- (special-mode))
- (cons proc proc))))
- :test? (or
- test-command
- (lambda () (-> command lsp-resolve-final-function lsp-server-present?)))))
-
-(defun lsp--open-network-stream (host port name)
- "Open network stream to HOST:PORT.
- NAME will be passed to `open-network-stream'.
- RETRY-COUNT is the number of the retries.
- SLEEP-INTERVAL is the sleep interval between each retry."
- (let* ((retries 0)
- (sleep-interval 0.01)
- (number-of-retries (/ lsp-tcp-connection-timeout sleep-interval))
- connection)
- (while (and (not connection) (< retries number-of-retries))
- (condition-case err
- (setq connection (open-network-stream name nil host port
- :type 'plain
- :coding 'no-conversion))
- (file-error
- (let ((inhibit-message t))
- (lsp--warn "Failed to connect to %s:%s with error message %s"
- host
- port
- (error-message-string err))
- (sleep-for sleep-interval)
- (cl-incf retries)))))
- (or connection (error "Port %s was never taken. Consider increasing `lsp-tcp-connection-timeout'." port))))
-
-(defun lsp--find-available-port (host starting-port)
- "Find available port on HOST starting from STARTING-PORT."
- (let ((success nil)
- (port starting-port))
- (while (and (not success))
- (condition-case _err
- (progn
- (delete-process (open-network-stream "*connection-test*" nil host port :type 'plain))
- (cl-incf port))
- (file-error (setq success t))))
- port))
-
-(defun lsp-tcp-connection (command-fn)
- "Returns a connection property list similar to `lsp-stdio-connection'.
-COMMAND-FN can only be a function that takes a single argument, a
-port number. It should return a command for launches a language server
-process listening for TCP connections on the provided port."
- (cl-check-type command-fn function)
- (list
- :connect (lambda (filter sentinel name environment-fn)
- (let* ((host "localhost")
- (port (lsp--find-available-port host (cl-incf lsp--tcp-port)))
- (command (funcall command-fn port))
- (final-command (if (consp command) command (list command)))
- (_ (unless (executable-find (cl-first final-command))
- (user-error (format "Couldn't find executable %s" (cl-first final-command)))))
- (process-environment
- (lsp--compute-process-environment environment-fn))
- (proc (make-process :name name :connection-type 'pipe :coding 'no-conversion
- :command final-command :sentinel sentinel :stderr (format "*%s::stderr*" name) :noquery t))
- (tcp-proc (lsp--open-network-stream host port (concat name "::tcp"))))
-
- ;; TODO: Same :noquery issue (see above)
- (set-process-query-on-exit-flag proc nil)
- (set-process-query-on-exit-flag tcp-proc nil)
- (set-process-filter tcp-proc filter)
- (cons tcp-proc proc)))
- :test? (lambda () (executable-find (cl-first (funcall command-fn 0))))))
-
-(defalias 'lsp-tcp-server 'lsp-tcp-server-command)
-
-(defun lsp-tcp-server-command (command-fn)
- "Create tcp server connection.
-In this mode Emacs is TCP server and the language server connects
-to it. COMMAND is function with one parameter(the port) and it
-should return the command to start the LS server."
- (cl-check-type command-fn function)
- (list
- :connect (lambda (filter sentinel name environment-fn)
- (let* (tcp-client-connection
- (tcp-server (make-network-process :name (format "*tcp-server-%s*" name)
- :buffer (format "*tcp-server-%s*" name)
- :family 'ipv4
- :service lsp--tcp-server-port
- :sentinel (lambda (proc _string)
- (lsp-log "Language server %s is connected." name)
- (setf tcp-client-connection proc))
- :server 't))
- (port (process-contact tcp-server :service))
- (final-command (funcall command-fn port))
- (process-environment
- (lsp--compute-process-environment environment-fn))
- (cmd-proc (make-process :name name
- :connection-type 'pipe
- :coding 'no-conversion
- :command final-command
- :stderr (format "*tcp-server-%s*::stderr" name)
- :noquery t)))
- (let ((retries 0))
- ;; wait for the client to connect (we sit-for 500 ms, so have to double lsp--tcp-server-wait-seconds)
- (while (and (not tcp-client-connection) (< retries (* 2 lsp--tcp-server-wait-seconds)))
- (lsp--info "Waiting for connection for %s, retries: %s" name retries)
- (sit-for 0.500)
- (cl-incf retries)))
-
- (unless tcp-client-connection
- (condition-case nil (delete-process tcp-server) (error))
- (condition-case nil (delete-process cmd-proc) (error))
- (error "Failed to create connection to %s on port %s" name port))
- (lsp--info "Successfully connected to %s" name)
-
- (set-process-query-on-exit-flag cmd-proc nil)
- (set-process-query-on-exit-flag tcp-client-connection nil)
- (set-process-query-on-exit-flag tcp-server nil)
-
- (set-process-filter tcp-client-connection filter)
- (set-process-sentinel tcp-client-connection sentinel)
- (cons tcp-client-connection cmd-proc)))
- :test? (lambda () (executable-find (cl-first (funcall command-fn 0))))))
-
-(defun lsp-tramp-connection (local-command &optional generate-error-file-fn)
- "Create LSP stdio connection named name.
-LOCAL-COMMAND is either list of strings, string or function which
-returns the command to execute."
- (list :connect (lambda (filter sentinel name environment-fn)
- (let* ((final-command (lsp-resolve-final-function local-command))
- ;; wrap with stty to disable converting \r to \n
- (process-name (generate-new-buffer-name name))
- (wrapped-command (s-join
- " "
- (append '("stty" "raw" ";")
- final-command
- (list
- (concat "2>"
- (or (when generate-error-file-fn
- (funcall generate-error-file-fn name))
- (format "/tmp/%s-%s-stderr" name
- (cl-incf lsp--stderr-index))))))))
- (process-environment
- (lsp--compute-process-environment environment-fn)))
- (let ((proc (start-file-process-shell-command process-name
- (format "*%s*" process-name)
- wrapped-command)))
- (set-process-sentinel proc sentinel)
- (set-process-filter proc filter)
- (set-process-query-on-exit-flag proc nil)
- (set-process-coding-system proc 'binary 'binary)
- (cons proc proc))))
- :test? (lambda () (-> local-command lsp-resolve-final-function lsp-server-present?))))
-
-(defun lsp--auto-configure ()
- "Autoconfigure `company', `flycheck', `lsp-ui', etc if they are installed."
- (when (functionp 'lsp-ui-mode)
- (lsp-ui-mode))
-
- (when lsp-headerline-breadcrumb-enable
- (add-hook 'lsp-configure-hook 'lsp-headerline-breadcrumb-mode))
- (when lsp-modeline-code-actions-enable
- (add-hook 'lsp-configure-hook 'lsp-modeline-code-actions-mode))
- (when lsp-modeline-diagnostics-enable
- (add-hook 'lsp-configure-hook 'lsp-modeline-diagnostics-mode))
- (when lsp-modeline-workspace-status-enable
- (add-hook 'lsp-configure-hook 'lsp-modeline-workspace-status-mode))
- (when lsp-lens-enable
- (add-hook 'lsp-configure-hook 'lsp-lens--enable))
- (when lsp-semantic-tokens-enable
- (add-hook 'lsp-configure-hook 'lsp-semantic-tokens--enable))
-
- ;; yas-snippet config
- (setq-local yas-inhibit-overlay-modification-protection t))
-
-(defvar-local lsp--buffer-deferred nil
- "Whether buffer was loaded via `lsp-deferred'.")
-
-(defun lsp--restart-if-needed (workspace)
- "Handler restart for WORKSPACE."
- (when (or (eq lsp-restart 'auto-restart)
- (eq (lsp--workspace-shutdown-action workspace) 'restart)
- (and (eq lsp-restart 'interactive)
- (let ((query (format
- "Server %s exited with status %s(check corresponding stderr buffer for details). Do you want to restart it?"
- (lsp--workspace-print workspace)
- (process-status (lsp--workspace-proc workspace)))))
- (y-or-n-p query))))
- (--each (lsp--workspace-buffers workspace)
- (when (lsp-buffer-live-p it)
- (lsp-with-current-buffer it
- (if lsp--buffer-deferred
- (lsp-deferred)
- (lsp--info "Restarting LSP in buffer %s" (buffer-name))
- (lsp)))))))
-
-(defun lsp--update-key (table key fn)
- "Apply FN on value corresponding to KEY in TABLE."
- (let ((existing-value (gethash key table)))
- (if-let ((new-value (funcall fn existing-value)))
- (puthash key new-value table)
- (remhash key table))))
-
-(defun lsp--process-sentinel (workspace process exit-str)
- "Create the sentinel for WORKSPACE."
- (unless (process-live-p process)
- (let* ((status (process-status process))
- (folder->workspaces (lsp-session-folder->servers (lsp-session)))
- (stderr (-> workspace lsp--workspace-proc process-name get-buffer)))
-
- (lsp--warn "%s has exited (%s)"
- (process-name (lsp--workspace-proc workspace))
- (string-trim-right exit-str))
-
- (with-lsp-workspace workspace
- ;; Clean workspace related data in each of the buffers
- ;; in the workspace.
- (--each (lsp--workspace-buffers workspace)
- (when (lsp-buffer-live-p it)
- (lsp-with-current-buffer it
- (setq lsp--buffer-workspaces (delete workspace lsp--buffer-workspaces))
- (lsp--uninitialize-workspace)
- (lsp--spinner-stop)
- (lsp--remove-overlays 'lsp-highlight))))
-
- ;; Cleanup session from references to the closed workspace.
- (--each (hash-table-keys folder->workspaces)
- (lsp--update-key folder->workspaces it (apply-partially 'delete workspace)))
-
- ;; Kill standard error buffer only if the process exited normally.
- ;; Leave it intact otherwise for debugging purposes.
- (when (and (eq status 'exit) (zerop (process-exit-status process)) (buffer-live-p stderr))
- (kill-buffer stderr)))
-
- (run-hook-with-args 'lsp-after-uninitialized-functions workspace)
-
- (if (eq (lsp--workspace-shutdown-action workspace) 'shutdown)
- (lsp--info "Workspace %s shutdown." (lsp--workspace-print workspace))
- (lsp--restart-if-needed workspace))
- (lsp--cleanup-hanging-watches))))
-
-(defun lsp-workspace-folders (workspace)
- "Return all folders associated with WORKSPACE."
- (let (result)
- (->> (lsp-session)
- (lsp-session-folder->servers)
- (maphash (lambda (folder workspaces)
- (when (-contains? workspaces workspace)
- (push folder result)))))
- result))
-
-(defun lsp--start-workspace (session client-template root &optional initialization-options)
- "Create new workspace for CLIENT-TEMPLATE with project root ROOT.
-INITIALIZATION-OPTIONS are passed to initialize function.
-SESSION is the active session."
- (lsp--spinner-start)
- (-let* ((default-directory root)
- (client (copy-lsp--client client-template))
- (workspace (make-lsp--workspace
- :root root
- :client client
- :status 'starting
- :buffers (list (lsp-current-buffer))
- :host-root (file-remote-p root)))
- ((&lsp-cln 'server-id 'environment-fn 'new-connection 'custom-capabilities
- 'multi-root 'initialized-fn) client)
- ((proc . cmd-proc) (funcall
- (or (plist-get new-connection :connect)
- (user-error "Client %s is configured incorrectly" client))
- (lsp--create-filter-function workspace)
- (apply-partially #'lsp--process-sentinel workspace)
- (format "%s" server-id)
- environment-fn))
- (workspace-folders (gethash server-id (lsp-session-server-id->folders session))))
- (setf (lsp--workspace-proc workspace) proc
- (lsp--workspace-cmd-proc workspace) cmd-proc)
-
- ;; update (lsp-session-folder->servers) depending on whether we are starting
- ;; multi/single folder workspace
- (mapc (lambda (project-root)
- (->> session
- (lsp-session-folder->servers)
- (gethash project-root)
- (cl-pushnew workspace)))
- (or workspace-folders (list root)))
-
- (with-lsp-workspace workspace
- (run-hooks 'lsp-before-initialize-hook)
- (lsp-request-async
- "initialize"
- (append
- (list :processId nil
- :rootPath (lsp-file-local-name (expand-file-name root))
- :clientInfo (list :name "emacs"
- :version (emacs-version))
- :rootUri (lsp--path-to-uri root)
- :capabilities (lsp--client-capabilities custom-capabilities)
- :initializationOptions initialization-options
- :workDoneToken "1")
- (when lsp-server-trace
- (list :trace lsp-server-trace))
- (when multi-root
- (->> workspace-folders
- (-distinct)
- (-map (lambda (folder)
- (list :uri (lsp--path-to-uri folder)
- :name (f-filename folder))))
- (apply 'vector)
- (list :workspaceFolders))))
- (lambda (response)
- (unless response
- (lsp--spinner-stop)
- (signal 'lsp-empty-response-error (list "initialize")))
-
- (let* ((capabilities (lsp:initialize-result-capabilities response))
- (json-object-type 'hash-table)
- (text-document-sync (-some-> lsp-parsed-message
- (json-read-from-string)
- (ht-get "result")
- (ht-get "capabilities")
- (ht-get "textDocumentSync")))
- (save (when (ht? text-document-sync)
- (ht-get text-document-sync "save"))))
- ;; see #1807
- (when (and (ht? save) (ht-empty? save))
- (-> capabilities
- (lsp:server-capabilities-text-document-sync?)
- (lsp:set-text-document-sync-options-save? save)))
-
- (setf (lsp--workspace-server-capabilities workspace) capabilities
- (lsp--workspace-status workspace) 'initialized)
-
- (with-lsp-workspace workspace
- (lsp-notify "initialized" lsp--empty-ht))
-
- (when initialized-fn (funcall initialized-fn workspace))
-
- (cl-callf2 -filter #'lsp-buffer-live-p (lsp--workspace-buffers workspace))
- (->> workspace
- (lsp--workspace-buffers)
- (mapc (lambda (buffer)
- (lsp-with-current-buffer buffer
- (lsp--open-in-workspace workspace)))))
-
- (with-lsp-workspace workspace
- (run-hooks 'lsp-after-initialize-hook))
- (lsp--info "%s initialized successfully in folders: %s"
- (lsp--workspace-print workspace)
- (lsp-workspace-folders workspace))))
- :mode 'detached))
- workspace))
-
-(defun lsp--load-default-session ()
- "Load default session."
- (setq lsp--session (or (condition-case err
- (lsp--read-from-file lsp-session-file)
- (error (lsp--error "Failed to parse the session %s, starting with clean one."
- (error-message-string err))
- nil))
- (make-lsp-session))))
-
-(defun lsp-session ()
- "Get the session associated with the current buffer."
- (or lsp--session (setq lsp--session (lsp--load-default-session))))
-
-(defun lsp--client-disabled-p (buffer-major-mode client)
- (seq-some
- (lambda (entry)
- (pcase entry
- ((pred symbolp) (eq entry client))
- (`(,mode . ,client-or-list)
- (and (eq mode buffer-major-mode)
- (if (listp client-or-list)
- (memq client client-or-list)
- (eq client client-or-list))))))
- lsp-disabled-clients))
-
-
-;; download server
-
-(defcustom lsp-server-install-dir (expand-file-name
- (locate-user-emacs-file (f-join ".cache" "lsp")))
- "Directory in which the servers will be installed."
- :risky t
- :type 'directory
- :package-version '(lsp-mode . "6.3")
- :group 'lsp-mode)
-
-(defcustom lsp-verify-signature t
- "Whether to check GPG signatures of downloaded files."
- :type 'boolean
- :package-version '(lsp-mode . "7.1")
- :group 'lsp-mode)
-
-(defvar lsp--dependencies (ht))
-
-(defun lsp-dependency (name &rest definitions)
- "Used to specify a language server DEPENDENCY, the server
-executable or other required file path. Typically, the
-DEPENDENCY is found by locating it on the system path using
-`executable-find'.
-
-You can explicitly call lsp-dependency in your environment to
-specify the absolute path to the DEPENDENCY. For example, the
-typescript-language-server requires both the server and the
-typescript compiler. If you've installed them in a team shared
-read-only location, you can instruct lsp-mode to use them via
-
- (eval-after-load 'lsp-mode
- '(progn
- (require 'lsp-javascript)
- (lsp-dependency 'typescript-language-server `(:system ,tls-exe))
- (lsp-dependency 'typescript `(:system ,ts-js))))
-
-where tls-exe is the absolute path to the typescript-language-server
-executable and ts-js is the absolute path to the typescript compiler
-JavaScript file, tsserver.js (the *.js is required for Windows)."
- (ht-set lsp--dependencies name definitions))
-
-(defun lsp--server-binary-present? (client)
- (unless (equal (lsp--client-server-id client) 'lsp-pwsh)
- (condition-case ()
- (-some-> client lsp--client-new-connection (plist-get :test?) funcall)
- (error nil)
- (args-out-of-range nil))))
-
-(define-minor-mode lsp-installation-buffer-mode
- "Mode used in *lsp-installation* buffers.
-It can be used to set-up keybindings, etc. Disabling this mode
-detaches the installation buffer from commands like
-`lsp-select-installation-buffer'."
- :init-value nil
- :lighter nil)
-
-(defface lsp-installation-finished-buffer-face '((t :foreground "orange"))
- "Face used for finished installation buffers.
-Used in `lsp-select-installation-buffer'."
- :group 'lsp-mode)
-
-(defface lsp-installation-buffer-face '((t :foreground "green"))
- "Face used for installation buffers still in progress.
-Used in `lsp-select-installation-buffer'."
- :group 'lsp-mode)
-
-(defun lsp--installation-buffer? (buf)
- "Check whether BUF is an `lsp-async-start-process' buffer."
- (buffer-local-value 'lsp-installation-buffer-mode buf))
-
-(defun lsp-select-installation-buffer (&optional show-finished)
- "Interactively choose an installation buffer.
-If SHOW-FINISHED is set, leftover (finished) installation buffers
-are still shown."
- (interactive "P")
- (let ((bufs (--filter (and (lsp--installation-buffer? it)
- (or show-finished (get-buffer-process it)))
- (buffer-list))))
- (pcase bufs
- (`nil (user-error "No installation buffers"))
- (`(,buf) (pop-to-buffer buf))
- (bufs (pop-to-buffer (completing-read "Select installation buffer: "
- (--map (propertize (buffer-name it) 'face
- (if (get-buffer-process it)
- 'lsp-installation-buffer-face
- 'lsp-installation-finished-buffer-face))
- bufs)))))))
-
-(defun lsp-cleanup-installation-buffers ()
- "Delete finished *lsp-installation* buffers."
- (interactive)
- (dolist (buf (buffer-list))
- (when (and (lsp--installation-buffer? buf) (not (get-buffer-process buf)))
- (kill-buffer buf))))
-
-(defun lsp--download-status ()
- (-some--> #'lsp--client-download-in-progress?
- (lsp--filter-clients it)
- (-map (-compose #'symbol-name #'lsp--client-server-id) it)
- (format "%s" it)
- (propertize it 'face 'success)
- (format " Installing following servers: %s" it)
- (propertize it
- 'local-map (make-mode-line-mouse-map
- 'mouse-1 #'lsp-select-installation-buffer)
- 'mouse-face 'highlight)))
-
-(defun lsp--install-server-internal (client &optional update?)
- (unless (lsp--client-download-server-fn client)
- (user-error "There is no automatic installation for `%s', you have to install it manually following lsp-mode's documentation."
- (lsp--client-server-id client)))
-
- (setf (lsp--client-download-in-progress? client) t)
- (add-to-list 'global-mode-string '(t (:eval (lsp--download-status))))
- (cl-flet ((done
- (success? &optional error-message)
- ;; run with idle timer to make sure the lsp command is executed in
- ;; the main thread, see #2739.
- (run-with-timer
- 0.0
- nil
- (lambda ()
- (-let [(&lsp-cln 'server-id 'buffers) client]
- (setf (lsp--client-download-in-progress? client) nil
- (lsp--client-buffers client) nil)
- (if success?
- (lsp--info "Server %s downloaded, auto-starting in %s buffers." server-id
- (length buffers))
- (lsp--error "Server %s install process failed with the following error message: %s.
-Check `*lsp-install*' and `*lsp-log*' buffer."
- server-id
- error-message))
- (seq-do
- (lambda (buffer)
- (when (lsp-buffer-live-p buffer)
- (lsp-with-current-buffer buffer
- (cl-callf2 -remove-item '(t (:eval (lsp--download-status)))
- global-mode-string)
- (when success? (lsp)))))
- buffers)
- (unless (lsp--filter-clients #'lsp--client-download-in-progress?)
- (cl-callf2 -remove-item '(t (:eval (lsp--download-status)))
- global-mode-string)))))))
- (lsp--info "Download %s started." (lsp--client-server-id client))
- (condition-case err
- (funcall
- (lsp--client-download-server-fn client)
- client
- (lambda () (done t))
- (lambda (msg) (done nil msg))
- update?)
- (error
- (done nil (error-message-string err))))))
-
-(defun lsp--require-packages ()
- "Load `lsp-client-packages' if needed."
- (when (and lsp-auto-configure (not lsp--client-packages-required))
- (seq-do (lambda (package)
- ;; loading client is slow and `lsp' can be called repeatedly
- (unless (featurep package)
- (require package nil t)))
- lsp-client-packages)
- (setq lsp--client-packages-required t)))
-
-;;;###autoload
-(defun lsp-install-server (update? &optional server-id)
- "Interactively install server.
-When prefix UPDATE? is t force installation even if the server is present."
- (interactive "P")
- (lsp--require-packages)
- (lsp--install-server-internal
- (or (gethash server-id lsp-clients)
- (lsp--completing-read
- "Select server to install: "
- (or (->> lsp-clients
- (ht-values)
- (-filter (-andfn
- (-orfn (-not #'lsp--server-binary-present?)
- (-const update?))
- (-not #'lsp--client-download-in-progress?)
- #'lsp--client-download-server-fn)))
- (user-error "There are no servers with automatic installation"))
- (-compose #'symbol-name #'lsp--client-server-id)
- nil
- t))
- update?))
-
-;;;###autoload
-(defun lsp-ensure-server (server-id)
- "Ensure server SERVER-ID"
- (lsp--require-packages)
- (if-let ((client (gethash server-id lsp-clients)))
- (unless (lsp--server-binary-present? client)
- (lsp--info "Server `%s' is not preset, installing..." server-id)
- (lsp-install-server nil server-id))
- (warn "Unable to find server registration with id %s" server-id)))
-
-(defun lsp-async-start-process (callback error-callback &rest command)
- "Start async process COMMAND with CALLBACK and ERROR-CALLBACK."
- (let ((name (cl-first command)))
- (with-current-buffer (compilation-start (mapconcat #'shell-quote-argument command " ") t
- (lambda (&rest _)
- (generate-new-buffer-name (format "*lsp-install: %s*" name))))
- (lsp-installation-buffer-mode +1)
- (add-hook
- 'compilation-finish-functions
- (lambda (_buf status)
- (if (string= "finished\n" status)
- (condition-case err
- (funcall callback)
- (error
- (funcall error-callback (error-message-string err))))
- (funcall error-callback (s-trim-right status))))
- nil t))))
-
-(defun lsp-resolve-value (value)
- "Resolve VALUE's value.
-If it is function - call it.
-If it is symbol - return it's value
-Otherwise returns value itself."
- (cond
- ((functionp value) (funcall value))
- ((symbolp value) (symbol-value value))
- (value)))
-
-(defvar lsp-deps-providers
- (list :npm (list :path #'lsp--npm-dependency-path
- :install #'lsp--npm-dependency-install)
- :system (list :path #'lsp--system-path)
- :download (list :path #'lsp-download-path
- :install #'lsp-download-install)))
-
-(defun lsp--system-path (path)
- "If PATH is absolute and exists return it as is. Otherwise,
-return the absolute path to the executable defined by PATH or
-nil."
- ;; For node.js 'sub-packages' PATH may point to a *.js file. Consider the
- ;; typescript-language-server. When lsp invokes the server, lsp needs to
- ;; supply the path to the typescript compiler, tsserver.js, as an argument. To
- ;; make code platform independent, one must pass the absolute path to the
- ;; tsserver.js file (Windows requires a *.js file - see help on the JavaScript
- ;; child process spawn command that is invoked by the
- ;; typescript-language-server). This is why we check for existence and not
- ;; that the path is executable.
- (let ((path (lsp-resolve-value path)))
- (if (and (f-absolute? path)
- (f-exists? path))
- path
- (executable-find path))))
-
-(defun lsp-package-path (dependency)
- "Path to the DEPENDENCY each of the registered providers."
- (let (path)
- (-first (-lambda ((provider . rest))
- (setq path (-some-> lsp-deps-providers
- (plist-get provider)
- (plist-get :path)
- (apply rest))))
- (gethash dependency lsp--dependencies))
- path))
-
-(defun lsp-package-ensure (dependency callback error-callback)
- "Asynchronously ensure a package."
- (or (-first (-lambda ((provider . rest))
- (-some-> lsp-deps-providers
- (plist-get provider)
- (plist-get :install)
- (apply (cl-list* callback error-callback rest))))
- (gethash dependency lsp--dependencies))
- (funcall error-callback (format "Unable to find a way to install %s" dependency))))
-
-
-;; npm handling
-
-;; https://docs.npmjs.com/files/folders#executables
-(cl-defun lsp--npm-dependency-path (&key package path &allow-other-keys)
- "Return npm dependency PATH for PACKAGE."
- (let ((path (executable-find
- (f-join lsp-server-install-dir "npm" package
- (cond ((eq system-type 'windows-nt) "")
- (t "bin"))
- path))))
- (unless (and path (f-exists? path))
- (error "The package %s is not installed. Unable to find %s" package path))
- path))
-
-(cl-defun lsp--npm-dependency-install (callback error-callback &key package &allow-other-keys)
- (if-let ((npm-binary (executable-find "npm")))
- (progn
- ;; Explicitly `make-directory' to work around NPM bug in
- ;; versions 7.0.0 through 7.4.1. See
- ;; https://github.com/emacs-lsp/lsp-mode/issues/2364 for
- ;; discussion.
- (make-directory (f-join lsp-server-install-dir "npm" package "lib") 'parents)
- (lsp-async-start-process callback
- error-callback
- npm-binary
- "-g"
- "--prefix"
- (f-join lsp-server-install-dir "npm" package)
- "install"
- package))
- (lsp-log "Unable to install %s via `npm' because it is not present" package)
- nil))
-
-
-;; Download URL handling
-(cl-defun lsp-download-install (callback error-callback &key url asc-url pgp-key store-path decompress &allow-other-keys)
- (let* ((url (lsp-resolve-value url))
- (store-path (lsp-resolve-value store-path))
- ;; (decompress (lsp-resolve-value decompress))
- (download-path
- (pcase decompress
- (:gzip (concat store-path ".gz"))
- (:zip (concat store-path ".zip"))
- (`nil store-path)
- (_ (error ":decompress must be `:gzip', `:zip' or `nil'")))))
- (make-thread
- (lambda ()
- (condition-case err
- (progn
- (when (f-exists? download-path)
- (f-delete download-path))
- (when (f-exists? store-path)
- (f-delete store-path))
- (lsp--info "Starting to download %s to %s..." url download-path)
- (mkdir (f-parent download-path) t)
- (url-copy-file url download-path)
- (lsp--info "Finished downloading %s..." download-path)
- (when (and lsp-verify-signature asc-url pgp-key)
- (if (executable-find epg-gpg-program)
- (let ((asc-download-path (concat download-path ".asc"))
- (context (epg-make-context))
- (fingerprint)
- (signature))
- (when (f-exists? asc-download-path)
- (f-delete asc-download-path))
- (lsp--info "Starting to download %s to %s..." asc-url asc-download-path)
- (url-copy-file asc-url asc-download-path)
- (lsp--info "Finished downloading %s..." asc-download-path)
- (epg-import-keys-from-string context pgp-key)
- (setq fingerprint (epg-import-status-fingerprint
- (car
- (epg-import-result-imports
- (epg-context-result-for context 'import)))))
- (lsp--info "Verifying signature %s..." asc-download-path)
- (epg-verify-file context asc-download-path download-path)
- (setq signature (car (epg-context-result-for context 'verify)))
- (unless (and
- (eq (epg-signature-status signature) 'good)
- (equal (epg-signature-fingerprint signature) fingerprint))
- (error "Failed to verify GPG signature: %s" (epg-signature-to-string signature))))
- (lsp--warn "GPG is not installed, skipping the signature check.")))
- (when decompress
- (lsp--info "Decompressing %s..." download-path)
- (pcase decompress
- (:gzip
- (lsp-gunzip download-path))
- (:zip (lsp-unzip download-path (f-parent store-path))))
- (lsp--info "Decompressed %s..." store-path))
- (funcall callback))
- (error (funcall error-callback err)))))))
-
-(cl-defun lsp-download-path (&key store-path binary-path set-executable? &allow-other-keys)
- "Download URL and store it into STORE-PATH.
-
-SET-EXECUTABLE? when non-nil change the executable flags of
-STORE-PATH to make it executable. BINARY-PATH can be specified
-when the binary to start does not match the name of the
-archieve(e. g. when the archieve has multiple files)"
- (let ((store-path (or (lsp-resolve-value binary-path)
- (lsp-resolve-value store-path))))
- (cond
- ((executable-find store-path) store-path)
- ((and set-executable? (f-exists? store-path))
- (set-file-modes store-path #o0700)
- store-path)
- ((f-exists? store-path) store-path))))
-
-;; unzip
-
-(defconst lsp-ext-pwsh-script "powershell -noprofile -noninteractive \
--nologo -ex bypass Expand-Archive -path '%s' -dest '%s'"
- "Powershell script to unzip file.")
-
-(defconst lsp-ext-unzip-script "bash -c 'mkdir -p %2$s && unzip -qq -o %1$s -d %2$s'"
- "Unzip script to unzip file.")
-
-(defcustom lsp-unzip-script (cond ((executable-find "powershell") lsp-ext-pwsh-script)
- ((executable-find "unzip") lsp-ext-unzip-script)
- (t nil))
- "The script to unzip."
- :group 'lsp-mode
- :type 'string
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp-unzip (zip-file dest)
- "Unzip ZIP-FILE to DEST."
- (unless lsp-unzip-script
- (error "Unable to find `unzip' or `powershell' on the path, please customize `lsp-unzip-script'"))
- (shell-command (format lsp-unzip-script zip-file dest)))
-
-;; gunzip
-
-(defconst lsp-ext-gunzip-script "gzip -d %1$s"
- "Script to decompress a gzippped file with gzip.")
-
-(defcustom lsp-gunzip-script (cond ((executable-find "gzip") lsp-ext-gunzip-script)
- (t nil))
- "The script to decompress a gzipped file.
-Should be a format string with one argument for the file to be decompressed
-in place."
- :group 'lsp-mode
- :type 'string
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp-gunzip (gz-file)
- "Decompress GZ-FILE in place."
- (unless lsp-gunzip-script
- (error "Unable to find `gzip' on the path, please either customize `lsp-gunzip-script' or manually decompress %s" gz-file))
- (shell-command (format lsp-gunzip-script gz-file)))
-
-;; VSCode marketplace
-
-(defcustom lsp-vscode-ext-url
- "https://marketplace.visualstudio.com/_apis/public/gallery/publishers/%s/vsextensions/%s/%s/vspackage"
- "Vscode extension template url."
- :group 'lsp-mode
- :type 'string
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp-vscode-extension-url (publisher name &optional version)
- "Return the URL to vscode extension.
-PUBLISHER is the extension publisher.
-NAME is the name of the extension.
-VERSION is the version of the extension, defaults to `latest'"
- (format lsp-vscode-ext-url publisher name (or version "latest")))
-
-
-
-;; Queueing prompts
-
-(defvar lsp--question-queue nil
- "List of questions yet to be asked by `lsp-ask-question'.")
-
-(defun lsp-ask-question (question options callback)
- "Prompt the user to answer the QUESTION with one of the OPTIONS from the
-minibuffer. Once the user selects an option, the CALLBACK function will be
-called, passing the selected option to it.
-
-If the user is currently being shown a question, the question will be stored in
-`lsp--question-queue', and will be asked once the user has answered the current
-question."
- (add-to-list 'lsp--question-queue `(("question" . ,question)
- ("options" . ,options)
- ("callback" . ,callback)) t)
- (when (eq (length lsp--question-queue) 1)
- (lsp--process-question-queue)))
-
-(defun lsp--process-question-queue ()
- "Take the first question from `lsp--question-queue', process it, then process
-the next question until the queue is empty."
- (-let* (((&alist "question" "options" "callback") (car lsp--question-queue))
- (answer (completing-read question options nil t)))
- (pop lsp--question-queue)
- (funcall callback answer)
- (when lsp--question-queue
- (lsp--process-question-queue))))
-
-(defun lsp--matching-clients? (client)
- (and
- ;; both file and client remote or both local
- (eq (---truthy? (file-remote-p (buffer-file-name)))
- (---truthy? (lsp--client-remote? client)))
-
- ;; activation function or major-mode match.
- (if-let ((activation-fn (lsp--client-activation-fn client)))
- (funcall activation-fn (buffer-file-name) major-mode)
- (-contains? (lsp--client-major-modes client) major-mode))
-
- ;; check whether it is enabled if `lsp-enabled-clients' is not null
- (or (null lsp-enabled-clients)
- (or (member (lsp--client-server-id client) lsp-enabled-clients)
- (ignore (lsp--info "Client %s is not in lsp-enabled-clients"
- (lsp--client-server-id client)))))
-
- ;; check whether it is not disabled.
- (not (lsp--client-disabled-p major-mode (lsp--client-server-id client)))))
-
-(defun lsp--filter-clients (pred)
- (->> lsp-clients hash-table-values (-filter pred)))
-
-(defun lsp--find-clients ()
- "Find clients which can handle BUFFER-MAJOR-MODE.
-SESSION is the currently active session. The function will also
-pick only remote enabled clients in case the FILE-NAME is on
-remote machine and vice versa."
- (-when-let (matching-clients (lsp--filter-clients (-andfn #'lsp--matching-clients?
- #'lsp--server-binary-present?)))
- (lsp-log "Found the following clients for %s: %s"
- (buffer-file-name)
- (s-join ", "
- (-map (lambda (client)
- (format "(server-id %s, priority %s)"
- (lsp--client-server-id client)
- (lsp--client-priority client)))
- matching-clients)))
- (-let* (((add-on-clients main-clients) (-separate #'lsp--client-add-on? matching-clients))
- (selected-clients (if-let ((main-client (and main-clients
- (--max-by (> (lsp--client-priority it)
- (lsp--client-priority other))
- main-clients))))
- (cons main-client add-on-clients)
- add-on-clients)))
- (lsp-log "The following clients were selected based on priority: %s"
- (s-join ", "
- (-map (lambda (client)
- (format "(server-id %s, priority %s)"
- (lsp--client-server-id client)
- (lsp--client-priority client)))
- selected-clients)))
- selected-clients)))
-
-(defun lsp-register-client (client)
- "Registers LSP client CLIENT."
- (cl-assert (symbolp (lsp--client-server-id client)) t)
- (cl-assert (or
- (functionp (lsp--client-activation-fn client))
- (and (listp (lsp--client-major-modes client))
- (seq-every-p (apply-partially #'symbolp)
- (lsp--client-major-modes client))))
- nil "Invalid activation-fn and/or major-modes.")
- (let ((client-id (lsp--client-server-id client)))
- (puthash client-id client lsp-clients)
- (setplist (intern (format "lsp-%s-after-open-hook" client-id))
- `( standard-value (nil) custom-type hook
- custom-package-version (lsp-mode . "7.0.1")
- variable-documentation ,(format "Hooks to run after `%s' server is run." client-id)
- custom-requests nil))))
-
-(defun lsp--create-initialization-options (_session client)
- "Create initialization-options from SESSION and CLIENT.
-Add workspace folders depending on server being multiroot and
-session workspace folder configuration for the server."
- (let* ((initialization-options-or-fn (lsp--client-initialization-options client)))
- (if (functionp initialization-options-or-fn)
- (funcall initialization-options-or-fn)
- initialization-options-or-fn)))
-
-(defvar lsp-client-settings nil
- "For internal use, any external users please use
- `lsp-register-custom-settings' function instead")
-
-(defun lsp--compare-setting-path (a b)
- (equal (car a) (car b)))
-
-(defun lsp-register-custom-settings (props)
- "Register PROPS.
-PROPS is list of triple (path value boolean?) where PATH is the path to the
-property; VALUE can be a literal value, symbol to be evaluated, or either a
-function or lambda function to be called without arguments; BOOLEAN? is an
-optional flag that should be non-nil for boolean settings, when it is nil the
-property will be ignored if the VALUE is nil.
-
-Example: `(lsp-register-custom-settings '((\"foo.bar.buzz.enabled\" t t)))'
-\(note the double parentheses)"
- (let ((-compare-fn #'lsp--compare-setting-path))
- (setq lsp-client-settings (-uniq (append props lsp-client-settings)))))
-
-(defun lsp-region-text (region)
- "Get the text for REGION in current buffer."
- (-let (((start . end) (lsp--range-to-region region)))
- (buffer-substring-no-properties start end)))
-
-(defun lsp-ht-set (tbl paths value)
- "Set nested hash table value.
-TBL - a hash table, PATHS is the path to the nested VALUE."
- (pcase paths
- (`(,path) (ht-set! tbl path value))
- (`(,path . ,rst) (let ((nested-tbl (or (gethash path tbl)
- (let ((temp-tbl (ht)))
- (ht-set! tbl path temp-tbl)
- temp-tbl))))
- (lsp-ht-set nested-tbl rst value)))))
-
-(defun lsp-configuration-section (section)
- "Get settings for SECTION."
- (let ((ret (ht-create)))
- (mapc (-lambda ((path variable boolean?))
- (when (s-matches? (concat (regexp-quote section) "\\..*") path)
- (let* ((symbol-value (-> variable
- lsp-resolve-value
- lsp-resolve-value))
- (value (if (and boolean? (not symbol-value))
- :json-false
- symbol-value)))
- (when (or boolean? value)
- (lsp-ht-set ret (s-split "\\." path) value)))))
- lsp-client-settings)
- ret))
-
-(defun lsp--start-connection (session client project-root)
- "Initiates connection created from CLIENT for PROJECT-ROOT.
-SESSION is the active session."
- (when (lsp--client-multi-root client)
- (cl-pushnew project-root (gethash (lsp--client-server-id client)
- (lsp-session-server-id->folders session))))
- (run-hook-with-args 'lsp-workspace-folders-changed-functions (list project-root) nil)
-
- (unwind-protect
- (lsp--start-workspace session client project-root (lsp--create-initialization-options session client))
- (lsp--spinner-stop)))
-
-;; lsp-log-io-mode
-
-(defvar lsp-log-io-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "M-n") #'lsp-log-io-next)
- (define-key map (kbd "M-p") #'lsp-log-io-prev)
- (define-key map (kbd "k") #'lsp--erase-log-buffer)
- (define-key map (kbd "K") #'lsp--erase-session-log-buffers)
- map)
- "Keymap for lsp log buffer mode.")
-
-(define-derived-mode lsp-log-io-mode special-mode "LspLogIo"
- "Special mode for viewing IO logs.")
-
-(defun lsp-workspace-show-log (workspace)
- "Display the log buffer of WORKSPACE."
- (interactive
- (list (if lsp-print-io
- (if (eq (length (lsp-workspaces)) 1)
- (cl-first (lsp-workspaces))
- (lsp--completing-read "Workspace: " (lsp-workspaces)
- #'lsp--workspace-print nil t))
- (user-error "IO logging is disabled"))))
- (pop-to-buffer (lsp--get-log-buffer-create workspace)))
-
-(defalias 'lsp-switch-to-io-log-buffer 'lsp-workspace-show-log)
-
-(defun lsp--get-log-buffer-create (workspace)
- "Return the lsp log buffer of WORKSPACE, creating a new one if needed."
- (let ((server-id (-> workspace lsp--workspace-client lsp--client-server-id symbol-name))
- (pid (format "%s" (process-id (lsp--workspace-cmd-proc workspace)))))
- (get-buffer-create (format "*lsp-log: %s:%s*" server-id pid))))
-
-(defun lsp--erase-log-buffer (&optional all)
- "Delete contents of current lsp log buffer.
-When ALL is t, erase all log buffers of the running session."
- (interactive)
- (let* ((workspaces (lsp--session-workspaces (lsp-session)))
- (current-log-buffer (current-buffer)))
- (dolist (w workspaces)
- (let ((b (lsp--get-log-buffer-create w)))
- (when (or all (eq b current-log-buffer))
- (with-current-buffer b
- (let ((inhibit-read-only t))
- (erase-buffer))))))))
-
-(defun lsp--erase-session-log-buffers ()
- "Erase log buffers of the running session."
- (interactive)
- (lsp--erase-log-buffer t))
-
-(defun lsp-log-io-next (arg)
- "Move to next log entry."
- (interactive "P")
- (ewoc-goto-next lsp--log-io-ewoc (or arg 1)))
-
-(defun lsp-log-io-prev (arg)
- "Move to previous log entry."
- (interactive "P")
- (ewoc-goto-prev lsp--log-io-ewoc (or arg 1)))
-
-(defun lsp--workspace-print (workspace)
- "Visual representation WORKSPACE."
- (let* ((proc (lsp--workspace-cmd-proc workspace))
- (status (lsp--workspace-status workspace))
- (server-id (-> workspace lsp--workspace-client lsp--client-server-id symbol-name))
- (pid (process-id proc)))
-
- (if (eq 'initialized status)
- (format "%s:%s" server-id pid)
- (format "%s:%s/%s" server-id pid status))))
-
-(defun lsp--map-tree-widget (m)
- "Build `tree-widget' from a hash-table M."
- (when (hash-table-p m)
- (let (nodes)
- (maphash (lambda (k v)
- (push `(tree-widget
- :tag ,(if (hash-table-p v)
- (format "%s:" k)
- (format "%s: %s" k
- (propertize (format "%s" v)
- 'face
- 'font-lock-string-face)))
- :open t
- ,@(lsp--map-tree-widget v))
- nodes))
- m)
- nodes)))
-
-(defun lsp-buffer-name (buffer-id)
- (if-let ((buffer-name (plist-get buffer-id :buffer-name)))
- (funcall buffer-name buffer-id)
- (buffer-name buffer-id)))
-
-(defun lsp--render-workspace (workspace)
- "Tree node representation of WORKSPACE."
- `(tree-widget :tag ,(lsp--workspace-print workspace)
- :open t
- (tree-widget :tag ,(propertize "Buffers" 'face 'font-lock-function-name-face)
- :open t
- ,@(->> workspace
- (lsp--workspace-buffers)
- (--map `(tree-widget
- :tag ,(when (lsp-buffer-live-p it)
- (let ((buffer-name (lsp-buffer-name it)))
- (if (lsp-with-current-buffer it buffer-read-only)
- (propertize buffer-name 'face 'font-lock-constant-face)
- buffer-name)))))))
- (tree-widget :tag ,(propertize "Capabilities" 'face 'font-lock-function-name-face)
- ,@(-> workspace lsp--workspace-server-capabilities lsp--map-tree-widget))))
-
-(define-derived-mode lsp-browser-mode special-mode "LspBrowser"
- "Define mode for displaying lsp sessions."
- (setq-local display-buffer-base-action '(nil . ((inhibit-same-window . t)))))
-
-(defun lsp-describe-session ()
- "Describes current `lsp-session'."
- (interactive)
- (let ((session (lsp-session))
- (buf (get-buffer-create "*lsp session*")))
- (with-current-buffer buf
- (lsp-browser-mode)
- (let ((inhibit-read-only t))
- (erase-buffer)
- (--each (lsp-session-folders session)
- (widget-create
- `(tree-widget
- :tag ,(propertize it 'face 'font-lock-keyword-face)
- :open t
- ,@(->> session
- (lsp-session-folder->servers)
- (gethash it)
- (-map 'lsp--render-workspace)))))))
- (pop-to-buffer buf)))
-
-(defun lsp--session-workspaces (session)
- "Get all workspaces that are part of the SESSION."
- (-> session lsp-session-folder->servers hash-table-values -flatten -uniq))
-
-(defun lsp--find-multiroot-workspace (session client project-root)
- "Look for a multiroot connection in SESSION created from CLIENT for PROJECT-ROOT and BUFFER-MAJOR-MODE."
- (when (lsp--client-multi-root client)
- (-when-let (multi-root-workspace (->> session
- (lsp--session-workspaces)
- (--first (eq (-> it lsp--workspace-client lsp--client-server-id)
- (lsp--client-server-id client)))))
- (with-lsp-workspace multi-root-workspace
- (lsp-notify "workspace/didChangeWorkspaceFolders"
- (lsp-make-did-change-workspace-folders-params
- :event (lsp-make-workspace-folders-change-event
- :added (vector (lsp-make-workspace-folder
- :uri (lsp--path-to-uri project-root)
- :name (f-filename project-root)))
- :removed []))))
-
- (->> session (lsp-session-folder->servers) (gethash project-root) (cl-pushnew multi-root-workspace))
- (->> session (lsp-session-server-id->folders) (gethash (lsp--client-server-id client)) (cl-pushnew project-root))
-
- (lsp--persist-session session)
-
- (lsp--info "Opened folder %s in workspace %s" project-root (lsp--workspace-print multi-root-workspace))
- (lsp--open-in-workspace multi-root-workspace)
-
- multi-root-workspace)))
-
-(defun lsp--ensure-lsp-servers (session clients project-root ignore-multi-folder)
- "Ensure that SESSION contain server CLIENTS created for PROJECT-ROOT.
-IGNORE-MULTI-FOLDER to ignore multi folder server."
- (-map (lambda (client)
- (or
- (lsp--find-workspace session client project-root)
- (unless ignore-multi-folder
- (lsp--find-multiroot-workspace session client project-root))
- (lsp--start-connection session client project-root)))
- clients))
-
-(defun lsp--spinner-stop ()
- "Stop the spinner in case all of the workspaces are started."
- (when (--all? (eq (lsp--workspace-status it) 'initialized)
- lsp--buffer-workspaces)
- (spinner-stop)))
-
-(defun lsp--open-in-workspace (workspace)
- "Open in existing WORKSPACE."
- (if (eq 'initialized (lsp--workspace-status workspace))
- ;; when workspace is initialized just call document did open.
- (progn
- (with-lsp-workspace workspace
- (when-let ((before-document-open-fn (-> workspace
- lsp--workspace-client
- lsp--client-before-file-open-fn)))
- (funcall before-document-open-fn workspace))
- (lsp--text-document-did-open))
- (lsp--spinner-stop))
- ;; when it is not initialized
- (lsp--spinner-start)
- (cl-pushnew (lsp-current-buffer) (lsp--workspace-buffers workspace))))
-
-(defun lsp--find-workspace (session client project-root)
- "Find server connection created with CLIENT in SESSION for PROJECT-ROOT."
- (when-let ((workspace (->> session
- (lsp-session-folder->servers)
- (gethash project-root)
- (--first (eql (-> it lsp--workspace-client lsp--client-server-id)
- (lsp--client-server-id client))))))
- (lsp--open-in-workspace workspace)
- workspace))
-
-(defun lsp--find-root-interactively (session)
- "Find project interactively.
-Returns nil if the project should not be added to the current SESSION."
- (condition-case nil
- (let* ((project-root-suggestion (or (lsp--suggest-project-root) default-directory))
- (action (read-key (format
- "%s is not part of any project. Select action:
-
-%s==>Import project root %s.
-%s==>Import project by selecting root directory interactively.
-%s==>Do not ask again for the current project by adding %s to lsp-session-folders-blacklist.
-%s==>Do not ask again for the current project by selecting ignore path interactively.
-%s==>Do nothing: ask again when opening other files from the current project."
- (propertize (buffer-name) 'face 'bold)
- (propertize "i" 'face 'success)
- (propertize project-root-suggestion 'face 'bold)
- (propertize "I" 'face 'success)
- (propertize "d" 'face 'warning)
- (propertize project-root-suggestion 'face 'bold)
- (propertize "D" 'face 'warning)
- (propertize "n" 'face 'warning)))))
- (cl-case action
- (?i project-root-suggestion)
- (?\r project-root-suggestion)
- (?I (read-directory-name "Select workspace folder to add: "
- (or project-root-suggestion default-directory)
- nil
- t))
- (?d (push project-root-suggestion (lsp-session-folders-blacklist session))
- (lsp--persist-session session)
- nil)
- (?D (push (read-directory-name "Select folder to blacklist: "
- (or project-root-suggestion default-directory)
- nil
- t)
- (lsp-session-folders-blacklist session))
- (lsp--persist-session session)
- nil)
- (t nil)))
- ('quit)))
-
-(declare-function tramp-file-name-host "ext:tramp" (file) t)
-(declare-function tramp-dissect-file-name "ext:tramp" (file &optional nodefault))
-
-(defun lsp--files-same-host (f1 f2)
- "Predicate on whether or not two files are on the same host."
- (or (not (or (file-remote-p f1) (file-remote-p f2)))
- (and (file-remote-p f1)
- (file-remote-p f2)
- (progn (require 'tramp)
- (equal (tramp-file-name-host (tramp-dissect-file-name f1))
- (tramp-file-name-host (tramp-dissect-file-name f2)))))))
-
-(defun lsp-find-session-folder (session file-name)
- "Look in the current SESSION for folder containing FILE-NAME."
- (let ((file-name-canonical (lsp-f-canonical file-name)))
- (->> session
- (lsp-session-folders)
- (--filter (and (lsp--files-same-host it file-name-canonical)
- (or (lsp-f-same? it file-name-canonical)
- (and (f-dir? it)
- (lsp-f-ancestor-of? it file-name-canonical)))))
- (--max-by (> (length it)
- (length other))))))
-
-(defun lsp-find-workspace (server-id &optional file-name)
- "Find workspace for SERVER-ID for FILE-NAME."
- (-when-let* ((session (lsp-session))
- (folder->servers (lsp-session-folder->servers session))
- (workspaces (if file-name
- (gethash (lsp-find-session-folder session file-name) folder->servers)
- (lsp--session-workspaces session))))
-
- (--first (eq (lsp--client-server-id (lsp--workspace-client it)) server-id) workspaces)))
-
-(defun lsp--calculate-root (session file-name)
- "Calculate project root for FILE-NAME in SESSION."
- (and
- (->> session
- (lsp-session-folders-blacklist)
- (--first (and (lsp--files-same-host it file-name)
- (lsp-f-ancestor-of? it file-name)
- (prog1 t
- (lsp--info "File %s is in blacklisted directory %s" file-name it))))
- not)
- (or
- (when lsp-auto-guess-root
- (lsp--suggest-project-root))
- (lsp-find-session-folder session file-name)
- (unless lsp-auto-guess-root
- (lsp--find-root-interactively session)))))
-
-(defun lsp--try-open-in-library-workspace ()
- "Try opening current file as library file in any of the active workspace.
-The library folders are defined by each client for each of the active workspace."
- (when-let ((workspace (->> (lsp-session)
- (lsp--session-workspaces)
- ;; Sort the last active workspaces first as they are more likely to be
- ;; the correct ones, especially when jumping to a definition.
- (-sort (lambda (a _b)
- (-contains? lsp--last-active-workspaces a)))
- (--first
- (and (-> it lsp--workspace-client lsp--matching-clients?)
- (when-let ((library-folders-fn
- (-> it lsp--workspace-client lsp--client-library-folders-fn)))
- (-first (lambda (library-folder)
- (lsp-f-ancestor-of? library-folder (buffer-file-name)))
- (funcall library-folders-fn it))))))))
- (lsp--open-in-workspace workspace)
- (view-mode t)
- (lsp--info "Opening read-only library file %s." (buffer-file-name))
- (list workspace)))
-
-(defun lsp--persist-session (session)
- "Persist SESSION to `lsp-session-file'."
- (lsp--persist lsp-session-file (make-lsp-session
- :folders (lsp-session-folders session)
- :folders-blacklist (lsp-session-folders-blacklist session)
- :server-id->folders (lsp-session-server-id->folders session))))
-
-(defun lsp--try-project-root-workspaces (ask-for-client ignore-multi-folder)
- "Try create opening file as a project file.
-When IGNORE-MULTI-FOLDER is t the lsp mode will start new
-language server even if there is language server which can handle
-current language. When IGNORE-MULTI-FOLDER is nil current file
-will be opened in multi folder language server if there is
-such."
- (-let ((session (lsp-session)))
- (-if-let (clients (if ask-for-client
- (list (lsp--completing-read "Select server to start: "
- (ht-values lsp-clients)
- (-compose 'symbol-name 'lsp--client-server-id) nil t))
- (lsp--find-clients)))
- (-if-let (project-root (-some-> session
- (lsp--calculate-root (buffer-file-name))
- (lsp-f-canonical)))
- (progn
- ;; update project roots if needed and persist the lsp session
- (unless (-contains? (lsp-session-folders session) project-root)
- (cl-pushnew project-root (lsp-session-folders session))
- (lsp--persist-session session))
- (lsp--ensure-lsp-servers session clients project-root ignore-multi-folder))
- (lsp--warn "%s not in project or it is blacklisted." (buffer-name))
- nil)
- (lsp--warn "No LSP server for %s(check *lsp-log*)." major-mode)
- nil)))
-
-(defun lsp-shutdown-workspace ()
- "Shutdown language server."
- (interactive)
- (--when-let (pcase (lsp-workspaces)
- (`nil (user-error "There are no active servers in the current buffer"))
- (`(,workspace) (when (y-or-n-p (format "Are you sure you want to stop the server %s?"
- (lsp--workspace-print workspace)))
- workspace))
- (workspaces (lsp--completing-read "Select server: "
- workspaces
- 'lsp--workspace-print nil t)))
- (lsp-workspace-shutdown it)))
-
-(make-obsolete 'lsp-shutdown-workspace 'lsp-workspace-shutdown "lsp-mode 6.1")
-
-(defcustom lsp-auto-select-workspace t
- "Shutdown or restart a single workspace.
-If set and the current buffer has only a single workspace
-associated with it, `lsp-shutdown-workspace' and
-`lsp-restart-workspace' will act on it without asking."
- :type 'boolean
- :group 'lsp-mode)
-
-(defun lsp--read-workspace ()
- "Ask the user to select a workspace.
-Errors if there are none."
- (pcase (lsp-workspaces)
- (`nil (error "No workspaces associated with the current buffer"))
- ((and `(,workspace) (guard lsp-auto-select-workspace)) workspace)
- (workspaces (lsp--completing-read "Select workspace: " workspaces
- #'lsp--workspace-print nil t))))
-
-(defun lsp-workspace-shutdown (workspace)
- "Shut the workspace WORKSPACE and the language server associated with it"
- (interactive (list (lsp--read-workspace)))
- (lsp--warn "Stopping %s" (lsp--workspace-print workspace))
- (with-lsp-workspace workspace (lsp--shutdown-workspace)))
-
-(defun lsp-disconnect ()
- "Disconnect the buffer from the language server."
- (interactive)
- (lsp--text-document-did-close t)
- (lsp-managed-mode -1)
- (lsp-mode -1)
- (setq lsp--buffer-workspaces nil)
- (lsp--info "Disconnected"))
-
-(defun lsp-restart-workspace ()
- (interactive)
- (--when-let (pcase (lsp-workspaces)
- (`nil (user-error "There are no active servers in the current buffer"))
- (`(,workspace) workspace)
- (workspaces (lsp--completing-read "Select server: "
- workspaces
- 'lsp--workspace-print nil t)))
- (lsp-workspace-restart it)))
-
-(make-obsolete 'lsp-restart-workspace 'lsp-workspace-restart "lsp-mode 6.1")
-
-(defun lsp-workspace-restart (workspace)
- "Restart the workspace WORKSPACE and the language server associated with it"
- (interactive (list (lsp--read-workspace)))
- (lsp--warn "Restarting %s" (lsp--workspace-print workspace))
- (with-lsp-workspace workspace (lsp--shutdown-workspace t)))
-
-;;;###autoload
-(defun lsp (&optional arg)
- "Entry point for the server startup.
-When ARG is t the lsp mode will start new language server even if
-there is language server which can handle current language. When
-ARG is nil current file will be opened in multi folder language
-server if there is such. When `lsp' is called with prefix
-argument ask the user to select which language server to start."
- (interactive "P")
-
- (lsp--require-packages)
-
- (when (buffer-file-name)
- (let (clients
- (matching-clients (lsp--filter-clients
- (-andfn #'lsp--matching-clients?
- #'lsp--server-binary-present?))))
- (cond
- (matching-clients
- (when (setq lsp--buffer-workspaces
- (or (and
- ;; Don't open as library file if file is part of a project.
- (not (lsp-find-session-folder (lsp-session) (buffer-file-name)))
- (lsp--try-open-in-library-workspace))
- (lsp--try-project-root-workspaces (equal arg '(4))
- (and arg (not (equal arg 1))))))
- (lsp-mode 1)
- (when lsp-auto-configure (lsp--auto-configure))
- (setq lsp-buffer-uri (lsp--buffer-uri))
- (lsp--info "Connected to %s."
- (apply 'concat (--map (format "[%s]" (lsp--workspace-print it))
- lsp--buffer-workspaces)))))
- ;; look for servers which are currently being downloaded.
- ((setq clients (lsp--filter-clients (-andfn #'lsp--matching-clients?
- #'lsp--client-download-in-progress?)))
- (lsp--info "There are language server(%s) installation in progress.
-The server(s) will be started in the buffer when it has finished."
- (-map #'lsp--client-server-id clients))
- (seq-do (lambda (client)
- (cl-pushnew (current-buffer) (lsp--client-buffers client)))
- clients))
- ;; look for servers to install
- ((setq clients (lsp--filter-clients (-andfn #'lsp--matching-clients?
- #'lsp--client-download-server-fn
- (-not #'lsp--client-download-in-progress?))))
- (let ((client (lsp--completing-read
- (concat "Unable to find installed server supporting this file. "
- "The following servers could be installed automatically: ")
- clients
- (-compose #'symbol-name #'lsp--client-server-id)
- nil
- t)))
- (cl-pushnew (current-buffer) (lsp--client-buffers client))
- (lsp--install-server-internal client)))
- ;; no clients present
- ((setq clients (unless matching-clients
- (lsp--filter-clients (-andfn #'lsp--matching-clients?
- (-not #'lsp--server-binary-present?)))))
- (lsp--warn "The following servers support current file but do not have automatic installation configuration: %s
-You may find the installation instructions at https://emacs-lsp.github.io/lsp-mode/page/languages.
-\(If you have already installed the server check *lsp-log*)."
- (mapconcat (lambda (client)
- (symbol-name (lsp--client-server-id client)))
- clients
- " ")))
- ;; no matches
- ((-> #'lsp--matching-clients? lsp--filter-clients not)
- (lsp--error "There are no language servers supporting current mode `%s' registered with `lsp-mode'.
-This issue might be caused by:
-1. The language you are trying to use does not have built-in support in `lsp-mode'. You must install the required support manually. Examples of this are `lsp-java' or `lsp-metals'.
-2. The language server that you expect to run is not configured to run for major mode `%s'. You may check that by checking the `:major-modes' that are passed to `lsp-register-client'.
-3. `lsp-mode' doesn't have any integration for the language behind `%s'. Refer to https://emacs-lsp.github.io/lsp-mode/page/languages and https://langserver.org/ .
-4. You are over `tramp'. In this case follow https://emacs-lsp.github.io/lsp-mode/page/remote/.
-5. You have disabled the `lsp-mode' clients for that file. (Check `lsp-enabled-clients' and `lsp-disabled-clients')."
- major-mode major-mode major-mode))))))
-
-(defun lsp--init-if-visible ()
- "Run `lsp' for the current buffer if the buffer is visible.
-Returns `t' if `lsp' was run for the buffer."
- (when (or (buffer-modified-p) (get-buffer-window nil t))
- (remove-hook 'window-configuration-change-hook #'lsp--init-if-visible t)
- (lsp)
- t))
-
-;;;###autoload
-(defun lsp-deferred ()
- "Entry point that defers server startup until buffer is visible.
-`lsp-deferred' will wait until the buffer is visible before invoking `lsp'.
-This avoids overloading the server with many files when starting Emacs."
- ;; Workspace may not be initialized yet. Use a buffer local variable to
- ;; remember that we deferred loading of this buffer.
- (setq lsp--buffer-deferred t)
- (let ((buffer (current-buffer)))
- ;; Avoid false positives as desktop-mode restores buffers by deferring
- ;; visibility check until the stack clears.
- (run-with-timer 0 nil (lambda ()
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (unless (lsp--init-if-visible)
- (add-hook 'window-configuration-change-hook #'lsp--init-if-visible nil t))))))))
-
-
-
-(defvar lsp-file-truename-cache (ht))
-
-(defmacro lsp-with-cached-filetrue-name (&rest body)
- "Executes BODY caching the `file-truename' calls."
- `(let ((old-fn (symbol-function 'file-truename)))
- (unwind-protect
- (progn
- (fset 'file-truename
- (lambda (file-name &optional counter prev-dirs)
- (or (gethash file-name lsp-file-truename-cache)
- (puthash file-name (apply old-fn (list file-name counter prev-dirs))
- lsp-file-truename-cache))))
- ,@body)
- (fset 'file-truename old-fn))))
-
-
-(defun lsp-virtual-buffer-call (key &rest args)
- (when lsp--virtual-buffer
- (when-let ((fn (plist-get lsp--virtual-buffer key)))
- (apply fn args))))
-
-(defun lsp-translate-column (column)
- "Translate COLUMN taking into account virtual buffers."
- (or (lsp-virtual-buffer-call :real->virtual-char column)
- column))
-
-(defun lsp-translate-line (line)
- "Translate LINE taking into account virtual buffers."
- (or (lsp-virtual-buffer-call :real->virtual-line line)
- line))
-
-
-;; lsp internal validation.
-
-(defmacro lsp--doctor (&rest checks)
- `(-let [buf (current-buffer)]
- (with-current-buffer (get-buffer-create "*lsp-performance*")
- (with-help-window (current-buffer)
- ,@(-map (-lambda ((msg form))
- `(insert (format "%s: %s\n" ,msg
- (let ((res (with-current-buffer buf
- ,form)))
- (cond
- ((eq res :optional) (propertize "NOT AVAILABLE (OPTIONAL)" 'face 'warning))
- (res (propertize "OK" 'face 'success))
- (t (propertize "ERROR" 'face 'error)))))))
- (-partition 2 checks))))))
-
-(define-obsolete-function-alias 'lsp-diagnose
- 'lsp-doctor "lsp-mode 7.1")
-
-(defun lsp-doctor ()
- "Validate performance settings."
- (interactive)
- (lsp--doctor
- "Checking for Native JSON support" (functionp 'json-serialize)
- "Check emacs supports `read-process-output-max'" (boundp 'read-process-output-max)
- "Check `read-process-output-max' default has been changed from 4k"
- (and (boundp 'read-process-output-max)
- (> read-process-output-max 4096))
- "Byte compiled against Native JSON (recompile lsp-mode if failing when Native JSON available)"
- (condition-case _err
- (progn (lsp--make-message (list "a" "b"))
- nil)
- (error t))
- "`gc-cons-threshold' increased?" (> gc-cons-threshold 800000)
- "Using gccemacs with emacs lisp native compilation (https://akrl.sdf.org/gccemacs.html)"
- (or (and (fboundp 'native-comp-available-p)
- (native-comp-available-p))
- :optional)))
-
-(declare-function package-version-join "ext:package")
-(declare-function package-desc-version "ext:package")
-(declare-function package--alist "ext:package")
-
-(defun lsp-version ()
- "Return string describing current version of `lsp-mode'."
- (interactive)
- (unless (featurep 'package)
- (require 'package))
- (let ((ver (format "lsp-mode %s, Emacs %s, %s"
- (package-version-join
- (package-desc-version
- (car (alist-get 'lsp-mode (package--alist)))))
- emacs-version
- system-type)))
- (if (called-interactively-p 'interactive)
- (lsp--info "%s" ver)
- ver)))
-
-
-
-;; org-mode/virtual-buffer
-
-(declare-function org-babel-get-src-block-info "ext:ob-core")
-(declare-function org-do-remove-indentation "ext:org-macs")
-(declare-function org-src-get-lang-mode "ext:org-src")
-(declare-function org-element-context "ext:org-element")
-
-(defun lsp--virtual-buffer-update-position ()
- (-if-let (virtual-buffer (-first (-lambda ((&plist :in-range))
- (funcall in-range))
- lsp--virtual-buffer-connections))
- (unless (equal virtual-buffer lsp--virtual-buffer)
- (lsp-org))
- (when lsp-managed-mode
- (lsp-managed-mode -1)
- (lsp-mode -1)
- (setq lsp--buffer-workspaces nil)
- (setq lsp--virtual-buffer nil)
- (setq lsp-buffer-uri nil)
-
- ;; force refresh of diagnostics
- (run-hooks 'lsp-after-diagnostics-hook))))
-
-(defun lsp-virtual-buffer-on-change (start end length)
- "Adjust on change event to be executed against the proper language server."
- (let ((max-point (max end
- (or (plist-get lsp--before-change-vals :end) 0)
- (+ start length))))
- (when-let ((virtual-buffer (-first (lambda (vb)
- (let ((lsp--virtual-buffer vb))
- (and (lsp-virtual-buffer-call :in-range start)
- (lsp-virtual-buffer-call :in-range max-point))))
- lsp--virtual-buffer-connections)))
- (lsp-with-current-buffer virtual-buffer
- (lsp-on-change start end length
- (lambda (&rest _)
- (list :range (lsp--range (list :character 0 :line 0)
- lsp--virtual-buffer-point-max)
- :text (lsp--buffer-content))))))))
-
-(defun lsp-virtual-buffer-before-change (start _end)
- (when-let ((virtual-buffer (-first (lambda (vb)
- (lsp-with-current-buffer vb
- (lsp-virtual-buffer-call :in-range start)))
- lsp--virtual-buffer-connections)))
- (lsp-with-current-buffer virtual-buffer
- (setq lsp--virtual-buffer-point-max
- (lsp--point-to-position (lsp-virtual-buffer-call :last-point))))))
-
-(defun lsp-patch-on-change-event ()
- (remove-hook 'after-change-functions #'lsp-on-change t)
- (add-hook 'after-change-functions #'lsp-virtual-buffer-on-change nil t)
- (add-hook 'before-change-functions #'lsp-virtual-buffer-before-change nil t))
-
-(defun lsp-kill-virtual-buffers ()
- (mapc #'lsp-virtual-buffer-disconnect lsp--virtual-buffer-connections))
-
-(defun lsp--move-point-in-indentation (point indentation)
- (save-excursion
- (goto-char point)
- (if (<= point (+ (point-at-bol) indentation))
- (point-at-bol)
- point)))
-
-(declare-function flycheck-checker-supports-major-mode-p "ext:flycheck")
-(declare-function flycheck-add-mode "ext:flycheck")
-(declare-function lsp-diagnostics-lsp-checker-if-needed "lsp-diagnostics")
-
-(defalias 'lsp-client-download-server-fn 'lsp--client-download-server-fn)
-
-(defun lsp-flycheck-add-mode (mode)
- "Register flycheck support for MODE."
- (lsp-diagnostics-lsp-checker-if-needed)
- (unless (flycheck-checker-supports-major-mode-p 'lsp mode)
- (flycheck-add-mode 'lsp mode)))
-
-(defun lsp-org ()
- (interactive)
- (-if-let ((virtual-buffer &as &plist :workspaces) (-first (-lambda ((&plist :in-range))
- (funcall in-range))
- lsp--virtual-buffer-connections))
- (unless (equal lsp--virtual-buffer virtual-buffer)
- (setq lsp--buffer-workspaces workspaces)
- (setq lsp--virtual-buffer virtual-buffer)
- (setq lsp-buffer-uri nil)
- (lsp-mode 1)
- (lsp-managed-mode 1)
- (lsp-patch-on-change-event))
-
- (save-excursion
- (-let* (virtual-buffer
- (wcb (lambda (f)
- (with-current-buffer (plist-get virtual-buffer :buffer)
- (-let* (((&plist :major-mode :buffer-file-name
- :goto-buffer :workspaces) virtual-buffer)
- (lsp--virtual-buffer virtual-buffer)
- (lsp--buffer-workspaces workspaces))
- (save-excursion
- (funcall goto-buffer)
- (funcall f))))))
- ((&plist :begin :end :post-blank :language) (cl-second (org-element-context)))
- ((&alist :tangle file-name) (cl-third (org-babel-get-src-block-info 'light)))
-
- (file-name (if file-name
- (f-expand file-name)
- (user-error "You should specify file name in the src block header.")))
- (begin-marker (progn
- (goto-char begin)
- (forward-line)
- (set-marker (make-marker) (point))))
- (end-marker (progn
- (goto-char end)
- (forward-line (1- (- post-blank)))
- (set-marker (make-marker) (1+ (point)))))
- (buf (current-buffer))
- (src-block (buffer-substring-no-properties begin-marker
- (1- end-marker)))
- (indentation (with-temp-buffer
- (insert src-block)
-
- (goto-char (point-min))
- (let ((indentation (current-indentation)))
- (plist-put lsp--virtual-buffer :indentation indentation)
- (org-do-remove-indentation)
- (goto-char (point-min))
- (- indentation (current-indentation))))))
- (add-hook 'post-command-hook #'lsp--virtual-buffer-update-position nil t)
-
- (when (fboundp 'flycheck-add-mode)
- (lsp-flycheck-add-mode 'org-mode))
-
- (setq lsp--virtual-buffer
- (list
- :in-range (lambda (&optional point)
- (<= begin-marker (or point (point)) (1- end-marker)))
- :goto-buffer (lambda () (goto-char begin-marker))
- :buffer-string
- (lambda ()
- (let ((src-block (buffer-substring-no-properties
- begin-marker
- (1- end-marker))))
- (with-temp-buffer
- (insert src-block)
-
- (goto-char (point-min))
- (while (not (eobp))
- (delete-region (point) (if (> (+ (point) indentation) (point-at-eol))
- (point-at-eol)
- (+ (point) indentation)))
- (forward-line))
- (buffer-substring-no-properties (point-min)
- (point-max)))))
- :buffer buf
- :begin begin-marker
- :end end-marker
- :indentation indentation
- :last-point (lambda () (1- end-marker))
- :cur-position (lambda ()
- (lsp-save-restriction-and-excursion
- (list :line (- (lsp--cur-line)
- (lsp--cur-line begin-marker))
- :character (let ((character (- (point)
- (line-beginning-position)
- indentation)))
- (if (< character 0)
- 0
- character)))))
- :line/character->point (-lambda (line character)
- (-let [inhibit-field-text-motion t]
- (+ indentation
- (lsp-save-restriction-and-excursion
- (goto-char begin-marker)
- (forward-line line)
- (-let [line-end (line-end-position)]
- (if (> character (- line-end (point)))
- line-end
- (forward-char character)
- (point)))))))
- :major-mode (org-src-get-lang-mode language)
- :buffer-file-name file-name
- :buffer-uri (lsp--path-to-uri file-name)
- :with-current-buffer wcb
- :buffer-live? (lambda (_) (buffer-live-p buf))
- :buffer-name (lambda (_)
- (propertize (format "%s(%s:%s)%s"
- (buffer-name buf)
- begin-marker
- end-marker
- language)
- 'face 'italic))
- :real->virtual-line (lambda (line)
- (+ line (line-number-at-pos begin-marker) -1))
- :real->virtual-char (lambda (char) (+ char indentation))
- :cleanup (lambda ()
- (set-marker begin-marker nil)
- (set-marker end-marker nil))))
- (setf virtual-buffer lsp--virtual-buffer)
- (puthash file-name virtual-buffer lsp--virtual-buffer-mappings)
- (push virtual-buffer lsp--virtual-buffer-connections)
-
- ;; TODO: tangle only connected sections
- (add-hook 'after-save-hook 'org-babel-tangle nil t)
- (add-hook 'lsp-after-open-hook #'lsp-patch-on-change-event nil t)
- (add-hook 'kill-buffer-hook #'lsp-kill-virtual-buffers nil t)
-
- (setq lsp--buffer-workspaces
- (lsp-with-current-buffer virtual-buffer
- (lsp)
- (plist-put virtual-buffer :workspaces (lsp-workspaces))
- (lsp-workspaces)))))))
-
-(defun lsp-virtual-buffer-disconnect (virtual-buffer)
- (interactive (list (or
- lsp--virtual-buffer
- (when lsp--virtual-buffer-connections
- (lsp--completing-read "Select virtual buffer to disconnect: "
- lsp--virtual-buffer-connections
- (-lambda ((&plist :buffer-file-name))
- buffer-file-name))))))
- (-if-let ((&plist :buffer-file-name file-name :cleanup) virtual-buffer)
- (progn
- (lsp-with-current-buffer virtual-buffer
- (lsp--text-document-did-close))
- (setq lsp--virtual-buffer-connections (-remove-item virtual-buffer lsp--virtual-buffer-connections))
- (when (eq virtual-buffer lsp--virtual-buffer)
- (setf lsp--virtual-buffer nil))
- (when cleanup (funcall cleanup))
- (remhash file-name lsp--virtual-buffer-mappings)
-
- (lsp--virtual-buffer-update-position)
- (lsp--info "Disconnected from buffer %s" file-name))
- (lsp--error "Nothing to disconnect from?")))
-
-
-
-(provide 'lsp-mode)
-;;; lsp-mode.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-modeline.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-modeline.el
deleted file mode 100644
index 09ea7d4..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-modeline.el
+++ /dev/null
@@ -1,354 +0,0 @@
-;;; lsp-modeline.el --- LSP modeline features -*- lexical-binding: t; -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; LSP modeline
-;;
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-modeline nil
- "LSP support for modeline"
- :prefix "lsp-modeline-"
- :group 'lsp-mode
- :tag "LSP Modeline")
-
-(defcustom lsp-modeline-code-actions-kind-regex "$\\|quickfix.*\\|refactor.*"
- "Regex for the code actions kinds to show in the modeline."
- :type 'string
- :group 'lsp-modeline)
-
-(defcustom lsp-modeline-code-actions-segments '(count icon)
- "Define what should display on the modeline when code actions are available."
- :type '(repeat (choice
- (const :tag "Show the lightbulb icon" icon)
- (const :tag "Show the name of the preferred code action" name)
- (const :tag "Show the count of how many code actions available" count)))
- :group 'lsp-modeline
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-modeline-code-action-fallback-icon "💡"
- "Define what should display on the modeline when code actions are available."
- :type 'string
- :group 'lsp-modeline
- :package-version '(lsp-mode . "7.1"))
-
-(defface lsp-modeline-code-actions-face
- '((t :inherit homoglyph))
- "Face used to code action text on modeline."
- :group 'lsp-modeline)
-
-(defface lsp-modeline-code-actions-preferred-face
- '((t :foreground "yellow"))
- "Face used to code action text on modeline."
- :group 'lsp-modeline)
-
-;;;###autoload
-(define-obsolete-variable-alias 'lsp-diagnostics-modeline-scope
- 'lsp-modeline-diagnostics-scope "lsp-mode 7.0.1")
-
-(defcustom lsp-modeline-diagnostics-scope :workspace
- "The modeline diagnostics scope."
- :group 'lsp-modeline
- :type '(choice (const :tag "File" :file)
- (const :tag "Project" :workspace)
- (const :tag "All Projects" :global))
- :package-version '(lsp-mode . "6.3"))
-
-(declare-function all-the-icons-octicon "ext:all-the-icons" t t)
-(declare-function lsp-treemacs-errors-list "ext:lsp-treemacs" t)
-
-
-;; code actions
-
-(defvar-local lsp-modeline--code-actions-string nil
- "Holds the current code action string on modeline.")
-
-(defun lsp-modeline--code-action-face (preferred-code-action)
- "Return the face checking if there is any PREFERRED-CODE-ACTION."
- (if preferred-code-action
- 'lsp-modeline-code-actions-preferred-face
- 'lsp-modeline-code-actions-face))
-
-(defun lsp-modeline--code-actions-icon (face)
- "Build the icon for modeline code actions using FACE."
- (if (require 'all-the-icons nil t)
- (all-the-icons-octicon "light-bulb"
- :face face
- :v-adjust -0.0575)
- (propertize lsp-modeline-code-action-fallback-icon 'face face)))
-
-(defun lsp-modeline--code-action-name (actions preferred-code-action-title)
- "Return the code action name from ACTIONS and PREFERRED-CODE-ACTION-TITLE."
- (or preferred-code-action-title
- (->> actions
- lsp-seq-first
- lsp-modeline--code-action->string)))
-
-(defun lsp-modeline--code-action->string (action)
- "Convert code ACTION to friendly string."
- (->> action
- lsp:code-action-title
- (replace-regexp-in-string "[\n\t ]+" " ")))
-
-(defun lsp-modeline--build-code-actions-segments (actions)
- "Build the code ACTIONS string from the defined segments."
- (let* ((preferred-code-action (-some->> actions
- (-first #'lsp:code-action-is-preferred?)
- lsp-modeline--code-action->string))
- (face (lsp-modeline--code-action-face preferred-code-action)))
- (mapconcat
- (lambda (segment)
- (pcase segment
- ('icon (lsp-modeline--code-actions-icon face))
- ('name (propertize (lsp-modeline--code-action-name actions preferred-code-action)
- 'face face))
- ('count (propertize (number-to-string (seq-length actions))
- 'face face))))
- lsp-modeline-code-actions-segments " ")))
-
-(defun lsp-modeline--build-code-actions-string (actions)
- "Build the string to be presented on modeline for code ACTIONS."
- (-let* ((single-action? (= (length actions) 1))
- (keybinding (concat "("
- (-some->> #'lsp-execute-code-action
- where-is-internal
- (-find (lambda (o)
- (not (member (aref o 0) '(menu-bar normal-state)))))
- key-description)
- ")"))
- (built-string (lsp-modeline--build-code-actions-segments actions))
- (preferred-code-action (-some->> actions
- (-first #'lsp:code-action-is-preferred?)
- lsp-modeline--code-action->string)))
- (add-text-properties 0 (length built-string)
- (list 'help-echo
- (concat (format "Apply code actions %s\nmouse-1: " keybinding)
- (if single-action?
- (lsp-modeline--code-action-name actions preferred-code-action)
- "select from multiple code actions"))
- 'mouse-face 'mode-line-highlight
- 'local-map (make-mode-line-mouse-map
- 'mouse-1 (lambda ()
- (interactive)
- (if single-action?
- (lsp-execute-code-action (lsp-seq-first actions))
- (lsp-execute-code-action (lsp--select-action actions))))))
- built-string)
- (unless (string= "" built-string)
- (concat built-string " "))))
-
-(defun lsp--modeline-update-code-actions (actions)
- "Update modeline with new code ACTIONS."
- (when lsp-modeline-code-actions-kind-regex
- (setq actions (seq-filter (-lambda ((&CodeAction :kind?))
- (or (not kind?)
- (s-match lsp-modeline-code-actions-kind-regex kind?)))
- actions)))
- (setq lsp-modeline--code-actions-string
- (if (seq-empty-p actions) ""
- (lsp-modeline--build-code-actions-string actions)))
- (force-mode-line-update))
-
-(defun lsp-modeline--check-code-actions (&rest _)
- "Request code actions to update modeline for given BUFFER."
- (when (lsp-feature? "textDocument/codeAction")
- (lsp-request-async
- "textDocument/codeAction"
- (lsp--text-document-code-action-params)
- #'lsp--modeline-update-code-actions
- :mode 'unchanged
- :cancel-token :lsp-modeline-code-actions)))
-
-(defun lsp-modeline--enable-code-actions ()
- "Enable code actions on modeline mode."
- (when (and lsp-modeline-code-actions-enable
- (lsp-feature? "textDocument/codeAction"))
- (lsp-modeline-code-actions-mode 1)))
-
-(defun lsp-modeline--disable-code-actions ()
- "Disable code actions on modeline mode."
- (lsp-modeline-code-actions-mode -1))
-
-;;;###autoload
-(define-minor-mode lsp-modeline-code-actions-mode
- "Toggle code actions on modeline."
- :group 'lsp-modeline
- :global nil
- :lighter ""
- (cond
- (lsp-modeline-code-actions-mode
- (add-to-list 'global-mode-string '(t (:eval lsp-modeline--code-actions-string)))
-
- (add-hook 'lsp-on-idle-hook 'lsp-modeline--check-code-actions nil t)
- (add-hook 'lsp-configure-hook #'lsp-modeline--enable-code-actions nil t)
- (add-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-code-actions nil t))
- (t
- (remove-hook 'lsp-on-idle-hook 'lsp-modeline--check-code-actions t)
- (remove-hook 'lsp-configure-hook #'lsp-modeline--enable-code-actions t)
- (remove-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-code-actions t)
- (setq global-mode-string (remove '(t (:eval lsp-modeline--code-actions-string)) global-mode-string)))))
-
-
-;; diagnostics
-
-(defvar-local lsp-modeline--diagnostics-string nil
- "Value of current buffer diagnostics statistics.")
-
-(defvar lsp-modeline--diagnostics-wks->strings nil
- "Plist of workspaces to their modeline strings.
-The `:global' workspace is global one.")
-
-(defun lsp-modeline-diagnostics-statistics ()
- "Calculate diagnostics statistics based on `lsp-modeline-diagnostics-scope'."
- (let ((diagnostics (cond
- ((equal :file lsp-modeline-diagnostics-scope)
- (list (lsp--get-buffer-diagnostics)))
- (t (->> (eq :workspace lsp-modeline-diagnostics-scope)
- (lsp-diagnostics)
- (ht-values)))))
- (stats (make-vector lsp/diagnostic-severity-max 0))
- strs
- (i 0))
- (mapc (lambda (buf-diags)
- (mapc (lambda (diag)
- (-let [(&Diagnostic? :severity?) diag]
- (when severity?
- (cl-incf (aref stats severity?)))))
- buf-diags))
- diagnostics)
- (while (< i lsp/diagnostic-severity-max)
- (when (> (aref stats i) 0)
- (setq strs
- (nconc strs
- `(,(propertize
- (format "%s" (aref stats i))
- 'face
- (cond
- ((= i lsp/diagnostic-severity-error) 'error)
- ((= i lsp/diagnostic-severity-warning) 'warning)
- ((= i lsp/diagnostic-severity-information) 'success)
- ((= i lsp/diagnostic-severity-hint) 'success)))))))
- (cl-incf i))
- (-> (s-join "/" strs)
- (propertize 'mouse-face 'mode-line-highlight
- 'help-echo "mouse-1: Show diagnostics"
- 'local-map (when (require 'lsp-treemacs nil t)
- (make-mode-line-mouse-map
- 'mouse-1 #'lsp-treemacs-errors-list))))))
-
-(defun lsp-modeline--diagnostics-reset-modeline-cache ()
- "Reset the modeline diagnostics cache."
- (plist-put lsp-modeline--diagnostics-wks->strings (car (lsp-workspaces)) nil)
- (plist-put lsp-modeline--diagnostics-wks->strings :global nil)
- (setq lsp-modeline--diagnostics-string nil))
-
-(defun lsp-modeline--diagnostics-update-modeline ()
- "Update diagnostics modeline string."
- (cl-labels ((calc-modeline ()
- (let ((str (lsp-modeline-diagnostics-statistics)))
- (if (string-empty-p str) ""
- (concat str " ")))))
- (setq lsp-modeline--diagnostics-string
- (cl-case lsp-modeline-diagnostics-scope
- (:file (or lsp-modeline--diagnostics-string
- (calc-modeline)))
- (:workspace
- (let ((wk (car (lsp-workspaces))))
- (or (plist-get lsp-modeline--diagnostics-wks->strings wk)
- (let ((ml (calc-modeline)))
- (setq lsp-modeline--diagnostics-wks->strings
- (plist-put lsp-modeline--diagnostics-wks->strings wk ml))
- ml))))
- (:global
- (or (plist-get lsp-modeline--diagnostics-wks->strings :global)
- (let ((ml (calc-modeline)))
- (setq lsp-modeline--diagnostics-wks->strings
- (plist-put lsp-modeline--diagnostics-wks->strings :global ml))
- ml)))))))
-
-(defun lsp-modeline--enable-diagnostics ()
- "Enable diagnostics on modeline mode."
- (when (and lsp-modeline-diagnostics-enable
- (lsp-feature? "textDocument/publishDiagnostics"))
- (lsp-modeline-diagnostics-mode 1)))
-
-(defun lsp-modeline--disable-diagnostics ()
- "Disable diagnostics on modeline mode."
- (lsp-modeline-diagnostics-mode -1))
-
-;;;###autoload
-(define-obsolete-function-alias 'lsp-diagnostics-modeline-mode
- 'lsp-modeline-diagnostics-mode "lsp-mode 7.0.1")
-
-;;;###autoload
-(define-minor-mode lsp-modeline-diagnostics-mode
- "Toggle diagnostics modeline."
- :group 'lsp-modeline
- :global nil
- :lighter ""
- (cond
- (lsp-modeline-diagnostics-mode
- (add-hook 'lsp-configure-hook #'lsp-modeline--enable-diagnostics nil t)
- (add-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-diagnostics nil t)
- (add-to-list 'global-mode-string '(t (:eval (lsp-modeline--diagnostics-update-modeline))))
- (add-hook 'lsp-diagnostics-updated-hook 'lsp-modeline--diagnostics-reset-modeline-cache))
- (t
- (remove-hook 'lsp-configure-hook #'lsp-modeline--enable-diagnostics t)
- (remove-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-diagnostics t)
- (remove-hook 'lsp-diagnostics-updated-hook 'lsp-modeline--diagnostics-reset-modeline-cache)
- (setq global-mode-string (remove '(t (:eval (lsp-modeline--diagnostics-update-modeline))) global-mode-string)))))
-
-
-;; workspace status
-
-(defun lsp-modeline--workspace-status-string ()
- "Build the workspace status string."
- '(t (:eval (-keep #'lsp--workspace-status-string (lsp-workspaces)))))
-
-(defun lsp-modeline--enable-workspace-status ()
- "Enable workspace status on modeline."
- (let ((status (lsp-modeline--workspace-status-string)))
- (setq-local global-mode-string (if (-contains? global-mode-string status)
- global-mode-string
- (cons status global-mode-string)))))
-
-(defun lsp-modeline--disable-workspace-status ()
- "Disable workspace status on modeline."
- (let ((status (lsp-modeline--workspace-status-string)))
- (setq-local global-mode-string (remove status global-mode-string))))
-
-;;;###autoload
-(define-minor-mode lsp-modeline-workspace-status-mode
- "Toggle workspace status on modeline."
- :group 'lsp-modeline
- :global nil
- :lighter ""
- (cond
- (lsp-modeline-workspace-status-mode
- (add-hook 'lsp-configure-hook #'lsp-modeline--enable-workspace-status nil t)
- (add-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-workspace-status nil t))
- (t
- (remove-hook 'lsp-configure-hook #'lsp-modeline--enable-workspace-status t)
- (remove-hook 'lsp-unconfigure-hook #'lsp-modeline--disable-workspace-status t))))
-
-(lsp-consistency-check lsp-modeline)
-
-(provide 'lsp-modeline)
-;;; lsp-modeline.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-nim.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-nim.el
deleted file mode 100644
index 5418137..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-nim.el
+++ /dev/null
@@ -1,45 +0,0 @@
-;;; lsp-nim.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, nim
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Nim Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-;; Nim
-(defgroup lsp-nimlsp nil
- "LSP support for Nim, using nimlsp."
- :group 'lsp-mode
- :link '(url-link "https://github.com/PMunch/nimlsp"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection "nimlsp")
- :major-modes '(nim-mode)
- :priority -1
- :server-id 'nimls))
-
-
-(lsp-consistency-check lsp-nim)
-
-(provide 'lsp-nim)
-;;; lsp-nim.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-nix.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-nix.el
deleted file mode 100644
index 2e1c0b5..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-nix.el
+++ /dev/null
@@ -1,48 +0,0 @@
-;;; lsp-nix.el --- lsp-mode nix integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 lsp-mode maintainers
-
-;; Author: Seong Yong-ju <sei40kr@gmail.com>
-;; Keywords: languages
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Client for the rnix language server.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-nix nil
- "LSP support for Nix, using rnix-lsp."
- :group 'lsp-mode
- :link '(url-link "https://github.com/nix-community/rnix-lsp"))
-
-(defcustom lsp-nix-server-path "rnix-lsp"
- "Executable path for the server."
- :group 'lsp-nix
- :type 'string
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda () lsp-nix-server-path))
- :major-modes '(nix-mode)
- :server-id 'rnix-lsp))
-
-(lsp-consistency-check lsp-nix)
-
-(provide 'lsp-nix)
-;;; lsp-nix.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ocaml.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ocaml.el
deleted file mode 100644
index b1e1003..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-ocaml.el
+++ /dev/null
@@ -1,84 +0,0 @@
-;;; lsp-ocaml.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, ocaml
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Ocaml Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-ocaml nil
- "LSP support for OCaml, using ocaml-language-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/freebroccolo/ocaml-language-server"))
-
-(define-obsolete-variable-alias
- 'lsp-ocaml-ocaml-lang-server-command
- 'lsp-ocaml-lang-server-command
- "lsp-mode 6.1")
-
-(defcustom lsp-ocaml-lang-server-command
- '("ocaml-language-server" "--stdio")
- "Command to start ocaml-language-server."
- :group 'lsp-ocaml
- :type '(choice
- (string :tag "Single string value")
- (repeat :tag "List of string values"
- string)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda () lsp-ocaml-lang-server-command))
- :major-modes '(reason-mode caml-mode tuareg-mode)
- :priority -1
- :server-id 'ocaml-ls))
-
-(defgroup lsp-ocaml-lsp-server nil
- "LSP support for OCaml, using ocaml-lsp-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/ocaml/ocaml-lsp"))
-
-(define-obsolete-variable-alias 'lsp-merlin 'lsp-ocaml-lsp-server "lsp-mode 6.1")
-(define-obsolete-variable-alias 'lsp-merlin-command 'lsp-ocaml-lsp-server-command "lsp-mode 6.1")
-
-(defcustom lsp-ocaml-lsp-server-command
- '("ocamllsp")
- "Command to start ocaml-language-server."
- :group 'lsp-ocaml
- :type '(choice
- (string :tag "Single string value")
- (repeat :tag "List of string values"
- string)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection
- (lsp-stdio-connection (lambda () lsp-ocaml-lsp-server-command))
- :major-modes '(reason-mode caml-mode tuareg-mode)
- :priority 0
- :server-id 'ocaml-lsp-server))
-
-
-(lsp-consistency-check lsp-ocaml)
-
-(provide 'lsp-ocaml)
-;;; lsp-ocaml.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-perl.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-perl.el
deleted file mode 100644
index 07ef6d0..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-perl.el
+++ /dev/null
@@ -1,117 +0,0 @@
-;;; lsp-perl.el --- lsp-perl config -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 lsp-mode developers
-
-;; Author: Hiroki Noda <kubo39@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-perl client
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-perl nil
- "LSP support for Perl"
- :group 'lsp-mode
- :link '(url-link "https://github.com/richterger/Perl-LanguageServer")
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-perl-language-server-path "perl"
- "Path to perl interpreter."
- :type 'string
- :group 'lsp-perl
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-perl-language-server-port 13603
- "Choose listen port."
- :type 'integer
- :group 'lsp-perl
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-perl-language-server-client-version "2.1.0"
- "Choose client version."
- :type 'string
- :group 'lsp-perl
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-perl-perl-cmd nil
- "Path to perl interpreter used in Perl Language Server.
-Defaults to `perl' if nil."
- :type 'string
- :group 'lsp-perl
- :package-version '(lsp-mode . "7.0.1"))
-(defcustom lsp-perl-perl-inc nil
- "A vector of paths to add to perl library path."
- :type 'lsp-string-vector
- :group 'lsp-perl
- :package-version '(lsp-mode . "7.0.1"))
-(defcustom lsp-perl-file-filter nil
- "A vector of directories filtering perl file.
-Defaults to `[\".pm\" \".pl\"]' if nil."
- :type 'lsp-string-vector
- :group 'lsp-perl
- :package-version '(lsp-mode . "7.0.1"))
-(defcustom lsp-perl-ignore-dirs nil
- "A vector of directories to ignore.
-Defaults to `[\".vscode\" \".git\" \".svn\"]' if nil."
- :type 'lsp-string-vector
- :group 'lsp-perl
- :package-version '(lsp-mode . "7.0.1"))
-
-(defcustom lsp-perl-show-local-vars nil
- "If true, show also local variables in symbol view.
-Defaults to false if nil"
- :type 'boolean
- :group 'lsp-perl
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-perl-log-level nil
- "Log level 0-2.
-Defaults to 0."
- :type 'integer
- :group 'lsp-perl
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-register-custom-settings
- '(("perl.perlCmd" lsp-perl-perl-cmd)
- ("perl.perlInc" lsp-perl-perl-inc)
- ("perl.fileFilter" lsp-perl-file-filter)
- ("perl.ignoreDirs" lsp-perl-ignore-dirs)
- ("perl.showLocalVars" lsp-perl-show-local-vars t)
- ("perl.logLevel" lsp-perl-log-level)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- (list lsp-perl-language-server-path
- "-MPerl::LanguageServer" "-e" "Perl::LanguageServer::run" "--"
- (format "--port %d --version %s"
- lsp-perl-language-server-port lsp-perl-language-server-client-version))))
- :major-modes '(perl-mode cperl-mode)
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "perl"))))
- :priority -1
- :server-id 'perl-language-server))
-
-(lsp-consistency-check lsp-perl)
-
-(provide 'lsp-perl)
-;;; lsp-perl.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-php.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-php.el
deleted file mode 100644
index 975a527..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-php.el
+++ /dev/null
@@ -1,433 +0,0 @@
-;;; lsp-php.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, php
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the PHP Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'lsp-protocol)
-
-;; PHP Language Server
-(defgroup lsp-php nil
- "LSP support for PHP, using php-language-server."
- :link '(url-link "https://github.com/felixfbecker/php-language-server")
- :group 'lsp-mode)
-
-(defun lsp-php-get-composer-dir ()
- "Get composer home directory if possible."
- (if (executable-find "composer")
- (replace-regexp-in-string "\n$" "" (shell-command-to-string "composer config --global home"))
- "~/.composer"))
-
-(defcustom lsp-php-composer-dir nil
- "Home directory of composer."
- :group 'lsp-php
- :type 'string)
-
-(defcustom lsp-clients-php-server-command nil
- "Install directory for php-language-server."
- :group 'lsp-php
- :type '(repeat string))
-
-(defun lsp-php--create-connection ()
- "Create lsp connection."
- (lsp-stdio-connection
- (lambda ()
- (unless lsp-php-composer-dir
- (setq lsp-php-composer-dir (lsp-php-get-composer-dir)))
- (unless lsp-clients-php-server-command
- (setq lsp-clients-php-server-command
- `("php",
- (expand-file-name
- (f-join lsp-php-composer-dir "vendor/felixfbecker/language-server/bin/php-language-server.php")))))
- lsp-clients-php-server-command)
- (lambda ()
- (if (and (cdr lsp-clients-php-server-command)
- (eq (string-match-p "php[0-9.]*\\'" (car lsp-clients-php-server-command)) 0))
- ;; Start with the php command and the list has more elems. Test the existence of the PHP script.
- (let ((php-file (nth 1 lsp-clients-php-server-command)))
- (or (file-exists-p php-file)
- (progn
- (lsp-log "%s is not present." php-file)
- nil)))
- t))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-php--create-connection)
- :activation-fn (lsp-activate-on "php")
- :priority -3
- :server-id 'php-ls))
-
-;;; Intelephense
-(defgroup lsp-intelephense nil
- "LSP support for PHP, using Intelephense."
- :group 'lsp-mode
- :link '(url-link "https://github.com/bmewburn/vscode-intelephense")
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-files-max-size 1000000
- "Maximum file size in bytes."
- :type 'number
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-files-associations
- ["*.php" "*.phtml"]
- "Configure glob patterns to make files available for language
-server features."
- :type '(repeat string)
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-files-exclude
- ["**/.git/**" "**/.svn/**" "**/.hg/**" "**/CVS/**" "**/.DS_Store/**"
- "**/node_modules/**" "**/bower_components/**" "**/vendor/**/{Test,test,Tests,tests}/**"]
- "Configure glob patterns to exclude certain files and folders
-from all language server features."
- :type '(repeat string)
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-stubs
- ["apache" "bcmath" "bz2" "calendar"
- "com_dotnet" "Core" "ctype" "curl" "date" "dba" "dom" "enchant"
- "exif" "fileinfo" "filter" "fpm" "ftp" "gd" "hash" "iconv" "imap" "interbase"
- "intl" "json" "ldap" "libxml" "mbstring" "mcrypt" "meta" "mssql" "mysqli"
- "oci8" "odbc" "openssl" "pcntl" "pcre" "PDO" "pdo_ibm" "pdo_mysql"
- "pdo_pgsql" "pdo_sqlite" "pgsql" "Phar" "posix" "pspell" "readline" "recode"
- "Reflection" "regex" "session" "shmop" "SimpleXML" "snmp" "soap" "sockets"
- "sodium" "SPL" "sqlite3" "standard" "superglobals" "sybase" "sysvmsg"
- "sysvsem" "sysvshm" "tidy" "tokenizer" "wddx" "xml" "xmlreader" "xmlrpc"
- "xmlwriter" "Zend OPcache" "zip" "zlib"]
- "Configure stub files for built in symbols and common
-extensions. The default setting includes PHP core and all
-bundled extensions."
- :type '(repeat string)
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-completion-insert-use-declaration t
- "Use declarations will be automatically inserted for namespaced
-classes, traits, interfaces, functions, and constants."
- :type 'boolean
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-completion-fully-qualify-global-constants-and-functions nil
- "Global namespace constants and functions will be fully
-qualified (prefixed with a backslash)."
- :type 'boolean
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-completion-trigger-parameter-hints t
- "Method and function completions will include parentheses and
-trigger parameter hints."
- :type 'boolean
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-intelephense-completion-max-items 100
- "The maximum number of completion items returned per request."
- :type 'number
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-intelephense-format-enable t
- "Enables formatting."
- :type 'boolean
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-licence-key nil
- "Enter your intelephense licence key here to access premium
-features."
- :type 'string
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-intelephense-telemetry-enabled nil
- "Anonymous usage and crash data will be sent to Azure
-Application Insights."
- :type 'boolean
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-intelephense-rename-exclude
- ["**/vendor/**"]
- "Glob patterns to exclude files and folders from having symbols
-renamed. Rename operation will fail if references and/or
-definitions are found in excluded files/folders."
- :type '(repeat string)
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-intelephense-trace-server "off"
- "Traces the communication between VSCode and the intelephense
-language server."
- :type '(choice (:tag "off" "messages" "verbose"))
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-storage-path
- (expand-file-name (locate-user-emacs-file "lsp-cache"))
- "Optional absolute path to storage dir."
- :type 'directory
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-intelephense-clear-cache nil
- "Optional flag to clear server state."
- :type 'boolean
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-intelephense-multi-root t
- "Flag to control if the server supports multi-root projects."
- :type 'boolean
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.3"))
-
-(lsp-register-custom-settings
- '(("intelephense.trace.server" lsp-intelephense-trace-server)
- ("intelephense.rename.exclude" lsp-intelephense-rename-exclude)
- ("intelephense.telemetry.enabled" lsp-intelephense-telemetry-enabled t)
- ("intelephense.format.enable" lsp-intelephense-format-enable t)
- ("intelephense.completion.maxItems" lsp-intelephense-completion-max-items)
- ("intelephense.completion.triggerParameterHints" lsp-intelephense-completion-trigger-parameter-hints t)
- ("intelephense.completion.fullyQualifyGlobalConstantsAndFunctions" lsp-intelephense-completion-fully-qualify-global-constants-and-functions t)
- ("intelephense.completion.insertUseDeclaration" lsp-intelephense-completion-insert-use-declaration t)
- ("intelephense.stubs" lsp-intelephense-stubs)
- ("intelephense.files.exclude" lsp-intelephense-files-exclude)
- ("intelephense.files.associations" lsp-intelephense-files-associations)
- ("intelephense.files.maxSize" lsp-intelephense-files-max-size)))
-
-(define-obsolete-variable-alias
- 'lsp-clients-php-iph-server-command
- 'lsp-intelephense-server-command
- "lsp-mode 6.1")
-
-(defcustom lsp-intelephense-server-command
- `("intelephense" "--stdio")
- "Command to start Intelephense."
- :type '(repeat string)
- :group 'lsp-intelephense
- :package-version '(lsp-mode . "6.1"))
-
-(lsp-dependency 'intelephense
- '(:system "intelephense")
- '(:npm :package "intelephense"
- :path "intelephense"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(or (executable-find
- (cl-first lsp-intelephense-server-command))
- (lsp-package-path 'intelephense))
- ,@(cl-rest lsp-intelephense-server-command))))
- :activation-fn (lsp-activate-on "php")
- :priority -1
- :notification-handlers (ht ("indexingStarted" #'ignore)
- ("indexingEnded" #'ignore))
- :initialization-options (lambda ()
- (list :storagePath lsp-intelephense-storage-path
- :licenceKey lsp-intelephense-licence-key
- :clearCache lsp-intelephense-clear-cache))
- :multi-root lsp-intelephense-multi-root
- :completion-in-comments? t
- :server-id 'iph
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'intelephense
- callback error-callback))))
-
-
-;;; Serenata
-(defgroup lsp-serenata nil
- "LSP support for the PHP programming language, using serenata."
- :group 'lsp-mode
- :link '(url-link "https://gitlab.com/Serenata/Serenata")
- :package-version '(lsp-mode . "7.0"))
-
-(defcustom lsp-serenata-server-path
- "serenata.phar"
- "Path to the Serenata Language Server phar file.
-It can be downloaded from https://gitlab.com/Serenata/Serenata/-/releases."
- :group 'lsp-serenata
- :type 'file)
-
-(defcustom lsp-serenata-uris
- []
- "A list of folders to index for your project.
-This does not have to include the root of the project itself, in
-case you have need of an exotic configuration where the root of
-the project is at some location but your actual PHP code is
-somewhere else. Note that if you are running Serenata in a
-container, you will have to ensure that these URI's are mapped
-inside it. Avoid using file paths containing spaces. This is
-currently broken due to apparent PHP quirks. By default, the
-value is taken from the lsp workspace location."
- :group 'lsp-serenata
- :type 'lsp-string-vector)
-
-(defcustom lsp-serenata-php-version
- 7.3
- "Allows you to specify the PHP version your project is written in.
-At the moment this directive is still ignored, but it will
-influence functionality such as refactoring in the future, where
-older PHP versions may not support scalar type hints, which may
-then be omitted from places such as getters and setters."
- :group 'lsp-serenata
- :type 'number)
-
-(defcustom lsp-serenata-file-extensions
- ["php"]
- "List of file extensions (without dot) to process.
-Files that do not match this whitelist will be ignored during
-indexing. Usually you'll want to set this to at least include
-php, as it is the most common PHP extension. phpt is not
-included by default as it is often used to contain test code that
-is not directly part of the code. Note that for existing
-projects, removing extensions will not not automatically prune
-files having them from the index if they are already present.
-Adding new ones will cause the files having them to be picked up
-on the next project initialization."
- :group 'lsp-serenata
- :type 'lsp-string-vector)
-
-(defcustom lsp-serenata-index-database-uri (lsp--path-to-uri (f-join user-emacs-directory "index.sqlite"))
- "The location to store the index database.
-Note that, as the index database uses SQLite and WAL mode,
-additional files (usually two) may be generated and used in the
-same folder. Note also that Serenata relies on the Doctrine DBAL
-library as well as the SQLite backends in PHP, which may not
-support non-file URI's, which may prevent you from using these."
- :group 'lsp-serenata
- :type 'file)
-
-(defcustom lsp-serenata-exclude-path-expressions ["/.+Test.php$/"]
- "One or more expressions of paths to ignore.
-This uses Symfony's Finder in the background, so this means you
-can configure anything here that can also be passed to the name
-function, which includes plain strings, globs, as well as regular
-expressions. Note that for existing projects, modifying these
-will not not automatically prune them from the index if they are
-already present."
- :group 'lsp-serenata
- :type 'lsp-string-vector)
-
-(defun lsp-serenata-server-start-fun (port)
- "Define serenata start function, it requires a PORT."
- `(,lsp-serenata-server-path
- "-u" ,(number-to-string port)))
-
-(defun lsp-serenata-init-options ()
- "Init options for lsp-serenata."
- `( :configuration ( :uris ,lsp-serenata-uris
- :indexDatabaseUri ,lsp-serenata-index-database-uri
- :phpVersion ,lsp-serenata-php-version
- :excludedPathExpressions ,lsp-serenata-exclude-path-expressions
- :fileExtensions ,lsp-serenata-file-extensions)))
-
-
-(lsp-interface (serenata:didProgressIndexing (:sequenceOfIndexedItem :totalItemsToIndex :progressPercentage :folderUri :fileUri :info) nil ))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-tcp-connection 'lsp-serenata-server-start-fun)
- :activation-fn (lsp-activate-on "php")
- :priority -2
- :notification-handlers (ht ("serenata/didProgressIndexing"
- (lambda (_server data)
- (lsp-log "%s" (lsp:serenata-did-progress-indexing-info data)))))
-
- :initialization-options #'lsp-serenata-init-options
- :initialized-fn (lambda (workspace)
- (when (equal (length lsp-serenata-uris) 0)
- (let* ((lsp-root (lsp--path-to-uri (lsp-workspace-root))))
- (setq lsp-serenata-uris (vector lsp-root))))
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "serenata"))))
- :server-id 'serenata))
-
-;;; phpactor
-
-(defgroup lsp-phpactor nil
- "LSP support for Phpactor."
- :link '(url-link "https://github.com/phpactor/phpactor")
- :group 'lsp-mode)
-
-(defcustom lsp-phpactor-path nil
- "Path to the `phpactor' command."
- :group 'lsp-phpactor
- :type "string")
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection
- (lambda ()
- (unless lsp-php-composer-dir
- (setq lsp-php-composer-dir (lsp-php-get-composer-dir)))
- (unless lsp-phpactor-path
- (setq lsp-phpactor-path (f-join lsp-php-composer-dir "vendor/phpactor/phpactor/bin/phpactor")))
- (list lsp-phpactor-path "language-server")))
- :activation-fn (lsp-activate-on "php")
- ;; `phpactor' is not really that feature-complete: it doesn't support
- ;; `textDocument/showOccurence' and sometimes errors (e.g. find references on
- ;; a global free-standing function).
- :priority -4
- ;; Even though `phpactor' itself supports no options, this needs to be
- ;; serialized as an empty object (otherwise the LS won't even start, due to a
- ;; type error).
- :initialization-options (ht)
- :server-id 'phpactor))
-
-(defcustom lsp-phpactor-extension-alist '(("Phpstan" . "phpactor/language-server-phpstan-extension")
- ("Behat" . "phpactor/behat-extension")
- ("PHPUnit" . "phpactor/phpunit-extension"))
- "Alist mapping extension names to `composer' packages.
-These extensions can be installed using
-`lsp-phpactor-install-extension'."
- :type '(alist :key-type "string" :value-type "string")
- :group 'lsp-phpactor)
-
-(defun lsp-phpactor-install-extension (extension)
- "Install a `phpactor' EXTENSION.
-See `lsp-phpactor-extension-alist' and
-https://phpactor.readthedocs.io/en/develop/extensions.html."
- (interactive (list (completing-read "Select extension: "
- lsp-phpactor-extension-alist)))
- (compilation-start
- (format "%s extension:install %s"
- (shell-quote-argument (expand-file-name lsp-phpactor-path))
- (shell-quote-argument
- (cdr (assoc extension lsp-phpactor-extension-alist))))
- nil
- (lambda (_mode)
- (format "*Phpactor install %s*" extension))))
-
-(lsp-consistency-check lsp-php)
-
-(provide 'lsp-php)
-;;; lsp-php.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-prolog.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-prolog.el
deleted file mode 100644
index 084f0ee..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-prolog.el
+++ /dev/null
@@ -1,55 +0,0 @@
-;;; lsp-prolog.el --- Prolog Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 James Cash
-
-;; Author: James Cash <james.nvc@gmail.com>
-;; Keywords: languages,tools
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-prolog client
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-prolog nil
- "LSP support for Prolog."
- :link '(url-link "https://github.com/jamesnvc/lsp_server")
- :group 'lsp-mode
- :tag "Lsp Prolog")
-
-(defcustom lsp-prolog-server-command '("swipl"
- "-g" "use_module(library(lsp_server))."
- "-g" "lsp_server:main"
- "-t" "halt"
- "--" "stdio")
- "The prolog-lsp server command."
- :group 'lsp-prolog
- :risky t
- :type 'list)
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection (lambda () lsp-prolog-server-command))
- :major-modes '(prolog-mode)
- :multi-root t
- :server-id 'prolog-lsp))
-
-(lsp-consistency-check lsp-prolog)
-
-(provide 'lsp-prolog)
-;;; lsp-prolog.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-protocol.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-protocol.el
deleted file mode 100644
index 50bcf3d..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-protocol.el
+++ /dev/null
@@ -1,752 +0,0 @@
-;;; lsp-protocol.el --- Language Sever Protocol Bindings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords: convenience
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Autogenerated bindings from lsp4j using
-;; https://github.com/victools/jsonschema-generator+scrips to generate
-;; scripts/generated.protocol.schema.json and then
-;; scripts/lsp-generate-bindings.el
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'dash)
-(require 'ht)
-(require 's)
-
-(eval-and-compile
- (defun lsp-keyword->symbol (keyword)
- "Convert a KEYWORD to symbol."
- (intern (substring (symbol-name keyword) 1)))
-
- (defun lsp-keyword->string (keyword)
- "Convert a KEYWORD to string."
- (substring (symbol-name keyword) 1))
-
- (defvar lsp-use-plists nil))
-
-(defmacro lsp-interface (&rest interfaces)
- "Generate LSP bindings from INTERFACES triplet.
-
-Example usage with `dash`.
-
-\(-let [(&ApplyWorkspaceEditResponse
- :failure-reason?) (ht (\"failureReason\" \"...\"))]
- failure-reason?)
-
-\(fn (INTERFACE-NAME-1 REQUIRED-FIELDS-1 OPTIONAL-FIELDS-1) (INTERFACE-NAME-2 REQUIRED-FIELDS-2 OPTIONAL-FIELDS-2) ...)"
- (with-case-table ascii-case-table
- (->> interfaces
- (-map (-lambda ((interface required optional))
- (let ((params (nconc
- (-map (lambda (param-name)
- (cons
- (intern (concat ":" (s-dashed-words (symbol-name param-name)) "?"))
- param-name))
- optional)
- (-map (lambda (param-name)
- (cons (intern (concat ":" (s-dashed-words (symbol-name param-name))))
- param-name))
- required))))
- (cl-list*
- `(defun ,(intern (format "dash-expand:&%s" interface)) (key source)
- (unless (or (member key ',(-map #'cl-first params))
- (s-starts-with? ":_" (symbol-name key)))
- (error "Unknown key: %s. Available keys: %s" key ',(-map #'cl-first params)))
- ,(if lsp-use-plists
- ``(plist-get ,source
- ,(if (s-starts-with? ":_" (symbol-name key))
- key
- (cl-rest (assoc key ',params))))
- ``(gethash ,(if (s-starts-with? ":_" (symbol-name key))
- (substring (symbol-name key) 1)
- (substring (symbol-name
- (cl-rest (assoc key ',params)))
- 1))
- ,source)))
- `(defun ,(intern (format "dash-expand:&%s?" interface)) (key source)
- (unless (member key ',(-map #'cl-first params))
- (error "Unknown key: %s. Available keys: %s" key ',(-map #'cl-first params)))
- ,(if lsp-use-plists
- ``(plist-get ,source
- ,(if (s-starts-with? ":_" (symbol-name key))
- key
- (cl-rest (assoc key ',params))))
- ``(when (ht? ,source)
- (gethash ,(substring (symbol-name
- (cl-rest (assoc key ',params)))
- 1)
- ,source))))
-
- `(defun ,(intern (format "lsp-%s?" (s-dashed-words (symbol-name interface)))) (object)
- (cond
- ((ht? object)
- (-all? (let ((keys (ht-keys object)))
- (lambda (prop)
- (member prop keys)))
- ',(-map (lambda (field-name)
- (substring (symbol-name field-name) 1))
- required)))
- ((listp object) (-all? (lambda (prop)
- (plist-member object prop))
- ',required))))
- `(cl-defun ,(intern (format "lsp-make-%s" (s-dashed-words (symbol-name interface))))
- (&rest plist &key ,@(-map (-lambda ((key))
- (intern (substring (symbol-name key) 1))) params)
- &allow-other-keys)
- (ignore ,@(-map (-lambda ((key))
- (intern (substring (symbol-name key) 1))) params))
- ,(format "Constructs %s from `plist.'
-Allowed params: %s" interface (reverse (-map #'cl-first params)))
- ,(if lsp-use-plists
- `(-mapcat (-lambda ((key value))
- (list (or (cl-rest (assoc key ',params)) key) value))
- (-partition 2 plist))
- `(let (($$result (ht)))
- (mapc (-lambda ((key value))
- (puthash (lsp-keyword->string (or (cl-rest (assoc key ',params))
- key))
- value
- $$result))
- (-partition 2 plist))
- $$result)))
- `(pcase-defmacro ,interface (&rest property-bindings)
- ,(if lsp-use-plists
- ``(and
- (pred listp)
- ;; Check if all the types required by the
- ;; interface exist in the expr-val.
- ,@(-map
- (lambda (key)
- `(pred
- (lambda (plist)
- (plist-member plist ,key))))
- ',required)
- ;; Recursively generate the bindings.
- ,@(let ((current-list property-bindings)
- (output-bindings nil))
- ;; Invariant: while current-list is
- ;; non-nil, the car of current-list is
- ;; always of the form :key, while the
- ;; cadr of current-list is either a)
- ;; nil, b) of the form :key-next or c)
- ;; a pcase pattern that can
- ;; recursively match an expression.
- (while current-list
- (-let* (((curr-binding-as-keyword next-entry . _) current-list)
- (curr-binding-as-camelcased-symbol
- (or (alist-get curr-binding-as-keyword ',params)
- (error "Unknown key: %s. Available keys: %s"
- (symbol-name curr-binding-as-keyword)
- ',(-map #'cl-first params))))
- (bound-name (lsp-keyword->symbol curr-binding-as-keyword))
- (next-entry-is-key-or-nil
- (and (symbolp next-entry)
- (or (null next-entry)
- (s-starts-with? ":" (symbol-name next-entry))))))
- (cond
- ;; If the next-entry is either a
- ;; plist-key or nil, then bind to
- ;; bound-name the value corresponding
- ;; to the camelcased symbol. Pop
- ;; current-list once.
- (next-entry-is-key-or-nil
- (push `(app (lambda (plist)
- (plist-get plist ,curr-binding-as-camelcased-symbol))
- ,bound-name)
- output-bindings)
- (setf current-list (cdr current-list)))
- ;; Otherwise, next-entry is a pcase
- ;; pattern we recursively match to the
- ;; expression. This can in general
- ;; create additional bindings that we
- ;; persist in the top level of
- ;; bindings. We pop current-list
- ;; twice.
- (t
- (push `(app (lambda (plist)
- (plist-get plist ,curr-binding-as-camelcased-symbol))
- ,next-entry)
- output-bindings)
- (setf current-list (cddr current-list))))))
- output-bindings))
- ``(and
- (pred ht?)
- ,@(-map
- (lambda (key)
- `(pred
- (lambda (hash-table)
- (ht-contains? hash-table ,(lsp-keyword->string key)))))
- ',required)
- ,@(let ((current-list property-bindings)
- (output-bindings nil))
- (while current-list
- (-let* (((curr-binding-as-keyword next-entry . _) current-list)
- (curr-binding-as-camelcased-string
- (lsp-keyword->string (or (alist-get curr-binding-as-keyword ',params)
- (error "Unknown key: %s. Available keys: %s"
- (symbol-name curr-binding-as-keyword)
- ',(-map #'cl-first params)))))
- (bound-name (lsp-keyword->symbol curr-binding-as-keyword))
- (next-entry-is-key-or-nil
- (and (symbolp next-entry)
- (or (null next-entry)
- (s-starts-with? ":" (symbol-name next-entry))))))
- (cond
- (next-entry-is-key-or-nil
- (push `(app (lambda (hash-table)
- (ht-get hash-table ,curr-binding-as-camelcased-string))
- ,bound-name)
- output-bindings)
- (setf current-list (cdr current-list)))
- (t
- (push `(app (lambda (hash-table)
- (ht-get hash-table ,curr-binding-as-camelcased-string))
- ,next-entry)
- output-bindings)
- (setf current-list (cddr current-list))))))
- output-bindings))))
- (-mapcat (-lambda ((label . name))
- (list
- `(defun ,(intern (format "lsp:%s-%s"
- (s-dashed-words (symbol-name interface))
- (substring (symbol-name label) 1)))
- (object)
- ,(if lsp-use-plists
- `(plist-get object ,name)
- `(when (ht? object) (gethash ,(lsp-keyword->string name) object))))
- `(defun ,(intern (format "lsp:set-%s-%s"
- (s-dashed-words (symbol-name interface))
- (substring (symbol-name label) 1)))
- (object value)
- ,@(if lsp-use-plists
- `((plist-put object ,name value))
- `((puthash ,(lsp-keyword->string name) value object)
- object)))))
- params)))))
- (apply #'append)
- (cl-list* 'progn))))
-
-(if lsp-use-plists
- (progn
- (defun lsp-get (from key)
- (plist-get from key))
- (defun lsp-put (where key value)
- (plist-put where key value))
- (defun lsp-map (fn value)
- (-map (-lambda ((k v))
- (funcall fn (lsp-keyword->string k) v))
- (-partition 2 value )))
- (defalias 'lsp-merge 'append)
- (defalias 'lsp-empty? 'null)
- (defalias 'lsp-copy 'copy-sequence)
- (defun lsp-member? (from key)
- (when (listp from)
- (plist-member from key))))
- (defun lsp-get (from key)
- (when from
- (gethash (lsp-keyword->string key) from)))
- (defun lsp-put (where key value)
- (prog1 where
- (puthash (lsp-keyword->string key) value where)))
- (defun lsp-map (fn value)
- (when value
- (maphash fn value)))
- (defalias 'lsp-merge 'ht-merge)
- (defalias 'lsp-empty? 'ht-empty?)
- (defalias 'lsp-copy 'ht-copy)
- (defun lsp-member? (from key)
- (when (hash-table-p from)
- (not (eq (gethash (lsp-keyword->string key) from :__lsp_default)
- :__lsp_default)))))
-
-(defmacro lsp-defun (name match-form &rest body)
- "Define a function named NAME.
-The function destructures its input as MATCH-FORM then executes BODY.
-
-Note that you have to enclose the MATCH-FORM in a pair of parens,
-such that:
-
- (-defun (x) body)
- (-defun (x y ...) body)
-
-has the usual semantics of `defun'. Furthermore, these get
-translated into a normal `defun', so there is no performance
-penalty.
-
-See `-let' for a description of the destructuring mechanism."
- (declare (doc-string 3) (indent defun)
- (debug (&define name sexp
- [&optional stringp]
- [&optional ("declare" &rest sexp)]
- [&optional ("interactive" interactive)]
- def-body)))
- (cond
- ((nlistp match-form)
- (signal 'wrong-type-argument (list #'listp match-form)))
- ;; no destructuring, so just return regular defun to make things faster
- ((-all? #'symbolp match-form)
- `(defun ,name ,match-form ,@body))
- (t
- (-let* ((inputs (--map-indexed (list it (make-symbol (format "input%d" it-index))) match-form))
- ((body docs) (cond
- ;; only docs
- ((and (stringp (car body))
- (not (cdr body)))
- (list body (car body)))
- ;; docs + body
- ((stringp (car body))
- (list (cdr body) (car body)))
- ;; no docs
- (t (list body))))
- ((body interactive-form) (cond
- ;; interactive form
- ((and (listp (car body))
- (eq (caar body) 'interactive))
- (list (cdr body) (car body)))
- ;; no interactive form
- (t (list body)))))
- ;; TODO: because inputs to the defun are evaluated only once,
- ;; -let* need not to create the extra bindings to ensure that.
- ;; We should find a way to optimize that. Not critical however.
- `(defun ,name ,(-map #'cadr inputs)
- ,@(when docs (list docs))
- ,@(when interactive-form (list interactive-form))
- (-let* ,inputs ,@body))))))
-
-
-
-
-;; manually defined interfaces
-(defconst lsp/markup-kind-plain-text "plaintext")
-(defconst lsp/markup-kind-markdown "markdown")
-
-(lsp-interface (JSONResponse (:params :id :method :result) nil)
- (JSONResponseError (:error) nil)
- (JSONMessage nil (:params :id :method :result :error))
- (JSONResult nil (:params :id :method))
- (JSONNotification (:params :method) nil)
- (JSONRequest (:params :method) nil)
- (JSONError (:message :code) (:data))
- (ProgressParams (:token :value) nil)
- (Edit (:kind) nil)
- (WorkDoneProgress (:kind) nil)
- (WorkDoneProgressBegin (:kind :title) (:cancellable :message :percentage))
- (WorkDoneProgressReport (:kind) (:cancellable :message :percentage))
- (WorkDoneProgressEnd (:kind) (:message))
- (WorkDoneProgressOptions nil (:workDoneProgress))
- (SemanticTokensOptions (:legend) (:rangeProvider :documentProvider))
- (SemanticTokensLegend (:tokenTypes :tokenModifiers))
- (SemanticTokensResult (:resultId) (:data))
- (SemanticTokensPartialResult nil (:data))
- (SemanticTokensEdit (:start :deleteCount) (:data))
- (SemanticTokensDelta (:resultId) (:edits))
- (SemanticTokensDeltaPartialResult nil (:edits)))
-
-(lsp-interface (v1:ProgressParams (:id :title) (:message :percentage :done)))
-
-(defun dash-expand:&RangeToPoint (key source)
- "Convert the position KEY from SOURCE into a point."
- `(lsp--position-to-point
- (lsp-get ,source ,key)))
-
-(lsp-interface (eslint:StatusParams (:state) nil)
- (eslint:OpenESLintDocParams (:url) nil)
- (eslint:ConfirmExecutionParams (:scope :file :libraryPath) nil))
-
-(lsp-interface (haxe:ProcessStartNotification (:title) nil))
-
-(lsp-interface (pwsh:ScriptRegion (:StartLineNumber :EndLineNumber :StartColumnNumber :EndColumnNumber :Text) nil))
-
-(lsp-interface (omnisharp:ErrorMessage (:Text :FileName :Line :Column))
- (omnisharp:ProjectInformationRequest (:FileName))
- (omnisharp:MsBuildProject (:IsUnitProject :IsExe :Platform :Configuration :IntermediateOutputPath :OutputPath :TargetFrameworks :SourceFiles :TargetFramework :TargetPath :AssemblyName :Path :ProjectGuid))
- (omnisharp:ProjectInformation (:ScriptProject :MsBuildProject))
- (omnisharp:CodeStructureRequest (:FileName))
- (omnisharp:CodeStructureResponse (:Elements))
- (omnisharp:CodeElement (:Kind :Name :DisplayName :Children :Ranges :Properties))
- (omnisharp:CodeElementProperties () (:static :accessibility :testMethodName :testFramework))
- (omnisharp:Range (:Start :End))
- (omnisharp:RangeList () (:attributes :full :name))
- (omnisharp:Point (:Line :Column))
- (omnisharp:RunTestsInClassRequest (:MethodNames :RunSettings :TestFrameworkname :TargetFrameworkVersion :NoBuild :Line :Column :Buffer :FileName))
- (omnisharp:RunTestResponse (:Results :Pass :Failure :ContextHadNoTests))
- (omnisharp:TestMessageEvent (:MessageLevel :Message))
- (omnisharp:DotNetTestResult (:MethodName :Outcome :ErrorMessage :ErrorStackTrace :StandardOutput :StandardError)))
-
-(lsp-interface (rls:Cmd (:args :binary :env :cwd) nil))
-
-(defconst lsp/rust-analyzer-inlay-hint-kind-type-hint "TypeHint")
-(defconst lsp/rust-analyzer-inlay-hint-kind-param-hint "ParameterHint")
-(defconst lsp/rust-analyzer-inlay-hint-kind-chaining-hint "ChainingHint")
-(lsp-interface (rust-analyzer:AnalyzerStatusParams (:textDocument))
- (rust-analyzer:SyntaxTreeParams (:textDocument) (:range))
- (rust-analyzer:ExpandMacroParams (:textDocument :position) nil)
- (rust-analyzer:ExpandedMacro (:name :expansion) nil)
- (rust-analyzer:MatchingBraceParams (:textDocument :positions) nil)
- (rust-analyzer:OpenCargoTomlParams (:textDocument) nil)
- (rust-analyzer:ResovedCodeActionParams (:id :codeActionParams) nil)
- (rust-analyzer:JoinLinesParams (:textDocument :ranges) nil)
- (rust-analyzer:RunnablesParams (:textDocument) (:position))
- (rust-analyzer:Runnable (:label :kind :args) (:location))
- (rust-analyzer:RunnableArgs (:cargoArgs :executableArgs) (:workspaceRoot))
- (rust-analyzer:RelatedTestsParams (:textDocument :position) nil)
- (rust-analyzer:RelatedTests (:runnable) nil)
- (rust-analyzer:InlayHint (:range :label :kind) nil)
- (rust-analyzer:InlayHintsParams (:textDocument) nil)
- (rust-analyzer:SsrParams (:query :parseOnly) nil)
- (rust-analyzer:CommandLink (:title :command) (:arguments :tooltip))
- (rust-analyzer:CommandLinkGroup (:commands) (:title)))
-
-
-;; begin autogenerated code
-
-(defvar lsp/completion-item-kind-lookup
- [nil Text Method Function Constructor Field Variable Class Interface Module Property Unit Value Enum Keyword Snippet Color File Reference Folder EnumMember Constant Struct Event Operator TypeParameter])
-(defconst lsp/completion-item-kind-text 1)
-(defconst lsp/completion-item-kind-method 2)
-(defconst lsp/completion-item-kind-function 3)
-(defconst lsp/completion-item-kind-constructor 4)
-(defconst lsp/completion-item-kind-field 5)
-(defconst lsp/completion-item-kind-variable 6)
-(defconst lsp/completion-item-kind-class 7)
-(defconst lsp/completion-item-kind-interface 8)
-(defconst lsp/completion-item-kind-module 9)
-(defconst lsp/completion-item-kind-property 10)
-(defconst lsp/completion-item-kind-unit 11)
-(defconst lsp/completion-item-kind-value 12)
-(defconst lsp/completion-item-kind-enum 13)
-(defconst lsp/completion-item-kind-keyword 14)
-(defconst lsp/completion-item-kind-snippet 15)
-(defconst lsp/completion-item-kind-color 16)
-(defconst lsp/completion-item-kind-file 17)
-(defconst lsp/completion-item-kind-reference 18)
-(defconst lsp/completion-item-kind-folder 19)
-(defconst lsp/completion-item-kind-enum-member 20)
-(defconst lsp/completion-item-kind-constant 21)
-(defconst lsp/completion-item-kind-struct 22)
-(defconst lsp/completion-item-kind-event 23)
-(defconst lsp/completion-item-kind-operator 24)
-(defconst lsp/completion-item-kind-type-parameter 25)
-(defvar lsp/completion-trigger-kind-lookup
- [nil Invoked TriggerCharacter TriggerForIncompleteCompletions])
-(defconst lsp/completion-trigger-kind-invoked 1)
-(defconst lsp/completion-trigger-kind-trigger-character 2)
-(defconst lsp/completion-trigger-kind-trigger-for-incomplete-completions 3)
-(defvar lsp/diagnostic-severity-lookup
- [nil Error Warning Information Hint Max])
-(defconst lsp/diagnostic-severity-error 1)
-(defconst lsp/diagnostic-severity-warning 2)
-(defconst lsp/diagnostic-severity-information 3)
-(defconst lsp/diagnostic-severity-hint 4)
-(defconst lsp/diagnostic-severity-max 5)
-(defvar lsp/diagnostic-tag-lookup
- [nil Unnecessary Deprecated])
-(defconst lsp/diagnostic-tag-unnecessary 1)
-(defconst lsp/diagnostic-tag-deprecated 2)
-(defvar lsp/document-highlight-kind-lookup
- [nil Text Read Write])
-(defconst lsp/document-highlight-kind-text 1)
-(defconst lsp/document-highlight-kind-read 2)
-(defconst lsp/document-highlight-kind-write 3)
-(defvar lsp/file-change-type-lookup
- [nil Created Changed Deleted])
-(defconst lsp/file-change-type-created 1)
-(defconst lsp/file-change-type-changed 2)
-(defconst lsp/file-change-type-deleted 3)
-(defvar lsp/insert-text-format-lookup
- [nil PlainText Snippet])
-(defconst lsp/insert-text-format-plain-text 1)
-(defconst lsp/insert-text-format-snippet 2)
-(defvar lsp/insert-text-mode-lookup
- [nil AsIs AdjustIndentation])
-(defconst lsp/insert-text-mode-as-it 1)
-(defconst lsp/insert-text-mode-adjust-indentation 2)
-(defvar lsp/message-type-lookup
- [nil Error Warning Info Log])
-(defconst lsp/message-type-error 1)
-(defconst lsp/message-type-warning 2)
-(defconst lsp/message-type-info 3)
-(defconst lsp/message-type-log 4)
-(defvar lsp/signature-help-trigger-kind-lookup
- [nil Invoked TriggerCharacter ContentChange])
-(defconst lsp/signature-help-trigger-kind-invoked 1)
-(defconst lsp/signature-help-trigger-kind-trigger-character 2)
-(defconst lsp/signature-help-trigger-kind-content-change 3)
-(defvar lsp/symbol-kind-lookup
- [nil File Module Namespace Package Class Method Property Field Constructor Enum Interface Function Variable Constant String Number Boolean Array Object Key Null EnumMember Struct Event Operator TypeParameter])
-(defconst lsp/symbol-kind-file 1)
-(defconst lsp/symbol-kind-module 2)
-(defconst lsp/symbol-kind-namespace 3)
-(defconst lsp/symbol-kind-package 4)
-(defconst lsp/symbol-kind-class 5)
-(defconst lsp/symbol-kind-method 6)
-(defconst lsp/symbol-kind-property 7)
-(defconst lsp/symbol-kind-field 8)
-(defconst lsp/symbol-kind-constructor 9)
-(defconst lsp/symbol-kind-enum 10)
-(defconst lsp/symbol-kind-interface 11)
-(defconst lsp/symbol-kind-function 12)
-(defconst lsp/symbol-kind-variable 13)
-(defconst lsp/symbol-kind-constant 14)
-(defconst lsp/symbol-kind-string 15)
-(defconst lsp/symbol-kind-number 16)
-(defconst lsp/symbol-kind-boolean 17)
-(defconst lsp/symbol-kind-array 18)
-(defconst lsp/symbol-kind-object 19)
-(defconst lsp/symbol-kind-key 20)
-(defconst lsp/symbol-kind-null 21)
-(defconst lsp/symbol-kind-enum-member 22)
-(defconst lsp/symbol-kind-struct 23)
-(defconst lsp/symbol-kind-event 24)
-(defconst lsp/symbol-kind-operator 25)
-(defconst lsp/symbol-kind-type-parameter 26)
-(defvar lsp/text-document-save-reason-lookup
- [nil Manual AfterDelay FocusOut])
-(defconst lsp/text-document-save-reason-manual 1)
-(defconst lsp/text-document-save-reason-after-delay 2)
-(defconst lsp/text-document-save-reason-focus-out 3)
-(defvar lsp/text-document-sync-kind-lookup
- [None Full Incremental])
-(defconst lsp/text-document-sync-kind-none 0)
-(defconst lsp/text-document-sync-kind-full 1)
-(defconst lsp/text-document-sync-kind-incremental 2)
-(defvar lsp/type-hierarchy-direction-lookup
- [nil Children Parents Both])
-(defconst lsp/type-hierarchy-direction-children 1)
-(defconst lsp/type-hierarchy-direction-parents 2)
-(defconst lsp/type-hierarchy-direction-both 3)
-(defvar lsp/call-hierarchy-direction-lookup
- [nil CallsFrom CallsTo])
-(defconst lsp/call-hierarchy-direction-calls-from 1)
-(defconst lsp/call-hierarchy-direction-calls-to 2)
-(defvar lsp/response-error-code-lookup
- [nil ParseError InvalidRequest MethodNotFound InvalidParams InternalError serverErrorStart serverErrorEnd])
-(defconst lsp/response-error-code-parse-error 1)
-(defconst lsp/response-error-code-invalid-request 2)
-(defconst lsp/response-error-code-method-not-found 3)
-(defconst lsp/response-error-code-invalid-params 4)
-(defconst lsp/response-error-code-internal-error 5)
-(defconst lsp/response-error-code-server-error-start 6)
-(defconst lsp/response-error-code-server-error-end 7)
-
-(lsp-interface
- (CallHierarchyCapabilities nil (:dynamicRegistration))
- (CallHierarchyItem (:kind :name :range :selectionRange :uri) (:detail :tags))
- (ClientCapabilities nil (:experimental :textDocument :workspace))
- (ClientInfo (:name) (:version))
- (CodeActionCapabilities nil (:codeActionLiteralSupport :dynamicRegistration :isPreferredSupport :dataSupport :resolveSupport))
- (CodeActionContext (:diagnostics) (:only))
- (CodeActionKindCapabilities (:valueSet) nil)
- (CodeActionLiteralSupportCapabilities nil (:codeActionKind))
- (CodeActionOptions nil (:codeActionKinds :resolveProvider))
- (CodeLensCapabilities nil (:dynamicRegistration))
- (CodeLensOptions (:resolveProvider) nil)
- (Color (:red :green :blue :alpha) nil)
- (ColorProviderCapabilities nil (:dynamicRegistration))
- (ColorProviderOptions nil (:documentSelector :id))
- (ColoringInformation (:range :styles) nil)
- (Command (:title :command) (:arguments))
- (CompletionCapabilities nil (:completionItem :completionItemKind :contextSupport :dynamicRegistration))
- (CompletionContext (:triggerKind) (:triggerCharacter))
- (CompletionItem (:label) (:additionalTextEdits :command :commitCharacters :data :deprecated :detail :documentation :filterText :insertText :insertTextFormat :insertTextMode :kind :preselect :sortText :tags :textEdit :score))
- (CompletionItemCapabilities nil (:commitCharactersSupport :deprecatedSupport :documentationFormat :preselectSupport :snippetSupport :tagSupport :insertReplaceSupport :resolveSupport))
- (CompletionItemKindCapabilities nil (:valueSet))
- (CompletionItemTagSupportCapabilities (:valueSet) nil)
- (CompletionOptions nil (:resolveProvider :triggerCharacters :allCommitCharacters))
- (ConfigurationItem nil (:scopeUri :section))
- (CreateFileOptions nil (:ignoreIfExists :overwrite))
- (DeclarationCapabilities nil (:dynamicRegistration :linkSupport))
- (DefinitionCapabilities nil (:dynamicRegistration :linkSupport))
- (DeleteFileOptions nil (:ignoreIfNotExists :recursive))
- (Diagnostic (:range :message) (:code :relatedInformation :severity :source :tags))
- (DiagnosticRelatedInformation (:location :message) nil)
- (DiagnosticsTagSupport (:valueSet) nil)
- (DidChangeConfigurationCapabilities nil (:dynamicRegistration))
- (DidChangeWatchedFilesCapabilities nil (:dynamicRegistration))
- (DocumentFilter nil (:language :pattern :scheme))
- (DocumentHighlightCapabilities nil (:dynamicRegistration))
- (DocumentLinkCapabilities nil (:dynamicRegistration :tooltipSupport))
- (DocumentLinkOptions nil (:resolveProvider))
- (DocumentOnTypeFormattingOptions (:firstTriggerCharacter) (:moreTriggerCharacter))
- (DocumentSymbol (:kind :name :range :selectionRange) (:children :deprecated :detail))
- (DocumentSymbolCapabilities nil (:dynamicRegistration :hierarchicalDocumentSymbolSupport :symbolKind))
- (ExecuteCommandCapabilities nil (:dynamicRegistration))
- (ExecuteCommandOptions (:commands) nil)
- (FileEvent (:type :uri) nil)
- (FileSystemWatcher (:globPattern) (:kind))
- (FoldingRangeCapabilities nil (:dynamicRegistration :lineFoldingOnly :rangeLimit))
- (FoldingRangeProviderOptions nil (:documentSelector :id))
- (FormattingCapabilities nil (:dynamicRegistration))
- (FormattingOptions (:tabSize :insertSpaces) (:trimTrailingWhitespace :insertFinalNewline :trimFinalNewlines))
- (HoverCapabilities nil (:contentFormat :dynamicRegistration))
- (ImplementationCapabilities nil (:dynamicRegistration :linkSupport))
- (Location (:range :uri) nil)
- (MarkedString (:language :value) nil)
- (MarkupContent (:kind :value) nil)
- (MessageActionItem (:title) nil)
- (OnTypeFormattingCapabilities nil (:dynamicRegistration))
- (ParameterInformation (:label) (:documentation))
- (ParameterInformationCapabilities nil (:labelOffsetSupport))
- (Position (:character :line) nil)
- (PublishDiagnosticsCapabilities nil (:relatedInformation :tagSupport :versionSupport))
- (Range (:start :end) nil)
- (RangeFormattingCapabilities nil (:dynamicRegistration))
- (ReferenceContext (:includeDeclaration) nil)
- (ReferencesCapabilities nil (:dynamicRegistration))
- (Registration (:method :id) (:registerOptions))
- (RenameCapabilities nil (:dynamicRegistration :prepareSupport))
- (RenameFileOptions nil (:ignoreIfExists :overwrite))
- (RenameOptions nil (:documentSelector :id :prepareProvider))
- (ResourceChange nil (:current :newUri))
- (ResourceOperation (:kind) nil)
- (SaveOptions nil (:includeText))
- (SelectionRange (:range) (:parent))
- (SelectionRangeCapabilities nil (:dynamicRegistration))
- (SemanticHighlightingCapabilities nil (:semanticHighlighting))
- (SemanticHighlightingInformation (:line) (:tokens))
- (SemanticHighlightingServerCapabilities nil (:scopes))
- (ServerCapabilities nil (:callHierarchyProvider :codeActionProvider :codeLensProvider :colorProvider :completionProvider :declarationProvider :definitionProvider :documentFormattingProvider :documentHighlightProvider :documentLinkProvider :documentOnTypeFormattingProvider :documentRangeFormattingProvider :documentSymbolProvider :executeCommandProvider :experimental :foldingRangeProvider :hoverProvider :implementationProvider :referencesProvider :renameProvider :selectionRangeProvider :semanticHighlighting :signatureHelpProvider :textDocumentSync :typeDefinitionProvider :typeHierarchyProvider :workspace :workspaceSymbolProvider :semanticTokensProvider))
- (ServerInfo (:name) (:version))
- (SignatureHelp (:signatures) (:activeParameter :activeSignature))
- (SignatureHelpCapabilities nil (:contextSupport :dynamicRegistration :signatureInformation))
- (SignatureHelpContext (:triggerKind :isRetrigger) (:activeSignatureHelp :triggerCharacter))
- (SignatureHelpOptions nil (:retriggerCharacters :triggerCharacters))
- (SignatureInformation (:label) (:documentation :parameters))
- (SignatureInformationCapabilities nil (:documentationFormat :parameterInformation))
- (StaticRegistrationOptions nil (:documentSelector :id))
- (SymbolCapabilities nil (:dynamicRegistration :symbolKind))
- (SymbolKindCapabilities nil (:valueSet))
- (SynchronizationCapabilities nil (:didSave :dynamicRegistration :willSave :willSaveWaitUntil))
- (TextDocumentClientCapabilities nil (:callHierarchy :codeAction :codeLens :colorProvider :completion :declaration :definition :documentHighlight :documentLink :documentSymbol :foldingRange :formatting :hover :implementation :onTypeFormatting :publishDiagnostics :rangeFormatting :references :rename :selectionRange :semanticHighlightingCapabilities :signatureHelp :synchronization :typeDefinition :typeHierarchyCapabilities))
- (TextDocumentContentChangeEvent (:text) (:range :rangeLength))
- (TextDocumentEdit (:textDocument :edits) nil)
- (TextDocumentIdentifier (:uri) nil)
- (TextDocumentItem (:languageId :text :uri :version) nil)
- (TextDocumentSyncOptions nil (:change :openClose :save :willSave :willSaveWaitUntil))
- (TextEdit (:newText :range) nil)
- (InsertReplaceEdit (:newText :insert :replace) nil)
- (SnippetTextEdit (:newText :range) (:insertTextFormat))
- (TypeDefinitionCapabilities nil (:dynamicRegistration :linkSupport))
- (TypeHierarchyCapabilities nil (:dynamicRegistration))
- (TypeHierarchyItem (:kind :name :range :selectionRange :uri) (:children :data :deprecated :detail :parents))
- (Unregistration (:method :id) nil)
- (VersionedTextDocumentIdentifier (:uri) (:version))
- (WorkspaceClientCapabilities nil (:applyEdit :configuration :didChangeConfiguration :didChangeWatchedFiles :executeCommand :symbol :workspaceEdit :workspaceFolders))
- (WorkspaceEdit nil (:changes :documentChanges :resourceChanges))
- (WorkspaceEditCapabilities nil (:documentChanges :failureHandling :resourceChanges :resourceOperations))
- (WorkspaceFolder (:uri :name) nil)
- (WorkspaceFoldersChangeEvent (:removed :added) nil)
- (WorkspaceFoldersOptions nil (:changeNotifications :supported))
- (WorkspaceServerCapabilities nil (:workspaceFolders))
- (ApplyWorkspaceEditParams (:edit) (:label))
- (ApplyWorkspaceEditResponse (:applied) nil)
- (CallHierarchyIncomingCall (:from :fromRanges) nil)
- (CallHierarchyIncomingCallsParams (:item) nil)
- (CallHierarchyOutgoingCall (:to :fromRanges) nil)
- (CallHierarchyOutgoingCallsParams (:item) nil)
- (CallHierarchyPrepareParams (:textDocument :position) (:uri))
- (CodeAction (:title) (:command :diagnostics :edit :isPreferred :kind :data))
- (CodeActionKind nil nil)
- (CodeActionParams (:textDocument :context :range) nil)
- (CodeLens (:range) (:command :data))
- (CodeLensParams (:textDocument) nil)
- (CodeLensRegistrationOptions nil (:documentSelector :resolveProvider))
- (ColorInformation (:color :range) nil)
- (ColorPresentation (:label) (:additionalTextEdits :textEdit))
- (ColorPresentationParams (:color :textDocument :range) nil)
- (ColoringParams (:uri :infos) nil)
- (ColoringStyle nil nil)
- (CompletionList (:items :isIncomplete) nil)
- (CompletionParams (:textDocument :position) (:context :uri))
- (CompletionRegistrationOptions nil (:documentSelector :resolveProvider :triggerCharacters))
- (ConfigurationParams (:items) nil)
- (CreateFile (:kind :uri) (:options))
- (DeclarationParams (:textDocument :position) (:uri))
- (DefinitionParams (:textDocument :position) (:uri))
- (DeleteFile (:kind :uri) (:options))
- (DidChangeConfigurationParams (:settings) nil)
- (DidChangeTextDocumentParams (:contentChanges :textDocument) (:uri))
- (DidChangeWatchedFilesParams (:changes) nil)
- (DidChangeWatchedFilesRegistrationOptions (:watchers) nil)
- (DidChangeWorkspaceFoldersParams (:event) nil)
- (DidCloseTextDocumentParams (:textDocument) nil)
- (DidOpenTextDocumentParams (:textDocument) (:text))
- (DidSaveTextDocumentParams (:textDocument) (:text))
- (DocumentColorParams (:textDocument) nil)
- (DocumentFormattingParams (:textDocument :options) nil)
- (DocumentHighlight (:range) (:kind))
- (DocumentHighlightParams (:textDocument :position) (:uri))
- (DocumentLink (:range) (:data :target :tooltip))
- (DocumentLinkParams (:textDocument) nil)
- (DocumentLinkRegistrationOptions nil (:documentSelector :resolveProvider))
- (DocumentOnTypeFormattingParams (:ch :textDocument :options :position) nil)
- (DocumentOnTypeFormattingRegistrationOptions (:firstTriggerCharacter) (:documentSelector :moreTriggerCharacter))
- (DocumentRangeFormattingParams (:textDocument :options :range) nil)
- (DocumentSymbolParams (:textDocument) nil)
- (DynamicRegistrationCapabilities nil (:dynamicRegistration))
- (ExecuteCommandParams (:command) (:arguments))
- (ExecuteCommandRegistrationOptions (:commands) nil)
- (FailureHandlingKind nil nil)
- (FoldingRange (:endLine :startLine) (:endCharacter :kind :startCharacter))
- (FoldingRangeKind nil nil)
- (FoldingRangeRequestParams (:textDocument) nil)
- (Hover (:contents) (:range))
- (HoverParams (:textDocument :position) (:uri))
- (ImplementationParams (:textDocument :position) (:uri))
- (InitializeError (:retry) nil)
- (InitializeErrorCode nil nil)
- (InitializeParams nil (:capabilities :clientInfo :clientName :initializationOptions :processId :rootPath :rootUri :trace :workspaceFolders))
- (InitializeResult (:capabilities) (:serverInfo))
- (InitializedParams nil nil)
- (LocationLink (:targetSelectionRange :targetUri :targetRange) (:originSelectionRange))
- (MarkupKind nil nil)
- (MessageParams (:type :message) nil)
- (PrepareRenameParams (:textDocument :position) (:uri))
- (PrepareRenameResult (:range :placeholder) nil)
- (PublishDiagnosticsParams (:diagnostics :uri) (:version))
- (ReferenceParams (:textDocument :context :position) (:uri))
- (RegistrationParams (:registrations) nil)
- (RenameFile (:kind :newUri :oldUri) (:options))
- (RenameParams (:newName :textDocument :position) (:uri))
- (ResolveTypeHierarchyItemParams (:item :resolve :direction) nil)
- (ResourceOperationKind nil nil)
- (SelectionRangeParams (:textDocument :positions) nil)
- (SemanticHighlightingParams (:textDocument :lines) nil)
- (ShowMessageRequestParams (:type :message) (:actions))
- (SignatureHelpParams (:textDocument :position) (:context :uri))
- (SignatureHelpRegistrationOptions nil (:documentSelector :triggerCharacters))
- (SymbolInformation (:kind :name :location) (:containerName :deprecated))
- (TextDocumentChangeRegistrationOptions (:syncKind) (:documentSelector))
- (TextDocumentPositionParams (:textDocument :position) (:uri))
- (TextDocumentRegistrationOptions nil (:documentSelector))
- (TextDocumentSaveRegistrationOptions nil (:documentSelector :includeText))
- (TypeDefinitionParams (:textDocument :position) (:uri))
- (TypeHierarchyParams (:resolve :textDocument :position) (:direction :uri))
- (UnregistrationParams (:unregisterations) nil)
- (WatchKind nil nil)
- (WillSaveTextDocumentParams (:reason :textDocument) nil)
- (WorkspaceSymbolParams (:query) nil))
-
-
-(provide 'lsp-protocol)
-
-;;; lsp-protocol.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-purescript.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-purescript.el
deleted file mode 100644
index d6e761a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-purescript.el
+++ /dev/null
@@ -1,72 +0,0 @@
-;;; lsp-purescript.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, purescript
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the PureScript Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-purescript nil
- "LSP support for PureScript, using purescript-language-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/nwolverson/purescript-language-server"))
-
-(defcustom lsp-purescript-server-executable nil
- "Path to server executable."
- :type 'string
- :risky t
- :group 'lsp-purescript)
-
-(defcustom lsp-purescript-server-args
- '("--stdio")
- "Arguments to pass to the server."
- :type '(repeat string)
- :risky t
- :group 'lsp-purescript)
-
-(defun lsp-purescript--server-command ()
- "Generate LSP startup command for purescript-language-server."
- (cons (or lsp-purescript-server-executable
- (lsp-package-path 'purescript-language-server))
- lsp-purescript-server-args))
-
-(lsp-dependency 'purescript-language-server
- '(:system "purescript-language-server")
- '(:npm :package "purescript-language-server"
- :path "purescript-language-server"))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection
- #'lsp-purescript--server-command)
- :major-modes '(purescript-mode)
- :priority -1
- :server-id 'pursls
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'purescript-language-server callback error-callback))))
-
-
-(lsp-consistency-check lsp-purescript)
-
-(provide 'lsp-purescript)
-;;; lsp-purescript.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pwsh.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pwsh.el
deleted file mode 100644
index 0e90164..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pwsh.el
+++ /dev/null
@@ -1,360 +0,0 @@
-;;; lsp-pwsh.el --- client for PowerShellEditorServices -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Kien Nguyen
-
-;; Author: kien.n.quang at gmail.com
-;; Keywords: lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'f)
-(require 'dash)
-(require 's)
-(require 'ht)
-
-(require 'lsp-protocol)
-(require 'lsp-mode)
-
-(defgroup lsp-pwsh nil
- "LSP support for PowerShell, using the PowerShellEditorServices."
- :group 'lsp-mode
- :package-version '(lsp-mode . "6.2"))
-
-;; PowerShell vscode flags
-(defcustom lsp-pwsh-help-completion "BlockComment"
- "Controls the comment-based help completion behavior triggered by typing '##'.
-Set the generated help style with 'BlockComment' or 'LineComment'.
-Disable the feature with 'Disabled'."
- :type
- '(choice
- (:tag "Disabled" "BlockComment" "LineComment"))
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-script-analysis-enable t
- "Enables real-time script analysis from PowerShell Script Analyzer.
-Uses the newest installed version of the PSScriptAnalyzer module or the
-version bundled with this extension, if it is newer."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-script-analysis-settings-path ""
- "Specifies the path to a PowerShell Script Analyzer settings file.
-To override the default settings for all projects, enter an absolute path,
-or enter a path relative to your workspace."
- :type 'string
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-folding-enable t
- "Enables syntax based code folding.
-When disabled, the default indentation based code folding is used."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-folding-show-last-line t
- "Shows the last line of a folded section.
-Similar to the default VSCode folding style.
-When disabled, the entire folded region is hidden."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-preset "Custom"
- "Sets the codeformatting options to follow the given indent style.
-Sets in a way that is compatible with PowerShell syntax.
-For more information about the brace styles please refer to https://github.com/PoshCode/PowerShellPracticeAndStyle/issues/81."
- :type
- '(choice
- (:tag "Custom" "Allman" "OTBS" "Stroustrup"))
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-open-brace-on-same-line t
- "Places open brace on the same line as its associated statement."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-new-line-after-open-brace t
- "Adds a newline (line break) after an open brace."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-new-line-after-close-brace t
- "Adds a newline (line break) after a closing brace."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-pipeline-indentation-style "NoIndentation"
- "Multi-line pipeline style settings."
- :type
- '(choice
- (:tag "IncreaseIndentationForFirstPipeline" "IncreaseIndentationAfterEveryPipeline" "NoIndentation"))
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-whitespace-before-open-brace t
- "Adds a space between a keyword and its associated scriptblock expression."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-whitespace-before-open-paren t
- "Adds a space between a keyword (if, elseif, while, switch, etc) and its
-associated conditional expression."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-whitespace-around-operator t
- "Adds spaces before and after an operator ('=', '+', '-', etc.)."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-whitespace-after-separator t
- "Adds a space after a separator (',' and ';')."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-whitespace-inside-brace t
- "Adds a space after an opening brace ('{') and before a closing brace ('}')."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-whitespace-around-pipe t
- "Adds a space before and after the pipeline operator ('|')."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-ignore-one-line-block t
- "Does not reformat one-line code blocks, such as \"if (...) {...} else
-{...}\"."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-align-property-value-pairs t
- "Align assignment statements in a hashtable or a DSC Configuration."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-code-formatting-use-correct-casing nil
- "Use correct casing for cmdlets."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-developer-editor-services-log-level "Normal"
- "Sets the log level for the PowerShell Editor Services host executable.
-Valid values are 'Diagnostic', 'Verbose', 'Normal', 'Warning', and 'Error'"
- :type
- '(choice
- (:tag "Diagnostic" "Verbose" "Normal" "Warning" "Error"))
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-developer-editor-services-wait-for-debugger nil
- "Launches the language service with the /waitForDebugger flag to force it to
-wait for a .NET debugger to attach before proceeding."
- :type 'boolean
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-developer-feature-flags nil
- "An array of strings that enable experimental features in the PowerShell
-extension."
- :type
- '(repeat string)
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(lsp-register-custom-settings
- '(("powershell.developer.featureFlags" lsp-pwsh-developer-feature-flags)
- ("powershell.developer.editorServicesWaitForDebugger" lsp-pwsh-developer-editor-services-wait-for-debugger t)
- ("powershell.codeFormatting.useCorrectCasing" lsp-pwsh-code-formatting-use-correct-casing t)
- ("powershell.codeFormatting.alignPropertyValuePairs" lsp-pwsh-code-formatting-align-property-value-pairs t)
- ("powershell.codeFormatting.ignoreOneLineBlock" lsp-pwsh-code-formatting-ignore-one-line-block t)
- ("powershell.codeFormatting.whitespaceAroundPipe" lsp-pwsh-code-formatting-whitespace-around-pipe t)
- ("powershell.codeFormatting.whitespaceInsideBrace" lsp-pwsh-code-formatting-whitespace-inside-brace t)
- ("powershell.codeFormatting.whitespaceAfterSeparator" lsp-pwsh-code-formatting-whitespace-after-separator t)
- ("powershell.codeFormatting.whitespaceAroundOperator" lsp-pwsh-code-formatting-whitespace-around-operator t)
- ("powershell.codeFormatting.whitespaceBeforeOpenParen" lsp-pwsh-code-formatting-whitespace-before-open-paren t)
- ("powershell.codeFormatting.whitespaceBeforeOpenBrace" lsp-pwsh-code-formatting-whitespace-before-open-brace t)
- ("powershell.codeFormatting.pipelineIndentationStyle" lsp-pwsh-code-formatting-pipeline-indentation-style)
- ("powershell.codeFormatting.newLineAfterCloseBrace" lsp-pwsh-code-formatting-new-line-after-close-brace t)
- ("powershell.codeFormatting.newLineAfterOpenBrace" lsp-pwsh-code-formatting-new-line-after-open-brace t)
- ("powershell.codeFormatting.openBraceOnSameLine" lsp-pwsh-code-formatting-open-brace-on-same-line t)
- ("powershell.codeFormatting.preset" lsp-pwsh-code-formatting-preset)
- ("powershell.codeFolding.showLastLine" lsp-pwsh-code-folding-show-last-line t)
- ("powershell.codeFolding.enable" lsp-pwsh-code-folding-enable t)
- ("powershell.scriptAnalysis.settingsPath" lsp-pwsh-script-analysis-settings-path)
- ("powershell.scriptAnalysis.enable" lsp-pwsh-script-analysis-enable t)
- ("powershell.helpCompletion" lsp-pwsh-help-completion)))
-
-;; lsp-pwsh custom variables
-(defcustom lsp-pwsh-ext-path (f-join lsp-server-install-dir "pwsh")
- "The path to powershell vscode extension."
- :type 'string
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-exe (or (executable-find "pwsh") (executable-find "powershell"))
- "PowerShell executable."
- :type 'string
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pwsh-dir (expand-file-name "PowerShellEditorServices" lsp-pwsh-ext-path)
- "Path to PowerShellEditorServices without last slash."
- :type 'string
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defvar lsp-pwsh-log-path (expand-file-name "logs" lsp-pwsh-ext-path)
- "Path to directory where server will write log files.
-Must not nil.")
-
-(defvar lsp-pwsh--sess-id (emacs-pid))
-
-(defun lsp-pwsh--command ()
- "Return the command to start server."
-
- `(,lsp-pwsh-exe "-NoProfile" "-NonInteractive" "-NoLogo"
- ,@(if (eq system-type 'windows-nt) '("-ExecutionPolicy" "Bypass"))
- "-OutputFormat" "Text"
- "-File"
- ,(f-join lsp-pwsh-dir "PowerShellEditorServices/Start-EditorServices.ps1")
- "-HostName" "\"Emacs Host\""
- "-HostProfileId" "'Emacs.LSP'"
- "-HostVersion" "0.1"
- "-LogPath" ,(f-join lsp-pwsh-log-path "emacs-powershell.log")
- "-LogLevel" ,lsp-pwsh-developer-editor-services-log-level
- "-SessionDetailsPath"
- ,(format "%s/PSES-VSCode-%d" lsp-pwsh-log-path lsp-pwsh--sess-id)
- ;; "-AdditionalModules" "@('PowerShellEditorServices.VSCode')"
- "-Stdio"
- "-BundledModulesPath" ,lsp-pwsh-dir
- "-FeatureFlags" "@()"))
-
-(defun lsp-pwsh--extra-init-params ()
- "Return form describing parameters for language server.")
-
-(lsp-defun lsp-pwsh--apply-code-action-edits ((&Command :command :arguments?))
- "Handle ACTION for PowerShell.ApplyCodeActionEdits."
- (-if-let* (((&pwsh:ScriptRegion :start-line-number :end-line-number
- :start-column-number :end-column-number :text)
- (lsp-seq-first arguments?))
- (start-position (lsp-make-position :line (1- start-line-number)
- :character (1- start-column-number)))
- (end-position (lsp-make-position :line (1- end-line-number)
- :character (1- end-column-number)))
- (edits `[,(lsp-make-text-edit :range (lsp-make-range :start start-position
- :end end-position)
- :newText text)]))
- (lsp--apply-text-edits edits 'code-action)
- (lsp-send-execute-command command arguments?)))
-
-(lsp-defun lsp-pwsh--show-code-action-document ((&Command :arguments?))
- "Handle ACTION for PowerShell.ShowCodeActionDocumentation."
- (-if-let* ((rule-raw (lsp-seq-first arguments?))
- (rule-id (if (s-prefix-p "PS" rule-raw) (substring rule-raw 2) rule-raw)))
- (browse-url
- (concat "https://github.com/PowerShell/PSScriptAnalyzer/blob/master/RuleDocumentation/"
- rule-id
- ".md"))
- (lsp-warn "Cannot show documentation for code action, no ruleName was supplied")))
-
-(defvar lsp-pwsh--major-modes '(powershell-mode))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection #'lsp-pwsh--command
- (lambda ()
- (f-exists? lsp-pwsh-dir)))
- :major-modes lsp-pwsh--major-modes
- :server-id 'pwsh-ls
- :priority -1
- :multi-root t
- :initialization-options #'lsp-pwsh--extra-init-params
- :notification-handlers (ht ("powerShell/executionStatusChanged" #'ignore)
- ("output" #'ignore))
- :action-handlers (ht ("PowerShell.ApplyCodeActionEdits"
- #'lsp-pwsh--apply-code-action-edits)
- ("PowerShell.ShowCodeActionDocumentation"
- #'lsp-pwsh--show-code-action-document))
- :initialized-fn (lambda (w)
- (with-lsp-workspace w
- (lsp--set-configuration
- (lsp-configuration-section "powershell")))
- (let ((caps (lsp--workspace-server-capabilities w)))
- (lsp:set-server-capabilities-document-range-formatting-provider? caps t)
- (lsp:set-server-capabilities-document-formatting-provider? caps t)))
- :download-server-fn #'lsp-pwsh-setup))
-
-(defcustom lsp-pwsh-github-asset-url
- "https://github.com/%s/%s/releases/latest/download/%s"
- "GitHub latest asset template url."
- :type 'string
- :group 'lsp-pwsh
- :package-version '(lsp-mode . "6.2"))
-
-(defun lsp-pwsh-setup (_client callback error-callback update)
- "Downloads PowerShellEditorServices to `lsp-pwsh-dir'.
-CALLBACK is called when the download finish successfully otherwise
-ERROR-CALLBACK is called.
-UPDATE is non-nil if it is already downloaded.
-FORCED if specified with prefix argument."
-
- (unless (and lsp-pwsh-exe (file-executable-p lsp-pwsh-exe))
- (user-error "Use `lsp-pwsh-exe' with the value of `%s' is not a valid powershell binary"
- lsp-pwsh-exe))
-
- (let ((url (format lsp-pwsh-github-asset-url "PowerShell"
- "PowerShellEditorServices" "PowerShellEditorServices.zip"))
- (temp-file (make-temp-file "ext" nil ".zip")))
- (unless (f-exists? lsp-pwsh-log-path)
- (mkdir lsp-pwsh-log-path 'create-parent))
- (unless (and (not update) (f-exists? lsp-pwsh-dir))
- ;; since we know it's installed, use powershell to download the file
- ;; (and avoid url.el bugginess or additional libraries)
- (when (f-exists? lsp-pwsh-dir) (delete-directory lsp-pwsh-dir 'recursive))
- (lsp-async-start-process
- callback
- error-callback
- lsp-pwsh-exe "-noprofile" "-noninteractive" "-nologo"
- "-ex" "bypass" "-command"
- "Invoke-WebRequest" "-UseBasicParsing" "-uri" url "-outfile" temp-file ";"
- "Expand-Archive" "-Path" temp-file
- "-DestinationPath" (file-name-directory lsp-pwsh-dir)))))
-
-(lsp-consistency-check lsp-pwsh)
-
-(provide 'lsp-pwsh)
-;;; lsp-pwsh.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pyls.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pyls.el
deleted file mode 100644
index 20a4524..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pyls.el
+++ /dev/null
@@ -1,504 +0,0 @@
-;;; lsp-pyls.el --- pyls configuration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; PYLS configuration
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-pyls nil
- "LSP support for Python, using Palantir's Python Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/palantir/python-language-server")
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-clients-python-library-directories '("/usr/")
- "List of directories which will be considered to be libraries."
- :risky t
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(define-obsolete-variable-alias
- 'lsp-clients-python-command
- 'lsp-pyls-server-command
- "6.1")
-
-(defcustom lsp-pyls-disable-warning nil
- "Disable Palantir python-language-server deprecation warning"
- :group 'lsp-pyls
- :type 'boolean
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-pyls-server-command '("pyls")
- "Command to start pyls."
- :risky t
- :group 'lsp-pyls
- :type '(repeat string)
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-configuration-sources ["pycodestyle"]
- "List of configuration sources to use."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-completion-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-completion-include-params t
- "Auto-completes methods and classes with tabstops for each
-parameter."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-definition-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-definition-follow-imports t
- "The goto call will follow imports."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-definition-follow-builtin-imports t
- "If follow_imports is True will decide if it follow builtin
-imports."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-hover-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-references-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-signature-help-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-symbols-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-jedi-symbols-all-scopes t
- "If True lists the names of all scopes instead of only the
-module namespace."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-mccabe-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-mccabe-threshold 15
- "The minimum threshold that triggers warnings about cyclomatic
-complexity."
- :type 'number
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-preload-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-preload-modules nil
- "List of modules to import on startup"
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pylint-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pylint-args []
- "Arguments, passed to pylint"
- :risky t
- :type 'lsp-string-vector
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pycodestyle-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pycodestyle-exclude nil
- "Exclude files or directories which match these patterns."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pycodestyle-filename nil
- "When parsing directories, only check filenames matching these
-patterns."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pycodestyle-select nil
- "Select errors and warnings"
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pycodestyle-ignore nil
- "Ignore errors and warnings"
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pycodestyle-hang-closing nil
- "Hang closing bracket instead of matching indentation of
-opening bracket's line."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pycodestyle-max-line-length nil
- "Set maximum allowed line length."
- :type 'number
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-convention nil
- "Choose the basic list of checked errors by specifying an
-existing convention."
- :type '(choice (:tag "pep257" "numpy"))
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-add-ignore nil
- "Ignore errors and warnings in addition to the specified
-convention."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-add-select nil
- "Select errors and warnings in addition to the specified
-convention."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-ignore nil
- "Ignore errors and warnings"
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-select nil
- "Select errors and warnings"
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-match "(?!test_).*\\.py"
- "Check only files that exactly match the given regular
-expression; default is to match files that don't start with
-'test_' but end with '.py'."
- :type 'string
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pydocstyle-match-dir "[^\\.].*"
- "Search only dirs that exactly match the given regular
-expression; default is to match dirs which do not begin with a
-dot."
- :type 'string
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-pyflakes-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-rope-completion-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-autopep8-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-yapf-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-rope-extension-modules nil
- "Builtin and c-extension modules that are allowed to be
-imported and inspected by rope."
- :type 'string
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-rope-rope-folder nil
- "The name of the folder in which rope stores project
-configurations and data. Pass `nil` for not using such a folder
-at all."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-pyls-plugins-flake8-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-flake8-exclude nil
- "List of glob patterns to exclude from checks."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-flake8-filename nil
- "List of glob patterns to include for checks."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-flake8-hang-closing nil
- "Toggle whether pycodestyle should enforce matching the indentation of the
-opening bracket’s line. When you specify this, it will prefer that you hang the
-closing bracket rather than match the indentation."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-flake8-ignore nil
- "A list of codes to ignore."
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-flake8-max-line-length nil
- "Set the maximum length that any line (with some exceptions) may be.
-Exceptions include lines that are either strings or comments which are
-entirely URLs."
- :type 'integer
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-flake8-select nil
- "Specify the list of error codes you wish Flake8 to report. Similarly to
-`lsp-pyls-plugins-flake8-ignore'. You can specify a portion of an error code to
-get all that start with that string. For example, you can use E, E4, E43, and
-E431"
- :type '(repeat string)
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-pyls-plugins-flake8-config nil
- "A path to a config file that will be the only config file read and used.
-This will cause Flake8 to ignore all other config files that exist.
-
-NOTE: other parameters as `lsp-pyls-plugins-flake8-max-line-length' take
-precedence over parameters referenced in config."
- :type 'string
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-pyls-plugins-jedi-use-pyenv-environment nil
- "If enabled, pass the environment got by pyenv to jedi"
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-pyls-plugins-jedi-environment nil
- "Specify the environment that jedi runs on where <environmeent>/bin/python
-should be the python executable. This option will be prioritized over
-`lsp-pyls-plugins-jedi-use-pyenv-environment'."
- :type 'string
- :group 'lsp-pyls
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-pyls-plugins-jedi-completion-fuzzy nil
- "If enabled, uses fuzzy completion in jedi. Requires pyls >= 0.32.0
-Can hit performance, as well as lsp-mode implements its own fuzzy search on
-completion items."
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "7.0"))
-
-(defcustom lsp-pyls-plugins-jedi-completion-include-class-objects t
- "If enabled, adds class objects to completion in order to avoid snippet
-with init args.
-
-Has no effect if `lsp-pyls-plugins-jedi-completion-include-params' is disabled.
-Requires pyls >= 0.33.0"
- :type 'boolean
- :group 'lsp-pyls
- :package-version '(lsp-mode . "7.0"))
-
-(defcustom lsp-pyls-rename-backend 'jedi
- "Choose renaming backend.
-
-Jedi is preferred but only works for python >= 3.6 and pyls >= 0.32.0
-Beware that Jedi is lazy and doesn't scan the whole project.
-So it will rename only references it can find."
- :type '(choice (const :tag "jedi" jedi)
- (const :tag "rope" rope))
- :group 'lsp-pyls
- :package-version '(lsp-mode . "7.0"))
-
-
-(defun lsp-pyls-get-pyenv-environment ()
- "Get the pyenv-managed environment for current workspace, where
-<ENV>/bin/python is the corresponding Python executable"
- (if lsp-pyls-plugins-jedi-environment
- lsp-pyls-plugins-jedi-environment
- (when lsp-pyls-plugins-jedi-use-pyenv-environment
- (let ((pyenv-version (getenv "PYENV_VERSION"))
- (root (lsp-seq-first (lsp-find-roots-for-workspace lsp--cur-workspace (lsp-session)))))
- (when root
- (setenv "PYENV_VERSION" nil)
- (let* ((pyenv-command-path (executable-find "pyenv"))
- (python-env (when pyenv-command-path
- (f-parent
- (f-parent
- (shell-command-to-string
- (format "PYENV_DIR='%s' %s which python"
- root pyenv-command-path)))))))
- (if python-env (lsp--info "Configure pyls with environment: %s" python-env)
- (lsp--warn "Can't find the python environment for
- %s even if
- `lsp-pyls-plugins-jedi-use-pyenv-environment` is
- enabled") root)
- (setenv "PYENV_VERSION" pyenv-version)
- python-env))))))
-
-(lsp-register-custom-settings
- '(("pyls.rope.ropeFolder" lsp-pyls-rope-rope-folder)
- ("pyls.rope.extensionModules" lsp-pyls-rope-extension-modules)
- ("pyls.plugins.rope_rename.enabled" (lambda () (eq lsp-pyls-rename-backend 'rope)) t)
- ("pyls.plugins.autopep8.enabled" lsp-pyls-plugins-autopep8-enabled t)
- ("pyls.plugins.yapf.enabled" lsp-pyls-plugins-yapf-enabled t)
- ("pyls.plugins.rope_completion.enabled" lsp-pyls-plugins-rope-completion-enabled t)
- ("pyls.plugins.pyflakes.enabled" lsp-pyls-plugins-pyflakes-enabled t)
- ("pyls.plugins.pydocstyle.matchDir" lsp-pyls-plugins-pydocstyle-match-dir)
- ("pyls.plugins.pydocstyle.match" lsp-pyls-plugins-pydocstyle-match)
- ("pyls.plugins.pydocstyle.select" lsp-pyls-plugins-pydocstyle-select)
- ("pyls.plugins.pydocstyle.ignore" lsp-pyls-plugins-pydocstyle-ignore)
- ("pyls.plugins.pydocstyle.addSelect" lsp-pyls-plugins-pydocstyle-add-select)
- ("pyls.plugins.pydocstyle.addIgnore" lsp-pyls-plugins-pydocstyle-add-ignore)
- ("pyls.plugins.pydocstyle.convention" lsp-pyls-plugins-pydocstyle-convention)
- ("pyls.plugins.pydocstyle.enabled" lsp-pyls-plugins-pydocstyle-enabled t)
- ("pyls.plugins.pycodestyle.maxLineLength" lsp-pyls-plugins-pycodestyle-max-line-length)
- ("pyls.plugins.pycodestyle.hangClosing" lsp-pyls-plugins-pycodestyle-hang-closing t)
- ("pyls.plugins.pycodestyle.ignore" lsp-pyls-plugins-pycodestyle-ignore)
- ("pyls.plugins.pycodestyle.select" lsp-pyls-plugins-pycodestyle-select)
- ("pyls.plugins.pycodestyle.filename" lsp-pyls-plugins-pycodestyle-filename)
- ("pyls.plugins.pycodestyle.exclude" lsp-pyls-plugins-pycodestyle-exclude)
- ("pyls.plugins.pycodestyle.enabled" lsp-pyls-plugins-pycodestyle-enabled t)
- ("pyls.plugins.pylint.enabled" lsp-pyls-plugins-pylint-enabled t)
- ("pyls.plugins.pylint.args" lsp-pyls-plugins-pylint-args)
- ("pyls.plugins.flake8.enabled" lsp-pyls-plugins-flake8-enabled)
- ("pyls.plugins.flake8.exclude" lsp-pyls-plugins-flake8-exclude)
- ("pyls.plugins.flake8.filename" lsp-pyls-plugins-flake8-filename)
- ("pyls.plugins.flake8.hangClosing" lsp-pyls-plugins-flake8-hang-closing)
- ("pyls.plugins.flake8.ignore" lsp-pyls-plugins-flake8-ignore)
- ("pyls.plugins.flake8.maxLineLength" lsp-pyls-plugins-flake8-max-line-length)
- ("pyls.plugins.flake8.select" lsp-pyls-plugins-flake8-select)
- ("pyls.plugins.flake8.config" lsp-pyls-plugins-flake8-config)
- ("pyls.plugins.preload.modules" lsp-pyls-plugins-preload-modules)
- ("pyls.plugins.preload.enabled" lsp-pyls-plugins-preload-enabled t)
- ("pyls.plugins.mccabe.threshold" lsp-pyls-plugins-mccabe-threshold)
- ("pyls.plugins.mccabe.enabled" lsp-pyls-plugins-mccabe-enabled t)
- ("pyls.plugins.jedi_symbols.all_scopes" lsp-pyls-plugins-jedi-symbols-all-scopes t)
- ("pyls.plugins.jedi_symbols.enabled" lsp-pyls-plugins-jedi-symbols-enabled t)
- ("pyls.plugins.jedi_signature_help.enabled" lsp-pyls-plugins-jedi-signature-help-enabled t)
- ("pyls.plugins.jedi_references.enabled" lsp-pyls-plugins-jedi-references-enabled t)
- ("pyls.plugins.jedi_hover.enabled" lsp-pyls-plugins-jedi-hover-enabled t)
- ("pyls.plugins.jedi_definition.follow_builtin_imports" lsp-pyls-plugins-jedi-definition-follow-builtin-imports t)
- ("pyls.plugins.jedi_definition.follow_imports" lsp-pyls-plugins-jedi-definition-follow-imports t)
- ("pyls.plugins.jedi_definition.enabled" lsp-pyls-plugins-jedi-definition-enabled t)
- ("pyls.plugins.jedi_completion.include_params" lsp-pyls-plugins-jedi-completion-include-params t)
- ("pyls.plugins.jedi_completion.enabled" lsp-pyls-plugins-jedi-completion-enabled t)
- ("pyls.plugins.jedi_completion.include_class_objects" lsp-pyls-plugins-jedi-completion-include-class-objects t)
- ("pyls.plugins.jedi.environment" lsp-pyls-get-pyenv-environment)
- ("pyls.plugins.jedi_completion.fuzzy" lsp-pyls-plugins-jedi-completion-fuzzy t)
- ("pyls.plugins.jedi_rename.enabled" (lambda () (eq lsp-pyls-rename-backend 'jedi)) t)
- ("pyls.configurationSources" lsp-pyls-configuration-sources)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda () lsp-clients-python-command))
- :major-modes '(python-mode cython-mode)
- :priority -2
- :server-id 'pyls
- :library-folders-fn (lambda (_workspace) lsp-clients-python-library-directories)
- :initialized-fn (lambda (workspace)
- (unless lsp-pyls-disable-warning
- (warn (concat "The palantir python-language-server (pyls) is unmaintained; "
- "a maintained fork is the python-lsp-server (pylsp) project; "
- "you can install it with pip via: pip install python-lsp-server")))
- (with-lsp-workspace workspace
- (lsp--set-configuration (lsp-configuration-section "pyls"))))))
-
-(lsp-consistency-check lsp-pyls)
-
-(provide 'lsp-pyls)
-;;; lsp-pyls.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pylsp.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pylsp.el
deleted file mode 100644
index a24862c..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-pylsp.el
+++ /dev/null
@@ -1,434 +0,0 @@
-;;; lsp-pylsp.el --- python-lsp-server support -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 Doug Davis
-
-;; Author: Doug Davis <ddavis@ddavis.io>
-;; Keywords: language tools
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; pylsp configuration
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-pylsp nil
- "LSP support for Python, using python-lsp's Python Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/python-lsp/python-lsp-server"))
-
-(defcustom lsp-clients-pylsp-library-directories '("/usr/")
- "List of directories which will be considered to be libraries."
- :risky t
- :type '(repeat string)
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-server-command '("pylsp")
- "Command to start pylsp."
- :risky t
- :group 'lsp-pylsp
- :type '(repeat string))
-
-(defcustom lsp-pylsp-configuration-sources ["flake8"]
- "List of configuration sources to use."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-completion-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-completion-include-params t
- "Auto-completes methods and classes with tabstops for each
-parameter."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-definition-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-definition-follow-imports t
- "The goto call will follow imports."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-definition-follow-builtin-imports t
- "If follow_imports is True will decide if it follow builtin
-imports."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-hover-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-references-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-signature-help-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-symbols-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-symbols-all-scopes t
- "If True lists the names of all scopes instead of only the
-module namespace."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-mccabe-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-mccabe-threshold 15
- "The minimum threshold that triggers warnings about cyclomatic
-complexity."
- :type 'number
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-preload-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-preload-modules nil
- "List of modules to import on startup"
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pylint-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pylint-args []
- "Arguments, passed to pylint"
- :risky t
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pycodestyle-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pycodestyle-exclude nil
- "Exclude files or directories which match these patterns."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pycodestyle-filename nil
- "When parsing directories, only check filenames matching these
-patterns."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pycodestyle-select nil
- "Select errors and warnings"
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pycodestyle-ignore nil
- "Ignore errors and warnings"
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pycodestyle-hang-closing nil
- "Hang closing bracket instead of matching indentation of
-opening bracket's line."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pycodestyle-max-line-length nil
- "Set maximum allowed line length."
- :type 'number
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-convention nil
- "Choose the basic list of checked errors by specifying an
-existing convention."
- :type '(choice (:tag "pep257" "numpy"))
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-add-ignore nil
- "Ignore errors and warnings in addition to the specified
-convention."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-add-select nil
- "Select errors and warnings in addition to the specified
-convention."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-ignore nil
- "Ignore errors and warnings"
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-select nil
- "Select errors and warnings"
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-match "(?!test_).*\\.py"
- "Check only files that exactly match the given regular
-expression; default is to match files that don't start with
-'test_' but end with '.py'."
- :type 'string
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pydocstyle-match-dir "[^\\.].*"
- "Search only dirs that exactly match the given regular
-expression; default is to match dirs which do not begin with a
-dot."
- :type 'string
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-pyflakes-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-rope-completion-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-autopep8-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-yapf-enabled nil
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-rope-extension-modules nil
- "Builtin and c-extension modules that are allowed to be
-imported and inspected by rope."
- :type 'string
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-rope-rope-folder nil
- "The name of the folder in which rope stores project
-configurations and data. Pass `nil` for not using such a folder
-at all."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-enabled t
- "Enable or disable the plugin."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-exclude nil
- "List of glob patterns to exclude from checks."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-filename nil
- "List of glob patterns to include for checks."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-hang-closing nil
- "Toggle whether pycodestyle should enforce matching the indentation of the
-opening bracket’s line. When you specify this, it will prefer that you hang the
-closing bracket rather than match the indentation."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-ignore nil
- "A list of codes to ignore."
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-max-line-length nil
- "Set the maximum length that any line (with some exceptions) may be.
-Exceptions include lines that are either strings or comments which are
-entirely URLs."
- :type 'integer
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-select nil
- "Specify the list of error codes you wish Flake8 to report. Similarly to
-`lsp-pylsp-plugins-flake8-ignore'. You can specify a portion of an error code to
-get all that start with that string. For example, you can use E, E4, E43, and
-E431"
- :type 'lsp-string-vector
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-flake8-config nil
- "A path to a config file that will be the only config file read and used.
-This will cause Flake8 to ignore all other config files that exist.
-
-NOTE: other parameters as `lsp-pylsp-plugins-flake8-max-line-length' take
-precedence over parameters referenced in config."
- :type 'string
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-use-pyenv-environment nil
- "If enabled, pass the environment got by pyenv to jedi"
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-environment nil
- "Specify the environment that jedi runs on where <environmeent>/bin/python
-should be the python executable. This option will be prioritized over
-`lsp-pylsp-plugins-jedi-use-pyenv-environment'."
- :type 'string
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-completion-fuzzy nil
- "If enabled, uses fuzzy completion in jedi. Requires pylsp >= 0.32.0
-Can hit performance, as well as lsp-mode implements its own fuzzy search on
-completion items."
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-plugins-jedi-completion-include-class-objects t
- "If enabled, adds class objects to completion in order to avoid snippet
-with init args.
-
-Has no effect if `lsp-pylsp-plugins-jedi-completion-include-params' is disabled.
-Requires pylsp >= 0.33.0"
- :type 'boolean
- :group 'lsp-pylsp)
-
-(defcustom lsp-pylsp-rename-backend 'jedi
- "Choose renaming backend.
-
-Jedi is preferred but only works for python >= 3.6 and pylsp >= 0.32.0
-Beware that Jedi is lazy and doesn't scan the whole project.
-So it will rename only references it can find."
- :type '(choice (const :tag "jedi" jedi)
- (const :tag "rope" rope))
- :group 'lsp-pylsp)
-
-(defun lsp-pylsp-get-pyenv-environment ()
- "Get the pyenv-managed environment for current workspace, where
-<ENV>/bin/python is the corresponding Python executable"
- (if lsp-pylsp-plugins-jedi-environment
- lsp-pylsp-plugins-jedi-environment
- (when lsp-pylsp-plugins-jedi-use-pyenv-environment
- (let ((pyenv-version (getenv "PYENV_VERSION"))
- (root (lsp-seq-first (lsp-find-roots-for-workspace lsp--cur-workspace (lsp-session)))))
- (when root
- (setenv "PYENV_VERSION" nil)
- (let* ((pyenv-command-path (executable-find "pyenv"))
- (python-env (when pyenv-command-path
- (f-parent
- (f-parent
- (shell-command-to-string
- (format "PYENV_DIR='%s' %s which python"
- root pyenv-command-path)))))))
- (if python-env (lsp--info "Configure pylsp with environment: %s" python-env)
- (lsp--warn "Can't find the python environment for
- %s even if
- `lsp-pylsp-plugins-jedi-use-pyenv-environment` is
- enabled") root)
- (setenv "PYENV_VERSION" pyenv-version)
- python-env))))))
-
-(lsp-register-custom-settings
- '(("pylsp.rope.ropeFolder" lsp-pylsp-rope-rope-folder)
- ("pylsp.rope.extensionModules" lsp-pylsp-rope-extension-modules)
- ("pylsp.plugins.rope_rename.enabled" (lambda () (eq lsp-pylsp-rename-backend 'rope)) t)
- ("pylsp.plugins.autopep8.enabled" lsp-pylsp-plugins-autopep8-enabled t)
- ("pylsp.plugins.yapf.enabled" lsp-pylsp-plugins-yapf-enabled t)
- ("pylsp.plugins.rope_completion.enabled" lsp-pylsp-plugins-rope-completion-enabled t)
- ("pylsp.plugins.pyflakes.enabled" lsp-pylsp-plugins-pyflakes-enabled t)
- ("pylsp.plugins.pydocstyle.matchDir" lsp-pylsp-plugins-pydocstyle-match-dir)
- ("pylsp.plugins.pydocstyle.match" lsp-pylsp-plugins-pydocstyle-match)
- ("pylsp.plugins.pydocstyle.select" lsp-pylsp-plugins-pydocstyle-select)
- ("pylsp.plugins.pydocstyle.ignore" lsp-pylsp-plugins-pydocstyle-ignore)
- ("pylsp.plugins.pydocstyle.addSelect" lsp-pylsp-plugins-pydocstyle-add-select)
- ("pylsp.plugins.pydocstyle.addIgnore" lsp-pylsp-plugins-pydocstyle-add-ignore)
- ("pylsp.plugins.pydocstyle.convention" lsp-pylsp-plugins-pydocstyle-convention)
- ("pylsp.plugins.pydocstyle.enabled" lsp-pylsp-plugins-pydocstyle-enabled t)
- ("pylsp.plugins.pycodestyle.maxLineLength" lsp-pylsp-plugins-pycodestyle-max-line-length)
- ("pylsp.plugins.pycodestyle.hangClosing" lsp-pylsp-plugins-pycodestyle-hang-closing t)
- ("pylsp.plugins.pycodestyle.ignore" lsp-pylsp-plugins-pycodestyle-ignore)
- ("pylsp.plugins.pycodestyle.select" lsp-pylsp-plugins-pycodestyle-select)
- ("pylsp.plugins.pycodestyle.filename" lsp-pylsp-plugins-pycodestyle-filename)
- ("pylsp.plugins.pycodestyle.exclude" lsp-pylsp-plugins-pycodestyle-exclude)
- ("pylsp.plugins.pycodestyle.enabled" lsp-pylsp-plugins-pycodestyle-enabled t)
- ("pylsp.plugins.pylint.enabled" lsp-pylsp-plugins-pylint-enabled t)
- ("pylsp.plugins.pylint.args" lsp-pylsp-plugins-pylint-args)
- ("pylsp.plugins.flake8.enabled" lsp-pylsp-plugins-flake8-enabled)
- ("pylsp.plugins.flake8.exclude" lsp-pylsp-plugins-flake8-exclude)
- ("pylsp.plugins.flake8.filename" lsp-pylsp-plugins-flake8-filename)
- ("pylsp.plugins.flake8.hangClosing" lsp-pylsp-plugins-flake8-hang-closing)
- ("pylsp.plugins.flake8.ignore" lsp-pylsp-plugins-flake8-ignore)
- ("pylsp.plugins.flake8.maxLineLength" lsp-pylsp-plugins-flake8-max-line-length)
- ("pylsp.plugins.flake8.select" lsp-pylsp-plugins-flake8-select)
- ("pylsp.plugins.flake8.config" lsp-pylsp-plugins-flake8-config)
- ("pylsp.plugins.preload.modules" lsp-pylsp-plugins-preload-modules)
- ("pylsp.plugins.preload.enabled" lsp-pylsp-plugins-preload-enabled t)
- ("pylsp.plugins.mccabe.threshold" lsp-pylsp-plugins-mccabe-threshold)
- ("pylsp.plugins.mccabe.enabled" lsp-pylsp-plugins-mccabe-enabled t)
- ("pylsp.plugins.jedi_symbols.all_scopes" lsp-pylsp-plugins-jedi-symbols-all-scopes t)
- ("pylsp.plugins.jedi_symbols.enabled" lsp-pylsp-plugins-jedi-symbols-enabled t)
- ("pylsp.plugins.jedi_signature_help.enabled" lsp-pylsp-plugins-jedi-signature-help-enabled t)
- ("pylsp.plugins.jedi_references.enabled" lsp-pylsp-plugins-jedi-references-enabled t)
- ("pylsp.plugins.jedi_hover.enabled" lsp-pylsp-plugins-jedi-hover-enabled t)
- ("pylsp.plugins.jedi_definition.follow_builtin_imports" lsp-pylsp-plugins-jedi-definition-follow-builtin-imports t)
- ("pylsp.plugins.jedi_definition.follow_imports" lsp-pylsp-plugins-jedi-definition-follow-imports t)
- ("pylsp.plugins.jedi_definition.enabled" lsp-pylsp-plugins-jedi-definition-enabled t)
- ("pylsp.plugins.jedi_completion.include_params" lsp-pylsp-plugins-jedi-completion-include-params t)
- ("pylsp.plugins.jedi_completion.enabled" lsp-pylsp-plugins-jedi-completion-enabled t)
- ("pylsp.plugins.jedi_completion.include_class_objects" lsp-pylsp-plugins-jedi-completion-include-class-objects t)
- ("pylsp.plugins.jedi.environment" lsp-pylsp-get-pyenv-environment)
- ("pylsp.plugins.jedi_completion.fuzzy" lsp-pylsp-plugins-jedi-completion-fuzzy t)
- ("pylsp.plugins.jedi_rename.enabled" (lambda () (eq lsp-pylsp-rename-backend 'jedi)) t)
- ("pylsp.configurationSources" lsp-pylsp-configuration-sources)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda () lsp-pylsp-server-command))
- :major-modes '(python-mode cython-mode)
- :priority -1
- :server-id 'pylsp
- :library-folders-fn (lambda (_workspace) lsp-clients-pylsp-library-directories)
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration (lsp-configuration-section "pylsp"))))))
-
-(lsp-consistency-check lsp-pylsp)
-
-(provide 'lsp-pylsp)
-;;; lsp-pylsp.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-r.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-r.el
deleted file mode 100644
index da54bc3..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-r.el
+++ /dev/null
@@ -1,49 +0,0 @@
-;;; lsp-r.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, r
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the R Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-r nil
- "LSP support for R."
- :group 'lsp-mode
- :link '(url-link "https://github.com/REditorSupport/languageserver"))
-
-(defcustom lsp-clients-r-server-command '("R" "--slave" "-e" "languageserver::run()")
- "Command to start the R language server."
- :group 'lsp-r
- :risky t
- :type '(repeat string))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection lsp-clients-r-server-command)
- :major-modes '(ess-r-mode)
- :server-id 'lsp-r))
-
-
-(lsp-consistency-check lsp-r)
-
-(provide 'lsp-r)
-;;; lsp-r.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-racket.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-racket.el
deleted file mode 100644
index 6ca7b5a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-racket.el
+++ /dev/null
@@ -1,77 +0,0 @@
-;;; lsp-racket.el --- lsp-mode racket integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 lsp-mode maintainers
-
-;; Author: lsp-mode maintainers
-;; Keywords: languages
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Client for the Racket language server.
-
-;;; Code:
-
-(require 'ht)
-(require 'lsp-mode)
-
-
-;; racket-langserver
-
-(defgroup lsp-racket-langserver nil
- "LSP support for Racket, using racket-langserver"
- :group 'lsp-mode
- :link '(url-link "https://github.com/jeapostrophe/racket-langserver"))
-
-(defcustom lsp-racket-langserver-command '("racket" "--lib" "racket-langserver")
- "Command to start the server."
- :type 'string
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda () lsp-racket-langserver-command))
- :major-modes '(racket-mode)
- :priority 1
- :server-id 'racket-langserver))
-
-
-;; Theia
-
-(defgroup lsp-racket-language-server nil
- "LSP support for Racket, using racket-language-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/theia-ide/racket-language-server"))
-
-(defcustom lsp-racket-language-server-path "racket-language-server"
- "Executable path for the server."
- :type 'string
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp-racket-language-server-colorize-handler (&rest _args)
- "Handler for the colorize notification."
- ;; TODO:
- nil)
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda () lsp-racket-language-server-path))
- :major-modes '(racket-mode)
- :priority -1
- :notification-handlers (ht ("racket/colorize" #'lsp-racket-language-server-colorize-handler))
- :server-id 'racket-language-server))
-
-(lsp-consistency-check lsp-racket)
-
-(provide 'lsp-racket)
-;;; lsp-racket.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-rf.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-rf.el
deleted file mode 100644
index eee0a16..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-rf.el
+++ /dev/null
@@ -1,147 +0,0 @@
-;;; lsp-rf.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, rf, robot
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Robot Framework.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-rf nil
- "Settings for Robot Framework Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/tomi/vscode-rf-language-server"))
-
-(defcustom lsp-rf-language-server-start-command '("~/.nvm/versions/node/v9.11.2/bin/node" "~/.vscode/extensions/tomiturtiainen.rf-intellisense-2.8.0/server/server.js")
- "Path to the server.js file of the rf-intellisense server.
-Accepts a list of strings (path/to/interpreter path/to/server.js)"
- :type 'list
- :group 'lsp-rf)
-
-(defcustom lsp-rf-language-server-include-paths []
- "An array of files that should be included by the parser.
-Glob patterns as strings are accepted (eg. *.robot between double quotes)"
- :type 'lsp-string-vector
- :group 'lsp-rf)
-
-(defcustom lsp-rf-language-server-exclude-paths []
- "An array of files that should be ignored by the parser.
-Glob patterns as strings are accepted (eg. *bad.robot between double quotes)"
- :type 'lsp-string-vector
- :group 'lsp-rf)
-
-(defcustom lsp-rf-language-server-dir "~/.vscode/extensions/tomiturtiainen.rf-intellisense-2.8.0/server/library-docs/"
- "Libraries directory for libraries in `lsp-rf-language-server-libraries'"
- :type 'string
- :group 'lsp-rf)
-
-(defcustom lsp-rf-language-server-libraries ["BuiltIn-3.1.1" "Collections-3.0.4"]
- "Libraries whose keywords are suggested with `auto-complete'."
- :type '(repeat string)
- ;; :type 'lsp-string-vector
- :group 'lsp-rf)
-
-(defcustom lsp-rf-language-server-log-level "debug"
- "What language server log messages are printed."
- :type 'string
- ;; :type '(choice (:tag "off" "errors" "info" "debug"))
- :group 'lsp-rf)
-
-(defcustom lsp-rf-language-server-trace-server "verbose"
- "Traces the communication between VSCode and the rfLanguageServer service."
- :type 'string
- ;; :type '(choice (:tag "off" "messages" "verbose"))
- :group 'lsp-rf)
-
-(defun parse-rf-language-server-library-dirs (dirs)
- (vconcat (mapcar
- (lambda (x)
- (concat
- (expand-file-name
- lsp-rf-language-server-dir)
- x
- ".json"))
- dirs)))
-
-(defun expand-start-command ()
- (mapcar 'expand-file-name lsp-rf-language-server-start-command))
-
-(defun parse-rf-language-server-globs-to-regex (vector)
- "Convert a VECTOR of globs to a regex."
- (--> (mapcan #'lsp-glob-to-regexps vector)
- (s-join "\\|" it)
- (concat "\\(?:" it "\\)")))
-
-(defun parse-rf-language-server-include-path-regex (vector)
- "Creates regexp to select files from workspace directory."
- (let ((globs (if (eq vector [])
- ["*.robot" "*.resource"]
- vector)))
- (parse-rf-language-server-globs-to-regex globs)))
-
-(defun parse-rf-language-server-exclude-paths (seq)
- "Creates regexp to select files from workspace directory."
- (if (eq lsp-rf-language-server-exclude-paths [])
- seq
- (cl-delete-if (lambda (x) (string-match-p
- (parse-rf-language-server-globs-to-regex
- lsp-rf-language-server-exclude-paths)
- x))
- seq)))
-
-(lsp-register-custom-settings
- '(
- ("rfLanguageServer.trace.server" lsp-rf-language-server-trace-server)
- ("rfLanguageServer.logLevel" lsp-rf-language-server-log-level)
- ("rfLanguageServer.libraries" lsp-rf-language-server-libraries)
- ("rfLanguageServer.excludePaths" lsp-rf-language-server-exclude-paths)
- ("rfLanguageServer.includePaths" lsp-rf-language-server-include-paths)))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (expand-start-command))
- :major-modes '(robot-mode)
- :server-id 'rf-intellisense
- ;; :library-folders-fn (lambda (_workspace)
- ;; lsp-rf-language-server-libraries)
- :library-folders-fn (lambda (_workspace)
- (parse-rf-language-server-library-dirs
- lsp-rf-language-server-libraries))
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "rfLanguageServer"))
- (lsp-request "buildFromFiles"
- (list :files
- (vconcat
- (parse-rf-language-server-exclude-paths
- (directory-files-recursively
- (lsp--workspace-root workspace)
- (parse-rf-language-server-include-path-regex
- lsp-rf-language-server-include-paths))))))))))
-
-
-
-(lsp-consistency-check lsp-rf)
-
-(provide 'lsp-rf)
-;;; lsp-rf.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-rust.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-rust.el
deleted file mode 100644
index a85aba5..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-rust.el
+++ /dev/null
@@ -1,1100 +0,0 @@
-;;; lsp-rust.el --- Rust Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-rust client
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'ht)
-(require 'dash)
-
-(defgroup lsp-rust nil
- "LSP support for Rust, using Rust Language Server or rust-analyzer."
- :group 'lsp-mode
- :link '(url-link "https://github.com/rust-lang/rls")
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-server 'rust-analyzer
- "Choose LSP server."
- :type '(choice (const :tag "rls" rls)
- (const :tag "rust-analyzer" rust-analyzer))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2"))
-
-;; RLS
-
-(defcustom lsp-rust-rls-server-command '("rls")
- "Command to start RLS."
- :type '(repeat string)
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-library-directories '("~/.cargo/registry/src" "~/.rustup/toolchains")
- "List of directories which will be considered to be libraries."
- :risky t
- :type '(repeat string)
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-sysroot nil
- "If non-nil, use the given path as the sysroot for all rustc invocations
-instead of trying to detect the sysroot automatically."
- :type '(choice
- (const :tag "None" nil)
- (string :tag "Sysroot"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-target nil
- "If non-nil, use the given target triple for all rustc invocations."
- :type '(choice
- (const :tag "None" nil)
- (string :tag "Target"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-rustflags nil
- "Flags added to RUSTFLAGS."
- :type '(choice
- (const :tag "None" nil)
- (string :tag "Flags"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-clear-env-rust-log t
- "Clear the RUST_LOG environment variable before running rustc or cargo."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-build-lib nil
- "If non-nil, checks the project as if you passed the `--lib' argument to
-cargo.
-
-Mutually exclusive with, and preferred over, `lsp-rust-build-bin'. (Unstable)"
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-build-bin nil
- "If non-nil, checks the project as if you passed `-- bin <build_bin>'
-argument to cargo.
-
-Mutually exclusive with `lsp-rust-build-lib'. (Unstable)"
- :type '(choice
- (const :tag "None" nil)
- (string :tag "Binary"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-cfg-test nil
- "If non-nil, checks the project as if you were running `cargo test' rather
-than cargo build.
-
-I.e., compiles (but does not run) test code."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-unstable-features nil
- "Enable unstable features."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-wait-to-build nil
- "Time in milliseconds between receiving a change notification
-and starting build. If not specified, automatically inferred by
-the latest build duration."
- :type '(choice
- (const :tag "Auto" nil)
- (number :tag "Time"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-show-warnings t
- "Show warnings."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-crate-blacklist [
- "cocoa"
- "gleam"
- "glium"
- "idna"
- "libc"
- "openssl"
- "rustc_serialize"
- "serde"
- "serde_json"
- "typenum"
- "unicode_normalization"
- "unicode_segmentation"
- "winapi"
- ]
- "A list of Cargo crates to blacklist."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-build-on-save nil
- "Only index the project when a file is saved and not on change."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-features []
- "List of Cargo features to enable."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-all-features nil
- "Enable all Cargo features."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-analyzer-cargo-target nil
- "Compilation target (target triple)."
- :type 'string
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-no-default-features nil
- "Do not enable default Cargo features."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-racer-completion t
- "Enables code completion using racer."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-clippy-preference "opt-in"
- "Controls eagerness of clippy diagnostics when available.
-Valid values are (case-insensitive):
- - \"off\": Disable clippy lints.
- - \"opt-in\": Clippy lints are shown when crates specify `#![warn(clippy)]'.
- - \"on\": Clippy lints enabled for all crates in workspace.
-
-You need to install clippy via rustup if you haven't already."
- :type '(choice
- (const "on")
- (const "opt-in")
- (const "off"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-jobs nil
- "Number of Cargo jobs to be run in parallel."
- :type '(choice
- (const :tag "Auto" nil)
- (number :tag "Jobs"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-all-targets t
- "Checks the project as if you were running cargo check --all-targets.
-I.e., check all targets and integration tests too."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-target-dir nil
- "When specified, it places the generated analysis files at the
-specified target directory. By default it is placed target/rls
-directory."
- :type '(choice
- (const :tag "Default" nil)
- (string :tag "Directory"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-rustfmt-path nil
- "When specified, RLS will use the Rustfmt pointed at the path
-instead of the bundled one"
- :type '(choice
- (const :tag "Bundled" nil)
- (string :tag "Path"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-build-command nil
- "EXPERIMENTAL (requires `rust.unstable_features')
-If set, executes a given program responsible for rebuilding save-analysis to be
-loaded by the RLS. The program given should output a list of resulting .json
-files on stdout.
-
-Implies `rust.build_on_save': true."
- :type '(choice
- (const :tag "None" nil)
- (string :tag "Command"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-full-docs nil
- "Instructs cargo to enable full documentation extraction during
-save-analysis while building the crate."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-rust-show-hover-context t
- "Show additional context in hover tooltips when available. This
-is often the type local variable declaration."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.1"))
-
-(lsp-register-custom-settings
- '(("rust.show_hover_context" lsp-rust-show-hover-context t)
- ("rust.full_docs" lsp-rust-full-docs t)
- ("rust.build_command" lsp-rust-build-command)
- ("rust.rustfmt_path" lsp-rust-rustfmt-path)
- ("rust.target_dir" lsp-rust-target-dir)
- ("rust.all_targets" lsp-rust-all-targets t)
- ("rust.jobs" lsp-rust-jobs)
- ("rust.clippy_preference" lsp-rust-clippy-preference)
- ("rust.racer_completion" lsp-rust-racer-completion t)
- ("rust.no_default_features" lsp-rust-no-default-features t)
- ("rust.all_features" lsp-rust-all-features t)
- ("rust.features" lsp-rust-features)
- ("rust.build_on_save" lsp-rust-build-on-save t)
- ("rust.crate_blacklist" lsp-rust-crate-blacklist)
- ("rust.show_warnings" lsp-rust-show-warnings t)
- ("rust.wait_to_build" lsp-rust-wait-to-build)
- ("rust.unstable_features" lsp-rust-unstable-features t)
- ("rust.cfg_test" lsp-rust-cfg-test t)
- ("rust.build_bin" lsp-rust-build-bin)
- ("rust.build_lib" lsp-rust-build-lib t)
- ("rust.clear_env_rust_log" lsp-rust-clear-env-rust-log t)
- ("rust.rustflags" lsp-rust-rustflags)
- ("rust.target" lsp-rust-target)
- ("rust.sysroot" lsp-rust-sysroot)))
-
-(defun lsp-clients--rust-window-progress (workspace params)
- "Progress report handling.
-PARAMS progress report notification data."
- (-let [(&v1:ProgressParams :done? :message? :title) params]
- (if (or done? (s-blank-str? message?))
- (lsp-workspace-status nil workspace)
- (lsp-workspace-status (format "%s - %s" title (or message? "")) workspace))))
-
-(lsp-defun lsp-rust--rls-run ((&Command :arguments? params))
- (-let* (((&rls:Cmd :env :binary :args :cwd) (lsp-seq-first params))
- (default-directory (or cwd (lsp-workspace-root) default-directory) ))
- (compile
- (format "%s %s %s"
- (s-join " " (ht-amap (format "%s=%s" key value) env))
- binary
- (s-join " " args)))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda () lsp-rust-rls-server-command))
- :major-modes '(rust-mode rustic-mode)
- :priority (if (eq lsp-rust-server 'rls) 1 -1)
- :initialization-options '((omitInitBuild . t)
- (cmdRun . t))
- :notification-handlers (ht ("window/progress" 'lsp-clients--rust-window-progress))
- :action-handlers (ht ("rls.run" 'lsp-rust--rls-run))
- :library-folders-fn (lambda (_workspace) lsp-rust-library-directories)
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "rust"))))
- :server-id 'rls))
-
-
-;; rust-analyzer
-(defcustom lsp-rust-analyzer-server-command '("rust-analyzer")
- "Command to start rust-analyzer."
- :type '(repeat string)
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-rust-analyzer-server-display-inlay-hints nil
- "Show inlay hints."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-rust-analyzer-max-inlay-hint-length nil
- "Max inlay hint length."
- :type 'integer
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-display-parameter-hints nil
- "Whether to show function parameter name inlay hints at the call site."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-display-chaining-hints nil
- "Whether to show inlay type hints for method chains."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-lru-capacity nil
- "Number of syntax trees rust-analyzer keeps in memory."
- :type 'integer
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-cargo-watch-enable t
- "Enable Cargo watch."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-cargo-watch-command "check"
- "Cargo watch command."
- :type 'string
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-cargo-watch-args []
- "Cargo watch args."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-cargo-override-command []
- "Advanced option, fully override the command rust-analyzer uses for checking.
-The command should include `--message=format=json` or similar option."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-cargo-all-targets t
- "Cargo watch all targets or not."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-use-client-watching t
- "Use client watching"
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-exclude-globs []
- "Exclude globs"
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-exclude-dirs []
- "These directories will be ignored by rust-analyzer."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-macro-expansion-method 'lsp-rust-analyzer-macro-expansion-default
- "Use a different function if you want formatted macro expansion results and
-syntax highlighting."
- :type 'function
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.2.2"))
-
-(defcustom lsp-rust-analyzer-diagnostics-enable t
- "Whether to show native rust-analyzer diagnostics."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-diagnostics-enable-experimental t
- "Whether to show native rust-analyzer diagnostics that are still experimental
-\(might have more false positives than usual)."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-diagnostics-disabled []
- "List of native rust-analyzer diagnostics to disable."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-diagnostics-warnings-as-hint []
- "List of warnings that should be displayed with hint severity."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-diagnostics-warnings-as-info []
- "List of warnings that should be displayed with info severity."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(define-obsolete-variable-alias
- 'lsp-rust-analyzer-cargo-load-out-dirs-from-check
- 'lsp-rust-analyzer-cargo-run-build-scripts
- "7.1.0")
-
-(defcustom lsp-rust-analyzer-cargo-run-build-scripts t
- "Whether to run build scripts (`build.rs`) for more precise code analysis."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-rustfmt-extra-args []
- "Additional arguments to rustfmt."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-rustfmt-override-command []
- "Advanced option, fully override the command rust-analyzer uses
-for formatting."
- :type 'lsp-string-vector
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-completion-add-call-parenthesis t
- "Whether to add parenthesis when completing functions."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-completion-add-call-argument-snippets t
- "Whether to add argument snippets when completing functions."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-completion-postfix-enable t
- "Whether to show postfix snippets like `dbg`, `if`, `not`, etc."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-call-info-full t
- "Whether to show function name and docs in parameter hints."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-proc-macro-enable nil
- "Enable Proc macro support.
-Implies `lsp-rust-analyzer-cargo-run-build-scripts'"
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "6.3.2"))
-
-(defcustom lsp-rust-analyzer-import-merge-behaviour "full"
- "The strategy to use when inserting new imports or merging imports.
-Valid values are:
- - \"none\": No merging
- - \"full\": Merge all layers of the import trees
- - \"last\": Only merge the last layer of the import trees"
- :type '(choice
- (const "none")
- (const "full")
- (const "last"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-import-prefix "plain"
- "The path structure for newly inserted paths to use.
-Valid values are:
- - \"plain\": Insert import paths relative to the current module, using up to
-one `super' prefix if the parent module contains the requested item.
- - \"by_self\": Prefix all import paths with `self' if they don't begin with
-`self', `super', `crate' or a crate name.
- - \"by_crate\": Force import paths to be absolute by always starting
-them with `crate' or the crate name they refer to."
- :type '(choice
- (const "plain")
- (const "by_self")
- (const "by_crate"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-import-granularity "crate"
- "How imports should be grouped into use statements."
- :type '(choice
- (const "crate" :doc "Merge imports from the same crate into a single use statement. This kind of nesting is only supported in Rust versions later than 1.24.")
- (const "module" :doc "Merge imports from the same module into a single use statement.")
- (const "item" :doc "Don’t merge imports at all, creating one import per item.")
- (const "preserve" :doc "Do not change the granularity of any imports. For auto-import this has the same effect as `\"item\"'"))
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-cargo-auto-reload t
- "Automatically refresh project info via `cargo metadata' on `Cargo.toml' changes."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-use-rustc-wrapper-for-build-scripts t
- "Use `RUSTC_WRAPPER=rust-analyzer' when running build scripts to avoid
-compiling unnecessary things."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-completion-auto-import-enable t
- "Toggles the additional completions that automatically add imports when
-completed. `lsp-completion-enable-additional-text-edit' must be non-nil
- for this feature to be fully enabled."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-completion-auto-self-enable t
- "Toggles the additional completions that automatically show method calls
-and field accesses with self prefixed to them when inside a method."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-import-enforce-granularity nil
- "Whether to enforce the import granularity setting for all files.
- If set to nil rust-analyzer will try to keep import styles consistent per file."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-import-group t
- "Group inserted imports by the following order:
-https://rust-analyzer.github.io/manual.html#auto-import.
- Groups are separated by newlines."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-highlighting-strings t
- "Use semantic tokens for strings."
- :type 'boolean
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-rust-analyzer-rustc-source nil
- "Path to the Cargo.toml of the rust compiler workspace."
- :type 'string
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1.0"))
-
-(defun lsp-rust-analyzer--make-init-options ()
- "Init options for rust-analyzer"
- `(:diagnostics (:enable ,(lsp-json-bool lsp-rust-analyzer-diagnostics-enable)
- :enableExperimental ,(lsp-json-bool lsp-rust-analyzer-diagnostics-enable-experimental)
- :disabled ,lsp-rust-analyzer-diagnostics-disabled
- :warningsAsHint ,lsp-rust-analyzer-diagnostics-warnings-as-hint
- :warningsAsInfo ,lsp-rust-analyzer-diagnostics-warnings-as-info)
- :assist (:importMergeBehaviour ,lsp-rust-analyzer-import-merge-behaviour
- :importPrefix ,lsp-rust-analyzer-import-prefix
- :importGranularity ,lsp-rust-analyzer-import-granularity
- :importEnforceGranularity ,(lsp-json-bool lsp-rust-analyzer-import-enforce-granularity)
- :importGroup ,(lsp-json-bool lsp-rust-analyzer-import-group))
- :lruCapacity ,lsp-rust-analyzer-lru-capacity
- :checkOnSave (:enable ,(lsp-json-bool lsp-rust-analyzer-cargo-watch-enable)
- :command ,lsp-rust-analyzer-cargo-watch-command
- :extraArgs ,lsp-rust-analyzer-cargo-watch-args
- :allTargets ,(lsp-json-bool lsp-rust-analyzer-cargo-all-targets)
- :overrideCommand ,lsp-rust-analyzer-cargo-override-command)
- :files (:exclude ,lsp-rust-analyzer-exclude-globs
- :watcher ,(lsp-json-bool (if lsp-rust-analyzer-use-client-watching
- "client"
- "notify"))
- :excludeDirs ,lsp-rust-analyzer-exclude-dirs)
- :cargo (:allFeatures ,(lsp-json-bool lsp-rust-all-features)
- :noDefaultFeatures ,(lsp-json-bool lsp-rust-no-default-features)
- :features ,lsp-rust-features
- :target ,lsp-rust-analyzer-cargo-target
- :runBuildScripts ,(lsp-json-bool lsp-rust-analyzer-cargo-run-build-scripts)
- ; Obsolete, but used by old Rust-Analyzer versions
- :loadOutDirsFromCheck ,(lsp-json-bool lsp-rust-analyzer-cargo-run-build-scripts)
- :autoreload ,(lsp-json-bool lsp-rust-analyzer-cargo-auto-reload)
- :useRustcWrapperForBuildScripts ,(lsp-json-bool lsp-rust-analyzer-use-rustc-wrapper-for-build-scripts))
- :rustfmt (:extraArgs ,lsp-rust-analyzer-rustfmt-extra-args
- :overrideCommand ,lsp-rust-analyzer-rustfmt-override-command)
- :inlayHints (:typeHints ,(lsp-json-bool lsp-rust-analyzer-server-display-inlay-hints)
- :chainingHints ,(lsp-json-bool lsp-rust-analyzer-display-chaining-hints)
- :parameterHints ,(lsp-json-bool lsp-rust-analyzer-display-parameter-hints)
- :maxLength ,lsp-rust-analyzer-max-inlay-hint-length)
- :completion (:addCallParenthesis ,(lsp-json-bool lsp-rust-analyzer-completion-add-call-parenthesis)
- :addCallArgumentSnippets ,(lsp-json-bool lsp-rust-analyzer-completion-add-call-argument-snippets)
- :postfix (:enable ,(lsp-json-bool lsp-rust-analyzer-completion-postfix-enable))
- :autoimport (:enable ,(lsp-json-bool lsp-rust-analyzer-completion-auto-import-enable))
- :autoself (:enable ,(lsp-json-bool lsp-rust-analyzer-completion-auto-self-enable)))
- :callInfo (:full ,(lsp-json-bool lsp-rust-analyzer-call-info-full))
- :procMacro (:enable ,(lsp-json-bool lsp-rust-analyzer-proc-macro-enable))
- :rustcSource ,lsp-rust-analyzer-rustc-source
- :highlighting (:strings ,(lsp-json-bool lsp-rust-analyzer-highlighting-strings))))
-
-(defconst lsp-rust-notification-handlers
- '(("rust-analyzer/publishDecorations" . (lambda (_w _p)))))
-
-(defconst lsp-rust-action-handlers
- '())
-
-(define-derived-mode lsp-rust-analyzer-syntax-tree-mode special-mode "Rust-Analyzer-Syntax-Tree"
- "Mode for the rust-analyzer syntax tree buffer.")
-
-(defun lsp-rust-analyzer-syntax-tree ()
- "Display syntax tree for current buffer."
- (interactive)
- (-let* ((root (lsp-workspace-root default-directory))
- (params (lsp-make-rust-analyzer-syntax-tree-params
- :text-document (lsp--text-document-identifier)
- :range? (if (use-region-p)
- (lsp--region-to-range (region-beginning) (region-end))
- (lsp--region-to-range (point-min) (point-max)))))
- (results (lsp-send-request (lsp-make-request
- "rust-analyzer/syntaxTree"
- params))))
- (let ((buf (get-buffer-create (format "*rust-analyzer syntax tree %s*" root)))
- (inhibit-read-only t))
- (with-current-buffer buf
- (lsp-rust-analyzer-syntax-tree-mode)
- (erase-buffer)
- (insert results)
- (goto-char (point-min)))
- (pop-to-buffer buf))))
-
-(define-derived-mode lsp-rust-analyzer-status-mode special-mode "Rust-Analyzer-Status"
- "Mode for the rust-analyzer status buffer.")
-
-(defun lsp-rust-analyzer-status ()
- "Displays status information for rust-analyzer."
- (interactive)
- (-let* ((root (lsp-workspace-root default-directory))
- (params (lsp-make-rust-analyzer-analyzer-status-params
- :text-document (lsp--text-document-identifier)))
- (results (lsp-send-request (lsp-make-request
- "rust-analyzer/analyzerStatus"
- params))))
- (let ((buf (get-buffer-create (format "*rust-analyzer status %s*" root)))
- (inhibit-read-only t))
- (with-current-buffer buf
- (lsp-rust-analyzer-status-mode)
- (erase-buffer)
- (insert results)
- (pop-to-buffer buf)))))
-
-(defun lsp-rust-analyzer-join-lines ()
- "Join selected lines into one, smartly fixing up whitespace and trailing commas."
- (interactive)
- (let* ((params (lsp-make-rust-analyzer-join-lines-params
- :text-document (lsp--text-document-identifier)
- :ranges (vector (if (use-region-p)
- (lsp--region-to-range (region-beginning) (region-end))
- (lsp--region-to-range (point) (point))))))
- (result (lsp-send-request (lsp-make-request "experimental/joinLines" params))))
- (lsp--apply-text-edits result 'code-action)))
-
-(defun lsp-rust-analyzer-reload-workspace ()
- "Reload workspace, picking up changes from Cargo.toml"
- (interactive)
- (lsp--cur-workspace-check)
- (lsp-send-request (lsp-make-request "rust-analyzer/reloadWorkspace")))
-
-(defcustom lsp-rust-analyzer-download-url
- (format "https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/%s"
- (pcase system-type
- ('gnu/linux "rust-analyzer-x86_64-unknown-linux-gnu.gz")
- ('darwin "rust-analyzer-x86_64-apple-darwin.gz")
- ('windows-nt "rust-analyzer-x86_64-pc-windows-msvc.gz")))
- "Automatic download url for Rust Analyzer"
- :type 'string
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-analyzer-store-path (f-join lsp-server-install-dir
- "rust"
- (if (eq system-type 'windows-nt)
- "rust-analyzer.exe"
- "rust-analyzer"))
- "The path to the file in which `rust-analyzer' will be stored."
- :type 'file
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-dependency
- 'rust-analyzer
- `(:download :url lsp-rust-analyzer-download-url
- :decompress :gzip
- :store-path lsp-rust-analyzer-store-path
- :set-executable? t)
- '(:system "rust-analyzer"))
-
-(lsp-defun lsp-rust--analyzer-run-single ((&Command :arguments?))
- (lsp-rust-analyzer-run (lsp-seq-first arguments?)))
-
-(lsp-defun lsp-rust--analyzer-show-references
- ((&Command :title :arguments? [_uri _filepos references]))
- (lsp-show-xrefs (lsp--locations-to-xref-items references) nil
- (s-contains-p "reference" title)))
-
-(declare-function dap-debug "ext:dap-mode" (template) t)
-
-(lsp-defun lsp-rust--analyzer-debug-lens ((&Command :arguments? [args]))
- (lsp-rust-analyzer-debug args))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(or (executable-find
- (cl-first lsp-rust-analyzer-server-command))
- (lsp-package-path 'rust-analyzer)
- "rust-analyzer")
- ,@(cl-rest lsp-rust-analyzer-server-command))))
- :major-modes '(rust-mode rustic-mode)
- :priority (if (eq lsp-rust-server 'rust-analyzer) 1 -1)
- :initialization-options 'lsp-rust-analyzer--make-init-options
- :notification-handlers (ht<-alist lsp-rust-notification-handlers)
- :action-handlers (ht ("rust-analyzer.runSingle" #'lsp-rust--analyzer-run-single)
- ("rust-analyzer.debugSingle" #'lsp-rust--analyzer-debug-lens)
- ("rust-analyzer.showReferences" #'lsp-rust--analyzer-show-references))
- :library-folders-fn (lambda (_workspace) lsp-rust-library-directories)
- :after-open-fn (lambda ()
- (when lsp-rust-analyzer-server-display-inlay-hints
- (lsp-rust-analyzer-inlay-hints-mode)))
- :ignore-messages nil
- :server-id 'rust-analyzer
- :custom-capabilities `((experimental . ((snippetTextEdit . ,(and lsp-enable-snippet (featurep 'yasnippet))))))
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'rust-analyzer callback error-callback))))
-
-(defun lsp-rust-switch-server (&optional lsp-server)
- "Switch priorities of lsp servers, unless LSP-SERVER is already active."
- (interactive)
- (let ((current-server (if (> (lsp--client-priority (gethash 'rls lsp-clients)) 0)
- 'rls
- 'rust-analyzer)))
- (unless (eq lsp-server current-server)
- (dolist (server '(rls rust-analyzer))
- (when (natnump (setf (lsp--client-priority (gethash server lsp-clients))
- (* (lsp--client-priority (gethash server lsp-clients)) -1)))
- (message (format "Switched to server %s." server)))))))
-
-;; inlay hints
-
-(defvar-local lsp-rust-analyzer-inlay-hints-timer nil)
-
-(defface lsp-rust-analyzer-inlay-face
- '((t :inherit font-lock-comment-face))
- "The face to use for the Rust Analyzer inlays."
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.0"))
-
-(defface lsp-rust-analyzer-inlay-type-face
- '((t :inherit lsp-rust-analyzer-inlay-face))
- "Face for inlay type hints (e.g. inferred variable types)."
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-analyzer-inlay-type-space-format "%s"
- "Format string for spacing around variable inlays
-\(not part of the inlay face)."
- :type '(string :tag "String")
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-analyzer-inlay-type-format ": %s"
- "Format string for variable inlays (part of the inlay face)."
- :type '(string :tag "String")
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defface lsp-rust-analyzer-inlay-param-face
- '((t :inherit lsp-rust-analyzer-inlay-face))
- "Face for inlay parameter hints (e.g. function parameter names at call-site)."
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-analyzer-inlay-param-space-format "%s "
- "Format string for spacing around parameter inlays
-\(not part of the inlay face)."
- :type '(string :tag "String")
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-analyzer-inlay-param-format "%s:"
- "Format string for parameter inlays (part of the inlay face)."
- :type '(string :tag "String")
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defface lsp-rust-analyzer-inlay-chain-face
- '((t :inherit lsp-rust-analyzer-inlay-face))
- "Face for inlay chaining hints (e.g. inferred chain intermediate types)."
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-analyzer-inlay-chain-space-format "%s"
- "Format string for spacing around chain inlays (not part of the inlay face)."
- :type '(string :tag "String")
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-rust-analyzer-inlay-chain-format ": %s"
- "Format string for chain inlays (part of the inlay face)."
- :type '(string :tag "String")
- :group 'lsp-rust
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp-rust-analyzer-update-inlay-hints (buffer)
- (if (and (lsp-rust-analyzer-initialized?)
- (eq buffer (current-buffer)))
- (lsp-request-async
- "rust-analyzer/inlayHints"
- (lsp-make-rust-analyzer-inlay-hints-params
- :text-document (lsp--text-document-identifier))
- (lambda (res)
- (remove-overlays (point-min) (point-max) 'lsp-rust-analyzer-inlay-hint t)
- (dolist (hint res)
- (-let* (((&rust-analyzer:InlayHint :range :label :kind) hint)
- ((&RangeToPoint :start :end) range)
- (overlay (make-overlay start end nil 'front-advance 'end-advance)))
- (overlay-put overlay 'lsp-rust-analyzer-inlay-hint t)
- (overlay-put overlay 'evaporate t)
- (cond
- ((equal kind lsp/rust-analyzer-inlay-hint-kind-type-hint)
- (overlay-put overlay 'after-string
- (format lsp-rust-analyzer-inlay-type-space-format
- (propertize (format lsp-rust-analyzer-inlay-type-format label)
- 'font-lock-face 'lsp-rust-analyzer-inlay-type-face))))
-
- ((equal kind lsp/rust-analyzer-inlay-hint-kind-param-hint)
- (overlay-put overlay 'before-string
- (format lsp-rust-analyzer-inlay-param-space-format
- (propertize (format lsp-rust-analyzer-inlay-param-format label)
- 'font-lock-face 'lsp-rust-analyzer-inlay-param-face))))
-
- ((equal kind lsp/rust-analyzer-inlay-hint-kind-chaining-hint)
- (overlay-put overlay 'after-string
- (format lsp-rust-analyzer-inlay-chain-space-format
- (propertize (format lsp-rust-analyzer-inlay-chain-format label)
- 'font-lock-face 'lsp-rust-analyzer-inlay-chain-face))))))))
- :mode 'tick))
- nil)
-
-(defun lsp-rust-analyzer-initialized? ()
- (when-let ((workspace (lsp-find-workspace 'rust-analyzer (buffer-file-name))))
- (eq 'initialized (lsp--workspace-status workspace))))
-
-(defun lsp-rust-analyzer-inlay-hints-change-handler (&rest _rest)
- (when lsp-rust-analyzer-inlay-hints-timer
- (cancel-timer lsp-rust-analyzer-inlay-hints-timer))
- (setq lsp-rust-analyzer-inlay-hints-timer
- (run-with-idle-timer 0.1 nil #'lsp-rust-analyzer-update-inlay-hints (current-buffer))))
-
-(define-minor-mode lsp-rust-analyzer-inlay-hints-mode
- "Mode for displaying inlay hints."
- :lighter nil
- (cond
- (lsp-rust-analyzer-inlay-hints-mode
- (lsp-rust-analyzer-update-inlay-hints (current-buffer))
- (add-hook 'lsp-on-change-hook #'lsp-rust-analyzer-inlay-hints-change-handler nil t))
- (t
- (remove-overlays (point-min) (point-max) 'lsp-rust-analyzer-inlay-hint t)
- (remove-hook 'lsp-on-change-hook #'lsp-rust-analyzer-inlay-hints-change-handler t))))
-
-(defun lsp-rust-analyzer-expand-macro ()
- "Expands the macro call at point recursively."
- (interactive)
- (-if-let* ((params (lsp-make-rust-analyzer-expand-macro-params
- :text-document (lsp--text-document-identifier)
- :position (lsp--cur-position)))
- (response (lsp-send-request (lsp-make-request
- "rust-analyzer/expandMacro"
- params)))
- ((&rust-analyzer:ExpandedMacro :expansion) response))
- (funcall lsp-rust-analyzer-macro-expansion-method expansion)
- (message "No macro found at point, or it could not be expanded.")))
-
-(defun lsp-rust-analyzer-macro-expansion-default (result)
- "Default method for displaying macro expansion."
- (let* ((root (lsp-workspace-root default-directory))
- (buf (get-buffer-create (get-buffer-create (format "*rust-analyzer macro expansion %s*" root)))))
- (with-current-buffer buf
- (let ((inhibit-read-only t))
- (erase-buffer)
- (insert result)
- (special-mode)))
- (display-buffer buf)))
-
-;; runnables
-(defvar lsp-rust-analyzer--last-runnable nil)
-
-(defun lsp-rust-analyzer--runnables ()
- (lsp-send-request (lsp-make-request
- "experimental/runnables"
- (lsp-make-rust-analyzer-runnables-params
- :text-document (lsp--text-document-identifier)
- :position? (lsp--cur-position)))))
-
-(defun lsp-rust-analyzer--select-runnable ()
- (lsp--completing-read
- "Select runnable:"
- (if lsp-rust-analyzer--last-runnable
- (cons lsp-rust-analyzer--last-runnable
- (-remove (-lambda ((&rust-analyzer:Runnable :label))
- (equal label (lsp-get lsp-rust-analyzer--last-runnable :label)))
- (lsp-rust-analyzer--runnables)))
- (lsp-rust-analyzer--runnables))
- (-lambda ((&rust-analyzer:Runnable :label)) label)))
-
-
-(defun lsp-rust-analyzer--common-runner (runnable)
- "Execute a given RUNNABLE.
-
-Extract the arguments, prepare the minor mode (cargo-process-mode if possible)
-and run a compilation"
- (-let* (((&rust-analyzer:Runnable :kind :label :args) runnable)
- ((&rust-analyzer:RunnableArgs :cargo-args :executable-args :workspace-root?) args)
- (default-directory (or workspace-root? default-directory)))
- (if (not (string-equal kind "cargo"))
- (lsp--error "'%s' runnable is not supported" kind)
- (compilation-start
- (string-join (append (list "cargo") cargo-args (when executable-args '("--")) executable-args '()) " ")
- ;; cargo-process-mode is nice, but try to work without it...
- (if (functionp 'cargo-process-mode) 'cargo-process-mode nil)
- (lambda (_) (concat "*" label "*"))))))
-
-
-(defun lsp-rust-analyzer-run (runnable)
- "Select and run a RUNNABLE action."
- (interactive (list (lsp-rust-analyzer--select-runnable)))
- (when (lsp-rust-analyzer--common-runner runnable)
- (setq lsp-rust-analyzer--last-runnable runnable)))
-
-(defun lsp-rust-analyzer-debug (runnable)
- "Select and debug a RUNNABLE action."
- (interactive (list (lsp-rust-analyzer--select-runnable)))
- (unless (featurep 'dap-cpptools)
- (user-error "You must require `dap-cpptools'"))
- (-let (((&rust-analyzer:Runnable
- :args (&rust-analyzer:RunnableArgs :cargo-args :workspace-root? :executable-args)
- :label) runnable))
- (cl-case (aref cargo-args 0)
- ("run" (aset cargo-args 0 "build"))
- ("test" (when (-contains? (append cargo-args ()) "--no-run")
- (cl-callf append cargo-args (list "--no-run")))))
- (->> (append (list (executable-find "cargo"))
- cargo-args
- (list "--message-format=json"))
- (s-join " ")
- (shell-command-to-string)
- (s-lines)
- (-keep (lambda (s)
- (condition-case nil
- (-let* ((json-object-type 'plist)
- ((msg &as &plist :reason :executable) (json-read-from-string s)))
- (when (and executable (string= "compiler-artifact" reason))
- executable))
- (error))))
- (funcall
- (lambda (artifact-spec)
- (pcase artifact-spec
- (`() (user-error "No compilation artifacts or obtaining the runnable artifacts failed"))
- (`(,spec) spec)
- (_ (user-error "Multiple compilation artifacts are not supported")))))
- (list :type "cppdbg"
- :request "launch"
- :name label
- :args executable-args
- :cwd workspace-root?
- :sourceLanguages ["rust"]
- :program)
- (dap-debug))))
-
-(defun lsp-rust-analyzer-rerun (&optional runnable)
- (interactive (list (or lsp-rust-analyzer--last-runnable
- (lsp-rust-analyzer--select-runnable))))
- (lsp-rust-analyzer-run (or runnable lsp-rust-analyzer--last-runnable)))
-
-;; goto parent module
-(cl-defun lsp-rust-find-parent-module (&key display-action)
- "Find parent module of current module."
- (interactive)
- (lsp-find-locations "experimental/parentModule" nil :display-action display-action))
-
-(defun lsp-rust-analyzer-open-cargo-toml (&optional new-window)
- "Open the closest Cargo.toml from the current file.
-
-Rust-Analyzer LSP protocol documented here and added in November 2020
-https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/dev/lsp-extensions.md#open-cargotoml
-
-If NEW-WINDOW (interactively the prefix argument) is non-nil,
-open in a new window."
- (interactive "P")
- (-if-let (workspace (lsp-find-workspace 'rust-analyzer))
- (-if-let* ((response (with-lsp-workspace workspace
- (lsp-send-request (lsp-make-request
- "experimental/openCargoToml"
- (lsp-make-rust-analyzer-open-cargo-toml-params
- :text-document (lsp--text-document-identifier))))))
- ((&Location :uri :range) response))
- (funcall (if new-window #'find-file-other-window #'find-file)
- (lsp--uri-to-path uri))
- (lsp--warn "Couldn't find a Cargo.toml file or your version of rust-analyzer doesn't support this extension"))
- (lsp--error "OpenCargoToml is an extension available only with rust-analyzer")))
-
-
-(defun lsp-rust-analyzer--related-tests ()
- "Get runnable test items related to the current TextDocumentPosition.
-Calls a rust-analyzer LSP extension endpoint that returns a wrapper over Runnable[]"
- (lsp-send-request (lsp-make-request
- "rust-analyzer/relatedTests"
- (lsp--text-document-position-params))))
-
-(defun lsp-rust-analyzer--select-related-test ()
- "Call the endpoint and ask for user selection.
-
-Cannot reuse `lsp-rust-analyzer--select-runnable' because the runnables endpoint
-responds with Runnable[], while relatedTests responds with TestInfo[], which is a wrapper
-over runnable. Also, this method doesn't set the `lsp-rust-analyzer--last-runnable' variable"
- (-if-let* ((resp (lsp-rust-analyzer--related-tests))
- (runnables (seq-map
- #'lsp:rust-analyzer-related-tests-runnable
- resp)))
- (lsp--completing-read
- "Select test: "
- runnables
- #'lsp:rust-analyzer-runnable-label)))
-
-(defun lsp-rust-analyzer-related-tests (runnable)
- "Execute a RUNNABLE test related to the current document position.
-
-Rust-Analyzer LSP protocol extension
-https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/dev/lsp-extensions.md#related-tests"
- (interactive (list (lsp-rust-analyzer--select-related-test)))
- (if runnable
- (lsp-rust-analyzer--common-runner runnable)
- (lsp--info "There are no tests related to the symbol at point")))
-
-
-(lsp-consistency-check lsp-rust)
-
-(provide 'lsp-rust)
-;;; lsp-rust.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-semantic-tokens.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-semantic-tokens.el
deleted file mode 100644
index 00e6b45..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-semantic-tokens.el
+++ /dev/null
@@ -1,758 +0,0 @@
-;;; lsp-semantic-tokens.el --- Semantic tokens -*- lexical-binding: t; -*-
-;;
-;; Copyright (C) 2020 emacs-lsp maintainers
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-;;
-;;; Commentary:
-;;
-;; Semantic tokens
-;; https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens
-;;
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-semantic-tokens nil
- "LSP support for semantic-tokens."
- :prefix "lsp-semantic-tokens-"
- :group 'lsp-mode
- :tag "LSP Semantic tokens")
-
-(define-obsolete-variable-alias 'lsp-semantic-highlighting-warn-on-missing-face 'lsp-semantic-tokens-warn-on-missing-face "lsp-mode 7.1")
-
-(defcustom lsp-semantic-tokens-warn-on-missing-face nil
- "Warning on missing face for token type/modifier.
-When non-nil, this option will emit a warning any time a token
-or modifier type returned by a language server has no face associated with it."
- :group 'lsp-semantic-tokens
- :type 'boolean)
-
-(defcustom lsp-semantic-tokens-apply-modifiers nil
- "Whether semantic tokens should take token modifiers into account."
- :group 'lsp-semantic-tokens
- :type 'boolean)
-
-(defcustom lsp-semantic-tokens-allow-ranged-requests t
- "Whether to use ranged semantic token requests when available.
-
-Note that even when this is set to t, delta requests will
-be preferred whenever possible, unless
-`lsp-semantic-tokens-allow-delta-requests' is false."
- :group 'lsp-semantic-tokens
- :type 'boolean)
-
-(defcustom lsp-semantic-tokens-allow-delta-requests t
- "Whether to use semantic token delta requests when available.
-
-When supported by the language server, delta requests are always
-preferred over both full and ranged token requests."
- :group 'lsp-semantic-tokens
- :type 'boolean)
-
-(defface lsp-face-semhl-constant
- '((t :inherit font-lock-constant-face))
- "Face used for semantic highlighting scopes matching constant scopes."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-variable
- '((t :inherit font-lock-variable-name-face))
- "Face used for semantic highlighting scopes matching variable.*.
-Unless overridden by a more specific face association."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-function
- '((t :inherit font-lock-function-name-face))
- "Face used for semantic highlighting scopes matching entity.name.function.*.
-Unless overridden by a more specific face association."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-method
- '((t :inherit lsp-face-semhl-function))
- "Face used for semantic highlighting scopes matching entity.name.method.*.
-Unless overridden by a more specific face association."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-namespace
- '((t :inherit font-lock-type-face :weight bold))
- "Face used for semantic highlighting scopes matching entity.name.namespace.*.
-Unless overridden by a more specific face association."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-comment
- '((t (:inherit font-lock-comment-face)))
- "Face used for comments."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-keyword
- '((t (:inherit font-lock-keyword-face)))
- "Face used for keywords."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-string
- '((t (:inherit font-lock-string-face)))
- "Face used for keywords."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-number
- '((t (:inherit font-lock-constant-face)))
- "Face used for numbers."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-regexp
- '((t (:inherit font-lock-string-face :slant italic)))
- "Face used for regexps."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-operator
- '((t (:inherit font-lock-function-name-face)))
- "Face used for operators."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-namespace
- '((t (:inherit font-lock-keyword-face)))
- "Face used for namespaces."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-type
- '((t (:inherit font-lock-type-face)))
- "Face used for types."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-struct
- '((t (:inherit font-lock-type-face)))
- "Face used for structs."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-class
- '((t (:inherit font-lock-type-face)))
- "Face used for classes."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-interface
- '((t (:inherit font-lock-type-face)))
- "Face used for interfaces."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-enum
- '((t (:inherit font-lock-type-face)))
- "Face used for enums."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-type-parameter
- '((t (:inherit font-lock-type-face)))
- "Face used for type parameters."
- :group 'lsp-semantic-tokens)
-
-;; function face already defined, move here when support
-;; for theia highlighting gets removed
-(defface lsp-face-semhl-member
- '((t (:inherit font-lock-variable-name-face)))
- "Face used for members."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-property
- '((t (:inherit font-lock-variable-name-face)))
- "Face used for properties."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-event
- '((t (:inherit font-lock-variable-name-face)))
- "Face used for event properties."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-macro
- '((t (:inherit font-lock-preprocessor-face)))
- "Face used for macros."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-variable
- '((t (:inherit font-lock-variable-name-face)))
- "Face used for variables."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-parameter
- '((t (:inherit font-lock-variable-name-face)))
- "Face used for parameters."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-label
- '((t (:inherit font-lock-comment-face)))
- "Face used for labels."
- :group 'lsp-semantic-tokens)
-
-(defface lsp-face-semhl-deprecated
- '((t :strike-through t))
- "Face used for semantic highlighting scopes matching constant scopes."
- :group 'lsp-semantic-tokens)
-
-(defvar lsp-semantic-token-faces
- '(("comment" . lsp-face-semhl-comment)
- ("keyword" . lsp-face-semhl-keyword)
- ("string" . lsp-face-semhl-string)
- ("number" . lsp-face-semhl-number)
- ("regexp" . lsp-face-semhl-regexp)
- ("operator" . lsp-face-semhl-operator)
- ("namespace" . lsp-face-semhl-namespace)
- ("type" . lsp-face-semhl-type)
- ("struct" . lsp-face-semhl-struct)
- ("class" . lsp-face-semhl-class)
- ("interface" . lsp-face-semhl-interface)
- ("enum" . lsp-face-semhl-enum)
- ("typeParameter" . lsp-face-semhl-type-parameter)
- ("function" . lsp-face-semhl-function)
- ("method" . lsp-face-semhl-method)
- ("member" . lsp-face-semhl-member)
- ("property" . lsp-face-semhl-property)
- ("event" . lsp-face-semhl-event)
- ("macro" . lsp-face-semhl-macro)
- ("variable" . lsp-face-semhl-variable)
- ("parameter" . lsp-face-semhl-parameter)
- ("label" . lsp-face-semhl-label)
- ("enumConstant" . lsp-face-semhl-constant)
- ("enumMember" . lsp-face-semhl-constant)
- ("dependent" . lsp-face-semhl-type)
- ("concept" . lsp-face-semhl-interface))
- "Faces to use for semantic tokens.")
-
-(defvar lsp-semantic-token-modifier-faces
- ;; TODO: add default definitions
- '(("declaration" . lsp-face-semhl-interface)
- ("deprecated" . lsp-face-semhl-deprecated)
- ("readonly" . lsp-face-semhl-constant))
- "Semantic tokens modifier faces.
-Faces to use for semantic token modifiers if
-`lsp-semantic-tokens-apply-modifiers' is non-nil.")
-
-(defvar lsp-semantic-tokens-capabilities
- `((semanticTokens
- . ((dynamicRegistration . t)
- (requests . ((range . t) (full . t)))
- (tokenModifiers . ,(if lsp-semantic-tokens-apply-modifiers
- (apply 'vector (mapcar #'car lsp-semantic-token-modifier-faces)) []))
- (tokenTypes . ,(apply 'vector (mapcar #'car lsp-semantic-token-faces)))
- (formats . ["relative"])))))
-
-
-(defvar lsp--semantic-tokens-idle-timer nil)
-
-(defvar-local lsp--semantic-tokens-cache nil
- "Previously returned token set.
-
-When non-nil, `lsp--semantic-tokens-cache' should adhere to the
-following lsp-interface:
-`(_SemanticTokensCache
- (:_documentVersion :_ranged)
- (:response :_region))'.")
-
-(defsubst lsp--semantic-tokens-putcache (k v)
- "Set key K of `lsp--semantic-tokens-cache' to V."
- (setq lsp--semantic-tokens-cache
- (plist-put lsp--semantic-tokens-cache k v)))
-
-(defvar-local lsp--semantic-tokens-teardown nil)
-
-(defun lsp--semantic-tokens-request-full-token-set-when-idle (fontify-immediately)
- "Request full token set after an idle timeout of `lsp-idle-delay'.
-
-If FONTIFY-IMMEDIATELY is non-nil, fontification will be performed immediately
- once the corresponding response is received."
- (when lsp--semantic-tokens-idle-timer (cancel-timer lsp--semantic-tokens-idle-timer))
- (let ((buf (current-buffer)))
- (setq lsp--semantic-tokens-idle-timer
- (run-with-idle-timer
- lsp-idle-delay
- nil
- (lambda ()
- (when (buffer-live-p buf)
- (with-current-buffer buf
- (lsp--semantic-tokens-request nil fontify-immediately))))))))
-
-(defun lsp--semantic-tokens-ingest-range-response (response)
- "Handle RESPONSE to semanticTokens/range request."
- (lsp--semantic-tokens-putcache :response response)
- (lsp--semantic-tokens-putcache :_ranged t)
- (lsp--semantic-tokens-request-full-token-set-when-idle nil))
-
-(defun lsp--semantic-tokens-ingest-full-response (response)
- "Handle RESPONSE to semanticTokens/full request."
- (lsp--semantic-tokens-putcache :response response)
- (lsp--semantic-tokens-putcache :_ranged nil))
-
-(defsubst lsp--semantic-tokens-apply-delta-edits (old-data edits)
- "Apply EDITS obtained from full/delta request to OLD-DATA."
- (let* ((old-token-count (length old-data))
- (old-token-index 0)
- (substrings))
- (cl-loop
- for edit across edits
- when (< old-token-index (lsp-get edit :start))
- do
- (push (substring old-data old-token-index (lsp-get edit :start)) substrings)
- (push (lsp-get edit :data) substrings)
- (setq old-token-index (+ (lsp-get edit :start) (lsp-get edit :deleteCount)))
- finally do (push (substring old-data old-token-index old-token-count) substrings))
- (apply #'vconcat (nreverse substrings))))
-
-(defun lsp--semantic-tokens-ingest-full/delta-response (response)
- "Handle RESPONSE to semanticTokens/full/delta request."
- (if (lsp-get response :edits)
- (let ((old-data (--> lsp--semantic-tokens-cache (plist-get it :response) (lsp-get it :data))))
- (when old-data
- (lsp--semantic-tokens-putcache
- :response (lsp-put response
- :data (lsp--semantic-tokens-apply-delta-edits
- old-data (lsp-get response :edits))))
- (lsp--semantic-tokens-putcache :_ranged nil)))
- ;; server decided to send full response instead
- (lsp--semantic-tokens-ingest-full-response response)))
-
-
-(defun lsp--semantic-tokens-request (region fontify-immediately)
- "Send semantic tokens request to the language server.
-
-A full/delta request will be sent if delta requests are supported by
-the language server, allowed via `lsp-semantic-tokens-allow-delta-requests',
-and if a full set of tokens had previously been received.
-Otherwise, a ranged request will be dispatched if REGION is non-nil,
-ranged requests are supported by the language server, and allowed via
-`lsp-semantic-tokens-allow-delta-requests'. In all other cases, a full
-tokens request will be dispatched.
-
-If FONTIFY-IMMEDIATELY is non-nil, fontification will be performed immediately
- upon receiving the response."
- (let ((request-type "textDocument/semanticTokens/full")
- (request `(:textDocument ,(lsp--text-document-identifier)))
- (response-handler nil))
- (cond
- ((and lsp-semantic-tokens-allow-delta-requests
- (lsp-feature? "textDocument/semanticTokensFull/Delta")
- (--> lsp--semantic-tokens-cache
- (plist-get it :response)
- (and (lsp-get it :resultId) (lsp-get it :data) (not (lsp-get it :_ranged)))))
- (setq request-type "textDocument/semanticTokens/full/delta")
- (setq response-handler #'lsp--semantic-tokens-ingest-full/delta-response)
- (setq request
- (plist-put request :previousResultId
- (lsp-get (plist-get lsp--semantic-tokens-cache :response) :resultId))))
- ((and lsp-semantic-tokens-allow-ranged-requests region
- (lsp-feature? "textDocument/semanticTokensRangeProvider"))
- (setq request-type "textDocument/semanticTokens/range")
- (setq request
- (plist-put request :range (lsp--region-to-range (car region) (cdr region))))
- (setq response-handler #'lsp--semantic-tokens-ingest-range-response))
- (t (setq response-handler #'lsp--semantic-tokens-ingest-full-response)))
- (when lsp--semantic-tokens-idle-timer (cancel-timer lsp--semantic-tokens-idle-timer))
- (lsp-request-async
- request-type request
- (lambda (response)
- (lsp--semantic-tokens-putcache :_documentVersion lsp--cur-version)
- (funcall response-handler response)
- (when fontify-immediately (font-lock-flush)))
- :error-handler (lambda (&rest _) (lsp--semantic-tokens-request-full-token-set-when-idle t))
- :mode 'tick
- :cancel-token (format "semantic-tokens-%s" (lsp--buffer-uri)))))
-
-
-(defun lsp-semantic-tokens--fontify (old-fontify-region beg-orig end-orig &optional loudly)
- "Apply fonts to retrieved semantic tokens.
-OLD-FONTIFY-REGION is the underlying region fontification function,
-e.g., `font-lock-fontify-region'.
-BEG-ORIG and END-ORIG deliminate the requested fontification region and maybe
-modified by OLD-FONTIFY-REGION.
-LOUDLY will be forwarded to OLD-FONTIFY-REGION as-is."
- ;; TODO: support multiple language servers per buffer?
- (let ((faces (seq-some #'lsp--workspace-semantic-tokens-faces lsp--buffer-workspaces))
- (modifier-faces
- (when lsp-semantic-tokens-apply-modifiers
- (seq-some #'lsp--workspace-semantic-tokens-modifier-faces lsp--buffer-workspaces)))
- old-bounds
- beg end)
- (cond
- ((or (eq nil faces)
- (eq nil lsp--semantic-tokens-cache)
- (eq nil (plist-get lsp--semantic-tokens-cache :response)))
- ;; default to non-semantic highlighting until first response has arrived
- (funcall old-fontify-region beg-orig end-orig loudly))
- ((not (= lsp--cur-version (plist-get lsp--semantic-tokens-cache :_documentVersion)))
- ;; delay fontification until we have fresh tokens
- '(jit-lock-bounds 0 . 0))
- (t
- (setq old-bounds (funcall old-fontify-region beg-orig end-orig loudly))
- ;; this is to prevent flickering when semantic token highlighting
- ;; is layered on top of, e.g., tree-sitter-hl, or clojure-mode's syntax highlighting.
- (setq beg (min beg-orig (cadr old-bounds))
- end (max end-orig (cddr old-bounds)))
- (-let* ((inhibit-field-text-motion t)
- (data (lsp-get (plist-get lsp--semantic-tokens-cache :response) :data))
- (i0 0)
- (i-max (1- (length data)))
- (current-line 1)
- (line-delta)
- (column 0)
- (face)
- (line-start-pos)
- (line-min)
- (line-max-inclusive)
- (text-property-beg)
- (text-property-end))
- (save-mark-and-excursion
- (save-restriction
- (widen)
- (goto-char beg)
- (goto-char (line-beginning-position))
- (setq line-min (line-number-at-pos))
- (with-silent-modifications
- (goto-char end)
- (goto-char (line-end-position))
- (setq line-max-inclusive (line-number-at-pos))
- (forward-line (- line-min line-max-inclusive))
- (let ((skip-lines (- line-min current-line)))
- (while (and (<= i0 i-max) (< (aref data i0) skip-lines))
- (setq skip-lines (- skip-lines (aref data i0)))
- (setq i0 (+ i0 5)))
- (setq current-line (- line-min skip-lines)))
- (forward-line (- current-line line-min))
- (setq line-start-pos (point))
- (cl-loop
- for i from i0 to i-max by 5 do
- (setq line-delta (aref data i))
- (unless (= line-delta 0)
- (forward-line line-delta)
- (setq line-start-pos (point))
- (setq column 0)
- (setq current-line (+ current-line line-delta)))
- (setq column (+ column (aref data (1+ i))))
- (setq face (aref faces (aref data (+ i 3))))
- (setq text-property-beg (+ line-start-pos column))
- (setq text-property-end (+ text-property-beg (aref data (+ i 2))))
- (when face
- (put-text-property text-property-beg text-property-end 'face face))
- (cl-loop for j from 0 to (1- (length modifier-faces)) do
- (when (and (aref modifier-faces j)
- (> (logand (aref data (+ i 4)) (lsh 1 j)) 0))
- (add-face-text-property text-property-beg text-property-end
- (aref modifier-faces j))))
- when (> current-line line-max-inclusive) return nil)))))
- (let ((token-region (plist-get lsp--semantic-tokens-cache :_region)))
- (if token-region
- `(jit-lock-bounds ,(max beg (car token-region)) . ,(min end (cdr token-region)))
- `(jit-lock-bounds ,beg . ,end)))))))
-
-(defun lsp-semantic-tokens--request-update ()
- "Request semantic-tokens update."
- (lsp--semantic-tokens-request (cons (window-start) (window-end)) t))
-
-(defun lsp--semantic-tokens-as-defined-by-workspace (workspace)
- "Return plist of token-types and token-modifiers defined by WORKSPACE, or nil if none are defined."
- (when-let ((token-capabilities
- (or
- (-some->
- (lsp--registered-capability "textDocument/semanticTokens")
- (lsp--registered-capability-options))
- (lsp:server-capabilities-semantic-tokens-provider?
- (lsp--workspace-server-capabilities workspace)))))
- (-let* (((&SemanticTokensOptions :legend) token-capabilities))
- `(:token-types ,(lsp:semantic-tokens-legend-token-types legend)
- :token-modifiers ,(lsp:semantic-tokens-legend-token-modifiers legend)))))
-
-(defun lsp-semantic-tokens-suggest-overrides ()
- "Suggest face overrides that best match the faces chosen by `font-lock-fontify-region'."
- (interactive)
- (-when-let* ((token-info (-some #'lsp--semantic-tokens-as-defined-by-workspace lsp--buffer-workspaces))
- ((&plist :token-types token-types :token-modifiers token-modifiers) token-info))
- (let* ((tokens (lsp-request
- "textDocument/semanticTokens/full"
- `(:textDocument, (lsp--text-document-identifier))))
- (inhibit-field-text-motion t)
- (data (lsp-get tokens :data))
- (associated-faces '())
- (line-delta)
- ;; KLUDGE: clear cache so our font-lock advice won't apply semantic-token faces
- (old-cache lsp--semantic-tokens-cache)
- (face-or-faces))
- (setq lsp--semantic-tokens-cache nil)
- (save-restriction
- (save-excursion
- (widen)
- (font-lock-fontify-region (point-min) (point-max) t)
- (save-mark-and-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (cl-loop
- for i from 0 to (1- (length data)) by 5 do
- (setq line-delta (aref data i))
- (unless (= line-delta 0) (forward-line line-delta))
- (forward-char (aref data (+ i 1)))
- (setq face-or-faces (get-text-property (point) 'face))
- ;; TODO: consider modifiers?
- (when face-or-faces
- (--each (if (listp face-or-faces) face-or-faces (list face-or-faces))
- (cl-pushnew `(,(aref data (+ i 3)) . ,it) associated-faces :test #'equal))))
- (setq lsp--semantic-tokens-cache old-cache)
- (font-lock-flush)))))
- (switch-to-buffer (get-buffer-create "*Suggested Overrides*"))
- (insert "(")
- ;; TODO: sort alternatives by frequency
- (--each-indexed (-group-by #'car associated-faces)
- (insert (if (= it-index 0) "(" "\n ("))
- (insert (format "%s . " (aref token-types (car it))))
- (--each-indexed (mapcar #'cdr (cdr it))
- (insert (if (= it-index 0) (format "%s)" (prin1-to-string it))
- (format " ; Alternative: %s" (prin1-to-string it))))))
- (insert ")"))))
-
-
-;;;###autoload
-(defun lsp--semantic-tokens-initialize-buffer ()
- "Initialize the buffer for semantic tokens.
-IS-RANGE-PROVIDER is non-nil when server supports range requests."
- (let* ((old-extend-region-functions font-lock-extend-region-functions)
- ;; make sure font-lock always fontifies entire lines (TODO: do we also have
- ;; to change some jit-lock-...-region functions/variables?)
- (new-extend-region-functions
- (if (memq 'font-lock-extend-region-wholelines old-extend-region-functions)
- old-extend-region-functions
- (cons 'font-lock-extend-region-wholelines old-extend-region-functions))))
- (setq lsp--semantic-tokens-cache nil)
- (setq font-lock-extend-region-functions new-extend-region-functions)
- (add-function :around (local 'font-lock-fontify-region-function) #'lsp-semantic-tokens--fontify)
- (add-hook 'lsp-on-change-hook #'lsp-semantic-tokens--request-update nil t)
- (lsp-semantic-tokens--request-update)
- (setq lsp--semantic-tokens-teardown
- (lambda ()
- (setq font-lock-extend-region-functions old-extend-region-functions)
- (when lsp--semantic-tokens-idle-timer
- (cancel-timer lsp--semantic-tokens-idle-timer)
- (setq lsp--semantic-tokens-idle-timer nil))
- (setq lsp--semantic-tokens-cache nil)
- (remove-function (local 'font-lock-fontify-region-function)
- #'lsp-semantic-tokens--fontify)
- (remove-hook 'lsp-on-change-hook #'lsp-semantic-tokens--request-update t)))))
-
-(defun lsp--semantic-tokens-build-face-map (identifiers faces category varname)
- "Build map of FACES for IDENTIFIERS using CATEGORY and VARNAME."
- (apply 'vector
- (mapcar (lambda (id)
- (let ((maybe-face (cdr (assoc id faces))))
- (when (and lsp-semantic-tokens-warn-on-missing-face (not maybe-face))
- (lsp-warn "No face has been associated to the %s '%s': consider adding a corresponding definition to %s"
- category id varname)) maybe-face)) identifiers)))
-
-(defun lsp-semantic-tokens--replace-alist-values (a b)
- "Replace alist A values with B ones where available."
- (-map
- (-lambda ((ak . av))
- (cons ak (alist-get ak b av nil #'string=)))
- a))
-
-(defun lsp-semantic-tokens--type-faces-for (client)
- "Return the semantic token type faces for CLIENT."
- (lsp-semantic-tokens--replace-alist-values lsp-semantic-token-faces
- (plist-get (lsp--client-semantic-tokens-faces-overrides client) :types)))
-
-(defun lsp-semantic-tokens--modifier-faces-for (client)
- "Return the semantic token type faces for CLIENT."
- (lsp-semantic-tokens--replace-alist-values lsp-semantic-token-modifier-faces
- (plist-get (lsp--client-semantic-tokens-faces-overrides client) :modifiers)))
-
-(defun lsp--semantic-tokens-on-refresh ()
- "Invoked in response to workspace/semanticTokens/refresh requests."
- (cl-loop for workspace in (lsp-workspaces)
- for ws-buffer in (lsp--workspace-buffers workspace) do
- (unless (equal (current-buffer) ws-buffer)
- (setf (buffer-local-value 'lsp--semantic-tokens-cache ws-buffer) nil)))
- (lsp--semantic-tokens-request-full-token-set-when-idle t))
-
-;;;###autoload
-(defun lsp--semantic-tokens-initialize-workspace (workspace)
- "Initialize semantic tokens for WORKSPACE."
- (cl-assert workspace)
- (-let (((&plist :token-types types :token-modifiers modifiers)
- (lsp--semantic-tokens-as-defined-by-workspace workspace))
- (client (lsp--workspace-client workspace)))
- (setf (lsp--workspace-semantic-tokens-faces workspace)
- (lsp--semantic-tokens-build-face-map
- types (lsp-semantic-tokens--type-faces-for client)
- "semantic token" "lsp-semantic-token-faces"))
- (setf (lsp--workspace-semantic-tokens-modifier-faces workspace)
- (lsp--semantic-tokens-build-face-map
- modifiers (lsp-semantic-tokens--modifier-faces-for client)
- "semantic token modifier" "lsp-semantic-token-modifier-faces"))))
-
-;;;###autoload
-(defun lsp-semantic-tokens--warn-about-deprecated-setting ()
- "Warn about deprecated semantic highlighting variable."
- (when (boundp 'lsp-semantic-highlighting)
- (pcase lsp-semantic-highlighting
- (:semantic-tokens
- (lsp-warn "It seems you wish to use semanticTokens-based
- highlighting. To do so, please remove any references to the
- deprecated variable `lsp-semantic-highlighting' from your
- configuration and set `lsp-semantic-tokens-enable' to `t'
- instead.")
- (setq lsp-semantic-tokens-enable t))
- ((or :immediate :deferred)
- (lsp-warn "It seems you wish to use Theia-based semantic
- highlighting. This protocol has been superseded by the
- semanticTokens protocol specified by LSP v3.16 and is no longer
- supported by lsp-mode. If your language server provides
- semanticToken support, please set
- `lsp-semantic-tokens-enable' to `t' to use it.")))))
-
-;;;###autoload
-(defun lsp-semantic-tokens--enable ()
- "Enable semantic tokens mode."
- (when (and lsp-semantic-tokens-enable
- (lsp-feature? "textDocument/semanticTokens"))
- (lsp-semantic-tokens--warn-about-deprecated-setting)
- (lsp-semantic-tokens-mode 1)
- (mapc #'lsp--semantic-tokens-initialize-workspace
- (lsp--find-workspaces-for "textDocument/semanticTokens"))
- (lsp--semantic-tokens-initialize-buffer)))
-
-(defun lsp-semantic-tokens--disable ()
- "Disable semantic tokens mode."
- (lsp-semantic-tokens-mode -1))
-
-;;;###autoload
-(define-minor-mode lsp-semantic-tokens-mode
- "Toggle semantic-tokens support."
- :group 'lsp-semantic-tokens
- :global nil
- (cond
- (lsp-semantic-tokens-mode
- (add-hook 'lsp-configure-hook #'lsp-semantic-tokens--enable nil t)
- (add-hook 'lsp-unconfigure-hook #'lsp-semantic-tokens--disable nil t)
- (lsp--semantic-tokens-initialize-buffer))
- (t
- (remove-hook 'lsp-configure-hook #'lsp-semantic-tokens--enable t)
- (remove-hook 'lsp-unconfigure-hook #'lsp-semantic-tokens--disable t)
- (when lsp--semantic-tokens-teardown
- (funcall lsp--semantic-tokens-teardown))
- (lsp-semantic-tokens--request-update)
- (setq lsp--semantic-tokens-idle-timer nil
- lsp--semantic-tokens-cache nil
- lsp--semantic-tokens-teardown nil))))
-
-;; debugging helpers
-(defun lsp--semantic-tokens-verify ()
- "Store current token set and compare with the response to a full token request."
- (interactive)
- (let ((old-tokens (--> lsp--semantic-tokens-cache (plist-get it :response) (lsp-get it :data)))
- (old-version (--> lsp--semantic-tokens-cache (plist-get it :_documentVersion))))
- (if (not (equal lsp--cur-version old-version))
- (message "Stored documentVersion %d differs from current version %d" old-version lsp--cur-version)
- (lsp-request-async
- "textDocument/semanticTokens/full" `(:textDocument ,(lsp--text-document-identifier))
- (lambda (response)
- (let ((new-tokens (lsp-get response :data)))
- (if (equal old-tokens new-tokens)
- (message "New tokens (total count %d) are identical to previously held token set"
- (length new-tokens))
- (message "Newly returned tokens differ from old token set")
- (print old-tokens)
- (print new-tokens))))
- :mode 'tick
- :cancel-token (format "semantic-tokens-%s" (lsp--buffer-uri))))))
-
-(defvar-local lsp-semantic-tokens--log '())
-
-(defvar-local lsp-semantic-tokens--prev-response nil)
-
-(defun lsp-semantic-tokens--log-buffer-contents (tag)
- "Log buffer contents for TAG."
- (save-restriction
- (save-excursion
- (widen) (push `(:tag ,tag
- :buffer-contents ,(buffer-substring (point-min) (point-max))
- :prev-response ,lsp-semantic-tokens--prev-response)
- lsp-semantic-tokens--log))))
-
-(defun lsp-semantic-tokens-enable-log ()
- "Enable logging of intermediate fontification states.
-
-This is a debugging tool, and may incur significant performance penalties."
- (setq lsp-semantic-tokens--log '())
- (defadvice lsp-semantic-tokens--fontify (around advice-tokens-fontify activate)
- (lsp-semantic-tokens--log-buffer-contents 'before)
- (let ((result ad-do-it))
- (lsp-semantic-tokens--log-buffer-contents 'after)
- result))
- (defadvice lsp--semantic-tokens-ingest-full/delta-response
- (before log-delta-response (response) activate)
- (setq lsp-semantic-tokens--prev-response `(:request-type "delta"
- :response ,response
- :version ,lsp--cur-version)))
- (defadvice lsp--semantic-tokens-ingest-full-response
- (before log-full-response (response) activate)
- (setq lsp-semantic-tokens--prev-response `(:request-type "full"
- :response ,response
- :version ,lsp--cur-version)))
- (defadvice lsp--semantic-tokens-ingest-range-response
- (before log-range-response (response) activate)
- (setq lsp-semantic-tokens--prev-response `(:request-type "range"
- :response ,response
- :version ,lsp--cur-version))))
-
-(defun lsp-semantic-tokens-disable-log ()
- "Disable logging of intermediate fontification states."
- (ad-unadvise 'lsp-semantic-tokens--fontify)
- (ad-unadvise 'lsp--semantic-tokens-ingest-full/delta-response)
- (ad-unadvise 'lsp--semantic-tokens-ingest-full-response)
- (ad-unadvise 'lsp--semantic-tokens-ingest-range-response))
-
-(declare-function htmlize-buffer "ext:htmlize")
-
-(defun lsp-semantic-tokens-export-log ()
- "Write HTML-formatted snapshots of previous fontification results to /tmp."
- (require 'htmlize)
- (let* ((outdir (f-join "/tmp" "semantic-token-snapshots"))
- (progress-reporter
- (make-progress-reporter
- (format "Writing buffer snapshots to %s..." outdir)
- 0 (length lsp-semantic-tokens--log))))
- (f-mkdir outdir)
- (--each-indexed (reverse lsp-semantic-tokens--log)
- (-let* (((&plist :tag tag
- :buffer-contents buffer-contents
- :prev-response prev-response) it)
- (html-buffer))
- ;; FIXME: doesn't update properly; sit-for helps... somewhat,
- ;; but unreliably
- (when (= (% it-index 5) 0)
- (progress-reporter-update progress-reporter it-index)
- (sit-for 0.01))
- ;; we're emitting 2 snapshots (before & after) per update, so request
- ;; parameters should only change on every 2nd invocation
- (when (cl-evenp it-index)
- (with-temp-buffer
- (insert (prin1-to-string prev-response))
- (write-file (f-join outdir (format "parameters_%d.el" (/ it-index 2))))))
- (with-temp-buffer
- (insert buffer-contents)
- (setq html-buffer (htmlize-buffer))
- (with-current-buffer html-buffer
- ;; some configs such as emacs-doom may autoformat on save; switch to
- ;; fundamental-mode to avoid this
- (fundamental-mode)
- (write-file (f-join outdir (format "buffer_%d_%s.html" (/ it-index 2) tag)))))
- (kill-buffer html-buffer)))
- (progress-reporter-done progress-reporter)))
-
-(lsp-consistency-check lsp-semantic-tokens)
-
-(provide 'lsp-semantic-tokens)
-;;; lsp-semantic-tokens.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-solargraph.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-solargraph.el
deleted file mode 100644
index 968b32a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-solargraph.el
+++ /dev/null
@@ -1,166 +0,0 @@
-;;; lsp-solargraph.el --- Solargraph server configuration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-solargraph nil
- "LSP support for Ruby, using the Solargraph language server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/castwide/solargraph")
- :package-version '(lsp-mode . "6.1"))
-
-;; (defcustom lsp-solargraph-check-gem-version t
-;; "Automatically check if a new version of the Solargraph gem is available."
-;; :type 'boolean)
-
-(defcustom lsp-solargraph-completion t
- "Enable completion"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-hover t
- "Enable hover"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-diagnostics t
- "Enable diagnostics"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-autoformat nil
- "Enable automatic formatting while typing (WARNING: experimental)"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-formatting t
- "Enable document formatting"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-symbols t
- "Enable symbols"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-definitions t
- "Enable definitions (go to, etc.)"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-rename t
- "Enable symbol renaming"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-references t
- "Enable finding references"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-folding t
- "Enable folding ranges"
- :type 'boolean
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-log-level "warn"
- "Level of debug info to log. `warn` is least and `debug` is most."
- :type '(choice (const :tag "warn" "info" "debug"))
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-;; https://github.com/castwide/solargraph#solargraph-and-bundler
-(defcustom lsp-solargraph-use-bundler nil
- "Run solargraph under bundler"
- :type 'boolean
- :safe #'booleanp
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-solargraph-multi-root t
- "If non nil, `solargraph' will be started in multi-root mode."
- :type 'boolean
- :safe #'booleanp
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-solargraph-library-directories
- '("~/.rbenv/" "/usr/lib/ruby/" "~/.rvm/" "~/.gem/")
- "List of directories which will be considered to be libraries."
- :type '(repeat string)
- :group 'lsp-solargraph
- :package-version '(lsp-mode . "7.0.1"))
-
-(defun lsp-solargraph--build-command ()
- "Build solargraph command"
- (let ((lsp-command '("solargraph" "stdio")))
- (if lsp-solargraph-use-bundler
- (append '("bundle" "exec") lsp-command)
- lsp-command)))
-
-(lsp-register-custom-settings
- '(("solargraph.logLevel" lsp-solargraph-log-level)
- ("solargraph.folding" lsp-solargraph-folding t)
- ("solargraph.references" lsp-solargraph-references t)
- ("solargraph.rename" lsp-solargraph-rename t)
- ("solargraph.definitions" lsp-solargraph-definitions t)
- ("solargraph.symbols" lsp-solargraph-symbols t)
- ("solargraph.formatting" lsp-solargraph-formatting t)
- ("solargraph.autoformat" lsp-solargraph-autoformat t)
- ("solargraph.diagnostics" lsp-solargraph-diagnostics t)
- ("solargraph.hover" lsp-solargraph-hover t)
- ("solargraph.completion" lsp-solargraph-completion t)
- ("solargraph.useBundler" lsp-solargraph-use-bundler t)))
-
-;; Ruby
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection
- #'lsp-solargraph--build-command)
- :major-modes '(ruby-mode enh-ruby-mode)
- :priority -1
- :multi-root lsp-solargraph-multi-root
- :library-folders-fn (lambda (_workspace) lsp-solargraph-library-directories)
- :server-id 'ruby-ls
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "solargraph"))))))
-
-(lsp-consistency-check lsp-solargraph)
-
-(provide 'lsp-solargraph)
-;;; lsp-solargraph.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-sorbet.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-sorbet.el
deleted file mode 100644
index f11ab47..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-sorbet.el
+++ /dev/null
@@ -1,59 +0,0 @@
-;;; lsp-sorbet.el --- Sorbet server configuration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020
-
-;; Author: Christopher Wilson <chris@sencjw.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; lsp-sorbet client
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-sorbet nil
- "LSP support for Ruby, using the Sorbet language server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/sorbet/sorbet")
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-sorbet-use-bundler nil
- "Run sorbet under bundler"
- :type 'boolean
- :group 'lsp-sorbet
- :package-version '(lsp-mode . "7.1.0"))
-
-(defun lsp-sorbet--build-command ()
- "Build sorbet command"
- (let ((lsp-command '("srb" "typecheck" "--lsp" "--disable-watchman")))
- (if lsp-sorbet-use-bundler
- (append '("bundle" "exec") lsp-command)
- lsp-command)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection
- #'lsp-sorbet--build-command)
- :priority -2
- :major-modes '(ruby-mode enh-ruby-mode)
- :server-id 'sorbet-ls))
-
-(lsp-consistency-check lsp-sorbet)
-
-(provide 'lsp-sorbet)
-;;; lsp-sorbet.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-sqls.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-sqls.el
deleted file mode 100644
index 72ad70a..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-sqls.el
+++ /dev/null
@@ -1,190 +0,0 @@
-;;; lsp-sqls.el --- SQL Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Shunya Ishii
-
-;; Author: Shunya Ishii
-;; Keywords: sql lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for SQL
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-sqls nil
- "LSP support for SQL, using sqls"
- :group 'lsp-mode
- :link '(url-link "https://github.com/lighttiger2505/sqls")
- :package-version `(lsp-mode . "7.0"))
-
-(defcustom lsp-sqls-server "sqls"
- "Path to the `sqls` binary."
- :group 'lsp-sqls
- :risky t
- :type 'file
- :package-version `(lsp-mode . "7.0"))
-
-(defcustom lsp-sqls-workspace-config-path "workspace"
- "If non-nil then setup workspace configuration with json file path."
- :group 'lsp-sqls
- :risky t
- :type '(choice (const "workspace")
- (const "root"))
- :package-version `(lsp-mode . "7.0"))
-
-(defun lsp-sqls--make-launch-cmd ()
- (-let [base `(,lsp-sqls-server)]
- ;; we can add some options to command. (e.g. "-config")
- base))
-
-
-(defcustom lsp-sqls-timeout 0.5
- "Timeout to use for `sqls' requests."
- :type 'number
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-sqls-connections nil
- "The connections to the SQL server(s)."
- :type '(repeat (alist :key-type (choice
- (const :tag "Driver" driver)
- (const :tag "Connection String" dataSourceName))
- :value-type string)))
-
-(defun lsp-sqls-setup-workspace-configuration ()
- "Setup workspace configuration using json file depending on `lsp-sqls-workspace-config-path'."
-
- (if lsp-sqls-connections
- (lsp--set-configuration `(:sqls (:connections ,(apply #'vector lsp-sqls-connections))))
- (when-let ((config-json-path (cond
- ((equal lsp-sqls-workspace-config-path "workspace")
- ".sqls/config.json")
- ((equal lsp-sqls-workspace-config-path "root")
- (-> (lsp-workspace-root)
- (f-join ".sqls/config.json"))))))
- (when (file-exists-p config-json-path)
- (lsp--set-configuration (lsp--read-json-file config-json-path))))))
-
-(defun lsp-sqls--show-results (result)
- (with-current-buffer (get-buffer-create "*sqls results*")
- (with-help-window (buffer-name)
- (erase-buffer)
- (insert result))))
-
-(defun lsp-sql-execute-query (&optional command start end)
- "Execute COMMAND on buffer text against current database.
-Buffer text is between START and END. If START and END are nil,
-use the current region if set, otherwise the entire buffer."
- (interactive)
- (lsp-sqls--show-results
- (lsp-request
- "workspace/executeCommand"
- (list :command "executeQuery"
- :arguments (or
- (when command
- (lsp:command-arguments? command))
- (vector (lsp--buffer-uri)))
- :timeout lsp-sqls-timeout
- :range (list
- :start (lsp--point-to-position
- (cond
- (start start)
- ((use-region-p) (region-beginning))
- (t (point-min))))
- :end (lsp--point-to-position
- (cond
- (end end)
- ((use-region-p) (region-end))
- (t (point-max)))))))))
-
-(defun lsp-sql-execute-paragraph (&optional command)
- "Execute COMMAND on paragraph against current database."
- (interactive)
- (let ((start (save-excursion (backward-paragraph) (point)))
- (end (save-excursion (forward-paragraph) (point))))
- (lsp-sql-execute-query command start end)))
-
-(defun lsp-sql-show-databases (&optional _command)
- "Show databases."
- (interactive)
- (lsp-sqls--show-results
- (lsp-request
- "workspace/executeCommand"
- (list :command "showDatabases" :timeout lsp-sqls-timeout))))
-
-(defun lsp-sql-show-schemas (&optional _command)
- "Show schemas."
- (interactive)
- (lsp-sqls--show-results
- (lsp-request
- "workspace/executeCommand"
- (list :command "showSchemas" :timeout lsp-sqls-timeout))))
-
-(defun lsp-sql-show-connections (&optional _command)
- "Show connections."
- (interactive)
- (lsp-sqls--show-results
- (lsp-request
- "workspace/executeCommand"
- (list :command "showConnections" :timeout lsp-sqls-timeout))))
-
-(defun lsp-sql-switch-database (&optional _command)
- "Switch database."
- (interactive)
- (lsp-workspace-command-execute
- "switchDatabase"
- (vector (completing-read
- "Select database: "
- (s-lines (lsp-workspace-command-execute "showDatabases"))
- nil
- t))))
-
-(defun lsp-sql-switch-connection (&optional _command)
- "Switch connection."
- (interactive)
- (lsp-workspace-command-execute
- "switchConnections"
- (vector (cl-first
- (s-match "\\([[:digit:]]*\\)"
- (completing-read
- "Select connection: "
- (s-lines (lsp-workspace-command-execute "showConnections"))
- nil
- t))))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection #'lsp-sqls--make-launch-cmd)
- :major-modes '(sql-mode)
- :priority -1
- :action-handlers (ht ("executeQuery" #'lsp-sql-execute-query)
- ("showDatabases" #'lsp-sql-show-databases)
- ("showSchemas" #'lsp-sql-show-schemas)
- ("showConnections" #'lsp-sql-show-connections)
- ("switchDatabase" #'lsp-sql-switch-database)
- ("switchConnections" #'lsp-sql-switch-connection))
- :server-id 'sqls
- :initialized-fn (lambda (workspace)
- (-> workspace
- (lsp--workspace-server-capabilities)
- (lsp:set-server-capabilities-execute-command-provider? t))
- (with-lsp-workspace workspace
- (lsp-sqls-setup-workspace-configuration)))))
-
-(lsp-consistency-check lsp-sqls)
-
-(provide 'lsp-sqls)
-;;; lsp-sqls.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-steep.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-steep.el
deleted file mode 100644
index f1ecba4..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-steep.el
+++ /dev/null
@@ -1,73 +0,0 @@
-;;; lsp-steep.el --- lsp-mode for Steep -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Masafumi Koba
-
-;; Author: Masafumi Koba <ybiquitous@gmail.com>
-;; Keywords: languages
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for Steep which is a Ruby type checker.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-steep nil
- "LSP support for Steep, using the Steep language server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/soutaro/steep"))
-
-(defcustom lsp-steep-log-level "warn"
- "Log level of Steep."
- :type '(choice
- (const "fatal")
- (const "error")
- (const "warn")
- (const "info")
- (const "debug"))
- :group 'lsp-steep)
-
-(defcustom lsp-steep-use-bundler t
- "Run Steep using Bunder."
- :type 'boolean
- :safe #'booleanp
- :group 'lsp-steep)
-
-(defcustom lsp-steep-server-path nil
- "Path of the Steep language server executable.
-If specified, `lsp-steep-use-bundler' is ignored."
- :type 'file
- :group 'lsp-steep
- :package-version '(lsp-mode . "7.1"))
-
-(defun lsp-steep--build-command ()
- "Build a command to start the Steep language server."
- (append
- (if (and lsp-steep-use-bundler (not lsp-steep-server-path)) '("bundle" "exec"))
- (list (or lsp-steep-server-path "steep") "langserver" "--log-level" lsp-steep-log-level)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection #'lsp-steep--build-command)
- :major-modes '(ruby-mode enh-ruby-mode)
- :priority -3
- :server-id 'steep-ls))
-
-(lsp-consistency-check lsp-steep)
-
-(provide 'lsp-steep)
-;;; lsp-steep.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-svelte.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-svelte.el
deleted file mode 100644
index 47f4c8e..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-svelte.el
+++ /dev/null
@@ -1,307 +0,0 @@
-;;; lsp-svelte.el --- LSP Svelte integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Stepan Lusnikov
-
-;; Author: Stepan Lusnikov <endenwer@gmail.com>
-;; Keywords: lsp svelte
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for Svelte
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-svelte nil
- "LSP support for Svelte."
- :group 'lsp-mode
- :link '(url-link
- "https://github.com/sveltejs/language-tools"))
-
-(lsp-dependency 'svelte-language-server
- '(:system "svelteserver")
- '(:npm :package "svelte-language-server"
- :path "svelteserver"))
-
-(defcustom lsp-svelte-plugin-typescript-enable t
- "Enable the TypeScript plugin"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-diagnostics-enable t
- "Enable diagnostic messages for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-hover-enable t
- "Enable hover info for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-document-symbols-enable t
- "Enable document symbols for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-completions-enable t
- "Enable completions for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-find-references-enable t
- "Enable find-references for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-definitions-enable t
- "Enable go to definition for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-code-actions-enable t
- "Enable code actions for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-selection-range-enable t
- "Enable selection range for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-signature-help-enable t
- "Enable signature help (parameter hints) for TypeScript"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-typescript-rename-enable t
- "Enable rename functionality for JS/TS variables inside Svelte files"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-enable t
- "Enable the CSS plugin"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-globals ""
- "Which css files should be checked for global variables
-(`--global-var: value;`).
-
-These variables are added to the css completions. String of comma-separated
-file paths or globs relative to workspace root."
- :type 'string
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-diagnostics-enable t
- "Enable diagnostic messages for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-hover-enable t
- "Enable hover info for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-completions-enable t
- "Enable auto completions for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-completions-emmet t
- "Enable emmet auto completions for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-document-colors-enable t
- "Enable document colors for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-color-presentations-enable t
- "Enable color picker for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-document-symbols-enable t
- "Enable document symbols for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-css-selection-range-enable t
- "Enable selection range for CSS"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-html-enable t
- "Enable the HTML plugin"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-html-hover-enable t
- "Enable hover info for HTML"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-html-completions-enable t
- "Enable auto completions for HTML"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-html-completions-emmet t
- "Enable emmet auto completions for HTML"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-html-tag-complete-enable t
- "Enable HTML tag auto closing"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-html-document-symbols-enable t
- "Enable document symbols for HTML"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-enable t
- "Enable the Svelte plugin"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-diagnostics-enable t
- "Enable diagnostic messages for Svelte"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-compiler-warnings nil
- "Svelte compiler warning codes to ignore or to treat as errors.
-Example: '((css-unused-selector . ignore) (unused-export-let . error))"
- :type '(alist :key-type (symbol :tag "Warning code")
- :value-type (choice
- (const :tag "Ignore" ignore)
- (const :tag "Treat as error" error)))
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-format-enable t
- "Enable formatting for Svelte (includes css & js)"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-completions-enable t
- "Enable auto completions for Svelte"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-hover-enable t
- "Enable hover information for Svelte"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-code-actions-enable t
- "Enable Code Actions for Svelte"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-selection-range-enable t
- "Enable selection range for Svelte"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(defcustom lsp-svelte-plugin-svelte-rename-enable t
- "Enable rename/move Svelte files functionality"
- :type 'boolean
- :package-version '(lsp-mode . "7.1.0"))
-
-(lsp-register-custom-settings
- '(("svelte.plugin.svelte.rename.enable" lsp-svelte-plugin-svelte-rename-enable t)
- ("svelte.plugin.svelte.selectionRange.enable" lsp-svelte-plugin-svelte-selection-range-enable t)
- ("svelte.plugin.svelte.codeActions.enable" lsp-svelte-plugin-svelte-code-actions-enable t)
- ("svelte.plugin.svelte.hover.enable" lsp-svelte-plugin-svelte-hover-enable t)
- ("svelte.plugin.svelte.completions.enable" lsp-svelte-plugin-svelte-completions-enable t)
- ("svelte.plugin.svelte.format.enable" lsp-svelte-plugin-svelte-format-enable t)
- ("svelte.plugin.svelte.compilerWarnings" lsp-svelte-plugin-svelte-compiler-warnings)
- ("svelte.plugin.svelte.diagnostics.enable" lsp-svelte-plugin-svelte-diagnostics-enable t)
- ("svelte.plugin.svelte.enable" lsp-svelte-plugin-svelte-enable t)
- ("svelte.plugin.html.documentSymbols.enable" lsp-svelte-plugin-html-document-symbols-enable t)
- ("svelte.plugin.html.tagComplete.enable" lsp-svelte-plugin-html-tag-complete-enable t)
- ("svelte.plugin.html.completions.emmet" lsp-svelte-plugin-html-completions-emmet t)
- ("svelte.plugin.html.completions.enable" lsp-svelte-plugin-html-completions-enable t)
- ("svelte.plugin.html.hover.enable" lsp-svelte-plugin-html-hover-enable t)
- ("svelte.plugin.html.enable" lsp-svelte-plugin-html-enable t)
- ("svelte.plugin.css.selectionRange.enable" lsp-svelte-plugin-css-selection-range-enable t)
- ("svelte.plugin.css.documentSymbols.enable" lsp-svelte-plugin-css-document-symbols-enable t)
- ("svelte.plugin.css.colorPresentations.enable" lsp-svelte-plugin-css-color-presentations-enable t)
- ("svelte.plugin.css.documentColors.enable" lsp-svelte-plugin-css-document-colors-enable t)
- ("svelte.plugin.css.completions.emmet" lsp-svelte-plugin-css-completions-emmet t)
- ("svelte.plugin.css.completions.enable" lsp-svelte-plugin-css-completions-enable t)
- ("svelte.plugin.css.hover.enable" lsp-svelte-plugin-css-hover-enable t)
- ("svelte.plugin.css.diagnostics.enable" lsp-svelte-plugin-css-diagnostics-enable t)
- ("svelte.plugin.css.globals" lsp-svelte-plugin-css-globals)
- ("svelte.plugin.css.enable" lsp-svelte-plugin-css-enable t)
- ("svelte.plugin.typescript.rename.enable" lsp-svelte-plugin-typescript-rename-enable t)
- ("svelte.plugin.typescript.signatureHelp.enable" lsp-svelte-plugin-typescript-signature-help-enable t)
- ("svelte.plugin.typescript.selectionRange.enable" lsp-svelte-plugin-typescript-selection-range-enable t)
- ("svelte.plugin.typescript.codeActions.enable" lsp-svelte-plugin-typescript-code-actions-enable t)
- ("svelte.plugin.typescript.definitions.enable" lsp-svelte-plugin-typescript-definitions-enable t)
- ("svelte.plugin.typescript.findReferences.enable" lsp-svelte-plugin-typescript-find-references-enable t)
- ("svelte.plugin.typescript.completions.enable" lsp-svelte-plugin-typescript-completions-enable t)
- ("svelte.plugin.typescript.documentSymbols.enable" lsp-svelte-plugin-typescript-document-symbols-enable t)
- ("svelte.plugin.typescript.hover.enable" lsp-svelte-plugin-typescript-hover-enable t)
- ("svelte.plugin.typescript.diagnostics.enable" lsp-svelte-plugin-typescript-diagnostics-enable t)
- ("svelte.plugin.typescript.enable" lsp-svelte-plugin-typescript-enable t)))
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(lsp-package-path 'svelte-language-server)
- "--stdio")))
- :activation-fn (lambda (file-name _mode)
- (string= (f-ext file-name)
- "svelte"))
- :initialization-options
- (lambda ()
- (list :config (ht-get* (lsp-configuration-section "svelte.plugin")
- "svelte"
- "plugin")
- :prettierConfig (lsp-configuration-section "prettier")
- :emmetConfig (lsp-configuration-section "emmet")
- :typescriptConfig: (list :typescript (lsp-configuration-section "typescript")
- :javascript (lsp-configuration-section "javascript"))
- :dontFilterIncompleteCompletions t))
- :server-id 'svelte-ls
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'svelte-language-server callback error-callback))
- :initialized-fn
- (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (ht-merge (lsp-configuration-section "svelte")
- (lsp-configuration-section "javascript")
- (lsp-configuration-section "typescript")))
- (lsp--server-register-capability
- (lsp-make-registration
- :id "js/ts/id"
- :method "workspace/didChangeWatchedFiles"
- :register-options? (lsp-make-did-change-watched-files-registration-options
- :watchers
- (vector (lsp-make-file-system-watcher :glob-pattern "**/*.js")
- (lsp-make-file-system-watcher :glob-pattern "**/*.ts")))))))))
-
-(lsp-consistency-check lsp-svelte)
-
-(provide 'lsp-svelte)
-;;; lsp-svelte.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-terraform.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-terraform.el
deleted file mode 100644
index af215f4..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-terraform.el
+++ /dev/null
@@ -1,68 +0,0 @@
-;;; lsp-terraform.el --- Terraform Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ross Donaldson
-
-;; Author: Ross Donaldson
-;; Keywords: terraform lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for Terraform
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-terraform nil
- "LSP support for Terraform, using terraform-lsp"
- :group 'lsp-mode
- :link '(url-link "https://github.com/juliosueiras/terraform-lsp")
- :package-version `(lsp-mode . "6.2"))
-
-(defcustom lsp-terraform-server "terraform-lsp"
- "Path to the `terraform-lsp' binary."
- :group 'lsp-terraform
- :risky t
- :type '(choice
- (file :tag "File")
- (repeat string))
- :package-version `(lsp-mode . "6.2"))
-
-(defcustom lsp-terraform-enable-logging nil
- "If non-nil, enable `terraform-ls''s native logging."
- :group 'lsp-terraform
- :risky t
- :type 'boolean
- :package-version `(lsp-mode . "6.2"))
-
-(defun lsp-terraform--make-launch-cmd ()
- (-let [base (if (stringp lsp-terraform-server)
- `(,lsp-terraform-server)
- lsp-terraform-server)]
- (when lsp-terraform-enable-logging
- (push "-enable-log-file" base))
- base))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection #'lsp-terraform--make-launch-cmd)
- :major-modes '(terraform-mode)
- :priority -1
- :server-id 'tfls))
-
-(lsp-consistency-check lsp-terraform)
-
-(provide 'lsp-terraform)
-;;; lsp-terraform.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-tex.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-tex.el
deleted file mode 100644
index 3cd6d08..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-tex.el
+++ /dev/null
@@ -1,68 +0,0 @@
-;;; lsp-tex.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, tex
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the Tex Typesetting Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-tex nil
- "LSP support for TeX and friends, using Digestif and texlab."
- :group 'lsp-mode
- :link '(url-link "https://github.com/astoff/digestif/")
- :link '(url-link "https://github.com/latex-lsp/texlab"))
-
-(defcustom lsp-tex-server 'texlab
- "Choose LSP tex server."
- :type '(choice (const :tag "texlab" texlab)
- (const :tag "digestif" digestif))
- :group 'lsp-tex)
-
-(defcustom lsp-clients-digestif-executable "digestif"
- "Command to start the Digestif language server."
- :group 'lsp-tex
- :risky t
- :type 'file)
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection lsp-clients-digestif-executable)
- :major-modes '(plain-tex-mode latex-mode context-mode texinfo-mode)
- :priority (if (eq lsp-tex-server 'digestif) 1 -1)
- :server-id 'digestif))
-
-(defcustom lsp-clients-texlab-executable "texlab"
- "Command to start the texlab language server."
- :group 'lsp-tex
- :risky t
- :type 'file)
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection lsp-clients-texlab-executable)
- :major-modes '(plain-tex-mode latex-mode)
- :priority (if (eq lsp-tex-server 'texlab) 1 -1)
- :server-id 'texlab))
-
-(lsp-consistency-check lsp-tex)
-
-(provide 'lsp-tex)
-;;; lsp-tex.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-v.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-v.el
deleted file mode 100644
index a809a07..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-v.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;;; lsp-v.el --- lsp-mode V integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 remimimimi
-
-;; Author: remimimimi
-;; Keywords: languages,tools
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; client for vls, the V language server
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-v nil
- "LSP support for V via vls."
- :group 'lsp-mode
- :link '(url-link "https://github.com/vlang/vls/tree/master"))
-
-(defcustom lsp-v-vls-executable "vls"
- "The vls executable to use.
-Leave as just the executable name to use the default behavior of
-finding the executable with variable `exec-path'."
- :group 'lsp-v
- :type 'string)
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection (lambda () lsp-v-vls-executable))
- :activation-fn (lsp-activate-on "V")
- :server-id 'v-ls))
-
-(lsp-consistency-check lsp-v)
-
-(provide 'lsp-v)
-;;; lsp-v.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vala.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vala.el
deleted file mode 100644
index 98f4e16..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vala.el
+++ /dev/null
@@ -1,51 +0,0 @@
-;;; lsp-vala.el --- Vala Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Daniel Svensson
-
-;; Author: Daniel Svensson
-;; Keywords: vala lsp
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP client for Vala
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-vala nil
- "LSP support for Vala, using vala-language-server"
- :group 'lsp-mode
- :link '(url-link "https://github.com/benwaffle/vala-language-server")
- :package-version `(lsp-mode . "7.1.0"))
-
-(defcustom lsp-clients-vala-ls-executable "vala-language-server"
- "Path to the `vala-language-server' binary."
- :group 'lsp-vala
- :risky t
- :type 'file
- :package-version `(lsp-mode . "7.1.0"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection (lambda () lsp-clients-vala-ls-executable))
- :major-modes '(vala-mode)
- :priority -1
- :server-id 'valals))
-
-(lsp-consistency-check lsp-vala)
-
-(provide 'lsp-vala)
-;;; lsp-vala.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-verilog.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-verilog.el
deleted file mode 100644
index 56df709..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-verilog.el
+++ /dev/null
@@ -1,186 +0,0 @@
-;;; lsp-verilog.el --- Verilog Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Patrick Grogan
-
-;; Author: Patrick Grogan <pogrogan@gmail.com>
-;; Created: 7 December 2019
-;; Keywords: languages, lsp, verilog
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;; LSP client support for Verilog/SystemVerilog. Two language servers
-;; are available:
-;; 1) HDL Checker. See https://github.com/suoto/hdl_checker
-;; 2) SVLangserver. See https://github.com/imc-trading/svlangserver
-;;
-;; This file is based on the lsp-vhdl.el file.
-;;
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-svlangserver nil
- "Settings for the SystemVerilog language server client."
- :group 'lsp-mode
- :link '(url-link "https://github.com/imc-trading/svlangserver")
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-clients-svlangserver-includeIndexing '["**/*.{sv,svh}"]
- "Files included for indexing (glob pattern)"
- :group 'lsp-svlangserver
- :type '(lsp-repeatable-vector string)
- :safe (lambda (x) (seq-every-p #'stringp x)))
-
-(defcustom lsp-clients-svlangserver-excludeIndexing '["test/**/*.{sv,svh}"]
- "Files excluded for indexing (glob pattern)"
- :group 'lsp-svlangserver
- :type '(lsp-repeatable-vector string)
- :safe (lambda (x) (seq-every-p #'stringp x)))
-
-(defcustom lsp-clients-svlangserver-defines nil
- "Defines needed for linting"
- :group 'lsp-svlangserver
- :type '(lsp-repeatable-vector string)
- :safe (lambda (x) (seq-every-p #'stringp x)))
-
-(defcustom lsp-clients-svlangserver-launchConfiguration "verilator -sv --lint-only -Wall"
- "Verilator command used for linting"
- :group 'lsp-svlangserver
- :type 'string
- :safe (lambda (x) (stringp x)))
-
-(defcustom lsp-clients-svlangserver-lintOnUnsaved t
- "Enable linting on unsaved files"
- :group 'lsp-svlangserver
- :type 'boolean
- :safe (lambda (x) (booleanp x)))
-
-(defcustom lsp-clients-svlangserver-formatCommand "verible-verilog-format"
- "Verible verilog format command"
- :group 'lsp-svlangserver
- :type 'string
- :safe (lambda (x) (stringp x)))
-
-(defcustom lsp-clients-svlangserver-disableCompletionProvider nil
- "Disable auto completion provided by the language server"
- :group 'lsp-svlangserver
- :type 'boolean
- :safe (lambda (x) (booleanp x)))
-
-(defcustom lsp-clients-svlangserver-disableHoverProvider nil
- "Disable hover over help provided by the language server"
- :group 'lsp-svlangserver
- :type 'boolean
- :safe (lambda (x) (booleanp x)))
-
-(defcustom lsp-clients-svlangserver-disableSignatureHelpProvider nil
- "Disable signature help provided by the language server"
- :group 'lsp-svlangserver
- :type 'boolean
- :safe (lambda (x) (booleanp x)))
-
-(defcustom lsp-clients-svlangserver-disableLinting nil
- "Disable verilator linting"
- :group 'lsp-svlangserver
- :type 'boolean
- :safe (lambda (x) (booleanp x)))
-
-(defcustom lsp-clients-svlangserver-workspace-additional-dirs nil
- "Additional directories to be managed by this instance of svlangserver"
- :group 'lsp-svlangserver
- :type '(lsp-repeatable-vector string)
- :safe (lambda (x) (seq-every-p #'stringp x)))
-
-(defcustom lsp-clients-svlangserver-bin-path "svlangserver"
- "svlangserver binary path"
- :group 'lsp-svlangserver
- :type 'string
- :safe (lambda (x) (stringp x)))
-
-(defcustom lsp-clients-svlangserver-bin-args nil
- "command line arguments for svlangserver binary"
- :group 'lsp-svlangserver
- :type '(lsp-repeatable-vector string)
- :safe (lambda (x) (seq-every-p #'stringp x)))
-
-(defcustom lsp-clients-svlangserver-node-command "node"
- "node binary path"
- :group 'lsp-svlangserver
- :type 'string
- :safe (lambda (x) (stringp x)))
-
-(defcustom lsp-clients-svlangserver-module-path "svlangserver.js"
- "svlangserver module path"
- :group 'lsp-svlangserver
- :type 'string
- :safe (lambda (x) (stringp x)))
-
-(lsp-dependency 'svlangserver
- '(:system "svlangserver"))
-
-(defun lsp-clients-svlangserver-get-workspace-additional-dirs (_workspace)
- lsp-clients-svlangserver-workspace-additional-dirs)
-
-(defun lsp-clients-svlangserver-command ()
- (let ((svlangserver-bin-path (lsp-package-path 'svlangserver)))
- (if svlangserver-bin-path
- (cons svlangserver-bin-path lsp-clients-svlangserver-bin-args)
- (if (file-exists-p lsp-clients-svlangserver-bin-path)
- (cons lsp-clients-svlangserver-bin-path lsp-clients-svlangserver-bin-args)
- (if (file-exists-p lsp-clients-svlangserver-module-path)
- `(,lsp-clients-svlangserver-node-command ,lsp-clients-svlangserver-module-path ,"--stdio")
- `(,"svlangserver"))))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection 'lsp-clients-svlangserver-command)
- :major-modes '(verilog-mode)
- :priority -1
- :library-folders-fn 'lsp-clients-svlangserver-get-workspace-additional-dirs
- :server-id 'svlangserver))
-
-(lsp-register-custom-settings '(("systemverilog.includeIndexing" lsp-clients-svlangserver-includeIndexing)
- ("systemverilog.excludeIndexing" lsp-clients-svlangserver-excludeIndexing)
- ("systemverilog.defines" lsp-clients-svlangserver-defines)
- ("systemverilog.launchConfiguration" lsp-clients-svlangserver-launchConfiguration)
- ("systemverilog.lintOnUnsaved" lsp-clients-svlangserver-lintOnUnsaved)
- ("systemverilog.formatCommand" lsp-clients-svlangserver-formatCommand)
- ("systemverilog.disableCompletionProvider" lsp-clients-svlangserver-disableCompletionProvider)
- ("systemverilog.disableHoverProvider" lsp-clients-svlangserver-disableHoverProvider)
- ("systemverilog.disableSignatureHelpProvider" lsp-clients-svlangserver-disableSignatureHelpProvider)
- ("systemverilog.disableLinting" lsp-clients-svlangserver-disableLinting)))
-
-(defgroup lsp-verilog nil
- "LSP support for Verilog/SystemVerilog."
- :group 'lsp-mode
- :link '(url-link "https://github.com/suoto/hdl_checker"))
-
-(defcustom lsp-clients-verilog-executable '("hdl_checker" "--lsp")
- "Command to start the hdl_checker language server."
- :group 'lsp-verilog
- :risky t
- :type 'file)
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection lsp-clients-verilog-executable)
- :major-modes '(verilog-mode)
- :language-id "verilog"
- :priority -2
- :server-id 'lsp-verilog))
-
-(lsp-consistency-check lsp-verilog)
-
-(provide 'lsp-verilog)
-;;; lsp-verilog.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vetur.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vetur.el
deleted file mode 100644
index f23c539..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vetur.el
+++ /dev/null
@@ -1,869 +0,0 @@
-;;; lsp-vetur.el --- vls configuration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; VLS configuration
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'lsp-html)
-
-(defgroup lsp-vetur nil
- "LSP support for Vue, using the Vue Language Server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/vuejs/vetur/tree/master/server")
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-use-workspace-dependencies nil
- "Use dependencies from workspace. Currently only for
-TypeScript."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-completion-auto-import t
- "Include completion for module export and auto import them"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-completion-use-scaffold-snippets t
- "Enable/disable Vetur's built-in scaffolding snippets"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-completion-tag-casing "kebab"
- "Casing conversion for tag completion"
- :type '(choice
- (const "initial")
- (const "kebab"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-grammar-custom-blocks '((docs . "md") (i18n . "json"))
- "Mapping from custom block tag name to language name. Used for
- generating grammar to support syntax highlighting for custom
- blocks."
- :type 'alist
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-validation-template t
- "Validate vue-html in <template> using eslint-plugin-vue"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-language-features-code-actions t
- "Enable/disable code actions."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-vetur-validation-style t
- "Validate css/scss/less/postcss in <style>"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-validation-script t
- "Validate js/ts in <script>"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-enable t
- "Enable/disable the Vetur document formatter."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-options-tab-size 2
- "Number of spaces per indentation level. Inherited by all formatters."
- :type 'number
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-options-use-tabs nil
- "Use tabs for indentation. Inherited by all formatters."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-html "prettyhtml"
- "Default formatter for <template> region"
- :type '(choice
- (const "none")
- (const "prettyhtml")
- (const "js-beautify-html")
- (const "prettier"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-css "prettier"
- "Default formatter for <style> region"
- :type '(choice
- (const "none")
- (const "prettier"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-postcss "prettier"
- "Default formatter for <style lang='postcss'> region"
- :type '(choice
- (const "none")
- (const "prettier"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-scss "prettier"
- "Default formatter for <style lang='scss'> region"
- :type '(choice
- (const "none")
- (const "prettier"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-less "prettier"
- "Default formatter for <style lang='less'> region"
- :type '(choice
- (const "none")
- (const "prettier"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-stylus "stylus-supremacy"
- "Default formatter for <style lang='stylus'> region"
- :type '(choice
- (const "none")
- (const "stylus-supremacy"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-js "prettier"
- "Default formatter for <script> region"
- :type '(choice
- (const "none")
- (const "prettier")
- (const "prettier-eslint")
- (const "vscode-typescript"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-ts "prettier"
- "Default formatter for <script> region"
- :type '(choice
- (const "none")
- (const "prettier")
- (const "vscode-typescript"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-default-formatter-options
- '((js-beautify-html (wrap_attributes . "force-expand-multiline"))
- (prettyhtml (printWidth . 100)
- (singleQuote . :json-false)
- (wrapAttributes . :json-false)
- (sortAttributes . :json-false)))
- "Options for all default formatters"
- :type 'alist
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-style-initial-indent nil
- "Whether to have initial indent for <style> region"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-format-script-initial-indent nil
- "Whether to have initial indent for <script> region"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-trace-server "off"
- "Traces the communication between VS Code and Vue Language Server."
- :type '(choice
- (const "off")
- (const "messages")
- (const "verbose"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-dev-vls-path ""
- "The vls path for development"
- :type 'string
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-vetur-dev-vls-port -1
- "The vls port for development"
- :type 'integer
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-vetur-dev-log-level "INFO"
- "The vls log level for development"
- :type '(choice
- (const "INFO")
- (const "DEBUG"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-vetur-experimental-template-interpolation-service nil
- "Whether to have template interpolation service"
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.3"))
-
-(defcustom lsp-typescript-tsdk nil
- "Specifies the folder path containing the tsserver and
-lib*.d.ts files to use."
- :type '(repeat string)
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-disable-automatic-type-acquisition nil
- "Disables automatic type acquisition. Automatic type
-acquisition fetches `@types` packages from npm to improve
-IntelliSense for external libraries."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-npm nil
- "Specifies the path to the NPM executable used for Automatic
-Type Acquisition. Requires using TypeScript 2.3.4 or newer in the
-workspace."
- :type '(repeat string)
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-check-npm-is-installed t
- "Check if NPM is installed for Automatic Type Acquisition."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-references-code-lens-enabled nil
- "Enable/disable references CodeLens in JavaScript files."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-references-code-lens-enabled nil
- "Enable/disable references CodeLens in TypeScript files."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-implementations-code-lens-enabled nil
- "Enable/disable implementations CodeLens. This CodeLens shows
-the implementers of an interface."
- :type 'boolean
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-tsserver-log "off"
- "Enables logging of the TS server to a file. This log can be
-used to diagnose TS Server issues. The log may contain file
-paths, source code, and other potentially sensitive information
-from your project."
- :type '(choice
- (const "off")
- (const "terse")
- (const "normal")
- (const "verbose"))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-tsserver-plugin-paths nil
- "Additional paths to discover Typescript Language Service
-plugins. Requires using TypeScript 2.3.0 or newer in the
-workspace."
- :type '(repeat string)
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-tsserver-trace "off"
- "Enables tracing of messages sent to the TS server. This trace
-can be used to diagnose TS Server issues. The trace may contain
-file paths, source code, and other potentially sensitive
-information from your project."
- :type '(choice
- (const "off")
- (const "messages")
- (const "verbose"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-suggest-complete-function-calls nil
- "Complete functions with their parameter signature."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-suggest-complete-function-calls nil
- "Complete functions with their parameter signature."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-report-style-checks-as-warnings t
- "Report style checks as warnings."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-validate-enable t
- "Enable/disable TypeScript validation."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-enable t
- "Enable/disable default TypeScript formatter."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-comma-delimiter t
- "Defines space handling after a comma delimiter."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-constructor nil
- "Defines space handling after the constructor keyword. Requires
-using TypeScript 2.3.0 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-semicolon-in-for-statements t
- "Defines space handling after a semicolon in a for statement."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-before-and-after-binary-operators t
- "Defines space handling after a binary operator."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-keywords-in-control-flow-statements t
- "Defines space handling after keywords in a control flow
-statement."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-function-keyword-for-anonymous-functions t
- "Defines space handling after function keyword for anonymous
-functions."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-before-function-parenthesis nil
- "Defines space handling before function argument parentheses."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis nil
- "Defines space handling after opening and before closing
-non-empty parenthesis."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-brackets nil
- "Defines space handling after opening and before closing
-non-empty brackets."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-braces t
- "Defines space handling after opening and before closing
-non-empty braces. Requires using TypeScript 2.3.0 or newer in the
-workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-template-string-braces nil
- "Defines space handling after opening and before closing
-template string braces."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces nil
- "Defines space handling after opening and before closing JSX
-expression braces."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-insert-space-after-type-assertion nil
- "Defines space handling after type assertions in TypeScript.
-Requires using TypeScript 2.4 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-place-open-brace-on-new-line-for-functions nil
- "Defines whether an open brace is put onto a new line for
-functions or not."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-format-place-open-brace-on-new-line-for-control-blocks nil
- "Defines whether an open brace is put onto a new line for
-control blocks or not."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-validate-enable t
- "Enable/disable JavaScript validation."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-enable t
- "Enable/disable default JavaScript formatter."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-comma-delimiter t
- "Defines space handling after a comma delimiter."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-constructor nil
- "Defines space handling after the constructor keyword. Requires
-using TypeScript 2.3.0 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-semicolon-in-for-statements t
- "Defines space handling after a semicolon in a for statement."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-before-and-after-binary-operators t
- "Defines space handling after a binary operator."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-keywords-in-control-flow-statements t
- "Defines space handling after keywords in a control flow
-statement."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-function-keyword-for-anonymous-functions t
- "Defines space handling after function keyword for anonymous
-functions."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-before-function-parenthesis nil
- "Defines space handling before function argument parentheses."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis nil
- "Defines space handling after opening and before closing
-non-empty parenthesis."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-brackets nil
- "Defines space handling after opening and before closing
-non-empty brackets."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-braces t
- "Defines space handling after opening and before closing
-non-empty braces. Requires using TypeScript 2.3.0 or newer in the
-workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-template-string-braces nil
- "Defines space handling after opening and before closing
-template string braces."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces nil
- "Defines space handling after opening and before closing JSX
-expression braces."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-place-open-brace-on-new-line-for-functions nil
- "Defines whether an open brace is put onto a new line for
-functions or not."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-format-place-open-brace-on-new-line-for-control-blocks nil
- "Defines whether an open brace is put onto a new line for
-control blocks or not."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-implicit-project-config-check-js nil
- "Enable/disable semantic checking of JavaScript files. Existing
-jsconfig.json or tsconfig.json files override this setting.
-Requires using TypeScript 2.3.1 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-implicit-project-config-experimental-decorators nil
- nil
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-suggest-names t
- "Enable/disable including unique names from the file in
-JavaScript suggestions."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-tsc-auto-detect "on"
- "Controls auto detection of tsc tasks."
- :type '(choice
- (const "on")
- (const "off")
- (const "build")
- (const "watch"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-suggest-paths t
- "Enable/disable suggestions for paths in import statements and
-require calls."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-suggest-paths t
- "Enable/disable suggestions for paths in import statements and
-require calls."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-suggest-auto-imports t
- "Enable/disable auto import suggestions. Requires using
-TypeScript 2.6.1 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-suggest-auto-imports t
- "Enable/disable auto import suggestions. Requires using
-TypeScript 2.6.1 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-suggest-complete-js-docs t
- "Enable/disable suggestion to complete JSDoc comments."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-suggest-complete-js-docs t
- "Enable/disable suggestion to complete JSDoc comments."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-locale nil
- nil
- :type '(choice
- (const "de")
- (const "es")
- (const "en")
- (const "fr")
- (const "it")
- (const "ja")
- (const "ko")
- (const "ru")
- (const "zh-CN")
- (const "zh-TW")
- nil)
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-suggestion-actions-enabled t
- "Enable/disable suggestion diagnostics for JavaScript files in
-the editor. Requires using TypeScript 2.8 or newer in the
-workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-suggestion-actions-enabled t
- "Enable/disable suggestion diagnostics for TypeScript files in
-the editor. Requires using TypeScript 2.8 or newer in the
-workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-preferences-quote-style "auto" nil
- :type '(choice
- (const "auto")
- (const "single")
- (const "double"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-preferences-quote-style "auto" nil
- :type '(choice
- (const "auto")
- (const "single")
- (const "double"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-preferences-import-module-specifier "auto"
- "Preferred path style for auto imports."
- :type '(choice
- (const "auto")
- (const "relative")
- (const "non-relative"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-preferences-import-module-specifier "auto"
- "Infer the shortest path type."
- :type '(choice
- (const "auto")
- (const "relative")
- (const "non-relative"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-preferences-rename-shorthand-properties t
- "Enable/disable introducing aliases for object shorthand
-properties during renames. Requires using TypeScript 3.4 or newer
-in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-preferences-rename-shorthand-properties t
- "Enable/disable introducing aliases for object shorthand
-properties during renames. Requires using TypeScript 3.4 or newer
-in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-update-imports-on-file-move-enabled "prompt"
- "Enable/disable automatic updating of import paths when you
-rename or move a file in VS Code. Requires using TypeScript 2.9
-or newer in the workspace."
- :type '(choice
- (const "prompt")
- (const "always")
- (const "never"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-update-imports-on-file-move-enabled "prompt"
- "Prompt on each rename."
- :type '(choice
- (const "prompt")
- (const "always")
- (const "never"))
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-auto-closing-tags t
- "Enable/disable automatic closing of JSX tags. Requires using
-TypeScript 3.0 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-auto-closing-tags t
- "Enable/disable automatic closing of JSX tags. Requires using
-TypeScript 3.0 or newer in the workspace."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-javascript-suggest-enabled t
- "Enabled/disable autocomplete suggestions."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-suggest-enabled t
- "Enabled/disable autocomplete suggestions."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-typescript-surveys-enabled t
- "Enabled/disable occasional surveys that help us improve VS
-Code's JavaScript and TypeScript support."
- :type 'boolean
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-vetur-emmet "never"
- "Controls the Emmet suggestions that show up in the suggestion/completion list."
- :type '(choice
- (const "never")
- (const "inMarkupAndStylesheetFilesOnly")
- (const "always" ))
- :group 'lsp-vetur
- :package-version '(lsp-mode . "6.1"))
-
-(lsp-register-custom-settings
- '(("javascript.autoClosingTags" lsp-javascript-auto-closing-tags t)
- ("javascript.format.enable" lsp-javascript-format-enable t)
- ("javascript.format.insertSpaceAfterCommaDelimiter" lsp-javascript-format-insert-space-after-comma-delimiter t)
- ("javascript.format.insertSpaceAfterConstructor" lsp-javascript-format-insert-space-after-constructor t)
- ("javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions" lsp-javascript-format-insert-space-after-function-keyword-for-anonymous-functions t)
- ("javascript.format.insertSpaceAfterKeywordsInControlFlowStatements" lsp-javascript-format-insert-space-after-keywords-in-control-flow-statements t)
- ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces" lsp-javascript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces t)
- ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces" lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-braces t)
- ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets" lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-brackets t)
- ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis" lsp-javascript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis t)
- ("javascript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces" lsp-javascript-format-insert-space-after-opening-and-before-closing-template-string-braces t)
- ("javascript.format.insertSpaceAfterSemicolonInForStatements" lsp-javascript-format-insert-space-after-semicolon-in-for-statements t)
- ("javascript.format.insertSpaceBeforeAndAfterBinaryOperators" lsp-javascript-format-insert-space-before-and-after-binary-operators t)
- ("javascript.format.insertSpaceBeforeFunctionParenthesis" lsp-javascript-format-insert-space-before-function-parenthesis t)
- ("javascript.format.placeOpenBraceOnNewLineForControlBlocks" lsp-javascript-format-place-open-brace-on-new-line-for-control-blocks t)
- ("javascript.format.placeOpenBraceOnNewLineForFunctions" lsp-javascript-format-place-open-brace-on-new-line-for-functions t)
- ("javascript.implicitProjectConfig.checkJs" lsp-javascript-implicit-project-config-check-js t)
- ("javascript.implicitProjectConfig.experimentalDecorators" lsp-javascript-implicit-project-config-experimental-decorators t)
- ("javascript.preferences.importModuleSpecifier" lsp-javascript-preferences-import-module-specifier)
- ("javascript.preferences.quoteStyle" lsp-javascript-preferences-quote-style)
- ("javascript.preferences.renameShorthandProperties" lsp-javascript-preferences-rename-shorthand-properties t)
- ("javascript.referencesCodeLens.enabled" lsp-javascript-references-code-lens-enabled t)
- ("javascript.suggest.autoImports" lsp-javascript-suggest-auto-imports t)
- ("javascript.suggest.completeFunctionCalls" lsp-javascript-suggest-complete-function-calls t)
- ("javascript.suggest.completeJSDocs" lsp-javascript-suggest-complete-js-docs t)
- ("javascript.suggest.enabled" lsp-javascript-suggest-enabled t)
- ("javascript.suggest.names" lsp-javascript-suggest-names t)
- ("javascript.suggest.paths" lsp-javascript-suggest-paths t)
- ("javascript.suggestionActions.enabled" lsp-javascript-suggestion-actions-enabled t)
- ("javascript.updateImportsOnFileMove.enabled" lsp-javascript-update-imports-on-file-move-enabled)
- ("javascript.validate.enable" lsp-javascript-validate-enable t)
- ("typescript.autoClosingTags" lsp-typescript-auto-closing-tags t)
- ("typescript.check.npmIsInstalled" lsp-typescript-check-npm-is-installed t)
- ("typescript.disableAutomaticTypeAcquisition" lsp-typescript-disable-automatic-type-acquisition t)
- ("typescript.format.enable" lsp-typescript-format-enable t)
- ("typescript.format.insertSpaceAfterCommaDelimiter" lsp-typescript-format-insert-space-after-comma-delimiter t)
- ("typescript.format.insertSpaceAfterConstructor" lsp-typescript-format-insert-space-after-constructor t)
- ("typescript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions" lsp-typescript-format-insert-space-after-function-keyword-for-anonymous-functions t)
- ("typescript.format.insertSpaceAfterKeywordsInControlFlowStatements" lsp-typescript-format-insert-space-after-keywords-in-control-flow-statements t)
- ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces" lsp-typescript-format-insert-space-after-opening-and-before-closing-jsx-expression-braces t)
- ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces" lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-braces t)
- ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets" lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-brackets t)
- ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis" lsp-typescript-format-insert-space-after-opening-and-before-closing-nonempty-parenthesis t)
- ("typescript.format.insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces" lsp-typescript-format-insert-space-after-opening-and-before-closing-template-string-braces t)
- ("typescript.format.insertSpaceAfterSemicolonInForStatements" lsp-typescript-format-insert-space-after-semicolon-in-for-statements t)
- ("typescript.format.insertSpaceAfterTypeAssertion" lsp-typescript-format-insert-space-after-type-assertion t)
- ("typescript.format.insertSpaceBeforeAndAfterBinaryOperators" lsp-typescript-format-insert-space-before-and-after-binary-operators t)
- ("typescript.format.insertSpaceBeforeFunctionParenthesis" lsp-typescript-format-insert-space-before-function-parenthesis t)
- ("typescript.format.placeOpenBraceOnNewLineForControlBlocks" lsp-typescript-format-place-open-brace-on-new-line-for-control-blocks t)
- ("typescript.format.placeOpenBraceOnNewLineForFunctions" lsp-typescript-format-place-open-brace-on-new-line-for-functions t)
- ("typescript.implementationsCodeLens.enabled" lsp-typescript-implementations-code-lens-enabled t)
- ("typescript.locale" lsp-typescript-locale)
- ("typescript.npm" lsp-typescript-npm)
- ("typescript.preferences.importModuleSpecifier" lsp-typescript-preferences-import-module-specifier)
- ("typescript.preferences.quoteStyle" lsp-typescript-preferences-quote-style)
- ("typescript.preferences.renameShorthandProperties" lsp-typescript-preferences-rename-shorthand-properties t)
- ("typescript.referencesCodeLens.enabled" lsp-typescript-references-code-lens-enabled t)
- ("typescript.reportStyleChecksAsWarnings" lsp-typescript-report-style-checks-as-warnings t)
- ("typescript.suggest.autoImports" lsp-typescript-suggest-auto-imports t)
- ("typescript.suggest.completeFunctionCalls" lsp-typescript-suggest-complete-function-calls t)
- ("typescript.suggest.completeJSDocs" lsp-typescript-suggest-complete-js-docs t)
- ("typescript.suggest.enabled" lsp-typescript-suggest-enabled t)
- ("typescript.suggest.paths" lsp-typescript-suggest-paths t)
- ("typescript.suggestionActions.enabled" lsp-typescript-suggestion-actions-enabled t)
- ("typescript.surveys.enabled" lsp-typescript-surveys-enabled t)
- ("typescript.tsc.autoDetect" lsp-typescript-tsc-auto-detect)
- ("typescript.tsdk" lsp-typescript-tsdk)
- ("typescript.tsserver.log" lsp-typescript-tsserver-log)
- ("typescript.tsserver.pluginPaths" lsp-typescript-tsserver-plugin-paths)
- ("typescript.tsserver.trace" lsp-typescript-tsserver-trace)
- ("typescript.updateImportsOnFileMove.enabled" lsp-typescript-update-imports-on-file-move-enabled)
- ("typescript.validate.enable" lsp-typescript-validate-enable t)
- ("vetur.trace.server" lsp-vetur-trace-server)
- ("vetur.format.scriptInitialIndent" lsp-vetur-format-script-initial-indent t)
- ("vetur.format.styleInitialIndent" lsp-vetur-format-style-initial-indent t)
- ("vetur.format.defaultFormatterOptions" lsp-vetur-format-default-formatter-options)
- ("vetur.format.defaultFormatter.ts" lsp-vetur-format-default-formatter-ts)
- ("vetur.format.defaultFormatter.js" lsp-vetur-format-default-formatter-js)
- ("vetur.format.defaultFormatter.stylus" lsp-vetur-format-default-formatter-stylus)
- ("vetur.format.defaultFormatter.less" lsp-vetur-format-default-formatter-less)
- ("vetur.format.defaultFormatter.scss" lsp-vetur-format-default-formatter-scss)
- ("vetur.format.defaultFormatter.postcss" lsp-vetur-format-default-formatter-postcss)
- ("vetur.format.defaultFormatter.css" lsp-vetur-format-default-formatter-css)
- ("vetur.format.defaultFormatter.html" lsp-vetur-format-default-formatter-html)
- ("vetur.format.options.useTabs" lsp-vetur-format-options-use-tabs t)
- ("vetur.format.options.tabSize" lsp-vetur-format-options-tab-size)
- ("vetur.format.enable" lsp-vetur-format-enable t)
- ("vetur.validation.script" lsp-vetur-validation-script t)
- ("vetur.validation.style" lsp-vetur-validation-style t)
- ("vetur.validation.template" lsp-vetur-validation-template t)
- ("vetur.languageFeatures.codeActions" lsp-vetur-language-features-code-actions t)
- ("vetur.grammar.customBlocks" lsp-vetur-grammar-custom-blocks)
- ("vetur.completion.tagCasing" lsp-vetur-completion-tag-casing)
- ("vetur.completion.useScaffoldSnippets" lsp-vetur-completion-use-scaffold-snippets t)
- ("vetur.completion.autoImport" lsp-vetur-completion-auto-import t)
- ("vetur.useWorkspaceDependencies" lsp-vetur-use-workspace-dependencies t)
- ("vetur.dev.vlsPath" lsp-vetur-dev-vls-path)
- ("vetur.dev.vlsPort" lsp-vetur-dev-vls-port)
- ("vetur.dev.logLevel" lsp-vetur-dev-log-level)
- ("vetur.experimental.templateInterpolationService" lsp-vetur-experimental-template-interpolation-service t)
- ("emmet.showExpandedAbbreviation" lsp-vetur-emmet)))
-
-(define-obsolete-variable-alias
- 'lsp-vetur-server
- 'lsp-vetur-server-command
- "lsp-mode 6.1")
-
-(defcustom lsp-vetur-global-snippets-dir (expand-file-name (locate-user-emacs-file ".snippets/vetur"))
- "Path to snippets dir."
- :type 'file
- :risky t
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-vetur-server-command '("vls")
- "Command to start vetur."
- :type '(repeat string)
- :risky t
- :package-version '(lsp-mode . "6.1"))
-
-(lsp-dependency 'vetur-language-server
- '(:system "vls")
- '(:npm :package "vls" :path "vls"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(or (executable-find (cl-first lsp-vetur-server-command))
- (lsp-package-path 'vetur-language-server))
- ,@(cl-rest lsp-vetur-server-command))))
- :activation-fn (lambda (filename _mode)
- (string= (file-name-extension filename) "vue"))
- :priority -1
- :multi-root t
- :ignore-messages '("readFile .*? requested by Vue but content not available")
- :server-id 'vls
- :initialization-options (lambda () (ht-merge (lsp-configuration-section "vetur")
- (lsp-configuration-section "html")
- (lsp-configuration-section "javascript")
- (lsp-configuration-section "typescript")
- (lsp-configuration-section "emmet")
- (ht ("globalSnippetDir" lsp-vetur-global-snippets-dir))))
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (ht-merge (lsp-configuration-section "vetur")
- (lsp-configuration-section "html")
- (lsp-configuration-section "javascript")
- (lsp-configuration-section "emmet")
- (lsp-configuration-section "typescript")))))
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'vetur-language-server
- callback error-callback))))
-
-(lsp-consistency-check lsp-vetur)
-
-(provide 'lsp-vetur)
-;;; lsp-vetur.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vhdl.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vhdl.el
deleted file mode 100644
index aa55e0e..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vhdl.el
+++ /dev/null
@@ -1,121 +0,0 @@
-;;; lsp-vhdl.el --- VHDL Client settings -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Christian Birk Sørensen
-
-;; Author: Christian Birk Sørensen <chrbirks+emacs@gmail.com>
-;; Created: 6 October 2019
-;; Keywords: languages, lsp, vhdl
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP support for VHDL using using an external language server. Currently
-;; the supported servers are:
-;;
-;; VHDL-tool. See http://www.vhdltool.com/configuration for setting up the
-;; project file.
-;;
-;; HDL Checker. See https://github.com/suoto/hdl_checker/wiki/setting-up-a-project
-;; for setting up the project file.
-;;
-;; VHDL LS. See https://github.com/kraigher/rust_hdl#configuration for setting
-;; up the project file.
-;;
-;; GHDL LS. See https://github.com/ghdl/ghdl-language-server for setting up the
-;; project file.
-;;
-;; Set the symbol lsp-vhdl-server to select the language server and set
-;; lsp-vhdl-server-path if the binary is not in the user PATH.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defvar vhdl-tool-bin-name "vhdl-tool"
- "Name of the VHDL Tool binary.")
-
-(defvar hdl-checker-bin-name "hdl_checker"
- "Name of HDL Checker binary.")
-
-(defvar vhdl-ls-bin-name "vhdl_ls"
- "Name of the VHDL LS binary.")
-
-(defvar ghdl-ls-bin-name "ghdl-ls"
- "Name of the GHDL LS binary.")
-
-(defgroup lsp-vhdl nil
- "LSP support for VHDL. Set lsp-vhdl-server to select server. The default is to use VHDL-tool."
- :group 'lsp-mode)
-
-(defcustom lsp-vhdl-server 'vhdl-tool
- "Select which server to use:
-VHDL-tool: A syntax checking, type checking and linting tool (http://vhdltool.com).
-HDL Checker: A wrapper for third party tools such as GHDL, ModelSim, Vivado Simulator (https://github.com/suoto/hdl_checker).
-VHDL LS: A complete VHDL language server protocol implementation with diagnostics, navigate to symbol, find all references etc. (https://github.com/kraigher/rust_hdl)."
- :type '(choice (const :tag "VHDL-tool" vhdl-tool)
- (const :tag "HDL Checker" hdl-checker)
- (const :tag "VHDL LS" vhdl-ls)
- (const :tag "GHDL LS" ghdl-ls))
- :group 'lsp-vhdl)
-
-(defcustom lsp-vhdl-server-path nil
- "Path to binary server file."
- :group 'lsp-vhdl
- :risky t
- :type 'file)
-
-(defvar lsp-vhdl--params nil)
-
-(defun lsp-vhdl--create-connection ()
- "Returns lsp-stdio-connection based on the selected server"
- (lsp-vhdl--set-server-path)
- (lsp-vhdl--set-server-args)
- (lsp-stdio-connection
- (lambda () (cons (plist-get lsp-vhdl--params 'server-path) (plist-get lsp-vhdl--params 'server-args)))
- (lambda () (executable-find (plist-get lsp-vhdl--params 'server-path)))))
-
-(defun lsp-vhdl--set-server-path()
- "Set path to server binary based on selection in lsp-vhdl-server."
- (cond ((eq lsp-vhdl-server 'hdl-checker) (if (eq lsp-vhdl-server-path nil)
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path hdl-checker-bin-name))
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path lsp-vhdl-server-path))))
- ((eq lsp-vhdl-server 'vhdl-tool) (if (eq lsp-vhdl-server-path nil)
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path vhdl-tool-bin-name))
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path lsp-vhdl-server-path))))
- ((eq lsp-vhdl-server 'vhdl-ls) (if (eq lsp-vhdl-server-path nil)
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path vhdl-ls-bin-name))
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path lsp-vhdl-server-path))))
- ((eq lsp-vhdl-server 'ghdl-ls) (if (eq lsp-vhdl-server-path nil)
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path ghdl-ls-bin-name))
- (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-path lsp-vhdl-server-path))))))
-
-(defun lsp-vhdl--set-server-args()
- "Set server arguments based on server selection."
- (cond ((eq lsp-vhdl-server 'hdl-checker) (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-args '("--lsp"))))
- ((eq lsp-vhdl-server 'vhdl-tool) (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-args '("lsp"))))
- ((eq lsp-vhdl-server 'vhdl-ls) (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-args '())))
- ((eq lsp-vhdl-server 'ghdl-ls) (setq lsp-vhdl--params (plist-put lsp-vhdl--params 'server-args '())))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-vhdl--create-connection)
- :major-modes '(vhdl-mode)
- :language-id "VHDL"
- :priority -1
- :server-id 'lsp-vhdl))
-
-(lsp-consistency-check lsp-vhdl)
-
-(provide 'lsp-vhdl)
-;;; lsp-vhdl.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vimscript.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vimscript.el
deleted file mode 100644
index 9f1fec2..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-vimscript.el
+++ /dev/null
@@ -1,75 +0,0 @@
-;;; lsp-vimscript.el --- description -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 emacs-lsp maintainers
-
-;; Author: emacs-lsp maintainers
-;; Keywords: lsp, vim, vimscript
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; LSP Clients for the VimScript Programming Language.
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-vim nil
- "LSP support for viml using vim-language-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/iamcco/vim-language-server"))
-
-(defcustom lsp-clients-vim-executable '("vim-language-server" "--stdio")
- "Command to start the vim language server."
- :group 'lsp-vim
- :risky t
- :type 'file)
-
-(defcustom lsp-clients-vim-initialization-options '((iskeyword . "vim iskeyword option")
- (vimruntime . "/usr/bin/vim")
- (runtimepath . "/usr/bin/vim")
- (diagnostic . ((enable . t)))
- (indexes . ((runtimepath . t)
- (gap . 100)
- (count . 3)))
- (suggest . ((fromVimruntime . t)
- (fromRuntimepath . :json-false))))
- "Initialization options for vim language server."
- :group 'lsp-vim
- :type 'alist)
-
-(lsp-dependency 'vim-language-server
- '(:system "vim-language-server")
- '(:npm :package "vim-language-server"
- :path "vim-language-server"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(or (executable-find (cl-first lsp-clients-vim-executable))
- (lsp-package-path 'vim-language-server))
- ,@(cl-rest lsp-clients-vim-executable))))
- :major-modes '(vimrc-mode)
- :priority -1
- :server-id 'vimls
- :initialization-options (lambda () lsp-clients-vim-initialization-options)
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'vim-language-server
- callback error-callback))))
-
-(lsp-consistency-check lsp-vimscript)
-
-(provide 'lsp-vimscript)
-;;; lsp-vimscript.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-xml.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-xml.el
deleted file mode 100644
index 439f02f..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-xml.el
+++ /dev/null
@@ -1,245 +0,0 @@
-;;; lsp-xml.el --- LSP XML server integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Ivan Yonchovski
-
-;; Author: Ivan Yonchovski <yyoncho@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-xml nil
- "Settings for rls."
- :group 'tools
- :tag "Language Server"
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-trace-server "off"
- "Traces the communication between VS Code and the XML language server."
- :type '(choice
- (const "off")
- (const "messages")
- (const "verbose"))
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-catalogs nil
- "Array of XML Catalogs"
- :type '(repeat string)
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-logs-client t
- "Should the server log to client output"
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-split-attributes nil
- "Split multiple attributes each onto a new line"
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-join-cdata-lines nil
- "Join lines in a CDATA tag's content"
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-join-comment-lines nil
- "Join comment content on format"
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-space-before-empty-close-tag t
- "Insert space before end of self closing tag.
-Example: <tag/> -> <tag />"
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-join-content-lines nil
- "Normalize the whitespace of content inside an element.
-Newlines and excess whitespace are removed."
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-preserve-empty-content nil
- "Preserve empty content/whitespace in a tag."
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-enabled t
- "Enable/disable ability to format document"
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-format-quotations "doubleQuotes"
- "Which type of quotes to use for attribute values when
- formatting."
- :type '(choice
- (const "doubleQuotes")
- (const "singleQuotes"))
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-file-associations nil
- "Allows XML schemas to be associated to file name patterns.
- Example: [{ \"systemId\":\"path/to/file.xsd\",\"pattern\":
- \"file1.xml\" },{ \"systemId\":
- \"http://www.w3.org/2001/XMLSchema.xsd\",\"pattern\":
- \"**/*.xsd\" }]"
- :type '(repeat string)
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-completion-auto-close-tags t
- "Enable/disable autoclosing of XML tags. IMPORTANT: Turn off
- editor.autoClosingTags for this to work"
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-server-vmargs ["-noverify" "-Xmx64M" "-XX:+UseG1GC"
- "-XX:+UseStringDeduplication"]
- "Specifies extra VM arguments used to launch the XML Language
- Server. Eg. use `-noverify -Xmx1G -XX:+UseG1GC
- -XX:+UseStringDeduplication` to bypass class verification,
- increase the heap size to 1GB and enable String deduplication
- with the G1 Garbage collector"
- :type 'lsp-string-vector
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-server-work-dir (expand-file-name ".lsp4xml" "~")
- "Set a custom folder path for cached XML Schemas. An absolute
- path is expected, although the ~ prefix (for the user home
- directory) is supported."
- :type 'string
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-validation-no-grammar "hint"
- "The message severity when a document has no associated
- grammar."
- :type '(choice (:tag "ignore" "hint" "info" "warning" "error"))
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-validation-enabled t
- "Enable/disable all validation."
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-validation-resolve-external-entities nil
- "Enable/disable resolution (downloading) of external entities from the internet."
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "7.1"))
-
-(defcustom lsp-xml-validation-schema t
- "Enable/disable schema based validation. Ignored if
- \"xml.validation.enabled\": false."
- :type 'boolean
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(lsp-register-custom-settings '
- (("xml.validation.schema" lsp-xml-validation-schema t)
- ("xml.validation.resolveExternalEntities" lsp-xml-validation-resolve-external-entities)
- ("xml.validation.enabled" lsp-xml-validation-enabled t)
- ("xml.validation.noGrammar" lsp-xml-validation-no-grammar)
- ("xml.server.workDir" lsp-xml-server-work-dir)
- ("xml.server.vmargs" lsp-xml-server-vmargs)
- ("xml.completion.autoCloseTags" lsp-xml-completion-auto-close-tags t)
- ("xml.fileAssociations" lsp-xml-file-associations)
- ("xml.format.quotations" lsp-xml-format-quotations)
- ("xml.format.enabled" lsp-xml-format-enabled t)
- ("xml.format.preserveEmptyContent" lsp-xml-format-preserve-empty-content t)
- ("xml.format.joinContentLines" lsp-xml-format-join-content-lines t)
- ("xml.format.spaceBeforeEmptyCloseTag" lsp-xml-format-space-before-empty-close-tag t)
- ("xml.format.joinCommentLines" lsp-xml-format-join-comment-lines t)
- ("xml.format.joinCDATALines" lsp-xml-format-join-cdata-lines t)
- ("xml.format.splitAttributes" lsp-xml-format-split-attributes t)
- ("xml.logs.client" lsp-xml-logs-client t)
- ("xml.catalogs" lsp-xml-catalogs)
- ("xml.trace.server" lsp-xml-trace-server)))
-
-(defconst lsp-xml-jar-version "0.13.1")
-
-(defconst lsp-xml-jar-name (format "org.eclipse.lemminx-%s-uber.jar" lsp-xml-jar-version))
-
-(defcustom lsp-xml-jar-file (f-join lsp-server-install-dir "xmlls" lsp-xml-jar-name)
- "Xml server jar command."
- :type 'string
- :group 'lsp-xml
- :type 'file
- :package-version '(lsp-mode . "6.1"))
-
-(defcustom lsp-xml-jar-download-url
- (format
- "https://repo.eclipse.org/content/repositories/lemminx-releases/org/eclipse/lemminx/org.eclipse.lemminx/%s/%s"
- lsp-xml-jar-version
- lsp-xml-jar-name)
- "Automatic download url for lsp-xml."
- :type 'string
- :group 'lsp-xml
- :package-version '(lsp-mode . "7.1"))
-
-(lsp-dependency
- 'xmlls
- '(:system lsp-xml-jar-file)
- `(:download :url lsp-xml-jar-download-url
- :store-path lsp-xml-jar-file))
-
-(defcustom lsp-xml-server-command `("java" "-jar" ,lsp-xml-jar-file)
- "Xml server command."
- :type '(repeat string)
- :group 'lsp-xml
- :package-version '(lsp-mode . "6.1"))
-
-(defun lsp-xml--create-connection ()
- (lsp-stdio-connection
- (lambda () lsp-xml-server-command)
- (lambda () (f-exists? lsp-xml-jar-file))))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-xml--create-connection)
- :activation-fn (lsp-activate-on "xml")
- :priority 0
- :server-id 'xmlls
- :multi-root t
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration (lsp-configuration-section "xml"))))
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'xmlls callback error-callback))))
-
-(lsp-consistency-check lsp-xml)
-
-(provide 'lsp-xml)
-;;; lsp-xml.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-yaml.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-yaml.el
deleted file mode 100644
index bc7795e..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-yaml.el
+++ /dev/null
@@ -1,242 +0,0 @@
-;;; lsp-yaml.el --- LSP YAML server integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Aya Igarashi
-
-;; Author: Aya Igarashi <ladiclexxx@gmail.com>
-;; Keywords:
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;;
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'dash)
-
-(defgroup lsp-yaml nil
- "LSP support for YAML, using yaml-language-server."
- :group 'lsp-mode
- :link '(url-link "https://github.com/redhat-developer/yaml-language-server")
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-format-enable t
- "Enable/disable default YAML formatter."
- :type 'boolean
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-single-quote nil
- "Use single quote instead of double quotes."
- :type 'boolean
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-bracket-spacing t
- "Print spaces between brackets in objects."
- :type 'boolean
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-prose-wrap "preserve"
- "Options for prose-wrap.
- Always: wrap prose if it exceeds the print width.
- Never: never wrap the prose.
- Preserve: wrap prose as-is."
- :type '(choice
- (const "always")
- (const "never")
- (const "preserve"))
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-print-width 80
- "Specify the line length that the printer will wrap on."
- :type 'number
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-validate t
- "Enable/disable validation feature."
- :type 'boolean
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-hover t
- "Enable/disable hover feature."
- :type 'boolean
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-completion t
- "Enable/disable completion feature."
- :type 'boolean
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-schemas '()
- "Associate schemas to YAML files in a glob pattern."
- :type '(alist :key-type (symbol :tag "schema") :value-type (lsp-string-vector :tag "files (glob)"))
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-schema-store-enable t
- "Enable/disable JSON Schema store. When set to true, available YAML
- schemas will be automatically pulled from the store."
- :type 'boolean
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-custom-tags nil
- "Custom tags for the parser to use."
- :type '(lsp-repeatable-vector string)
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(defcustom lsp-yaml-schema-store-uri "https://www.schemastore.org/api/json/catalog.json"
- "URL of schema store catalog to use."
- :type 'string
- :group 'lsp-yaml)
-
-(defcustom lsp-yaml-schema-store-local-db (expand-file-name
- (locate-user-emacs-file
- (f-join ".cache" "lsp" "lsp-yaml-schemas.json")))
- "Cached databse of schema store."
- :type 'file
- :group 'lsp-yaml)
-
-(defcustom lsp-yaml-max-items-computed 5000
- "The maximum number of outline symbols and folding regions computed.
-Limited for performance reasons."
- :type 'number
- :group 'lsp-yaml
- :package-version '(lsp-mode . "7.1"))
-
-
-(defvar lsp-yaml--schema-store-schemas-alist nil
- "A list of schemas fetched from schema stores.")
-
-(lsp-register-custom-settings
- '(("yaml.format.enable" lsp-yaml-format-enable t)
- ("yaml.format.singleQuote" lsp-yaml-single-quote t)
- ("yaml.format.bracketSpacing" lsp-yaml-bracket-spacing)
- ("yaml.format.proseWrap" lsp-yaml-prose-wrap)
- ("yaml.format.printWidth" lsp-yaml-print-width)
- ("yaml.validate" lsp-yaml-validate t)
- ("yaml.hover" lsp-yaml-hover t)
- ("yaml.completion" lsp-yaml-completion t)
- ("yaml.schemas" lsp-yaml-schemas)
- ("yaml.schemaStore.enable" lsp-yaml-schema-store-enable t)
- ("yaml.schemaStore.url" lsp-yaml-schema-store-uri)
- ("yaml.customTags" lsp-yaml-custom-tags)
- ("yaml.maxItemsComputed" lsp-yaml-max-items-computed)))
-
-(defcustom lsp-yaml-server-command '("yaml-language-server" "--stdio")
- "Command to start yaml-languageserver."
- :type '(repeat string)
- :group 'lsp-yaml
- :package-version '(lsp-mode . "6.2"))
-
-(lsp-dependency 'yaml-language-server
- '(:system "yaml-language-server")
- '(:npm :package "yaml-language-server"
- :path "yaml-language-server"))
-
-(lsp-register-client
- (make-lsp-client :new-connection (lsp-stdio-connection
- (lambda ()
- `(,(or (executable-find (cl-first lsp-yaml-server-command))
- (lsp-package-path 'yaml-language-server))
- ,@(cl-rest lsp-yaml-server-command))))
- :major-modes '(yaml-mode k8s-mode)
- :priority 0
- :server-id 'yamlls
- :initialized-fn (lambda (workspace)
- (with-lsp-workspace workspace
- (lsp--set-configuration
- (lsp-configuration-section "yaml"))))
- :download-server-fn (lambda (_client callback error-callback _update?)
- (lsp-package-ensure 'yaml-language-server
- callback error-callback))))
-
-(defconst lsp-yaml--built-in-kubernetes-schema
- '((name . "Kubernetes")
- (description . "Built-in kubernetes manifest schema definition")
- (url . "kubernetes")
- (fileMatch . ["*-k8s.yaml" "*-k8s.yml"])))
-
-(defun lsp-yaml-download-schema-store-db (&optional force-downloading)
- "Download the remote schema store at `lsp-yaml-schema-store-uri' into local cache.
-Set FORCE-DOWNLOADING to non-nil to force re-download the database."
- (interactive "P")
- (when (or force-downloading (not (file-exists-p lsp-yaml-schema-store-local-db)))
- (unless (file-directory-p (file-name-directory lsp-yaml-schema-store-local-db))
- (mkdir (file-name-directory lsp-yaml-schema-store-local-db)))
- (url-copy-file lsp-yaml-schema-store-uri lsp-yaml-schema-store-local-db force-downloading)))
-
-(defun lsp-yaml--get-supported-schemas ()
- "Get out the list of supported schemas."
- (when (and lsp-yaml-schema-store-enable
- (not lsp-yaml--schema-store-schemas-alist))
- (lsp-yaml-download-schema-store-db)
- (setq lsp-yaml--schema-store-schemas-alist
- (alist-get 'schemas (json-read-file lsp-yaml-schema-store-local-db))))
- (seq-concatenate 'list (list lsp-yaml--built-in-kubernetes-schema) lsp-yaml--schema-store-schemas-alist))
-
-(defun lsp-yaml-set-buffer-schema (uri-string)
- "Set yaml schema for the current buffer to URI-STRING."
- (interactive "MURI: ")
- (let* ((uri (intern uri-string))
- (workspace-path (file-relative-name
- (lsp--uri-to-path (lsp--buffer-uri))
- (lsp-workspace-root (lsp--buffer-uri))))
- (glob (concat "/" workspace-path))
- (current-config (assoc uri lsp-yaml-schemas))
- (current-patterns (and current-config (cdr current-config))))
- (if current-config
- (or (member glob (append current-patterns nil))
- (setq lsp-yaml-schemas
- (cl-acons uri
- (vconcat (vector glob) current-patterns)
- (assq-delete-all uri
- (mapcar (lambda (x) (lsp-yaml--remove-glob x glob))
- lsp-yaml-schemas)))))
- (setq lsp-yaml-schemas
- (cl-acons uri (vector glob) (mapcar (lambda (x) (lsp-yaml--remove-glob x glob))
- lsp-yaml-schemas))))
- (lsp--set-configuration (lsp-configuration-section "yaml"))))
-
-(defun lsp-yaml-select-buffer-schema ()
- "Select schema for the current buffer based on the list of supported schemas."
- (interactive)
- (let* ((schema (lsp--completing-read "Select buffer schema: "
- (lsp-yaml--get-supported-schemas)
- (lambda (schema)
- (format "%s: %s" (alist-get 'name schema)(alist-get 'description schema)))
- nil t))
- (uri (alist-get 'url schema)))
- (lsp-yaml-set-buffer-schema uri)))
-
-(defun lsp-yaml--remove-glob (mapping glob)
- (let ((patterns (cdr mapping)))
- (cons (car mapping)
- (vconcat (-filter (lambda (p) (not (equal p glob)))
- (append patterns nil)) nil))))
-
-(lsp-consistency-check lsp-yaml)
-
-(provide 'lsp-yaml)
-;;; lsp-yaml.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-zig.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp-zig.el
deleted file mode 100644
index 0d19acd..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp-zig.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;;; lsp-zig.el --- lsp-mode Zig integration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2021 Riccardo Binetti
-
-;; Author: Riccardo Binetti <rbino@gmx.com>
-;; Keywords: languages,tools
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; client for zls, the Zig language server
-
-;;; Code:
-
-(require 'lsp-mode)
-
-(defgroup lsp-zig nil
- "LSP support for Zig via zls."
- :group 'lsp-mode
- :link '(url-link "https://github.com/zigtools/zls"))
-
-(defcustom lsp-zig-zls-executable "zls"
- "The zls executable to use.
-Leave as just the executable name to use the default behavior of
-finding the executable with variable `exec-path'."
- :group 'lsp-zig
- :type 'string)
-
-(lsp-register-client
- (make-lsp-client
- :new-connection (lsp-stdio-connection (lambda () lsp-zig-zls-executable))
- :activation-fn (lsp-activate-on "zig")
- :server-id 'zls))
-
-(lsp-consistency-check lsp-zig)
-
-(provide 'lsp-zig)
-;;; lsp-zig.el ends here
diff --git a/emacs.d/elpa/lsp-mode-20210716.2233/lsp.el b/emacs.d/elpa/lsp-mode-20210716.2233/lsp.el
deleted file mode 100644
index e4f4b5d..0000000
--- a/emacs.d/elpa/lsp-mode-20210716.2233/lsp.el
+++ /dev/null
@@ -1,8 +0,0 @@
-;; The code was moved into lsp-mode.el. This file is kept only for backward compatibility.
-(require 'lsp-mode)
-
-;; (warn "Replace (require 'lsp) with (require 'lsp-mode)")
-
-(provide 'lsp)
-
-;;; lsp.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-autoloads.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-autoloads.el
deleted file mode 100644
index bf3c8cc..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-autoloads.el
+++ /dev/null
@@ -1,80 +0,0 @@
-;;; lsp-ui-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "lsp-ui" "lsp-ui.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ui.el
-
-(autoload 'lsp-ui-mode "lsp-ui" "\
-Toggle language server UI mode on or off.
-‘lsp-ui-mode’ is a minor mode that contains a series of useful UI
-integrations for ‘lsp-mode’. With a prefix argument ARG, enable
-language server UI mode if ARG is positive, and disable it
-otherwise. If called from Lisp, enable the mode if ARG is
-omitted or nil, and toggle it if ARG is ‘toggle’.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ui" '("lsp-ui-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ui-doc" "lsp-ui-doc.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ui-doc.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ui-doc" '("lsp-ui-doc-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ui-flycheck" "lsp-ui-flycheck.el" (0 0
-;;;;;; 0 0))
-;;; Generated autoloads from lsp-ui-flycheck.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ui-flycheck" '("lsp-ui-flycheck-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ui-imenu" "lsp-ui-imenu.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ui-imenu.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ui-imenu" '("lsp-ui-imenu")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ui-peek" "lsp-ui-peek.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ui-peek.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ui-peek" '("lsp-")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ui-sideline" "lsp-ui-sideline.el" (0 0
-;;;;;; 0 0))
-;;; Generated autoloads from lsp-ui-sideline.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ui-sideline" '("lsp-ui-sideline")))
-
-;;;***
-
-;;;### (autoloads nil "lsp-ui-util" "lsp-ui-util.el" (0 0 0 0))
-;;; Generated autoloads from lsp-ui-util.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lsp-ui-util" '("lsp-ui-util-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("lsp-ui-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; lsp-ui-autoloads.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.el
deleted file mode 100644
index 8ba7ce7..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.el
+++ /dev/null
@@ -1,1195 +0,0 @@
-;;; lsp-ui-doc.el --- Lsp-Ui-Doc -*- lexical-binding: t -*-
-
-;; Copyright (C) 2017 Sebastien Chapuis
-
-;; Author: Sebastien Chapuis <sebastien@chapu.is>
-;; URL: https://github.com/emacs-lsp/lsp-ui
-;; Keywords: languagues, tools
-;; Version: 6.2
-
-;;; License
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-;;
-;; Show documentation of the symbol at point in a child frame
-
-;;; Code:
-
-(require 'lsp-ui-util)
-
-(require 'lsp-protocol)
-(require 'lsp-mode)
-(require 'dash)
-(require 'goto-addr)
-(require 'markdown-mode)
-
-(require 'cl-lib)
-(require 'face-remap)
-(require 'subr-x)
-
-(when (featurep 'xwidget-internal)
- (require 'xwidget))
-
-(declare-function make-xwidget "ext:xwidget" (type title width height arguments &optional buffer))
-(declare-function set-xwidget-query-on-exit-flag "ext:xwidget")
-(declare-function xwidget-webkit-mode "ext:xwidget")
-(declare-function xwidget-webkit-goto-uri "ext:xwidget" (xwidget uri))
-(declare-function xwidget-at "ext:xwidget" (pos))
-(declare-function xwidget-webkit-execute-script "ext:xwidget" (xwidget script &optional callback))
-(declare-function xwidget-webkit-execute-script-rv "ext:xwidget" (xwidget script &optional default))
-(declare-function xwidget-resize "ext:xwidget" (xwidget new-width new-height))
-
-(defgroup lsp-ui-doc nil
- "Display informations of the current line."
- :group 'tools
- :group 'convenience
- :group 'lsp-ui
- :link '(custom-manual "(lsp-ui-doc) Top")
- :link '(info-link "(lsp-ui-doc) Customizing"))
-
-(defcustom lsp-ui-doc-enable t
- "Whether or not to enable lsp-ui-doc."
- :type 'boolean
- :group 'lsp-ui)
-
-(defcustom lsp-ui-doc-show-with-mouse t
- "Move the mouse pointer over a symbol to show its documentation."
- :type 'boolean
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-show-with-cursor t
- "Move the cursor over a symbol to show its documentation."
- :type 'boolean
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-header nil
- "Whether or not to enable the header which display the symbol string."
- :type 'boolean
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-include-signature nil
- "Whether or not to include the object signature/type in the frame."
- :type 'boolean
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-position 'top
- "Where to display the doc when moving the point cursor.
-This affect the position of the documentation when `lsp-ui-doc-show-with-cursor'
-is non-nil."
- :type '(choice (const :tag "Top" top)
- (const :tag "Bottom" bottom)
- (const :tag "At point" at-point))
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-alignment 'frame
- "How to align the doc.
-This only takes effect when `lsp-ui-doc-position' is 'top or 'bottom."
- :type '(choice (const :tag "Frame" frame)
- (const :tag "Window" window))
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-border "white"
- "Border color of the frame."
- :type 'color
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-max-width 150
- "Maximum number of columns of the frame."
- :type 'integer
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-max-height 13
- "Maximum number of lines in the frame."
- :type 'integer
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-use-childframe t
- "Whether to display documentation in a child-frame or the current frame.
-Child frames requires GNU/Emacs version >= 26 and graphical frames."
- :type 'boolean
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-use-webkit nil
- "Whether to display documentation in a WebKit widget in a child-frame.
-This requires GNU/Emacs version >= 26 and built with the `--with-xwidgets`
-option."
- :type 'boolean
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-delay 0.2
- "Number of seconds before showing the doc."
- :type 'number
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-winum-ignore t
- "Whether to ignore lsp-ui-doc buffers in winum."
- :type 'boolean
- :group 'lsp-ui-doc)
-
-(defcustom lsp-ui-doc-text-scale-level 0
- "Text scale amount for doc buffer."
- :type 'integer
- :group 'lsp-ui-doc)
-
-(defface lsp-ui-doc-background
- '((((background light)) :background "#b3b3b3")
- (t :background "#272A36"))
- "Background color of the documentation.
-Only the `background' is used in this face."
- :group 'lsp-ui-doc)
-
-(defface lsp-ui-doc-header
- '((t :foreground "black"
- :background "deep sky blue"))
- "Face used on the header."
- :group 'lsp-ui-doc)
-
-(defface lsp-ui-doc-highlight-hover
- '((t :inherit region))
- "Face used to highlight the hover symbol/region when using mouse."
- :group 'lsp-ui-doc)
-
-(defface lsp-ui-doc-url
- '((t :inherit link))
- "Face used on links."
- :group 'lsp-ui-doc)
-
-(defvar lsp-ui-doc-frame-parameters
- '((left . -1)
- (no-focus-on-map . t)
- (min-width . 0)
- (width . 0)
- (min-height . 0)
- (height . 0)
- (internal-border-width . 1)
- (vertical-scroll-bars . nil)
- (horizontal-scroll-bars . nil)
- (right-fringe . 0)
- (menu-bar-lines . 0)
- (tool-bar-lines . 0)
- (line-spacing . 0)
- (unsplittable . t)
- (undecorated . t)
- (top . -1)
- (visibility . nil)
- (mouse-wheel-frame . nil)
- (no-other-frame . t)
- (inhibit-double-buffering . t)
- (drag-internal-border . t)
- (no-special-glyphs . t)
- (desktop-dont-save . t))
- "Frame parameters used to create the frame.")
-
-(defvar lsp-ui-doc-render-function nil
- "Function called to format the documentation.
-The function takes a string as parameter and should return a string.
-If this variable is nil (the default), the documentation will be rendered
-as markdown.")
-
-(defvar lsp-ui-doc-frame-hook nil
- "Hooks run on child-frame creation.
-The functions receive 2 parameters: the frame and its window.")
-
-(defvar lsp-ui-doc-webkit-client-path
- (concat "file://"
- (file-name-directory (or load-file-name buffer-file-name))
- "lsp-ui-doc.html")
- "Path to the page loaded when a WebKit widget is created.")
-
-;; Avoid warning with emacs < 26
-(declare-function display-buffer-in-child-frame "window.el")
-
-(defvar-local lsp-ui-doc--parent-vars nil
- "Variables from the parents frame that we want to access in the child.
-Because some variables are buffer local.")
-
-(defvar-local lsp-ui-doc--inline-ov nil
- "Overlay used to display the documentation in the buffer.")
-
-(defvar-local lsp-ui-doc--highlight-ov nil
- "Overlay used to highlight the hover symbol.")
-
-(defvar-local lsp-ui-doc--bounds nil)
-(defvar-local lsp-ui-doc--timer nil)
-(defvar-local lsp-ui-doc--from-mouse nil
- "Non nil when the doc was triggered by a mouse event.")
-(defvar-local lsp-ui-doc--from-mouse-current nil
- "Non nil when the current call is triggered by a mouse event")
-
-(defconst lsp-ui-doc--buffer-prefix " *lsp-ui-doc-")
-
-(defmacro lsp-ui-doc--with-buffer (&rest body)
- "Execute BODY in the lsp-ui-doc buffer."
- (declare (indent 0) (debug t))
- `(let ((parent-vars (list :buffer (current-buffer)
- :window (get-buffer-window)))
- (buffer-list-update-hook nil))
- (with-current-buffer (get-buffer-create (lsp-ui-doc--make-buffer-name))
- (setq lsp-ui-doc--parent-vars parent-vars)
- (prog1 (let ((buffer-read-only nil)
- (inhibit-modification-hooks t)
- (inhibit-point-motion-hooks t)
- (inhibit-redisplay t))
- ,@body)
- (setq buffer-read-only t)
- (let ((text-scale-mode-step 1.1))
- (text-scale-set lsp-ui-doc-text-scale-level))))))
-
-(defmacro lsp-ui-doc--get-parent (var)
- "Return VAR in `lsp-ui-doc--parent-vars'."
- `(plist-get lsp-ui-doc--parent-vars ,var))
-
-(defmacro lsp-ui-doc--set-frame (frame)
- "Set the frame parameter ‘lsp-ui-doc-frame’ to FRAME."
- `(set-frame-parameter nil 'lsp-ui-doc-frame ,frame))
-
-(defun lsp-ui-doc--get-frame (&optional _)
- "Return the child frame."
- (let ((frame (frame-parameter nil 'lsp-ui-doc-frame)))
- (and (frame-live-p frame) frame)))
-
-(defsubst lsp-ui-doc--frame-visible-p ()
- "Return child frame visibility."
- (let ((frame (lsp-ui-doc--get-frame)))
- (and frame (frame-visible-p frame))))
-
-(defun lsp-ui-doc--make-buffer-name ()
- "Construct the buffer name, it should be unique for each frame."
- (concat lsp-ui-doc--buffer-prefix
- (or (frame-parameter nil 'window-id)
- (frame-parameter nil 'name))
- "*"))
-
-;; ‘markdown-fontify-code-block-default-mode’ isn’t yet available in
-;; Markdown 2.3.
-(defvar markdown-fontify-code-block-default-mode)
-
-(defun lsp-ui-doc--inline-wrapped-line (string)
- "Wraps a line of text (STRING) for inline display."
- (cond ((string-empty-p string) "")
- (t string)))
-
-(defun lsp-ui-doc--inline-formatted-string (string)
- "Formats STRING for inline rendering."
- (mapconcat (lambda (line)
- (lsp-ui-doc--inline-wrapped-line (string-trim-right line)))
- (split-string string "[\n\v\f\r]")
- "\n"))
-
-(defun lsp-ui-doc--extract-marked-string (marked-string &optional language)
- "Render the MARKED-STRING with LANGUAGE."
- (string-trim-right
- (let* ((string (if (stringp marked-string)
- marked-string
- (lsp:markup-content-value marked-string)))
- (with-lang (lsp-marked-string? marked-string))
- (language (or (and with-lang
- (or (lsp:marked-string-language marked-string)
- (lsp:markup-content-kind marked-string)))
- language))
- (markdown-hr-display-char nil))
- (cond
- (lsp-ui-doc-use-webkit
- (if (and language (not (string= "text" language)))
- (format "```%s\n%s\n```" language string)
- string))
- ;; For other programming languages
- (language (lsp--render-string (lsp-ui-doc--inline-formatted-string string) language))
- ;; For default element content
- (t (lsp--render-element (lsp-ui-doc--inline-formatted-string string)))))))
-
-(defun lsp-ui-doc--filter-marked-string (list-marked-string)
- "Filter the LIST-MARKED-STRING."
- (let ((groups (--separate (and (lsp-marked-string? it)
- (lsp-get-renderer (lsp:marked-string-language it)))
- (append list-marked-string nil))))
- (if lsp-ui-doc-include-signature
- list-marked-string
- (cadr groups))))
-
-(defun lsp-ui-doc--extract (contents)
- "Extract the documentation from CONTENTS.
-CONTENTS can be differents type of values:
-MarkedString | MarkedString[] | MarkupContent (as defined in the LSP).
-We don't extract the string that `lps-line' is already displaying."
- (cond
- ((vectorp contents) ;; MarkedString[]
- (mapconcat 'lsp-ui-doc--extract-marked-string
- (lsp-ui-doc--filter-marked-string (seq-filter #'identity contents))
- "\n\n"
- ;;(propertize "\n\n" 'face '(:height 0.4))
- ))
- ;; when we get markdown contents, render using emacs gfm-view-mode / markdown-mode
- ((and (lsp-marked-string? contents)
- (lsp:marked-string-language contents))
- (lsp-ui-doc--extract-marked-string (lsp:marked-string-value contents)
- (lsp:marked-string-language contents)))
- ;; The specification for MarkedString also includes raw strings of
- ;; markdown, which is not reflected by `lsp-marked-string?'
- ((stringp contents)
- (lsp-ui-doc--extract-marked-string contents lsp/markup-kind-markdown))
- ((lsp-marked-string? contents) (lsp-ui-doc--extract-marked-string contents))
- ((and (lsp-markup-content? contents)
- (string= (lsp:markup-content-kind contents) lsp/markup-kind-markdown))
- (lsp-ui-doc--extract-marked-string (lsp:markup-content-value contents) lsp/markup-kind-markdown))
- ((and (lsp-markup-content? contents)
- (string= (lsp:markup-content-kind contents) lsp/markup-kind-plain-text))
- (lsp:markup-content-value contents))))
-
-(defun lsp-ui-doc--webkit-run-xwidget ()
- "Launch embedded WebKit instance."
- (lsp-ui-doc--with-buffer
- (let ((inhibit-read-only t))
- (insert " ")
- (goto-char 1)
- (let ((id (make-xwidget 'webkit nil 1 1 nil (buffer-name))))
- (set-xwidget-query-on-exit-flag id nil)
- (put-text-property (point) (+ 1 (point))
- 'display (list 'xwidget ':xwidget id))
- (xwidget-webkit-mode)
- (xwidget-webkit-goto-uri (xwidget-at 1)
- lsp-ui-doc-webkit-client-path)
- (lsp-ui-doc--webkit-set-background)
- (lsp-ui-doc--webkit-set-foreground)))))
-
-(defun lsp-ui-doc--webkit-set-background ()
- "Set background color of the WebKit widget."
- (lsp-ui-doc--webkit-execute-script
- (format "document.body.style.background = '%s';"
- "#fdfdfd"
- ;; (face-attribute 'lsp-ui-doc-background :background)
- )))
-
-(defun lsp-ui-doc--webkit-set-foreground ()
- "Set foreground color of the WebKit widget."
- (lsp-ui-doc--webkit-execute-script
- (format "document.body.style.color = '%s';"
- (face-attribute 'default :foreground))))
-
-(defun lsp-ui-doc--webkit-get-xwidget ()
- "Return Xwidget instance."
- (lsp-ui-doc--with-buffer
- (xwidget-at 1)))
-
-(defun lsp-ui-doc--webkit-execute-script (script &optional fn)
- "Execute SCRIPT in embedded Xwidget and run optional callback FN."
- (-when-let* ((xw (lsp-ui-doc--webkit-get-xwidget)))
- (xwidget-webkit-execute-script xw script fn)))
-
-(defun lsp-ui-doc--webkit-execute-script-rv (script)
- "Execute SCRIPT in embedded Xwidget synchronously."
- (-when-let* ((xw (lsp-ui-doc--webkit-get-xwidget)))
- (xwidget-webkit-execute-script-rv xw script)))
-
-(defun lsp-ui-doc--hide-frame (&optional _win)
- "Hide the frame."
- (setq lsp-ui-doc--bounds nil
- lsp-ui-doc--from-mouse nil)
- (lsp-ui-util-safe-delete-overlay lsp-ui-doc--inline-ov)
- (lsp-ui-util-safe-delete-overlay lsp-ui-doc--highlight-ov)
- (when-let ((frame (lsp-ui-doc--get-frame)))
- (unless lsp-ui-doc-use-webkit
- (lsp-ui-doc--with-buffer (erase-buffer)))
- (when (frame-visible-p frame)
- (make-frame-invisible frame))))
-
-(defun lsp-ui-doc--buffer-width ()
- "Calcul the max width of the buffer."
- (lsp-ui-doc--with-buffer
- (save-excursion
- (let ((max 0))
- (goto-char (point-min))
- (while (not (eobp))
- (let* ((len (- (line-end-position) (line-beginning-position))))
- (when (> len max)
- (setq max len)))
- (forward-line 1))
- max))))
-
-(defun lsp-ui-doc--line-height (&optional line)
- "Return the pos-y of the LINE on screen, in pixel."
- (or
- (nth 2 (or (window-line-height line)
- (and (redisplay t)
- (window-line-height line))))
- 0))
-
-(defun lsp-ui-doc--sideline-pos-y ()
- "Mark as unused function."
- (-> (when (bound-and-true-p lsp-ui-sideline--occupied-lines)
- (-min lsp-ui-sideline--occupied-lines))
- (line-number-at-pos)
- (lsp-ui-doc--line-height)))
-
-(defun lsp-ui-doc--webkit-resize-callback (size)
- "Callback when resizing using webkit depends on the SIZE."
- (let ((offset-width (round (aref size 0)))
- (offset-height (round (aref size 1))))
- (xwidget-resize (lsp-ui-doc--webkit-get-xwidget) offset-width offset-height))
- (lsp-ui-doc--move-frame (lsp-ui-doc--get-frame)))
-
-(defun lsp-ui-doc--resize-buffer ()
- "If the buffer's width is larger than the current frame, resize it."
- (if lsp-ui-doc-use-webkit
- (lsp-ui-doc--webkit-execute-script
- "[document.querySelector('#lsp-ui-webkit').offsetWidth, document.querySelector('#lsp-ui-webkit').offsetHeight];"
- 'lsp-ui-doc--webkit-resize-callback)
-
- (let* ((frame-width (frame-width))
- (fill-column (min lsp-ui-doc-max-width (- frame-width 5))))
- (when (> (lsp-ui-doc--buffer-width) (min lsp-ui-doc-max-width frame-width))
- (lsp-ui-doc--with-buffer
- (fill-region (point-min) (point-max)))))))
-
-(defun lsp-ui-doc--mv-at-point (width height start-x start-y)
- "Return position of FRAME to be where the point is.
-WIDTH is the child frame width.
-HEIGHT is the child frame height.
-START-X is the position x of the current window.
-START-Y is the position y of the current window.
-The algorithm prefers to position FRAME just above the
-symbol at point, to not obstruct the view of the code that follows.
-If there's no space above in the current window, it places
-FRAME just below the symbol at point."
- (-let* (((x . y) (--> (or lsp-ui-doc--bounds (bounds-of-thing-at-point 'symbol))
- (or (posn-x-y (posn-at-point (car it)))
- (if (< (car it) (window-start))
- (cons 0 0)
- (posn-x-y (posn-at-point (1- (window-end))))))))
- (frame-relative-symbol-x (+ start-x x (* (frame-char-width) 2)))
- (frame-relative-symbol-y (+ start-y y))
- (char-height (frame-char-height))
- ;; Make sure the frame is positioned horizontally such that
- ;; it does not go beyond the frame boundaries.
- (frame-x (or (and (<= (frame-outer-width) (+ frame-relative-symbol-x width))
- (- x (- (+ frame-relative-symbol-x width)
- (frame-outer-width))))
- x))
- (frame-y (+ (or (and (<= height frame-relative-symbol-y)
- (- y height))
- (+ y char-height))
- (if (fboundp 'window-tab-line-height) (window-tab-line-height) 0))))
- (cons (+ start-x frame-x) (+ start-y frame-y))))
-
-(defun lsp-ui-doc--size-and-pos-changed (frame left top width height)
- (-let (((prev-left . prev-top) (frame-position frame)))
- (not (and (= left prev-left)
- (= top prev-top)
- (= height (frame-text-height frame))
- (= width (frame-text-width frame))))))
-
-(defun lsp-ui-doc--move-frame (frame)
- "Place our FRAME on screen."
- (-let* (((left top right _bottom) (window-edges nil t nil t))
- (window (frame-root-window frame))
- (char-h (frame-char-height frame))
- (char-w (frame-char-width frame))
- ((width . height) (window-text-pixel-size window nil nil 10000 10000 t))
- (width (+ width (* char-w 1))) ;; margins
- (height (min (- (* lsp-ui-doc-max-height char-h) (/ char-h 2)) height))
- (width (min width (* lsp-ui-doc-max-width char-w)))
- (frame-right (pcase lsp-ui-doc-alignment
- ('frame (frame-pixel-width))
- ('window right)))
- ((left . top) (if (eq lsp-ui-doc-position 'at-point)
- (lsp-ui-doc--mv-at-point width height left top)
- (cons (max (- frame-right width char-w) 10)
- (pcase lsp-ui-doc-position
- ('top (+ top char-w))
- ('bottom (- (lsp-ui-doc--line-height 'mode-line)
- height
- 10))))))
- (frame-resize-pixelwise t)
- (move-frame-functions nil)
- (window-size-change-functions nil)
- (window-state-change-hook nil)
- (window-state-change-functions nil)
- (window-configuration-change-hook nil)
- (inhibit-redisplay t))
- ;; Dirty way to fix unused variable in emacs 26
- (and window-state-change-functions
- window-state-change-hook)
- ;; Make frame invisible before moving/resizing it to avoid flickering:
- ;; We set the position and size in 1 call, modify-frame-parameters, but
- ;; internally emacs makes 2 different calls, which can be visible
- ;; to the user
- (and (frame-visible-p frame)
- (lsp-ui-doc--size-and-pos-changed frame left top width height)
- (make-frame-invisible frame))
- (modify-frame-parameters
- frame
- `((width . (text-pixels . ,width))
- (height . (text-pixels . ,height))
- (user-size . t)
- (left . (+ ,left))
- (top . (+ ,top))
- (user-position . t)
- (lsp-ui-doc--window-origin . ,(selected-window))
- (lsp-ui-doc--buffer-origin . ,(current-buffer))
- (lsp-ui-doc--no-focus . t)
- (right-fringe . 0)
- (left-fringe . 0)))
- ;; Insert hr lines after width is computed
- (lsp-ui-doc--fix-hr-props)
- (unless (frame-visible-p frame)
- (make-frame-visible frame))))
-
-(defun lsp-ui-doc--visit-file (filename)
- "Visit FILENAME in the parent frame."
- (-some->> (find-file-noselect filename)
- (set-window-buffer (lsp-ui-doc--get-parent :window))))
-
-(defun lsp-ui-doc--put-click (start end fn)
- "Add text properties on text to make it clickable.
-The text delimiters bound from START to END.
-FN is the function to call on click."
- (let ((map (make-sparse-keymap)))
- (define-key map [down-mouse-1] fn)
- (put-text-property start end 'keymap map)
- (put-text-property start end 'mouse-face
- (list :inherit 'lsp-ui-doc-url
- :box (list :line-width -1
- :color (face-foreground 'lsp-ui-doc-url))))
- (add-face-text-property start end 'lsp-ui-doc-url)))
-
-(defun lsp-ui-doc--open-markdown-link (&rest _)
- (interactive "P")
- (let ((buffer-list-update-hook nil))
- (-let [(buffer point) (if-let* ((valid (and (listp last-input-event)
- (eq (car last-input-event) 'mouse-2)))
- (event (cadr last-input-event))
- (win (posn-window event))
- (buffer (window-buffer win)))
- `(,buffer ,(posn-point event))
- `(,(current-buffer) ,(point)))]
- (with-current-buffer buffer
- ;; Markdown-mode puts the url in 'help-echo
- (-some--> (get-text-property point 'help-echo)
- (and (string-match-p goto-address-url-regexp it)
- (browse-url it)))))))
-
-(defun lsp-ui-doc--make-clickable-link ()
- "Find paths and urls in the buffer and make them clickable."
- (goto-char (point-min))
- (save-excursion
- (goto-char (point-min))
- (let (case-fold-search)
- (while (re-search-forward goto-address-url-regexp nil t)
- (goto-char (1+ (match-end 0)))
- (lsp-ui-doc--put-click (match-beginning 0) (match-end 0)
- 'browse-url-at-mouse)))))
-
-(defun lsp-ui-doc--buffer-pre-command (&rest _)
- (and (not (eq this-command 'mwheel-scroll))
- (frame-parameter nil 'lsp-ui-doc--no-focus)
- (select-frame (frame-parent) t)))
-
-(defun lsp-ui-doc--fill-document ()
- "Better wrap the document so it fits the doc window."
- (let ((fill-column (- lsp-ui-doc-max-width 5))
- start ; record start for `fill-region'
- first-line) ; first line in paragraph
- (save-excursion
- (goto-char (point-min))
- (setq start (point)
- first-line (thing-at-point 'line))
- (while (re-search-forward "^[ \t]*\n" nil t)
- (setq first-line (thing-at-point 'line))
- (when (< fill-column (length first-line))
- (fill-region start (point)))
- (setq start (point)))
- ;; Fill the last paragraph
- (when (< fill-column (length first-line))
- (fill-region start (point-max))))))
-
-(defun lsp-ui-doc--make-smaller-empty-lines nil
- "Make empty lines half normal lines."
- (progn ; Customize line before header
- (goto-char 1)
- (insert (propertize "\n" 'face '(:height 0.3))))
- (progn ; Customize line after header
- (forward-line 1)
- (insert (propertize " " 'face '(:height 0.1))))
- (while (not (eobp))
- (when (and (eolp) (not (bobp)))
- (save-excursion
- (delete-region (point) (progn (forward-visible-line 1) (point))))
- (when (or (and (not (get-text-property (point) 'markdown-heading))
- (not (get-text-property (max (- (point) 2) 1) 'markdown-heading)))
- (get-text-property (point) 'markdown-hr))
- (insert (propertize " " 'face `(:height 0.2))
- (propertize "\n" 'face '(:height 0.4)))))
- (forward-line))
- (insert (propertize "\n\n" 'face '(:height 0.3))))
-
-(defun lsp-ui-doc--fix-hr-props nil
- ;; We insert the right display prop after window-text-pixel-size
- (lsp-ui-doc--with-buffer
- (let (next)
- (while (setq next (next-single-property-change (or next 1) 'lsp-ui-doc--replace-hr))
- (when (get-text-property next 'lsp-ui-doc--replace-hr)
- (put-text-property next (1+ next) 'display
- '(space :align-to (- right-fringe 1) :height (1)))
- (put-text-property (1+ next) (+ next 2) 'display
- '(space :align-to right-fringe :height (1))))))))
-
-(defun lsp-ui-doc--handle-hr-lines nil
- (let (bolp next before after)
- (goto-char 1)
- (while (setq next (next-single-property-change (or next 1) 'markdown-hr))
- (when (get-text-property next 'markdown-hr)
- (goto-char next)
- (setq bolp (bolp)
- before (char-before))
- (delete-region (point) (save-excursion (forward-visible-line 1) (point)))
- (setq after (char-after (1+ (point))))
- (insert
- (concat
- (and bolp (not (equal before ?\n)) (propertize "\n" 'face '(:height 0.5)))
- (propertize " "
- ;; :align-to is added with lsp-ui-doc--fix-hr-props
- 'display '(space :height (1))
- 'lsp-ui-doc--replace-hr t
- 'face '(:background "dark grey"))
- ;; :align-to is added here too
- (propertize " " 'display '(space :height (1)))
- (and (not (equal after ?\n)) (propertize " \n" 'face '(:height 0.2)))))))))
-
-(defun lsp-ui-doc--render-buffer (string symbol)
- "Set the buffer with STRING and SYMBOL."
- (lsp-ui-doc--with-buffer
- (if lsp-ui-doc-use-webkit
- (progn
- (lsp-ui-doc--webkit-execute-script
- (format "renderMarkdown('%s', '%s');"
- symbol
- (url-hexify-string string))
- 'lsp-ui-doc--webkit-resize-callback))
- (erase-buffer)
- (insert (s-trim string))
- (unless (lsp-ui-doc--inline-p)
- (lsp-ui-doc--fill-document)
- (lsp-ui-doc--make-smaller-empty-lines)
- (lsp-ui-doc--handle-hr-lines))
- (add-text-properties 1 (point) '(line-height 1))
- (lsp-ui-doc--make-clickable-link)
- (add-text-properties 1 (point-max) '(pointer arrow)))
- (lsp-ui-doc-frame-mode 1)
- (setq wrap-prefix '(space :height (1) :width 1)
- line-prefix '(space :height (1) :width 1))
- (setq-local face-remapping-alist `((header-line lsp-ui-doc-header)))
- (setq-local window-min-height 1)
- (setq-local show-trailing-whitespace nil)
- (setq-local window-configuration-change-hook nil)
- (add-hook 'pre-command-hook 'lsp-ui-doc--buffer-pre-command nil t)
- (when (boundp 'window-state-change-functions)
- (setq-local window-state-change-functions nil))
- (when (boundp 'window-state-change-hook)
- (setq-local window-state-change-hook nil))
- (setq-local window-size-change-functions nil)
- (setq header-line-format (when lsp-ui-doc-header (concat " " symbol))
- mode-line-format nil
- cursor-type nil)))
-
-(defun lsp-ui-doc--inline-height ()
- (lsp-ui-doc--with-buffer
- (length (split-string (buffer-string) "\n"))))
-
-(defun lsp-ui-doc--remove-invisibles (string)
- "Remove invisible characters in STRING."
- (let* ((start (text-property-not-all 0 (length string) 'invisible nil string)))
- (while start
- (setq string (concat (substring string 0 start)
- (-some->> (next-single-property-change start 'invisible string)
- (substring string))))
- (setq start (text-property-not-all 0 (length string) 'invisible nil string)))
- string))
-
-(defvar-local lsp-ui-doc--inline-width nil)
-
-(defun lsp-ui-doc--inline-window-width nil
- (- (min (window-text-width) (window-body-width))
- (if (bound-and-true-p display-line-numbers-mode)
- (+ 2 (line-number-display-width))
- 0)
- 1))
-
-(defun lsp-ui-doc--inline-zip (s1 s2)
- (let* ((width (lsp-ui-doc--inline-window-width))
- (max-s1 (- width lsp-ui-doc--inline-width 2)))
- (truncate-string-to-width
- (concat (truncate-string-to-width s1 max-s1 nil ?\s) s2)
- width nil ?\s)))
-
-(defun lsp-ui-doc--inline-padding (string len)
- (let ((string (concat " " string (make-string (- len (string-width string)) ?\s) " ")))
- (add-face-text-property 0 (length string) (list :background (face-background 'lsp-ui-doc-background nil t)) t string)
- string))
-
-(defun lsp-ui-doc--inline-faking-frame (doc-strings)
- (let* ((len-max (-max-by '> (-map 'string-width doc-strings))))
- (setq lsp-ui-doc--inline-width len-max)
- (--map (lsp-ui-doc--inline-padding it len-max) doc-strings)))
-
-(defun lsp-ui-doc--inline-untab (string)
- (replace-regexp-in-string "\t" (make-string tab-width ?\s) string nil t))
-
-(defun lsp-ui-doc--inline-merge (strings)
- (let* ((buffer-strings (-> (lsp-ui-doc--inline-untab strings)
- (lsp-ui-doc--remove-invisibles)
- (split-string "\n")))
- (doc-strings (-> (lsp-ui-doc--with-buffer (buffer-string))
- (lsp-ui-doc--inline-untab)
- (lsp-ui-doc--remove-invisibles)
- (split-string "\n")))
- (merged (--> (lsp-ui-doc--inline-faking-frame doc-strings)
- (-zip-with 'lsp-ui-doc--inline-zip buffer-strings it)
- (string-join it "\n")
- (concat it "\n"))))
- merged))
-
-(defun lsp-ui-doc--inline-pos-at (start lines)
- "Calcul the position at START + forward n LINES."
- (save-excursion (goto-char start) (forward-line lines) (point)))
-
-(defun lsp-ui-doc--inline-pos (height)
- "Return a cons of positions where to place the doc.
-HEIGHT is the documentation number of lines."
- (let* ((w-start (window-start))
- (w-end (lsp-ui-doc--inline-pos-at w-start (window-body-height)))
- (ov-end (lsp-ui-doc--inline-pos-at w-start height)))
- (cond
- ;; Display on top ?
- ((< (lsp-ui-doc--inline-pos-at ov-end 1) (point))
- (cons w-start ov-end))
- ;; Display at the bottom ?
- ((>= (lsp-ui-doc--inline-pos-at w-end (- height))
- (lsp-ui-doc--inline-pos-at (point) 2))
- (cons (lsp-ui-doc--inline-pos-at w-end (- height))
- w-end))
- ;; The doc is too long to display it fixed to the bottom ?
- ;; Then display 2 lines after `point'
- ;; The end of the documentation won't be visible in the window
- (t (cons (lsp-ui-doc--inline-pos-at (point) 2)
- (lsp-ui-doc--inline-pos-at (point) (+ height 2)))))))
-
-(defun lsp-ui-doc--inline ()
- "Display the doc in the buffer."
- (-let* ((height (lsp-ui-doc--inline-height))
- ((start . end) (lsp-ui-doc--inline-pos height))
- (buffer-string (buffer-substring start end))
- (ov (if (overlayp lsp-ui-doc--inline-ov) lsp-ui-doc--inline-ov
- (setq lsp-ui-doc--inline-ov (make-overlay start end)))))
- (move-overlay ov start end)
- (overlay-put ov 'face 'default)
- (overlay-put ov 'display (lsp-ui-doc--inline-merge buffer-string))
- (overlay-put ov 'lsp-ui-doc-inline t)
- (overlay-put ov 'window (selected-window))))
-
-(defun lsp-ui-doc--inline-p ()
- "Return non-nil when the documentation should be display without a child frame."
- (or (not lsp-ui-doc-use-childframe)
- (not (display-graphic-p))
- (not (fboundp 'display-buffer-in-child-frame))))
-
-(defun lsp-ui-doc--highlight-hover nil
- (when lsp-ui-doc--from-mouse-current
- (-let* (((start . end) lsp-ui-doc--bounds)
- (ov (if (overlayp lsp-ui-doc--highlight-ov) lsp-ui-doc--highlight-ov
- (setq lsp-ui-doc--highlight-ov (make-overlay start end)))))
- (move-overlay ov start end)
- (overlay-put ov 'face 'lsp-ui-doc-highlight-hover)
- (overlay-put ov 'window (selected-window)))))
-
-(defun lsp-ui-doc--display (symbol string)
- "Display the documentation."
- (when (and lsp-ui-doc-use-webkit (not (featurep 'xwidget-internal)))
- (setq lsp-ui-doc-use-webkit nil))
- (if (or (null string) (string-empty-p string))
- (lsp-ui-doc--hide-frame)
- (lsp-ui-doc--highlight-hover)
- (lsp-ui-doc--render-buffer string symbol)
- (if (lsp-ui-doc--inline-p)
- (lsp-ui-doc--inline)
- (unless (lsp-ui-doc--get-frame)
- (lsp-ui-doc--set-frame (lsp-ui-doc--make-frame)))
- (unless lsp-ui-doc-use-webkit
- (lsp-ui-doc--resize-buffer)
- (lsp-ui-doc--move-frame (lsp-ui-doc--get-frame))))
- (setq lsp-ui-doc--from-mouse lsp-ui-doc--from-mouse-current)))
-
-(defun lsp-ui-doc--make-frame ()
- "Create the child frame and return it."
- (lsp-ui-doc--delete-frame)
- (let* ((after-make-frame-functions nil)
- (before-make-frame-hook nil)
- (name-buffer (lsp-ui-doc--make-buffer-name))
- (buffer (get-buffer name-buffer))
- (params (append lsp-ui-doc-frame-parameters
- `((name . "")
- (default-minibuffer-frame . ,(selected-frame))
- (minibuffer . ,(minibuffer-window))
- (left-fringe . 0)
- (right-fringe . 0)
- (cursor-type . nil)
- (lsp-ui-doc--no-focus . t)
- (background-color . ,(face-background 'lsp-ui-doc-background nil t)))))
- (window (display-buffer-in-child-frame
- buffer
- `((child-frame-parameters . ,params))))
- (frame (window-frame window)))
- (with-current-buffer buffer
- (lsp-ui-doc-frame-mode 1))
- (set-frame-parameter nil 'lsp-ui-doc-buffer buffer)
- (set-window-dedicated-p window t)
- ;;(redirect-frame-focus frame (frame-parent frame))
- (set-face-background 'internal-border lsp-ui-doc-border frame)
- (when (facep 'child-frame-border)
- (set-face-background 'child-frame-border lsp-ui-doc-border frame))
- (set-face-background 'fringe nil frame)
- (run-hook-with-args 'lsp-ui-doc-frame-hook frame window)
- (when lsp-ui-doc-use-webkit
- (define-key (current-global-map) [xwidget-event]
- (lambda ()
- (interactive)
- (let ((xwidget-event-type (nth 1 last-input-event)))
- ;; (when (eq xwidget-event-type 'load-changed)
- ;; (lsp-ui-doc--move-frame (lsp-ui-doc--get-frame)))
- (when (eq xwidget-event-type 'javascript-callback)
- (let ((proc (nth 3 last-input-event))
- (arg (nth 4 last-input-event)))
- (funcall proc arg))))))
- (lsp-ui-doc--webkit-run-xwidget))
- frame))
-
-(defconst lsp-ui-doc--ignore-commands
- '(lsp-ui-doc-hide
- lsp-ui-doc--handle-mouse-movement
- keyboard-quit
- ignore
- handle-switch-frame
- mwheel-scroll))
-
-(defun lsp-ui-doc--make-request nil
- "Request the documentation to the LS."
- (and (not track-mouse) lsp-ui-doc-show-with-mouse (setq-local track-mouse t))
- (when (and lsp-ui-doc-show-with-cursor
- (not (memq this-command lsp-ui-doc--ignore-commands))
- (not (bound-and-true-p lsp-ui-peek-mode))
- (lsp--capability "hoverProvider"))
- (-if-let (bounds (or (and (symbol-at-point) (bounds-of-thing-at-point 'symbol))
- (and (looking-at "[[:graph:]]") (cons (point) (1+ (point))))))
- (unless (equal lsp-ui-doc--bounds bounds)
- (lsp-ui-doc--hide-frame)
- (lsp-ui-util-safe-kill-timer lsp-ui-doc--timer)
- (setq lsp-ui-doc--timer
- (run-with-idle-timer
- lsp-ui-doc-delay nil
- (let ((buf (current-buffer)))
- (lambda nil
- (when (equal buf (current-buffer))
- (lsp-request-async
- "textDocument/hover"
- (lsp--text-document-position-params)
- (lambda (hover)
- (when (equal buf (current-buffer))
- (lsp-ui-doc--callback hover bounds (current-buffer))))
- :mode 'tick
- :cancel-token :lsp-ui-doc-hover)))))))
- (lsp-ui-doc--hide-frame))))
-
-(defun lsp-ui-doc--extract-bounds (hover)
- (-when-let* ((hover hover)
- (data (lsp-get hover :range))
- (start (-some-> (lsp:range-start data) lsp--position-to-point))
- (end (-some-> (lsp:range-end data) lsp--position-to-point)))
- (cons start end)))
-
-(lsp-defun lsp-ui-doc--callback ((hover &as &Hover? :contents) bounds buffer)
- "Process the received documentation.
-HOVER is the doc returned by the LS.
-BOUNDS are points of the symbol that have been requested.
-BUFFER is the buffer where the request has been made."
- (let ((bounds (or (lsp-ui-doc--extract-bounds hover) bounds)))
- (if (and hover
- (>= (point) (car bounds))
- (<= (point) (cdr bounds))
- (eq buffer (current-buffer)))
- (progn
- (setq lsp-ui-doc--bounds bounds)
- (lsp-ui-doc--display
- (thing-at-point 'symbol t)
- (-some->> contents
- lsp-ui-doc--extract
- (replace-regexp-in-string "\r" "")
- (replace-regexp-in-string " " " "))))
- (lsp-ui-doc--hide-frame))))
-
-(defun lsp-ui-doc--delete-frame ()
- "Delete the child frame if it exists."
- (-when-let (frame (lsp-ui-doc--get-frame))
- (delete-frame frame)
- (lsp-ui-doc--set-frame nil)))
-
-(defun lsp-ui-doc--visible-p ()
- "Return whether the LSP UI doc is visible"
- (or (overlayp lsp-ui-doc--inline-ov)
- (and (lsp-ui-doc--get-frame)
- (frame-visible-p (lsp-ui-doc--get-frame)))))
-
-(defun lsp-ui-doc-hide-frame-on-window-change (fun window &optional no-record)
- "Delete the child frame if currently selected window changes.
-Does nothing if the newly-selected window is the same window as
-before, or if the new window is the minibuffer."
- (let ((initial-window (selected-window)))
- (prog1 (funcall fun window no-record)
- (unless no-record
- (when (lsp-ui-doc--visible-p)
- (let* ((current-window (selected-window))
- (doc-buffer (get-buffer (lsp-ui-doc--make-buffer-name))))
- (unless (or (window-minibuffer-p current-window)
- (equal current-window initial-window)
- (and doc-buffer
- (equal (window-buffer initial-window) doc-buffer)))
- (lsp-ui-doc--hide-frame))))))))
-
-(unless (boundp 'window-state-change-functions)
- (advice-add #'select-window :around #'lsp-ui-doc-hide-frame-on-window-change)
- (add-hook 'window-configuration-change-hook #'lsp-ui-doc--hide-frame))
-
-(defvar-local lsp-ui-doc--timer-on-changes nil)
-
-(defun lsp-ui-doc--on-state-changed (_frame &optional on-idle)
- (-when-let* ((frame (lsp-ui-doc--get-frame)))
- (and (frame-live-p frame)
- (frame-visible-p frame)
- (not (minibufferp (window-buffer)))
- (or (not (eq (selected-window) (frame-parameter frame 'lsp-ui-doc--window-origin)))
- (not (eq (window-buffer) (frame-parameter frame 'lsp-ui-doc--buffer-origin))))
- (if on-idle (lsp-ui-doc--hide-frame)
- (and (timerp lsp-ui-doc--timer-on-changes)
- (cancel-timer lsp-ui-doc--timer-on-changes))
- (setq lsp-ui-doc--timer-on-changes
- (run-with-idle-timer 0 nil (lambda nil (lsp-ui-doc--on-state-changed frame t))))))))
-
-(advice-add 'load-theme :before (lambda (&rest _) (lsp-ui-doc--delete-frame)))
-
-(advice-add #'keyboard-quit :before #'lsp-ui-doc--hide-frame)
-
-(defun lsp-ui-doc--on-delete (frame)
- "Function called when a FRAME is deleted."
- (-some--> (frame-parameter frame 'lsp-ui-doc-buffer)
- (get-buffer it)
- (and (buffer-live-p it) it)
- (kill-buffer it)))
-
-(defun lsp-ui-doc--handle-scroll (win _new-start)
- "Handle scrolling to the document frame.
-
-This function is apply to hook `window-scroll-functions'.
-
-Argument WIN is current applying window."
- (let ((frame (lsp-ui-doc--get-frame)))
- (if (minibufferp (window-buffer))
- (lsp-ui-doc--hide-frame)
- (when (and frame
- (eq lsp-ui-doc-position 'at-point)
- (frame-visible-p frame)
- (eq win (selected-window))) ; This resolved #524
- (if (and lsp-ui-doc--bounds
- (eq (window-buffer) (frame-parameter frame 'lsp-ui-doc--buffer-origin))
- (>= (point) (car lsp-ui-doc--bounds))
- (<= (point) (cdr lsp-ui-doc--bounds)))
- (lsp-ui-doc--move-frame frame)
- ;; The point might have changed if the window was scrolled
- ;; too far
- (lsp-ui-doc--hide-frame))))))
-
-(defvar-local lsp-ui-doc--timer-mouse-movement nil)
-(defvar-local lsp-ui-doc--last-event nil)
-
-(defun lsp-ui-doc--mouse-display nil
- (when (and lsp-ui-doc--last-event
- (lsp-feature? "textDocument/hover"))
- (save-excursion
- (goto-char lsp-ui-doc--last-event)
- (-when-let* ((valid (not (eolp)))
- (bounds (or (and (symbol-at-point) (bounds-of-thing-at-point 'symbol))
- (and (looking-at "[[:graph:]]") (cons (point) (1+ (point)))))))
- (unless (equal bounds lsp-ui-doc--bounds)
- (lsp-request-async
- "textDocument/hover"
- (lsp--text-document-position-params)
- (lambda (hover)
- (save-excursion
- (goto-char lsp-ui-doc--last-event)
- (let ((lsp-ui-doc-position 'at-point)
- (lsp-ui-doc--from-mouse-current t))
- (lsp-ui-doc--callback hover bounds (current-buffer)))))
- :mode 'tick
- :cancel-token :lsp-ui-doc-hover))))))
-
-(defun lsp-ui-doc--handle-mouse-movement (event)
- "Show the documentation corresponding to the text under EVENT."
- (interactive "e")
- (when lsp-ui-doc-show-with-mouse
- (and (timerp lsp-ui-doc--timer-mouse-movement)
- (cancel-timer lsp-ui-doc--timer-mouse-movement))
- (let* ((e (cadr event))
- (point (posn-point e))
- (same-win (eq (selected-window) (posn-window e))))
- (and lsp-ui-doc--from-mouse
- lsp-ui-doc--bounds
- point
- (or (< point (car lsp-ui-doc--bounds))
- (> point (cdr lsp-ui-doc--bounds))
- (not same-win)
- (equal (char-after point) ?\n))
- (lsp-ui-doc--hide-frame))
- (when same-win
- (setq lsp-ui-doc--last-event point
- lsp-ui-doc--timer-mouse-movement
- (run-with-idle-timer 0.5 nil 'lsp-ui-doc--mouse-display))))))
-
-(defun lsp-ui-doc--disable-mouse-on-prefix nil
- (and (bound-and-true-p lsp-ui-doc-mode)
- (bound-and-true-p lsp-ui-doc--mouse-tracked-by-us)
- track-mouse
- (> (length (this-single-command-keys)) 0)
- (setq-local track-mouse nil)))
-
-(defvar lsp-ui-doc--timer-mouse-idle nil)
-
-(defvar-local lsp-ui-doc--mouse-tracked-by-us nil
- "Nil if `track-mouse' was set by another package.
-If nil, do not prevent mouse on prefix keys.")
-
-(defun lsp-ui-doc--setup-mouse nil
- (when lsp-ui-doc-show-with-mouse
- (setq lsp-ui-doc--mouse-tracked-by-us (not track-mouse))
- (setq-local track-mouse t)
- (unless lsp-ui-doc--timer-mouse-idle
- ;; Set only 1 timer for all buffers
- (setq lsp-ui-doc--timer-mouse-idle
- (run-with-idle-timer 0 t 'lsp-ui-doc--disable-mouse-on-prefix)))))
-
-(defun lsp-ui-doc--prevent-focus-doc (e)
- (not (frame-parameter (cadr e) 'lsp-ui-doc--no-focus)))
-
-(define-minor-mode lsp-ui-doc-mode
- "Minor mode for showing hover information in child frame."
- :init-value nil
- :keymap `((,(kbd "<mouse-movement>") . lsp-ui-doc--handle-mouse-movement))
- :group lsp-ui-doc
- (cond
- (lsp-ui-doc-mode
- (with-eval-after-load 'frameset
- ;; The documentation frame can’t be properly restored. Especially
- ;; ‘desktop-save’ will misbehave and save a bogus string "Unprintable
- ;; entity" in the desktop file. Therefore we have to prevent
- ;; ‘frameset-save’ from saving the parameter.
- (unless (assq 'lsp-ui-doc-frame frameset-filter-alist)
- ;; Copy the variable first. See the documentation of
- ;; ‘frameset-filter-alist’ for explanation.
- (cl-callf copy-tree frameset-filter-alist)
- (push '(lsp-ui-doc-frame . :never) frameset-filter-alist)))
- (when (boundp 'window-state-change-functions)
- (add-hook 'window-state-change-functions 'lsp-ui-doc--on-state-changed))
- (lsp-ui-doc--setup-mouse)
- (advice-add 'handle-switch-frame :before-while 'lsp-ui-doc--prevent-focus-doc)
- (add-hook 'post-command-hook 'lsp-ui-doc--make-request nil t)
- (add-hook 'window-scroll-functions 'lsp-ui-doc--handle-scroll nil t)
- (add-hook 'delete-frame-functions 'lsp-ui-doc--on-delete nil t))
- (t
- (lsp-ui-doc-hide)
- (when (boundp 'window-state-change-functions)
- (remove-hook 'window-state-change-functions 'lsp-ui-doc--on-state-changed))
- (remove-hook 'window-scroll-functions 'lsp-ui-doc--handle-scroll t)
- (remove-hook 'post-command-hook 'lsp-ui-doc--make-request t)
- (remove-hook 'delete-frame-functions 'lsp-ui-doc--on-delete t))))
-
-(defun lsp-ui-doc-enable (enable)
- "Enable/disable ‘lsp-ui-doc-mode’.
-It is supposed to be called from `lsp-ui--toggle'"
- (lsp-ui-doc-mode (if enable 1 -1)))
-
-(defun lsp-ui-doc-show ()
- "Trigger display hover information popup."
- (interactive)
- (lsp-ui-doc--callback (lsp-request "textDocument/hover" (lsp--text-document-position-params))
- (or (bounds-of-thing-at-point 'symbol) (cons (point) (1+ (point))))
- (current-buffer)))
-
-(defun lsp-ui-doc-hide ()
- "Hide hover information popup."
- (interactive)
- (lsp-ui-doc--hide-frame))
-
-(defvar-local lsp-ui-doc--unfocus-frame-timer nil)
-(defun lsp-ui-doc--glance-hide-frame ()
- "Hook to hide hover information popup for `lsp-ui-doc-glance'."
- (when (or (overlayp lsp-ui-doc--inline-ov)
- (lsp-ui-doc--frame-visible-p))
- (lsp-ui-doc--hide-frame)
- (remove-hook 'post-command-hook 'lsp-ui-doc--glance-hide-frame)
- ;; make sure child frame is unfocused
- (setq lsp-ui-doc--unfocus-frame-timer
- (run-at-time 1 nil #'lsp-ui-doc-unfocus-frame))))
-
-(defun lsp-ui-doc-glance ()
- "Trigger display hover information popup and hide it on next typing."
- (interactive)
- (lsp-ui-doc--make-request)
- (when lsp-ui-doc--unfocus-frame-timer
- (cancel-timer lsp-ui-doc--unfocus-frame-timer))
- (add-hook 'post-command-hook 'lsp-ui-doc--glance-hide-frame))
-
-(define-minor-mode lsp-ui-doc-frame-mode
- "Marker mode to add additional key bind for lsp-ui-doc-frame."
- :init-value nil
- :lighter ""
- :group lsp-ui-doc
- :keymap `(([?q] . lsp-ui-doc-unfocus-frame)
- ([remap markdown-follow-thing-at-point] . lsp-ui-doc--open-markdown-link)
- ([remap mouse-drag-region] . ignore)))
-
-(defun lsp-ui-doc-focus-frame ()
- "Focus into lsp-ui-doc-frame."
- (interactive)
- (when-let* ((frame (lsp-ui-doc--get-frame))
- (visible (lsp-ui-doc--frame-visible-p)))
- (set-frame-parameter frame 'lsp-ui-doc--no-focus nil)
- (set-frame-parameter frame 'cursor-type t)
- (lsp-ui-doc--with-buffer
- (setq cursor-type 'box))
- (select-frame-set-input-focus frame)))
-
-(defun lsp-ui-doc-unfocus-frame ()
- "Unfocus from lsp-ui-doc-frame."
- (interactive)
- (-some-> (frame-parent) select-frame-set-input-focus)
- (when-let* ((frame (lsp-ui-doc--get-frame)))
- (set-frame-parameter frame 'lsp-ui-doc--no-focus t)
- (set-frame-parameter frame 'cursor-type nil)
- (lsp-ui-doc--with-buffer
- (setq cursor-type nil))
- (when lsp-ui-doc--from-mouse
- (make-frame-invisible frame))))
-
-(provide 'lsp-ui-doc)
-;;; lsp-ui-doc.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.html b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.html
deleted file mode 100644
index 1895ce7..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-doc.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.9.0/showdown.min.js"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js"></script>
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/2.10.0/github-markdown.css">
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/default.min.css">
- <style>
- .markdown-body {
- box-sizing: border-box;
- min-width: 400px;
- max-width: 600px;
- margin: 0 auto;
- padding: 10px;
- }
- </style>
- </head>
- <body>
- <div id="lsp-ui-webkit" class="markdown-body">
- </div>
- <script>
- var converter = new showdown.Converter({simpleLineBreaks: true});
- var lastSymbol = "";
- var elem = document.getElementById('lsp-ui-webkit');
-
- function renderMarkdown(symbol, markedString) {
- if (symbol == lastSymbol) return [elem.offsetWidth, elem.offsetHeight];
- decodedString = decodeURIComponent(markedString);
- html = converter.makeHtml(decodedString);
- elem.innerHTML = html;
- lastSymbol = symbol;
-
- document.querySelectorAll('pre code').forEach(function(codeBlock) {
- hljs.highlightBlock(codeBlock);
- });
-
- return [elem.offsetWidth, elem.offsetHeight];
- }
-
- </script>
- </body>
-</html>
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-flycheck.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-flycheck.el
deleted file mode 100644
index e3ac831..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-flycheck.el
+++ /dev/null
@@ -1,171 +0,0 @@
-;;; lsp-ui-flycheck.el --- Flycheck support for lsp-mode -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017 fmdkdd
-;; URL: https://github.com/emacs-lsp/lsp-ui
-;; Keywords: languagues, tools
-;; Version: 6.2
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Flycheck integration for lsp-mode.
-
-;;; Code:
-
-(require 'flycheck nil 'noerror) ; Temporary solution, see #514
-(require 'pcase)
-(require 'dash)
-
-(require 'lsp-protocol)
-(require 'lsp-mode)
-
-(defgroup lsp-ui-flycheck nil
- "The LSP extension to display syntax checking."
- :group 'tools
- :group 'convenience
- :group 'lsp-ui
- :link '(custom-manual "(lsp-ui-flycheck) Top")
- :link '(info-link "(lsp-ui-flycheck) Customizing"))
-
-(defcustom lsp-ui-flycheck-list-position 'bottom
- "Position where `lsp-ui-flycheck-list' will show diagnostics for the
-whole workspace."
- :type '(choice (const :tag "Bottom" bottom)
- (const :tag "Right" right))
- :group 'lsp-ui-flycheck)
-
-(defvar-local lsp-ui-flycheck-list--buffer nil)
-(defvar-local lsp-ui-flycheck--save-mode nil)
-
-(defun lsp-ui-flycheck-list--post-command ()
- (when (eobp)
- (forward-line -1)))
-
-(defun lsp-ui-flycheck-list--update (window workspace)
- "Update flycheck buffer in WINDOW belonging to WORKSPACE.
-Use `lsp-diagnostics' to receive diagnostics from your LSP server."
- (let ((buffer-read-only nil)
- (lsp--cur-workspace workspace))
- (erase-buffer)
- (remove-overlays)
- (maphash (lambda (file diagnostic)
- (when diagnostic
- (overlay-put
- (make-overlay (point) (point))
- 'after-string
- (concat (propertize "\n" 'face '(:height 0.2))
- (propertize (lsp-ui--workspace-path file)
- 'face 'dired-directory)
- (propertize "\n" 'face '(:height 0.2)))))
- (dolist (diag diagnostic)
- (-let* (((&Diagnostic :message :severity? :source?
- :range (&Range :start (&Position :line start-line))) diag)
- (formatted-message (or (if source? (format "%s: %s" source? message) message) "???"))
- (severity (or severity? 1))
- (line (1+ start-line))
- (face (cond ((= severity 1) 'error)
- ((= severity 2) 'warning)
- (t 'success)))
- (text (concat (propertize (number-to-string line) 'face face)
- ": "
- (car (split-string formatted-message "\n")))))
- (add-text-properties 0 (length text) `(diag ,diag file ,file window ,window) text)
- (insert (concat text "\n")))))
- (lsp-diagnostics)))
- (if (= (point) 1)
- (overlay-put (make-overlay 1 1)
- 'after-string "No diagnostic available\n")
- (goto-char 1))
- (lsp-ui-flycheck-list-mode))
-
-(defun lsp-ui-flycheck-list ()
- "List all the diagnostics in the whole workspace."
- (interactive)
- (let ((buffer (get-buffer-create "*lsp-diagnostics*"))
- (workspace lsp--cur-workspace)
- (window (selected-window)))
- (with-current-buffer buffer
- (lsp-ui-flycheck-list--update window workspace))
- (add-hook 'lsp-diagnostics-updated-hook 'lsp-ui-flycheck-list--refresh nil t)
- (setq lsp-ui-flycheck-list--buffer buffer)
- (let ((win (display-buffer-in-side-window
- buffer `((side . ,lsp-ui-flycheck-list-position) (slot . 5) (window-width . 0.20)))))
- (set-window-dedicated-p win t)
- (select-window win)
- (fit-window-to-buffer nil nil 10))))
-
-(defun lsp-ui-flycheck-list--refresh ()
- (let ((workspace lsp--cur-workspace)
- (current-window (selected-window)))
- (when (and (buffer-live-p lsp-ui-flycheck-list--buffer)
- (get-buffer-window lsp-ui-flycheck-list--buffer)
- workspace)
- (with-selected-window (get-buffer-window lsp-ui-flycheck-list--buffer)
- (lsp-ui-flycheck-list--update current-window workspace)
- (fit-window-to-buffer nil nil 10)))))
-
-(defun lsp-ui-flycheck-list--open ()
- (-when-let* ((diag (get-text-property (point) 'diag))
- ((&Diagnostic :range (&Range :start (&Position :line start-line
- :character start-column))) diag)
- (file (get-text-property (point) 'file))
- (window (get-text-property (point) 'window))
- (marker (with-current-buffer
- (or (get-file-buffer file)
- (find-file-noselect file))
- (save-restriction
- (widen)
- (save-excursion
- (goto-char 1)
- (forward-line start-line)
- (forward-char start-column)
- (point-marker))))))
- (set-window-buffer window (marker-buffer marker) t)
- (with-selected-window window
- (goto-char marker)
- (recenter)
- (pulse-momentary-highlight-one-line (marker-position marker) 'next-error))
- window))
-
-(defun lsp-ui-flycheck-list--view ()
- (interactive)
- (lsp-ui-flycheck-list--open))
-
-(defun lsp-ui-flycheck-list--visit ()
- (interactive)
- (select-window (lsp-ui-flycheck-list--open)))
-
-(defun lsp-ui-flycheck-list--quit ()
- (interactive)
- (kill-buffer))
-
-(defvar lsp-ui-flycheck-list-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "q") 'lsp-ui-flycheck-list--quit)
- (define-key map (kbd "<return>") 'lsp-ui-flycheck-list--view)
- (define-key map (kbd "<M-return>") 'lsp-ui-flycheck-list--visit)
- map)
- "Keymap for ‘lsp-ui-flycheck-list-mode’.")
-
-(define-derived-mode lsp-ui-flycheck-list-mode special-mode "lsp-ui-flycheck-list"
- "Mode showing flycheck diagnostics for the whole workspace."
- (setq truncate-lines t)
- (setq mode-line-format nil)
- (add-hook 'post-command-hook 'lsp-ui-flycheck-list--post-command nil t))
-
-(declare-function lsp-ui--workspace-path "lsp-ui" (path))
-
-(provide 'lsp-ui-flycheck)
-;;; lsp-ui-flycheck.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-imenu.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-imenu.el
deleted file mode 100644
index 3c628da..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-imenu.el
+++ /dev/null
@@ -1,412 +0,0 @@
-;;; lsp-ui-imenu.el --- Lsp-Ui-Imenu -*- lexical-binding: t -*-
-
-;; Copyright (C) 2018 Sebastien Chapuis
-
-;; Author: Sebastien Chapuis <sebastien@chapu.is>
-;; URL: https://github.com/emacs-lsp/lsp-ui
-;; Keywords: languages, tools
-;; Version: 6.3
-
-;;; License
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-
-;; Show imenu entries
-;; Call the function `lsp-ui-imenu'
-;;
-;; (define-key lsp-ui-mode-map (kbd "C-c l") 'lsp-ui-imenu)
-
-;;; Code:
-
-(require 'lsp-mode)
-(require 'dash)
-(require 'lsp-ui-util)
-
-(defgroup lsp-ui-imenu nil
- "Display imenu entries."
- :group 'tools
- :group 'convenience
- :group 'lsp-ui
- :link '(custom-manual "(lsp-ui-imenu) Top")
- :link '(info-link "(lsp-ui-imenu) Customizing"))
-
-(defcustom lsp-ui-imenu-enable t
- "Whether or not to enable ‘lsp-ui-imenu’."
- :type 'boolean
- :group 'lsp-ui)
-
-(defcustom lsp-ui-imenu-kind-position 'top
- "Where to show the entries kind."
- :type '(choice (const :tag "Top" top)
- (const :tag "Left" left))
- :group 'lsp-ui-imenu)
-
-(defcustom lsp-ui-imenu-colors '("deep sky blue" "green3")
- "Color list to cycle through for entry groups."
- :type '(repeat color)
- :group 'lsp-ui-imenu)
-
-(defcustom lsp-ui-imenu-window-width 0
- "When not 0, don't fit window to buffer and use value as window-width."
- :type 'number
- :group 'lsp-ui-imenu)
-
-(defcustom lsp-ui-imenu-auto-refresh nil
- "Automatically refresh imenu when certain conditions meet."
- :type '(choice (const :tag "Enable" t)
- (const :tag "Active only when after save" after-save)
- (const :tag "Disable" nil))
- :group 'lsp-ui-imenu)
-
-(defcustom lsp-ui-imenu-auto-refresh-delay 1.0
- "Delay time to refresh imenu."
- :type 'float
- :group 'lsp-ui-imenu)
-
-(defcustom lsp-ui-imenu--custom-mode-line-format nil
- "Custom mode line format to be used in `lsp-ui-menu-mode'."
- :type 'sexp
- :group 'lsp-ui-menu)
-
-(defconst lsp-ui-imenu--max-bars 8)
-
-(declare-function imenu--make-index-alist 'imenu)
-(declare-function imenu--subalist-p 'imenu)
-(defvar imenu--index-alist)
-
-(defvar-local lsp-ui-imenu--refresh-timer nil
- "Auto refresh timer for imenu.")
-
-(defun lsp-ui-imenu--pad (s len bars depth color-index for-title is-last)
- (let ((n (- len (length s))))
- (apply #'concat
- (make-string n ?\s)
- (propertize s 'face `(:foreground ,(lsp-ui-imenu--get-color color-index)))
- (let (bar-strings)
- (dotimes (i depth)
- (push
- (propertize (lsp-ui-imenu--get-bar bars i depth for-title is-last)
- 'face `(:foreground
- ,(lsp-ui-imenu--get-color (+ color-index i))))
- bar-strings))
- (reverse bar-strings)))))
-
-(defun lsp-ui-imenu--get-bar (bars index depth for-title is-last)
- (cond
- ;; Exceeding maximum bars
- ((>= index lsp-ui-imenu--max-bars) " ")
- ;; No bar for this level
- ((not (aref bars index)) " ")
- ;; For the first level, the title is rendered differently, so leaf items are
- ;; decorated with the full height bar regardless if it's the last item or
- ;; not.
- ((and (= depth 1) (not for-title)) " ┃ ")
- ;; Full height bar for levels other than the rightmost one.
- ((< (1+ index) depth) " ┃ ")
- ;; The rightmost bar for the last item.
- (is-last " â”— " )
- ;; The rightmost bar for the title items other than the last one.
- (for-title " ┣ ")
- ;; The rightmost bar for the leaf items other than the last one.
- (t " ┃ ")))
-
-(defun lsp-ui-imenu--get-color (index)
- (nth (mod index (length lsp-ui-imenu-colors)) lsp-ui-imenu-colors))
-
-(defun lsp-ui-imenu--make-line (title index entry padding bars depth color-index is-last)
- (let* ((prefix (if (and (= index 0) (eq lsp-ui-imenu-kind-position 'left)) title " "))
- (text (concat (lsp-ui-imenu--pad prefix padding bars depth color-index nil is-last)
- (propertize (car entry) 'face 'default)
- "\n"))
- (len (length text)))
- (add-text-properties 0 len `(index ,index title ,title marker ,(cdr entry)
- padding ,padding depth, depth)
- text)
- text))
-
-(defvar-local lsp-ui-imenu-ov nil
- "Variable that holds overlay for imenu.")
-
-(defun lsp-ui-imenu--make-ov nil
- "Make imenu overlay."
- (or (and (overlayp lsp-ui-imenu-ov) lsp-ui-imenu-ov)
- (setq lsp-ui-imenu-ov (make-overlay 1 1))))
-
-(defun lsp-ui-imenu--post-command nil
- "Post command hook for imenu."
- (when (eobp) (forward-line -1))
- (lsp-ui-imenu--move-to-name-beginning)
- (when (eq lsp-ui-imenu-kind-position 'left)
- (save-excursion
- (when (overlayp lsp-ui-imenu-ov)
- (overlay-put lsp-ui-imenu-ov 'display nil))
- (redisplay)
- (goto-char (window-start))
- (if (= (get-text-property (point) 'index) 0)
- (when (overlayp lsp-ui-imenu-ov) (delete-overlay lsp-ui-imenu-ov))
- (let* ((ov (lsp-ui-imenu--make-ov))
- (padding (get-text-property (point) 'padding))
- (title (get-text-property (point) 'title))
- (text (buffer-substring (+ (line-beginning-position) padding) (line-end-position))))
- (move-overlay ov (line-beginning-position) (line-end-position))
- (overlay-put ov 'display `(string ,(concat (let ((n (- padding (length title))))
- (propertize (concat (make-string n ?\s) title)))
- text))))))))
-
-(defun lsp-ui-imenu--move-to-name-beginning ()
- (-when-let* ((padding (get-char-property (point) 'padding))
- (depth (get-char-property (point) 'depth)))
- (goto-char (+ (* depth 3) (line-beginning-position) padding))))
-
-(defvar lsp-ui-imenu--origin nil)
-
-(defun lsp-ui-imenu--put-separator nil
- (let ((ov (make-overlay (point) (point))))
- (overlay-put ov 'after-string (propertize "\n" 'face '(:height 0.6)))))
-
-(defun lsp-ui-imenu--put-toplevel-title (title color-index)
- (if (eq lsp-ui-imenu-kind-position 'top)
- (let ((ov (make-overlay (point) (point)))
- (color (lsp-ui-imenu--get-color color-index)))
- (overlay-put
- ov 'after-string
- (concat (propertize "\n" 'face '(:height 0.6))
- (propertize title 'face `(:foreground ,color))
- "\n"
- (propertize "\n" 'face '(:height 0.6)))))
- ;; Left placement, title is put with the first sub item. Only put a separator here.
- (lsp-ui-imenu--put-separator)))
-
-(defun lsp-ui-imenu--put-subtitle (title padding bars depth color-index is-last)
- (let ((ov (make-overlay (point) (point)))
- (title-color (lsp-ui-imenu--get-color (+ color-index depth))))
- (overlay-put
- ov 'after-string
- (concat (lsp-ui-imenu--pad " " padding bars depth color-index t is-last)
- (propertize title 'face `(:foreground ,title-color))
- (propertize "\n" 'face '(:height 1))))))
-
-(defun lsp-ui-imenu--insert-items (title items padding bars depth color-index)
- "Insert ITEMS for TITLE.
-
-PADDING is the length of whitespaces to the left of the first bar.
-
-BARS is a bool vector of length `lsp-ui-imenu--max-bars'. The ith
-value indicates whether the ith bar from the left is visible.
-
-DEPTH is the depth of the items in the index tree, starting from 0.
-
-COLOR-INDEX is the index of the color of the leftmost bar.
-
-Return the updated COLOR-INDEX."
- (let ((len (length items)))
- (--each-indexed items
- (let ((is-last (= (1+ it-index) len)))
- (if (imenu--subalist-p it)
- (-let* (((sub-title . entries) it))
- (if (= depth 0)
- (lsp-ui-imenu--put-toplevel-title sub-title color-index)
- (lsp-ui-imenu--put-subtitle sub-title padding bars depth color-index is-last))
- (when (and is-last (> depth 0))
- (aset bars (1- depth) nil))
- (let ((lsp-ui-imenu-kind-position (if (> depth 0) 'top
- lsp-ui-imenu-kind-position)))
- (lsp-ui-imenu--insert-items sub-title
- entries
- padding
- bars
- (1+ depth)
- color-index))
- (when (and is-last (> depth 0))
- (aset bars (1- depth) t))
- (when (= depth 0)
- (setq color-index (1+ color-index))))
- (insert (lsp-ui-imenu--make-line title it-index it
- padding bars depth color-index
- is-last))))))
- color-index)
-
-(defun lsp-ui-imenu--get-padding (items)
- "Get imenu padding determined by `lsp-ui-imenu-kind-position'.
-ITEMS are used when the kind position is 'left."
- (cl-case lsp-ui-imenu-kind-position
- (top 1)
- (left (--> (-filter 'imenu--subalist-p items)
- (--map (length (car it)) it)
- (-max (or it '(1)))))
- (t (user-error "Invalid value for imenu's kind position: %s" lsp-ui-imenu-kind-position))))
-
-(defun lsp-ui-imenu--put-bit (bits offset)
- (logior bits (lsh 1 offset)))
-
-(defun lsp-ui-imenu--clear-bit (bits offset)
- (logand bits (lognot (lsh 1 offset))))
-
-(defvar lsp-ui-imenu-buffer-name "*lsp-ui-imenu*"
- "Buffer name for imenu buffers.")
-
-(defun lsp-ui-imenu--refresh-content ()
- "Refresh imenu content menu"
- (let ((imenu-auto-rescan t))
- (setq lsp-ui-imenu--origin (current-buffer))
- (imenu--make-index-alist)
- (let ((imenu-buffer (get-buffer-create lsp-ui-imenu-buffer-name))
- (list imenu--index-alist))
- (with-current-buffer imenu-buffer
- (let* ((padding (lsp-ui-imenu--get-padding list))
- (grouped-by-subs (-partition-by 'imenu--subalist-p list))
- (color-index 0)
- (bars (make-bool-vector lsp-ui-imenu--max-bars t))
- (inhibit-read-only t))
- (remove-overlays)
- (erase-buffer)
- (dolist (group grouped-by-subs)
- (if (imenu--subalist-p (car group))
- (setq color-index (lsp-ui-imenu--insert-items "" group padding bars 0 color-index))
- (lsp-ui-imenu--put-separator)
- (lsp-ui-imenu--insert-items "" group padding bars 1 color-index)
- (setq color-index (1+ color-index))))
- (lsp-ui-imenu-mode)
- (when lsp-ui-imenu--custom-mode-line-format
- (setq mode-line-format lsp-ui-imenu--custom-mode-line-format))
- (goto-char (point-min))
- (add-hook 'post-command-hook 'lsp-ui-imenu--post-command nil t))))))
-
-(defun lsp-ui-imenu nil
- "Open ui-imenu in side window."
- (interactive)
- (lsp-ui-imenu-buffer-mode 1)
- (setq lsp-ui-imenu--origin (current-buffer))
- (imenu--make-index-alist)
- (let ((imenu-buffer (get-buffer-create lsp-ui-imenu-buffer-name)))
- (lsp-ui-imenu--refresh-content)
- (let ((win (display-buffer-in-side-window imenu-buffer '((side . right)))))
- (set-window-margins win 1)
- (select-window win)
- (set-window-start win 1)
- (lsp-ui-imenu--move-to-name-beginning)
- (set-window-dedicated-p win t)
- ;; when `lsp-ui-imenu-window-width' is 0, fit window to buffer
- (if (= lsp-ui-imenu-window-width 0)
- (let ((fit-window-to-buffer-horizontally 'only))
- (fit-window-to-buffer win)
- (window-resize win 3 t))
- (let ((x (- lsp-ui-imenu-window-width (window-width))))
- (window-resize (selected-window) x t))))))
-
-(defun lsp-ui-imenu--kill nil
- "Kill imenu window."
- (interactive)
- (lsp-ui-imenu-buffer-mode -1)
- (kill-buffer-and-window))
-
-(defun lsp-ui-imenu--jump (direction)
- (let ((current (get-text-property (point) 'title)))
- (forward-line direction)
- (while (and current
- (not (= (line-number-at-pos) 1))
- (equal current (get-text-property (point) 'title)))
- (forward-line direction))))
-
-(defun lsp-ui-imenu--next-kind nil
- "Jump to next kind of imenu."
- (interactive)
- (lsp-ui-imenu--jump 1))
-
-(defun lsp-ui-imenu--prev-kind nil
- "Jump to previous kind of imenu."
- (interactive)
- (lsp-ui-imenu--jump -1)
- (while (not (= (get-text-property (point) 'index) 0))
- (forward-line -1)))
-
-(defun lsp-ui-imenu--visit nil
- (interactive)
- (let ((marker (get-text-property (point) 'marker)))
- (select-window (get-buffer-window lsp-ui-imenu--origin))
- (goto-char marker)
- (pulse-momentary-highlight-one-line (point) 'next-error)))
-
-(defun lsp-ui-imenu--view nil
- (interactive)
- (let ((marker (get-text-property (point) 'marker)))
- (with-selected-window (get-buffer-window lsp-ui-imenu--origin)
- (goto-char marker)
- (recenter)
- (pulse-momentary-highlight-one-line (point) 'next-error))))
-
-(defvar lsp-ui-imenu-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "q") 'lsp-ui-imenu--kill)
- (define-key map (kbd "r") 'lsp-ui-imenu--refresh)
- (define-key map (kbd "<right>") 'lsp-ui-imenu--next-kind)
- (define-key map (kbd "<left>") 'lsp-ui-imenu--prev-kind)
- (define-key map (kbd "<return>") 'lsp-ui-imenu--view)
- (define-key map (kbd "<M-return>") 'lsp-ui-imenu--visit)
- (define-key map (kbd "RET") 'lsp-ui-imenu--view)
- (define-key map (kbd "M-RET") 'lsp-ui-imenu--visit)
- map)
- "Keymap for ‘lsp-ui-peek-mode’.")
-
-(define-derived-mode lsp-ui-imenu-mode special-mode "lsp-ui-imenu"
- "Mode showing imenu entries.")
-
-(defun lsp-ui-imenu--refresh ()
- "Safe refresh imenu content."
- (interactive)
- (let ((imenu-buffer (get-buffer lsp-ui-imenu-buffer-name)))
- (when imenu-buffer
- (save-selected-window
- (if (equal (current-buffer) imenu-buffer)
- (select-window (get-buffer-window lsp-ui-imenu--origin))
- (setq lsp-ui-imenu--origin (current-buffer)))
- (lsp-ui-imenu--refresh-content)))))
-
-(defun lsp-ui-imenu--start-refresh (&rest _)
- "Starts the auto refresh timer."
- (lsp-ui-util-safe-kill-timer lsp-ui-imenu--refresh-timer)
- (setq lsp-ui-imenu--refresh-timer
- (run-with-idle-timer lsp-ui-imenu-auto-refresh-delay nil #'lsp-ui-imenu--refresh)))
-
-(defun lsp-ui-imenu-buffer--enable ()
- "Enable `lsp-ui-imenu-buffer'."
- (when lsp-ui-imenu-auto-refresh
- (cl-case lsp-ui-imenu-auto-refresh
- (after-save
- (add-hook 'after-save-hook #'lsp-ui-imenu--start-refresh nil t))
- (t
- (add-hook 'after-change-functions #'lsp-ui-imenu--start-refresh nil t)
- (add-hook 'after-save-hook #'lsp-ui-imenu--start-refresh nil t)))))
-
-(defun lsp-ui-imenu-buffer--disable ()
- "Disable `lsp-ui-imenu-buffer'."
- (when lsp-ui-imenu-auto-refresh
- (cl-case lsp-ui-imenu-auto-refresh
- (after-save
- (remove-hook 'after-save-hook #'lsp-ui-imenu--start-refresh t))
- (t
- (remove-hook 'after-change-functions #'lsp-ui-imenu--start-refresh t)
- (remove-hook 'after-save-hook #'lsp-ui-imenu--start-refresh t)))))
-
-(define-minor-mode lsp-ui-imenu-buffer-mode
- "Minor mode 'lsp-ui-imenu-buffer-mode'."
- :group lsp-ui-imenu
- (if lsp-ui-imenu-buffer-mode (lsp-ui-imenu-buffer--enable) (lsp-ui-imenu-buffer--disable)))
-
-(provide 'lsp-ui-imenu)
-;;; lsp-ui-imenu.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-peek.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-peek.el
deleted file mode 100644
index c73028c..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-peek.el
+++ /dev/null
@@ -1,754 +0,0 @@
-;;; lsp-ui-peek.el --- Lsp-Ui-Peek -*- lexical-binding: t -*-
-
-;; Copyright (C) 2017 Sebastien Chapuis
-
-;; Author: Sebastien Chapuis <sebastien@chapu.is>
-;; URL: https://github.com/emacs-lsp/lsp-ui
-;; Keywords: languagues, tools
-;; Version: 0.0.1
-
-;;; License
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-;;
-;; Load this file and execute `lsp-ui-peek-find-references'
-;; on a symbol to find its references
-;; or `lsp-ui-peek-find-definitions'.
-;; Type 'q' to close the window.
-;;
-
-;;; Code:
-
-(require 'lsp-protocol)
-(require 'lsp-mode)
-(require 'xref)
-(require 'dash)
-
-(defgroup lsp-ui-peek nil
- "Improve version of xref with peek feature."
- :group 'tools
- :group 'convenience
- :group 'lsp-ui
- :link '(custom-manual "(lsp-ui-peek) Top")
- :link '(info-link "(lsp-ui-peek) Customizing"))
-
-(defcustom lsp-ui-peek-enable t
- "Whether or not to enable ‘lsp-ui-peek’."
- :type 'boolean
- :group 'lsp-ui)
-
-(defcustom lsp-ui-peek-show-directory t
- "Whether or not to show the directory of files."
- :type 'boolean
- :safe t
- :group 'lsp-ui-peek)
-
-(defcustom lsp-ui-peek-peek-height 20
- "Height of the peek code."
- :type 'integer
- :group 'lsp-ui-peek)
-
-(defcustom lsp-ui-peek-list-width 50
- "Width of the right panel."
- :type 'integer
- :group 'lsp-ui-peek)
-
-(defcustom lsp-ui-peek-fontify 'on-demand
- "Whether to fontify chunks of code (use semantics colors).
-WARNING: 'always can heavily slow the processing when
-`lsp-ui-peek-expand-function' expands more than 1 file.
-It is recommended to keep the default value of `lsp-ui-peek-expand-function'
-when this variable is set to 'always."
- :type '(choice (const :tag "Never" never)
- (const :tag "On demand" on-demand)
- (const :tag "Always" always))
- :group 'lsp-ui-peek)
-
-(defcustom lsp-ui-peek-always-show nil
- "Show the peek view even if there is only 1 cross reference.
-By default, the peek view isn't shown if there is 1 xref."
- :type 'boolean
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-peek
- '((((background light)) :background "light gray")
- (t :background "#031A25"))
- "Face used for the peek."
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-list
- '((((background light)) :background "light gray")
- (t :background "#181818"))
- "Face used to list references."
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-filename
- '((((background light)) :foreground "red")
- (t :foreground "dark orange"))
- "Face used for the filename's reference in the list."
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-line-number
- '((t :foreground "grey25"))
- "Line number face."
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-highlight
- '((((background light)) :background "yellow"
- :box (:line-width -1 :color "red"))
- (t :background "white"
- :foreground "black"
- :distant-foreground "white"
- :box (:line-width -1 :color "red")))
- "Face used to highlight the reference/definition.
-Do not use box, underline or overline prop. If you want to use
-box, use a negative value for its width. Those properties deform
-the whole overlay."
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-header
- '((((background light)) :background "grey30" :foreground "white")
- (t :background "white" :foreground "black"))
- "Face used for the headers."
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-footer
- '((t :inherit lsp-ui-peek-header))
- "Face used for the footers. Only the background of this face is used."
- :group 'lsp-ui-peek)
-
-(defface lsp-ui-peek-selection
- '((((background light)) :background "grey30" :foreground "white")
- (t :background "white" :foreground "black"))
- "Face used for the current selection.
-Do not use box, underline or overline prop. If you want to use
-box, use a negative value for its width. Those properties
-deform the whole overlay."
- :group 'lsp-ui-peek)
-
-(defvar lsp-ui-peek-expand-function 'lsp-ui-peek--expand-buffer
- "A function used to determinate which file(s) to expand in the list of xrefs.
-The function takes one parameter: a list of cons where the car is the
-filename and the cdr is the number of references in that file.
-It should returns a list of filenames to expand.
-WARNING: If you change this variable and expand more than 1 file, it is
-recommended to set `lsp-ui-peek-fontify' to 'never or 'on-demand, otherwise it
-will cause performances issues.")
-
-(defvar-local lsp-ui-peek--overlay nil)
-(defvar-local lsp-ui-peek--list nil)
-(defvar-local lsp-ui-peek--last-xref nil)
-(defvar-local lsp-ui-peek--selection 0)
-(defvar-local lsp-ui-peek--offset 0)
-(defvar-local lsp-ui-peek--size-list 0)
-(defvar-local lsp-ui-peek--win-start nil)
-(defvar-local lsp-ui-peek--method nil)
-(defvar-local lsp-ui-peek--deactivate-keymap-fn nil)
-
-(defvar lsp--peek-save-major-mode nil
- "Stores the major mode for lsp ui peek.")
-
-(defvar lsp-ui-peek--jumps (make-hash-table)
- "Hashtable which stores all jumps on a per window basis.")
-
-(defvar evil--jumps-window-jumps) ; defined in evil-jumps.el
-
-(defmacro lsp-ui-peek--with-evil-jumps (&rest body)
- "Make `evil-jumps.el' commands work on `lsp-ui-peek--jumps'."
- (declare (indent 1))
- `(let ((evil--jumps-window-jumps lsp-ui-peek--jumps))
- ,@body))
-
-(with-eval-after-load 'evil-jumps
- ;; We need to jump through some hoops to prevent the byte-compiler from
- ;; compiling this code. We can’t compile the code without requiring
- ;; ‘evil-macros’.
- (eval '(progn
- (evil-define-motion lsp-ui-peek-jump-backward (count)
- (lsp-ui-peek--with-evil-jumps
- (evil--jump-backward count)
- (run-hooks 'xref-after-return-hook)))
- (evil-define-motion lsp-ui-peek-jump-forward (count)
- (lsp-ui-peek--with-evil-jumps
- (evil--jump-forward count)
- (run-hooks 'xref-after-return-hook))))
- t))
-
-(defmacro lsp-ui-peek--prop (prop &optional string)
- `(get-text-property 0 ,prop (or ,string (lsp-ui-peek--get-text-selection) "")))
-
-(defmacro lsp-ui-peek--add-prop (prop &optional string)
- `(let ((obj (or ,string (lsp-ui-peek--get-text-selection))))
- (add-text-properties 0 (length obj) ,prop obj)
- obj))
-
-(defun lsp-ui-peek--truncate (len s)
- (if (> (string-width s) len)
- (concat (truncate-string-to-width s (max (- len 2) 0)) "..")
- s))
-
-(defun lsp-ui-peek--get-text-selection (&optional n)
- (nth (or n lsp-ui-peek--selection)
- (--remove (get-text-property 0 'lsp-ui-peek-hidden it) lsp-ui-peek--list)))
-
-(defun lsp-ui-peek--get-selection ()
- (get-text-property 0 'lsp-ui-peek (or (lsp-ui-peek--get-text-selection) "")))
-
-(defun lsp-ui-peek--visual-index ()
- (- lsp-ui-peek--selection lsp-ui-peek--offset))
-
-(defun lsp-ui-peek--make-line (index src)
- (-let* (((s1 . s2) src)
- (len-s1 (length s1))
- (len-s2 (length s2))
- (on-selection (= (1+ (lsp-ui-peek--visual-index)) index))
- (face-left (if (= index 0) 'lsp-ui-peek-header 'lsp-ui-peek-peek))
- (face-right (cond (on-selection 'lsp-ui-peek-selection)
- ((= index 0) 'lsp-ui-peek-header)
- (t 'lsp-ui-peek-list))))
- (when on-selection
- (setq s2 (copy-sequence s2))
- (add-face-text-property 0 len-s2 face-right nil s2))
- (unless (get-text-property 0 'lsp-ui-peek-faced s2)
- (add-face-text-property 0 len-s2 face-right t s2)
- (add-text-properties 0 len-s2 '(lsp-ui-peek-faced t) s2)
- (add-face-text-property 0 len-s2 'default t s2))
- (add-face-text-property 0 len-s1 face-left t s1)
- (add-face-text-property 0 len-s1 'default t s1)
- (concat
- s1
- (propertize "_" 'face face-left 'display `(space :align-to (- right-fringe ,(1+ lsp-ui-peek-list-width))))
- " "
- s2
- (propertize "_" 'face face-right 'display `(space :align-to (- right-fringe 1)))
- (propertize "\n" 'face face-right))))
-
-(defun lsp-ui-peek--adjust (width strings)
- (-let* (((s1 . s2) strings))
- (cons (lsp-ui-peek--truncate (- width (1+ lsp-ui-peek-list-width)) s1)
- (lsp-ui-peek--truncate (- lsp-ui-peek-list-width 2) s2))))
-
-(defun lsp-ui-peek--make-footer ()
- ;; Character-only terminals don't support characters of different height
- (when (display-graphic-p)
- (list
- (concat
- (propertize " "
- 'face `(:background ,(face-background 'lsp-ui-peek-footer nil t) :height 1)
- 'display `(space :align-to (- right-fringe ,(1+ lsp-ui-peek-list-width))))
- (propertize " " 'face '(:height 1)
- 'display `(space :align-to (- right-fringe ,lsp-ui-peek-list-width)))
- (propertize " "
- 'face `(:background ,(face-background 'lsp-ui-peek-footer nil t) :height 1)
- 'display `(space :align-to (- right-fringe 0)))
- (propertize "\n" 'face '(:height 1))
- (propertize "\n" 'face '(:height 0.5))))))
-
-(defun lsp-ui-peek--peek-new (src1 src2)
- (-let* ((win-width (- (window-text-width)
- (if (bound-and-true-p display-line-numbers-mode)
- (+ 2 (line-number-display-width))
- 0)))
- (string (-some--> (-zip-fill "" src1 src2)
- (--map (lsp-ui-peek--adjust win-width it) it)
- (-map-indexed 'lsp-ui-peek--make-line it)
- (-concat it (lsp-ui-peek--make-footer))))
- (next-line (line-beginning-position 2))
- (ov (or (when (overlayp lsp-ui-peek--overlay) lsp-ui-peek--overlay)
- (make-overlay next-line next-line))))
- (setq lsp-ui-peek--overlay ov)
- (overlay-put ov 'after-string (mapconcat 'identity string ""))
- (overlay-put ov 'display-line-numbers-disable t)
- (overlay-put ov 'window (get-buffer-window))))
-
-(defun lsp-ui-peek--expand-buffer (files)
- (if (--any? (equal (car it) buffer-file-name) files)
- (list buffer-file-name)
- (list (caar files))))
-
-(defun lsp-ui-peek--expand (xrefs)
- (let* ((to-expand (->> (--map (cons (plist-get it :file) (plist-get it :count)) xrefs)
- (funcall lsp-ui-peek-expand-function)))
- first)
- (while (nth lsp-ui-peek--selection lsp-ui-peek--list)
- (when (and (lsp-ui-peek--prop 'xrefs)
- (member (lsp-ui-peek--prop 'file) to-expand))
- (unless first
- (setq first (1+ lsp-ui-peek--selection)))
- (lsp-ui-peek--toggle-file t))
- (setq lsp-ui-peek--selection (1+ lsp-ui-peek--selection)))
- (setq lsp-ui-peek--selection (or first 0))
- (lsp-ui-peek--recenter)))
-
-(defun lsp-ui-peek--show (xrefs)
- "Create a window to list references/defintions.
-XREFS is a list of references/definitions."
- (setq lsp-ui-peek--win-start (window-start)
- lsp-ui-peek--selection 0
- lsp-ui-peek--offset 0
- lsp-ui-peek--size-list 0
- lsp-ui-peek--list nil)
- (when (eq (logand lsp-ui-peek-peek-height 1) 1)
- (setq lsp-ui-peek-peek-height (1+ lsp-ui-peek-peek-height)))
- (when (< (- (line-number-at-pos (window-end)) (line-number-at-pos))
- (+ lsp-ui-peek-peek-height 3))
- (recenter 15))
- (setq xrefs (--sort (string< (plist-get it :file) (plist-get other :file)) xrefs))
- (--each xrefs
- (-let* (((&plist :file filename :xrefs xrefs :count count) it)
- (len-str (number-to-string count)))
- (setq lsp-ui-peek--size-list (+ lsp-ui-peek--size-list count))
- (push (concat (propertize (if lsp-ui-peek-show-directory
- (lsp-ui--workspace-path filename)
- (file-name-nondirectory filename))
- 'face 'lsp-ui-peek-filename
- 'file filename
- 'xrefs xrefs)
- (propertize " " 'display `(space :align-to (- right-fringe ,(1+ (length len-str)))))
- (propertize len-str 'face 'lsp-ui-peek-filename))
- lsp-ui-peek--list)))
- (setq lsp-ui-peek--list (nreverse lsp-ui-peek--list))
- (lsp-ui-peek--expand xrefs)
- (lsp-ui-peek--peek))
-
-(defun lsp-ui-peek--recenter ()
- (let ((half-height (/ lsp-ui-peek-peek-height 2)))
- (when (> lsp-ui-peek--selection half-height)
- (setq lsp-ui-peek--offset (- lsp-ui-peek--selection (1- half-height))))))
-
-(defun lsp-ui-peek--fill (min-len list)
- (let ((len (length list)))
- (if (< len min-len)
- (append list (-repeat (- min-len len) ""))
- list)))
-
-(defun lsp-ui-peek--render (major string)
- (with-temp-buffer
- (insert string)
- (delay-mode-hooks
- (let ((inhibit-message t))
- (funcall major))
- (ignore-errors
- (font-lock-ensure)))
- (buffer-string)))
-
-(defun lsp-ui-peek--peek ()
- "Show reference's chunk of code."
- (-let* ((xref (lsp-ui-peek--get-selection))
- ((&plist :file file :chunk chunk) (or xref lsp-ui-peek--last-xref))
- (header (concat " " (lsp-ui--workspace-path file) "\n"))
- (header2 (format " %s %s" lsp-ui-peek--size-list
- (string-remove-prefix "workspace/" (string-remove-prefix "textDocument/" lsp-ui-peek--method))))
- (ref-view (--> chunk
- (subst-char-in-string ?\t ?\s it)
- (concat header it)
- (split-string it "\n")))
- (list-refs (->> lsp-ui-peek--list
- (--remove (lsp-ui-peek--prop 'lsp-ui-peek-hidden it))
- (-drop lsp-ui-peek--offset)
- (-take (1- lsp-ui-peek-peek-height))
- (lsp-ui-peek--fill (1- lsp-ui-peek-peek-height))
- (-concat (list header2)))))
- (setq lsp-ui-peek--last-xref (or xref lsp-ui-peek--last-xref))
- (lsp-ui-peek--peek-new ref-view list-refs)
- (and (fboundp 'lsp-ui-doc--hide-frame)
- (lsp-ui-doc--hide-frame))))
-
-(defun lsp-ui-peek--toggle-text-prop (s)
- (let ((state (lsp-ui-peek--prop 'lsp-ui-peek-hidden s)))
- (lsp-ui-peek--add-prop `(lsp-ui-peek-hidden ,(not state)) s)))
-
-(defun lsp-ui-peek--toggle-hidden (file)
- (setq lsp-ui-peek--list
- (--map-when (string= (plist-get (lsp-ui-peek--prop 'lsp-ui-peek it) :file) file)
- (prog1 it (lsp-ui-peek--toggle-text-prop it))
- lsp-ui-peek--list)))
-
-(defun lsp-ui-peek--remove-hidden (file)
- (setq lsp-ui-peek--list
- (--map-when (string= (plist-get (lsp-ui-peek--prop 'lsp-ui-peek it) :file) file)
- (prog1 it (lsp-ui-peek--add-prop '(lsp-ui-peek-hidden nil) it))
- lsp-ui-peek--list)))
-
-(defun lsp-ui-peek--make-ref-line (xref)
- (-let* (((&plist :summary summary :line line :file file) xref)
- (string (format "%-3s %s"
- (propertize (number-to-string (1+ line))
- 'face 'lsp-ui-peek-line-number)
- (string-trim summary))))
- (lsp-ui-peek--add-prop `(lsp-ui-peek ,xref file ,file) string)))
-
-(defun lsp-ui-peek--insert-xrefs (xrefs filename index)
- (setq lsp-ui-peek--list (--> (lsp-ui-peek--get-xrefs-in-file (cons filename xrefs))
- (-map 'lsp-ui-peek--make-ref-line it)
- (-insert-at (1+ index) it lsp-ui-peek--list)
- (-flatten it)))
- (lsp-ui-peek--add-prop '(xrefs nil)))
-
-(defun lsp-ui-peek--toggle-file (&optional no-update)
- (interactive)
- (-if-let* ((xrefs (lsp-ui-peek--prop 'xrefs))
- (filename (lsp-ui-peek--prop 'file))
- (index (--find-index (equal (lsp-ui-peek--prop 'file it) filename)
- lsp-ui-peek--list)))
- (lsp-ui-peek--insert-xrefs xrefs filename index)
- (let ((file (lsp-ui-peek--prop 'file)))
- (lsp-ui-peek--toggle-hidden file)
- (while (not (equal file (lsp-ui-peek--prop 'file)))
- (lsp-ui-peek--select-prev t))))
- (unless no-update
- (lsp-ui-peek--peek)))
-
-(defun lsp-ui-peek--select (index)
- (setq lsp-ui-peek--selection (+ lsp-ui-peek--selection index)))
-
-(defun lsp-ui-peek--select-next (&optional no-update)
- (interactive)
- (when (lsp-ui-peek--get-text-selection (1+ lsp-ui-peek--selection))
- (lsp-ui-peek--select 1)
- (while (> (lsp-ui-peek--visual-index) (- lsp-ui-peek-peek-height 2))
- (setq lsp-ui-peek--offset (1+ lsp-ui-peek--offset)))
- (unless no-update
- (lsp-ui-peek--peek))))
-
-(defun lsp-ui-peek--select-prev (&optional no-update)
- (interactive)
- (when (> lsp-ui-peek--selection 0)
- (lsp-ui-peek--select -1)
- (while (< (lsp-ui-peek--visual-index) 0)
- (setq lsp-ui-peek--offset (1- lsp-ui-peek--offset))))
- (unless no-update
- (lsp-ui-peek--peek)))
-
-(defun lsp-ui-peek--skip-refs (fn)
- (let ((last-file (lsp-ui-peek--prop 'file))
- last-selection)
- (when (lsp-ui-peek--get-selection)
- (while (and (equal (lsp-ui-peek--prop 'file) last-file)
- (not (equal last-selection lsp-ui-peek--selection)))
- (setq last-selection lsp-ui-peek--selection)
- (funcall fn t)))))
-
-(defun lsp-ui-peek--select-prev-file ()
- (interactive)
- (if (not (lsp-ui-peek--get-selection))
- (lsp-ui-peek--select-prev)
- (lsp-ui-peek--skip-refs 'lsp-ui-peek--select-prev)
- (when (lsp-ui-peek--get-selection)
- (lsp-ui-peek--skip-refs 'lsp-ui-peek--select-prev)
- (unless (= lsp-ui-peek--selection 0)
- (lsp-ui-peek--select-next t))))
- (if (lsp-ui-peek--prop 'xrefs)
- (lsp-ui-peek--toggle-file)
- (lsp-ui-peek--remove-hidden (lsp-ui-peek--prop 'file)))
- (lsp-ui-peek--select-next t)
- (lsp-ui-peek--recenter)
- (lsp-ui-peek--peek))
-
-(defun lsp-ui-peek--select-next-file ()
- (interactive)
- (lsp-ui-peek--skip-refs 'lsp-ui-peek--select-next)
- (if (lsp-ui-peek--prop 'xrefs)
- (lsp-ui-peek--toggle-file)
- (lsp-ui-peek--remove-hidden (lsp-ui-peek--prop 'file)))
- (lsp-ui-peek--select-next t)
- (lsp-ui-peek--recenter)
- (lsp-ui-peek--peek))
-
-(defun lsp-ui-peek--peek-hide ()
- "Hide the chunk of code and restore previous state."
- (when (overlayp lsp-ui-peek--overlay)
- (delete-overlay lsp-ui-peek--overlay))
- (setq lsp-ui-peek--overlay nil
- lsp-ui-peek--last-xref nil)
- (when lsp-ui-peek--win-start
- (set-window-start (get-buffer-window) lsp-ui-peek--win-start)))
-
-(defun lsp-ui-peek--deactivate-keymap ()
- "Deactivate keymap."
- (-when-let (fn lsp-ui-peek--deactivate-keymap-fn)
- (setq lsp-ui-peek--deactivate-keymap-fn nil)
- (funcall fn)))
-
-(defun lsp-ui-peek--goto-xref (&optional x other-window)
- "Go to a reference/definition."
- (interactive)
- (-if-let (xref (or x (lsp-ui-peek--get-selection)))
- (-let (((&plist :file file :line line :column column) xref)
- (buffer (current-buffer)))
- (if (not (file-readable-p file))
- (user-error "File not readable: %s" file)
- (setq lsp-ui-peek--win-start nil)
- (lsp-ui-peek--abort)
- (let ((marker (with-current-buffer
- (or (get-file-buffer file)
- (find-file-noselect file))
- (save-restriction
- (widen)
- (save-excursion
- ;; When we jump to a file with line/column unspecified,
- ;; we do not want to move the point if the buffer exists.
- ;; We interpret line=column=0 differently here.
- (when (> (+ line column) 0)
- (goto-char 1)
- (forward-line line)
- (forward-char column))
- (point-marker)))))
- (cur-buffer-workspaces (and (boundp 'lsp--buffer-workspaces) lsp--buffer-workspaces)))
- (if other-window
- (pop-to-buffer (marker-buffer marker) t)
- (switch-to-buffer (marker-buffer marker)))
- (with-current-buffer buffer
- (lsp-ui-peek-mode -1))
- (unless lsp--buffer-workspaces
- (setq lsp--buffer-workspaces cur-buffer-workspaces)
- (lsp-mode 1)
- (dolist (workspace cur-buffer-workspaces)
- (lsp--open-in-workspace workspace)))
- (goto-char marker)
- (run-hooks 'xref-after-jump-hook))))
- (lsp-ui-peek--toggle-file)))
-
-(defun lsp-ui-peek--goto-xref-other-window ()
- (interactive)
- (lsp-ui-peek--goto-xref nil t))
-
-(defvar lsp-ui-peek-mode-map
- (let ((map (make-sparse-keymap)))
- (suppress-keymap map t)
- (define-key map "\e\e\e" 'lsp-ui-peek--abort)
- (define-key map "\C-g" 'lsp-ui-peek--abort)
- (define-key map (kbd "M-n") 'lsp-ui-peek--select-next-file)
- (define-key map (kbd "<right>") 'lsp-ui-peek--select-next-file)
- (define-key map (kbd "M-p") 'lsp-ui-peek--select-prev-file)
- (define-key map (kbd "<left>") 'lsp-ui-peek--select-prev-file)
- (define-key map (kbd "C-n") 'lsp-ui-peek--select-next)
- (define-key map (kbd "n") 'lsp-ui-peek--select-next)
- (define-key map (kbd "<down>") 'lsp-ui-peek--select-next)
- (define-key map (kbd "C-p") 'lsp-ui-peek--select-prev)
- (define-key map (kbd "p") 'lsp-ui-peek--select-prev)
- (define-key map (kbd "<up>") 'lsp-ui-peek--select-prev)
- (define-key map (kbd "TAB") 'lsp-ui-peek--toggle-file)
- (define-key map (kbd "q") 'lsp-ui-peek--abort)
- (define-key map (kbd "RET") 'lsp-ui-peek--goto-xref)
- (define-key map (kbd "M-RET") 'lsp-ui-peek--goto-xref-other-window)
- map)
- "Keymap for ‘lsp-ui-peek-mode’.")
-
-(defun lsp-ui-peek--disable ()
- "Do not call this function, call `lsp-ui-peek--abort' instead."
- (when (bound-and-true-p lsp-ui-peek-mode)
- (lsp-ui-peek-mode -1)
- (lsp-ui-peek--peek-hide)))
-
-(defun lsp-ui-peek--abort ()
- "Abort peek."
- (interactive)
- ;; The timer fixes https://github.com/emacs-lsp/lsp-ui/issues/33
- (run-with-idle-timer 0 nil 'lsp-ui-peek--disable))
-
-(define-minor-mode lsp-ui-peek-mode
- "Mode for lsp-ui-peek."
- :init-value nil
- (if lsp-ui-peek-mode
- (setq lsp-ui-peek--deactivate-keymap-fn (set-transient-map lsp-ui-peek-mode-map t 'lsp-ui-peek--abort))
- (lsp-ui-peek--deactivate-keymap)
- (lsp-ui-peek--peek-hide)))
-
-(defun lsp-ui-peek--find-xrefs (input method param)
- "Find INPUT references.
-METHOD is ‘references’, ‘definitions’, `implementation` or a custom kind.
-PARAM is the request params."
- (setq lsp-ui-peek--method method)
- (let ((xrefs (lsp-ui-peek--get-references method param)))
- (unless xrefs
- (user-error "Not found for: %s" input))
- (xref-push-marker-stack)
- (when (featurep 'evil-jumps)
- (lsp-ui-peek--with-evil-jumps (evil-set-jump)))
- (if (and (not lsp-ui-peek-always-show)
- (not (cdr xrefs))
- (= (length (plist-get (car xrefs) :xrefs)) 1))
- (let ((x (car (plist-get (car xrefs) :xrefs))))
- (-if-let (uri (lsp:location-uri x))
- (-let (((&Range :start (&Position :line :character)) (lsp:location-range x)))
- (lsp-ui-peek--goto-xref `(:file ,(lsp--uri-to-path uri) :line ,line :column ,character)))
- (-let (((&Range :start (&Position :line :character)) (or (lsp:location-link-target-selection-range x)
- (lsp:location-link-target-range x))))
- (lsp-ui-peek--goto-xref `(:file ,(lsp--uri-to-path (lsp:location-link-target-uri x)) :line ,line :column ,character)))))
- (lsp-ui-peek-mode)
- (lsp-ui-peek--show xrefs))))
-
-(defun lsp-ui-peek-find-references (&optional include-declaration extra)
- "Find references to the IDENTIFIER at point."
- (interactive)
- (lsp-ui-peek--find-xrefs (symbol-at-point) "textDocument/references"
- (append extra (lsp--make-reference-params nil include-declaration))))
-
-(defun lsp-ui-peek-find-definitions (&optional extra)
- "Find definitions to the IDENTIFIER at point."
- (interactive)
- (lsp-ui-peek--find-xrefs (symbol-at-point) "textDocument/definition"
- (append extra (lsp--text-document-position-params))))
-
-(defun lsp-ui-peek-find-implementation (&optional extra)
- "Find implementation locations of the symbol at point."
- (interactive)
- (lsp-ui-peek--find-xrefs (symbol-at-point) "textDocument/implementation"
- (append extra (lsp--text-document-position-params))))
-
-(defun lsp-ui-peek-find-workspace-symbol (pattern &optional extra)
- "Find symbols in the worskpace.
-The symbols are found matching PATTERN."
- (interactive (list (read-string "workspace/symbol: "
- nil 'xref--read-pattern-history)))
- (lsp-ui-peek--find-xrefs pattern "workspace/symbol"
- (append extra (lsp-make-workspace-symbol-params :query pattern))))
-
-(defun lsp-ui-peek-find-custom (method &optional extra)
- "Find custom references.
-KIND is a symbol to name the references (definition, reference, ..).
-REQUEST is the method string to send the the language server.
-EXTRA is a plist of extra parameters."
- (lsp-ui-peek--find-xrefs (symbol-at-point) method
- (append extra (lsp--text-document-position-params))))
-
-(defun lsp-ui-peek--extract-chunk-from-buffer (pos start end)
- "Return the chunk of code pointed to by POS (a Position object) in the current buffer.
-START and END are delimiters."
- (let* ((point (lsp--position-to-point pos))
- (inhibit-field-text-motion t)
- (line-start (1+ (- 1 (/ lsp-ui-peek-peek-height 2))))
- (line-end (/ lsp-ui-peek-peek-height 2)))
- (save-excursion
- (goto-char point)
- (let* ((before (buffer-substring (line-beginning-position line-start) (line-beginning-position)))
- (line (buffer-substring (line-beginning-position) (line-end-position)))
- (after (buffer-substring (line-end-position) (line-end-position line-end)))
- (len (length line))
- (chunk (concat before line after))
- (start-in-chunk (length before)))
-
- (when (eq lsp-ui-peek-fontify 'on-demand)
- (setq chunk (lsp-ui-peek--render lsp--peek-save-major-mode chunk)))
-
- (remove-text-properties (+ (min start len) start-in-chunk)
- (+ (if (null end) len (min end len)) start-in-chunk) '(face nil)
- chunk)
-
- (add-face-text-property (+ (min start len) start-in-chunk)
- (+ (if (null end) len (min end len)) start-in-chunk)
- 'lsp-ui-peek-highlight t chunk)
-
- `(,(substring chunk start-in-chunk (+ start-in-chunk len)) . ,chunk)))))
-
-(defun lsp-ui-peek--xref-make-item (filename loc)
- "Return an item from FILENAME given a LOC.
-LOCATION can be either a LSP Location or SymbolInformation."
- ;; TODO: Read more informations from SymbolInformation.
- ;; For now, only the location is used.
- (-let* ((loc (or (lsp:symbol-information-location loc) loc))
- (range (or (lsp:location-range loc)
- (lsp:location-link-target-selection-range loc)
- (lsp:location-link-target-range loc)))
- ((&Range :start pos-start :end pos-end) range)
- ((&Position :line start-line :character start-col) pos-start)
- ((&Position :line end-line :character end-col) pos-end)
- ((line . chunk) (lsp-ui-peek--extract-chunk-from-buffer pos-start start-col
- (when (= start-line end-line) end-col))))
- (list :summary (or line filename)
- :chunk (or chunk filename)
- :file filename
- :line start-line
- :column start-col)))
-
-(defun lsp-ui-peek--fontify-buffer (filename)
- (when (eq lsp-ui-peek-fontify 'always)
- (unless buffer-file-name
- (make-local-variable 'delay-mode-hooks)
- (let ((buffer-file-name filename)
- (enable-local-variables nil)
- (inhibit-message t)
- (delay-mode-hooks t))
- (set-auto-mode)))
- (font-lock-ensure)))
-
-(defun lsp-ui-peek--get-xrefs-in-file (file)
- "Return all references that contain a file.
-FILE is a cons where its car is the filename and the cdr is a list of Locations
-within the file. We open and/or create the file/buffer only once for all
-references. The function returns a list of `ls-xref-item'."
- (let* ((filename (car file))
- (visiting (find-buffer-visiting filename))
- (fn (lambda (loc) (lsp-ui-peek--xref-make-item filename loc))))
- (setq lsp--peek-save-major-mode major-mode)
- (cond
- (visiting
- (with-temp-buffer
- (insert-buffer-substring-no-properties visiting)
- (lsp-ui-peek--fontify-buffer filename)
- (mapcar fn (cdr file))))
- ((file-readable-p filename)
- (with-temp-buffer
- (insert-file-contents-literally filename)
- (lsp-ui-peek--fontify-buffer filename)
- (mapcar fn (cdr file))))
- (t (user-error "Cannot read %s" filename)))))
-
-(defun lsp-ui-peek--get-xrefs-list (file)
- "Return a list of xrefs in FILE."
- (-let* (((filename . xrefs) file))
- `(:file ,filename :xrefs ,xrefs :count ,(length xrefs))))
-
-(defun lsp-ui-peek--get-references (method params)
- "Get all references/definitions for the symbol under point.
-Returns item(s)."
- (-when-let* ((locs (lsp-request method params))
- (locs (if (listp locs)
- locs
- (if (vectorp locs)
- (append locs nil)
- (list locs)))))
- (-filter
- (-lambda ((&plist :file))
- (or (f-file? file)
- (ignore
- (lsp-log "The following file %s is missing, ignoring from the results."
- file))))
- (mapcar #'lsp-ui-peek--get-xrefs-list
- (if (lsp:location-uri (car locs))
- ;; Location[]
- (--group-by (lsp--uri-to-path (lsp:location-uri it)) locs)
- ;; LocationLink[]
- (--group-by (lsp--uri-to-path (lsp:location-link-target-uri it)) locs))))))
-
-(defvar lsp-ui-mode-map)
-
-(defun lsp-ui-peek-enable (_enable)
- (interactive)
- (unless (bound-and-true-p lsp-ui-mode-map)
- (user-error "Please load lsp-ui before trying to enable lsp-ui-peek")))
-
-;; lsp-ui.el loads lsp-ui-peek.el, so we can’t ‘require’ lsp-ui.
-;; FIXME: Remove this cyclic dependency.
-(declare-function lsp-ui--workspace-path "lsp-ui" (path))
-
-(declare-function evil-set-jump "ext:evil-jumps.el" (&optional pos))
-
-(provide 'lsp-ui-peek)
-;;; lsp-ui-peek.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-pkg.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-pkg.el
deleted file mode 100644
index 4b3ae0a..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-pkg.el
+++ /dev/null
@@ -1,15 +0,0 @@
-(define-package "lsp-ui" "20210718.445" "UI modules for lsp-mode"
- '((emacs "26.1")
- (dash "2.18.0")
- (lsp-mode "6.0")
- (markdown-mode "2.3"))
- :commit "f0e1bb9668da952e62e7a81058b0ebc8e0700a17" :authors
- '(("Sebastien Chapuis <sebastien@chapu.is>, Fangrui Song" . "i@maskray.me"))
- :maintainer
- '("Sebastien Chapuis <sebastien@chapu.is>, Fangrui Song" . "i@maskray.me")
- :keywords
- '("languages" "tools")
- :url "https://github.com/emacs-lsp/lsp-ui")
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-sideline.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-sideline.el
deleted file mode 100644
index d348f02..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-sideline.el
+++ /dev/null
@@ -1,768 +0,0 @@
-;;; lsp-ui-sideline.el --- Lsp-Ui-Sideline -*- lexical-binding: t -*-
-
-;; Copyright (C) 2017 Sebastien Chapuis
-
-;; Author: Sebastien Chapuis <sebastien@chapu.is>
-;; URL: https://github.com/emacs-lsp/lsp-ui
-;; Keywords: languages, tools
-;; Version: 6.2
-
-;;; License
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-;;
-;; Utility to show information for the current line
-
-;;; Code:
-
-(require 'lsp-ui-util)
-(require 'lsp-protocol)
-(require 'lsp-mode)
-(require 'flycheck nil 'noerror)
-(require 'dash)
-(require 'seq)
-(require 'subr-x)
-(require 'face-remap)
-
-(defvar flycheck-display-errors-function)
-(declare-function flycheck-overlay-errors-in "ext:flycheck.el")
-(declare-function flycheck-error-format-message-and-id "ext:flycheck.el")
-(declare-function flycheck-error-level "ext:flycheck.el")
-
-(defgroup lsp-ui-sideline nil
- "Display information for the current line."
- :group 'tools
- :group 'convenience
- :group 'lsp-ui
- :link '(custom-manual "(lsp-ui-sideline) Top")
- :link '(info-link "(lsp-ui-sideline) Customizing"))
-
-(defcustom lsp-ui-sideline-enable t
- "Whether or not to enable ‘lsp-ui-sideline’."
- :type 'boolean
- :group 'lsp-ui)
-
-(defcustom lsp-ui-sideline-ignore-duplicate nil
- "Ignore duplicates when there is a same symbol with the same contents."
- :type 'boolean
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-show-symbol t
- "When t, show the symbol name on the right of the information."
- :type 'boolean
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-show-hover nil
- "Whether to show hover messages in sideline."
- :type 'boolean
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-show-diagnostics t
- "Whether to show diagnostics messages in sideline."
- :type 'boolean
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-show-code-actions t
- "Whether to show code actions in sideline."
- :type 'boolean
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-update-mode 'point
- "Define the mode for updating sideline actions.
-
-When set to `line' the actions will be updated when user
-changes current line otherwise the actions will be updated
-when user changes current point."
- :type '(choice (const line)
- (const point))
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-delay 0.2
- "Number of seconds to wait before showing sideline."
- :type 'number
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-diagnostic-max-lines 1
- "Maximum number of lines to show of diagnostics in sideline."
- :type 'integer
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-diagnostic-max-line-length 100
- "Maximum line length of diagnostics in sideline."
- :type 'integer
- :group 'lsp-ui-sideline)
-
-(defconst lsp-ui-sideline-actions-icon-default
- (and (bound-and-true-p lsp-ui-resources-dir)
- (image-type-available-p 'png)
- (expand-file-name "lightbulb.png" lsp-ui-resources-dir)))
-
-;; TODO: Set the default actions to `nil' temporarily due to image
-;; scale issue on Emacs version 26.3 or below.
-;;
-;; See #573
-(defcustom lsp-ui-sideline-actions-icon nil
- "Image file for actions. It must be a png file."
- :type '(choice file (const :tag "Disable" nil))
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-wait-for-all-symbols t
- "Wait for all symbols before displaying info in sideline."
- :type 'boolean
- :group 'lsp-ui-sideline)
-
-(defcustom lsp-ui-sideline-actions-kind-regex "quickfix.*\\|refactor.*"
- "Regex for the code actions kinds to show in the sideline."
- :type 'string
- :group 'lsp-ui-sideline)
-
-(defvar lsp-ui-sideline-code-actions-prefix ""
- "Prefix to insert before the code action title.
-This can be used to insert, for example, an unicode character: 💡")
-
-(defvar-local lsp-ui-sideline--ovs nil
- "Overlays used by `lsp-ui-sideline'.")
-
-(defvar-local lsp-ui-sideline--occupied-lines nil
- "List of lines occupied by an overlay of `lsp-ui-sideline'.")
-
-(defvar-local lsp-ui-sideline--first-line-pushed nil
- "Record weather if we display sideline in the first line.
-
-If we do, then sideline will always look downward instead of the upward
-direction.
-
-This prevent sideline displays below than the first line, which it will cause
-weird looking user interface.")
-
-(defvar-local lsp-ui-sideline--tag nil
- "Tag marking where the last operation was based.
-It is used to know when the cursor has changed its line or point.")
-
-(defvar-local lsp-ui-sideline--last-width nil
- "Value of window's width on the last operation.
-It is used to know when the window has changed of width.")
-
-(defvar-local lsp-ui-sideline--last-line-number nil
- "Line number on the last operation.
-Used to avoid calling `line-number-at-pos' when we're on the same line.")
-
-(defvar-local lsp-ui-sideline--timer nil)
-
-(defvar-local lsp-ui-sideline--code-actions nil
- "Holds the latest code actions.")
-
-(defvar-local lsp-ui-sideline--cached-infos nil
- "Cache of rendered line when `lsp-ui-sideline-wait-for-all-symbols'
-is nil. Used to not re-render the same line multiple times.")
-
-(defface lsp-ui-sideline-symbol
- '((t :foreground "grey"
- :box (:line-width -1 :color "grey")
- :height 0.99))
- "Face used to highlight symbols."
- :group 'lsp-ui-sideline)
-
-(defface lsp-ui-sideline-current-symbol
- '((((background light))
- :foreground "black"
- :weight ultra-bold
- :box (:line-width -1 :color "black")
- :height 0.99)
- (t :foreground "white"
- :weight ultra-bold
- :box (:line-width -1 :color "white")
- :height 0.99))
- "Face used to highlight the symbol on point."
- :group 'lsp-ui-sideline)
-
-(defface lsp-ui-sideline-code-action
- '((((background light)) :foreground "DarkOrange")
- (t :foreground "yellow"))
- "Face used to highlight code action text."
- :group 'lsp-ui-sideline)
-
-(defface lsp-ui-sideline-symbol-info
- '((t :slant italic :height 0.99))
- "Face used to highlight the symbols informations (LSP hover)."
- :group 'lsp-ui-sideline)
-
-(defface lsp-ui-sideline-global
- '((t))
- "Face which apply to all overlays.
-This face have a low priority over the others."
- :group 'lsp-ui-sideline)
-
-(defun lsp-ui-sideline--first-line-p (pos)
- "Return non-nil if POS is on the first line."
- (when (integerp pos)
- (save-excursion (goto-char 1) (forward-line 1) (> (point) pos))))
-
-(defun lsp-ui-sideline--calc-space (win-width str-len index)
- "Calculate whether there is enough space on line.
-If there is enough space, it returns the point of the last
-character on the line.
-
-WIN-WIDTH is the window width.
-STR-LEN is the string size.
-INDEX is the line number (relative to the current line)."
- (let ((eol (line-end-position index)))
- (unless (member eol lsp-ui-sideline--occupied-lines)
- (save-excursion
- (goto-char eol)
- (end-of-line)
- (when (>= (- win-width (current-column)) str-len)
- eol)))))
-
-(defun lsp-ui-sideline--find-line (str-len bol eol &optional up offset)
- "Find a line where the string can be inserted.
-
-It loops on the nexts lines to find enough space. Returns the point
-of the last character on the line.
-
-Argument STR-LEN is the string size.
-Argument BOL and EOL are beginning and ending of the user point line.
-If optional argument UP is non-nil, it loops on the previous lines.
-If optional argument OFFSET is non-nil, it starts search OFFSET lines
-from user point line."
- (let ((win-width (lsp-ui-sideline--window-width))
- (inhibit-field-text-motion t)
- (index (if (null offset) 1 offset))
- pos)
- (while (and (null pos) (<= (abs index) 30))
- (setq index (if up (1- index) (1+ index)))
- (setq pos (lsp-ui-sideline--calc-space win-width str-len index)))
- (if (and up (or (null pos) (and (<= pos 1) lsp-ui-sideline--first-line-pushed)))
- (lsp-ui-sideline--find-line str-len bol eol nil offset)
- (when (and (null lsp-ui-sideline--first-line-pushed)
- (lsp-ui-sideline--first-line-p pos))
- (setq lsp-ui-sideline--first-line-pushed t)) ; mark first line push
- (and pos (or (> pos eol) (< pos bol))
- (push pos lsp-ui-sideline--occupied-lines)
- (list pos (1- index))))))
-
-(defun lsp-ui-sideline--delete-ov ()
- "Delete overlays."
- (seq-do 'delete-overlay lsp-ui-sideline--ovs)
- (setq lsp-ui-sideline--tag nil
- lsp-ui-sideline--cached-infos nil
- lsp-ui-sideline--occupied-lines nil
- lsp-ui-sideline--first-line-pushed (lsp-ui-sideline--first-line-p (point))
- lsp-ui-sideline--ovs nil))
-
-(defun lsp-ui-sideline--extract-info (contents)
- "Extract the line to print from CONTENTS.
-CONTENTS can be differents type of values:
-MarkedString | MarkedString[] | MarkupContent (as defined in the LSP).
-We prioritize string with a language (which is probably a type or a
-function signature)."
- (when contents
- (cond
- ((lsp-marked-string? contents) contents)
- ((vectorp contents)
- (seq-find (lambda (it) (and (lsp-marked-string? it)
- (lsp-get-renderer (lsp:marked-string-language it))))
- contents))
- ((lsp-markup-content? contents) contents))))
-
-(defun lsp-ui-sideline--format-info (marked-string win-width)
- "Format MARKED-STRING.
-If the string has a language, we fontify it with the function provided
-by `lsp-mode'.
-MARKED-STRING is the string returned by `lsp-ui-sideline--extract-info'."
- (when (and marked-string (or (lsp-marked-string? marked-string) (lsp-markup-content? marked-string)))
- (setq marked-string (lsp--render-element marked-string))
- (add-face-text-property 0 (length marked-string) 'lsp-ui-sideline-symbol-info nil marked-string)
- (add-face-text-property 0 (length marked-string) 'default t marked-string)
- (->> (if (> (length marked-string) (/ win-width 2))
- (car (split-string (string-trim-left marked-string) "[\r\n]+"))
- marked-string)
- (replace-regexp-in-string "[\n\r\t ]+" " "))))
-
-(defun lsp-ui-sideline--align (&rest lengths)
- "Align sideline string by LENGTHS from the right of the window."
- (+ (apply '+ lengths)
- (if (display-graphic-p) 1 2)))
-
-(defun lsp-ui-sideline--compute-height nil
- "Return a fixed size for text in sideline."
- (if (null text-scale-mode-remapping)
- '(height 1)
- ;; Readjust height when text-scale-mode is used
- (list 'height
- (/ 1 (or (plist-get (cdr text-scale-mode-remapping) :height)
- 1)))))
-
-(defun lsp-ui-sideline--make-display-string (info symbol current)
- "Make final string to display in buffer.
-INFO is the information to display.
-SYMBOL is the symbol associated with the info.
-CURRENT is non-nil when the point is on the symbol."
- (let* ((face (if current 'lsp-ui-sideline-current-symbol 'lsp-ui-sideline-symbol))
- (str (if lsp-ui-sideline-show-symbol
- (concat info " " (propertize (concat " " symbol " ") 'face face))
- info))
- (len (length str))
- (margin (lsp-ui-sideline--margin-width)))
- (add-face-text-property 0 len 'lsp-ui-sideline-global nil str)
- (concat
- (propertize " " 'display `(space :align-to (- right-fringe ,(lsp-ui-sideline--align len margin))))
- (propertize str 'display (lsp-ui-sideline--compute-height)))))
-
-(defun lsp-ui-sideline--check-duplicate (symbol info)
- "Check if there's already a SYMBOL containing INFO, unless `lsp-ui-sideline-ignore-duplicate'
-is set to t."
- (not (when lsp-ui-sideline-ignore-duplicate
- (--any (and (string= (overlay-get it 'symbol) symbol)
- (string= (overlay-get it 'info) info))
- lsp-ui-sideline--ovs))))
-
-(defun lsp-ui-sideline--margin-width ()
- (+ (if fringes-outside-margins right-margin-width 0)
- (or (and (boundp 'fringe-mode)
- (consp fringe-mode)
- (or (equal (car fringe-mode) 0)
- (equal (cdr fringe-mode) 0))
- 1)
- (and (boundp 'fringe-mode) (equal fringe-mode 0) 1)
- 0)
- (let ((win-fringes (window-fringes)))
- (if (or (equal (car win-fringes) 0)
- (equal (cadr win-fringes) 0))
- 2
- 0))
- (if (< emacs-major-version 27)
- ;; This was necessary with emacs < 27, recent versions take
- ;; into account the display-line width with :align-to
- (lsp-ui-util-line-number-display-width)
- 0)
- (if (or
- (bound-and-true-p whitespace-mode)
- (bound-and-true-p global-whitespace-mode))
- 1
- 0)))
-
-(defun lsp-ui-sideline--window-width ()
- (- (min (window-text-width) (window-body-width))
- (lsp-ui-sideline--margin-width)
- (or (and (>= emacs-major-version 27)
- ;; We still need this number when calculating available space
- ;; even with emacs >= 27
- (lsp-ui-util-line-number-display-width))
- 0)))
-
-(defun lsp-ui-sideline--valid-tag-p (tag mode)
- (when tag
- (-let ((inhibit-field-text-motion t)
- ((p bol _eol buffer) tag))
- (when (and (= bol (line-beginning-position))
- (eq buffer (current-buffer)))
- (pcase mode
- ('point (eq p (point)))
- ('line t) ;; For 'line only bol is relevant
- (_ (error "Wrong tag mode")))))))
-
-(defun lsp-ui-sideline--display-all-info (list-infos tag bol eol)
- (when (and (lsp-ui-sideline--valid-tag-p tag 'line)
- (not (lsp-ui-sideline--stop-p)))
- (let ((inhibit-modification-hooks t)
- (win-width (window-body-width))
- ;; sort by bounds
- (list-infos (--sort (< (caadr it) (caadr other)) list-infos)))
- (lsp-ui-sideline--delete-kind 'info)
- (--each list-infos
- (-let (((symbol bounds info) it))
- (lsp-ui-sideline--push-info win-width symbol bounds info bol eol))))))
-
-(defun lsp-ui-sideline--push-info (win-width symbol bounds info bol eol)
- (let* ((markdown-hr-display-char nil)
- (info (or (alist-get info lsp-ui-sideline--cached-infos)
- (-some--> (lsp:hover-contents info)
- (lsp-ui-sideline--extract-info it)
- (lsp-ui-sideline--format-info it win-width)
- (progn (push (cons info it) lsp-ui-sideline--cached-infos) it))))
- (current (and (>= (point) (car bounds)) (<= (point) (cdr bounds)))))
- (when (and (> (length info) 0)
- (lsp-ui-sideline--check-duplicate symbol info))
- (let* ((final-string (lsp-ui-sideline--make-display-string info symbol current))
- (pos-ov (lsp-ui-sideline--find-line (length final-string) bol eol))
- (ov (when pos-ov (make-overlay (car pos-ov) (car pos-ov)))))
- (when pos-ov
- (overlay-put ov 'info info)
- (overlay-put ov 'symbol symbol)
- (overlay-put ov 'bounds bounds)
- (overlay-put ov 'current current)
- (overlay-put ov 'after-string final-string)
- (overlay-put ov 'before-string " ")
- (overlay-put ov 'window (get-buffer-window))
- (overlay-put ov 'kind 'info)
- (overlay-put ov 'position (car pos-ov))
- (push ov lsp-ui-sideline--ovs))))))
-
-(defun lsp-ui-sideline--toggle-current (ov current)
- "Toggle the OV face according to CURRENT."
- (let* ((info (overlay-get ov 'info))
- (symbol (overlay-get ov 'symbol))
- (string (lsp-ui-sideline--make-display-string info symbol current)))
- (overlay-put ov 'current current)
- (overlay-put ov 'after-string string)))
-
-(defun lsp-ui-sideline--highlight-current (point)
- "Update the symbol's face according to POINT."
- (dolist (ov lsp-ui-sideline--ovs)
- (let* ((bounds (overlay-get ov 'bounds))
- (start (car bounds))
- (end (cdr bounds)))
- (if (and bounds (>= point start) (<= point end))
- (unless (overlay-get ov 'current)
- (lsp-ui-sideline--toggle-current ov t))
- (when (overlay-get ov 'current)
- (lsp-ui-sideline--toggle-current ov nil))))))
-
-(defun lsp-ui-sideline--split-long-lines (lines)
- "Fill LINES so that they are not longer than `lsp-ui-sideline-diagnostic-max-line-length' characters."
- (cl-mapcan (lambda (line)
- (if (< (length line) lsp-ui-sideline-diagnostic-max-line-length)
- (list line)
- (with-temp-buffer
- (let ((fill-column lsp-ui-sideline-diagnostic-max-line-length))
- (insert line)
- (fill-region (point-min) (point-max))
- (split-string (buffer-string) "\n")))))
- lines))
-
-(defun lsp-ui-sideline--diagnostics (buffer bol eol)
- "Show diagnostics belonging to the current line.
-Loop over flycheck errors with `flycheck-overlay-errors-in'.
-Find appropriate position for sideline overlays with `lsp-ui-sideline--find-line'.
-Push sideline overlays on `lsp-ui-sideline--ovs'."
- (when (and (bound-and-true-p flycheck-mode)
- (bound-and-true-p lsp-ui-sideline-mode)
- lsp-ui-sideline-show-diagnostics
- (eq (current-buffer) buffer))
- (lsp-ui-sideline--delete-kind 'diagnostics)
- (dolist (e (flycheck-overlay-errors-in bol (1+ eol)))
- (let* ((lines (--> (flycheck-error-format-message-and-id e)
- (split-string it "\n")
- (lsp-ui-sideline--split-long-lines it)))
- (display-lines (butlast lines (- (length lines) lsp-ui-sideline-diagnostic-max-lines)))
- (offset 1))
- (dolist (line (nreverse display-lines))
- (let* ((msg (string-trim (replace-regexp-in-string "[\t ]+" " " line)))
- (msg (replace-regexp-in-string " " " " msg))
- (len (length msg))
- (level (flycheck-error-level e))
- (face (if (eq level 'info) 'success level))
- (margin (lsp-ui-sideline--margin-width))
- (msg (progn (add-face-text-property 0 len 'lsp-ui-sideline-global nil msg)
- (add-face-text-property 0 len face nil msg)
- msg))
- (string (concat (propertize " " 'display `(space :align-to (- right-fringe ,(lsp-ui-sideline--align len margin))))
- (propertize msg 'display (lsp-ui-sideline--compute-height))))
- (pos-ov (lsp-ui-sideline--find-line len bol eol t offset))
- (ov (and pos-ov (make-overlay (car pos-ov) (car pos-ov)))))
- (when pos-ov
- (setq offset (1+ (car (cdr pos-ov))))
- (overlay-put ov 'after-string string)
- (overlay-put ov 'kind 'diagnostics)
- (overlay-put ov 'before-string " ")
- (overlay-put ov 'position (car pos-ov))
- (push ov lsp-ui-sideline--ovs))))))))
-
-(defun lsp-ui-sideline-apply-code-actions nil
- "Choose and apply code action(s) on the current line."
- (interactive)
- (unless lsp-ui-sideline--code-actions
- (user-error "No code actions on the current line"))
- (lsp-execute-code-action (lsp--select-action lsp-ui-sideline--code-actions)))
-
-(defun lsp-ui-sideline-set-default-icon ()
- "Set default icon for sideline actions."
- (setq lsp-ui-sideline-actions-icon lsp-ui-sideline-actions-icon-default))
-
-(defun lsp-ui-sideline--scale-lightbulb (height)
- "Scale the lightbulb image to character height.
-
-Argument HEIGHT is an actual image height in pixel."
- (--> (- (frame-char-height) 1)
- (/ (float it) height)))
-
-(defun lsp-ui-sideline--code-actions-make-image nil
- (let ((is-default (equal lsp-ui-sideline-actions-icon lsp-ui-sideline-actions-icon-default)))
- (--> `(image :type png :file ,lsp-ui-sideline-actions-icon :ascent center)
- (append it `(:scale ,(->> (cond (is-default 128)
- ((fboundp 'image-size) (cdr (image-size it t)))
- (t (error "Function image-size undefined. Use default icon")))
- (lsp-ui-sideline--scale-lightbulb)))))))
-
-(defun lsp-ui-sideline--code-actions-image nil
- (when lsp-ui-sideline-actions-icon
- (with-demoted-errors "[lsp-ui-sideline]: Error with actions icon: %s"
- (concat
- (propertize " " 'display (lsp-ui-sideline--code-actions-make-image))
- (propertize " " 'display '(space :width 0.3))))))
-
-(defun lsp-ui-sideline--code-actions (actions bol eol)
- "Show code ACTIONS."
- (let ((inhibit-modification-hooks t))
- (when lsp-ui-sideline-actions-kind-regex
- (setq actions (seq-filter (-lambda ((&CodeAction :kind?))
- (or (not kind?)
- (s-match lsp-ui-sideline-actions-kind-regex kind?)))
- actions)))
- (setq lsp-ui-sideline--code-actions actions)
- (lsp-ui-sideline--delete-kind 'actions)
- (seq-doseq (action actions)
- (-let* ((title (->> (lsp:code-action-title action)
- (replace-regexp-in-string "[\n\t ]+" " ")
- (replace-regexp-in-string " " " ")
- (concat (unless lsp-ui-sideline-actions-icon
- lsp-ui-sideline-code-actions-prefix))))
- (image (lsp-ui-sideline--code-actions-image))
- (margin (lsp-ui-sideline--margin-width))
- (keymap (let ((map (make-sparse-keymap)))
- (define-key map [down-mouse-1] (lambda () (interactive)
- (save-excursion
- (lsp-execute-code-action action))))
- map))
- (len (length title))
- (title (progn (add-face-text-property 0 len 'lsp-ui-sideline-global nil title)
- (add-face-text-property 0 len 'lsp-ui-sideline-code-action nil title)
- (add-text-properties 0 len `(keymap ,keymap mouse-face highlight) title)
- title))
- (string (concat (propertize " " 'display `(space :align-to (- right-fringe ,(lsp-ui-sideline--align (+ len (length image)) margin))))
- image
- (propertize title 'display (lsp-ui-sideline--compute-height))))
- (pos-ov (lsp-ui-sideline--find-line (+ 1 (length title) (length image)) bol eol t))
- (ov (and pos-ov (make-overlay (car pos-ov) (car pos-ov)))))
- (when pos-ov
- (overlay-put ov 'after-string string)
- (overlay-put ov 'before-string " ")
- (overlay-put ov 'kind 'actions)
- (overlay-put ov 'position (car pos-ov))
- (push ov lsp-ui-sideline--ovs))))))
-
-(defun lsp-ui-sideline--calculate-tag nil
- "Calculate the tag used to determine whether to update sideline information."
- (let ((inhibit-field-text-motion t))
- (list (point) (line-beginning-position) (line-end-position) (current-buffer))))
-
-(defun lsp-ui-sideline--delete-kind (kind)
- (->> (--remove
- (when (eq (overlay-get it 'kind) kind)
- (--> (overlay-get it 'position)
- (remq it lsp-ui-sideline--occupied-lines)
- (setq lsp-ui-sideline--occupied-lines it))
- (delete-overlay it)
- t)
- lsp-ui-sideline--ovs)
- (setq lsp-ui-sideline--ovs)))
-
-(defvar-local lsp-ui-sideline--last-tick-info nil)
-(defvar-local lsp-ui-sideline--previous-line nil)
-
-(defun lsp-ui-sideline--get-line (bol eol)
- (buffer-substring-no-properties bol eol))
-
-(defun lsp-ui-sideline--line-diags (line)
- (->> (--filter
- (let ((range (lsp-get it :range)))
- (or (-some-> range (lsp-get :start) (lsp-get :line) (= line))
- (-some-> range (lsp-get :end) (lsp-get :line) (= line))))
- (lsp--get-buffer-diagnostics))
- (apply 'vector)))
-
-(defun lsp-ui-sideline--run (&optional buffer bol eol this-line)
- "Show information (flycheck + lsp).
-It loops on the symbols of the current line and requests information
-from the language server."
- (when buffer-file-name
- (let* ((inhibit-field-text-motion t)
- (tag (lsp-ui-sideline--calculate-tag))
- (eol (or eol (nth 2 tag)))
- (bol (or bol (nth 1 tag)))
- (this-tick (buffer-modified-tick))
- (line-changed (not (lsp-ui-sideline--valid-tag-p lsp-ui-sideline--tag 'line)))
- (line-widen (or (and (not line-changed) lsp-ui-sideline--last-line-number)
- (and (buffer-narrowed-p) (save-restriction (widen) (line-number-at-pos)))
- (line-number-at-pos)))
- (new-tick (unless line-changed (not (equal this-tick lsp-ui-sideline--last-tick-info))))
- (this-line (or this-line (lsp-ui-sideline--get-line bol eol)))
- (line-modified (and new-tick (not (equal this-line lsp-ui-sideline--previous-line))))
- (doc-id (lsp--text-document-identifier))
- (inhibit-modification-hooks t)
- symbols)
- (setq lsp-ui-sideline--tag tag
- lsp-ui-sideline--last-line-number line-widen
- lsp-ui-sideline--last-width (window-text-width))
- (when (and line-changed lsp-ui-sideline-show-diagnostics)
- (lsp-ui-sideline--diagnostics buffer bol eol))
- (when (and lsp-ui-sideline-show-code-actions
- (or (lsp--capability "codeActionProvider")
- (lsp--registered-capability "textDocument/codeAction")))
- (lsp-request-async
- "textDocument/codeAction"
- (-let (((start . end) (if (eq lsp-ui-sideline-update-mode 'line)
- (cons 0 (- eol bol))
- (--> (- (point) bol) (cons it it)))))
- (list :textDocument doc-id
- :range (list :start (list :line (1- line-widen) :character start)
- :end (list :line (1- line-widen) :character end))
- :context (list :diagnostics (lsp-ui-sideline--line-diags (1- line-widen)))))
- (lambda (actions)
- (when (eq (current-buffer) buffer)
- (lsp-ui-sideline--code-actions actions bol eol)))
- :mode 'tick
- :error-handler
- (lambda (&rest _)
- (lsp-ui-sideline--delete-kind 'actions))
- :cancel-token :lsp-ui-code-actions))
- ;; Go through all symbols and request hover information. Note that the symbols are
- ;; traversed backwards as `forward-symbol' with a positive argument will jump just past the
- ;; current symbol. By going from the end of the line towards the front, point will be placed
- ;; at the beginning of each symbol. As the requests are first collected in a list before
- ;; being processed they are still sent in order from left to right.
- (when (and lsp-ui-sideline-show-hover (or line-changed line-modified) (lsp--capability "hoverProvider"))
- (setq lsp-ui-sideline--last-tick-info this-tick
- lsp-ui-sideline--previous-line this-line)
- (save-excursion
- (goto-char eol)
- (while (and (> (point) bol)
- (progn (forward-symbol -1)
- (>= (point) bol)))
- (let* ((symbol (thing-at-point 'symbol t))
- (bounds (bounds-of-thing-at-point 'symbol))
- (parsing-state (syntax-ppss))
- (in-string (nth 3 parsing-state))
- (outside-comment (eq (nth 4 parsing-state) nil)))
- ;; Skip strings and comments
- (when (and symbol (not in-string) outside-comment)
- (push (list symbol bounds (list :line (1- line-widen) :character (- (point) bol))) symbols))))
- (if (null symbols)
- (lsp-ui-sideline--delete-kind 'info)
- (let ((length-symbols (length symbols))
- (current-index 0)
- list-infos)
- (--each symbols
- (-let (((symbol bounds position) it))
- (lsp-request-async
- "textDocument/hover"
- (lsp-make-hover-params :text-document doc-id :position position)
- (lambda (info)
- (cl-incf current-index)
- (and info (push (list symbol bounds info) list-infos))
- (when (or (= current-index length-symbols) (not lsp-ui-sideline-wait-for-all-symbols))
- (lsp-ui-sideline--display-all-info list-infos tag bol eol)))
- :error-handler
- (lambda (&rest _)
- (cl-incf current-index)
- (when (or (= current-index length-symbols) (not lsp-ui-sideline-wait-for-all-symbols))
- (lsp-ui-sideline--display-all-info list-infos tag bol eol)))
- :mode 'tick))))))))))
-
-(defun lsp-ui-sideline--stop-p ()
- "Return non-nil if the sideline should not be display."
- (or (region-active-p)
- (bound-and-true-p company-pseudo-tooltip-overlay)
- (bound-and-true-p lsp-ui-peek--overlay)))
-
-(defun lsp-ui-sideline--hide-before-company (command)
- "Disable the sideline before company's overlay appears.
-COMMAND is `company-pseudo-tooltip-frontend' parameter."
- (when (memq command '(post-command update))
- (lsp-ui-sideline--delete-ov)))
-
-(defun lsp-ui-sideline ()
- "Show information for the current line."
- (if (lsp-ui-sideline--stop-p)
- (lsp-ui-sideline--delete-ov)
- (let* ((inhibit-field-text-motion t)
- (same-line (lsp-ui-sideline--valid-tag-p lsp-ui-sideline--tag 'line))
- (same-width (equal (window-text-width) lsp-ui-sideline--last-width))
- (new-tick (and same-line (not (equal (buffer-modified-tick) lsp-ui-sideline--last-tick-info))))
- (bol (and new-tick (line-beginning-position)))
- (eol (and new-tick (line-end-position)))
- (this-line (and new-tick (lsp-ui-sideline--get-line bol eol)))
- (unmodified (if new-tick (equal this-line lsp-ui-sideline--previous-line) t))
- (buffer (current-buffer))
- (point (point)))
- (cond ((and unmodified same-line same-width)
- (lsp-ui-sideline--highlight-current (point)))
- ((not (and same-line same-width))
- (lsp-ui-sideline--delete-ov)))
- (when lsp-ui-sideline--timer
- (cancel-timer lsp-ui-sideline--timer))
- (setq lsp-ui-sideline--timer
- (run-with-idle-timer
- lsp-ui-sideline-delay nil
- (lambda nil
- ;; run lsp-ui only if current-buffer is the same.
- (and (eq buffer (current-buffer))
- (= point (point))
- (lsp-ui-sideline--run buffer bol eol this-line))))))))
-
-(defun lsp-ui-sideline-toggle-symbols-info ()
- "Toggle display of symbols information.
-This does not toggle display of flycheck diagnostics or code actions."
- (interactive)
- (when (bound-and-true-p lsp-ui-sideline-mode)
- (setq lsp-ui-sideline-show-hover (not lsp-ui-sideline-show-hover))
- (lsp-ui-sideline--run (current-buffer))))
-
-(defun lsp-ui-sideline--diagnostics-changed ()
- "Handler for flycheck notifications."
- (when lsp-ui-sideline-show-diagnostics
- (let* ((buffer (current-buffer))
- (inhibit-field-text-motion t)
- (eol (line-end-position))
- (bol (line-beginning-position)))
- (lsp-ui-sideline--diagnostics buffer bol eol))))
-
-(defun lsp-ui-sideline--erase (&rest _)
- "Remove all sideline overlays and delete last tag."
- (when (bound-and-true-p lsp-ui-sideline-mode)
- (ignore-errors (lsp-ui-sideline--delete-ov))))
-
-(define-minor-mode lsp-ui-sideline-mode
- "Minor mode for showing information for current line."
- :init-value nil
- :group lsp-ui-sideline
- (cond
- (lsp-ui-sideline-mode
- (add-hook 'post-command-hook 'lsp-ui-sideline nil t)
- (advice-add 'company-pseudo-tooltip-frontend :before 'lsp-ui-sideline--hide-before-company)
- (add-hook 'flycheck-after-syntax-check-hook 'lsp-ui-sideline--diagnostics-changed nil t)
- (when lsp-ui-sideline-show-diagnostics
- (setq-local flycheck-display-errors-function nil)))
- (t
- (advice-remove 'company-pseudo-tooltip-frontend 'lsp-ui-sideline--hide-before-company)
- (lsp-ui-sideline--delete-ov)
- (remove-hook 'flycheck-after-syntax-check-hook 'lsp-ui-sideline--diagnostics-changed t)
- (remove-hook 'post-command-hook 'lsp-ui-sideline t)
- (when lsp-ui-sideline-show-diagnostics
- (kill-local-variable 'flycheck-display-errors-function)))))
-
-(defun lsp-ui-sideline-enable (enable)
- "Enable/disable `lsp-ui-sideline-mode'."
- (lsp-ui-sideline-mode (if enable 1 -1))
- (if enable
- (add-hook 'before-revert-hook 'lsp-ui-sideline--delete-ov nil t)
- (remove-hook 'before-revert-hook 'lsp-ui-sideline--delete-ov t)))
-
-(provide 'lsp-ui-sideline)
-;;; lsp-ui-sideline.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-util.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-util.el
deleted file mode 100644
index a5d92f2..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui-util.el
+++ /dev/null
@@ -1,71 +0,0 @@
-;;; lsp-ui-util.el --- Utility module for Lsp-Ui -*- lexical-binding: t -*-
-
-;; Copyright (C) 2020 Shen, Jen-Chieh
-
-;; Author: Jen-Chieh Shen <jcs090218@gmail.com>
-;; URL: https://github.com/emacs-lsp/lsp-ui
-;; Keywords: languages, tools
-;; Version: 6.2
-
-;;; License
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-
-;;
-;; Utility module for Lsp-Ui.
-;;
-
-;;; Code:
-
-(require 'face-remap)
-
-(defun lsp-ui-util-safe-kill-timer (timer)
- "Safely kill the TIMER."
- (when (timerp timer) (cancel-timer timer)))
-
-(defun lsp-ui-util-safe-delete-overlay (overlay)
- "Safely delete the OVERLAY."
- (when (overlayp overlay) (delete-overlay overlay)))
-
-(defun lsp-ui-util-line-number-display-width ()
- "Safe way to get value from function `line-number-display-width'."
- (if (bound-and-true-p display-line-numbers-mode)
- ;; For some reason, function `line-number-display-width' gave
- ;; us error `args-out-of-range' even we do not pass anything towards
- ;; to it function. See the following links,
- ;;
- ;; - https://github.com/emacs-lsp/lsp-ui/issues/294
- ;; - https://github.com/emacs-lsp/lsp-ui/issues/533 (duplicate)
- (+ (or (ignore-errors (line-number-display-width)) 0) 2)
- 0))
-
-(defun lsp-ui-util-line-string (pos)
- "Return string at POS."
- (when (integerp pos) (save-excursion (goto-char pos) (thing-at-point 'line))))
-
-(defun lsp-ui-util-column (&optional pos)
- "Return column at POS."
- (setq pos (or pos (point)))
- (save-excursion (goto-char pos) (current-column)))
-
-(defun lsp-ui-util-text-scale-factor ()
- "Return the factor effect by `text-scale-mode'."
- (or (plist-get (cdr text-scale-mode-remapping) :height) 1))
-
-(provide 'lsp-ui-util)
-;;; lsp-ui-util.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui.el b/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui.el
deleted file mode 100644
index cbaf923..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/lsp-ui.el
+++ /dev/null
@@ -1,177 +0,0 @@
-;;; lsp-ui.el --- UI modules for lsp-mode -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017 Tobias Pisani
-;; Copyright (C) 2018 Sebastien Chapuis, Fangrui Song
-
-;; Author: Sebastien Chapuis <sebastien@chapu.is>, Fangrui Song <i@maskray.me>
-;; Keywords: languages, tools
-;; URL: https://github.com/emacs-lsp/lsp-ui
-;; Package-Requires: ((emacs "26.1") (dash "2.18.0") (lsp-mode "6.0") (markdown-mode "2.3"))
-;; Version: 7.0.1
-
-;;; License
-;;
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
-
-;;; Commentary:
-
-;; lsp-ui contains a series of useful UI integrations for lsp-mode, like
-;; flycheck support and code lenses.
-
-;;; Code:
-
-(require 'dash)
-(require 'lsp-protocol)
-(require 'find-func)
-
-(defconst lsp-ui-resources-dir
- (--> (find-library-name "lsp-ui")
- (file-name-directory it)
- (expand-file-name "resources" it)
- (file-name-as-directory it)
- (and (file-directory-p it) it))
- "Resource folder for package `lsp-ui'.")
-
-(require 'lsp-ui-sideline)
-(require 'lsp-ui-peek)
-(require 'lsp-ui-imenu)
-(require 'lsp-ui-doc)
-
-(defgroup lsp-ui nil
- "‘lsp-ui’ contains a series of useful UI integrations for ‘lsp-mode’."
- :group 'tools
- :group 'convenience
- :link '(custom-manual "(lsp-ui) Top")
- :link '(info-link "(lsp-ui) Customizing"))
-
-(with-eval-after-load 'flycheck
- (require 'lsp-ui-flycheck))
-
-(with-eval-after-load 'winum
- (when (and (boundp 'winum-ignored-buffers-regexp) lsp-ui-doc-winum-ignore)
- (add-to-list 'winum-ignored-buffers-regexp lsp-ui-doc--buffer-prefix)))
-
-(defun lsp-ui-peek--render (major string)
- (with-temp-buffer
- (insert string)
- (delay-mode-hooks
- (let ((inhibit-message t)) (funcall major))
- (ignore-errors (font-lock-ensure)))
- (buffer-string)))
-
-(defun lsp-ui--workspace-path (path)
- "Return the PATH relative to the workspace.
-If the PATH is not in the workspace, it returns the original PATH."
- (let* ((path (file-truename path))
- (root (lsp-workspace-root path))
- (in-workspace (and root (string-prefix-p root path))))
- (if in-workspace
- (substring path (length root))
- path)))
-
-(defun lsp-ui--toggle (enable)
- (dolist (feature '(lsp-ui-peek lsp-ui-sideline lsp-ui-doc lsp-ui-imenu))
- (let* ((sym (--> (intern-soft (concat (symbol-name feature) "-enable"))
- (and (boundp it) it)))
- (value (symbol-value sym))
- (fn (symbol-function sym)))
- (and (or value (not enable))
- (functionp fn)
- (funcall fn enable)))))
-
-(defvar lsp-ui-mode-map (make-sparse-keymap))
-
-;;;###autoload
-(define-minor-mode lsp-ui-mode
- "Toggle language server UI mode on or off.
-‘lsp-ui-mode’ is a minor mode that contains a series of useful UI
-integrations for ‘lsp-mode’. With a prefix argument ARG, enable
-language server UI mode if ARG is positive, and disable it
-otherwise. If called from Lisp, enable the mode if ARG is
-omitted or nil, and toggle it if ARG is ‘toggle’."
- :init-value nil
- :group lsp-ui
- :keymap lsp-ui-mode-map
- (lsp-ui--toggle lsp-ui-mode))
-
-;; The request is delegated to xref-backend-apropos defined in lsp-mode.
-;; xref-find-apropos does similar job but is less appealing because it splits and
-;; regex quotes the pattern. The language server likely knows more about how
-;; to do fuzzy matching.
-(defun lsp-ui-find-workspace-symbol (pattern)
- "List project-wide symbols matching the query string PATTERN."
- (interactive (list (read-string
- "workspace/symbol: "
- nil 'xref--read-pattern-history)))
- (xref--find-xrefs pattern 'apropos pattern nil))
-
-(defun lsp-ui--location< (x y)
- "Compares two triples X and Y.
-Both should have the form (FILENAME LINE COLUMN)."
- (if (not (string= (car x) (car y)))
- (string< (car x) (car y))
- (if (not (= (cadr x) (cadr y)))
- (< (cadr x) (cadr y))
- (< (caddr x) (caddr y)))))
-
-(defun lsp-ui--reference-triples (extra)
- "Return references as a list of (FILENAME LINE COLUMN) triples given EXTRA."
- (let ((refs (lsp-request "textDocument/references"
- (append (lsp--text-document-position-params) extra))))
- (sort
- (mapcar
- (-lambda ((&Location :uri :range (&Range :start (&Position :line :character))))
- (list (lsp--uri-to-path uri) line character))
- refs)
- #'lsp-ui--location<)))
-
-;; TODO Make it efficient
-(defun lsp-ui-find-next-reference (&optional extra)
- "Find next reference of the symbol at point."
- (interactive)
- (let* ((cur (list buffer-file-name (1- (line-number-at-pos)) (- (point) (line-beginning-position))))
- (refs (lsp-ui--reference-triples extra))
- (idx -1)
- (res (-first (lambda (ref) (cl-incf idx) (lsp-ui--location< cur ref)) refs)))
- (if res
- (progn
- (find-file (car res))
- (goto-char 1)
- (forward-line (cadr res))
- (forward-char (caddr res))
- (cons idx (length refs)))
- (cons 0 0))))
-
-;; TODO Make it efficient
-(defun lsp-ui-find-prev-reference (&optional extra)
- "Find previous reference of the symbol at point."
- (interactive)
- (let* ((cur (list buffer-file-name (1- (line-number-at-pos)) (- (point) (line-beginning-position))))
- (refs (lsp-ui--reference-triples extra))
- (idx -1)
- (res (-last (lambda (ref) (and (lsp-ui--location< ref cur) (cl-incf idx))) refs)))
- (if res
- (progn
- (find-file (car res))
- (goto-char 1)
- (forward-line (cadr res))
- (forward-char (caddr res))
- (cons idx (length refs)))
- (cons 0 0))))
-
-
-(provide 'lsp-ui)
-;;; lsp-ui.el ends here
diff --git a/emacs.d/elpa/lsp-ui-20210718.445/resources/lightbulb.png b/emacs.d/elpa/lsp-ui-20210718.445/resources/lightbulb.png
deleted file mode 100644
index 7c1ad08..0000000
--- a/emacs.d/elpa/lsp-ui-20210718.445/resources/lightbulb.png
+++ /dev/null
Binary files differ
diff --git a/emacs.d/elpa/lv-20200507.1518/lv-autoloads.el b/emacs.d/elpa/lv-20200507.1518/lv-autoloads.el
deleted file mode 100644
index 61b1079..0000000
--- a/emacs.d/elpa/lv-20200507.1518/lv-autoloads.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; lv-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "lv" "lv.el" (0 0 0 0))
-;;; Generated autoloads from lv.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "lv" '("lv-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; lv-autoloads.el ends here
diff --git a/emacs.d/elpa/lv-20200507.1518/lv-pkg.el b/emacs.d/elpa/lv-20200507.1518/lv-pkg.el
deleted file mode 100644
index 0ef0d4b..0000000
--- a/emacs.d/elpa/lv-20200507.1518/lv-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; Generated package description from lv-20200507.1518/lv.el -*- no-byte-compile: t -*-
-(define-package "lv" "20200507.1518" "Other echo area" 'nil :commit "2d553787aca1aceb3e6927e426200e9bb9f056f1" :authors '(("Oleh Krehel")) :maintainer '("Oleh Krehel"))
diff --git a/emacs.d/elpa/lv-20200507.1518/lv.el b/emacs.d/elpa/lv-20200507.1518/lv.el
deleted file mode 100644
index cafcbb1..0000000
--- a/emacs.d/elpa/lv-20200507.1518/lv.el
+++ /dev/null
@@ -1,150 +0,0 @@
-;;; lv.el --- Other echo area
-;; Package-Version: 20200507.1518
-;; Package-Commit: 2d553787aca1aceb3e6927e426200e9bb9f056f1
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Oleh Krehel
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; This package provides `lv-message' intended to be used in place of
-;; `message' when semi-permanent hints are needed, in order to not
-;; interfere with Echo Area.
-;;
-;; "Я тихо-тихо пiдглÑдаю,
-;; І Ñ‚iшуÑÑ Ñобi, Ñк бачу то,
-;; Шо Ñтрашить i не пiдпуÑкає,
-;; Ð iншi п’ють тебе, Ñк воду пiÑок."
-;; -- Ðндрій Кузьменко, L.V.
-
-;;; Code:
-
-(require 'cl-lib)
-
-(defgroup lv nil
- "The other echo area."
- :group 'minibuffer
- :group 'hydra)
-
-(defcustom lv-use-separator nil
- "Whether to draw a line between the LV window and the Echo Area."
- :group 'lv
- :type 'boolean)
-
-(defcustom lv-use-padding nil
- "Whether to use horizontal padding in the LV window."
- :group 'lv
- :type 'boolean)
-
-(defface lv-separator
- '((((class color) (background light)) :background "grey80")
- (((class color) (background dark)) :background "grey30"))
- "Face used to draw line between the lv window and the echo area.
-This is only used if option `lv-use-separator' is non-nil.
-Only the background color is significant."
- :group 'lv)
-
-(defvar lv-wnd nil
- "Holds the current LV window.")
-
-(defvar display-line-numbers)
-(defvar display-fill-column-indicator)
-(defvar tab-line-format)
-
-(defvar lv-window-hook nil
- "Hook to run by `lv-window' when a new window is created.")
-
-(defun lv-window ()
- "Ensure that LV window is live and return it."
- (if (window-live-p lv-wnd)
- lv-wnd
- (let ((ori (selected-window))
- buf)
- (prog1 (setq lv-wnd
- (select-window
- (let ((ignore-window-parameters t))
- (split-window
- (frame-root-window) -1 'below))
- 'norecord))
- (if (setq buf (get-buffer " *LV*"))
- (switch-to-buffer buf 'norecord)
- (switch-to-buffer " *LV*" 'norecord)
- (fundamental-mode)
- (set-window-hscroll lv-wnd 0)
- (setq window-size-fixed t)
- (setq mode-line-format nil)
- (setq header-line-format nil)
- (setq tab-line-format nil)
- (setq cursor-type nil)
- (setq display-line-numbers nil)
- (setq display-fill-column-indicator nil)
- (set-window-dedicated-p lv-wnd t)
- (set-window-parameter lv-wnd 'no-other-window t)
- (run-hooks 'lv-window-hook))
- (select-window ori 'norecord)))))
-
-(defvar golden-ratio-mode)
-
-(defvar lv-force-update nil
- "When non-nil, `lv-message' will refresh even for the same string.")
-
-(defun lv--pad-to-center (str width)
- "Pad STR with spaces on the left to be centered to WIDTH."
- (let* ((strs (split-string str "\n"))
- (padding (make-string
- (/ (- width (length (car strs))) 2)
- ?\ )))
- (mapconcat (lambda (s) (concat padding s)) strs "\n")))
-
-(defun lv-message (format-string &rest args)
- "Set LV window contents to (`format' FORMAT-STRING ARGS)."
- (let* ((str (apply #'format format-string args))
- (n-lines (cl-count ?\n str))
- deactivate-mark
- golden-ratio-mode)
- (with-selected-window (lv-window)
- (when lv-use-padding
- (setq str (lv--pad-to-center str (window-width))))
- (unless (and (string= (buffer-string) str)
- (null lv-force-update))
- (delete-region (point-min) (point-max))
- (insert str)
- (when (and (window-system) lv-use-separator)
- (unless (looking-back "\n" nil)
- (insert "\n"))
- (insert
- (propertize "__" 'face 'lv-separator 'display '(space :height (1)))
- (propertize "\n" 'face 'lv-separator 'line-height t)))
- (set (make-local-variable 'window-min-height) n-lines)
- (setq truncate-lines (> n-lines 1))
- (let ((window-resize-pixelwise t)
- (window-size-fixed nil))
- (fit-window-to-buffer nil nil 1)))
- (goto-char (point-min)))))
-
-(defun lv-delete-window ()
- "Delete LV window and kill its buffer."
- (when (window-live-p lv-wnd)
- (let ((buf (window-buffer lv-wnd)))
- (delete-window lv-wnd)
- (kill-buffer buf))))
-
-(provide 'lv)
-
-;;; lv.el ends here
diff --git a/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-autoloads.el b/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-autoloads.el
deleted file mode 100644
index b5e5928..0000000
--- a/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-autoloads.el
+++ /dev/null
@@ -1,25 +0,0 @@
-;;; modus-operandi-theme-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "modus-operandi-theme" "modus-operandi-theme.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from modus-operandi-theme.el
-
-(when load-file-name (add-to-list 'custom-theme-load-path (file-name-as-directory (file-name-directory load-file-name))))
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "modus-operandi-theme" '("modus-operandi")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; modus-operandi-theme-autoloads.el ends here
diff --git a/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-pkg.el b/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-pkg.el
deleted file mode 100644
index 0a35161..0000000
--- a/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "modus-operandi-theme" "20200501.252" "Accessible light theme (WCAG AAA)" '((emacs "26.1")) :commit "89a31f6242dac52071ee6be18feadcb604b548d7" :keywords '("faces" "theme" "accessibility") :authors '(("Protesilaos Stavrou" . "info@protesilaos.com")) :maintainer '("Protesilaos Stavrou" . "info@protesilaos.com") :url "https://gitlab.com/protesilaos/modus-themes")
diff --git a/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme.el b/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme.el
deleted file mode 100644
index 7bc43a9..0000000
--- a/emacs.d/elpa/modus-operandi-theme-20200501.252/modus-operandi-theme.el
+++ /dev/null
@@ -1,3315 +0,0 @@
-;;; modus-operandi-theme.el --- Accessible light theme (WCAG AAA) -*- lexical-binding:t -*-
-
-;; Copyright (c) 2019-2020 Free Software Foundation, Inc.
-
-;; Author: Protesilaos Stavrou <info@protesilaos.com>
-;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Package-Version: 20200501.252
-;; Version: 0.8.1
-;; Package-Requires: ((emacs "26.1"))
-;; Keywords: faces, theme, accessibility
-
-;; This file is NOT part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; This theme is designed for colour-contrast accessibility.
-;;
-;; 1. Provide a consistent minimum contrast ratio between background and
-;; foreground values of 7:1 or higher. This meets the highest such
-;; accessibility criterion per the guidelines of the Worldwide Web
-;; Consortium's Working Group on Accessibility (WCAG AAA standard).
-;;
-;; 2. Offer as close to full face coverage as possible. The list is
-;; already quite long (see further below), with more additions to follow
-;; as part of the ongoing development process.
-;;
-;; The theme provides the following customisation options, all of which
-;; are disabled by default:
-;;
-;; modus-operandi-theme-slanted-constructs
-;; modus-operandi-theme-bold-constructs
-;; modus-operandi-theme-proportional-fonts
-;; modus-operandi-theme-rainbow-headings
-;; modus-operandi-theme-section-headings
-;; modus-operandi-theme-scale-headings
-;; modus-operandi-theme-visible-fringes
-;; modus-operandi-theme-distinct-org-blocks
-;; modus-operandi-theme-3d-modeline
-;; modus-operandi-theme-subtle-diffs
-;;
-;; The default scale is as follows (it can be customised as well):
-;;
-;; modus-operandi-theme-scale-1 1.05
-;; modus-operandi-theme-scale-2 1.1
-;; modus-operandi-theme-scale-3 1.15
-;; modus-operandi-theme-scale-4 1.2
-;;
-;; What follows is the list of explicitly supported packages or face
-;; groups (there are implicitly supported packages as well, which
-;; inherit from font-lock or some basic group). You are encouraged to
-;; notify me of any missing package or change you would like to see.
-;;
-;; ace-window
-;; ag
-;; alert
-;; all-the-icons
-;; annotate
-;; anzu
-;; apropos
-;; apt-sources-list
-;; artbollocks-mode
-;; auctex and TeX
-;; auto-dim-other-buffers
-;; avy
-;; breakpoint (provided by built-in gdb-mi.el)
-;; bm
-;; buffer-expose
-;; calendar and diary
-;; calfw
-;; centaur-tabs
-;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
-;; cider
-;; color-rg
-;; column-enforce-mode
-;; company-mode
-;; company-posframe
-;; compilation-mode
-;; completions
-;; counsel
-;; counsel-css
-;; counsel-notmuch
-;; counsel-org-capture-string
-;; cov
-;; csv-mode
-;; ctrlf
-;; custom (M-x customize)
-;; dap-mode
-;; dashboard (emacs-dashboard)
-;; deadgrep
-;; debbugs
-;; define-word
-;; deft
-;; diff-hl
-;; diff-mode
-;; dim-autoload
-;; dired
-;; dired-async
-;; dired-git
-;; dired-git-info
-;; dired-narrow
-;; dired-subtree
-;; diredfl
-;; disk-usage
-;; doom-modeline
-;; dynamic-ruler
-;; easy-jekyll
-;; easy-kill
-;; ebdb
-;; ediff
-;; eglot
-;; eldoc-box
-;; elfeed
-;; elfeed-score
-;; emms
-;; enhanced-ruby-mode
-;; epa
-;; equake
-;; erc
-;; ert
-;; eshell
-;; evil (evil-mode)
-;; evil-goggles
-;; evil-visual-mark-mode
-;; eww
-;; eyebrowse
-;; fancy-dabbrev
-;; flycheck
-;; flycheck-indicator
-;; flycheck-posframe
-;; flymake
-;; flyspell
-;; flyspell-correct
-;; flx
-;; freeze-it
-;; frog-menu
-;; focus
-;; fold-this
-;; font-lock (generic syntax highlighting)
-;; forge
-;; fountain (fountain-mode)
-;; geiser
-;; git
-;; git-gutter (and variants)
-;; git-lens
-;; git-timemachine
-;; git-walktree
-;; gnus
-;; helm
-;; helm-ls-git
-;; helm-switch-shell
-;; helm-xref
-;; helpful
-;; highlight-blocks
-;; highlight-defined
-;; highlight-escape-sequences (`hes-mode')
-;; highlight-numbers
-;; highlight-symbol
-;; highlight-thing
-;; hl-fill-column
-;; hl-line-mode
-;; hl-todo
-;; hydra
-;; ibuffer
-;; icomplete
-;; ido-mode
-;; iedit
-;; iflipb
-;; imenu-list
-;; info
-;; info-colors
-;; interaction-log
-;; ioccur
-;; isearch, occur, etc.
-;; ivy
-;; ivy-posframe
-;; jira (org-jira)
-;; js2-mode
-;; julia
-;; jupyter
-;; kaocha-runner
-;; keycast
-;; line numbers (`display-line-numbers-mode' and global variant)
-;; lsp-mode
-;; lsp-ui
-;; magit
-;; magit-imerge
-;; man
-;; markdown-mode
-;; markup-faces (`adoc-mode')
-;; mentor
-;; messages
-;; modeline
-;; mood-line
-;; mu4e
-;; mu4e-conversation
-;; multiple-cursors
-;; neotree
-;; no-emoji
-;; num3-mode
-;; orderless
-;; org
-;; org-journal
-;; org-noter
-;; org-pomodoro
-;; org-recur
-;; org-roam
-;; org-superstar
-;; org-treescope
-;; origami
-;; outline-mode
-;; outline-minor-faces
-;; package (M-x list-packages)
-;; page-break-lines
-;; paradox
-;; paren-face
-;; parrot
-;; pass
-;; persp-mode
-;; perspective
-;; phi-grep
-;; phi-search
-;; pomidor
-;; powerline
-;; powerline-evil
-;; proced
-;; prodigy
-;; rainbow-blocks
-;; rainbow-identifiers
-;; rainbow-delimiters
-;; rcirc
-;; regexp-builder (also known as `re-builder')
-;; rg
-;; ripgrep
-;; rmail
-;; ruler-mode
-;; sallet
-;; selectrum
-;; sesman
-;; shell-script-mode
-;; show-paren-mode
-;; side-notes
-;; skewer-mode
-;; smart-mode-line
-;; smartparens
-;; smerge
-;; speedbar
-;; spell-fu
-;; stripes
-;; suggest
-;; switch-window
-;; swiper
-;; swoop
-;; sx
-;; symbol-overlay
-;; tab-bar-mode
-;; tab-line-mode
-;; syslog-mode
-;; trashed
-;; telephone-line
-;; term
-;; tomatinho
-;; transient (pop-up windows like Magit's)
-;; treemacs
-;; tuareg
-;; undo-tree
-;; vc (built-in mode line status for version control)
-;; vc-annotate (C-x v g)
-;; vimish-fold
-;; visible-mark
-;; visual-regexp
-;; volatile-highlights
-;; vterm
-;; wcheck-mode
-;; web-mode
-;; wgrep
-;; which-function-mode
-;; which-key
-;; whitespace-mode
-;; window-divider-mode
-;; winum
-;; writegood-mode
-;; woman
-;; xah-elisp-mode
-;; xref
-;; xterm-color (and ansi-colors)
-;; yaml-mode
-;; ztree
-
-;;; Code:
-
-
-
-(deftheme modus-operandi
- "Light theme that conforms with the highest accessibility
- standard for colour contrast between background and
- foreground elements (WCAG AAA).")
-
-;; These faces will be inherited by actual constructs. They are meant
-;; for those cases where a face needs to distinguish its output from
-;; the rest of the text, such as `isearch' and `occur'… We define
-;; these separately in order to combine each colour with its
-;; appropriate foreground value. This is to ensure a consistent
-;; contrast ratio of >= 7:1.
-(defgroup modus-theme ()
- "Theme that ensures WCAG AAA accessibility (contrast ratio
-between foreground and background is >= 7:1)."
- :group 'faces
- :prefix "modus-theme-"
- :link '(url-link :tag "GitLab" "https://gitlab.com/protesilaos/modus-themes")
- :tag "Modus Operandi")
-
-(defface modus-theme-subtle-red nil t)
-(defface modus-theme-subtle-green nil t)
-(defface modus-theme-subtle-yellow nil t)
-(defface modus-theme-subtle-blue nil t)
-(defface modus-theme-subtle-magenta nil t)
-(defface modus-theme-subtle-cyan nil t)
-(defface modus-theme-subtle-neutral nil t)
-(defface modus-theme-intense-red nil t)
-(defface modus-theme-intense-green nil t)
-(defface modus-theme-intense-yellow nil t)
-(defface modus-theme-intense-blue nil t)
-(defface modus-theme-intense-magenta nil t)
-(defface modus-theme-intense-cyan nil t)
-(defface modus-theme-intense-neutral nil t)
-(defface modus-theme-refine-red nil t)
-(defface modus-theme-refine-green nil t)
-(defface modus-theme-refine-yellow nil t)
-(defface modus-theme-refine-blue nil t)
-(defface modus-theme-refine-magenta nil t)
-(defface modus-theme-refine-cyan nil t)
-(defface modus-theme-active-red nil t)
-(defface modus-theme-active-green nil t)
-(defface modus-theme-active-yellow nil t)
-(defface modus-theme-active-blue nil t)
-(defface modus-theme-active-magenta nil t)
-(defface modus-theme-active-cyan nil t)
-(defface modus-theme-fringe-red nil t)
-(defface modus-theme-fringe-green nil t)
-(defface modus-theme-fringe-yellow nil t)
-(defface modus-theme-fringe-blue nil t)
-(defface modus-theme-fringe-magenta nil t)
-(defface modus-theme-fringe-cyan nil t)
-(defface modus-theme-special-cold nil t)
-(defface modus-theme-special-mild nil t)
-(defface modus-theme-special-warm nil t)
-(defface modus-theme-special-calm nil t)
-(defface modus-theme-diff-added nil t)
-(defface modus-theme-diff-changed nil t)
-(defface modus-theme-diff-removed nil t)
-(defface modus-theme-diff-refine-added nil t)
-(defface modus-theme-diff-refine-changed nil t)
-(defface modus-theme-diff-refine-removed nil t)
-(defface modus-theme-diff-focus-added nil t)
-(defface modus-theme-diff-focus-changed nil t)
-(defface modus-theme-diff-focus-removed nil t)
-(defface modus-theme-diff-heading nil t)
-
-;; User-facing customisation options. They are all deactivated by
-;; default (users must opt in).
-(defcustom modus-operandi-theme-slanted-constructs nil
- "Use slanted text in more code constructs (italics or oblique)."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-bold-constructs nil
- "Use bold text in more code constructs."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-proportional-fonts nil
- "Use proportional fonts (variable-pitch) in headings."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-rainbow-headings nil
- "Use more saturated colours for headings."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-section-headings nil
- "Use a background and an overline in headings."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-scale-headings nil
- "Use font scaling for headings."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-scale-1 1.05
- "Font size that is slightly larger than the base value."
- :type 'number)
-
-(defcustom modus-operandi-theme-scale-2 1.1
- "Font size slightly larger than `modus-operandi-theme-scale-1'."
- :type 'number)
-
-(defcustom modus-operandi-theme-scale-3 1.15
- "Font size slightly larger than `modus-operandi-theme-scale-2'."
- :type 'number)
-
-(defcustom modus-operandi-theme-scale-4 1.2
- "Font size slightly larger than `modus-operandi-theme-scale-3'."
- :type 'number)
-
-(defcustom modus-operandi-theme-visible-fringes nil
- "Use a visible style for fringes."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-distinct-org-blocks nil
- "Use a distinct background for `org-mode' source blocks."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-3d-modeline nil
- "Use a three-dimensional style for the active mode line."
- :type 'boolean)
-
-(defcustom modus-operandi-theme-subtle-diffs nil
- "Use fewer/dim backgrounds in `diff-mode', `ediff',`magit'."
- :type 'boolean)
-
-;; Helper functions that are meant to ease the implementation of the
-;; above customisation options.
-(defun modus-operandi-theme-heading-foreground (subtle rainbow)
- "Apply foreground value to headings.
-SUBTLE is the default aesthetic.
-RAINBOW is the saturated one."
- (if modus-operandi-theme-rainbow-headings
- (list :foreground rainbow)
- (list :foreground subtle)))
-
-(defun modus-operandi-theme-heading-block (bg fg)
- "Conditionally extend heading styles.
-Apply BG to background and FG to overline."
- (if modus-operandi-theme-section-headings
- (list :background bg :overline fg)
- (list :background nil :overline nil)))
-
-(defun modus-operandi-theme-org-todo-block (bgbox fgbox fg)
- "Conditionally extend the styles of Org keywords.
-BGBOX applies to the background.
-FGBOX applies to the foreground and the border.
-FG is used when no block style is in effect."
- (if modus-operandi-theme-section-headings
- (list :background bgbox :foreground fgbox :box (list :color fgbox))
- (list :foreground fg)))
-
-(defun modus-operandi-theme-org-src-block (bgsrc bg)
- "Conditionally set the styles of Org source blocks.
-BGSRC applies to a distinct background. BG is used to keep
-blocks the same background as the rest of the buffer."
- (if modus-operandi-theme-distinct-org-blocks
- (list :background bgsrc :extend t)
- (list :background bg)))
-
-(defun modus-operandi-theme-modeline-box (col3d col &optional btn int)
- "Control the box properties of the mode line.
-COL3D is the border that is intended for the three-dimensional modeline.
-COL applies to the two-dimensional modeline.
-Optional BTN provides the 3d button style.
-Optional INT defines a border width."
- (let* ((style (if btn 'released-button nil))
- (int (if int int 1)))
- (if modus-operandi-theme-3d-modeline
- (list :line-width int :color col3d :style style)
- (list :line-width 1 :color col :style nil))))
-
-(defun modus-operandi-theme-modeline-props (bg3d fg3d &optional bg fg)
- "Control the background and foreground of the mode line.
-BG is the modeline's background.
-FG is the modeline's foreground.
-BG3D and FG3D apply to the three-dimensional modeline style."
- (if modus-operandi-theme-3d-modeline
- (list :background bg3d :foreground fg3d)
- (list :background bg :foreground fg)))
-
-(defun modus-operandi-theme-diffs (subtle-bg subtle-fg intense-bg intense-fg)
- "Colour combinations for `modus-operandi-theme-subtle-diffs'.
-
-SUBTLE-BG should be similar or the same as the main background
-SUBTLE-FG should be an appropriate accent value
-INTENSE-BG should be one of the dedicated backgrounds for diffs
-INTENSE-FG should be one of the dedicated foregrounds for diffs"
- (if modus-operandi-theme-subtle-diffs
- (list :background subtle-bg :foreground subtle-fg)
- (list :background intense-bg :foreground intense-fg)))
-
-(defun modus-operandi-theme-scale (amount)
- "Scale heading by AMOUNT.
-
-AMOUNT is a customisation option."
- (when modus-operandi-theme-scale-headings
- (list :height amount)))
-
-
-
-;; Define colour palette. Each colour must have a >= 7:1 contrast
-;; ratio relative to the foreground/background colour it is rendered
-;; against.
-(let ((class '((class color) (min-colors 89)))
- (fg-main "#000000") (bg-main "#ffffff")
- (fg-alt "#505050") (bg-alt "#f3f1f3")
- (fg-dim "#282828") (bg-dim "#f8f8f8")
- ;; specifically for on/off states (e.g. `mode-line')
- ;;
- ;; must be combined with themselves
- (fg-active "#191919") (bg-active "#e0e0e0")
- (fg-inactive "#424242") (bg-inactive "#efedef")
- ;; special base values, used only for cases where the above
- ;; fg-* or bg-* cannot or should not be used (to avoid confusion)
- ;; must be combined with: {fg,bg}-{main,alt,dim}
- (fg-special-cold "#093060") (bg-special-cold "#dde3f4")
- (fg-special-mild "#184034") (bg-special-mild "#c4ede0")
- (fg-special-warm "#5d3026") (bg-special-warm "#f0e0d4")
- (fg-special-calm "#61284f") (bg-special-calm "#f8ddea")
- ;; styles for the main constructs
- ;;
- ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
- (red "#a80000") (green "#005f00")
- (yellow "#8b3800") (blue "#0030a6")
- (magenta "#721045") (cyan "#005589")
- ;; styles for common, but still specialised constructs
- ;;
- ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
- (red-alt "#972500") (green-alt "#305c00")
- (yellow-alt "#714900") (blue-alt "#223fbf")
- (magenta-alt "#8f0075") (cyan-alt "#185870")
- ;; same purpose as above, just slight differences
- ;;
- ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
- (red-alt-other "#a0132f") (green-alt-other "#095f1c")
- (yellow-alt-other "#804000") (blue-alt-other "#0000bb")
- (magenta-alt-other "#5317ac") (cyan-alt-other "#005a68")
- ;; styles for elements that should be very subtle
- ;;
- ;; must be combined with: `bg-main', `bg-alt', `bg-dim'
- (red-nuanced "#4d0006") (green-nuanced "#003000")
- (yellow-nuanced "#3a2a00") (blue-nuanced "#001170")
- (magenta-nuanced "#381050") (cyan-nuanced "#003434")
- ;; styles for slightly accented background
- ;;
- ;; must be combined with any of the above foreground values
- (red-nuanced-bg "#fef2f2") (green-nuanced-bg "#f4faf4")
- (yellow-nuanced-bg "#fcf6f1") (blue-nuanced-bg "#f4f4ff")
- (magenta-nuanced-bg "#fff4fc") (cyan-nuanced-bg "#f0f6fa")
- ;; styles for elements that should draw attention to themselves
- ;;
- ;; must be combined with: `bg-main'
- (red-intense "#b60000") (green-intense "#006800")
- (yellow-intense "#904200") (blue-intense "#1111ee")
- (magenta-intense "#7000e0") (cyan-intense "#205b93")
- ;; styles for background elements that should be visible yet
- ;; subtle
- ;;
- ;; must be combined with: `fg-dim'
- (red-subtle-bg "#f2b0a2") (green-subtle-bg "#aecf90")
- (yellow-subtle-bg "#e4c340") (blue-subtle-bg "#b5d0ff")
- (magenta-subtle-bg "#f0d3ff") (cyan-subtle-bg "#c0efff")
- ;; styles for background elements that should be visible and
- ;; distinguishable
- ;;
- ;; must be combined with: `fg-main'
- (red-intense-bg "#ff8892") (green-intense-bg "#5ada88")
- (yellow-intense-bg "#f5df23") (blue-intense-bg "#6aaeff")
- (magenta-intense-bg "#d5baff") (cyan-intense-bg "#42cbd4")
- ;; styles for refined git diffs and other contexts where both the
- ;; foreground and the background need to have the same/similar hue
- ;;
- ;; must be combined with themselves OR the foregrounds can be
- ;; combined with any of the base backgrounds
- (red-refine-bg "#ffcccc") (green-refine-bg "#aceaac")
- (yellow-refine-bg "#fff29a") (blue-refine-bg "#8ac7ff")
- (magenta-refine-bg "#ffccff") (cyan-refine-bg "#8eecf4")
- (red-refine-fg "#780000") (green-refine-fg "#004c00")
- (yellow-refine-fg "#604000") (blue-refine-fg "#002288")
- (magenta-refine-fg "#770077") (cyan-refine-fg "#004850")
- ;; styles that are meant exclusively for the mode line
- ;;
- ;; must be combined with: `bg-active', `bg-inactive'
- (red-active "#930000") (green-active "#005300")
- (yellow-active "#703700") (blue-active "#0033c0")
- (magenta-active "#6320a0") (cyan-active "#004882")
- ;; styles that are meant exclusively for the fringes
- ;;
- ;; must have a minimum contrast ratio of 1.5:1 with `bg-inactive'
- ;; and be combined with `fg-main' or `fg-dim'
- (red-fringe-bg "#ff9a9a") (green-fringe-bg "#86cf86")
- (yellow-fringe-bg "#e0c050") (blue-fringe-bg "#82afff")
- (magenta-fringe-bg "#f0a3ff") (cyan-fringe-bg "#00d6e0")
-
- ;; styles reserved for specific faces
- ;;
- ;; `bg-hl-line' is between `bg-dim' and `bg-alt', so it should
- ;; work with all accents that cover those two, plus `bg-main'
- ;;
- ;; `bg-header' is between `bg-active' and `bg-inactive', so it
- ;; can be combined with any of the "active" values, plus the
- ;; "special" and base foreground colours
- ;;
- ;; `bg-paren-match', `bg-region' and `bg-tab-active' must be
- ;; combined with `fg-main', while `bg-tab-inactive' should be
- ;; combined with `fg-dim'
- ;;
- ;; `fg-tab-active' is meant to be combined with `bg-tab-active',
- ;; though only for styling special elements, such as underlining
- ;; the current tab
- ;;
- ;; `fg-escape-char-construct' and `fg-escape-char-backslash' can
- ;; be combined `bg-main', `bg-dim', `bg-alt'
- ;;
- ;; `fg-lang-error', `fg-lang-warning', `fg-lang-note' can be
- ;; combined with `bg-main', `bg-dim', `bg-alt'
- ;;
- ;; `fg-mark', `fg-mark-del', `fg-mark-other' can be combined with
- ;; `bg-main', `bg-dim', `bg-alt', `bg-hl-line'
- ;;
- ;; `fg-unfocused' must be combined with `fg-main'
- ;;
- ;; the window divider colours apply to faces with just an fg value
- ;;
- ;; all pairs are combinable with themselves
- (bg-hl-line "#f1f2f6")
- (bg-paren-match "#efcabf")
- (bg-region "#bcbcbc")
-
- (bg-tab-active "#ababab")
- (bg-tab-inactive "#dadada")
- (fg-tab-active "#000077")
-
- (fg-escape-char-construct "#8b1030")
- (fg-escape-char-backslash "#644f00")
-
- (fg-lang-error "#9f004f")
- (fg-lang-warning "#605000")
- (fg-lang-note "#4040ae")
-
- (fg-window-divider-inner "#888888")
- (fg-window-divider-outer "#585858")
-
- (fg-unfocused "#56576d")
-
- (fg-header "#2a2a2a") (bg-header "#e5e5e5")
- (fg-whitespace "#645060") (bg-whitespace "#fff8fc")
-
- (fg-diff-heading "#043355") (bg-diff-heading "#b7c2dd")
- (fg-diff-added "#004500") (bg-diff-added "#d4fad4")
- (fg-diff-changed "#524200") (bg-diff-changed "#fcefcf")
- (fg-diff-removed "#691616") (bg-diff-removed "#ffe8ef")
-
- (fg-diff-refine-added "#002a00") (bg-diff-refine-added "#94cf94")
- (fg-diff-refine-changed "#302010") (bg-diff-refine-changed "#cccf8f")
- (fg-diff-refine-removed "#400000") (bg-diff-refine-removed "#daa2b0")
-
- (fg-diff-focus-added "#002c00") (bg-diff-focus-added "#bbeabb")
- (fg-diff-focus-changed "#392900") (bg-diff-focus-changed "#ecdfbf")
- (fg-diff-focus-removed "#4a0000") (bg-diff-focus-removed "#efcbcf")
-
- (fg-diff-neutral-0 "#040404") (bg-diff-neutral-0 "#979797")
- (fg-diff-neutral-1 "#252525") (bg-diff-neutral-1 "#b0b0b0")
- (fg-diff-neutral-2 "#3a3a3a") (bg-diff-neutral-2 "#cccccc")
-
- (fg-mark "#005040") (bg-mark "#a0f0cf")
- (fg-mark-del "#840040") (bg-mark-del "#ffccbb")
- (fg-mark-other "#782900") (bg-mark-other "#f5d88f")
-
- ;; conditional styles that evaluate user-facing customisation
- ;; options
- (modus-theme-slant
- (if modus-operandi-theme-slanted-constructs
- 'italic
- 'normal))
-
- (modus-theme-bold
- (if modus-operandi-theme-bold-constructs
- 'bold
- 'normal))
-
- (modus-theme-variable-pitch
- (if modus-operandi-theme-proportional-fonts
- 'variable-pitch
- 'default)))
- (custom-theme-set-faces
- 'modus-operandi
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; custom faces that are inherited by other constructs below ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; subtle coloured backgrounds
- `(modus-theme-subtle-red ((,class (:background ,red-subtle-bg :foreground ,fg-dim))))
- `(modus-theme-subtle-green ((,class (:background ,green-subtle-bg :foreground ,fg-dim))))
- `(modus-theme-subtle-yellow ((,class (:background ,yellow-subtle-bg :foreground ,fg-dim))))
- `(modus-theme-subtle-blue ((,class (:background ,blue-subtle-bg :foreground ,fg-dim))))
- `(modus-theme-subtle-magenta ((,class (:background ,magenta-subtle-bg :foreground ,fg-dim))))
- `(modus-theme-subtle-cyan ((,class (:background ,cyan-subtle-bg :foreground ,fg-dim))))
- `(modus-theme-subtle-neutral ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- ;;; intense coloured backgrounds
- `(modus-theme-intense-red ((,class (:background ,red-intense-bg :foreground ,fg-main))))
- `(modus-theme-intense-green ((,class (:background ,green-intense-bg :foreground ,fg-main))))
- `(modus-theme-intense-yellow ((,class (:background ,yellow-intense-bg :foreground ,fg-main))))
- `(modus-theme-intense-blue ((,class (:background ,blue-intense-bg :foreground ,fg-main))))
- `(modus-theme-intense-magenta ((,class (:background ,magenta-intense-bg :foreground ,fg-main))))
- `(modus-theme-intense-cyan ((,class (:background ,cyan-intense-bg :foreground ,fg-main))))
- `(modus-theme-intense-neutral ((,class (:background ,bg-active :foreground ,fg-main))))
- ;;; refined background and foreground combinations
- `(modus-theme-refine-red ((,class (:background ,red-refine-bg :foreground ,red-refine-fg))))
- `(modus-theme-refine-green ((,class (:background ,green-refine-bg :foreground ,green-refine-fg))))
- `(modus-theme-refine-yellow ((,class (:background ,yellow-refine-bg :foreground ,yellow-refine-fg))))
- `(modus-theme-refine-blue ((,class (:background ,blue-refine-bg :foreground ,blue-refine-fg))))
- `(modus-theme-refine-magenta ((,class (:background ,magenta-refine-bg :foreground ,magenta-refine-fg))))
- `(modus-theme-refine-cyan ((,class (:background ,cyan-refine-bg :foreground ,cyan-refine-fg))))
- ;;; invert the colours used on the "active" backgrounds
- ;;; mostly for use on the mode line
- `(modus-theme-active-red ((,class (:background ,red-active :foreground ,bg-active))))
- `(modus-theme-active-green ((,class (:background ,green-active :foreground ,bg-active))))
- `(modus-theme-active-yellow ((,class (:background ,yellow-active :foreground ,bg-active))))
- `(modus-theme-active-blue ((,class (:background ,blue-active :foreground ,bg-active))))
- `(modus-theme-active-magenta ((,class (:background ,magenta-active :foreground ,bg-active))))
- `(modus-theme-active-cyan ((,class (:background ,cyan-active :foreground ,bg-active))))
- ;;; for fringe indicators
- `(modus-theme-fringe-red ((,class (:background ,red-fringe-bg :foreground ,fg-dim))))
- `(modus-theme-fringe-green ((,class (:background ,green-fringe-bg :foreground ,fg-dim))))
- `(modus-theme-fringe-yellow ((,class (:background ,yellow-fringe-bg :foreground ,fg-dim))))
- `(modus-theme-fringe-blue ((,class (:background ,blue-fringe-bg :foreground ,fg-dim))))
- `(modus-theme-fringe-magenta ((,class (:background ,magenta-fringe-bg :foreground ,fg-dim))))
- `(modus-theme-fringe-cyan ((,class (:background ,cyan-fringe-bg :foreground ,fg-dim))))
- ;;; special base values that are closer to the grayscale than
- ;;; the accents defined above
- `(modus-theme-special-cold ((,class (:background ,bg-special-cold :foreground ,fg-special-cold))))
- `(modus-theme-special-mild ((,class (:background ,bg-special-mild :foreground ,fg-special-mild))))
- `(modus-theme-special-warm ((,class (:background ,bg-special-warm :foreground ,fg-special-warm))))
- `(modus-theme-special-calm ((,class (:background ,bg-special-calm :foreground ,fg-special-calm))))
- ;;; colour combinations intended for `diff-mode' or equivalent
- `(modus-theme-diff-added ((,class (:background ,bg-diff-added :foreground ,fg-diff-added))))
- `(modus-theme-diff-changed ((,class (:background ,bg-diff-changed :foreground ,fg-diff-changed))))
- `(modus-theme-diff-removed ((,class (:background ,bg-diff-removed :foreground ,fg-diff-removed))))
- `(modus-theme-diff-refine-added ((,class (:background ,bg-diff-refine-added :foreground ,fg-diff-refine-added))))
- `(modus-theme-diff-refine-changed ((,class (:background ,bg-diff-refine-changed :foreground ,fg-diff-refine-changed))))
- `(modus-theme-diff-refine-removed ((,class (:background ,bg-diff-refine-removed :foreground ,fg-diff-refine-removed))))
- `(modus-theme-diff-focus-added ((,class (:background ,bg-diff-focus-added :foreground ,fg-diff-focus-added))))
- `(modus-theme-diff-focus-changed ((,class (:background ,bg-diff-focus-changed :foreground ,fg-diff-focus-changed))))
- `(modus-theme-diff-focus-removed ((,class (:background ,bg-diff-focus-removed :foreground ,fg-diff-focus-removed))))
- `(modus-theme-diff-heading ((,class (:background ,bg-diff-heading :foreground ,fg-diff-heading))))
- ;;;;;;;;;;;;;;;;;;;
- ;; actual styles ;;
- ;;;;;;;;;;;;;;;;;;;
- ;;; default constructs
- ;;;; absolute essentials
- `(default ((,class (:background ,bg-main :foreground ,fg-main))))
- `(cursor ((,class (:background ,fg-main))))
- `(fringe ((,class (:background
- ,(if modus-operandi-theme-visible-fringes bg-inactive bg-main)
- :foreground ,fg-main))))
- `(vertical-border ((,class (:foreground ,fg-window-divider-inner))))
- ;;;; basic and/or ungrouped styles
- `(error ((,class (:foreground ,red :weight bold))))
- `(escape-glyph ((,class (:foreground ,fg-escape-char-construct))))
- `(header-line ((,class (:background ,bg-header :foreground ,fg-header))))
- `(homoglyph ((,class (:foreground ,fg-escape-char-construct))))
- `(ibuffer-locked-buffer ((,class (:foreground ,yellow-alt-other))))
- `(italic ((,class (:foreground ,fg-special-cold :slant italic))))
- `(nobreak-hyphen ((,class (:foreground ,fg-escape-char-construct))))
- `(nobreak-space ((,class (:foreground ,fg-escape-char-construct :underline t))))
- `(minibuffer-prompt ((,class (:foreground ,cyan-alt))))
- `(mm-command-output ((,class (:foreground ,red-alt-other))))
- `(mm-uu-extract ((,class (:background ,bg-dim :foreground ,fg-special-mild))))
- `(next-error ((,class (:inherit modus-theme-subtle-red))))
- `(shadow ((,class (:foreground ,fg-alt))))
- `(success ((,class (:foreground ,green :weight bold))))
- `(trailing-whitespace ((,class (:background ,red-intense-bg))))
- `(warning ((,class (:foreground ,yellow :weight bold))))
- ;;;; ag
- `(ag-hit-face ((,class (:foreground ,fg-special-cold))))
- `(ag-match-face ((,class (:inherit modus-theme-special-calm))))
- ;;;; alert
- `(alert-high-face ((,class (:foreground ,red-alt :weight bold))))
- `(alert-low-face ((,class (:foreground ,fg-special-mild))))
- `(alert-moderate-face ((,class (:foreground ,yellow :weight bold))))
- `(alert-trivial-face ((,class (:foreground ,fg-special-calm))))
- `(alert-urgent-face ((,class (:foreground ,red-intense :weight bold))))
- ;;;; all-the-icons
- `(all-the-icons-blue ((,class (:foreground ,blue))))
- `(all-the-icons-blue-alt ((,class (:foreground ,blue-alt))))
- `(all-the-icons-cyan ((,class (:foreground ,cyan))))
- `(all-the-icons-cyan-alt ((,class (:foreground ,cyan-alt))))
- `(all-the-icons-dblue ((,class (:foreground ,blue-alt-other))))
- `(all-the-icons-dcyan ((,class (:foreground ,cyan-alt-other))))
- `(all-the-icons-dgreen ((,class (:foreground ,green-alt-other))))
- `(all-the-icons-dired-dir-face ((,class (:foreground ,blue))))
- `(all-the-icons-dmaroon ((,class (:foreground ,magenta-alt-other))))
- `(all-the-icons-dorange ((,class (:foreground ,red-alt-other))))
- `(all-the-icons-dpink ((,class (:foreground ,magenta))))
- `(all-the-icons-dpurple ((,class (:foreground ,magenta-alt))))
- `(all-the-icons-dred ((,class (:foreground ,red))))
- `(all-the-icons-dsilver ((,class (:foreground ,fg-special-cold))))
- `(all-the-icons-dyellow ((,class (:foreground ,yellow))))
- `(all-the-icons-green ((,class (:foreground ,green))))
- `(all-the-icons-lblue ((,class (:foreground ,blue-refine-fg))))
- `(all-the-icons-lcyan ((,class (:foreground ,cyan-refine-fg))))
- `(all-the-icons-lgreen ((,class (:foreground ,green-refine-fg))))
- `(all-the-icons-lmaroon ((,class (:foreground ,magenta-refine-fg))))
- `(all-the-icons-lorange ((,class (:foreground ,red-refine-fg))))
- `(all-the-icons-lpink ((,class (:foreground ,magenta-refine-fg))))
- `(all-the-icons-lpurple ((,class (:foreground ,magenta-refine-fg))))
- `(all-the-icons-lred ((,class (:foreground ,red-refine-fg))))
- `(all-the-icons-lsilver ((,class (:foreground ,fg-special-cold))))
- `(all-the-icons-lyellow ((,class (:foreground ,yellow-refine-fg))))
- `(all-the-icons-maroon ((,class (:foreground ,magenta))))
- `(all-the-icons-orange ((,class (:foreground ,red-alt))))
- `(all-the-icons-pink ((,class (:foreground ,magenta))))
- `(all-the-icons-purple ((,class (:foreground ,magenta-alt))))
- `(all-the-icons-purple-alt ((,class (:foreground ,magenta-alt-other))))
- `(all-the-icons-red ((,class (:foreground ,red))))
- `(all-the-icons-red-alt ((,class (:foreground ,red-alt))))
- `(all-the-icons-silver ((,class (:foreground ,fg-special-cold))))
- `(all-the-icons-yellow ((,class (:foreground ,yellow))))
- ;;;; annotate
- `(annotate-annotation ((,class (:inherit modus-theme-intense-blue))))
- `(annotate-annotation-secondary ((,class (:inherit modus-theme-intense-yellow))))
- `(annotate-highlight ((,class (:underline (:color ,blue-intense :style line)))))
- `(annotate-highlight-secondary ((,class (:underline (:color ,yellow-intense :style line)))))
- ;;;; anzu
- `(anzu-match-1 ((,class (:inherit modus-theme-subtle-cyan))))
- `(anzu-match-2 ((,class (:inherit modus-theme-subtle-green))))
- `(anzu-match-3 ((,class (:inherit modus-theme-subtle-yellow))))
- `(anzu-mode-line ((,class (:foreground ,green-active :weight bold))))
- `(anzu-mode-line-no-match ((,class (:foreground ,red-active :weight bold))))
- `(anzu-replace-highlight ((,class (:inherit modus-theme-refine-yellow :underline t))))
- `(anzu-replace-to ((,class (:inherit modus-theme-intense-green :weight bold))))
- ;;;; apropos
- `(apropos-function-button ((,class (:foreground ,magenta-alt-other :underline t))))
- `(apropos-keybinding ((,class (:foreground ,cyan :weight bold))))
- `(apropos-misc-button ((,class (:foreground ,cyan-alt-other :underline t))))
- `(apropos-property ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(apropos-symbol ((,class (:foreground ,blue-nuanced :weight ,modus-theme-bold :underline t))))
- `(apropos-user-option-button ((,class (:foreground ,green-alt-other :underline t))))
- `(apropos-variable-button ((,class (:foreground ,blue :underline t))))
- ;;;; apt-sources-list
- `(apt-sources-list-components ((,class (:foreground ,cyan))))
- `(apt-sources-list-options ((,class (:foreground ,yellow))))
- `(apt-sources-list-suite ((,class (:foreground ,green))))
- `(apt-sources-list-type ((,class (:foreground ,magenta))))
- `(apt-sources-list-uri ((,class (:foreground ,blue))))
- ;;;; artbollocks-mode
- `(artbollocks-face ((,class (:foreground ,cyan-nuanced :underline (:color ,fg-lang-note :style line)))))
- `(artbollocks-lexical-illusions-face ((,class (:background ,bg-alt :foreground ,red-alt :underline t))))
- `(artbollocks-passive-voice-face ((,class (:foreground ,yellow-nuanced :underline (:color ,fg-lang-warning :style line)))))
- `(artbollocks-weasel-words-face ((,class (:foreground ,red-nuanced :underline (:color ,fg-lang-error :style line)))))
- ;;;; auctex and Tex
- `(font-latex-bold-face ((,class (:foreground ,fg-special-calm :weight bold))))
- `(font-latex-doctex-documentation-face ((,class (:foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(font-latex-doctex-preprocessor-face ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(font-latex-italic-face ((,class (:foreground ,fg-special-calm :slant italic))))
- `(font-latex-math-face ((,class (:foreground ,cyan-alt-other))))
- `(font-latex-script-char-face ((,class (:foreground ,cyan-alt-other))))
- `(font-latex-sectioning-0-face ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,blue-nuanced :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(font-latex-sectioning-1-face ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,blue-nuanced :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)))))
- `(font-latex-sectioning-2-face ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,blue-nuanced :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2)))))
- `(font-latex-sectioning-3-face ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,blue-nuanced :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1)))))
- `(font-latex-sectioning-4-face ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,blue-nuanced :weight bold))))
- `(font-latex-sectioning-5-face ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,blue-nuanced))))
- `(font-latex-sedate-face ((,class (:foreground ,magenta-alt-other :weight ,modus-theme-bold))))
- `(font-latex-slide-title-face ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,cyan-nuanced :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(font-latex-string-face ((,class (:foreground ,blue-alt))))
- `(font-latex-subscript-face ((,class (:height 0.95))))
- `(font-latex-superscript-face ((,class (:height 0.95))))
- `(font-latex-verbatim-face ((,class (:background ,bg-dim :foreground ,fg-special-mild))))
- `(font-latex-warning-face ((,class (:foreground ,yellow-alt-other))))
- `(tex-match ((,class (:foreground ,blue-alt-other))))
- `(tex-verbatim ((,class (:background ,bg-dim :foreground ,fg-special-mild))))
- `(texinfo-heading ((,class (:foreground ,magenta))))
- `(TeX-error-description-error ((,class (:foreground ,red :weight bold))))
- `(TeX-error-description-help ((,class (:foreground ,blue))))
- `(TeX-error-description-tex-said ((,class (:foreground ,blue))))
- `(TeX-error-description-warning ((,class (:foreground ,yellow :weight bold))))
- ;;;; auto-dim-other-buffers
- `(auto-dim-other-buffers-face ((,class (:background ,bg-alt))))
- ;;;; avy
- `(avy-background-face ((,class (:background ,bg-dim :foreground ,fg-dim))))
- `(avy-goto-char-timer-face ((,class (:inherit modus-theme-intense-yellow :weight bold))))
- `(avy-lead-face ((,class (:inherit modus-theme-intense-magenta :weight bold))))
- `(avy-lead-face-0 ((,class (:inherit modus-theme-intense-blue :weight bold))))
- `(avy-lead-face-1 ((,class (:inherit modus-theme-intense-red :weight bold))))
- `(avy-lead-face-2 ((,class (:inherit modus-theme-intense-green :weight bold))))
- ;;;; aw (ace-window)
- `(aw-background-face ((,class (:background ,bg-dim :foreground ,fg-dim))))
- `(aw-key-face ((,class (:foreground ,blue-intense :weight bold))))
- `(aw-leading-char-face ((,class (:height 1.5 :background ,bg-main :foreground ,red-intense :weight bold))))
- `(aw-minibuffer-leading-char-face ((,class (:foreground ,magenta-active))))
- `(aw-mode-line-face ((,class (:weight bold))))
- ;;;; bm
- `(bm-face ((,class (:inherit modus-theme-subtle-yellow
- ,@(and (>= emacs-major-version 27) '(:extend t))))))
- `(bm-fringe-face ((,class (:inherit modus-theme-fringe-yellow))))
- `(bm-fringe-persistent-face ((,class (:inherit modus-theme-fringe-blue))))
- `(bm-persistent-face ((,class (:inherit modus-theme-intense-blue
- ,@(and (>= emacs-major-version 27) '(:extend t))))))
- ;;;; buttons, links, widgets
- `(button ((,class (:foreground ,blue-alt-other :underline t))))
- `(link ((,class (:foreground ,blue-alt-other :underline t))))
- `(link-visited ((,class (:foreground ,magenta-alt-other :underline t))))
- `(tooltip ((,class (:background ,bg-special-cold :foreground ,fg-main))))
- `(widget-button ((,class (:inherit button))))
- `(widget-button-pressed ((,class (:inherit button :foreground ,magenta))))
- `(widget-documentation ((,class (:foreground ,green))))
- `(widget-field ((,class (:background ,bg-alt :foreground ,fg-dim))))
- `(widget-inactive ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- `(widget-single-line-field ((,class (:inherit widget-field))))
- ;;;; breakpoint (built-in gdb-mi.el)
- `(breakpoint-disabled ((,class (:foreground ,fg-alt))))
- `(breakpoint-enabled ((,class (:foreground ,red :weight bold))))
- ;;;; buffer-expose
- `(buffer-expose-ace-char-face ((,class (:foreground ,red-active :weight bold))))
- `(buffer-expose-mode-line-face ((,class (:foreground ,cyan-active))))
- `(buffer-expose-selected-face ((,class (:inherit modus-theme-special-mild))))
- ;;;; calendar and diary
- `(calendar-month-header ((,class (:foreground ,fg-main :weight bold))))
- `(calendar-today ((,class (:background ,bg-alt :underline t))))
- `(calendar-weekday-header ((,class (:foreground ,blue-alt))))
- `(calendar-weekend-header ((,class (:foreground ,fg-alt))))
- `(diary ((,class (:foreground ,green-alt-other))))
- `(diary-anniversary ((,class (:foreground ,yellow-alt-other))))
- `(diary-time ((,class (:foreground ,red-alt))))
- `(holiday ((,class (:foreground ,magenta-alt))))
- ;;;; calfw
- `(cfw:face-annotation ((,class (:background ,bg-alt :foreground ,fg-alt))))
- `(cfw:face-day-title ((,class (:background ,bg-alt :foreground ,fg-main))))
- `(cfw:face-default-content ((,class (:foreground ,green-alt))))
- `(cfw:face-default-day ((,class (:inherit cfw:face-day-title :weight bold))))
- `(cfw:face-disable ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- `(cfw:face-grid ((,class (:foreground ,fg-inactive))))
- `(cfw:face-header ((,class (::foreground ,fg-main :weight bold))))
- `(cfw:face-holiday ((,class (:background ,bg-alt :foreground ,magenta :weight bold))))
- `(cfw:face-periods ((,class (:foreground ,cyan-alt-other))))
- `(cfw:face-saturday ((,class (:background ,bg-alt :foreground ,magenta-alt :weight bold))))
- `(cfw:face-select ((,class (:inherit modus-theme-intense-blue))))
- `(cfw:face-sunday ((,class (:background ,bg-alt :foreground ,magenta-alt-other :weight bold))))
- `(cfw:face-title ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-special-warm :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(cfw:face-today ((,class (:foreground ,blue :weight bold))))
- `(cfw:face-today-title ((,class (:inherit modus-theme-special-mild :box t))))
- `(cfw:face-toolbar ((,class (:background ,bg-active :foreground ,bg-active))))
- `(cfw:face-toolbar-button-off ((,class (:background ,bg-alt :foreground ,cyan))))
- `(cfw:face-toolbar-button-on ((,class (:background ,bg-main :foreground ,blue-intense :weight bold))))
- ;;;; centaur-tabs
- `(centaur-tabs-active-bar-face ((,class (:background ,fg-tab-active))))
- `(centaur-tabs-close-mouse-face ((,class (:underline t))))
- `(centaur-tabs-close-selected ((,class (:inherit centaur-tabs-selected))))
- `(centaur-tabs-close-unselected ((,class (:inherit centaur-tabs-unselected))))
- `(centaur-tabs-modified-marker-selected ((,class (:inherit centaur-tabs-selected))))
- `(centaur-tabs-modified-marker-unselected ((,class (:inherit centaur-tabs-unselected))))
- `(centaur-tabs-default ((,class (:background ,bg-main :foreground ,bg-main))))
- `(centaur-tabs-selected ((,class (:background ,bg-tab-active :foreground ,fg-main))))
- `(centaur-tabs-selected-modified ((,class (:background ,bg-tab-active :foreground ,fg-main :slant italic))))
- `(centaur-tabs-unselected ((,class (:background ,bg-tab-inactive :foreground ,fg-dim))))
- `(centaur-tabs-unselected-modified ((,class (:background ,bg-tab-inactive :foreground ,fg-dim :slant italic))))
- ;;;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
- `(change-log-acknowledgment ((,class (:foreground ,fg-special-warm))))
- `(change-log-conditionals ((,class (:foreground ,magenta-alt))))
- `(change-log-date ((,class (:foreground ,magenta))))
- `(change-log-email ((,class (:foreground ,cyan))))
- `(change-log-file ((,class (:foreground ,blue))))
- `(change-log-list ((,class (:foreground ,magenta-alt-other))))
- `(change-log-name ((,class (:foreground ,cyan))))
- `(log-edit-header ((,class (:foreground ,blue-alt :weight bold))))
- `(log-edit-summary ((,class (:foreground ,magenta-alt-other))))
- `(log-edit-unknown-header ((,class (:foreground ,fg-alt))))
- `(log-view-file ((,class (:foreground ,fg-special-cold :weight bold))))
- `(log-view-message ((,class (:foreground ,fg-special-warm))))
- ;;;; cider
- `(cider-debug-code-overlay-face ((,class (:background ,bg-alt))))
- `(cider-debug-prompt-face ((,class (:foreground ,magenta-alt :underline t))))
- `(cider-deprecated-face ((,class (:inherit modus-theme-refine-yellow))))
- `(cider-docview-emphasis-face ((,class (:foreground ,fg-special-cold :slant italic))))
- `(cider-docview-literal-face ((,class (:foreground ,blue-alt))))
- `(cider-docview-strong-face ((,class (:foreground ,fg-special-cold :weight bold))))
- `(cider-docview-table-border-face ((,class (:foreground ,fg-alt))))
- `(cider-enlightened-face ((,class (:box (:line-width -1 :color ,yellow-alt :style nil) :background ,bg-dim))))
- `(cider-enlightened-local-face ((,class (:foreground ,yellow-alt-other :weight bold))))
- `(cider-error-highlight-face ((,class (:foreground ,red :underline t))))
- `(cider-fragile-button-face ((,class (:box (:line-width 3 :color ,fg-alt :style released-button)) :foreground ,yellow)))
- `(cider-fringe-good-face ((,class (:foreground ,green-active))))
- `(cider-instrumented-face ((,class (:box (:line-width -1 :color ,red :style nil) :background ,bg-dim))))
- `(cider-reader-conditional-face ((,class (:foreground ,fg-special-warm :slant italic))))
- `(cider-repl-input-face ((,class (:weight bold))))
- `(cider-repl-prompt-face ((,class (:foreground ,cyan-alt-other))))
- `(cider-repl-stderr-face ((,class (:foreground ,red :weight bold))))
- `(cider-repl-stdout-face ((,class (:foreground ,blue))))
- `(cider-result-overlay-face ((,class (:box (:line-width -1 :color ,blue :style nil) :background ,bg-dim))))
- `(cider-stacktrace-error-class-face ((,class (:foreground ,red :weight bold))))
- `(cider-stacktrace-error-message-face ((,class (:foreground ,red-alt-other :slant italic))))
- `(cider-stacktrace-face ((,class (:foreground ,fg-main))))
- `(cider-stacktrace-filter-active-face ((,class (:foreground ,cyan-alt :underline t))))
- `(cider-stacktrace-filter-inactive-face ((,class (:foreground ,cyan-alt))))
- `(cider-stacktrace-fn-face ((,class (:foreground ,fg-main :weight bold))))
- `(cider-stacktrace-ns-face ((,class (:foreground ,fg-alt :slant italic))))
- `(cider-stacktrace-promoted-button-face ((,class (:box (:line-width 3 :color ,fg-alt :style released-button)) :foreground ,red)))
- `(cider-stacktrace-suppressed-button-face ((,class (:box (:line-width 3 :color ,fg-alt :style pressed-button))
- :background ,bg-alt :foreground ,fg-alt)))
- `(cider-test-error-face ((,class (:inherit modus-theme-subtle-red))))
- `(cider-test-failure-face ((,class (:inherit modus-theme-intense-red :weight bold))))
- `(cider-test-success-face ((,class (:inherit modus-theme-intense-green))))
- `(cider-traced-face ((,class (:box (:line-width -1 :color ,cyan :style nil) :background ,bg-dim))))
- `(cider-warning-highlight-face ((,class (:foreground ,yellow :underline t))))
- ;;;; color-rg
- `(color-rg-font-lock-column-number ((,class (:foreground ,magenta-alt-other))))
- `(color-rg-font-lock-command ((,class (:foreground ,fg-main :weight bold))))
- `(color-rg-font-lock-file ((,class (:foreground ,fg-special-cold :weight bold))))
- `(color-rg-font-lock-flash ((,class (:inherit modus-theme-intense-blue))))
- `(color-rg-font-lock-function-location ((,class (:inherit modus-theme-special-calm))))
- `(color-rg-font-lock-header-line-directory ((,class (:foreground ,blue-active))))
- `(color-rg-font-lock-header-line-edit-mode ((,class (:foreground ,magenta-active))))
- `(color-rg-font-lock-header-line-keyword ((,class (:foreground ,green-active))))
- `(color-rg-font-lock-header-line-text ((,class (:foreground ,fg-active))))
- `(color-rg-font-lock-line-number ((,class (:foreground ,fg-special-warm))))
- `(color-rg-font-lock-mark-changed ((,class (:foreground ,blue :weight bold))))
- `(color-rg-font-lock-mark-deleted ((,class (:foreground ,red :weight bold))))
- `(color-rg-font-lock-match ((,class (:inherit modus-theme-special-calm))))
- `(color-rg-font-lock-position-splitter ((,class (:foreground ,fg-alt))))
- ;;;; column-enforce-mode
- `(column-enforce-face ((,class (:inherit modus-theme-refine-yellow))))
- ;;;; company-mode
- `(company-echo-common ((,class (:foreground ,magenta-alt-other))))
- `(company-preview ((,class (:background ,bg-dim :foreground ,fg-dim))))
- `(company-preview-common ((,class (:foreground ,blue-alt))))
- `(company-preview-search ((,class (:inherit modus-theme-special-calm))))
- `(company-scrollbar-bg ((,class (:background ,bg-active))))
- `(company-scrollbar-fg ((,class (:background ,fg-active))))
- `(company-template-field ((,class (:inherit modus-theme-intense-magenta))))
- `(company-tooltip ((,class (:background ,bg-alt :foreground ,fg-alt))))
- `(company-tooltip-annotation ((,class (:foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(company-tooltip-annotation-selection ((,class (:foreground ,fg-main :weight bold))))
- `(company-tooltip-common ((,class (:foreground ,blue-alt :weight bold))))
- `(company-tooltip-common-selection ((,class (:foreground ,fg-main))))
- `(company-tooltip-mouse ((,class (:inherit modus-theme-intense-blue))))
- `(company-tooltip-search ((,class (:inherit modus-theme-refine-cyan :weight bold))))
- `(company-tooltip-search-selection ((,class (:inherit modus-theme-intense-green :weight bold :underline t))))
- `(company-tooltip-selection ((,class (:inherit modus-theme-subtle-cyan :weight bold))))
- ;;;; company-posframe
- `(company-posframe-active-backend-name ((,class (:background ,bg-active :foreground ,blue-active :weight bold))))
- `(company-posframe-inactive-backend-name ((,class (:background ,bg-active :foreground ,fg-active))))
- `(company-posframe-metadata ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- ;;;; compilation feedback
- `(compilation-column-number ((,class (:foreground ,magenta-alt-other))))
- `(compilation-error ((,class (:foreground ,red :weight ,modus-theme-bold))))
- `(compilation-info ((,class (:foreground ,fg-special-cold))))
- `(compilation-line-number ((,class (:foreground ,fg-special-warm))))
- `(compilation-mode-line-exit ((,class (:foreground ,blue-active :weight ,modus-theme-bold))))
- `(compilation-mode-line-fail ((,class (:foreground ,red-active :weight ,modus-theme-bold))))
- `(compilation-mode-line-run ((,class (:foreground ,magenta-active :weight ,modus-theme-bold))))
- `(compilation-warning ((,class (:foreground ,yellow :weight ,modus-theme-bold))))
- ;;;; completions
- `(completions-annotations ((,class (:foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(completions-common-part ((,class (:foreground ,cyan-alt-other))))
- `(completions-first-difference ((,class (:foreground ,blue-alt-other :weight bold))))
- ;;;; counsel
- `(counsel-active-mode ((,class (:foreground ,magenta-alt-other))))
- `(counsel-application-name ((,class (:foreground ,red-alt-other))))
- `(counsel-key-binding ((,class (:foreground ,blue-alt-other :weight bold))))
- `(counsel-outline-1 ((,class (:inherit outline-1))))
- `(counsel-outline-2 ((,class (:inherit outline-2))))
- `(counsel-outline-3 ((,class (:inherit outline-3))))
- `(counsel-outline-4 ((,class (:inherit outline-4))))
- `(counsel-outline-5 ((,class (:inherit outline-5))))
- `(counsel-outline-6 ((,class (:inherit outline-6))))
- `(counsel-outline-7 ((,class (:inherit outline-7))))
- `(counsel-outline-8 ((,class (:inherit outline-8))))
- `(counsel-outline-default ((,class (:foreground ,green-alt-other :weight bold))))
- `(counsel-variable-documentation ((,class (:foreground ,yellow-alt-other :slant ,modus-theme-slant))))
- ;;;; counsel-css
- `(counsel-css-selector-depth-face-1 ((,class (:foreground ,blue))))
- `(counsel-css-selector-depth-face-2 ((,class (:foreground ,cyan))))
- `(counsel-css-selector-depth-face-3 ((,class (:foreground ,green))))
- `(counsel-css-selector-depth-face-4 ((,class (:foreground ,yellow))))
- `(counsel-css-selector-depth-face-5 ((,class (:foreground ,magenta))))
- `(counsel-css-selector-depth-face-6 ((,class (:foreground ,red))))
- ;;;; counsel-notmuch
- `(counsel-notmuch-count-face ((,class (:foreground ,cyan))))
- `(counsel-notmuch-date-face ((,class (:foreground ,blue))))
- `(counsel-notmuch-people-face ((,class (:foreground ,magenta))))
- `(counsel-notmuch-subject-face ((,class (:foreground ,magenta-alt-other))))
- ;;;; counsel-org-capture-string
- `(counsel-org-capture-string-template-body-face ((,class (:foreground ,fg-special-cold))))
- ;;;; cov
- `(cov-coverage-not-run-face ((,class (:foreground ,red-intense))))
- `(cov-coverage-run-face ((,class (:foreground ,green-intense))))
- `(cov-heavy-face ((,class (:foreground ,magenta-intense))))
- `(cov-light-face ((,class (:foreground ,blue-intense))))
- `(cov-med-face ((,class (:foreground ,yellow-intense))))
- `(cov-none-face ((,class (:foreground ,cyan-intense))))
- ;;;; csv-mode
- `(csv-separator-face ((,class (:background ,bg-special-cold :foreground ,fg-main))))
- ;;;; ctrlf
- `(ctrlf-highlight-active ((,class (:inherit modus-theme-intense-green :weight bold))))
- `(ctrlf-highlight-line ((,class (:background ,bg-hl-line))))
- `(ctrlf-highlight-passive ((,class (:inherit modus-theme-refine-cyan))))
- ;;;; custom (M-x customize)
- `(custom-button ((,class (:box (:line-width 2 :color nil :style released-button)
- :background ,bg-active :foreground ,fg-main))))
- `(custom-button-mouse ((,class (:box (:line-width 2 :color nil :style released-button)
- :background ,bg-active :foreground ,fg-active))))
- `(custom-button-pressed ((,class (:box (:line-width 2 :color nil :style pressed-button)
- :background ,bg-active :foreground ,fg-main))))
- `(custom-changed ((,class (:inherit modus-theme-subtle-cyan))))
- `(custom-comment ((,class (:foreground ,fg-alt))))
- `(custom-comment-tag ((,class (:background ,bg-alt :foreground ,yellow-alt-other))))
- `(custom-face-tag ((,class (:foreground ,blue-intense :weight bold))))
- `(custom-group-tag ((,class (:foreground ,green-intense :weight bold))))
- `(custom-group-tag-1 ((,class (:inherit modus-theme-special-warm))))
- `(custom-invalid ((,class (:inherit modus-theme-intense-red :weight bold))))
- `(custom-modified ((,class (:inherit modus-theme-subtle-cyan))))
- `(custom-rogue ((,class (:inherit modus-theme-refine-magenta))))
- `(custom-set ((,class (:foreground ,blue-alt))))
- `(custom-state ((,class (:foreground ,cyan-alt-other))))
- `(custom-themed ((,class (:inherit modus-theme-subtle-blue))))
- `(custom-variable-tag ((,class (:foreground ,cyan :weight bold))))
- ;;;; dap-mode
- `(dap-mouse-eval-thing-face ((,class (:box (:line-width -1 :color ,blue-active :style nil)
- :background ,bg-active :foreground ,fg-main))))
- `(dap-result-overlay-face ((,class (:box (:line-width -1 :color ,bg-active :style nil)
- :background ,bg-active :foreground ,fg-main))))
- `(dap-ui-breakpoint-verified-fringe ((,class (:foreground ,green-active :weight bold))))
- `(dap-ui-compile-errline ((,class (:foreground ,red-intense :weight bold))))
- `(dap-ui-locals-scope-face ((,class (:foreground ,magenta :weight bold :underline t))))
- `(dap-ui-locals-variable-face ((,class (:foreground ,cyan :weight bold))))
- `(dap-ui-locals-variable-leaf-face ((,class (:foreground ,cyan-alt-other :slant italic))))
- `(dap-ui-marker-face ((,class (:inherit modus-theme-subtle-blue))))
- `(dap-ui-sessions-stack-frame-face ((,class (:foreground ,magenta-alt :weight bold))))
- `(dap-ui-sessions-terminated-active-face ((,class (:foreground ,fg-alt :weight bold))))
- `(dap-ui-sessions-terminated-face ((,class (:foreground ,fg-alt))))
- ;;;; dashboard (emacs-dashboard)
- `(dashboard-banner-logo-title ((,class (:foreground ,fg-special-cold :weight bold))))
- `(dashboard-footer ((,class (:foreground ,fg-special-mild :weight bold))))
- `(dashboard-heading ((,class (:foreground ,fg-special-warm :weight bold))))
- `(dashboard-navigator ((,class (:foreground ,cyan-alt-other))))
- `(dashboard-text-banner ((,class (:foreground ,fg-dim))))
- ;;;; deadgrep
- `(deadgrep-filename-face ((,class (:foreground ,fg-special-cold :weight bold))))
- `(deadgrep-match-face ((,class (:inherit modus-theme-special-calm))))
- `(deadgrep-meta-face ((,class (:foreground ,fg-alt))))
- `(deadgrep-regexp-metachar-face ((,class (:foreground ,yellow-intense :weight bold))))
- `(deadgrep-search-term-face ((,class (:foreground ,green-intense :weight bold))))
- ;;;; debbugs
- `(debbugs-gnu-archived ((,class (:inverse-video t))))
- `(debbugs-gnu-done ((,class (:foreground ,fg-alt))))
- `(debbugs-gnu-forwarded ((,class (:foreground ,fg-special-warm))))
- `(debbugs-gnu-handled ((,class (:foreground ,green))))
- `(debbugs-gnu-new ((,class (:foreground ,red))))
- `(debbugs-gnu-pending ((,class (:foreground ,cyan))))
- `(debbugs-gnu-stale-1 ((,class (:foreground ,yellow-nuanced))))
- `(debbugs-gnu-stale-2 ((,class (:foreground ,yellow))))
- `(debbugs-gnu-stale-3 ((,class (:foreground ,yellow-alt))))
- `(debbugs-gnu-stale-4 ((,class (:foreground ,yellow-alt-other))))
- `(debbugs-gnu-stale-5 ((,class (:foreground ,red-alt))))
- `(debbugs-gnu-tagged ((,class (:foreground ,magenta-alt))))
- ;;;; define-word
- `(define-word-face-1 ((,class (:foreground ,yellow))))
- `(define-word-face-2 ((,class (:foreground ,fg-main))))
- ;;;; deft
- `(deft-filter-string-error-face ((,class (:inherit modus-theme-refine-red))))
- `(deft-filter-string-face ((,class (:foreground ,green-intense))))
- `(deft-header-face ((,class (:foreground ,fg-special-warm :weight bold))))
- `(deft-separator-face ((,class (:foreground ,fg-alt))))
- `(deft-summary-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(deft-time-face ((,class (:foreground ,fg-special-cold))))
- `(deft-title-face ((,class (:foreground ,fg-main :weight bold))))
- ;;;; diff-hl
- `(diff-hl-change ((,class (:inherit modus-theme-fringe-blue))))
- `(diff-hl-delete ((,class (:inherit modus-theme-fringe-red))))
- `(diff-hl-dired-change ((,class (:inherit diff-hl-change))))
- `(diff-hl-dired-delete ((,class (:inherit diff-hl-delete))))
- `(diff-hl-dired-ignored ((,class (:inherit dired-ignored))))
- `(diff-hl-dired-insert ((,class (:inherit diff-hl-insert))))
- `(diff-hl-dired-unknown ((,class (:inherit dired-ignored))))
- `(diff-hl-insert ((,class (:inherit modus-theme-fringe-green))))
- `(diff-hl-reverted-hunk-highlight ((,class (:inherit modus-theme-fringe-magenta :weight bold))))
- ;;;; diff-mode
- `(diff-added ((,class ,(modus-operandi-theme-diffs
- bg-main green
- bg-diff-focus-added fg-diff-focus-added))))
- `(diff-changed ((,class ,(modus-operandi-theme-diffs
- bg-main yellow
- bg-diff-focus-changed fg-diff-focus-changed))))
- `(diff-context ((,class (:foreground ,fg-unfocused))))
- `(diff-file-header ((,class (:foreground ,blue :weight bold))))
- `(diff-function ((,class (:foreground ,fg-special-cold))))
- `(diff-header ((,class (:foreground ,blue-nuanced))))
- `(diff-hunk-header ((,class ,(modus-operandi-theme-diffs
- bg-alt blue-alt
- bg-diff-heading fg-diff-heading))))
- `(diff-index ((,class (:foreground ,blue-alt :weight bold))))
- `(diff-indicator-added ((,class (:inherit modus-theme-diff-focus-added))))
- `(diff-indicator-changed ((,class (:inherit modus-theme-diff-focus-changed))))
- `(diff-indicator-removed ((,class (:inherit modus-theme-diff-focus-removed))))
- `(diff-nonexistent ((,class (:inherit modus-theme-neutral :weight bold))))
- `(diff-refine-added ((,class ,(modus-operandi-theme-diffs
- bg-diff-added fg-diff-added
- bg-diff-refine-added fg-diff-refine-added))))
- `(diff-refine-changed ((,class ,(modus-operandi-theme-diffs
- bg-diff-changed fg-diff-changed
- bg-diff-refine-changed fg-diff-refine-changed))))
- `(diff-refine-removed ((,class ,(modus-operandi-theme-diffs
- bg-diff-removed fg-diff-removed
- bg-diff-refine-removed fg-diff-refine-removed))))
- `(diff-removed ((,class ,(modus-operandi-theme-diffs
- bg-main red
- bg-diff-focus-removed fg-diff-focus-removed))))
- ;;;; dim-autoload
- `(dim-autoload-cookie-line ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- ;;;; dired
- `(dired-directory ((,class (:foreground ,blue))))
- `(dired-flagged ((,class (:background ,bg-mark-del :foreground ,fg-mark-del :weight bold))))
- `(dired-header ((,class (:foreground ,fg-main :weight bold))))
- `(dired-ignored ((,class (:foreground ,fg-alt))))
- `(dired-mark ((,class (:foreground ,blue-alt :weight bold))))
- `(dired-marked ((,class (:background ,bg-mark :foreground ,fg-mark :weight bold))))
- `(dired-perm-write ((,class (:foreground ,fg-special-warm))))
- `(dired-symlink ((,class (:foreground ,blue-alt :underline t))))
- `(dired-warning ((,class (:foreground ,yellow :weight bold))))
- ;;;; dired-async
- `(dired-async-failures ((,class (:foreground ,red-active :weight ,modus-theme-bold))))
- `(dired-async-message ((,class (:foreground ,green-active :weight ,modus-theme-bold))))
- `(dired-async-mode-message ((,class (:foreground ,cyan-active :weight ,modus-theme-bold))))
- ;;;; dired-git
- `(dired-git-branch-else ((,class (:foreground ,magenta-alt :weight bold))))
- `(dired-git-branch-master ((,class (:foreground ,magenta-alt-other :weight bold))))
- ;;;; dired-git-info
- `(dgi-commit-message-face ((,class (:foreground ,fg-special-mild))))
- ;;;; dired-narrow
- `(dired-narrow-blink ((,class (:inherit modus-theme-subtle-cyan :weight bold))))
- ;;;; dired-subtree
- ;; remove background from dired-subtree, else it breaks
- ;; dired-{flagged,marked} and any other face that sets a background
- ;; such as hl-line
- `(dired-subtree-depth-1-face ((,class (:background nil))))
- `(dired-subtree-depth-2-face ((,class (:background nil))))
- `(dired-subtree-depth-3-face ((,class (:background nil))))
- `(dired-subtree-depth-4-face ((,class (:background nil))))
- `(dired-subtree-depth-5-face ((,class (:background nil))))
- `(dired-subtree-depth-6-face ((,class (:background nil))))
- ;;;; diredfl
- `(diredfl-autofile-name ((,class (:inherit modus-theme-refine-yellow))))
- `(diredfl-compressed-file-name ((,class (:foreground ,red-alt :weight bold))))
- `(diredfl-compressed-file-suffix ((,class (:inherit diredfl-compressed-file-name))))
- `(diredfl-date-time ((,class (:foreground ,fg-special-cold))))
- `(diredfl-deletion ((,class (:inherit dired-flagged))))
- `(diredfl-deletion-file-name ((,class (:inherit dired-flagged))))
- `(diredfl-dir-heading ((,class (:inherit dired-header))))
- `(diredfl-dir-name ((,class (:inherit dired-directory))))
- `(diredfl-dir-priv ((,class (:foreground ,blue-alt))))
- `(diredfl-exec-priv ((,class (:foreground ,cyan))))
- `(diredfl-executable-tag ((,class (:foreground ,cyan-alt))))
- `(diredfl-file-name ((,class (:foreground ,fg-main))))
- `(diredfl-file-suffix ((,class (:foreground ,fg-special-warm))))
- `(diredfl-flag-mark ((,class (:inherit dired-marked))))
- `(diredfl-flag-mark-line ((,class (:inherit dired-marked))))
- `(diredfl-ignored-file-name ((,class (:foreground ,fg-inactive))))
- `(diredfl-link-priv ((,class (:foreground ,blue-alt))))
- `(diredfl-no-priv ((,class (:foreground ,fg-inactive))))
- `(diredfl-number ((,class (:foreground ,fg-alt))))
- `(diredfl-other-priv ((,class (:foreground ,yellow))))
- `(diredfl-rare-priv ((,class (:foreground ,green))))
- `(diredfl-read-priv ((,class (:foreground ,magenta))))
- `(diredfl-symlink ((,class (:foreground ,blue-alt :underline t))))
- `(diredfl-tagged-autofile-name ((,class (:inherit modus-theme-refine-magenta))))
- `(diredfl-write-priv ((,class (:foreground ,magenta-alt-other))))
- ;;;; disk-usage
- `(disk-usage-children ((,class (:foreground ,yellow))))
- `(disk-usage-inaccessible ((,class (:foreground ,red :weight bold))))
- `(disk-usage-percent ((,class (:foreground ,green))))
- `(disk-usage-size ((,class (:foreground ,cyan))))
- `(disk-usage-symlink ((,class (:foreground ,blue :underline t))))
- `(disk-usage-symlink-directory ((,class (:foreground ,blue-alt :weight bold))))
- ;;;; doom-modeline
- `(doom-modeline-bar ((,class (:inherit modus-theme-active-blue))))
- `(doom-modeline-bar-inactive ((,class (:background ,fg-inactive :foreground ,bg-main))))
- `(doom-modeline-battery-charging ((,class (:foreground ,green-active))))
- `(doom-modeline-battery-critical ((,class (:foreground ,red-active :weight bold))))
- `(doom-modeline-battery-error ((,class (:inherit modus-theme-active-red))))
- `(doom-modeline-battery-full ((,class (:foreground ,blue-active))))
- `(doom-modeline-battery-normal ((,class (:foreground ,fg-active))))
- `(doom-modeline-battery-warning ((,class (:foreground ,yellow-active :weight bold))))
- `(doom-modeline-buffer-file ((,class (:foreground ,fg-active :weight bold))))
- `(doom-modeline-buffer-major-mode ((,class (:foreground ,cyan-active :weight bold))))
- `(doom-modeline-buffer-minor-mode ((,class (:foreground ,fg-inactive))))
- `(doom-modeline-buffer-modified ((,class (:foreground ,magenta-active :weight bold))))
- `(doom-modeline-buffer-path ((,class (:foreground ,fg-active :weight bold))))
- `(doom-modeline-debug ((,class (:foreground ,yellow-active :weight bold))))
- `(doom-modeline-evil-emacs-state ((,class (:foreground ,magenta-active :weight bold))))
- `(doom-modeline-evil-insert-state ((,class (:foreground ,green-active :weight bold))))
- `(doom-modeline-evil-motion-state ((,class (:foreground ,fg-inactive :weight bold))))
- `(doom-modeline-evil-normal-state ((,class (:foreground ,fg-active :weight bold))))
- `(doom-modeline-evil-operator-state ((,class (:foreground ,blue-active :weight bold))))
- `(doom-modeline-evil-replace-state ((,class (:foreground ,red-active :weight bold))))
- `(doom-modeline-evil-visual-state ((,class (:foreground ,cyan-active :weight bold))))
- `(doom-modeline-highlight ((,class (:foreground ,blue-active :weight bold))))
- `(doom-modeline-host ((,class (:slant italic))))
- `(doom-modeline-info ((,class (:foreground ,green-active))))
- `(doom-modeline-lsp-error ((,class (:foreground ,red-active :weight bold))))
- `(doom-modeline-lsp-success ((,class (:foreground ,green-active :weight bold))))
- `(doom-modeline-lsp-warning ((,class (:foreground ,yellow-active :weight bold))))
- `(doom-modeline-panel ((,class (:inherit modus-theme-active-blue))))
- `(doom-modeline-persp-buffer-not-in-persp ((,class (:foreground ,yellow-active :slant italic))))
- `(doom-modeline-persp-name ((,class (:foreground ,fg-active))))
- `(doom-modeline-project-dir ((,class (:foreground ,blue-active :weight bold))))
- `(doom-modeline-project-parent-dir ((,class (:foreground ,blue-active))))
- `(doom-modeline-project-root-dir ((,class (:foreground ,fg-active))))
- `(doom-modeline-unread-number ((,class (:foreground ,fg-active :slant italic))))
- `(doom-modeline-urgent ((,class (:foreground ,red-active :weight bold :underline t))))
- `(doom-modeline-warning ((,class (:foreground ,yellow-active :weight bold))))
- ;;;; dynamic-ruler
- `(dynamic-ruler-negative-face ((,class (:inherit modus-theme-intense-neutral))))
- `(dynamic-ruler-positive-face ((,class (:inherit modus-theme-intense-yellow))))
- ;;;; easy-jekyll
- `(easy-jekyll-help-face ((,class (:background ,bg-dim :foreground ,cyan-alt-other))))
- ;;;; easy-kill
- `(easy-kill-origin ((,class (:inherit modus-theme-subtle-red))))
- `(easy-kill-selection ((,class (:inherit modus-theme-subtle-yellow))))
- ;;;; ebdb
- `(ebdb-address-default ((,class (:foreground ,fg-main))))
- `(ebdb-db-char ((,class (:foreground ,fg-special-cold))))
- `(ebdb-defunct ((,class (:foreground ,fg-alt))))
- `(ebdb-field-hidden ((,class (:foreground ,magenta))))
- `(ebdb-field-url ((,class (:foreground ,blue))))
- `(ebdb-label ((,class (:foreground ,cyan-alt-other))))
- `(ebdb-mail-default ((,class (:foreground ,fg-main))))
- `(ebdb-mail-primary ((,class (:foreground ,blue-alt))))
- `(ebdb-marked ((,class (:background ,cyan-intense-bg))))
- `(ebdb-organization-name ((,class (:foreground ,fg-special-calm))))
- `(ebdb-person-name ((,class (:foreground ,magenta-alt-other))))
- `(ebdb-phone-default ((,class (:foreground ,fg-special-warm))))
- `(ebdb-role-defunct ((,class (:foreground ,fg-alt))))
- `(eieio-custom-slot-tag-face ((,class (:foreground ,red-alt))))
- ;;;; ediff
- `(ediff-current-diff-A ((,class ,(modus-operandi-theme-diffs
- bg-alt red
- bg-diff-removed fg-diff-removed))))
- `(ediff-current-diff-Ancestor ((,class ,(modus-operandi-theme-diffs
- bg-alt fg-special-cold
- bg-special-cold fg-special-cold))))
- `(ediff-current-diff-B ((,class ,(modus-operandi-theme-diffs
- bg-alt green
- bg-diff-added fg-diff-added))))
- `(ediff-current-diff-C ((,class ,(modus-operandi-theme-diffs
- bg-alt yellow
- bg-diff-changed fg-diff-changed))))
- `(ediff-even-diff-A ((,class (:background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1))))
- `(ediff-even-diff-Ancestor ((,class (:background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-1))))
- `(ediff-even-diff-B ((,class (:background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1))))
- `(ediff-even-diff-C ((,class (:background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2))))
- `(ediff-fine-diff-A ((,class (:background ,bg-diff-focus-removed :foreground ,fg-diff-focus-removed))))
- `(ediff-fine-diff-Ancestor ((,class (:inherit modus-theme-refine-cyan))))
- `(ediff-fine-diff-B ((,class (:background ,bg-diff-focus-added :foreground ,fg-diff-focus-added))))
- `(ediff-fine-diff-C ((,class (:background ,bg-diff-focus-changed :foreground ,fg-diff-focus-changed))))
- `(ediff-odd-diff-A ((,class (:background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2))))
- `(ediff-odd-diff-Ancestor ((,class (:background ,bg-diff-neutral-0 :foreground ,fg-diff-neutral-0))))
- `(ediff-odd-diff-B ((,class (:background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2))))
- `(ediff-odd-diff-C ((,class (:background ,bg-diff-neutral-1 :foreground ,fg-diff-neutral-1))))
- ;;;; eglot
- `(eglot-mode-line ((,class (:foreground ,magenta-active :weight ,modus-theme-bold))))
- ;;;; eldoc-box
- `(eldoc-box-body ((,class (:background ,bg-alt :foreground ,fg-main))))
- `(eldoc-box-border ((,class (:background ,fg-alt))))
- ;;;; elfeed
- `(elfeed-log-date-face ((,class (:foreground ,cyan-alt))))
- `(elfeed-log-debug-level-face ((,class (:foreground ,magenta))))
- `(elfeed-log-error-level-face ((,class (:foreground ,red))))
- `(elfeed-log-info-level-face ((,class (:foreground ,green))))
- `(elfeed-log-warn-level-face ((,class (:foreground ,yellow))))
- `(elfeed-search-date-face ((,class (:foreground ,cyan))))
- `(elfeed-search-feed-face ((,class (:foreground ,blue))))
- `(elfeed-search-filter-face ((,class (:foreground ,magenta-active))))
- `(elfeed-search-last-update-face ((,class (:foreground ,green-active))))
- `(elfeed-search-tag-face ((,class (:foreground ,cyan-alt-other))))
- `(elfeed-search-title-face ((,class (:foreground ,fg-main))))
- `(elfeed-search-unread-count-face ((,class (:foreground ,blue-active))))
- `(elfeed-search-unread-title-face ((,class (:weight bold))))
- ;;;; elfeed-score
- `(elfeed-score-date-face ((,class (:foreground ,blue))))
- `(elfeed-score-debug-level-face ((,class (:foreground ,magenta-alt-other))))
- `(elfeed-score-error-level-face ((,class (:foreground ,red))))
- `(elfeed-score-info-level-face ((,class (:foreground ,cyan))))
- `(elfeed-score-warn-level-face ((,class (:foreground ,yellow))))
- ;;;; emms
- `(emms-playlist-track-face ((,class (:foreground ,blue))))
- `(emms-playlist-selected-face ((,class (:foreground ,magenta :weight bold))))
- ;;;; enhanced-ruby-mode
- `(enh-ruby-heredoc-delimiter-face ((,class (:foreground ,blue-alt-other))))
- `(enh-ruby-op-face ((,class (:foreground ,fg-main))))
- `(enh-ruby-regexp-delimiter-face ((,class (:foreground ,green))))
- `(enh-ruby-regexp-face ((,class (:foreground ,magenta))))
- `(enh-ruby-string-delimiter-face ((,class (:foreground ,blue-alt))))
- `(erm-syn-errline ((,class (:foreground ,red :underline t))))
- `(erm-syn-warnline ((,class (:foreground ,yellow :underline t))))
- ;;;; epa
- `(epa-field-body ((,class (:foreground ,fg-main))))
- `(epa-field-name ((,class (:foreground ,fg-dim :weight bold))))
- `(epa-mark ((,class (:foreground ,magenta :weight bold))))
- `(epa-string ((,class (:foreground ,blue-alt))))
- `(epa-validity-disabled ((,class (:inherit modus-theme-refine-red))))
- `(epa-validity-high ((,class (:foreground ,cyan :weight bold))))
- `(epa-validity-low ((,class (:foreground ,fg-alt))))
- `(epa-validity-medium ((,class (:foreground ,yellow))))
- ;;;; equake
- `(equake-buffer-face ((,class (:background ,bg-main :foreground ,fg-main))))
- `(equake-shell-type-eshell ((,class (:background ,bg-inactive :foreground ,green-active))))
- `(equake-shell-type-rash ((,class (:background ,bg-inactive :foreground ,red-active))))
- `(equake-shell-type-shell ((,class (:background ,bg-inactive :foreground ,cyan-active))))
- `(equake-shell-type-term ((,class (:background ,bg-inactive :foreground ,yellow-active))))
- `(equake-shell-type-vterm ((,class (:background ,bg-inactive :foreground ,magenta-active))))
- `(equake-tab-active ((,class (:background ,fg-alt :foreground ,bg-alt))))
- `(equake-tab-inactive ((,class (:foreground ,fg-inactive))))
- ;;;; erc
- `(erc-action-face ((,class (:foreground ,cyan :weight bold))))
- `(erc-bold-face ((,class (:weight bold))))
- `(erc-button ((,class (:inherit button))))
- `(erc-command-indicator-face ((,class (:foreground ,cyan-alt :weight bold))))
- `(erc-current-nick-face ((,class (:foreground ,blue))))
- `(erc-dangerous-host-face ((,class (:inherit modus-theme-intense-red))))
- `(erc-direct-msg-face ((,class (:foreground ,fg-special-mild))))
- `(erc-error-face ((,class (:foreground ,red :weight bold))))
- `(erc-fool-face ((,class (:foreground ,fg-inactive))))
- `(erc-header-line ((,class (:background ,bg-alt :foreground ,fg-main))))
- `(erc-input-face ((,class (:foreground ,fg-special-calm))))
- `(erc-inverse-face ((,class (:inherit erc-default-face :inverse-video t))))
- `(erc-keyword-face ((,class (:foreground ,magenta-alt :weight bold))))
- `(erc-my-nick-face ((,class (:foreground ,magenta :weight bold))))
- `(erc-my-nick-prefix-face ((,class (:inherit erc-my-nick-face))))
- `(erc-nick-default-face ((,class (:foreground ,fg-special-cold :weight bold))))
- `(erc-nick-msg-face ((,class (:foreground ,green :weight bold))))
- `(erc-nick-prefix-face ((,class (:inherit erc-nick-default-face :weight bold))))
- `(erc-notice-face ((,class (:foreground ,fg-special-warm))))
- `(erc-pal-face ((,class (:foreground ,magenta-alt-other :weight bold))))
- `(erc-prompt-face ((,class (:foreground ,cyan-alt-other :weight bold))))
- `(erc-timestamp-face ((,class (:foreground ,blue-alt))))
- `(erc-underline-face ((,class (:underline t))))
- ;;;; ert
- `(ert-test-result-expected ((,class (:inherit modus-theme-intense-green))))
- `(ert-test-result-unexpected ((,class (:inherit modus-theme-intense-red))))
- ;;;; eshell
- `(eshell-ls-archive ((,class (:foreground ,cyan-alt :weight bold))))
- `(eshell-ls-backup ((,class (:foreground ,yellow-alt))))
- `(eshell-ls-clutter ((,class (:foreground ,red-alt))))
- `(eshell-ls-directory ((,class (:foreground ,blue-alt :weight bold))))
- `(eshell-ls-executable ((,class (:foreground ,magenta-alt))))
- `(eshell-ls-missing ((,class (:inherit modus-theme-intense-red))))
- `(eshell-ls-product ((,class (:foreground ,fg-special-warm))))
- `(eshell-ls-readonly ((,class (:foreground ,fg-special-cold))))
- `(eshell-ls-special ((,class (:foreground ,magenta :weight bold))))
- `(eshell-ls-symlink ((,class (:foreground ,cyan :underline t))))
- `(eshell-ls-unreadable ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- `(eshell-prompt ((,class (:foreground ,cyan-alt-other :weight ,modus-theme-bold))))
- ;;;; evil-mode
- `(evil-ex-commands ((,class (:foreground ,magenta-alt-other))))
- `(evil-ex-info ((,class (:foreground ,cyan-alt-other))))
- `(evil-ex-lazy-highlight ((,class (:inherit modus-theme-refine-cyan))))
- `(evil-ex-search ((,class (:inherit modus-theme-intense-green))))
- `(evil-ex-substitute-matches ((,class (:inherit modus-theme-refine-yellow :underline t))))
- `(evil-ex-substitute-replacement ((,class (:inherit modus-theme-intense-green :weight bold))))
- ;;;; evil-goggles
- `(evil-goggles-change-face ((,class (:inherit modus-theme-refine-yellow))))
- `(evil-goggles-commentary-face ((,class (:inherit modus-theme-subtle-neutral :slant ,modus-theme-slant))))
- `(evil-goggles-default-face ((,class (:inherit modus-theme-subtle-neutral))))
- `(evil-goggles-delete-face ((,class (:inherit modus-theme-refine-red))))
- `(evil-goggles-fill-and-move-face ((,class (:inherit evil-goggles-default-face))))
- `(evil-goggles-indent-face ((,class (:inherit evil-goggles-default-face))))
- `(evil-goggles-join-face ((,class (:inherit modus-theme-subtle-green))))
- `(evil-goggles-nerd-commenter-face ((,class (:inherit evil-goggles-commentary-face))))
- `(evil-goggles-paste-face ((,class (:inherit modus-theme-subtle-cyan))))
- `(evil-goggles-record-macro-face ((,class (:inherit modus-theme-special-cold))))
- `(evil-goggles-replace-with-register-face ((,class (:inherit modus-theme-refine-magenta))))
- `(evil-goggles-set-marker-face ((,class (:inherit modus-theme-intense-magenta))))
- `(evil-goggles-shift-face ((,class (:inherit evil-goggles-default-face))))
- `(evil-goggles-surround-face ((,class (:inherit evil-goggles-default-face))))
- `(evil-goggles-yank-face ((,class (:inherit modus-theme-subtle-blue))))
- ;;;; evil-visual-mark-mode
- `(evil-visual-mark-face ((,class (:inherit modus-theme-intense-magenta))))
- ;;;; eww
- `(eww-invalid-certificate ((,class (:foreground ,red-active))))
- `(eww-valid-certificate ((,class (:foreground ,green-active))))
- `(eww-form-checkbox ((,class (:box (:line-width 1 :color ,fg-inactive :style released-button) :background ,bg-inactive :foreground ,fg-main))))
- `(eww-form-file ((,class (:box (:line-width 1 :color ,fg-inactive :style released-button) :background ,bg-active :foreground ,fg-main))))
- `(eww-form-select ((,class (:inherit eww-form-checkbox))))
- `(eww-form-submit ((,class (:inherit eww-form-file))))
- `(eww-form-text ((,class (:box (:line-width 1 :color ,fg-inactive :style none) :background ,bg-active :foreground ,fg-active))))
- `(eww-form-textarea ((,class (:background ,bg-alt :foreground ,fg-main))))
- ;;;; eyebrowse
- `(eyebrowse-mode-line-active ((,class (:foreground ,blue-active :weight bold))))
- ;;;; fancy-dabbrev
- `(fancy-dabbrev-menu-face ((,class (:background ,bg-alt :foreground ,fg-alt))))
- `(fancy-dabbrev-preview-face ((,class (:foreground ,fg-alt :underline t))))
- `(fancy-dabbrev-selection-face ((,class (:inherit modus-theme-intense-cyan :weight bold))))
- ;;;; flycheck
- `(flycheck-error
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,red-nuanced :underline (:color ,fg-lang-error :style wave)))
- (,class (:foreground ,red-nuanced :underline (:color ,fg-lang-error :style line)))))
- `(flycheck-error-list-checker-name ((,class (:foreground ,magenta-active))))
- `(flycheck-error-list-column-number ((,class (:foreground ,fg-special-cold))))
- `(flycheck-error-list-error ((,class (:foreground ,red :weight ,modus-theme-bold))))
- `(flycheck-error-list-filename ((,class (:foreground ,blue))))
- `(flycheck-error-list-highlight ((,class (:inherit modus-theme-special-warm))))
- `(flycheck-error-list-id ((,class (:foreground ,magenta-alt-other))))
- `(flycheck-error-list-id-with-explainer ((,class (:inherit flycheck-error-list-id :box t))))
- `(flycheck-error-list-info ((,class (:foreground ,cyan))))
- `(flycheck-error-list-line-number ((,class (:foreground ,fg-special-warm))))
- `(flycheck-error-list-warning ((,class (:foreground ,yellow))))
- `(flycheck-fringe-error ((,class (:inherit modus-theme-fringe-red))))
- `(flycheck-fringe-info ((,class (:inherit modus-theme-fringe-cyan))))
- `(flycheck-fringe-warning ((,class (:inherit modus-theme-fringe-yellow))))
- `(flycheck-info
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,blue-nuanced :underline (:color ,fg-lang-note :style wave)))
- (,class (:foreground ,blue-nuanced :underline (:color ,fg-lang-note :style line)))))
- `(flycheck-verify-select-checker ((,class (:box (:line-width 1 :color nil :style released-button)))))
- `(flycheck-warning
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,yellow-nuanced :underline (:color ,fg-lang-warning :style wave)))
- (,class (:foreground ,yellow-nuanced :underline (:color ,fg-lang-warning :style line)))))
- ;;;; flycheck-indicator
- `(flycheck-indicator-disabled ((,class (:foreground ,fg-inactive :slant ,modus-theme-slant))))
- `(flycheck-indicator-error ((,class (:foreground ,red-active :weight ,modus-theme-bold))))
- `(flycheck-indicator-info ((,class (:foreground ,blue-active :weight ,modus-theme-bold))))
- `(flycheck-indicator-running ((,class (:foreground ,magenta-active :weight ,modus-theme-bold))))
- `(flycheck-indicator-success ((,class (:foreground ,green-active :weight ,modus-theme-bold))))
- `(flycheck-indicator-warning ((,class (:foreground ,yellow-active :weight ,modus-theme-bold))))
- ;;;; flycheck-posframe
- `(flycheck-posframe-background-face ((,class (:background ,bg-alt))))
- `(flycheck-posframe-border-face ((,class (:foreground ,fg-alt))))
- `(flycheck-posframe-error-face ((,class (:foreground ,red :weight bold))))
- `(flycheck-posframe-face ((,class (:foreground ,fg-main :slant ,modus-theme-slant))))
- `(flycheck-posframe-info-face ((,class (:foreground ,cyan :weight bold))))
- `(flycheck-posframe-warning-face ((,class (:foreground ,yellow :weight bold))))
- ;;;; flymake
- `(flymake-error
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,red-nuanced :underline (:color ,fg-lang-error :style wave)))
- (,class (:foreground ,red-nuanced :underline (:color ,fg-lang-error :style line)))))
- `(flymake-note
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,blue-nuanced :underline (:color ,fg-lang-note :style wave)))
- (,class (:foreground ,blue-nuanced :underline (:color ,fg-lang-note :style line)))))
- `(flymake-warning
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,yellow-nuanced :underline (:color ,fg-lang-warning :style wave)))
- (,class (:foreground ,yellow-nuanced :underline (:color ,fg-lang-warning :style line)))))
- ;;;; flyspell
- `(flyspell-duplicate
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,fg-lang-warning :underline (:style wave)))
- (,class (:foreground ,fg-lang-warning :underline t))))
- `(flyspell-incorrect
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,fg-lang-error :underline (:style wave)))
- (,class (:foreground ,fg-lang-error :underline t))))
- ;;;; flyspell-correct
- `(flyspell-correct-highlight-face ((,class (:inherit modus-theme-refine-green))))
- ;;;; flx
- `(flx-highlight-face ((,class (:inherit modus-theme-intense-magenta))))
- ;;;; freeze-it
- `(freeze-it-show ((,class (:background ,bg-dim :foreground ,fg-special-warm))))
- ;;;; frog-menu
- `(frog-menu-action-keybinding-face ((,class (:foreground ,blue-alt-other))))
- `(frog-menu-actions-face ((,class (:foreground ,magenta))))
- `(frog-menu-border ((,class (:background ,bg-active))))
- `(frog-menu-candidates-face ((,class (:foreground ,fg-main))))
- `(frog-menu-posframe-background-face ((,class (:background ,bg-dim))))
- `(frog-menu-prompt-face ((,class (:foreground ,cyan))))
- ;;;; focus
- `(focus-unfocused ((,class (:foreground ,fg-unfocused))))
- ;;;; fold-this
- `(fold-this-overlay ((,class (:inherit modus-theme-special-mild))))
- ;;;; font-lock
- `(font-lock-builtin-face ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(font-lock-comment-delimiter-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(font-lock-comment-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(font-lock-constant-face ((,class (:foreground ,blue-alt-other))))
- `(font-lock-doc-face ((,class (:foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(font-lock-function-name-face ((,class (:foreground ,magenta))))
- `(font-lock-keyword-face ((,class (:foreground ,magenta-alt-other :weight ,modus-theme-bold))))
- `(font-lock-negation-char-face ((,class (:foreground ,yellow :weight ,modus-theme-bold))))
- `(font-lock-preprocessor-face ((,class (:foreground ,magenta))))
- `(font-lock-regexp-grouping-backslash ((,class (:foreground ,fg-escape-char-backslash :weight bold))))
- `(font-lock-regexp-grouping-construct ((,class (:foreground ,fg-escape-char-construct :weight bold))))
- `(font-lock-string-face ((,class (:foreground ,blue-alt))))
- `(font-lock-type-face ((,class (:foreground ,magenta-alt))))
- `(font-lock-variable-name-face ((,class (:foreground ,cyan))))
- `(font-lock-warning-face ((,class (:foreground ,yellow-active :weight bold))))
- ;;;; forge
- `(forge-post-author ((,class (:foreground ,fg-main :weight bold))))
- `(forge-post-date ((,class (:foreground ,fg-special-cold))))
- `(forge-topic-closed ((,class (:foreground ,fg-alt))))
- `(forge-topic-merged ((,class (:foreground ,fg-alt))))
- `(forge-topic-open ((,class (:foreground ,fg-special-mild))))
- `(forge-topic-unmerged ((,class (:foreground ,magenta :slant ,modus-theme-slant))))
- `(forge-topic-unread ((,class (:foreground ,fg-main :weight bold))))
- ;;;; fountain-mode
- `(fountain-character ((,class (:foreground ,magenta-alt-other))))
- `(fountain-comment ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(fountain-dialog ((,class (:foreground ,blue))))
- `(fountain-metadata-key ((,class (:foreground ,blue-alt-other))))
- `(fountain-metadata-value ((,class (:foreground ,cyan-alt-other))))
- `(fountain-non-printing ((,class (:inherit fountain-comment))))
- `(fountain-note ((,class (:foreground ,fg-special-warm :slant ,modus-theme-slant))))
- `(fountain-page-break ((,class (:foreground ,yellow :weight bold))))
- `(fountain-page-number ((,class (:foreground ,yellow-alt :weight bold))))
- `(fountain-paren ((,class (:foreground ,cyan))))
- `(fountain-scene-heading ((,class (:foreground ,fg-special-calm :weight bold))))
- `(fountain-section-heading ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-main :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(fountain-section-heading-1 ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-main :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(fountain-section-heading-2 ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-special-warm :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)))))
- `(fountain-section-heading-3 ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-special-cold :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2)))))
- `(fountain-section-heading-4 ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-special-mild :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1)))))
- `(fountain-section-heading-5 ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-special-calm :weight bold))))
- `(fountain-synopsis ((,class (:foreground ,green))))
- `(fountain-template ((,class (:foreground ,magenta-alt))))
- `(fountain-trans ((,class (:foreground ,magenta :weight bold))))
- ;;;; geiser
- `(geiser-font-lock-autodoc-current-arg ((,class (:foreground ,magenta))))
- `(geiser-font-lock-autodoc-identifier ((,class (:foreground ,blue))))
- `(geiser-font-lock-doc-button ((,class (:foreground ,cyan-alt :underline t))))
- `(geiser-font-lock-doc-link ((,class (:inherit link))))
- `(geiser-font-lock-error-link ((,class (:foreground ,red-alt :underline t))))
- `(geiser-font-lock-image-button ((,class (:foreground ,green-alt :underline t))))
- `(geiser-font-lock-repl-input ((,class (:weight bold))))
- `(geiser-font-lock-repl-output ((,class (:foreground ,magenta-alt-other))))
- `(geiser-font-lock-repl-prompt ((,class (:foreground ,cyan-alt-other))))
- `(geiser-font-lock-xref-header ((,class (:weight bold))))
- `(geiser-font-lock-xref-link ((,class (:inherit link))))
- ;;;; git-commit
- `(git-commit-comment-action ((,class (:foreground ,fg-special-calm :slant ,modus-theme-slant))))
- `(git-commit-comment-branch-local ((,class (:foreground ,cyan :slant ,modus-theme-slant))))
- `(git-commit-comment-branch-remote ((,class (:foreground ,blue :slant ,modus-theme-slant))))
- `(git-commit-comment-detached ((,class (:foreground ,yellow :slant ,modus-theme-slant))))
- `(git-commit-comment-file ((,class (:foreground ,blue :slant ,modus-theme-slant))))
- `(git-commit-comment-heading ((,class (:foreground ,fg-main :weight bold :slant ,modus-theme-slant))))
- `(git-commit-keyword ((,class (:foreground ,magenta))))
- `(git-commit-known-pseudo-header ((,class (:foreground ,fg-special-warm :weight bold))))
- `(git-commit-nonempty-second-line ((,class (:inherit modus-theme-refine-yellow :weight bold))))
- `(git-commit-overlong-summary ((,class (:inherit modus-theme-subtle-yellow))))
- `(git-commit-pseudo-header ((,class (:foreground ,fg-alt :weight bold))))
- `(git-commit-summary ((,class (:foreground ,magenta-alt-other))))
- ;;;; git-gutter
- `(git-gutter:added ((,class (:inherit modus-theme-fringe-green))))
- `(git-gutter:deleted ((,class (:inherit modus-theme-fringe-red))))
- `(git-gutter:modified ((,class (:inherit modus-theme-fringe-yellow))))
- `(git-gutter:separator ((,class (:inherit modus-theme-fringe-cyan))))
- `(git-gutter:unchanged ((,class (:inherit modus-theme-fringe-magenta))))
- ;;;; git-gutter-fr
- `(git-gutter-fr:added ((,class (:inherit modus-theme-fringe-green))))
- `(git-gutter-fr:deleted ((,class (:inherit modus-theme-fringe-red))))
- `(git-gutter-fr:modified ((,class (:inherit modus-theme-fringe-yellow))))
- ;;;; git-{gutter,fringe}+
- `(git-gutter+-added ((,class (:inherit modus-theme-fringe-green))))
- `(git-gutter+-deleted ((,class (:inherit modus-theme-fringe-red))))
- `(git-gutter+-modified ((,class (:inherit modus-theme-fringe-yellow))))
- `(git-gutter+-separator ((,class (:inherit modus-theme-fringe-cyan))))
- `(git-gutter+-unchanged ((,class (:inherit modus-theme-fringe-magenta))))
- `(git-gutter-fr+-added ((,class (:inherit modus-theme-fringe-green))))
- `(git-gutter-fr+-deleted ((,class (:inherit modus-theme-fringe-red))))
- `(git-gutter-fr+-modified ((,class (:inherit modus-theme-fringe-yellow))))
- ;;;; git-lens
- `(git-lens-added ((,class (:foreground ,green :weight bold))))
- `(git-lens-deleted ((,class (:foreground ,red :weight bold))))
- `(git-lens-header ((,class (:height 1.1 :foreground ,cyan :weight bold))))
- `(git-lens-modified ((,class (:foreground ,yellow :weight bold))))
- `(git-lens-renamed ((,class (:foreground ,magenta :weight bold))))
- ;;;; git-timemachine
- `(git-timemachine-commit ((,class (:foreground ,yellow-active :weight bold))))
- `(git-timemachine-minibuffer-author-face ((,class (:foreground ,fg-special-warm))))
- `(git-timemachine-minibuffer-detail-face ((,class (:foreground ,red-alt))))
- ;;;; git-walktree
- `(git-walktree-commit-face ((,class (:foreground ,yellow))))
- `(git-walktree-symlink-face ((,class (:foreground ,cyan :underline t))))
- `(git-walktree-tree-face ((,class (:foreground ,magenta))))
- ;;;; gnus
- `(gnus-button ((,class (:inherit button))))
- `(gnus-cite-1 ((,class (:foreground ,blue-alt))))
- `(gnus-cite-10 ((,class (:foreground ,magenta-alt-other))))
- `(gnus-cite-11 ((,class (:foreground ,yellow-alt-other))))
- `(gnus-cite-2 ((,class (:foreground ,red-alt))))
- `(gnus-cite-3 ((,class (:foreground ,green-alt))))
- `(gnus-cite-4 ((,class (:foreground ,magenta-alt))))
- `(gnus-cite-5 ((,class (:foreground ,yellow-alt))))
- `(gnus-cite-6 ((,class (:foreground ,cyan-alt))))
- `(gnus-cite-7 ((,class (:foreground ,blue-alt-other))))
- `(gnus-cite-8 ((,class (:foreground ,red-alt-other))))
- `(gnus-cite-9 ((,class (:foreground ,green-alt-other))))
- `(gnus-cite-attribution ((,class (:foreground ,fg-main :slant italic))))
- `(gnus-emphasis-highlight-words ((,class (:inherit modus-theme-refine-yellow))))
- `(gnus-group-mail-1 ((,class (:foreground ,magenta :weight bold))))
- `(gnus-group-mail-1-empty ((,class (:foreground ,magenta))))
- `(gnus-group-mail-2 ((,class (:foreground ,magenta-alt :weight bold))))
- `(gnus-group-mail-2-empty ((,class (:foreground ,magenta-alt))))
- `(gnus-group-mail-3 ((,class (:foreground ,magenta-alt-other :weight bold))))
- `(gnus-group-mail-3-empty ((,class (:foreground ,magenta-alt-other))))
- `(gnus-group-mail-low ((,class (:foreground ,fg-special-calm :weight bold))))
- `(gnus-group-mail-low-empty ((,class (:foreground ,fg-special-calm))))
- `(gnus-group-news-1 ((,class (:foreground ,blue-alt-other :weight bold))))
- `(gnus-group-news-1-empty ((,class (:foreground ,blue-alt))))
- `(gnus-group-news-2 ((,class (:foreground ,green-alt-other :weight bold))))
- `(gnus-group-news-2-empty ((,class (:foreground ,green-alt))))
- `(gnus-group-news-3 ((,class (:foreground ,cyan-alt-other :weight bold))))
- `(gnus-group-news-3-empty ((,class (:foreground ,cyan))))
- `(gnus-group-news-4 ((,class (:foreground ,yellow-nuanced :weight bold))))
- `(gnus-group-news-4-empty ((,class (:foreground ,green-nuanced))))
- `(gnus-group-news-5 ((,class (:foreground ,magenta-nuanced :weight bold))))
- `(gnus-group-news-5-empty ((,class (:foreground ,magenta-nuanced))))
- `(gnus-group-news-6 ((,class (:foreground ,red-nuanced :weight bold))))
- `(gnus-group-news-6-empty ((,class (:foreground ,red-nuanced))))
- `(gnus-group-news-low ((,class (:foreground ,fg-alt :weight bold))))
- `(gnus-group-news-low-empty ((,class (:foreground ,fg-alt))))
- `(gnus-header-content ((,class (:foreground ,fg-special-calm))))
- `(gnus-header-from ((,class (:foreground ,cyan-alt :weight bold :underline nil))))
- `(gnus-header-name ((,class (:foreground ,cyan-alt-other))))
- `(gnus-header-newsgroups ((,class (:foreground ,blue-alt :weight bold))))
- `(gnus-header-subject ((,class (:foreground ,magenta-alt-other :weight bold))))
- `(gnus-server-agent ((,class (:foreground ,cyan :weight bold))))
- `(gnus-server-closed ((,class (:foreground ,magenta :weight bold))))
- `(gnus-server-cloud ((,class (:foreground ,cyan-alt :weight bold))))
- `(gnus-server-cloud-host ((,class (:inherit modus-theme-refine-cyan))))
- `(gnus-server-denied ((,class (:foreground ,red :weight bold))))
- `(gnus-server-offline ((,class (:foreground ,yellow :weight bold))))
- `(gnus-server-opened ((,class (:foreground ,green :weight bold))))
- `(gnus-signature ((,class (:foreground ,fg-special-cold :slant italic))))
- `(gnus-splash ((,class (:foreground ,fg-alt))))
- `(gnus-summary-cancelled ((,class (:background ,bg-mark-other :foreground ,fg-mark-other :weight bold))))
- `(gnus-summary-high-ancient ((,class (:foreground ,fg-alt :weight bold))))
- `(gnus-summary-high-read ((,class (:foreground ,fg-special-cold :weight bold))))
- `(gnus-summary-high-ticked ((,class (:foreground ,red-alt :weight bold))))
- `(gnus-summary-high-undownloaded ((,class (:foreground ,yellow :weight bold))))
- `(gnus-summary-high-unread ((,class (:foreground ,fg-main :weight bold))))
- `(gnus-summary-low-ancient ((,class (:foreground ,fg-alt :slant italic))))
- `(gnus-summary-low-read ((,class (:foreground ,fg-special-cold :slant italic))))
- `(gnus-summary-low-ticked ((,class (:foreground ,red-refine-fg :slant italic))))
- `(gnus-summary-low-undownloaded ((,class (:foreground ,yellow-refine-fg :slant italic))))
- `(gnus-summary-low-unread ((,class (:foreground ,fg-special-cold :weight bold))))
- `(gnus-summary-normal-ancient ((,class (:foreground ,fg-special-calm))))
- `(gnus-summary-normal-read ((,class (:foreground ,fg-special-cold))))
- `(gnus-summary-normal-ticked ((,class (:foreground ,red-alt))))
- `(gnus-summary-normal-undownloaded ((,class (:foreground ,yellow))))
- `(gnus-summary-normal-unread ((,class (:foreground ,fg-main))))
- `(gnus-summary-selected ((,class (:inherit modus-theme-subtle-cyan))))
- ;;;; helm
- `(helm-M-x-key ((,class (:foreground ,magenta-alt-other :weight bold))))
- `(helm-action ((,class (:underline t))))
- `(helm-bookmark-addressbook ((,class (:foreground ,green-alt))))
- `(helm-bookmark-directory ((,class (:foreground ,blue :weight bold))))
- `(helm-bookmark-file ((,class (:foreground ,fg-main))))
- `(helm-bookmark-file-not-found ((,class (:background ,bg-alt :foreground ,fg-alt))))
- `(helm-bookmark-gnus ((,class (:foreground ,magenta))))
- `(helm-bookmark-info ((,class (:foreground ,cyan-alt))))
- `(helm-bookmark-man ((,class (:foreground ,yellow-alt))))
- `(helm-bookmark-w3m ((,class (:foreground ,blue-alt))))
- `(helm-buffer-archive ((,class (:foreground ,cyan :weight bold))))
- `(helm-buffer-directory ((,class (:foreground ,blue :weight bold))))
- `(helm-buffer-file ((,class (:foreground ,fg-main))))
- `(helm-buffer-modified ((,class (:foreground ,yellow-alt))))
- `(helm-buffer-not-saved ((,class (:foreground ,red-alt))))
- `(helm-buffer-process ((,class (:foreground ,magenta))))
- `(helm-buffer-saved-out ((,class (:background ,bg-alt :foreground ,red :weight bold))))
- `(helm-buffer-size ((,class (:foreground ,fg-alt))))
- `(helm-candidate-number ((,class (:foreground ,cyan-active))))
- `(helm-candidate-number-suspended ((,class (:foreground ,yellow-active))))
- `(helm-delete-async-message ((,class (:foreground ,magenta-active :weight bold))))
- `(helm-eob-line ((,class (:background ,bg-main :foreground ,fg-main))))
- `(helm-etags-file ((,class (:foreground ,fg-dim :underline t))))
- `(helm-ff-denied ((,class (:inherit modus-theme-intense-red))))
- `(helm-ff-directory ((,class (:inherit helm-buffer-directory))))
- `(helm-ff-dirs ((,class (:foreground ,blue-alt-other :weight bold))))
- `(helm-ff-dotted-directory ((,class (:background ,bg-alt :foreground ,fg-alt :weight bold))))
- `(helm-ff-dotted-symlink-directory ((,class (:inherit helm-ff-dotted-directory :underline t))))
- `(helm-ff-executable ((,class (:foreground ,magenta-alt))))
- `(helm-ff-file ((,class (:foreground ,fg-main))))
- `(helm-ff-invalid-symlink ((,class (:foreground ,red :underline t))))
- `(helm-ff-pipe ((,class (:inherit modus-theme-subtle-magenta))))
- `(helm-ff-prefix ((,class (:inherit modus-theme-subtle-yellow))))
- `(helm-ff-socket ((,class (:foreground ,red-alt-other))))
- `(helm-ff-suid ((,class (:inherit modus-theme-refine-red))))
- `(helm-ff-symlink ((,class (:foreground ,cyan :underline t))))
- `(helm-ff-truename ((,class (:foreground ,blue-alt-other))))
- `(helm-grep-cmd-line ((,class (:foreground ,yellow-alt-other))))
- `(helm-grep-file ((,class (:foreground ,fg-special-cold :weight bold))))
- `(helm-grep-finish ((,class (:foreground ,green-active))))
- `(helm-grep-lineno ((,class (:foreground ,fg-special-warm))))
- `(helm-grep-match ((,class (:inherit modus-theme-special-calm))))
- `(helm-header ((,class (:foreground ,fg-special-cold :weight bold))))
- `(helm-header-line-left-margin ((,class (:foreground ,yellow-intense :weight bold))))
- `(helm-history-deleted ((,class (:inherit modus-theme-intense-red :weight bold))))
- `(helm-history-remote ((,class (:foreground ,red-alt-other))))
- `(helm-lisp-completion-info ((,class (:foreground ,fg-special-warm))))
- `(helm-lisp-show-completion ((,class (:inherit modus-theme-refine-yellow))))
- `(helm-locate-finish ((,class (:foreground ,green-active))))
- `(helm-match ((,class (:inherit modus-theme-refine-cyan :weight bold))))
- `(helm-match-item ((,class (:inherit modus-theme-subtle-cyan))))
- `(helm-minibuffer-prompt ((,class (:inherit minibuffer-prompt))))
- `(helm-moccur-buffer ((,class (:foreground ,cyan-alt-other :underline t))))
- `(helm-mode-prefix ((,class (:inherit modus-theme-intense-magenta))))
- `(helm-non-file-buffer ((,class (:foreground ,fg-alt))))
- `(helm-prefarg ((,class (:foreground ,red-active))))
- `(helm-resume-need-update ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :inherit modus-theme-refine-magenta))))
- `(helm-selection ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :inherit modus-theme-refine-blue :weight bold))))
- `(helm-selection-line ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :inherit modus-theme-special-cold))))
- `(helm-separator ((,class (:foreground ,fg-special-mild))))
- `(helm-time-zone-current ((,class (:foreground ,green))))
- `(helm-time-zone-home ((,class (:foreground ,magenta))))
- `(helm-source-header ((,class (:foreground ,red-alt :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(helm-top-columns ((,class (:inherit helm-header))))
- `(helm-ucs-char ((,class (:foreground ,yellow-alt-other))))
- `(helm-visible-mark ((,class (:inherit modus-theme-subtle-cyan))))
- ;;;; helm-ls-git
- `(helm-ls-git-added-copied-face ((,class (:foreground ,green-intense))))
- `(helm-ls-git-added-modified-face ((,class (:foreground ,yellow-intense))))
- `(helm-ls-git-conflict-face ((,class (:foreground ,red-intense :weight bold))))
- `(helm-ls-git-deleted-and-staged-face ((,class (:foreground ,red-nuanced))))
- `(helm-ls-git-deleted-not-staged-face ((,class (:foreground ,red))))
- `(helm-ls-git-modified-and-staged-face ((,class (:foreground ,yellow-nuanced))))
- `(helm-ls-git-modified-not-staged-face ((,class (:foreground ,yellow))))
- `(helm-ls-git-renamed-modified-face ((,class (:foreground ,magenta))))
- `(helm-ls-git-untracked-face ((,class (:foreground ,fg-special-cold))))
- ;;;; helm-switch-shell
- `(helm-switch-shell-new-shell-face ((,class (:inherit modus-theme-refine-magenta :weight bold))))
- ;;;; helm-xref
- `(helm-xref-file-name ((,class (:foreground ,fg-special-cold :weight bold))))
- `(helm-xref-file-name ((,class (:foreground ,fg-special-warm))))
- ;;;; helpful
- `(helpful-heading ((,class (:inherit ,modus-theme-variable-pitch :foreground ,fg-main :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- ;;;; highlight region or ad-hoc regexp
- `(hi-black-b ((,class (:background ,fg-main :foreground ,bg-main))))
- `(hi-blue ((,class (:background ,bg-alt :foreground ,blue :underline t))))
- `(hi-blue-b ((,class (:inherit modus-theme-intense-blue))))
- `(hi-green ((,class (:background ,bg-alt :foreground ,green :underline t))))
- `(hi-green-b ((,class (:inherit modus-theme-intense-green))))
- `(hi-pink ((,class (:background ,bg-alt :foreground ,magenta :underline t))))
- `(hi-red-b ((,class (:inherit modus-theme-intense-red))))
- `(hi-yellow ((,class (:background ,bg-alt :foreground ,yellow :underline t))))
- `(highlight ((,class (:inherit modus-theme-subtle-blue))))
- `(highlight-changes ((,class (:foreground ,yellow-alt-other))))
- `(highlight-changes-delete ((,class (:foreground ,red-alt-other :underline t))))
- `(hl-line ((,class (:background ,bg-hl-line))))
- `(region ((,class (:background ,bg-region :foreground ,fg-main))))
- `(secondary-selection ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- ;;;; highlight-blocks
- `(highlight-blocks-depth-1-face ((,class (:background ,bg-dim :foreground ,fg-main))))
- `(highlight-blocks-depth-2-face ((,class (:background ,bg-alt :foreground ,fg-main))))
- `(highlight-blocks-depth-3-face ((,class (:background ,bg-special-cold :foreground ,fg-main))))
- `(highlight-blocks-depth-4-face ((,class (:background ,bg-special-calm :foreground ,fg-main))))
- `(highlight-blocks-depth-5-face ((,class (:background ,bg-special-warm :foreground ,fg-main))))
- `(highlight-blocks-depth-6-face ((,class (:background ,bg-special-mild :foreground ,fg-main))))
- `(highlight-blocks-depth-7-face ((,class (:background ,bg-inactive :foreground ,fg-main))))
- `(highlight-blocks-depth-8-face ((,class (:background ,bg-active :foreground ,fg-main))))
- `(highlight-blocks-depth-9-face ((,class (:background ,cyan-subtle-bg :foreground ,fg-main))))
- ;;;; highlight-defined
- `(highlight-defined-builtin-function-name-face ((,class (:foreground ,magenta))))
- `(highlight-defined-face-name-face ((,class (:foreground ,fg-main))))
- `(highlight-defined-function-name-face ((,class (:foreground ,magenta))))
- `(highlight-defined-macro-name-face ((,class (:foreground ,magenta-alt))))
- `(highlight-defined-special-form-name-face ((,class (:foreground ,magenta-alt-other))))
- `(highlight-defined-variable-name-face ((,class (:foreground ,cyan))))
- ;;;; highlight-escape-sequences (`hes-mode')
- `(hes-escape-backslash-face ((,class (:foreground ,fg-escape-char-construct :weight bold))))
- `(hes-escape-sequence-face ((,class (:foreground ,fg-escape-char-backslash :weight bold))))
- ;;;; highlight-numbers
- `(highlight-numbers-number ((,class (:foreground ,blue-alt-other))))
- ;;;; highlight-symbol
- `(highlight-symbol-face ((,class (:inherit modus-theme-special-mild))))
- ;;;; highlight-thing
- `(highlight-thing ((,class (:background ,bg-alt :foreground ,cyan))))
- ;;;; hl-fill-column
- `(hl-fill-column-face ((,class (:background ,bg-active :foreground ,fg-active))))
- ;;;; hl-todo
- `(hl-todo ((,class (:foreground ,red-alt-other :weight bold))))
- ;;;; hydra
- `(hydra-face-amaranth ((,class (:foreground ,yellow :weight bold))))
- `(hydra-face-blue ((,class (:foreground ,blue-alt :weight bold))))
- `(hydra-face-pink ((,class (:foreground ,magenta-alt :weight bold))))
- `(hydra-face-red ((,class (:foreground ,red :weight bold))))
- `(hydra-face-teal ((,class (:foreground ,cyan :weight bold))))
- ;;;; icomplete
- `(icomplete-first-match ((,class (:foreground ,magenta :weight bold))))
- ;;;; icomplete-vertical
- `(icomplete-vertical-separator ((,class (:foreground ,fg-alt))))
- ;;;; ido-mode
- `(ido-first-match ((,class (:foreground ,magenta :weight bold))))
- `(ido-incomplete-regexp ((,class (:inherit error))))
- `(ido-indicator ((,class (:inherit modus-theme-subtle-yellow))))
- `(ido-only-match ((,class (:foreground ,magenta-intense :weight bold))))
- `(ido-subdir ((,class (:foreground ,blue-alt-other))))
- `(ido-virtual ((,class (:foreground ,yellow-alt-other))))
- ;;;; iedit
- `(iedit-occurrence ((,class (:inherit modus-theme-refine-blue))))
- `(iedit-read-only-occurrence ((,class (:inherit modus-theme-intense-yellow))))
- ;;;; iflipb
- `(iflipb-current-buffer-face ((,class (:foreground ,cyan-alt :weight bold))))
- `(iflipb-other-buffer-face ((,class (:foreground ,fg-alt))))
- ;;;; imenu-list
- `(imenu-list-entry-face-0 ((,class (:foreground ,magenta-alt-other))))
- `(imenu-list-entry-face-1 ((,class (:foreground ,cyan-alt-other))))
- `(imenu-list-entry-face-2 ((,class (:foreground ,yellow-alt-other))))
- `(imenu-list-entry-face-3 ((,class (:foreground ,green-alt-other))))
- `(imenu-list-entry-subalist-face-0 ((,class (:foreground ,magenta-alt-other :weight bold :underline t))))
- `(imenu-list-entry-subalist-face-1 ((,class (:foreground ,cyan-alt-other :weight bold :underline t))))
- `(imenu-list-entry-subalist-face-2 ((,class (:foreground ,yellow-alt-other :weight bold :underline t))))
- `(imenu-list-entry-subalist-face-3 ((,class (:foreground ,green-alt-other :weight bold :underline t))))
- ;;;; info
- `(Info-quoted ((,class (:foreground ,magenta)))) ; the capitalisation is canonical
- `(info-header-node ((,class (:foreground ,fg-special-warm))))
- `(info-header-xref ((,class (:foreground ,blue-active))))
- `(info-index-match ((,class (:inherit match))))
- `(info-menu-star ((,class (:foreground ,fg-main))))
- `(info-node ((,class (:weight bold))))
- ;;;; info-colors
- `(info-colors-lisp-code-block ((,class (:inherit fixed-pitch))))
- `(info-colors-ref-item-command ((,class (:foreground ,magenta))))
- `(info-colors-ref-item-constant ((,class (:foreground ,blue-alt-other))))
- `(info-colors-ref-item-function ((,class (:foreground ,magenta))))
- `(info-colors-ref-item-macro ((,class (:foreground ,magenta-alt-other :weight ,modus-theme-bold))))
- `(info-colors-ref-item-other ((,class (:foreground ,cyan))))
- `(info-colors-ref-item-special-form ((,class (:foreground ,magenta-alt-other :weight ,modus-theme-bold))))
- `(info-colors-ref-item-syntax-class ((,class (:foreground ,magenta))))
- `(info-colors-ref-item-type ((,class (:foreground ,magenta-alt))))
- `(info-colors-ref-item-user-option ((,class (:foreground ,cyan))))
- `(info-colors-ref-item-variable ((,class (:foreground ,cyan))))
- ;;;; interaction-log
- `(ilog-buffer-face ((,class (:foreground ,magenta-alt-other))))
- `(ilog-change-face ((,class (:foreground ,magenta-alt))))
- `(ilog-echo-face ((,class (:foreground ,yellow-alt-other))))
- `(ilog-load-face ((,class (:foreground ,green))))
- `(ilog-message-face ((,class (:foreground ,fg-alt))))
- `(ilog-non-change-face ((,class (:foreground ,blue))))
- ;;;; ioccur
- `(ioccur-cursor ((,class (:foreground ,fg-main))))
- `(ioccur-invalid-regexp ((,class (:foreground ,red))))
- `(ioccur-match-face ((,class (:inherit modus-theme-special-calm))))
- `(ioccur-match-overlay-face ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :inherit modus-theme-special-cold))))
- `(ioccur-num-line-face ((,class (:foreground ,fg-special-warm))))
- `(ioccur-overlay-face ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :inherit modus-theme-refine-blue))))
- `(ioccur-regexp-face ((,class (:inherit modus-theme-intense-magenta :weight bold))))
- `(ioccur-title-face ((,class (:foreground ,red-alt :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- ;;;; isearch, occur, and the like
- `(isearch ((,class (:inherit modus-theme-intense-green :weight bold))))
- `(isearch-fail ((,class (:inherit modus-theme-refine-red))))
- `(lazy-highlight ((,class (:inherit modus-theme-refine-cyan))))
- `(match ((,class (:inherit modus-theme-special-calm))))
- `(query-replace ((,class (:inherit modus-theme-intense-yellow :weight bold))))
- ;;;; ivy
- `(ivy-action ((,class (:foreground ,red-alt :weight bold))))
- `(ivy-completions-annotations ((,class (:foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(ivy-confirm-face ((,class (:foreground ,cyan))))
- `(ivy-current-match ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :inherit modus-theme-intense-cyan :weight bold))))
- `(ivy-cursor ((,class (:background ,fg-main :foreground ,bg-main))))
- `(ivy-grep-info ((,class (:foreground ,cyan-alt))))
- `(ivy-grep-line-number ((,class (:foreground ,fg-special-warm))))
- `(ivy-highlight-face ((,class (:foreground ,magenta))))
- `(ivy-match-required-face ((,class (:inherit error))))
- `(ivy-minibuffer-match-face-1 ((,class (:inherit modus-theme-intense-neutral))))
- `(ivy-minibuffer-match-face-2 ((,class (:inherit modus-theme-refine-green :weight bold))))
- `(ivy-minibuffer-match-face-3 ((,class (:inherit modus-theme-refine-cyan :weight bold))))
- `(ivy-minibuffer-match-face-4 ((,class (:inherit modus-theme-refine-magenta :weight bold))))
- `(ivy-minibuffer-match-highlight ((,class (:inherit modus-theme-subtle-blue :weight bold))))
- `(ivy-modified-buffer ((,class (:foreground ,yellow :slant ,modus-theme-slant))))
- `(ivy-modified-outside-buffer ((,class (:foreground ,yellow-alt :slant ,modus-theme-slant))))
- `(ivy-org ((,class (:foreground ,cyan-alt-other))))
- `(ivy-prompt-match ((,class (:inherit ivy-current-match))))
- `(ivy-remote ((,class (:foreground ,magenta))))
- `(ivy-separator ((,class (:foreground ,fg-alt))))
- `(ivy-subdir ((,class (:foreground ,blue-alt-other))))
- `(ivy-virtual ((,class (:foreground ,magenta-alt-other))))
- `(ivy-yanked-word ((,class (:inherit modus-theme-refine-blue))))
- ;;;; ivy-posframe
- `(ivy-posframe ((,class (:background ,bg-dim :foreground ,fg-main))))
- `(ivy-posframe-border ((,class (:background ,bg-active))))
- `(ivy-posframe-cursor ((,class (:background ,fg-main :foreground ,bg-main))))
- ;;;; jira (org-jira)
- `(jiralib-comment-face ((,class (:background ,bg-alt))))
- `(jiralib-comment-header-face ((,class (:weight bold))))
- `(jiralib-issue-info-face ((,class (:inherit modus-theme-special-warm))))
- `(jiralib-issue-info-header-face ((,class (:inherit modus-theme-special-warm :weight bold))))
- `(jiralib-issue-summary-face ((,class (:weight bold))))
- `(jiralib-link-filter-face ((,class (:underline t))))
- `(jiralib-link-issue-face ((,class (:underline t))))
- `(jiralib-link-project-face ((,class (:underline t))))
- ;;;; js2-mode
- `(js2-error ((,class (:foreground ,red))))
- `(js2-external-variable ((,class (:foreground ,cyan-alt-other))))
- `(js2-function-call ((,class (:foreground ,magenta))))
- `(js2-function-param ((,class (:foreground ,blue))))
- `(js2-instance-member ((,class (:foreground ,magenta-alt-other))))
- `(js2-jsdoc-html-tag-delimiter ((,class (:foreground ,fg-main))))
- `(js2-jsdoc-html-tag-name ((,class (:foreground ,cyan))))
- `(js2-jsdoc-tag ((,class (:foreground ,fg-special-calm))))
- `(js2-jsdoc-type ((,class (:foreground ,fg-special-cold))))
- `(js2-jsdoc-value ((,class (:foreground ,fg-special-warm))))
- `(js2-object-property ((,class (:foreground ,fg-main))))
- `(js2-object-property-access ((,class (:foreground ,fg-main))))
- `(js2-private-function-call ((,class (:foreground ,green-alt-other))))
- `(js2-private-member ((,class (:foreground ,fg-special-mild))))
- `(js2-warning ((,class (:foreground ,yellow-alt :underline t))))
- ;;;; julia
- `(julia-macro-face ((,class (:foreground ,magenta :weight ,modus-theme-bold))))
- `(julia-quoted-symbol-face ((,class (:foreground ,blue-alt-other))))
- ;;;; jupyter
- `(jupyter-eval-overlay ((,class (:foreground ,blue :weight bold))))
- `(jupyter-repl-input-prompt ((,class (:foreground ,cyan-alt-other))))
- `(jupyter-repl-output-prompt ((,class (:foreground ,magenta-alt-other))))
- `(jupyter-repl-traceback ((,class (:inherit modus-theme-intense-red))))
- ;;;; kaocha-runner
- `(kaocha-runner-error-face ((,class (:foreground ,red))))
- `(kaocha-runner-success-face ((,class (:foreground ,green))))
- `(kaocha-runner-warning-face ((,class (:foreground ,yellow))))
- ;;;; keycast
- `(keycast-command ((,class (:foreground ,blue-active :weight bold))))
- `(keycast-key ((,class (:box ,(modus-operandi-theme-modeline-box blue-intense blue-active t -3)
- ,@(modus-operandi-theme-modeline-props
- blue-active bg-main
- blue-active bg-active)))))
- ;;;; line numbers (display-line-numbers-mode and global variant)
- `(line-number ((,class (:background ,bg-dim :foreground ,fg-alt))))
- `(line-number-current-line ((,class (:background ,bg-active :foreground ,fg-active :weight bold))))
- ;;;; lsp-mode
- `(lsp-face-highlight-read ((,class (:inherit modus-theme-subtle-blue :underline t))))
- `(lsp-face-highlight-textual ((,class (:inherit modus-theme-subtle-blue))))
- `(lsp-face-highlight-write ((,class (:inherit modus-theme-refine-blue :weight bold))))
- `(lsp-face-semhl-constant ((,class (:foreground ,blue-alt-other))))
- `(lsp-face-semhl-deprecated
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,yellow :underline (:style wave)))
- (,class (:foreground ,yellow :underline t))))
- `(lsp-face-semhl-enummember ((,class (:foreground ,blue-alt-other))))
- `(lsp-face-semhl-field ((,class (:foreground ,cyan-alt))))
- `(lsp-face-semhl-field-static ((,class (:foreground ,cyan-alt :slant ,modus-theme-slant))))
- `(lsp-face-semhl-function ((,class (:foreground ,magenta))))
- `(lsp-face-semhl-method ((,class (:foreground ,magenta))))
- `(lsp-face-semhl-namespace ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(lsp-face-semhl-preprocessor ((,class (:foreground ,magenta))))
- `(lsp-face-semhl-static-method ((,class (:foreground ,magenta :slant ,modus-theme-slant))))
- `(lsp-face-semhl-type-class ((,class (:foreground ,magenta-alt))))
- `(lsp-face-semhl-type-enum ((,class (:foreground ,magenta-alt))))
- `(lsp-face-semhl-type-primitive ((,class (:foreground ,magenta-alt :slant ,modus-theme-slant))))
- `(lsp-face-semhl-type-template ((,class (:foreground ,magenta-alt :slant ,modus-theme-slant))))
- `(lsp-face-semhl-type-typedef ((,class (:foreground ,magenta-alt :slant ,modus-theme-slant))))
- `(lsp-face-semhl-variable ((,class (:foreground ,cyan))))
- `(lsp-face-semhl-variable-local ((,class (:foreground ,cyan))))
- `(lsp-face-semhl-variable-parameter ((,class (:foreground ,cyan-alt-other))))
- `(lsp-lens-face ((,class (:height 0.8 :foreground ,fg-alt))))
- `(lsp-lens-mouse-face ((,class (:height 0.8 :foreground ,blue-alt-other :underline t))))
- `(lsp-ui-doc-background ((,class (:background ,bg-alt))))
- `(lsp-ui-doc-header ((,class (:background ,bg-header :foreground ,fg-header))))
- `(lsp-ui-doc-url ((,class (:foreground ,blue-alt-other :underline t))))
- `(lsp-ui-peek-filename ((,class (:foreground ,fg-special-warm))))
- `(lsp-ui-peek-footer ((,class (:background ,bg-header :foreground ,fg-header))))
- `(lsp-ui-peek-header ((,class (:background ,bg-header :foreground ,fg-header))))
- `(lsp-ui-peek-highlight ((,class (:inherit modus-theme-subtle-blue))))
- `(lsp-ui-peek-line-number ((,class (:foreground ,fg-alt))))
- `(lsp-ui-peek-list ((,class (:background ,bg-dim))))
- `(lsp-ui-peek-peek ((,class (:background ,bg-alt))))
- `(lsp-ui-peek-selection ((,class (:inherit modus-theme-subtle-cyan))))
- `(lsp-ui-sideline-code-action ((,class (:foreground ,yellow))))
- `(lsp-ui-sideline-current-symbol ((,class (:height 0.99 :box (:line-width -1 :style nil) :foreground ,fg-main :weight bold))))
- `(lsp-ui-sideline-symbol ((,class (:height 0.99 :box (:line-width -1 :style nil) :foreground ,fg-alt :weight bold))))
- `(lsp-ui-sideline-symbol-info ((,class (:height 0.99 :slant italic))))
- ;;;; magit
- `(magit-bisect-bad ((,class (:foreground ,red-alt-other))))
- `(magit-bisect-good ((,class (:foreground ,green-alt-other))))
- `(magit-bisect-skip ((,class (:foreground ,yellow-alt-other))))
- `(magit-blame-date ((,class (:foreground ,fg-dim))))
- `(magit-blame-dimmed ((,class (:foreground ,fg-inactive))))
- `(magit-blame-hash ((,class (:foreground ,fg-special-warm))))
- `(magit-blame-heading ((,class (:background ,bg-main :foreground ,fg-special-cold :weight bold))))
- `(magit-blame-highlight ((,class (:inherit modus-theme-special-cold :weight bold))))
- `(magit-blame-margin ((,class (:inherit magit-blame-highlight))))
- `(magit-blame-name ((,class (:foreground ,fg-main))))
- `(magit-blame-summary ((,class (:foreground ,fg-main))))
- `(magit-branch-current ((,class (:foreground ,blue-alt-other :box t))))
- `(magit-branch-local ((,class (:foreground ,blue-alt))))
- `(magit-branch-remote ((,class (:foreground ,magenta-alt))))
- `(magit-branch-remote-head ((,class (:foreground ,magenta-alt-other :box t))))
- `(magit-branch-upstream ((,class (:slant italic))))
- `(magit-cherry-equivalent ((,class (:background ,bg-main :foreground ,magenta-intense))))
- `(magit-cherry-unmatched ((,class (:background ,bg-main :foreground ,cyan-intense))))
- `(magit-diff-added ((,class ,(modus-operandi-theme-diffs
- bg-main green
- bg-diff-added fg-diff-added))))
- `(magit-diff-added-highlight ((,class ,(modus-operandi-theme-diffs
- bg-dim green
- bg-diff-focus-added fg-diff-focus-added))))
- `(magit-diff-base ((,class ,(modus-operandi-theme-diffs
- bg-main yellow
- bg-diff-changed fg-diff-changed))))
- `(magit-diff-base-highlight ((,class ,(modus-operandi-theme-diffs
- bg-dim yellow
- bg-diff-focus-changed fg-diff-focus-changed))))
- `(magit-diff-context ((,class (:foreground ,fg-unfocused))))
- `(magit-diff-context-highlight ((,class ,(modus-operandi-theme-diffs
- bg-dim fg-dim
- bg-inactive fg-inactive))))
- `(magit-diff-file-heading ((,class (:foreground ,fg-special-cold :weight bold))))
- `(magit-diff-file-heading-highlight ((,class (:inherit modus-theme-special-cold :weight bold))))
- `(magit-diff-file-heading-selection ((,class (:background ,bg-alt :foreground ,cyan))))
- `(magit-diff-hunk-heading ((,class (:background ,bg-active :foreground ,fg-inactive :weight bold))))
- `(magit-diff-hunk-heading-highlight ((,class (:inherit modus-theme-diff-heading :weight bold))))
- `(magit-diff-hunk-heading-selection ((,class (:inherit modus-theme-intense-cyan))))
- `(magit-diff-hunk-region ((,class (:weight bold))))
- `(magit-diff-lines-boundary ((,class (:background ,fg-main))))
- `(magit-diff-lines-heading ((,class (:inherit modus-theme-refine-magenta))))
- `(magit-diff-removed ((,class ,(modus-operandi-theme-diffs
- bg-main red
- bg-diff-removed fg-diff-removed))))
- `(magit-diff-removed-highlight ((,class ,(modus-operandi-theme-diffs
- bg-dim red
- bg-diff-focus-removed fg-diff-focus-removed))))
- `(magit-diffstat-added ((,class (:foreground ,green))))
- `(magit-diffstat-removed ((,class (:foreground ,red))))
- `(magit-dimmed ((,class (:foreground ,fg-alt))))
- `(magit-filename ((,class (:foreground ,fg-special-cold))))
- `(magit-hash ((,class (:foreground ,fg-special-warm))))
- `(magit-head ((,class (:inherit magit-branch-local))))
- `(magit-header-line ((,class (:foreground ,cyan-active :weight bold))))
- `(magit-header-line-key ((,class (:foreground ,blue-active :weight bold))))
- `(magit-header-line-log-select ((,class (:foreground ,fg-main :weight bold))))
- `(magit-keyword ((,class (:foreground ,magenta))))
- `(magit-keyword-squash ((,class (:foreground ,yellow-alt-other :weight bold))))
- `(magit-log-author ((,class (:foreground ,cyan))))
- `(magit-log-date ((,class (:foreground ,magenta))))
- `(magit-log-graph ((,class (:foreground ,fg-dim))))
- `(magit-mode-line-process ((,class (:foreground ,blue-active :weight bold))))
- `(magit-mode-line-process-error ((,class (:foreground ,red-active :weight bold))))
- `(magit-process-ng ((,class (:inherit error))))
- `(magit-process-ok ((,class (:inherit success))))
- `(magit-reflog-amend ((,class (:background ,bg-main :foreground ,magenta-intense))))
- `(magit-reflog-checkout ((,class (:background ,bg-main :foreground ,blue-intense))))
- `(magit-reflog-cherry-pick ((,class (:background ,bg-main :foreground ,green-intense))))
- `(magit-reflog-commit ((,class (:background ,bg-main :foreground ,green-intense))))
- `(magit-reflog-merge ((,class (:background ,bg-main :foreground ,green-intense))))
- `(magit-reflog-other ((,class (:background ,bg-main :foreground ,cyan-intense))))
- `(magit-reflog-rebase ((,class (:background ,bg-main :foreground ,magenta-intense))))
- `(magit-reflog-remote ((,class (:background ,bg-main :foreground ,cyan-intense))))
- `(magit-reflog-reset ((,class (:background ,bg-main :foreground ,red-intense))))
- `(magit-refname ((,class (:foreground ,fg-alt))))
- `(magit-refname-pullreq ((,class (:foreground ,fg-alt))))
- `(magit-refname-stash ((,class (:foreground ,fg-alt))))
- `(magit-refname-wip ((,class (:foreground ,fg-alt))))
- `(magit-section ((,class (:background ,bg-dim :foreground ,fg-main))))
- `(magit-section-heading ((,class (:foreground ,cyan-alt-other :weight bold))))
- `(magit-section-heading-selection ((,class (:inherit modus-theme-refine-cyan :weight bold))))
- `(magit-section-highlight ((,class (:background ,bg-alt))))
- `(magit-sequence-done ((,class (:foreground ,green-alt))))
- `(magit-sequence-drop ((,class (:foreground ,red-alt))))
- `(magit-sequence-exec ((,class (:foreground ,magenta-alt))))
- `(magit-sequence-head ((,class (:foreground ,cyan-alt))))
- `(magit-sequence-onto ((,class (:foreground ,fg-alt))))
- `(magit-sequence-part ((,class (:foreground ,yellow-alt))))
- `(magit-sequence-pick ((,class (:foreground ,blue-alt))))
- `(magit-sequence-stop ((,class (:foreground ,red))))
- `(magit-signature-bad ((,class (:background ,bg-main :foreground ,red-intense :weight bold))))
- `(magit-signature-error ((,class (:background ,bg-main :foreground ,red-intense))))
- `(magit-signature-expired ((,class (:background ,bg-main :foreground ,yellow-intense))))
- `(magit-signature-expired-key ((,class (:background ,bg-main :foreground ,yellow-intense))))
- `(magit-signature-good ((,class (:background ,bg-main :foreground ,green-intense))))
- `(magit-signature-revoked ((,class (:background ,bg-main :foreground ,magenta-intense))))
- `(magit-signature-untrusted ((,class (:background ,bg-main :foreground ,cyan-intense))))
- `(magit-tag ((,class (:foreground ,yellow-alt-other))))
- ;;;; magit-imerge
- `(magit-imerge-overriding-value ((,class (:foreground ,red-alt :weight bold))))
- ;;;; man
- `(Man-overstrike ((,class (:foreground ,magenta :weight bold))))
- `(Man-reverse ((,class (:inherit modus-theme-subtle-magenta))))
- `(Man-underline ((,class (:foreground ,cyan :underline t))))
- ;;;; markdown-mode
- `(markdown-blockquote-face ((,class (:background ,bg-dim :foreground ,fg-special-warm :slant ,modus-theme-slant))))
- `(markdown-bold-face ((,class (:weight bold))))
- `(markdown-code-face ((,class (:inherit fixed-pitch))))
- `(markdown-comment-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(markdown-footnote-marker-face ((,class (:foreground ,cyan-alt :weight bold))))
- `(markdown-footnote-text-face ((,class (:foreground ,fg-main :slant ,modus-theme-slant))))
- `(markdown-gfm-checkbox-face ((,class (:foreground ,cyan-alt-other))))
- `(markdown-header-delimiter-face ((,class (:foreground ,fg-dim :weight normal))))
- `(markdown-header-face ((,class (:weight bold))))
- `(markdown-header-rule-face ((,class (:foreground ,fg-special-warm :weight bold))))
- `(markdown-hr-face ((,class (:foreground ,fg-special-warm :weight bold))))
- `(markdown-html-attr-name-face ((,class (:foreground ,cyan))))
- `(markdown-html-attr-value-face ((,class (:foreground ,blue))))
- `(markdown-html-entity-face ((,class (:foreground ,cyan))))
- `(markdown-html-tag-delimiter-face ((,class (:foreground ,fg-special-mild))))
- `(markdown-html-tag-name-face ((,class (:foreground ,magenta-alt))))
- `(markdown-inline-code-face ((,class (:foreground ,magenta))))
- `(markdown-italic-face ((,class (:slant italic))))
- `(markdown-language-info-face ((,class (:foreground ,fg-special-cold))))
- `(markdown-language-keyword-face ((,class (:foreground ,green-alt-other))))
- `(markdown-line-break-face ((,class (:inherit modus-theme-refine-cyan :underline t))))
- `(markdown-link-face ((,class (:inherit link))))
- `(markdown-link-title-face ((,class (:foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(markdown-list-face ((,class (:foreground ,fg-dim))))
- `(markdown-markup-face ((,class (:foreground ,fg-alt))))
- `(markdown-math-face ((,class (:foreground ,magenta-alt-other))))
- `(markdown-metadata-key-face ((,class (:foreground ,cyan-alt-other))))
- `(markdown-metadata-value-face ((,class (:foreground ,blue-alt))))
- `(markdown-missing-link-face ((,class (:foreground ,yellow :weight bold))))
- `(markdown-plain-url-face ((,class (:inherit markdown-link-face))))
- `(markdown-pre-face ((,class (:foreground ,fg-special-mild))))
- `(markdown-reference-face ((,class (:inherit markdown-markup-face))))
- `(markdown-strike-through-face ((,class (:strike-through t))))
- `(markdown-table-face ((,class (:foreground ,fg-special-cold))))
- `(markdown-url-face ((,class (:foreground ,blue))))
- ;;;; markup-faces (`adoc-mode')
- `(markup-anchor-face ((,class (:foreground ,fg-inactive))))
- `(markup-attribute-face ((,class (:foreground ,fg-inactive :slant italic))))
- `(markup-big-face ((,class (:height 1.3 :foreground ,blue-nuanced))))
- `(markup-bold-face ((,class (:foreground ,red-nuanced :weight bold))))
- `(markup-code-face ((,class (:inherit fixed-pitch :foreground ,magenta))))
- `(markup-command-face ((,class (:foreground ,fg-inactive))))
- `(markup-comment-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(markup-complex-replacement-face ((,class (:box (:line-width 2 :color nil :style released-button)
- :inherit modus-theme-refine-magenta))))
- `(markup-emphasis-face ((,class (:foreground ,fg-special-cold :slant italic))))
- `(markup-error-face ((,class (:foreground ,red :weight bold))))
- `(markup-gen-face ((,class (:foreground ,magenta-alt))))
- `(markup-internal-reference-face ((,class (:foreground ,fg-inactive :underline t))))
- `(markup-italic-face ((,class (:foreground ,fg-special-cold :slant italic))))
- `(markup-list-face ((,class (:inherit modus-theme-special-calm))))
- `(markup-meta-face ((,class (:foreground ,fg-inactive))))
- `(markup-meta-hide-face ((,class (:foreground ,fg-alt))))
- `(markup-passthrough-face ((,class (:inherit fixed-pitch :foreground ,cyan))))
- `(markup-preprocessor-face ((,class (:foreground ,magenta))))
- `(markup-replacement-face ((,class (:foreground ,yellow-alt-other))))
- `(markup-secondary-text-face ((,class (:height 0.8 :foreground ,magenta-nuanced))))
- `(markup-small-face ((,class (:height 0.8 :foreground ,fg-main))))
- `(markup-strong-face ((,class (:foreground ,red-nuanced :weight bold))))
- `(markup-subscript-face ((,class (:height 0.8 :foreground ,fg-special-cold))))
- `(markup-superscript-face ((,class (:height 0.8 :foreground ,fg-special-cold))))
- `(markup-table-cell-face ((,class (:inherit modus-theme-special-cold))))
- `(markup-table-face ((,class (:inherit modus-theme-subtle-cyan))))
- `(markup-table-row-face ((,class (:inherit modus-theme-subtle-cyan))))
- `(markup-title-0-face ((,class (:height 3.0 :foreground ,blue-nuanced))))
- `(markup-title-1-face ((,class (:height 2.4 :foreground ,blue-nuanced))))
- `(markup-title-2-face ((,class (:height 1.8 :foreground ,blue-nuanced))))
- `(markup-title-3-face ((,class (:height 1.4 :foreground ,blue-nuanced))))
- `(markup-title-4-face ((,class (:height 1.2 :foreground ,blue-nuanced))))
- `(markup-title-5-face ((,class (:height 1.2 :foreground ,blue-nuanced :underline t))))
- `(markup-value-face ((,class (:foreground ,fg-inactive))))
- `(markup-verbatim-face ((,class (:inherit modus-theme-special-mild))))
- ;;;; mentor
- `(mentor-download-message ((,class (:foreground ,fg-special-warm))))
- `(mentor-download-name ((,class (:foreground ,fg-special-cold))))
- `(mentor-download-progress ((,class (:foreground ,blue-alt-other))))
- `(mentor-download-size ((,class (:foreground ,magenta-alt-other))))
- `(mentor-download-speed-down ((,class (:foreground ,cyan-alt))))
- `(mentor-download-speed-up ((,class (:foreground ,red-alt))))
- `(mentor-download-state ((,class (:foreground ,yellow-alt))))
- `(mentor-highlight-face ((,class (:inherit modus-theme-subtle-blue))))
- `(mentor-tracker-name ((,class (:foreground ,magenta-alt))))
- ;;;; messages
- `(message-cited-text-1 ((,class (:foreground ,cyan))))
- `(message-cited-text-2 ((,class (:foreground ,green))))
- `(message-cited-text-3 ((,class (:foreground ,yellow))))
- `(message-cited-text-4 ((,class (:foreground ,red))))
- `(message-header-cc ((,class (:foreground ,blue-alt))))
- `(message-header-name ((,class (:foreground ,cyan-alt))))
- `(message-header-newsgroups ((,class (:foreground ,blue :weight bold))))
- `(message-header-other ((,class (:foreground ,cyan-alt-other :weight bold))))
- `(message-header-subject ((,class (:foreground ,magenta-alt-other :weight bold))))
- `(message-header-to ((,class (:foreground ,magenta-alt :weight bold))))
- `(message-header-xheader ((,class (:foreground ,blue-alt-other))))
- `(message-mml ((,class (:foreground ,green-alt-other))))
- `(message-separator ((,class (:background ,bg-alt :foreground ,fg-special-warm))))
- ;;;; modeline
- `(mode-line ((,class (:box ,(modus-operandi-theme-modeline-box bg-inactive fg-inactive t)
- ,@(modus-operandi-theme-modeline-props
- bg-active fg-dim
- bg-active fg-active)))))
- `(mode-line-buffer-id ((,class (:weight bold))))
- `(mode-line-emphasis ((,class (:foreground ,blue-active :weight bold))))
- `(mode-line-highlight ((,class (:inherit modus-theme-active-blue :box (:line-width -1 :style pressed-button)))))
- `(mode-line-inactive ((,class (:box ,(modus-operandi-theme-modeline-box bg-active bg-active)
- ,@(modus-operandi-theme-modeline-props
- bg-dim fg-inactive
- bg-inactive fg-inactive)))))
- ;;;; mood-line
- `(mood-line-modified ((,class (:foreground ,magenta-active))))
- `(mood-line-status-error ((,class (:foreground ,red-active :weight bold))))
- `(mood-line-status-info ((,class (:foreground ,cyan-active))))
- `(mood-line-status-neutral ((,class (:foreground ,blue-active))))
- `(mood-line-status-success ((,class (:foreground ,green-active))))
- `(mood-line-status-warning ((,class (:foreground ,yellow-active :weight bold))))
- `(mood-line-unimportant ((,class (:foreground ,fg-inactive))))
- ;;;; mu4e
- `(mu4e-attach-number-face ((,class (:foreground ,cyan-alt :weight bold))))
- `(mu4e-cited-1-face ((,class (:foreground ,blue-alt))))
- `(mu4e-cited-2-face ((,class (:foreground ,red-alt))))
- `(mu4e-cited-3-face ((,class (:foreground ,green-alt))))
- `(mu4e-cited-4-face ((,class (:foreground ,magenta-alt))))
- `(mu4e-cited-5-face ((,class (:foreground ,cyan-alt))))
- `(mu4e-cited-6-face ((,class (:foreground ,blue-alt-other))))
- `(mu4e-cited-7-face ((,class (:foreground ,red-alt-other))))
- `(mu4e-compose-header-face ((,class (:foreground ,green-alt))))
- `(mu4e-compose-separator-face ((,class (:background ,bg-active :foreground ,fg-main :box t))))
- `(mu4e-contact-face ((,class (:foreground ,cyan))))
- `(mu4e-context-face ((,class (:foreground ,blue-active))))
- `(mu4e-draft-face ((,class (:foreground ,magenta-refine-fg))))
- `(mu4e-flagged-face ((,class (:foreground ,red-alt-other))))
- `(mu4e-footer-face ((,class (:foreground ,fg-alt))))
- `(mu4e-forwarded-face ((,class (:foreground ,green-alt-other))))
- `(mu4e-header-face ((,class (:foreground ,fg-main))))
- `(mu4e-header-highlight-face ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :background ,bg-hl-line))))
- `(mu4e-header-key-face ((,class (:foreground ,fg-dim :weight bold))))
- `(mu4e-header-marks-face ((,class (:foreground ,magenta-alt :weight bold))))
- `(mu4e-header-title-face ((,class (:foreground ,fg-special-warm))))
- `(mu4e-header-value-face ((,class (:foreground ,magenta-alt-other))))
- `(mu4e-highlight-face ((,class (:foreground ,blue-intense :weight bold))))
- `(mu4e-link-face ((,class (:inherit link))))
- `(mu4e-modeline-face ((,class (:foreground ,magenta-active))))
- `(mu4e-moved-face ((,class (:foreground ,blue-refine-fg))))
- `(mu4e-ok-face ((,class (:foreground ,green-intense :weight bold))))
- `(mu4e-region-code ((,class (:inherit modus-theme-special-calm))))
- `(mu4e-replied-face ((,class (:foreground ,cyan-refine-fg))))
- `(mu4e-special-header-value-face ((,class (:foreground ,magenta :weight bold))))
- `(mu4e-system-face ((,class (:foreground ,fg-alt))))
- `(mu4e-title-face ((,class (:foreground ,fg-main))))
- `(mu4e-unread-face ((,class (:foreground ,fg-main :weight bold))))
- `(mu4e-url-number-face ((,class (:foreground ,blue-alt-other :weight bold))))
- `(mu4e-view-body-face ((,class (:background ,bg-main :foreground ,fg-main))))
- `(mu4e-warning-face ((,class (:inherit warning))))
- ;;;; mu4e-conversation
- `(mu4e-conversation-header ((,class (:inherit modus-theme-special-cold))))
- `(mu4e-conversation-sender-1 ((,class (:foreground ,fg-special-warm))))
- `(mu4e-conversation-sender-2 ((,class (:foreground ,fg-special-cold))))
- `(mu4e-conversation-sender-3 ((,class (:foreground ,fg-special-mild))))
- `(mu4e-conversation-sender-4 ((,class (:foreground ,fg-alt))))
- `(mu4e-conversation-sender-5 ((,class (:foreground ,yellow-refine-fg))))
- `(mu4e-conversation-sender-6 ((,class (:foreground ,cyan-refine-fg))))
- `(mu4e-conversation-sender-7 ((,class (:foreground ,green-refine-fg))))
- `(mu4e-conversation-sender-8 ((,class (:foreground ,blue-refine-fg))))
- `(mu4e-conversation-sender-me ((,class (:foreground ,fg-main))))
- `(mu4e-conversation-unread ((,class (:weight bold))))
- ;;;; multiple-cursors
- `(mc/cursor-bar-face ((,class (:height 1 :background ,fg-main))))
- `(mc/cursor-face ((,class (:inverse-video t))))
- `(mc/region-face ((,class (:inherit region))))
- ;;;; neotree
- `(neo-banner-face ((,class (:foreground ,magenta))))
- `(neo-button-face ((,class (:inherit button))))
- `(neo-dir-link-face ((,class (:foreground ,blue :weight bold))))
- `(neo-expand-btn-face ((,class (:foreground ,cyan))))
- `(neo-file-link-face ((,class (:foreground ,fg-main))))
- `(neo-header-face ((,class (:foreground ,fg-main :weight bold))))
- `(neo-root-dir-face ((,class (:foreground ,cyan-alt :weight bold))))
- `(neo-vc-added-face ((,class (:foreground ,green))))
- `(neo-vc-conflict-face ((,class (:foreground ,red :Weight bold))))
- `(neo-vc-default-face ((,class (:foreground ,fg-main))))
- `(neo-vc-edited-face ((,class (:foreground ,yellow))))
- `(neo-vc-ignored-face ((,class (:foreground ,fg-inactive))))
- `(neo-vc-missing-face ((,class (:foreground ,red-alt))))
- `(neo-vc-needs-merge-face ((,class (:foreground ,magenta-alt))))
- `(neo-vc-needs-update-face ((,class (:underline t))))
- `(neo-vc-removed-face ((,class (:strike-through t))))
- `(neo-vc-unlocked-changes-face ((,class (:inherit modus-theme-refine-blue))))
- `(neo-vc-up-to-date-face ((,class (:foreground ,fg-alt))))
- `(neo-vc-user-face ((,class (:foreground ,magenta))))
- ;;;; no-emoji
- `(no-emoji ((,class (:foreground ,cyan))))
- ;;;; num3-mode
- `(num3-face-even ((,class (:background ,bg-alt :weight bold))))
- ;;;; orderless
- `(orderless-match-face-0 ((,class (:foreground ,blue-alt :weight bold))))
- `(orderless-match-face-1 ((,class (:foreground ,magenta-alt :weight bold))))
- `(orderless-match-face-2 ((,class (:foreground ,green-alt-other :weight bold))))
- `(orderless-match-face-3 ((,class (:foreground ,yellow-alt-other :weight bold))))
- ;;;; org
- `(org-agenda-calendar-event ((,class (:foreground ,blue-alt))))
- `(org-agenda-calendar-sexp ((,class (:foreground ,cyan-alt))))
- `(org-agenda-clocking ((,class (:inherit modus-theme-special-cold))))
- `(org-agenda-column-dateline ((,class (:inherit modus-theme-subtle-neutral))))
- `(org-agenda-current-time ((,class (:inherit modus-theme-intense-cyan))))
- `(org-agenda-date ((,class (:inherit ,modus-theme-variable-pitch :foreground ,fg-main
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(org-agenda-date-today ((,class (:inherit ,modus-theme-variable-pitch :background ,cyan-subtle-bg
- :foreground ,fg-main :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(org-agenda-date-weekend ((,class (:inherit ,modus-theme-variable-pitch :foreground ,fg-alt
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(org-agenda-diary ((,class (:background ,bg-main :foreground ,fg-main))))
- `(org-agenda-dimmed-todo-face ((,class (:inherit modus-theme-subtle-neutral))))
- `(org-agenda-done ((,class (,@(modus-operandi-theme-org-todo-block green-nuanced-bg green-nuanced green)))))
- `(org-agenda-filter-category ((,class (:background ,bg-active :foreground ,fg-main :box t))))
- `(org-agenda-filter-effort ((,class (:background ,bg-active :foreground ,fg-main :box t))))
- `(org-agenda-filter-regexp ((,class (:background ,bg-active :foreground ,fg-main :box t))))
- `(org-agenda-filter-tags ((,class (:background ,bg-active :foreground ,fg-main :box t))))
- `(org-agenda-restriction-lock ((,class (:background ,bg-dim :foreground ,fg-dim))))
- `(org-agenda-structure ((,class (:inherit ,modus-theme-variable-pitch
- :foreground ,fg-special-mild
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)))))
- `(org-archived ((,class (:background ,bg-alt :foreground ,fg-alt))))
- `(org-block ((,class (,@(modus-operandi-theme-org-src-block bg-dim bg-main) :foreground ,fg-main))))
- `(org-block-begin-line ((,class (,@(and (>= emacs-major-version 27)
- modus-operandi-theme-distinct-org-blocks
- '(:extend t))
- :background ,bg-alt :foreground ,fg-special-mild))))
- `(org-block-end-line ((,class (:inherit org-block-begin-line))))
- `(org-checkbox ((,class (:weight bold))))
- `(org-checkbox-statistics-done ((,class (:foreground ,green
- ,@(modus-operandi-theme-heading-block
- green-nuanced-bg green-nuanced)))))
- `(org-checkbox-statistics-todo ((,class (:foreground ,yellow
- ,@(modus-operandi-theme-heading-block
- yellow-nuanced-bg yellow-nuanced)))))
- `(org-clock-overlay ((,class (:inherit modus-theme-special-cold))))
- `(org-code ((,class (:foreground ,magenta))))
- `(org-column ((,class (:background ,bg-alt))))
- `(org-column-title ((,class (:underline t :background ,bg-alt :weight bold))))
- `(org-date ((,class (:foreground ,blue-nuanced))))
- `(org-date-selected ((,class (:inherit modus-theme-intense-cyan :weight bold))))
- `(org-default ((,class (:background ,bg-main :foreground ,fg-main))))
- `(org-document-info ((,class (:foreground ,fg-special-cold))))
- `(org-document-title ((,class (:foreground ,fg-special-cold :weight bold))))
- `(org-done ((,class (,@(modus-operandi-theme-org-todo-block green-nuanced-bg green-nuanced green)))))
- `(org-drawer ((,class (:foreground ,cyan-alt))))
- `(org-ellipsis ((,class (:foreground nil)))) ; inherits from the heading's colour
- `(org-footnote ((,class (:foreground ,blue-alt :underline t))))
- `(org-formula ((,class (:foreground ,red-alt))))
- `(org-habit-alert-face ((,class (:inherit modus-theme-intense-yellow))))
- `(org-habit-alert-future-face ((,class (:inherit modus-theme-refine-yellow))))
- `(org-habit-clear-face ((,class (:inherit modus-theme-intense-magenta))))
- `(org-habit-clear-future-face ((,class (:inherit modus-theme-refine-magenta))))
- `(org-habit-overdue-face ((,class (:inherit modus-theme-intense-red))))
- `(org-habit-overdue-future-face ((,class (:inherit modus-theme-refine-red))))
- `(org-habit-ready-face ((,class (:inherit modus-theme-intense-blue))))
- `(org-habit-ready-future-face ((,class (:inherit modus-theme-refine-blue))))
- `(org-headline-done ((,class (:foreground ,green-nuanced
- ,@(modus-operandi-theme-heading-block
- green-nuanced-bg green-nuanced)))))
- `(org-hide ((,class (:foreground ,fg-main))))
- `(org-latex-and-related ((,class (:foreground ,magenta-refine-fg))))
- `(org-level-1 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-main magenta-alt-other)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)
- ,@(modus-operandi-theme-heading-block magenta-nuanced-bg magenta-nuanced)))))
- `(org-level-2 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-warm magenta-alt)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)
- ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced)))))
- `(org-level-3 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-cold blue)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2)
- ,@(modus-operandi-theme-heading-block blue-nuanced-bg blue-nuanced)))))
- `(org-level-4 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-mild cyan-alt-other)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1)
- ,@(modus-operandi-theme-heading-block cyan-nuanced-bg cyan-nuanced)))))
- `(org-level-5 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-calm green-alt)
- ,@(modus-operandi-theme-heading-block green-nuanced-bg green-nuanced)))))
- `(org-level-6 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground yellow-nuanced yellow-alt-other)
- ,@(modus-operandi-theme-heading-block yellow-nuanced-bg yellow-nuanced)))))
- `(org-level-7 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground red-nuanced red-alt)
- ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced)))))
- `(org-level-8 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-dim magenta)
- ,@(modus-operandi-theme-heading-block bg-alt fg-alt)))))
- `(org-link ((,class (:inherit link))))
- `(org-list-dt ((,class (:weight bold))))
- `(org-macro ((,class (:inherit org-latex-and-related))))
- `(org-meta-line ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(org-mode-line-clock ((,class (:background ,bg-main :foreground ,fg-main))))
- `(org-mode-line-clock-overrun ((,class (:inherit modus-theme-active-red))))
- `(org-priority ((,class (,@(modus-operandi-theme-org-todo-block blue-nuanced-bg blue-nuanced magenta)
- ,@(modus-operandi-theme-heading-foreground magenta blue-alt)))))
- `(org-quote ((,class (,@(modus-operandi-theme-org-src-block bg-dim bg-main)
- :foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(org-scheduled ((,class (:foreground ,fg-special-cold))))
- `(org-scheduled-previously ((,class (:foreground ,fg-special-warm))))
- `(org-scheduled-today ((,class (:foreground ,yellow-alt-other))))
- `(org-sexp-date ((,class (:inherit org-date))))
- `(org-special-keyword ((,class (,@(modus-operandi-theme-org-todo-block cyan-nuanced-bg cyan-nuanced cyan-alt)))))
- `(org-table ((,class (:foreground ,fg-special-cold))))
- `(org-tag ((,class (:foreground ,magenta-nuanced :weight normal))))
- `(org-tag-group ((,class (:foreground ,cyan-nuanced :weight bold))))
- `(org-target ((,class (:underline t))))
- `(org-time-grid ((,class (:foreground ,cyan-nuanced))))
- `(org-todo ((,class (,@(modus-operandi-theme-org-todo-block magenta-nuanced-bg magenta-nuanced magenta-alt-other)
- ,@(modus-operandi-theme-heading-foreground magenta-alt-other red-alt-other)))))
- `(org-upcoming-deadline ((,class (:foreground ,red-alt-other))))
- `(org-upcoming-distant-deadline ((,class (:foreground ,red-nuanced))))
- `(org-verbatim ((,class (:background ,bg-alt :foreground ,fg-special-calm))))
- `(org-verse ((,class (:inherit org-quote))))
- `(org-warning ((,class (:foreground ,blue-intense))))
- ;;;; org-journal
- `(org-journal-calendar-entry-face ((,class (:foreground ,yellow-alt-other :slant ,modus-theme-slant))))
- `(org-journal-calendar-scheduled-face ((,class (:foreground ,red-alt-other :slant ,modus-theme-slant))))
- `(org-journal-highlight ((,class (:foreground ,magenta-alt))))
- ;;;; org-noter
- `(org-noter-no-notes-exist-face ((,class (:foreground ,red-active :weight bold))))
- `(org-noter-notes-exist-face ((,class (:foreground ,green-active :weight bold))))
- ;;;; org-pomodoro
- `(org-pomodoro-mode-line ((,class (:foreground ,red-active))))
- `(org-pomodoro-mode-line-break ((,class (:foreground ,cyan-active))))
- `(org-pomodoro-mode-line-overtime ((,class (:foreground ,red-active :weight bold))))
- ;;;; org-recur
- `(org-recur ((,class (:foreground ,magenta-active))))
- ;;;; org-roam
- `(org-roam-link ((,class (:foreground ,blue-alt-other :underline t))))
- `(org-roam-backlink ((,class (:foreground ,green-alt-other :underline t))))
- ;;;; org-superstar
- `(org-superstar-item ((,class (:foreground ,fg-main))))
- `(org-superstar-leading ((,class (:foreground ,fg-whitespace))))
- ;;;; org-treescope
- `(org-treescope-faces--markerinternal-midday ((,class (:inherit modus-theme-intense-blue))))
- `(org-treescope-faces--markerinternal-range ((,class (:inherit modus-theme-special-mild))))
- ;;;; origami
- `(origami-fold-header-face ((,class (:background ,bg-dim :foreground ,fg-dim :box t))))
- `(origami-fold-replacement-face ((,class (:background ,bg-alt :foreground ,fg-alt))))
- ;;;; outline-mode
- `(outline-1 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-main magenta-alt-other)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)
- ,@(modus-operandi-theme-heading-block magenta-nuanced-bg magenta-nuanced)))))
- `(outline-2 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-warm magenta-alt)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)
- ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced)))))
- `(outline-3 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-cold blue)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-2)
- ,@(modus-operandi-theme-heading-block blue-nuanced-bg blue-nuanced)))))
- `(outline-4 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-mild cyan-alt-other)
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-1)
- ,@(modus-operandi-theme-heading-block cyan-nuanced-bg cyan-nuanced)))))
- `(outline-5 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-special-calm green-alt)
- ,@(modus-operandi-theme-heading-block green-nuanced-bg green-nuanced)))))
- `(outline-6 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground yellow-nuanced yellow-alt-other)
- ,@(modus-operandi-theme-heading-block yellow-nuanced-bg yellow-nuanced)))))
- `(outline-7 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground red-nuanced red-alt)
- ,@(modus-operandi-theme-heading-block red-nuanced-bg red-nuanced)))))
- `(outline-8 ((,class (:inherit ,modus-theme-variable-pitch :weight bold
- ,@(modus-operandi-theme-heading-foreground fg-dim magenta)
- ,@(modus-operandi-theme-heading-block bg-alt fg-alt)))))
- ;;;; outline-minor-faces
- `(outline-minor-0 ((,class (:background ,bg-alt))))
- ;;;; package (M-x list-packages)
- `(package-description ((,class (:foreground ,fg-special-cold))))
- `(package-help-section-name ((,class (:foreground ,magenta-alt-other :weight bold))))
- `(package-name ((,class (:inherit link))))
- `(package-status-avail-obso ((,class (:foreground ,red :weight bold))))
- `(package-status-available ((,class (:foreground ,fg-special-mild))))
- `(package-status-built-in ((,class (:foreground ,magenta))))
- `(package-status-dependency ((,class (:foreground ,magenta-alt-other))))
- `(package-status-disabled ((,class (:inherit modus-theme-subtle-red))))
- `(package-status-external ((,class (:foreground ,cyan-alt-other))))
- `(package-status-held ((,class (:foreground ,yellow-alt))))
- `(package-status-incompat ((,class (:foreground ,yellow :weight bold))))
- `(package-status-installed ((,class (:foreground ,fg-special-warm))))
- `(package-status-new ((,class (:foreground ,green :weight bold))))
- `(package-status-unsigned ((,class (:foreground ,red-alt :weight bold))))
- ;;;; page-break-lines
- `(page-break-lines ((,class (:inherit default :foreground ,fg-window-divider-outer))))
- ;;;; paradox
- `(paradox-archive-face ((,class (:foreground ,fg-special-mild))))
- `(paradox-comment-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(paradox-commit-tag-face ((,class (:inherit modus-theme-refine-magenta :box t))))
- `(paradox-description-face ((,class (:foreground ,fg-special-cold))))
- `(paradox-description-face-multiline ((,class (:foreground ,fg-special-cold))))
- `(paradox-download-face ((,class (:foreground ,blue-alt-other :weight ,modus-theme-bold))))
- `(paradox-highlight-face ((,class (:foreground ,cyan-alt-other :weight ,modus-theme-bold))))
- `(paradox-homepage-button-face ((,class (:foreground ,magenta-alt-other :underline t))))
- `(paradox-mode-line-face ((,class (:foreground ,cyan-active :weight bold))))
- `(paradox-name-face ((,class (:foreground ,blue :underline t))))
- `(paradox-star-face ((,class (:foreground ,magenta))))
- `(paradox-starred-face ((,class (:foreground ,magenta-alt))))
- ;;;; paren-face
- `(parenthesis ((,class (:foreground ,fg-alt))))
- ;;;; parrot
- `(parrot-rotate-rotation-highlight-face ((,class (:inherit modus-theme-refine-magenta))))
- ;;;; pass
- `(pass-mode-directory-face ((,class (:foreground ,fg-special-cold :weight bold))))
- `(pass-mode-entry-face ((,class (:background ,bg-main :foreground ,fg-main))))
- `(pass-mode-header-face ((,class (:foreground ,fg-special-warm))))
- ;;;; persp-mode
- `(persp-face-lighter-buffer-not-in-persp ((,class (:inherit modus-theme-intense-red))))
- `(persp-face-lighter-default ((,class (:foreground ,blue-active :weight bold))))
- `(persp-face-lighter-nil-persp ((,class (:foreground ,fg-active :weight bold))))
- ;;;; perspective
- `(persp-selected-face ((,class (:foreground ,blue-active :weight bold))))
- ;;;; phi-grep
- `(phi-grep-heading-face ((,class (:foreground ,red-alt :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(phi-grep-line-number-face ((,class (:foreground ,fg-special-warm))))
- `(phi-grep-match-face ((,class (:inherit modus-theme-special-calm))))
- `(phi-grep-modified-face ((,class (:inherit modus-theme-refine-yellow))))
- `(phi-grep-overlay-face ((,class (:inherit modus-theme-refine-blue))))
- ;;;; phi-search
- `(phi-replace-preview-face ((,class (:inherit modus-theme-intense-magenta))))
- `(phi-search-failpart-face ((,class (:inherit modus-theme-refine-red))))
- `(phi-search-match-face ((,class (:inherit modus-theme-refine-cyan))))
- `(phi-search-selection-face ((,class (:inherit modus-theme-intense-green :weight bold))))
- ;;;; pomidor
- `(pomidor-break-face ((,class (:foreground ,blue-alt-other))))
- `(pomidor-overwork-face ((,class (:foreground ,red-alt-other))))
- `(pomidor-skip-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(pomidor-work-face ((,class (:foreground ,green-alt-other))))
- ;;;; powerline
- `(powerline-active0 ((,class (:background ,fg-inactive :foreground ,bg-inactive))))
- `(powerline-active1 ((,class (:background ,bg-active :foreground ,fg-active))))
- `(powerline-active2 ((,class (:background ,bg-alt :foreground ,fg-active))))
- `(powerline-inactive0 ((,class (:background ,bg-active :foreground ,fg-inactive))))
- `(powerline-inactive1 ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- `(powerline-inactive2 ((,class (:background ,bg-main :foreground ,fg-alt))))
- ;;;; powerline-evil
- `(powerline-evil-base-face ((,class (:background ,fg-main :foreground ,bg-main))))
- `(powerline-evil-emacs-face ((,class (:inherit modus-theme-active-magenta))))
- `(powerline-evil-insert-face ((,class (:inherit modus-theme-active-green))))
- `(powerline-evil-motion-face ((,class (:inherit modus-theme-active-blue))))
- `(powerline-evil-normal-face ((,class (:background ,fg-alt :foreground ,bg-main))))
- `(powerline-evil-operator-face ((,class (:inherit modus-theme-active-yellow))))
- `(powerline-evil-replace-face ((,class (:inherit modus-theme-active-red))))
- `(powerline-evil-visual-face ((,class (:inherit modus-theme-active-cyan))))
- ;;;; proced
- `(proced-mark ((,class (:foreground ,blue-alt :weight bold))))
- `(proced-marked ((,class (:background ,bg-mark-other :foreground ,fg-mark-other :weight bold))))
- `(proced-sort-header ((,class (:foreground ,fg-special-calm :weight bold :underline t))))
- ;;;; prodigy
- `(prodigy-green-face ((,class (:foreground ,green))))
- `(prodigy-red-face ((,class (:foreground ,red))))
- `(prodigy-yellow-face ((,class (:foreground ,yellow))))
- ;;;; rainbow-blocks
- `(rainbow-blocks-depth-1-face ((,class (:foreground ,magenta-alt-other))))
- `(rainbow-blocks-depth-2-face ((,class (:foreground ,blue))))
- `(rainbow-blocks-depth-3-face ((,class (:foreground ,magenta-alt))))
- `(rainbow-blocks-depth-4-face ((,class (:foreground ,green))))
- `(rainbow-blocks-depth-5-face ((,class (:foreground ,magenta))))
- `(rainbow-blocks-depth-6-face ((,class (:foreground ,cyan))))
- `(rainbow-blocks-depth-7-face ((,class (:foreground ,yellow))))
- `(rainbow-blocks-depth-8-face ((,class (:foreground ,cyan-alt))))
- `(rainbow-blocks-depth-9-face ((,class (:foreground ,red-alt))))
- `(rainbow-blocks-unmatched-face ((,class (:foreground ,red))))
- ;;;; rainbow-identifiers
- `(rainbow-identifiers-identifier-1 ((,class (:foreground ,green-alt-other))))
- `(rainbow-identifiers-identifier-2 ((,class (:foreground ,magenta-alt-other))))
- `(rainbow-identifiers-identifier-3 ((,class (:foreground ,cyan-alt-other))))
- `(rainbow-identifiers-identifier-4 ((,class (:foreground ,yellow-alt-other))))
- `(rainbow-identifiers-identifier-5 ((,class (:foreground ,blue-alt-other))))
- `(rainbow-identifiers-identifier-6 ((,class (:foreground ,green-alt))))
- `(rainbow-identifiers-identifier-7 ((,class (:foreground ,magenta-alt))))
- `(rainbow-identifiers-identifier-8 ((,class (:foreground ,cyan-alt))))
- `(rainbow-identifiers-identifier-9 ((,class (:foreground ,yellow-alt))))
- `(rainbow-identifiers-identifier-10 ((,class (:foreground ,green))))
- `(rainbow-identifiers-identifier-11 ((,class (:foreground ,magenta))))
- `(rainbow-identifiers-identifier-12 ((,class (:foreground ,cyan))))
- `(rainbow-identifiers-identifier-13 ((,class (:foreground ,yellow))))
- `(rainbow-identifiers-identifier-14 ((,class (:foreground ,blue-alt))))
- `(rainbow-identifiers-identifier-15 ((,class (:foreground ,red-alt))))
- ;;;; rainbow-delimiters
- `(rainbow-delimiters-base-face-error ((,class (:foreground ,red))))
- `(rainbow-delimiters-base-face ((,class (:foreground ,fg-main))))
- `(rainbow-delimiters-depth-1-face ((,class (:foreground ,green-alt-other))))
- `(rainbow-delimiters-depth-2-face ((,class (:foreground ,magenta-alt-other))))
- `(rainbow-delimiters-depth-3-face ((,class (:foreground ,cyan-alt-other))))
- `(rainbow-delimiters-depth-4-face ((,class (:foreground ,yellow-alt-other))))
- `(rainbow-delimiters-depth-5-face ((,class (:foreground ,blue-alt-other))))
- `(rainbow-delimiters-depth-6-face ((,class (:foreground ,green-alt))))
- `(rainbow-delimiters-depth-7-face ((,class (:foreground ,magenta-alt))))
- `(rainbow-delimiters-depth-8-face ((,class (:foreground ,cyan-alt))))
- `(rainbow-delimiters-depth-9-face ((,class (:foreground ,yellow-alt))))
- `(rainbow-delimiters-mismatched-face ((,class (:foreground ,red-alt :weight bold))))
- `(rainbow-delimiters-unmatched-face ((,class (:foreground ,red :weight bold))))
- ;;;; rcirc
- `(rcirc-bright-nick ((,class (:foreground ,magenta-alt :weight bold))))
- `(rcirc-dim-nick ((,class (:foreground ,fg-alt))))
- `(rcirc-my-nick ((,class (:foreground ,magenta :weight bold))))
- `(rcirc-nick-in-message ((,class (:foreground ,blue))))
- `(rcirc-nick-in-message-full-line ((,class (:foreground ,fg-special-mild :weight bold))))
- `(rcirc-other-nick ((,class (:foreground ,fg-special-cold :weight bold))))
- `(rcirc-prompt ((,class (:foreground ,cyan-alt-other :weight bold))))
- `(rcirc-server ((,class (:foreground ,fg-special-warm))))
- `(rcirc-timestamp ((,class (:foreground ,fg-inactive))))
- `(rcirc-url ((,class (:foreground ,blue :underline t))))
- ;;;; regexp-builder (re-builder)
- `(reb-match-0 ((,class (:inherit modus-theme-intense-blue))))
- `(reb-match-1 ((,class (:inherit modus-theme-intense-magenta))))
- `(reb-match-2 ((,class (:inherit modus-theme-intense-green))))
- `(reb-match-3 ((,class (:inherit modus-theme-intense-red))))
- `(reb-regexp-grouping-backslash ((,class (:foreground ,fg-escape-char-backslash :weight bold))))
- `(reb-regexp-grouping-construct ((,class (:foreground ,fg-escape-char-construct :weight bold))))
- ;;;; rg (rg.el)
- `(rg-column-number-face ((,class (:foreground ,magenta-alt-other))))
- `(rg-context-face ((,class (:foreground ,fg-unfocused))))
- `(rg-error-face ((,class (:foreground ,red :weight bold))))
- `(rg-file-tag-face ((,class (:foreground ,fg-special-cold))))
- `(rg-filename-face ((,class (:foreground ,fg-special-cold :weight bold))))
- `(rg-line-number-face ((,class (:foreground ,fg-special-warm))))
- `(rg-literal-face ((,class (:foreground ,blue-alt))))
- `(rg-match-face ((,class (:inherit modus-theme-special-calm))))
- `(rg-regexp-face ((,class (:foreground ,magenta-active))))
- `(rg-toggle-off-face ((,class (:foreground ,fg-inactive :weight bold))))
- `(rg-toggle-on-face ((,class (:foreground ,cyan-active :weight bold))))
- `(rg-warning-face ((,class (:foreground ,yellow :weight bold))))
- ;;;; ripgrep
- `(ripgrep-context-face ((,class (:foreground ,fg-unfocused))))
- `(ripgrep-error-face ((,class (:foreground ,red :weight bold))))
- `(ripgrep-hit-face ((,class (:foreground ,cyan))))
- `(ripgrep-match-face ((,class (:inherit modus-theme-special-calm))))
- ;;;; rmail
- `(rmail-header-name ((,class (:foreground ,cyan-alt-other))))
- `(rmail-highlight ((,class (:foreground ,magenta-alt :weight bold))))
- ;;;; ruler-mode
- `(ruler-mode-column-number ((,class (:inherit ruler-mode-default :foreground ,fg-main :weight bold))))
- `(ruler-mode-comment-column ((,class (:inherit ruler-mode-default :foreground ,red-active))))
- `(ruler-mode-current-column ((,class (:inherit ruler-mode-default :foreground ,cyan-active :box t))))
- `(ruler-mode-default ((,class (:background ,bg-inactive :foreground ,fg-inactive))))
- `(ruler-mode-fill-column ((,class (:inherit ruler-mode-default :foreground ,green-active))))
- `(ruler-mode-fringes ((,class (:inherit ruler-mode-default :foreground ,blue-active))))
- `(ruler-mode-goal-column ((,class (:inherit ruler-mode-default :foreground ,magenta-active))))
- `(ruler-mode-margins ((,class (:inherit ruler-mode-default :foreground ,bg-main))))
- `(ruler-mode-pad ((,class (:background ,bg-active :foreground ,fg-inactive))))
- `(ruler-mode-tab-stop ((,class (:inherit ruler-mode-default :foreground ,yellow-active))))
- ;;;; sallet
- `(sallet-buffer-compressed ((,class (:foreground ,yellow-nuanced :slant italic))))
- `(sallet-buffer-default-directory ((,class (:foreground ,cyan-nuanced))))
- `(sallet-buffer-directory ((,class (:foreground ,blue-nuanced))))
- `(sallet-buffer-help ((,class (:foreground ,fg-special-cold))))
- `(sallet-buffer-modified ((,class (:foreground ,yellow-alt-other :slant italic))))
- `(sallet-buffer-ordinary ((,class (:foreground ,fg-main))))
- `(sallet-buffer-read-only ((,class (:foreground ,yellow-alt))))
- `(sallet-buffer-size ((,class (:foreground ,fg-special-calm))))
- `(sallet-buffer-special ((,class (:foreground ,magenta-alt-other))))
- `(sallet-flx-match ((,class (:inherit modus-theme-refine-cyan))))
- `(sallet-recentf-buffer-name ((,class (:foreground ,blue-nuanced))))
- `(sallet-recentf-file-path ((,class (:foreground ,fg-special-mild))))
- `(sallet-regexp-match ((,class (:inherit modus-theme-refine-magenta))))
- `(sallet-source-header ((,class (:foreground ,red-alt :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(sallet-substring-match ((,class (:inherit modus-theme-refine-blue))))
- ;;;; selectrum
- `(selectrum-current-candidate ((,class (:inherit modus-theme-intense-cyan))))
- `(selectrum-primary-highlight ((,class (:foreground ,magenta-alt :weight bold))))
- `(selectrum-secondary-highlight ((,class (:foreground ,blue-alt-other :weight bold))))
- ;;;; sesman
- `(sesman-browser-button-face ((,class (:foreground ,blue-alt-other :underline t))))
- `(sesman-browser-highligh-face ((,class (:inherit modus-theme-subtle-blue))))
- `(sesman-buffer-face ((,class (:foreground ,magenta))))
- `(sesman-directory-face ((,class (:foreground ,blue :weight bold))))
- `(sesman-project-face ((,class (:foreground ,magenta-alt-other :weight bold))))
- ;;;; shell-script-mode
- `(sh-heredoc ((,class (:foreground ,blue-alt))))
- `(sh-quoted-exec ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- ;;;; show-paren-mode
- `(show-paren-match ((,class (:background ,bg-paren-match :foreground ,fg-main))))
- `(show-paren-match-expression ((,class (:inherit modus-theme-special-calm))))
- `(show-paren-mismatch ((,class (:inherit modus-theme-intense-red))))
- ;;;; side-notes
- `(side-notes ((,class (:background ,bg-dim :foreground ,fg-dim))))
- ;;;; skewer-mode
- `(skewer-error-face ((,class (:foreground ,red :underline t))))
- ;;;; smart-mode-line
- `(sml/charging ((,class (:foreground ,green-active))))
- `(sml/discharging ((,class (:foreground ,red-active))))
- `(sml/filename ((,class (:foreground ,blue-active :weight bold))))
- `(sml/folder ((,class (:foreground ,fg-active))))
- `(sml/git ((,class (:foreground ,green-active :weight bold))))
- `(sml/global ((,class (:foreground ,fg-active))))
- `(sml/line-number ((,class (:inherit sml/global))))
- `(sml/minor-modes ((,class (:inherit sml/global))))
- `(sml/modes ((,class (:foreground ,fg-active :weight bold))))
- `(sml/modified ((,class (:foreground ,magenta-active :weight bold))))
- `(sml/mule-info ((,class (:inherit sml/global))))
- `(sml/name-filling ((,class (:foreground ,yellow-active))))
- `(sml/not-modified ((,class (:inherit sml/global))))
- `(sml/numbers-separator ((,class (:inherit sml/global))))
- `(sml/outside-modified ((,class (:inherit modus-theme-intense-red))))
- `(sml/position-percentage ((,class (:inherit sml/global))))
- `(sml/prefix ((,class (:foreground ,green-active))))
- `(sml/process ((,class (:inherit sml/prefix))))
- `(sml/projectile ((,class (:inherit sml/git))))
- `(sml/read-only ((,class (:foreground ,cyan-active :weight bold))))
- `(sml/remote ((,class (:inherit sml/global))))
- `(sml/sudo ((,class (:inherit modus-theme-subtle-red))))
- `(sml/time ((,class (:inherit sml/global))))
- `(sml/vc ((,class (:inherit sml/git))))
- `(sml/vc-edited ((,class (:foreground ,yellow-active :weight bold))))
- ;;;; smartparens
- `(sp-pair-overlay-face ((,class (:inherit modus-theme-special-warm))))
- `(sp-show-pair-enclosing ((,class (:inherit modus-theme-special-mild))))
- `(sp-show-pair-match-face ((,class (:background ,bg-paren-match :foreground ,fg-main))))
- `(sp-show-pair-mismatch-face ((,class (:inherit modus-theme-intense-red))))
- `(sp-wrap-overlay-closing-pair ((,class (:inherit sp-pair-overlay-face))))
- `(sp-wrap-overlay-face ((,class (:inherit sp-pair-overlay-face))))
- `(sp-wrap-overlay-opening-pair ((,class (:inherit sp-pair-overlay-face))))
- `(sp-wrap-tag-overlay-face ((,class (:inherit sp-pair-overlay-face))))
- ;;;; smerge
- `(smerge-base ((,class ,(modus-operandi-theme-diffs
- bg-main yellow
- bg-diff-focus-changed fg-diff-focus-changed))))
- `(smerge-lower ((,class ,(modus-operandi-theme-diffs
- bg-main green
- bg-diff-focus-added fg-diff-focus-added))))
- `(smerge-markers ((,class (:background ,bg-diff-neutral-2 :foreground ,fg-diff-neutral-2))))
- `(smerge-refined-added ((,class ,(modus-operandi-theme-diffs
- bg-diff-added fg-diff-added
- bg-diff-refine-added fg-diff-refine-added))))
- `(smerge-refined-changed ((,class nil)))
- `(smerge-refined-removed ((,class ,(modus-operandi-theme-diffs
- bg-diff-removed fg-diff-removed
- bg-diff-refine-removed fg-diff-refine-removed))))
- `(smerge-upper ((,class ,(modus-operandi-theme-diffs
- bg-main red
- bg-diff-focus-removed fg-diff-focus-removed))))
- ;;;; speedbar
- `(speedbar-button-face ((,class (:inherit link))))
- `(speedbar-directory-face ((,class (:foreground ,blue :weight bold))))
- `(speedbar-file-face ((,class (:foreground ,fg-main))))
- `(speedbar-highlight-face ((,class (:inherit modus-theme-subtle-blue))))
- `(speedbar-selected-face ((,class (:foreground ,cyan :weight bold))))
- `(speedbar-separator-face ((,class (:inherit modus-theme-intense-neutral))))
- `(speedbar-tag-face ((,class (:foreground ,yellow-alt-other))))
- ;;;; spell-fu
- `(spell-fu-incorrect-face
- ((,(append '((supports :underline (:style wave))) class)
- (:foreground ,fg-lang-error :underline (:style wave)))
- (,class (:foreground ,fg-lang-error :underline t))))
- ;;;; stripes
- `(stripes ((,class (:background ,bg-alt))))
- ;;;; success
- `(suggest-heading ((,class (:foreground ,yellow-alt-other :weight bold))))
- ;;;; switch-window
- `(switch-window-background ((,class (:background ,bg-dim))))
- `(switch-window-label ((,class (:height 3.0 :foreground ,blue-intense))))
- ;;;; swiper
- `(swiper-background-match-face-1 ((,class (:inherit modus-theme-subtle-neutral))))
- `(swiper-background-match-face-2 ((,class (:inherit modus-theme-subtle-cyan))))
- `(swiper-background-match-face-3 ((,class (:inherit modus-theme-subtle-magenta))))
- `(swiper-background-match-face-4 ((,class (:inherit modus-theme-subtle-green))))
- `(swiper-line-face ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :inherit modus-theme-special-cold))))
- `(swiper-match-face-1 ((,class (:inherit swiper-line-face))))
- `(swiper-match-face-2 ((,class (:inherit swiper-line-face))))
- `(swiper-match-face-3 ((,class (:inherit swiper-line-face))))
- `(swiper-match-face-4 ((,class (:inherit swiper-line-face))))
- ;;;; swoop
- `(swoop-face-header-format-line ((,class (:foreground ,red-alt :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-3)))))
- `(swoop-face-line-buffer-name ((,class (:foreground ,blue-alt :weight bold
- ,@(modus-operandi-theme-scale modus-operandi-theme-scale-4)))))
- `(swoop-face-line-number ((,class (:foreground ,fg-special-warm))))
- `(swoop-face-target-line ((,class (:inherit modus-theme-intense-blue
- ,@(and (>= emacs-major-version 27) '(:extend t))))))
- `(swoop-face-target-words ((,class (:inherit modus-theme-refine-cyan))))
- ;;;; sx
- `(sx-inbox-item-type ((,class (:foreground ,magenta-alt-other))))
- `(sx-inbox-item-type-unread ((,class (:inherit sx-inbox-item-type :weight bold))))
- `(sx-question-list-answers ((,class (:foreground ,green))))
- `(sx-question-list-answers-accepted ((,class (:box t :foreground ,green))))
- `(sx-question-list-bounty ((,class (:background ,bg-alt :foreground ,yellow :weight bold))))
- `(sx-question-list-date ((,class (:foreground ,fg-special-cold))))
- `(sx-question-list-favorite ((,class (:foreground ,fg-special-warm :weight bold))))
- `(sx-question-list-parent ((,class (:foreground ,fg-main))))
- `(sx-question-list-read-question ((,class (:foreground ,fg-alt))))
- `(sx-question-list-score ((,class (:foreground ,fg-special-mild))))
- `(sx-question-list-score-upvoted ((,class (:inherit sx-question-list-score :weight bold))))
- `(sx-question-list-unread-question ((,class (:foreground ,fg-main :weight bold))))
- `(sx-question-mode-accepted ((,class (:height 1.3 :foreground ,green :weight bold))))
- `(sx-question-mode-closed ((,class (:box (:line-width 2 :color nil) :inherit modus-theme-active-yellow))))
- `(sx-question-mode-closed-reason ((,class (:box (:line-width 2 :color nil) :foreground ,fg-main))))
- `(sx-question-mode-content-face ((,class (:background ,bg-dim))))
- `(sx-question-mode-date ((,class (:foreground ,blue))))
- `(sx-question-mode-header ((,class (:foreground ,cyan :weight bold))))
- `(sx-question-mode-kbd-tag ((,class (:height 0.9 :box (:line-width 3 :color ,fg-main :style released-button) :foreground ,fg-main :weight bold))))
- `(sx-question-mode-score ((,class (:foreground ,fg-dim))))
- `(sx-question-mode-score-downvoted ((,class (:foreground ,yellow))))
- `(sx-question-mode-score-upvoted ((,class (:foreground ,magenta :weight bold))))
- `(sx-question-mode-title ((,class (:foreground ,fg-main :weight bold))))
- `(sx-question-mode-title-comments ((,class (:foreground ,fg-alt :weight bold))))
- `(sx-tag ((,class (:foreground ,magenta-alt))))
- `(sx-user-name ((,class (:foreground ,blue-alt))))
- `(sx-user-reputation ((,class (:foreground ,fg-alt))))
- ;;;; symbol-overlay
- `(symbol-overlay-default-face ((,class (:inherit modus-theme-refine-blue))))
- `(symbol-overlay-face-1 ((,class (:inherit modus-theme-intense-blue))))
- `(symbol-overlay-face-2 ((,class (:inherit modus-theme-refine-magenta))))
- `(symbol-overlay-face-3 ((,class (:inherit modus-theme-intense-yellow))))
- `(symbol-overlay-face-4 ((,class (:inherit modus-theme-intense-magenta))))
- `(symbol-overlay-face-5 ((,class (:inherit modus-theme-intense-red))))
- `(symbol-overlay-face-6 ((,class (:inherit modus-theme-refine-red))))
- `(symbol-overlay-face-7 ((,class (:inherit modus-theme-intense-cyan))))
- `(symbol-overlay-face-8 ((,class (:inherit modus-theme-refine-cyan))))
- ;;;; syslog-mode
- `(syslog-debug ((,class (:foreground ,cyan-alt-other :weight bold))))
- `(syslog-error ((,class (:foreground ,red :weight bold))))
- `(syslog-file ((,class (:foreground ,fg-special-cold :weight bold))))
- `(syslog-hide ((,class (:background ,bg-main :foreground ,fg-main))))
- `(syslog-hour ((,class (:foreground ,magenta-alt-other :weight bold))))
- `(syslog-info ((,class (:foreground ,blue-alt-other :weight bold))))
- `(syslog-ip ((,class (:foreground ,fg-special-mild :weight bold :underline t))))
- `(syslog-su ((,class (:foreground ,red-alt :weight bold))))
- `(syslog-warn ((,class (:foreground ,yellow :weight bold))))
- ;;;; trashed
- `(trashed-deleted ((,class (:background ,bg-mark-del :foreground ,fg-mark-del :weight bold))))
- `(trashed-directory ((,class (:foreground ,blue))))
- `(trashed-mark ((,class (:foreground ,blue-alt :weight bold))))
- `(trashed-marked ((,class (:background ,bg-mark-other :foreground ,fg-mark-other :weight bold))))
- `(trashed-restored ((,class (:background ,bg-mark :foreground ,fg-mark :weight bold))))
- `(trashed-symlink ((,class (:foreground ,blue-alt :underline t))))
- ;;;; telephone-line
- `(telephone-line-accent-active ((,class (:background ,fg-inactive :foreground ,bg-inactive))))
- `(telephone-line-accent-inactive ((,class (:background ,bg-active :foreground ,fg-active))))
- `(telephone-line-error ((,class (:foreground ,red-active :weight bold))))
- `(telephone-line-evil ((,class (:foreground ,fg-main))))
- `(telephone-line-evil-emacs ((,class (:inherit telephone-line-evil :background ,magenta-intense-bg))))
- `(telephone-line-evil-insert ((,class (:inherit telephone-line-evil :background ,green-intense-bg))))
- `(telephone-line-evil-motion ((,class (:inherit telephone-line-evil :background ,yellow-intense-bg))))
- `(telephone-line-evil-normal ((,class (:inherit telephone-line-evil :background ,bg-alt))))
- `(telephone-line-evil-operator ((,class (:inherit telephone-line-evil :background ,yellow-subtle-bg))))
- `(telephone-line-evil-replace ((,class (:inherit telephone-line-evil :background ,red-intense-bg))))
- `(telephone-line-evil-visual ((,class (:inherit telephone-line-evil :background ,cyan-intense-bg))))
- `(telephone-line-projectile ((,class (:foreground ,cyan-active))))
- `(telephone-line-unimportant ((,class (:foreground ,fg-inactive))))
- `(telephone-line-warning ((,class (:foreground ,yellow-active :weight bold))))
- ;;;; term
- `(term ((,class (:background ,bg-main :foreground ,fg-main))))
- `(term-bold ((,class (:weight bold))))
- `(term-color-blue ((,class (:background ,blue :foreground ,blue))))
- `(term-color-cyan ((,class (:background ,cyan :foreground ,cyan))))
- `(term-color-green ((,class (:background ,green :foreground ,green))))
- `(term-color-magenta ((,class (:background ,magenta :foreground ,magenta))))
- `(term-color-red ((,class (:background ,red :foreground ,red))))
- `(term-color-yellow ((,class (:background ,yellow :foreground ,yellow))))
- `(term-underline ((,class (:underline t))))
- ;;;; tomatinho
- `(tomatinho-ok-face ((,class (:foreground ,blue-intense))))
- `(tomatinho-pause-face ((,class (:foreground ,yellow-intense))))
- `(tomatinho-reset-face ((,class (:foreground ,fg-alt))))
- ;;;; transient
- `(transient-active-infix ((,class (:inherit modus-theme-special-mild))))
- `(transient-argument ((,class (:foreground ,green :weight bold))))
- `(transient-disabled-suffix ((,class (:inherit modus-theme-intense-red))))
- `(transient-enabled-suffix ((,class (:inherit modus-theme-intense-green))))
- `(transient-heading ((,class (:foreground ,fg-special-warm :weight bold))))
- `(transient-inactive-argument ((,class (:foreground ,fg-alt))))
- `(transient-inactive-value ((,class (:foreground ,fg-alt))))
- `(transient-key ((,class (:foreground ,magenta-intense))))
- `(transient-mismatched-key ((,class (:underline t))))
- `(transient-nonstandard-key ((,class (:underline t))))
- `(transient-unreachable ((,class (:foreground ,fg-inactive))))
- `(transient-unreachable-key ((,class (:foreground ,fg-inactive))))
- `(transient-value ((,class (:foreground ,blue))))
- ;;;; treemacs
- `(treemacs-directory-collapsed-face ((,class (:foreground ,magenta-alt))))
- `(treemacs-directory-face ((,class (:inherit dired-directory))))
- `(treemacs-file-face ((,class (:foreground ,fg-main))))
- `(treemacs-fringe-indicator-face ((,class (:foreground ,fg-main))))
- `(treemacs-git-added-face ((,class (:foreground ,green-intense))))
- `(treemacs-git-conflict-face ((,class (:inherit modus-theme-intense-red :weight bold))))
- `(treemacs-git-ignored-face ((,class (:foreground ,fg-alt))))
- `(treemacs-git-modified-face ((,class (:foreground ,yellow-alt-other))))
- `(treemacs-git-renamed-face ((,class (:foreground ,cyan-alt-other))))
- `(treemacs-git-unmodified-face ((,class (:foreground ,fg-main))))
- `(treemacs-git-untracked-face ((,class (:foreground ,red-alt-other))))
- `(treemacs-help-column-face ((,class (:foreground ,magenta-alt-other :weight ,modus-theme-bold :underline t))))
- `(treemacs-help-title-face ((,class (:foreground ,blue-alt-other))))
- `(treemacs-on-failure-pulse-face ((,class (:inherit modus-theme-intense-red))))
- `(treemacs-on-success-pulse-face ((,class (:inherit modus-theme-intense-green))))
- `(treemacs-root-face ((,class (:foreground ,blue-alt-other :height 1.2 :weight bold :underline t))))
- `(treemacs-root-remote-disconnected-face ((,class (:inherit treemacs-root-remote-face :foreground ,yellow))))
- `(treemacs-root-remote-face ((,class (:inherit treemacs-root-face :foreground ,magenta))))
- `(treemacs-root-remote-unreadable-face ((,class (:inherit treemacs-root-unreadable-face))))
- `(treemacs-root-unreadable-face ((,class (:inherit treemacs-root-face :strike-through t))))
- `(treemacs-tags-face ((,class (:foreground ,blue-alt))))
- `(treemacs-tags-face ((,class (:foreground ,magenta-alt))))
- ;;;; tuareg
- `(caml-types-def-face ((,class (:inherit modus-theme-subtle-red))))
- `(caml-types-expr-face ((,class (:inherit modus-theme-subtle-green))))
- `(caml-types-occ-face ((,class (:inherit modus-theme-subtle-green))))
- `(caml-types-scope-face ((,class (:inherit modus-theme-subtle-blue))))
- `(caml-types-typed-face ((,class (:inherit modus-theme-subtle-magenta))))
- `(tuareg-font-double-semicolon-face ((,class (:foreground ,red-alt))))
- `(tuareg-font-lock-attribute-face ((,class (:foreground ,magenta))))
- `(tuareg-font-lock-constructor-face ((,class (:foreground ,fg-main))))
- `(tuareg-font-lock-error-face ((,class (:inherit modus-theme-intense-red :weight bold))))
- `(tuareg-font-lock-extension-node-face ((,class (:background ,bg-alt :foreground ,magenta))))
- `(tuareg-font-lock-governing-face ((,class (:foreground ,fg-main :weight bold))))
- `(tuareg-font-lock-infix-extension-node-face ((,class (:foreground ,magenta))))
- `(tuareg-font-lock-interactive-directive-face ((,class (:foreground ,fg-special-cold))))
- `(tuareg-font-lock-interactive-error-face ((,class (:foreground ,red :weight bold))))
- `(tuareg-font-lock-interactive-output-face ((,class (:foreground ,blue-alt-other))))
- `(tuareg-font-lock-label-face ((,class (:foreground ,cyan-alt-other))))
- `(tuareg-font-lock-line-number-face ((,class (:foreground ,fg-special-warm))))
- `(tuareg-font-lock-module-face ((,class (:foreground ,magenta-alt))))
- `(tuareg-font-lock-multistage-face ((,class (:background ,bg-alt :foreground ,blue :weight bold))))
- `(tuareg-font-lock-operator-face ((,class (:foreground ,red-alt))))
- `(tuareg-opam-error-face ((,class (:foreground ,red :weight bold))))
- `(tuareg-opam-pkg-variable-name-face ((,class (:foreground ,cyan :slant ,modus-theme-slant))))
- ;;;; undo-tree
- `(undo-tree-visualizer-active-branch-face ((,class (:foreground ,fg-main :weight bold))))
- `(undo-tree-visualizer-current-face ((,class (:foreground ,blue-intense))))
- `(undo-tree-visualizer-default-face ((,class (:foreground ,fg-alt))))
- `(undo-tree-visualizer-register-face ((,class (:foreground ,magenta-intense))))
- `(undo-tree-visualizer-unmodified-face ((,class (:foreground ,green-intense))))
- ;;;; vc
- `(vc-conflict-state ((,class (:foreground ,red-active :weight ,modus-theme-bold))))
- `(vc-edited-state ((,class (:foreground ,fg-special-warm))))
- `(vc-locally-added-state ((,class (:foreground ,cyan-active))))
- `(vc-locked-state ((,class (:foreground ,magenta-active :weight ,modus-theme-bold))))
- `(vc-missing-state ((,class (:foreground ,yellow-active :weight ,modus-theme-bold))))
- `(vc-needs-update-state ((,class (:foreground ,fg-special-mild :weight ,modus-theme-bold))))
- `(vc-removed-state ((,class (:foreground ,red-active))))
- `(vc-state-base ((,class (:foreground ,fg-active))))
- `(vc-up-to-date-state ((,class (:foreground ,fg-special-cold))))
- ;;;; vimish-fold
- `(vimish-fold-fringe ((,class (:foreground ,cyan-active))))
- `(vimish-fold-mouse-face ((,class (:inherit modus-theme-intense-blue))))
- `(vimish-fold-overlay ((,class (:background ,bg-alt :foreground ,fg-special-cold))))
- ;;;; visible-mark
- `(visible-mark-active ((,class (:background ,blue-intense-bg))))
- `(visible-mark-face1 ((,class (:background ,cyan-intense-bg))))
- `(visible-mark-face2 ((,class (:background ,yellow-intense-bg))))
- `(visible-mark-forward-face1 ((,class (:background ,magenta-intense-bg))))
- `(visible-mark-forward-face2 ((,class (:background ,green-intense-bg))))
- ;;;; visual-regexp
- `(vr/group-0 ((,class (:inherit modus-theme-intense-blue))))
- `(vr/group-1 ((,class (:inherit modus-theme-intense-magenta))))
- `(vr/group-2 ((,class (:inherit modus-theme-intense-green))))
- `(vr/match-0 ((,class (:inherit modus-theme-refine-yellow))))
- `(vr/match-1 ((,class (:inherit modus-theme-refine-yellow))))
- `(vr/match-separator-face ((,class (:inherit modus-theme-intense-neutral :weight bold))))
- ;;;; volatile-highlights
- `(vhl/default-face ((,class (,@(and (>= emacs-major-version 27) '(:extend t))
- :background ,bg-alt :foreground ,blue-nuanced))))
- ;;;; vterm
- `(vterm-color-black ((,class (:background "black" :foreground "black"))))
- `(vterm-color-blue ((,class (:background ,blue :foreground ,blue))))
- `(vterm-color-cyan ((,class (:background ,cyan :foreground ,cyan))))
- `(vterm-color-default ((,class (:background ,bg-main :foreground ,fg-main))))
- `(vterm-color-green ((,class (:background ,green :foreground ,green))))
- `(vterm-color-inverse-video ((,class (:background ,bg-main :inverse-video t))))
- `(vterm-color-magenta ((,class (:background ,magenta :foreground ,magenta))))
- `(vterm-color-red ((,class (:background ,red :foreground ,red))))
- `(vterm-color-underline ((,class (:foreground ,fg-special-warm :underline t))))
- `(vterm-color-white ((,class (:background "white" :foreground "white"))))
- `(vterm-color-yellow ((,class (:background ,yellow :foreground ,yellow))))
- ;;;; wcheck-mode
- `(wcheck-default-face ((,class (:foreground ,red :underline t))))
- ;;;; web-mode
- `(web-mode-annotation-face ((,class (:inherit web-mode-comment-face))))
- `(web-mode-annotation-html-face ((,class (:inherit web-mode-comment-face))))
- `(web-mode-annotation-tag-face ((,class (:inherit web-mode-comment-face :underline t))))
- `(web-mode-block-attr-name-face ((,class (:foreground ,blue))))
- `(web-mode-block-attr-value-face ((,class (:foreground ,cyan-alt-other))))
- `(web-mode-block-comment-face ((,class (:inherit web-mode-comment-face))))
- `(web-mode-block-control-face ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(web-mode-block-delimiter-face ((,class (:foreground ,fg-main))))
- `(web-mode-block-face ((,class (:background ,bg-dim))))
- `(web-mode-block-string-face ((,class (:inherit web-mode-string-face))))
- `(web-mode-bold-face ((,class (:weight bold))))
- `(web-mode-builtin-face ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(web-mode-comment-face ((,class (:foreground ,fg-alt :slant ,modus-theme-slant))))
- `(web-mode-comment-keyword-face ((,class (:background ,bg-dim :foreground ,yellow :weight bold))))
- `(web-mode-constant-face ((,class (:foreground ,blue-alt-other))))
- `(web-mode-css-at-rule-face ((,class (:foreground ,blue-alt-other))))
- `(web-mode-css-color-face ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(web-mode-css-comment-face ((,class (:inherit web-mode-comment-face))))
- `(web-mode-css-function-face ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(web-mode-css-priority-face ((,class (:foreground ,yellow-alt :weight ,modus-theme-bold))))
- `(web-mode-css-property-name-face ((,class (:foreground ,cyan))))
- `(web-mode-css-pseudo-class-face ((,class (:foreground ,cyan-alt-other))))
- `(web-mode-css-selector-face ((,class (:foreground ,magenta-alt-other :weight ,modus-theme-bold))))
- `(web-mode-css-string-face ((,class (:inherit web-mode-string-face))))
- `(web-mode-css-variable-face ((,class (:foreground ,fg-special-warm))))
- `(web-mode-current-column-highlight-face ((,class (:background ,bg-alt))))
- `(web-mode-current-element-highlight-face ((,class (:inherit modus-theme-special-mild))))
- `(web-mode-doctype-face ((,class (:foreground ,fg-special-cold :slant ,modus-theme-slant))))
- `(web-mode-error-face ((,class (:inherit modus-theme-intense-red))))
- `(web-mode-filter-face ((,class (:foreground ,magenta))))
- `(web-mode-folded-face ((,class (:underline t))))
- `(web-mode-function-call-face ((,class (:foreground ,magenta))))
- `(web-mode-function-name-face ((,class (:foreground ,magenta))))
- `(web-mode-html-attr-custom-face ((,class (:foreground ,cyan))))
- `(web-mode-html-attr-engine-face ((,class (:foreground ,fg-main))))
- `(web-mode-html-attr-equal-face ((,class (:foreground ,fg-main))))
- `(web-mode-html-attr-name-face ((,class (:foreground ,cyan))))
- `(web-mode-html-attr-value-face ((,class (:foreground ,blue-alt-other))))
- `(web-mode-html-entity-face ((,class (:foreground ,yellow-alt-other :slant ,modus-theme-slant))))
- `(web-mode-html-tag-bracket-face ((,class (:foreground ,fg-dim))))
- `(web-mode-html-tag-custom-face ((,class (:foreground ,magenta))))
- `(web-mode-html-tag-face ((,class (:foreground ,magenta))))
- `(web-mode-html-tag-namespaced-face ((,class (:foreground ,magenta-alt :weight ,modus-theme-bold))))
- `(web-mode-html-tag-unclosed-face ((,class (:foreground ,red :underline t))))
- `(web-mode-inlay-face ((,class (:background ,bg-alt))))
- `(web-mode-italic-face ((,class (:slant italic))))
- `(web-mode-javascript-comment-face ((,class (:inherit web-mode-comment-face))))
- `(web-mode-javascript-string-face ((,class (:inherit web-mode-string-face))))
- `(web-mode-json-comment-face ((,class (:inherit web-mode-comment-face))))
- `(web-mode-json-context-face ((,class (:foreground ,magenta-alt))))
- `(web-mode-json-key-face ((,class (:foreground ,blue-nuanced))))
- `(web-mode-json-string-face ((,class (:inherit web-mode-string-face))))
- `(web-mode-jsx-depth-1-face ((,class (:background ,blue-intense-bg :foreground ,fg-main))))
- `(web-mode-jsx-depth-2-face ((,class (:background ,blue-subtle-bg :foreground ,fg-main))))
- `(web-mode-jsx-depth-3-face ((,class (:background ,bg-special-cold :foreground ,fg-special-cold))))
- `(web-mode-jsx-depth-4-face ((,class (:background ,bg-alt :foreground ,blue-refine-fg))))
- `(web-mode-jsx-depth-5-face ((,class (:background ,bg-alt :foreground ,blue-nuanced))))
- `(web-mode-keyword-face ((,class (:foreground ,magenta-alt-other :weight ,modus-theme-bold))))
- `(web-mode-param-name-face ((,class (:foreground ,magenta))))
- `(web-mode-part-comment-face ((,class (:inherit web-mode-comment-face))))
- `(web-mode-part-face ((,class (:inherit web-mode-block-face))))
- `(web-mode-part-string-face ((,class (:inherit web-mode-string-face))))
- `(web-mode-preprocessor-face ((,class (:foreground ,magenta))))
- `(web-mode-script-face ((,class (:inherit web-mode-part-face))))
- `(web-mode-sql-keyword-face ((,class (:foreground ,yellow :weight bold))))
- `(web-mode-string-face ((,class (:foreground ,blue-alt))))
- `(web-mode-style-face ((,class (:inherit web-mode-part-face))))
- `(web-mode-symbol-face ((,class (:foreground ,blue-alt-other))))
- `(web-mode-type-face ((,class (:foreground ,magenta-alt))))
- `(web-mode-underline-face ((,class (:underline t))))
- `(web-mode-variable-name-face ((,class (:foreground ,cyan))))
- `(web-mode-warning-face ((,class (:background ,bg-alt :foreground ,yellow-alt-other :weight bold))))
- `(web-mode-whitespace-face ((,class (:background ,bg-whitespace :foreground ,fg-whitespace))))
- ;;;; wgrep
- `(wgrep-delete-face ((,class (:inherit modus-theme-refine-yellow))))
- `(wgrep-done-face ((,class (:inherit modus-theme-refine-blue))))
- `(wgrep-face ((,class (:inherit modus-theme-refine-green))))
- `(wgrep-file-face ((,class (:foreground ,fg-special-warm))))
- `(wgrep-reject-face ((,class (:inherit modus-theme-intense-red :weight bold))))
- ;;;; which-function-mode
- `(which-func ((,class (:foreground ,magenta-active))))
- ;;;; which-key
- `(which-key-command-description-face ((,class (:foreground ,cyan))))
- `(which-key-group-description-face ((,class (:foreground ,magenta-alt))))
- `(which-key-highlighted-command-face ((,class (:foreground ,cyan-alt :underline t))))
- `(which-key-key-face ((,class (:foreground ,blue-intense :weight bold))))
- `(which-key-local-map-description-face ((,class (:foreground ,fg-main))))
- `(which-key-note-face ((,class (:background ,bg-dim :foreground ,fg-special-mild))))
- `(which-key-separator-face ((,class (:foreground ,fg-alt))))
- `(which-key-special-key-face ((,class (:foreground ,yellow-intense :weight bold))))
- ;;;; whitespace-mode
- `(whitespace-big-indent ((,class (:inherit modus-theme-subtle-red))))
- `(whitespace-empty ((,class (:inherit modus-theme-intense-magenta))))
- `(whitespace-hspace ((,class (:background ,bg-whitespace :foreground ,fg-whitespace))))
- `(whitespace-indentation ((,class (:background ,bg-whitespace :foreground ,fg-whitespace))))
- `(whitespace-line ((,class (:inherit modus-theme-special-warm))))
- `(whitespace-newline ((,class (:background ,bg-whitespace :foreground ,fg-whitespace))))
- `(whitespace-space ((,class (:background ,bg-whitespace :foreground ,fg-whitespace))))
- `(whitespace-space-after-tab ((,class (:inherit modus-theme-subtle-magenta))))
- `(whitespace-space-before-tab ((,class (:inherit modus-theme-subtle-cyan))))
- `(whitespace-tab ((,class (:background ,bg-whitespace :foreground ,fg-whitespace))))
- `(whitespace-trailing ((,class (:inherit modus-theme-intense-red))))
- ;;;; window-divider-mode
- `(window-divider ((,class (:foreground ,fg-window-divider-inner))))
- `(window-divider-first-pixel ((,class (:foreground ,fg-window-divider-outer))))
- `(window-divider-last-pixel ((,class (:foreground ,fg-window-divider-outer))))
- ;;;; winum
- `(winum-face ((,class (:foreground ,cyan-active :weight ,modus-theme-bold))))
- ;;;; writegood-mode
- `(writegood-duplicates-face ((,class (:background ,bg-alt :foreground ,red-alt :underline t))))
- `(writegood-passive-voice-face ((,class (:foreground ,yellow-nuanced :underline (:color ,fg-lang-warning :style line)))))
- `(writegood-weasels-face ((,class (:foreground ,red-nuanced :underline (:color ,fg-lang-error :style line)))))
- ;;;; woman
- `(woman-addition ((,class (:foreground ,magenta-alt-other))))
- `(woman-bold ((,class (:foreground ,magenta :weight bold))))
- `(woman-italic ((,class (:foreground ,cyan :slant italic))))
- `(woman-unknown ((,class (:foreground ,yellow :slant italic))))
- ;;;; xah-elisp-mode
- `(xah-elisp-at-symbol ((,class (:foreground ,red-alt :weight bold))))
- `(xah-elisp-cap-variable ((,class (:foreground ,red-alt-other))))
- `(xah-elisp-command-face ((,class (:foreground ,cyan-alt-other))))
- `(xah-elisp-dollar-symbol ((,class (:foreground ,green))))
- ;;;; xref
- `(xref-file-header ((,class (:foreground ,fg-special-cold :weight bold))))
- `(xref-line-number ((,class (:foreground ,fg-alt))))
- `(xref-match ((,class (:inherit match))))
- ;;;; yaml-mode
- `(yaml-tab-face ((,class (:inherit modus-theme-intense-red))))
- ;;;; ztree
- `(ztreep-arrow-face ((,class (:foreground ,fg-inactive))))
- `(ztreep-diff-header-face ((,class (:height 1.2 :foreground ,fg-special-cold :weight bold))))
- `(ztreep-diff-header-small-face ((,class (:foreground ,fg-special-mild :weight bold))))
- `(ztreep-diff-model-add-face ((,class (:foreground ,green))))
- `(ztreep-diff-model-diff-face ((,class (:foreground ,red))))
- `(ztreep-diff-model-ignored-face ((,class (:foreground ,fg-alt :strike-through t))))
- `(ztreep-diff-model-normal-face ((,class (:foreground ,fg-alt))))
- `(ztreep-expand-sign-face ((,class (:foreground ,blue))))
- `(ztreep-header-face ((,class (:height 1.2 :foreground ,fg-special-cold :weight bold))))
- `(ztreep-leaf-face ((,class (:foreground ,cyan))))
- `(ztreep-node-count-children-face ((,class (:foreground ,fg-special-warm))))
- `(ztreep-node-face ((,class (:foreground ,fg-main))))
- (when (>= emacs-major-version 27) ; EXPERIMENTAL this form is subject to review
- (custom-theme-set-faces
- 'modus-operandi
- ;;;; tab-bar-mode
- `(tab-bar ((,class (:background ,bg-alt :foreground ,fg-alt))))
- `(tab-bar-tab ((,class (:box (:line-width 1 :color ,fg-window-divider-inner)
- :background ,bg-tab-active :foreground ,fg-main))))
- `(tab-bar-tab-inactive ((,class (:box (:line-width 1 :color ,bg-tab-active)
- :background ,bg-tab-inactive :foreground ,fg-dim))))
- ;;;; tab-line-mode
- `(tab-line ((,class (:height 0.95 :background ,bg-active :foreground ,fg-active))))
- `(tab-line-close-highlight ((,class (:foreground ,red-active))))
- `(tab-line-highlight ((,class (:background ,bg-tab-active :foreground ,fg-main))))
- `(tab-line-tab ((,class (:box (:line-width 1 :color ,fg-window-divider-inner)
- :background ,bg-tab-active :foreground ,fg-main))))
- `(tab-line-tab-current ((,class (:box (:line-width 1 :color ,fg-window-divider-inner)
- :background ,bg-tab-active :foreground ,fg-main))))
- `(tab-line-tab-inactive ((,class (:box (:line-width 1 :color ,bg-tab-active)
- :background ,bg-tab-inactive :foreground ,fg-dim))))))
- ;;; Theme Variables
- (custom-theme-set-variables
- 'modus-operandi
- ;;;; ansi-colors
- `(ansi-color-faces-vector [default bold shadow italic underline success warning error])
- `(ansi-color-names-vector [,fg-main ,red ,green ,yellow ,blue ,magenta ,cyan ,bg-main])
- ;;;; flymake fringe indicators
- `(flymake-error-bitmap '(flymake-double-exclamation-mark modus-theme-fringe-red))
- `(flymake-warning-bitmap '(exclamation-mark modus-theme-fringe-yellow))
- `(flymake-note-bitmap '(exclamation-mark modus-theme-fringe-cyan))
- ;;;; ibuffer
- `(ibuffer-deletion-face 'dired-flagged)
- `(ibuffer-filter-group-name-face 'dired-mark)
- `(ibuffer-marked-face 'dired-marked)
- `(ibuffer-title-face 'dired-header)
- ;;;; hl-todo
- `(hl-todo-keyword-faces
- '(("HOLD" . ,yellow-alt)
- ("TODO" . ,magenta)
- ("NEXT" . ,magenta-alt-other)
- ("THEM" . ,magenta-alt)
- ("PROG" . ,cyan)
- ("OKAY" . ,cyan-alt)
- ("DONT" . ,green-alt)
- ("FAIL" . ,red)
- ("DONE" . ,green)
- ("NOTE" . ,yellow-alt-other)
- ("KLUDGE" . ,yellow)
- ("HACK" . ,yellow)
- ("TEMP" . ,red-nuanced)
- ("FIXME" . ,red-alt-other)
- ("XXX+" . ,red-alt)
- ("REVIEW" . ,cyan-alt-other)
- ("DEPRECATED" . ,blue-nuanced)))
- ;;;;; vc-annotate (C-x v g)
- `(vc-annotate-background nil)
- `(vc-annotate-background-mode nil)
- `(vc-annotate-color-map
- '((20 . ,red)
- (40 . ,magenta)
- (60 . ,magenta-alt)
- (80 . ,red-alt)
- (100 . ,yellow)
- (120 . ,yellow-alt)
- (140 . ,fg-special-warm)
- (160 . ,fg-special-mild)
- (180 . ,green)
- (200 . ,green-alt)
- (220 . ,cyan-alt-other)
- (240 . ,cyan-alt)
- (260 . ,cyan)
- (280 . ,fg-special-cold)
- (300 . ,blue)
- (320 . ,blue-alt)
- (340 . ,blue-alt-other)
- (360 . ,magenta-alt-other)))
- `(vc-annotate-very-old-color nil)
- ;;;; xterm-color
- `(xterm-color-names [,fg-main ,red ,green ,yellow ,blue ,magenta ,cyan ,bg-alt])
- `(xterm-color-names-bright [,fg-alt ,red-alt ,green-alt ,yellow-alt ,blue-alt ,magenta-alt ,cyan-alt ,bg-main]))))
-
-;;;###autoload
-(when load-file-name
- (add-to-list 'custom-theme-load-path
- (file-name-as-directory (file-name-directory load-file-name))))
-
-(provide-theme 'modus-operandi)
-
-(provide 'modus-operandi-theme)
-;;; modus-operandi-theme.el ends here
diff --git a/emacs.d/elpa/pkg-info-20150517.1143/pkg-info-autoloads.el b/emacs.d/elpa/pkg-info-20150517.1143/pkg-info-autoloads.el
deleted file mode 100644
index 44ce6b5..0000000
--- a/emacs.d/elpa/pkg-info-20150517.1143/pkg-info-autoloads.el
+++ /dev/null
@@ -1,127 +0,0 @@
-;;; pkg-info-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "pkg-info" "pkg-info.el" (0 0 0 0))
-;;; Generated autoloads from pkg-info.el
-
-(autoload 'pkg-info-library-original-version "pkg-info" "\
-Get the original version in the header of LIBRARY.
-
-The original version is stored in the X-Original-Version header.
-This header is added by the MELPA package archive to preserve
-upstream version numbers.
-
-LIBRARY is either a symbol denoting a named feature, or a library
-name as string.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-Return the version from the header of LIBRARY as list. Signal an
-error if the LIBRARY was not found or had no X-Original-Version
-header.
-
-See Info node `(elisp)Library Headers' for more information
-about library headers.
-
-\(fn LIBRARY &optional SHOW)" t nil)
-
-(autoload 'pkg-info-library-version "pkg-info" "\
-Get the version in the header of LIBRARY.
-
-LIBRARY is either a symbol denoting a named feature, or a library
-name as string.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-Return the version from the header of LIBRARY as list. Signal an
-error if the LIBRARY was not found or had no proper header.
-
-See Info node `(elisp)Library Headers' for more information
-about library headers.
-
-\(fn LIBRARY &optional SHOW)" t nil)
-
-(autoload 'pkg-info-defining-library-original-version "pkg-info" "\
-Get the original version of the library defining FUNCTION.
-
-The original version is stored in the X-Original-Version header.
-This header is added by the MELPA package archive to preserve
-upstream version numbers.
-
-If SHOW is non-nil, show the version in mini-buffer.
-
-This function is mainly intended to find the version of a major
-or minor mode, i.e.
-
- (pkg-info-defining-library-version 'flycheck-mode)
-
-Return the version of the library defining FUNCTION. Signal an
-error if FUNCTION is not a valid function, if its defining
-library was not found, or if the library had no proper version
-header.
-
-\(fn FUNCTION &optional SHOW)" t nil)
-
-(autoload 'pkg-info-defining-library-version "pkg-info" "\
-Get the version of the library defining FUNCTION.
-
-If SHOW is non-nil, show the version in mini-buffer.
-
-This function is mainly intended to find the version of a major
-or minor mode, i.e.
-
- (pkg-info-defining-library-version 'flycheck-mode)
-
-Return the version of the library defining FUNCTION. Signal an
-error if FUNCTION is not a valid function, if its defining
-library was not found, or if the library had no proper version
-header.
-
-\(fn FUNCTION &optional SHOW)" t nil)
-
-(autoload 'pkg-info-package-version "pkg-info" "\
-Get the version of an installed PACKAGE.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-Return the version as list, or nil if PACKAGE is not installed.
-
-\(fn PACKAGE &optional SHOW)" t nil)
-
-(autoload 'pkg-info-version-info "pkg-info" "\
-Obtain complete version info for LIBRARY and PACKAGE.
-
-LIBRARY is a symbol denoting a named feature, or a library name
-as string. PACKAGE is a symbol denoting an ELPA package. If
-omitted or nil, default to LIBRARY.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-When called interactively, prompt for LIBRARY. When called
-interactively with prefix argument, prompt for PACKAGE as well.
-
-Return a string with complete version information for LIBRARY.
-This version information contains the version from the headers of
-LIBRARY, and the version of the installed PACKAGE, the LIBRARY is
-part of. If PACKAGE is not installed, or if the PACKAGE version
-is the same as the LIBRARY version, do not include a package
-version.
-
-\(fn LIBRARY &optional PACKAGE SHOW)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pkg-info" '("pkg-info-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; pkg-info-autoloads.el ends here
diff --git a/emacs.d/elpa/pkg-info-20150517.1143/pkg-info-pkg.el b/emacs.d/elpa/pkg-info-20150517.1143/pkg-info-pkg.el
deleted file mode 100644
index d4b90e1..0000000
--- a/emacs.d/elpa/pkg-info-20150517.1143/pkg-info-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "pkg-info" "20150517.1143" "Information about packages" '((epl "0.8")) :commit "76ba7415480687d05a4353b27fea2ae02b8d9d61" :keywords '("convenience") :authors '(("Sebastian Wiesner" . "swiesner@lunaryorn.com")) :maintainer '("Sebastian Wiesner" . "swiesner@lunaryorn.com") :url "https://github.com/lunaryorn/pkg-info.el")
diff --git a/emacs.d/elpa/pkg-info-20150517.1143/pkg-info.el b/emacs.d/elpa/pkg-info-20150517.1143/pkg-info.el
deleted file mode 100644
index e6a03a1..0000000
--- a/emacs.d/elpa/pkg-info-20150517.1143/pkg-info.el
+++ /dev/null
@@ -1,331 +0,0 @@
-;;; pkg-info.el --- Information about packages -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2013-2015 Sebastian Wiesner <swiesner@lunaryorn.com>
-
-;; Author: Sebastian Wiesner <swiesner@lunaryorn.com>
-;; URL: https://github.com/lunaryorn/pkg-info.el
-;; Package-Version: 20150517.1143
-;; Keywords: convenience
-;; Version: 0.7-cvs
-;; Package-Requires: ((epl "0.8"))
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This library extracts information from installed packages.
-
-;;;; Functions:
-
-;; `pkg-info-library-version' extracts the version from the header of a library.
-;;
-;; `pkg-info-defining-library-version' extracts the version from the header of a
-;; library defining a function.
-;;
-;; `pkg-info-package-version' gets the version of an installed package.
-;;
-;; `pkg-info-format-version' formats a version list as human readable string.
-;;
-;; `pkg-info-version-info' returns complete version information for a specific
-;; package.
-;;
-;; `pkg-info-get-melpa-recipe' gets the MELPA recipe for a package.
-;;
-;; `pkg-info-get-melpa-fetcher' gets the fetcher used to build a package on
-;; MELPA.
-;;
-;; `pkg-info-wiki-package-p' determines whether a package was build from
-;; EmacsWiki on MELPA.
-
-;;; Code:
-
-(require 'epl)
-
-(require 'lisp-mnt)
-(require 'find-func)
-(require 'json) ; `json-read'
-(require 'url-http) ; `url-http-parse-response'
-
-(defvar url-http-end-of-headers)
-
-
-;;; Version information
-(defun pkg-info-format-version (version)
- "Format VERSION as human-readable string.
-
-Return a human-readable string representing VERSION."
- ;; XXX: Find a better, more flexible way of formatting?
- (package-version-join version))
-
-(defsubst pkg-info--show-version-and-return (version show)
- "Show and return VERSION.
-
-When SHOW is non-nil, show VERSION in minibuffer.
-
-Return VERSION."
- (when show
- (message (if (listp version) (pkg-info-format-version version) version)))
- version)
-
-(defun pkg-info--read-library ()
- "Read a library from minibuffer."
- (completing-read "Load library: "
- (apply-partially 'locate-file-completion-table
- load-path
- (get-load-suffixes))))
-
-(defun pkg-info--read-function ()
- "Read a function name from minibuffer."
- (let ((input (completing-read "Function: " obarray #'boundp :require-match)))
- (if (string= input "") nil (intern input))))
-
-(defun pkg-info--read-package ()
- "Read a package name from minibuffer."
- (let* ((installed (epl-installed-packages))
- (names (sort (mapcar (lambda (pkg)
- (symbol-name (epl-package-name pkg)))
- installed)
- #'string<))
- (default (car names)))
- (completing-read "Installed package: " names nil 'require-match
- nil nil default)))
-
-(defun pkg-info-library-source (library)
- "Get the source file of LIBRARY.
-
-LIBRARY is either a symbol denoting a named feature, or a library
-name as string.
-
-Return the source file of LIBRARY as string."
- (find-library-name (if (symbolp library) (symbol-name library) library)))
-
-(defun pkg-info-defining-library (function)
- "Get the source file of the library defining FUNCTION.
-
-FUNCTION is a function symbol.
-
-Return the file name of the library as string. Signal an error
-if the library does not exist, or if the definition of FUNCTION
-was not found."
- (unless (functionp function)
- (signal 'wrong-type-argument (list 'functionp function)))
- (let ((library (symbol-file function 'defun)))
- (unless library
- (error "Can't find definition of %s" function))
- library))
-
-(defun pkg-info-x-original-version (file)
- "Read the X-Original-Version header from FILE.
-
-Return the value as version list, or return nil if FILE lacks
-this header. Signal an error, if the value of the header is not
-a valid version."
- (let ((version-str (with-temp-buffer
- (insert-file-contents file)
- (lm-header "X-Original-Version"))))
- (when version-str
- (version-to-list version-str))))
-
-;;;###autoload
-(defun pkg-info-library-original-version (library &optional show)
- "Get the original version in the header of LIBRARY.
-
-The original version is stored in the X-Original-Version header.
-This header is added by the MELPA package archive to preserve
-upstream version numbers.
-
-LIBRARY is either a symbol denoting a named feature, or a library
-name as string.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-Return the version from the header of LIBRARY as list. Signal an
-error if the LIBRARY was not found or had no X-Original-Version
-header.
-
-See Info node `(elisp)Library Headers' for more information
-about library headers."
- (interactive (list (pkg-info--read-library) t))
- (let ((version (pkg-info-x-original-version
- (pkg-info-library-source library))))
- (if version
- (pkg-info--show-version-and-return version show)
- (error "Library %s has no original version" library))))
-
-;;;###autoload
-(defun pkg-info-library-version (library &optional show)
- "Get the version in the header of LIBRARY.
-
-LIBRARY is either a symbol denoting a named feature, or a library
-name as string.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-Return the version from the header of LIBRARY as list. Signal an
-error if the LIBRARY was not found or had no proper header.
-
-See Info node `(elisp)Library Headers' for more information
-about library headers."
- (interactive (list (pkg-info--read-library) t))
- (let* ((source (pkg-info-library-source library))
- (version (epl-package-version (epl-package-from-file source))))
- (pkg-info--show-version-and-return version show)))
-
-;;;###autoload
-(defun pkg-info-defining-library-original-version (function &optional show)
- "Get the original version of the library defining FUNCTION.
-
-The original version is stored in the X-Original-Version header.
-This header is added by the MELPA package archive to preserve
-upstream version numbers.
-
-If SHOW is non-nil, show the version in mini-buffer.
-
-This function is mainly intended to find the version of a major
-or minor mode, i.e.
-
- (pkg-info-defining-library-version 'flycheck-mode)
-
-Return the version of the library defining FUNCTION. Signal an
-error if FUNCTION is not a valid function, if its defining
-library was not found, or if the library had no proper version
-header."
- (interactive (list (pkg-info--read-function) t))
- (pkg-info-library-original-version (pkg-info-defining-library function) show))
-
-;;;###autoload
-(defun pkg-info-defining-library-version (function &optional show)
- "Get the version of the library defining FUNCTION.
-
-If SHOW is non-nil, show the version in mini-buffer.
-
-This function is mainly intended to find the version of a major
-or minor mode, i.e.
-
- (pkg-info-defining-library-version 'flycheck-mode)
-
-Return the version of the library defining FUNCTION. Signal an
-error if FUNCTION is not a valid function, if its defining
-library was not found, or if the library had no proper version
-header."
- (interactive (list (pkg-info--read-function) t))
- (pkg-info-library-version (pkg-info-defining-library function) show))
-
-;;;###autoload
-(defun pkg-info-package-version (package &optional show)
- "Get the version of an installed PACKAGE.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-Return the version as list, or nil if PACKAGE is not installed."
- (interactive (list (pkg-info--read-package) t))
- (let* ((name (if (stringp package) (intern package) package))
- (package (car (epl-find-installed-packages name))))
- (unless package
- (error "Can't find installed package %s" name))
- (pkg-info--show-version-and-return (epl-package-version package) show)))
-
-;;;###autoload
-(defun pkg-info-version-info (library &optional package show)
- "Obtain complete version info for LIBRARY and PACKAGE.
-
-LIBRARY is a symbol denoting a named feature, or a library name
-as string. PACKAGE is a symbol denoting an ELPA package. If
-omitted or nil, default to LIBRARY.
-
-If SHOW is non-nil, show the version in the minibuffer.
-
-When called interactively, prompt for LIBRARY. When called
-interactively with prefix argument, prompt for PACKAGE as well.
-
-Return a string with complete version information for LIBRARY.
-This version information contains the version from the headers of
-LIBRARY, and the version of the installed PACKAGE, the LIBRARY is
-part of. If PACKAGE is not installed, or if the PACKAGE version
-is the same as the LIBRARY version, do not include a package
-version."
- (interactive (list (pkg-info--read-library)
- (when current-prefix-arg
- (pkg-info--read-package))
- t))
- (let* ((package (or package (if (stringp library) (intern library) library)))
- (orig-version (condition-case nil
- (pkg-info-library-original-version library)
- (error nil)))
- ;; If we have X-Original-Version, we assume that MELPA replaced the
- ;; library version with its generated version, so we use the
- ;; X-Original-Version header instead, and ignore the library version
- ;; header
- (lib-version (or orig-version (pkg-info-library-version library)))
- (pkg-version (condition-case nil
- (pkg-info-package-version package)
- (error nil)))
- (version (if (and pkg-version
- (not (version-list-= lib-version pkg-version)))
- (format "%s (package: %s)"
- (pkg-info-format-version lib-version)
- (pkg-info-format-version pkg-version))
- (pkg-info-format-version lib-version))))
- (pkg-info--show-version-and-return version show)))
-
-(defconst pkg-info-melpa-recipe-url "http://melpa.org/recipes.json"
- "The URL from which to fetch MELPA recipes.")
-
-(defvar pkg-info-melpa-recipes nil
- "An alist of MELPA recipes.")
-
-(defun pkg-info-retrieve-melpa-recipes ()
- "Retrieve MELPA recipes from MELPA archive."
- (let ((buffer (url-retrieve-synchronously pkg-info-melpa-recipe-url)))
- (with-current-buffer buffer
- (unwind-protect
- (let ((response-code (url-http-parse-response)))
- (unless (equal response-code 200)
- (error "Failed to retrieve MELPA recipes from %s (code %s)"
- pkg-info-melpa-recipe-url response-code))
- (goto-char url-http-end-of-headers)
- (json-read))
- (when (and buffer (buffer-live-p buffer))
- (kill-buffer buffer))))))
-
-(defun pkg-info-get-melpa-recipes ()
- "Get MELPA recipes."
- (setq pkg-info-melpa-recipes
- (or pkg-info-melpa-recipes
- (pkg-info-retrieve-melpa-recipes))))
-
-(defun pkg-info-get-melpa-recipe (package)
- "Get the MELPA recipe for PACKAGE.
-
-Return nil if PACKAGE is not on MELPA."
- (cdr (assq package (pkg-info-get-melpa-recipes))))
-
-(defun pkg-info-get-melpa-fetcher (package)
- "Get the MELPA fetcher for PACKAGE."
- (cdr (assq 'fetcher (pkg-info-get-melpa-recipe package))))
-
-(defun pkg-info-wiki-package-p (package)
- "Determine whether PACKAGE is build from the EmacsWiki."
- (equal (pkg-info-get-melpa-fetcher package) "wiki"))
-
-(provide 'pkg-info)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; coding: utf-8
-;; End:
-
-;;; pkg-info.el ends here
diff --git a/emacs.d/elpa/pos-tip-20191227.1356/pos-tip-autoloads.el b/emacs.d/elpa/pos-tip-20191227.1356/pos-tip-autoloads.el
deleted file mode 100644
index a3db701..0000000
--- a/emacs.d/elpa/pos-tip-20191227.1356/pos-tip-autoloads.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; pos-tip-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "pos-tip" "pos-tip.el" (0 0 0 0))
-;;; Generated autoloads from pos-tip.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "pos-tip" '("pos-tip-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; pos-tip-autoloads.el ends here
diff --git a/emacs.d/elpa/pos-tip-20191227.1356/pos-tip-pkg.el b/emacs.d/elpa/pos-tip-20191227.1356/pos-tip-pkg.el
deleted file mode 100644
index f935c8c..0000000
--- a/emacs.d/elpa/pos-tip-20191227.1356/pos-tip-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "pos-tip" "20191227.1356" "Show tooltip at point" 'nil :commit "179cc126b363f72ca12fab1e0dc462ce0ee79742" :keywords '("tooltip") :authors '(("S. Irie")) :maintainer '("S. Irie"))
diff --git a/emacs.d/elpa/pos-tip-20191227.1356/pos-tip.el b/emacs.d/elpa/pos-tip-20191227.1356/pos-tip.el
deleted file mode 100644
index 190a401..0000000
--- a/emacs.d/elpa/pos-tip-20191227.1356/pos-tip.el
+++ /dev/null
@@ -1,982 +0,0 @@
-;;; pos-tip.el --- Show tooltip at point -*- coding: utf-8 -*-
-
-;; Copyright (C) 2010 S. Irie
-
-;; Author: S. Irie
-;; Maintainer: S. Irie
-;; Keywords: Tooltip
-;; Package-Version: 20191227.1356
-;; Package-Commit: 179cc126b363f72ca12fab1e0dc462ce0ee79742
-
-(defconst pos-tip-version "0.4.6")
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 2, or
-;; (at your option) any later version.
-
-;; It is distributed in the hope that it will be useful, but WITHOUT
-;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-;; License for more details.
-
-;; You should have received a copy of the GNU General Public
-;; License along with this program; if not, write to the Free
-;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
-;; MA 02110-1301 USA
-
-;;; Commentary:
-
-;; The standard library tooltip.el provides the function for displaying
-;; a tooltip at mouse position which allows users to easily show it.
-;; However, locating tooltip at arbitrary buffer position in window
-;; is not easy. This program provides such function to be used by other
-;; frontend programs.
-
-;; This program is tested on GNU Emacs 22, 23 under X window system and
-;; Emacs 23 for MS-Windows.
-
-;;
-;; Installation:
-;;
-;; First, save this file as pos-tip.el and byte-compile in
-;; a directory that is listed in load-path.
-;;
-;; Put the following in your .emacs file:
-;;
-;; (require 'pos-tip)
-;;
-;; To use the full features of this program on MS-Windows,
-;; put the additional setting in .emacs file:
-;;
-;; (pos-tip-w32-max-width-height) ; Maximize frame temporarily
-;;
-;; or
-;;
-;; (pos-tip-w32-max-width-height t) ; Keep frame maximized
-
-;;
-;; Examples:
-;;
-;; We can display a tooltip at the current position by the following:
-;;
-;; (pos-tip-show "foo bar")
-;;
-;; If you'd like to specify the tooltip color, use an expression as:
-;;
-;; (pos-tip-show "foo bar" '("white" . "red"))
-;;
-;; Here, "white" and "red" are the foreground color and background
-;; color, respectively.
-
-
-;;; History:
-;; 2013-07-16 P. Kalinowski
-;; * Adjusted `pos-tip-show' to correctly set tooltip text foreground
-;; color when using custom color themes.
-;; * Version 0.4.6
-;;
-;; 2010-09-27 S. Irie
-;; * Simplified implementation of `pos-tip-window-system'
-;; * Version 0.4.5
-;;
-;; 2010-08-20 S. Irie
-;; * Changed to use `window-line-height' to calculate tooltip position
-;; * Changed `pos-tip-string-width-height' to ignore last empty line
-;; * Version 0.4.4
-;;
-;; 2010-07-25 S. Irie
-;; * Bug fix
-;; * Version 0.4.3
-;;
-;; 2010-06-09 S. Irie
-;; * Bug fix
-;; * Version 0.4.2
-;;
-;; 2010-06-04 S. Irie
-;; * Added support for text-scale-mode
-;; * Version 0.4.1
-;;
-;; 2010-05-04 S. Irie
-;; * Added functions:
-;; `pos-tip-x-display-width', `pos-tip-x-display-height'
-;; `pos-tip-normalize-natnum', `pos-tip-frame-relative-position'
-;; * Fixed the supports for multi-displays and multi-frames
-;; * Version 0.4.0
-;;
-;; 2010-04-29 S. Irie
-;; * Modified to avoid byte-compile warning
-;; * Bug fix
-;; * Version 0.3.6
-;;
-;; 2010-04-29 S. Irie
-;; * Renamed argument MAX-HEIGHT of `pos-tip-fill-string' to MAX-ROWS
-;; * Modified old FSF address
-;; * Version 0.3.5
-;;
-;; 2010-04-29 S. Irie
-;; * Modified `pos-tip-show' to truncate string exceeding display size
-;; * Added function `pos-tip-truncate-string'
-;; * Added optional argument MAX-ROWS to `pos-tip-split-string'
-;; * Added optional argument MAX-HEIGHT to `pos-tip-fill-string'
-;; * Version 0.3.4
-;;
-;; 2010-04-16 S. Irie
-;; * Changed `pos-tip-show' not to fill paragraph unless exceeding WIDTH
-;; * Version 0.3.3
-;;
-;; 2010-04-08 S. Irie
-;; * Bug fix
-;; * Version 0.3.2
-;;
-;; 2010-03-31 S. Irie
-;; * Bug fix
-;; * Version 0.3.1
-;;
-;; 2010-03-30 S. Irie
-;; * Added support for MS-Windows
-;; * Added option `pos-tip-use-relative-coordinates'
-;; * Bug fixes
-;; * Version 0.3.0
-;;
-;; 2010-03-23 S. Irie
-;; * Changed argument WORD-WRAP to JUSTIFY
-;; * Added optional argument SQUEEZE
-;; * Added function `pos-tip-fill-string'
-;; * Added option `pos-tip-tab-width' used to expand tab characters
-;; * Bug fixes
-;; * Version 0.2.0
-;;
-;; 2010-03-22 S. Irie
-;; * Added optional argument WORD-WRAP to `pos-tip-split-string'
-;; * Changed `pos-tip-show' to perform word wrap or kinsoku shori
-;; * Version 0.1.8
-;;
-;; 2010-03-20 S. Irie
-;; * Added optional argument DY
-;; * Bug fix
-;; * Modified docstrings
-;; * Version 0.1.7
-;;
-;; 2010-03-18 S. Irie
-;; * Added/modified docstrings
-;; * Changed working buffer name to " *xwininfo*"
-;; * Version 0.1.6
-;;
-;; 2010-03-17 S. Irie
-;; * Fixed typos in docstrings
-;; * Version 0.1.5
-;;
-;; 2010-03-16 S. Irie
-;; * Added support for multi-display environment
-;; * Bug fix
-;; * Version 0.1.4
-;;
-;; 2010-03-16 S. Irie
-;; * Bug fix
-;; * Changed calculation for `x-max-tooltip-size'
-;; * Modified docstring
-;; * Version 0.1.3
-;;
-;; 2010-03-11 S. Irie
-;; * Modified commentary
-;; * Version 0.1.2
-;;
-;; 2010-03-11 S. Irie
-;; * Re-implemented `pos-tip-string-width-height'
-;; * Added indicator variable `pos-tip-upperside-p'
-;; * Version 0.1.1
-;;
-;; 2010-03-09 S. Irie
-;; * Re-implemented `pos-tip-show' (*incompatibly changed*)
-;; - Use frame default font
-;; - Automatically calculate tooltip pixel size
-;; - Added optional arguments: TIP-COLOR, MAX-WIDTH
-;; * Added utility functions:
-;; `pos-tip-split-string', `pos-tip-string-width-height'
-;; * Bug fixes
-;; * Version 0.1.0
-;;
-;; 2010-03-08 S. Irie
-;; * Added optional argument DX
-;; * Version 0.0.4
-;;
-;; 2010-03-08 S. Irie
-;; * Bug fix
-;; * Version 0.0.3
-;;
-;; 2010-03-08 S. Irie
-;; * Modified to move out mouse pointer
-;; * Version 0.0.2
-;;
-;; 2010-03-07 S. Irie
-;; * First release
-;; * Version 0.0.1
-
-;; ToDo:
-
-;;; Code:
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Settings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defgroup pos-tip nil
- "Show tooltip at point"
- :group 'faces
- :prefix "pos-tip-")
-
-(defcustom pos-tip-border-width 1
- "Outer border width of pos-tip's tooltip."
- :type 'integer
- :group 'pos-tip)
-
-(defcustom pos-tip-internal-border-width 2
- "Text margin of pos-tip's tooltip."
- :type 'integer
- :group 'pos-tip)
-
-(defcustom pos-tip-foreground-color nil
- "Default foreground color of pos-tip's tooltip.
-When `nil', look up the foreground color of the `tooltip' face."
- :type '(choice (const :tag "Default" nil)
- string)
- :group 'pos-tip)
-
-(defcustom pos-tip-background-color nil
- "Default background color of pos-tip's tooltip.
-When `nil', look up the background color of the `tooltip' face."
- :type '(choice (const :tag "Default" nil)
- string)
- :group 'pos-tip)
-
-(defcustom pos-tip-tab-width nil
- "Tab width used for `pos-tip-split-string' and `pos-tip-fill-string'
-to expand tab characters. nil means use default value of `tab-width'."
- :type '(choice (const :tag "Default" nil)
- integer)
- :group 'pos-tip)
-
-(defcustom pos-tip-use-relative-coordinates nil
- "Non-nil means tooltip location is calculated as a coordinates
-relative to the top left corner of frame. In this case the tooltip
-will always be displayed within the frame.
-
-Note that this variable is automatically set to non-nil if absolute
-coordinates can't be obtained by `pos-tip-compute-pixel-position'."
- :type 'boolean
- :group 'pos-tip)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Functions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun pos-tip-window-system (&optional frame)
- "The name of the window system that FRAME is displaying through.
-The value is a symbol---for instance, 'x' for X windows.
-The value is nil if Emacs is using a text-only terminal.
-
-FRAME defaults to the currently selected frame."
- (let ((type (framep (or frame (selected-frame)))))
- (if type
- (and (not (eq type t))
- type)
- (signal 'wrong-type-argument (list 'framep frame)))))
-
-(defun pos-tip-normalize-natnum (object &optional n)
- "Return a Nth power of 2 if OBJECT is a positive integer.
-Otherwise return 0. Omitting N means return 1 for a positive integer."
- (ash (if (and (natnump object) (> object 0)) 1 0)
- (or n 0)))
-
-(defvar pos-tip-saved-frame-coordinates '(0 . 0)
- "The latest result of `pos-tip-frame-top-left-coordinates'.")
-
-(defvar pos-tip-frame-offset nil
- "The latest result of `pos-tip-calibrate-frame-offset'. This value
-is used for non-X graphical environment.")
-
-(defvar pos-tip-frame-offset-array [nil nil nil nil]
- "Array of the results of `pos-tip-calibrate-frame-offset'. They are
-recorded only when `pos-tip-frame-top-left-coordinates' is called for a
-non-X but graphical frame.
-
-The 2nd and 4th elements are the values for frames having a menu bar.
-The 3rd and 4th elements are the values for frames having a tool bar.")
-
-(defun pos-tip-frame-top-left-coordinates (&optional frame)
- "Return the pixel coordinates of FRAME as a cons cell (LEFT . TOP),
-which are relative to top left corner of screen.
-
-Return nil if failing to acquire the coordinates.
-
-If FRAME is omitted, use selected-frame.
-
-Users can also get the frame coordinates by referring the variable
-`pos-tip-saved-frame-coordinates' just after calling this function."
- (let ((winsys (pos-tip-window-system frame)))
- (cond
- ((null winsys)
- (error "text-only frame: %S" frame))
- ((eq winsys 'x)
- (condition-case nil
- (with-current-buffer (get-buffer-create " *xwininfo*")
- (let ((case-fold-search nil))
- (buffer-disable-undo)
- (erase-buffer)
- (call-process shell-file-name nil t nil shell-command-switch
- (format "xwininfo -display %s -id %s"
- (frame-parameter frame 'display)
- (frame-parameter frame 'window-id)))
- (goto-char (point-min))
- (search-forward "\n Absolute")
- (setq pos-tip-saved-frame-coordinates
- (cons (string-to-number (buffer-substring-no-properties
- (search-forward "X: ")
- (line-end-position)))
- (string-to-number (buffer-substring-no-properties
- (search-forward "Y: ")
- (line-end-position)))))))
- (error nil)))
- (t
- (let* ((index (+ (pos-tip-normalize-natnum
- (frame-parameter frame 'menu-bar-lines) 0)
- (pos-tip-normalize-natnum
- (frame-parameter frame 'tool-bar-lines) 1)))
- (offset (or (aref pos-tip-frame-offset-array index)
- (aset pos-tip-frame-offset-array index
- (pos-tip-calibrate-frame-offset frame)))))
- (if offset
- (setq pos-tip-saved-frame-coordinates
- (cons (+ (eval (frame-parameter frame 'left))
- (car offset))
- (+ (eval (frame-parameter frame 'top))
- (cdr offset))))))))))
-
-(defun pos-tip-frame-relative-position
- (frame1 frame2 &optional w32-frame frame-coord1 frame-coord2)
- "Return the pixel coordinates of FRAME1 relative to FRAME2
-as a cons cell (LEFT . TOP).
-
-W32-FRAME non-nil means both of frames are under `w32' window system.
-
-FRAME-COORD1 and FRAME-COORD2, if given, specify the absolute
-coordinates of FRAME1 and FRAME2, respectively, which make the
-calculations faster if the frames have different heights of menu bars
-and tool bars."
- (if (and (eq (pos-tip-normalize-natnum
- (frame-parameter frame1 'menu-bar-lines))
- (pos-tip-normalize-natnum
- (frame-parameter frame2 'menu-bar-lines)))
- (or w32-frame
- (eq (pos-tip-normalize-natnum
- (frame-parameter frame1 'tool-bar-lines))
- (pos-tip-normalize-natnum
- (frame-parameter frame2 'tool-bar-lines)))))
- (cons (- (eval (frame-parameter frame1 'left))
- (eval (frame-parameter frame2 'left)))
- (- (eval (frame-parameter frame1 'top))
- (eval (frame-parameter frame2 'top))))
- (unless frame-coord1
- (setq frame-coord1 (let (pos-tip-saved-frame-coordinates)
- (pos-tip-frame-top-left-coordinates frame1))))
- (unless frame-coord2
- (setq frame-coord2 (let (pos-tip-saved-frame-coordinates)
- (pos-tip-frame-top-left-coordinates frame2))))
- (cons (- (car frame-coord1) (car frame-coord2))
- (- (cdr frame-coord1) (cdr frame-coord2)))))
-
-(defvar pos-tip-upperside-p nil
- "Non-nil indicates the latest result of `pos-tip-compute-pixel-position'
-was upper than the location specified by the arguments.")
-
-(defvar pos-tip-w32-saved-max-width-height nil
- "Display pixel size effective for showing tooltip in MS-Windows desktop.
-This doesn't include the taskbar area, so isn't same as actual display size.")
-
-(defun pos-tip-compute-pixel-position
- (&optional pos window pixel-width pixel-height frame-coordinates dx dy)
- "Return pixel position of POS in WINDOW like (X . Y), which indicates
-the absolute or relative coordinates of bottom left corner of the object.
-
-Omitting POS and WINDOW means use current position and selected window,
-respectively.
-
-If PIXEL-WIDTH and PIXEL-HEIGHT are given, this function assumes these
-values as the size of small window like tooltip which is located around the
-object at POS. These values are used to adjust the location in order that
-the tooltip won't disappear by sticking out of the display. By referring
-the variable `pos-tip-upperside-p' after calling this function, user can
-examine whether the tooltip will be located above the specified position.
-
-If FRAME-COORDINATES is omitted or nil, automatically obtain the absolute
-coordinates of the top left corner of frame which WINDOW is on. Here,
-`top left corner of frame' represents the origin of `window-pixel-edges'
-and its coordinates are essential for calculating the return value as
-absolute coordinates. If a cons cell like (LEFT . TOP), specifies the
-frame absolute location and makes the calculation slightly faster, but can
-be used only when it's clear that frame is in the specified position. Users
-can get the latest values of frame coordinates for using in the next call
-by referring the variable `pos-tip-saved-frame-coordinates' just after
-calling this function. Otherwise, FRAME-COORDINATES `relative' means return
-pixel coordinates of the object relative to the top left corner of the frame.
-This is the same effect as `pos-tip-use-relative-coordinates' is non-nil.
-
-DX specifies horizontal offset in pixel.
-
-DY specifies vertical offset in pixel. This makes the calculations done
-without considering the height of object at POS, so the object might be
-hidden by the tooltip."
- (let* ((frame (window-frame (or window (selected-window))))
- (w32-frame (eq (pos-tip-window-system frame) 'w32))
- (relative (or pos-tip-use-relative-coordinates
- (eq frame-coordinates 'relative)
- (and w32-frame
- (null pos-tip-w32-saved-max-width-height))))
- (frame-coord (or (and relative '(0 . 0))
- frame-coordinates
- (pos-tip-frame-top-left-coordinates frame)
- (progn
- (setq relative t
- pos-tip-use-relative-coordinates t)
- '(0 . 0))))
- (posn (posn-at-point (or pos (window-point window)) window))
- (line (cdr (posn-actual-col-row posn)))
- (line-height (and line
- (or (window-line-height line window)
- (and (redisplay t)
- (window-line-height line window)))))
- (x-y (or (posn-x-y posn)
- (let ((geom (pos-visible-in-window-p
- (or pos (window-point window)) window t)))
- (and geom (cons (car geom) (cadr geom))))
- '(0 . 0)))
- (x (+ (car frame-coord)
- (car (window-inside-pixel-edges window))
- (car x-y)
- (or dx 0)))
- (y0 (+ (cdr frame-coord)
- (cadr (window-pixel-edges window))
- (or (nth 2 line-height) (cdr x-y))))
- (y (+ y0
- (or dy
- (car line-height)
- (with-current-buffer (window-buffer window)
- (cond
- ;; `posn-object-width-height' returns an incorrect value
- ;; when the header line is displayed (Emacs bug #4426).
- ((and posn
- (null header-line-format))
- (cdr (posn-object-width-height posn)))
- ((and (bound-and-true-p text-scale-mode)
- (not (zerop (with-no-warnings
- text-scale-mode-amount))))
- (round (* (frame-char-height frame)
- (with-no-warnings
- (expt text-scale-mode-step
- text-scale-mode-amount)))))
- (t
- (frame-char-height frame)))))))
- xmax ymax)
- (cond
- (relative
- (setq xmax (frame-pixel-width frame)
- ymax (frame-pixel-height frame)))
- (w32-frame
- (setq xmax (car pos-tip-w32-saved-max-width-height)
- ymax (cdr pos-tip-w32-saved-max-width-height)))
- (t
- (setq xmax (x-display-pixel-width frame)
- ymax (x-display-pixel-height frame))))
- (setq pos-tip-upperside-p (> (+ y (or pixel-height 0))
- ymax))
- (cons (max 0 (min x (- xmax (or pixel-width 0))))
- (max 0 (if pos-tip-upperside-p
- (- (if dy ymax y0) (or pixel-height 0))
- y)))))
-
-(defun pos-tip-cancel-timer ()
- "Cancel timeout of tooltip."
- (mapc (lambda (timer)
- (if (eq (aref timer 5) 'x-hide-tip)
- (cancel-timer timer)))
- timer-list))
-
-(defun pos-tip-avoid-mouse (left right top bottom &optional frame)
- "Move out mouse pointer if it is inside region (LEFT RIGHT TOP BOTTOM)
-in FRAME. Return new mouse position like (FRAME . (X . Y))."
- (unless frame
- (setq frame (selected-frame)))
- (let* ((mpos (with-selected-window (frame-selected-window frame)
- (mouse-pixel-position)))
- (mframe (pop mpos))
- (mx (car mpos))
- (my (cdr mpos)))
- (when (and (eq mframe frame)
- (numberp mx))
- (let* ((large-number (+ (frame-pixel-width frame) (frame-pixel-height frame)))
- (dl (if (> left 2)
- (1+ (- mx left))
- large-number))
- (dr (if (< (1+ right) (frame-pixel-width frame))
- (- right mx)
- large-number))
- (dt (if (> top 2)
- (1+ (- my top))
- large-number))
- (db (if (< (1+ bottom) (frame-pixel-height frame))
- (- bottom my)
- large-number))
- (d (min dl dr dt db)))
- (when (> d -2)
- (cond
- ((= d dl)
- (setq mx (- left 2)))
- ((= d dr)
- (setq mx (1+ right)))
- ((= d dt)
- (setq my (- top 2)))
- (t
- (setq my (1+ bottom))))
- (set-mouse-pixel-position frame mx my)
- (sit-for 0.0001))))
- (cons mframe (and mpos (cons mx my)))))
-
-(defun pos-tip-compute-foreground-color (tip-color)
- "Compute the foreground color to use for tooltip.
-
-TIP-COLOR is a face or a cons cell like (FOREGROUND-COLOR . BACKGROUND-COLOR).
-If it is nil, use `pos-tip-foreground-color' or the foreground color of the
-`tooltip' face."
- (or (and (facep tip-color)
- (face-attribute tip-color :foreground))
- (car-safe tip-color)
- pos-tip-foreground-color
- (face-foreground 'tooltip)))
-
-(defun pos-tip-compute-background-color (tip-color)
- "Compute the background color to use for tooltip.
-
-TIP-COLOR is a face or a cons cell like (FOREGROUND-COLOR . BACKGROUND-COLOR).
-If it is nil, use `pos-tip-background-color' or the background color of the
-`tooltip' face."
- (or (and (facep tip-color)
- (face-attribute tip-color :background))
- (cdr-safe tip-color)
- pos-tip-background-color
- (face-background 'tooltip)))
-
-(defun pos-tip-show-no-propertize
- (string &optional tip-color pos window timeout pixel-width pixel-height frame-coordinates dx dy)
- "Show STRING in a tooltip at POS in WINDOW.
-Analogous to `pos-tip-show' except don't propertize STRING by `pos-tip' face.
-
-PIXEL-WIDTH and PIXEL-HEIGHT specify the size of tooltip, if given. These
-are used to adjust the tooltip position in order that it doesn't disappear by
-sticking out of the display, and also used to prevent it from vanishing by
-overlapping with mouse pointer.
-
-Note that this function itself doesn't calculate tooltip size because the
-character width and height specified by faces are unknown. So users should
-calculate PIXEL-WIDTH and PIXEL-HEIGHT by using `pos-tip-tooltip-width' and
-`pos-tip-tooltip-height', or use `pos-tip-show' instead, which can
-automatically calculate tooltip size.
-
-See `pos-tip-show' for details.
-
-Example:
-
-\(defface my-tooltip
- '((t
- :background \"gray85\"
- :foreground \"black\"
- :inherit variable-pitch))
- \"Face for my tooltip.\")
-
-\(defface my-tooltip-highlight
- '((t
- :background \"blue\"
- :foreground \"white\"
- :inherit my-tooltip))
- \"Face for my tooltip highlighted.\")
-
-\(let ((str (propertize \" foo \\n bar \\n baz \" 'face 'my-tooltip)))
- (put-text-property 6 11 'face 'my-tooltip-highlight str)
- (pos-tip-show-no-propertize str 'my-tooltip))"
- (unless window
- (setq window (selected-window)))
- (let* ((frame (window-frame window))
- (winsys (pos-tip-window-system frame))
- (x-frame (eq winsys 'x))
- (w32-frame (eq winsys 'w32))
- (relative (or pos-tip-use-relative-coordinates
- (eq frame-coordinates 'relative)
- (and w32-frame
- (null pos-tip-w32-saved-max-width-height))))
- (x-y (prog1
- (pos-tip-compute-pixel-position pos window
- pixel-width pixel-height
- frame-coordinates dx dy)
- (if pos-tip-use-relative-coordinates
- (setq relative t))))
- (ax (car x-y))
- (ay (cdr x-y))
- (rx (if relative ax (- ax (car pos-tip-saved-frame-coordinates))))
- (ry (if relative ay (- ay (cdr pos-tip-saved-frame-coordinates))))
- (retval (cons rx ry))
- (fg (pos-tip-compute-foreground-color tip-color))
- (bg (pos-tip-compute-background-color tip-color))
- (use-dxdy (or relative
- (not x-frame)))
- (spacing (frame-parameter frame 'line-spacing))
- (border (ash (+ pos-tip-border-width
- pos-tip-internal-border-width)
- 1))
- (x-max-tooltip-size
- (cons (+ (if x-frame 1 0)
- (/ (- (or pixel-width
- (cond
- (relative
- (frame-pixel-width frame))
- (w32-frame
- (car pos-tip-w32-saved-max-width-height))
- (t
- (x-display-pixel-width frame))))
- border)
- (frame-char-width frame)))
- (/ (- (or pixel-height
- (x-display-pixel-height frame))
- border)
- (frame-char-height frame))))
- (x-gtk-use-system-tooltips nil) ; Don't use Gtk+ tooltip in Emacs 24
- (mpos (with-selected-window window (mouse-pixel-position)))
- (mframe (car mpos))
- default-frame-alist)
- (if (or relative
- (and use-dxdy
- (null (cadr mpos))))
- (unless (and (cadr mpos)
- (eq mframe frame))
- (let* ((edges (window-inside-pixel-edges (cadr (window-list frame))))
- (mx (ash (+ (pop edges) (cadr edges)) -1))
- (my (ash (+ (pop edges) (cadr edges)) -1)))
- (setq mframe frame)
- (set-mouse-pixel-position mframe mx my)
- (sit-for 0.0001)))
- (when (and (cadr mpos)
- (not (eq mframe frame)))
- (let ((rel-coord (pos-tip-frame-relative-position frame mframe w32-frame
- frame-coordinates)))
- (setq rx (+ rx (car rel-coord))
- ry (+ ry (cdr rel-coord))))))
- (and pixel-width pixel-height
- (setq mpos (pos-tip-avoid-mouse rx (+ rx pixel-width
- (if w32-frame 3 0))
- ry (+ ry pixel-height)
- mframe)))
- (x-show-tip string mframe
- `((border-width . ,pos-tip-border-width)
- (internal-border-width . ,pos-tip-internal-border-width)
- ,@(and (not use-dxdy) `((left . ,ax)
- (top . ,ay)))
- (font . ,(frame-parameter frame 'font))
- ,@(and spacing `((line-spacing . ,spacing)))
- ,@(and (stringp fg) `((foreground-color . ,fg)))
- ,@(and (stringp bg) `((background-color . ,bg))))
- (and timeout (> timeout 0) timeout)
- (and use-dxdy (- rx (cadr mpos)))
- (and use-dxdy (- ry (cddr mpos))))
- (if (and timeout (<= timeout 0))
- (pos-tip-cancel-timer))
- retval))
-
-(defun pos-tip-split-string (string &optional width margin justify squeeze max-rows)
- "Split STRING into fixed width strings. Return a list of these strings.
-
-WIDTH specifies the width of filling each paragraph. WIDTH nil means use
-the width of currently selected frame. Note that this function doesn't add any
-padding characters at the end of each row.
-
-MARGIN, if non-nil, specifies left margin width which is the number of spece
-characters to add at the beginning of each row.
-
-The optional fourth argument JUSTIFY specifies which kind of justification
-to do: `full', `left', `right', `center', or `none'. A value of t means handle
-each paragraph as specified by its text properties. Omitting JUSTIFY means
-don't perform justification, word wrap and kinsoku shori (ç¦å‰‡å‡¦ç†).
-
-SQUEEZE nil means leave whitespaces other than line breaks untouched.
-
-MAX-ROWS, if given, specifies maximum number of elements of return value.
-The elements exceeding this number are discarded."
- (with-temp-buffer
- (let* ((tab-width (or pos-tip-tab-width tab-width))
- (fill-column (or width (frame-width)))
- (left-margin (or margin 0))
- (kinsoku-limit 1)
- indent-tabs-mode
- row rows)
- (insert string)
- (untabify (point-min) (point-max))
- (if justify
- (fill-region (point-min) (point-max) justify (not squeeze))
- (setq margin (make-string left-margin ?\s)))
- (goto-char (point-min))
- (while (prog2
- (let ((line (buffer-substring
- (point) (progn (end-of-line) (point)))))
- (if justify
- (push line rows)
- (while (progn
- (setq line (concat margin line)
- row (truncate-string-to-width line fill-column))
- (push row rows)
- (if (not (= (length row) (length line)))
- (setq line (substring line (length row))))))))
- (< (point) (point-max))
- (beginning-of-line 2)))
- (nreverse (if max-rows
- (last rows max-rows)
- rows)))))
-
-(defun pos-tip-fill-string (string &optional width margin justify squeeze max-rows)
- "Fill each of the paragraphs in STRING.
-
-WIDTH specifies the width of filling each paragraph. WIDTH nil means use
-the width of currently selected frame. Note that this function doesn't add any
-padding characters at the end of each row.
-
-MARGIN, if non-nil, specifies left margin width which is the number of spece
-characters to add at the beginning of each row.
-
-The optional fourth argument JUSTIFY specifies which kind of justification
-to do: `full', `left', `right', `center', or `none'. A value of t means handle
-each paragraph as specified by its text properties. Omitting JUSTIFY means
-don't perform justification, word wrap and kinsoku shori (ç¦å‰‡å‡¦ç†).
-
-SQUEEZE nil means leave whitespaces other than line breaks untouched.
-
-MAX-ROWS, if given, specifies maximum number of rows. The rows exceeding
-this number are discarded."
- (if justify
- (with-temp-buffer
- (let* ((tab-width (or pos-tip-tab-width tab-width))
- (fill-column (or width (frame-width)))
- (left-margin (or margin 0))
- (kinsoku-limit 1)
- indent-tabs-mode)
- (insert string)
- (untabify (point-min) (point-max))
- (fill-region (point-min) (point-max) justify (not squeeze))
- (if max-rows
- (buffer-substring (goto-char (point-min))
- (line-end-position max-rows))
- (buffer-string))))
- (mapconcat 'identity
- (pos-tip-split-string string width margin nil nil max-rows)
- "\n")))
-
-(defun pos-tip-truncate-string (string width height)
- "Truncate each line of STRING to WIDTH and discard lines exceeding HEIGHT."
- (with-temp-buffer
- (insert string)
- (goto-char (point-min))
- (let ((nrow 0)
- rows)
- (while (and (< nrow height)
- (prog2
- (push (truncate-string-to-width
- (buffer-substring (point) (progn (end-of-line) (point)))
- width)
- rows)
- (< (point) (point-max))
- (beginning-of-line 2)
- (setq nrow (1+ nrow)))))
- (mapconcat 'identity (nreverse rows) "\n"))))
-
-(defun pos-tip-string-width-height (string)
- "Count columns and rows of STRING. Return a cons cell like (WIDTH . HEIGHT).
-The last empty line of STRING is ignored.
-
-Example:
-
-\(pos-tip-string-width-height \"abc\\nã‚ã„ã†\\n123\")
-;; => (6 . 3)"
- (with-temp-buffer
- (insert string)
- (goto-char (point-min))
- (end-of-line)
- (let ((width (current-column))
- (height (if (eq (char-before (point-max)) ?\n) 0 1)))
- (while (< (point) (point-max))
- (end-of-line 2)
- (setq width (max (current-column) width)
- height (1+ height)))
- (cons width height))))
-
-(defun pos-tip-x-display-width (&optional frame)
- "Return maximum column number in tooltip which occupies the full width
-of display. Omitting FRAME means use display that selected frame is in."
- (1+ (/ (x-display-pixel-width frame) (frame-char-width frame))))
-
-(defun pos-tip-x-display-height (&optional frame)
- "Return maximum row number in tooltip which occupies the full height
-of display. Omitting FRAME means use display that selected frame is in."
- (1+ (/ (x-display-pixel-height frame) (frame-char-height frame))))
-
-(defun pos-tip-tooltip-width (width char-width)
- "Calculate tooltip pixel width."
- (+ (* width char-width)
- (ash (+ pos-tip-border-width
- pos-tip-internal-border-width)
- 1)))
-
-(defun pos-tip-tooltip-height (height char-height &optional frame)
- "Calculate tooltip pixel height."
- (let ((spacing (or (default-value 'line-spacing)
- (frame-parameter frame 'line-spacing))))
- (+ (* height (+ char-height
- (cond
- ((integerp spacing)
- spacing)
- ((floatp spacing)
- (truncate (* (frame-char-height frame)
- spacing)))
- (t 0))))
- (ash (+ pos-tip-border-width
- pos-tip-internal-border-width)
- 1))))
-
-(defun pos-tip-show
- (string &optional tip-color pos window timeout width frame-coordinates dx dy)
- "Show STRING in a tooltip, which is a small X window, at POS in WINDOW
-using frame's default font with TIP-COLOR.
-
-Return pixel position of tooltip relative to top left corner of frame as
-a cons cell like (X . Y).
-
-TIP-COLOR is a face or a cons cell like (FOREGROUND-COLOR . BACKGROUND-COLOR)
-used to specify *only* foreground-color and background-color of tooltip. If
-omitted, use `pos-tip-foreground-color' and `pos-tip-background-color' or the
-foreground and background color of the `tooltip' face instead.
-
-Omitting POS and WINDOW means use current position and selected window,
-respectively.
-
-Automatically hide the tooltip after TIMEOUT seconds. Omitting TIMEOUT means
-use the default timeout of 5 seconds. Non-positive TIMEOUT means don't hide
-tooltip automatically.
-
-WIDTH, if non-nil, specifies the width of filling each paragraph.
-
-If FRAME-COORDINATES is omitted or nil, automatically obtain the absolute
-coordinates of the top left corner of frame which WINDOW is on. Here,
-`top left corner of frame' represents the origin of `window-pixel-edges'
-and its coordinates are essential for calculating the absolute coordinates
-of the tooltip. If a cons cell like (LEFT . TOP), specifies the frame
-absolute location and makes the calculation slightly faster, but can be
-used only when it's clear that frame is in the specified position. Users
-can get the latest values of frame coordinates for using in the next call
-by referring the variable `pos-tip-saved-frame-coordinates' just after
-calling this function. Otherwise, FRAME-COORDINATES `relative' means use
-the pixel coordinates relative to the top left corner of the frame for
-displaying the tooltip. This is the same effect as
-`pos-tip-use-relative-coordinates' is non-nil.
-
-DX specifies horizontal offset in pixel.
-
-DY specifies vertical offset in pixel. This makes the calculations done
-without considering the height of object at POS, so the object might be
-hidden by the tooltip.
-
-See also `pos-tip-show-no-propertize'."
- (unless window
- (setq window (selected-window)))
- (let* ((frame (window-frame window))
- (max-width (pos-tip-x-display-width frame))
- (max-height (pos-tip-x-display-height frame))
- (w-h (pos-tip-string-width-height string))
- (fg (pos-tip-compute-foreground-color tip-color))
- (bg (pos-tip-compute-background-color tip-color))
- (frame-font (find-font (font-spec :name (frame-parameter frame 'font))))
- (tip-face-attrs (list :font frame-font :foreground fg :background bg)))
- (cond
- ((and width
- (> (car w-h) width))
- (setq string (pos-tip-fill-string string width nil 'none nil max-height)
- w-h (pos-tip-string-width-height string)))
- ((or (> (car w-h) max-width)
- (> (cdr w-h) max-height))
- (setq string (pos-tip-truncate-string string max-width max-height)
- w-h (pos-tip-string-width-height string))))
- (pos-tip-show-no-propertize
- (propertize string 'face tip-face-attrs)
- tip-color pos window timeout
- (pos-tip-tooltip-width (car w-h) (frame-char-width frame))
- (pos-tip-tooltip-height (cdr w-h) (frame-char-height frame) frame)
- frame-coordinates dx dy)))
-
-(defalias 'pos-tip-hide 'x-hide-tip
- "Hide pos-tip's tooltip.")
-
-(defun pos-tip-calibrate-frame-offset (&optional frame)
- "Return coordinates of FRAME origin relative to the top left corner of
-the FRAME extent, like (LEFT . TOP). The return value is recorded to
-`pos-tip-frame-offset'.
-
-Note that this function doesn't correctly work for X frame and Emacs 22."
- (setq pos-tip-frame-offset nil)
- (let* ((window (frame-first-window frame))
- (delete-frame-functions
- '((lambda (frame)
- (if (equal (frame-parameter frame 'name) "tooltip")
- (setq pos-tip-frame-offset
- (cons (eval (frame-parameter frame 'left))
- (eval (frame-parameter frame 'top))))))))
- (pos-tip-border-width 0)
- (pos-tip-internal-border-width 1)
- (rpos (pos-tip-show ""
- `(nil . ,(frame-parameter frame 'background-color))
- (window-start window) window
- nil nil 'relative nil 0)))
- (sit-for 0)
- (pos-tip-hide)
- (and pos-tip-frame-offset
- (setq pos-tip-frame-offset
- (cons (- (car pos-tip-frame-offset)
- (car rpos)
- (eval (frame-parameter frame 'left)))
- (- (cdr pos-tip-frame-offset)
- (cdr rpos)
- (eval (frame-parameter frame 'top))))))))
-
-(defun pos-tip-w32-max-width-height (&optional keep-maximize)
- "Maximize the currently selected frame temporarily and set
-`pos-tip-w32-saved-max-width-height' the effective display size in order
-to become possible to calculate the absolute location of tooltip.
-
-KEEP-MAXIMIZE non-nil means leave the frame maximized.
-
-Note that this function is usable only in Emacs 23 for MS-Windows."
- (interactive)
- (unless (eq window-system 'w32)
- (error "`pos-tip-w32-max-width-height' can be used only in w32 frame."))
- ;; Maximize frame
- (with-no-warnings (w32-send-sys-command 61488))
- (sit-for 0)
- (let ((offset (pos-tip-calibrate-frame-offset)))
- (prog1
- (setq pos-tip-w32-saved-max-width-height
- (cons (frame-pixel-width)
- (+ (frame-pixel-height)
- (- (cdr offset) (car offset)))))
- (if (called-interactively-p 'interactive)
- (message "%S" pos-tip-w32-saved-max-width-height))
- (unless keep-maximize
- ;; Restore frame
- (with-no-warnings (w32-send-sys-command 61728))))))
-
-
-(provide 'pos-tip)
-
-;;;
-;;; pos-tip.el ends here
diff --git a/emacs.d/elpa/project-0.6.0.signed b/emacs.d/elpa/project-0.6.0.signed
deleted file mode 100644
index f4efdd2..0000000
--- a/emacs.d/elpa/project-0.6.0.signed
+++ /dev/null
@@ -1 +0,0 @@
-Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2021-04-29T12:05:02+0300 using RSA \ No newline at end of file
diff --git a/emacs.d/elpa/project-0.6.0/project-autoloads.el b/emacs.d/elpa/project-0.6.0/project-autoloads.el
deleted file mode 100644
index 4010bb1..0000000
--- a/emacs.d/elpa/project-0.6.0/project-autoloads.el
+++ /dev/null
@@ -1,234 +0,0 @@
-;;; project-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "project" "project.el" (0 0 0 0))
-;;; Generated autoloads from project.el
-
-(autoload 'project-current "project" "\
-Return the project instance in DIRECTORY, defaulting to `default-directory'.
-
-When no project is found in that directory, the result depends on
-the value of MAYBE-PROMPT: if it is nil or omitted, return nil,
-else ask the user for a directory in which to look for the
-project, and if no project is found there, return a \"transient\"
-project instance.
-
-The \"transient\" project instance is a special kind of value
-which denotes a project rooted in that directory and includes all
-the files under the directory except for those that should be
-ignored (per `project-ignores').
-
-See the doc string of `project-find-functions' for the general form
-of the project instance object.
-
-\(fn &optional MAYBE-PROMPT DIRECTORY)" nil nil)
-
-(defvar project-prefix-map (let ((map (make-sparse-keymap))) (define-key map "!" 'project-shell-command) (define-key map "&" 'project-async-shell-command) (define-key map "f" 'project-find-file) (define-key map "F" 'project-or-external-find-file) (define-key map "b" 'project-switch-to-buffer) (define-key map "s" 'project-shell) (define-key map "d" 'project-dired) (define-key map "v" 'project-vc-dir) (define-key map "c" 'project-compile) (define-key map "e" 'project-eshell) (define-key map "k" 'project-kill-buffers) (define-key map "p" 'project-switch-project) (define-key map "g" 'project-find-regexp) (define-key map "G" 'project-or-external-find-regexp) (define-key map "r" 'project-query-replace-regexp) (define-key map "x" 'project-execute-extended-command) map) "\
-Keymap for project commands.")
- (define-key ctl-x-map "p" project-prefix-map)
-
-(autoload 'project-other-window-command "project" "\
-Run project command, displaying resultant buffer in another window.
-
-The following commands are available:
-
-\\{project-prefix-map}
-\\{project-other-window-map}" t nil)
- (define-key ctl-x-4-map "p" #'project-other-window-command)
-
-(autoload 'project-other-frame-command "project" "\
-Run project command, displaying resultant buffer in another frame.
-
-The following commands are available:
-
-\\{project-prefix-map}
-\\{project-other-frame-map}" t nil)
- (define-key ctl-x-5-map "p" #'project-other-frame-command)
-
-(autoload 'project-other-tab-command "project" "\
-Run project command, displaying resultant buffer in a new tab.
-
-The following commands are available:
-
-\\{project-prefix-map}" t nil)
-
-(when (bound-and-true-p tab-prefix-map) (define-key tab-prefix-map "p" #'project-other-tab-command))
-
-(autoload 'project-find-regexp "project" "\
-Find all matches for REGEXP in the current project's roots.
-With \\[universal-argument] prefix, you can specify the directory
-to search in, and the file name pattern to search for. The
-pattern may use abbreviations defined in `grep-files-aliases',
-e.g. entering `ch' is equivalent to `*.[ch]'. As whitespace
-triggers completion when entering a pattern, including it
-requires quoting, e.g. `\\[quoted-insert]<space>'.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'project-or-external-find-regexp "project" "\
-Find all matches for REGEXP in the project roots or external roots.
-With \\[universal-argument] prefix, you can specify the file name
-pattern to search for.
-
-\(fn REGEXP)" t nil)
-
-(autoload 'project-find-file "project" "\
-Visit a file (with completion) in the current project.
-
-The completion default is the filename at point, determined by
-`thing-at-point' (whether such file exists or not)." t nil)
-
-(autoload 'project-or-external-find-file "project" "\
-Visit a file (with completion) in the current project or external roots.
-
-The completion default is the filename at point, determined by
-`thing-at-point' (whether such file exists or not)." t nil)
-
-(autoload 'project-dired "project" "\
-Start Dired in the current project's root." t nil)
-
-(autoload 'project-vc-dir "project" "\
-Run VC-Dir in the current project's root." t nil)
-
-(autoload 'project-shell "project" "\
-Start an inferior shell in the current project's root directory.
-If a buffer already exists for running a shell in the project's root,
-switch to it. Otherwise, create a new shell buffer.
-With \\[universal-argument] prefix arg, create a new inferior shell buffer even
-if one already exists." t nil)
-
-(autoload 'project-eshell "project" "\
-Start Eshell in the current project's root directory.
-If a buffer already exists for running Eshell in the project's root,
-switch to it. Otherwise, create a new Eshell buffer.
-With \\[universal-argument] prefix arg, create a new Eshell buffer even
-if one already exists." t nil)
-
-(autoload 'project-async-shell-command "project" "\
-Run `async-shell-command' in the current project's root directory." t nil)
-
-(function-put 'project-async-shell-command 'interactive-only 'async-shell-command)
-
-(autoload 'project-shell-command "project" "\
-Run `shell-command' in the current project's root directory." t nil)
-
-(function-put 'project-shell-command 'interactive-only 'shell-command)
-
-(autoload 'project-search "project" "\
-Search for REGEXP in all the files of the project.
-Stops when a match is found.
-To continue searching for the next match, use the
-command \\[fileloop-continue].
-
-\(fn REGEXP)" t nil)
-
-(autoload 'project-query-replace-regexp "project" "\
-Query-replace REGEXP in all the files of the project.
-Stops when a match is found and prompts for whether to replace it.
-If you exit the query-replace, you can later continue the query-replace
-loop using the command \\[fileloop-continue].
-
-\(fn FROM TO)" t nil)
-
-(autoload 'project-compile "project" "\
-Run `compile' in the project root." t nil)
-
-(function-put 'project-compile 'interactive-only 'compile)
-
-(autoload 'project-switch-to-buffer "project" "\
-Display buffer BUFFER-OR-NAME in the selected window.
-When called interactively, prompts for a buffer belonging to the
-current project. Two buffers belong to the same project if their
-project instances, as reported by `project-current' in each
-buffer, are identical.
-
-\(fn BUFFER-OR-NAME)" t nil)
-
-(autoload 'project-display-buffer "project" "\
-Display BUFFER-OR-NAME in some window, without selecting it.
-When called interactively, prompts for a buffer belonging to the
-current project. Two buffers belong to the same project if their
-project instances, as reported by `project-current' in each
-buffer, are identical.
-
-This function uses `display-buffer' as a subroutine, which see
-for how it is determined where the buffer will be displayed.
-
-\(fn BUFFER-OR-NAME)" t nil)
-
-(autoload 'project-display-buffer-other-frame "project" "\
-Display BUFFER-OR-NAME preferably in another frame.
-When called interactively, prompts for a buffer belonging to the
-current project. Two buffers belong to the same project if their
-project instances, as reported by `project-current' in each
-buffer, are identical.
-
-This function uses `display-buffer-other-frame' as a subroutine,
-which see for how it is determined where the buffer will be
-displayed.
-
-\(fn BUFFER-OR-NAME)" t nil)
-
-(autoload 'project-kill-buffers "project" "\
-Kill the buffers belonging to the current project.
-Two buffers belong to the same project if their project
-instances, as reported by `project-current' in each buffer, are
-identical. Only the buffers that match a condition in
-`project-kill-buffer-conditions' will be killed. If NO-CONFIRM
-is non-nil, the command will not ask the user for confirmation.
-NO-CONFIRM is always nil when the command is invoked
-interactively.
-
-\(fn &optional NO-CONFIRM)" t nil)
-
-(autoload 'project-remember-project "project" "\
-Add project PR to the front of the project list.
-Save the result in `project-list-file' if the list of projects has changed.
-
-\(fn PR)" nil nil)
-
-(autoload 'project-remove-known-project "project" "\
-Remove directory PROJECT-ROOT from the project list.
-PROJECT-ROOT is the root directory of a known project listed in
-the project list.
-
-\(fn PROJECT-ROOT)" t nil)
-
-(autoload 'project-known-project-roots "project" "\
-Return the list of root directories of all known projects." nil nil)
-
-(autoload 'project-execute-extended-command "project" "\
-Execute an extended command in project root." t nil)
-
-(function-put 'project-execute-extended-command 'interactive-only 'command-execute)
-
-(autoload 'project-switch-project "project" "\
-\"Switch\" to another project by running an Emacs command.
-The available commands are presented as a dispatch menu
-made from `project-switch-commands'.
-
-When called in a program, it will use the project corresponding
-to directory DIR.
-
-\(fn DIR)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "project" '("project-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("project-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; project-autoloads.el ends here
diff --git a/emacs.d/elpa/project-0.6.0/project-pkg.el b/emacs.d/elpa/project-0.6.0/project-pkg.el
deleted file mode 100644
index 47bac26..0000000
--- a/emacs.d/elpa/project-0.6.0/project-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;; Generated package description from project.el -*- no-byte-compile: t -*-
-(define-package "project" "0.6.0" "Operations on the current project" '((emacs "26.1") (xref "1.0.2")) :url "https://elpa.gnu.org/packages/project.html")
diff --git a/emacs.d/elpa/project-0.6.0/project.el b/emacs.d/elpa/project-0.6.0/project.el
deleted file mode 100644
index d47d9d7..0000000
--- a/emacs.d/elpa/project-0.6.0/project.el
+++ /dev/null
@@ -1,1401 +0,0 @@
-;;; project.el --- Operations on the current project -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
-;; Version: 0.6.0
-;; Package-Requires: ((emacs "26.1") (xref "1.0.2"))
-
-;; This is a GNU ELPA :core package. Avoid using functionality that
-;; not compatible with the version of Emacs recorded above.
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; NOTE: The project API is still experimental and can change in major,
-;; backward-incompatible ways. Everyone is encouraged to try it, and
-;; report to us any problems or use cases we hadn't anticipated, by
-;; sending an email to emacs-devel, or `M-x report-emacs-bug'.
-;;
-;; This file contains generic infrastructure for dealing with
-;; projects, some utility functions, and commands using that
-;; infrastructure.
-;;
-;; The goal is to make it easier for Lisp programs to operate on the
-;; current project, without having to know which package handles
-;; detection of that project type, parsing its config files, etc.
-;;
-;; This file consists of following parts:
-;;
-;; Infrastructure (the public API):
-;;
-;; Function `project-current' that returns the current project
-;; instance based on the value of the hook `project-find-functions',
-;; and several generic functions that act on it.
-;;
-;; `project-root' must be defined for every project.
-;; `project-files' can be overridden for performance purposes.
-;; `project-ignores' and `project-external-roots' describe the project
-;; files and its relations to external directories. `project-files'
-;; should be consistent with `project-ignores'.
-;;
-;; This list can change in future versions.
-;;
-;; VC project:
-;;
-;; Originally conceived as an example implementation, now it's a
-;; relatively fast backend that delegates to 'git ls-files' or 'hg
-;; status' to list the project's files. It honors the VC ignore
-;; files, but supports additions to the list using the user option
-;; `project-vc-ignores' (usually through .dir-locals.el).
-;;
-;; Utils:
-;;
-;; `project-combine-directories' and `project-subtract-directories',
-;; mainly for use in the abovementioned generics' implementations.
-;;
-;; `project-known-project-roots' and `project-remember-project' to
-;; interact with the "known projects" list.
-;;
-;; Commands:
-;;
-;; `project-prefix-map' contains the full list of commands defined in
-;; this package. This map uses the prefix `C-x p' by default.
-;; Type `C-x p f' to find file in the current project.
-;; Type `C-x p C-h' to see all available commands and bindings.
-;;
-;; All commands defined in this package are implemented using the
-;; public API only. As a result, they will work with any project
-;; backend that follows the protocol.
-;;
-;; Any third-party code that wants to use this package should likewise
-;; target the public API. Use any of the built-in commands as the
-;; example.
-;;
-;; How to create a new backend:
-;;
-;; - Consider whether you really should, or whether there are other
-;; ways to reach your goals. If the backend's performance is
-;; significantly lower than that of the built-in one, and it's first
-;; in the list, it will affect all commands that use it. Unless you
-;; are going to be using it only yourself or in special circumstances,
-;; you will probably want it to be fast, and it's unlikely to be a
-;; trivial endeavor. `project-files' is the method to optimize (the
-;; default implementation gets slower the more files the directory
-;; has, and the longer the list of ignores is).
-;;
-;; - Choose the format of the value that represents a project for your
-;; backend (we call it project instance). Don't use any of the
-;; formats from other backends. The format can be arbitrary, as long
-;; as the datatype is something `cl-defmethod' can dispatch on. The
-;; value should be stable (when compared with `equal') across
-;; invocations, meaning calls to that function from buffers belonging
-;; to the same project should return equal values.
-;;
-;; - Write a new function that will determine the current project
-;; based on the directory and add it to `project-find-functions'
-;; (which see) using `add-hook'. It is a good idea to depend on the
-;; directory only, and not on the current major mode, for example.
-;; Because the usual expectation is that all files in the directory
-;; belong to the same project (even if some/most of them are ignored).
-;;
-;; - Define new methods for some or all generic functions for this
-;; backend using `cl-defmethod'. A `project-root' method is
-;; mandatory, `project-files' is recommended, the rest are optional.
-
-;;; TODO:
-
-;; * Reliably cache the list of files in the project, probably using
-;; filenotify.el (if supported) to invalidate. And avoiding caching
-;; if it's not available (manual cache invalidation is not nice).
-;;
-;; * Build tool related functionality. Start with a `project-build'
-;; command, which should provide completions on tasks to run, and
-;; maybe allow entering some additional arguments. This might
-;; be handled better with a separate API, though. Then we won't
-;; force every project backend to be aware of the build tool(s) the
-;; project is using.
-;;
-;; * Command to (re)build the tag files in all project roots. To that
-;; end, we might need to add a way to provide file whitelist
-;; wildcards for each root to limit etags to certain files (in
-;; addition to the blacklist provided by ignores), and/or allow
-;; specifying additional tag regexps.
-;;
-;; * UI for the user to be able to pick the current project for the
-;; whole Emacs session, independent of the current directory. Or,
-;; in the more advanced case, open a set of projects, and have some
-;; project-related commands to use them all. E.g., have a command
-;; to search for a regexp across all open projects.
-;;
-;; * Support for project-local variables: a UI to edit them, and a
-;; utility function to retrieve a value. Probably useless without
-;; support in various built-in commands. In the API, we might get
-;; away with only adding a `project-configuration-directory' method,
-;; defaulting to the project root the current file/buffer is in.
-;; And prompting otherwise. How to best mix that with backends that
-;; want to set/provide certain variables themselves, is up for
-;; discussion.
-
-;;; Code:
-
-(require 'cl-generic)
-(require 'seq)
-(eval-when-compile (require 'subr-x))
-
-(defgroup project nil
- "Operations on the current project."
- :version "28.1"
- :group 'tools)
-
-(defvar project-find-functions (list #'project-try-vc)
- "Special hook to find the project containing a given directory.
-Each functions on this hook is called in turn with one
-argument, the directory in which to look, and should return
-either nil to mean that it is not applicable, or a project instance.
-The exact form of the project instance is up to each respective
-function; the only practical limitation is to use values that
-`cl-defmethod' can dispatch on, like a cons cell, or a list, or a
-CL struct.")
-
-(defvar project-current-inhibit-prompt nil
- "Non-nil to skip prompting the user in `project-current'.")
-
-;;;###autoload
-(defun project-current (&optional maybe-prompt directory)
- "Return the project instance in DIRECTORY, defaulting to `default-directory'.
-
-When no project is found in that directory, the result depends on
-the value of MAYBE-PROMPT: if it is nil or omitted, return nil,
-else ask the user for a directory in which to look for the
-project, and if no project is found there, return a \"transient\"
-project instance.
-
-The \"transient\" project instance is a special kind of value
-which denotes a project rooted in that directory and includes all
-the files under the directory except for those that should be
-ignored (per `project-ignores').
-
-See the doc string of `project-find-functions' for the general form
-of the project instance object."
- (unless directory (setq directory default-directory))
- (let ((pr (project--find-in-directory directory)))
- (cond
- (pr)
- ((unless project-current-inhibit-prompt
- maybe-prompt)
- (setq directory (project-prompt-project-dir)
- pr (project--find-in-directory directory))))
- (when maybe-prompt
- (if pr
- (project-remember-project pr)
- (project--remove-from-project-list
- directory "Project `%s' not found; removed from list")
- (setq pr (cons 'transient directory))))
- pr))
-
-(defun project--find-in-directory (dir)
- (run-hook-with-args-until-success 'project-find-functions dir))
-
-(defvar project--within-roots-fallback nil)
-
-(cl-defgeneric project-root (project)
- "Return root directory of the current project.
-
-It usually contains the main build file, dependencies
-configuration file, etc. Though neither is mandatory.
-
-The directory name must be absolute.")
-
-(cl-defmethod project-root (project
- &context (project--within-roots-fallback
- (eql nil)))
- (car (project-roots project)))
-
-(cl-defgeneric project-roots (project)
- "Return the list containing the current project root.
-
-The function is obsolete, all projects have one main root anyway,
-and the rest should be possible to express through
-`project-external-roots'."
- ;; FIXME: Can we specify project's version here?
- ;; FIXME: Could we make this affect cl-defmethod calls too?
- (declare (obsolete project-root "0.3.0"))
- (let ((project--within-roots-fallback t))
- (list (project-root project))))
-
-;; FIXME: Add MODE argument, like in `ede-source-paths'?
-(cl-defgeneric project-external-roots (_project)
- "Return the list of external roots for PROJECT.
-
-It's the list of directories outside of the project that are
-still related to it. If the project deals with source code then,
-depending on the languages used, this list should include the
-headers search path, load path, class path, and so on."
- nil)
-
-(cl-defgeneric project-ignores (_project _dir)
- "Return the list of glob patterns to ignore inside DIR.
-Patterns can match both regular files and directories.
-To root an entry, start it with `./'. To match directories only,
-end it with `/'. DIR must be either `project-root' or one of
-`project-external-roots'."
- ;; TODO: Document and support regexp ignores as used by Hg.
- ;; TODO: Support whitelist entries.
- (require 'grep)
- (defvar grep-find-ignored-files)
- (nconc
- (mapcar
- (lambda (dir)
- (concat dir "/"))
- vc-directory-exclusion-list)
- grep-find-ignored-files))
-
-(defun project--file-completion-table (all-files)
- (lambda (string pred action)
- (cond
- ((eq action 'metadata)
- '(metadata . ((category . project-file))))
- (t
- (complete-with-action action all-files string pred)))))
-
-(cl-defmethod project-root ((project (head transient)))
- (cdr project))
-
-(cl-defgeneric project-files (project &optional dirs)
- "Return a list of files in directories DIRS in PROJECT.
-DIRS is a list of absolute directories; it should be some
-subset of the project root and external roots.
-
-The default implementation uses `find-program'. PROJECT is used
-to find the list of ignores for each directory."
- (mapcan
- (lambda (dir)
- (project--files-in-directory dir
- (project--dir-ignores project dir)))
- (or dirs
- (list (project-root project)))))
-
-(defun project--files-in-directory (dir ignores &optional files)
- (require 'find-dired)
- (require 'xref)
- (defvar find-name-arg)
- (let* ((default-directory dir)
- ;; Make sure ~/ etc. in local directory name is
- ;; expanded and not left for the shell command
- ;; to interpret.
- (localdir (file-name-unquote (file-local-name (expand-file-name dir))))
- (command (format "%s %s %s -type f %s -print0"
- find-program
- ;; In case DIR is a symlink.
- (file-name-as-directory localdir)
- (xref--find-ignores-arguments ignores localdir)
- (if files
- (concat (shell-quote-argument "(")
- " " find-name-arg " "
- (mapconcat
- #'shell-quote-argument
- (split-string files)
- (concat " -o " find-name-arg " "))
- " "
- (shell-quote-argument ")"))
- "")))
- (output (with-output-to-string
- (with-current-buffer standard-output
- (let ((status
- (process-file-shell-command command nil t)))
- (unless (zerop status)
- (error "File listing failed: %s" (buffer-string))))))))
- (project--remote-file-names
- (sort (split-string output "\0" t)
- #'string<))))
-
-(defun project--remote-file-names (local-files)
- "Return LOCAL-FILES as if they were on the system of `default-directory'.
-Also quote LOCAL-FILES if `default-directory' is quoted."
- (let ((remote-id (file-remote-p default-directory)))
- (if (not remote-id)
- (if (file-name-quoted-p default-directory)
- (mapcar #'file-name-quote local-files)
- local-files)
- (mapcar (lambda (file)
- (concat remote-id file))
- local-files))))
-
-(defgroup project-vc nil
- "Project implementation based on the VC package."
- :version "25.1"
- :group 'project)
-
-(defcustom project-vc-ignores nil
- "List of patterns to add to `project-ignores'."
- :type '(repeat string)
- :safe #'listp)
-
-(defcustom project-vc-merge-submodules t
- "Non-nil to consider submodules part of the parent project.
-
-After changing this variable (using Customize or .dir-locals.el)
-you might have to restart Emacs to see the effect."
- :type 'boolean
- :version "28.1"
- :package-version '(project . "0.2.0")
- :safe #'booleanp)
-
-;; FIXME: Using the current approach, major modes are supposed to set
-;; this variable to a buffer-local value. So we don't have access to
-;; the "external roots" of language A from buffers of language B, which
-;; seems desirable in multi-language projects, at least for some
-;; potential uses, like "jump to a file in project or external dirs".
-;;
-;; We could add a second argument to this function: a file extension,
-;; or a language name. Some projects will know the set of languages
-;; used in them; for others, like VC-based projects, we'll need
-;; auto-detection. I see two options:
-;;
-;; - That could be implemented as a separate second hook, with a
-;; list of functions that return file extensions.
-;;
-;; - This variable will be turned into a hook with "append" semantics,
-;; and each function in it will perform auto-detection when passed
-;; nil instead of an actual file extension. Then this hook will, in
-;; general, be modified globally, and not from major mode functions.
-;;
-;; The second option seems simpler, but the first one has the
-;; advantage that the user could override the list of languages used
-;; in a project via a directory-local variable, thus skipping
-;; languages they're not working on personally (in a big project), or
-;; working around problems in language detection (the detection logic
-;; might be imperfect for the project in question, or it might work
-;; too slowly for the user's taste).
-(defvar project-vc-external-roots-function (lambda () tags-table-list)
- "Function that returns a list of external roots.
-
-It should return a list of directory roots that contain source
-files related to the current buffer.
-
-The directory names should be absolute. Used in the VC project
-backend implementation of `project-external-roots'.")
-
-(defun project-try-vc (dir)
- (let* ((backend
- ;; FIXME: This is slow. Cache it.
- (ignore-errors (vc-responsible-backend dir)))
- (root
- (pcase backend
- ('Git
- ;; Don't stop at submodule boundary.
- ;; FIXME: Cache for a shorter time.
- (or (vc-file-getprop dir 'project-git-root)
- (let ((root (vc-call-backend backend 'root dir)))
- (vc-file-setprop
- dir 'project-git-root
- (if (and
- ;; FIXME: Invalidate the cache when the value
- ;; of this variable changes.
- (project--vc-merge-submodules-p root)
- (project--submodule-p root))
- (let* ((parent (file-name-directory
- (directory-file-name root))))
- (vc-call-backend backend 'root parent))
- root)))))
- ('nil nil)
- (_ (ignore-errors (vc-call-backend backend 'root dir))))))
- (and root (cons 'vc root))))
-
-(defun project--submodule-p (root)
- ;; XXX: We only support Git submodules for now.
- ;;
- ;; For submodules, at least, we expect the users to prefer them to
- ;; be considered part of the parent project. For those who don't,
- ;; there is the custom var now.
- ;;
- ;; Some users may also set up things equivalent to Git submodules
- ;; using "git worktree" (for example). However, we expect that most
- ;; of them would prefer to treat those as separate projects anyway.
- (let* ((gitfile (expand-file-name ".git" root)))
- (cond
- ((file-directory-p gitfile)
- nil)
- ((with-temp-buffer
- (insert-file-contents gitfile)
- (goto-char (point-min))
- ;; Kind of a hack to distinguish a submodule from
- ;; other cases of .git files pointing elsewhere.
- (looking-at "gitdir: [./]+/\\.git/modules/"))
- t)
- (t nil))))
-
-(cl-defmethod project-root ((project (head vc)))
- (cdr project))
-
-(cl-defmethod project-external-roots ((project (head vc)))
- (project-subtract-directories
- (project-combine-directories
- (mapcar
- #'file-name-as-directory
- (funcall project-vc-external-roots-function)))
- (list (project-root project))))
-
-(cl-defmethod project-files ((project (head vc)) &optional dirs)
- (mapcan
- (lambda (dir)
- (let ((ignores (project--value-in-dir 'project-vc-ignores dir))
- backend)
- (if (and (file-equal-p dir (cdr project))
- (setq backend (vc-responsible-backend dir))
- (cond
- ((eq backend 'Hg))
- ((and (eq backend 'Git)
- (or
- (not ignores)
- (version<= "1.9" (vc-git--program-version)))))))
- (project--vc-list-files dir backend ignores)
- (project--files-in-directory
- dir
- (project--dir-ignores project dir)))))
- (or dirs
- (list (project-root project)))))
-
-(declare-function vc-git--program-version "vc-git")
-(declare-function vc-git--run-command-string "vc-git")
-(declare-function vc-hg-command "vc-hg")
-
-(defun project--vc-list-files (dir backend extra-ignores)
- (pcase backend
- (`Git
- (let ((default-directory (expand-file-name (file-name-as-directory dir)))
- (args '("-z"))
- files)
- ;; Include unregistered.
- (setq args (append args '("-c" "-o" "--exclude-standard")))
- (when extra-ignores
- (setq args (append args
- (cons "--"
- (mapcar
- (lambda (i)
- (format
- ":(exclude,glob,top)%s"
- (if (string-match "\\*\\*" i)
- ;; Looks like pathspec glob
- ;; format already.
- i
- (if (string-match "\\./" i)
- ;; ./abc -> abc
- (setq i (substring i 2))
- ;; abc -> **/abc
- (setq i (concat "**/" i))
- ;; FIXME: '**/abc' should also
- ;; match a directory with that
- ;; name, but doesn't (git 2.25.1).
- ;; Maybe we should replace
- ;; such entries with two.
- (if (string-match "/\\'" i)
- ;; abc/ -> abc/**
- (setq i (concat i "**"))))
- i)))
- extra-ignores)))))
- (setq files
- (mapcar
- (lambda (file) (concat default-directory file))
- (split-string
- (apply #'vc-git--run-command-string nil "ls-files" args)
- "\0" t)))
- (when (project--vc-merge-submodules-p default-directory)
- ;; Unfortunately, 'ls-files --recurse-submodules' conflicts with '-o'.
- (let* ((submodules (project--git-submodules))
- (sub-files
- (mapcar
- (lambda (module)
- (when (file-directory-p module)
- (project--vc-list-files
- (concat default-directory module)
- backend
- extra-ignores)))
- submodules)))
- (setq files
- (apply #'nconc files sub-files))))
- ;; 'git ls-files' returns duplicate entries for merge conflicts.
- ;; XXX: Better solutions welcome, but this seems cheap enough.
- (delete-consecutive-dups files)))
- (`Hg
- (let ((default-directory (expand-file-name (file-name-as-directory dir)))
- args)
- ;; Include unregistered.
- (setq args (nconc args '("-mcardu" "--no-status" "-0")))
- (when extra-ignores
- (setq args (nconc args
- (mapcan
- (lambda (i)
- (list "--exclude" i))
- extra-ignores))))
- (with-temp-buffer
- (apply #'vc-hg-command t 0 "." "status" args)
- (mapcar
- (lambda (s) (concat default-directory s))
- (split-string (buffer-string) "\0" t)))))))
-
-(defun project--vc-merge-submodules-p (dir)
- (project--value-in-dir
- 'project-vc-merge-submodules
- dir))
-
-(defun project--git-submodules ()
- ;; 'git submodule foreach' is much slower.
- (condition-case nil
- (with-temp-buffer
- (insert-file-contents ".gitmodules")
- (let (res)
- (goto-char (point-min))
- (while (re-search-forward "path *= *\\(.+\\)" nil t)
- (push (match-string 1) res))
- (nreverse res)))
- (file-missing nil)))
-
-(cl-defmethod project-ignores ((project (head vc)) dir)
- (let* ((root (cdr project))
- backend)
- (append
- (when (file-equal-p dir root)
- (setq backend (vc-responsible-backend root))
- (delq
- nil
- (mapcar
- (lambda (entry)
- (cond
- ((eq ?! (aref entry 0))
- ;; No support for whitelisting (yet).
- nil)
- ((string-match "\\(/\\)[^/]" entry)
- ;; FIXME: This seems to be Git-specific.
- ;; And / in the entry (start or even the middle) means
- ;; the pattern is "rooted". Or actually it is then
- ;; relative to its respective .gitignore (of which there
- ;; could be several), but we only support .gitignore at
- ;; the root.
- (if (= (match-beginning 0) 0)
- (replace-match "./" t t entry 1)
- (concat "./" entry)))
- (t entry)))
- (vc-call-backend backend 'ignore-completion-table root))))
- (project--value-in-dir 'project-vc-ignores root)
- (mapcar
- (lambda (dir)
- (concat dir "/"))
- vc-directory-exclusion-list))))
-
-(defun project-combine-directories (&rest lists-of-dirs)
- "Return a sorted and culled list of directory names.
-Appends the elements of LISTS-OF-DIRS together, removes
-non-existing directories, as well as directories a parent of
-whose is already in the list."
- (let* ((dirs (sort
- (mapcar
- (lambda (dir)
- (file-name-as-directory (expand-file-name dir)))
- (apply #'append lists-of-dirs))
- #'string<))
- (ref dirs))
- ;; Delete subdirectories from the list.
- (while (cdr ref)
- (if (string-prefix-p (car ref) (cadr ref))
- (setcdr ref (cddr ref))
- (setq ref (cdr ref))))
- (cl-delete-if-not #'file-exists-p dirs)))
-
-(defun project-subtract-directories (files dirs)
- "Return a list of elements from FILES that are outside of DIRS.
-DIRS must contain directory names."
- ;; Sidestep the issue of expanded/abbreviated file names here.
- (cl-set-difference files dirs :test #'file-in-directory-p))
-
-(defun project--value-in-dir (var dir)
- (with-temp-buffer
- (setq default-directory dir)
- (let ((enable-local-variables :all))
- (hack-dir-local-variables-non-file-buffer))
- (symbol-value var)))
-
-
-;;; Project commands
-
-;;;###autoload
-(defvar project-prefix-map
- (let ((map (make-sparse-keymap)))
- (define-key map "!" 'project-shell-command)
- (define-key map "&" 'project-async-shell-command)
- (define-key map "f" 'project-find-file)
- (define-key map "F" 'project-or-external-find-file)
- (define-key map "b" 'project-switch-to-buffer)
- (define-key map "s" 'project-shell)
- (define-key map "d" 'project-dired)
- (define-key map "v" 'project-vc-dir)
- (define-key map "c" 'project-compile)
- (define-key map "e" 'project-eshell)
- (define-key map "k" 'project-kill-buffers)
- (define-key map "p" 'project-switch-project)
- (define-key map "g" 'project-find-regexp)
- (define-key map "G" 'project-or-external-find-regexp)
- (define-key map "r" 'project-query-replace-regexp)
- (define-key map "x" 'project-execute-extended-command)
- map)
- "Keymap for project commands.")
-
-;;;###autoload (define-key ctl-x-map "p" project-prefix-map)
-
-;; We can't have these place-specific maps inherit from
-;; project-prefix-map because project--other-place-command needs to
-;; know which map the key binding came from, as if it came from one of
-;; these maps, we don't want to set display-buffer-overriding-action
-
-(defvar project-other-window-map
- (let ((map (make-sparse-keymap)))
- (define-key map "\C-o" #'project-display-buffer)
- map)
- "Keymap for project commands that display buffers in other windows.")
-
-(defvar project-other-frame-map
- (let ((map (make-sparse-keymap)))
- (define-key map "\C-o" #'project-display-buffer-other-frame)
- map)
- "Keymap for project commands that display buffers in other frames.")
-
-(defun project--other-place-command (action &optional map)
- (let* ((key (read-key-sequence-vector nil t))
- (place-cmd (lookup-key map key))
- (generic-cmd (lookup-key project-prefix-map key))
- (switch-to-buffer-obey-display-actions t)
- (display-buffer-overriding-action (unless place-cmd action)))
- (if-let ((cmd (or place-cmd generic-cmd)))
- (call-interactively cmd)
- (user-error "%s is undefined" (key-description key)))))
-
-;;;###autoload
-(defun project-other-window-command ()
- "Run project command, displaying resultant buffer in another window.
-
-The following commands are available:
-
-\\{project-prefix-map}
-\\{project-other-window-map}"
- (interactive)
- (project--other-place-command '((display-buffer-pop-up-window)
- (inhibit-same-window . t))
- project-other-window-map))
-
-;;;###autoload (define-key ctl-x-4-map "p" #'project-other-window-command)
-
-;;;###autoload
-(defun project-other-frame-command ()
- "Run project command, displaying resultant buffer in another frame.
-
-The following commands are available:
-
-\\{project-prefix-map}
-\\{project-other-frame-map}"
- (interactive)
- (project--other-place-command '((display-buffer-pop-up-frame))
- project-other-frame-map))
-
-;;;###autoload (define-key ctl-x-5-map "p" #'project-other-frame-command)
-
-;;;###autoload
-(defun project-other-tab-command ()
- "Run project command, displaying resultant buffer in a new tab.
-
-The following commands are available:
-
-\\{project-prefix-map}"
- (interactive)
- (project--other-place-command '((display-buffer-in-new-tab))))
-
-;;;###autoload
-(when (bound-and-true-p tab-prefix-map)
- (define-key tab-prefix-map "p" #'project-other-tab-command))
-
-(declare-function grep-read-files "grep")
-(declare-function xref--show-xrefs "xref")
-(declare-function xref--find-ignores-arguments "xref")
-
-;;;###autoload
-(defun project-find-regexp (regexp)
- "Find all matches for REGEXP in the current project's roots.
-With \\[universal-argument] prefix, you can specify the directory
-to search in, and the file name pattern to search for. The
-pattern may use abbreviations defined in `grep-files-aliases',
-e.g. entering `ch' is equivalent to `*.[ch]'. As whitespace
-triggers completion when entering a pattern, including it
-requires quoting, e.g. `\\[quoted-insert]<space>'."
- (interactive (list (project--read-regexp)))
- (require 'xref)
- (require 'grep)
- (let* ((caller-dir default-directory)
- (pr (project-current t))
- (default-directory (project-root pr))
- (files
- (if (not current-prefix-arg)
- (project-files pr)
- (let ((dir (read-directory-name "Base directory: "
- caller-dir nil t)))
- (project--files-in-directory dir
- nil
- (grep-read-files regexp))))))
- (xref--show-xrefs
- (apply-partially #'project--find-regexp-in-files regexp files)
- nil)))
-
-(defun project--dir-ignores (project dir)
- (let ((root (project-root project)))
- (if (not (file-in-directory-p dir root))
- (project-ignores nil nil) ;The defaults.
- (let ((ignores (project-ignores project root)))
- (if (file-equal-p root dir)
- ignores
- ;; FIXME: Update the "rooted" ignores to relate to DIR instead.
- (cl-delete-if (lambda (str) (string-prefix-p "./" str))
- ignores))))))
-
-;;;###autoload
-(defun project-or-external-find-regexp (regexp)
- "Find all matches for REGEXP in the project roots or external roots.
-With \\[universal-argument] prefix, you can specify the file name
-pattern to search for."
- (interactive (list (project--read-regexp)))
- (require 'xref)
- (let* ((pr (project-current t))
- (default-directory (project-root pr))
- (files
- (project-files pr (cons
- (project-root pr)
- (project-external-roots pr)))))
- (xref--show-xrefs
- (apply-partially #'project--find-regexp-in-files regexp files)
- nil)))
-
-(defun project--find-regexp-in-files (regexp files)
- (unless files
- (user-error "Empty file list"))
- (let ((xrefs (xref-matches-in-files regexp files)))
- (unless xrefs
- (user-error "No matches for: %s" regexp))
- xrefs))
-
-(defvar project-regexp-history-variable 'grep-regexp-history)
-
-(defun project--read-regexp ()
- (let ((sym (thing-at-point 'symbol t)))
- (read-regexp "Find regexp" (and sym (regexp-quote sym))
- project-regexp-history-variable)))
-
-;;;###autoload
-(defun project-find-file ()
- "Visit a file (with completion) in the current project.
-
-The completion default is the filename at point, determined by
-`thing-at-point' (whether such file exists or not)."
- (interactive)
- (let* ((pr (project-current t))
- (dirs (list (project-root pr))))
- (project-find-file-in (thing-at-point 'filename) dirs pr)))
-
-;;;###autoload
-(defun project-or-external-find-file ()
- "Visit a file (with completion) in the current project or external roots.
-
-The completion default is the filename at point, determined by
-`thing-at-point' (whether such file exists or not)."
- (interactive)
- (let* ((pr (project-current t))
- (dirs (cons
- (project-root pr)
- (project-external-roots pr))))
- (project-find-file-in (thing-at-point 'filename) dirs pr)))
-
-(defcustom project-read-file-name-function #'project--read-file-cpd-relative
- "Function to call to read a file name from a list.
-For the arguments list, see `project--read-file-cpd-relative'."
- :type '(choice (const :tag "Read with completion from relative names"
- project--read-file-cpd-relative)
- (const :tag "Read with completion from absolute names"
- project--read-file-absolute)
- (function :tag "Custom function" nil))
- :group 'project
- :version "27.1")
-
-(defun project--read-file-cpd-relative (prompt
- all-files &optional predicate
- hist default)
- "Read a file name, prompting with PROMPT.
-ALL-FILES is a list of possible file name completions.
-PREDICATE, HIST, and DEFAULT have the same meaning as in
-`completing-read'."
- (let* ((common-parent-directory
- (let ((common-prefix (try-completion "" all-files)))
- (if (> (length common-prefix) 0)
- (file-name-directory common-prefix))))
- (cpd-length (length common-parent-directory))
- (prompt (if (zerop cpd-length)
- prompt
- (concat prompt (format " in %s" common-parent-directory))))
- (substrings (mapcar (lambda (s) (substring s cpd-length)) all-files))
- (new-collection (project--file-completion-table substrings))
- (res (project--completing-read-strict prompt
- new-collection
- predicate
- hist default)))
- (concat common-parent-directory res)))
-
-(defun project--read-file-absolute (prompt
- all-files &optional predicate
- hist default)
- (project--completing-read-strict prompt
- (project--file-completion-table all-files)
- predicate
- hist default))
-
-(defun project-find-file-in (filename dirs project)
- "Complete FILENAME in DIRS in PROJECT and visit the result."
- (let* ((all-files (project-files project dirs))
- (completion-ignore-case read-file-name-completion-ignore-case)
- (file (funcall project-read-file-name-function
- "Find file" all-files nil nil
- filename)))
- (if (string= file "")
- (user-error "You didn't specify the file")
- (find-file file))))
-
-(defun project--completing-read-strict (prompt
- collection &optional predicate
- hist default)
- ;; Tried both expanding the default before showing the prompt, and
- ;; removing it when it has no matches. Neither seems natural
- ;; enough. Removal is confusing; early expansion makes the prompt
- ;; too long.
- (let* ((new-prompt (if (and default (not (string-equal default "")))
- (format "%s (default %s): " prompt default)
- (format "%s: " prompt)))
- (res (completing-read new-prompt
- collection predicate t
- nil ;; initial-input
- hist default)))
- (when (and (equal res default)
- (not (test-completion res collection predicate)))
- (setq res
- (completing-read (format "%s: " prompt)
- collection predicate t res hist nil)))
- res))
-
-;;;###autoload
-(defun project-dired ()
- "Start Dired in the current project's root."
- (interactive)
- (dired (project-root (project-current t))))
-
-;;;###autoload
-(defun project-vc-dir ()
- "Run VC-Dir in the current project's root."
- (interactive)
- (vc-dir (project-root (project-current t))))
-
-;;;###autoload
-(defun project-shell ()
- "Start an inferior shell in the current project's root directory.
-If a buffer already exists for running a shell in the project's root,
-switch to it. Otherwise, create a new shell buffer.
-With \\[universal-argument] prefix arg, create a new inferior shell buffer even
-if one already exists."
- (interactive)
- (let* ((default-directory (project-root (project-current t)))
- (default-project-shell-name (project-prefixed-buffer-name "shell"))
- (shell-buffer (get-buffer default-project-shell-name)))
- (if (and shell-buffer (not current-prefix-arg))
- (pop-to-buffer-same-window shell-buffer)
- (shell (generate-new-buffer-name default-project-shell-name)))))
-
-;;;###autoload
-(defun project-eshell ()
- "Start Eshell in the current project's root directory.
-If a buffer already exists for running Eshell in the project's root,
-switch to it. Otherwise, create a new Eshell buffer.
-With \\[universal-argument] prefix arg, create a new Eshell buffer even
-if one already exists."
- (interactive)
- (defvar eshell-buffer-name)
- (let* ((default-directory (project-root (project-current t)))
- (eshell-buffer-name (project-prefixed-buffer-name "eshell"))
- (eshell-buffer (get-buffer eshell-buffer-name)))
- (if (and eshell-buffer (not current-prefix-arg))
- (pop-to-buffer-same-window eshell-buffer)
- (eshell t))))
-
-;;;###autoload
-(defun project-async-shell-command ()
- "Run `async-shell-command' in the current project's root directory."
- (declare (interactive-only async-shell-command))
- (interactive)
- (let ((default-directory (project-root (project-current t))))
- (call-interactively #'async-shell-command)))
-
-;;;###autoload
-(defun project-shell-command ()
- "Run `shell-command' in the current project's root directory."
- (declare (interactive-only shell-command))
- (interactive)
- (let ((default-directory (project-root (project-current t))))
- (call-interactively #'shell-command)))
-
-(declare-function fileloop-continue "fileloop" ())
-
-;;;###autoload
-(defun project-search (regexp)
- "Search for REGEXP in all the files of the project.
-Stops when a match is found.
-To continue searching for the next match, use the
-command \\[fileloop-continue]."
- (interactive "sSearch (regexp): ")
- (fileloop-initialize-search
- regexp (project-files (project-current t)) 'default)
- (fileloop-continue))
-
-;;;###autoload
-(defun project-query-replace-regexp (from to)
- "Query-replace REGEXP in all the files of the project.
-Stops when a match is found and prompts for whether to replace it.
-If you exit the query-replace, you can later continue the query-replace
-loop using the command \\[fileloop-continue]."
- (interactive
- (pcase-let ((`(,from ,to)
- (query-replace-read-args "Query replace (regexp)" t t)))
- (list from to)))
- (fileloop-initialize-replace
- from to (project-files (project-current t)) 'default)
- (fileloop-continue))
-
-(defvar compilation-read-command)
-(declare-function compilation-read-command "compile")
-
-(defun project-prefixed-buffer-name (mode)
- (concat "*"
- (file-name-nondirectory
- (directory-file-name default-directory))
- "-"
- (downcase mode)
- "*"))
-
-(defcustom project-compilation-buffer-name-function nil
- "Function to compute the name of a project compilation buffer.
-If non-nil, it overrides `compilation-buffer-name-function' for
-`project-compile'."
- :version "28.1"
- :group 'project
- :type '(choice (const :tag "Default" nil)
- (const :tag "Prefixed with root directory name"
- project-prefixed-buffer-name)
- (function :tag "Custom function")))
-
-;;;###autoload
-(defun project-compile ()
- "Run `compile' in the project root."
- (declare (interactive-only compile))
- (interactive)
- (let ((default-directory (project-root (project-current t)))
- (compilation-buffer-name-function
- (or project-compilation-buffer-name-function
- compilation-buffer-name-function)))
- (call-interactively #'compile)))
-
-(defun project--read-project-buffer ()
- (let* ((pr (project-current t))
- (current-buffer (current-buffer))
- (other-buffer (other-buffer current-buffer))
- (other-name (buffer-name other-buffer))
- (predicate
- (lambda (buffer)
- ;; BUFFER is an entry (BUF-NAME . BUF-OBJ) of Vbuffer_alist.
- (and (cdr buffer)
- (equal pr
- (with-current-buffer (cdr buffer)
- (project-current)))))))
- (read-buffer
- "Switch to buffer: "
- (when (funcall predicate (cons other-name other-buffer))
- other-name)
- nil
- predicate)))
-
-;;;###autoload
-(defun project-switch-to-buffer (buffer-or-name)
- "Display buffer BUFFER-OR-NAME in the selected window.
-When called interactively, prompts for a buffer belonging to the
-current project. Two buffers belong to the same project if their
-project instances, as reported by `project-current' in each
-buffer, are identical."
- (interactive (list (project--read-project-buffer)))
- (switch-to-buffer buffer-or-name))
-
-;;;###autoload
-(defun project-display-buffer (buffer-or-name)
- "Display BUFFER-OR-NAME in some window, without selecting it.
-When called interactively, prompts for a buffer belonging to the
-current project. Two buffers belong to the same project if their
-project instances, as reported by `project-current' in each
-buffer, are identical.
-
-This function uses `display-buffer' as a subroutine, which see
-for how it is determined where the buffer will be displayed."
- (interactive (list (project--read-project-buffer)))
- (display-buffer buffer-or-name))
-
-;;;###autoload
-(defun project-display-buffer-other-frame (buffer-or-name)
- "Display BUFFER-OR-NAME preferably in another frame.
-When called interactively, prompts for a buffer belonging to the
-current project. Two buffers belong to the same project if their
-project instances, as reported by `project-current' in each
-buffer, are identical.
-
-This function uses `display-buffer-other-frame' as a subroutine,
-which see for how it is determined where the buffer will be
-displayed."
- (interactive (list (project--read-project-buffer)))
- (display-buffer-other-frame buffer-or-name))
-
-(defcustom project-kill-buffer-conditions
- '(buffer-file-name ; All file-visiting buffers are included.
- ;; Most of the temp buffers in the background:
- (major-mode . fundamental-mode)
- ;; non-text buffer such as xref, occur, vc, log, ...
- (and (derived-mode . special-mode)
- (not (major-mode . help-mode)))
- (derived-mode . compilation-mode)
- (derived-mode . dired-mode)
- (derived-mode . diff-mode))
- "List of conditions to kill buffers related to a project.
-This list is used by `project-kill-buffers'.
-Each condition is either:
-- a regular expression, to match a buffer name,
-- a predicate function that takes a buffer object as argument
- and returns non-nil if the buffer should be killed,
-- a cons-cell, where the car describes how to interpret the cdr.
- The car can be one of the following:
- * `major-mode': the buffer is killed if the buffer's major
- mode is eq to the cons-cell's cdr
- * `derived-mode': the buffer is killed if the buffer's major
- mode is derived from the major mode denoted by the cons-cell's
- cdr
- * `not': the cdr is interpreted as a negation of a condition.
- * `and': the cdr is a list of recursive conditions, that all have
- to be met.
- * `or': the cdr is a list of recursive conditions, of which at
- least one has to be met.
-
-If any of these conditions are satisfied for a buffer in the
-current project, it will be killed."
- :type '(repeat (choice regexp function symbol
- (cons :tag "Major mode"
- (const major-mode) symbol)
- (cons :tag "Derived mode"
- (const derived-mode) symbol)
- (cons :tag "Negation"
- (const not) sexp)
- (cons :tag "Conjunction"
- (const and) sexp)
- (cons :tag "Disjunction"
- (const or) sexp)))
- :version "28.1"
- :group 'project
- :package-version '(project . "0.6.0"))
-
-(defun project--buffer-list (pr)
- "Return the list of all buffers in project PR."
- (let (bufs)
- (dolist (buf (buffer-list))
- (when (equal pr
- (with-current-buffer buf
- (project-current)))
- (push buf bufs)))
- (nreverse bufs)))
-
-(defun project--kill-buffer-check (buf conditions)
- "Check if buffer BUF matches any element of the list CONDITIONS.
-See `project-kill-buffer-conditions' for more details on the form
-of CONDITIONS."
- (catch 'kill
- (dolist (c conditions)
- (when (cond
- ((stringp c)
- (string-match-p c (buffer-name buf)))
- ((symbolp c)
- (funcall c buf))
- ((eq (car-safe c) 'major-mode)
- (eq (buffer-local-value 'major-mode buf)
- (cdr c)))
- ((eq (car-safe c) 'derived-mode)
- (provided-mode-derived-p
- (buffer-local-value 'major-mode buf)
- (cdr c)))
- ((eq (car-safe c) 'not)
- (not (project--kill-buffer-check buf (cdr c))))
- ((eq (car-safe c) 'or)
- (project--kill-buffer-check buf (cdr c)))
- ((eq (car-safe c) 'and)
- (seq-every-p
- (apply-partially #'project--kill-buffer-check
- buf)
- (mapcar #'list (cdr c)))))
- (throw 'kill t)))))
-
-(defun project--buffers-to-kill (pr)
- "Return list of buffers in project PR to kill.
-What buffers should or should not be killed is described
-in `project-kill-buffer-conditions'."
- (let (bufs)
- (dolist (buf (project--buffer-list pr))
- (when (project--kill-buffer-check buf project-kill-buffer-conditions)
- (push buf bufs)))
- bufs))
-
-;;;###autoload
-(defun project-kill-buffers (&optional no-confirm)
- "Kill the buffers belonging to the current project.
-Two buffers belong to the same project if their project
-instances, as reported by `project-current' in each buffer, are
-identical. Only the buffers that match a condition in
-`project-kill-buffer-conditions' will be killed. If NO-CONFIRM
-is non-nil, the command will not ask the user for confirmation.
-NO-CONFIRM is always nil when the command is invoked
-interactively."
- (interactive)
- (let* ((pr (project-current t))
- (bufs (project--buffers-to-kill pr)))
- (cond (no-confirm
- (mapc #'kill-buffer bufs))
- ((null bufs)
- (message "No buffers to kill"))
- ((yes-or-no-p (format "Kill %d buffers in %s? "
- (length bufs)
- (project-root pr)))
- (mapc #'kill-buffer bufs)))))
-
-
-;;; Project list
-
-(defcustom project-list-file (locate-user-emacs-file "projects")
- "File in which to save the list of known projects."
- :type 'file
- :version "28.1"
- :group 'project)
-
-(defvar project--list 'unset
- "List structure containing root directories of known projects.
-With some possible metadata (to be decided).")
-
-(defun project--read-project-list ()
- "Initialize `project--list' using contents of `project-list-file'."
- (let ((filename project-list-file))
- (setq project--list
- (when (file-exists-p filename)
- (with-temp-buffer
- (insert-file-contents filename)
- (read (current-buffer)))))
- (unless (seq-every-p
- (lambda (elt) (stringp (car-safe elt)))
- project--list)
- (warn "Contents of %s are in wrong format, resetting"
- project-list-file)
- (setq project--list nil))))
-
-(defun project--ensure-read-project-list ()
- "Initialize `project--list' if it isn't already initialized."
- (when (eq project--list 'unset)
- (project--read-project-list)))
-
-(defun project--write-project-list ()
- "Save `project--list' in `project-list-file'."
- (let ((filename project-list-file))
- (with-temp-buffer
- (insert ";;; -*- lisp-data -*-\n")
- (let ((print-length nil)
- (print-level nil))
- (pp project--list (current-buffer)))
- (write-region nil nil filename nil 'silent))))
-
-;;;###autoload
-(defun project-remember-project (pr)
- "Add project PR to the front of the project list.
-Save the result in `project-list-file' if the list of projects has changed."
- (project--ensure-read-project-list)
- (let ((dir (project-root pr)))
- (unless (equal (caar project--list) dir)
- (dolist (ent project--list)
- (when (equal dir (car ent))
- (setq project--list (delq ent project--list))))
- (push (list dir) project--list)
- (project--write-project-list))))
-
-(defun project--remove-from-project-list (project-root report-message)
- "Remove directory PROJECT-ROOT of a missing project from the project list.
-If the directory was in the list before the removal, save the
-result in `project-list-file'. Announce the project's removal
-from the list using REPORT-MESSAGE, which is a format string
-passed to `message' as its first argument."
- (project--ensure-read-project-list)
- (when-let ((ent (assoc project-root project--list)))
- (setq project--list (delq ent project--list))
- (message report-message project-root)
- (project--write-project-list)))
-
-;;;###autoload
-(defun project-remove-known-project (project-root)
- "Remove directory PROJECT-ROOT from the project list.
-PROJECT-ROOT is the root directory of a known project listed in
-the project list."
- (interactive (list (project-prompt-project-dir)))
- (project--remove-from-project-list
- project-root "Project `%s' removed from known projects"))
-
-(defun project-prompt-project-dir ()
- "Prompt the user for a directory that is one of the known project roots.
-The project is chosen among projects known from the project list,
-see `project-list-file'.
-It's also possible to enter an arbitrary directory not in the list."
- (project--ensure-read-project-list)
- (let* ((dir-choice "... (choose a dir)")
- (choices
- ;; XXX: Just using this for the category (for the substring
- ;; completion style).
- (project--file-completion-table
- (append project--list `(,dir-choice))))
- (pr-dir (completing-read "Select project: " choices nil t)))
- (if (equal pr-dir dir-choice)
- (read-directory-name "Select directory: " default-directory nil t)
- pr-dir)))
-
-;;;###autoload
-(defun project-known-project-roots ()
- "Return the list of root directories of all known projects."
- (project--ensure-read-project-list)
- (mapcar #'car project--list))
-
-;;;###autoload
-(defun project-execute-extended-command ()
- "Execute an extended command in project root."
- (declare (interactive-only command-execute))
- (interactive)
- (let ((default-directory (project-root (project-current t))))
- (call-interactively #'execute-extended-command)))
-
-
-;;; Project switching
-
-(defcustom project-switch-commands
- '((project-find-file "Find file")
- (project-find-regexp "Find regexp")
- (project-dired "Dired")
- (project-vc-dir "VC-Dir")
- (project-eshell "Eshell"))
- "Alist mapping commands to descriptions.
-Used by `project-switch-project' to construct a dispatch menu of
-commands available upon \"switching\" to another project.
-
-Each element is of the form (COMMAND LABEL &optional KEY) where
-COMMAND is the command to run when KEY is pressed. LABEL is used
-to distinguish the menu entries in the dispatch menu. If KEY is
-absent, COMMAND must be bound in `project-prefix-map', and the
-key is looked up in that map."
- :version "28.1"
- :group 'project
- :package-version '(project . "0.6.0")
- :type '(repeat
- (list
- (symbol :tag "Command")
- (string :tag "Label")
- (choice :tag "Key to press"
- (const :tag "Infer from the keymap" nil)
- (character :tag "Explicit key")))))
-
-(defcustom project-switch-use-entire-map nil
- "Make `project-switch-project' use entire `project-prefix-map'.
-If nil, `project-switch-project' will only recognize commands
-listed in `project-switch-commands' and signal an error when
-others are invoked. Otherwise, all keys in `project-prefix-map'
-are legal even if they aren't listed in the dispatch menu."
- :type 'boolean
- :group 'project
- :version "28.1")
-
-(defun project--keymap-prompt ()
- "Return a prompt for the project switching dispatch menu."
- (mapconcat
- (pcase-lambda (`(,cmd ,label ,key))
- (when (characterp cmd) ; Old format, apparently user-customized.
- (let ((tmp cmd))
- ;; TODO: Add a deprecation warning, probably.
- (setq cmd key
- key tmp)))
- (let ((key (if key
- (vector key)
- (where-is-internal cmd (list project-prefix-map) t))))
- (format "[%s] %s"
- (propertize (key-description key) 'face 'bold)
- label)))
- project-switch-commands
- " "))
-
-;;;###autoload
-(defun project-switch-project (dir)
- "\"Switch\" to another project by running an Emacs command.
-The available commands are presented as a dispatch menu
-made from `project-switch-commands'.
-
-When called in a program, it will use the project corresponding
-to directory DIR."
- (interactive (list (project-prompt-project-dir)))
- (let* ((commands-menu
- (mapcar
- (lambda (row)
- (if (characterp (car row))
- ;; Deprecated format.
- ;; XXX: Add a warning about it?
- (reverse row)
- row))
- project-switch-commands))
- (commands-map
- (let ((temp-map (make-sparse-keymap)))
- (set-keymap-parent temp-map project-prefix-map)
- (dolist (row commands-menu temp-map)
- (when-let ((cmd (nth 0 row))
- (keychar (nth 2 row)))
- (define-key temp-map (vector keychar) cmd)))))
- command)
- (while (not command)
- (let ((overriding-local-map commands-map)
- (choice (read-key-sequence (project--keymap-prompt))))
- (when (setq command (lookup-key commands-map choice))
- (unless (or project-switch-use-entire-map
- (assq command commands-menu))
- ;; TODO: Add some hint to the prompt, like "key not
- ;; recognized" or something.
- (setq command nil)))
- (let ((global-command (lookup-key (current-global-map) choice)))
- (when (memq global-command
- '(keyboard-quit keyboard-escape-quit))
- (call-interactively global-command)))))
- (let ((default-directory dir)
- (project-current-inhibit-prompt t))
- (call-interactively command))))
-
-(provide 'project)
-;;; project.el ends here
diff --git a/emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.el b/emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.el
deleted file mode 100644
index 9b20372..0000000
--- a/emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.el
+++ /dev/null
@@ -1,436 +0,0 @@
-;;; Complete symbols at point using Pymacs.
-
-;; Copyright (C) 2007 Skip Montanaro
-
-;; Original Author: Skip Montanaro
-;; Maintainer: Urs Fleisch <ufleisch@users.sourceforge.net>
-;; Created: Oct 2004
-;; Keywords: python pymacs emacs
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;; Along with pycomplete.py this file allows programmers to complete Python
-;; symbols within the current buffer. See pycomplete.py for the Python side
-;; of things and a short description of what to expect.
-
-;; BAW 2012-09-28: pymacs may not be installed on Debian.
-(condition-case nil
- (require 'pymacs)
- (file-error nil))
-
-(eval-when-compile (require 'cl))
-
-(pymacs-load "pycomplete")
-
-(defcustom py-complete-set-keymap-p nil
- "If keys shall be defined when calling `py-complete-initialize'.
-Default is nil.
-
-See also `py-complete-set-keymap'"
- :type 'boolean
- :group 'python-mode)
-
-(defvar py-complete-variable-index nil
- "An alist with mappings of local variable names to types.")
-(defvar py-complete-variable-index-position 0
- "The line-beginning-position when py-complete-variable-index was last updated.
-This can be used to skip updating the index when still on the same line.")
-
-(defun py-complete-type-for-value (val)
- "Return name of type for variable assignment value.
-If the type cannot be deduced, nil is returned."
- (let ((firstchar (string-to-char val))
- (case-fold-search nil))
- (cond
- ((or (equal 0 firstchar) (string= val "None")) nil)
- ((equal ?\[ firstchar) "list")
- ((equal ?{ firstchar) "dict")
- ((or (equal ?' firstchar) (equal ?\" firstchar)) "str")
- ((string-match "^[rR]['\"]" val) "str")
- ((string-match "^[uU][rR]?['\"]" val) "unicode")
- ((or (string= val "True") (string= val "False")) "bool")
- ((string-match "^[+\\-]?[0-9]+$" val) "int")
- ((string-match "^[+\\-]?[0-9]+[lL]$" val) "long")
- ((string-match "^[+\\-]?[0-9]+\\(?:\\.[0-9]+\\)?" val) "float")
- ((string-match "^\\(\\(?:[[:word:]\\.]+\\.\\)?_?[A-Z][A-Za-z0-9]+\\)($" val)
- (match-string-no-properties 1 val))
- ((string= "(" (substring-no-properties val -1))
- (concat "_PYCFRT(" (substring-no-properties val 0 -1) ")")))))
-
-(defun py-complete-variables-in-def (&optional limit)
- "Return an alist with mappings of local variable names to types.
-Local variable assignments and parameters of the current function are
-parsed. If limit is given, it limits the size of the returned alist."
- (let ((pos (point))
- (i 0)
- (beg 0)
- candidates
- (variable-assignment-re (concat "^[ \t]+\\(\\w+\\)[ \t]*\\(?:=\\|+=\\|*=\\|%=\\|&=\\|^=\\|<<=\\|-=\\|/=\\|**=\\||=\\|>>=\\|//=\\)[ \t]*\\([({[]\\|[rRuU]*['\"]\\|[+\\-]?[[:word:].]+(?\\)")))
- (save-excursion
- ;; First get the current def and its parameters
- (py-backward-def)
- (when (looking-at (concat py-def-re " *\\([^( ]+\\) *\\(([^:]+\\) *:"))
- (setq beg (match-end 0))
- (let ((params (replace-regexp-in-string
- "[ )]+$" ""
- (replace-regexp-in-string
- "^[ (]+" ""
- (match-string-no-properties 3)))))
- (dolist (param (split-string params "[ \t\r\n]*,[ \t\r\n]*"))
- ;; Transform param into an assignment string
- (setq param (concat " " param
- (unless (memq ?= (string-to-list param))
- "=None")))
- (if (string-match variable-assignment-re param)
- (push `(,(match-string-no-properties 1 param) .
- ,(py-complete-type-for-value (match-string-no-properties 2 param)))
- candidates)))))
- ;; Search backward
- (goto-char pos)
- (while (and (or (not (integerp limit)) (< i limit))
- (re-search-backward variable-assignment-re nil t)
- (> (point) beg))
- (let* ((candidate (match-string-no-properties 1))
- (entry (assoc candidate candidates)))
- (cond ((null entry)
- (push `(,(match-string-no-properties 1) .
- ,(py-complete-type-for-value (match-string-no-properties 2)))
- candidates)
- (incf i))
- ((not (cdr entry))
- (setcdr entry (py-complete-type-for-value (match-string-no-properties 2)))))))
- (nreverse candidates))))
-
-(defun py-complete-update-variable-index (&optional limit)
- "Update py-complete-variable-index from the local variables of the current
-function. An update is only performed if point was on a different line for
-the last update. If limit is given, it limits the size of the index."
- (unless (local-variable-p 'py-complete-variable-index)
- (make-local-variable 'py-complete-variable-index))
- (unless (local-variable-p 'py-complete-variable-index-position)
- (make-local-variable 'py-complete-variable-index-position))
- (let ((linebeg (line-beginning-position)))
- (unless (eq linebeg py-complete-variable-index-position)
- (setq py-complete-variable-index (py-complete-variables-in-def limit))
- (setq py-complete-variable-index-position linebeg))))
-
-(defun py-complete-variable-completions-for-symbol (sym)
- "Get completions for local variables in current def.
-If sym is an empty string, all local variables are returned,
-else those starting with sym."
- (when (and (stringp sym) (string-match "^\\w*$" sym))
- (py-complete-update-variable-index)
- (let ((symlen (length sym)))
- (if (zerop symlen)
- (mapcar 'car py-complete-variable-index)
- (remove-if-not
- #'(lambda (s) (and (>= (length s) symlen) (string= sym (substring s 0 symlen))))
- (mapcar 'car py-complete-variable-index))))))
-
-(defun py-complete-which-class ()
- "Return current class name based on point.
-If no class name is found, return nil."
- (interactive)
- (let (classname)
- (save-excursion
- (save-restriction
- (py-backward-class)
- (when (looking-at (concat py-class-re " *\\([^( ]+\\)"))
- (setq classname (match-string-no-properties 2))
- (if (interactive-p)
- (message "%s" classname)))))
- classname))
-
-(defun py-complete-type-before-dotexpr (&optional pos)
- "Get type for expression before dot expression.
-The character after pos (point if omitted) must be a dot.
-Returns list, str or dict if such an expression is before
-the dot, else nil."
- (let ((dotchar (char-after pos)))
- (if (and dotchar (char-equal ?. dotchar))
- (save-excursion
- (if pos
- (goto-char pos))
- (cond
- ((looking-back "\\(\\[\\|,[^[]*\\)\\]") "list")
- ((looking-back "['\"]") "str")
- ((looking-back "}") "dict"))))))
-
-(defun py-complete-substitute-type-for-var (word)
- "Substitute the type for the variable starting the dot-expression word.
-Returns the word with replaced variable if known, else the unchanged word."
- (let* (type
- (firstsym (car (split-string word "\\.")))
- (firstlen (length firstsym)))
- (if (string= firstsym "self")
- (setq type (py-complete-which-class))
- (py-complete-update-variable-index)
- (setq type (cdr (assoc firstsym py-complete-variable-index))))
- (if (stringp type)
- (concat type (substring word firstlen))
- word)))
-
-(defun py-complete-python-dotexpr-begin nil
- (re-search-backward "[^a-zA-Z_0-9\\.]")
- (forward-char))
-
-(defun py-complete-python-dotexpr-end nil
- (re-search-forward "[a-zA-Z_0-9\\.]*"))
-
-(put 'python-dotexpr 'beginning-op 'py-complete-python-dotexpr-begin)
-(put 'python-dotexpr 'end-op 'py-complete-python-dotexpr-end)
-
-(defun py-complete-enhanced-dotexpr-at-point ()
- "Enhanced (thing-at-point 'python-dotexpr).
-The returned word starts with a type if an expression is found before the dot
-or if the dot-expression starts with a variable for which the type is known."
- (require 'thingatpt)
- (let ((bounds (bounds-of-thing-at-point 'python-dotexpr)))
- (if bounds
- (let* ((beg (car bounds))
- (end (cdr bounds))
- (word (buffer-substring-no-properties beg end))
- (prefix (py-complete-type-before-dotexpr beg)))
- (if prefix
- (concat prefix word)
- (py-complete-substitute-type-for-var word))))))
-
-(defun py-complete-enhanced-symbol-before-point ()
- "Return the dotted python symbol before point.
-The returned word starts with a type if an expression is found before the dot
-or if the dot-expression starts with a variable for which the type is known."
- (let* (prefix
- (word (buffer-substring-no-properties
- (save-excursion
- (skip-chars-backward "a-zA-Z0-9_.")
- (setq prefix (py-complete-type-before-dotexpr))
- (point))
- (point))))
- (if prefix
- (concat prefix word)
- (py-complete-substitute-type-for-var word))))
-
-;; Not used anymore
-(defun py-find-global-imports ()
- "Find Python import statements in buffer."
- (save-excursion
- (let (first-class-or-def imports)
- (goto-char (point-min))
- (setq first-class-or-def
- (re-search-forward "^ *\\(def\\|class\\) " nil t))
- (goto-char (point-min))
- (setq imports nil)
- (while (re-search-forward
- "^\\(import \\|from \\([A-Za-z_\\.][A-Za-z_0-9\\.]*\\) import \\).*"
- first-class-or-def t)
- (setq imports (cons (buffer-substring-no-properties
- (match-beginning 0)
- (match-end 0))
- imports)))
- (nreverse imports))))
-
-(defun py-complete ()
- "Complete symbol before point using Pymacs. "
- (interactive)
- (setq py-last-window-configuration
- (current-window-configuration))
- (let ((symbol (py-complete-enhanced-symbol-before-point)))
- (if (string= "" symbol)
- (tab-to-tab-stop)
- (let ((completions
- (py-complete-completions-for-symbol symbol)))
- (if completions
- (let* (completion
- (lastsym (car (last (split-string symbol "\\."))))
- (lastlen (length lastsym)))
- (cond ((null (cdr completions))
- (setq completion (car completions)))
- (t
- (setq completion (try-completion lastsym completions))
- (message "Making completion list...")
- (with-output-to-temp-buffer "*PythonCompletions*"
- (display-completion-list completions))
- (message "Making completion list...%s" "done")))
- (when (and (stringp completion)
- (> (length completion) lastlen))
- (insert (substring completion lastlen))))
- (message "Can't find completion for \"%s\"" symbol)
- (ding))))))
-
-(defun py-complete-completions-for-symbol (sym &optional imports)
- "Get possible completions for symbol using statements given in imports."
- (let ((pymacs-forget-mutability t))
- (append
- (py-complete-variable-completions-for-symbol sym)
- (pycomplete-pycompletions
- sym (buffer-file-name)
- imports))))
-
-(defun py-complete-docstring-for-symbol (sym &optional imports)
- "Get docstring for symbol using statements given in imports."
- (let ((pymacs-forget-mutability t))
- (pycomplete-pydocstring
- sym (buffer-file-name)
- imports)))
-
-(defun py-complete-completions ()
- "Get possible completions for current statement."
- (py-complete-completions-for-symbol
- (py-complete-enhanced-symbol-before-point)))
-
-(defun py-complete-completion-at-point ()
- "Return a (start end collection) list, so that this function
-can be used as a hook for completion-at-point-functions."
- (setq py-last-window-configuration
- (current-window-configuration))
- (let ((symbol (py-complete-enhanced-symbol-before-point)))
- (when (not (string= "" symbol))
- (let ((completions (py-complete-completions-for-symbol symbol)))
- (when completions
- (when (> (length completions) 1)
- ;; this-command is changed to avoid the following situation:
- ;; This function is invoked via indent-for-tab-command (because
- ;; tab-always-indent is complete) and there is a "Complete, but
- ;; not unique" case (e.g. "for" is completed and the next TAB key
- ;; press shall display a list with "for", "format"). In such a
- ;; case, py-indent-line would detect a repeated indentation
- ;; request and thus change the indentation. The changed
- ;; indentation would then prevent indent-for-tab-command
- ;; from calling the completion function.
- (setq this-command 'py-complete-completion-at-point))
- (list (- (point) (length (car (last (split-string symbol "\\.")))))
- (point)
- completions))))))
-
-(defun py-complete-show (string)
- (display-message-or-buffer string "*PythonHelp*"))
-
-(defun py-complete-help (string)
- "get help on a python expression"
- (interactive "sHelp: ")
- (let* ((pymacs-forget-mutability t)
- (help-string
- (pycomplete-pyhelp string (buffer-file-name))))
- (if (and help-string (> (length help-string) 300))
- (with-output-to-temp-buffer "*Python Help*"
- (princ help-string))
- (py-complete-show help-string))))
-
-(defun py-complete-help-thing-at-point nil
- (interactive)
- (let ((sym (py-complete-enhanced-dotexpr-at-point)))
- (if sym
- (py-complete-help sym))))
-
-(set 'py-complete-current-signature nil)
-
-(defun py-complete-signature (function)
- "get signature of a python function or method"
- (let ((pymacs-forget-mutability t))
- (set 'py-complete-current-signature
- (pycomplete-pysignature function (buffer-file-name)))))
-
-(defun py-complete-signature-show nil
- (let ((sym (py-complete-enhanced-dotexpr-at-point)))
- (if sym
- (progn
- (py-complete-show (py-complete-signature sym))))))
-
-(defun py-complete-signature-expr nil
- (interactive)
- (let ((dotexpr (read-string "signature on: "
- (py-complete-enhanced-dotexpr-at-point))))
- (if dotexpr
- (py-complete-show
- (py-complete-signature dotexpr)))))
-
-(defun py-complete-electric-lparen nil
- "electricly insert '(', and try to get a signature for the stuff to the left"
- (interactive)
- (py-complete-signature-show)
- (self-insert-command 1))
-
-(defun py-complete-electric-comma nil
- "electricly insert ',', and redisplay latest signature"
- (interactive)
- (self-insert-command 1)
- (if py-complete-current-signature
- (py-complete-show (format "%s" py-complete-current-signature))))
-
-(defun py-complete-location (sym)
- "Get definition location of sym in cons form (FILE . LINE)."
- (let ((location (pycomplete-pylocation sym (buffer-file-name))))
- (when (and location (vectorp location) (= (length location) 2))
- (cons (aref location 0) (aref location 1)))))
-
-(defun py-complete-goto-definition nil
- "Got to definition of Python function."
- (interactive)
- (let ((sym (py-complete-enhanced-dotexpr-at-point)))
- (if sym
- (let ((location
- (pycomplete-pylocation sym (buffer-file-name))))
- (if (and location (vectorp location) (= (length location) 2))
- (progn
- (find-file (aref location 0))
- (goto-line (aref location 1)))
- (message "Cannot find the definition!"))))))
-
-(defun py-complete-parse-source ()
- "Parse source code of Python file to get imports and completions."
- (let ((errstr (pycomplete-pyparse (buffer-file-name) t)))
- (if errstr
- (message "%s" errstr))))
-
-(defun py-complete-set-keymap ()
- "Define key map with pycomplete functions."
- (interactive)
- (define-key python-mode-map [C-tab] 'py-complete)
- (define-key python-mode-map [f1] 'py-complete-help-thing-at-point)
- (define-key python-mode-map "(" 'py-complete-electric-lparen)
- (define-key python-mode-map "," 'py-complete-electric-comma)
- (define-key python-mode-map [S-f1] 'py-complete-signature-expr)
- (define-key python-mode-map [f2] 'py-complete-goto-definition)
- (define-key python-mode-map [f3] 'py-complete-help))
-
-(defun py-complete-initialize ()
- "Initialize pycomplete hooks.
-Should be called from python-mode-hook. Keys are set when
-`py-complete-set-keymap-p' is non-nil."
- (interactive)
- (when py-set-complete-keymap-p
- (py-complete-set-keymap))
- (when py-complete-set-keymap-p
- (py-complete-set-keymap))
- ;; Parse source file after it is saved
- (add-hook 'after-save-hook 'py-complete-parse-source nil 'local)
- ;; Set up auto-complete or company if enabled
- (cond
- ((fboundp 'auto-complete-mode)
- (require 'auto-complete-pycomplete)
- (setq ac-sources
- (if (boundp 'py-complete-ac-sources)
- py-complete-ac-sources
- '(ac-source-pycomplete))))
- ((fboundp 'company-mode)
- (company-mode t)
- (require 'company-pycomplete)
- (set (make-local-variable 'company-backends)
- '((company-pycomplete))))
- ((or py-set-complete-keymap-p py-complete-set-keymap-p)
- (set (make-local-variable 'tab-always-indent) 'complete)
- (define-key python-mode-map [tab] 'indent-for-tab-command))))
-
-(provide 'pycomplete)
diff --git a/emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.py b/emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.py
deleted file mode 100644
index be381c7..0000000
--- a/emacs.d/elpa/python-mode-20200508.1756/completion/pycomplete.py
+++ /dev/null
@@ -1,798 +0,0 @@
-"""
-Python dot expression completion using Pymacs.
-
-This almost certainly needs work, but if you add
-
- (require 'pycomplete)
-
-to your init.el file and have Pymacs installed, when you hit M-TAB it will
-try to complete the dot expression before point. For example, given this
-import at the top of the file:
-
- import time
-
-typing "time.cl" then hitting M-TAB should complete "time.clock".
-
-This is unlikely to be done the way Emacs completion ought to be done, but
-it's a start. Perhaps someone with more Emacs mojo can take this stuff and
-do it right.
-
-See pycomplete.el for the Emacs Lisp side of things.
-
-Most of the public functions in this module have the signature
-
-(s, fname=None, imports=None)
-
-where s is the symbol to complete, fname is the file path and imports
-the list of import statements to use. The fname parameter is used as a
-key to cache the global and local context and the symbols imported or
-evaluated so far. The cache for an fname is cleared when its imports
-are changed. When not passing a list of imports (or None), the currently
-used imports are preserved. The caching should make subsequent operations
-(e.g. another completion or signature lookup after a completion) less
-expensive.
-"""
-
-# Original Author: Skip Montanaro <skip@pobox.com>
-# Maintainer: Urs Fleisch <ufleisch@users.sourceforge.net>
-# Created: Oct 2004
-# Keywords: python pymacs emacs
-
-# This software is provided as-is, without express or implied warranty.
-# Permission to use, copy, modify, distribute or sell this software, without
-# fee, for any purpose and by any individual or organization, is hereby
-# granted, provided that the above copyright notice and this paragraph
-# appear in all copies.
-
-# Along with pycomplete.el this file allows programmers to complete Python
-# symbols within the current buffer.
-
-import sys
-import types
-import inspect
-import keyword
-import os
-import pydoc
-import ast
-import re
-
-if sys.version_info[0] >= 3: # Python 3
- import io
-else: # Python 2
- import StringIO
-
-try:
- x = set
-except NameError:
- from sets import Set as set
-else:
- del x
-
-
-class _PyCompleteDocument(object):
- """Completion data for Python source file."""
-
- if sys.version_info[0] >= 3: # Python 3
- _helpout = io.StringIO
- @staticmethod
- def is_num_or_str(obj):
- return isinstance(obj, (int, float, str))
- @staticmethod
- def is_class_type(obj):
- return type(obj) == type
- @staticmethod
- def get_unbound_function(unbound):
- return unbound
- @staticmethod
- def get_method_function(meth):
- return meth.__func__
- @staticmethod
- def get_function_code(func):
- return func.__code__
- @staticmethod
- def update_with_builtins(keys):
- import builtins
- keys.update(dir(builtins))
- else: # Python 2
- _helpout = StringIO.StringIO
- @staticmethod
- def is_num_or_str(obj):
- return isinstance(obj, (int, long, float, basestring))
- @staticmethod
- def is_class_type(obj):
- return type(obj) in (types.ClassType, types.TypeType)
- @staticmethod
- def get_unbound_function(unbound):
- return unbound.im_func
- @staticmethod
- def get_method_function(meth):
- return meth.im_func
- @staticmethod
- def get_function_code(func):
- return func.func_code
- @staticmethod
- def update_with_builtins(keys):
- import __builtin__
- keys.update(dir(__builtin__))
-
- _sre_SRE_Pattern = type(re.compile(''))
- _sre_SRE_Match = type(re.match('', ''))
-
- # Class name in CapCase, as suggested by PEP8 Python style guide
- _class_name_re = re.compile(r'(?:^|\.)_?[A-Z][A-Za-z0-9]+$')
-
- _return_type_of_func = {
- 'bin': 'str',
- 'bytearray': 'bytearray',
- 'bytes': 'bytes',
- 'compile': 'types.CodeType',
- 'complex': 'complex',
- 'dict': 'dict',
- 'frozenset': 'frozenset',
- 'oct': 'str',
- 'open': 'io.BufferedIOBase' if sys.version_info[0] >= 3 else 'file',
- 'list': 'list',
- 'repr': 'str',
- 'set': 'set',
- 'sorted': 'list',
- 'str': 'str',
- 'tuple': 'tuple',
- 'vars': 'dict',
- 're.compile': '_PyCompleteDocument._sre_SRE_Pattern',
- 're.escape': 'str',
- 're.findall': 'list',
- 're.match': '_PyCompleteDocument._sre_SRE_Match',
- 're.search': '_PyCompleteDocument._sre_SRE_Match',
- 're.split': 'list',
- 're.sub': 'str',
- 're.subn': 'tuple',
- 'datetime.datetime': 'datetime.datetime',
- 'datetime.date': 'datetime.date',
- 'datetime.time': 'datetime.time',
- 'datetime.timedelta': 'datetime.timedelta',
- 'sys.exc_info': 'tuple',
- 'os.getcwd': 'str',
- 'os.getenv': 'str',
- 'os.urandom': 'bytes',
- 'os.path.abspath': 'str',
- 'os.path.basename': 'str',
- 'os.path.commonprefix': 'str',
- 'os.path.dirname': 'str',
- 'os.path.expanduser': 'str',
- 'os.path.expandvars': 'str',
- 'os.path.join': 'str',
- 'os.path.normcase': 'str',
- 'os.path.normpath': 'str',
- 'os.path.realpath': 'str',
- 'os.path.relpath': 'str',
- 'os.path.split': 'tuple',
- 'os.path.splitdrive': 'tuple',
- 'os.path.splitext': 'tuple',
- 'collections.defaultdict': 'collections.defaultdict',
- 'collections.deque': 'collections.deque',
- 'collections.namedtuple': 'collections.namedtuple',
- 'socket.socket': 'socket.socket',
- 'csv.excel': 'csv.excel',
- 'csv.excel_tab': 'csv.excel_tab'
- }
-
- @staticmethod
- def _get_type_for_function(funcname):
- typename = _PyCompleteDocument._return_type_of_func.get(funcname)
- if not typename and \
- _PyCompleteDocument._class_name_re.search(funcname):
- typename = funcname
- return typename
-
- @staticmethod
- def _replace_pycfrt_with_typename(s):
- """Replace _PYCFRT(..) expressions with function return type.
-
- The names of variables assigned from function calls can be replaced by
- _PYCFRT(name.of.function). This function tries to replace such expressions
- with the corresponding function return type (PYCFRT = pycomplete function
- return type). If no such expression can be found, s is returned unchanged.
- If the type cannot be deduced, None is returned, else the substituted
- string."""
- pycfrt_re = re.compile(r'_PYCFRT\(([^()]+)\)')
- return pycfrt_re.sub(lambda m: _PyCompleteDocument._get_type_for_function(m.group(1)), s)
-
- class ImportExtractor(ast.NodeVisitor):
- """NodeVisitor to extract the top-level import statements from an AST.
-
- To generate code containing all imports in try-except statements,
- call get_import_code(node), where node is a parsed AST.
- """
- def visit_FunctionDef(self, node):
- # Ignore imports inside functions or methods.
- pass
-
- def visit_ClassDef(self, node):
- # Ignore imports inside classes.
- pass
-
- def generic_visit(self, node):
- # Store import statement nodes.
- if isinstance(node, (ast.Import, ast.ImportFrom)):
- self._import_nodes.append(node)
- ast.NodeVisitor.generic_visit(self, node)
-
- def get_import_code(self, node, fname='<string>'):
- """Get compiled code of all top-level import statements found in the
- AST of node."""
- self._import_nodes = []
- self.visit(node)
- body = []
- for imp_node in self._import_nodes:
- if isinstance(imp_node, ast.ImportFrom) and \
- imp_node.module == '__future__':
- # 'SyntaxError: from __future__ imports must occur at the
- # beginning of the file' is raised if a 'from __future__ import'
- # is wrapped in try-except, so use only the import statement.
- body.append(imp_node)
- else:
- if sys.version_info[0] >= 3: # Python 3
- body.append(ast.Try(body=[imp_node], handlers=[
- ast.ExceptHandler(type=None, name=None, body=[ast.Pass()])],
- orelse=[], finalbody=[]))
- else:
- body.append(ast.TryExcept(body=[imp_node], handlers=[
- ast.ExceptHandler(type=None, name=None, body=[ast.Pass()])],
- orelse=[]))
- node = ast.Module(body=body)
- ast.fix_missing_locations(node)
- code = compile(node, fname, 'exec')
- return code
-
-
- class CodeRemover(ast.NodeTransformer):
- """NodeTransformer which replaces function statements with 'pass'
- and keeps only safe assignments, so that the resulting code can
- be used for code completion.
-
- To reduce the code from the node of a parsed AST, call
- get_transformed_code(node).
- """
- def visit_FunctionDef(self, node):
- # Replace all function statements except doc string by 'pass'.
- if node.body:
- if isinstance(node.body[0], ast.Expr) and \
- isinstance(node.body[0].value, ast.Str):
- # Keep doc string.
- first_stmt = node.body[1] if len(node.body) > 1 else node.body[0]
- node.body = [node.body[0]]
- else:
- first_stmt = node.body[0]
- node.body = []
- node.body.append(ast.copy_location(ast.Pass(), first_stmt))
- return node
- return None
-
- def visit_Expr(self, node):
- # Remove all expressions except strings to keep doc strings.
- if isinstance(node.value, ast.Str):
- return node
- return None
-
- @staticmethod
- def _get_type_node_for_function_node(node):
- # Convert node to dot expression
- attrs = []
- while isinstance(node, ast.Attribute):
- attrs.insert(0, node.attr)
- node = node.value
- if isinstance(node, ast.Name):
- attrs.insert(0, node.id)
- funcname = '.'.join(attrs)
- typename = _PyCompleteDocument._get_type_for_function(funcname)
- if typename:
- # Convert dot expression to node
- attrs = typename.split('.')
- node = None
- if attrs:
- node = ast.Name(id=attrs.pop(0), ctx=ast.Load())
- while attrs:
- node = ast.Attribute(value=node, attr=attrs.pop(0),
- ctx=ast.Load())
- return node
- return None
-
- @staticmethod
- def replace_unsafe_value(node, replace_self=None):
- """Modify value from assignment if unsafe.
-
- If replace_self is given, only assignments starting with 'self.' are
- processed, the assignment node is returned with 'self.' replaced by
- the value of replace_self (typically the class name).
- For other assignments, None is returned."""
- for i, target in enumerate(node.targets):
- if not isinstance(target, (ast.Name, ast.Attribute)):
- # Only process assignments to names and attributes,
- # not tuples.
- return None
- if replace_self:
- if isinstance(target, ast.Attribute) and \
- isinstance(target.value, ast.Name) and \
- target.value.id == 'self' and \
- isinstance(target.value.ctx, ast.Load):
- node.targets[i].value.id = replace_self
- if target.attr == '__name__':
- node.value = ast.copy_location(ast.Str(s=''),
- node.value)
- elif target.attr in ('__dict__', '__class__', '__bases__',
- '__doc__'):
- return None
- else:
- return None
- elif isinstance(target, ast.Name) and \
- isinstance(target.ctx, ast.Store):
- if target.id == '__metaclass__':
- # Do not modify __metaclass__ assignments
- return node
- elif target.id == '__slots__':
- node.value = ast.copy_location(
- ast.List(elts=[], ctx=ast.Load()), node.value)
- if isinstance(node.value, (ast.Str, ast.Num)):
- pass
- elif isinstance(node.value, (ast.List, ast.Tuple)):
- node.value.elts = []
- elif isinstance(node.value, ast.Dict):
- node.value.keys = []
- node.value.values = []
- elif isinstance(node.value, ast.ListComp):
- node.value = ast.copy_location(ast.List(elts=[], ctx=ast.Load()), node.value)
- elif isinstance(node.value, ast.Call):
- type_node = _PyCompleteDocument.CodeRemover._get_type_node_for_function_node(node.value.func)
- if type_node:
- # Wrap class lookup in try-except because it is not fail-safe.
- node.value = ast.copy_location(type_node, node.value)
- if sys.version_info[0] >= 3: # Python 3
- node = ast.copy_location(ast.Try(body=[node], handlers=[
- ast.ExceptHandler(type=None, name=None, body=[ast.Pass()])],
- orelse=[], finalbody=[]), node)
- else:
- node = ast.copy_location(ast.TryExcept(body=[node], handlers=[
- ast.ExceptHandler(type=None, name=None, body=[ast.Pass()])],
- orelse=[]), node)
- ast.fix_missing_locations(node)
- else:
- node.value = ast.copy_location(
- ast.Name(id='None', ctx=ast.Load()), node.value)
- else:
- node.value = ast.copy_location(ast.Name(id='None', ctx=ast.Load()), node.value)
- return node
-
- def visit_Assign(self, node):
- # Replace unsafe values of assignements by None.
- return self.replace_unsafe_value(node)
-
- def visit_Name(self, node):
- # Pass names for bases in ClassDef.
- return node
-
- def visit_Attribute(self, node):
- # Pass attributes for bases in ClassDef.
- return node
-
- def visit_ClassDef(self, node):
- # Visit nodes of class.
- # Store instance member assignments to be added later to generated code.
- self_assignments = {}
- for child in ast.walk(node):
- if isinstance(child, ast.Assign):
- new_child = self.replace_unsafe_value(child,
- replace_self=node.name)
- if new_child:
- new_var = child.targets[0].attr
- old_assign = self_assignments.get(new_var)
- if not old_assign or (
- isinstance(old_assign, ast.Assign) and
- isinstance(old_assign.value, ast.Name) and
- old_assign.value.id == 'None'):
- self_assignments[new_var] = new_child
- self._class_assignments.extend(list(self_assignments.values()))
- return ast.NodeTransformer.generic_visit(self, node)
-
- def visit_Module(self, node):
- # Visit nodes of module
- return ast.NodeTransformer.generic_visit(self, node)
-
- def generic_visit(self, node):
- # Remove everything which is not handled by the methods above
- return None
-
- def get_transformed_code(self, node, fname='<string>'):
- """Get compiled code containing only empty functions and methods
- and safe assignments found in the AST of node."""
- self._class_assignments = []
- node = self.visit(node)
- # The self members are added as attributes to the class objects
- # rather than included as class variables inside the class definition
- # so that names starting with '__' are not mangled.
- node.body.extend(self._class_assignments)
- code = compile(node, fname, 'exec')
- return code
-
- _stdout = sys.stdout
-
- _instances = {}
-
- def __init__(self, fname=None):
- """Constructor for internal use.
- The factory method instance() shall be used instead.
- """
- self._fname = fname
- self._imports = None
- self._globald = globals().copy()
- self._symnames = []
- self._symobjs = {}
- self._parse_source_called = False
-
- @classmethod
- def instance(cls, fname):
- """Get _PyCompleteDocument object for fname.
- If no object for this file name exists, a new object is created and
- registered.
- """
- obj = cls._instances.get(fname)
- if obj is None:
- obj = _PyCompleteDocument(fname)
- cls._instances[fname] = obj
- return obj
-
- def _import_modules(self, imports):
- """Import modules using the statements in imports.
- If the imports are the same as in the last call, the methods
- immediately returns, also if imports is None.
- """
- if imports is None and not self._parse_source_called:
- self.parse_source()
- if imports is None or imports == self._imports:
- return
- # changes to where the file is
- if self._fname:
- os.chdir(os.path.dirname(self._fname))
- self._globald = globals().copy()
- self._symnames = []
- self._symobjs = {}
- for stmt in imports:
- try:
- exec(stmt, self._globald)
- except TypeError:
- raise TypeError('invalid type: %s' % stmt)
- except Exception:
- continue
- self._imports = imports
-
- def _collect_symbol_names(self):
- """Collect the global, local, builtin symbols in _symnames.
- If _symnames is already set, the method immediately returns.
- """
- if not self._symnames:
- keys = set(keyword.kwlist)
- keys.update(list(self._globald.keys()))
- self.update_with_builtins(keys)
- self._symnames = list(keys)
- self._symnames.sort()
-
- def _get_symbol_object(self, s):
- """Get a symbol by evaluating its name or importing a module
- or submodule with the name s.
- """
- sym = self._symobjs.get(s)
- if sym is not None:
- return sym
- # changes to where the file is
- if self._fname:
- os.chdir(os.path.dirname(self._fname))
- try:
- sym = eval(s, self._globald)
- except NameError:
- try:
- sym = __import__(s, self._globald)
- self._globald[s] = sym
- except ImportError:
- pass
- except AttributeError:
- try:
- sym = __import__(s, self._globald)
- except ImportError:
- pass
- except SyntaxError:
- pass
- if sym is not None:
- self._symobjs[s] = sym
- return sym
-
- def _load_symbol(self, s, strict=False):
- """Get a symbol for a dotted expression.
-
- Returns the last successfully found symbol object in the
- dotted chain. If strict is set True, it returns True as
- soon as a symbol is not found. Therefore strict=True can
- be used to find exactly the symbol for s, otherwise a
- symbol for a parent can be returned, which may be enough
- if searching for help on symbol.
- """
- s = self._replace_pycfrt_with_typename(s)
- sym = self._symobjs.get(s)
- if sym is not None:
- return sym
- dots = s.split('.')
- if not s or len(dots) == 1:
- sym = self._get_symbol_object(s)
- else:
- for i in range(1, len(dots) + 1):
- s = '.'.join(dots[:i])
- if not s:
- continue
- sym_i = self._get_symbol_object(s)
- if sym_i is not None:
- sym = sym_i
- elif strict:
- return None
- return sym
-
- def _get_help(self, s, imports=None):
- """Return string printed by help function."""
- if not s:
- return ''
- if s == 'pydoc.help':
- # Prevent pydoc from going into interactive mode
- s = 'pydoc.Helper'
- obj = None
- if not keyword.iskeyword(s):
- try:
- self._import_modules(imports)
- obj = self._load_symbol(s, strict=False)
- except Exception as ex:
- return '%s' % ex
- if not obj:
- obj = str(s)
- out = self._helpout()
- try:
- sys.stdout = out
- pydoc.help(obj)
- finally:
- sys.stdout = self._stdout
- return out.getvalue()
-
- @staticmethod
- def _find_constructor(class_ob):
- """Given a class object, return a function object used for the
- constructor (ie, __init__() ) or None if we can't find one."""
- try:
- return _PyCompleteDocument.get_unbound_function(class_ob.__init__)
- except AttributeError:
- for base in class_ob.__bases__:
- rc = _PyCompleteDocument._find_constructor(base)
- if rc is not None:
- return rc
- return None
-
- def get_all_completions(self, s, imports=None):
- """Return contextual completion of s (string of >= zero chars).
-
- If given, imports is a list of import statements to be executed
- first.
- """
- self._import_modules(imports)
-
- s = self._replace_pycfrt_with_typename(s)
- last_dot_pos = s.rfind('.')
- if last_dot_pos == -1:
- self._collect_symbol_names()
- if s:
- return [k for k in self._symnames if k.startswith(s)]
- else:
- return self._symnames
-
- sym = self._load_symbol(s[:last_dot_pos], strict=True)
- if sym is not None:
- s = s[last_dot_pos + 1:]
- return [k for k in dir(sym) if k.startswith(s)]
- return []
-
- def complete(self, s, imports=None):
- """Complete symbol if unique, else return list of completions."""
- if not s:
- return ''
-
- completions = self.get_all_completions(s, imports)
- if len(completions) == 0:
- return None
- else:
- dots = s.split(".")
- prefix = os.path.commonprefix([k for k in completions])
- if len(completions) == 1 or len(prefix) > len(dots[-1]):
- return [prefix[len(dots[-1]):]]
- return completions
-
- def help(self, s, imports=None):
- """Return help on object."""
- try:
- return self._get_help(s, imports)
- except Exception as ex:
- return '%s' % ex
-
- def get_docstring(self, s, imports=None):
- """Return docstring for symbol s."""
- if s and not keyword.iskeyword(s):
- try:
- self._import_modules(imports)
- obj = self._load_symbol(s, strict=True)
- if obj and not self.is_num_or_str(obj):
- doc = inspect.getdoc(obj)
- if doc:
- return doc
- except:
- pass
- return ''
-
- def get_signature(self, s, imports=None):
- """Return info about function parameters."""
- if not s or keyword.iskeyword(s):
- return ''
- obj = None
- sig = ""
-
- try:
- self._import_modules(imports)
- obj = self._load_symbol(s, strict=False)
- except Exception as ex:
- return '%s' % ex
-
- if self.is_class_type(obj):
- # Look for the highest __init__ in the class chain.
- ctr = self._find_constructor(obj)
- if ctr is not None and type(ctr) in (
- types.MethodType, types.FunctionType, types.LambdaType):
- obj = ctr
- elif type(obj) == types.MethodType:
- # bit of a hack for methods - turn it into a function
- # but we drop the "self" param.
- obj = self.get_method_function(obj)
-
- if type(obj) in [types.FunctionType, types.LambdaType]:
- try:
- (args, varargs, varkw, defaults) = inspect.getargspec(obj)
- sig = ('%s: %s' % (obj.__name__,
- inspect.formatargspec(args, varargs, varkw,
- defaults)))
- except ValueError:
- try:
- (args, varargs, varkw, defaults, kwonlyargs,
- kwonlydefaults, annotations) = inspect.getfullargspec(obj)
- sig = ('%s: %s' % (
- obj.__name__, inspect.formatargspec(
- args, varargs, varkw, defaults, kwonlyargs,
- kwonlydefaults, annotations)))
- except AttributeError:
- pass
-
- doc = getattr(obj, '__doc__', '')
- if doc and not sig:
- doc = doc.lstrip()
- pos = doc.find('\n')
- if pos < 0 or pos > 70:
- pos = 70
- sig = doc[:pos]
- return sig
-
- def get_location(self, s, imports=None):
- """Return file path and line number of symbol, None if not found."""
- if not s or keyword.iskeyword(s):
- return None
- try:
- self._import_modules(imports)
- obj = self._load_symbol(s, strict=False)
- if obj is not None:
- if self.is_class_type(obj):
- obj = obj.__init__
- if type(obj) == types.MethodType:
- obj = self.get_method_function(obj)
- if type(obj) in [types.FunctionType, types.LambdaType]:
- code = self.get_function_code(obj)
- return (os.path.abspath(code.co_filename), code.co_firstlineno)
- # If not found, try using inspect.
- return (inspect.getsourcefile(obj), inspect.getsourcelines(obj)[1])
- except:
- pass
- return None
-
- def parse_source(self, only_reload=False):
- """Parse source code to get imports and completions.
-
- If this method is called, the imports parameter for the other methods
- must be omitted (or None), so that the imports are taken from the
- parsed source code. If only_reload is True, the source is only parsed
- if it has been parsed before.
- None is returned if OK, else a string describing the error.
- """
- if only_reload and not self._parse_source_called:
- return None
- self._parse_source_called = True
- if not self._fname:
- return None
-
- try:
- with open(self._fname) as fh:
- src = fh.read()
- except IOError as ex:
- return '%s' % ex
-
- # changes to where the file is
- os.chdir(os.path.dirname(self._fname))
-
- try:
- node = ast.parse(src, self._fname)
- import_code = self.ImportExtractor().get_import_code(node, self._fname)
- except (SyntaxError, TypeError) as ex:
- return '%s' % ex
-
- old_globald = self._globald.copy()
- self._globald = globals().copy()
- try:
- exec(import_code, self._globald)
- except Exception as ex:
- self._globald = old_globald
- return '%s' % ex
-
- self._symnames = []
- self._symobjs = {}
-
- reduced_code = self.CodeRemover().get_transformed_code(node, self._fname)
- try:
- exec(reduced_code, self._globald)
- except Exception as ex:
- return '%s' % ex
- return None
-
-def pycompletions(s, fname=None, imports=None):
- """Get a list of possible completions for s.
-
- The completions extend the expression s after the last dot.
- """
- return _PyCompleteDocument.instance(fname).get_all_completions(
- s, imports)
-
-def pycomplete(s, fname=None, imports=None):
- """Complete the Python expression s.
-
- If multiple completions are found, a list of possible completions
- (names after the last dot) is returned.
- If one completion is found, a list with a string containing the
- remaining characters is returned.
- If no completion is found, None is returned.
- """
- return _PyCompleteDocument.instance(fname).complete(s, imports)
-
-def pyhelp(s, fname=None, imports=None):
- """Return help on object s."""
- return _PyCompleteDocument.instance(fname).help(s, imports)
-
-def pydocstring(s, fname=None, imports=None):
- """Return docstring of symbol."""
- return _PyCompleteDocument.instance(fname).get_docstring(s, imports)
-
-def pysignature(s, fname=None, imports=None):
- """Return info about function parameters."""
- return _PyCompleteDocument.instance(fname).get_signature(s, imports)
-
-def pylocation(s, fname=None, imports=None):
- """Return file path and line number of symbol, None if not found."""
- return _PyCompleteDocument.instance(fname).get_location(s, imports)
-
-def pyparse(fname, only_reload=False):
- """Parse source code to get imports and completions.
-
- If this function is called, the imports parameter for the other functions
- must be omitted (or None), so that the imports are taken from the
- parsed source code. If only_reload is True, the source is only parsed if
- it has been parsed before.
- """
- return _PyCompleteDocument.instance(fname).parse_source(only_reload)
-
-# Local Variables :
-# pymacs-auto-reload : t
-# End :
diff --git a/emacs.d/elpa/python-mode-20200508.1756/python-mode-autoloads.el b/emacs.d/elpa/python-mode-20200508.1756/python-mode-autoloads.el
deleted file mode 100644
index 87329af..0000000
--- a/emacs.d/elpa/python-mode-20200508.1756/python-mode-autoloads.el
+++ /dev/null
@@ -1,137 +0,0 @@
-;;; python-mode-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "python-mode" "python-mode.el" (0 0 0 0))
-;;; Generated autoloads from python-mode.el
-
-(autoload 'py-backward-class "python-mode" "\
-Go to beginning of ‘class’.
-
-If already at beginning, go one ‘class’ backward.
-Return beginning of form if successful, nil otherwise
-
-\(fn)" t nil)
-
-(autoload 'py-backward-def "python-mode" "\
-Go to beginning of ‘def’.
-
-If already at beginning, go one ‘def’ backward.
-Return beginning of form if successful, nil otherwise
-
-\(fn)" t nil)
-
-(autoload 'py-backward-def-or-class "python-mode" "\
-Go to beginning of ‘def-or-class’.
-
-If already at beginning, go one ‘def-or-class’ backward.
-Return beginning of form if successful, nil otherwise
-
-\(fn)" t nil)
-
-(autoload 'py-backward-class-bol "python-mode" "\
-Go to beginning of ‘class’, go to BOL.
-If already at beginning, go one ‘class’ backward.
-Return beginning of ‘class’ if successful, nil otherwise
-
-\(fn)" t nil)
-
-(autoload 'py-backward-def-bol "python-mode" "\
-Go to beginning of ‘def’, go to BOL.
-If already at beginning, go one ‘def’ backward.
-Return beginning of ‘def’ if successful, nil otherwise
-
-\(fn)" t nil)
-
-(autoload 'py-backward-def-or-class-bol "python-mode" "\
-Go to beginning of ‘def-or-class’, go to BOL.
-If already at beginning, go one ‘def-or-class’ backward.
-Return beginning of ‘def-or-class’ if successful, nil otherwise
-
-\(fn)" t nil)
-
-(autoload 'py-forward-class "python-mode" "\
-Go to end of class.
-
-Return end of ‘class’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position
-
-\(fn &optional ORIG BOL)" t nil)
-
-(autoload 'py-forward-def "python-mode" "\
-Go to end of def.
-
-Return end of ‘def’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position
-
-\(fn &optional ORIG BOL)" t nil)
-
-(autoload 'py-forward-def-or-class "python-mode" "\
-Go to end of def-or-class.
-
-Return end of ‘def-or-class’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position
-
-\(fn &optional ORIG BOL)" t nil)
-
-(autoload 'py-auto-completion-mode "python-mode" "\
-Run auto-completion
-
-\(fn)" t nil)
-
-(autoload 'python-mode "python-mode" "\
-Major mode for editing Python files.
-
-To submit a problem report, enter `\\[py-submit-bug-report]' from a
-`python-mode' buffer. Do `\\[py-describe-mode]' for detailed
-documentation. To see what version of `python-mode' you are running,
-enter `\\[py-version]'.
-
-This mode knows about Python indentation, tokens, comments and
-continuation lines. Paragraphs are separated by blank lines only.
-
-COMMANDS
-
-`py-shell' Start an interactive Python interpreter in another window
-`py-execute-statement' Send statement at point to Python default interpreter
-`py-backward-statement' Go to the initial line of a simple statement
-
-etc.
-
-See available commands listed in files commands-python-mode at directory doc
-
-VARIABLES
-
-`py-indent-offset' indentation increment
-`py-shell-name' shell command to invoke Python interpreter
-`py-split-window-on-execute' When non-nil split windows
-`py-switch-buffers-on-execute-p' When non-nil switch to the Python output buffer
-
-See available customizations listed in files variables-python-mode at directory doc
-
-\\{python-mode-map}
-
-\(fn)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "python-mode" '("pdb-track-stack-from-shell-p" "pep8" "pst-here" "pps-emacs-version" "pios" "autopair-mode" "all-mode-setting" "info-lookup-mode" "ios" "ipy" "iyp" "Python" "IPython" "Ipython" "jython" "virtualenv-" "eva" "force-py-shell-name-p-o" "flake8" "toggle-" "turn-o" "with-buffer-prepared-for-jit-lock" "highlight-indent-active" "hs-hide-comments-when-hiding-all" "strip-chars-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("python-mode-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; python-mode-autoloads.el ends here
diff --git a/emacs.d/elpa/python-mode-20200508.1756/python-mode-pkg.el b/emacs.d/elpa/python-mode-20200508.1756/python-mode-pkg.el
deleted file mode 100644
index a2f3140..0000000
--- a/emacs.d/elpa/python-mode-20200508.1756/python-mode-pkg.el
+++ /dev/null
@@ -1,4 +0,0 @@
-(define-package "python-mode" "20200508.1756" "Python major mode" 'nil)
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/python-mode-20200508.1756/python-mode.el b/emacs.d/elpa/python-mode-20200508.1756/python-mode.el
deleted file mode 100644
index 021ef26..0000000
--- a/emacs.d/elpa/python-mode-20200508.1756/python-mode.el
+++ /dev/null
@@ -1,28002 +0,0 @@
-;;; python-mode.el --- Edit, debug, develop, run Python programs. -*- lexical-binding: t; -*-
-
-;; Version: 6.2.3
-
-;; Keywords: languages, processes, python, oop
-
-;; URL: https://gitlab.com/groups/python-mode-devs
-
-;; Package-Requires: ((emacs "24"))
-
-;; Copyright (C) 1992,1993,1994 Tim Peters
-
-;; Author: 2015-2020 https://gitlab.com/groups/python-mode-devs
-;; 2003-2014 https://launchpad.net/python-mode
-;; 1995-2002 Barry A. Warsaw
-;; 1992-1994 Tim Peters
-;; Maintainer: python-mode@python.org
-;; Created: Feb 1992
-;; Keywords: python languages oop
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Includes a minor mode for handling a Python/IPython shell, and can
-;; take advantage of Pymacs when installed.
-
-;; See documentation in README.org, README.DEVEL.org
-
-;; Please report bugs at
-;; https://gitlab.com/python-mode-devs/python-mode/issues
-
-;; available commands are documented in directory "doc" as
-;; commands-python-mode.org
-
-;; As for `py-add-abbrev':
-;; Similar to `add-mode-abbrev', but uses
-;; `py-partial-expression' before point for expansion to
-;; store, not `word'. Also provides a proposal for new
-;; abbrevs.
-
-;; Proposal for an abbrev is composed from the downcased
-;; initials of expansion - provided they are of char-class
-;; [:alpha:]
-;;
-;; For example code below would be recognised as a
-;; `py-expression' composed by three
-;; py-partial-expressions.
-;;
-;; OrderedDict.popitem(last=True)
-;;
-;; Putting the curser at the EOL, M-3 M-x py-add-abbrev
-;;
-;; would prompt "op" for an abbrev to store, as first
-;; `py-partial-expression' beginns with a "(", which is
-;; not taken as proposal.
-
-;;; Code:
-
-(ignore-errors (require 'subr-x))
-;; (require 'org)
-
-(defgroup python-mode nil
- "Support for the Python programming language, <http://www.python.org/>"
- :group 'languages
- :prefix "py-")
-
-(defconst py-version "6.2.3")
-
-(defvar py-install-directory "")
-(defcustom py-install-directory ""
- "Directory where python-mode.el and it's subdirectories should be installed.
-
-Needed for completion and other environment stuff only."
-
- :type 'string
- :tag "py-install-directory"
- :group 'python-mode)
-
-(defcustom py-font-lock-defaults-p t
- "If fontification is not required,
-
-avoiding it might speed up things."
-
- :type 'boolean
- :group 'python-mode
- :safe 'booleanp)
-
-(defcustom py-eldoc-mode-p nil
- "If eldoc-mode is loaded by python-mode.
-
-Default is nil"
-
- :type 'boolean
- :group 'python-mode
- :safe 'booleanp)
-
-(defcustom py-pythonpath ""
- "Define $PYTHONPATH here, if needed.
-
-Emacs doesn't read .bashrc"
-
- :type 'string
- :tag "py-pythonpath"
- :group 'python-mode)
-
-(when (string= "" py-install-directory)
- (setq py-install-directory default-directory))
-
-(defcustom python-mode-modeline-display "Py"
- "String to display in Emacs modeline."
-
- :type 'string
- :tag "python-mode-modeline-display"
- :group 'python-mode)
-
-(defcustom py-python2-modeline-display "Py2"
- "String to display in Emacs modeline."
-
- :type 'string
- :tag "python2-mode-modeline-display"
- :group 'python-mode)
-
-(defcustom py-python3-modeline-display "Py3"
- "String to display in Emacs modeline."
-
- :type 'string
- :tag "python3-mode-modeline-display"
- :group 'python-mode)
-
-(defcustom py-ipython-modeline-display "IPy"
- "String to display in Emacs modeline."
-
- :type 'string
- :tag "ipython-modeline-display"
- :group 'python-mode)
-
-(defcustom py-jython-modeline-display "Jy"
- "String to display in Emacs modeline."
-
- :type 'string
- :tag "jython-modeline-display"
- :group 'python-mode)
-
-(defcustom py-extensions "py-extensions.el"
- "File where extensions to python-mode.el should be installed.
-
-Used by virtualenv support."
-
- :type 'string
- :tag "py-extensions"
- :group 'python-mode)
-
-(defcustom info-lookup-mode "python"
- "Which Python documentation should be queried.
-
-Make sure it's accessible from Emacs by \\<emacs-lisp-mode-map> \\[info] ...
-See INSTALL-INFO-FILES for help."
-
- :type 'string
- :tag "info-lookup-mode"
- :group 'python-mode)
-
-(defcustom py-fast-process-p nil
- "Use `py-fast-process'.
-
-Commands prefixed \"py-fast-...\" suitable for large output
-
-See: large output makes Emacs freeze, lp:1253907
-
-Results arrive in output buffer, which is not in comint-mode"
-
- :type 'boolean
- :tag "py-fast-process-p"
- :group 'python-mode
- :safe 'booleanp)
-
-;; credits to python.el
-(defcustom py-shell-compilation-regexp-alist
- `((,(rx line-start (1+ (any " \t")) "File \""
- (group (1+ (not (any "\"<")))) ; avoid `<stdin>' &c
- "\", line " (group (1+ digit)))
- 1 2)
- (,(rx " in file " (group (1+ not-newline)) " on line "
- (group (1+ digit)))
- 1 2)
- (,(rx line-start "> " (group (1+ (not (any "(\"<"))))
- "(" (group (1+ digit)) ")" (1+ (not (any "("))) "()")
- 1 2))
- "`compilation-error-regexp-alist' for py-shell."
- :type '(alist string)
- :group 'python-mode)
-
-(defcustom py-shift-require-transient-mark-mode-p t
- "If py-shift commands on regions should require variable ‘transient-mark-mode’.
-
-Default is t"
-
- :type 'boolean
- :group 'python-mode
- :safe 'booleanp)
-
-(defvar py-fast-output-buffer "*Python Fast*"
- "Internally used. ‘buffer-name’ for fast-processes.")
-
-(defvar py-this-result nil
- "Internally used, store return-value.")
-
-(defvar py-coding-re
- "\\(# *coding[ \t]*=\\|#[ \t]*\-*\-[ \t]*coding:\\|#[ \t]*encoding:\\)[ \t]*\\([[:graph:]+]\\)"
- "")
-
-(setq py-coding-re
- "\\(# *coding[ \t]*=\\|#[ \t]*\-*\-[ \t]*coding:\\|#[ \t]*encoding:\\)[ \t]*\\([[:graph:]+]\\)")
-
-;; and
-
-;; #[ \t]*-*-[ \t]*coding:[ \t]* utf-8 -*-
-
-;; What about
-
-;; #[ \t]*encoding:[ \t]* utf-8"
-
-(defcustom py-comment-auto-fill-p nil
- "When non-nil, fill comments.
-
-Defaut is nil"
-
- :type 'boolean
- :group 'python-mode
- :safe 'booleanp)
-
-(defcustom py-sexp-use-expression-p nil
- "If non-nil, ‘forward-sexp’ will call ‘py-forward-expression’.
-
-Respective ‘backward-sexp’ will call ‘py-backward-expression’
-Default is t"
- :type 'boolean
- :group 'python-mode
- :safe 'booleanp)
-
-(defcustom py-session-p t
- "If commands would use an existing process.
-
-Default is t"
-
- :type 'boolean
- :tag "py-session-p"
- :group 'python-mode
- :safe 'booleanp)
-
-(defun py-toggle-session-p (&optional arg)
- "Switches boolean variable ‘py-session-p’.
-
-With optional ARG message state switched to"
- (interactive "p")
- (setq py-session-p (not py-session-p))
- (when arg (message "py-session-p: %s" py-session-p)))
-
-(defcustom py-max-help-buffer-p nil
- "If \"\*Python-Help\*\"-buffer should appear as the only visible.
-
-Default is nil. In ‘help-buffer’, \"q\" will close it."
-
- :type 'boolean
- :tag "py-max-help-buffer-p"
- :group 'python-mode
- :safe 'booleanp)
-
-(defcustom py-highlight-error-source-p nil
- "Respective code in source-buffer will be highlighted.
-
-Default is nil.
-
-\\<python-mode-map> `py-remove-overlays-at-point' removes that highlighting."
- :type 'boolean
- :tag "py-highlight-error-source-p"
- :group 'python-mode)
-
-(defcustom py-set-pager-cat-p nil
- "If the shell environment variable $PAGER should set to `cat'.
-
-Avoids lp:783828,
- \"Terminal not fully functional\", for help('COMMAND') in python-shell
-
-When non-nil, imports module `os'"
-
- :type 'boolean
- :tag "py-set-pager-cat-p"
- :group 'python-mode)
-
-(defcustom py-empty-line-closes-p nil
- "When non-nil, dedent after empty line following block.
-
-if True:
- print(\"Part of the if-statement\")
-
-print(\"Not part of the if-statement\")
-
-Default is nil"
-
- :type 'boolean
- :tag "py-empty-line-closes-p"
- :group 'python-mode)
-
-(defcustom py-prompt-on-changed-p t
- "Ask for save before a changed buffer is sent to interpreter.
-
-Default is t"
-
- :type 'boolean
- :tag "py-prompt-on-changed-p"
- :group 'python-mode)
-
-(defcustom py-dedicated-process-p nil
- "If commands executing code use a dedicated shell.
-
-Default is nil
-
-When non-nil and `py-session-p', an existing dedicated process is re-used instead of default - which allows executing stuff in parallel."
- :type 'boolean
- :tag "py-dedicated-process-p"
- :group 'python-mode)
-
-(defcustom py-store-result-p nil
- "Put resulting string of `py-execute-...' into ‘kill-ring’.
-
-Default is nil"
-
- :type 'boolean
- :tag "py-dedicated-process-p"
- :group 'python-mode)
-
-(defvar py-shell--font-lock-buffer "*PSFLB*"
- "May contain the `py-buffer-name' currently fontified." )
-
-(setq py-shell--font-lock-buffer "*PSFLB*")
-
-(defvar py-return-result-p nil
- "Internally used.
-
-When non-nil, return resulting string of `py-execute-...'.
-Imports will use it with nil.
-Default is nil")
-
-(defcustom py--execute-use-temp-file-p nil
- "Assume execution at a remote machine.
-
- where write-access is not given."
-
- :type 'boolean
- :group 'python-mode)
-
-(defvar py--match-paren-forward-p nil
- "Internally used by `py-match-paren'.")
-
-(defvar py-new-session-p t
- "Internally used. See lp:1393882.
-
-Restart ‘py-shell’ once with new Emacs/‘python-mode’.")
-
-(defcustom py-electric-close-active-p nil
- "Close completion buffer if no longer needed.
-
-Works around a bug in `choose-completion'.
-Default is nil"
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-hide-show-minor-mode-p nil
- "If hide-show minor-mode should be on, default is nil."
-
- :type 'boolean
- :tag "py-hide-show-minor-mode-p"
- :group 'python-mode)
-
-(defcustom py-load-skeletons-p nil
- "If skeleton definitions should be loaded, default is nil.
-
-If non-nil and variable ‘abbrev-mode’ on, block-skeletons will inserted.
-Pressing \"if<SPACE>\" for example will prompt for the if-condition."
-
- :type 'boolean
- :tag "py-load-skeletons-p"
- :group 'python-mode)
-
-(defcustom py-if-name-main-permission-p t
- "Allow execution of code inside blocks started.
-
-by \"if __name__== '__main__':\".
-Default is non-nil"
-
- :type 'boolean
- :tag "py-if-name-main-permission-p"
- :group 'python-mode)
-
-(defcustom py-use-font-lock-doc-face-p nil
- "If documention string inside of def or class get `font-lock-doc-face'.
-
-`font-lock-doc-face' inherits `font-lock-string-face'.
-Call \\<emacs-lisp-mode-map> \\[customize-face] in order to have a visible effect."
-
- :type 'boolean
- :tag "py-use-font-lock-doc-face-p"
- :group 'python-mode)
-
-(defcustom py-empty-comment-line-separates-paragraph-p t
- "Consider paragraph start/end lines with nothing inside but comment sign.
-
-Default is non-nil"
- :type 'boolean
- :tag "py-empty-comment-line-separates-paragraph-p"
- :group 'python-mode)
-
-(defcustom py-indent-honors-inline-comment nil
- "If non-nil, indents to column of inlined comment start.
-Default is nil."
- :type 'boolean
- :tag "py-indent-honors-inline-comment"
- :group 'python-mode)
-
-(defcustom py-auto-fill-mode nil
- "If ‘python-mode’ should set ‘fill-column’.
-
-according to values
-in `py-comment-fill-column' and `py-docstring-fill-column'.
-Default is nil"
-
- :type 'boolean
- :tag "py-auto-fill-mode"
- :group 'python-mode)
-
-(defcustom py-error-markup-delay 4
- "Seconds error's are highlighted in exception buffer."
-
- :type 'integer
- :tag "py-error-markup-delay"
- :group 'python-mode)
-
-(defcustom py-fast-completion-delay 0.1
- "Used by ‘py-fast-send-string’."
-
- :type 'float
- :tag "py-fast-completion-delay"
- :group 'python-mode)
-
-(defcustom py-new-shell-delay
- (if (eq system-type 'windows-nt)
- 2.0
- 1.0)
-
- "If a new comint buffer is connected to Python, commands like completion might need some delay."
-
- :type 'float
- :tag "py-new-shell-delay"
- :group 'python-mode)
-
-(defcustom py-autofill-timer-delay 1
- "Delay when idle before functions ajusting `py-docstring-fill-column', `py-comment-fill-column' are called."
- :type 'integer
- :tag "py-autofill-timer-delay"
- :group 'python-mode)
-
-(defcustom py-docstring-fill-column 72
- "Value of `fill-column' to use when filling a docstring.
-Any non-integer value means do not use a different value of
-`fill-column' when filling docstrings."
- :type '(choice (integer)
- (const :tag "Use the current `fill-column'" t))
- :tag "py-docstring-fill-column"
- :group 'python-mode)
-
-(defcustom py-comment-fill-column 79
- "Value of `fill-column' to use when filling a comment.
-Any non-integer value means do not use a different value of
-`fill-column' when filling docstrings."
- :type '(choice (integer)
- (const :tag "Use the current `fill-column'" t))
- :tag "py-comment-fill-column"
- :group 'python-mode)
-
-(defcustom py-fontify-shell-buffer-p nil
- "If code in Python shell should be highlighted as in script buffer.
-
-Default is nil.
-
-If t, related vars like `comment-start' will be set too.
-Seems convenient when playing with stuff in IPython shell
-Might not be TRT when a lot of output arrives"
-
- :type 'boolean
- :tag "py-fontify-shell-buffer-p"
- :group 'python-mode)
-
-(defvar py-modeline-display ""
- "Internally used")
-
-(defcustom py-modeline-display-full-path-p nil
- "If the full PATH/TO/PYTHON should be displayed in shell modeline.
-
-Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in ‘buffer-name’ already."
-
- :type 'boolean
- :tag "py-modeline-display-full-path-p"
- :group 'python-mode)
-
-(defcustom py-modeline-acronym-display-home-p nil
- "If the modeline acronym should contain chars indicating the home-directory.
-
-Default is nil"
- :type 'boolean
- :tag "py-modeline-acronym-display-home-p"
- :group 'python-mode)
-
-(defun py-autopair-check ()
- "Check, if ‘autopair-mode’ is available.
-
-Give some hints, if not."
- (interactive)
- (if (featurep 'autopair)
- 't
- (progn
- (message "py-autopair-check: %s" "Don't see autopair.el. Make sure, it's installed. If not, maybe see source: URL: http://autopair.googlecode.com")
- nil)))
-
-(defvar highlight-indent-active nil)
-(defvar autopair-mode nil)
-
-(defvar-local py--editbeg nil
- "Internally used by `py-edit-docstring' and others")
-
-(defvar-local py--editend nil
- "Internally used by `py-edit-docstring' and others")
-
-(defvar py--oldbuf nil
- "Internally used by `py-edit-docstring'.")
-
-(defvar py-edit-buffer "Edit docstring"
- "Name of the temporary buffer to use when editing.")
-
-(defvar py--edit-register nil)
-
-(defvar py-result nil
- "Internally used. May store result from Python process.")
-
-(defvar py-error nil
- "Internally used. Takes the error-messages from Python process.")
-
-(defvar py-python-completions "*Python Completions*"
- "Buffer name for Python-shell completions, internally used.")
-
-(defvar py-ipython-completions "*IPython Completions*"
- "Buffer name for IPython-shell completions, internally used.")
-
-(defcustom py-timer-close-completions-p t
- "If `py-timer-close-completion-buffer' should run, default is non-nil."
-
- :type 'boolean
- :tag "py-timer-close-completions-p"
- :group 'python-mode)
-
-(defcustom py-autopair-mode nil
- "If ‘python-mode’ calls (autopair-mode-on)
-
-Default is nil
-Load `autopair-mode' written by Joao Tavora <joaotavora [at] gmail.com>
-URL: http://autopair.googlecode.com"
- :type 'boolean
- :tag "py-autopair-mode"
- :group 'python-mode)
-
-(defcustom py-indent-no-completion-p nil
- "If completion function should insert a TAB when no completion found.
-
-Default is nil"
- :type 'boolean
- :tag "py-indent-no-completion-p"
- :group 'python-mode)
-
-(defcustom py-company-pycomplete-p nil
- "Load company-pycomplete stuff. Default is nil."
-
- :type 'boolean
- :tag "py-company-pycomplete-p"
- :group 'python-mode)
-
-(defvar py-last-position nil
- "Used by ‘py-help-at-point’.
-
-Avoid repeated call at identic pos.")
-
-(defvar py-auto-completion-mode-p nil
- "Internally used by `py-auto-completion-mode'.")
-
-(defvar py-complete-last-modified nil
- "Internally used by `py-auto-completion-mode'.")
-
-(defvar py--auto-complete-timer nil
- "Internally used by `py-auto-completion-mode'.")
-
-(defvar py-auto-completion-buffer nil
- "Internally used by `py-auto-completion-mode'.")
-
-(defvar py--auto-complete-timer-delay 1
- "Seconds Emacs must be idle to trigger auto-completion.
-
-See `py-auto-completion-mode'")
-
-(defcustom py-auto-complete-p nil
- "Run python-mode's built-in auto-completion via ‘py-complete-function’. Default is nil."
-
- :type 'boolean
- :tag "py-auto-complete-p"
- :group 'python-mode)
-(make-variable-buffer-local 'py-auto-complete-p)
-
-(defcustom py-tab-shifts-region-p nil
- "If t, TAB will indent/cycle the region, not just the current line.
-
-Default is nil
-See also `py-tab-indents-region-p'"
-
- :type 'boolean
- :tag "py-tab-shifts-region-p"
- :group 'python-mode)
-
-(defcustom py-tab-indents-region-p nil
- "When t and first TAB doesn't shift, ‘indent-region’ is called.
-
-Default is nil
-See also `py-tab-shifts-region-p'"
-
- :type 'boolean
- :tag "py-tab-indents-region-p"
- :group 'python-mode)
-
-(defcustom py-block-comment-prefix-p t
- "If py-comment inserts ‘py-block-comment-prefix’.
-
-Default is t"
-
- :type 'boolean
- :tag "py-block-comment-prefix-p"
- :group 'python-mode)
-
-(defcustom py-org-cycle-p nil
- "When non-nil, command `org-cycle' is available at shift-TAB, <backtab>.
-
-Default is nil."
-
- :type 'boolean
- :tag "py-org-cycle-p"
- :group 'python-mode)
-
-(defcustom py-set-complete-keymap-p nil
- "If `py-complete-initialize'.
-
-Sets up enviroment for Pymacs based py-complete.
- Should load it's keys into `python-mode-map'
-Default is nil.
-See also resp. edit `py-complete-set-keymap'"
-
- :type 'boolean
- :tag "py-set-complete-keymap-p"
- :group 'python-mode)
-
-(defcustom py-outline-minor-mode-p t
- "If outline minor-mode should be on, default is t."
-
- :type 'boolean
- :tag "py-outline-minor-mode-p"
- :group 'python-mode)
-
-(defcustom py-guess-py-install-directory-p t
- "If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from variable `buffer-file-name'."
-
- :type 'boolean
- :tag "py-guess-py-install-directory-p"
- :group 'python-mode)
-
-(defcustom py-load-pymacs-p nil
- "If Pymacs related stuff should be loaded.
-
-Default is nil.
-
-Pymacs has been written by François Pinard and many others.
-See original source: http://pymacs.progiciels-bpi.ca"
-
- :type 'boolean
- :tag "py-load-pymacs-p"
- :group 'python-mode)
-
-(defcustom py-verbose-p nil
- "If functions should report results.
-
-Default is nil."
-
- :type 'boolean
- :tag "py-verbose-p"
- :group 'python-mode)
-
-(defcustom py-sexp-function nil
- "Called instead of `forward-sexp', `backward-sexp'.
-
-Default is nil."
-
- :type '(choice
-
- (const :tag "default" nil)
- (const :tag "py-end-of-partial-expression" py-end-of-partial-expression)
- (const :tag "py-end-of-expression" py-end-of-expression))
- :tag "py-sexp-function"
- :group 'python-mode)
-
-(defcustom py-close-provides-newline t
- "If a newline is inserted, when line after block isn't empty.
-
-Default is non-nil.
-When non-nil, `py-end-of-def' and related will work faster"
- :type 'boolean
- :tag "py-close-provides-newline"
- :group 'python-mode)
-
-(defcustom py-dedent-keep-relative-column t
- "If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position."
- :type 'boolean
- :tag "py-dedent-keep-relative-column"
- :group 'python-mode)
-
-(defcustom py-indent-list-style 'line-up-with-first-element
- "Sets the basic indentation style of lists.
-
-Setting here might be ignored in case of canonical indent.
-
-‘line-up-with-first-element’ indents to 1+ column of opening delimiter
-def foo (a,
- b):
-
-‘one-level-to-beginning-of-statement’ adds ‘py-indent-offset’ to beginning of statement
-def long_function_name(
- var_one, var_two, var_three,
- var_four):
- print(var_one)
-
-‘one-level-from-first-element’ adds ‘py-indent-offset’ from first element
-def foo():
- if (foo &&
- baz):
- bar()"
- :type '(choice
- (const :tag "line-up-with-first-element" line-up-with-first-element)
- (const :tag "one-level-to-beginning-of-statement" one-level-to-beginning-of-statement)
- (const :tag "one-level-from-first-element" one-level-from-first-element))
- :tag "py-indent-list-style"
- :group 'python-mode)
-(make-variable-buffer-local 'py-indent-list-style)
-
-(defcustom py-closing-list-dedents-bos nil
- "When non-nil, indent list's closing delimiter like start-column.
-
-It will be lined up under the first character of
- the line that starts the multi-line construct, as in:
-
-my_list = [
- 1, 2, 3,
- 4, 5, 6
-]
-
-result = some_function_that_takes_arguments(
- 'a', 'b', 'c',
- 'd', 'e', 'f'
-)
-
-Default is nil, i.e.
-
-my_list = [
- 1, 2, 3,
- 4, 5, 6
- ]
-result = some_function_that_takes_arguments(
- 'a', 'b', 'c',
- 'd', 'e', 'f'
- )
-
-Examples from PEP8
-URL: https://www.python.org/dev/peps/pep-0008/#indentation"
-
- :type 'boolean
- :tag "py-closing-list-dedents-bos"
- :group 'python-mode)
-
-(defvar py-imenu-max-items 99)
-(defcustom py-imenu-max-items 99
- "Python-mode specific `imenu-max-items'."
-
-:type 'number
-:group 'python-mode)
-
-(defcustom py-closing-list-space 1
- "Number of chars, closing parenthesis outdent from opening, default is 1."
- :type 'number
- :tag "py-closing-list-space"
- :group 'python-mode)
-
-(defcustom py-max-specpdl-size 99
- "Heuristic exit.
-e
-Limiting number of recursive calls by ‘py-forward-statement’ and related.
-Default is ‘max-specpdl-size’.
-
-This threshold is just an approximation. It might set far higher maybe.
-
-See lp:1235375. In case code is not to navigate due to errors, variable `which-function-mode' and others might make Emacs hang. Rather exit than."
-
- :type 'number
- :tag "py-max-specpdl-size"
- :group 'python-mode)
-
-(defcustom py-closing-list-keeps-space nil
- "If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil."
- :type 'boolean
- :tag "py-closing-list-keeps-space"
- :group 'python-mode)
-
-(defcustom py-electric-kill-backward-p nil
- "Affects `py-electric-backspace'. Default is nil.
-
-If behind a delimited form of braces, brackets or parentheses,
-backspace will kill it's contents
-
-With when cursor after
-my_string[0:1]
---------------^
-
-==>
-
-my_string[]
-----------^
-
-In result cursor is insided emptied delimited form."
-
- :type 'boolean
- :tag "py-electric-kill-backward-p"
- :group 'python-mode)
-
-(defcustom py-electric-colon-active-p nil
- "`py-electric-colon' feature.
-
-Default is nil. See lp:837065 for discussions.
-See also `py-electric-colon-bobl-only'"
- :type 'boolean
- :tag "py-electric-colon-active-p"
- :group 'python-mode)
-
-(defcustom py-electric-colon-bobl-only t
-
- "When inserting a colon, do not indent lines unless at beginning of block.
-
-See lp:1207405 resp. `py-electric-colon-active-p'"
-
- :type 'boolean
- :tag "py-electric-colon-bobl-only"
- :group 'python-mode)
-
-(defcustom py-electric-yank-active-p nil
- "When non-nil, `yank' will be followed by an `indent-according-to-mode'.
-
-Default is nil"
- :type 'boolean
- :tag "py-electric-yank-active-p"
- :group 'python-mode)
-
-(defcustom py-electric-colon-greedy-p nil
- "If ‘py-electric-colon’ should indent to the outmost reasonable level.
-
-If nil, default, it will not move from at any reasonable level."
- :type 'boolean
- :tag "py-electric-colon-greedy-p"
- :group 'python-mode)
-
-(defcustom py-electric-colon-newline-and-indent-p nil
- "If non-nil, `py-electric-colon' will call `newline-and-indent'. Default is nil."
- :type 'boolean
- :tag "py-electric-colon-newline-and-indent-p"
- :group 'python-mode)
-
-(defcustom py-electric-comment-p nil
- "If \"#\" should call `py-electric-comment'. Default is nil."
- :type 'boolean
- :tag "py-electric-comment-p"
- :group 'python-mode)
-
-(defcustom py-electric-comment-add-space-p nil
- "If ‘py-electric-comment’ should add a space. Default is nil."
- :type 'boolean
- :tag "py-electric-comment-add-space-p"
- :group 'python-mode)
-
-(defcustom py-mark-decorators nil
- "If ‘py-mark-def-or-class’ functions should mark decorators too. Default is nil."
- :type 'boolean
- :tag "py-mark-decorators"
- :group 'python-mode)
-
-(defcustom py-defun-use-top-level-p nil
- "If ‘beginning-of-defun’, ‘end-of-defun’ calls function ‘top-level’ form.
-
-Default is nil.
-
-beginning-of defun, ‘end-of-defun’ forms use
-commands `py-beginning-of-top-level', `py-end-of-top-level'
-
-‘mark-defun’ marks function ‘top-level’ form at point etc."
-
- :type 'boolean
- :tag "py-defun-use-top-level-p"
- :group 'python-mode)
-
-(defcustom py-tab-indent t
- "Non-nil means TAB in Python mode calls `py-indent-line'."
- :type 'boolean
- :tag "py-tab-indent"
- :group 'python-mode)
-
-(defcustom py-return-key 'newline
- "Which command <return> should call."
- :type '(choice
-
- (const :tag "default" py-newline-and-indent)
- (const :tag "newline" newline)
- (const :tag "py-newline-and-indent" py-newline-and-indent)
- (const :tag "py-newline-and-dedent" py-newline-and-dedent)
- )
- :tag "py-return-key"
- :group 'python-mode)
-
-(defcustom py-complete-function 'py-fast-complete
- "When set, enforces function todo completion, default is `py-fast-complete'.
-
-Might not affect IPython, as `py-shell-complete' is the only known working here.
-Normally ‘python-mode’ knows best which function to use."
- :type '(choice
-
- (const :tag "default" nil)
- (const :tag "Pymacs and company based py-complete" py-complete)
- (const :tag "py-shell-complete" py-shell-complete)
- (const :tag "py-indent-or-complete" py-indent-or-complete)
- (const :tag "py-fast-complete" py-fast-complete)
- )
- :tag "py-complete-function"
- :group 'python-mode)
-
-(defcustom py-encoding-string " # -*- coding: utf-8 -*-"
- "Default string specifying encoding of a Python file."
- :type 'string
- :tag "py-encoding-string"
- :group 'python-mode)
-
-(defcustom py-shebang-startstring "#! /bin/env"
- "Detecting the shell in head of file."
- :type 'string
- :tag "py-shebang-startstring"
- :group 'python-mode)
-
-(defcustom py-flake8-command ""
- "Which command to call flake8.
-
-If empty, ‘python-mode’ will guess some"
- :type 'string
- :tag "py-flake8-command"
- :group 'python-mode)
-
-(defcustom py-flake8-command-args ""
- "Arguments used by flake8.
-
-Default is the empty string."
- :type 'string
- :tag "py-flake8-command-args"
- :group 'python-mode)
-
-(defvar py-flake8-history nil
- "Used by flake8, resp. ‘py-flake8-command’.
-
-Default is nil.")
-
-(defcustom py-message-executing-temporary-file t
- "If execute functions using a temporary file should message it.
-
-Default is t.
-Messaging increments the prompt counter of IPython shell."
- :type 'boolean
- :tag "py-message-executing-temporary-file"
- :group 'python-mode)
-
-(defcustom py-execute-no-temp-p nil
- "Seems Emacs-24.3 provided a way executing stuff without temporary files."
- :type 'boolean
- :tag "py-execute-no-temp-p"
- :group 'python-mode)
-
-(defcustom py-lhs-inbound-indent 1
- "When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis."
- :type 'integer
- :tag "py-lhs-inbound-indent"
- :group 'python-mode)
-
-(defcustom py-continuation-offset 2
- "Additional amount of offset to give for some continuation lines.
-Continuation lines are those that immediately follow a backslash
-terminated line."
- :type 'integer
- :tag "py-continuation-offset"
- :group 'python-mode)
-
-(defcustom py-indent-tabs-mode nil
- "Python-mode starts `indent-tabs-mode' with the value specified here, default is nil."
- :type 'boolean
- :tag "py-indent-tabs-mode"
- :group 'python-mode)
-
-(defcustom py-smart-indentation nil
- "Guess `py-indent-offset'. Default is nil.
-
-Setting it to t seems useful only in cases where customizing
-`py-indent-offset' is no option - for example because the
-indentation step is unknown or differs inside the code.
-
-When this variable is non-nil, `py-indent-offset' is guessed from existing code in the buffer, which might slow down the proceeding."
-
- :type 'boolean
- :tag "py-smart-indentation"
- :group 'python-mode)
-
-(defcustom py-block-comment-prefix "##"
- "String used by \\[comment-region] to comment out a block of code.
-This should follow the convention for non-indenting comment lines so
-that the indentation commands won't get confused (i.e., the string
-should be of the form `#x...' where `x' is not a blank or a tab, and
- `...' is arbitrary). However, this string should not end in whitespace."
- :type 'string
- :tag "py-block-comment-prefix"
- :group 'python-mode)
-
-(defcustom py-indent-offset 4
- "Amount of offset per level of indentation.
-`\\[py-guess-indent-offset]' can usually guess a good value when
-you're editing someone else's Python code."
- :type 'integer
- :tag "py-indent-offset"
- :group 'python-mode)
-(make-variable-buffer-local 'py-indent-offset)
-
-(defcustom py-backslashed-lines-indent-offset 5
- "Amount of offset per level of indentation of backslashed.
-No semantic indent, which diff to `py-indent-offset' indicates"
- :type 'integer
- :tag "py-backslashed-lines-indent-offset"
- :group 'python-mode)
-
-(defcustom py-shell-completion-native-output-timeout 5.0
- "Time in seconds to wait for completion output before giving up."
- :version "25.1"
- :type 'float)
-
-(defcustom py-shell-completion-native-try-output-timeout 1.0
- "Time in seconds to wait for *trying* native completion output."
- :version "25.1"
- :type 'float)
-
-(defvar py-shell--first-prompt-received-output-buffer nil)
-(defvar py-shell--first-prompt-received nil)
-
-(defcustom py-shell-first-prompt-hook nil
- "Hook run upon first (non-pdb) shell prompt detection.
-This is the place for shell setup functions that need to wait for
-output. Since the first prompt is ensured, this helps the
-current process to not hang while waiting. This is useful to
-safely attach setup code for long-running processes that
-eventually provide a shell."
- :version "25.1"
- :type 'hook
- :group 'python-mode)
-
-(defvar py-shell--parent-buffer nil)
-
-(defvar py-shell--package-depth 10)
-
-(defcustom py-indent-comments t
- "When t, comment lines are indented."
- :type 'boolean
- :tag "py-indent-comments"
- :group 'python-mode)
-
-(defcustom py-uncomment-indents-p nil
- "When non-nil, after uncomment indent lines."
- :type 'boolean
- :tag "py-uncomment-indents-p"
- :group 'python-mode)
-
-(defcustom py-separator-char 47
- "The character, which separates the system file-path components.
-
-Precedes guessing when not empty, returned by function `py-separator-char'."
- :type 'character
- :tag "py-separator-char"
- :group 'python-mode)
-
-(and
- ;; used as a string finally
- ;; kept a character not to break existing customizations
- (characterp py-separator-char)(setq py-separator-char (char-to-string py-separator-char)))
-
-(defcustom py-custom-temp-directory ""
- "If set, will take precedence over guessed values from `py-temp-directory'. Default is the empty string."
- :type 'string
- :tag "py-custom-temp-directory"
- :group 'python-mode)
-
-(defcustom py-beep-if-tab-change t
- "Ring the bell if `tab-width' is changed.
-If a comment of the form
-
- \t# vi:set tabsize=<number>:
-
-is found before the first code line when the file is entered, and the
-current value of (the general Emacs variable) `tab-width' does not
-equal <number>, `tab-width' is set to <number>, a message saying so is
-displayed in the echo area, and if `py-beep-if-tab-change' is non-nil
-the Emacs bell is also rung as a warning."
- :type 'boolean
- :tag "py-beep-if-tab-change"
- :group 'python-mode)
-
-(defcustom py-jump-on-exception t
- "Jump to innermost exception frame in Python output buffer.
-When this variable is non-nil and an exception occurs when running
-Python code synchronously in a subprocess, jump immediately to the
-source code of the innermost traceback frame."
- :type 'boolean
- :tag "py-jump-on-exception"
- :group 'python-mode)
-
-(defcustom py-ask-about-save t
- "If not nil, ask about which buffers to save before executing some code.
-Otherwise, all modified buffers are saved without asking."
- :type 'boolean
- :tag "py-ask-about-save"
- :group 'python-mode)
-
-(defcustom py-delete-function 'delete-char
- "Function called by `py-electric-delete' when deleting forwards."
- :type 'function
- :tag "py-delete-function"
- :group 'python-mode)
-
-(defcustom py-import-check-point-max
- 20000
- "Max number of characters to search Java-ish import statement.
-
-When `python-mode' tries to calculate the shell
--- either a CPython or a Jython shell --
-it looks at the so-called `shebang'.
-If that's not available, it looks at some of the
-file heading imports to see if they look Java-like."
- :type 'integer
- :tag "py-import-check-point-max
-"
- :group 'python-mode)
-
-;; (setq py-shells
-;; (list
-;; ""
-;; 'ipython
-;; 'ipython2.7
-;; 'ipython3
-;; 'jython
-;; 'python
-;; 'python2
-;; 'python3
-;; 'pypy
-;; ))
-
-(defcustom py-known-shells
- (list
- "ipython"
- "ipython2.7"
- "ipython3"
- "jython"
- "python"
- "python2"
- "python3"
- "pypy"
- )
- "A list of available shells instrumented for commands.
- Expects its executables installed
-
-Edit for your needs."
- :type '(repeat string)
- :tag "py-shells"
- :group 'python-mode)
-
-(defcustom py-known-shells-extended-commands
- (list "ipython"
- "python"
- "python3"
- "pypy"
- )
- "A list of shells instrumented for finer grained commands
-like ‘py-execute-statement-ipython’
-Expects its executables installed
-
-Edit for your needs."
- :type '(repeat string)
- :tag "py-shells"
- :group 'python-mode)
-
-(defun py-install-named-shells-fix-doc (ele)
- (cond ((string-match "^i" ele)
- (concat "I" (capitalize (substring ele 1))))
- ((string-match "^pypy" ele)
- "PyPy")
- (t (capitalize ele))))
-
-(defcustom py-jython-packages
- '("java" "javax")
- "Imported packages that imply `jython-mode'."
- :type '(repeat string)
- :tag "py-jython-packages
-"
- :group 'python-mode)
-
-(defcustom py-current-defun-show t
- "If `py-current-defun' should jump to the definition.
-
-Highlights it while waiting PY-WHICH-FUNC-DELAY seconds.
-Afterwards returning to previous position.
-
-Default is t."
-
- :type 'boolean
- :tag "py-current-defun-show"
- :group 'python-mode)
-
-(defcustom py-current-defun-delay 2
- "When called interactively, `py-current-defun' should wait PY-WHICH-FUNC-DELAY seconds at the definition name found, before returning to previous position."
-
- :type 'number
- :tag "py-current-defun-delay"
- :group 'python-mode)
-
-;; (defcustom py--delete-temp-file-delay 1
-;; "Used by `py--delete-temp-file'."
-
-;; :type 'number
-;; :tag "py--delete-temp-file-delay"
-;; :group 'python-mode)
-
-(defcustom py-python-send-delay 1
- "Seconds to wait for output, used by `py--send-...' functions.
-
-See also ‘py-ipython-send-delay’"
-
- :type 'number
- :tag "py-python-send-delay"
- :group 'python-mode)
-
-(defcustom py-python3-send-delay 1
- "Seconds to wait for output, used by `py--send-...' functions.
-
-See also ‘py-ipython-send-delay’"
-
- :type 'number
- :tag "py-python3-send-delay"
- :group 'python-mode)
-
-(defcustom py-ipython-send-delay 1
- "Seconds to wait for output, used by `py--send-...' functions.
-
-See also ‘py-python-send-delay’"
-
- :type 'number
- :tag "py-ipython-send-delay"
- :group 'python-mode)
-
-(defcustom py-master-file nil
- "Execute the named master file instead of the buffer's file.
-
-Default is nil.
-With relative path variable `default-directory' is prepended.
-
-Beside you may set this variable in the file's local
-variable section, e.g.:
-
- # Local Variables:
- # py-master-file: \"master.py\"
- # End:"
- :type 'string
- :tag "py-master-file"
- :group 'python-mode)
-(make-variable-buffer-local 'py-master-file)
-
-(defcustom py-pychecker-command "pychecker"
- "Shell command used to run Pychecker."
- :type 'string
- :tag "py-pychecker-command"
- :group 'python-mode)
-
-(defcustom py-pychecker-command-args "--stdlib"
- "String arguments to be passed to pychecker."
- :type 'string
- :tag "py-pychecker-command-args"
- :group 'python-mode)
-
-(defcustom py-pyflakes-command "pyflakes"
- "Shell command used to run Pyflakes."
- :type 'string
- :tag "py-pyflakes-command"
- :group 'python-mode)
-
-(defcustom py-pyflakes-command-args ""
- "String arguments to be passed to pyflakes.
-
-Default is \"\""
- :type 'string
- :tag "py-pyflakes-command-args"
- :group 'python-mode)
-
-(defcustom py-pep8-command "pep8"
- "Shell command used to run pep8."
- :type 'string
- :tag "py-pep8-command"
- :group 'python-mode)
-
-(defcustom py-pep8-command-args ""
- "String arguments to be passed to pylint.
-
-Default is \"\""
- :type 'string
- :tag "py-pep8-command-args"
- :group 'python-mode)
-
-(defcustom py-pyflakespep8-command (concat py-install-directory "/pyflakespep8.py")
- "Shell command used to run `pyflakespep8'."
- :type 'string
- :tag "py-pyflakespep8-command"
- :group 'python-mode)
-
-(defcustom py-pyflakespep8-command-args ""
- "String arguments to be passed to pyflakespep8.
-
-Default is \"\""
- :type 'string
- :tag "py-pyflakespep8-command-args"
- :group 'python-mode)
-
-(defcustom py-pylint-command "pylint"
- "Shell command used to run Pylint."
- :type 'string
- :tag "py-pylint-command"
- :group 'python-mode)
-
-(defcustom py-pylint-command-args '("--errors-only")
- "String arguments to be passed to pylint.
-
-Default is \"--errors-only\""
- :type '(repeat string)
- :tag "py-pylint-command-args"
- :group 'python-mode)
-
-(defvar py-pdbtrack-input-prompt "^[(<]*[Ii]?[Pp]y?db[>)]+ *"
- "Recognize the prompt.")
-
-(defcustom py-shell-input-prompt-1-regexp ">>> "
- "A regular expression to match the input prompt of the shell."
- :type 'regexp
- :tag "py-shell-input-prompt-1-regexp"
- :group 'python-mode)
-
-(defcustom py-shell-input-prompt-2-regexp "[.][.][.]:? "
- "A regular expression to match the input prompt.
-
-Applies to the shell after the first line of input."
- :type 'string
- :tag "py-shell-input-prompt-2-regexp"
- :group 'python-mode)
-
-(defvar py-shell-ipython-input-prompt-1-regexp "In \\[[0-9]+\\]: "
- "Regular Expression matching top-level input prompt of python shell.
-It should not contain a caret (^) at the beginning.")
-
-(defvar py-shell-ipython-input-prompt-2-regexp " \\.\\.\\.: "
- "Regular Expression matching top-level input prompt of python shell.
-It should not contain a caret (^) at the beginning.")
-
-(defcustom py-shell-input-prompt-2-regexps
- '(">>> " "\\.\\.\\. " ; Python
- "In \\[[0-9]+\\]: " ; IPython
- " \\.\\.\\.: " ; IPython
- ;; Using ipdb outside IPython may fail to cleanup and leave static
- ;; IPython prompts activated, this adds some safeguard for that.
- "In : " "\\.\\.\\.: ")
- "List of regular expressions matching input prompts."
- :type '(repeat string)
- :version "24.4"
- :group 'python-mode)
-
-(defcustom py-shell-input-prompt-regexps
- '(">>> " "\\.\\.\\. " ; Python
- "In \\[[0-9]+\\]: " ; IPython
- " \\.\\.\\.: " ; IPython
- ;; Using ipdb outside IPython may fail to cleanup and leave static
- ;; IPython prompts activated, this adds some safeguard for that.
- "In : " "\\.\\.\\.: ")
- "List of regular expressions matching input prompts."
- :type '(repeat regexp)
- :version "24.4"
- :group 'python-mode)
-
-(defvar py-ipython-output-prompt-re "^Out\\[[0-9]+\\]: "
- "A regular expression to match the output prompt of IPython.")
-
-(defcustom py-shell-output-prompt-regexps
- '("" ; Python
- "Out\\[[0-9]+\\]: " ; IPython
- "Out :") ; ipdb safeguard
- "List of regular expressions matching output prompts."
- :type '(repeat string)
- :version "24.4"
- :group 'python-mode)
-
-(defvar py-pydbtrack-input-prompt "^[(]*ipydb[>)]+ "
- "Recognize the pydb-prompt.")
-;; (setq py-pdbtrack-input-prompt "^[(< \t]*[Ii]?[Pp]y?db[>)]*.*")
-
-(defvar py-ipython-input-prompt-re "In \\[?[0-9 ]*\\]?: *\\|^[ ]\\{3\\}[.]\\{3,\\}: *"
- "A regular expression to match the IPython input prompt.")
-
-(defvar py-shell-prompt-regexp
- (concat "\\("
- (mapconcat 'identity
- (delq nil
- (list
- py-shell-input-prompt-1-regexp
- py-shell-input-prompt-2-regexp
- py-ipython-input-prompt-re
- py-ipython-output-prompt-re
- py-pdbtrack-input-prompt
- py-pydbtrack-input-prompt
- "[.]\\{3,\\}:? *"
- ))
- "\\|")
- "\\)")
- "Internally used by `py-fast-filter'.
-‘ansi-color-filter-apply’ might return
-Result: \"\\nIn [10]: ....: ....: ....: 1\\n\\nIn [11]: \"")
-
-(defvar py-fast-filter-re
- (concat "\\("
- (mapconcat 'identity
- (delq nil
- (list
- py-shell-input-prompt-1-regexp
- py-shell-input-prompt-2-regexp
- py-ipython-input-prompt-re
- py-ipython-output-prompt-re
- py-pdbtrack-input-prompt
- py-pydbtrack-input-prompt
- "[.]\\{3,\\}:? *"
- ))
- "\\|")
- "\\)")
- "Internally used by `py-fast-filter'.
-‘ansi-color-filter-apply’ might return
-Result: \"\\nIn [10]: ....: ....: ....: 1\\n\\nIn [11]: \"")
-
-(defcustom py-shell-prompt-detect-p nil
- "Non-nil enables autodetection of interpreter prompts."
- :type 'boolean
- :safe 'booleanp
- :version "24.4")
-
-(defcustom py-shell-prompt-read-only t
- "If non-nil, the python prompt is read only.
-
-Setting this variable will only effect new shells."
- :type 'boolean
- :tag "py-shell-prompt-read-only"
- :group 'python-mode)
-
-(setq py-fast-filter-re
- (concat "\\("
- (mapconcat 'identity
- (delq nil
- (list
- py-shell-input-prompt-1-regexp
- py-shell-input-prompt-2-regexp
- py-ipython-input-prompt-re
- py-ipython-output-prompt-re
- py-pdbtrack-input-prompt
- py-pydbtrack-input-prompt
- "[.]\\{3,\\}:? *"
- ))
- "\\|")
- "\\)"))
-
-(defcustom py-honor-IPYTHONDIR-p nil
- "When non-nil ipython-history file is constructed by $IPYTHONDIR.
-
-Default is nil.
-Otherwise value of ‘py-ipython-history’ is used."
- :type 'boolean
- :tag "py-honor-IPYTHONDIR-p"
- :group 'python-mode)
-
-(defcustom py-ipython-history "~/.ipython/history"
- "Ipython-history default file.
-
-Used when ‘py-honor-IPYTHONDIR-p’ is nil - th default"
-
- :type 'string
- :tag "py-ipython-history"
- :group 'python-mode)
-
-(defcustom py-honor-PYTHONHISTORY-p nil
- "When non-nil python-history file is set by $PYTHONHISTORY.
-
-Default is nil.
-Otherwise value of ‘py-python-history’ is used."
- :type 'boolean
- :tag "py-honor-PYTHONHISTORY-p"
- :group 'python-mode)
-
-(defcustom py-python-history "~/.python_history"
- "Python-history default file. Used when ‘py-honor-PYTHONHISTORY-p’ is nil (default)."
-
- :type 'string
- :tag "py-python-history"
- :group 'python-mode)
-
-(defcustom py-switch-buffers-on-execute-p nil
- "When non-nil switch to the Python output buffer.
-
-If `py-keep-windows-configuration' is t, this will take precedence over setting here."
-
- :type 'boolean
- :tag "py-switch-buffers-on-execute-p"
- :group 'python-mode)
-;; made buffer-local as pdb might need t in all circumstances
-(make-variable-buffer-local 'py-switch-buffers-on-execute-p)
-
-(defcustom py-split-window-on-execute 'just-two
- "When non-nil split windows.
-
-Default is just-two - when code is send to interpreter.
-Splits screen into source-code buffer and current ‘py-shell’ result.
-Other buffer will be hidden that way.
-
-When set to t, ‘python-mode’ tries to reuse existing windows
-and will split only if needed.
-
-With 'always, results will displayed in a new window.
-
-Both t and `always' is experimental still.
-
-For the moment: If a multitude of python-shells/buffers should be
-visible, open them manually and set `py-keep-windows-configuration' to t.
-
-See also `py-keep-windows-configuration'"
- :type '(choice
- (const :tag "default" just-two)
- (const :tag "reuse" t)
- (const :tag "no split" nil)
- (const :tag "just-two" just-two)
- (const :tag "always" always))
- :tag "py-split-window-on-execute"
- :group 'python-mode)
-
-(defun py-toggle-py-split-window-on-execute ()
- "Toggle between customized value and nil"
- (interactive)
- (setq py-split-window-on-execute (not py-split-window-on-execute))
- (when (interactive-p)
- (message "py-split-window-on-execute: %s" py-split-window-on-execute)
- py-split-window-on-execute))
-
-(defcustom py-split-window-on-execute-threshold 3
- "Maximal number of displayed windows.
-
-Honored, when `py-split-window-on-execute' is t, i.e. \"reuse\".
-Don't split when max number of displayed windows is reached."
- :type 'number
- :tag "py-split-window-on-execute-threshold"
- :group 'python-mode)
-
-(defcustom py-split-windows-on-execute-function 'split-window-vertically
- "How window should get splitted to display results of py-execute-... functions."
- :type '(choice (const :tag "split-window-vertically" split-window-vertically)
- (const :tag "split-window-horizontally" split-window-horizontally)
- )
- :tag "py-split-windows-on-execute-function"
- :group 'python-mode)
-
-(defcustom py-shell-fontify-p 'input
- "Fontify current input in Python shell. Default is input.
-
-INPUT will leave output unfontified.
-
-At any case only current input gets fontified."
- :type '(choice (const :tag "Default" all)
- (const :tag "Input" input)
- (const :tag "Nil" nil)
- )
- :tag "py-shell-fontify-p"
- :group 'python-mode)
-
-(defcustom py-hide-show-keywords
- '("class" "def" "elif" "else" "except"
- "for" "if" "while" "finally" "try"
- "with")
- "Keywords composing visible heads."
- :type '(repeat string)
- :tag "py-hide-show-keywords
-"
- :group 'python-mode)
-
-(defcustom py-hide-show-hide-docstrings t
- "Controls if doc strings can be hidden by hide-show."
- :type 'boolean
- :tag "py-hide-show-hide-docstrings"
- :group 'python-mode)
-
-(defcustom py-hide-comments-when-hiding-all t
- "Hide the comments too when you do an `hs-hide-all'."
- :type 'boolean
- :tag "py-hide-comments-when-hiding-all"
- :group 'python-mode)
-
-(defcustom py-outline-mode-keywords
- '("class" "def" "elif" "else" "except"
- "for" "if" "while" "finally" "try"
- "with")
- "Keywords composing visible heads."
- :type '(repeat string)
- :tag "py-outline-mode-keywords
-"
- :group 'python-mode)
-
-(defcustom python-mode-hook nil
- "Hook run when entering Python mode."
-
- :type 'hook
- :tag "python-mode-hook"
- :group 'python-mode
- )
-
-(defcustom py-shell-name
- (if (eq system-type 'windows-nt)
- "C:/Python27/python"
- ;; "python"
- "python")
-
- "A PATH/TO/EXECUTABLE or default value `py-shell' may look for.
-
-If no shell is specified by command.
-
-On Windows default is C:/Python27/python
---there is no garantee it exists, please check your system--
-
-Else python"
- :type 'string
- :tag "py-shell-name
-"
- :group 'python-mode)
-
-(defvar py-default-interpreter py-shell-name)
-
-(defvar py-tempfile nil
- "Internally used.")
-
-(defcustom py-python-command
- (if (eq system-type 'windows-nt)
- ;; "C:\\Python27\\python.exe"
- "python"
- ;; "C:/Python33/Lib/site-packages/IPython"
- "python")
-
- "Make sure directory in in the PATH-variable.
-
-Windows: edit in \"Advanced System Settings/Environment Variables\"
-Commonly \"C:\\\\Python27\\\\python.exe\"
-With Anaconda for example the following works here:
-\"C:\\\\Users\\\\My-User-Name\\\\Anaconda\\\\Scripts\\\\python.exe\"
-
-Else /usr/bin/python"
-
- :type 'string
- :tag "py-python-command
-"
- :group 'python-mode)
-
-(defcustom py-python-command-args '("-i")
- "String arguments to be used when starting a Python shell."
- :type '(repeat string)
- :tag "py-python-command-args"
- :group 'python-mode)
-
-(defcustom py-python2-command
- (if (eq system-type 'windows-nt)
- "C:\\Python27\\python"
- ;; "python2"
- "python2")
-
- "Make sure, the directory where python.exe resides in in the PATH-variable.
-
-Windows: If needed, edit in
-\"Advanced System Settings/Environment Variables\"
-Commonly
-\"C:\\\\Python27\\\\python.exe\"
-With Anaconda for example the following works here:
-\"C:\\\\Users\\\\My-User-Name\\\\Anaconda\\\\Scripts\\\\python.exe\"
-
-Else /usr/bin/python"
-
- :type 'string
- :tag "py-python2-command
-"
- :group 'python-mode)
-
-(defcustom py-python2-command-args '("-i")
- "String arguments to be used when starting a Python shell."
- :type '(repeat string)
- :tag "py-python2-command-args"
- :group 'python-mode)
-
-;; "/usr/bin/python3"
-(defcustom py-python3-command
- (if (eq system-type 'windows-nt)
- "C:/Python33/python"
- "python3")
-
- "A PATH/TO/EXECUTABLE or default value `py-shell' may look for.
-
-Unless shell is specified by command.
-
-On Windows see C:/Python3/python.exe
---there is no garantee it exists, please check your system--
-
-At GNU systems see /usr/bin/python3"
-
- :type 'string
- :tag "py-python3-command
-"
- :group 'python-mode)
-
-(defcustom py-python3-command-args '("-i")
- "String arguments to be used when starting a Python3 shell."
- :type '(repeat string)
- :tag "py-python3-command-args"
- :group 'python-mode)
-
-(defcustom py-ipython-command
- (if (eq system-type 'windows-nt)
- ;; "ipython"
- "C:\\Python27\\python"
- ;; "C:/Python33/Lib/site-packages/IPython"
- ;; "/usr/bin/ipython"
- "ipython")
-
- "A PATH/TO/EXECUTABLE or default value.
-
-`M-x IPython RET' may look for,
-Unless IPython-shell is specified by command.
-
-On Windows default is \"C:\\\\Python27\\\\python.exe\"
-While with Anaconda for example the following works here:
-\"C:\\\\Users\\\\My-User-Name\\\\Anaconda\\\\Scripts\\\\ipython.exe\"
-
-Else /usr/bin/ipython"
-
- :type 'string
- :tag "py-ipython-command
-"
- :group 'python-mode)
-
-(defcustom py-ipython-command-args
- (if (eq system-type 'windows-nt)
- '("-i" "C:\\Python27\\Scripts\\ipython-script.py")
- ;; --simple-prompt seems to exist from IPython 5.
- (if (string-match "^[0-4]" (shell-command-to-string (concat "ipython" " -V")))
- '("--pylab" "--automagic")
- '("--pylab" "--automagic" "--simple-prompt")))
- "String arguments to be used when starting a IPython shell.
-
-At Windows make sure ipython-script.py is PATH.
-Also setting PATH/TO/SCRIPT here should work, for example;
-C:\\Python27\\Scripts\\ipython-script.py
-With Anaconda the following is known to work:
-\"C:\\\\Users\\\\My-User-Name\\\\Anaconda\\\\Scripts\\\\ipython-script-py\""
- :type '(repeat string)
- :tag "py-ipython-command-args"
- :group 'python-mode)
-
-(defcustom py-jython-command
- (if (eq system-type 'windows-nt)
- '("jython")
- '("/usr/bin/jython"))
-
- "A PATH/TO/EXECUTABLE or default value.
-`M-x Jython RET' may look for, if no Jython-shell is specified by command.
-
-Not known to work at windows
-Default /usr/bin/jython"
-
- :type '(repeat string)
- :tag "py-jython-command
-"
- :group 'python-mode)
-
-(defcustom py-jython-command-args '("-i")
- "String arguments to be used when starting a Jython shell."
- :type '(repeat string)
- :tag "py-jython-command-args"
- :group 'python-mode)
-
-(defcustom py-shell-toggle-1 py-python2-command
- "A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'."
- :type 'string
- :tag "py-shell-toggle-1"
- :group 'python-mode)
-
-(defcustom py-shell-toggle-2 py-python3-command
- "A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'."
- :type 'string
- :tag "py-shell-toggle-2"
- :group 'python-mode)
-
-(defcustom py--imenu-create-index-p nil
- "Non-nil means Python mode creates and displays an index menu of functions and global variables."
- :type 'boolean
- :tag "py--imenu-create-index-p"
- :group 'python-mode)
-
-(defvar py-history-filter-regexp "\\`\\s-*\\S-?\\S-?\\s-*\\'\\|'''/tmp/"
- "Input matching this regexp is not saved on the history list.
-Default ignores all inputs of 0, 1, or 2 non-blank characters.")
-
-(defvar py-cleanup-p nil
- "Internally used.
-
-Cleanup Python shell when output is used in other places.")
-
-(defcustom py-match-paren-mode nil
- "Non-nil means, cursor will jump to beginning or end of a block.
-This vice versa, to beginning first.
-Sets `py-match-paren-key' in ‘python-mode-map’.
-Customize `py-match-paren-key' which key to use."
- :type 'boolean
- :tag "py-match-paren-mode"
- :group 'python-mode)
-
-(defcustom py-match-paren-key "%"
- "String used by \\[comment-region] to comment out a block of code.
-This should follow the convention for non-indenting comment lines so
-that the indentation commands won't get confused (i.e., the string
-should be of the form `#x...' where `x' is not a blank or a tab, and
- `...' is arbitrary). However, this string should not end in whitespace."
- :type 'string
- :tag "py-match-paren-key"
- :group 'python-mode)
-
-(defcustom py-kill-empty-line t
- "If t, ‘py-indent-forward-line’ kills empty lines."
- :type 'boolean
- :tag "py-kill-empty-line"
- :group 'python-mode)
-
-(defcustom py-imenu-show-method-args-p nil
- "Controls echoing of arguments of functions & methods in the Imenu buffer.
-When non-nil, arguments are printed."
- :type 'boolean
- :tag "py-imenu-show-method-args-p"
- :group 'python-mode)
-
-(defcustom py-use-local-default nil
- "If t, ‘py-shell’ will use `py-shell-local-path'.
-
-Alternative to default Python.
-
-Making switch between several virtualenv's easier,
- `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available."
- :type 'boolean
- :tag "py-use-local-default"
- :group 'python-mode)
-
-(defcustom py-edit-only-p nil
- "Don't check for installed Python executables.
-
-Default is nil.
-
-See bug report at launchpad, lp:944093."
- :type 'boolean
- :tag "py-edit-only-p"
- :group 'python-mode)
-
-(defcustom py-force-py-shell-name-p nil
- "When t, execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence."
-
- :type 'boolean
- :tag "py-force-py-shell-name-p"
- :group 'python-mode)
-
-(defcustom python-mode-v5-behavior-p nil
- "Execute region through `shell-command-on-region'.
-
-As v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661"
-
- :type 'boolean
- :tag "python-mode-v5-behavior-p"
- :group 'python-mode)
-
-(defun py-toggle-python-mode-v5-behavior ()
- "Switch the values of ‘python-mode-v5-behavior-p’"
- (interactive)
- (setq python-mode-v5-behavior-p (not python-mode-v5-behavior-p))
- (when (interactive-p) (message "python-mode-v5-behavior-p: %s" python-mode-v5-behavior-p)))
-
-(defun py-toggle-py-verbose-p ()
- "Switch the values of ‘py-verbose-p-p’
-
-Default is nil.
-If on, messages value of ‘py-result’ for instance."
- (interactive)
- (setq py-verbose-p-p (not py-verbose-p-p))
- (when (interactive-p) (message "py-verbose-p-p: %s" py-verbose-p-p)))
-
-(defcustom py-trailing-whitespace-smart-delete-p nil
- "Default is nil.
-
-When t, ‘python-mode’ calls
-\(add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local)
-
-Also commands may delete trailing whitespace by the way.
-When editing other peoples code, this may produce a larger diff than expected"
- :type 'boolean
- :tag "py-trailing-whitespace-smart-delete-p"
- :group 'python-mode)
-
-(defcustom py-newline-delete-trailing-whitespace-p t
- "Delete trailing whitespace maybe left by `py-newline-and-indent'.
-
-Default is t. See lp:1100892"
- :type 'boolean
- :tag "py-newline-delete-trailing-whitespace-p"
- :group 'python-mode)
-
-(defcustom py--warn-tmp-files-left-p nil
- "Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534."
- :type 'boolean
- :tag "py--warn-tmp-files-left-p"
- :group 'python-mode)
-
-(defcustom py-complete-ac-sources '(ac-source-pycomplete)
- "List of ‘auto-complete’ sources assigned to `ac-sources'.
-
-In `py-complete-initialize'.
-
-Default is known to work an Ubuntu 14.10 - having python-
-mode, pymacs and auto-complete-el, with the following minimal
-Emacs initialization:
-
-\(require 'pymacs)
-\(require 'auto-complete-config)
-\(ac-config-default)"
- :type 'hook
- :tag "py-complete-ac-sources"
- :options '(ac-source-pycomplete ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers)
- :group 'python-mode)
-
-(defcustom py-remove-cwd-from-path t
- "Whether to allow loading of Python modules from the current directory.
-If this is non-nil, Emacs removes '' from sys.path when starting
-a Python process. This is the default, for security
-reasons, as it is easy for the Python process to be started
-without the user's realization (e.g. to perform completion)."
- :type 'boolean
- :tag "py-remove-cwd-from-path"
- :group 'python-mode)
-
-(defcustom py-shell-local-path ""
- "If `py-use-local-default' is non-nil, `py-shell' will use EXECUTABLE indicated here incl. path."
-
- :type 'string
- :tag "py-shell-local-path"
- :group 'python-mode)
-
-(defcustom py-python-edit-version ""
- "When not empty, fontify according to Python version specified.
-
-Default is the empty string, a useful value \"python3\" maybe.
-
-When empty, version is guessed via `py-choose-shell'."
-
- :type 'string
- :tag "py-python-edit-version"
- :group 'python-mode)
-
-(defcustom py-ipython-execute-delay 0.3
- "Delay needed by execute functions when no IPython shell is running."
- :type 'float
- :tag "py-ipython-execute-delay"
- :group 'python-mode)
-
-(defvar py-shell-completion-setup-code
- "try:
- import readline
-except ImportError:
- def __COMPLETER_all_completions(text): []
-else:
- import rlcompleter
- readline.set_completer(rlcompleter.Completer().complete)
- def __COMPLETER_all_completions(text):
- import sys
- completions = []
- try:
- i = 0
- while True:
- res = readline.get_completer()(text, i)
- if not res: break
- i += 1
- completions.append(res)
- except NameError:
- pass
- return completions"
- "Code used to setup completion in Python processes.")
-
-(defvar py-shell-module-completion-code "';'.join(__COMPLETER_all_completions('''%s'''))"
- "Python code used to get completions separated by semicolons for imports.")
-
-(defvar py-ipython-module-completion-code
- "import IPython
-version = IPython.__version__
-if \'0.10\' < version:
- from IPython.core.completerlib import module_completion
-"
- "For IPython v0.11 or greater.
-Use the following as the value of this variable:
-
-';'.join(module_completion('''%s'''))")
-
-(defvar py-ipython-module-completion-string
- "';'.join(module_completion('''%s'''))"
- "See also `py-ipython-module-completion-code'.")
-
-(defcustom py--imenu-create-index-function 'py--imenu-index
- "Switch between `py--imenu-create-index-new', which also lists modules variables, and series 5. index-machine."
- :type '(choice
- (const :tag "'py--imenu-create-index-new, also lists modules variables " py--imenu-create-index-new)
-
- (const :tag "py--imenu-create-index, series 5. index-machine" py--imenu-create-index)
- (const :tag "py--imenu-index, honor type annotations" py--imenu-index)
-
- )
- :tag "py--imenu-create-index-function"
- :group 'python-mode)
-
-(defvar py-line-re "^"
- "Used by generated functions." )
-
-(defvar py-input-filter-re "\\`\\s-*\\S-?\\S-?\\s-*\\'"
- "Input matching this regexp is not saved on the history list.
-Default ignores all inputs of 0, 1, or 2 non-blank characters.")
-
-(defvar strip-chars-before "\\`[ \t\r\n]*"
- "Regexp indicating which chars shall be stripped before STRING - which is defined by `string-chars-preserve'.")
-
-(defvar strip-chars-after "[ \t\r\n]*\\'"
- "Regexp indicating which chars shall be stripped after STRING - which is defined by `string-chars-preserve'.")
-
-(defcustom py-docstring-style 'pep-257-nn
- "Implemented styles:
-
- are DJANGO, ONETWO, PEP-257, PEP-257-NN,SYMMETRIC, and NIL.
-
-A value of NIL won't care about quotes
-position and will treat docstrings a normal string, any other
-value may result in one of the following docstring styles:
-
-DJANGO:
-
- \"\"\"
- Process foo, return bar.
- \"\"\"
-
- \"\"\"
- Process foo, return bar.
-
- If processing fails throw ProcessingError.
- \"\"\"
-
-ONETWO:
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"
- Process foo, return bar.
-
- If processing fails throw ProcessingError.
-
- \"\"\"
-
-PEP-257:
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"Process foo, return bar.
-
- If processing fails throw ProcessingError.
-
- \"\"\"
-
-PEP-257-NN:
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"Process foo, return bar.
-
- If processing fails throw ProcessingError.
- \"\"\"
-
-SYMMETRIC:
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"
- Process foo, return bar.
-
- If processing fails throw ProcessingError.
- \"\"\""
- :type '(choice
-
- (const :tag "Don't format docstrings" nil)
- (const :tag "Django's coding standards style." django)
- (const :tag "One newline and start and Two at end style." onetwo)
- (const :tag "PEP-257 with 2 newlines at end of string." pep-257)
- (const :tag "PEP-257 with 1 newline at end of string." pep-257-nn)
- (const :tag "Symmetric style." symmetric))
- :tag "py-docstring-style"
- :group 'python-mode)
-
-(defcustom py-execute-directory nil
- "Stores the file's default directory-name py-execute-... functions act upon.
-
-Used by Python-shell for output of `py-execute-buffer' and related commands.
-See also `py-use-current-dir-when-execute-p'"
- :type 'string
- :tag "py-execute-directory"
- :group 'python-mode)
-
-(defcustom py-use-current-dir-when-execute-p t
- "Current directory used for output.
-
-See also `py-execute-directory'"
- :type 'boolean
- :tag "py-use-current-dir-when-execute-p"
- :group 'python-mode)
-
-(defcustom py-keep-shell-dir-when-execute-p nil
- "Don't change Python shell's current working directory when sending code.
-
-See also `py-execute-directory'"
- :type 'boolean
- :tag "py-keep-shell-dir-when-execute-p"
- :group 'python-mode)
-
-(defcustom py-fileless-buffer-use-default-directory-p t
- "When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shell."
- :type 'boolean
- :tag "py-fileless-buffer-use-default-directory-p"
- :group 'python-mode)
-
-(defcustom py-check-command "pychecker --stdlib"
- "Command used to check a Python file."
- :type 'string
- :tag "py-check-command"
- :group 'python-mode)
-
-(defvar py-this-abbrevs-changed nil
- "Internally used by ‘python-mode-hook’.")
-
-(defvar py-buffer-name nil
- "Internal use.
-
-The buffer last output was sent to.")
-
-(defvar py-orig-buffer-or-file nil
- "Internal use.")
-
-(defcustom py-keep-windows-configuration nil
- "Takes precedence over:
-
- `py-split-window-on-execute' and `py-switch-buffers-on-execute-p'.
-See lp:1239498
-
-To suppres window-changes due to error-signaling also.
-Set `py-keep-windows-configuration' onto 'force
-
-Default is nil"
-
- :type '(choice
- (const :tag "nil" nil)
- (const :tag "t" t)
- (const :tag "force" 'force))
- :tag "py-keep-windows-configuration"
- :group 'python-mode)
-
-(defvar py-output-buffer "*Python Output*"
- "Used if ‘python-mode-v5-behavior-p’ is t.
-
-Otherwise output buffer is created dynamically according to Python version and kind of process-handling")
-;; (make-variable-buffer-local 'py-output-buffer)
-
-(defcustom py-force-default-output-buffer-p nil
- "Enforce sending output to the default output ‘buffer-name’.
-
-Set by defvar ‘py-output-buffer’
-Bug #31 - wrong fontification caused by string-delimiters in output"
-
- :type 'boolean
- :tag "py-force-default-output-buffer-p"
- :group 'python-mode)
-
-(defcustom py-shell-unbuffered t
- "Should shell output be unbuffered?.
-When non-nil, this may prevent delayed and missing output in the
-Python shell. See commentary for details."
- :type 'boolean
- :group 'python-mode
- :safe 'booleanp)
-
-(defcustom py-shell-process-environment nil
- "List of overridden environment variables for subprocesses to inherit.
-Each element should be a string of the form ENVVARNAME=VALUE.
-When this variable is non-nil, values are exported into the
-process environment before starting it. Any variables already
-present in the current environment are superseded by variables
-set here."
- :type '(repeat string)
- :group 'python-mode)
-
-(defcustom py-shell-extra-pythonpaths nil
- "List of extra pythonpaths for Python shell.
-When this variable is non-nil, values added at the beginning of
-the PYTHONPATH before starting processes. Any values present
-here that already exists in PYTHONPATH are moved to the beginning
-of the list so that they are prioritized when looking for
-modules."
- :type '(repeat string)
- :group 'python-mode)
-
-(defcustom py-shell-exec-path nil
- "List of paths for searching executables.
-When this variable is non-nil, values added at the beginning of
-the PATH before starting processes. Any values present here that
-already exists in PATH are moved to the beginning of the list so
-that they are prioritized when looking for executables."
- :type '(repeat string)
- :group 'python-mode)
-
-(defcustom py-shell-remote-exec-path nil
- "List of paths to be ensured remotely for searching executables.
-When this variable is non-nil, values are exported into remote
-hosts PATH before starting processes. Values defined in
-`py-shell-exec-path' will take precedence to paths defined
-here. Normally you wont use this variable directly unless you
-plan to ensure a particular set of paths to all Python shell
-executed through tramp connections."
- :version "25.1"
- :type '(repeat string)
- :group 'python-mode)
-
-(defcustom py-shell-virtualenv-root nil
- "Path to virtualenv root.
-This variable, when set to a string, makes the environment to be
-modified such that shells are started within the specified
-virtualenv."
- :type '(choice (const nil) string)
- :group 'python-mode)
-
-(defvar py-eldoc-window-configuration nil
- "Keeps window-configuration when function ‘eldoc-mode’ is called.")
-
-(defvar py-eldoc-setup-code
- "def __PYDOC_get_help(obj):
- try:
- import inspect
- if hasattr(obj, 'startswith'):
- obj = eval(obj, globals())
- doc = inspect.getdoc(obj)
- if not doc and callable(obj):
- target = None
- if inspect.isclass(obj) and hasattr(obj, '__init__'):
- target = obj.__init__
- objtype = 'class'
- else:
- target = obj
- objtype = 'def'
- if target:
- args = inspect.formatargspec(
- *inspect.getargspec(target))
- name = obj.__name__
- doc = '{objtype} {name}{args}'.format(
- objtype=objtype, name=name, args=args)
- else:
- doc = doc.splitlines()[0]
- except:
- doc = ''
- try:
- exec('print doc')
- except SyntaxError:
- print(doc)"
- "Python code to setup documentation retrieval.")
-
-(defcustom py-python-eldoc-setup-code
- "def __PYDOC_get_help(obj):
- try:
- import inspect
- try:
- str_type = basestring
- argspec_function = inspect.getargspec
- except NameError:
- str_type = str
- argspec_function = inspect.getfullargspec
- if isinstance(obj, str_type):
- obj = eval(obj, globals())
- doc = inspect.getdoc(obj)
- if not doc and callable(obj):
- target = None
- if inspect.isclass(obj) and hasattr(obj, '__init__'):
- target = obj.__init__
- objtype = 'class'
- else:
- target = obj
- objtype = 'def'
- if target:
- args = inspect.formatargspec(*argspec_function(target))
- name = obj.__name__
- doc = '{objtype} {name}{args}'.format(
- objtype=objtype, name=name, args=args
- )
- else:
- doc = doc.splitlines()[0]
- except:
- doc = ''
- return doc"
- "Python code to setup documentation retrieval."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-python-eldoc-string-code
- "__PYDOC_get_help('''%s''')"
- "Python code used to get a string with the documentation of an object."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-python-ffap-setup-code
- "
-def __FFAP_get_module_path(objstr):
- try:
- import inspect
- import os.path
- # NameError exceptions are delayed until this point.
- obj = eval(objstr)
- module = inspect.getmodule(obj)
- filename = module.__file__
- ext = os.path.splitext(filename)[1]
- if ext in ('.pyc', '.pyo'):
- # Point to the source file.
- filename = filename[:-1]
- if os.path.exists(filename):
- return filename
- return ''
- except:
- return ''"
- "Python code to get a module path."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-python-ffap-string-code
- "__FFAP_get_module_path('''%s''')"
- "Python code used to get a string with the path of a module."
- :type 'string
- :group 'python-mode)
-
-(defvar py-shell-completion-native-redirect-buffer
- " *Py completions redirect*"
- "Buffer to be used to redirect output of readline commands.")
-
-(defvar py-shell--block-prompt nil
- "Input block prompt for inferior python shell.
-Do not set this variable directly, instead use
-`py-shell-prompt-set-calculated-regexps'.")
-
-(defvar py-shell-output-filter-in-progress nil)
-(defvar py-shell-output-filter-buffer nil)
-
-(defvar py-shell--prompt-calculated-input-regexp nil
- "Calculated input prompt regexp for inferior python shell.
-Do not set this variable directly.
-
-Iff ‘py-shell--prompt-calculated-input-regexp’
-or ‘py-shell--prompt-calculated-output-regexp’ are set
-‘py-shell-prompt-set-calculated-regexps’ isn't run.")
-
-(defvar py-shell--prompt-calculated-output-regexp nil
- "Calculated output prompt regexp for inferior python shell.
-
-py-shell-prompt-set-calculated-regexps
-Do not set this variable directly.
-
-Iff ‘py-shell--prompt-calculated-input-regexp’
-or ‘py-shell--prompt-calculated-output-regexp’ are set
-‘py-shell-prompt-set-calculated-regexps’ isn't run.
-")
-
-;; make sure it exists here
-(unless (boundp 'py-rx-constituents)
- (eval-and-compile
- (defconst py-rx-constituents
- `((block-start . ,(rx symbol-start
- (or "def" "class" "if" "elif" "else" "try"
- "except" "finally" "for" "while" "with"
- ;; Python 3.5+ PEP492
- (and "async" (+ space)
- (or "def" "for" "with")))
- symbol-end))
- (dedenter . ,(rx symbol-start
- (or "elif" "else" "except" "finally")
- symbol-end))
- (block-ender . ,(rx symbol-start
- (or
- "break" "continue" "pass" "raise" "return")
- symbol-end))
- (decorator . ,(rx line-start (* space) ?@ (any letter ?_)
- (* (any word ?_))))
- ;; probably useless here
- (defun . ,(rx symbol-start
- (or "def" "class"
- ;; Python 3.5+ PEP492
- (and "async" (+ space) "def"))
- symbol-end))
- (def . ,(rx symbol-start
- (or "def"
- ;; Python 3.5+ PEP492
- (and "async" (+ space) "def"))
- symbol-end))
- (class . ,(rx symbol-start
- (or "class"
- ;; Python 3.5+ PEP492
- (and "async" (+ space) "class"))
- symbol-end))
- (def-or-class . ,(rx symbol-start
- (or "def" "class"
- ;; Python 3.5+ PEP492
- (and "async" (+ space) (or "def" "class")))
- symbol-end))
- (if-name-main . ,(rx line-start "if" (+ space) "__name__"
- (+ space) "==" (+ space)
- (any ?' ?\") "__main__" (any ?' ?\")
- (* space) ?:))
- (symbol-name . ,(rx (any letter ?_) (* (any word ?_))))
- (open-paren . ,(rx (or "{" "[" "(")))
- (close-paren . ,(rx (or "}" "]" ")")))
- (simple-operator . ,(rx (any ?+ ?- ?/ ?& ?^ ?~ ?| ?* ?< ?> ?= ?%)))
- ;; FIXME: rx should support (not simple-operator).
- (not-simple-operator . ,(rx
- (not
- (any ?+ ?- ?/ ?& ?^ ?~ ?| ?* ?< ?> ?= ?%))))
- ;; FIXME: Use regexp-opt.
- (operator . ,(rx (or "+" "-" "/" "&" "^" "~" "|" "*" "<" ">"
- "=" "%" "**" "//" "<<" ">>" "<=" "!="
- "==" ">=" "is" "not")))
- ;; FIXME: Use regexp-opt.
- (assignment-operator . ,(rx (or "=" "+=" "-=" "*=" "/=" "//=" "%=" "**="
- ">>=" "<<=" "&=" "^=" "|=")))
- (string-delimiter . ,(rx (and
- ;; Match even number of backslashes.
- (or (not (any ?\\ ?\' ?\")) point
- ;; Quotes might be preceded by an escaped quote.
- (and (or (not (any ?\\)) point) ?\\
- (* ?\\ ?\\) (any ?\' ?\")))
- (* ?\\ ?\\)
- ;; Match single or triple quotes of any kind.
- (group (or "\"\"\"" "\"" "'''" "'")))))
- (coding-cookie . ,(rx line-start ?# (* space)
- (or
- ;; # coding=<encoding name>
- (: "coding" (or ?: ?=) (* space) (group-n 1 (+ (or word ?-))))
- ;; # -*- coding: <encoding name> -*-
- (: "-*-" (* space) "coding:" (* space)
- (group-n 1 (+ (or word ?-))) (* space) "-*-")
- ;; # vim: set fileencoding=<encoding name> :
- (: "vim:" (* space) "set" (+ space)
- "fileencoding" (* space) ?= (* space)
- (group-n 1 (+ (or word ?-))) (* space) ":")))))
- "Additional Python specific sexps for `py-rx'")
-
- (defmacro py-rx (&rest regexps)
- "Python mode specialized rx macro.
-This variant of `rx' supports common Python named REGEXPS."
- (let ((rx-constituents (append py-rx-constituents rx-constituents)))
- (cond ((null regexps)
- (error "No regexp"))
- ((cdr regexps)
- (rx-to-string `(and ,@regexps) t))
- (t
- (rx-to-string (car regexps) t)))))))
-
-(defvar py-shell-prompt-output-regexp ""
- "See py-shell-prompt-output-regexps")
-
-(defvar py-shell-prompt-output-regexps
- '("" ; Python
- "Out\\[[0-9]+\\]: " ; IPython
- "Out :") ; ipdb safeguard
- "List of regular expressions matching output prompts.")
-
-(defvar py-underscore-word-syntax-p t
- "This is set later by defcustom, only initial value here.
-
-If underscore chars should be of ‘syntax-class’ `word', not of `symbol'.
-Underscores in word-class makes `forward-word'.
-Travels the indentifiers. Default is t.
-See also command `toggle-py-underscore-word-syntax-p'")
-
-(defvar py-autofill-timer nil)
-(defvar py-fill-column-orig fill-column)
-
-;; defvared value isn't updated maybe
-(defvar python-mode-message-string
- (if (or (string= "python-mode.el" (buffer-name))
- (ignore-errors (string-match "python-mode.el" (py--buffer-filename-remote-maybe))))
- "python-mode.el"
- "python-components-mode")
- "Internally used. Reports the ‘python-mode’ branch.")
-
-;; defvared value isn't updated maybe
-(setq python-mode-message-string
- (if (or (string= "python-mode.el" (buffer-name))
- (ignore-errors (string-match "python-mode.el" (py--buffer-filename-remote-maybe))))
- "python-mode.el"
- "python-components-mode"))
-
-(unless (fboundp 'string-to-syntax)
- ;; Skip's XE workaround
- (defun string-to-syntax (s)
- (cond
- ((equal s "|") '(15))
- ((equal s "_") '(3))
- (t (error "Unhandled string: %s" s)))))
-
-(defvar python-mode-syntax-table nil
- "Give punctuation syntax to ASCII that normally has symbol.
-
-Syntax or has word syntax and isn't a letter.")
-
-(setq python-mode-syntax-table
- (let ((table (make-syntax-table)))
- ;; Give punctuation syntax to ASCII that normally has symbol
- ;; syntax or has word syntax and isn't a letter.
- (let ((symbol (string-to-syntax "_"))
- (sst (standard-syntax-table)))
- (dotimes (i 128)
- (unless (= i ?_)
- (if (equal symbol (aref sst i))
- (modify-syntax-entry i "." table)))))
- (modify-syntax-entry ?$ "." table)
- (modify-syntax-entry ?% "." table)
- ;; exceptions
- (modify-syntax-entry ?# "<" table)
- (modify-syntax-entry ?\n ">" table)
- (modify-syntax-entry ?' "\"" table)
- (modify-syntax-entry ?` "$" table)
- (if py-underscore-word-syntax-p
- (modify-syntax-entry ?\_ "w" table)
- (modify-syntax-entry ?\_ "_" table))
- table))
-
-(defvar py-local-command nil
- "Returns locally used executable-name.")
-(make-variable-buffer-local 'py-local-command)
-
-(defvar py-local-versioned-command nil
- "Returns locally used executable-name including its version.")
-(make-variable-buffer-local 'py-local-versioned-command)
-
-(defvar py-ipython-completion-command-string nil
- "Select command according to IPython version.
-
-Either ‘py-ipython0.10-completion-command-string’
-or ‘py-ipython0.11-completion-command-string’.
-
-‘py-ipython0.11-completion-command-string’ also covers version 0.12")
-
-(defvar py-ipython0.10-completion-command-string
- "print(';'.join(__IP.Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n"
- "The string send to ipython to query for all possible completions.")
-
-(defvar py-ipython0.11-completion-command-string
- "print(';'.join(get_ipython().Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n"
- "The string send to ipython to query for all possible completions.")
-
-(defvar py-encoding-string-re "^[ \t]*#[ \t]*-\\*-[ \t]*coding:.+-\\*-"
- "Matches encoding string of a Python file.")
-
-(defvar py-shebang-regexp "#![ \t]?\\([^ \t\n]+\\)[ \t]*\\([biptj]+ython[^ \t\n]*\\)"
- "Detecting the shell in head of file.")
-;; (setq py-shebang-regexp "#![ \t]?\\([^ \t\n]+\\)[ \t]*\\([biptj]+ython[^ \t\n]*\\)")
-
-(defvar py-separator-char "/"
- "Values set by defcustom only will not be seen in batch-mode.")
-
-(defvar py-temp-directory
- (let ((ok '(lambda (x)
- (and x
- (setq x (expand-file-name x)) ; always true
- (file-directory-p x)
- (file-writable-p x)
- x)))
- erg)
- (or
- (and (not (string= "" py-custom-temp-directory))
- (if (funcall ok py-custom-temp-directory)
- (setq erg (expand-file-name py-custom-temp-directory))
- (if (file-directory-p (expand-file-name py-custom-temp-directory))
- (error "Py-custom-temp-directory set but not writable")
- (error "Py-custom-temp-directory not an existing directory"))))
- (and (funcall ok (getenv "TMPDIR"))
- (setq erg (getenv "TMPDIR")))
- (and (funcall ok (getenv "TEMP/TMP"))
- (setq erg (getenv "TEMP/TMP")))
- (and (funcall ok "/usr/tmp")
- (setq erg "/usr/tmp"))
- (and (funcall ok "/tmp")
- (setq erg "/tmp"))
- (and (funcall ok "/var/tmp")
- (setq erg "/var/tmp"))
- (and (eq system-type 'darwin)
- (funcall ok "/var/folders")
- (setq erg "/var/folders"))
- (and (or (eq system-type 'ms-dos)(eq system-type 'windows-nt))
- (funcall ok (concat "c:" py-separator-char "Users"))
- (setq erg (concat "c:" py-separator-char "Users")))
- ;; (funcall ok ".")
- (error
- "Couldn't find a usable temp directory -- set `py-temp-directory'"))
- (when erg (setq py-temp-directory erg)))
- "Directory used for temporary files created by a *Python* process.
-By default, guesses the first directory from this list that exists and that you
-can write into: the value (if any) of the environment variable TMPDIR,
- /usr/tmp, /tmp, /var/tmp, or the current directory.
-
- `py-custom-temp-directory' will take precedence when setq")
-
-(defvar py-exec-command nil
- "Internally used.")
-
-(defvar py-which-bufname "Python")
-
-(defvar py-pychecker-history nil)
-
-(defvar py-pyflakes-history nil)
-
-(defvar py-pep8-history nil)
-
-(defvar py-pyflakespep8-history nil)
-
-(defvar py-pylint-history nil)
-
-(defvar py-mode-output-map nil
- "Keymap used in *Python Output* buffers.")
-
-(defvar hs-hide-comments-when-hiding-all t
- "Defined in hideshow.el, silence compiler warnings here.")
-
-(defvar py-force-local-shell-p nil
- "Used internally, see `toggle-force-local-shell'.")
-
-(defvar py-shell-complete-debug nil
- "For interal use when debugging, stores completions." )
-
-(defcustom py-debug-p nil
- "When non-nil, keep resp. store information useful for debugging.
-
-Temporary files are not deleted. Other functions might implement
-some logging etc."
- :type 'boolean
- :tag "py-debug-p"
- :group 'python-mode)
-
-(defcustom py-shell-complete-p nil
- "Enable native completion.
-
-Set TAB accordingly. "
-
- :type 'boolean
- :group 'python-mode)
-(make-variable-buffer-local 'py-shell-complete-p)
-
-(defcustom py-section-start "# {{"
- "Delimit arbitrary chunks of code."
- :type 'string
- :tag "py-section-start"
- :group 'python-mode)
-
-(defcustom py-section-end "# }}"
- "Delimit arbitrary chunks of code."
- :type 'string
- :tag "py-section-end"
- :group 'python-mode)
-
-(defvar py-section-re py-section-start)
-
-(defvar py-last-window-configuration nil
- "Internal use: restore ‘py-restore-window-configuration’ when completion is done resp. abandoned.")
-
-(defvar py-exception-buffer nil
- "Will be set internally, let-bound, remember source buffer where error might occur.")
-
-(defvar py-string-delim-re "\\(\"\"\"\\|'''\\|\"\\|'\\)"
- "When looking at beginning of string.")
-
-(defvar py-labelled-re "[ \\t]*:[[:graph:]]+"
- "When looking at label.")
-;; (setq py-labelled-re "[ \\t]*:[[:graph:]]+")
-
-(defvar py-expression-skip-regexp "[^ (=:#\t\r\n\f]"
- "Py-expression assumes chars indicated possible composing a ‘py-expression’, skip it.")
-
-(defvar py-expression-skip-chars "^ (=#\t\r\n\f"
- "Py-expression assumes chars indicated possible composing a ‘py-expression’, skip it.")
-
-(setq py-expression-skip-chars "^ [{(=#\t\r\n\f")
-
-(defvar py-expression-re "[^ =#\t\r\n\f]+"
- "Py-expression assumes chars indicated possible composing a ‘py-expression’, when ‘looking-at’ or -back.")
-
-(defcustom py-paragraph-re paragraph-start
- "Allow Python specific ‘paragraph-start’ var."
- :type 'string
- :tag "py-paragraph-re"
- :group 'python-mode)
-
-(defvar py-not-expression-regexp "[ .=#\t\r\n\f)]+"
- "Py-expression assumes chars indicated probably will not compose a ‘py-expression’.")
-
-(defvar py-not-expression-chars " #\t\r\n\f"
- "Py-expression assumes chars indicated probably will not compose a ‘py-expression’.")
-
-(defvar py-partial-expression-backward-chars "^] .=,\"'()[{}:#\t\r\n\f"
- "Py-partial-expression assumes chars indicated possible composing a ‘py-partial-expression’, skip it.")
-;; (setq py-partial-expression-backward-chars "^] .=,\"'()[{}:#\t\r\n\f")
-
-(defvar py-partial-expression-forward-chars "^ .\"')}]:#\t\r\n\f")
-;; (setq py-partial-expression-forward-chars "^ .\"')}]:#\t\r\n\f")
-
-(defvar py-partial-expression-re (concat "[" py-partial-expression-backward-chars (substring py-partial-expression-forward-chars 1) "]+"))
-(setq py-partial-expression-re (concat "[" py-partial-expression-backward-chars "]+"))
-
-(defvar py-statement-re py-partial-expression-re)
-(defvar py-indent-re ".+"
- "This var is introduced for regularity only.")
-(setq py-indent-re ".+")
-
-(defvar py-operator-re "[ \t]*\\(\\.\\|+\\|-\\|*\\|//\\|//\\|&\\|%\\||\\|\\^\\|>>\\|<<\\|<\\|<=\\|>\\|>=\\|==\\|!=\\|=\\)[ \t]*"
- "Matches most of Python syntactical meaningful characters.
-
-See also `py-assignment-re'")
-
-;; (setq py-operator-re "[ \t]*\\(\\.\\|+\\|-\\|*\\|//\\|//\\|&\\|%\\||\\|\\^\\|>>\\|<<\\|<\\|<=\\|>\\|>=\\|==\\|!=\\|=\\)[ \t]*")
-
-(defvar py-delimiter-re "\\(\\.[[:alnum:]]\\|,\\|;\\|:\\)[ \t\n]"
- "Delimiting elements of lists or other programming constructs.")
-
-(defvar py-line-number-offset 0
- "When an exception occurs as a result of ‘py-execute-region’.
-
-A subsequent ‘py-up-exception’ needs the line number where the region
-started, in order to jump to the correct file line.
-This variable is set in ‘py-execute-region’ and used in ‘py--jump-to-exception’.")
-
-(defvar py-match-paren-no-use-syntax-pps nil)
-
-(defvar py-traceback-line-re
- "[ \t]+File \"\\([^\"]+\\)\", line \\([0-9]+\\)"
- "Regular expression that describes tracebacks.")
-
-(defvar py-XXX-tag-face 'py-XXX-tag-face)
-
-(defvar py-pseudo-keyword-face 'py-pseudo-keyword-face)
-
-(defvar py-variable-name-face 'py-variable-name-face)
-
-(defvar py-number-face 'py-number-face)
-
-(defvar py-decorators-face 'py-decorators-face)
-
-(defvar py-object-reference-face 'py-object-reference-face)
-
-(defvar py-builtins-face 'py-builtins-face)
-
-(defvar py-class-name-face 'py-class-name-face)
-
-(defvar py-exception-name-face 'py-exception-name-face)
-
-(defvar py-import-from-face 'py-import-from-face)
-
-(defvar py-def-class-face 'py-def-class-face)
-
-(defvar py-try-if-face 'py-try-if-face)
-
-(defvar py-file-queue nil
- "Queue of Python temp files awaiting execution.
-Currently-active file is at the head of the list.")
-
-(defvar jython-mode-hook nil
- "Hook called by `jython-mode'.
-`jython-mode' also calls `python-mode-hook'.")
-
-(defvar py-shell-hook nil
- "Hook called by `py-shell'.")
-
-(defvar python-font-lock-keywords nil)
-
-(defvar py-dotted-expression-syntax-table
- (let ((table (make-syntax-table python-mode-syntax-table)))
- (modify-syntax-entry ?_ "_" table)
- (modify-syntax-entry ?."_" table)
- table)
- "Syntax table used to identify Python dotted expressions.")
-
-(defvar python-default-template "if"
- "Default template to expand by `python-expand-template'.
-Updated on each expansion.")
-
-(defvar py-already-guessed-indent-offset nil
- "Internal use by ‘py-indent-line’.
-
-When `this-command' is `eq' to `last-command', use the guess already computed.")
-(make-variable-buffer-local 'py-already-guessed-indent-offset)
-
-(defvar py-shell-template "
-\(defun NAME (&optional argprompt)
- \"Start an DOCNAME interpreter in another window.
-
-With optional \\\\[universal-argument] user is prompted
-for options to pass to the DOCNAME interpreter. \"
- (interactive \"P\")
- (let\* ((py-shell-name \"FULLNAME\"))
- (py-shell argprompt)
- (when (interactive-p) (switch-to-buffer (current-buffer))
- (goto-char (point-max)))))
-")
-
-;; Constants
-(defconst py-block-closing-keywords-re
- "[ \t]*\\_<\\(return\\|raise\\|break\\|continue\\|pass\\)\\_>[ \n\t]"
- "Matches the beginning of a class, method or compound statement.")
-
-(setq py-block-closing-keywords-re
- "[ \t]*\\_<\\(return\\|raise\\|break\\|continue\\|pass\\)\\_>[ \n\t]")
-
-(defconst py-finally-re
- "[ \t]*\\_<finally:"
- "Regular expression matching keyword which closes a try-block.")
-
-(defconst py-except-re "[ \t]*\\_<except\\_>"
- "Matches the beginning of a `except' block.")
-
-;; (defconst py-except-re
-;; "[ \t]*\\_<except\\_>[:( \n\t]*"
-;; "Regular expression matching keyword which composes a try-block.")
-
-(defconst py-return-re
- ".*:?[ \t]*\\_<\\(return\\)\\_>[ \n\t]*"
- "Regular expression matching keyword which typically closes a function.")
-
-(defconst py-decorator-re
- "[ \t]*@[^ ]+\\_>[ \n\t]*"
- "Regular expression matching keyword which typically closes a function.")
-
-(defcustom py-outdent-re-raw
- (list
- "elif"
- "else"
- "except"
- "finally"
- )
- "Used by ‘py-outdent-re’."
- :type '(repeat string)
- :tag "py-outdent-re-raw"
- :group 'python-mode
- )
-
-(defconst py-outdent-re
- (concat
- "[ \t]*"
- (regexp-opt py-outdent-re-raw 'symbols)
- "[)\t]*")
- "Regular expression matching statements to be dedented one level.")
-
-(defcustom py-no-outdent-re-raw
- (list
- "break"
- "continue"
- "import"
- "pass"
- "raise"
- "return")
- "Uused by ‘py-no-outdent-re’."
- :type '(repeat string)
- :tag "py-no-outdent-re-raw"
- :group 'python-mode)
-
-(defconst py-no-outdent-re
- (concat
- "[ \t]*"
- (regexp-opt py-no-outdent-re-raw 'symbols)
- "[)\t]*$")
-"Regular expression matching lines not to augment indent after.
-
-See ‘py-no-outdent-re-raw’ for better readable content")
-
-(defconst py-assignment-re "\\(\\_<\\w+\\_>[[:alnum:]:, \t]*[ \t]*\\)\\(=\\|+=\\|*=\\|%=\\|&=\\|^=\\|<<=\\|-=\\|/=\\|**=\\||=\\|>>=\\|//=\\)\\(.*\\)"
- "If looking at the beginning of an assignment.")
-
-;; 'name':
-(defconst py-dict-re "'\\_<\\w+\\_>':")
-
-(defvar py-block-re-raw (list
- "async def"
- "async for"
- "async with"
- "class"
- "def"
- "for"
- "if"
- "try"
- "while"
- "with"
- )
- "Used by ‘py-block-re’")
-
-(defconst py-block-re (concat
- ;; "[ \t]*"
- (regexp-opt py-block-re-raw 'symbols)
- "[:( \n\t]"
- )
- "Matches the beginning of a compound statement.")
-
-(defconst py-minor-block-re-raw (list
- "async for"
- "async with"
- "except"
- "for"
- "if"
- "try"
- "with"
- )
- "Matches the beginning of an `for', `if', `try', `except' or `with' block.")
-
-(defconst py-minor-block-re
- (concat
- "[ \t]*"
- (regexp-opt py-minor-block-re-raw 'symbols)
- "[:( \n\t]")
-
- "Regular expression matching lines not to augment indent after.
-
-See ‘py-minor-block-re-raw’ for better readable content")
-
-(defconst py-try-re "[ \t]*\\_<try\\_>[: \n\t]"
- "Matches the beginning of a `try' block.")
-
-(defconst py-for-re "[ \t]*\\_<\\(async for\\|for\\)\\_> +[[:alpha:]_][[:alnum:]_]* +in +[[:alpha:]_][[:alnum:]_()]* *[: \n\t]"
- "Matches the beginning of a `try' block.")
-
-(defconst py-if-re "[ \t]*\\_<if\\_> +[^\n\r\f]+ *[: \n\t]"
- "Matches the beginning of an `if' block.")
-
-(defconst py-else-re "[ \t]*\\_<else:[ \n\t]"
- "Matches the beginning of an `else' block.")
-
-(defconst py-elif-re "[ \t]*\\_<\\elif\\_>[( \n\t]"
- "Matches the beginning of a compound if-statement's clause exclusively.")
-
-;; (defconst py-elif-block-re "[ \t]*\\_<elif\\_> +[[:alpha:]_][[:alnum:]_]* *[: \n\t]"
-;; "Matches the beginning of an `elif' block.")
-
-(defconst py-class-re "[ \t]*\\_<\\(class\\)\\_>[ \n\t]"
- "Matches the beginning of a class definition.")
-
-(defconst py-def-or-class-re "[ \t]*\\_<\\(async def\\|class\\|def\\)\\_>[ \n\t]+\\([[:alnum:]_]*\\)"
- "Matches the beginning of a class- or functions definition.
-
-Second group grabs the name")
-
-;; (setq py-def-or-class-re "[ \t]*\\_<\\(async def\\|class\\|def\\)\\_>[ \n\t]")
-
-;; (defconst py-def-re "[ \t]*\\_<\\(async def\\|def\\)\\_>[ \n\t]"
-(defconst py-def-re "[ \t]*\\_<\\(def\\|async def\\)\\_>[ \n\t]"
- "Matches the beginning of a functions definition.")
-
-(defcustom py-block-or-clause-re-raw
- (list
- "async for"
- "async with"
- "async def"
- "async class"
- "class"
- "def"
- "elif"
- "else"
- "except"
- "finally"
- "for"
- "if"
- "try"
- "while"
- "with"
- )
- "Matches the beginning of a compound statement or it's clause."
- :type '(repeat string)
- :tag "py-block-or-clause-re-raw"
- :group 'python-mode)
-
-(defvar py-block-or-clause-re
- (concat
- "[ \t]*"
- (regexp-opt py-block-or-clause-re-raw 'symbols)
- "[( \t]*.*:?")
- "See ‘py-block-or-clause-re-raw’, which it reads.")
-
-(defcustom py-block-re-raw
- (list
- "async with"
- "except"
- "for"
- "if"
- "try"
- "while"
- "with"
- )
- "Matches the beginning of a compound statement but not it's clause."
- :type '(repeat string)
- :tag "py-block-re-raw"
- :group 'python-mode)
-
-(defvar py-block-re
- (concat
- "[ \t]*"
- (regexp-opt py-block-re-raw 'symbols)
- "[( \t]*.*:?")
- "See ‘py-block-or-clause-re-raw’, which it reads.")
-
-(defcustom py-extended-block-or-clause-re-raw
- (list
- "async def"
- "async for"
- "async with"
- "class"
- "def"
- "elif"
- "else"
- "except"
- "finally"
- "for"
- "if"
- "try"
- "while"
- "with")
- "Matches the beginning of a compound statement or it's clause."
- :type '(repeat string)
- :tag "py-extended-block-or-clause-re-raw"
- :group 'python-mode)
-
-(defconst py-extended-block-or-clause-re
- (concat
- "[ \t]*"
- (regexp-opt py-extended-block-or-clause-re-raw 'symbols)
- "[( \t]*.*:?")
- "See ‘py-block-or-clause-re-raw’, which it reads.")
-
-(defconst py-clause-re py-extended-block-or-clause-re)
-
-(defcustom py-minor-clause-re-raw
- (list
- "elif"
- "else"
- "except"
- "finally"
- )
- "Matches the beginning of a clause."
- :type '(repeat string)
- :tag "py-minor-clause-re-raw"
- :group 'python-mode)
-
-(defconst py-minor-clause-re
- (concat
- "[ \t]*"
- (regexp-opt py-minor-clause-re-raw 'symbols)
- "[( \t]*.*:?")
- "See ‘py-minor-clause-re-raw’, which it reads.")
-
-(defcustom py-top-level-re
- (concat
- "^[a-zA-Z_]"
- (regexp-opt py-extended-block-or-clause-re-raw)
- "[( \t]*.*:?")
- "A form which starts at zero indent level, but is not a comment."
- :type '(regexp)
- :tag "py-top-level-re"
- :group 'python-mode
- )
-
-(defvar py-comment-re comment-start
- "Needed for normalized processing.")
-
-(defconst py-block-keywords
- (regexp-opt py-block-or-clause-re-raw 'symbols)
- "Matches known keywords opening a block.
-
-Customizing `py-block-or-clause-re-raw' will change values here")
-
-(defconst py-try-clause-re
- (concat
- "[ \t]*\\_<\\("
- (mapconcat 'identity
- (list
- "else"
- "except"
- "finally")
- "\\|")
- "\\)\\_>[( \t]*.*:")
- "Matches the beginning of a compound try-statement's clause.")
-
-(defcustom py-compilation-regexp-alist
- `((,(rx line-start (1+ (any " \t")) "File \""
- (group (1+ (not (any "\"<")))) ; avoid `<stdin>' &c
- "\", line " (group (1+ digit)))
- 1 2)
- (,(rx " in file " (group (1+ not-newline)) " on line "
- (group (1+ digit)))
- 1 2)
- (,(rx line-start "> " (group (1+ (not (any "(\"<"))))
- "(" (group (1+ digit)) ")" (1+ (not (any "("))) "()")
- 1 2))
- "Fetch errors from Py-shell.
-hooked into `compilation-error-regexp-alist'"
- :type '(alist string)
- :tag "py-compilation-regexp-alist"
- :group 'python-mode)
-
-(defun py--quote-syntax (n)
- "Put `syntax-table' property correctly on triple quote.
-Used for syntactic keywords. N is the match number (1, 2 or 3)."
- ;; Given a triple quote, we have to check the context to know
- ;; whether this is an opening or closing triple or whether it's
- ;; quoted anyhow, and should be ignored. (For that we need to do
- ;; the same job as `syntax-ppss' to be correct and it seems to be OK
- ;; to use it here despite initial worries.) We also have to sort
- ;; out a possible prefix -- well, we don't _have_ to, but I think it
- ;; should be treated as part of the string.
-
- ;; Test cases:
- ;; ur"""ar""" x='"' # """
- ;; x = ''' """ ' a
- ;; '''
- ;; x '"""' x """ \"""" x
- (save-excursion
- (goto-char (match-beginning 0))
- (cond
- ;; Consider property for the last char if in a fenced string.
- ((= n 3)
- (let* ((syntax (parse-partial-sexp (point-min) (point))))
- (when (eq t (nth 3 syntax)) ; after unclosed fence
- (goto-char (nth 8 syntax)) ; fence position
- ;; (skip-chars-forward "uUrR") ; skip any prefix
- ;; Is it a matching sequence?
- (if (eq (char-after) (char-after (match-beginning 2)))
- (eval-when-compile (string-to-syntax "|"))))))
- ;; Consider property for initial char, accounting for prefixes.
- ((or (and (= n 2) ; leading quote (not prefix)
- (not (match-end 1))) ; prefix is null
- (and (= n 1) ; prefix
- (match-end 1))) ; non-empty
- (unless (eq 'string (syntax-ppss-context (parse-partial-sexp (point-min) (point))))
- (eval-when-compile (string-to-syntax "|"))))
- ;; Otherwise (we're in a non-matching string) the property is
- ;; nil, which is OK.
- )))
-
-(defconst py-font-lock-syntactic-keywords
- ;; Make outer chars of matching triple-quote sequences into generic
- ;; string delimiters. Fixme: Is there a better way?
- ;; First avoid a sequence preceded by an odd number of backslashes.
- `((,(concat "\\(?:^\\|[^\\]\\(?:\\\\.\\)*\\)" ;Prefix.
- "\\(?1:\"\\)\\(?2:\"\\)\\(?3:\"\\)\\(?4:\"\\)\\(?5:\"\\)\\(?6:\"\\)\\|\\(?1:\"\\)\\(?2:\"\\)\\(?3:\"\\)\\|\\(?1:'\\)\\(?2:'\\)\\(?3:'\\)\\(?4:'\\)\\(?5:'\\)\\(?6:'\\)\\|\\(?1:'\\)\\(?2:'\\)\\(?3:'\\)\\(?4:'\\)\\(?5:'\\)\\(?6:'\\)\\|\\(?1:'\\)\\(?2:'\\)\\(?3:'\\)")
- (1 (py--quote-syntax 1) t t)
- (2 (py--quote-syntax 2) t t)
- (3 (py--quote-syntax 3) t t)
- (6 (py--quote-syntax 1) t t))))
-
-(defconst py-windows-config-register 313465889
- "Internal used.")
-
-(defvar py-windows-config nil
- "Completion stores ‘py-windows-config-register’ here.")
-
-(put 'py-indent-offset 'safe-local-variable 'integerp)
-
-;; testing
-(defvar py-ert-test-default-executables
- (list "python" "python3" "ipython")
- "Serialize tests employing dolist.")
-
-(defcustom py-shell-unfontify-p t
- "Run `py--run-unfontify-timer' unfontifying the shell banner-text.
-
-Default is nil"
-
- :type 'boolean
- :tag "py-shell-unfontify-p"
- :group 'python-mode)
-
-;; Pdb
-;; #62, pdb-track in a shell buffer
-(defcustom pdb-track-stack-from-shell-p t
- "If t, track source from shell-buffer.
-
-Default is t.
-Add hook 'comint-output-filter-functions 'py--pdbtrack-track-stack-file"
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-update-gud-pdb-history-p t
- "If pdb should provide suggestions WRT file to check and ‘py-pdb-path’.
-
-Default is t
-See lp:963253"
- :type 'boolean
- :tag "py-update-gud-pdb-history-p"
- :group 'python-mode)
-
-(defcustom py-pdb-executable nil
- "Indicate PATH/TO/pdb.
-
-Default is nil
-See lp:963253"
- :type 'string
- :tag "py-pdb-executable"
- :group 'python-mode)
-
-(defcustom py-pdb-path
- (if (or (eq system-type 'ms-dos)(eq system-type 'windows-nt))
- (quote c:/python27/python\ -i\ c:/python27/Lib/pdb.py)
- '/usr/lib/python2.7/pdb.py)
- "Where to find pdb.py. Edit this according to your system.
- For example \"/usr/lib/python3.4\" might be an option too.
-
-If you ignore the location `M-x py-guess-pdb-path' might display it."
- :type 'variable
- :tag "py-pdb-path"
- :group 'python-mode)
-
-(defvar py-python-ms-pdb-command ""
- "MS-systems might use that.")
-
-(defcustom py-shell-prompt-pdb-regexp "[(<]*[Ii]?[Pp]db[>)]+ "
- "Regular expression matching pdb input prompt of Python shell.
-It should not contain a caret (^) at the beginning."
- :type 'string)
-
-(defcustom py-pdbtrack-stacktrace-info-regexp
- "> \\([^\"(<]+\\)(\\([0-9]+\\))\\([?a-zA-Z0-9_<>]+\\)()"
- "Regular expression matching stacktrace information.
-Used to extract the current line and module being inspected."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defvar py-pdbtrack-tracked-buffer nil
- "Variable containing the value of the current tracked buffer.
-Never set this variable directly, use
-`py-pdbtrack-set-tracked-buffer' instead.")
-
-(defvar py-pdbtrack-buffers-to-kill nil
- "List of buffers to be deleted after tracking finishes.")
-
-(defcustom py-pdbtrack-do-tracking-p t
- "Controls whether the pdbtrack feature is enabled or not.
-When non-nil, pdbtrack is enabled in all comint-based buffers,
-e.g. shell buffers and the *Python* buffer. When using pdb to debug a
-Python program, pdbtrack notices the pdb prompt and displays the
-source file and line that the program is stopped at, much the same way
-as ‘gud-mode’ does for debugging C programs with gdb."
- :type 'boolean
- :tag "py-pdbtrack-do-tracking-p"
- :group 'python-mode)
-(make-variable-buffer-local 'py-pdbtrack-do-tracking-p)
-
-(defcustom py-pdbtrack-filename-mapping nil
- "Supports mapping file paths when opening file buffers in pdbtrack.
-When non-nil this is an alist mapping paths in the Python interpreter
-to paths in Emacs."
- :type 'alist
- :tag "py-pdbtrack-filename-mapping"
- :group 'python-mode)
-
-(defcustom py-pdbtrack-minor-mode-string " PDB"
- "String to use in the minor mode list when pdbtrack is enabled."
- :type 'string
- :tag "py-pdbtrack-minor-mode-string"
- :group 'python-mode)
-
-(defconst py-pdbtrack-stack-entry-regexp
- (concat ".*\\("py-shell-input-prompt-1-regexp">\\|"py-ipython-input-prompt-re">\\|>\\) *\\(.*\\)(\\([0-9]+\\))\\([?a-zA-Z0-9_<>()]+\\)()")
- "Regular expression pdbtrack uses to find a stack trace entry.")
-
-(defconst py-pdbtrack-marker-regexp-file-group 2
- "Group position in gud-pydb-marker-regexp that matches the file name.")
-
-(defconst py-pdbtrack-marker-regexp-line-group 3
- "Group position in gud-pydb-marker-regexp that matches the line number.")
-
-(defconst py-pdbtrack-marker-regexp-funcname-group 4
- "Group position in gud-pydb-marker-regexp that matches the function name.")
-
-(defconst py-pdbtrack-track-range 10000
- "Max number of characters from end of buffer to search for stack entry.")
-
-(defvar py-pdbtrack-is-tracking-p nil)
-
-(defvar py-shell--font-lock-buffer nil)
-
-(defvar py--docbeg nil
- "internally used by py--write-edit")
-
-(defvar py--docend nil
- "internally used by py--write-edit")
-
-(defcustom py-completion-setup-code
- "
-def __PYTHON_EL_get_completions(text):
- completions = []
- completer = None
-
- try:
- import readline
-
- try:
- import __builtin__
- except ImportError:
- # Python 3
- import builtins as __builtin__
- builtins = dir(__builtin__)
-
- is_ipython = ('__IPYTHON__' in builtins or
- '__IPYTHON__active' in builtins)
- splits = text.split()
- is_module = splits and splits[0] in ('from', 'import')
-
- if is_ipython and is_module:
- from IPython.core.completerlib import module_completion
- completions = module_completion(text.strip())
- elif is_ipython and '__IP' in builtins:
- completions = __IP.complete(text)
- elif is_ipython and 'get_ipython' in builtins:
- completions = get_ipython().Completer.all_completions(text)
- else:
- # Try to reuse current completer.
- completer = readline.get_completer()
- if not completer:
- # importing rlcompleter sets the completer, use it as a
- # last resort to avoid breaking customizations.
- import rlcompleter
- completer = readline.get_completer()
- if getattr(completer, 'PYTHON_EL_WRAPPED', False):
- completer.print_mode = False
- i = 0
- while True:
- completion = completer(text, i)
- if not completion:
- break
- i += 1
- completions.append(completion)
- except:
- pass
- finally:
- if getattr(completer, 'PYTHON_EL_WRAPPED', False):
- completer.print_mode = True
- return completions"
- "Code used to setup completion in inferior Python processes."
- :type 'string
- :group 'python)
-
-(defcustom py-shell-completion-string-code
- "';'.join(__PYTHON_EL_get_completions('''%s'''))"
- "Python code used to get a string of completions separated by semicolons.
-The string passed to the function is the current python name or
-the full statement in the case of imports."
- :type 'string
- :group 'python)
-
-(defsubst py-keep-region-active ()
- "Keep the region active in XEmacs."
- (and (boundp 'zmacs-region-stays)
- (setq zmacs-region-stays t)))
-
- ;; GNU's syntax-ppss-context
-(unless (functionp 'syntax-ppss-context)
- (defsubst syntax-ppss-context (ppss)
- (cond
- ((nth 3 ppss) 'string)
- ((nth 4 ppss) 'comment)
- (t nil))))
-
-(defface py-XXX-tag-face
- '((t (:inherit font-lock-string-face)))
- "XXX\\|TODO\\|FIXME "
- :tag "py-XXX-tag-face"
- :group 'python-mode)
-
-(defface py-pseudo-keyword-face
- '((t (:inherit font-lock-keyword-face)))
- "Face for pseudo keywords in Python mode, like self, True, False,
- Ellipsis.
-
-See also `py-object-reference-face'"
- :tag "py-pseudo-keyword-face"
- :group 'python-mode)
-
-(defface py-object-reference-face
- '((t (:inherit py-pseudo-keyword-face)))
- "Face when referencing object members from its class resp. method., commonly \"cls\" and \"self\""
- :tag "py-object-reference-face"
- :group 'python-mode)
-
-(defface py-variable-name-face
- '((t (:inherit default)))
- "Face method decorators."
- :tag "py-variable-name-face"
- :group 'python-mode)
-
-(defface py-number-face
- '((t (:inherit default)))
- "Highlight numbers."
- :tag "py-number-face"
- :group 'python-mode)
-
-(defface py-try-if-face
- '((t (:inherit font-lock-keyword-face)))
- "Highlight keywords."
- :tag "py-try-if-face"
- :group 'python-mode)
-
-(defface py-import-from-face
- '((t (:inherit font-lock-keyword-face)))
- "Highlight keywords."
- :tag "py-import-from-face"
- :group 'python-mode)
-
-(defface py-def-class-face
- '((t (:inherit font-lock-keyword-face)))
- "Highlight keywords."
- :tag "py-def-class-face"
- :group 'python-mode)
-
- ;; PEP 318 decorators
-(defface py-decorators-face
- '((t (:inherit font-lock-keyword-face)))
- "Face method decorators."
- :tag "py-decorators-face"
- :group 'python-mode)
-
-(defface py-builtins-face
- '((t (:inherit font-lock-builtin-face)))
- "Face for builtins like TypeError, object, open, and exec."
- :tag "py-builtins-face"
- :group 'python-mode)
-
-(defface py-class-name-face
- '((t (:inherit font-lock-type-face)))
- "Face for classes."
- :tag "py-class-name-face"
- :group 'python-mode)
-
-(defface py-exception-name-face
- '((t (:inherit font-lock-builtin-face)))
- "."
- :tag "py-exception-name-face"
- :group 'python-mode)
-
-;; subr-x.el might not exist yet
-;; #73, Byte compilation on Emacs 25.3 fails on different trim-right signature
-(unless (or (functionp 'string-trim) (functionp 'string-trim-right)(functionp 'string-trim-left))
- (defsubst string-trim-left (strg &optional regexp)
- "Trim STRING of leading string matching REGEXP.
-
-REGEXP defaults to \"[ \\t\\n\\r]+\"."
- (if (string-match (concat "\\`\\(?:" (or regexp "[ \t\n\r]+") "\\)") strg)
- (replace-match "" t t strg)
- strg))
-
- (defsubst string-trim-right (strg &optional regexp)
- "Trim STRING of trailing string matching REGEXP.
-
-REGEXP defaults to \"[ \\t\\n\\r]+\"."
- (if (string-match (concat "\\(?:" (or regexp "[ \t\n\r]+") "\\)\\'") strg)
- (replace-match "" t t strg)
- strg))
-
- (defsubst string-trim (strg &optional trim-left trim-right)
- "Trim STRING of leading and trailing strings matching TRIM-LEFT and TRIM-RIGHT.
-
-TRIM-LEFT and TRIM-RIGHT default to \"[ \\t\\n\\r]+\"."
- (string-trim-left (string-trim-right strg trim-right) trim-left))
-
- (defsubst string-blank-p (strg)
- "Check whether STRING is either empty or only whitespace."
- (string-match-p "\\`[ \t\n\r]*\\'" strg))
-
- (defsubst string-remove-prefix (prefix strg)
- "Remove PREFIX from STRING if present."
- (if (string-prefix-p prefix strg)
- (substring strg (length prefix))
- strg)))
-
-(defun py-toggle-imenu-create-index ()
- "Toggle value of ‘py--imenu-create-index-p’"
- (interactive)
- (setq py--imenu-create-index-p (not py--imenu-create-index-p))
- (when (interactive-p) (message "py--imenu-create-index-p: %s" py--imenu-create-index-p)))
-
-(defun py-toggle-shell-completion ()
- "Switches value of buffer-local var ‘py-shell-complete-p’"
- (interactive)
- (setq py-shell-complete-p (not py-shell-complete-p))
- (when (interactive-p) (message "py-shell-complete-p: %s" py-shell-complete-p)))
-
-(defun py--python-send-setup-code-intern (name buffer)
- (save-excursion
- (let ((setup-file (concat (py--normalize-directory py-temp-directory) "py-" name "-setup-code.py"))
- py-return-result-p py-store-result-p)
- (unless (file-readable-p setup-file)
- (with-temp-buffer
- (insert (eval (car (read-from-string (concat "py-" name "-setup-code")))))
- (write-file setup-file)))
- (py--execute-file-base (get-buffer-process buffer) setup-file nil buffer nil t)
- ;; (when py-verbose-p (message "%s" (concat name " setup-code sent to " (process-name (get-buffer-process buffer)))))
- )))
-
-(defun py--python-send-completion-setup-code (buffer)
- "For Python see py--python-send-setup-code."
- (py--python-send-setup-code-intern "shell-completion" buffer))
-
-(defun py--python-send-eldoc-setup-code (buffer)
- "For Python see py--python-send-setup-code."
- (py--python-send-setup-code-intern "eldoc" buffer))
-
-(defun py--ipython-import-module-completion ()
- "Setup IPython v0.11 or greater.
-
-Used by `py-ipython-module-completion-string'"
- (let ((setup-file (concat (py--normalize-directory py-temp-directory) "py-ipython-module-completion.py")))
- (unless (file-readable-p setup-file)
- (with-temp-buffer
- (insert py-ipython-module-completion-code)
- (write-file setup-file)))
- (py--execute-file-base nil setup-file nil (current-buffer) nil t)))
-
-(defun py--at-raw-string ()
- "If at beginning of a raw-string."
- (and (looking-at "\"\"\"\\|'''") (member (char-before) (list ?u ?U ?r ?R))))
-
-(defun py--docstring-p (pos)
- "Check to see if there is a docstring at POS."
- (save-excursion
- (let ((erg
- (progn
- (goto-char pos)
- (and (looking-at "\"\"\"\\|'''")
- ;; https://github.com/swig/swig/issues/889
- ;; def foo(rho, x):
- ;; r"""Calculate :math:`D^\nu \rho(x)`."""
- ;; return True
- (if (py--at-raw-string)
- (progn
- (forward-char -1)
- (point))
- (point))))))
- (when (and erg (py-backward-statement))
- (when (looking-at py-def-or-class-re)
- erg)))))
-
-(defun py--font-lock-syntactic-face-function (state)
- "STATE expected as result von (parse-partial-sexp (point-min) (point)."
- (if (nth 3 state)
- (if (py--docstring-p (nth 8 state))
- font-lock-doc-face
- font-lock-string-face)
- font-lock-comment-face))
-
-(and (fboundp 'make-obsolete-variable)
- (make-obsolete-variable 'py-mode-hook 'python-mode-hook nil))
-
-(defun py-choose-shell-by-shebang (&optional shebang)
- "Choose shell by looking at #! on the first line.
-
-If SHEBANG is non-nil, returns the shebang as string,
-otherwise the Python resp. Jython shell command name."
- (interactive)
- ;; look for an interpreter specified in the first line
- (let* (erg res)
- (save-excursion
- (goto-char (point-min))
- (when (looking-at py-shebang-regexp)
- (if shebang
- (setq erg (match-string-no-properties 0))
- (setq erg (split-string (match-string-no-properties 0) "[#! \t]"))
- (dolist (ele erg)
- (when (string-match "[bijp]+ython" ele)
- (setq res ele))))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" res))
- res))
-
-(defun py--choose-shell-by-import ()
- "Choose CPython or Jython mode based imports.
-
-If a file imports any packages in `py-jython-packages', within
-`py-import-check-point-max' characters from the start of the file,
-return `jython', otherwise return nil."
- (let (mode)
- (save-excursion
- (goto-char (point-min))
- (while (and (not mode)
- (search-forward-regexp
- "^\\(\\(from\\)\\|\\(import\\)\\) \\([^ \t\n.]+\\)"
- py-import-check-point-max t))
- (setq mode (and (member (match-string 4) py-jython-packages)
- 'jython))))
- mode))
-
-(defun py-choose-shell-by-path (&optional separator-char)
- "SEPARATOR-CHAR according to system ‘path-separator’.
-
-Select Python executable according to version desplayed in path.
-Returns versioned string, nil if nothing appropriate found"
- (interactive)
- (let ((path (py--buffer-filename-remote-maybe))
- (separator-char (or separator-char py-separator-char))
- erg)
- (when (and path separator-char
- (string-match (concat separator-char "[iI]?[pP]ython[0-9.]+" separator-char) path))
- (setq erg (substring path
- (1+ (string-match (concat separator-char "[iI]?[pP]ython[0-9.]+" separator-char) path)) (1- (match-end 0)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-which-python (&optional shell)
- "Return version of Python of current environment, a number.
-Optional argument SHELL selected shell."
- (interactive)
- (let* ((cmd (or shell (py-choose-shell)))
- (treffer (string-match "\\([23]*\\.?[0-9\\.]*\\)$" cmd))
- version erg)
- (if treffer
- ;; if a number if part of python name, assume it's the version
- (setq version (substring-no-properties cmd treffer))
- (setq erg (shell-command-to-string (concat cmd " --version")))
- (setq version (cond ((string-match (concat "\\(on top of Python \\)" "\\([0-9]\\.[0-9]+\\)") erg)
- (match-string-no-properties 2 erg))
- ((string-match "\\([0-9]\\.[0-9]+\\)" erg)
- (substring erg 7 (1- (length erg)))))))
- (when (called-interactively-p 'any)
- (if version
- (when py-verbose-p (message "%s" version))
- (message "%s" "Could not detect Python on your system")))
- (string-to-number version)))
-
-(defun py-python-current-environment ()
- "Return path of current Python installation."
- (interactive)
- (let* ((cmd (py-choose-shell))
- (denv (shell-command-to-string (concat "type " cmd)))
- (erg (substring denv (string-match "/" denv))))
- (when (called-interactively-p 'any)
- (if erg
- (message "%s" erg)
- (message "%s" "Could not detect Python on your system")))
- erg))
-
- ;; requested by org-mode still
-(defalias 'py-toggle-shells 'py-choose-shell)
-
-(defun py--cleanup-process-name (res)
- "Make res ready for use by `executable-find'.
-
-Returns RES or substring of RES"
- (if (string-match "<" res)
- (substring res 0 (match-beginning 0))
- res))
-
-(defalias 'py-which-shell 'py-choose-shell)
-(defun py-choose-shell (&optional shell)
- "Return an appropriate executable as a string.
-
-Does the following:
- - look for an interpreter with `py-choose-shell-by-shebang'
- - examine imports using `py--choose-shell-by-import'
- - look if Path/To/File indicates a Python version
- - if not successful, return default value of `py-shell-name'
-
-When interactivly called, messages the shell name
-Return nil, if no executable found."
- (interactive)
- ;; org-babel uses ‘py-toggle-shells’ with arg, just return it
- (or shell
- (let* (res
- done
- (erg
- (cond (py-force-py-shell-name-p
- (default-value 'py-shell-name))
- (py-use-local-default
- (if (not (string= "" py-shell-local-path))
- (expand-file-name py-shell-local-path)
- (message "Abort: `py-use-local-default' is set to `t' but `py-shell-local-path' is empty. Maybe call `py-toggle-local-default-use'")))
- ((and (not py-fast-process-p)
- (comint-check-proc (current-buffer))
- (setq done t)
- (string-match "ython" (process-name (get-buffer-process (current-buffer)))))
- (setq res (process-name (get-buffer-process (current-buffer))))
- (py--cleanup-process-name res))
- ((py-choose-shell-by-shebang))
- ((py--choose-shell-by-import))
- ((py-choose-shell-by-path))
- (t (or
- (default-value 'py-shell-name)
- "python"))))
- (cmd (if (or
- ;; comint-check-proc was succesful
- done
- py-edit-only-p) erg
- (executable-find erg))))
- (if cmd
- (when (called-interactively-p 'any)
- (message "%s" cmd))
- (when (called-interactively-p 'any) (message "%s" "Could not detect Python on your system. Maybe set `py-edit-only-p'?")))
- erg)))
-
-
-(defun py--normalize-directory (directory)
- "Make sure DIRECTORY ends with a file-path separator char.
-
-Returns DIRECTORY"
- (let ((erg (cond ((string-match (concat py-separator-char "$") directory)
- directory)
- ((not (string= "" directory))
- (concat directory py-separator-char)))))
- (unless erg (when py-verbose-p (message "Warning: directory is empty")))
- erg))
-
-(defun py--normalize-pythonpath (pythonpath)
- "Make sure PYTHONPATH ends with a colon.
-
-Returns PYTHONPATH"
- (let ((erg (cond ((string-match (concat path-separator "$") pythonpath)
- pythonpath)
- ((not (string= "" pythonpath))
- (concat pythonpath path-separator))
- (t pythonpath))))
- erg))
-
-(defun py-install-directory-check ()
- "Do some sanity check for `py-install-directory'.
-
-Returns t if successful."
- (interactive)
- (let ((erg (and (boundp 'py-install-directory) (stringp py-install-directory) (< 1 (length py-install-directory)))))
- (when (called-interactively-p 'any) (message "py-install-directory-check: %s" erg))
- erg))
-
-(defun py-guess-py-install-directory ()
- "Takes value of user directory aka $HOME.
-
-If `(locate-library \"python-mode\")' is not succesful.
-
-Used only, if `py-install-directory' is empty."
- (interactive)
- (let ((erg (cond ((locate-library "python-mode")
- (file-name-directory (locate-library "python-mode")))
- ((ignore-errors (string-match "python-mode" (py--buffer-filename-remote-maybe)))
- (file-name-directory (py--buffer-filename-remote-maybe)))
- ((string-match "python-mode" (buffer-name))
- default-directory))))
- (cond ((and (or (not py-install-directory) (string= "" py-install-directory)) erg)
- (setq py-install-directory erg))
- (t (setq py-install-directory (expand-file-name "~/")))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "Setting py-install-directory to: %s" py-install-directory))
- py-install-directory)
-
-(defun py--fetch-pythonpath ()
- "Consider settings of ‘py-pythonpath’."
- (if (string= "" py-pythonpath)
- (getenv "PYTHONPATH")
- (concat (py--normalize-pythonpath (getenv "PYTHONPATH")) py-pythonpath)))
-
-(defun py-load-pymacs ()
- "Load Pymacs as delivered.
-
-Pymacs has been written by François Pinard and many others.
-See original source: http://pymacs.progiciels-bpi.ca"
- (interactive)
- (let ((pyshell (py-choose-shell))
- (path (py--fetch-pythonpath))
- (py-install-directory (cond ((string= "" py-install-directory)
- (py-guess-py-install-directory))
- (t (py--normalize-directory py-install-directory)))))
- (if (py-install-directory-check)
- (progn
- ;; If Pymacs has not been loaded before, prepend py-install-directory to
- ;; PYTHONPATH, so that the Pymacs delivered with python-mode is used.
- (unless (featurep 'pymacs)
- (setenv "PYTHONPATH" (concat
- (expand-file-name py-install-directory)
- (if path (concat path-separator path)))))
- (setenv "PYMACS_PYTHON" (if (string-match "IP" pyshell)
- "python"
- pyshell))
- (require 'pymacs))
- (error "`py-install-directory' not set, see INSTALL"))))
-
-(when py-load-pymacs-p (py-load-pymacs))
-
-(when (and py-load-pymacs-p (featurep 'pymacs))
- (defun py-load-pycomplete ()
- "Load Pymacs based pycomplete."
- (interactive)
- (let* ((path (py--fetch-pythonpath))
- (py-install-directory (cond ((string= "" py-install-directory)
- (py-guess-py-install-directory))
- (t (py--normalize-directory py-install-directory))))
- (pycomplete-directory (concat (expand-file-name py-install-directory) "completion")))
- (if (py-install-directory-check)
- (progn
- ;; If the Pymacs process is already running, augment its path.
- (when (and (get-process "pymacs") (fboundp 'pymacs-exec))
- (pymacs-exec (concat "sys.path.insert(0, '" pycomplete-directory "')")))
- (require 'pymacs)
- (setenv "PYTHONPATH" (concat
- pycomplete-directory
- (if path (concat path-separator path))))
- (push pycomplete-directory load-path)
- (require 'pycomplete)
- (add-hook 'python-mode-hook 'py-complete-initialize))
- (error "`py-install-directory' not set, see INSTALL")))))
-
-(when (functionp 'py-load-pycomplete)
- (py-load-pycomplete))
-
-(defun py-set-load-path ()
- "Include needed subdirs of ‘python-mode’ directory."
- (interactive)
- (let ((install-directory (py--normalize-directory py-install-directory)))
- (cond ((and (not (string= "" install-directory))(stringp install-directory))
- (push (expand-file-name install-directory) load-path)
- (push (concat (expand-file-name install-directory) "completion") load-path)
- (push (concat (expand-file-name install-directory) "extensions") load-path)
- (push (concat (expand-file-name install-directory) "test") load-path)
- (push (concat (expand-file-name install-directory) "tools") load-path)
- (push (concat (expand-file-name install-directory) "autopair") load-path))
- (t (error "Please set `py-install-directory', see INSTALL"))
- (when (called-interactively-p 'any) (message "%s" load-path)))))
-
-(unless py-install-directory
- (push default-directory load-path)
- (push (concat default-directory "extensions") load-path))
-
-(defun py-count-lines (&optional beg end)
- "Count lines in accessible part until current line.
-
-See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7115
-Optional argument BEG specify beginning.
-Optional argument END specify end."
- (interactive)
- (save-excursion
- (let ((count 0)
- (beg (or beg (point-min)))
- (end (or end (point))))
- (save-match-data
- (if (or (eq major-mode 'comint-mode)
- (eq major-mode 'py-shell-mode))
- (if
- (re-search-backward py-shell-prompt-regexp nil t 1)
- (goto-char (match-end 0))
- ;; (when py-debug-p (message "%s" "py-count-lines: Don't see a prompt here"))
- (goto-char beg))
- (goto-char beg)))
- (while (and (< (point) end)(not (eobp)) (skip-chars-forward "^\n" end))
- (setq count (1+ count))
- (unless (or (not (< (point) end)) (eobp)) (forward-char 1)
- (setq count (+ count (abs (skip-chars-forward "\n" end))))))
- (when (bolp) (setq count (1+ count)))
- (when (and py-debug-p (called-interactively-p 'any)) (message "%s" count))
- count)))
-
-(defmacro py-escaped ()
- "Return t if char is preceded by an odd number of backslashes."
- `(save-excursion
- (< 0 (% (abs (skip-chars-backward "\\\\")) 2))))
-
-(defmacro py-current-line-backslashed-p ()
- "Return t if current line is a backslashed continuation line."
- `(save-excursion
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (and (eq (char-before (point)) ?\\ )
- (py-escaped))))
-
-(defmacro py-preceding-line-backslashed-p ()
- "Return t if preceding line is a backslashed continuation line."
- `(save-excursion
- (beginning-of-line)
- (skip-chars-backward " \t\r\n\f")
- (and (eq (char-before (point)) ?\\ )
- (py-escaped))))
-
-(defun py--escape-doublequotes (start end)
- "Escape doublequotes in region by START END."
- (let ((end (copy-marker end)))
- (save-excursion
- (goto-char start)
- (while (and (not (eobp)) (< 0 (abs (skip-chars-forward "^\"" end))))
- (when (eq (char-after) ?\")
- (unless (py-escaped)
- (insert "\\")
- (forward-char 1)))))))
-
-(defun py--escape-open-paren-col1 (start end)
- "Start from position START until position END."
- (goto-char start)
- (while (re-search-forward "^(" end t 1)
- (insert "\\")
- (end-of-line)))
-
-(and py-company-pycomplete-p (require 'company-pycomplete))
-
-(defcustom py-empty-line-p-chars "^[ \t\r]*$"
- "empty-line-p-chars"
- :type 'regexp
- :group 'convenience)
-
-(defun py-empty-line-p (&optional iact)
- "Return t if cursor is at an empty line, nil otherwise.
-Optional argument INTERACT bla."
- (interactive "p")
- (save-excursion
- (beginning-of-line)
- (when (and iact py-verbose-p)
- (message "%s" (looking-at py-empty-line-p-chars)))
- (looking-at py-empty-line-p-chars)))
-
-(defun py-toggle-closing-list-dedents-bos (&optional arg)
- "Switches boolean variable ‘py-closing-list-dedents-bos’.
-
-With optional ARG message state switched to"
- (interactive "p")
- (setq py-closing-list-dedents-bos (not py-closing-list-dedents-bos))
- (when arg (message "py-closing-list-dedents-bos: %s" py-closing-list-dedents-bos)))
-
-(defmacro py-test-with-temp-buffer-point-min (contents &rest body)
- "Create temp buffer in `python-mode' inserting CONTENTS.
-BODY is code to be executed within the temp buffer. Point is
- at the beginning of buffer."
- (declare (indent 1) (debug t))
- `(with-temp-buffer
- (let (hs-minor-mode py--imenu-create-index-p)
- (insert ,contents)
- (python-mode)
- (goto-char (point-min))
- (when py-debug-p
- (switch-to-buffer (current-buffer))
- (font-lock-fontify-region (point-min) (point-max)))
- ,@body)))
-
-(defmacro py-test-with-temp-buffer (contents &rest body)
- "Create temp buffer in `python-mode' inserting CONTENTS.
-BODY is code to be executed within the temp buffer. Point is
- at the end of buffer."
- (declare (indent 1) (debug t))
- `(with-temp-buffer
- (let (hs-minor-mode py--imenu-create-index-p)
- (insert ,contents)
- (python-mode)
- (when py-debug-p
- (switch-to-buffer (current-buffer))
- (font-lock-fontify-region (point-min) (point-max)))
- ,@body)))
-
-;; from jit-lock.el
-(defmacro with-buffer-prepared-for-jit-lock (&rest body)
- "Execute BODY in current buffer, overriding several variables.
-Preserves the `buffer-modified-p' state of the current buffer."
- (declare (debug t))
- `(let ((inhibit-point-motion-hooks t))
- (with-silent-modifications
- ,@body)))
-
-;; now installed by py-load-named-shells
-;; (require 'python-components-named-shells)
-
-
-
-(require 'ansi-color)
-(ignore-errors (require 'subr-x))
-(require 'cc-cmds)
-(require 'cl)
-(require 'comint)
-(require 'compile)
-(require 'custom)
-(require 'ert)
-(require 'flymake)
-(require 'hippie-exp)
-(require 'shell)
-(require 'thingatpt)
-(require 'which-func)
-(require 'tramp)
-(require 'tramp-sh)
-
-(defun py-define-menu (map)
- (easy-menu-define py-menu map "Py"
- `("Python"
- ("Interpreter"
- ["Ipython" ipython
- :help " `ipython'
-Start an IPython interpreter."]
-
- ["Ipython2\.7" ipython2\.7
- :help " `ipython2\.7'"]
-
- ["Ipython3" ipython3
- :help " `ipython3'
-Start an IPython3 interpreter."]
-
- ["Jython" jython
- :help " `jython'
-Start an Jython interpreter."]
-
- ["Python" python
- :help " `python'
-Start an Python interpreter."]
-
- ["Python2" python2
- :help " `python2'
-Start an Python2 interpreter."]
-
- ["Python3" python3
- :help " `python3'
-Start an Python3 interpreter."])
- ("Edit"
- ("Shift"
- ("Shift right"
- ["Shift block right" py-shift-block-right
- :help " `py-shift-block-right'
-Indent block by COUNT spaces."]
-
- ["Shift block or clause right" py-shift-block-or-clause-right
- :help " `py-shift-block-or-clause-right'
-Indent block-or-clause by COUNT spaces."]
-
- ["Shift class right" py-shift-class-right
- :help " `py-shift-class-right'
-Indent class by COUNT spaces."]
-
- ["Shift clause right" py-shift-clause-right
- :help " `py-shift-clause-right'
-Indent clause by COUNT spaces."]
-
- ["Shift comment right" py-shift-comment-right
- :help " `py-shift-comment-right'
-Indent comment by COUNT spaces."]
-
- ["Shift def right" py-shift-def-right
- :help " `py-shift-def-right'
-Indent def by COUNT spaces."]
-
- ["Shift def or class right" py-shift-def-or-class-right
- :help " `py-shift-def-or-class-right'
-Indent def-or-class by COUNT spaces."]
-
- ["Shift indent right" py-shift-indent-right
- :help " `py-shift-indent-right'
-Indent indent by COUNT spaces."]
-
- ["Shift minor block right" py-shift-minor-block-right
- :help " `py-shift-minor-block-right'
-Indent minor-block by COUNT spaces."]
-
- ["Shift paragraph right" py-shift-paragraph-right
- :help " `py-shift-paragraph-right'
-Indent paragraph by COUNT spaces."]
-
- ["Shift region right" py-shift-region-right
- :help " `py-shift-region-right'
-Indent region by COUNT spaces."]
-
- ["Shift statement right" py-shift-statement-right
- :help " `py-shift-statement-right'
-Indent statement by COUNT spaces."]
-
- ["Shift top level right" py-shift-top-level-right
- :help " `py-shift-top-level-right'
-Indent top-level by COUNT spaces."])
- ("Shift left"
- ["Shift block left" py-shift-block-left
- :help " `py-shift-block-left'
-Dedent block by COUNT spaces."]
-
- ["Shift block or clause left" py-shift-block-or-clause-left
- :help " `py-shift-block-or-clause-left'
-Dedent block-or-clause by COUNT spaces."]
-
- ["Shift class left" py-shift-class-left
- :help " `py-shift-class-left'
-Dedent class by COUNT spaces."]
-
- ["Shift clause left" py-shift-clause-left
- :help " `py-shift-clause-left'
-Dedent clause by COUNT spaces."]
-
- ["Shift comment left" py-shift-comment-left
- :help " `py-shift-comment-left'
-Dedent comment by COUNT spaces."]
-
- ["Shift def left" py-shift-def-left
- :help " `py-shift-def-left'
-Dedent def by COUNT spaces."]
-
- ["Shift def or class left" py-shift-def-or-class-left
- :help " `py-shift-def-or-class-left'
-Dedent def-or-class by COUNT spaces."]
-
- ["Shift indent left" py-shift-indent-left
- :help " `py-shift-indent-left'
-Dedent indent by COUNT spaces."]
-
- ["Shift minor block left" py-shift-minor-block-left
- :help " `py-shift-minor-block-left'
-Dedent minor-block by COUNT spaces."]
-
- ["Shift paragraph left" py-shift-paragraph-left
- :help " `py-shift-paragraph-left'
-Dedent paragraph by COUNT spaces."]
-
- ["Shift region left" py-shift-region-left
- :help " `py-shift-region-left'
-Dedent region by COUNT spaces."]
-
- ["Shift statement left" py-shift-statement-left
- :help " `py-shift-statement-left'
-Dedent statement by COUNT spaces."]))
- ("Mark"
- ["Mark block" py-mark-block
- :help " `py-mark-block'
-Mark block, take beginning of line positions."]
-
- ["Mark block or clause" py-mark-block-or-clause
- :help " `py-mark-block-or-clause'
-Mark block-or-clause, take beginning of line positions."]
-
- ["Mark class" py-mark-class
- :help " `py-mark-class'
-Mark class, take beginning of line positions."]
-
- ["Mark clause" py-mark-clause
- :help " `py-mark-clause'
-Mark clause, take beginning of line positions."]
-
- ["Mark comment" py-mark-comment
- :help " `py-mark-comment'
-Mark comment at point."]
-
- ["Mark def" py-mark-def
- :help " `py-mark-def'
-Mark def, take beginning of line positions."]
-
- ["Mark def or class" py-mark-def-or-class
- :help " `py-mark-def-or-class'
-Mark def-or-class, take beginning of line positions."]
-
- ["Mark expression" py-mark-expression
- :help " `py-mark-expression'
-Mark expression at point."]
-
- ["Mark except block" py-mark-except-block
- :help " `py-mark-except-block'
-Mark except-block, take beginning of line positions."]
-
- ["Mark if block" py-mark-if-block
- :help " `py-mark-if-block'
-Mark if-block, take beginning of line positions."]
-
- ["Mark indent" py-mark-indent
- :help " `py-mark-indent'
-Mark indent, take beginning of line positions."]
-
- ["Mark line" py-mark-line
- :help " `py-mark-line'
-Mark line at point."]
-
- ["Mark minor block" py-mark-minor-block
- :help " `py-mark-minor-block'
-Mark minor-block, take beginning of line positions."]
-
- ["Mark partial expression" py-mark-partial-expression
- :help " `py-mark-partial-expression'
-Mark partial-expression at point."]
-
- ["Mark paragraph" py-mark-paragraph
- :help " `py-mark-paragraph'
-Mark paragraph at point."]
-
- ["Mark section" py-mark-section
- :help " `py-mark-section'
-Mark section at point."]
-
- ["Mark statement" py-mark-statement
- :help " `py-mark-statement'
-Mark statement, take beginning of line positions."]
-
- ["Mark top level" py-mark-top-level
- :help " `py-mark-top-level'
-Mark top-level, take beginning of line positions."]
-
- ["Mark try block" py-mark-try-block
- :help " `py-mark-try-block'
-Mark try-block, take beginning of line positions."])
- ("Copy"
- ["Copy block" py-copy-block
- :help " `py-copy-block'
-Copy block at point."]
-
- ["Copy block or clause" py-copy-block-or-clause
- :help " `py-copy-block-or-clause'
-Copy block-or-clause at point."]
-
- ["Copy class" py-copy-class
- :help " `py-copy-class'
-Copy class at point."]
-
- ["Copy clause" py-copy-clause
- :help " `py-copy-clause'
-Copy clause at point."]
-
- ["Copy comment" py-copy-comment
- :help " `py-copy-comment'"]
-
- ["Copy def" py-copy-def
- :help " `py-copy-def'
-Copy def at point."]
-
- ["Copy def or class" py-copy-def-or-class
- :help " `py-copy-def-or-class'
-Copy def-or-class at point."]
-
- ["Copy expression" py-copy-expression
- :help " `py-copy-expression'
-Copy expression at point."]
-
- ["Copy except block" py-copy-except-block
- :help " `py-copy-except-block'"]
-
- ["Copy if block" py-copy-if-block
- :help " `py-copy-if-block'"]
-
- ["Copy indent" py-copy-indent
- :help " `py-copy-indent'
-Copy indent at point."]
-
- ["Copy line" py-copy-line
- :help " `py-copy-line'
-Copy line at point."]
-
- ["Copy minor block" py-copy-minor-block
- :help " `py-copy-minor-block'
-Copy minor-block at point."]
-
- ["Copy partial expression" py-copy-partial-expression
- :help " `py-copy-partial-expression'
-Copy partial-expression at point."]
-
- ["Copy paragraph" py-copy-paragraph
- :help " `py-copy-paragraph'
-Copy paragraph at point."]
-
- ["Copy section" py-copy-section
- :help " `py-copy-section'"]
-
- ["Copy statement" py-copy-statement
- :help " `py-copy-statement'
-Copy statement at point."]
-
- ["Copy top level" py-copy-top-level
- :help " `py-copy-top-level'
-Copy top-level at point."])
- ("Kill"
- ["Kill block" py-kill-block
- :help " `py-kill-block'
-Delete block at point."]
-
- ["Kill block or clause" py-kill-block-or-clause
- :help " `py-kill-block-or-clause'
-Delete block-or-clause at point."]
-
- ["Kill class" py-kill-class
- :help " `py-kill-class'
-Delete class at point."]
-
- ["Kill clause" py-kill-clause
- :help " `py-kill-clause'
-Delete clause at point."]
-
- ["Kill comment" py-kill-comment
- :help " `py-kill-comment'
-Delete comment at point."]
-
- ["Kill def" py-kill-def
- :help " `py-kill-def'
-Delete def at point."]
-
- ["Kill def or class" py-kill-def-or-class
- :help " `py-kill-def-or-class'
-Delete def-or-class at point."]
-
- ["Kill expression" py-kill-expression
- :help " `py-kill-expression'
-Delete expression at point."]
-
- ["Kill except block" py-kill-except-block
- :help " `py-kill-except-block'
-Delete except-block at point."]
-
- ["Kill if block" py-kill-if-block
- :help " `py-kill-if-block'
-Delete if-block at point."]
-
- ["Kill indent" py-kill-indent
- :help " `py-kill-indent'
-Delete indent at point."]
-
- ["Kill line" py-kill-line
- :help " `py-kill-line'
-Delete line at point."]
-
- ["Kill minor block" py-kill-minor-block
- :help " `py-kill-minor-block'
-Delete minor-block at point."]
-
- ["Kill partial expression" py-kill-partial-expression
- :help " `py-kill-partial-expression'
-Delete partial-expression at point."]
-
- ["Kill paragraph" py-kill-paragraph
- :help " `py-kill-paragraph'
-Delete paragraph at point."]
-
- ["Kill section" py-kill-section
- :help " `py-kill-section'
-Delete section at point."]
-
- ["Kill statement" py-kill-statement
- :help " `py-kill-statement'
-Delete statement at point."]
-
- ["Kill top level" py-kill-top-level
- :help " `py-kill-top-level'
-Delete top-level at point."]
-
- ["Kill try block" py-kill-try-block
- :help " `py-kill-try-block'
-Delete try-block at point."])
- ("Delete"
- ["Delete block" py-delete-block
- :help " `py-delete-block'
-Delete BLOCK at point until beginning-of-line."]
-
- ["Delete block or clause" py-delete-block-or-clause
- :help " `py-delete-block-or-clause'
-Delete BLOCK-OR-CLAUSE at point until beginning-of-line."]
-
- ["Delete class" py-delete-class
- :help " `py-delete-class'
-Delete CLASS at point until beginning-of-line."]
-
- ["Delete clause" py-delete-clause
- :help " `py-delete-clause'
-Delete CLAUSE at point until beginning-of-line."]
-
- ["Delete comment" py-delete-comment
- :help " `py-delete-comment'
-Delete COMMENT at point."]
-
- ["Delete def" py-delete-def
- :help " `py-delete-def'
-Delete DEF at point until beginning-of-line."]
-
- ["Delete def or class" py-delete-def-or-class
- :help " `py-delete-def-or-class'
-Delete DEF-OR-CLASS at point until beginning-of-line."]
-
- ["Delete expression" py-delete-expression
- :help " `py-delete-expression'
-Delete EXPRESSION at point."]
-
- ["Delete except block" py-delete-except-block
- :help " `py-delete-except-block'
-Delete EXCEPT-BLOCK at point until beginning-of-line."]
-
- ["Delete if block" py-delete-if-block
- :help " `py-delete-if-block'
-Delete IF-BLOCK at point until beginning-of-line."]
-
- ["Delete indent" py-delete-indent
- :help " `py-delete-indent'
-Delete INDENT at point until beginning-of-line."]
-
- ["Delete line" py-delete-line
- :help " `py-delete-line'
-Delete LINE at point."]
-
- ["Delete minor block" py-delete-minor-block
- :help " `py-delete-minor-block'
-Delete MINOR-BLOCK at point until beginning-of-line."]
-
- ["Delete partial expression" py-delete-partial-expression
- :help " `py-delete-partial-expression'
-Delete PARTIAL-EXPRESSION at point."]
-
- ["Delete paragraph" py-delete-paragraph
- :help " `py-delete-paragraph'
-Delete PARAGRAPH at point."]
-
- ["Delete section" py-delete-section
- :help " `py-delete-section'
-Delete SECTION at point."]
-
- ["Delete statement" py-delete-statement
- :help " `py-delete-statement'
-Delete STATEMENT at point until beginning-of-line."]
-
- ["Delete top level" py-delete-top-level
- :help " `py-delete-top-level'
-Delete TOP-LEVEL at point."]
-
- ["Delete try block" py-delete-try-block
- :help " `py-delete-try-block'
-Delete TRY-BLOCK at point until beginning-of-line."])
- ("Comment"
- ["Comment block" py-comment-block
- :help " `py-comment-block'
-Comments block at point."]
-
- ["Comment block or clause" py-comment-block-or-clause
- :help " `py-comment-block-or-clause'
-Comments block-or-clause at point."]
-
- ["Comment class" py-comment-class
- :help " `py-comment-class'
-Comments class at point."]
-
- ["Comment clause" py-comment-clause
- :help " `py-comment-clause'
-Comments clause at point."]
-
- ["Comment def" py-comment-def
- :help " `py-comment-def'
-Comments def at point."]
-
- ["Comment def or class" py-comment-def-or-class
- :help " `py-comment-def-or-class'
-Comments def-or-class at point."]
-
- ["Comment indent" py-comment-indent
- :help " `py-comment-indent'
-Comments indent at point."]
-
- ["Comment minor block" py-comment-minor-block
- :help " `py-comment-minor-block'
-Comments minor-block at point."]
-
- ["Comment section" py-comment-section
- :help " `py-comment-section'
-Comments section at point."]
-
- ["Comment statement" py-comment-statement
- :help " `py-comment-statement'
-Comments statement at point."]
-
- ["Comment top level" py-comment-top-level
- :help " `py-comment-top-level'
-Comments top-level at point."]))
- ("Move"
- ("Backward"
-
- ["Backward def or class" py-backward-def-or-class
- :help " `py-backward-def-or-class'
-Go to beginning of def-or-class."]
-
- ["Backward class" py-backward-class
- :help " `py-backward-class'
-Go to beginning of class."]
-
- ["Backward def" py-backward-def
- :help " `py-backward-def'
-Go to beginning of def."]
-
- ["Backward block" py-backward-block
- :help " `py-backward-block'
-Go to beginning of ‘block’."]
-
- ["Backward statement" py-backward-statement
- :help " `py-backward-statement'
-Go to the initial line of a simple statement."]
-
- ["Backward indent" py-backward-indent
- :help " `py-backward-indent'
-Go to the beginning of a section of equal indent."]
-
- ["Backward top level" py-backward-top-level
- :help " `py-backward-top-level'
-Go up to beginning of statments until level of indentation is null."]
-
- ("Other"
- ["Backward section" py-backward-section
- :help " `py-backward-section'
-Go to next section start upward in buffer."]
-
- ["Backward expression" py-backward-expression
- :help " `py-backward-expression'"]
-
- ["Backward partial expression" py-backward-partial-expression
- :help " `py-backward-partial-expression'"]
-
- ["Backward assignment" py-backward-assignment
- :help " `py-backward-assignment'"]
-
- ["Backward block or clause" py-backward-block-or-clause
- :help " `py-backward-block-or-clause'
-Go to beginning of ‘block-or-clause’."]
-
- ["Backward clause" py-backward-clause
- :help " `py-backward-clause'
-Go to beginning of ‘clause’."]
-
- ["Backward elif block" py-backward-elif-block
- :help " `py-backward-elif-block'
-Go to beginning of ‘elif-block’."]
-
- ["Backward else block" py-backward-else-block
- :help " `py-backward-else-block'
-Go to beginning of ‘else-block’."]
-
- ["Backward except block" py-backward-except-block
- :help " `py-backward-except-block'
-Go to beginning of ‘except-block’."]
-
- ["Backward if block" py-backward-if-block
- :help " `py-backward-if-block'
-Go to beginning of ‘if-block’."]
-
- ["Backward minor block" py-backward-minor-block
- :help " `py-backward-minor-block'
-Go to beginning of ‘minor-block’."]
-
- ["Backward try block" py-backward-try-block
- :help " `py-backward-try-block'
-Go to beginning of ‘try-block’."]))
- ("Forward"
- ["Forward def or class" py-forward-def-or-class
- :help " `py-forward-def-or-class'
-Go to end of def-or-class."]
-
- ["Forward class" py-forward-class
- :help " `py-forward-class'
-Go to end of class."]
-
- ["Forward def" py-forward-def
- :help " `py-forward-def'
-Go to end of def."]
-
- ["Forward block" py-forward-block
- :help " `py-forward-block'
-Go to end of block."]
-
- ["Forward statement" py-forward-statement
- :help " `py-forward-statement'
-Go to the last char of current statement."]
-
- ["Forward indent" py-forward-indent
- :help " `py-forward-indent'
-Go to the end of a section of equal indentation."]
-
- ["Forward top level" py-forward-top-level
- :help " `py-forward-top-level'
-Go to end of top-level form at point."]
-
- ("Other"
- ["Forward section" py-forward-section
- :help " `py-forward-section'
-Go to next section end downward in buffer."]
-
- ["Forward expression" py-forward-expression
- :help " `py-forward-expression'"]
-
- ["Forward partial expression" py-forward-partial-expression
- :help " `py-forward-partial-expression'"]
-
- ["Forward assignment" py-forward-assignment
- :help " `py-forward-assignment'"]
-
- ["Forward block or clause" py-forward-block-or-clause
- :help " `py-forward-block-or-clause'
-Go to end of block-or-clause."]
-
- ["Forward clause" py-forward-clause
- :help " `py-forward-clause'
-Go to end of clause."]
-
- ["Forward for block" py-forward-for-block
- :help " `py-forward-for-block'
-Go to end of for-block."]
-
- ["Forward elif block" py-forward-elif-block
- :help " `py-forward-elif-block'
-Go to end of elif-block."]
-
- ["Forward else block" py-forward-else-block
- :help " `py-forward-else-block'
-Go to end of else-block."]
-
- ["Forward except block" py-forward-except-block
- :help " `py-forward-except-block'
-Go to end of except-block."]
-
- ["Forward if block" py-forward-if-block
- :help " `py-forward-if-block'
-Go to end of if-block."]
-
- ["Forward minor block" py-forward-minor-block
- :help " `py-forward-minor-block'
-Go to end of minor-block."]
- ["Forward try block" py-forward-try-block
- :help " `py-forward-try-block'
-Go to end of try-block."]))
- ("BOL-forms"
- ("Backward"
- ["Backward block bol" py-backward-block-bol
- :help " `py-backward-block-bol'
-Go to beginning of ‘block’, go to BOL."]
-
- ["Backward block or clause bol" py-backward-block-or-clause-bol
- :help " `py-backward-block-or-clause-bol'
-Go to beginning of ‘block-or-clause’, go to BOL."]
-
- ["Backward class bol" py-backward-class-bol
- :help " `py-backward-class-bol'
-Go to beginning of class, go to BOL."]
-
- ["Backward clause bol" py-backward-clause-bol
- :help " `py-backward-clause-bol'
-Go to beginning of ‘clause’, go to BOL."]
-
- ["Backward def bol" py-backward-def-bol
- :help " `py-backward-def-bol'
-Go to beginning of def, go to BOL."]
-
- ["Backward def or class bol" py-backward-def-or-class-bol
- :help " `py-backward-def-or-class-bol'
-Go to beginning of def-or-class, go to BOL."]
-
- ["Backward elif block bol" py-backward-elif-block-bol
- :help " `py-backward-elif-block-bol'
-Go to beginning of ‘elif-block’, go to BOL."]
-
- ["Backward else block bol" py-backward-else-block-bol
- :help " `py-backward-else-block-bol'
-Go to beginning of ‘else-block’, go to BOL."]
-
- ["Backward except block bol" py-backward-except-block-bol
- :help " `py-backward-except-block-bol'
-Go to beginning of ‘except-block’, go to BOL."]
-
- ["Backward expression bol" py-backward-expression-bol
- :help " `py-backward-expression-bol'"]
-
- ["Backward for block bol" py-backward-for-block-bol
- :help " `py-backward-for-block-bol'
-Go to beginning of ‘for-block’, go to BOL."]
-
- ["Backward if block bol" py-backward-if-block-bol
- :help " `py-backward-if-block-bol'
-Go to beginning of ‘if-block’, go to BOL."]
-
- ["Backward indent bol" py-backward-indent-bol
- :help " `py-backward-indent-bol'
-Go to the beginning of line of a section of equal indent."]
-
- ["Backward minor block bol" py-backward-minor-block-bol
- :help " `py-backward-minor-block-bol'
-Go to beginning of ‘minor-block’, go to BOL."]
-
- ["Backward partial expression bol" py-backward-partial-expression-bol
- :help " `py-backward-partial-expression-bol'"]
-
- ["Backward section bol" py-backward-section-bol
- :help " `py-backward-section-bol'"]
-
- ["Backward statement bol" py-backward-statement-bol
- :help " `py-backward-statement-bol'
-Goto beginning of line where statement starts."]
-
- ["Backward try block bol" py-backward-try-block-bol
- :help " `py-backward-try-block-bol'
-Go to beginning of ‘try-block’, go to BOL."])
- ("Forward"
- ["Forward block bol" py-forward-block-bol
- :help " `py-forward-block-bol'
-Goto beginning of line following end of block."]
-
- ["Forward block or clause bol" py-forward-block-or-clause-bol
- :help " `py-forward-block-or-clause-bol'
-Goto beginning of line following end of block-or-clause."]
-
- ["Forward class bol" py-forward-class-bol
- :help " `py-forward-class-bol'
-Goto beginning of line following end of class."]
-
- ["Forward clause bol" py-forward-clause-bol
- :help " `py-forward-clause-bol'
-Goto beginning of line following end of clause."]
-
- ["Forward def bol" py-forward-def-bol
- :help " `py-forward-def-bol'
-Goto beginning of line following end of def."]
-
- ["Forward def or class bol" py-forward-def-or-class-bol
- :help " `py-forward-def-or-class-bol'
-Goto beginning of line following end of def-or-class."]
-
- ["Forward elif block bol" py-forward-elif-block-bol
- :help " `py-forward-elif-block-bol'
-Goto beginning of line following end of elif-block."]
-
- ["Forward else block bol" py-forward-else-block-bol
- :help " `py-forward-else-block-bol'
-Goto beginning of line following end of else-block."]
-
- ["Forward except block bol" py-forward-except-block-bol
- :help " `py-forward-except-block-bol'
-Goto beginning of line following end of except-block."]
-
- ["Forward expression bol" py-forward-expression-bol
- :help " `py-forward-expression-bol'"]
-
- ["Forward for block bol" py-forward-for-block-bol
- :help " `py-forward-for-block-bol'
-Goto beginning of line following end of for-block."]
-
- ["Forward if block bol" py-forward-if-block-bol
- :help " `py-forward-if-block-bol'
-Goto beginning of line following end of if-block."]
-
- ["Forward indent bol" py-forward-indent-bol
- :help " `py-forward-indent-bol'
-Go to beginning of line following of a section of equal indentation."]
-
- ["Forward minor block bol" py-forward-minor-block-bol
- :help " `py-forward-minor-block-bol'
-Goto beginning of line following end of minor-block."]
-
- ["Forward partial expression bol" py-forward-partial-expression-bol
- :help " `py-forward-partial-expression-bol'"]
-
- ["Forward section bol" py-forward-section-bol
- :help " `py-forward-section-bol'"]
-
- ["Forward statement bol" py-forward-statement-bol
- :help " `py-forward-statement-bol'
-Go to the beginning-of-line following current statement."]
-
- ["Forward top level bol" py-forward-top-level-bol
- :help " `py-forward-top-level-bol'
-Go to end of top-level form at point, stop at next beginning-of-line."]
-
- ["Forward try block bol" py-forward-try-block-bol
- :help " `py-forward-try-block-bol'
-Goto beginning of line following end of try-block."]))
- ("Up/Down"
- ["Up" py-up
- :help " `py-up'
-Go up or to beginning of form if inside."]
-
- ["Down" py-down
- :help " `py-down'
-Go to beginning one level below of compound statement or definition at point."]))
- ("Send"
- ["Execute block" py-execute-block
- :help " `py-execute-block'
-Send block at point to interpreter."]
-
- ["Execute block or clause" py-execute-block-or-clause
- :help " `py-execute-block-or-clause'
-Send block-or-clause at point to interpreter."]
-
- ["Execute buffer" py-execute-buffer
- :help " `py-execute-buffer'
-:around advice: ‘ad-Advice-py-execute-buffer’"]
-
- ["Execute class" py-execute-class
- :help " `py-execute-class'
-Send class at point to interpreter."]
-
- ["Execute clause" py-execute-clause
- :help " `py-execute-clause'
-Send clause at point to interpreter."]
-
- ["Execute def" py-execute-def
- :help " `py-execute-def'
-Send def at point to interpreter."]
-
- ["Execute def or class" py-execute-def-or-class
- :help " `py-execute-def-or-class'
-Send def-or-class at point to interpreter."]
-
- ["Execute expression" py-execute-expression
- :help " `py-execute-expression'
-Send expression at point to interpreter."]
-
- ["Execute indent" py-execute-indent
- :help " `py-execute-indent'
-Send indent at point to interpreter."]
-
- ["Execute line" py-execute-line
- :help " `py-execute-line'
-Send line at point to interpreter."]
-
- ["Execute minor block" py-execute-minor-block
- :help " `py-execute-minor-block'
-Send minor-block at point to interpreter."]
-
- ["Execute paragraph" py-execute-paragraph
- :help " `py-execute-paragraph'
-Send paragraph at point to interpreter."]
-
- ["Execute partial expression" py-execute-partial-expression
- :help " `py-execute-partial-expression'
-Send partial-expression at point to interpreter."]
-
- ["Execute region" py-execute-region
- :help " `py-execute-region'
-Send region at point to interpreter."]
-
- ["Execute statement" py-execute-statement
- :help " `py-execute-statement'
-Send statement at point to interpreter."]
-
- ["Execute top level" py-execute-top-level
- :help " `py-execute-top-level'
-Send top-level at point to interpreter."]
- ("Other"
- ("IPython"
- ["Execute block ipython" py-execute-block-ipython
- :help " `py-execute-block-ipython'
-Send block at point to IPython interpreter."]
-
- ["Execute block or clause ipython" py-execute-block-or-clause-ipython
- :help " `py-execute-block-or-clause-ipython'
-Send block-or-clause at point to IPython interpreter."]
-
- ["Execute buffer ipython" py-execute-buffer-ipython
- :help " `py-execute-buffer-ipython'
-Send buffer at point to IPython interpreter."]
-
- ["Execute class ipython" py-execute-class-ipython
- :help " `py-execute-class-ipython'
-Send class at point to IPython interpreter."]
-
- ["Execute clause ipython" py-execute-clause-ipython
- :help " `py-execute-clause-ipython'
-Send clause at point to IPython interpreter."]
-
- ["Execute def ipython" py-execute-def-ipython
- :help " `py-execute-def-ipython'
-Send def at point to IPython interpreter."]
-
- ["Execute def or class ipython" py-execute-def-or-class-ipython
- :help " `py-execute-def-or-class-ipython'
-Send def-or-class at point to IPython interpreter."]
-
- ["Execute expression ipython" py-execute-expression-ipython
- :help " `py-execute-expression-ipython'
-Send expression at point to IPython interpreter."]
-
- ["Execute indent ipython" py-execute-indent-ipython
- :help " `py-execute-indent-ipython'
-Send indent at point to IPython interpreter."]
-
- ["Execute line ipython" py-execute-line-ipython
- :help " `py-execute-line-ipython'
-Send line at point to IPython interpreter."]
-
- ["Execute minor block ipython" py-execute-minor-block-ipython
- :help " `py-execute-minor-block-ipython'
-Send minor-block at point to IPython interpreter."]
-
- ["Execute paragraph ipython" py-execute-paragraph-ipython
- :help " `py-execute-paragraph-ipython'
-Send paragraph at point to IPython interpreter."]
-
- ["Execute partial expression ipython" py-execute-partial-expression-ipython
- :help " `py-execute-partial-expression-ipython'
-Send partial-expression at point to IPython interpreter."]
-
- ["Execute region ipython" py-execute-region-ipython
- :help " `py-execute-region-ipython'
-Send region at point to IPython interpreter."]
-
- ["Execute statement ipython" py-execute-statement-ipython
- :help " `py-execute-statement-ipython'
-Send statement at point to IPython interpreter."]
-
- ["Execute top level ipython" py-execute-top-level-ipython
- :help " `py-execute-top-level-ipython'
-Send top-level at point to IPython interpreter."])
- ("IPython2"
- ["Execute block ipython2" py-execute-block-ipython2
- :help " `py-execute-block-ipython2'"]
-
- ["Execute block or clause ipython2" py-execute-block-or-clause-ipython2
- :help " `py-execute-block-or-clause-ipython2'"]
-
- ["Execute buffer ipython2" py-execute-buffer-ipython2
- :help " `py-execute-buffer-ipython2'"]
-
- ["Execute class ipython2" py-execute-class-ipython2
- :help " `py-execute-class-ipython2'"]
-
- ["Execute clause ipython2" py-execute-clause-ipython2
- :help " `py-execute-clause-ipython2'"]
-
- ["Execute def ipython2" py-execute-def-ipython2
- :help " `py-execute-def-ipython2'"]
-
- ["Execute def or class ipython2" py-execute-def-or-class-ipython2
- :help " `py-execute-def-or-class-ipython2'"]
-
- ["Execute expression ipython2" py-execute-expression-ipython2
- :help " `py-execute-expression-ipython2'"]
-
- ["Execute indent ipython2" py-execute-indent-ipython2
- :help " `py-execute-indent-ipython2'"]
-
- ["Execute line ipython2" py-execute-line-ipython2
- :help " `py-execute-line-ipython2'"]
-
- ["Execute minor block ipython2" py-execute-minor-block-ipython2
- :help " `py-execute-minor-block-ipython2'"]
-
- ["Execute paragraph ipython2" py-execute-paragraph-ipython2
- :help " `py-execute-paragraph-ipython2'"]
-
- ["Execute partial expression ipython2" py-execute-partial-expression-ipython2
- :help " `py-execute-partial-expression-ipython2'"]
-
- ["Execute region ipython2" py-execute-region-ipython2
- :help " `py-execute-region-ipython2'"]
-
- ["Execute statement ipython2" py-execute-statement-ipython2
- :help " `py-execute-statement-ipython2'"]
-
- ["Execute top level ipython2" py-execute-top-level-ipython2
- :help " `py-execute-top-level-ipython2'"])
- ("IPython3"
- ["Execute block ipython3" py-execute-block-ipython3
- :help " `py-execute-block-ipython3'
-Send block at point to IPython interpreter."]
-
- ["Execute block or clause ipython3" py-execute-block-or-clause-ipython3
- :help " `py-execute-block-or-clause-ipython3'
-Send block-or-clause at point to IPython interpreter."]
-
- ["Execute buffer ipython3" py-execute-buffer-ipython3
- :help " `py-execute-buffer-ipython3'
-Send buffer at point to IPython interpreter."]
-
- ["Execute class ipython3" py-execute-class-ipython3
- :help " `py-execute-class-ipython3'
-Send class at point to IPython interpreter."]
-
- ["Execute clause ipython3" py-execute-clause-ipython3
- :help " `py-execute-clause-ipython3'
-Send clause at point to IPython interpreter."]
-
- ["Execute def ipython3" py-execute-def-ipython3
- :help " `py-execute-def-ipython3'
-Send def at point to IPython interpreter."]
-
- ["Execute def or class ipython3" py-execute-def-or-class-ipython3
- :help " `py-execute-def-or-class-ipython3'
-Send def-or-class at point to IPython interpreter."]
-
- ["Execute expression ipython3" py-execute-expression-ipython3
- :help " `py-execute-expression-ipython3'
-Send expression at point to IPython interpreter."]
-
- ["Execute indent ipython3" py-execute-indent-ipython3
- :help " `py-execute-indent-ipython3'
-Send indent at point to IPython interpreter."]
-
- ["Execute line ipython3" py-execute-line-ipython3
- :help " `py-execute-line-ipython3'
-Send line at point to IPython interpreter."]
-
- ["Execute minor block ipython3" py-execute-minor-block-ipython3
- :help " `py-execute-minor-block-ipython3'
-Send minor-block at point to IPython interpreter."]
-
- ["Execute paragraph ipython3" py-execute-paragraph-ipython3
- :help " `py-execute-paragraph-ipython3'
-Send paragraph at point to IPython interpreter."]
-
- ["Execute partial expression ipython3" py-execute-partial-expression-ipython3
- :help " `py-execute-partial-expression-ipython3'
-Send partial-expression at point to IPython interpreter."]
-
- ["Execute region ipython3" py-execute-region-ipython3
- :help " `py-execute-region-ipython3'
-Send region at point to IPython interpreter."]
-
- ["Execute statement ipython3" py-execute-statement-ipython3
- :help " `py-execute-statement-ipython3'
-Send statement at point to IPython interpreter."]
-
- ["Execute top level ipython3" py-execute-top-level-ipython3
- :help " `py-execute-top-level-ipython3'
-Send top-level at point to IPython interpreter."])
- ("Jython"
- ["Execute block jython" py-execute-block-jython
- :help " `py-execute-block-jython'
-Send block at point to Jython interpreter."]
-
- ["Execute block or clause jython" py-execute-block-or-clause-jython
- :help " `py-execute-block-or-clause-jython'
-Send block-or-clause at point to Jython interpreter."]
-
- ["Execute buffer jython" py-execute-buffer-jython
- :help " `py-execute-buffer-jython'
-Send buffer at point to Jython interpreter."]
-
- ["Execute class jython" py-execute-class-jython
- :help " `py-execute-class-jython'
-Send class at point to Jython interpreter."]
-
- ["Execute clause jython" py-execute-clause-jython
- :help " `py-execute-clause-jython'
-Send clause at point to Jython interpreter."]
-
- ["Execute def jython" py-execute-def-jython
- :help " `py-execute-def-jython'
-Send def at point to Jython interpreter."]
-
- ["Execute def or class jython" py-execute-def-or-class-jython
- :help " `py-execute-def-or-class-jython'
-Send def-or-class at point to Jython interpreter."]
-
- ["Execute expression jython" py-execute-expression-jython
- :help " `py-execute-expression-jython'
-Send expression at point to Jython interpreter."]
-
- ["Execute indent jython" py-execute-indent-jython
- :help " `py-execute-indent-jython'
-Send indent at point to Jython interpreter."]
-
- ["Execute line jython" py-execute-line-jython
- :help " `py-execute-line-jython'
-Send line at point to Jython interpreter."]
-
- ["Execute minor block jython" py-execute-minor-block-jython
- :help " `py-execute-minor-block-jython'
-Send minor-block at point to Jython interpreter."]
-
- ["Execute paragraph jython" py-execute-paragraph-jython
- :help " `py-execute-paragraph-jython'
-Send paragraph at point to Jython interpreter."]
-
- ["Execute partial expression jython" py-execute-partial-expression-jython
- :help " `py-execute-partial-expression-jython'
-Send partial-expression at point to Jython interpreter."]
-
- ["Execute region jython" py-execute-region-jython
- :help " `py-execute-region-jython'
-Send region at point to Jython interpreter."]
-
- ["Execute statement jython" py-execute-statement-jython
- :help " `py-execute-statement-jython'
-Send statement at point to Jython interpreter."]
-
- ["Execute top level jython" py-execute-top-level-jython
- :help " `py-execute-top-level-jython'
-Send top-level at point to Jython interpreter."])
- ("Python"
- ["Execute block python" py-execute-block-python
- :help " `py-execute-block-python'
-Send block at point to default interpreter."]
-
- ["Execute block or clause python" py-execute-block-or-clause-python
- :help " `py-execute-block-or-clause-python'
-Send block-or-clause at point to default interpreter."]
-
- ["Execute buffer python" py-execute-buffer-python
- :help " `py-execute-buffer-python'
-Send buffer at point to default interpreter."]
-
- ["Execute class python" py-execute-class-python
- :help " `py-execute-class-python'
-Send class at point to default interpreter."]
-
- ["Execute clause python" py-execute-clause-python
- :help " `py-execute-clause-python'
-Send clause at point to default interpreter."]
-
- ["Execute def python" py-execute-def-python
- :help " `py-execute-def-python'
-Send def at point to default interpreter."]
-
- ["Execute def or class python" py-execute-def-or-class-python
- :help " `py-execute-def-or-class-python'
-Send def-or-class at point to default interpreter."]
-
- ["Execute expression python" py-execute-expression-python
- :help " `py-execute-expression-python'
-Send expression at point to default interpreter."]
-
- ["Execute indent python" py-execute-indent-python
- :help " `py-execute-indent-python'
-Send indent at point to default interpreter."]
-
- ["Execute line python" py-execute-line-python
- :help " `py-execute-line-python'
-Send line at point to default interpreter."]
-
- ["Execute minor block python" py-execute-minor-block-python
- :help " `py-execute-minor-block-python'
-Send minor-block at point to default interpreter."]
-
- ["Execute paragraph python" py-execute-paragraph-python
- :help " `py-execute-paragraph-python'
-Send paragraph at point to default interpreter."]
-
- ["Execute partial expression python" py-execute-partial-expression-python
- :help " `py-execute-partial-expression-python'
-Send partial-expression at point to default interpreter."]
-
- ["Execute region python" py-execute-region-python
- :help " `py-execute-region-python'
-Send region at point to default interpreter."]
-
- ["Execute statement python" py-execute-statement-python
- :help " `py-execute-statement-python'
-Send statement at point to default interpreter."]
-
- ["Execute top level python" py-execute-top-level-python
- :help " `py-execute-top-level-python'
-Send top-level at point to default interpreter."])
- ("Python2"
- ["Execute block python2" py-execute-block-python2
- :help " `py-execute-block-python2'
-Send block at point to Python2 interpreter."]
-
- ["Execute block or clause python2" py-execute-block-or-clause-python2
- :help " `py-execute-block-or-clause-python2'
-Send block-or-clause at point to Python2 interpreter."]
-
- ["Execute buffer python2" py-execute-buffer-python2
- :help " `py-execute-buffer-python2'
-Send buffer at point to Python2 interpreter."]
-
- ["Execute class python2" py-execute-class-python2
- :help " `py-execute-class-python2'
-Send class at point to Python2 interpreter."]
-
- ["Execute clause python2" py-execute-clause-python2
- :help " `py-execute-clause-python2'
-Send clause at point to Python2 interpreter."]
-
- ["Execute def python2" py-execute-def-python2
- :help " `py-execute-def-python2'
-Send def at point to Python2 interpreter."]
-
- ["Execute def or class python2" py-execute-def-or-class-python2
- :help " `py-execute-def-or-class-python2'
-Send def-or-class at point to Python2 interpreter."]
-
- ["Execute expression python2" py-execute-expression-python2
- :help " `py-execute-expression-python2'
-Send expression at point to Python2 interpreter."]
-
- ["Execute indent python2" py-execute-indent-python2
- :help " `py-execute-indent-python2'
-Send indent at point to Python2 interpreter."]
-
- ["Execute line python2" py-execute-line-python2
- :help " `py-execute-line-python2'
-Send line at point to Python2 interpreter."]
-
- ["Execute minor block python2" py-execute-minor-block-python2
- :help " `py-execute-minor-block-python2'
-Send minor-block at point to Python2 interpreter."]
-
- ["Execute paragraph python2" py-execute-paragraph-python2
- :help " `py-execute-paragraph-python2'
-Send paragraph at point to Python2 interpreter."]
-
- ["Execute partial expression python2" py-execute-partial-expression-python2
- :help " `py-execute-partial-expression-python2'
-Send partial-expression at point to Python2 interpreter."]
-
- ["Execute region python2" py-execute-region-python2
- :help " `py-execute-region-python2'
-Send region at point to Python2 interpreter."]
-
- ["Execute statement python2" py-execute-statement-python2
- :help " `py-execute-statement-python2'
-Send statement at point to Python2 interpreter."]
-
- ["Execute top level python2" py-execute-top-level-python2
- :help " `py-execute-top-level-python2'
-Send top-level at point to Python2 interpreter."])
- ("Python3"
- ["Execute block python3" py-execute-block-python3
- :help " `py-execute-block-python3'
-Send block at point to Python3 interpreter."]
-
- ["Execute block or clause python3" py-execute-block-or-clause-python3
- :help " `py-execute-block-or-clause-python3'
-Send block-or-clause at point to Python3 interpreter."]
-
- ["Execute buffer python3" py-execute-buffer-python3
- :help " `py-execute-buffer-python3'
-Send buffer at point to Python3 interpreter."]
-
- ["Execute class python3" py-execute-class-python3
- :help " `py-execute-class-python3'
-Send class at point to Python3 interpreter."]
-
- ["Execute clause python3" py-execute-clause-python3
- :help " `py-execute-clause-python3'
-Send clause at point to Python3 interpreter."]
-
- ["Execute def python3" py-execute-def-python3
- :help " `py-execute-def-python3'
-Send def at point to Python3 interpreter."]
-
- ["Execute def or class python3" py-execute-def-or-class-python3
- :help " `py-execute-def-or-class-python3'
-Send def-or-class at point to Python3 interpreter."]
-
- ["Execute expression python3" py-execute-expression-python3
- :help " `py-execute-expression-python3'
-Send expression at point to Python3 interpreter."]
-
- ["Execute indent python3" py-execute-indent-python3
- :help " `py-execute-indent-python3'
-Send indent at point to Python3 interpreter."]
-
- ["Execute line python3" py-execute-line-python3
- :help " `py-execute-line-python3'
-Send line at point to Python3 interpreter."]
-
- ["Execute minor block python3" py-execute-minor-block-python3
- :help " `py-execute-minor-block-python3'
-Send minor-block at point to Python3 interpreter."]
-
- ["Execute paragraph python3" py-execute-paragraph-python3
- :help " `py-execute-paragraph-python3'
-Send paragraph at point to Python3 interpreter."]
-
- ["Execute partial expression python3" py-execute-partial-expression-python3
- :help " `py-execute-partial-expression-python3'
-Send partial-expression at point to Python3 interpreter."]
-
- ["Execute region python3" py-execute-region-python3
- :help " `py-execute-region-python3'
-Send region at point to Python3 interpreter."]
-
- ["Execute statement python3" py-execute-statement-python3
- :help " `py-execute-statement-python3'
-Send statement at point to Python3 interpreter."]
-
- ["Execute top level python3" py-execute-top-level-python3
- :help " `py-execute-top-level-python3'
-Send top-level at point to Python3 interpreter."])
- ("Ignoring defaults "
- :help "`M-x py-execute-statement- TAB' for example list commands ignoring defaults
-
- of `py-switch-buffers-on-execute-p' and `py-split-window-on-execute'")))
- ("Hide-Show"
- ("Hide"
- ["Hide block" py-hide-block
- :help " `py-hide-block'
-Hide block at point."]
-
- ["Hide top level" py-hide-top-level
- :help " `py-hide-top-level'
-Hide top-level at point."]
-
- ["Hide def" py-hide-def
- :help " `py-hide-def'
-Hide def at point."]
-
- ["Hide def or class" py-hide-def-or-class
- :help " `py-hide-def-or-class'
-Hide def-or-class at point."]
-
- ["Hide statement" py-hide-statement
- :help " `py-hide-statement'
-Hide statement at point."]
-
- ["Hide class" py-hide-class
- :help " `py-hide-class'
-Hide class at point."]
-
- ["Hide clause" py-hide-clause
- :help " `py-hide-clause'
-Hide clause at point."]
-
- ["Hide block or clause" py-hide-block-or-clause
- :help " `py-hide-block-or-clause'
-Hide block-or-clause at point."]
-
- ["Hide comment" py-hide-comment
- :help " `py-hide-comment'
-Hide comment at point."]
-
- ["Hide indent" py-hide-indent
- :help " `py-hide-indent'
-Hide indent at point."]
-
- ["Hide expression" py-hide-expression
- :help " `py-hide-expression'
-Hide expression at point."]
-
- ["Hide line" py-hide-line
- :help " `py-hide-line'
-Hide line at point."]
-
- ["Hide for-block" py-hide-for-block
- :help " `py-hide-for-block'
-Hide for-block at point."]
-
- ["Hide if-block" py-hide-if-block
- :help " `py-hide-if-block'
-Hide if-block at point."]
-
- ["Hide elif-block" py-hide-elif-block
- :help " `py-hide-elif-block'
-Hide elif-block at point."]
-
- ["Hide else-block" py-hide-else-block
- :help " `py-hide-else-block'
-Hide else-block at point."]
-
- ["Hide except-block" py-hide-except-block
- :help " `py-hide-except-block'
-Hide except-block at point."]
-
- ["Hide minor-block" py-hide-minor-block
- :help " `py-hide-minor-block'
-Hide minor-block at point."]
-
- ["Hide paragraph" py-hide-paragraph
- :help " `py-hide-paragraph'
-Hide paragraph at point."]
-
- ["Hide partial expression" py-hide-partial-expression
- :help " `py-hide-partial-expression'
-Hide partial-expression at point."]
-
- ["Hide section" py-hide-section
- :help " `py-hide-section'
-Hide section at point."])
- ("Show"
- ["Show all" py-show-all
- :help " `py-show-all'
-Show all in buffer."]
-
- ["Show" py-show
- :help " `py-show'
-Show hidden code at point."]))
- ("Fast process"
- ["Execute block fast" py-execute-block-fast
- :help " `py-execute-block-fast'
-Process block at point by a Python interpreter."]
-
- ["Execute block or clause fast" py-execute-block-or-clause-fast
- :help " `py-execute-block-or-clause-fast'
-Process block-or-clause at point by a Python interpreter."]
-
- ["Execute class fast" py-execute-class-fast
- :help " `py-execute-class-fast'
-Process class at point by a Python interpreter."]
-
- ["Execute clause fast" py-execute-clause-fast
- :help " `py-execute-clause-fast'
-Process clause at point by a Python interpreter."]
-
- ["Execute def fast" py-execute-def-fast
- :help " `py-execute-def-fast'
-Process def at point by a Python interpreter."]
-
- ["Execute def or class fast" py-execute-def-or-class-fast
- :help " `py-execute-def-or-class-fast'
-Process def-or-class at point by a Python interpreter."]
-
- ["Execute expression fast" py-execute-expression-fast
- :help " `py-execute-expression-fast'
-Process expression at point by a Python interpreter."]
-
- ["Execute partial expression fast" py-execute-partial-expression-fast
- :help " `py-execute-partial-expression-fast'
-Process partial-expression at point by a Python interpreter."]
-
- ["Execute region fast" py-execute-region-fast
- :help " `py-execute-region-fast'"]
-
- ["Execute statement fast" py-execute-statement-fast
- :help " `py-execute-statement-fast'
-Process statement at point by a Python interpreter."]
-
- ["Execute string fast" py-execute-string-fast
- :help " `py-execute-string-fast'"]
-
- ["Execute top level fast" py-execute-top-level-fast
- :help " `py-execute-top-level-fast'
-Process top-level at point by a Python interpreter."])
- ("Virtualenv"
- ["Virtualenv activate" virtualenv-activate
- :help " `virtualenv-activate'
-Activate the virtualenv located in DIR"]
-
- ["Virtualenv deactivate" virtualenv-deactivate
- :help " `virtualenv-deactivate'
-Deactivate the current virtual enviroment"]
-
- ["Virtualenv p" virtualenv-p
- :help " `virtualenv-p'
-Check if a directory is a virtualenv"]
-
- ["Virtualenv workon" virtualenv-workon
- :help " `virtualenv-workon'
-Issue a virtualenvwrapper-like virtualenv-workon command"])
-
- ["Execute import or reload" py-execute-import-or-reload
- :help " `py-execute-import-or-reload'
-Import the current buffer’s file in a Python interpreter."]
- ("Help"
- ["Find definition" py-find-definition
- :help " `py-find-definition'
-Find source of definition of SYMBOL."]
-
- ["Help at point" py-help-at-point
- :help " `py-help-at-point'
-Print help on symbol at point."]
-
- ["Info lookup symbol" py-info-lookup-symbol
- :help " `py-info-lookup-symbol'"]
-
- ["Symbol at point" py-symbol-at-point
- :help " `py-symbol-at-point'
-Return the current Python symbol."])
- ("Debugger"
- ["Execute statement pdb" py-execute-statement-pdb
- :help " `py-execute-statement-pdb'
-Execute statement running pdb."]
-
- ["Pdb" pdb
- :help " `pdb'
-Run pdb on program FILE in buffer ‘*gud-FILE*’."])
- ("Checks"
- ["Flycheck mode" py-flycheck-mode
- :help " `py-flycheck-mode'
-Toggle ‘flycheck-mode’."]
-
- ["Pychecker run" py-pychecker-run
- :help " `py-pychecker-run'
-*Run pychecker (default on the file currently visited)."]
- ("Pylint"
- ["Pylint run" py-pylint-run
- :help " `py-pylint-run'
-*Run pylint (default on the file currently visited)."]
-
- ["Pylint help" py-pylint-help
- :help " `py-pylint-help'
-Display Pylint command line help messages."]
-
- ["Pylint flymake mode" pylint-flymake-mode
- :help " `pylint-flymake-mode'
-Toggle ‘pylint’ ‘flymake-mode’."])
- ("Pep8"
- ["Pep8 run" py-pep8-run
- :help " `py-pep8-run'
-*Run pep8, check formatting - default on the file currently visited."]
-
- ["Pep8 help" py-pep8-help
- :help " `py-pep8-help'
-Display pep8 command line help messages."]
-
- ["Pep8 flymake mode" pep8-flymake-mode
- :help " `pep8-flymake-mode'
-Toggle ‘pep8’ ‘flymake-mode’."])
- ("Pyflakes"
- ["Pyflakes run" py-pyflakes-run
- :help " `py-pyflakes-run'
-*Run pyflakes (default on the file currently visited)."]
-
- ["Pyflakes help" py-pyflakes-help
- :help " `py-pyflakes-help'
-Display Pyflakes command line help messages."]
-
- ["Pyflakes flymake mode" pyflakes-flymake-mode
- :help " `pyflakes-flymake-mode'
-Toggle ‘pyflakes’ ‘flymake-mode’."])
- ("Flake8"
- ["Flake8 run" py-flake8-run
- :help " `py-flake8-run'
-Flake8 is a wrapper around these tools:"]
-
- ["Flake8 help" py-flake8-help
- :help " `py-flake8-help'
-Display flake8 command line help messages."]
- ("Pyflakes-pep8"
- ["Pyflakes pep8 run" py-pyflakes-pep8-run
- :help " `py-pyflakes-pep8-run'"]
-
- ["Pyflakes pep8 help" py-pyflakes-pep8-help
- :help " `py-pyflakes-pep8-help'"]
-
- ["Pyflakes pep8 flymake mode" pyflakes-pep8-flymake-mode
- :help " `pyflakes-pep8-flymake-mode'"])))
- ("Customize"
-
- ["Python-mode customize group" (customize-group 'python-mode)
- :help "Open the customization buffer for Python mode"]
- ("Switches"
- :help "Toggle useful modes"
- ("Interpreter"
-
- ["Shell prompt read only"
- (setq py-shell-prompt-read-only
- (not py-shell-prompt-read-only))
- :help "If non-nil, the python prompt is read only. Setting this variable will only effect new shells.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-shell-prompt-read-only]
-
- ["Remove cwd from path"
- (setq py-remove-cwd-from-path
- (not py-remove-cwd-from-path))
- :help "Whether to allow loading of Python modules from the current directory.
-If this is non-nil, Emacs removes '' from sys.path when starting
-a Python process. This is the default, for security
-reasons, as it is easy for the Python process to be started
-without the user's realization (e.g. to perform completion).Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-remove-cwd-from-path]
-
- ["Honor IPYTHONDIR "
- (setq py-honor-IPYTHONDIR-p
- (not py-honor-IPYTHONDIR-p))
- :help "When non-nil ipython-history file is constructed by \$IPYTHONDIR
-followed by "/history". Default is nil.
-
-Otherwise value of py-ipython-history is used. Use `M-x customize-variable' to set it permanently"
-:style toggle :selected py-honor-IPYTHONDIR-p]
-
- ["Honor PYTHONHISTORY "
- (setq py-honor-PYTHONHISTORY-p
- (not py-honor-PYTHONHISTORY-p))
- :help "When non-nil python-history file is set by \$PYTHONHISTORY
-Default is nil.
-
-Otherwise value of py-python-history is used. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-honor-PYTHONHISTORY-p]
-
- ["Enforce py-shell-name" force-py-shell-name-p-on
- :help "Enforce customized default `py-shell-name' should upon execution. "]
-
- ["Don't enforce default interpreter" force-py-shell-name-p-off
- :help "Make execute commands guess interpreter from environment"]
-
- ["Enforce local Python shell " py-force-local-shell-on
- :help "Locally indicated Python being enforced upon sessions execute commands. "]
-
- ["Remove local Python shell enforcement, restore default" py-force-local-shell-off
- :help "Restore `py-shell-name' default value and `behaviour'. "])
-
- ("Execute"
-
- ["Fast process" py-fast-process-p
- :help " `py-fast-process-p'
-
-Use `py-fast-process'\.
-
-Commands prefixed \"py-fast-...\" suitable for large output
-
-See: large output makes Emacs freeze, lp:1253907
-
-Output-buffer is not in comint-mode"
- :style toggle :selected py-fast-process-p]
-
- ["Python mode v5 behavior"
- (setq python-mode-v5-behavior-p
- (not python-mode-v5-behavior-p))
- :help "Execute region through `shell-command-on-region' as
-v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected python-mode-v5-behavior-p]
-
- ["Force shell name "
- (setq py-force-py-shell-name-p
- (not py-force-py-shell-name-p))
- :help "When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-force-py-shell-name-p]
-
- ["Execute \"if name == main\" blocks p"
- (setq py-if-name-main-permission-p
- (not py-if-name-main-permission-p))
- :help " `py-if-name-main-permission-p'
-
-Allow execution of code inside blocks delimited by
-if __name__ == '__main__'
-
-Default is non-nil. "
- :style toggle :selected py-if-name-main-permission-p]
-
- ["Ask about save"
- (setq py-ask-about-save
- (not py-ask-about-save))
- :help "If not nil, ask about which buffers to save before executing some code.
-Otherwise, all modified buffers are saved without asking.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-ask-about-save]
-
- ["Store result"
- (setq py-store-result-p
- (not py-store-result-p))
- :help " `py-store-result-p'
-
-When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. "
- :style toggle :selected py-store-result-p]
-
- ["Prompt on changed "
- (setq py-prompt-on-changed-p
- (not py-prompt-on-changed-p))
- :help "When called interactively, ask for save before a changed buffer is sent to interpreter.
-
-Default is `t'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-prompt-on-changed-p]
-
- ["Dedicated process "
- (setq py-dedicated-process-p
- (not py-dedicated-process-p))
- :help "If commands executing code use a dedicated shell.
-
-Default is nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-dedicated-process-p]
-
- ["Execute without temporary file"
- (setq py-execute-no-temp-p
- (not py-execute-no-temp-p))
- :help " `py-execute-no-temp-p'
-Seems Emacs-24.3 provided a way executing stuff without temporary files.
-In experimental state yet "
- :style toggle :selected py-execute-no-temp-p]
-
- ["Warn tmp files left "
- (setq py--warn-tmp-files-left-p
- (not py--warn-tmp-files-left-p))
- :help "Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py--warn-tmp-files-left-p])
-
- ("Edit"
-
- ("Completion"
-
- ["Set Pymacs-based complete keymap "
- (setq py-set-complete-keymap-p
- (not py-set-complete-keymap-p))
- :help "If `py-complete-initialize', which sets up enviroment for Pymacs based py-complete, should load it's keys into `python-mode-map'
-
-Default is nil.
-See also resp. edit `py-complete-set-keymap' Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-set-complete-keymap-p]
-
- ["Indent no completion "
- (setq py-indent-no-completion-p
- (not py-indent-no-completion-p))
- :help "If completion function should indent when no completion found. Default is `t'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-indent-no-completion-p]
-
- ["Company pycomplete "
- (setq py-company-pycomplete-p
- (not py-company-pycomplete-p))
- :help "Load company-pycomplete stuff. Default is nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-company-pycomplete-p])
-
- ("Filling"
-
- ("Docstring styles"
- :help "Switch docstring-style"
-
- ["Nil" py-set-nil-docstring-style
- :help " `py-set-nil-docstring-style'
-
-Set py-docstring-style to nil, format string normally. "]
-
- ["pep-257-nn" py-set-pep-257-nn-docstring-style
- :help " `py-set-pep-257-nn-docstring-style'
-
-Set py-docstring-style to 'pep-257-nn "]
-
- ["pep-257" py-set-pep-257-docstring-style
- :help " `py-set-pep-257-docstring-style'
-
-Set py-docstring-style to 'pep-257 "]
-
- ["django" py-set-django-docstring-style
- :help " `py-set-django-docstring-style'
-
-Set py-docstring-style to 'django "]
-
- ["onetwo" py-set-onetwo-docstring-style
- :help " `py-set-onetwo-docstring-style'
-
-Set py-docstring-style to 'onetwo "]
-
- ["symmetric" py-set-symmetric-docstring-style
- :help " `py-set-symmetric-docstring-style'
-
-Set py-docstring-style to 'symmetric "])
-
- ["Auto-fill mode"
- (setq py-auto-fill-mode
- (not py-auto-fill-mode))
- :help "Fill according to `py-docstring-fill-column' and `py-comment-fill-column'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-auto-fill-mode])
-
- ["Use current dir when execute"
- (setq py-use-current-dir-when-execute-p
- (not py-use-current-dir-when-execute-p))
- :help " `toggle-py-use-current-dir-when-execute-p'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-current-dir-when-execute-p]
-
- ("Indent"
- ("TAB related"
-
- ["indent-tabs-mode"
- (setq indent-tabs-mode
- (not indent-tabs-mode))
- :help "Indentation can insert tabs if this is non-nil.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected indent-tabs-mode]
-
- ["Tab indent"
- (setq py-tab-indent
- (not py-tab-indent))
- :help "Non-nil means TAB in Python mode calls `py-indent-line'.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-indent]
-
- ["Tab shifts region "
- (setq py-tab-shifts-region-p
- (not py-tab-shifts-region-p))
- :help "If `t', TAB will indent/cycle the region, not just the current line.
-
-Default is nil
-See also `py-tab-indents-region-p'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-shifts-region-p]
-
- ["Tab indents region "
- (setq py-tab-indents-region-p
- (not py-tab-indents-region-p))
- :help "When `t' and first TAB doesn't shift, indent-region is called.
-
-Default is nil
-See also `py-tab-shifts-region-p'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-indents-region-p])
-
- ["Close at start column"
- (setq py-closing-list-dedents-bos
- (not py-closing-list-dedents-bos))
- :help "When non-nil, indent list's closing delimiter like start-column.
-
-It will be lined up under the first character of
- the line that starts the multi-line construct, as in:
-
-my_list = \[
- 1, 2, 3,
- 4, 5, 6,]
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-closing-list-dedents-bos]
-
- ["Closing list keeps space"
- (setq py-closing-list-keeps-space
- (not py-closing-list-keeps-space))
- :help "If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-closing-list-keeps-space]
-
- ["Closing list space"
- (setq py-closing-list-space
- (not py-closing-list-space))
- :help "Number of chars, closing parenthesis outdent from opening, default is 1 Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-closing-list-space]
-
- ["Tab shifts region "
- (setq py-tab-shifts-region-p
- (not py-tab-shifts-region-p))
- :help "If `t', TAB will indent/cycle the region, not just the current line.
-
-Default is nil
-See also `py-tab-indents-region-p'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-shifts-region-p]
-
- ["Lhs inbound indent"
- (setq py-lhs-inbound-indent
- (not py-lhs-inbound-indent))
- :help "When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-lhs-inbound-indent]
-
- ["Continuation offset"
- (setq py-continuation-offset
- (not py-continuation-offset))
- :help "With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-continuation-offset]
-
- ["Electric colon"
- (setq py-electric-colon-active-p
- (not py-electric-colon-active-p))
- :help " `py-electric-colon-active-p'
-
-`py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. "
- :style toggle :selected py-electric-colon-active-p]
-
- ["Electric colon at beginning of block only"
- (setq py-electric-colon-bobl-only
- (not py-electric-colon-bobl-only))
- :help "When inserting a colon, do not indent lines unless at beginning of block.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-colon-bobl-only]
-
- ["Electric yank active "
- (setq py-electric-yank-active-p
- (not py-electric-yank-active-p))
- :help " When non-nil, `yank' will be followed by an `indent-according-to-mode'.
-
-Default is nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-yank-active-p]
-
- ["Electric kill backward "
- (setq py-electric-kill-backward-p
- (not py-electric-kill-backward-p))
- :help "Affects `py-electric-backspace'. Default is nil.
-
-If behind a delimited form of braces, brackets or parentheses,
-backspace will kill it's contents
-
-With when cursor after
-my_string\[0:1]
---------------^
-
-==>
-
-my_string\[]
-----------^
-
-In result cursor is insided emptied delimited form.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-kill-backward-p]
-
- ["Trailing whitespace smart delete "
- (setq py-trailing-whitespace-smart-delete-p
- (not py-trailing-whitespace-smart-delete-p))
- :help "Default is nil. When t, python-mode calls
- (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local)
-
-Also commands may delete trailing whitespace by the way.
-When editing other peoples code, this may produce a larger diff than expected Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-trailing-whitespace-smart-delete-p]
-
- ["Newline delete trailing whitespace "
- (setq py-newline-delete-trailing-whitespace-p
- (not py-newline-delete-trailing-whitespace-p))
- :help "Delete trailing whitespace maybe left by `py-newline-and-indent'.
-
-Default is `t'. See lp:1100892 Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-newline-delete-trailing-whitespace-p]
-
- ["Dedent keep relative column"
- (setq py-dedent-keep-relative-column
- (not py-dedent-keep-relative-column))
- :help "If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-dedent-keep-relative-column]
-
- ["Indent comment "
- (setq py-indent-comments
- (not py-indent-comments))
- :help "If comments should be indented like code. Default is `nil'.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-indent-comments]
-
- ["Uncomment indents "
- (setq py-uncomment-indents-p
- (not py-uncomment-indents-p))
- :help "When non-nil, after uncomment indent lines. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-uncomment-indents-p]
-
- ["Indent honors inline comment"
- (setq py-indent-honors-inline-comment
- (not py-indent-honors-inline-comment))
- :help "If non-nil, indents to column of inlined comment start.
-Default is nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-indent-honors-inline-comment]
-
- ["Kill empty line"
- (setq py-kill-empty-line
- (not py-kill-empty-line))
- :help "If t, py-indent-forward-line kills empty lines. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-kill-empty-line]
-
- ("Smart indentation"
- :help "Toggle py-smart-indentation'
-
-Use `M-x customize-variable' to set it permanently"
-
- ["Toggle py-smart-indentation" toggle-py-smart-indentation
- :help "Toggles py-smart-indentation
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["py-smart-indentation on" py-smart-indentation-on
- :help "Switches py-smart-indentation on
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["py-smart-indentation off" py-smart-indentation-off
- :help "Switches py-smart-indentation off
-
-Use `M-x customize-variable' to set it permanently"])
-
- ["Beep if tab change"
- (setq py-beep-if-tab-change
- (not py-beep-if-tab-change))
- :help "Ring the bell if `tab-width' is changed.
-If a comment of the form
-
- # vi:set tabsize=<number>:
-
-is found before the first code line when the file is entered, and the
-current value of (the general Emacs variable) `tab-width' does not
-equal <number>, `tab-width' is set to <number>, a message saying so is
-displayed in the echo area, and if `py-beep-if-tab-change' is non-nil
-the Emacs bell is also rung as a warning.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-beep-if-tab-change]
-
- ["Electric comment "
- (setq py-electric-comment-p
- (not py-electric-comment-p))
- :help "If \"#\" should call `py-electric-comment'. Default is `nil'.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-comment-p]
-
- ["Electric comment add space "
- (setq py-electric-comment-add-space-p
- (not py-electric-comment-add-space-p))
- :help "If py-electric-comment should add a space. Default is `nil'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-comment-add-space-p]
-
- ["Empty line closes "
- (setq py-empty-line-closes-p
- (not py-empty-line-closes-p))
- :help "When non-nil, dedent after empty line following block
-
-if True:
- print(\"Part of the if-statement\")
-
-print(\"Not part of the if-statement\")
-
-Default is nil
-
-If non-nil, a C-j from empty line dedents.
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-empty-line-closes-p])
- ["Defun use top level "
- (setq py-defun-use-top-level-p
- (not py-defun-use-top-level-p))
- :help "When non-nil, keys C-M-a, C-M-e address top-level form.
-
-Beginning- end-of-defun forms use
-commands `py-backward-top-level', `py-forward-top-level'
-
-mark-defun marks top-level form at point etc. "
- :style toggle :selected py-defun-use-top-level-p]
-
- ["Close provides newline"
- (setq py-close-provides-newline
- (not py-close-provides-newline))
- :help "If a newline is inserted, when line after block isn't empty. Default is non-nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-close-provides-newline]
-
- ["Block comment prefix "
- (setq py-block-comment-prefix-p
- (not py-block-comment-prefix-p))
- :help "If py-comment inserts py-block-comment-prefix.
-
-Default is tUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-block-comment-prefix-p])
-
- ("Display"
-
- ("Index"
-
- ["Imenu create index "
- (setq py--imenu-create-index-p
- (not py--imenu-create-index-p))
- :help "Non-nil means Python mode creates and displays an index menu of functions and global variables. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py--imenu-create-index-p]
-
- ["Imenu show method args "
- (setq py-imenu-show-method-args-p
- (not py-imenu-show-method-args-p))
- :help "Controls echoing of arguments of functions & methods in the Imenu buffer.
-When non-nil, arguments are printed.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-imenu-show-method-args-p]
- ["Switch index-function" py-switch-imenu-index-function
- :help "`py-switch-imenu-index-function'
-Switch between `py--imenu-create-index' from 5.1 series and `py--imenu-create-index-new'."])
-
- ("Fontification"
-
- ["Mark decorators"
- (setq py-mark-decorators
- (not py-mark-decorators))
- :help "If py-mark-def-or-class functions should mark decorators too. Default is `nil'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-mark-decorators]
-
- ["Fontify shell buffer "
- (setq py-fontify-shell-buffer-p
- (not py-fontify-shell-buffer-p))
- :help "If code in Python shell should be highlighted as in script buffer.
-
-Default is nil.
-
-If `t', related vars like `comment-start' will be set too.
-Seems convenient when playing with stuff in IPython shell
-Might not be TRT when a lot of output arrives Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-fontify-shell-buffer-p]
-
- ["Use font lock doc face "
- (setq py-use-font-lock-doc-face-p
- (not py-use-font-lock-doc-face-p))
- :help "If documention string inside of def or class get `font-lock-doc-face'.
-
-`font-lock-doc-face' inherits `font-lock-string-face'.
-
-Call M-x `customize-face' in order to have a visible effect. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-font-lock-doc-face-p])
-
- ["Switch buffers on execute"
- (setq py-switch-buffers-on-execute-p
- (not py-switch-buffers-on-execute-p))
- :help "When non-nil switch to the Python output buffer.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-switch-buffers-on-execute-p]
-
- ["Split windows on execute"
- (setq py-split-window-on-execute
- (not py-split-window-on-execute))
- :help "When non-nil split windows.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-split-window-on-execute]
-
- ["Keep windows configuration"
- (setq py-keep-windows-configuration
- (not py-keep-windows-configuration))
- :help "If a windows is splitted displaying results, this is directed by variable `py-split-window-on-execute'\. Also setting `py-switch-buffers-on-execute-p' affects window-configuration\. While commonly a screen splitted into source and Python-shell buffer is assumed, user may want to keep a different config\.
-
-Setting `py-keep-windows-configuration' to `t' will restore windows-config regardless of settings mentioned above\. However, if an error occurs, it's displayed\.
-
-To suppres window-changes due to error-signaling also: M-x customize-variable RET. Set `py-keep-4windows-configuration' onto 'force
-
-Default is nil Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-keep-windows-configuration]
-
- ["Which split windows on execute function"
- (progn
- (if (eq 'split-window-vertically py-split-windows-on-execute-function)
- (setq py-split-windows-on-execute-function'split-window-horizontally)
- (setq py-split-windows-on-execute-function 'split-window-vertically))
- (message "py-split-windows-on-execute-function set to: %s" py-split-windows-on-execute-function))
-
- :help "If `split-window-vertically' or `...-horizontally'. Use `M-x customize-variable' RET `py-split-windows-on-execute-function' RET to set it permanently"
- :style toggle :selected py-split-windows-on-execute-function]
-
- ["Modeline display full path "
- (setq py-modeline-display-full-path-p
- (not py-modeline-display-full-path-p))
- :help "If the full PATH/TO/PYTHON should be displayed in shell modeline.
-
-Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-modeline-display-full-path-p]
-
- ["Modeline acronym display home "
- (setq py-modeline-acronym-display-home-p
- (not py-modeline-acronym-display-home-p))
- :help "If the modeline acronym should contain chars indicating the home-directory.
-
-Default is nil Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-modeline-acronym-display-home-p]
-
- ["Hide show hide docstrings"
- (setq py-hide-show-hide-docstrings
- (not py-hide-show-hide-docstrings))
- :help "Controls if doc strings can be hidden by hide-showUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-hide-show-hide-docstrings]
-
- ["Hide comments when hiding all"
- (setq py-hide-comments-when-hiding-all
- (not py-hide-comments-when-hiding-all))
- :help "Hide the comments too when you do `hs-hide-all'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-hide-comments-when-hiding-all]
-
- ["Max help buffer "
- (setq py-max-help-buffer-p
- (not py-max-help-buffer-p))
- :help "If \"\*Python-Help\*\"-buffer should appear as the only visible.
-
-Default is nil. In help-buffer, \"q\" will close it. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-max-help-buffer-p]
-
- ["Current defun show"
- (setq py-current-defun-show
- (not py-current-defun-show))
- :help "If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position.
-
-Default is `t'.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-current-defun-show]
-
- ["Match paren mode"
- (setq py-match-paren-mode
- (not py-match-paren-mode))
- :help "Non-nil means, cursor will jump to beginning or end of a block.
-This vice versa, to beginning first.
-Sets `py-match-paren-key' in python-mode-map.
-Customize `py-match-paren-key' which key to use. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-match-paren-mode])
-
- ("Debug"
-
- ["py-debug-p"
- (setq py-debug-p
- (not py-debug-p))
- :help "When non-nil, keep resp\. store information useful for debugging\.
-
-Temporary files are not deleted\. Other functions might implement
-some logging etc\. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-debug-p]
-
- ["Pdbtrack do tracking "
- (setq py-pdbtrack-do-tracking-p
- (not py-pdbtrack-do-tracking-p))
- :help "Controls whether the pdbtrack feature is enabled or not.
-When non-nil, pdbtrack is enabled in all comint-based buffers,
-e.g. shell buffers and the \*Python\* buffer. When using pdb to debug a
-Python program, pdbtrack notices the pdb prompt and displays the
-source file and line that the program is stopped at, much the same way
-as gud-mode does for debugging C programs with gdb.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-pdbtrack-do-tracking-p]
-
- ["Jump on exception"
- (setq py-jump-on-exception
- (not py-jump-on-exception))
- :help "Jump to innermost exception frame in Python output buffer.
-When this variable is non-nil and an exception occurs when running
-Python code synchronously in a subprocess, jump immediately to the
-source code of the innermost traceback frame.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-jump-on-exception]
-
- ["Highlight error in source "
- (setq py-highlight-error-source-p
- (not py-highlight-error-source-p))
- :help "Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-highlight-error-source-p])
-
- ("Other"
-
- ("Directory"
-
- ["Guess install directory "
- (setq py-guess-py-install-directory-p
- (not py-guess-py-install-directory-p))
- :help "If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-guess-py-install-directory-p]
-
- ["Use local default"
- (setq py-use-local-default
- (not py-use-local-default))
- :help "If `t', py-shell will use `py-shell-local-path' instead
-of default Python.
-
-Making switch between several virtualenv's easier,
- `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-local-default]
-
- ["Use current dir when execute "
- (setq py-use-current-dir-when-execute-p
- (not py-use-current-dir-when-execute-p))
- :help "When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands.
-
-See also `py-execute-directory'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-current-dir-when-execute-p]
-
- ["Keep shell dir when execute "
- (setq py-keep-shell-dir-when-execute-p
- (not py-keep-shell-dir-when-execute-p))
- :help "Don't change Python shell's current working directory when sending code.
-
-See also `py-execute-directory'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-keep-shell-dir-when-execute-p]
-
- ["Fileless buffer use default directory "
- (setq py-fileless-buffer-use-default-directory-p
- (not py-fileless-buffer-use-default-directory-p))
- :help "When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shellUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-fileless-buffer-use-default-directory-p])
-
- ("Underscore word syntax"
- :help "Toggle `py-underscore-word-syntax-p'"
-
- ["Toggle underscore word syntax" toggle-py-underscore-word-syntax-p
- :help " `toggle-py-underscore-word-syntax-p'
-
-If `py-underscore-word-syntax-p' should be on or off.
-
- Returns value of `py-underscore-word-syntax-p' switched to. .
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["Underscore word syntax on" py-underscore-word-syntax-p-on
- :help " `py-underscore-word-syntax-p-on'
-
-Make sure, py-underscore-word-syntax-p' is on.
-
-Returns value of `py-underscore-word-syntax-p'. .
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["Underscore word syntax off" py-underscore-word-syntax-p-off
- :help " `py-underscore-word-syntax-p-off'
-
-Make sure, `py-underscore-word-syntax-p' is off.
-
-Returns value of `py-underscore-word-syntax-p'. .
-
-Use `M-x customize-variable' to set it permanently"])
-
- ["Load pymacs "
- (setq py-load-pymacs-p
- (not py-load-pymacs-p))
- :help "If Pymacs related stuff should be loaded.
-
-Default is nil.
-
-Pymacs has been written by François Pinard and many others.
-See original source: http://pymacs.progiciels-bpi.caUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-load-pymacs-p]
-
- ["Verbose "
- (setq py-verbose-p
- (not py-verbose-p))
- :help "If functions should report results.
-
-Default is nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-verbose-p]
- ;; ["No session mode "
- ;; (setq py-no-session-p
- ;; (not py-no-session-p))
- ;; :help "If shell should be in session-mode.
-
- ;; Default is nil. Use `M-x customize-variable' to set it permanently"
- ;; :style toggle :selected py-no-session-p]
-
- ["Empty comment line separates paragraph "
- (setq py-empty-comment-line-separates-paragraph-p
- (not py-empty-comment-line-separates-paragraph-p))
- :help "Consider paragraph start/end lines with nothing inside but comment sign.
-
-Default is non-nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-empty-comment-line-separates-paragraph-p]
-
- ["Org cycle "
- (setq py-org-cycle-p
- (not py-org-cycle-p))
- :help "When non-nil, command `org-cycle' is available at shift-TAB, <backtab>
-
-Default is nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-org-cycle-p]
-
- ["Set pager cat"
- (setq py-set-pager-cat-p
- (not py-set-pager-cat-p))
- :help "If the shell environment variable \$PAGER should set to `cat'.
-
-If `t', use `C-c C-r' to jump to beginning of output. Then scroll normally.
-
-Avoids lp:783828, \"Terminal not fully functional\", for help('COMMAND') in python-shell
-
-When non-nil, imports module `os' Use `M-x customize-variable' to
-set it permanently"
- :style toggle :selected py-set-pager-cat-p]
-
- ["Edit only "
- (setq py-edit-only-p
- (not py-edit-only-p))
- :help "When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil.
-
-See bug report at launchpad, lp:944093. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-edit-only-p])))
- ("Other"
- ["Boolswitch" py-boolswitch
- :help " `py-boolswitch'
-Edit the assignment of a boolean variable, revert them."]
-
- ["Empty out list backward" py-empty-out-list-backward
- :help " `py-empty-out-list-backward'
-Deletes all elements from list before point."]
-
- ["Kill buffer unconditional" py-kill-buffer-unconditional
- :help " `py-kill-buffer-unconditional'
-Kill buffer unconditional, kill buffer-process if existing."]
-
- ["Remove overlays at point" py-remove-overlays-at-point
- :help " `py-remove-overlays-at-point'
-Remove overlays as set when ‘py-highlight-error-source-p’ is non-nil."]
- ("Electric"
- ["Complete electric comma" py-complete-electric-comma
- :help " `py-complete-electric-comma'"]
-
- ["Complete electric lparen" py-complete-electric-lparen
- :help " `py-complete-electric-lparen'"]
-
- ["Electric backspace" py-electric-backspace
- :help " `py-electric-backspace'
-Delete preceding character or level of indentation."]
-
- ["Electric colon" py-electric-colon
- :help " `py-electric-colon'
-Insert a colon and indent accordingly."]
-
- ["Electric comment" py-electric-comment
- :help " `py-electric-comment'
-Insert a comment. If starting a comment, indent accordingly."]
-
- ["Electric delete" py-electric-delete
- :help " `py-electric-delete'
-Delete following character or levels of whitespace."]
-
- ["Electric yank" py-electric-yank
- :help " `py-electric-yank'
-Perform command ‘yank’ followed by an ‘indent-according-to-mode’"]
-
- ["Hungry delete backwards" py-hungry-delete-backwards
- :help " `py-hungry-delete-backwards'
-Delete the preceding character or all preceding whitespace"]
-
- ["Hungry delete forward" py-hungry-delete-forward
- :help " `py-hungry-delete-forward'
-Delete the following character or all following whitespace"])
- ("Filling"
- ["Py docstring style" py-docstring-style
- :help " `py-docstring-style'"]
-
- ["Py fill comment" py-fill-comment
- :help " `py-fill-comment'"]
-
- ["Py fill paragraph" py-fill-paragraph
- :help " `py-fill-paragraph'"]
-
- ["Py fill string" py-fill-string
- :help " `py-fill-string'"]
-
- ["Py fill string django" py-fill-string-django
- :help " `py-fill-string-django'"]
-
- ["Py fill string onetwo" py-fill-string-onetwo
- :help " `py-fill-string-onetwo'"]
-
- ["Py fill string pep 257" py-fill-string-pep-257
- :help " `py-fill-string-pep-257'"]
-
- ["Py fill string pep 257 nn" py-fill-string-pep-257-nn
- :help " `py-fill-string-pep-257-nn'"]
-
- ["Py fill string symmetric" py-fill-string-symmetric
- :help " `py-fill-string-symmetric'"])
- ("Abbrevs" :help "see also `py-add-abbrev'"
- :filter (lambda (&rest junk)
- (abbrev-table-menu python-mode-abbrev-table)))
-
- ["Add abbrev" py-add-abbrev
- :help " `py-add-abbrev'
-Defines python-mode specific abbrev for last expressions before point."]
- ("Completion"
- ["Py indent or complete" py-indent-or-complete
- :help " `py-indent-or-complete'"]
-
- ["Py shell complete" py-shell-complete
- :help " `py-shell-complete'"]
-
- ["Py complete" py-complete
- :help " `py-complete'"])
-
- ["Find function" py-find-function
- :help " `py-find-function'
-Find source of definition of SYMBOL."])))
- map)
-
-;; python-components-extra
-
-;; Stuff merged/adapted from python.el
-(defun py-info-encoding ()
- "Return encoding for file.
-Try `py-info-encoding-from-cookie', if none is found then
-default to utf-8."
- (or (py-info-encoding-from-cookie)
- 'utf-8))
-
-(defun py-util-comint-last-prompt ()
- "Return comint last prompt overlay start and end.
-This is for compatibility with Emacs < 24.4."
- (cond ((bound-and-true-p comint-last-prompt-overlay)
- (cons (overlay-start comint-last-prompt-overlay)
- (overlay-end comint-last-prompt-overlay)))
- ((bound-and-true-p comint-last-prompt)
- comint-last-prompt)
- (t nil)))
-
-(defun py-shell-accept-process-output (process &optional timeout regexp)
- "Accept PROCESS output with TIMEOUT until REGEXP is found.
-Optional argument TIMEOUT is the timeout argument to
-`accept-process-output' calls. Optional argument REGEXP
-overrides the regexp to match the end of output, defaults to
-`comint-prompt-regexp'. Returns non-nil when output was
-properly captured.
-
-This utility is useful in situations where the output may be
-received in chunks, since `accept-process-output' gives no
-guarantees they will be grabbed in a single call. An example use
-case for this would be the CPython shell start-up, where the
-banner and the initial prompt are received separately."
- (let ((regexp (or regexp comint-prompt-regexp)))
- (catch 'found
- (while t
- (when (not (accept-process-output process timeout))
- (throw 'found nil))
- (when (looking-back
- regexp (car (py-util-comint-last-prompt)))
- (throw 'found t))))))
-
-(defmacro py-shell--add-to-path-with-priority (pathvar paths)
- "Modify PATHVAR and ensure PATHS are added only once at beginning."
- `(dolist (path (reverse ,paths))
- (cl-delete path ,pathvar :test #'string=)
- (cl-pushnew path ,pathvar :test #'string=)))
-
-(defun py-shell-calculate-pythonpath ()
- "Calculate the PYTHONPATH using `py-shell-extra-pythonpaths'."
- (let ((pythonpath
- (split-string
- (or (getenv "PYTHONPATH") "") path-separator 'omit)))
- (py-shell--add-to-path-with-priority
- pythonpath py-shell-extra-pythonpaths)
- (mapconcat 'identity pythonpath path-separator)))
-
-(defun py-shell-calculate-process-environment ()
- "Calculate `process-environment' or `tramp-remote-process-environment'.
-Prepends `py-shell-process-environment', sets extra
-pythonpaths from `py-shell-extra-pythonpaths' and sets a few
-virtualenv related vars. If `default-directory' points to a
-remote host, the returned value is intended for
-`tramp-remote-process-environment'."
- (let* ((remote-p (file-remote-p default-directory))
- (process-environment (if remote-p
- tramp-remote-process-environment
- process-environment))
- (virtualenv (when py-shell-virtualenv-root
- (directory-file-name py-shell-virtualenv-root))))
- (dolist (env py-shell-process-environment)
- (pcase-let ((`(,key ,value) (split-string env "=")))
- (setenv key value)))
- (when py-shell-unbuffered
- (setenv "PYTHONUNBUFFERED" "1"))
- (when py-shell-extra-pythonpaths
- (setenv "PYTHONPATH" (py-shell-calculate-pythonpath)))
- (if (not virtualenv)
- process-environment
- (setenv "PYTHONHOME" nil)
- (setenv "VIRTUAL_ENV" virtualenv))
- process-environment))
-
-(defun py-shell-calculate-exec-path ()
- "Calculate `exec-path'.
-Prepends `py-shell-exec-path' and adds the binary directory
-for virtualenv if `py-shell-virtualenv-root' is set - this
-will use the python interpreter from inside the virtualenv when
-starting the shell. If `default-directory' points to a remote host,
-the returned value appends `py-shell-remote-exec-path' instead
-of `exec-path'."
- (let ((new-path (copy-sequence
- (if (file-remote-p default-directory)
- py-shell-remote-exec-path
- exec-path)))
-
- ;; Windows and POSIX systems use different venv directory structures
- (virtualenv-bin-dir (if (eq system-type 'windows-nt) "Scripts" "bin")))
- (py-shell--add-to-path-with-priority
- new-path py-shell-exec-path)
- (if (not py-shell-virtualenv-root)
- new-path
- (py-shell--add-to-path-with-priority
- new-path
- (list (expand-file-name virtualenv-bin-dir py-shell-virtualenv-root)))
- new-path)))
-
-(defun py-shell-tramp-refresh-remote-path (vec paths)
- "Update VEC's remote-path giving PATHS priority."
- (let ((remote-path (tramp-get-connection-property vec "remote-path" nil)))
- (when remote-path
- (py-shell--add-to-path-with-priority remote-path paths)
- (tramp-set-connection-property vec "remote-path" remote-path)
- (tramp-set-remote-path vec))))
-
-(defun py-shell-tramp-refresh-process-environment (vec env)
- "Update VEC's process environment with ENV."
- ;; Stolen from `tramp-open-connection-setup-interactive-shell'.
- (let ((env (append (when (fboundp 'tramp-get-remote-locale)
- ;; Emacs<24.4 compat.
- (list (tramp-get-remote-locale vec)))
- (copy-sequence env)))
- (tramp-end-of-heredoc
- (if (boundp 'tramp-end-of-heredoc)
- tramp-end-of-heredoc
- (md5 tramp-end-of-output)))
- unset vars item)
- (while env
- (setq item (split-string (car env) "=" 'omit))
- (setcdr item (mapconcat 'identity (cdr item) "="))
- (if (and (stringp (cdr item)) (not (string-equal (cdr item) "")))
- (push (format "%s %s" (car item) (cdr item)) vars)
- (push (car item) unset))
- (setq env (cdr env)))
- (when vars
- (tramp-send-command
- vec
- (format "while read var val; do export $var=$val; done <<'%s'\n%s\n%s"
- tramp-end-of-heredoc
- (mapconcat 'identity vars "\n")
- tramp-end-of-heredoc)
- t))
- (when unset
- (tramp-send-command
- vec (format "unset %s" (mapconcat 'identity unset " ")) t))))
-
-(defmacro py-shell-with-environment (&rest body)
- "Modify shell environment during execution of BODY.
-Temporarily sets `process-environment' and `exec-path' during
-execution of body. If `default-directory' points to a remote
-machine then modifies `tramp-remote-process-environment' and
-`py-shell-remote-exec-path' instead."
- (declare (indent 0) (debug (body)))
- (let ((vec (make-symbol "vec")))
- `(progn
- (let* ((,vec
- (when (file-remote-p default-directory)
- (ignore-errors
- (tramp-dissect-file-name default-directory 'noexpand))))
- (process-environment
- (if ,vec
- process-environment
- (py-shell-calculate-process-environment)))
- (exec-path
- (if ,vec
- exec-path
- (py-shell-calculate-exec-path)))
- (tramp-remote-process-environment
- (if ,vec
- (py-shell-calculate-process-environment)
- tramp-remote-process-environment)))
- (when (tramp-get-connection-process ,vec)
- ;; For already existing connections, the new exec path must
- ;; be re-set, otherwise it won't take effect. One example
- ;; of such case is when remote dir-locals are read and
- ;; *then* subprocesses are triggered within the same
- ;; connection.
- (py-shell-tramp-refresh-remote-path
- ,vec (py-shell-calculate-exec-path))
- ;; The `tramp-remote-process-environment' variable is only
- ;; effective when the started process is an interactive
- ;; shell, otherwise (like in the case of processes started
- ;; with `process-file') the environment is not changed.
- ;; This makes environment modifications effective
- ;; unconditionally.
- (py-shell-tramp-refresh-process-environment
- ,vec tramp-remote-process-environment))
- ,(macroexp-progn body)))))
-
-(defun py-shell-prompt-detect ()
- "Detect prompts for the current interpreter.
-When prompts can be retrieved successfully from the
-interpreter run with
-`py-python-command-args', returns a list of
-three elements, where the first two are input prompts and the
-last one is an output prompt. When no prompts can be detected
-shows a warning with instructions to avoid hangs and returns nil.
-When `py-shell-prompt-detect-p' is nil avoids any
-detection and just returns nil."
- (when py-shell-prompt-detect-p
- (py-shell-with-environment
- (let* ((code (concat
- "import sys\n"
- "ps = [getattr(sys, 'ps%s' % i, '') for i in range(1,4)]\n"
- ;; JSON is built manually for compatibility
- "ps_json = '\\n[\"%s\", \"%s\", \"%s\"]\\n' % tuple(ps)\n"
- "print (ps_json)\n"
- "sys.exit(0)\n"))
- ;; (interpreter py-shell-name)
- ;; (interpreter-arg py-python-command-args)
- (output
- (with-temp-buffer
- ;; TODO: improve error handling by using
- ;; `condition-case' and displaying the error message to
- ;; the user in the no-prompts warning.
- (ignore-errors
- (let ((code-file
- ;; Python 2.x on Windows does not handle
- ;; carriage returns in unbuffered mode.
- (let ((inhibit-eol-conversion (getenv "PYTHONUNBUFFERED")))
- (py-shell--save-temp-file code))))
- (unwind-protect
- ;; Use `process-file' as it is remote-host friendly.
- (process-file
- py-shell-name
- code-file
- '(t nil)
- nil
- py-python-command-args)
- ;; Try to cleanup
- (delete-file code-file))))
- (buffer-string)))
- (prompts
- (catch 'prompts
- (dolist (line (split-string output "\n" t))
- (let ((res
- ;; Check if current line is a valid JSON array
- (and (string= (substring line 0 2) "[\"")
- (ignore-errors
- ;; Return prompts as a list, not vector
- (append (json-read-from-string line) nil)))))
- ;; The list must contain 3 strings, where the first
- ;; is the input prompt, the second is the block
- ;; prompt and the last one is the output prompt. The
- ;; input prompt is the only one that can't be empty.
- (when (and (= (length res) 3)
- (cl-every #'stringp res)
- (not (string= (car res) "")))
- (throw 'prompts res))))
- nil)))
- (if (not prompts)
- (lwarn
- '(python py-shell-prompt-regexp)
- :warning
- (concat
- "Python shell prompts cannot be detected.\n"
- "If your emacs session hangs when starting python shells\n"
- "recover with `keyboard-quit' and then try fixing the\n"
- "interactive flag for your interpreter by adjusting the\n"
- "`py-python-command-args' or add regexps\n"
- "matching shell prompts in the directory-local friendly vars:\n"
- " + `py-shell-prompt-regexp'\n"
- " + `py-shell-input-prompt-2-regexp'\n"
- " + `py-shell-prompt-output-regexp'\n"
- "Or alternatively in:\n"
- " + `py-shell-input-prompt-regexps'\n"
- " + `py-shell-prompt-output-regexps'"))
- prompts)))))
-
-(defun python-util-valid-regexp-p (regexp)
- "Return non-nil if REGEXP is valid."
- (ignore-errors (string-match regexp "") t))
-
-(defun py-shell-prompt-validate-regexps ()
- "Validate all user provided regexps for prompts.
-Signals `user-error' if any of these vars contain invalid
-regexps: `py-shell-prompt-regexp',
-`py-shell-input-prompt-2-regexp',
-`py-shell-prompt-pdb-regexp',
-`py-shell-prompt-output-regexp',
-`py-shell-input-prompt-regexps',
-`py-shell-prompt-output-regexps'."
- (dolist (symbol (list 'py-shell-input-prompt-1-regexp
- 'py-shell-prompt-output-regexps
- 'py-shell-input-prompt-2-regexp
- 'py-shell-prompt-pdb-regexp))
- (dolist (regexp (let ((regexps (symbol-value symbol)))
- (if (listp regexps)
- regexps
- (list regexps))))
- (when (not (python-util-valid-regexp-p regexp))
- (user-error "Invalid regexp %s in `%s'"
- regexp symbol)))))
-
-(defun py-shell-prompt-set-calculated-regexps ()
- "Detect and set input and output prompt regexps.
-
-Build and set the values for input- and output-prompt regexp
-using the values from `py-shell-prompt-regexp',
-`py-shell-input-prompt-2-regexp', `py-shell-prompt-pdb-regexp',
-`py-shell-prompt-output-regexp', `py-shell-input-prompt-regexps',
- and detected prompts from `py-shell-prompt-detect'."
- (when (not (and py-shell--prompt-calculated-input-regexp
- py-shell--prompt-calculated-output-regexp))
- (let* ((detected-prompts (py-shell-prompt-detect))
- (input-prompts nil)
- (output-prompts nil)
- (build-regexp
- (lambda (prompts)
- (concat "^\\("
- (mapconcat #'identity
- (sort prompts
- (lambda (a b)
- (let ((length-a (length a))
- (length-b (length b)))
- (if (= length-a length-b)
- (string< a b)
- (> (length a) (length b))))))
- "\\|")
- "\\)"))))
- ;; Validate ALL regexps
- (py-shell-prompt-validate-regexps)
- ;; Collect all user defined input prompts
- (dolist (prompt (append py-shell-input-prompt-regexps
- (list py-shell-input-prompt-2-regexp
- py-shell-prompt-pdb-regexp)))
- (cl-pushnew prompt input-prompts :test #'string=))
- ;; Collect all user defined output prompts
- (dolist (prompt (cons py-shell-prompt-output-regexp
- py-shell-prompt-output-regexps))
- (cl-pushnew prompt output-prompts :test #'string=))
- ;; Collect detected prompts if any
- (when detected-prompts
- (dolist (prompt (butlast detected-prompts))
- (setq prompt (regexp-quote prompt))
- (cl-pushnew prompt input-prompts :test #'string=))
- (setq py-shell--block-prompt (nth 1 detected-prompts))
- (cl-pushnew (regexp-quote
- (car (last detected-prompts)))
- output-prompts :test #'string=))
- ;; Set input and output prompt regexps from collected prompts
- (setq py-shell--prompt-calculated-input-regexp
- (funcall build-regexp input-prompts)
- py-shell--prompt-calculated-output-regexp
- (funcall build-regexp output-prompts)))))
-
-(defun py-shell-comint-end-of-output-p (output)
- "Return non-nil if OUTPUT ends with input prompt."
- (ignore-errors (string-match
- ;; XXX: It seems on macOS an extra carriage return is attached
- ;; at the end of output, this handles that too.
- (concat
- "\r?\n?"
- ;; Remove initial caret from calculated regexp
- (ignore-errors (replace-regexp-in-string
- (rx string-start ?^) ""
- py-shell--prompt-calculated-input-regexp))
- (rx eos))
- output)))
-
-(defun py-shell-completion-get-completions (process import input)
- "Do completion at point using PROCESS for IMPORT or INPUT.
-When IMPORT is non-nil takes precedence over INPUT for
-completion."
- (setq input (or import input))
- (with-current-buffer (process-buffer process)
- (let ((completions
- (ignore-errors
- (string-trim
- (py-send-string-no-output
- (format
- (concat py-completion-setup-code
- "\nprint (" py-shell-completion-string-code ")")
- input) process (buffer-name (current-buffer)))))))
- (when (> (length completions) 2)
- (split-string completions
- "^'\\|^\"\\|;\\|'$\\|\"$" t)))))
-
-(defun py-shell-completion-at-point (&optional process)
- "Function for `completion-at-point-functions' in `py-shell-mode'.
-Optional argument PROCESS forces completions to be retrieved
-using that one instead of current buffer's process."
- ;; (setq process (or process (get-buffer-process (current-buffer))))
- (let*
- ((process (or process (get-buffer-process (current-buffer))))
- (line-start (if (derived-mode-p 'py-shell-mode)
- ;; Working on a shell buffer: use prompt end.
- (or (cdr (py-util-comint-last-prompt))
- (line-beginning-position))
- (line-beginning-position)))
- (import-statement
- (when (string-match-p
- (rx (* space) word-start (or "from" "import") word-end space)
- (buffer-substring-no-properties line-start (point)))
- (buffer-substring-no-properties line-start (point))))
- (start
- (save-excursion
- (if (not (re-search-backward
- (py-rx
- (or whitespace open-paren close-paren string-delimiter simple-operator))
- line-start
- t 1))
- line-start
- (forward-char (length (match-string-no-properties 0)))
- (point))))
- (end (point))
- (completion-fn
- (with-current-buffer (process-buffer process)
- #'py-shell-completion-get-completions)))
- (list start end
- (completion-table-dynamic
- (apply-partially
- completion-fn
- process import-statement)))))
-
-(defun py-comint-watch-for-first-prompt-output-filter (output)
- "Run `py-shell-first-prompt-hook' when first prompt is found in OUTPUT."
- (when (not py-shell--first-prompt-received)
- (set (make-local-variable 'py-shell--first-prompt-received-output-buffer)
- (concat py-shell--first-prompt-received-output-buffer
- (ansi-color-filter-apply output)))
- (when (py-shell-comint-end-of-output-p
- py-shell--first-prompt-received-output-buffer)
- (if (string-match-p
- (concat py-shell-prompt-pdb-regexp (rx eos))
- (or py-shell--first-prompt-received-output-buffer ""))
- ;; Skip pdb prompts and reset the buffer.
- (setq py-shell--first-prompt-received-output-buffer nil)
- (set (make-local-variable 'py-shell--first-prompt-received) t)
- (setq py-shell--first-prompt-received-output-buffer nil)
- (with-current-buffer (current-buffer)
- (let ((inhibit-quit nil))
- (run-hooks 'py-shell-first-prompt-hook))))))
- output)
-
-(defun python-shell-package-enable (directory package)
- "Add DIRECTORY parent to $PYTHONPATH and enable PACKAGE."
- (interactive
- (let* ((dir (expand-file-name
- (read-directory-name
- "Package root: "
- (file-name-directory
- (or (buffer-file-name) default-directory)))))
- (name (completing-read
- "Package: "
- (python-util-list-packages
- dir py-shell--package-depth))))
- (list dir name)))
- (py-shell-send-string
- (format
- (concat
- "import os.path;import sys;"
- "sys.path.append(os.path.dirname(os.path.dirname('''%s''')));"
- "__package__ = '''%s''';"
- "import %s")
- directory package package)
- (or (get-buffer-process (current-buffer)) (get-buffer-process (py-shell)))))
-
-(defun py-comint-postoutput-scroll-to-bottom (output)
- "Faster version of `comint-postoutput-scroll-to-bottom'.
-Avoids `recenter' calls until OUTPUT is completely sent."
- (when (and (not (string= "" output))
- (py-shell-comint-end-of-output-p
- (ansi-color-filter-apply output)))
- (comint-postoutput-scroll-to-bottom output))
- output)
-
-(defun py-shell-font-lock-get-or-create-buffer ()
- "Get or create a font-lock buffer for current inferior process."
- (with-current-buffer (current-buffer)
- (if py-shell--font-lock-buffer
- py-shell--font-lock-buffer
- (let ((process-name
- (process-name (get-buffer-process (current-buffer)))))
- (generate-new-buffer
- (format " *%s-font-lock*" process-name))))))
-
-(defun py-font-lock-kill-buffer ()
- "Kill the font-lock buffer safely."
- (when (and py-shell--font-lock-buffer
- (buffer-live-p py-shell--font-lock-buffer))
- (kill-buffer py-shell--font-lock-buffer)
- (when (derived-mode-p 'py-shell-mode)
- (setq py-shell--font-lock-buffer nil))))
-
-(defmacro py-shell-font-lock-with-font-lock-buffer (&rest body)
- "Execute the forms in BODY in the font-lock buffer.
-The value returned is the value of the last form in BODY. See
-also `with-current-buffer'."
- (declare (indent 0) (debug t))
- `(save-current-buffer
- (when (not (and py-shell--font-lock-buffer
- (get-buffer py-shell--font-lock-buffer)))
- (setq py-shell--font-lock-buffer
- (py-shell-font-lock-get-or-create-buffer)))
- (set-buffer py-shell--font-lock-buffer)
- (when (not font-lock-mode)
- (font-lock-mode 1))
- (set (make-local-variable 'delay-mode-hooks) t)
- (let (py-smart-indentation)
- (when (not (derived-mode-p 'python-mode))
- (python-mode))
- ,@body)))
-
-(defun py-shell-font-lock-cleanup-buffer ()
- "Cleanup the font-lock buffer.
-Provided as a command because this might be handy if something
-goes wrong and syntax highlighting in the shell gets messed up."
- (interactive)
- (with-current-buffer (current-buffer)
- (py-shell-font-lock-with-font-lock-buffer
- (erase-buffer))))
-
-(defun py-shell-font-lock-comint-output-filter-function (output)
- "Clean up the font-lock buffer after any OUTPUT."
- (if (and (not (string= "" output))
- ;; Is end of output and is not just a prompt.
- (not (member
- (py-shell-comint-end-of-output-p
- (ansi-color-filter-apply output))
- '(nil 0))))
- ;; If output is other than an input prompt then "real" output has
- ;; been received and the font-lock buffer must be cleaned up.
- (py-shell-font-lock-cleanup-buffer)
- ;; Otherwise just add a newline.
- (py-shell-font-lock-with-font-lock-buffer
- (goto-char (point-max))
- (newline 1)))
- output)
-
-(defun py-font-lock-post-command-hook ()
- "Fontifies current line in shell buffer."
- (let ((prompt-end
- (or (cdr (py-util-comint-last-prompt))
- (progn (sit-for 0.1)
- (cdr (py-util-comint-last-prompt))))))
- (when (and prompt-end (> (point) prompt-end)
- (process-live-p (get-buffer-process (current-buffer))))
- (let* ((input (buffer-substring-no-properties
- prompt-end (point-max)))
- (deactivate-mark nil)
- (start-pos prompt-end)
- (buffer-undo-list t)
- (font-lock-buffer-pos nil)
- (replacement
- (py-shell-font-lock-with-font-lock-buffer
- (delete-region (line-beginning-position)
- (point-max))
- (setq font-lock-buffer-pos (point))
- (insert input)
- ;; Ensure buffer is fontified, keeping it
- ;; compatible with Emacs < 24.4.
- (when py-shell-fontify-p
- (if (fboundp 'font-lock-ensure)
- (funcall 'font-lock-ensure)
- (font-lock-default-fontify-buffer)))
- (buffer-substring font-lock-buffer-pos
- (point-max))))
- (replacement-length (length replacement))
- (i 0))
- ;; Inject text properties to get input fontified.
- (while (not (= i replacement-length))
- (let* ((plist (text-properties-at i replacement))
- (next-change (or (next-property-change i replacement)
- replacement-length))
- (plist (let ((face (plist-get plist 'face)))
- (if (not face)
- plist
- ;; Replace FACE text properties with
- ;; FONT-LOCK-FACE so input is fontified.
- (plist-put plist 'face nil)
- (plist-put plist 'font-lock-face face)))))
- (set-text-properties
- (+ start-pos i) (+ start-pos next-change) plist)
- (setq i next-change)))))))
-
-(defun py-shell-font-lock-turn-on (&optional msg)
- "Turn on shell font-lock.
-With argument MSG show activation message."
- (interactive "p")
- (save-current-buffer
- (py-font-lock-kill-buffer)
- (set (make-local-variable 'py-shell--font-lock-buffer) nil)
- (add-hook 'post-command-hook
- #'py-font-lock-post-command-hook nil 'local)
- (add-hook 'kill-buffer-hook
- #'py-font-lock-kill-buffer nil 'local)
- (add-hook 'comint-output-filter-functions
- #'py-shell-font-lock-comint-output-filter-function
- 'append 'local)
- (when msg
- (message "Shell font-lock is enabled"))))
-
-(defun py-shell-font-lock-turn-off (&optional msg)
- "Turn off shell font-lock.
-With argument MSG show deactivation message."
- (interactive "p")
- (with-current-buffer (current-buffer)
- (py-font-lock-kill-buffer)
- (when (py-util-comint-last-prompt)
- ;; Cleanup current fontification
- (remove-text-properties
- (cdr (py-util-comint-last-prompt))
- (line-end-position)
- '(face nil font-lock-face nil)))
- (set (make-local-variable 'py-shell--font-lock-buffer) nil)
- (remove-hook 'post-command-hook
- #'py-font-lock-post-command-hook 'local)
- (remove-hook 'kill-buffer-hook
- #'py-font-lock-kill-buffer 'local)
- (remove-hook 'comint-output-filter-functions
- #'py-shell-font-lock-comint-output-filter-function
- 'local)
- (when msg
- (message "Shell font-lock is disabled"))))
-
-(defun py-shell-font-lock-toggle (&optional msg)
- "Toggle font-lock for shell.
-With argument MSG show activation/deactivation message."
- (interactive "p")
- (with-current-buffer (current-buffer)
- (set (make-local-variable 'py-shell-fontify-p)
- (not py-shell-fontify-p))
- (if py-shell-fontify-p
- (py-shell-font-lock-turn-on msg)
- (py-shell-font-lock-turn-off msg))
- py-shell-fontify-p))
-
-(defun py-info-encoding-from-cookie ()
- "Detect current buffer's encoding from its coding cookie.
-Returns the encoding as a symbol."
- (let ((first-two-lines
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (forward-line 2)
- (buffer-substring-no-properties
- (point)
- (point-min))))))
- (when (string-match (py-rx coding-cookie) first-two-lines)
- (intern (match-string-no-properties 1 first-two-lines)))))
-
-(unless (functionp 'file-local-name)
- (defun file-local-name (file)
- "Return the local name component of FILE.
-This function removes from FILE the specification of the remote host
-and the method of accessing the host, leaving only the part that
-identifies FILE locally on the remote system.
-The returned file name can be used directly as argument of
-`process-file', `start-file-process', or `shell-command'."
- (or (file-remote-p file 'localname) file)))
-
-;; python-components-map
-
-(defvar py-use-menu-p t
- "If the menu should be loaded.
-
-Default is t")
-
-(defvar py-menu nil
- "Make a dynamically bound variable ‘py-menu’.")
-
-(defvar python-mode-map nil)
-(setq python-mode-map
- (let ((map (make-sparse-keymap)))
- ;; electric keys
- (define-key map [(:)] 'py-electric-colon)
- (define-key map [(\#)] 'py-electric-comment)
- (define-key map [(delete)] 'py-electric-delete)
- (define-key map [(backspace)] 'py-electric-backspace)
- (define-key map [(control backspace)] 'py-hungry-delete-backwards)
- (define-key map [(control c) (delete)] 'py-hungry-delete-forward)
- ;; (define-key map [(control y)] 'py-electric-yank)
- ;; moving point
- (define-key map [(control c) (control p)] 'py-backward-statement)
- (define-key map [(control c) (control n)] 'py-forward-statement)
- (define-key map [(control c) (control u)] 'py-backward-block)
- (define-key map [(control c) (control q)] 'py-forward-block)
- (define-key map [(control meta a)] 'py-backward-def-or-class)
- (define-key map [(control meta e)] 'py-forward-def-or-class)
-
- ;; (define-key map [(meta i)] 'py-indent-forward-line)
- (define-key map [(control j)] 'py-newline-and-indent)
- ;; Most Pythoneers expect RET `py-newline-and-indent'
- ;; (define-key map (kbd "RET") 'py-newline-and-dedent)
- (define-key map (kbd "RET") py-return-key)
- ;; (define-key map (kbd "RET") 'newline)
- (define-key map [(super backspace)] 'py-dedent)
- ;; (define-key map [(control return)] 'py-newline-and-dedent)
- ;; indentation level modifiers
- (define-key map [(control c) (control l)] 'py-shift-left)
- (define-key map [(control c) (control r)] 'py-shift-right)
- (define-key map [(control c) (<)] 'py-shift-left)
- (define-key map [(control c) (>)] 'py-shift-right)
- (define-key map [(control c) (tab)] 'py-indent-region)
- (define-key map [(control c) (:)] 'py-guess-indent-offset)
- ;; subprocess commands
- (define-key map [(control c) (control c)] 'py-execute-buffer)
- (define-key map [(control c) (control m)] 'py-execute-import-or-reload)
- (define-key map [(control c) (control s)] 'py-execute-string)
- (define-key map [(control c) (|)] 'py-execute-region)
- (define-key map [(control meta x)] 'py-execute-def-or-class)
- (define-key map [(control c) (!)] 'py-shell)
- (define-key map [(control c) (control t)] 'py-toggle-shell)
- (define-key map [(control meta h)] 'py-mark-def-or-class)
- (define-key map [(control c) (control k)] 'py-mark-block-or-clause)
- (define-key map [(control c) (.)] 'py-expression)
- ;; Miscellaneous
- ;; (define-key map [(super q)] 'py-copy-statement)
- (define-key map [(control c) (control d)] 'py-pdbtrack-toggle-stack-tracking)
- (define-key map [(control c) (control f)] 'py-sort-imports)
- (define-key map [(control c) (\#)] 'py-comment-region)
- (define-key map [(control c) (\?)] 'py-describe-mode)
- (define-key map [(control c) (control e)] 'py-help-at-point)
- (define-key map [(control c) (-)] 'py-up-exception)
- (define-key map [(control c) (=)] 'py-down-exception)
- (define-key map [(control x) (n) (d)] 'py-narrow-to-def-or-class)
- ;; information
- (define-key map [(control c) (control b)] 'py-submit-bug-report)
- (define-key map [(control c) (control v)] 'py-version)
- (define-key map [(control c) (control w)] 'py-pychecker-run)
- ;; (define-key map (kbd "TAB") 'py-indent-line)
- (define-key map (kbd "TAB") 'py-indent-or-complete)
- ;; (if py-complete-function
- ;; (progn
- ;; (define-key map [(meta tab)] py-complete-function)
- ;; (define-key map [(esc) (tab)] py-complete-function))
- ;; (define-key map [(meta tab)] 'py-shell-complete)
- ;; (define-key map [(esc) (tab)] 'py-shell-complete))
- (substitute-key-definition 'complete-symbol 'completion-at-point
- map global-map)
- (substitute-key-definition 'backward-up-list 'py-up
- map global-map)
- (substitute-key-definition 'down-list 'py-down
- map global-map)
- (when py-use-menu-p
- (setq map (py-define-menu map)))
- map))
-
-(defvar py-python-shell-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "RET") 'comint-send-input)
- (define-key map [(control c)(-)] 'py-up-exception)
- (define-key map [(control c)(=)] 'py-down-exception)
- (define-key map (kbd "TAB") 'py-indent-or-complete)
- (define-key map [(meta tab)] 'py-shell-complete)
- (define-key map [(control c)(!)] 'py-shell)
- (define-key map [(control c)(control t)] 'py-toggle-shell)
- ;; electric keys
- ;; (define-key map [(:)] 'py-electric-colon)
- ;; (define-key map [(\#)] 'py-electric-comment)
- ;; (define-key map [(delete)] 'py-electric-delete)
- ;; (define-key map [(backspace)] 'py-electric-backspace)
- ;; (define-key map [(control backspace)] 'py-hungry-delete-backwards)
- ;; (define-key map [(control c) (delete)] 'py-hungry-delete-forward)
- ;; (define-key map [(control y)] 'py-electric-yank)
- ;; moving point
- (define-key map [(control c)(control p)] 'py-backward-statement)
- (define-key map [(control c)(control n)] 'py-forward-statement)
- (define-key map [(control c)(control u)] 'py-backward-block)
- (define-key map [(control c)(control q)] 'py-forward-block)
- (define-key map [(control meta a)] 'py-backward-def-or-class)
- (define-key map [(control meta e)] 'py-forward-def-or-class)
- (define-key map [(control j)] 'py-newline-and-indent)
- (define-key map [(super backspace)] 'py-dedent)
- ;; (define-key map [(control return)] 'py-newline-and-dedent)
- ;; indentation level modifiers
- (define-key map [(control c)(control l)] 'comint-dynamic-list-input-ring)
- (define-key map [(control c)(control r)] 'comint-previous-prompt)
- (define-key map [(control c)(<)] 'py-shift-left)
- (define-key map [(control c)(>)] 'py-shift-right)
- (define-key map [(control c)(tab)] 'py-indent-region)
- (define-key map [(control c)(:)] 'py-guess-indent-offset)
- ;; subprocess commands
- (define-key map [(control meta h)] 'py-mark-def-or-class)
- (define-key map [(control c)(control k)] 'py-mark-block-or-clause)
- (define-key map [(control c)(.)] 'py-expression)
- ;; Miscellaneous
- ;; (define-key map [(super q)] 'py-copy-statement)
- (define-key map [(control c)(control d)] 'py-pdbtrack-toggle-stack-tracking)
- (define-key map [(control c)(\#)] 'py-comment-region)
- (define-key map [(control c)(\?)] 'py-describe-mode)
- (define-key map [(control c)(control e)] 'py-help-at-point)
- (define-key map [(control x) (n) (d)] 'py-narrow-to-def-or-class)
- ;; information
- (define-key map [(control c)(control b)] 'py-submit-bug-report)
- (define-key map [(control c)(control v)] 'py-version)
- (define-key map [(control c)(control w)] 'py-pychecker-run)
- (substitute-key-definition 'complete-symbol 'completion-at-point
- map global-map)
- (substitute-key-definition 'backward-up-list 'py-up
- map global-map)
- (substitute-key-definition 'down-list 'py-down
- map global-map)
- map)
- "Used inside a Python-shell.")
-
-(defvar py-ipython-shell-mode-map py-python-shell-mode-map
- "Unless setting of ipython-shell-mode needs to be different, let's save some lines of code and copy ‘py-python-shell-mode-map’ here.")
-
-(defvar py-shell-map py-python-shell-mode-map)
-
-(setq python-font-lock-keywords
- ;; Keywords
- `(,(rx symbol-start
- (or
- "if" "and" "del" "not" "while" "as" "elif" "global"
- "or" "async with" "with" "assert" "else" "pass" "yield" "break"
- "exec" "in" "continue" "finally" "is" "except" "raise"
- "return" "async for" "for" "lambda" "await")
- symbol-end)
- (,(rx symbol-start (or "async def" "def" "class") symbol-end) . py-def-class-face)
- (,(rx symbol-start (or "import" "from") symbol-end) . py-import-from-face)
- (,(rx symbol-start (or "try" "if") symbol-end) . py-try-if-face)
- ;; functions
- (,(rx symbol-start "def" (1+ space) (group (1+ (or word ?_))))
- (1 font-lock-function-name-face))
- (,(rx symbol-start "async def" (1+ space) (group (1+ (or word ?_))))
- (1 font-lock-function-name-face))
- ;; classes
- (,(rx symbol-start (group "class") (1+ space) (group (1+ (or word ?_))))
- (1 py-def-class-face) (2 py-class-name-face))
- (,(rx symbol-start
- (or "Ellipsis" "True" "False" "None" "__debug__" "NotImplemented")
- symbol-end) . py-pseudo-keyword-face)
- ;; Decorators.
- (,(rx line-start (* (any " \t")) (group "@" (1+ (or word ?_))
- (0+ "." (1+ (or word ?_)))))
- (1 py-decorators-face))
- (,(rx symbol-start (or "cls" "self")
- symbol-end) . py-object-reference-face)
-
- ;; Exceptions
- (,(rx word-start
- (or "ArithmeticError" "AssertionError" "AttributeError"
- "BaseException" "BufferError" "BytesWarning" "DeprecationWarning"
- "EOFError" "EnvironmentError" "Exception" "FloatingPointError"
- "FutureWarning" "GeneratorExit" "IOError" "ImportError"
- "ImportWarning" "IndentationError" "IndexError" "KeyError"
- "KeyboardInterrupt" "LookupError" "MemoryError" "NameError" "NoResultFound"
- "NotImplementedError" "OSError" "OverflowError"
- "PendingDeprecationWarning" "ReferenceError" "RuntimeError"
- "RuntimeWarning" "StandardError" "StopIteration" "SyntaxError"
- "SyntaxWarning" "SystemError" "SystemExit" "TabError" "TypeError"
- "UnboundLocalError" "UnicodeDecodeError" "UnicodeEncodeError"
- "UnicodeError" "UnicodeTranslateError" "UnicodeWarning"
- "UserWarning" "ValueError" "Warning" "ZeroDivisionError"
- ;; OSError subclasses
- "BlockIOError" "ChildProcessError" "ConnectionError"
- "BrokenPipError" "ConnectionAbortedError"
- "ConnectionRefusedError" "ConnectionResetError"
- "FileExistsError" "FileNotFoundError" "InterruptedError"
- "IsADirectoryError" "NotADirectoryError" "PermissionError"
- "ProcessLookupError" "TimeoutError")
- word-end) . py-exception-name-face)
- ;; Builtins
- (,(rx
- (or space line-start (not (any ".")))
- symbol-start
- (group (or "_" "__doc__" "__import__" "__name__" "__package__" "abs" "all"
- "any" "apply" "basestring" "bin" "bool" "buffer" "bytearray"
- "bytes" "callable" "chr" "classmethod" "cmp" "coerce" "compile"
- "complex" "delattr" "dict" "dir" "divmod" "enumerate" "eval"
- "execfile" "filter" "float" "format" "frozenset"
- "getattr" "globals" "hasattr" "hash" "help" "hex" "id" "input"
- "int" "intern" "isinstance" "issubclass" "iter" "len" "list"
- "locals" "long" "map" "max" "min" "next" "object" "oct" "open"
- "ord" "pow" "property" "range" "raw_input" "reduce"
- "reload" "repr" "reversed" "round" "set" "setattr" "slice"
- "sorted" "staticmethod" "str" "sum" "super" "tuple" "type"
- "unichr" "unicode" "vars" "xrange" "zip"))
- symbol-end) (1 py-builtins-face))
- ("\\([._[:word:]]+\\)\\(?:\\[[^]]+]\\)?[[:space:]]*\\(?:\\(?:\\*\\*\\|//\\|<<\\|>>\\|[%&*+/|^-]\\)?=\\)"
- (1 py-variable-name-face nil nil))
- ;; https://emacs.stackexchange.com/questions/55184/
- ;; how-to-highlight-in-different-colors-for-variables-inside-fstring-on-python-mo
- ;;
- ;; this is the full string.
- ;; group 1 is the quote type and a closing quote is matched
- ;; group 2 is the string part
- ("f\\(['\"]\\{1,3\\}\\)\\([^\\1]+?\\)\\1"
- ;; these are the {keywords}
- ("{[^}]*?}"
- ;; Pre-match form
- (progn (goto-char (match-beginning 0)) (match-end 0))
- ;; Post-match form
- (goto-char (match-end 0))
- ;; face for this match
- (0 font-lock-variable-name-face t)))
- ;; a, b, c = (1, 2, 3)
- (,(lambda (limit)
- (let ((re (rx (group (+ (any word ?. ?_))) (* space)
- (* ?, (* space) (+ (any word ?. ?_)) (* space))
- ?, (* space) (+ (any word ?. ?_)) (* space)
- (or "=" "+=" "-=" "*=" "/=" "//=" "%=" "**=" ">>=" "<<=" "&=" "^=" "|=")))
- (res nil))
- (while (and (setq res (re-search-forward re limit t))
- (goto-char (match-end 1))
- (nth 1 (parse-partial-sexp (point-min) (point)))
- ;; (python-syntax-context 'paren)
- ))
- res))
- (1 py-variable-name-face nil nil))
- ;; Numbers
- ;; (,(rx symbol-start (or (1+ digit) (1+ hex-digit)) symbol-end) . py-number-face)
- (,(rx symbol-start (1+ digit) symbol-end) . py-number-face)))
-
-;; python-components-switches
-
-;; Smart indentation
-(defalias 'toggle-py-smart-indentation 'py-toggle-smart-indentation)
-(defun py-toggle-smart-indentation (&optional arg)
- "Toggle `py-smart-indentation' - on with positiv ARG.
-
-Returns value of `py-smart-indentation' switched to."
- (interactive)
- (let ((arg (or arg (if py-smart-indentation -1 1))))
- (if (< 0 arg)
- (progn
- (setq py-smart-indentation t)
- (py-guess-indent-offset))
- (setq py-smart-indentation nil)
- (setq py-indent-offset (default-value 'py-indent-offset)))
- (when (called-interactively-p 'any) (message "py-smart-indentation: %s" py-smart-indentation))
- py-smart-indentation))
-
-(defun py-smart-indentation-on (&optional arg)
- "Toggle`py-smart-indentation' - on with positive ARG.
-
-Returns value of `py-smart-indentation'."
- (interactive "p")
- (let ((arg (or arg 1)))
- (toggle-py-smart-indentation arg))
- (when (called-interactively-p 'any) (message "py-smart-indentation: %s" py-smart-indentation))
- py-smart-indentation)
-
-(defun py-smart-indentation-off (&optional arg)
- "Toggle `py-smart-indentation' according to ARG.
-
-Returns value of `py-smart-indentation'."
- (interactive "p")
- (let ((arg (if arg (- arg) -1)))
- (toggle-py-smart-indentation arg))
- (when (called-interactively-p 'any) (message "py-smart-indentation: %s" py-smart-indentation))
- py-smart-indentation)
-
-(defun py-toggle-sexp-function ()
- "Opens customization."
- (interactive)
- (customize-variable 'py-sexp-function))
-
-;; Autopair mode
-;; py-autopair-mode forms
-(defalias 'toggle-py-autopair-mode 'py-toggle-autopair-mode)
-(defun py-toggle-autopair-mode ()
- "If `py-autopair-mode' should be on or off.
-
- Returns value of `py-autopair-mode' switched to."
- (interactive)
- (and (py-autopair-check)
- (setq py-autopair-mode (autopair-mode (if autopair-mode 0 1)))))
-
-(defun py-autopair-mode-on ()
- "Make sure, py-autopair-mode' is on.
-
-Returns value of `py-autopair-mode'."
- (interactive)
- (and (py-autopair-check)
- (setq py-autopair-mode (autopair-mode 1))))
-
-(defun py-autopair-mode-off ()
- "Make sure, py-autopair-mode' is off.
-
-Returns value of `py-autopair-mode'."
- (interactive)
- (setq py-autopair-mode (autopair-mode 0)))
-
-;; py-switch-buffers-on-execute-p forms
-(defun toggle-py-switch-buffers-on-execute-p (&optional arg)
- "Toggle `py-switch-buffers-on-execute-p' according to ARG.
-
- Returns value of `py-switch-buffers-on-execute-p' switched to."
- (interactive)
- (let ((arg (or arg (if py-switch-buffers-on-execute-p -1 1))))
- (if (< 0 arg)
- (setq py-switch-buffers-on-execute-p t)
- (setq py-switch-buffers-on-execute-p nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-switch-buffers-on-execute-p: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p))
-
-(defun py-switch-buffers-on-execute-p-on (&optional arg)
- "Toggle `py-switch-buffers-on-execute-p' according to ARG.
-
-Returns value of `py-switch-buffers-on-execute-p'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-py-switch-buffers-on-execute-p arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-switch-buffers-on-execute-p: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p)
-
-(defun py-switch-buffers-on-execute-p-off ()
- "Make sure, `py-switch-buffers-on-execute-p' is off.
-
-Returns value of `py-switch-buffers-on-execute-p'."
- (interactive)
- (toggle-py-switch-buffers-on-execute-p -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-switch-buffers-on-execute-p: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p)
-
-;; py-split-window-on-execute forms
-(defun toggle-py-split-window-on-execute (&optional arg)
- "Toggle `py-split-window-on-execute' according to ARG.
-
- Returns value of `py-split-window-on-execute' switched to."
- (interactive)
- (let ((arg (or arg (if py-split-window-on-execute -1 1))))
- (if (< 0 arg)
- (setq py-split-window-on-execute t)
- (setq py-split-window-on-execute nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-split-window-on-execute: %s" py-split-window-on-execute))
- py-split-window-on-execute))
-
-(defun py-split-window-on-execute-on (&optional arg)
- "Toggle `py-split-window-on-execute' according to ARG.
-
-Returns value of `py-split-window-on-execute'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-py-split-window-on-execute arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-split-window-on-execute: %s" py-split-window-on-execute))
- py-split-window-on-execute)
-
-(defun py-split-window-on-execute-off ()
- "Make sure, `py-split-window-on-execute' is off.
-
-Returns value of `py-split-window-on-execute'."
- (interactive)
- (toggle-py-split-window-on-execute -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-split-window-on-execute: %s" py-split-window-on-execute))
- py-split-window-on-execute)
-
-;; py-fontify-shell-buffer-p forms
-(defun toggle-py-fontify-shell-buffer-p (&optional arg)
- "Toggle `py-fontify-shell-buffer-p' according to ARG.
-
- Returns value of `py-fontify-shell-buffer-p' switched to."
- (interactive)
- (let ((arg (or arg (if py-fontify-shell-buffer-p -1 1))))
- (if (< 0 arg)
- (progn
- (setq py-fontify-shell-buffer-p t)
- (set (make-local-variable 'font-lock-defaults)
- '(python-font-lock-keywords nil nil nil nil
- (font-lock-syntactic-keywords
- . py-font-lock-syntactic-keywords)))
- (unless (looking-at comint-prompt-regexp)
- (when (re-search-backward comint-prompt-regexp nil t 1)
- (font-lock-fontify-region (line-beginning-position) (point-max)))))
- (setq py-fontify-shell-buffer-p nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-fontify-shell-buffer-p: %s" py-fontify-shell-buffer-p))
- py-fontify-shell-buffer-p))
-
-(defun py-fontify-shell-buffer-p-on (&optional arg)
- "Toggle `py-fontify-shell-buffer-p' according to ARG.
-
-Returns value of `py-fontify-shell-buffer-p'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-py-fontify-shell-buffer-p arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-fontify-shell-buffer-p: %s" py-fontify-shell-buffer-p))
- py-fontify-shell-buffer-p)
-
-(defun py-fontify-shell-buffer-p-off ()
- "Make sure, `py-fontify-shell-buffer-p' is off.
-
-Returns value of `py-fontify-shell-buffer-p'."
- (interactive)
- (toggle-py-fontify-shell-buffer-p -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-fontify-shell-buffer-p: %s" py-fontify-shell-buffer-p))
- py-fontify-shell-buffer-p)
-
-;; python-mode-v5-behavior-p forms
-(defun toggle-python-mode-v5-behavior-p (&optional arg)
- "Toggle `python-mode-v5-behavior-p' according to ARG.
-
- Returns value of `python-mode-v5-behavior-p' switched to."
- (interactive)
- (let ((arg (or arg (if python-mode-v5-behavior-p -1 1))))
- (if (< 0 arg)
- (setq python-mode-v5-behavior-p t)
- (setq python-mode-v5-behavior-p nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "python-mode-v5-behavior-p: %s" python-mode-v5-behavior-p))
- python-mode-v5-behavior-p))
-
-(defun python-mode-v5-behavior-p-on (&optional arg)
- "To `python-mode-v5-behavior-p' according to ARG.
-
-Returns value of `python-mode-v5-behavior-p'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-python-mode-v5-behavior-p arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "python-mode-v5-behavior-p: %s" python-mode-v5-behavior-p))
- python-mode-v5-behavior-p)
-
-(defun python-mode-v5-behavior-p-off ()
- "Make sure, `python-mode-v5-behavior-p' is off.
-
-Returns value of `python-mode-v5-behavior-p'."
- (interactive)
- (toggle-python-mode-v5-behavior-p -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "python-mode-v5-behavior-p: %s" python-mode-v5-behavior-p))
- python-mode-v5-behavior-p)
-
-;; py-jump-on-exception forms
-(defun toggle-py-jump-on-exception (&optional arg)
- "Toggle `py-jump-on-exception' according to ARG.
-
- Returns value of `py-jump-on-exception' switched to."
- (interactive)
- (let ((arg (or arg (if py-jump-on-exception -1 1))))
- (if (< 0 arg)
- (setq py-jump-on-exception t)
- (setq py-jump-on-exception nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-jump-on-exception: %s" py-jump-on-exception))
- py-jump-on-exception))
-
-(defun py-jump-on-exception-on (&optional arg)
- "Toggle py-jump-on-exception' according to ARG.
-
-Returns value of `py-jump-on-exception'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-py-jump-on-exception arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-jump-on-exception: %s" py-jump-on-exception))
- py-jump-on-exception)
-
-(defun py-jump-on-exception-off ()
- "Make sure, `py-jump-on-exception' is off.
-
-Returns value of `py-jump-on-exception'."
- (interactive)
- (toggle-py-jump-on-exception -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-jump-on-exception: %s" py-jump-on-exception))
- py-jump-on-exception)
-
-;; py-use-current-dir-when-execute-p forms
-(defun toggle-py-use-current-dir-when-execute-p (&optional arg)
- "Toggle `py-use-current-dir-when-execute-p' according to ARG.
-
- Returns value of `py-use-current-dir-when-execute-p' switched to."
- (interactive)
- (let ((arg (or arg (if py-use-current-dir-when-execute-p -1 1))))
- (if (< 0 arg)
- (setq py-use-current-dir-when-execute-p t)
- (setq py-use-current-dir-when-execute-p nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-use-current-dir-when-execute-p: %s" py-use-current-dir-when-execute-p))
- py-use-current-dir-when-execute-p))
-
-(defun py-use-current-dir-when-execute-p-on (&optional arg)
- "Toggle py-use-current-dir-when-execute-p' according to ARG.
-
-Returns value of `py-use-current-dir-when-execute-p'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-py-use-current-dir-when-execute-p arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-use-current-dir-when-execute-p: %s" py-use-current-dir-when-execute-p))
- py-use-current-dir-when-execute-p)
-
-(defun py-use-current-dir-when-execute-p-off ()
- "Make sure, `py-use-current-dir-when-execute-p' is off.
-
-Returns value of `py-use-current-dir-when-execute-p'."
- (interactive)
- (toggle-py-use-current-dir-when-execute-p -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-use-current-dir-when-execute-p: %s" py-use-current-dir-when-execute-p))
- py-use-current-dir-when-execute-p)
-
-;; py-electric-comment-p forms
-(defun toggle-py-electric-comment-p (&optional arg)
- "Toggle `py-electric-comment-p' according to ARG.
-
- Returns value of `py-electric-comment-p' switched to."
- (interactive)
- (let ((arg (or arg (if py-electric-comment-p -1 1))))
- (if (< 0 arg)
- (setq py-electric-comment-p t)
- (setq py-electric-comment-p nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-electric-comment-p: %s" py-electric-comment-p))
- py-electric-comment-p))
-
-(defun py-electric-comment-p-on (&optional arg)
- "Toggle py-electric-comment-p' according to ARG.
-
-Returns value of `py-electric-comment-p'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-py-electric-comment-p arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-electric-comment-p: %s" py-electric-comment-p))
- py-electric-comment-p)
-
-(defun py-electric-comment-p-off ()
- "Make sure, `py-electric-comment-p' is off.
-
-Returns value of `py-electric-comment-p'."
- (interactive)
- (toggle-py-electric-comment-p -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-electric-comment-p: %s" py-electric-comment-p))
- py-electric-comment-p)
-
-;; py-underscore-word-syntax-p forms
-(defun toggle-py-underscore-word-syntax-p (&optional arg)
- "Toggle `py-underscore-word-syntax-p' according to ARG.
-
- Returns value of `py-underscore-word-syntax-p' switched to."
- (interactive)
- (let ((arg (or arg (if py-underscore-word-syntax-p -1 1))))
- (if (< 0 arg)
- (progn
- (setq py-underscore-word-syntax-p t)
- (modify-syntax-entry ?\_ "w" python-mode-syntax-table))
- (setq py-underscore-word-syntax-p nil)
- (modify-syntax-entry ?\_ "_" python-mode-syntax-table))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-underscore-word-syntax-p: %s" py-underscore-word-syntax-p))
- py-underscore-word-syntax-p))
-
-(defun py-underscore-word-syntax-p-on (&optional arg)
- "Toggle py-underscore-word-syntax-p' according to ARG.
-
-Returns value of `py-underscore-word-syntax-p'."
- (interactive)
- (let ((arg (or arg 1)))
- (toggle-py-underscore-word-syntax-p arg))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-underscore-word-syntax-p: %s" py-underscore-word-syntax-p))
- py-underscore-word-syntax-p)
-
-(defun py-underscore-word-syntax-p-off ()
- "Make sure, `py-underscore-word-syntax-p' is off.
-
-Returns value of `py-underscore-word-syntax-p'."
- (interactive)
- (toggle-py-underscore-word-syntax-p -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-underscore-word-syntax-p: %s" py-underscore-word-syntax-p))
- py-underscore-word-syntax-p)
-
-;; toggle-py-underscore-word-syntax-p must be known already
-;; circular: toggle-py-underscore-word-syntax-p sets and calls it
-(defcustom py-underscore-word-syntax-p t
- "If underscore chars should be of ‘syntax-class’ word.
-
-I.e. not of `symbol'.
-
-Underscores in word-class like `forward-word' travel the indentifiers.
-Default is t.
-
-See bug report at launchpad, lp:940812"
- :type 'boolean
- :tag "py-underscore-word-syntax-p"
- :group 'python-mode
- :set (lambda (symbol value)
- (set-default symbol value)
- (toggle-py-underscore-word-syntax-p (if value 1 0))))
-
-;; python-components-edit
-(defvar py-keywords "\\<\\(ArithmeticError\\|AssertionError\\|AttributeError\\|BaseException\\|BufferError\\|BytesWarning\\|DeprecationWarning\\|EOFError\\|Ellipsis\\|EnvironmentError\\|Exception\\|False\\|FloatingPointError\\|FutureWarning\\|GeneratorExit\\|IOError\\|ImportError\\|ImportWarning\\|IndentationError\\|IndexError\\|KeyError\\|KeyboardInterrupt\\|LookupError\\|MemoryError\\|NameError\\|NoneNotImplementedError\\|NotImplemented\\|OSError\\|OverflowError\\|PendingDeprecationWarning\\|ReferenceError\\|RuntimeError\\|RuntimeWarning\\|StandardError\\|StopIteration\\|SyntaxError\\|SyntaxWarning\\|SystemError\\|SystemExit\\|TabError\\|True\\|TypeError\\|UnboundLocalError\\|UnicodeDecodeError\\|UnicodeEncodeError\\|UnicodeError\\|UnicodeTranslateError\\|UnicodeWarning\\|UserWarning\\|ValueError\\|Warning\\|ZeroDivisionError\\|__debug__\\|__import__\\|__name__\\|abs\\|all\\|and\\|any\\|apply\\|as\\|assert\\|basestring\\|bin\\|bool\\|break\\|buffer\\|bytearray\\|callable\\|chr\\|class\\|classmethod\\|cmp\\|coerce\\|compile\\|complex\\|continue\\|copyright\\|credits\\|def\\|del\\|delattr\\|dict\\|dir\\|divmod\\|elif\\|else\\|enumerate\\|eval\\|except\\|exec\\|execfile\\|exit\\|file\\|filter\\|float\\|for\\|format\\|from\\|getattr\\|global\\|globals\\|hasattr\\|hash\\|help\\|hex\\|id\\|if\\|import\\|in\\|input\\|int\\|intern\\|is\\|isinstance\\|issubclass\\|iter\\|lambda\\|len\\|license\\|list\\|locals\\|long\\|map\\|max\\|memoryview\\|min\\|next\\|not\\|object\\|oct\\|open\\|or\\|ord\\|pass\\|pow\\|print\\|property\\|quit\\|raise\\|range\\|raw_input\\|reduce\\|reload\\|repr\\|return\\|round\\|set\\|setattr\\|slice\\|sorted\\|staticmethod\\|str\\|sum\\|super\\|tuple\\|type\\|unichr\\|unicode\\|vars\\|while\\|with\\|xrange\\|yield\\|zip\\|\\)\\>"
- "Contents like py-fond-lock-keyword.")
-
-;; ;
-(defun py-insert-default-shebang ()
- "Insert in buffer shebang of installed default Python."
- (interactive "*")
- (let* ((erg (if py-edit-only-p
- py-shell-name
- (executable-find py-shell-name)))
- (sheb (concat "#! " erg)))
- (insert sheb)))
-
-(defun py--beginning-of-expression-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘expression’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at (concat "\\b" py-expression-re))
- (point))))
-
-(defun py--top-level-form-p ()
- "Return non-nil, if line start with a top level definition.
-
-Used by `py-electric-colon', which will not indent than."
- (let (erg)
- (save-excursion
- (beginning-of-line)
- (setq erg (or (looking-at py-class-re)
- (looking-at py-def-re))))
- erg))
-
-
-(defun py-indent-line-outmost (&optional arg)
- "Indent the current line to the outmost reasonable indent.
-
-With optional \\[universal-argument] ARG an indent with length `py-indent-offset' is inserted unconditionally"
- (interactive "*P")
- (let* ((need (py-compute-indentation (point)))
- (cui (current-indentation))
- (cuc (current-column)))
- (cond ((eq 4 (prefix-numeric-value arg))
- (if indent-tabs-mode
- (insert (make-string 1 9))
- (insert (make-string py-indent-offset 32))))
- (t
- (if (and (eq need cui)(not (eq cuc cui)))
- (back-to-indentation)
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need))))))
-
-(defun py--indent-fix-region-intern (beg end)
- "Used when `py-tab-indents-region-p' is non-nil.
-
-Requires BEG, END as the boundery of region"
- (let ()
- (save-excursion
- (save-restriction
- (beginning-of-line)
- (narrow-to-region beg end)
- (forward-line 1)
- (narrow-to-region (line-beginning-position) end)
- (beginning-of-line)
- (delete-region (point) (progn (skip-chars-forward " \t\r\n\f") (point)))
- (indent-to (py-compute-indentation))
- (while
- (< (line-end-position) end)
- (forward-line 1)
- (beginning-of-line)
- (delete-region (point) (progn (skip-chars-forward " \t\r\n\f") (point)))
- (indent-to (py-compute-indentation)))))))
-
-(defun py-indent-current-line (need)
- "Indent current line to NEED."
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need))
-
-(defun py--indent-line-intern (need cui indent col &optional beg end region)
- (let (erg)
- (if py-tab-indent
- (progn
- (and py-tab-indents-region-p region
- (py--indent-fix-region-intern beg end))
- (cond
- ((bolp)
- (if (and py-tab-shifts-region-p region)
- (progn
- (while (< (current-indentation) need)
- (py-shift-region-right 1)))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need)))
- ((< need cui)
- (if (and py-tab-shifts-region-p region)
- (progn
- (when (eq (point) (region-end))
- (exchange-point-and-mark))
- (while (< 0 (current-indentation))
- (py-shift-region-left 1)))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need)))
- ((eq need cui)
- (if (or (eq this-command last-command)
- (eq this-command 'py-indent-line))
- (if (and py-tab-shifts-region-p region)
- (while (and (goto-char beg) (< 0 (current-indentation)))
- (py-shift-region-left 1))
- (beginning-of-line)
- (delete-horizontal-space)
- (if (<= (line-beginning-position) (+ (point) (- col cui)))
- (forward-char (- col cui))
- (beginning-of-line)))))
- ((< cui need)
- (if (and py-tab-shifts-region-p region)
- (progn
- (py-shift-region-right 1))
- (progn
- (beginning-of-line)
- (delete-horizontal-space)
- ;; indent one indent only if goal < need
- (setq erg (+ (* (/ cui indent) indent) indent))
- (if (< need erg)
- (indent-to need)
- (indent-to erg))
- (forward-char (- col cui)))))
- (t
- (if (and py-tab-shifts-region-p region)
- (progn
- (while (< (current-indentation) need)
- (py-shift-region-right 1)))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need)
- (back-to-indentation)
- (if (<= (line-beginning-position) (+ (point) (- col cui)))
- (forward-char (- col cui))
- (beginning-of-line))))))
- (insert-tab))))
-
-(defun py--indent-line-or-region-base (beg end region cui need arg this-indent-offset col)
- (cond ((eq 4 (prefix-numeric-value arg))
- (if (and (eq cui (current-indentation))
- (<= need cui))
- (if indent-tabs-mode (insert "\t")(insert (make-string py-indent-offset 32)))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to (+ need py-indent-offset))))
- ((not (eq 1 (prefix-numeric-value arg)))
- (py-smart-indentation-off)
- (py--indent-line-intern need cui this-indent-offset col beg end region))
- (t (py--indent-line-intern need cui this-indent-offset col beg end region))))
-
-(defun py--calculate-indent-backwards (cui indent-offset)
- "Return the next reasonable indent lower than current indentation.
-
-Requires current indent as CUI
-Requires current indent-offset as INDENT-OFFSET"
- (if (< 0 (% cui py-indent-offset))
- ;; not correctly indented at all
- (/ cui indent-offset)
- (- cui indent-offset)))
-
-(defun py-indent-line (&optional arg outmost-only)
- "Indent the current line according ARG.
-
-When called interactivly with \\[universal-argument],
-ignore dedenting rules for block closing statements
-\(e.g. return, raise, break, continue, pass)
-
-An optional \\[universal-argument] followed by a numeric argument
-neither 1 nor 4 will switch off `py-smart-indentation' for this execution.
-This permits to correct allowed but unwanted indents. Similar to
-`toggle-py-smart-indentation' resp. `py-smart-indentation-off' followed by TAB.
-
-This function is normally used by `indent-line-function' resp.
-\\[indent-for-tab-command].
-
-When bound to TAB, \\[quoted-insert] TAB inserts a TAB.
-
-OUTMOST-ONLY stops circling possible indent.
-
-When `py-tab-shifts-region-p' is t, not just the current line,
-but the region is shiftet that way.
-
-If `py-tab-indents-region-p' is t and first TAB doesn't shift
---as indent is at outmost reasonable--, ‘indent-region’ is called.
-
-\\[quoted-insert] TAB inserts a literal TAB-character."
- (interactive "P")
- (unless (eq this-command last-command)
- (setq py-already-guessed-indent-offset nil))
- (let ((orig (copy-marker (point)))
- ;; TAB-leaves-point-in-the-wrong-lp-1178453-test
- (region (use-region-p))
- cui
- outmost
- col
- beg
- end
- need
- this-indent-offset)
- (and region
- (setq beg (region-beginning))
- (setq end (region-end))
- (goto-char beg))
- (setq cui (current-indentation))
- (setq col (current-column))
- (setq this-indent-offset
- (cond ((and py-smart-indentation (not (eq this-command last-command)))
- (py-guess-indent-offset))
- ((and py-smart-indentation (eq this-command last-command) py-already-guessed-indent-offset)
- py-already-guessed-indent-offset)
- (t (default-value 'py-indent-offset))))
- (setq outmost (py-compute-indentation nil nil nil nil nil nil nil this-indent-offset))
- ;; now choose the indent
- (setq need
- (cond ((eq this-command last-command)
- (if (eq cui outmost)
- (when (not outmost-only)
- (py--calculate-indent-backwards cui this-indent-offset)))
- (if (bolp)
- (py-compute-indentation orig)
- (py--calculate-indent-backwards cui this-indent-offset)))
- (t
- outmost
- ;; (py-compute-indentation orig)
- )))
- (when (and (called-interactively-p 'any) py-verbose-p) (message "py-indent-line, need: %s" need))
- ;; if at outmost
- ;; and not (eq this-command last-command), need remains nil
- (when need
- (py--indent-line-or-region-base beg end region cui need arg this-indent-offset col)
- (and region (or py-tab-shifts-region-p
- py-tab-indents-region-p)
- (not (eq (point) orig))
- (exchange-point-and-mark))
- (when (and (called-interactively-p 'any) py-verbose-p)(message "%s" (current-indentation)))
- (current-indentation))))
-
-(defun py--delete-trailing-whitespace (orig)
- "Delete trailing whitespace.
-
-Either `py-newline-delete-trailing-whitespace-p'
-or `
-py-trailing-whitespace-smart-delete-p' must be t.
-
-Start from position ORIG"
- (when (or py-newline-delete-trailing-whitespace-p py-trailing-whitespace-smart-delete-p)
- (let ((pos (copy-marker (point))))
- (save-excursion
- (goto-char orig)
- (if (py-empty-line-p)
- (if (py---emacs-version-greater-23)
- (delete-trailing-whitespace (line-beginning-position) pos)
- (save-restriction
- (narrow-to-region (line-beginning-position) pos)
- (delete-trailing-whitespace)))
- (skip-chars-backward " \t")
- (if (py---emacs-version-greater-23)
- (delete-trailing-whitespace (line-beginning-position) pos)
- (save-restriction
- (narrow-to-region (point) pos)
- (delete-trailing-whitespace))))))))
-
-(defun py-newline-and-indent ()
- "Add a newline and indent to outmost reasonable indent.
-When indent is set back manually, this is honoured in following lines."
- (interactive "*")
- (let* ((orig (point))
- ;; lp:1280982, deliberatly dedented by user
- (this-dedent
- (when (and (or (eq 10 (char-after))(eobp))(looking-back "^[ \t]*" (line-beginning-position)))
- (current-column)))
- erg)
- (newline 1)
- (py--delete-trailing-whitespace orig)
- (setq erg
- (cond (this-dedent
- (indent-to-column this-dedent))
- ((and py-empty-line-closes-p (or (eq this-command last-command)(py--after-empty-line)))
- (indent-to-column (save-excursion (py-backward-statement)(- (current-indentation) py-indent-offset))))
- (t
- (fixup-whitespace)
- (indent-to-column (py-compute-indentation)))))
- (when (and (called-interactively-p 'any) py-verbose-p) (message "%s" erg))
- erg))
-
-(defalias 'py-newline-and-close-block 'py-newline-and-dedent)
-(defun py-newline-and-dedent ()
- "Add a newline and indent to one level below current.
-Returns column."
- (interactive "*")
- (let ((cui (current-indentation))
- erg)
- (newline 1)
- (when (< 0 cui)
- (setq erg (- (py-compute-indentation) py-indent-offset))
- (indent-to-column erg))
- (when (and (called-interactively-p 'any) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-toggle-indent-tabs-mode ()
- "Toggle `indent-tabs-mode'.
-
-Returns value of `indent-tabs-mode' switched to."
- (interactive)
- (when
- (setq indent-tabs-mode (not indent-tabs-mode))
- (setq tab-width py-indent-offset))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "indent-tabs-mode %s py-indent-offset %s" indent-tabs-mode py-indent-offset))
- indent-tabs-mode)
-
-(defun py-indent-tabs-mode (arg &optional iact)
- "With positive ARG switch `indent-tabs-mode' on.
-
-With negative ARG switch `indent-tabs-mode' off.
-Returns value of `indent-tabs-mode' switched to.
-
-If IACT is provided, message result"
- (interactive "p")
- (if (< 0 arg)
- (progn
- (setq indent-tabs-mode t)
- (setq tab-width py-indent-offset))
- (setq indent-tabs-mode nil))
- (when (and py-verbose-p (or iact (called-interactively-p 'any))) (message "indent-tabs-mode %s py-indent-offset %s" indent-tabs-mode py-indent-offset))
- indent-tabs-mode)
-
-(defun py-indent-tabs-mode-on (arg)
- "Switch `indent-tabs-mode' according to ARG."
- (interactive "p")
- (py-indent-tabs-mode (abs arg)(called-interactively-p 'any)))
-
-(defun py-indent-tabs-mode-off (arg)
- "Switch `indent-tabs-mode' according to ARG."
- (interactive "p")
- (py-indent-tabs-mode (- (abs arg))(called-interactively-p 'any)))
-
-;; Guess indent offset
-(defun py-guessed-sanity-check (guessed)
- (and (>= guessed 2)(<= guessed 8)(eq 0 (% guessed 2))))
-
-(defun py--guess-indent-final (indents)
- "Calculate and do sanity-check.
-
-Expects INDENTS, a cons"
- (let* ((first (car indents))
- (second (cadr indents))
- (erg (if (and first second)
- (if (< second first)
- (- first second)
- (- second first))
- (default-value 'py-indent-offset))))
- (setq erg (and (py-guessed-sanity-check erg) erg))
- erg))
-
-(defun py--guess-indent-forward ()
- "Called when moving to end of a form and `py-smart-indentation' is on."
- (let* ((first (if
- (py--beginning-of-statement-p)
- (current-indentation)
- (progn
- (py-forward-statement)
- (py-backward-statement)
- (current-indentation))))
- (second (if (or (looking-at py-extended-block-or-clause-re)(eq 0 first))
- (progn
- (py-forward-statement)
- (py-forward-statement)
- (py-backward-statement)
- (current-indentation))
- ;; when not starting from block, look above
- (while (and (re-search-backward py-extended-block-or-clause-re nil 'movet 1)
- (or (>= (current-indentation) first)
- (nth 8 (parse-partial-sexp (point-min) (point))))))
- (current-indentation))))
- (list first second)))
-
-(defun py--guess-indent-backward ()
- "Called when moving to beginning of a form and `py-smart-indentation' is on."
- (let* ((cui (current-indentation))
- (indent (if (< 0 cui) cui 999))
- (pos (progn (while (and (re-search-backward py-extended-block-or-clause-re nil 'move 1)
- (or (>= (current-indentation) indent)
- (nth 8 (parse-partial-sexp (point-min) (point))))))
- (unless (bobp) (point))))
- (first (and pos (current-indentation)))
- (second (and pos (py-forward-statement) (py-forward-statement) (py-backward-statement)(current-indentation))))
- (list first second)))
-
-(defun py-guess-indent-offset (&optional direction)
- "Guess `py-indent-offset'.
-
-Set local value of `py-indent-offset', return it
-
-Might change local value of `py-indent-offset' only when called
-downwards from beginning of block followed by a statement.
-Otherwise ‘default-value’ is returned.
-Unless DIRECTION is symbol 'forward, go backward first"
- (interactive)
- (save-excursion
- (let* ((indents
- (cond (direction
- (if (eq 'forward direction)
- (py--guess-indent-forward)
- (py--guess-indent-backward)))
- ;; guess some usable indent is above current position
- ((eq 0 (current-indentation))
- (py--guess-indent-forward))
- (t (py--guess-indent-backward))))
- (erg (py--guess-indent-final indents)))
- (if erg (setq py-indent-offset erg)
- (setq py-indent-offset
- (default-value 'py-indent-offset)))
- (when (called-interactively-p 'any) (message "%s" py-indent-offset))
- py-indent-offset)))
-
-(defun py--comment-indent-function ()
- "Python version of `comment-indent-function'."
- ;; This is required when filladapt is turned off. Without it, when
- ;; filladapt is not used, comments which start in column zero
- ;; cascade one character to the right
- (save-excursion
- (beginning-of-line)
- (let ((eol (line-end-position)))
- (and comment-start-skip
- (re-search-forward comment-start-skip eol t)
- (setq eol (match-beginning 0)))
- (goto-char eol)
- (skip-chars-backward " \t")
- (max comment-column (+ (current-column) (if (bolp) 0 1))))))
-
-;; make general form below work also in these cases
-;; (defalias 'py-backward-paragraph 'backward-paragraph)
-(defun py-backward-paragraph ()
- "Go to beginning of current paragraph.
-
-If already at beginning, go to start of next paragraph upwards"
- (interactive)
- (let ((erg (and (backward-paragraph)(point))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-;; (defalias 'py-end-of-paragraph 'forward-paragraph)
-(defun py-forward-paragraph ()
- "Go to end of current paragraph.
-
-If already at end, go to end of next paragraph downwards"
- (interactive)
- (let ((erg (and (forward-paragraph)(point))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-;; ;
-(defun py-indent-and-forward (&optional indent)
- "Indent current line according to mode, move one line forward.
-
-If optional INDENT is given, use it"
- (interactive "*")
- (beginning-of-line)
- (when (member (char-after) (list 32 9 10 12 13)) (delete-region (point) (progn (skip-chars-forward " \t\r\n\f")(point))))
- (indent-to (or indent (py-compute-indentation)))
- (if (eobp)
- (newline-and-indent)
- (forward-line 1))
- (back-to-indentation))
-
-(defun py--indent-line-by-line (beg end)
- "Indent every line until end to max reasonable extend.
-
-Starts from second line of region specified
-BEG END deliver the boundaries of region to work within"
- (goto-char beg)
- (py-indent-and-forward)
- ;; (forward-line 1)
- (while (< (line-end-position) end)
- (if (py-empty-line-p)
- (forward-line 1)
- (py-indent-and-forward)))
- (unless (py-empty-line-p) (py-indent-and-forward)))
-
-(defun py-indent-region (beg end)
- "Reindent a region delimited by BEG END.
-
-In case first line accepts an indent, keep the remaining
-lines relative.
-Otherwise lines in region get outmost indent,
-same with optional argument
-
-In order to shift a chunk of code, where the first line is okay, start with second line."
- (interactive "*")
- (let ((end (copy-marker end)))
- (goto-char beg)
- (beginning-of-line)
- (setq beg (point))
- (skip-chars-forward " \t\r\n\f")
- (py--indent-line-by-line beg end)))
-
-(defun py--beginning-of-buffer-position ()
- "Provided for abstract reasons."
- (point-min))
-
-(defun py--end-of-buffer-position ()
- "Provided for abstract reasons."
- (point-max))
-
-;; Declarations start
-(defun py--bounds-of-declarations ()
- "Bounds of consecutive multitude of assigments resp. statements around point.
-
-Indented same level, which don't open blocks.
-Typically declarations resp. initialisations of variables following
-a class or function definition.
-See also ‘py--bounds-of-statements’"
- (let* ((orig-indent (progn
- (back-to-indentation)
- (unless (py--beginning-of-statement-p)
- (py-backward-statement))
- (unless (py--beginning-of-block-p)
- (current-indentation))))
- (orig (point))
- last beg end)
- (when orig-indent
- (setq beg (line-beginning-position))
- ;; look upward first
- (while (and
- (progn
- (unless (py--beginning-of-statement-p)
- (py-backward-statement))
- (line-beginning-position))
- (py-backward-statement)
- (not (py--beginning-of-block-p))
- (eq (current-indentation) orig-indent))
- (setq beg (line-beginning-position)))
- (goto-char orig)
- (while (and (setq last (line-end-position))
- (setq end (py-down-statement))
- (not (py--beginning-of-block-p))
- (eq (py-indentation-of-statement) orig-indent)))
- (setq end last)
- (goto-char beg)
- (if (and beg end)
- (progn
- (when (called-interactively-p 'any) (message "%s %s" beg end))
- (cons beg end))
- (when (called-interactively-p 'any) (message "%s" nil))
- nil))))
-
-(defun py-backward-declarations ()
- "Got to the beginning of assigments resp. statements in current level which don't open blocks."
- (interactive)
- (let* ((bounds (py--bounds-of-declarations))
- (erg (car bounds)))
- (when erg (goto-char erg))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-forward-declarations ()
- "Got to the end of assigments resp. statements in current level which don't open blocks."
- (interactive)
- (let* ((bounds (py--bounds-of-declarations))
- (erg (cdr bounds)))
- (when erg (goto-char erg))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defalias 'py-copy-declarations 'py-declarations)
-(defun py-declarations ()
- "Forms in current level,which don't open blocks or start with a keyword.
-
-See also `py-statements', which is more general, taking also simple statements starting with a keyword."
- (interactive)
- (let* ((bounds (py--bounds-of-declarations))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (kill-new (buffer-substring-no-properties beg end))
- (exchange-point-and-mark))))
-
-(defun py-kill-declarations ()
- "Delete variables declared in current level.
-
-Store deleted variables in ‘kill-ring’"
- (interactive "*")
- (let* ((bounds (py--bounds-of-declarations))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (kill-new (buffer-substring-no-properties beg end))
- (delete-region beg end))))
-;; Declarations end
-
-;; Statements start
-(defun py--bounds-of-statements ()
- "Bounds of consecutive multitude of statements around point.
-
-Indented same level, which don't open blocks."
- (interactive)
- (let* ((orig-indent (progn
- (back-to-indentation)
- (unless (py--beginning-of-statement-p)
- (py-backward-statement))
- (unless (py--beginning-of-block-p)
- (current-indentation))))
- (orig (point))
- last beg end)
- (when orig-indent
- (setq beg (point))
- (while (and (setq last beg)
- (setq beg
- (when (py-backward-statement)
- (line-beginning-position)))
- ;; backward-statement shouldn't stop in string
- ;; (not (py-in-string-p))
- (not (py--beginning-of-block-p))
- (eq (current-indentation) orig-indent)))
- (setq beg last)
- (goto-char orig)
- (setq end (line-end-position))
- (while (and (setq last (py--end-of-statement-position))
- (setq end (py-down-statement))
- (not (py--beginning-of-block-p))
- ;; (not (looking-at py-keywords))
- ;; (not (looking-at "pdb\."))
- ;; (not (py-in-string-p))
- (eq (py-indentation-of-statement) orig-indent)))
- (setq end last)
- (goto-char orig)
- (if (and beg end)
- (progn
- (when (called-interactively-p 'any) (message "%s %s" beg end))
- (cons beg end))
- (when (called-interactively-p 'any) (message "%s" nil))
- nil))))
-
-(defun py-backward-statements ()
- "Got to the beginning of statements in current level which don't open blocks."
- (interactive)
- (let* ((bounds (py--bounds-of-statements))
- (erg (car bounds)))
- (when erg (goto-char erg))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-forward-statements ()
- "Got to the end of statements in current level which don't open blocks."
- (interactive)
- (let* ((bounds (py--bounds-of-statements))
- (erg (cdr bounds)))
- (when erg (goto-char erg))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defalias 'py-copy-statements 'py-statements)
-(defun py-statements ()
- "Copy and mark simple statements in current level which don't open blocks.
-
-More general than ‘py-declarations’, which would stop at keywords like a print-statement."
- (interactive)
- (let* ((bounds (py--bounds-of-statements))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (kill-new (buffer-substring-no-properties beg end))
- (exchange-point-and-mark))))
-
-(defun py-kill-statements ()
- "Delete statements declared in current level.
-
-Store deleted statements in ‘kill-ring’"
- (interactive "*")
- (let* ((bounds (py--bounds-of-statements))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (kill-new (buffer-substring-no-properties beg end))
- (delete-region beg end))))
-
-(defun py--join-words-wrapping (words separator prefix line-length)
- (let ((lines ())
- (current-line prefix))
- (while words
- (let* ((word (car words))
- (maybe-line (concat current-line word separator)))
- (if (> (length maybe-line) line-length)
- (setq lines (cons (substring current-line 0 -1) lines)
- current-line (concat prefix word separator " "))
- (setq current-line (concat maybe-line " "))))
- (setq words (cdr words)))
- (setq lines (cons (substring
- current-line 0 (- 0 (length separator) 1)) lines))
- (mapconcat 'identity (nreverse lines) "\n")))
-
-(defun py-insert-super ()
- "Insert a function \"super()\" from current environment.
-
-As example given in Python v3.1 documentation » The Python Standard Library »
-
-class C(B):
- def method(self, arg):
- super().method(arg) # This does the same thing as:
- # super(C, self).method(arg)
-
-Returns the string inserted."
- (interactive "*")
- (let* ((orig (point))
- (funcname (progn
- (py-backward-def)
- (when (looking-at (concat py-def-re " *\\([^(]+\\) *(\\(?:[^),]*\\),? *\\([^)]*\\))"))
- (match-string-no-properties 2))))
- (args (match-string-no-properties 3))
- (ver (py-which-python))
- classname erg)
- (if (< ver 3)
- (progn
- (py-backward-class)
- (when (looking-at (concat py-class-re " *\\([^( ]+\\)"))
- (setq classname (match-string-no-properties 2)))
- (goto-char orig)
- (setq erg (concat "super(" classname ", self)." funcname "(" args ")"))
- ;; super(C, self).method(arg)"
- (insert erg))
- (goto-char orig)
- (setq erg (concat "super()." funcname "(" args ")"))
- (insert erg))
- erg))
-
-;; Comments
-(defun py-delete-comments-in-def-or-class ()
- "Delete all commented lines in def-or-class at point."
- (interactive "*")
- (save-excursion
- (let ((beg (py--beginning-of-def-or-class-position))
- (end (py--end-of-def-or-class-position)))
- (and beg end (py--delete-comments-intern beg end)))))
-
-(defun py-delete-comments-in-class ()
- "Delete all commented lines in class at point."
- (interactive "*")
- (save-excursion
- (let ((beg (py--beginning-of-class-position))
- (end (py--end-of-class-position)))
- (and beg end (py--delete-comments-intern beg end)))))
-
-(defun py-delete-comments-in-block ()
- "Delete all commented lines in block at point."
- (interactive "*")
- (save-excursion
- (let ((beg (py--beginning-of-block-position))
- (end (py--end-of-block-position)))
- (and beg end (py--delete-comments-intern beg end)))))
-
-(defun py-delete-comments-in-region (beg end)
- "Delete all commented lines in region delimited by BEG END."
- (interactive "r*")
- (save-excursion
- (py--delete-comments-intern beg end)))
-
-(defun py--delete-comments-intern (beg end)
- (save-restriction
- (narrow-to-region beg end)
- (goto-char beg)
- (while (and (< (line-end-position) end) (not (eobp)))
- (beginning-of-line)
- (if (looking-at (concat "[ \t]*" comment-start))
- (delete-region (point) (1+ (line-end-position)))
- (forward-line 1)))))
-
-;; Edit docstring
-(defun py--edit-set-vars ()
- (save-excursion
- (let ((py--editbeg (when (use-region-p) (region-beginning)))
- (py--editend (when (use-region-p) (region-end)))
- (pps (parse-partial-sexp (point-min) (point))))
- (when (nth 3 pps)
- (setq py--editbeg (or py--editbeg (progn (goto-char (nth 8 pps))
- (skip-chars-forward (char-to-string (char-after)))(push-mark) (point))))
- (setq py--editend (or py--editend
- (progn (goto-char (nth 8 pps))
- (forward-sexp)
- (skip-chars-backward (char-to-string (char-before)))
- (point)))))
- (cons (copy-marker py--editbeg) (copy-marker py--editend)))))
-
-(defun py--write-edit ()
- "When edit is finished, write docstring back to orginal buffer."
- (interactive)
- (goto-char (point-min))
- (while (re-search-forward "[\"']" nil t 1)
- (or (py-escaped)
- (replace-match (concat "\\\\" (match-string-no-properties 0)))))
- (jump-to-register py--edit-register)
- ;; (py-restore-window-configuration)
- (delete-region py--docbeg py--docend)
- (insert-buffer-substring py-edit-buffer))
-
-(defun py-edit--intern (buffer-name mode &optional beg end prefix suffix action)
- "Edit string or active region in ‘python-mode’.
-
-arg BUFFER-NAME: a string.
-arg MODE: which buffer-mode used in edit-buffer"
- (interactive "*")
- (save-excursion
- (save-restriction
- (window-configuration-to-register py--edit-register)
- (setq py--oldbuf (current-buffer))
- (let* ((orig (point))
- (bounds (or (and beg end)(py--edit-set-vars)))
- relpos editstrg
- erg)
- (setq py--docbeg (or beg (car bounds)))
- (setq py--docend (or end (cdr bounds)))
- ;; store relative position in editstrg
- (setq relpos (1+ (- orig py--docbeg)))
- (setq editstrg (buffer-substring py--docbeg py--docend))
- (set-buffer (get-buffer-create buffer-name))
- (erase-buffer)
- (switch-to-buffer (current-buffer))
- (when prefix (insert prefix))
- (insert editstrg)
- (when suffix (insert suffix))
- (funcall mode)
- (when action
- (setq erg (funcall action))
- (erase-buffer)
- (insert erg))
- (local-set-key [(control c) (control c)] 'py--write-edit)
- (goto-char relpos)
- (message "%s" "Type C-c C-c writes contents back")))))
-
-(defun py-edit-docstring ()
- "Edit docstring or active region in ‘python-mode’."
- (interactive "*")
- (py-edit--intern "Edit docstring" 'python-mode))
-
-(defun py-unpretty-assignment ()
- "Revoke prettyprint, write assignment in a shortest way."
- (interactive "*")
- (save-excursion
- (let* ((beg (py-beginning-of-assignment))
- (end (copy-marker (py-forward-assignment)))
- last)
- (goto-char beg)
- (while (and (not (eobp))(re-search-forward "^\\([ \t]*\\)\[\]\"'{}]" end t 1) (setq last (copy-marker (point))))
- (save-excursion (goto-char (match-end 1))
- (when (eq (current-column) (current-indentation)) (delete-region (point) (progn (skip-chars-backward " \t\r\n\f") (point)))))
- (when last (goto-char last))))))
-
-(defun py--prettyprint-assignment-intern (beg end name buffer)
- (let ((proc (get-buffer-process buffer))
- erg)
- ;; (py-send-string "import pprint" proc nil t)
- (py-fast-send-string "import json" proc buffer)
- ;; send the dict/assigment
- (py-fast-send-string (buffer-substring-no-properties beg end) proc buffer)
- ;; do pretty-print
- ;; print(json.dumps(neudict4, indent=4))
- (setq erg (py-fast-send-string (concat "print(json.dumps("name", indent=5))") proc buffer t))
- ;; (message "%s" erg)
- ;; (py-edit--intern "PPrint" 'python-mode beg end)
- ;; (message "%s" (current-buffer))
- ;; (switch-to-buffer (current-buffer))
- (goto-char beg)
- (skip-chars-forward "^{")
- (delete-region (point) (progn (forward-sexp) (point)))
- (insert erg)))
-
-(defun py-prettyprint-assignment ()
- "Prettyprint assignment in ‘python-mode’."
- (interactive "*")
- (window-configuration-to-register py-windows-config-register)
- (save-excursion
- (let* ((beg (py-beginning-of-assignment))
- (name (py-expression))
- (end (py-end-of-assignment))
- (proc-buf (python nil nil "Fast Intern Utility Re-Use")))
- (py--prettyprint-assignment-intern beg end name proc-buf)))
- (py-restore-window-configuration))
-
-;; python-components-backward-forms
-
-(defun py-backward-region ()
- "Go to the beginning of current region."
- (interactive)
- (let ((beg (region-beginning)))
- (when beg (goto-char beg))))
-
-(defun py-backward-block ()
- "Go to beginning of ‘block’.
-
-If already at beginning, go one ‘block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-block-re))))
- (when py-mark-decorators (and (py-backward-decorator)
- (setq erg (point))))
- erg))
-
-;;;###autoload
-(defun py-backward-class ()
- "Go to beginning of ‘class’.
-
-If already at beginning, go one ‘class’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-class-re))))
- (when py-mark-decorators (and (py-backward-decorator)
- (setq erg (point))))
- erg))
-
-;;;###autoload
-(defun py-backward-def ()
- "Go to beginning of ‘def’.
-
-If already at beginning, go one ‘def’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-def-re))))
- (when py-mark-decorators (and (py-backward-decorator)
- (setq erg (point))))
- erg))
-
-;;;###autoload
-(defun py-backward-def-or-class ()
- "Go to beginning of ‘def-or-class’.
-
-If already at beginning, go one ‘def-or-class’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-def-or-class-re))))
- (when py-mark-decorators (and (py-backward-decorator)
- (setq erg (point))))
- erg))
-
-(defun py-backward-block-bol ()
- "Go to beginning of ‘block’, go to BOL.
-If already at beginning, go one ‘block’ backward.
-Return beginning of ‘block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-block)
- (progn (beginning-of-line)(point))))
-
-;;;###autoload
-(defun py-backward-class-bol ()
- "Go to beginning of ‘class’, go to BOL.
-If already at beginning, go one ‘class’ backward.
-Return beginning of ‘class’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-class)
- (progn (beginning-of-line)(point))))
-
-;;;###autoload
-(defun py-backward-def-bol ()
- "Go to beginning of ‘def’, go to BOL.
-If already at beginning, go one ‘def’ backward.
-Return beginning of ‘def’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-def)
- (progn (beginning-of-line)(point))))
-
-;;;###autoload
-(defun py-backward-def-or-class-bol ()
- "Go to beginning of ‘def-or-class’, go to BOL.
-If already at beginning, go one ‘def-or-class’ backward.
-Return beginning of ‘def-or-class’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-def-or-class)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-block-or-clause ()
- "Go to beginning of ‘block-or-clause’.
-
-If already at beginning, go one ‘block-or-clause’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-block-or-clause-re))))
- erg))
-
-(defun py-backward-clause ()
- "Go to beginning of ‘clause’.
-
-If already at beginning, go one ‘clause’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-clause-re))))
- erg))
-
-(defun py-backward-elif-block ()
- "Go to beginning of ‘elif-block’.
-
-If already at beginning, go one ‘elif-block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-elif-re))))
- erg))
-
-(defun py-backward-else-block ()
- "Go to beginning of ‘else-block’.
-
-If already at beginning, go one ‘else-block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-else-re))))
- erg))
-
-(defun py-backward-except-block ()
- "Go to beginning of ‘except-block’.
-
-If already at beginning, go one ‘except-block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-except-re))))
- erg))
-
-(defun py-backward-for-block ()
- "Go to beginning of ‘for-block’.
-
-If already at beginning, go one ‘for-block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-for-re))))
- erg))
-
-(defun py-backward-if-block ()
- "Go to beginning of ‘if-block’.
-
-If already at beginning, go one ‘if-block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-if-re))))
- erg))
-
-(defun py-backward-minor-block ()
- "Go to beginning of ‘minor-block’.
-
-If already at beginning, go one ‘minor-block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-minor-block-re))))
- erg))
-
-(defun py-backward-try-block ()
- "Go to beginning of ‘try-block’.
-
-If already at beginning, go one ‘try-block’ backward.
-Return beginning of form if successful, nil otherwise"
- (interactive)
- (let (erg)
- (setq erg (car-safe (cdr-safe (py--go-to-keyword 'py-try-re))))
- erg))
-
-(defun py-backward-block-or-clause-bol ()
- "Go to beginning of ‘block-or-clause’, go to BOL.
-If already at beginning, go one ‘block-or-clause’ backward.
-Return beginning of ‘block-or-clause’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-block-or-clause)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-clause-bol ()
- "Go to beginning of ‘clause’, go to BOL.
-If already at beginning, go one ‘clause’ backward.
-Return beginning of ‘clause’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-clause)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-elif-block-bol ()
- "Go to beginning of ‘elif-block’, go to BOL.
-If already at beginning, go one ‘elif-block’ backward.
-Return beginning of ‘elif-block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-elif-block)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-else-block-bol ()
- "Go to beginning of ‘else-block’, go to BOL.
-If already at beginning, go one ‘else-block’ backward.
-Return beginning of ‘else-block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-else-block)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-except-block-bol ()
- "Go to beginning of ‘except-block’, go to BOL.
-If already at beginning, go one ‘except-block’ backward.
-Return beginning of ‘except-block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-except-block)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-for-block-bol ()
- "Go to beginning of ‘for-block’, go to BOL.
-If already at beginning, go one ‘for-block’ backward.
-Return beginning of ‘for-block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-for-block)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-if-block-bol ()
- "Go to beginning of ‘if-block’, go to BOL.
-If already at beginning, go one ‘if-block’ backward.
-Return beginning of ‘if-block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-if-block)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-minor-block-bol ()
- "Go to beginning of ‘minor-block’, go to BOL.
-If already at beginning, go one ‘minor-block’ backward.
-Return beginning of ‘minor-block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-minor-block)
- (progn (beginning-of-line)(point))))
-
-(defun py-backward-try-block-bol ()
- "Go to beginning of ‘try-block’, go to BOL.
-If already at beginning, go one ‘try-block’ backward.
-Return beginning of ‘try-block’ if successful, nil otherwise"
- (interactive)
- (and (py-backward-try-block)
- (progn (beginning-of-line)(point))))
-
-;; python-components-forward-forms
-
-(defun py-forward-region ()
- "Go to the end of current region."
- (interactive)
- (let ((end (region-end)))
- (when end (goto-char end))))
-
-(defun py-forward-block (&optional orig bol)
- "Go to end of block.
-
-Return end of ‘block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-block-re orig bol)))
-
-(defun py-forward-block-bol ()
- "Goto beginning of line following end of ‘block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-block’: down from current definition to next beginning of ‘block’ below."
- (interactive)
- (py-forward-block nil t))
-
-(defun py-forward-block-or-clause (&optional orig bol)
- "Go to end of block-or-clause.
-
-Return end of ‘block-or-clause’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-block-or-clause-re orig bol)))
-
-(defun py-forward-block-or-clause-bol ()
- "Goto beginning of line following end of ‘block-or-clause’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-block-or-clause’: down from current definition to next beginning of ‘block-or-clause’ below."
- (interactive)
- (py-forward-block-or-clause nil t))
-
-;;;###autoload
-(defun py-forward-class (&optional orig bol)
- "Go to end of class.
-
-Return end of ‘class’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-class-re orig bol)))
-
-(defun py-forward-class-bol ()
- "Goto beginning of line following end of ‘class’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-class’: down from current definition to next beginning of ‘class’ below."
- (interactive)
- (py-forward-class nil t))
-
-(defun py-forward-clause (&optional orig bol)
- "Go to end of clause.
-
-Return end of ‘clause’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-clause-re orig bol)))
-
-(defun py-forward-clause-bol ()
- "Goto beginning of line following end of ‘clause’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-clause’: down from current definition to next beginning of ‘clause’ below."
- (interactive)
- (py-forward-clause nil t))
-
-;;;###autoload
-(defun py-forward-def (&optional orig bol)
- "Go to end of def.
-
-Return end of ‘def’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-def-re orig bol)))
-
-(defun py-forward-def-bol ()
- "Goto beginning of line following end of ‘def’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-def’: down from current definition to next beginning of ‘def’ below."
- (interactive)
- (py-forward-def nil t))
-
-;;;###autoload
-(defun py-forward-def-or-class (&optional orig bol)
- "Go to end of def-or-class.
-
-Return end of ‘def-or-class’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-def-or-class-re orig bol)))
-
-(defun py-forward-def-or-class-bol ()
- "Goto beginning of line following end of ‘def-or-class’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-def-or-class’: down from current definition to next beginning of ‘def-or-class’ below."
- (interactive)
- (py-forward-def-or-class nil t))
-
-(defun py-forward-elif-block (&optional orig bol)
- "Go to end of elif-block.
-
-Return end of ‘elif-block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-elif-re orig bol)))
-
-(defun py-forward-elif-block-bol ()
- "Goto beginning of line following end of ‘elif-block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-elif-block’: down from current definition to next beginning of ‘elif-block’ below."
- (interactive)
- (py-forward-elif-block nil t))
-
-(defun py-forward-else-block (&optional orig bol)
- "Go to end of else-block.
-
-Return end of ‘else-block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-else-re orig bol)))
-
-(defun py-forward-else-block-bol ()
- "Goto beginning of line following end of ‘else-block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-else-block’: down from current definition to next beginning of ‘else-block’ below."
- (interactive)
- (py-forward-else-block nil t))
-
-(defun py-forward-except-block (&optional orig bol)
- "Go to end of except-block.
-
-Return end of ‘except-block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-except-re orig bol)))
-
-(defun py-forward-except-block-bol ()
- "Goto beginning of line following end of ‘except-block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-except-block’: down from current definition to next beginning of ‘except-block’ below."
- (interactive)
- (py-forward-except-block nil t))
-
-(defun py-forward-for-block (&optional orig bol)
- "Go to end of for-block.
-
-Return end of ‘for-block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-for-re orig bol)))
-
-(defun py-forward-for-block-bol ()
- "Goto beginning of line following end of ‘for-block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-for-block’: down from current definition to next beginning of ‘for-block’ below."
- (interactive)
- (py-forward-for-block nil t))
-
-(defun py-forward-if-block (&optional orig bol)
- "Go to end of if-block.
-
-Return end of ‘if-block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-if-re orig bol)))
-
-(defun py-forward-if-block-bol ()
- "Goto beginning of line following end of ‘if-block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-if-block’: down from current definition to next beginning of ‘if-block’ below."
- (interactive)
- (py-forward-if-block nil t))
-
-(defun py-forward-minor-block (&optional orig bol)
- "Go to end of minor-block.
-
-Return end of ‘minor-block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-minor-block-re orig bol)))
-
-(defun py-forward-minor-block-bol ()
- "Goto beginning of line following end of ‘minor-block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-minor-block’: down from current definition to next beginning of ‘minor-block’ below."
- (interactive)
- (py-forward-minor-block nil t))
-
-(defun py-forward-try-block (&optional orig bol)
- "Go to end of try-block.
-
-Return end of ‘try-block’ if successful, nil otherwise
-Optional ORIG: start position
-Optional BOL: go to beginning of line following end-position"
- (interactive)
- (cdr-safe (py--end-base 'py-try-re orig bol)))
-
-(defun py-forward-try-block-bol ()
- "Goto beginning of line following end of ‘try-block’.
-
-Return position reached, if successful, nil otherwise.
-See also ‘py-down-try-block’: down from current definition to next beginning of ‘try-block’ below."
- (interactive)
- (py-forward-try-block nil t))
-
-;; python-components-forward-forms.el ends here
-;; python-components-move
-
-;; Indentation
-;; Travel current level of indentation
-(defun py--travel-this-indent-backward (&optional indent)
- "Travel current INDENT backward.
-
-With optional INDENT travel bigger or equal indentation"
- (let ((indent (or indent (current-indentation)))
- last)
- (while (and (not (bobp))
- (py-backward-statement)
- (<= indent (current-indentation))
- (setq last (point))))
- (when last (goto-char last))
- last))
-
-(defun py-backward-indent ()
- "Go to the beginning of a section of equal indent.
-
-If already at the beginning or before a indent, go to next indent upwards
-Returns final position when called from inside section, nil otherwise"
- (interactive)
- (unless (bobp)
- (let (erg)
- (setq erg (py--travel-this-indent-backward))
- (when erg (goto-char erg))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-(defun py--travel-this-indent-backward-bol (indent)
- "Internal use.
-
-Travel this INDENT backward until bol"
- (let (erg)
- (while (and (py-backward-statement-bol)
- (or indent (setq indent (current-indentation)))
- (eq indent (current-indentation))(setq erg (point)) (not (bobp))))
- (when erg (goto-char erg))))
-
-(defun py-backward-indent-bol ()
- "Go to the beginning of line of a section of equal indent.
-
-If already at the beginning or before an indent,
-go to next indent in buffer upwards
-Returns final position when called from inside section, nil otherwise"
- (interactive)
- (unless (bobp)
- (let ((indent (when (eq (current-indentation) (current-column)) (current-column)))
- erg)
- (setq erg (py--travel-this-indent-backward-bol indent))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-(defun py--travel-this-indent-forward (indent)
- "Internal use.
-
-Travel this INDENT forward"
- (let (last erg)
- (while (and (py-down-statement)
- (eq indent (current-indentation))
- (setq last (point))))
- (when last (goto-char last))
- (setq erg (py-forward-statement))
- erg))
-
-(defun py-forward-indent ()
- "Go to the end of a section of equal indentation.
-
-If already at the end, go down to next indent in buffer
-Returns final position when called from inside section, nil otherwise"
- (interactive)
- (let (done
- (last (point))
- (orig (point))
- (indent (current-indentation)))
- (while (and (not (eobp)) (not done) (progn (forward-line 1) (back-to-indentation) (or (py-empty-line-p) (and (<= indent (current-indentation))(< last (point))(setq last (point)))(setq done t))))
- (and (< indent (current-indentation))(setq done t)))
- (if (and last (< orig last))
- (progn (goto-char last)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f"))
- (skip-chars-forward " \t\r\n\f")
- (end-of-line)
- (skip-chars-backward " \t\r\n\f"))
- (and (< orig (point))(point))))
-
-(defun py-forward-indent-bol ()
- "Go to beginning of line following of a section of equal indentation.
-
-If already at the end, go down to next indent in buffer
-Returns final position when called from inside section, nil otherwise"
- (interactive)
- (unless (eobp)
- (let (erg indent)
- (when (py-forward-statement)
- (save-excursion
- (setq indent (and (py-backward-statement)(current-indentation))))
- (setq erg (py--travel-this-indent-forward indent))
- (unless (eobp) (forward-line 1) (beginning-of-line) (setq erg (point)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg)))
- erg)))
-
-(defun py-backward-expression (&optional orig done repeat)
- "Go to the beginning of a python expression.
-
-If already at the beginning or before a expression,
-go to next expression in buffer upwards
-
-ORIG - consider orignial position or point.
-DONE - transaktional argument
-REPEAT - count and consider repeats"
- (interactive)
- (unless (bobp)
- (unless done (skip-chars-backward " \t\r\n\f"))
- (let ((repeat (or (and repeat (1+ repeat)) 0))
- (pps (parse-partial-sexp (point-min) (point)))
- (orig (or orig (point)))
- erg)
- (if (< py-max-specpdl-size repeat)
- (error "`py-backward-expression' reached loops max")
- (cond
- ;; comments
- ((nth 8 pps)
- (goto-char (nth 8 pps))
- (py-backward-expression orig done repeat))
- ;; lists
- ((nth 1 pps)
- (goto-char (nth 1 pps))
- (skip-chars-backward py-expression-skip-chars)
- )
- ;; in string
- ((nth 3 pps)
- (goto-char (nth 8 pps)))
- ;; after operator
- ((and (not done) (looking-back py-operator-re (line-beginning-position)))
- (skip-chars-backward "^ \t\r\n\f")
- (skip-chars-backward " \t\r\n\f")
- (py-backward-expression orig done repeat))
- ((and (not done)
- (< 0 (abs (skip-chars-backward py-expression-skip-chars))))
- (setq done t)
- (py-backward-expression orig done repeat))))
- (unless (or (eq (point) orig)(and (bobp)(eolp)))
- (setq erg (point)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-(defun py-forward-expression (&optional orig done repeat)
- "Go to the end of a compound python expression.
-
-Operators are ignored.
-ORIG - consider orignial position or point.
-DONE - transaktional argument
-REPEAT - count and consider repeats"
- (interactive)
- (unless done (skip-chars-forward " \t\r\n\f"))
- (unless (eobp)
- (let ((repeat (or (and repeat (1+ repeat)) 0))
- (pps (parse-partial-sexp (point-min) (point)))
- (orig (or orig (point)))
- erg)
- (if (< py-max-specpdl-size repeat)
- (error "`py-forward-expression' reached loops max")
- (cond
- ;; in comment
- ((nth 4 pps)
- (or (< (point) (progn (forward-comment 1) (point)))(forward-line 1))
- (py-forward-expression orig done repeat))
- ;; empty before comment
- ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*" (line-beginning-position)))
- (while (and (looking-at "[ \t]*#") (not (eobp)))
- (forward-line 1))
- (py-forward-expression orig done repeat))
- ;; inside string
- ((nth 3 pps)
- (goto-char (nth 8 pps))
- (goto-char (scan-sexps (point) 1))
- (setq done t)
- (py-forward-expression orig done repeat))
- ((looking-at "\"\"\"\\|'''\\|\"\\|'")
- (goto-char (scan-sexps (point) 1))
- (setq done t)
- (py-forward-expression orig done repeat))
- ;; looking at opening delimiter
- ((eq 4 (car-safe (syntax-after (point))))
- (goto-char (scan-sexps (point) 1))
- (skip-chars-forward py-expression-skip-chars)
- (setq done t))
- ((nth 1 pps)
- (goto-char (nth 1 pps))
- (goto-char (scan-sexps (point) 1))
- (skip-chars-forward py-expression-skip-chars)
- (setq done t)
- (py-forward-expression orig done repeat))
- ((and (eq orig (point)) (looking-at py-operator-re))
- (goto-char (match-end 0))
- (py-forward-expression orig done repeat))
- ((and (not done)
- (< 0 (skip-chars-forward py-expression-skip-chars)))
- (setq done t)
- (py-forward-expression orig done repeat))
- ;; at colon following arglist
- ((looking-at ":[ \t]*$")
- (forward-char 1)))
- (unless (or (eq (point) orig)(and (eobp) (bolp)))
- (setq erg (point)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))))
-
-(defun py-backward-partial-expression ()
- "Backward partial-expression."
- (interactive)
- (let ((orig (point))
- erg)
- (and (< 0 (abs (skip-chars-backward " \t\r\n\f")))(not (bobp))(forward-char -1))
- (when (py--in-comment-p)
- (py-backward-comment)
- (skip-chars-backward " \t\r\n\f"))
- ;; part of py-partial-expression-forward-chars
- (when (member (char-after) (list ?\ ?\" ?' ?\) ?} ?\] ?: ?#))
- (forward-char -1))
- (skip-chars-backward py-partial-expression-forward-chars)
- (when (< 0 (abs (skip-chars-backward py-partial-expression-backward-chars)))
- (while (and (not (bobp)) (py--in-comment-p)(< 0 (abs (skip-chars-backward py-partial-expression-backward-chars))))))
- (when (< (point) orig)
- (unless
- (and (bobp) (member (char-after) (list ?\ ?\t ?\r ?\n ?\f)))
- (setq erg (point))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-forward-partial-expression ()
- "Forward partial-expression."
- (interactive)
- (let (erg)
- (skip-chars-forward py-partial-expression-backward-chars)
- ;; group arg
- (while
- (looking-at "[\[{(]")
- (goto-char (scan-sexps (point) 1)))
- (setq erg (point))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-;; Partial- or Minor Expression
-;; Line
-(defun py-backward-line ()
- "Go to ‘beginning-of-line’, return position.
-
-If already at ‘beginning-of-line’ and not at BOB, go to beginning of previous line."
- (interactive)
- (unless (bobp)
- (let ((erg
- (if (bolp)
- (progn
- (forward-line -1)
- (progn (beginning-of-line)(point)))
- (progn (beginning-of-line)(point)))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-(defun py-forward-line ()
- "Go to ‘end-of-line’, return position.
-
-If already at ‘end-of-line’ and not at EOB, go to end of next line."
- (interactive)
- (unless (eobp)
- (let ((orig (point))
- erg)
- (when (eolp) (forward-line 1))
- (end-of-line)
- (when (< orig (point))(setq erg (point)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-;; Statement
-(defun py-backward-statement (&optional orig done limit ignore-in-string-p repeat maxindent)
- "Go to the initial line of a simple statement.
-
-For beginning of compound statement use ‘py-backward-block’.
-For beginning of clause ‘py-backward-clause’.
-
-`ignore-in-string-p' allows moves inside a docstring, used when
-computing indents
-ORIG - consider orignial position or point.
-DONE - transaktional argument
-LIMIT - honor limit
-IGNORE-IN-STRING-P - also much inside a string
-REPEAT - count and consider repeats
-Optional MAXINDENT: don't stop if indentation is larger"
- (interactive)
- (save-restriction
- (unless (bobp)
- (let* ((repeat (or (and repeat (1+ repeat)) 0))
- (orig (or orig (point)))
- (pps (parse-partial-sexp (or limit (point-min))(point)))
- (done done)
- erg)
- ;; lp:1382788
- (unless done
- (and (< 0 (abs (skip-chars-backward " \t\r\n\f")))
- (setq pps (parse-partial-sexp (or limit (point-min))(point)))))
- (cond
- ((< py-max-specpdl-size repeat)
- (error "Py-forward-statement reached loops max. If no error, customize `py-max-specpdl-size'"))
- ((and (bolp) (eolp))
- (skip-chars-backward " \t\r\n\f")
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ;; inside string
- ((and (nth 3 pps) (not ignore-in-string-p))
- (setq done t)
- (goto-char (nth 8 pps))
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ((nth 4 pps)
- (while (ignore-errors (goto-char (nth 8 pps)))
- (skip-chars-backward " \t\r\n\f")
- (setq pps (parse-partial-sexp (line-beginning-position) (point))))
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ((nth 1 pps)
- (goto-char (1- (nth 1 pps)))
- (when (py--skip-to-semicolon-backward (save-excursion (back-to-indentation) (point)))
- (setq done t))
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ((py-preceding-line-backslashed-p)
- (forward-line -1)
- (back-to-indentation)
- (setq done t)
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ;; at raw-string
- ;; (and (looking-at "\"\"\"\\|'''") (member (char-before) (list ?u ?U ?r ?R)))
- ((and (looking-at "\"\"\"\\|'''") (member (char-before) (list ?u ?U ?r ?R)))
- (forward-char -1)
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ;; BOL or at space before comment
- ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*" (line-beginning-position)))
- (forward-comment -1)
- (while (and (not (bobp)) (looking-at "[ \t]*#") (looking-back "^[ \t]*" (line-beginning-position)))
- (forward-comment -1))
- (unless (bobp)
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent)))
- ;; at inline comment
- ((looking-at "[ \t]*#")
- (when (py--skip-to-semicolon-backward (save-excursion (back-to-indentation) (point)))
- (setq done t))
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ;; at beginning of string
- ((looking-at py-string-delim-re)
- (when (< 0 (abs (skip-chars-backward " \t\r\n\f")))
- (setq done t))
- (back-to-indentation)
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ;; after end of statement
- ((and (not done) (eq (char-before) ?\;))
- (skip-chars-backward ";")
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ;; travel until indentation or semicolon
- ((and (not done) (py--skip-to-semicolon-backward))
- (unless (and maxindent (< maxindent (current-indentation)))
- (setq done t))
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ;; at current indent
- ((and (not done) (not (eq 0 (skip-chars-backward " \t\r\n\f"))))
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent))
- ((and maxindent (< maxindent (current-indentation)))
- (forward-line -1)
- (py-backward-statement orig done limit ignore-in-string-p repeat maxindent)))
- ;; return nil when before comment
- (unless (and (looking-at "[ \t]*#") (looking-back "^[ \t]*" (line-beginning-position)))
- (when (< (point) orig)(setq erg (point))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))))
-
-(defun py-backward-statement-bol ()
- "Goto beginning of line where statement start.
-Returns position reached, if successful, nil otherwise.
-
-See also `py-up-statement': up from current definition to next beginning of statement above."
- (interactive)
- (let* ((orig (point))
- erg)
- (unless (bobp)
- (cond ((bolp)
- (and (py-backward-statement orig)
- (progn (beginning-of-line)
- (setq erg (point)))))
- (t (setq erg
- (and
- (py-backward-statement)
- (progn (beginning-of-line) (point)))))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-forward-statement (&optional orig done repeat)
- "Go to the last char of current statement.
-
-ORIG - consider orignial position or point.
-DONE - transaktional argument
-REPEAT - count and consider repeats"
- (interactive)
- (switch-to-buffer (current-buffer))
- (unless (eobp)
- (let ((repeat (or (and repeat (1+ repeat)) 0))
- (orig (or orig (point)))
- erg last
- ;; use by scan-lists
- forward-sexp-function pps err)
- ;; (unless done (py--skip-to-comment-or-semicolon done))
- (setq pps (parse-partial-sexp (point-min) (point)))
- ;; (origline (or origline (py-count-lines)))
- (cond
- ;; which-function-mode, lp:1235375
- ((< py-max-specpdl-size repeat)
- (error "py-forward-statement reached loops max. If no error, customize `py-max-specpdl-size'"))
- ;; list
- ((nth 1 pps)
- (if (<= orig (point))
- (progn
- (setq orig (point))
- ;; do not go back at a possible unclosed list
- (goto-char (nth 1 pps))
- (if
- (ignore-errors (forward-list))
- (progn
- (when (looking-at ":[ \t]*$")
- (forward-char 1))
- (setq done t)
- (skip-chars-forward "^#" (line-end-position))
- (skip-chars-backward " \t\r\n\f" (line-beginning-position))
- (py-forward-statement orig done repeat))
- (setq err (py--record-list-error pps))
- (goto-char orig)))))
- ;; in comment
- ((and comment-start (looking-at (concat " *" comment-start)))
- (goto-char (match-end 0))
- (py-forward-statement orig done repeat))
- ((nth 4 pps)
- (py--end-of-comment-intern (point))
- (py--skip-to-comment-or-semicolon done)
- (while (and (eq (char-before (point)) ?\\)
- (py-escaped) (setq last (point)))
- (forward-line 1) (end-of-line))
- (and last (goto-char last)
- (forward-line 1)
- (back-to-indentation))
- (py-forward-statement orig done repeat))
- ;; string
- ((looking-at py-string-delim-re)
- (goto-char (match-end 0))
- (py-forward-statement orig done repeat))
- ((nth 3 pps)
- (when (py-end-of-string)
- (end-of-line)
- (skip-chars-forward " \t\r\n\f")
- (setq pps (parse-partial-sexp (point-min) (point)))
- (unless (and done (not (or (nth 1 pps) (nth 8 pps))) (eolp)) (py-forward-statement orig done repeat))))
- ((py-current-line-backslashed-p)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f" (line-beginning-position))
- (while (and (eq (char-before (point)) ?\\)
- (py-escaped))
- (forward-line 1)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f" (line-beginning-position)))
- (unless (eobp)
- (py-forward-statement orig done repeat)))
- ((eq orig (point))
- (if (eolp)
- (skip-chars-forward " \t\r\n\f#'\"")
- (end-of-line)
- (skip-chars-backward " \t\r\n\f" orig))
- ;; point at orig due to a trailing whitespace
- (and (eq (point) orig) (skip-chars-forward " \t\r\n\f"))
- (setq done t)
- (py-forward-statement orig done repeat))
- ((eq (current-indentation) (current-column))
- (py--skip-to-comment-or-semicolon done)
- (setq pps (parse-partial-sexp orig (point)))
- (if (nth 1 pps)
- (py-forward-statement orig done repeat)
- (unless done
- (py-forward-statement orig done repeat))))
- ((and (looking-at "[[:print:]]+$") (not done) (py--skip-to-comment-or-semicolon done))
- (py-forward-statement orig done repeat)))
- (unless
- (or
- (eq (point) orig)
- (member (char-before) (list 10 32 9 ?#)))
- (setq erg (point)))
- (if (and py-verbose-p err)
- (py--message-error err)
- (and py-verbose-p (called-interactively-p 'any) (message "%s" erg)))
- erg)))
-
-(defun py-forward-statement-bol ()
- "Go to the ‘beginning-of-line’ following current statement."
- (interactive)
- (let ((erg (py-forward-statement)))
- (setq erg (py--beginning-of-line-form))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-;; Decorator
-(defun py-backward-decorator ()
- "Go to the beginning of a decorator.
-
-Returns position if succesful"
- (interactive)
- (let ((orig (point)))
- (unless (bobp) (forward-line -1)
- (back-to-indentation)
- (while (and (progn (looking-at "@\\w+")(not (looking-at "\\w+")))
- (not
- ;; (py-empty-line-p)
- (member (char-after) (list 9 10)))
- (not (bobp))(forward-line -1))
- (back-to-indentation))
- (or (and (looking-at "@\\w+") (match-beginning 0))
- (goto-char orig)))))
-
-(defun py-forward-decorator ()
- "Go to the end of a decorator.
-
-Returns position if succesful"
- (interactive)
- (let ((orig (point)) erg)
- (unless (looking-at "@\\w+")
- (setq erg (py-backward-decorator)))
- (when erg
- (if
- (re-search-forward py-def-or-class-re nil t)
- (progn
- (back-to-indentation)
- (skip-chars-backward " \t\r\n\f")
- (py-leave-comment-or-string-backward)
- (skip-chars-backward " \t\r\n\f")
- (setq erg (point)))
- (goto-char orig)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (when (ignore-errors (goto-char (py-in-list-p)))
- (forward-list))
- (when (< orig (point))
- (setq erg (point))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-(defun py-backward-comment (&optional pos)
- "Got to beginning of a commented section.
-
-Start from POS if specified"
- (interactive)
- (let ((erg pos)
- last)
- (when erg (goto-char erg))
- (while (and (not (bobp)) (setq erg (py-in-comment-p)))
- (when (< erg (point))
- (goto-char erg)
- (setq last (point)))
- (skip-chars-backward " \t\r\n\f"))
- (when last (goto-char last))
- last))
-
-(defun py-go-to-beginning-of-comment ()
- "Go to the beginning of current line's comment, if any.
-
-From a programm use macro `py-backward-comment' instead"
- (interactive)
- (let ((erg (py-backward-comment)))
- (when (and py-verbose-p (called-interactively-p 'any))
- (message "%s" erg))))
-
-(defun py--up-decorators-maybe (indent)
- (let ((last (point)))
- (while (and (not (bobp))
- (py-backward-statement)
- (eq (current-indentation) indent)
- (if (looking-at py-decorator-re)
- (progn (setq last (point)) nil)
- t)))
- (goto-char last)))
-
-(defun py--go-to-keyword (regexp &optional maxindent condition ignoreindent)
- "Expects being called from beginning of a statement.
-
-Argument REGEXP: a symbol.
-
-Return a list, whose car is indentation, cdr position.
-
-Keyword detected from REGEXP
-Honor MAXINDENT if provided
-Optional IGNOREINDENT: find next keyword at any indentation"
- (unless (bobp)
- ;; (when (py-empty-line-p) (skip-chars-backward " \t\r\n\f"))
- (let* ((orig (point))
- (condition
- (or condition '<))
- ;; py-clause-re would not match block
- (regexp (if (eq regexp 'py-clause-re) 'py-extended-block-or-clause-re regexp))
- (regexpvalue (symbol-value regexp))
- (maxindent
- (if ignoreindent
- ;; just a big value
- 9999
- (or maxindent
- (if
- (or (looking-at regexpvalue) (eq 0 (current-indentation)))
- (current-indentation)
- (abs
- (- (current-indentation) py-indent-offset))))))
- erg)
- (unless (py-beginning-of-statement-p)
- (py-backward-statement))
- (cond
- ((looking-at (concat (symbol-value regexp)))
- (if (eq (point) orig)
- (setq erg (py--backward-regexp regexp maxindent condition orig regexpvalue))
- (setq erg (point))))
- (t (setq erg (py--backward-regexp regexp maxindent condition orig regexpvalue))))
- (when erg (setq erg (cons (current-indentation) erg)))
- (list (car erg) (cdr erg) (py--end-base-determine-secondvalue regexp)))))
-
-(defun py-leave-comment-or-string-backward ()
- "If inside a comment or string, leave it backward."
- (interactive)
- (let ((pps
- (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (parse-partial-sexp (point-min) (point)))))
- (when (nth 8 pps)
- (goto-char (1- (nth 8 pps))))))
-
-(defun py-beginning-of-list-pps (&optional iact last ppstart orig done)
- "Go to the beginning of a list.
-
-IACT - if called interactively
-LAST - was last match.
-Optional PPSTART indicates a start-position for `parse-partial-sexp'.
-ORIG - consider orignial position or point.
-DONE - transaktional argument
-Return beginning position, nil if not inside."
- (interactive "p")
- (let* ((orig (or orig (point)))
- (ppstart (or ppstart (re-search-backward "^[a-zA-Z]" nil t 1) (point-min)))
- erg)
- (unless done (goto-char orig))
- (setq done t)
- (if
- (setq erg (nth 1 (if (featurep 'xemacs)
- (parse-partial-sexp ppstart (point))
- (parse-partial-sexp (point-min) (point)))))
- (progn
- (setq last erg)
- (goto-char erg)
- (py-beginning-of-list-pps iact last ppstart orig done))
- (when iact (message "%s" last))
- last)))
-
-(defun py-forward-into-nomenclature (&optional arg iact)
- "Move forward to end of a nomenclature symbol.
-
-With \\[universal-argument] (programmatically, optional argument ARG), do it that many times.
-IACT - if called interactively
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores."
- (interactive "p")
- (or arg (setq arg 1))
- (let ((case-fold-search nil)
- (orig (point))
- erg)
- (if (> arg 0)
- (while (and (not (eobp)) (> arg 0))
- ;; (setq erg (re-search-forward "\\(\\W+[_[:lower:][:digit:]ß]+\\)" nil t 1))
- (cond
- ((or (not (eq 0 (skip-chars-forward "[[:blank:][:punct:]\n\r]")))
- (not (eq 0 (skip-chars-forward "_"))))
- (when (or
- (< 1 (skip-chars-forward "[:upper:]"))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]ß]")))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]]"))))
- (setq arg (1- arg))))
- ((or
- (< 1 (skip-chars-forward "[:upper:]"))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]ß]")))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]]"))))
- (setq arg (1- arg)))))
- (while (and (not (bobp)) (< arg 0))
- (when (not (eq 0 (skip-chars-backward "[[:blank:][:punct:]\n\r\f_]")))
-
- (forward-char -1))
- (or
- (not (eq 0 (skip-chars-backward "[:upper:]")))
- (not (eq 0 (skip-chars-backward "[[:lower:][:digit:]ß]")))
- (skip-chars-backward "[[:lower:][:digit:]ß]"))
- (setq arg (1+ arg))))
- (if (< (point) orig)
- (progn
- (when (looking-back "[[:upper:]]" (line-beginning-position))
- ;; (looking-back "[[:blank:]]"
- (forward-char -1))
- (if (looking-at "[[:alnum:]ß]")
- (setq erg (point))
- (setq erg nil)))
- (if (and (< orig (point)) (not (eobp)))
- (setq erg (point))
- (setq erg nil)))
- (when (and py-verbose-p (or iact (called-interactively-p 'any))) (message "%s" erg))
- erg))
-
-(defun py-backward-into-nomenclature (&optional arg)
- "Move backward to beginning of a nomenclature symbol.
-
-With optional ARG, move that many times. If ARG is negative, move
-forward.
-
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores."
- (interactive "p")
- (setq arg (or arg 1))
- (py-forward-into-nomenclature (- arg) arg))
-
-(defun py--travel-current-indent (indent &optional orig)
- "Move down until clause is closed, i.e. current indentation is reached.
-
-Takes a list, INDENT and ORIG position."
- (unless (eobp)
- (let ((orig (or orig (point)))
- last)
- (while (and (setq last (point))(not (eobp))(py-forward-statement)
- (save-excursion (or (<= indent (progn (py-backward-statement)(current-indentation)))(eq last (line-beginning-position))))
- ;; (py--end-of-statement-p)
-))
- (goto-char last)
- (when (< orig last)
- last))))
-
-(defun py-beginning-of-block-current-column ()
-"Reach next beginning of block upwards which start at current column.
-
-Return position"
-(interactive)
-(let* ((orig (point))
- (cuco (current-column))
- (str (make-string cuco ?\s))
- pps erg)
- (while (and (not (bobp))(re-search-backward (concat "^" str py-block-keywords) nil t)(or (nth 8 (setq pps (parse-partial-sexp (point-min) (point)))) (nth 1 pps))))
- (back-to-indentation)
- (and (< (point) orig)(setq erg (point)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-backward-section ()
- "Go to next section start upward in buffer.
-
-Return position if successful"
- (interactive)
- (let ((orig (point)))
- (while (and (re-search-backward py-section-start nil t 1)
- (nth 8 (parse-partial-sexp (point-min) (point)))))
- (when (and (looking-at py-section-start)(< (point) orig))
- (point))))
-
-(defun py-forward-section ()
- "Go to next section end downward in buffer.
-
-Return position if successful"
- (interactive)
- (let ((orig (point))
- last)
- (while (and (re-search-forward py-section-end nil t 1)
- (setq last (point))
- (goto-char (match-beginning 0))
- (nth 8 (parse-partial-sexp (point-min) (point)))
- (goto-char (match-end 0))))
- (and last (goto-char last))
- (when (and (looking-back py-section-end (line-beginning-position))(< orig (point)))
- (point))))
-
-;; (defun py-forward-paragraph ()
-;; (interactive)
-;; (py--end-of-paragraph 'py-paragraph-re))
-
-(defun py-backward-assignment()
- "Go to backward in buffer to beginning of an assigment.
-
-Return position if successful."
- (interactive)
- (let* (last
- (erg
- (progn
- (while (and (setq last (py-backward-statement))
- (not (looking-at py-assignment-re))))
- (and (looking-at py-assignment-re) last))))
- (when (and py-verbose-p (interactive-p))
- (message "%s" erg))
- erg))
-
-(defun py-beginning-of-assignment()
- "Go to beginning of assigment if inside.
-
-Return position of successful, nil of not started from inside."
- (interactive)
- (let* (last
- (erg
- (or (py--beginning-of-assignment-p)
- (progn
- (while (and (setq last (py-backward-statement))
- (not (looking-at py-assignment-re))
- ;; (not (bolp))
- ))
- (and (looking-at py-assignment-re) last)))))
- (when (and py-verbose-p (interactive-p))
- (message "%s" erg))
- erg))
-
-(defun py--forward-assignment-intern ()
- (and (looking-at py-assignment-re)
- (goto-char (match-end 2))
- (skip-chars-forward " \t\r\n\f")
- ;; (eq (car (syntax-after (point))) 4)
- (progn (forward-sexp) (point))))
-
-(defun py-end-of-assignment()
- "Go to end of assigment at point if inside.
-
-Return position of successful, nil of not started from inside"
- (interactive)
- (unless (eobp)
- (if (eq last-command 'py-backward-assignment)
- ;; assume at start of an assignment
- (py--forward-assignment-intern)
- ;; ‘py-backward-assignment’ here, avoid ‘py--beginning-of-assignment-p’ a second time
- (let* (last
- (beg
- (or (py--beginning-of-assignment-p)
- (progn
- (while (and (setq last (py-backward-statement))
- (not (looking-at py-assignment-re))
- ;; (not (bolp))
- ))
- (and (looking-at py-assignment-re) last))))
- erg)
- (and beg (setq erg (py--forward-assignment-intern)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))))
-
-(defun py-forward-assignment()
- "Go to end of assigment at point if inside.
-
-Return position of successful, nil of not started from inside
-When called at the end of an assignment, check next form downwards."
- (interactive)
- (unless (eobp)
- (if (eq last-command 'py-backward-assignment)
- ;; assume at start of an assignment
- (py--forward-assignment-intern)
- ;; ‘py-backward-assignment’ here, avoid ‘py--beginning-of-assignment-p’ a second time
- (let* (last
- (orig (point))
- (beg
- (or (py--beginning-of-assignment-p)
- (progn
- (while (and (setq last (py-backward-statement))
- (not (looking-at py-assignment-re))
- ;; (not (bolp))
- ))
- (and (looking-at py-assignment-re) last))))
- erg)
- (and beg (setq erg (py--forward-assignment-intern)))
- (when (eq (point) orig)
- (while (and (not (eobp)) (re-search-forward py-assignment-re) (setq last (match-beginning 1)) (py-in-string-or-comment-p)))
- (when last
- (goto-char last)
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))))
-
-;; python-components-kill-forms
-
-
-(defun py-kill-comment ()
- "Delete comment at point.
-
-Stores data in kill ring"
- (interactive "*")
- (let ((erg (py--mark-base "comment")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-line ()
- "Delete line at point.
-
-Stores data in kill ring"
- (interactive "*")
- (let ((erg (py--mark-base "line")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-paragraph ()
- "Delete paragraph at point.
-
-Stores data in kill ring"
- (interactive "*")
- (let ((erg (py--mark-base "paragraph")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-expression ()
- "Delete expression at point.
-
-Stores data in kill ring"
- (interactive "*")
- (let ((erg (py--mark-base "expression")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-partial-expression ()
- "Delete partial-expression at point.
-
-Stores data in kill ring"
- (interactive "*")
- (let ((erg (py--mark-base "partial-expression")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-section ()
- "Delete section at point.
-
-Stores data in kill ring"
- (interactive "*")
- (let ((erg (py--mark-base "section")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-top-level ()
- "Delete top-level at point.
-
-Stores data in kill ring"
- (interactive "*")
- (let ((erg (py--mark-base "top-level")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-block ()
- "Delete block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-block-or-clause ()
- "Delete block-or-clause at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "block-or-clause")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-class ()
- "Delete class at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "class")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-clause ()
- "Delete clause at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "clause")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-def ()
- "Delete def at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "def")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-def-or-class ()
- "Delete def-or-class at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "def-or-class")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-elif-block ()
- "Delete elif-block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "elif-block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-else-block ()
- "Delete else-block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "else-block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-except-block ()
- "Delete except-block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "except-block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-for-block ()
- "Delete for-block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "for-block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-if-block ()
- "Delete if-block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "if-block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-indent ()
- "Delete indent at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "indent")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-minor-block ()
- "Delete minor-block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "minor-block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-statement ()
- "Delete statement at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "statement")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-try-block ()
- "Delete try-block at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (let ((erg (py--mark-base-bol "try-block")))
- (kill-region (car erg) (cdr erg))))
-
-;; python-components-close-forms
-
-
-(defun py-close-block ()
- "Close block at point.
-
-Set indent level to that of beginning of function definition.
-
-If final line isn't empty and ‘py-close-block-provides-newline’ non-nil, insert a newline."
- (interactive "*")
- (let ((erg (py--close-intern 'py-block-re)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-close-class ()
- "Close class at point.
-
-Set indent level to that of beginning of function definition.
-
-If final line isn't empty and ‘py-close-block-provides-newline’ non-nil, insert a newline."
- (interactive "*")
- (let ((erg (py--close-intern 'py-class-re)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-close-def ()
- "Close def at point.
-
-Set indent level to that of beginning of function definition.
-
-If final line isn't empty and ‘py-close-block-provides-newline’ non-nil, insert a newline."
- (interactive "*")
- (let ((erg (py--close-intern 'py-def-re)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-close-def-or-class ()
- "Close def-or-class at point.
-
-Set indent level to that of beginning of function definition.
-
-If final line isn't empty and ‘py-close-block-provides-newline’ non-nil, insert a newline."
- (interactive "*")
- (let ((erg (py--close-intern 'py-def-or-class-re)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-close-minor-block ()
- "Close minor-block at point.
-
-Set indent level to that of beginning of function definition.
-
-If final line isn't empty and ‘py-close-block-provides-newline’ non-nil, insert a newline."
- (interactive "*")
- (let ((erg (py--close-intern 'py-minor-block-re)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-close-statement ()
- "Close statement at point.
-
-Set indent level to that of beginning of function definition.
-
-If final line isn't empty and ‘py-close-block-provides-newline’ non-nil, insert a newline."
- (interactive "*")
- (let ((erg (py--close-intern 'py-statement-re)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-;; python-components-mark-forms
-
-
-(defun py-mark-comment ()
- "Mark comment at point.
-
-Return beginning and end positions of marked area, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base "comment"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-line ()
- "Mark line at point.
-
-Return beginning and end positions of marked area, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base "line"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-paragraph ()
- "Mark paragraph at point.
-
-Return beginning and end positions of marked area, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base "paragraph"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-expression ()
- "Mark expression at point.
-
-Return beginning and end positions of marked area, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base "expression"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-partial-expression ()
- "Mark partial-expression at point.
-
-Return beginning and end positions of marked area, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base "partial-expression"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-section ()
- "Mark section at point.
-
-Return beginning and end positions of marked area, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base "section"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-top-level ()
- "Mark top-level at point.
-
-Return beginning and end positions of marked area, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base "top-level"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-block ()
- "Mark block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-block-or-clause ()
- "Mark block-or-clause, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "block-or-clause"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-class (&optional arg)
- "Mark class, take beginning of line positions.
-
-With ARG \\[universal-argument] or ‘py-mark-decorators’ set to t, decorators are marked too.
-Return beginning and end positions of region, a cons."
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- erg)
- (py--mark-base-bol "class" py-mark-decorators)
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-clause ()
- "Mark clause, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "clause"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-def (&optional arg)
- "Mark def, take beginning of line positions.
-
-With ARG \\[universal-argument] or ‘py-mark-decorators’ set to t, decorators are marked too.
-Return beginning and end positions of region, a cons."
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- erg)
- (py--mark-base-bol "def" py-mark-decorators)
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-def-or-class (&optional arg)
- "Mark def-or-class, take beginning of line positions.
-
-With ARG \\[universal-argument] or ‘py-mark-decorators’ set to t, decorators are marked too.
-Return beginning and end positions of region, a cons."
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- erg)
- (py--mark-base-bol "def-or-class" py-mark-decorators)
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-elif-block ()
- "Mark elif-block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "elif-block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-else-block ()
- "Mark else-block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "else-block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-except-block ()
- "Mark except-block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "except-block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-for-block ()
- "Mark for-block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "for-block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-if-block ()
- "Mark if-block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "if-block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-indent ()
- "Mark indent, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "indent"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-minor-block ()
- "Mark minor-block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "minor-block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-statement ()
- "Mark statement, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "statement"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-mark-try-block ()
- "Mark try-block, take beginning of line positions.
-
-Return beginning and end positions of region, a cons."
- (interactive)
- (let (erg)
- (setq erg (py--mark-base-bol "try-block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-;; python-components-copy-forms
-
-
-(defun py-copy-block ()
- "Copy block at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "block")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-block-or-clause ()
- "Copy block-or-clause at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "block-or-clause")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-buffer ()
- "Copy buffer at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "buffer")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-class ()
- "Copy class at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "class")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-clause ()
- "Copy clause at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "clause")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-def ()
- "Copy def at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "def")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-def-or-class ()
- "Copy def-or-class at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "def-or-class")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-expression ()
- "Copy expression at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "expression")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-indent ()
- "Copy indent at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "indent")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-line ()
- "Copy line at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "line")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-minor-block ()
- "Copy minor-block at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "minor-block")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-paragraph ()
- "Copy paragraph at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "paragraph")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-partial-expression ()
- "Copy partial-expression at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "partial-expression")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-region ()
- "Copy region at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "region")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-statement ()
- "Copy statement at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "statement")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-top-level ()
- "Copy top-level at point.
-
-Store data in kill ring, so it might yanked back."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "top-level")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-block-bol ()
- "Delete block bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "block")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-block-or-clause-bol ()
- "Delete block-or-clause bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "block-or-clause")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-buffer-bol ()
- "Delete buffer bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "buffer")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-class-bol ()
- "Delete class bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "class")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-clause-bol ()
- "Delete clause bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "clause")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-def-bol ()
- "Delete def bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "def")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-def-or-class-bol ()
- "Delete def-or-class bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "def-or-class")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-expression-bol ()
- "Delete expression bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "expression")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-indent-bol ()
- "Delete indent bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "indent")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-line-bol ()
- "Delete line bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "line")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-minor-block-bol ()
- "Delete minor-block bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "minor-block")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-paragraph-bol ()
- "Delete paragraph bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "paragraph")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-partial-expression-bol ()
- "Delete partial-expression bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "partial-expression")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-region-bol ()
- "Delete region bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "region")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-statement-bol ()
- "Delete statement bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "statement")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-(defun py-copy-top-level-bol ()
- "Delete top-level bol at point.
-
-Stores data in kill ring. Might be yanked back using ‘C-y’."
- (interactive "*")
- (save-excursion
- (let ((erg (py--mark-base-bol "top-level")))
- (copy-region-as-kill (car erg) (cdr erg)))))
-
-;; python-components-delete-forms
-
-
-(defun py-delete-block ()
- "Delete BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-block-or-clause ()
- "Delete BLOCK-OR-CLAUSE at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "block-or-clause")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-class (&optional arg)
- "Delete CLASS at point until ‘beginning-of-line’.
-
-Don't store data in kill ring.
-With ARG \\[universal-argument] or ‘py-mark-decorators’ set to t, ‘decorators’ are included."
- (interactive "P")
- (let* ((py-mark-decorators (or arg py-mark-decorators))
- (erg (py--mark-base "class" py-mark-decorators)))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-clause ()
- "Delete CLAUSE at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "clause")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-def (&optional arg)
- "Delete DEF at point until ‘beginning-of-line’.
-
-Don't store data in kill ring.
-With ARG \\[universal-argument] or ‘py-mark-decorators’ set to t, ‘decorators’ are included."
- (interactive "P")
- (let* ((py-mark-decorators (or arg py-mark-decorators))
- (erg (py--mark-base "def" py-mark-decorators)))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-def-or-class (&optional arg)
- "Delete DEF-OR-CLASS at point until ‘beginning-of-line’.
-
-Don't store data in kill ring.
-With ARG \\[universal-argument] or ‘py-mark-decorators’ set to t, ‘decorators’ are included."
- (interactive "P")
- (let* ((py-mark-decorators (or arg py-mark-decorators))
- (erg (py--mark-base "def-or-class" py-mark-decorators)))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-elif-block ()
- "Delete ELIF-BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "elif-block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-else-block ()
- "Delete ELSE-BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "else-block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-except-block ()
- "Delete EXCEPT-BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "except-block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-for-block ()
- "Delete FOR-BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "for-block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-if-block ()
- "Delete IF-BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "if-block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-indent ()
- "Delete INDENT at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "indent")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-minor-block ()
- "Delete MINOR-BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "minor-block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-statement ()
- "Delete STATEMENT at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "statement")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-try-block ()
- "Delete TRY-BLOCK at point until ‘beginning-of-line’.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base-bol "try-block")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-comment ()
- "Delete COMMENT at point.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base "comment")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-line ()
- "Delete LINE at point.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base "line")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-paragraph ()
- "Delete PARAGRAPH at point.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base "paragraph")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-expression ()
- "Delete EXPRESSION at point.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base "expression")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-partial-expression ()
- "Delete PARTIAL-EXPRESSION at point.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base "partial-expression")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-section ()
- "Delete SECTION at point.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base "section")))
- (delete-region (car erg) (cdr erg))))
-
-(defun py-delete-top-level ()
- "Delete TOP-LEVEL at point.
-
-Don't store data in kill ring."
- (interactive)
- (let ((erg (py--mark-base "top-level")))
- (delete-region (car erg) (cdr erg))))
-
-;; python-components-execute
-(defun py-restore-window-configuration ()
- "Restore ‘py-restore-window-configuration’ when completion is done resp. abandoned."
- (let (val)
- (and (setq val (get-register py-windows-config-register))(and (consp val) (window-configuration-p (car val))(markerp (cadr val)))(marker-buffer (cadr val))
- (jump-to-register py-windows-config-register))))
-
-(defun py-shell-execute-string-now (strg &optional shell buffer proc)
- "Send STRG to Python interpreter process.
-
-Return collected output
-
-Optional SHELL BUFFER PROC"
- (let* (wait
- (procbuf (or buffer (process-buffer proc) (progn (setq wait py-new-shell-delay) (py-shell nil nil shell))))
- (proc (or proc (get-buffer-process procbuf)))
- (cmd (format "exec '''%s''' in {}"
- (mapconcat 'identity (split-string strg "\n") "\\n")))
- ;; TBD remove redundant outbuf
- (outbuf procbuf))
- ;; wait is used only when a new py-shell buffer was connected
- (and wait (sit-for wait t))
- (unwind-protect
- (condition-case nil
- (progn
- (with-current-buffer outbuf
- (delete-region (point-min) (point-max)))
- (with-current-buffer procbuf
- (comint-redirect-send-command-to-process
- cmd outbuf proc nil t)
- (accept-process-output proc 5))
- (with-current-buffer outbuf
- (buffer-substring (point-min) (point-max))))
- (quit (with-current-buffer procbuf
- (interrupt-process proc comint-ptyp)
- (while (not comint-redirect-completed) ; wait for output
- (accept-process-output proc 1)))
- (signal 'quit nil))))))
-
-(defun py-switch-to-python (eob-p)
- "Switch to the Python process buffer, maybe starting new process.
-
-With EOB-P, go to end of buffer."
- (interactive "p")
- (pop-to-buffer (process-buffer (py-proc)) t) ;Runs python if needed.
- (when eob-p
- (goto-char (point-max))))
-
-(defun toggle-force-local-shell (&optional arg)
- "If locally indicated Python shell should be taken.
-
-Enforced upon sessions execute commands.
-
-Toggles boolean ‘py-force-local-shell-p’ along with ‘py-force-py-shell-name-p’
-Returns value of ‘toggle-force-local-shell’ switched to.
-
-See also commands
-‘py-force-local-shell-on’
-‘py-force-local-shell-off’"
- (interactive)
- (let ((arg (or arg (if py-force-local-shell-p -1 1))))
- (if (< 0 arg)
- (progn
- (setq py-shell-name (or py-local-command (py-choose-shell)))
- (setq py-force-local-shell-p t))
- (setq py-shell-name (default-value 'py-shell-name))
- (setq py-force-local-shell-p nil))
- (when (called-interactively-p 'any)
- (if py-force-local-shell-p
- (when py-verbose-p (message "Enforce %s" py-shell-name))
- (when py-verbose-p (message "py-shell-name default restored to: %s" py-shell-name))))
- py-shell-name))
-
-(defun py-force-local-shell-on ()
- "Make sure, ‘py-force-local-shell-p’ is on.
-
-Returns value of ‘py-force-local-shell-p’.
-Optional FAST
-Kind of an option 'follow', local shell sets ‘py-shell-name’, enforces its use afterwards"
- (interactive)
- (toggle-force-local-shell 1)
- (when (or py-verbose-p (called-interactively-p 'any))
- (message "Enforce %s" py-shell-name)))
-
-(defun py-force-local-shell-off ()
- "Restore ‘py-shell-name’ default value and ‘behaviour’.
-
-Optional FAST"
- (interactive)
- (toggle-force-local-shell 1)
- (when (or py-verbose-p (called-interactively-p 'any))
- (message "py-shell-name default restored to: %s" py-shell-name)))
-
-(defun toggle-force-py-shell-name-p (&optional arg)
- "If customized default ‘py-shell-name’ should be enforced upon execution.
-
-If ‘py-force-py-shell-name-p’ should be on or off.
-Returns value of ‘py-force-py-shell-name-p’ switched to.
-
-Optional ARG
-See also commands
-‘force-py-shell-name-p-on’
-‘force-py-shell-name-p-off’
-
-Caveat: Completion might not work that way."
- (interactive)
- (let ((arg (or arg (if py-force-py-shell-name-p -1 1))))
- (if (< 0 arg)
- (setq py-force-py-shell-name-p t)
- (setq py-force-py-shell-name-p nil))
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p))
- py-force-py-shell-name-p))
-
-(defun force-py-shell-name-p-on ()
- "Switch ‘py-force-py-shell-name-p’ on.
-
-Customized default ‘py-shell-name’ will be enforced upon execution.
-Returns value of ‘py-force-py-shell-name-p’.
-
-Caveat: Completion might not work that way."
- (interactive)
- (toggle-force-py-shell-name-p 1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p))
- py-force-py-shell-name-p)
-
-(defun force-py-shell-name-p-off ()
- "Make sure, ‘py-force-py-shell-name-p’ is off.
-
-Function to use by executes will be guessed from environment.
-Returns value of ‘py-force-py-shell-name-p’."
- (interactive)
- (toggle-force-py-shell-name-p -1)
- (when (or py-verbose-p (called-interactively-p 'any)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p))
- py-force-py-shell-name-p)
-
-;; Split-Windows-On-Execute forms
-(defalias 'toggle-py-split-windows-on-execute 'py-toggle-split-windows-on-execute)
-(defun py-toggle-split-windows-on-execute (&optional arg)
- "If ‘py-split-window-on-execute’ should be on or off.
-
-optional ARG
- Returns value of ‘py-split-window-on-execute’ switched to."
- (interactive)
- (let ((arg (or arg (if py-split-window-on-execute -1 1))))
- (if (< 0 arg)
- (setq py-split-window-on-execute t)
- (setq py-split-window-on-execute nil))
- (when (called-interactively-p 'any) (message "py-split-window-on-execute: %s" py-split-window-on-execute))
- py-split-window-on-execute))
-
-(defun py-split-windows-on-execute-on (&optional arg)
- "Make sure, ‘py-split-window-on-execute’ according to ARG.
-
-Returns value of ‘py-split-window-on-execute’."
- (interactive "p")
- (let ((arg (or arg 1)))
- (toggle-py-split-windows-on-execute arg))
- (when (called-interactively-p 'any) (message "py-split-window-on-execute: %s" py-split-window-on-execute))
- py-split-window-on-execute)
-
-(defun py-split-windows-on-execute-off ()
- "Make sure, ‘py-split-window-on-execute’ is off.
-
-Returns value of ‘py-split-window-on-execute’."
- (interactive)
- (toggle-py-split-windows-on-execute -1)
- (when (called-interactively-p 'any) (message "py-split-window-on-execute: %s" py-split-window-on-execute))
- py-split-window-on-execute)
-
-;; Shell-Switch-Buffers-On-Execute forms
-(defalias 'py-toggle-switch-buffers-on-execute 'py-toggle-shell-switch-buffers-on-execute)
-(defalias 'toggle-py-shell-switch-buffers-on-execute 'py-toggle-shell-switch-buffers-on-execute)
-(defun py-toggle-shell-switch-buffers-on-execute (&optional arg)
- "If ‘py-switch-buffers-on-execute-p’ according to ARG.
-
- Returns value of ‘py-switch-buffers-on-execute-p’ switched to."
- (interactive)
- (let ((arg (or arg (if py-switch-buffers-on-execute-p -1 1))))
- (if (< 0 arg)
- (setq py-switch-buffers-on-execute-p t)
- (setq py-switch-buffers-on-execute-p nil))
- (when (called-interactively-p 'any) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p))
-
-(defun py-shell-switch-buffers-on-execute-on (&optional arg)
- "Make sure, ‘py-switch-buffers-on-execute-p’ according to ARG.
-
-Returns value of ‘py-switch-buffers-on-execute-p’."
- (interactive "p")
- (let ((arg (or arg 1)))
- (toggle-py-shell-switch-buffers-on-execute arg))
- (when (called-interactively-p 'any) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p)
-
-(defun py-shell-switch-buffers-on-execute-off ()
- "Make sure, ‘py-switch-buffers-on-execute-p’ is off.
-
-Returns value of ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (toggle-py-shell-switch-buffers-on-execute -1)
- (when (called-interactively-p 'any) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p)
-
-(defun py-guess-default-python ()
- "Defaults to \"python\", if guessing didn't succeed."
- (interactive)
- (let* ((ptn (or py-shell-name (py-choose-shell) "python"))
- (erg (if py-edit-only-p ptn (executable-find ptn))))
- (when (called-interactively-p 'any)
- (if erg
- (message "%s" ptn)
- (message "%s" "Could not detect Python on your system")))))
-
-;; from ipython.el
-(defun py-dirstack-hook ()
- "To synchronize dir-changes."
- (make-local-variable 'shell-dirstack)
- (setq shell-dirstack nil)
- (make-local-variable 'shell-last-dir)
- (setq shell-last-dir nil)
- (make-local-variable 'shell-dirtrackp)
- (setq shell-dirtrackp t)
- (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t))
-
-(defalias 'py-dedicated-shell 'py-shell-dedicated)
-(defun py-shell-dedicated (&optional argprompt)
- "Start an interpreter in another window according to ARGPROMPT.
-
-With optional \\[universal-argument] user is prompted by
-‘py-choose-shell’ for command and options to pass to the Python
-interpreter."
- (interactive "P")
- (py-shell argprompt nil t))
-
-(defun py-ipython--which-version (shell)
- "Returns IPython version as string"
- (shell-command-to-string (concat (downcase (replace-regexp-in-string "[[:punct:]+]" "" shell)) " -V")))
-
-(defun py-set-ipython-completion-command-string (shell)
- "Set and return ‘py-ipython-completion-command-string’ according to SHELL."
- (interactive)
- (let* ((ipython-version (py-ipython--which-version shell)))
- (if (string-match "[0-9]" ipython-version)
- (setq py-ipython-completion-command-string
- (cond ((string-match "^[^0].+" ipython-version)
- py-ipython0.11-completion-command-string)
- ((string-match "^0.1[1-3]" ipython-version)
- py-ipython0.11-completion-command-string)
- ((string= "^0.10" ipython-version)
- py-ipython0.10-completion-command-string)))
- (error ipython-version))))
-
-(defun py-ipython--module-completion-import (proc)
- "Import module-completion according to PROC."
- (interactive)
- (let ((ipython-version (shell-command-to-string (concat py-shell-name " -V"))))
- (when (and (string-match "^[0-9]" ipython-version)
- (string-match "^[^0].+" ipython-version))
- (process-send-string proc "from IPython.core.completerlib import module_completion"))))
-
-(defun py--compose-buffer-name-initials (liste)
- (let (erg)
- (dolist (ele liste)
- (unless (string= "" ele)
- (setq erg (concat erg (char-to-string (aref ele 0))))))
- erg))
-
-(defun py--remove-home-directory-from-list (liste)
- "Prepare for compose-buffer-name-initials according to LISTE."
- (let ((case-fold-search t)
- (liste liste)
- erg)
- (if (listp (setq erg (split-string (expand-file-name "~") "\/")))
- erg
- (setq erg (split-string (expand-file-name "~") "\\\\")))
- (while erg
- (when (member (car erg) liste)
- (setq liste (cdr (member (car erg) liste))))
- (setq erg (cdr erg)))
- (butlast liste)))
-
-(defun py--prepare-shell-name (erg)
- "Provide a readable shell name by capitalizing etc."
- (cond ((string-match "^ipython" erg)
- (replace-regexp-in-string "ipython" "IPython" erg))
- ((string-match "^jython" erg)
- (replace-regexp-in-string "jython" "Jython" erg))
- ((string-match "^python" erg)
- (replace-regexp-in-string "python" "Python" erg))
- ((string-match "^python2" erg)
- (replace-regexp-in-string "python2" "Python2" erg))
- ((string-match "^python3" erg)
- (replace-regexp-in-string "python3" "Python3" erg))
- ((string-match "^pypy" erg)
- (replace-regexp-in-string "pypy" "PyPy" erg))
- (t erg)))
-
-(defun py--choose-buffer-name (&optional name dedicated fast-process)
- "Return an appropriate NAME to display in modeline.
-
-Optional DEDICATED FAST-PROCESS
-SEPCHAR is the file-path separator of your system."
- (let* ((name-first (or name py-shell-name))
- (erg (when name-first (if (stringp name-first) name-first (prin1-to-string name-first))))
- (fast-process (or fast-process py-fast-process-p))
- prefix)
- (when (string-match "^py-" erg)
- (setq erg (nth 1 (split-string erg "-"))))
- ;; remove home-directory from prefix to display
- (unless py-modeline-acronym-display-home-p
- (save-match-data
- (let ((case-fold-search t))
- (when (string-match (concat ".*" (expand-file-name "~")) erg)
- (setq erg (replace-regexp-in-string (concat "^" (expand-file-name "~")) "" erg))))))
- (if (or (and (setq prefix (split-string erg "\\\\"))
- (< 1 (length prefix)))
- (and (setq prefix (split-string erg "\/"))
- (< 1 (length prefix))))
- (progn
- ;; exect something like default py-shell-name
- (setq erg (car (last prefix)))
- (unless py-modeline-acronym-display-home-p
- ;; home-directory may still inside
- (setq prefix (py--remove-home-directory-from-list prefix))
- (setq prefix (py--compose-buffer-name-initials prefix))))
- (setq erg (or erg py-shell-name))
- (setq prefix nil))
- (when fast-process (setq erg (concat erg " Fast")))
- (setq erg
- (py--prepare-shell-name erg))
- (when (or dedicated py-dedicated-process-p)
- (setq erg (make-temp-name (concat erg "-"))))
- (cond ((and prefix (string-match "^\*" erg))
- (setq erg (replace-regexp-in-string "^\*" (concat "*" prefix " ") erg)))
- (prefix
- (setq erg (concat "*" prefix " " erg "*")))
- (t (unless (string-match "^\*" erg) (setq erg (concat "*" erg "*")))))
- erg))
-
-(defun py--jump-to-exception-intern (act exception-buffer origline)
- (let (erg)
- (set-buffer exception-buffer)
- (goto-char (point-min))
- (forward-line (1- origline))
- (and (search-forward act (line-end-position) t)
- (and py-verbose-p (message "exception-buffer: %s on line %d" py-exception-buffer origline))
- (and py-highlight-error-source-p
- (setq erg (make-overlay (match-beginning 0) (match-end 0)))
- (overlay-put erg
- 'face 'highlight)))))
-
-(defun py--jump-to-exception (perr origline &optional file)
- "Jump to the PERR Python code at ORIGLINE in optional FILE."
- (let (
- (inhibit-point-motion-hooks t)
- (file (or file (car perr)))
- (act (nth 2 perr)))
- (cond ((and py-exception-buffer
- (buffer-live-p py-exception-buffer))
- ;; (pop-to-buffer procbuf)
- (py--jump-to-exception-intern act py-exception-buffer origline))
- ((ignore-errors (file-readable-p file))
- (find-file file)
- (py--jump-to-exception-intern act (get-buffer (file-name-nondirectory file)) origline))
- ((buffer-live-p (get-buffer file))
- (set-buffer file)
- (py--jump-to-exception-intern act file origline))
- (t (setq file (find-file (read-file-name "Exception file: "
- nil
- file t)))
- (py--jump-to-exception-intern act file origline)))))
-
-(defalias 'py-toggle-split-window-on-execute-function 'py-toggle-split-window-function)
-(defun py-toggle-split-window-function ()
- "If window is splitted vertically or horizontally.
-
-When code is executed and ‘py-split-window-on-execute’ is t,
-the result is displays in an output-buffer, \"\*Python\*\" by default.
-
-Customizable variable ‘py-split-windows-on-execute-function’
-tells how to split the screen."
- (interactive)
- (if (eq 'split-window-vertically py-split-windows-on-execute-function)
- (setq py-split-windows-on-execute-function'split-window-horizontally)
- (setq py-split-windows-on-execute-function 'split-window-vertically))
- (when (and py-verbose-p (called-interactively-p 'any))
- (message "py-split-windows-on-execute-function set to: %s" py-split-windows-on-execute-function)))
-
-(defun py--manage-windows-set-and-switch (buffer)
- "Switch to output BUFFER, go to ‘point-max’.
-
-Internal use"
- (set-buffer buffer)
- (goto-char (process-mark (get-buffer-process (current-buffer)))))
-
-(defun py--alternative-split-windows-on-execute-function ()
- "If ‘py--split-windows-on-execute-function’ is ‘split-window-vertically’ return ‘split-window-horizontally’ and vice versa."
- (if (eq py-split-windows-on-execute-function 'split-window-vertically)
- 'split-window-horizontally
- 'split-window-vertically))
-
-(defun py--get-splittable-window ()
- "If selected window doesn't permit a further split, search ‘window-list’ for a suitable one."
- (or (and (window-left-child)(split-window (window-left-child)))
- (and (window-top-child)(split-window (window-top-child)))
- (and (window-parent)(ignore-errors (split-window (window-parent))))
- (and (window-atom-root)(split-window (window-atom-root)))))
-
-(defun py--manage-windows-split (buffer)
- "If one window, split BUFFER.
-
-according to ‘py-split-windows-on-execute-function’."
- (interactive)
- (set-buffer buffer)
- (or
- ;; (split-window (selected-window) nil ’below)
- (ignore-errors (funcall py-split-windows-on-execute-function))
- ;; If call didn't succeed according to settings of
- ;; ‘split-height-threshold’, ‘split-width-threshold’
- ;; resp. ‘window-min-height’, ‘window-min-width’
- ;; try alternative split
- (unless (ignore-errors (funcall (py--alternative-split-windows-on-execute-function)))
- ;; if alternative split fails, look for larger window
- (py--get-splittable-window)
- (ignore-errors (funcall (py--alternative-split-windows-on-execute-function))))))
-
-;; (defun py--display-windows (output-buffer)
-;; "Otherwise new window appears above"
-;; (display-buffer output-buffer)
-;; (select-window py-exception-window))
-
-(defun py--split-t-not-switch-wm (output-buffer number-of-windows exception-buffer)
- (unless (window-live-p output-buffer)
- (with-current-buffer (get-buffer exception-buffer)
-
- (when (< number-of-windows py-split-window-on-execute-threshold)
- (unless
- (member (get-buffer-window output-buffer) (window-list))
- (py--manage-windows-split exception-buffer)))
- (display-buffer output-buffer t)
- (switch-to-buffer exception-buffer)
- )))
-
-(defun py--shell-manage-windows (output-buffer &optional exception-buffer split switch)
- "Adapt or restore window configuration from OUTPUT-BUFFER.
-
-Optional EXCEPTION-BUFFER SPLIT SWITCH
-Return nil."
- (let* ((exception-buffer (or exception-buffer (other-buffer)))
- (old-window-list (window-list))
- (number-of-windows (length old-window-list))
- (split (or split py-split-window-on-execute))
- (switch
- (or py-switch-buffers-on-execute-p switch py-pdbtrack-tracked-buffer)))
- ;; (output-buffer-displayed-p)
- (cond
- (py-keep-windows-configuration
- (py-restore-window-configuration)
- (set-buffer output-buffer)
- (goto-char (point-max)))
- ((and (eq split 'always)
- switch)
- (if (member (get-buffer-window output-buffer) (window-list))
- ;; (delete-window (get-buffer-window output-buffer))
- (select-window (get-buffer-window output-buffer))
- (py--manage-windows-split exception-buffer)
- ;; otherwise new window appears above
- (save-excursion
- (other-window 1)
- (switch-to-buffer output-buffer))
- (display-buffer exception-buffer)))
- ((and
- (eq split 'always)
- (not switch))
- (if (member (get-buffer-window output-buffer) (window-list))
- (select-window (get-buffer-window output-buffer))
- (py--manage-windows-split exception-buffer)
- (display-buffer output-buffer)
- (pop-to-buffer exception-buffer)))
- ((and
- (eq split 'just-two)
- switch)
- (switch-to-buffer (current-buffer))
- (delete-other-windows)
- (py--manage-windows-split exception-buffer)
- ;; otherwise new window appears above
- (other-window 1)
- (set-buffer output-buffer)
- (switch-to-buffer (current-buffer)))
- ((and
- (eq split 'just-two)
- (not switch))
- (switch-to-buffer exception-buffer)
- (delete-other-windows)
- (unless
- (member (get-buffer-window output-buffer) (window-list))
- (py--manage-windows-split exception-buffer))
- ;; Fixme: otherwise new window appears above
- (save-excursion
- (other-window 1)
- (pop-to-buffer output-buffer)
- (goto-char (point-max))
- (other-window 1)))
- ((and
- split
- (not switch))
- ;; https://bugs.launchpad.net/python-mode/+bug/1478122
- ;; > If the shell is visible in any of the windows it should re-use that window
- ;; > I did double check and py-keep-window-configuration is nil and split is t.
- (py--split-t-not-switch-wm output-buffer number-of-windows exception-buffer))
- ((and split switch)
- (unless
- (member (get-buffer-window output-buffer) (window-list))
- (py--manage-windows-split exception-buffer))
- ;; Fixme: otherwise new window appears above
- ;; (save-excursion
- ;; (other-window 1)
- ;; (pop-to-buffer output-buffer)
- ;; [Bug 1579309] python buffer window on top when using python3
- (set-buffer output-buffer)
- (switch-to-buffer output-buffer)
- (goto-char (point-max))
- ;; (other-window 1)
- )
- ((not switch)
- (let (pop-up-windows)
- (py-restore-window-configuration))))))
-
-(defun py-kill-shell-unconditional (&optional shell)
- "With optional argument SHELL.
-
-Otherwise kill default (I)Python shell.
-Kill buffer and its process.
-Receives a ‘buffer-name’ as argument"
- (interactive)
- (let ((shell (or shell (py-shell))))
- (ignore-errors (py-kill-buffer-unconditional shell))))
-
-(defun py-kill-default-shell-unconditional ()
- "Kill buffer \"\*Python\*\" and its process."
- (interactive)
- (ignore-errors (py-kill-buffer-unconditional "*Python*")))
-
-(defun py--report-executable (buffer)
- (let ((erg (downcase (replace-regexp-in-string
- "<\\([0-9]+\\)>" ""
- (replace-regexp-in-string
- "\*" ""
- (if
- (string-match " " buffer)
- (substring buffer (1+ (string-match " " buffer)))
- buffer))))))
- (when (string-match "-" erg)
- (setq erg (substring erg 0 (string-match "-" erg))))
- erg))
-
-(defun py--guess-buffer-name (argprompt dedicated)
- "Guess the ‘buffer-name’ core string according to ARGPROMPT DEDICATED."
- (when (and (not dedicated) argprompt
- (eq 4 (prefix-numeric-value argprompt)))
- (read-buffer "Py-Shell buffer: "
- (generate-new-buffer-name (py--choose-buffer-name)))))
-
-(defun py--configured-shell (name)
- "Return the configured PATH/TO/STRING if any according to NAME."
- (if (string-match "//\\|\\\\" name)
- name
- (cond ((string-match "^[Ii]" name)
- (or py-ipython-command name))
- ((string-match "[Pp]ython3" name)
- (or py-python3-command name))
- ((string-match "[Pp]ython2" name)
- (or py-python2-command name))
- ((string-match "[Jj]ython" name)
- (or py-jython-command name))
- (t (or py-python-command name)))))
-
-(defun py--determine-local-default ()
- (if (not (string= "" py-shell-local-path))
- (expand-file-name py-shell-local-path)
- (when py-use-local-default
- (error "Abort: ‘py-use-local-default’ is set to t but ‘py-shell-local-path’ is empty. Maybe call ‘py-toggle-local-default-use’"))))
-
-(defun py--provide-command-args (shell fast-process)
- "Unbuffered WRT fast-process"
- (let ((erg
- (delq nil
- (cond
- ;; ((eq 2 (prefix-numeric-value argprompt))
- ;; py-python2-command-args)
- ((string-match "^[Ii]" shell)
- (if (string-match "^[0-4]" (py-ipython--which-version shell))
- (remove "--simple-prompt" py-ipython-command-args)
- (if (member "--simple-prompt" py-ipython-command-args)
- py-ipython-command-args
- (cons "--simple-prompt" py-ipython-command-args))))
- ((string-match "^[^-]+3" shell)
- py-python3-command-args)
- (t
- py-python-command-args)))))
- (if (and fast-process (not (member "-u" erg)))
- (cons "-u" erg)
- erg)))
-
-(defun py-shell-get-process (&optional argprompt args dedicated shell buffer)
- "Get appropriate Python process for current buffer and return it.
-
-Optional ARGPROMPT DEDICATED SHELL BUFFER"
- (interactive)
- (or (and buffer (get-buffer-process buffer))
- (get-buffer-process (current-buffer))
- (get-buffer-process (py-shell argprompt args dedicated shell buffer))))
-
-(defun py-switch-to-shell ()
- "Switch to Python process buffer."
- (interactive)
- (pop-to-buffer (py-shell) t))
-
-;; Code execution commands
-(defun py-which-execute-file-command (filename)
- "Return the command appropriate to Python version and FILENAME.
-
-Per default it's \"(format \"execfile(r'%s') # PYTHON-MODE\\n\" filename)\" for Python 2 series."
- (format "exec(compile(open(r'%s').read(), r'%s', 'exec')) # PYTHON-MODE\n" filename filename)
- )
-
-(defun py--store-result-maybe (erg)
- "If no error occurred and ‘py-store-result-p’ store ERG for yank."
- (and (not py-error) erg (or py-debug-p py-store-result-p) (kill-new erg)))
-
-(defcustom py-default-working-directory ""
- "If not empty used by ‘py-set-current-working-directory’"
- :type 'string
- :tag "py-default-working-directory"
- :group 'python-mode)
-
-(defun py-current-working-directory ()
- "Return the directory of current python SHELL."
- (interactive)
- (let* ((proc (get-buffer-process (current-buffer)))
- erg)
- (if proc
- (setq erg (py-send-string (concat "import os\;os.getcwd()") proc nil t))
- (setq erg (replace-regexp-in-string "\n" "" (shell-command-to-string (concat py-shell-name " -c \"import os; print(os.getcwd())\"")))))
- (when (interactive-p) (message "CWD: %s" erg))
- erg))
-
-(defun py-set-working-directory (&optional directory)
- "Set working directory according to optional DIRECTORY
-
-when given, to value of ‘py-default-working-directory’ otherwise"
- (interactive)
- (let* ((proc (get-buffer-process (current-buffer)))
- (dir (or directory py-default-working-directory))
- erg)
- (py-send-string (concat "import os\;os.chdir(\"" dir "\")") proc nil t)
- (setq erg (py-send-string "os.getcwd()" proc nil t))
- (when (interactive-p) (message "CWD changed to: %s" erg))
- erg))
-
-(defun py--update-execute-directory-intern (dir proc procbuf fast)
- (let ((strg (concat "import os\;os.chdir(\"" dir "\")")))
- (if fast
- (py-fast-send-string strg proc procbuf t t)
- (py-send-string strg proc nil t))))
-;; (comint-send-string proc (concat "import os;os.chdir(\"" dir "\")\n")))
-
-(defun py--update-execute-directory (proc procbuf execute-directory fast)
- (with-current-buffer procbuf
- (let ((cwd (py-current-working-directory)))
- (unless (string= execute-directory (concat cwd "/"))
- (py--update-execute-directory-intern (or py-execute-directory execute-directory) proc procbuf fast)))))
-
-(defun py--close-execution (tempbuf tempfile)
- "Delete TEMPBUF and TEMPFILE."
- (unless py-debug-p
- (when tempfile (py-delete-temporary tempfile tempbuf))))
-
-(defun py-shell-send-file (file-name &optional process temp-file-name
- delete)
- "Send FILE-NAME to Python PROCESS.
-
-If TEMP-FILE-NAME is passed then that file is used for processing
-instead, while internally the shell will continue to use
-FILE-NAME. If TEMP-FILE-NAME and DELETE are non-nil, then
-TEMP-FILE-NAME is deleted after evaluation is performed. When
-optional argument."
- (interactive
- (list
- (read-file-name "File to send: ")))
- (let* ((proc (or process (py-shell-get-process)))
- (encoding (with-temp-buffer
- (insert-file-contents
- (or temp-file-name file-name))
- (py-info-encoding)))
- (file-name (expand-file-name (file-local-name file-name)))
- (temp-file-name (when temp-file-name
- (expand-file-name
- (file-local-name temp-file-name)))))
- (py-shell-send-string
- (format
- (concat
- "import codecs, os;"
- "__pyfile = codecs.open('''%s''', encoding='''%s''');"
- "__code = __pyfile.read().encode('''%s''');"
- "__pyfile.close();"
- (when (and delete temp-file-name)
- (format "os.remove('''%s''');" temp-file-name))
- "exec(compile(__code, '''%s''', 'exec'));")
- (or temp-file-name file-name) encoding encoding file-name)
- proc)))
-
-(defun py--fetch-result (buffer limit &optional cmd)
- "CMD: some shells echo the command in output-buffer
-Delete it here"
- (when py-verbose-p (message "(current-buffer): %s" (current-buffer))
- (switch-to-buffer (current-buffer)))
- (if python-mode-v5-behavior-p
- (with-current-buffer buffer
- (string-trim (buffer-substring-no-properties (point-min) (point-max)) nil "\n"))
- (when (< limit (point-max))
- (string-trim (replace-regexp-in-string py-shell-prompt-regexp "" (buffer-substring-no-properties limit (point-max)))))))
-
-(defun py--postprocess (output-buffer origline limit &optional cmd filename)
- "Provide return values, check result for error, manage windows.
-
-According to OUTPUT-BUFFER ORIGLINE ORIG"
- ;; py--fast-send-string doesn't set origline
- (when (or py-return-result-p py-store-result-p)
- (with-current-buffer output-buffer
- (when py-debug-p (switch-to-buffer (current-buffer)))
- (sit-for (py--which-delay-process-dependent (prin1-to-string output-buffer)))
- ;; (catch 'py--postprocess
- (setq py-result (py--fetch-result output-buffer limit cmd))
- ;; (throw 'py--postprocess (error "py--postprocess failed"))
- ;;)
- (if (and py-result (not (string= "" py-result)))
- (if (string-match "^Traceback" py-result)
- (if filename
- (setq py-error py-result)
- (progn
- (with-temp-buffer
- (insert py-result)
- (sit-for 0.1 t)
- (setq py-error (py--fetch-error origline filename)))))
- (when py-store-result-p
- (kill-new py-result))
- (when py-verbose-p (message "py-result: %s" py-result))
- py-result)
- (when py-verbose-p (message "py--postprocess: %s" "Don't see any result"))))))
-
-(defun py--execute-file-base (&optional proc filename cmd procbuf origline fast)
- "Send to Python interpreter process PROC.
-
-In Python version 2.. \"execfile('FILENAME')\".
-
-Takes also CMD PROCBUF ORIGLINE NO-OUTPUT.
-
-Make that process's buffer visible and force display. Also make
-comint believe the user typed this string so that
-‘kill-output-from-shell’ does The Right Thing.
-Returns position where output starts."
- ;; (message "(current-buffer) %s" (current-buffer))
- (let* ((buffer (or procbuf (and proc (process-buffer proc)) (py-shell nil nil nil nil nil fast)))
- (proc (or proc (get-buffer-process buffer)))
- (limit (marker-position (process-mark proc)))
- (cmd (or cmd (py-which-execute-file-command filename)))
- erg)
- (if fast
- (process-send-string proc cmd)
- (py-send-string cmd proc))
- ;; (message "%s" (current-buffer))
- (with-current-buffer buffer
- (when (or py-return-result-p py-store-result-p)
- (setq erg (py--postprocess buffer origline limit cmd filename))
- (if py-error
- (setq py-error (prin1-to-string py-error))
- erg)))))
-
-(defun py--execute-buffer-finally (strg proc procbuf origline filename fast wholebuf)
- (if (and filename wholebuf (not (buffer-modified-p)))
- (unwind-protect
- (py--execute-file-base proc filename nil procbuf origline fast))
- (let* ((tempfile (concat (expand-file-name py-temp-directory) py-separator-char "temp" (md5 (format "%s" (nth 3 (current-time)))) ".py")))
- (with-temp-buffer
- (insert strg)
- (write-file tempfile))
- (unwind-protect
- (py--execute-file-base proc tempfile nil procbuf origline fast)
- (and (file-readable-p tempfile) (delete-file tempfile py-debug-p))))))
-
-(defun py-execute-python-mode-v5 (start end origline filename)
- "Take START END &optional EXCEPTION-BUFFER ORIGLINE."
- (interactive "r")
- (let ((output-buffer "*Python Output*")
- (py-split-window-on-execute 'just-two)
- (pcmd (concat py-shell-name (if (string-equal py-which-bufname
- "Jython")
- " -"
- ;; " -c "
- ""))))
- (save-excursion
- (shell-command-on-region start end
- pcmd output-buffer))
- (if (not (get-buffer output-buffer))
- (message "No output.")
- (setq py-result (py--fetch-result (get-buffer output-buffer) nil))
- (if (string-match "Traceback" py-result)
- (message "%s" (setq py-error (py--fetch-error output-buffer origline filename)))
- py-result))))
-
-(defun py--execute-base-intern (strg filename proc file wholebuf buffer origline execute-directory start end &optional fast)
- "Select the handler according to:
-
-STRG FILENAME PROC FILE WHOLEBUF
-BUFFER ORIGLINE EXECUTE-DIRECTORY START END WHICH-SHELL
-Optional FAST RETURN"
- (setq py-error nil)
- (cond ;; (fast (py-fast-send-string strg proc buffer result))
- ;; enforce proceeding as python-mode.el v5
- (python-mode-v5-behavior-p
- (py-execute-python-mode-v5 start end origline filename))
- (py-execute-no-temp-p
- (py--execute-ge24.3 start end execute-directory py-shell-name py-exception-buffer proc file origline))
- ((and filename wholebuf)
- (py--execute-file-base proc filename nil buffer origline fast))
- (t
- ;; (message "(current-buffer) %s" (current-buffer))
- (py--execute-buffer-finally strg proc buffer origline filename fast wholebuf)
- ;; (py--delete-temp-file tempfile)
- )))
-
-(defun py--execute-base (&optional start end shell filename proc file wholebuf fast dedicated split switch)
- "Update optional variables START END SHELL FILENAME PROC FILE WHOLEBUF FAST DEDICATED SPLIT SWITCH."
- (setq py-error nil)
- (when py-debug-p (message "py--execute-base: (current-buffer): %s" (current-buffer)))
- (when (or fast py-fast-process-p) (ignore-errors (py-kill-buffer-unconditional py-output-buffer)))
- (let* ((orig (point))
- (fast (or fast py-fast-process-p))
- (exception-buffer (current-buffer))
- (start (or start (and (use-region-p) (region-beginning)) (point-min)))
- (end (or end (and (use-region-p) (region-end)) (point-max)))
- (strg-raw (if py-if-name-main-permission-p
- (buffer-substring-no-properties start end)
- (py--fix-if-name-main-permission (buffer-substring-no-properties start end))))
- (strg (py--fix-start strg-raw))
- (wholebuf (unless file (or wholebuf (and (eq (buffer-size) (- end start))))))
- ;; error messages may mention differently when running from a temp-file
- (origline
- (format "%s" (save-restriction
- (widen)
- (py-count-lines (point-min) orig))))
- ;; argument SHELL might be a string like "python", "IPython" "python3", a symbol holding PATH/TO/EXECUTABLE or just a symbol like 'python3
- (shell (or
- (and shell
- ;; shell might be specified in different ways
- (or (and (stringp shell) shell)
- (ignore-errors (eval shell))
- (and (symbolp shell) (format "%s" shell))))
- ;; (save-excursion
- (py-choose-shell)
- ;;)
- ))
- (shell (or shell (py-choose-shell)))
- (buffer-name
- (py--choose-buffer-name shell dedicated fast))
- (execute-directory
- (cond ((ignore-errors (file-name-directory (file-remote-p (buffer-file-name) 'localname))))
- ((and py-use-current-dir-when-execute-p (buffer-file-name))
- (file-name-directory (buffer-file-name)))
- ((and py-use-current-dir-when-execute-p
- py-fileless-buffer-use-default-directory-p)
- (expand-file-name default-directory))
- ((stringp py-execute-directory)
- py-execute-directory)
- ((getenv "VIRTUAL_ENV"))
- (t (getenv "HOME"))))
- (filename (or (and filename (expand-file-name filename))
- (py--buffer-filename-remote-maybe)))
- (py-orig-buffer-or-file (or filename (current-buffer)))
- (proc-raw (or proc (get-buffer-process buffer-name)))
-
- (proc (or proc-raw (get-buffer-process buffer-name)
- (prog1
- (get-buffer-process (py-shell nil nil dedicated shell buffer-name fast exception-buffer split switch))
- (sit-for 0.1))))
- (split (if python-mode-v5-behavior-p 'just-two split)))
- (setq py-output-buffer (or (and python-mode-v5-behavior-p py-output-buffer) (and proc (buffer-name (process-buffer proc)))
- (py--choose-buffer-name shell dedicated fast)))
- (py--execute-base-intern strg filename proc file wholebuf py-output-buffer origline execute-directory start end fast)
- (when (or split py-split-window-on-execute py-switch-buffers-on-execute-p)
- (py--shell-manage-windows py-output-buffer exception-buffer (or split py-split-window-on-execute) switch))))
-
-;; (defmacro py--execute-prepare (form shell dedicated switch beg end file fast proc wholebuf split)
-;; "Used by python-components-extended-executes ."
-;; (declare (debug t))
-;; (save-excursion
-;; `(let* ((form ,(prin1-to-string form))
-;; (origline (py-count-lines))
-;; (fast
-;; (or ,fast ,py-fast-process-p)
-;; )
-;; (py-exception-buffer (current-buffer))
-;; (beg (unless ,file
-;; (prog1
-;; (or ,beg (funcall (intern-soft (concat "py--beginning-of-" form "-p")))
-
-;; (funcall (intern-soft (concat "py-backward-" form)))
-;; (push-mark)))))
-;; (end (unless ,file
-;; (or ,end (save-excursion (funcall (intern-soft (concat "py-forward-" form)))))))
-;; filename)
-;; ;; (setq py-buffer-name nil)
-;; (if ,file
-;; (progn
-;; (setq filename (expand-file-name ,file))
-;; (if (file-readable-p filename)
-;; (py--execute-file-base nil filename nil nil origline)
-;; (message "%s not readable. %s" ,file "Do you have write permissions?")))
-;; (py--execute-base beg end ,shell filename ,proc ,file ,wholebuf ,fast ,dedicated ,split ,switch)))))
-
-(defun py--execute-prepare (form shell &optional dedicated switch beg end file fast proc wholebuf split)
- "Update some vars."
- (save-excursion
- (let* ((form (prin1-to-string form))
- (origline (py-count-lines))
- (fast
- (or fast py-fast-process-p))
- (py-exception-buffer (current-buffer))
- (beg (unless file
- (prog1
- (or beg (funcall (intern-soft (concat "py--beginning-of-" form "-p")))
-
- (funcall (intern-soft (concat "py-backward-" form)))
- (push-mark)))))
- (end (unless file
- (or end (save-excursion (funcall (intern-soft (concat "py-forward-" form)))))))
- filename)
- ;; (setq py-buffer-name nil)
- (if file
- (progn
- (setq filename (expand-file-name file))
- (if (file-readable-p filename)
- (py--execute-file-base nil filename nil nil origline)
- (message "%s not readable. %s" file "Do you have write permissions?")))
- (py--execute-base beg end shell filename proc file wholebuf fast dedicated split switch)))))
-
-;; (defun py--delete-temp-file (tempfile &optional tempbuf)
-;; "After ‘py--execute-buffer-finally’ returned delete TEMPFILE &optional TEMPBUF."
-;; (sit-for py--delete-temp-file-delay t)
-;; (py--close-execution tempbuf tempfile))
-
-(defun py--fetch-error (output-buffer &optional origline filename)
- "Highlight exceptions found in BUF.
-
-If an exception occurred return error-string, otherwise return nil.
-BUF must exist.
-
-Indicate LINE if code wasn't run from a file, thus remember ORIGLINE of source buffer"
- (with-current-buffer output-buffer
- (when py-debug-p (switch-to-buffer (current-buffer)))
- ;; (setq py-error (buffer-substring-no-properties (point) (point-max)))
- (goto-char (point-max))
- (when (re-search-backward "File \"\\(.+\\)\", line \\([0-9]+\\)\\(.*\\)$" nil t)
- (when (and filename (re-search-forward "File \"\\(.+\\)\", line \\([0-9]+\\)\\(.*\\)$" nil t)
- (replace-match filename nil nil nil 1))
- (when (and origline (re-search-forward "line \\([0-9]+\\)\\(.*\\)$" (line-end-position) t 1))
- (replace-match origline nil nil nil 2)))
- (setq py-error (buffer-substring-no-properties (point) (point-max))))
- ;; (when erg
- ;; (goto-char erg)
- ;; (save-match-data
- ;; (and (not (py--buffer-filename-remote-maybe
- ;; (or
- ;; (get-buffer py-exception-buffer)
- ;; (get-buffer (file-name-nondirectory py-exception-buffer)))))
- ;; (string-match "^[ \t]*File" (buffer-substring-no-properties (point) (line-end-position)))
- ;; (looking-at "[ \t]*File")
- ;; (replace-match " Buffer")))
- ;; (setq py-error (buffer-substring-no-properties (point-min) (point-max)))
- ;; (sit-for 0.1 t)
- py-error))
-
-(defun py--execute-ge24.3 (start end execute-directory which-shell &optional exception-buffer proc file origline)
- "An alternative way to do it.
-
-According to START END EXECUTE-DIRECTORY WHICH-SHELL
-Optional EXCEPTION-BUFFER PROC FILE ORIGLINE
-May we get rid of the temporary file?"
- (and (py--buffer-filename-remote-maybe) buffer-offer-save (buffer-modified-p (py--buffer-filename-remote-maybe)) (y-or-n-p "Save buffer before executing? ")
- (write-file (py--buffer-filename-remote-maybe)))
- (let* ((start (copy-marker start))
- (end (copy-marker end))
- (exception-buffer (or exception-buffer (current-buffer)))
- (line (py-count-lines (point-min) (if (eq start (line-beginning-position)) (1+ start) start)))
- (strg (buffer-substring-no-properties start end))
- (tempfile (or (py--buffer-filename-remote-maybe) (concat (expand-file-name py-temp-directory) py-separator-char (replace-regexp-in-string py-separator-char "-" "temp") ".py")))
-
- (proc (or proc (if py-dedicated-process-p
- (get-buffer-process (py-shell nil nil t which-shell))
- (or (get-buffer-process py-buffer-name)
- (get-buffer-process (py-shell nil nil py-dedicated-process-p which-shell py-buffer-name))))))
- (procbuf (process-buffer proc))
- (file (or file (with-current-buffer py-buffer-name
- (concat (file-remote-p default-directory) tempfile))))
- (filebuf (get-buffer-create file)))
- (set-buffer filebuf)
- (erase-buffer)
- (newline line)
- (save-excursion
- (insert strg))
- (py--fix-start (buffer-substring-no-properties (point) (point-max)))
- (unless (string-match "[jJ]ython" which-shell)
- ;; (when (and execute-directory py-use-current-dir-when-execute-p
- ;; (not (string= execute-directory default-directory)))
- ;; (message "Warning: options ‘execute-directory’ and ‘py-use-current-dir-when-execute-p’ may conflict"))
- (and execute-directory
- (process-send-string proc (concat "import os; os.chdir(\"" execute-directory "\")\n"))))
- (set-buffer filebuf)
- (process-send-string proc
- (buffer-substring-no-properties
- (point-min) (point-max)))
- (sit-for 0.1 t)
- (if (and (setq py-error (save-excursion (py--postprocess-intern origline exception-buffer)))
- (car py-error)
- (not (markerp py-error)))
- (py--jump-to-exception py-error origline)
- (unless (string= (buffer-name (current-buffer)) (buffer-name procbuf))
- (when py-verbose-p (message "Output buffer: %s" procbuf))))))
-
-(defun py-delete-temporary (&optional file filebuf)
- (when (file-readable-p file)
- (delete-file file))
- (when (buffer-live-p filebuf)
- (set-buffer filebuf)
- (set-buffer-modified-p 'nil)
- (kill-buffer filebuf)))
-
-(defun py--insert-offset-lines (line)
- "Fix offline amount, make error point at the correct LINE."
- (insert (make-string (- line (py-count-lines (point-min) (point))) 10)))
-
-(defun py-execute-file (filename)
- "When called interactively, user is prompted for FILENAME."
- (interactive "fFilename: ")
- (let (;; postprocess-output-buffer might want origline
- (origline 1)
- (py-exception-buffer filename)
- erg)
- (if (file-readable-p filename)
- (if py-store-result-p
- (setq erg (py--execute-file-base nil (expand-file-name filename) nil nil origline))
- (py--execute-file-base nil (expand-file-name filename)))
- (message "%s not readable. %s" filename "Do you have write permissions?"))
- (py--shell-manage-windows py-output-buffer py-exception-buffer nil (or (interactive-p)))
- erg))
-
-(defun py-execute-string (&optional strg shell dedicated switch fast)
- "Send the optional argument STRG to Python default interpreter.
-
-Optional SHELL DEDICATED SWITCH FAST
-See also ‘py-execute-region’."
- (interactive)
- (let ((strg (or strg (read-from-minibuffer "String: ")))
- (shell (or shell (default-value 'py-shell-name))))
- (with-temp-buffer
- (insert strg)
- (py-execute-region (point-min) (point-max) shell dedicated switch fast))))
-
-(defun py-execute-string-dedicated (&optional strg shell switch fast)
- "Send the argument STRG to an unique Python interpreter.
-
-Optional SHELL SWITCH FAST
-See also ‘py-execute-region’."
- (interactive)
- (let ((strg (or strg (read-from-minibuffer "String: ")))
- (shell (or shell (default-value 'py-shell-name))))
- (with-temp-buffer
- (insert strg)
- (py-execute-region (point-min) (point-max) shell t switch fast))))
-
-(defun py--insert-execute-directory (directory &optional orig done)
- (let ((orig (or orig (point)))
- (done done))
- (if done (goto-char done) (goto-char (point-min)))
- (cond ((re-search-forward "^from __future__ import " nil t 1)
- (py-forward-statement)
- (setq done (point))
- (py--insert-execute-directory directory orig done))
- ((re-search-forward py-encoding-string-re nil t 1)
- (setq done (point))
- (py--insert-execute-directory directory orig done))
- ((re-search-forward py-shebang-regexp nil t 1)
- (setq done (point))
- (py--insert-execute-directory directory orig done))
- (t (forward-line 1)
- (unless (eq 9 (char-after)) (newline 1))
- (insert (concat "import os; os.chdir(\"" directory "\")\n"))))))
-
-(defun py--fix-if-name-main-permission (strg)
- "Remove \"if __name__ == '__main__ '\" STRG from code to execute.
-
-See ‘py-if-name-main-permission-p’"
- (let ((strg (if py-if-name-main-permission-p strg
- (replace-regexp-in-string
- "if[( ]*__name__[) ]*==[( ]*['\"]\\{1,3\\}__main__['\"]\\{1,3\\}[) ]*:"
- ;; space after __main__, i.e. will not be executed
- "if __name__ == '__main__ ':" strg))))
- strg))
-
-;; ‘py-execute-line’ calls void function, lp:1492054, lp:1519859
-(or (functionp 'indent-rigidly-left)
- (defun indent-rigidly--pop-undo ()
- (and (memq last-command '(indent-rigidly-left indent-rigidly-right
- indent-rigidly-left-to-tab-stop
- indent-rigidly-right-to-tab-stop))
- (consp buffer-undo-list)
- (eq (car buffer-undo-list) nil)
- (pop buffer-undo-list)))
-
- (defun indent-rigidly-left (beg end)
- "Indent all lines between BEG and END leftward by one space."
- (interactive "r")
- (indent-rigidly--pop-undo)
- (indent-rigidly
- beg end
- (if (eq (current-bidi-paragraph-direction) 'right-to-left) 1 -1))))
-
-(defun py--fix-start (strg)
- "Internal use by py-execute... functions.
-
-Takes STRG
-Avoid empty lines at the beginning."
- ;; (when py-debug-p (message "py--fix-start:"))
- (let (py--imenu-create-index-p
- py-guess-py-install-directory-p
- py-autopair-mode
- py-complete-function
- py-load-pymacs-p
- py-load-skeletons-p
- erg)
- (with-temp-buffer
- (python-mode)
- (insert strg)
- (goto-char (point-min))
- (when (< 0 (setq erg (skip-chars-forward " \t\r\n\f" (line-end-position))))
- (dotimes (_ erg)
- (indent-rigidly-left (point-min) (point-max))))
- (unless (py--beginning-of-statement-p)
- (py-forward-statement))
- (while (not (eq (current-indentation) 0))
- (py-shift-left py-indent-offset))
- (goto-char (point-max))
- (unless (py-empty-line-p)
- (newline 1))
- (buffer-substring-no-properties 1 (point-max)))))
-
-(defun py-fetch-py-master-file ()
- "Lookup if a ‘py-master-file’ is specified.
-
-See also doku of variable ‘py-master-file’"
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (when (re-search-forward "^ *# Local Variables:" nil (quote move) 1)
- (when
- (re-search-forward (concat "^\\( *# py-master-file: *\\)\"\\([^ \t]+\\)\" *$") nil t 1)
- (setq py-master-file (match-string-no-properties 2))))))
- (when (called-interactively-p 'any) (message "%s" py-master-file)))
-
-(defun py-execute-import-or-reload (&optional shell)
- "Import the current buffer's file in a Python interpreter.
-
-Optional SHELL
-If the file has already been imported, then do reload instead to get
-the latest version.
-
-If the file's name does not end in \".py\", then do execfile instead.
-
-If the current buffer is not visiting a file, do ‘py-execute-buffer’
-instead.
-
-If the file local variable ‘py-master-file’ is non-nil, import or
-reload the named file instead of the buffer's file. The file may be
-saved based on the value of ‘py-execute-import-or-reload-save-p’.
-
-See also ‘\\[py-execute-region]’.
-
-This may be preferable to ‘\\[py-execute-buffer]’ because:
-
- - Definitions stay in their module rather than appearing at top
- level, where they would clutter the global namespace and not affect
- uses of qualified names (MODULE.NAME).
-
- - The Python debugger gets line number information about the functions."
- (interactive)
- ;; Check file local variable py-master-file
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (let ((py-shell-name (or shell (py-choose-shell)))
- (file (py--buffer-filename-remote-maybe)))
- (if file
- (let ((proc (or
- (ignore-errors (get-process (file-name-directory shell)))
- (get-buffer-process (py-shell nil nil py-dedicated-process-p shell (or shell (default-value 'py-shell-name)))))))
- ;; Maybe save some buffers
- (save-some-buffers (not py-ask-about-save) nil)
- (py--execute-file-base proc file
- (if (string-match "\\.py$" file)
- (let ((m (py--qualified-module-name (expand-file-name file))))
- (if (string-match "python2" py-shell-name)
- (format "import sys\nif sys.modules.has_key('%s'):\n reload(%s)\nelse:\n import %s\n" m m m)
- (format "import sys,imp\nif'%s' in sys.modules:\n imp.reload(%s)\nelse:\n import %s\n" m m m)))
- ;; (format "execfile(r'%s')\n" file)
- (py-which-execute-file-command file))))
- (py-execute-buffer))))
-
-(defun py--qualified-module-name (file)
- "Find the qualified module name for filename FILE.
-
-Basically, this goes down the directory tree as long as there are __init__.py files there."
- (let ((rec #'(lambda (d f)
- (let* ((dir (file-name-directory d))
- (initpy (concat dir "__init__.py")))
- (if (file-exists-p initpy)
- (let ((d2 (directory-file-name d)))
- (funcall rec (file-name-directory d2)
- (concat (file-name-nondirectory d2) "." f)))
- f)))))
- (funcall rec (file-name-directory file)
- (file-name-sans-extension (file-name-nondirectory file)))))
-
-;; Fixme: Try to define the function or class within the relevant
-;; module, not just at top level.
-(defun py-execute-defun ()
- "Send the current defun (class or method) to the Python process."
- (interactive)
- (save-excursion (py-execute-region (progn (beginning-of-defun) (point))
- (progn (end-of-defun) (point)))))
-
-(defun py-process-file (filename &optional output-buffer error-buffer)
- "Process \"python FILENAME\".
-
-Optional OUTPUT-BUFFER and ERROR-BUFFER might be given."
- (interactive "fDatei:")
- (let ((coding-system-for-read 'utf-8)
- (coding-system-for-write 'utf-8)
- (output-buffer (or output-buffer (make-temp-name "py-process-file-output")))
- (pcmd (py-choose-shell)))
- (unless (buffer-live-p output-buffer)
- (set-buffer (get-buffer-create output-buffer)))
- (shell-command (concat pcmd " " filename) output-buffer error-buffer)
- (when py-switch-buffers-on-execute-p (switch-to-buffer output-buffer))))
-
-(defvar py-last-exeption-buffer nil
- "Internal use only - when ‘py-up-exception’ is called.
-
-In source-buffer, this will deliver the exception-buffer again.")
-
-(defun py-remove-overlays-at-point ()
- "Remove overlays as set when ‘py-highlight-error-source-p’ is non-nil."
- (interactive "*")
- (delete-overlay (car (overlays-at (point)))))
-
-(defun py-mouseto-exception (event)
- "Jump to the code which caused the Python exception at EVENT.
-EVENT is usually a mouse click."
- (interactive "e")
- (cond
- ((fboundp 'event-point)
- ;; XEmacs
- (let* ((point (event-point event))
- (buffer (event-buffer event))
- (e (and point buffer (extent-at point buffer 'py-exc-info)))
- (info (and e (extent-property e 'py-exc-info))))
- (message "Event point: %d, info: %s" point info)
- (and info
- (py--jump-to-exception (car info) nil (cdr info)))))))
-
-(defun py-goto-exception (&optional file line)
- "Go to FILE and LINE indicated by the traceback."
- (interactive)
- (let ((file file)
- (line line))
- (unless (and file line)
- (save-excursion
- (beginning-of-line)
- (if (looking-at py-traceback-line-re)
- (setq file (substring-no-properties (match-string 1))
- line (string-to-number (match-string 2))))))
- (if (not file)
- (error "Not on a traceback line"))
- (find-file file)
- (goto-char (point-min))
- (forward-line (1- line))))
-
-(defun py--find-next-exception (start buffer searchdir errwhere)
- "Find the next Python exception and jump to the code that caused it.
-START is the buffer position in BUFFER from which to begin searching
-for an exception. SEARCHDIR is a function, either
-‘re-search-backward’ or ‘re-search-forward’ indicating the direction
-to search. ERRWHERE is used in an error message if the limit (top or
-bottom) of the trackback stack is encountered."
- (let (file line)
- (save-excursion
- (with-current-buffer buffer
- (goto-char (py--point start))
- (if (funcall searchdir py-traceback-line-re nil t)
- (setq file (match-string 1)
- line (string-to-number (match-string 2))))))
- (if (and file line)
- (py-goto-exception file line)
- (error "%s of traceback" errwhere))))
-
-(defun py-down-exception (&optional bottom)
- "Go to the next line down in the traceback.
-With \\[univeral-argument] (programmatically, optional argument
-BOTTOM), jump to the bottom (innermost) exception in the exception
-stack."
- (interactive "P")
- (let* ((buffer py-output-buffer))
- (if bottom
- (py--find-next-exception 'eob buffer 're-search-backward "Bottom")
- (py--find-next-exception 'eol buffer 're-search-forward "Bottom"))))
-
-(defun py-up-exception (&optional top)
- "Go to the previous line up in the traceback.
-With \\[universal-argument] (programmatically, optional argument TOP)
-jump to the top (outermost) exception in the exception stack."
- (interactive "P")
- (let* ((buffer py-output-buffer))
- (if top
- (py--find-next-exception 'bob buffer 're-search-forward "Top")
- (py--find-next-exception 'bol buffer 're-search-backward "Top"))))
-;; ;
-;; obsolete by py--fetch-result
-;; followed by py--fetch-error
-;; still used by py--execute-ge24.3
-(defun py--postprocess-intern (&optional origline exception-buffer output-buffer)
- "Highlight exceptions found in BUF.
-
-Optional ORIGLINE EXCEPTION-BUFFER
-If an exception occurred return error-string, otherwise return nil.
-BUF must exist.
-
-Indicate LINE if code wasn't run from a file, thus remember line of source buffer"
- (save-excursion
- (with-current-buffer output-buffer
- (let* (estring ecode erg)
- ;; (switch-to-buffer (current-buffer))
- (goto-char (point-max))
- (sit-for 0.1)
- (save-excursion
- (unless (looking-back py-pdbtrack-input-prompt (line-beginning-position))
- (forward-line -1)
- (end-of-line)
- (when (re-search-backward py-shell-prompt-regexp t 1)
- ;; (or (re-search-backward py-shell-prompt-regexp nil t 1)
- ;; (re-search-backward (concat py-ipython-input-prompt-re "\\|" py-ipython-output-prompt-re) nil t 1))
- (save-excursion
- (when (re-search-forward "File \"\\(.+\\)\", line \\([0-9]+\\)\\(.*\\)$" nil t)
- (setq erg (copy-marker (point)))
- (delete-region (progn (beginning-of-line)
- (save-match-data
- (when (looking-at
- ;; all prompt-regexp known
- 1py-shell-prompt-regexp)
- (goto-char (match-end 0)))))
-
- (progn (skip-chars-forward " \t\r\n\f" (line-end-position))(point)))
- (insert (concat " File " (buffer-name exception-buffer) ", line "
- (prin1-to-string origline)))))
- ;; these are let-bound as ‘tempbuf’
- (and (boundp 'tempbuf)
- ;; (message "%s" tempbuf)
- (search-forward (buffer-name tempbuf) nil t)
- (delete-region (line-beginning-position) (1+ (line-end-position))))
- ;; if no buffer-file exists, signal "Buffer", not "File(when
- (when erg
- (goto-char erg)
- ;; (forward-char -1)
- ;; (skip-chars-backward "^\t\r\n\f")
- ;; (skip-chars-forward " \t")
- (save-match-data
- (and (not (py--buffer-filename-remote-maybe
- (or
- (get-buffer exception-buffer)
- (get-buffer (file-name-nondirectory exception-buffer)))))
- (string-match "^[ \t]*File" (buffer-substring-no-properties (point) (line-end-position)))
- (looking-at "[ \t]*File")
- (replace-match " Buffer")))
- (push origline py-error)
- (push (buffer-name exception-buffer) py-error)
- (forward-line 1)
- (when (looking-at "[ \t]*\\([^\t\n\r\f]+\\)[ \t]*$")
- (setq estring (match-string-no-properties 1))
- (setq ecode (replace-regexp-in-string "[ \n\t\f\r^]+" " " estring))
- (push 'py-error ecode))))))
- py-error))))
-
-(defun py--find-next-exception-prepare (direction start)
- "According to DIRECTION and START setup exception regexps.
-
-Depends from kind of Python shell."
- (let* ((name (get-process (substring (buffer-name (current-buffer)) 1 -1)))
- (buffer (cond (name (buffer-name (current-buffer)))
- ((buffer-live-p (get-buffer py-output-buffer))
- py-output-buffer)
- (py-last-exeption-buffer (buffer-name py-last-exeption-buffer))
- (t (error "Don't see exeption buffer")))))
- (when buffer (set-buffer (get-buffer buffer)))
- (if (eq direction 'up)
- (if (string= start "TOP")
- (py--find-next-exception 'bob buffer 're-search-forward "Top")
- (py--find-next-exception 'bol buffer 're-search-backward "Top"))
- (if (string= start "BOTTOM")
- (py--find-next-exception 'eob buffer 're-search-backward "Bottom")
- (py--find-next-exception 'eol buffer 're-search-forward "Bottom")))))
-
-(defalias 'ipython-send-and-indent 'py-execute-line-ipython)
-(defalias 'py-execute-region-in-shell 'py-execute-region)
-(defalias 'py-ipython-shell-command-on-region 'py-execute-region-ipython)
-(defalias 'py-shell-command-on-region 'py-execute-region)
-(defalias 'py-send-region-ipython 'py-execute-region-ipython)
-(defalias 'py-send-region 'py-execute-region)
-
-;; python-components-send
-(defun py-output-buffer-filter (&optional beg end)
- "Clear output buffer from py-shell-input prompt etc.
-
-Optional BEG END"
- (interactive "*")
- (let ((beg (cond (beg)
- ((use-region-p)
- (region-beginning))
- (t (point-min))))
- (end (cond (end (copy-marker end))
- ((use-region-p)
- (copy-marker (region-end)))
- (t (copy-marker (point-max))))))
- (goto-char beg)
- (while (re-search-forward (concat "\\(" py-shell-input-prompt-1-regexp "\\|" py-shell-input-prompt-2-regexp "\\|" "^In \\[[0-9]+\\]: *" "\\)") end (quote move) 1)
- (replace-match ""))
- (goto-char beg)))
-
-(defun py-output-filter (strg)
- "Clear STRG from py-shell-input prompt."
- (interactive "*")
- (let (erg)
- (while
- (not (equal erg (setq erg (replace-regexp-in-string
- (concat "\\(\n\\|" py-shell-input-prompt-1-regexp "\\|"
- py-shell-input-prompt-2-regexp "\\|" "^In \\[[0-9]+\\]: *" "\\)") "" strg))))
- (sit-for 0.1 t))
- erg))
-
-
-;; python-components-shell-complete
-
-(defalias 'py-script-complete 'py-shell-complete)
-(defalias 'py-python2-shell-complete 'py-shell-complete)
-(defalias 'py-python3-shell-complete 'py-shell-complete)
-
-(defun py--shell-completion-get-completions (input process completion-code)
- "Retrieve available completions for INPUT using PROCESS.
-Argument COMPLETION-CODE is the python code used to get
-completions on the current context."
- (let ((erg
- (py-send-string-no-output (format completion-code input) process)))
- (if (and erg (> (length erg) 2))
- (setq erg (split-string erg "^'\\|^\"\\|;\\|'$\\|\"$" t))
- (and py-verbose-p (message "py--shell-completion-get-completions: %s" "Don't see a completion")))
- erg))
-
-;; post-command-hook
-;; caused insert-file-contents error lp:1293172
-(defun py--after-change-function (end)
- "Restore window-confiuration after completion.
-
-Takes END"
- (when
- (and (or
- (eq this-command 'completion-at-point)
- (eq this-command 'choose-completion)
- (eq this-command 'choose-completion)
- (eq this-command 'py-shell-complete)
- (and (or
- (eq last-command 'completion-at-point)
- (eq last-command 'choose-completion)
- (eq last-command 'choose-completion)
- (eq last-command 'py-shell-complete))
- (eq this-command 'self-insert-command))))
- ;; (set-window-configuration
- ;; py-last-window-configuration)
- ;; (jump-to-register py-windows-config-register)
- (py-restore-window-configuration)
- )
-
- (goto-char end))
-
-(defalias 'ipython-complete 'py-shell-complete)
-
-(defun py--try-completion-intern (input completion buffer)
- (with-current-buffer buffer
- (let (erg)
- (and (setq erg (try-completion input completion))
- (sit-for 0.1)
- (looking-back input (line-beginning-position))
- (not (string= input erg))
- (setq erg (completion-in-region (match-beginning 0) (match-end 0) completion)))))
- ;; (set-window-configuration py-last-window-configuration)
- )
-
-(defun py--try-completion (input completion)
- "Repeat `try-completion' as long as match are found.
-
-Interal used. Takes INPUT COMPLETION"
- (let (erg newlist)
- (unless (py--try-completion-intern input completion (current-buffer))
- (dolist (elt completion)
- (unless (string= erg elt)
- (push elt newlist)))
- (if (< 1 (length newlist))
- (with-output-to-temp-buffer py-python-completions
- (display-completion-list
- (all-completions input (or newlist completion))))))))
-
-(defun py--shell-insert-completion-maybe (completion input)
- (cond ((eq completion t)
- (and py-verbose-p (message "py--shell-do-completion-at-point %s" "`t' is returned, not completion. Might be a bug.")))
- ((null completion)
- (and py-verbose-p (message "py--shell-do-completion-at-point %s" "Don't see a completion")))
- ((and completion
- (or (and (listp completion)
- (string= input (car completion)))
- (and (stringp completion)
- (string= input completion)))))
- ((and completion (stringp completion)(or (string= input completion) (string= "''" completion))))
- ((and completion (stringp completion))
- (progn (delete-char (- (length input)))
- (insert completion)))
- (t (py--try-completion input completion)))
- )
-
-(defun py--shell-do-completion-at-point (process imports input exception-buffer code)
- "Do completion at point for PROCESS.
-
-Takes PROCESS IMPORTS INPUT EXCEPTION-BUFFER CODE"
- (when imports
- (py-send-string imports process nil t))
- (sit-for 0.1 t)
- (let* ((completion
- (py--shell-completion-get-completions
- input process code)))
- (set-buffer exception-buffer)
- (when completion
- (py--shell-insert-completion-maybe completion input))))
-
-(defun py--complete-base (shell word imports buffer)
- (let* ((proc (or
- ;; completing inside a shell
- (get-buffer-process buffer)
- (and (comint-check-proc shell)
- (get-process shell))
- (prog1
- (get-buffer-process (py-shell nil nil nil shell))
- (sit-for py-new-shell-delay t))))
- ;; (buffer (process-buffer proc))
- (code (if (string-match "[Ii][Pp]ython*" shell)
- (py-set-ipython-completion-command-string shell)
- py-shell-module-completion-code)))
- (py--shell-do-completion-at-point proc imports word buffer code)))
-
-(defun py-shell-complete (&optional shell beg end word fast)
- (interactive)
- (let* ((exception-buffer (current-buffer))
- (pps (parse-partial-sexp
- (or
- (ignore-errors (cdr-safe comint-last-prompt))
- (ignore-errors comint-last-prompt)
- (line-beginning-position))
- (point)))
- (in-string (when (nth 3 pps) (nth 8 pps)))
- (beg
- (save-excursion
- (or beg
- (and in-string
- ;; possible completion of filenames
- (progn
- (goto-char in-string)
- (and
- (save-excursion
- (skip-chars-backward "^ \t\r\n\f") (looking-at "open")))
-
- (skip-chars-forward "\"'") (point)))
- (progn (and (eq (char-before) ?\()(forward-char -1))
- (skip-chars-backward "a-zA-Z0-9_.'") (point)))))
- (end (or end (point)))
- (word (or word (buffer-substring-no-properties beg end)))
- (ausdruck (and (string-match "^/" word) (setq word (substring-no-properties word 1))(concat "\"" word "*\"")))
- ;; when in string, assume looking for filename
- (filenames (and in-string ausdruck
- (list (replace-regexp-in-string "\n" "" (shell-command-to-string (concat "find / -maxdepth 1 -name " ausdruck))))))
- (imports (py-find-imports))
- py-fontify-shell-buffer-p erg)
- (cond (fast (py--fast-complete-base shell word imports))
- ((and in-string filenames)
- (when (setq erg (try-completion (concat "/" word) filenames))
- (delete-region beg end)
- (insert erg)))
- (t (py--complete-base shell word imports exception-buffer)))
- nil))
-
-(defun py-indent-or-complete ()
- "Complete or indent depending on the context.
-
-If cursor is at end of a symbol, try to complete
-Otherwise call `py-indent-line'
-
-If `(use-region-p)' returns t, indent region.
-Use `C-q TAB' to insert a literally TAB-character
-
-In ‘python-mode’ `py-complete-function' is called,
-in (I)Python shell-modes `py-shell-complete'"
- (interactive "*")
- (window-configuration-to-register py-windows-config-register)
- ;; (setq py-last-window-configuration
- ;; (current-window-configuration))
- (cond ((use-region-p)
- (py-indent-region (region-beginning) (region-end)))
- ((or (bolp)
- (member (char-before) (list 9 10 12 13 32 ?: ?\) ?\] ?\}))
- (not (looking-at "[ \t]*$")))
- (py-indent-line))
- ((comint-check-proc (current-buffer))
- ;; (let* ((shell (process-name (get-buffer-process (current-buffer)))))
- (ignore-errors (completion-at-point)))
- (t
- ;; (py-fast-complete)
- (completion-at-point))))
-
- ;; (substring (process-name (get-buffer-process (current-buffer))) 0 (string-match "<" (process-name (get-buffer-process (current-buffer)))))
-;; python-components-pdb
-
-(defun py-execute-statement-pdb ()
- "Execute statement running pdb."
- (interactive)
- (let ((py-python-command-args "-i -m pdb"))
- (py-execute-statement)))
-
-(defun py-execute-region-pdb (beg end)
- "Takes region between BEG END."
- (interactive "r")
- (let ((py-python-command-args "-i -m pdb")))
- (py-execute-region beg end))
-
-(defun py-pdb-execute-statement ()
- "Execute statement running pdb."
- (interactive)
- (let ((stm (progn (py-statement) (car kill-ring))))
- (py-execute-string (concat "import pdb;pdb.run('" stm "')"))))
-
-(defun py-pdb-help ()
- "Print generic pdb.help() message."
- (interactive)
- (py-execute-string "import pdb;pdb.help()"))
-
-;; https://stackoverflow.com/questions/6980749/simpler-way-to-put-pdb-breakpoints-in-python-code
-;; breakpoint at line 3
-;; avoid inserting pdb.set_trace()
-
-;; python -m pdb -c "b 3" -c c your_script.py
-
-(defun py-pdb-break-at-current-line (&optional line)
- "Set breakpoint at current line.
-
-Optional LINE FILE CONDITION"
- (interactive "p")
- (let ((line (or line (py-count-lines))))
- (py-execute-string (concat "import pdb;pdb.break('" line "')"))))
-
-(defun py--pdb-versioned ()
- "Guess existing pdb version from ‘py-shell-name’.
-
-Return \"pdb[VERSION]\" if executable found, just \"pdb\" otherwise"
- (interactive)
- (let ((erg (when (string-match "[23]" py-shell-name)
- ;; versions-part
- (substring py-shell-name (string-match "[23]" py-shell-name)))))
- (if erg
- (cond ((executable-find (concat "pdb" erg))
- (concat "pdb" erg))
- ((and (string-match "\\." erg)
- (executable-find (concat "pdb" (substring erg 0 (string-match "\\." erg)))))
- (concat "pdb" (substring erg 0 (string-match "\\." erg)))))
- "pdb")))
-
-(defun py-pdb (command-line)
- "Run pdb on program FILE in buffer `*gud-FILE*'.
-The directory containing FILE becomes the initial working directory
-and source-file directory for your debugger.
-
-At GNU Linux required pdb version should be detected by `py--pdb-version'
-at Windows configure `py-python-ms-pdb-command'
-
-lp:963253
-Argument COMMAND-LINE TBD."
- (interactive
- (progn
- (require 'gud)
- (list (gud-query-cmdline
- (if (or (eq system-type 'ms-dos)(eq system-type 'windows-nt))
- (car (read-from-string py-python-ms-pdb-command))
- ;; sys.version_info[0]
- ;; (car (read-from-string (py--pdb-version)))
- 'pdb)
- (py--buffer-filename-remote-maybe)))))
- (pdb command-line))
-
-(defun py--pdb-current-executable ()
- "When ‘py-pdb-executable’ is set, return it.
-
-Otherwise return resuslt from `executable-find'"
- (or py-pdb-executable
- (executable-find "pdb")))
-
-(defun py-update-gud-pdb-history ()
- "If pdb is called at a Python buffer, put it's file name at the head of `gud-pdb-history'."
- (interactive)
- (let* (;; PATH/TO/pdb
- (first (cond ((and gud-pdb-history (ignore-errors (car gud-pdb-history)))
- (replace-regexp-in-string "^\\([^ ]+\\) +.+$" "\\1" (car gud-pdb-history)))
- (py-pdb-executable
- py-pdb-executable)
- ((or (eq system-type 'ms-dos)(eq system-type 'windows-nt))
- ;; lp:963253
- "c:/python27/python\ -i\ c:/python27/Lib/pdb.py")
- (t
- (py--pdb-current-executable))))
- ;; file to debug
- (second (cond ((not (ignore-errors
- (py--buffer-filename-remote-maybe)))
- (error "%s" "Buffer must be saved first."))
- ((py--buffer-filename-remote-maybe))
- (t (and gud-pdb-history (stringp (car gud-pdb-history)) (replace-regexp-in-string "^\\([^ ]+\\) +\\(.+\\)$" "\\2" (car gud-pdb-history))))))
- (erg (and first second (concat first " " second))))
- (when erg
- (push erg gud-pdb-history))))
-
-(defadvice pdb (before gud-query-cmdline activate)
- "Provide a better default command line when called interactively."
- (interactive
- (list (gud-query-cmdline py-pdb-path
- ;; (file-name-nondirectory buffer-file-name)
- (file-name-nondirectory (py--buffer-filename-remote-maybe)) ))))
-
-;; tbreak [ ([filename:]lineno | function) [, condition] ]
-;; Same arguments as break, but sets a temporary breakpoint: it
-;; is automatically deleted when first hit.
-
-;; python -m pdb -c "b 3" -c c your_script.py
-
-(defun py-pdb-tbreak ()
- "Insert a temporary break."
- (interactive)
- (let (
- (py-python-command-args '("-i -c \"b 30\" -c c \"eyp.py\""))
- (py-python3-command-args '("-i -c \"b 30\" -c c \"eyp.py\""))
- )
- (py-execute-buffer)))
-
-
-
-(defun py--pdbtrack-overlay-arrow (activation)
- "Activate or de arrow at beginning-of-line in current buffer."
- ;; This was derived/simplified from edebug-overlay-arrow
- (cond (activation
- (setq overlay-arrow-position (make-marker))
- (setq overlay-arrow-string "=>")
- (set-marker overlay-arrow-position (line-beginning-position) (current-buffer))
- (setq py-pdbtrack-is-tracking-p t))
- (overlay-arrow-position
- (setq overlay-arrow-position nil)
- (setq py-pdbtrack-is-tracking-p nil))))
-
-(defun py--pdbtrack-track-stack-file (text)
- "Show the file indicated by the pdb stack entry line, in a separate window.
-
-Activity is disabled if the buffer-local variable
-`py-pdbtrack-do-tracking-p' is nil.
-
-We depend on the pdb input prompt matching `py-pdbtrack-input-prompt'
-at the beginning of the line.
-
-If the traceback target file path is invalid, we look for the most
-recently visited python-mode buffer which either has the name of the
-current function \(or class) or which defines the function \(or
-class). This is to provide for remote scripts, eg, Zope's 'Script
-\(Python)' - put a _copy_ of the script in a buffer named for the
-script, and set to python-mode, and pdbtrack will find it.)"
- ;; Instead of trying to piece things together from partial text
- ;; (which can be almost useless depending on Emacs version), we
- ;; monitor to the point where we have the next pdb prompt, and then
- ;; check all text from comint-last-input-end to process-mark.
- ;;
- ;; Also, we're very conservative about clearing the overlay arrow,
- ;; to minimize residue. This means, for instance, that executing
- ;; other pdb commands wipe out the highlight. You can always do a
- ;; 'where' (aka 'w') command to reveal the overlay arrow.
- (let* ((origbuf (current-buffer))
- (currproc (get-buffer-process origbuf)))
-
- (if (not (and currproc py-pdbtrack-do-tracking-p))
- (py--pdbtrack-overlay-arrow nil)
-
- (let* ((procmark (process-mark currproc))
- (block (buffer-substring (max comint-last-input-end
- (- procmark
- py-pdbtrack-track-range))
- procmark))
- target target_fname target_lineno target_buffer)
-
- (if (not (string-match (concat py-pdbtrack-input-prompt "$") block))
- (py--pdbtrack-overlay-arrow nil)
-
- (setq target (py--pdbtrack-get-source-buffer block))
-
- (if (stringp target)
- (message "pdbtrack: %s" target)
-
- (setq target_lineno (car target))
- (setq target_buffer (cadr target))
- (setq target_fname
- (py--buffer-filename-remote-maybe target_buffer))
- (switch-to-buffer-other-window target_buffer)
- (goto-char (point-min))
- (forward-line (1- target_lineno))
- (message "pdbtrack: line %s, file %s" target_lineno target_fname)
- (py--pdbtrack-overlay-arrow t)
- (pop-to-buffer origbuf t)))))))
-
-(defun py--pdbtrack-map-filename (filename)
-
- (let
- ((replacement-val (assoc-default
- filename py-pdbtrack-filename-mapping
- (lambda (mapkey path)
- (string-match
- (concat "^" (regexp-quote mapkey))
- path)))
- ))
- (if (not (eq replacement-val nil))
- (replace-match replacement-val 't 't filename)
- filename)))
-
-(defun py--pdbtrack-get-source-buffer (block)
- "Return line number and buffer of code indicated by block's traceback text.
-
-We look first to visit the file indicated in the trace.
-
-Failing that, we look for the most recently visited python-mode buffer
-with the same name or having the named function.
-
-If we're unable find the source code we return a string describing the
-problem as best as we can determine."
-
- (if (and (not (string-match py-pdbtrack-stack-entry-regexp block))
- ;; pydb integration still to be done
- ;; (not (string-match py-pydbtrack-stack-entry-regexp block))
- )
- (prog1
- "Traceback cue not found"
- (message "Block: %s" block))
- (let* ((remote-prefix (or (file-remote-p default-directory) ""))
- (filename (concat remote-prefix
- (match-string
- py-pdbtrack-marker-regexp-file-group block)))
- (lineno (string-to-number (match-string
- py-pdbtrack-marker-regexp-line-group
- block)))
- (funcname (match-string py-pdbtrack-marker-regexp-funcname-group
- block))
- funcbuffer)
-
- (cond ((string= filename "")
- (format "(Skipping empty filename)"))
-
- ((file-exists-p filename)
- (list lineno (find-file-noselect filename)))
-
- ((file-exists-p (py--pdbtrack-map-filename filename))
- (list lineno (find-file-noselect (py--pdbtrack-map-filename filename))))
-
- ((setq funcbuffer (py--pdbtrack-grub-for-buffer funcname lineno))
- (if (string-match "/Script (Python)$" filename)
- ;; Add in number of lines for leading '##' comments:
- (setq lineno
- (+ lineno
- (save-excursion
- (with-current-buffer funcbuffer
- (count-lines
- (point-min)
- (max (point-min)
- (string-match "^\\([^#]\\|#[^#]\\|#$\\)"
- (buffer-substring (point-min)
- (point-max))))))))))
- (list lineno funcbuffer))
-
- ((= (elt filename 0) ?\<)
- (format "(Non-file source: '%s')" filename))
-
- (t (format "Not found: %s(), %s" funcname filename))))))
-
-(defun py--pdbtrack-grub-for-buffer (funcname lineno)
- "Find most recent buffer itself named or having function funcname.
-
-We walk the buffer-list history for python-mode buffers that are
-named for funcname or define a function funcname."
- (let ((buffers (buffer-list))
- buf
- got)
- (while (and buffers (not got))
- (setq buf (car buffers)
- buffers (cdr buffers))
- (if (and (save-excursion
- (with-current-buffer buf
- (string= major-mode "python-mode")))
- (or (string-match funcname (buffer-name buf))
- (string-match (concat "^\\s-*\\(def\\|class\\)\\s-+"
- funcname "\\s-*(")
- (save-excursion
- (with-current-buffer buf
- (buffer-substring (point-min)
- (point-max)))))))
- (setq got buf)))
- got))
-
-
-;; pdbtrack functions
-
-(defun py-pdbtrack-set-tracked-buffer (file-name)
- "Set the buffer for FILE-NAME as the tracked buffer.
-Internally it uses the `py-pdbtrack-tracked-buffer' variable.
-Returns the tracked buffer."
- (let* ((file-name-prospect (concat (file-remote-p default-directory)
- file-name))
- (file-buffer (get-file-buffer file-name-prospect)))
- (if file-buffer
- (setq py-pdbtrack-tracked-buffer file-buffer)
- (cond
- ((file-exists-p file-name-prospect)
- (setq file-buffer (find-file-noselect file-name-prospect)))
- ((and (not (equal file-name file-name-prospect))
- (file-exists-p file-name))
- ;; Fallback to a locally available copy of the file.
- (setq file-buffer (find-file-noselect file-name-prospect))))
- (when (not (member file-buffer py-pdbtrack-buffers-to-kill))
- (add-to-list 'py-pdbtrack-buffers-to-kill file-buffer)))
- file-buffer))
-
-(defun py-pdbtrack-toggle-stack-tracking (arg)
- "Set variable `py-pdbtrack-do-tracking-p'. "
- (interactive "P")
- ;; (if (not (get-buffer-process (current-buffer)))
- ;; (error "No process associated with buffer '%s'" (current-buffer)))
-
- ;; missing or 0 is toggle, >0 turn on, <0 turn off
- (cond ((not arg)
- (setq py-pdbtrack-do-tracking-p (not py-pdbtrack-do-tracking-p)))
- ((zerop (prefix-numeric-value arg))
- (setq py-pdbtrack-do-tracking-p nil))
- ((> (prefix-numeric-value arg) 0)
- (setq py-pdbtrack-do-tracking-p t)))
- ;; (if py-pdbtrack-do-tracking-p
- ;; (progn
- ;; (add-hook 'comint-output-filter-functions 'py--pdbtrack-track-stack-file t)
- ;; (remove-hook 'comint-output-filter-functions 'python-pdbtrack-track-stack-file t))
- ;; (remove-hook 'comint-output-filter-functions 'py--pdbtrack-track-stack-file t)
- ;; )
- (message "%sabled Python's pdbtrack"
- (if py-pdbtrack-do-tracking-p "En" "Dis")))
-
-(defun turn-on-pdbtrack ()
- (interactive)
- (py-pdbtrack-toggle-stack-tracking 1))
-
-(defun turn-off-pdbtrack ()
- (interactive)
- (py-pdbtrack-toggle-stack-tracking 0))
-
-
-
-(if pdb-track-stack-from-shell-p
- (add-hook 'comint-output-filter-functions 'py--pdbtrack-track-stack-file t)
- (remove-hook 'comint-output-filter-functions 'py--pdbtrack-track-stack-file t))
-
-
-(defun py-pdbtrack-comint-output-filter-function (output)
- "Move overlay arrow to current pdb line in tracked buffer.
-Argument OUTPUT is a string with the output from the comint process."
- (when (and pdb-track-stack-from-shell-p (not (string= output "")))
- (let* ((full-output (ansi-color-filter-apply
- (buffer-substring comint-last-input-end (point-max))))
- (line-number)
- (file-name
- (with-temp-buffer
- (insert full-output)
- ;; When the debugger encounters a pdb.set_trace()
- ;; command, it prints a single stack frame. Sometimes
- ;; it prints a bit of extra information about the
- ;; arguments of the present function. When ipdb
- ;; encounters an exception, it prints the _entire_ stack
- ;; trace. To handle all of these cases, we want to find
- ;; the _last_ stack frame printed in the most recent
- ;; batch of output, then jump to the corresponding
- ;; file/line number.
- (goto-char (point-max))
- (when (re-search-backward py-pdbtrack-stacktrace-info-regexp nil t)
- (setq line-number (string-to-number
- (match-string-no-properties 2)))
- (match-string-no-properties 1)))))
- (if (and file-name line-number)
- (let* ((tracked-buffer
- (py-pdbtrack-set-tracked-buffer file-name))
- (shell-buffer (current-buffer))
- (tracked-buffer-window (get-buffer-window tracked-buffer))
- (tracked-buffer-line-pos))
- (with-current-buffer tracked-buffer
- (set (make-local-variable 'overlay-arrow-string) "=>")
- (set (make-local-variable 'overlay-arrow-position) (make-marker))
- (setq tracked-buffer-line-pos (progn
- (goto-char (point-min))
- (forward-line (1- line-number))
- (point-marker)))
- (when tracked-buffer-window
- (set-window-point
- tracked-buffer-window tracked-buffer-line-pos))
- (set-marker overlay-arrow-position tracked-buffer-line-pos))
- (pop-to-buffer tracked-buffer)
- (switch-to-buffer-other-window shell-buffer))
- (when py-pdbtrack-tracked-buffer
- (with-current-buffer py-pdbtrack-tracked-buffer
- (set-marker overlay-arrow-position nil))
- (mapc #'(lambda (buffer)
- (ignore-errors (kill-buffer buffer)))
- py-pdbtrack-buffers-to-kill)
- (setq py-pdbtrack-tracked-buffer nil
- py-pdbtrack-buffers-to-kill nil)))))
- output)
-
-;; python-components-pdbtrack
-
-
-;; python-components-help
-(defvar py-eldoc-string-code
- "__PYDOC_get_help('''%s''')\n"
- "Python code used to get a string with the documentation of an object.")
-
-;; Info-look functionality.
-(require 'info-look)
-(eval-when-compile (require 'info))
-
-(defun py-info-lookup-symbol ()
- "Call ‘info-lookup-symbol’.
-
-Sends help if stuff is missing."
- (interactive)
- (if (functionp 'pydoc-info-add-help)
- (call-interactively 'info-lookup-symbol)
- (message "pydoc-info-add-help not found. Please check INSTALL-INFO-FILES")))
-
-(info-lookup-add-help
- :mode 'python-mode
- :regexp "[[:alnum:]_]+"
- :doc-spec
-'(("(python)Index" nil "")))
-
-(defun python-after-info-look ()
- "Set up info-look for Python.
-
-Tries to take account of versioned Python Info files, e.g. Debian's
-python2.5-ref.info.gz.
-Used with ‘eval-after-load’."
- (let* ((version (let ((s (shell-command-to-string (concat py-python-command
- " -V"))))
- (string-match "^Python \\([0-9]+\\.[0-9]+\\>\\)" s)
- (match-string 1 s)))
- ;; Whether info files have a Python version suffix, e.g. in Debian.
- (versioned
- (with-temp-buffer
- (Info-mode)
- ;; First look for Info files corresponding to the version
- ;; of the interpreter we're running.
- (condition-case ()
- ;; Don't use ‘info’ because it would pop-up a *info* buffer.
- (progn
- (Info-goto-node (format "(python%s-lib)Miscellaneous Index"
- version))
- t)
- (error
- ;; Otherwise see if we actually have an un-versioned one.
- (condition-case ()
- (progn
- (Info-goto-node
- (format "(python-lib)Miscellaneous Index" version))
- nil)
- (error
- ;; Otherwise look for any versioned Info file.
- (condition-case ()
- (let (found)
- (dolist (dir (or Info-directory-list
- Info-default-directory-list))
- (unless found
- (let ((file (car (file-expand-wildcards
- (expand-file-name "python*-lib*"
- dir)))))
- (if (and file
- (string-match
- "\\<python\\([0-9]+\\.[0-9]+\\>\\)-"
- file))
- (setq version (match-string 1 file)
- found t)))))
- found)
- (error)))))))))
- (info-lookup-maybe-add-help
- :mode 'python-mode
- :regexp "[[:alnum:]_]+"
- :doc-spec
- ;; Fixme: Can this reasonably be made specific to indices with
- ;; different rules? Is the order of indices optimal?
- ;; (Miscellaneous in -ref first prefers lookup of keywords, for
- ;; instance.)
- (if versioned
- ;; The empty prefix just gets us highlighted terms.
- `((,(concat "(python" version "-ref)Miscellaneous Index"))
- (,(concat "(python" version "-ref)Module Index"))
- (,(concat "(python" version "-ref)Function-Method-Variable Index"))
- (,(concat "(python" version "-ref)Class-Exception-Object Index"))
- (,(concat "(python" version "-lib)Module Index"))
- (,(concat "(python" version "-lib)Class-Exception-Object Index"))
- (,(concat "(python" version "-lib)Function-Method-Variable Index"))
- (,(concat "(python" version "-lib)Miscellaneous Index")))
- '(("(python-ref)Miscellaneous Index")
- ("(python-ref)Module Index")
- ("(python-ref)Function-Method-Variable Index")
- ("(python-ref)Class-Exception-Object Index")
- ("(python-lib)Module Index")
- ("(python-lib)Class-Exception-Object Index")
- ("(python-lib)Function-Method-Variable Index")
- ("(python-lib)Miscellaneous Index"))))))
-
-;; (if (featurep 'info-look)
-;; (python-after-info-look))
-
-;; (eval-after-load "info-look" '(python-after-info-look))
-
-;; ;
-(defun py--warn-tmp-files-left ()
- "Detect and warn about file of form \"py11046IoE\" in py-temp-directory."
- (let ((erg1 (file-readable-p (concat py-temp-directory (char-to-string py-separator-char) (car (directory-files py-temp-directory nil "py[[:alnum:]]+$"))))))
- (when (and py-verbose-p erg1)
- (message "py--warn-tmp-files-left: %s ?" (concat py-temp-directory (char-to-string py-separator-char) (car (directory-files py-temp-directory nil "py[[:alnum:]]*$")))))))
-
-(defun py-fetch-docu ()
- "Lookup in current buffer for the doku for the symbol at point.
-
-Useful for newly defined symbol, not known to python yet."
- (interactive)
- (let* ((symb (prin1-to-string (symbol-at-point)))
- erg)
- (save-restriction
- (widen)
- (goto-char (point-min))
- (when (re-search-forward (concat py-def-or-class-re " *" symb) nil (quote move) 1)
- (forward-line 1)
- (when (looking-at "[ \t]*\"\"\"\\|[ \t]*'''\\|[ \t]*'[^]+\\|[ \t]*\"[^\"]+")
- (goto-char (match-end 0))
- (setq erg (buffer-substring-no-properties (match-beginning 0) (re-search-forward "\"\"\"\\|'''" nil 'move)))
- (when erg
- (set-buffer (get-buffer-create "*Python-Help*"))
- (erase-buffer)
- ;; (when (interactive-p) (switch-to-buffer (current-buffer)))
- (insert erg)))))))
-
-(defun py-info-current-defun (&optional include-type)
- "Return name of surrounding function.
-
-Use Python compatible dotted expression syntax
-Optional argument INCLUDE-TYPE indicates to include the type of the defun.
-This function is compatible to be used as
-‘add-log-current-defun-function’ since it returns nil if point is
-not inside a defun."
- (interactive)
- (let ((names '())
- (min-indent)
- (first-run t))
- (save-restriction
- (widen)
- (save-excursion
- (goto-char (line-end-position))
- (forward-comment -9999)
- (setq min-indent (current-indentation))
- (while (py-beginning-of-def-or-class)
- (when (or (< (current-indentation) min-indent)
- first-run)
- (setq first-run nil)
- (setq min-indent (current-indentation))
- (looking-at py-def-or-class-re)
- (setq names (cons
- (if (not include-type)
- (match-string-no-properties 1)
- (mapconcat 'identity
- (split-string
- (match-string-no-properties 0)) " "))
- names))))))
- (when names
- (mapconcat (lambda (strg) strg) names "."))))
-
-(defalias 'py-describe-symbol 'py-help-at-point)
-(defun py--help-at-point-intern (sym orig)
- (let* ((origfile (py--buffer-filename-remote-maybe))
- ;; (temp (md5 (buffer-name)))
- (buffer-name "*Python-Help*")
- (cmd (py-find-imports))
- ;; if symbol is defined in current buffer, go to
- (erg (progn (goto-char (point-min))
- (when
- (re-search-forward (concat "^[ \t]*def " sym "(") nil t 1)
- (forward-char -2)
- (point)))))
- (if erg
- (progn (push-mark orig) (push-mark (point))
- (when (and (called-interactively-p 'any) py-verbose-p) (message "Jump to previous position with %s" "C-u C-<SPC> C-u C-<SPC>")))
- (goto-char orig))
- (setq cmd (concat cmd "\nimport pydoc\n"
- ))
- (when (not py-remove-cwd-from-path)
- (setq cmd (concat cmd "import sys\n"
- "sys.path.insert(0, '"
- (file-name-directory origfile) "')\n")))
- (setq cmd (concat cmd "pydoc.help('" sym "')\n"))
- (ignore-errors (py-kill-buffer-unconditional buffer-name))
- (with-temp-buffer-window
- (set-buffer (get-buffer-create buffer-name))
- (setq inhibit-read-only t)
- (setq inhibit-point-motion-hooks t)
- (erase-buffer)
- (when py-debug-p (message "%s" (current-buffer)))
- (py-send-string cmd nil t)
- (insert py-result)
- )))
-
-(defun py-help-at-point ()
- "Print help on symbol at point.
-
-If symbol is defined in current buffer, jump to it's definition"
- (interactive)
- (let* ((py-cleanup-p t)
- (orig (point))
- (beg (and (use-region-p) (region-beginning)))
- (end (and (use-region-p) (region-end)))
- (symbol
- (or (and beg end
- (buffer-substring-no-properties beg end))
- ;; (thing-at-point 'symbol t)
- (py-symbol-at-point))))
- ;; avoid repeated call at identic pos
- (unless (eq orig (ignore-errors py-last-position))
- (setq py-last-position orig))
- ;; (unless (member (get-buffer-window "*Python-Help*") (window-list))
- ;; (window-configuration-to-register py-windows-config-register))
- (and (looking-back "(" (line-beginning-position))(not (looking-at "\\sw")) (forward-char -1))
- (if (or (eq (face-at-point) 'font-lock-string-face)(eq (face-at-point) 'font-lock-comment-face))
- (progn
- (py-restore-window-configuration)
- (goto-char orig))
- (if
- ;; (or (< 0 (abs (skip-chars-backward "a-zA-Z0-9_." (line-beginning-position))))(looking-at "\\sw"))
- (not (string= "" symbol))
- (py--help-at-point-intern symbol orig)
- ;; (py-restore-window-configuration)
- ))))
-
-;; Documentation functions
-
-;; dump the long form of the mode blurb; does the usual doc escapes,
-;; plus lines of the form ^[vc]:name\$ to suck variable & command docs
-;; out of the right places, along with the keys they're on & current
-;; values
-
-(defun py--dump-help-string (str)
- (with-output-to-temp-buffer "*Help*"
- (let ((locals (buffer-local-variables))
- funckind funcname func funcdoc
- (start 0) mstart end
- keys)
- (while (string-match "^%\\([vc]\\):\\(.+\\)\n" str start)
- (setq mstart (match-beginning 0) end (match-end 0)
- funckind (substring str (match-beginning 1) (match-end 1))
- funcname (substring str (match-beginning 2) (match-end 2))
- func (intern funcname))
- (princ (substitute-command-keys (substring str start mstart)))
- (cond
- ((equal funckind "c") ; command
- (setq funcdoc (documentation func)
- keys (concat
- "Key(s): "
- (mapconcat 'key-description
- (where-is-internal func python-mode-map)
- ", "))))
- ((equal funckind "v") ; variable
- (setq funcdoc (documentation-property func 'variable-documentation)
- keys (if (assq func locals)
- (concat
- "Local/Global values: "
- (prin1-to-string (symbol-value func))
- " / "
- (prin1-to-string (default-value func)))
- (concat
- "Value: "
- (prin1-to-string (symbol-value func))))))
- (t ; unexpected
- (error "Error in py--dump-help-string, tag %s" funckind)))
- (princ (format "\n-> %s:\t%s\t%s\n\n"
- (if (equal funckind "c") "Command" "Variable")
- funcname keys))
- (princ funcdoc)
- (terpri)
- (setq start end))
- (princ (substitute-command-keys (substring str start)))
- ;; (and comint-vars-p (py-report-comint-variable-setting))
- )
- (if (featurep 'xemacs) (print-help-return-message)
- (help-print-return-message))))
-
-(defun py-describe-mode ()
- "Dump long form of ‘python-mode’ docs."
- (interactive)
- (py--dump-help-string "Major mode for editing Python files.
-Knows about Python indentation, tokens, comments and continuation lines.
-Paragraphs are separated by blank lines only.
-
-Major sections below begin with the string ‘@’; specific function and
-variable docs begin with ->.
-
-@EXECUTING PYTHON CODE
-
-\\[py-execute-import-or-reload]\timports or reloads the file in the Python interpreter
-\\[py-execute-buffer]\tsends the entire buffer to the Python interpreter
-\\[py-execute-region]\tsends the current region
-\\[py-execute-def-or-class]\tsends the current function or class definition
-\\[py-execute-string]\tsends an arbitrary string
-\\[py-shell]\tstarts a Python interpreter window; this will be used by
-\tsubsequent Python execution commands
-%c:py-execute-import-or-reload
-%c:py-execute-buffer
-%c:py-execute-region
-%c:py-execute-def-or-class
-%c:py-execute-string
-%c:py-shell
-
-@VARIABLES
-
-py-install-directory\twherefrom ‘python-mode’ looks for extensions
-py-indent-offset\tindentation increment
-py-block-comment-prefix\tcomment string used by comment-region
-
-py-shell-name\tshell command to invoke Python interpreter
-py-temp-directory\tdirectory used for temp files (if needed)
-
-py-beep-if-tab-change\tring the bell if tab-width is changed
-%v:py-install-directory
-%v:py-indent-offset
-%v:py-block-comment-prefix
-%v:py-shell-name
-%v:py-temp-directory
-%v:py-beep-if-tab-change
-
-@KINDS OF LINES
-
-Each physical line in the file is either a ‘continuation line’ (the
-preceding line ends with a backslash that's not part of a comment, or
-the paren/bracket/brace nesting level at the start of the line is
-non-zero, or both) or an ‘initial line’ (everything else).
-
-An initial line is in turn a ‘blank line’ (contains nothing except
-possibly blanks or tabs), a ‘comment line’ (leftmost non-blank
-character is ‘#’), or a ‘code line’ (everything else).
-
-Comment Lines
-
-Although all comment lines are treated alike by Python, Python mode
-recognizes two kinds that act differently with respect to indentation.
-
-An ‘indenting comment line’ is a comment line with a blank, tab or
-nothing after the initial ‘#’. The indentation commands (see below)
-treat these exactly as if they were code lines: a line following an
-indenting comment line will be indented like the comment line. All
-other comment lines (those with a non-whitespace character immediately
-following the initial ‘#’) are ‘non-indenting comment lines’, and
-their indentation is ignored by the indentation commands.
-
-Indenting comment lines are by far the usual case, and should be used
-whenever possible. Non-indenting comment lines are useful in cases
-like these:
-
-\ta = b # a very wordy single-line comment that ends up being
-\t #... continued onto another line
-
-\tif a == b:
-##\t\tprint 'panic!' # old code we've ‘commented out’
-\t\treturn a
-
-Since the ‘#...’ and ‘##’ comment lines have a non-whitespace
-character following the initial ‘#’, Python mode ignores them when
-computing the proper indentation for the next line.
-
-Continuation Lines and Statements
-
-The ‘python-mode’ commands generally work on statements instead of on
-individual lines, where a ‘statement’ is a comment or blank line, or a
-code line and all of its following continuation lines (if any)
-considered as a single logical unit. The commands in this mode
-generally (when it makes sense) automatically move to the start of the
-statement containing point, even if point happens to be in the middle
-of some continuation line.
-
-@INDENTATION
-
-Primarily for entering new code:
-\t\\[indent-for-tab-command]\t indent line appropriately
-\t\\[py-newline-and-indent]\t insert newline, then indent
-\t\\[py-electric-backspace]\t reduce indentation, or delete single character
-
-Primarily for reindenting existing code:
-\t\\[py-guess-indent-offset]\t guess py-indent-offset from file content; change locally
-\t\\[universal-argument] \\[py-guess-indent-offset]\t ditto, but change globally
-
-\t\\[py-indent-region]\t reindent region to match its context
-\t\\[py-shift-left]\t shift line or region left by py-indent-offset
-\t\\[py-shift-right]\t shift line or region right by py-indent-offset
-
-Unlike most programming languages, Python uses indentation, and only
-indentation, to specify block structure. Hence the indentation supplied
-automatically by ‘python-mode’ is just an educated guess: only you know
-the block structure you intend, so only you can supply correct
-indentation.
-
-The \\[indent-for-tab-command] and \\[py-newline-and-indent] keys try to suggest plausible indentation, based on
-the indentation of preceding statements. E.g., assuming
-py-indent-offset is 4, after you enter
-\tif a > 0: \\[py-newline-and-indent]
-the cursor will be moved to the position of the ‘_’ (_ is not a
-character in the file, it's just used here to indicate the location of
-the cursor):
-\tif a > 0:
-\t _
-If you then enter ‘c = d’ \\[py-newline-and-indent], the cursor will move
-to
-\tif a > 0:
-\t c = d
-\t _
-‘python-mode’ cannot know whether that's what you intended, or whether
-\tif a > 0:
-\t c = d
-\t_
-was your intent. In general, ‘python-mode’ either reproduces the
-indentation of the (closest code or indenting-comment) preceding
-statement, or adds an extra py-indent-offset blanks if the preceding
-statement has ‘:’ as its last significant (non-whitespace and non-
-comment) character. If the suggested indentation is too much, use
-\\[py-electric-backspace] to reduce it.
-
-Continuation lines are given extra indentation. If you don't like the
-suggested indentation, change it to something you do like, and Python-
-mode will strive to indent later lines of the statement in the same way.
-
-If a line is a continuation line by virtue of being in an unclosed
-paren/bracket/brace structure (‘list’, for short), the suggested
-indentation depends on whether the current line contains the first item
-in the list. If it does, it's indented py-indent-offset columns beyond
-the indentation of the line containing the open bracket. If you don't
-like that, change it by hand. The remaining items in the list will mimic
-whatever indentation you give to the first item.
-
-If a line is a continuation line because the line preceding it ends with
-a backslash, the third and following lines of the statement inherit their
-indentation from the line preceding them. The indentation of the second
-line in the statement depends on the form of the first (base) line: if
-the base line is an assignment statement with anything more interesting
-than the backslash following the leftmost assigning ‘=’, the second line
-is indented two columns beyond that ‘=’. Else it's indented to two
-columns beyond the leftmost solid chunk of non-whitespace characters on
-the base line.
-
-Warning: indent-region should not normally be used! It calls \\[indent-for-tab-command]
-repeatedly, and as explained above, \\[indent-for-tab-command] can't guess the block
-structure you intend.
-%c:indent-for-tab-command
-%c:py-newline-and-indent
-%c:py-electric-backspace
-
-The next function may be handy when editing code you didn't write:
-%c:py-guess-indent-offset
-
-The remaining ‘indent’ functions apply to a region of Python code. They
-assume the block structure (equals indentation, in Python) of the region
-is correct, and alter the indentation in various ways while preserving
-the block structure:
-%c:py-indent-region
-%c:py-shift-left
-%c:py-shift-right
-
-@MARKING & MANIPULATING REGIONS OF CODE
-
-\\[py-mark-block]\t mark block of lines
-\\[py-mark-def-or-class]\t mark smallest enclosing def
-\\[universal-argument] \\[py-mark-def-or-class]\t mark smallest enclosing class
-\\[comment-region]\t comment out region of code
-\\[universal-argument] \\[comment-region]\t uncomment region of code
-%c:py-mark-block
-%c:py-mark-def-or-class
-%c:comment-region
-
-@MOVING POINT
-
-\\[py-previous-statement]\t move to statement preceding point
-\\[py-next-statement]\t move to statement following point
-\\[py-goto-block-up]\t move up to start of current block
-\\[py-beginning-of-def-or-class]\t move to start of def
-\\[universal-argument] \\[py-beginning-of-def-or-class]\t move to start of class
-\\[py-end-of-def-or-class]\t move to end of def
-\\[universal-argument] \\[py-end-of-def-or-class]\t move to end of class
-
-The first two move to one statement beyond the statement that contains
-point. A numeric prefix argument tells them to move that many
-statements instead. Blank lines, comment lines, and continuation lines
-do not count as ‘statements’ for these commands. So, e.g., you can go
-to the first code statement in a file by entering
-\t\\[beginning-of-buffer]\t to move to the top of the file
-\t\\[py-next-statement]\t to skip over initial comments and blank lines
-Or do \\[py-previous-statement] with a huge prefix argument.
-%c:py-previous-statement
-%c:py-next-statement
-%c:py-goto-block-up
-%c:py-beginning-of-def-or-class
-%c:py-end-of-def-or-class
-
-@LITTLE-KNOWN EMACS COMMANDS PARTICULARLY USEFUL IN PYTHON MODE
-
-\\[indent-new-comment-line] is handy for entering a multi-line comment.
-
-\\[set-selective-display] with a ‘small’ prefix arg is ideally suited for viewing the
-overall class and def structure of a module.
-
-‘\\[back-to-indentation]’ moves point to a line's first non-blank character.
-
-‘\\[indent-relative]’ is handy for creating odd indentation.
-
-@OTHER EMACS HINTS
-
-If you don't like the default value of a variable, change its value to
-whatever you do like by putting a ‘setq’ line in your .emacs file.
-E.g., to set the indentation increment to 4, put this line in your
-.emacs:
-\t(setq py-indent-offset 4)
-To see the value of a variable, do ‘\\[describe-variable]’ and enter the variable
-name at the prompt.
-
-When entering a key sequence like ‘C-c C-n’, it is not necessary to
-release the CONTROL key after doing the ‘C-c’ part -- it suffices to
-press the CONTROL key, press and release ‘c’ (while still holding down
-CONTROL), press and release ‘n’ (while still holding down CONTROL), &
-then release CONTROL.
-
-Entering Python mode calls with no arguments the value of the variable
-‘python-mode-hook’, if that value exists and is not nil; for backward
-compatibility it also tries ‘py-mode-hook’; see the ‘Hooks’ section of
-the Elisp manual for details.
-
-Obscure: When python-mode is first loaded, it looks for all bindings
-to newline-and-indent in the global keymap, and shadows them with
-local bindings to py-newline-and-indent."))
-
-;; (require 'info-look)
-;; The info-look package does not always provide this function (it
-;; appears this is the case with XEmacs 21.1)
-(when (fboundp 'info-lookup-maybe-add-help)
- (info-lookup-maybe-add-help
- :mode 'python-mode
- :regexp "[a-zA-Z0-9_]+"
- :doc-spec '(("(python-lib)Module Index")
- ("(python-lib)Class-Exception-Object Index")
- ("(python-lib)Function-Method-Variable Index")
- ("(python-lib)Miscellaneous Index"))))
-
-(defun py--find-definition-in-source (sourcefile symbol)
- (called-interactively-p 'any) (message "sourcefile: %s" sourcefile)
- (when (find-file sourcefile)
- ;; (if (stringp py-separator-char)
- ;; py-separator-char
- ;; (char-to-string py-separator-char))
-
- (goto-char (point-min))
- (when
- (or (re-search-forward (concat py-def-or-class-re symbol) nil t 1)
- (progn
- ;; maybe a variable definition?
- (goto-char (point-min))
- (re-search-forward (concat "^.+ " symbol) nil t 1)))
- (push-mark)
- (goto-char (match-beginning 0))
- (exchange-point-and-mark))))
-
-;; Find function stuff, lifted from python.el
-(defalias 'py-find-function 'py-find-definition)
-(defun py--find-definition-question-type (symbol imports)
- (let (erg)
- (cond ((setq erg (py-send-string (concat "import inspect;inspect.isbuiltin(\"" symbol "\")"))))
- (t (setq erg (py-send-string (concat imports "import inspect;inspect.getmodule(\"" symbol "\")")))))
- erg))
-
-(defun py-find-definition (&optional symbol)
- "Find source of definition of SYMBOL.
-
-Interactively, prompt for SYMBOL."
- (interactive)
- ;; (set-register 98888888 (list (current-window-configuration) (point-marker)))
- (let* (;; end
- ;; (last-window-configuration
- ;; (current-window-configuration))
- (orig (point))
- ;; (exception-buffer (current-buffer))
- (imports (py-find-imports))
- (symbol-raw (or symbol (with-syntax-table py-dotted-expression-syntax-table
- (current-word))))
- ;; (enable-recursive-minibuffers t)
- (symbol (if (interactive-p)
- (read-string (format "Find location of (default %s): " symbol-raw)
- symbol-raw nil symbol-raw)
- symbol-raw))
- (local (progn (goto-char (point-min)) (re-search-forward (concat "^[ \t]*" "\\(def\\|class\\)" "[ \t]" symbol) orig t))))
- ;; ismethod(), isclass(), isfunction() or isbuiltin()
- ;; ismethod isclass isfunction isbuiltin)
- (if local
- (progn
- (goto-char orig)
- (split-window-vertically)
- (other-buffer)
- (goto-char local)
- (beginning-of-line)
- (push-mark)
- (message "%s" (current-buffer))
- (exchange-point-and-mark))
- (with-help-window (help-buffer)
- (princ (py--find-definition-question-type symbol imports))))))
-
-(defun py-find-imports ()
- "Find top-level imports.
-
-Returns imports"
- (interactive)
- (let (imports erg)
- (save-excursion
- (if (eq major-mode 'comint-mode)
- (progn
- (re-search-backward comint-prompt-regexp nil t 1)
- (goto-char (match-end 0))
- (while (re-search-forward
- "import *[A-Za-z_][A-Za-z_0-9].*\\|^from +[A-Za-z_][A-Za-z_0-9.]+ +import .*" nil t)
- (setq imports
- (concat
- imports
- (replace-regexp-in-string
- "[\\]\r?\n?\s*" ""
- (buffer-substring-no-properties (match-beginning 0) (point))) ";")))
- (when (ignore-errors (string-match ";" imports))
- (setq imports (split-string imports ";" t))
- (dolist (ele imports)
- (and (string-match "import" ele)
- (if erg
- (setq erg (concat erg ";" ele))
- (setq erg ele)))
- (setq imports erg))))
- (goto-char (point-min))
- (while (re-search-forward
- "^import *[A-Za-z_][A-Za-z_0-9].*\\|^from +[A-Za-z_][A-Za-z_0-9.]+ +import .*" nil t)
- (unless (py--end-of-statement-p)
- (py-forward-statement))
- (setq imports
- (concat
- imports
- (replace-regexp-in-string
- "[\\]\r*\n*\s*" ""
- (buffer-substring-no-properties (match-beginning 0) (point))) ";")))))
- ;; (and imports
- ;; (setq imports (replace-regexp-in-string ";$" "" imports)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" imports))
- imports))
-
-(defun py-update-imports ()
- "Return imports.
-
-Imports done are displayed in message buffer."
- (interactive)
- (save-excursion
- (let (
- (orig (point))
- (erg (py-find-imports)))
- (goto-char orig)
- ;; (when (called-interactively-p 'any)
- ;; (switch-to-buffer (current-buffer))
- ;; (message "%s" erg))
- erg)))
-
-;; Code-Checker
-;; pep8
-(defalias 'pep8 'py-pep8-run)
-(defun py-pep8-run (command)
- "*Run pep8 using COMMAND, check formatting - default on the file currently visited."
- (interactive
- (let ((default
- (if (py--buffer-filename-remote-maybe)
- (format "%s %s %s" py-pep8-command
- (mapconcat 'identity py-pep8-command-args " ")
- (py--buffer-filename-remote-maybe))
- (format "%s %s" py-pep8-command
- (mapconcat 'identity py-pep8-command-args " "))))
- (last (when py-pep8-history
- (let* ((lastcmd (car py-pep8-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (py--buffer-filename-remote-maybe) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pep8 like this: "
- (if last
- last
- default)
- 'py-pep8-history)
- (read-string "Run pep8 like this: "
- (if last
- last
- default)
- 'py-pep8-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defun py-pep8-help ()
- "Display pep8 command line help messages."
- (interactive)
- (set-buffer (get-buffer-create "*pep8-Help*"))
- (erase-buffer)
- (shell-command "pep8 --help" "*pep8-Help*"))
-
-;; Pylint
-(defalias 'pylint 'py-pylint-run)
-(defun py-pylint-run (command)
- "Run pylint from COMMAND (default on the file currently visited).
-
-For help see \\[pylint-help] resp. \\[pylint-long-help].
-Home-page: http://www.logilab.org/project/pylint"
- (interactive
- (let ((default (format "%s %s %s" py-pylint-command
- (mapconcat 'identity py-pylint-command-args " ")
- (py--buffer-filename-remote-maybe)))
- (last (and py-pylint-history (car py-pylint-history))))
- (list (funcall (if (fboundp 'read-shell-command)
- 'read-shell-command 'read-string)
- "Run pylint like this: "
- (or default last)
- 'py-pylint-history))))
- (save-some-buffers (not py-ask-about-save))
- (set-buffer (get-buffer-create "*Pylint*"))
- (erase-buffer)
- (unless (file-readable-p (car (cddr (split-string command))))
- (message "Warning: %s" "pylint needs a file"))
- (shell-command command "*Pylint*"))
-
-(defalias 'pylint-help 'py-pylint-help)
-(defun py-pylint-help ()
- "Display Pylint command line help messages.
-
-Let's have this until more Emacs-like help is prepared"
- (interactive)
- (set-buffer (get-buffer-create "*Pylint-Help*"))
- (erase-buffer)
- (shell-command "pylint --long-help" "*Pylint-Help*"))
-
-(defalias 'pylint-doku 'py-pylint-doku)
-(defun py-pylint-doku ()
- "Display Pylint Documentation.
-
-Calls ‘pylint --full-documentation’"
- (interactive)
- (set-buffer (get-buffer-create "*Pylint-Documentation*"))
- (erase-buffer)
- (shell-command "pylint --full-documentation" "*Pylint-Documentation*"))
-
-;; Pyflakes
-(defalias 'pyflakes 'py-pyflakes-run)
-(defun py-pyflakes-run (command)
- "*Run pyflakes on COMMAND (default on the file currently visited).
-
-For help see \\[pyflakes-help] resp. \\[pyflakes-long-help].
-Home-page: http://www.logilab.org/project/pyflakes"
- (interactive
- (let ((default
- (if (py--buffer-filename-remote-maybe)
- (format "%s %s %s" py-pyflakes-command
- (mapconcat 'identity py-pyflakes-command-args " ")
- (py--buffer-filename-remote-maybe))
- (format "%s %s" py-pyflakes-command
- (mapconcat 'identity py-pyflakes-command-args " "))))
- (last (when py-pyflakes-history
- (let* ((lastcmd (car py-pyflakes-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (py--buffer-filename-remote-maybe) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pyflakes like this: "
- (if last
- last
- default)
- 'py-pyflakes-history)
- (read-string "Run pyflakes like this: "
- (if last
- last
- default)
- 'py-pyflakes-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defalias 'pyflakes-help 'py-pyflakes-help)
-(defun py-pyflakes-help ()
- "Display Pyflakes command line help messages.
-
-Let's have this until more Emacs-like help is prepared"
- (interactive)
- ;; (set-buffer (get-buffer-create "*Pyflakes-Help*"))
- ;; (erase-buffer)
- (with-help-window "*Pyflakes-Help*"
- (with-current-buffer standard-output
- (insert " pyflakes [file-or-directory ...]
-
- Pyflakes is a simple program which checks Python
- source files for errors. It is similar to
- PyChecker in scope, but differs in that it does
- not execute the modules to check them. This is
- both safer and faster, although it does not
- perform as many checks. Unlike PyLint, Pyflakes
- checks only for logical errors in programs; it
- does not perform any checks on style.
-
- All commandline arguments are checked, which
- have to be either regular files or directories.
- If a directory is given, every .py file within
- will be checked.
-
- When no commandline arguments are given, data
- will be read from standard input.
-
- The exit status is 0 when no warnings or errors
- are found. When errors are found the exit status
- is 2. When warnings (but no errors) are found
- the exit status is 1.
-
-Extracted from http://manpages.ubuntu.com/manpages/natty/man1/pyflakes.1.html"))))
-
-;; Pyflakes-pep8
-(defalias 'pyflakespep8 'py-pyflakespep8-run)
-(defun py-pyflakespep8-run (command)
- "*Run COMMAND pyflakespep8, check formatting (default on the file currently visited)."
- (interactive
- (let ((default
- (if (py--buffer-filename-remote-maybe)
- (format "%s %s %s" py-pyflakespep8-command
- (mapconcat 'identity py-pyflakespep8-command-args " ")
- (py--buffer-filename-remote-maybe))
- (format "%s %s" py-pyflakespep8-command
- (mapconcat 'identity py-pyflakespep8-command-args " "))))
- (last (when py-pyflakespep8-history
- (let* ((lastcmd (car py-pyflakespep8-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (py--buffer-filename-remote-maybe) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pyflakespep8 like this: "
- (if last
- last
- default)
- 'py-pyflakespep8-history)
- (read-string "Run pyflakespep8 like this: "
- (if last
- last
- default)
- 'py-pyflakespep8-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defun py-pyflakespep8-help ()
- "Display pyflakespep8 command line help messages."
- (interactive)
- (set-buffer (get-buffer-create "*pyflakespep8-Help*"))
- (erase-buffer)
- (shell-command "pyflakespep8 --help" "*pyflakespep8-Help*"))
-
-;; Pychecker
-;; hack for GNU Emacs
-;; (unless (fboundp 'read-shell-command)
-;; (defalias 'read-shell-command 'read-string))
-
-(defun py-pychecker-run (command)
- "Run COMMAND pychecker (default on the file currently visited)."
- (interactive
- (let ((default
- (if (py--buffer-filename-remote-maybe)
- (format "%s %s %s" py-pychecker-command
- py-pychecker-command-args
- (py--buffer-filename-remote-maybe))
- (format "%s %s" py-pychecker-command py-pychecker-command-args)))
- (last (when py-pychecker-history
- (let* ((lastcmd (car py-pychecker-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (py--buffer-filename-remote-maybe) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pychecker like this: "
- (if last
- last
- default)
- 'py-pychecker-history)
- (read-string "Run pychecker like this: "
- (if last
- last
- default)
- 'py-pychecker-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-;; After ‘sgml-validate-command’.
-(defun py-check-command (command)
- "Check a Python file (default current buffer's file).
-Runs COMMAND, a shell command, as if by ‘compile’.
-See ‘py-check-command’ for the default."
- (interactive
- (list (read-string "Checker command: "
- (concat py-check-command " "
- (let ((name (py--buffer-filename-remote-maybe)))
- (if name
- (file-name-nondirectory name)))))))
- (require 'compile) ;To define compilation-* variables.
- (save-some-buffers (not compilation-ask-about-save) nil)
- (let ((compilation-error-regexp-alist py-compilation-regexp-alist)
- ;; (cons '("(\\([^,]+\\), line \\([0-9]+\\))" 1)
- ;; compilation-error-regexp-alist)
- )
- (compilation-start command)))
-
-;; flake8
-(defalias 'flake8 'py-flake8-run)
-(defun py-flake8-run (command)
- "COMMAND Flake8 is a wrapper around these tools:
-- PyFlakes
- - pep8
- - Ned Batchelder's McCabe script
-
- It also adds features:
- - files that contain this line are skipped::
- # flake8: noqa
- - no-warn lines that contain a `# noqa`` comment at the end.
- - a Git and a Mercurial hook.
- - a McCabe complexity checker.
- - extendable through ``flake8.extension`` entry points."
- (interactive
- (let* ((py-flake8-command
- (if (string= "" py-flake8-command)
- (or (executable-find "flake8")
- (error "Don't see \"flake8\" on your system.
-Consider \"pip install flake8\" resp. visit \"pypi.python.org\""))
- py-flake8-command))
- (default
- (if (py--buffer-filename-remote-maybe)
- (format "%s %s %s" py-flake8-command
- py-flake8-command-args
- (py--buffer-filename-remote-maybe))
- (format "%s %s" py-flake8-command
- py-flake8-command-args)))
- (last
- (when py-flake8-history
- (let* ((lastcmd (car py-flake8-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (py--buffer-filename-remote-maybe) cmd))))
- (mapconcat 'identity newcmd " ")))))
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run flake8 like this: "
- ;; (if last
- ;; last
- default
- 'py-flake8-history1)
- (read-string "Run flake8 like this: "
- (if last
- last
- default)
- 'py-flake8-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defun py-flake8-help ()
- "Display flake8 command line help messages."
- (interactive)
- (set-buffer (get-buffer-create "*flake8-Help*"))
- (erase-buffer)
- (shell-command "flake8 --help" "*flake8-Help*"))
-
-;; from string-strip.el --- Strip CHARS from STRING
-
-(defvar py-chars-before " \t\n\r\f"
- "Used by ‘py--string-strip’.")
-
-(defvar py-chars-after " \t\n\r\f"
- "Used by ‘py--string-strip’.")
-
-;; (setq strip-chars-before "[ \t\r\n]*")
-(defun py--string-strip (str &optional chars-before chars-after)
- "Return a copy of STR, CHARS removed.
-‘CHARS-BEFORE’ and ‘CHARS-AFTER’ default is \"[ \t\r\n]*\",
-i.e. spaces, tabs, carriage returns, newlines and newpages."
- (let ((s-c-b (or chars-before
- py-chars-before))
- (s-c-a (or chars-after
- py-chars-after))
- (erg str))
- (setq erg (replace-regexp-in-string s-c-b "" erg))
- (setq erg (replace-regexp-in-string s-c-a "" erg))
- erg))
-
-(defun py-nesting-level (&optional pps)
- "Accepts the output of ‘parse-partial-sexp’ - PPS."
- (interactive)
- (let* ((pps (or (ignore-errors (nth 0 pps))
- (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (parse-partial-sexp (point-min) (point)))))
- (erg (nth 0 pps)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-;; Flymake
-(defun py-toggle-flymake-intern (name command)
- "Clear flymake allowed file-name masks.
-
-Takes NAME COMMAND"
- (unless (string-match "pyflakespep8" name)
- (unless (executable-find name)
- (when py-verbose-p (message "Don't see %s. Use ‘easy_install’ %s? " name name))))
- (if (py--buffer-filename-remote-maybe)
- (let* ((temp-file (flymake-init-create-temp-buffer-copy
- 'flymake-create-temp-inplace))
- (local-file (file-relative-name
- temp-file
- (file-name-directory (py--buffer-filename-remote-maybe)))))
- (push (car (read-from-string (concat "(\"\\.py\\'\" flymake-" name ")"))) flymake-allowed-file-name-masks)
- (list command (list local-file)))
- (message "%s" "flymake needs a ‘file-name’. Please save before calling.")))
-
-(defun py-flycheck-mode (&optional arg)
- "Toggle ‘flycheck-mode’.
-
-With negative ARG switch off ‘flycheck-mode’
-See menu \"Tools/Syntax Checking\""
- (interactive "p")
- (setq arg (or arg (if flycheck-mode 0 1)))
- (if (featurep 'flycheck)
- (if (< arg 0)
- ;; switch off
- (flycheck-mode 0)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "flycheck-mode: %s" flycheck-mode))
- (flycheck-mode 1)
- (when (and py-verbose-p (called-interactively-p 'any)) (message "flycheck-mode: %s" flycheck-mode)))
- (error "Can't find flycheck - see README.org")))
-
-(defun pylint-flymake-mode ()
- "Toggle ‘pylint’ ‘flymake-mode’."
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode 0)
- (py-toggle-flymake-intern "pylint" "pylint")
- (flymake-mode 1)))
-
-(defun pyflakes-flymake-mode ()
- "Toggle ‘pyflakes’ ‘flymake-mode’."
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pyflakes" "pyflakes")
- (flymake-mode)))
-
-(defun pychecker-flymake-mode ()
- "Toggle ‘pychecker’ ‘flymake-mode’."
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pychecker" "pychecker")
- (flymake-mode)))
-
-(defun pep8-flymake-mode ()
- "Toggle ‘pep8’ ‘flymake-mode’."
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pep8" "pep8")
- (flymake-mode)))
-
-(defun pyflakespep8-flymake-mode ()
- "Toggle ‘pyflakespep8’ ‘flymake-mode’.
-
-Joint call to pyflakes and pep8 as proposed by
-Keegan Carruthers-Smith"
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pyflakespep8" "pyflakespep8")
- (flymake-mode)))
-
-(defun py-display-state-of-variables ()
- "Read the state of ‘python-mode’ variables.
-
-Assumes vars are defined in current source buffer"
- (interactive)
- (save-restriction
- (let (variableslist)
- (goto-char (point-min))
- ;; (eval-buffer)
- (while (and (not (eobp))(re-search-forward "^(defvar [[:alpha:]]\\|^(defcustom [[:alpha:]]\\|^(defconst [[:alpha:]]" nil t 1))
- (let* ((name (symbol-at-point))
- (state
- (unless
- (or (eq name 'py-menu)
- (eq name 'python-mode-map)
- (string-match "syntax-table" (prin1-to-string name)))
-
- (prin1-to-string (symbol-value name)))))
- (if state
- (push (cons (prin1-to-string name) state) variableslist)
- (message "don't see a state for %s" (prin1-to-string name))))
- (forward-line 1))
- (setq variableslist (nreverse variableslist))
- (set-buffer (get-buffer-create "State-of-Python-mode-variables.org"))
- (erase-buffer)
- ;; org
- (insert "State of python-mode variables\n\n")
- (switch-to-buffer (current-buffer))
- (dolist (ele variableslist)
- (if (string-match "^;;; " (car ele))
- (unless (or (string-match "^;;; Constants\\|^;;; Commentary\\|^;;; Code\\|^;;; Macro definitions\\|^;;; Customization" (car ele)))
-
- (insert (concat (replace-regexp-in-string "^;;; " "* " (car ele)) "\n")))
- (insert (concat "\n** "(car ele) "\n"))
- (insert (concat " " (cdr ele) "\n\n")))
- ;; (richten)
- (sit-for 0.01 t))
- (sit-for 0.01 t))))
-
-;; common typo
-(defalias 'iypthon 'ipython)
-(defalias 'pyhton 'python)
-
-;; python-components-extensions
-
-(defun py-indent-forward-line (&optional arg)
- "Indent and move one line forward to next indentation.
-Returns column of line reached.
-
-If `py-kill-empty-line' is non-nil, delete an empty line.
-When closing a form, use py-close-block et al, which will move and indent likewise.
-With \\[universal argument] just indent.
-"
- (interactive "*P")
- (let ((orig (point))
- erg)
- (unless (eobp)
- (if (and (py--in-comment-p)(not py-indent-comments))
- (forward-line 1)
- (py-indent-line-outmost)
- (unless (eq 4 (prefix-numeric-value arg))
- (if (eobp) (newline)
- (progn (forward-line 1))
- (when (and py-kill-empty-line (py-empty-line-p) (not (looking-at "[ \t]*\n[[:alpha:]]")) (not (eobp)))
- (delete-region (line-beginning-position) (line-end-position)))))))
- (back-to-indentation)
- (when (or (eq 4 (prefix-numeric-value arg)) (< orig (point))) (setq erg (current-column)))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-dedent-forward-line (&optional arg)
- "Dedent line and move one line forward. "
- (interactive "*p")
- (py-dedent arg)
- (if (eobp)
- (newline 1)
- (forward-line 1))
- (end-of-line))
-
-(defun py-dedent (&optional arg)
- "Dedent line according to `py-indent-offset'.
-
-With arg, do it that many times.
-If point is between indent levels, dedent to next level.
-Return indentation reached, if dedent done, nil otherwise.
-
-Affected by `py-dedent-keep-relative-column'. "
- (interactive "*p")
- (or arg (setq arg 1))
- (let ((orig (copy-marker (point)))
- erg)
- (dotimes (_ arg)
- (let* ((cui (current-indentation))
- (remain (% cui py-indent-offset))
- (indent (* py-indent-offset (/ cui py-indent-offset))))
- (beginning-of-line)
- (fixup-whitespace)
- (if (< 0 remain)
- (indent-to-column indent)
- (indent-to-column (- cui py-indent-offset)))))
- (when (< (point) orig)
- (setq erg (current-column)))
- (when py-dedent-keep-relative-column (goto-char orig))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-class-at-point ()
- "Return class definition as string.
-
-With interactive call, send it to the message buffer too. "
- (interactive)
- (save-excursion
- (let* ((beg (py-backward-class))
- (end (py-forward-class))
- (res (when (and (numberp beg)(numberp end)(< beg end)) (buffer-substring-no-properties beg end))))
- (when (called-interactively-p 'any) (message "%s" res))
- res)))
-
-(defun py-function-at-point ()
- "Return functions definition as string.
-
-With interactive call, send it to the message buffer too. "
- (interactive)
- (save-excursion
- (let* ((beg (py-backward-function))
- (end (py-forward-function))
- (res (when (and (numberp beg)(numberp end)(< beg end)) (buffer-substring-no-properties beg end))))
- (when (called-interactively-p 'any) (message "%s" res))
- res)))
-
-(defun py-backward-function ()
- "Jump to the beginning of defun. Returns point. "
- (interactive "p")
- (let ((pos (py-backward-def-or-class)))
- (when (called-interactively-p 'any) (message "%s" pos))
- pos))
-
-(defun py-forward-function ()
- "Jump to the end of function. "
- (interactive "p")
- (let ((pos (py-forward-def-or-class)))
- (when (called-interactively-p 'any) (message "%s" pos))
- pos))
-
-;; Functions for marking regions
-
-(defun py-line-at-point ()
- "Return line as string.
- With interactive call, send it to the message buffer too. "
- (interactive)
- (let* ((beg (line-beginning-position))
- (end (line-end-position))
- (res (when (and (numberp beg)(numberp end)(< beg end)) (buffer-substring-no-properties beg end))))
- (when (called-interactively-p 'any) (message "%s" res))
- res))
-
-(defun py-match-paren-mode (&optional arg)
- "py-match-paren-mode nil oder t"
- (interactive "P")
- (if (or arg (not py-match-paren-mode))
- (progn
- (setq py-match-paren-mode t)
- (setq py-match-paren-mode nil))))
-
-(defun py--match-end-finish (cui)
- (let (skipped)
- (unless (eq (current-column) cui)
- (when (< (current-column) cui)
- (setq skipped (skip-chars-forward " \t" (line-end-position)))
- (setq cui (- cui skipped))
- ;; may current-column greater as needed indent?
- (if (< 0 cui)
- (progn
- (unless (py-empty-line-p) (split-line))
- (indent-to cui))
- (forward-char cui))
- (unless (eq (char-before) 32)(insert 32)(forward-char -1))))))
-
-(defun py--match-paren-forward ()
- (setq py--match-paren-forward-p t)
- (let ((cui (current-indentation)))
- (cond
- ((py--beginning-of-top-level-p)
- (py-forward-top-level-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-class-p)
- (py-forward-class-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-def-p)
- (py-forward-def-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-if-block-p)
- (py-forward-if-block-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-try-block-p)
- (py-forward-try-block-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-for-block-p)
- (py-forward-for-block-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-block-p)
- (py-forward-block-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-clause-p)
- (py-forward-clause-bol)
- (py--match-end-finish cui))
- ((py--beginning-of-statement-p)
- (py-forward-statement-bol)
- (py--match-end-finish cui))
- (t (py-forward-statement)
- (py--match-end-finish cui)))))
-
-(defun py--match-paren-backward ()
- (setq py--match-paren-forward-p nil)
- (let* ((cui (current-indentation))
- (cuc (current-column))
- (cui (min cuc cui)))
- (if (eq 0 cui)
- (py-backward-top-level)
- (when (py-empty-line-p) (delete-region (line-beginning-position) (point)))
- (py-backward-statement)
- (unless (< (current-column) cuc)
- (while (and (not (bobp))
- (< cui (current-column))
- (py-backward-statement)))))))
-
-(defun py--match-paren-blocks ()
- (cond
- ((and (looking-back "^[ \t]*" (line-beginning-position))(if (eq last-command 'py-match-paren)(not py--match-paren-forward-p)t)
- ;; (looking-at py-extended-block-or-clause-re)
- (looking-at "[[:alpha:]_]"))
- ;; from beginning of top-level, block, clause, statement
- (py--match-paren-forward))
- (t
- (py--match-paren-backward))))
-
-(defun py-match-paren (&optional arg)
- "If at a beginning, jump to end and vice versa.
-
-When called from within, go to the start.
-Matches lists, but also block, statement, string and comment. "
- (interactive "*P")
- (if (eq 4 (prefix-numeric-value arg))
- (insert "%")
- (let ((pps (parse-partial-sexp (point-min) (point))))
- (cond
- ;; if inside string, go to beginning
- ((nth 3 pps)
- (goto-char (nth 8 pps)))
- ;; if inside comment, go to beginning
- ((nth 4 pps)
- (py-backward-comment))
- ;; at comment start, go to end of commented section
- ((and
- ;; unless comment starts where jumped to some end
- (not py--match-paren-forward-p)
- (eq 11 (car-safe (syntax-after (point)))))
- (py-forward-comment))
- ;; at string start, go to end
- ((or (eq 15 (car-safe (syntax-after (point))))
- (eq 7 (car (syntax-after (point)))))
- (goto-char (scan-sexps (point) 1))
- (forward-char -1))
- ;; open paren
- ((eq 4 (car (syntax-after (point))))
- (goto-char (scan-sexps (point) 1))
- (forward-char -1))
- ((eq 5 (car (syntax-after (point))))
- (goto-char (scan-sexps (1+ (point)) -1)))
- ((nth 1 pps)
- (goto-char (nth 1 pps)))
- (t
- ;; Python specific blocks
- (py--match-paren-blocks))))))
-
-(unless (functionp 'in-string-p)
- (defun in-string-p (&optional pos)
- (interactive)
- (let* ((orig (or pos (point)))
- (erg
- (save-excursion
- (save-restriction
- (widen)
- (beginning-of-defun)
- (numberp
- (progn
- (if (featurep 'xemacs)
- (nth 3 (parse-partial-sexp (point) orig)
- (nth 3 (parse-partial-sexp (point-min) (point)))))))))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg)))
-
-(defun py-documentation (w)
- "Launch PyDOC on the Word at Point"
- (interactive
- (list (let* ((word (py-symbol-at-point))
- (input (read-string
- (format "pydoc entry%s: "
- (if (not word) "" (format " (default %s)" word))))))
- (if (string= input "")
- (if (not word) (error "No pydoc args given")
- word) ;sinon word
- input)))) ;sinon input
- (shell-command (concat py-shell-name " -c \"from pydoc import help;help(\'" w "\')\"") "*PYDOCS*")
- (view-buffer-other-window "*PYDOCS*" t 'kill-buffer-and-window))
-
-(defun eva ()
- "Put \"eval(...)\" forms around strings at point. "
- (interactive "*")
- (skip-chars-forward " \t\r\n\f")
- (let* ((bounds (ar-bounds-of-word-atpt))
- (beg (car bounds))
- (end (cdr bounds)))
- (goto-char end)
- (insert ")")
- (goto-char beg)
- (insert "eval(")))
-
-(defun pst-here ()
- "Kill previous \"pdb.set_trace()\" and insert it at point. "
- (interactive "*")
- (let ((orig (copy-marker (point))))
- (search-backward "pdb.set_trace()")
- (replace-match "")
- (when (py-empty-line-p)
- (delete-region (line-beginning-position) (line-end-position)))
- (goto-char orig)
- (insert "pdb.set_trace()")))
-
-(defun py-printform-insert (&optional arg strg)
- "Inserts a print statement out of current `(car kill-ring)' by default, inserts STRING if delivered.
-
-With optional \\[universal-argument] print as string"
- (interactive "*P")
- (let* ((name (py--string-strip (or strg (car kill-ring))))
- ;; guess if doublequotes or parentheses are needed
- (numbered (not (eq 4 (prefix-numeric-value arg))))
- (form (if numbered
- (concat "print(\"" name ": %s \" % (" name "))")
- (concat "print(\"" name ": %s \" % \"" name "\")"))))
- (insert form)))
-
-(defun py-print-formatform-insert (&optional strg)
- "Inserts a print statement out of current `(car kill-ring)' by default.
-
-print(\"\\nfoo: {}\"\.format(foo))"
- (interactive "*")
- (let ((name (py--string-strip (or strg (car kill-ring)))))
- (insert (concat "print(\"" name ": {}\".format(" name "))"))))
-
-(defun py-line-to-printform-python2 ()
- "Transforms the item on current in a print statement. "
- (interactive "*")
- (let* ((name (py-symbol-at-point))
- (form (concat "print(\"" name ": %s \" % " name ")")))
- (delete-region (line-beginning-position) (line-end-position))
- (insert form))
- (forward-line 1)
- (back-to-indentation))
-
-(defun py-boolswitch ()
- "Edit the assignment of a boolean variable, revert them.
-
-I.e. switch it from \"True\" to \"False\" and vice versa"
- (interactive "*")
- (save-excursion
- (unless (py--end-of-statement-p)
- (py-forward-statement))
- (backward-word)
- (cond ((looking-at "True")
- (replace-match "False"))
- ((looking-at "False")
- (replace-match "True"))
- (t (message "%s" "Can't see \"True or False\" here")))))
-
-;; python-components-imenu
-;; Imenu definitions
-
-(defvar py-imenu-class-regexp
- (concat ; <<classes>>
- "\\(" ;
- "^[ \t]*" ; newline and maybe whitespace
- "\\(class[ \t]+[a-zA-Z0-9_]+\\)" ; class name
- ; possibly multiple superclasses
- "\\([ \t]*\\((\\([a-zA-Z0-9_,. \t\n]\\)*)\\)?\\)"
- "[ \t]*:" ; and the final :
- "\\)" ; >>classes<<
- )
- "Regexp for Python classes for use with the Imenu package."
- )
-
-;; (defvar py-imenu-method-regexp
-;; (concat ; <<methods and functions>>
-;; "\\(" ;
-;; "^[ \t]*" ; new line and maybe whitespace
-;; "\\(def[ \t]+" ; function definitions start with def
-;; "\\([a-zA-Z0-9_]+\\)" ; name is here
-;; ; function arguments...
-;; ;; "[ \t]*(\\([-+/a-zA-Z0-9_=,\* \t\n.()\"'#]*\\))"
-;; "[ \t]*(\\([^:#]*\\))"
-;; "\\)" ; end of def
-;; "[ \t]*:" ; and then the :
-;; "\\)" ; >>methods and functions<<
-;; )
-;; "Regexp for Python methods/functions for use with the Imenu package."
-;; )
-
-(defvar py-imenu-method-regexp
- (concat ; <<methods and functions>>
- "\\(" ;
- "^[ \t]*" ; new line and maybe whitespace
- "\\(def[ \t]+" ; function definitions start with def
- "\\([a-zA-Z0-9_]+\\)" ; name is here
- ; function arguments...
- ;; "[ \t]*(\\([-+/a-zA-Z0-9_=,\* \t\n.()\"'#]*\\))"
- "[ \t]*(\\(.*\\))"
- "\\)" ; end of def
- "[ \t]*:" ; and then the :
- "\\)" ; >>methods and functions<<
- )
- "Regexp for Python methods/functions for use with the Imenu package.")
-
-
-
-
-
-(defvar py-imenu-method-no-arg-parens '(2 8)
- "Indices into groups of the Python regexp for use with Imenu.
-
-Using these values will result in smaller Imenu lists, as arguments to
-functions are not listed.
-
-See the variable `py-imenu-show-method-args-p' for more
-information.")
-
-(defvar py-imenu-method-arg-parens '(2 7)
- "Indices into groups of the Python regexp for use with imenu.
-Using these values will result in large Imenu lists, as arguments to
-functions are listed.
-
-See the variable `py-imenu-show-method-args-p' for more
-information.")
-
-;; Note that in this format, this variable can still be used with the
-;; imenu--generic-function. Otherwise, there is no real reason to have
-;; it.
-(defvar py-imenu-generic-expression
- (cons
- (concat
- py-imenu-class-regexp
- "\\|" ; or...
- py-imenu-method-regexp
- )
- py-imenu-method-no-arg-parens)
- "Generic Python expression which may be used directly with Imenu.
-Used by setting the variable `imenu-generic-expression' to this value.
-Also, see the function \\[py--imenu-create-index] for a better
-alternative for finding the index.")
-
-
-(defvar py-imenu-generic-regexp nil)
-(defvar py-imenu-generic-parens nil)
-
-
-(defun py--imenu-create-index ()
- "Python interface function for the Imenu package.
-Finds all Python classes and functions/methods. Calls function
-\\[py--imenu-create-index-engine]. See that function for the details
-of how this works."
- (save-excursion
- (setq py-imenu-generic-regexp (car py-imenu-generic-expression)
- py-imenu-generic-parens (if py-imenu-show-method-args-p
- py-imenu-method-arg-parens
- py-imenu-method-no-arg-parens))
- (goto-char (point-min))
- ;; Warning: When the buffer has no classes or functions, this will
- ;; return nil, which seems proper according to the Imenu API, but
- ;; causes an error in the XEmacs port of Imenu. Sigh.
- (setq index-alist (cdr (py--imenu-create-index-engine nil)))))
-
-(defun py--imenu-create-index-engine (&optional start-indent)
- "Function for finding Imenu definitions in Python.
-
-Finds all definitions (classes, methods, or functions) in a Python
-file for the Imenu package.
-
-Returns a possibly nested alist of the form
-
- (INDEX-NAME . INDEX-POSITION)
-
-The second element of the alist may be an alist, producing a nested
-list as in
-
- (INDEX-NAME . INDEX-ALIST)
-
-This function should not be called directly, as it calls itself
-recursively and requires some setup. Rather this is the engine for
-the function \\[py--imenu-create-index-function].
-
-It works recursively by looking for all definitions at the current
-indention level. When it finds one, it adds it to the alist. If it
-finds a definition at a greater indentation level, it removes the
-previous definition from the alist. In its place it adds all
-definitions found at the next indentation level. When it finds a
-definition that is less indented then the current level, it returns
-the alist it has created thus far.
-
-The optional argument START-INDENT indicates the starting indentation
-at which to continue looking for Python classes, methods, or
-functions. If this is not supplied, the function uses the indentation
-of the first definition found."
- (let (index-alist
- sub-method-alist
- looking-p
- def-name prev-name
- cur-indent def-pos
- (class-paren (first py-imenu-generic-parens))
- (def-paren (second py-imenu-generic-parens)))
- ;; (switch-to-buffer (current-buffer))
- (setq looking-p
- (re-search-forward py-imenu-generic-regexp (point-max) t))
- (while looking-p
- (save-excursion
- ;; used to set def-name to this value but generic-extract-name
- ;; is new to imenu-1.14. this way it still works with
- ;; imenu-1.11
- ;;(imenu--generic-extract-name py-imenu-generic-parens))
- (let ((cur-paren (if (match-beginning class-paren)
- class-paren def-paren)))
- (setq def-name
- (buffer-substring-no-properties (match-beginning cur-paren)
- (match-end cur-paren))))
- (save-match-data
- (py-beginning-of-def-or-class))
- (beginning-of-line)
- (setq cur-indent (current-indentation)))
- ;; HACK: want to go to the next correct definition location. We
- ;; explicitly list them here but it would be better to have them
- ;; in a list.
- (setq def-pos
- (or (match-beginning class-paren)
- (match-beginning def-paren)))
- ;; if we don't have a starting indent level, take this one
- (or start-indent
- (setq start-indent cur-indent))
- ;; if we don't have class name yet, take this one
- (or prev-name
- (setq prev-name def-name))
- ;; what level is the next definition on? must be same, deeper
- ;; or shallower indentation
- (cond
- ;; Skip code in comments and strings
- ((py--in-literal))
- ;; at the same indent level, add it to the list...
- ((= start-indent cur-indent)
- (push (cons def-name def-pos) index-alist))
- ;; deeper indented expression, recurse
- ((< start-indent cur-indent)
- ;; the point is currently on the expression we're supposed to
- ;; start on, so go back to the last expression. The recursive
- ;; call will find this place again and add it to the correct
- ;; list
- (re-search-backward py-imenu-generic-regexp (point-min) 'move)
- (setq sub-method-alist (py--imenu-create-index-engine cur-indent))
- (if sub-method-alist
- ;; we put the last element on the index-alist on the start
- ;; of the submethod alist so the user can still get to it.
- (let* ((save-elmt (pop index-alist))
- (classname (and (string-match "^class " (car save-elmt))(replace-regexp-in-string "^class " "" (car save-elmt)))))
- (if (and classname (not (string-match "^class " (caar sub-method-alist))))
- (setcar (car sub-method-alist) (concat classname "." (caar sub-method-alist))))
- (push (cons prev-name
- (cons save-elmt sub-method-alist))
- index-alist))))
- (t
- (setq looking-p nil)
- (re-search-backward py-imenu-generic-regexp (point-min) t)))
- ;; end-cond
- (setq prev-name def-name)
- (and looking-p
- (setq looking-p
- (re-search-forward py-imenu-generic-regexp
- (point-max) 'move))))
- (nreverse index-alist)))
-
-(defun py--imenu-create-index-new (&optional beg end)
- (interactive)
- "`imenu-create-index-function' for Python. "
- (set (make-local-variable 'imenu-max-items) py-imenu-max-items)
- (let ((orig (point))
- (beg (or beg (point-min)))
- (end (or end (point-max)))
- index-alist vars thisend sublist classname pos name)
- (goto-char beg)
- (while (and (re-search-forward "^[ \t]*\\(def\\|class\\)[ \t]+\\(\\sw+\\)" end t 1)(not (nth 8 (parse-partial-sexp (point-min) (point)))))
- (if (save-match-data (string= "class" (match-string-no-properties 1)))
- (progn
- (setq pos (match-beginning 0)
- name (match-string-no-properties 2)
- classname (concat "class " name)
- thisend (save-match-data (py--end-of-def-or-class-position))
- sublist '())
- (while (and (re-search-forward "^[ \t]*\\(def\\|class\\)[ \t]+\\(\\sw+\\)" (or thisend end) t 1)(not (nth 8 (parse-partial-sexp (point-min) (point)))))
- (let* ((pos (match-beginning 0))
- (name (match-string-no-properties 2)))
- (push (cons (concat " " name) pos) sublist)))
- (if classname
- (progn
- (setq sublist (nreverse sublist))
- (push (cons classname pos) sublist)
- (push (cons classname sublist) index-alist))
- (push sublist index-alist)))
-
- (let ((pos (match-beginning 0))
- (name (match-string-no-properties 2)))
- (push (cons name pos) index-alist))))
- ;; Look for module variables.
- (goto-char (point-min))
- (while (re-search-forward "^\\(\\sw+\\)[ \t]*=" end t)
- (unless (nth 8 (parse-partial-sexp (point-min) (point)))
- (let ((pos (match-beginning 1))
- (name (match-string-no-properties 1)))
- (push (cons name pos) vars))))
- (setq index-alist (nreverse index-alist))
- (when vars
- (push (cons "Module variables"
- (nreverse vars))
- index-alist))
- (goto-char orig)
- index-alist))
-
-;; A modified slice from python.el
-(defvar py-imenu-format-item-label-function
- 'py-imenu-format-item-label
- "Imenu function used to format an item label.
-It must be a function with two arguments: TYPE and NAME.")
-
-(defvar py-imenu-format-parent-item-label-function
- 'py-imenu-format-parent-item-label
- "Imenu function used to format a parent item label.
-It must be a function with two arguments: TYPE and NAME.")
-
-(defvar py-imenu-format-parent-item-jump-label-function
- 'py-imenu-format-parent-item-jump-label
- "Imenu function used to format a parent jump item label.
-It must be a function with two arguments: TYPE and NAME.")
-
-(defun py-imenu-format-item-label (type name)
- "Return Imenu label for single node using TYPE and NAME."
- (format "%s (%s)" name type))
-
-(defun py-imenu-format-parent-item-label (type name)
- "Return Imenu label for parent node using TYPE and NAME."
- (format "%s..." (py-imenu-format-item-label type name)))
-
-;; overengineering?
-(defun py-imenu-format-parent-item-jump-label (type _name)
- "Return Imenu label for parent node jump using TYPE and NAME."
- (if (string= type "class")
- "*class definition*"
- "*function definition*"))
-
-(defun py-imenu--put-parent (type name pos tree)
- "Add the parent with TYPE, NAME and POS to TREE."
- (let* ((label
- (funcall py-imenu-format-item-label-function type name))
- ;; (jump-label
- ;; (funcall py-imenu-format-parent-item-jump-label-function type name))
- (jump-label label
- ;; (funcall py-imenu-format-parent-item-jump-label-function type name)
- )
- )
- (if (not tree)
- (cons label pos)
- (cons label (cons (cons jump-label pos) tree)))))
-
-(defun py-imenu--build-tree (&optional min-indent prev-indent tree)
- "Recursively build the tree of nested definitions of a node.
-Arguments MIN-INDENT, PREV-INDENT and TREE are internal and should
-not be passed explicitly unless you know what you are doing."
- (setq min-indent (or min-indent 0)
- prev-indent (or prev-indent py-indent-offset))
- (save-restriction
- (narrow-to-region (point-min) (point))
- (let* ((pos
- (progn
- ;; finds a top-level class
- (py-backward-def-or-class)
- ;; stops behind the indented form at EOL
- (py-forward-def-or-class)
- ;; may find an inner def-or-class
- (py-backward-def-or-class)))
- type
- (name (when (and pos (looking-at py-def-or-class-re))
- (let ((split (split-string (match-string-no-properties 0))))
- (setq type (car split))
- (cadr split))))
- (label (when name
- (funcall py-imenu-format-item-label-function type name)))
- (indent (current-indentation))
- (children-indent-limit (+ py-indent-offset min-indent)))
- (cond ((not pos)
- ;; Nothing found, probably near to bobp.
- nil)
- ((<= indent min-indent)
- ;; The current indentation points that this is a parent
- ;; node, add it to the tree and stop recursing.
- (py-imenu--put-parent type name pos tree))
- (t
- (py-imenu--build-tree
- min-indent
- indent
- (if (<= indent children-indent-limit)
- (cons (cons label pos) tree)
- (cons
- (py-imenu--build-tree
- prev-indent indent (list (cons label pos)))
- tree))))))))
-
-(defun py--imenu-index ()
- "Return tree Imenu alist for the current Python buffer. "
- (save-excursion
- (goto-char (point-max))
- (let ((index)
- (tree))
- (while (setq tree (py-imenu--build-tree))
- (setq index (cons tree index)))
- index)))
-
-;; python-components-electric
-(defun py-electric-colon (arg)
- "Insert a colon and indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-
-Electric behavior is inhibited inside a string or
-comment or by universal prefix C-u.
-
-Switched by `py-electric-colon-active-p', default is nil
-See also `py-electric-colon-greedy-p' "
- (interactive "*P")
- (cond ((not py-electric-colon-active-p)
- (self-insert-command (prefix-numeric-value arg)))
- ((and py-electric-colon-bobl-only (save-excursion (py-backward-statement) (not (py--beginning-of-block-p))))
- (self-insert-command (prefix-numeric-value arg)))
- ((eq 4 (prefix-numeric-value arg))
- (self-insert-command 1))
- (t (insert ":")
- (unless (py-in-string-or-comment-p)
- (let ((orig (copy-marker (point)))
- (indent (py-compute-indentation)))
- (unless (or (eq (current-indentation) indent)
- (and py-electric-colon-greedy-p
- (eq indent (save-excursion (py-backward-statement)(current-indentation))))
- (and (py--top-level-form-p)(< (current-indentation) indent)))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to indent))
- (goto-char orig))
- (when py-electric-colon-newline-and-indent-p
- (py-newline-and-indent))))))
-
-(defun py-electric-close (arg)
- "Close completion buffer when it's sure, it's no longer needed, i.e. when inserting a space.
-
-Works around a bug in `choose-completion'. "
-
- (interactive "*P")
- (cond ((not py-electric-close-active-p)
- (self-insert-command (prefix-numeric-value arg)))
- ((eq 4 (prefix-numeric-value arg))
- (self-insert-command 1))
- (t (if (called-interactively-p 'any) (self-insert-command (prefix-numeric-value arg))
- ;; used from dont-indent-code-unnecessarily-lp-1048778-test
- (insert " ")))))
-
-(defun py-electric-comment (arg)
- "Insert a comment. If starting a comment, indent accordingly.
-
-If a numeric argument ARG is provided, that many \"#\" are inserted
-non-electrically.
-With \\[universal-argument] \"#\" electric behavior is inhibited inside a string or comment."
- (interactive "*P")
- (if (and py-indent-comments py-electric-comment-p)
- (if (ignore-errors (eq 4 (car-safe arg)))
- (insert "#")
- (when (and (eq last-command 'py-electric-comment) (looking-back " " (line-beginning-position)))
- (forward-char -1))
- (if (called-interactively-p 'any) (self-insert-command (prefix-numeric-value arg))
- (insert "#"))
- (let ((orig (copy-marker (point)))
- (indent (py-compute-indentation)))
- (unless
- (eq (current-indentation) indent)
- (goto-char orig)
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to indent)
- (goto-char orig))
- (when py-electric-comment-add-space-p
- (unless (looking-at "[ \t]")
- (insert " "))))
- (setq last-command this-command))
- (self-insert-command (prefix-numeric-value arg))))
-
-;; Electric deletion
-
-(defun py-empty-out-list-backward ()
- "Deletes all elements from list before point. "
- (interactive "*")
- (and (member (char-before) (list ?\) ?\] ?\}))
- (let ((orig (point))
- (thischar (char-before))
- pps cn)
- (forward-char -1)
- (setq pps (parse-partial-sexp (point-min) (point)))
- (if (and (not (nth 8 pps)) (nth 1 pps))
- (progn
- (goto-char (nth 1 pps))
- (forward-char 1))
- (cond ((or (eq thischar 41)(eq thischar ?\)))
- (setq cn "("))
- ((or (eq thischar 125) (eq thischar ?\}))
- (setq cn "{"))
- ((or (eq thischar 93)(eq thischar ?\]))
- (setq cn "[")))
- (skip-chars-backward (concat "^" cn)))
- (delete-region (point) orig)
- (insert-char thischar 1)
- (forward-char -1))))
-
-(defun py-electric-backspace (&optional arg)
- "Delete preceding character or level of indentation.
-
-When `delete-active-region' and (use-region-p), delete region.
-
-Unless at indentation:
- With `py-electric-kill-backward-p' delete whitespace before point.
- With `py-electric-kill-backward-p' at end of a list, empty that list.
-
-Returns column reached. "
- (interactive "p*")
- (or arg (setq arg 1))
- (let (erg)
- (cond ((and (use-region-p)
- ;; Emacs23 doesn't know that var
- (boundp 'delete-active-region) delete-active-region)
- (backward-delete-char-untabify arg))
- ;; (delete-region (region-beginning) (region-end)))
- ((looking-back "^[ \t]+" (line-beginning-position))
- (let* ((remains (% (current-column) py-indent-offset)))
- (if (< 0 remains)
- (delete-char (- remains))
- (indent-line-to (- (current-indentation) py-indent-offset)))))
- ((and py-electric-kill-backward-p (member (char-before) (list ?\) ?\] ?\})))
- (py-empty-out-list-backward))
- ((and py-electric-kill-backward-p (< 0 (setq erg (abs (skip-chars-backward " \t\r\n\f")))))
- (delete-region (point) (+ erg (point))))
- (t (delete-char (- 1))))
- (setq erg (current-column))
- (when (and (called-interactively-p 'any) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-electric-delete (&optional arg)
- "Delete following character or levels of whitespace.
-
-When `delete-active-region' and (use-region-p), delete region "
- (interactive "*p")
- (let ((orig (point)))
- (cond ((and (use-region-p)
- ;; Emacs23 doesn't know that var
- (boundp 'delete-active-region) delete-active-region)
- (delete-region (region-beginning) (region-end)))
- ((save-excursion (and (< (current-column)(current-indentation)) (<= py-indent-offset (skip-chars-forward " \t"))))
- (goto-char orig)
- (delete-char py-indent-offset))
- ((< 0 (skip-chars-forward " \t"))
- (delete-region orig (point)))
- (t (delete-char (or arg 1))))))
-
-(defun py-electric-yank (&optional arg)
- "Perform command `yank' followed by an `indent-according-to-mode' "
- (interactive "P")
- (cond (py-electric-yank-active-p
- (yank arg)
- ;; (py-indent-line)
- )
- (t (yank arg))))
-
-;; required for pending-del and delsel modes
-(put 'py-electric-colon 'delete-selection t) ;delsel
-(put 'py-electric-colon 'pending-delete t) ;pending-del
-(put 'py-electric-backspace 'delete-selection 'supersede) ;delsel
-(put 'py-electric-backspace 'pending-delete 'supersede) ;pending-del
-(put 'py-electric-delete 'delete-selection 'supersede) ;delsel
-(put 'py-electric-delete 'pending-delete 'supersede) ;pending-del
-
-;; python-components-virtualenv
-
-(defvar virtualenv-workon-home nil)
-
-(defvar virtualenv-name nil)
-
-(defvar virtualenv-old-path nil)
-
-(defvar virtualenv-old-exec-path nil)
-
-(if (getenv "WORKON_HOME")
- (setq virtualenv-workon-home (getenv "WORKON_HOME"))
- (setq virtualenv-workon-home "~/.virtualenvs"))
-
-(setq virtualenv-name nil)
-
-;;TODO: Move to a generic UTILITY or TOOL package
-(defun virtualenv-filter (predicate sequence)
- "Apply to each element of SEQUENCE the PREDICATE, if FUNCTION
- returns non-nil append the element to the return value of
- virtualenv-filter: a list"
- (let ((retlist '()))
- (dolist (element sequence)
- (when (funcall predicate element)
- (push element retlist)))
- (nreverse retlist)))
-
-(defun virtualenv-append-path (dir var)
- "Append DIR to a path-like varibale VAR, for example:
- (virtualenv-append-path /usr/bin:/bin /home/test/bin) -> /home/test/bin:/usr/bin:/bin"
- (concat (expand-file-name dir)
- path-separator
- var))
-
-(defun virtualenv-add-to-path (dir)
- "Add the specified path element to the Emacs PATH"
- (setenv "PATH"
- (virtualenv-append-path dir
- (getenv "PATH"))))
-
-(defun virtualenv-current ()
- "Barfs the current activated virtualenv"
- (interactive)
- (message virtualenv-name))
-
-(defun virtualenv-activate (dir)
- "Activate the virtualenv located in DIR"
- (interactive "DVirtualenv Directory: ")
- ;; Eventually deactivate previous virtualenv
- (when virtualenv-name
- (virtualenv-deactivate))
- (let ((cmd (concat "source " dir "/bin/activate\n")))
- (comint-send-string (get-process (get-buffer-process "*shell*")) cmd)
- ;; Storing old variables
- (setq virtualenv-old-path (getenv "PATH"))
- (setq virtualenv-old-exec-path exec-path)
-
- (setenv "VIRTUAL_ENV" dir)
- (virtualenv-add-to-path (concat (py--normalize-directory dir) "bin"))
- (push (concat (py--normalize-directory dir) "bin") exec-path)
-
- (setq virtualenv-name dir)))
-
-(defun virtualenv-deactivate ()
- "Deactivate the current virtual enviroment"
- (interactive)
- ;; Restoring old variables
- (setenv "PATH" virtualenv-old-path)
- (setq exec-path virtualenv-old-exec-path)
- (message (concat "Virtualenv '" virtualenv-name "' deactivated."))
- (setq virtualenv-name nil))
-
-(defun virtualenv-p (dir)
- "Check if a directory is a virtualenv"
- (file-exists-p (concat dir "/bin/activate")))
-
-(defun virtualenv-workon-complete ()
- "return available completions for virtualenv-workon"
- (let
- ;;Varlist
- ((filelist (directory-files virtualenv-workon-home t)))
- ;; Get only the basename from the list of the virtual environments
- ;; paths
- (mapcar 'file-name-nondirectory
- ;; Filter the directories and then the virtual environments
- (virtualenv-filter 'virtualenv-p
- (virtualenv-filter 'file-directory-p filelist)))))
-
-(defun virtualenv-workon (name)
- "Issue a virtualenvwrapper-like virtualenv-workon command"
- (interactive (list (completing-read "Virtualenv: " (virtualenv-workon-complete))))
- (if (getenv "WORKON_HOME")
- (virtualenv-activate (concat (py--normalize-directory (getenv "WORKON_HOME")) name))
- (virtualenv-activate (concat (py--normalize-directory virtualenv-workon-home) name))))
-
-;; python-components-booleans-beginning-forms
-
-(defun py--beginning-of-comment-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘comment’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-comment-re)
- (point))))
-
-(defun py--beginning-of-line-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘line’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-line-re)
- (point))))
-
-(defun py--beginning-of-paragraph-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘paragraph’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-paragraph-re)
- (point))))
-
-(defun py--beginning-of-partial-expression-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘partial-expression’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-partial-expression-re)
- (point))))
-
-(defun py--beginning-of-section-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘section’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-section-re)
- (point))))
-
-(defun py--beginning-of-top-level-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘top-level’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-top-level-re)
- (point))))
-
-(defun py--beginning-of-assignment-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘assignment’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-assignment-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-block-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-block-or-clause-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘block-or-clause’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-block-or-clause-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-class-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘class’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-class-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-clause-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘clause’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-clause-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-def-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘def’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-def-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-def-or-class-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘def-or-class’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-def-or-class-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-elif-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘elif-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-elif-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-else-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘else-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-else-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-except-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘except-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-except-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-for-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘for-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-for-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-if-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘if-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-if-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-indent-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘indent’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-indent-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-minor-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘minor-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-minor-block-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-statement-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘statement’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-statement-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-try-block-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘try-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-try-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (eq (current-column)(current-indentation))
- (point))))
-
-(defun py--beginning-of-assignment-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘assignment’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-assignment-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-block-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-block-or-clause-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘block-or-clause’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-block-or-clause-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-class-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘class’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-class-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-clause-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘clause’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-clause-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-def-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘def’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-def-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-def-or-class-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘def-or-class’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-def-or-class-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-elif-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘elif-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-elif-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-else-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘else-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-else-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-except-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘except-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-except-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-for-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘for-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-for-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-if-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘if-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-if-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-indent-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘indent’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-indent-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-minor-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘minor-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-minor-block-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-statement-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘statement’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-statement-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-(defun py--beginning-of-try-block-bol-p (&optional pps)
- "Return position, if cursor is at the beginning of a ‘try-block’, nil otherwise."
- (let ((pps (or pps (parse-partial-sexp (point-min) (point)))))
- (and (bolp)
- (not (or (nth 8 pps)(nth 1 pps)))
- (looking-at py-try-re)
- (looking-back "[^ \t]*" (line-beginning-position))
- (point))))
-
-;; python-components-booleans-end-forms
-
-
-(defun py--end-of-comment-p ()
- "Return position, if cursor is at the end of a comment, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-comment)
- (py-forward-comment)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-line-p ()
- "Return position, if cursor is at the end of a line, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-line)
- (py-forward-line)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-paragraph-p ()
- "Return position, if cursor is at the end of a paragraph, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-paragraph)
- (py-forward-paragraph)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-expression-p ()
- "Return position, if cursor is at the end of a expression, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-expression)
- (py-forward-expression)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-partial-expression-p ()
- "Return position, if cursor is at the end of a partial-expression, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-partial-expression)
- (py-forward-partial-expression)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-section-p ()
- "Return position, if cursor is at the end of a section, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-section)
- (py-forward-section)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-top-level-p ()
- "Return position, if cursor is at the end of a top-level, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-top-level)
- (py-forward-top-level)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-block-bol)
- (py-forward-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-block-or-clause-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a block-or-clause, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-block-or-clause-bol)
- (py-forward-block-or-clause-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-class-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a class, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-class-bol)
- (py-forward-class-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-clause-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a clause, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-clause-bol)
- (py-forward-clause-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-def-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a def, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-def-bol)
- (py-forward-def-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-def-or-class-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a def-or-class, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-def-or-class-bol)
- (py-forward-def-or-class-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-elif-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a elif-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-elif-block-bol)
- (py-forward-elif-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-else-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a else-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-else-block-bol)
- (py-forward-else-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-except-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a except-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-except-block-bol)
- (py-forward-except-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-for-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a for-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-for-block-bol)
- (py-forward-for-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-if-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a if-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-if-block-bol)
- (py-forward-if-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-indent-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a indent, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-indent-bol)
- (py-forward-indent-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-minor-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a minor-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-minor-block-bol)
- (py-forward-minor-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-statement-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a statement, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-statement-bol)
- (py-forward-statement-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-try-block-bol-p ()
- "Return position, if cursor is at ‘beginning-of-line’ at the end of a try-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-try-block-bol)
- (py-forward-try-block-bol)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-block-p ()
- "Return position, if cursor is at the end of a block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-block)
- (py-forward-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-block-or-clause-p ()
- "Return position, if cursor is at the end of a block-or-clause, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-block-or-clause)
- (py-forward-block-or-clause)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-class-p ()
- "Return position, if cursor is at the end of a class, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-class)
- (py-forward-class)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-clause-p ()
- "Return position, if cursor is at the end of a clause, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-clause)
- (py-forward-clause)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-def-p ()
- "Return position, if cursor is at the end of a def, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-def)
- (py-forward-def)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-def-or-class-p ()
- "Return position, if cursor is at the end of a def-or-class, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-def-or-class)
- (py-forward-def-or-class)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-elif-block-p ()
- "Return position, if cursor is at the end of a elif-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-elif-block)
- (py-forward-elif-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-else-block-p ()
- "Return position, if cursor is at the end of a else-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-else-block)
- (py-forward-else-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-except-block-p ()
- "Return position, if cursor is at the end of a except-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-except-block)
- (py-forward-except-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-for-block-p ()
- "Return position, if cursor is at the end of a for-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-for-block)
- (py-forward-for-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-if-block-p ()
- "Return position, if cursor is at the end of a if-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-if-block)
- (py-forward-if-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-indent-p ()
- "Return position, if cursor is at the end of a indent, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-indent)
- (py-forward-indent)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-minor-block-p ()
- "Return position, if cursor is at the end of a minor-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-minor-block)
- (py-forward-minor-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-statement-p ()
- "Return position, if cursor is at the end of a statement, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-statement)
- (py-forward-statement)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py--end-of-try-block-p ()
- "Return position, if cursor is at the end of a try-block, nil otherwise."
- (let ((orig (point))
- erg)
- (save-excursion
- (py-backward-try-block)
- (py-forward-try-block)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-;; python-components-beginning-position-forms
-
-
-(defun py--beginning-of-block-position ()
- "Return beginning of block position."
- (save-excursion
- (let ((erg (or (py--beginning-of-block-p)
- (py-backward-block))))
- erg)))
-
-(defun py--beginning-of-block-or-clause-position ()
- "Return beginning of block-or-clause position."
- (save-excursion
- (let ((erg (or (py--beginning-of-block-or-clause-p)
- (py-backward-block-or-clause))))
- erg)))
-
-(defun py--beginning-of-class-position ()
- "Return beginning of class position."
- (save-excursion
- (let ((erg (or (py--beginning-of-class-p)
- (py-backward-class))))
- erg)))
-
-(defun py--beginning-of-clause-position ()
- "Return beginning of clause position."
- (save-excursion
- (let ((erg (or (py--beginning-of-clause-p)
- (py-backward-clause))))
- erg)))
-
-(defun py--beginning-of-comment-position ()
- "Return beginning of comment position."
- (save-excursion
- (let ((erg (or (py--beginning-of-comment-p)
- (py-backward-comment))))
- erg)))
-
-(defun py--beginning-of-def-position ()
- "Return beginning of def position."
- (save-excursion
- (let ((erg (or (py--beginning-of-def-p)
- (py-backward-def))))
- erg)))
-
-(defun py--beginning-of-def-or-class-position ()
- "Return beginning of def-or-class position."
- (save-excursion
- (let ((erg (or (py--beginning-of-def-or-class-p)
- (py-backward-def-or-class))))
- erg)))
-
-(defun py--beginning-of-expression-position ()
- "Return beginning of expression position."
- (save-excursion
- (let ((erg (or (py--beginning-of-expression-p)
- (py-backward-expression))))
- erg)))
-
-(defun py--beginning-of-except-block-position ()
- "Return beginning of except-block position."
- (save-excursion
- (let ((erg (or (py--beginning-of-except-block-p)
- (py-backward-except-block))))
- erg)))
-
-(defun py--beginning-of-if-block-position ()
- "Return beginning of if-block position."
- (save-excursion
- (let ((erg (or (py--beginning-of-if-block-p)
- (py-backward-if-block))))
- erg)))
-
-(defun py--beginning-of-indent-position ()
- "Return beginning of indent position."
- (save-excursion
- (let ((erg (or (py--beginning-of-indent-p)
- (py-backward-indent))))
- erg)))
-
-(defun py--beginning-of-line-position ()
- "Return beginning of line position."
- (save-excursion
- (let ((erg (or (py--beginning-of-line-p)
- (py-backward-line))))
- erg)))
-
-(defun py--beginning-of-minor-block-position ()
- "Return beginning of minor-block position."
- (save-excursion
- (let ((erg (or (py--beginning-of-minor-block-p)
- (py-backward-minor-block))))
- erg)))
-
-(defun py--beginning-of-partial-expression-position ()
- "Return beginning of partial-expression position."
- (save-excursion
- (let ((erg (or (py--beginning-of-partial-expression-p)
- (py-backward-partial-expression))))
- erg)))
-
-(defun py--beginning-of-paragraph-position ()
- "Return beginning of paragraph position."
- (save-excursion
- (let ((erg (or (py--beginning-of-paragraph-p)
- (py-backward-paragraph))))
- erg)))
-
-(defun py--beginning-of-section-position ()
- "Return beginning of section position."
- (save-excursion
- (let ((erg (or (py--beginning-of-section-p)
- (py-backward-section))))
- erg)))
-
-(defun py--beginning-of-statement-position ()
- "Return beginning of statement position."
- (save-excursion
- (let ((erg (or (py--beginning-of-statement-p)
- (py-backward-statement))))
- erg)))
-
-(defun py--beginning-of-top-level-position ()
- "Return beginning of top-level position."
- (save-excursion
- (let ((erg (or (py--beginning-of-top-level-p)
- (py-backward-top-level))))
- erg)))
-
-(defun py--beginning-of-try-block-position ()
- "Return beginning of try-block position."
- (save-excursion
- (let ((erg (or (py--beginning-of-try-block-p)
- (py-backward-try-block))))
- erg)))
-
-(defun py--beginning-of-block-position-bol ()
- "Return beginning of block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-block-bol-p)
- (py-backward-block-bol))))
- erg)))
-
-(defun py--beginning-of-block-or-clause-position-bol ()
- "Return beginning of block-or-clause position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-block-or-clause-bol-p)
- (py-backward-block-or-clause-bol))))
- erg)))
-
-(defun py--beginning-of-class-position-bol ()
- "Return beginning of class position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-class-bol-p)
- (py-backward-class-bol))))
- erg)))
-
-(defun py--beginning-of-clause-position-bol ()
- "Return beginning of clause position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-clause-bol-p)
- (py-backward-clause-bol))))
- erg)))
-
-(defun py--beginning-of-def-position-bol ()
- "Return beginning of def position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-def-bol-p)
- (py-backward-def-bol))))
- erg)))
-
-(defun py--beginning-of-def-or-class-position-bol ()
- "Return beginning of def-or-class position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-def-or-class-bol-p)
- (py-backward-def-or-class-bol))))
- erg)))
-
-(defun py--beginning-of-elif-block-position-bol ()
- "Return beginning of elif-block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-elif-block-bol-p)
- (py-backward-elif-block-bol))))
- erg)))
-
-(defun py--beginning-of-else-block-position-bol ()
- "Return beginning of else-block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-else-block-bol-p)
- (py-backward-else-block-bol))))
- erg)))
-
-(defun py--beginning-of-except-block-position-bol ()
- "Return beginning of except-block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-except-block-bol-p)
- (py-backward-except-block-bol))))
- erg)))
-
-(defun py--beginning-of-for-block-position-bol ()
- "Return beginning of for-block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-for-block-bol-p)
- (py-backward-for-block-bol))))
- erg)))
-
-(defun py--beginning-of-if-block-position-bol ()
- "Return beginning of if-block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-if-block-bol-p)
- (py-backward-if-block-bol))))
- erg)))
-
-(defun py--beginning-of-indent-position-bol ()
- "Return beginning of indent position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-indent-bol-p)
- (py-backward-indent-bol))))
- erg)))
-
-(defun py--beginning-of-minor-block-position-bol ()
- "Return beginning of minor-block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-minor-block-bol-p)
- (py-backward-minor-block-bol))))
- erg)))
-
-(defun py--beginning-of-statement-position-bol ()
- "Return beginning of statement position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-statement-bol-p)
- (py-backward-statement-bol))))
- erg)))
-
-(defun py--beginning-of-try-block-position-bol ()
- "Return beginning of try-block position at ‘beginning-of-line’."
- (save-excursion
- (let ((erg (or (py--beginning-of-try-block-bol-p)
- (py-backward-try-block-bol))))
- erg)))
-
-;; python-components-end-position-forms
-
-
-(defun py--end-of-block-position ()
- "Return end of block position."
- (save-excursion (py-forward-block)))
-
-(defun py--end-of-block-or-clause-position ()
- "Return end of block-or-clause position."
- (save-excursion (py-forward-block-or-clause)))
-
-(defun py--end-of-class-position ()
- "Return end of class position."
- (save-excursion (py-forward-class)))
-
-(defun py--end-of-clause-position ()
- "Return end of clause position."
- (save-excursion (py-forward-clause)))
-
-(defun py--end-of-comment-position ()
- "Return end of comment position."
- (save-excursion (py-forward-comment)))
-
-(defun py--end-of-def-position ()
- "Return end of def position."
- (save-excursion (py-forward-def)))
-
-(defun py--end-of-def-or-class-position ()
- "Return end of def-or-class position."
- (save-excursion (py-forward-def-or-class)))
-
-(defun py--end-of-expression-position ()
- "Return end of expression position."
- (save-excursion (py-forward-expression)))
-
-(defun py--end-of-except-block-position ()
- "Return end of except-block position."
- (save-excursion (py-forward-except-block)))
-
-(defun py--end-of-if-block-position ()
- "Return end of if-block position."
- (save-excursion (py-forward-if-block)))
-
-(defun py--end-of-indent-position ()
- "Return end of indent position."
- (save-excursion (py-forward-indent)))
-
-(defun py--end-of-line-position ()
- "Return end of line position."
- (save-excursion (py-forward-line)))
-
-(defun py--end-of-minor-block-position ()
- "Return end of minor-block position."
- (save-excursion (py-forward-minor-block)))
-
-(defun py--end-of-partial-expression-position ()
- "Return end of partial-expression position."
- (save-excursion (py-forward-partial-expression)))
-
-(defun py--end-of-paragraph-position ()
- "Return end of paragraph position."
- (save-excursion (py-forward-paragraph)))
-
-(defun py--end-of-section-position ()
- "Return end of section position."
- (save-excursion (py-forward-section)))
-
-(defun py--end-of-statement-position ()
- "Return end of statement position."
- (save-excursion (py-forward-statement)))
-
-(defun py--end-of-top-level-position ()
- "Return end of top-level position."
- (save-excursion (py-forward-top-level)))
-
-(defun py--end-of-try-block-position ()
- "Return end of try-block position."
- (save-excursion (py-forward-try-block)))
-
-(defun py--end-of-block-position-bol ()
- "Return end of block position at ‘beginning-of-line’."
- (save-excursion (py-forward-block-bol)))
-
-(defun py--end-of-block-or-clause-position-bol ()
- "Return end of block-or-clause position at ‘beginning-of-line’."
- (save-excursion (py-forward-block-or-clause-bol)))
-
-(defun py--end-of-class-position-bol ()
- "Return end of class position at ‘beginning-of-line’."
- (save-excursion (py-forward-class-bol)))
-
-(defun py--end-of-clause-position-bol ()
- "Return end of clause position at ‘beginning-of-line’."
- (save-excursion (py-forward-clause-bol)))
-
-(defun py--end-of-def-position-bol ()
- "Return end of def position at ‘beginning-of-line’."
- (save-excursion (py-forward-def-bol)))
-
-(defun py--end-of-def-or-class-position-bol ()
- "Return end of def-or-class position at ‘beginning-of-line’."
- (save-excursion (py-forward-def-or-class-bol)))
-
-(defun py--end-of-elif-block-position-bol ()
- "Return end of elif-block position at ‘beginning-of-line’."
- (save-excursion (py-forward-elif-block-bol)))
-
-(defun py--end-of-else-block-position-bol ()
- "Return end of else-block position at ‘beginning-of-line’."
- (save-excursion (py-forward-else-block-bol)))
-
-(defun py--end-of-except-block-position-bol ()
- "Return end of except-block position at ‘beginning-of-line’."
- (save-excursion (py-forward-except-block-bol)))
-
-(defun py--end-of-for-block-position-bol ()
- "Return end of for-block position at ‘beginning-of-line’."
- (save-excursion (py-forward-for-block-bol)))
-
-(defun py--end-of-if-block-position-bol ()
- "Return end of if-block position at ‘beginning-of-line’."
- (save-excursion (py-forward-if-block-bol)))
-
-(defun py--end-of-indent-position-bol ()
- "Return end of indent position at ‘beginning-of-line’."
- (save-excursion (py-forward-indent-bol)))
-
-(defun py--end-of-minor-block-position-bol ()
- "Return end of minor-block position at ‘beginning-of-line’."
- (save-excursion (py-forward-minor-block-bol)))
-
-(defun py--end-of-statement-position-bol ()
- "Return end of statement position at ‘beginning-of-line’."
- (save-excursion (py-forward-statement-bol)))
-
-(defun py--end-of-try-block-position-bol ()
- "Return end of try-block position at ‘beginning-of-line’."
- (save-excursion (py-forward-try-block-bol)))
-
-;; python-components-up-down
-
-
-(defun py-up-statement ()
- "go to the beginning of next statement upwards in buffer.
-
-Return position if statement found, nil otherwise."
- (interactive)
- (let (erg)
- (if (py--beginning-of-statement-p)
- (setq erg (py-backward-statement))
- (setq erg (and (py-backward-statement) (py-backward-statement))))
- (when (and py-verbose-p (called-interactively-p 'interactive)) (message "%s" erg))
- erg))
-
-(defun py-down-statement ()
- "Go to the beginning of next statement downwards in buffer.
-
-Corresponds to backward-up-list in Elisp
-Return position if statement found, nil otherwise."
- (interactive)
- (let* ((orig (point))
- erg)
- (cond ((py--end-of-statement-p)
- (setq erg
- (and
- (py-forward-statement)
- (py-backward-statement)
- (< orig (point))
- (point))))
- ((ignore-errors (< orig (ignore-errors (and (py-forward-statement) (py-backward-statement)))))
- (setq erg (point)))
- (t (setq erg (ignore-errors (< orig (and (py-forward-statement) (py-forward-statement)(py-backward-statement)))))))
- (when (and py-verbose-p (called-interactively-p 'interactive)) (message "%s" erg))
- erg))
-
-(defalias 'py-block-up 'py-up-block)
-(defun py-up-block (&optional indent)
- "Go to the beginning of next block upwards in buffer according to INDENT.
-Optional INDENT
-Return position if block found, nil otherwise."
- (interactive)
- (py-up-base 'py-block-re indent))
-
-(defalias 'py-class-up 'py-up-class)
-(defun py-up-class (&optional indent)
- "Go to the beginning of next class upwards in buffer according to INDENT.
-Optional INDENT
-Return position if class found, nil otherwise."
- (interactive)
- (py-up-base 'py-class-re indent))
-
-(defalias 'py-clause-up 'py-up-clause)
-(defun py-up-clause (&optional indent)
- "Go to the beginning of next clause upwards in buffer according to INDENT.
-Optional INDENT
-Return position if clause found, nil otherwise."
- (interactive)
- (py-up-base 'py-clause-re indent))
-
-(defalias 'py-block-or-clause-up 'py-up-block-or-clause)
-(defun py-up-block-or-clause (&optional indent)
- "Go to the beginning of next block-or-clause upwards in buffer according to INDENT.
-Optional INDENT
-Return position if block-or-clause found, nil otherwise."
- (interactive)
- (py-up-base 'py-block-or-clause-re indent))
-
-(defalias 'py-def-up 'py-up-def)
-(defun py-up-def (&optional indent)
- "Go to the beginning of next def upwards in buffer according to INDENT.
-Optional INDENT
-Return position if def found, nil otherwise."
- (interactive)
- (py-up-base 'py-def-re indent))
-
-(defalias 'py-def-or-class-up 'py-up-def-or-class)
-(defun py-up-def-or-class (&optional indent)
- "Go to the beginning of next def-or-class upwards in buffer according to INDENT.
-Optional INDENT
-Return position if def-or-class found, nil otherwise."
- (interactive)
- (py-up-base 'py-def-or-class-re indent))
-
-(defalias 'py-minor-block-up 'py-up-minor-block)
-(defun py-up-minor-block (&optional indent)
- "Go to the beginning of next minor-block upwards in buffer according to INDENT.
-Optional INDENT
-Return position if minor-block found, nil otherwise."
- (interactive)
- (py-up-base 'py-minor-block-re indent))
-
-(defalias 'py-block-down 'py-down-block)
-(defun py-down-block (&optional indent)
- "Go to the beginning of next block below in buffer according to INDENT.
-
-Optional INDENT: honor indentation
-Return position if block found, nil otherwise."
- (interactive)
- (py-down-base 'py-block-re indent))
-
-(defalias 'py-class-down 'py-down-class)
-(defun py-down-class (&optional indent)
- "Go to the beginning of next class below in buffer according to INDENT.
-
-Optional INDENT: honor indentation
-Return position if class found, nil otherwise."
- (interactive)
- (py-down-base 'py-class-re indent))
-
-(defalias 'py-clause-down 'py-down-clause)
-(defun py-down-clause (&optional indent)
- "Go to the beginning of next clause below in buffer according to INDENT.
-
-Optional INDENT: honor indentation
-Return position if clause found, nil otherwise."
- (interactive)
- (py-down-base 'py-clause-re indent))
-
-(defalias 'py-block-or-clause-down 'py-down-block-or-clause)
-(defun py-down-block-or-clause (&optional indent)
- "Go to the beginning of next block-or-clause below in buffer according to INDENT.
-
-Optional INDENT: honor indentation
-Return position if block-or-clause found, nil otherwise."
- (interactive)
- (py-down-base 'py-block-or-clause-re indent))
-
-(defalias 'py-def-down 'py-down-def)
-(defun py-down-def (&optional indent)
- "Go to the beginning of next def below in buffer according to INDENT.
-
-Optional INDENT: honor indentation
-Return position if def found, nil otherwise."
- (interactive)
- (py-down-base 'py-def-re indent))
-
-(defalias 'py-def-or-class-down 'py-down-def-or-class)
-(defun py-down-def-or-class (&optional indent)
- "Go to the beginning of next def-or-class below in buffer according to INDENT.
-
-Optional INDENT: honor indentation
-Return position if def-or-class found, nil otherwise."
- (interactive)
- (py-down-base 'py-def-or-class-re indent))
-
-(defalias 'py-minor-block-down 'py-down-minor-block)
-(defun py-down-minor-block (&optional indent)
- "Go to the beginning of next minor-block below in buffer according to INDENT.
-
-Optional INDENT: honor indentation
-Return position if minor-block found, nil otherwise."
- (interactive)
- (py-down-base 'py-minor-block-re indent))
-
-(defun py-up-block-bol (&optional indent)
- "Go to the beginning of next block upwards in buffer according to INDENT.
-
-Go to beginning of line.
-Return position if block found, nil otherwise."
- (interactive)
- (py-up-base 'py-block-re indent)
- (progn (beginning-of-line)(point)))
-
-(defun py-up-class-bol (&optional indent)
- "Go to the beginning of next class upwards in buffer according to INDENT.
-
-Go to beginning of line.
-Return position if class found, nil otherwise."
- (interactive)
- (py-up-base 'py-class-re indent)
- (progn (beginning-of-line)(point)))
-
-(defun py-up-clause-bol (&optional indent)
- "Go to the beginning of next clause upwards in buffer according to INDENT.
-
-Go to beginning of line.
-Return position if clause found, nil otherwise."
- (interactive)
- (py-up-base 'py-clause-re indent)
- (progn (beginning-of-line)(point)))
-
-(defun py-up-block-or-clause-bol (&optional indent)
- "Go to the beginning of next block-or-clause upwards in buffer according to INDENT.
-
-Go to beginning of line.
-Return position if block-or-clause found, nil otherwise."
- (interactive)
- (py-up-base 'py-block-or-clause-re indent)
- (progn (beginning-of-line)(point)))
-
-(defun py-up-def-bol (&optional indent)
- "Go to the beginning of next def upwards in buffer according to INDENT.
-
-Go to beginning of line.
-Return position if def found, nil otherwise."
- (interactive)
- (py-up-base 'py-def-re indent)
- (progn (beginning-of-line)(point)))
-
-(defun py-up-def-or-class-bol (&optional indent)
- "Go to the beginning of next def-or-class upwards in buffer according to INDENT.
-
-Go to beginning of line.
-Return position if def-or-class found, nil otherwise."
- (interactive)
- (py-up-base 'py-def-or-class-re indent)
- (progn (beginning-of-line)(point)))
-
-(defun py-up-minor-block-bol (&optional indent)
- "Go to the beginning of next minor-block upwards in buffer according to INDENT.
-
-Go to beginning of line.
-Return position if minor-block found, nil otherwise."
- (interactive)
- (py-up-base 'py-minor-block-re indent)
- (progn (beginning-of-line)(point)))
-
-(defun py-down-block-bol (&optional indent)
- "Go to the beginning of next block below in buffer according to INDENT.
-
-Go to beginning of line
-Optional INDENT: honor indentation
-Return position if block found, nil otherwise "
- (interactive)
- (py-down-base 'py-block-re indent t)
- (progn (beginning-of-line)(point)))
-
-(defun py-down-class-bol (&optional indent)
- "Go to the beginning of next class below in buffer according to INDENT.
-
-Go to beginning of line
-Optional INDENT: honor indentation
-Return position if class found, nil otherwise "
- (interactive)
- (py-down-base 'py-class-re indent t)
- (progn (beginning-of-line)(point)))
-
-(defun py-down-clause-bol (&optional indent)
- "Go to the beginning of next clause below in buffer according to INDENT.
-
-Go to beginning of line
-Optional INDENT: honor indentation
-Return position if clause found, nil otherwise "
- (interactive)
- (py-down-base 'py-clause-re indent t)
- (progn (beginning-of-line)(point)))
-
-(defun py-down-block-or-clause-bol (&optional indent)
- "Go to the beginning of next block-or-clause below in buffer according to INDENT.
-
-Go to beginning of line
-Optional INDENT: honor indentation
-Return position if block-or-clause found, nil otherwise "
- (interactive)
- (py-down-base 'py-block-or-clause-re indent t)
- (progn (beginning-of-line)(point)))
-
-(defun py-down-def-bol (&optional indent)
- "Go to the beginning of next def below in buffer according to INDENT.
-
-Go to beginning of line
-Optional INDENT: honor indentation
-Return position if def found, nil otherwise "
- (interactive)
- (py-down-base 'py-def-re indent t)
- (progn (beginning-of-line)(point)))
-
-(defun py-down-def-or-class-bol (&optional indent)
- "Go to the beginning of next def-or-class below in buffer according to INDENT.
-
-Go to beginning of line
-Optional INDENT: honor indentation
-Return position if def-or-class found, nil otherwise "
- (interactive)
- (py-down-base 'py-def-or-class-re indent t)
- (progn (beginning-of-line)(point)))
-
-(defun py-down-minor-block-bol (&optional indent)
- "Go to the beginning of next minor-block below in buffer according to INDENT.
-
-Go to beginning of line
-Optional INDENT: honor indentation
-Return position if minor-block found, nil otherwise "
- (interactive)
- (py-down-base 'py-minor-block-re indent t)
- (progn (beginning-of-line)(point)))
-
-;; python-components-up-down.el ends here
-;; python-components-exec-forms
-
-;; Execute forms at point
-
-(defun py-execute-try-block ()
- "Send try-block at point to Python default interpreter."
- (interactive)
- (let ((beg (prog1
- (or (py--beginning-of-try-block-p)
- (save-excursion
- (py-backward-try-block)))))
- (end (save-excursion
- (py-forward-try-block))))
- (py-execute-region beg end)))
-
-(defun py-execute-if-block ()
- "Send if-block at point to Python default interpreter."
- (interactive)
- (let ((beg (prog1
- (or (py--beginning-of-if-block-p)
- (save-excursion
- (py-backward-if-block)))))
- (end (save-excursion
- (py-forward-if-block))))
- (py-execute-region beg end)))
-
-(defun py-execute-for-block ()
- "Send for-block at point to Python default interpreter."
- (interactive)
- (let ((beg (prog1
- (or (py--beginning-of-for-block-p)
- (save-excursion
- (py-backward-for-block)))))
- (end (save-excursion
- (py-forward-for-block))))
- (py-execute-region beg end)))
-
-;; python-components-extended-executes
-
-
-(defun py-execute-block (&optional shell dedicated fast split switch proc)
- "Send block at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-switch (&optional shell dedicated fast split proc)
- "Send block at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-no-switch (&optional shell dedicated fast split proc)
- "Send block at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-dedicated (&optional shell fast split switch proc)
- "Send block at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-dedicated-switch (&optional shell fast split proc)
- "Send block at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython (&optional dedicated fast split switch proc)
- "Send block at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython-switch (&optional dedicated fast split proc)
- "Send block at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython-no-switch (&optional dedicated fast split proc)
- "Send block at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython-dedicated (&optional fast split switch proc)
- "Send block at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython-dedicated-switch (&optional fast split proc)
- "Send block at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython2.7 (&optional dedicated fast split switch proc)
- "Send block at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython2.7-switch (&optional dedicated fast split proc)
- "Send block at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send block at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython2.7-dedicated (&optional fast split switch proc)
- "Send block at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send block at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython3 (&optional dedicated fast split switch proc)
- "Send block at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython3-switch (&optional dedicated fast split proc)
- "Send block at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython3-no-switch (&optional dedicated fast split proc)
- "Send block at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython3-dedicated (&optional fast split switch proc)
- "Send block at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-ipython3-dedicated-switch (&optional fast split proc)
- "Send block at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-jython (&optional dedicated fast split switch proc)
- "Send block at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-jython-switch (&optional dedicated fast split proc)
- "Send block at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-jython-no-switch (&optional dedicated fast split proc)
- "Send block at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-jython-dedicated (&optional fast split switch proc)
- "Send block at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-jython-dedicated-switch (&optional fast split proc)
- "Send block at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python (&optional dedicated fast split switch proc)
- "Send block at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python-switch (&optional dedicated fast split proc)
- "Send block at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python-no-switch (&optional dedicated fast split proc)
- "Send block at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python-dedicated (&optional fast split switch proc)
- "Send block at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python-dedicated-switch (&optional fast split proc)
- "Send block at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python2 (&optional dedicated fast split switch proc)
- "Send block at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python2-switch (&optional dedicated fast split proc)
- "Send block at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python2-no-switch (&optional dedicated fast split proc)
- "Send block at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python2-dedicated (&optional fast split switch proc)
- "Send block at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python2-dedicated-switch (&optional fast split proc)
- "Send block at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python3 (&optional dedicated fast split switch proc)
- "Send block at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python3-switch (&optional dedicated fast split proc)
- "Send block at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python3-no-switch (&optional dedicated fast split proc)
- "Send block at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python3-dedicated (&optional fast split switch proc)
- "Send block at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-python3-dedicated-switch (&optional fast split proc)
- "Send block at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause (&optional shell dedicated fast split switch proc)
- "Send block-or-clause at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-switch (&optional shell dedicated fast split proc)
- "Send block-or-clause at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-no-switch (&optional shell dedicated fast split proc)
- "Send block-or-clause at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-dedicated (&optional shell fast split switch proc)
- "Send block-or-clause at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-dedicated-switch (&optional shell fast split proc)
- "Send block-or-clause at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython (&optional dedicated fast split switch proc)
- "Send block-or-clause at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython-no-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython-dedicated (&optional fast split switch proc)
- "Send block-or-clause at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython-dedicated-switch (&optional fast split proc)
- "Send block-or-clause at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython2.7 (&optional dedicated fast split switch proc)
- "Send block-or-clause at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython2.7-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython2.7-dedicated (&optional fast split switch proc)
- "Send block-or-clause at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send block-or-clause at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython3 (&optional dedicated fast split switch proc)
- "Send block-or-clause at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython3-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython3-no-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython3-dedicated (&optional fast split switch proc)
- "Send block-or-clause at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-ipython3-dedicated-switch (&optional fast split proc)
- "Send block-or-clause at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-jython (&optional dedicated fast split switch proc)
- "Send block-or-clause at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-jython-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-jython-no-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-jython-dedicated (&optional fast split switch proc)
- "Send block-or-clause at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-jython-dedicated-switch (&optional fast split proc)
- "Send block-or-clause at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python (&optional dedicated fast split switch proc)
- "Send block-or-clause at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python-no-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python-dedicated (&optional fast split switch proc)
- "Send block-or-clause at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python-dedicated-switch (&optional fast split proc)
- "Send block-or-clause at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python2 (&optional dedicated fast split switch proc)
- "Send block-or-clause at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python2-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python2-no-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python2-dedicated (&optional fast split switch proc)
- "Send block-or-clause at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python2-dedicated-switch (&optional fast split proc)
- "Send block-or-clause at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python3 (&optional dedicated fast split switch proc)
- "Send block-or-clause at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python3-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python3-no-switch (&optional dedicated fast split proc)
- "Send block-or-clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python3-dedicated (&optional fast split switch proc)
- "Send block-or-clause at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-block-or-clause-python3-dedicated-switch (&optional fast split proc)
- "Send block-or-clause at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'block-or-clause 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-buffer (&optional shell dedicated fast split switch proc)
- "Send buffer at point to interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- (shell (or shell (py-choose-shell)))
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer shell dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-switch (&optional shell dedicated fast split proc)
- "Send buffer at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer shell dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-no-switch (&optional shell dedicated fast split proc)
- "Send buffer at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer shell dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-dedicated (&optional shell fast split switch proc)
- "Send buffer at point to unique interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer shell t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-dedicated-switch (&optional shell fast split proc)
- "Send buffer at point to unique interpreter and switch to result."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer shell t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython (&optional dedicated fast split switch proc)
- "Send buffer at point to IPython interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython-switch (&optional dedicated fast split proc)
- "Send buffer at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython-no-switch (&optional dedicated fast split proc)
- "Send buffer at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython-dedicated (&optional fast split switch proc)
- "Send buffer at point to IPython unique interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython-dedicated-switch (&optional fast split proc)
- "Send buffer at point to IPython unique interpreter and switch to result."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython2.7 (&optional dedicated fast split switch proc)
- "Send buffer at point to IPython interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython2.7 dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython2.7-switch (&optional dedicated fast split proc)
- "Send buffer at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython2.7 dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send buffer at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython2.7 dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython2.7-dedicated (&optional fast split switch proc)
- "Send buffer at point to IPython unique interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython2.7 t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send buffer at point to IPython unique interpreter and switch to result."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython2.7 t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython3 (&optional dedicated fast split switch proc)
- "Send buffer at point to IPython interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython3 dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython3-switch (&optional dedicated fast split proc)
- "Send buffer at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython3 dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython3-no-switch (&optional dedicated fast split proc)
- "Send buffer at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython3 dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython3-dedicated (&optional fast split switch proc)
- "Send buffer at point to IPython unique interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython3 t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-ipython3-dedicated-switch (&optional fast split proc)
- "Send buffer at point to IPython unique interpreter and switch to result."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'ipython3 t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-jython (&optional dedicated fast split switch proc)
- "Send buffer at point to Jython interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'jython dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-jython-switch (&optional dedicated fast split proc)
- "Send buffer at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'jython dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-jython-no-switch (&optional dedicated fast split proc)
- "Send buffer at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'jython dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-jython-dedicated (&optional fast split switch proc)
- "Send buffer at point to Jython unique interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'jython t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-jython-dedicated-switch (&optional fast split proc)
- "Send buffer at point to Jython unique interpreter and switch to result."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'jython t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python (&optional dedicated fast split switch proc)
- "Send buffer at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python-switch (&optional dedicated fast split proc)
- "Send buffer at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python-no-switch (&optional dedicated fast split proc)
- "Send buffer at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python-dedicated (&optional fast split switch proc)
- "Send buffer at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python-dedicated-switch (&optional fast split proc)
- "Send buffer at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python2 (&optional dedicated fast split switch proc)
- "Send buffer at point to Python2 interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python2 dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python2-switch (&optional dedicated fast split proc)
- "Send buffer at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python2 dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python2-no-switch (&optional dedicated fast split proc)
- "Send buffer at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python2 dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python2-dedicated (&optional fast split switch proc)
- "Send buffer at point to Python2 unique interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python2 t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python2-dedicated-switch (&optional fast split proc)
- "Send buffer at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python2 t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python3 (&optional dedicated fast split switch proc)
- "Send buffer at point to Python3 interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python3 dedicated switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python3-switch (&optional dedicated fast split proc)
- "Send buffer at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python3 dedicated 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python3-no-switch (&optional dedicated fast split proc)
- "Send buffer at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python3 dedicated 'no-switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python3-dedicated (&optional fast split switch proc)
- "Send buffer at point to Python3 unique interpreter."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python3 t switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-buffer-python3-dedicated-switch (&optional fast split proc)
- "Send buffer at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file)))
- (wholebuf t)
- filename buffer)
- (when py-master-file
- (setq filename (expand-file-name py-master-file)
- buffer (or (get-file-buffer filename)
- (find-file-noselect filename)))
- (set-buffer buffer))
- (py--execute-prepare 'buffer 'python3 t 'switch (point-min) (point-max) nil fast proc wholebuf split)))
-
-(defun py-execute-class (&optional shell dedicated fast split switch proc)
- "Send class at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-switch (&optional shell dedicated fast split proc)
- "Send class at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-no-switch (&optional shell dedicated fast split proc)
- "Send class at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-dedicated (&optional shell fast split switch proc)
- "Send class at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-dedicated-switch (&optional shell fast split proc)
- "Send class at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython (&optional dedicated fast split switch proc)
- "Send class at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython-switch (&optional dedicated fast split proc)
- "Send class at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython-no-switch (&optional dedicated fast split proc)
- "Send class at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython-dedicated (&optional fast split switch proc)
- "Send class at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython-dedicated-switch (&optional fast split proc)
- "Send class at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython2.7 (&optional dedicated fast split switch proc)
- "Send class at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython2.7-switch (&optional dedicated fast split proc)
- "Send class at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send class at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython2.7-dedicated (&optional fast split switch proc)
- "Send class at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send class at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython3 (&optional dedicated fast split switch proc)
- "Send class at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython3-switch (&optional dedicated fast split proc)
- "Send class at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython3-no-switch (&optional dedicated fast split proc)
- "Send class at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython3-dedicated (&optional fast split switch proc)
- "Send class at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-ipython3-dedicated-switch (&optional fast split proc)
- "Send class at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-jython (&optional dedicated fast split switch proc)
- "Send class at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-jython-switch (&optional dedicated fast split proc)
- "Send class at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-jython-no-switch (&optional dedicated fast split proc)
- "Send class at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-jython-dedicated (&optional fast split switch proc)
- "Send class at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-jython-dedicated-switch (&optional fast split proc)
- "Send class at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python (&optional dedicated fast split switch proc)
- "Send class at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python-switch (&optional dedicated fast split proc)
- "Send class at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python-no-switch (&optional dedicated fast split proc)
- "Send class at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python-dedicated (&optional fast split switch proc)
- "Send class at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python-dedicated-switch (&optional fast split proc)
- "Send class at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python2 (&optional dedicated fast split switch proc)
- "Send class at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python2-switch (&optional dedicated fast split proc)
- "Send class at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python2-no-switch (&optional dedicated fast split proc)
- "Send class at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python2-dedicated (&optional fast split switch proc)
- "Send class at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python2-dedicated-switch (&optional fast split proc)
- "Send class at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python3 (&optional dedicated fast split switch proc)
- "Send class at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python3-switch (&optional dedicated fast split proc)
- "Send class at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python3-no-switch (&optional dedicated fast split proc)
- "Send class at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python3-dedicated (&optional fast split switch proc)
- "Send class at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-class-python3-dedicated-switch (&optional fast split proc)
- "Send class at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'class 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause (&optional shell dedicated fast split switch proc)
- "Send clause at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-switch (&optional shell dedicated fast split proc)
- "Send clause at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-no-switch (&optional shell dedicated fast split proc)
- "Send clause at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-dedicated (&optional shell fast split switch proc)
- "Send clause at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-dedicated-switch (&optional shell fast split proc)
- "Send clause at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython (&optional dedicated fast split switch proc)
- "Send clause at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython-switch (&optional dedicated fast split proc)
- "Send clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython-no-switch (&optional dedicated fast split proc)
- "Send clause at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython-dedicated (&optional fast split switch proc)
- "Send clause at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython-dedicated-switch (&optional fast split proc)
- "Send clause at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython2.7 (&optional dedicated fast split switch proc)
- "Send clause at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython2.7-switch (&optional dedicated fast split proc)
- "Send clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send clause at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython2.7-dedicated (&optional fast split switch proc)
- "Send clause at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send clause at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython3 (&optional dedicated fast split switch proc)
- "Send clause at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython3-switch (&optional dedicated fast split proc)
- "Send clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython3-no-switch (&optional dedicated fast split proc)
- "Send clause at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython3-dedicated (&optional fast split switch proc)
- "Send clause at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-ipython3-dedicated-switch (&optional fast split proc)
- "Send clause at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-jython (&optional dedicated fast split switch proc)
- "Send clause at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-jython-switch (&optional dedicated fast split proc)
- "Send clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-jython-no-switch (&optional dedicated fast split proc)
- "Send clause at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-jython-dedicated (&optional fast split switch proc)
- "Send clause at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-jython-dedicated-switch (&optional fast split proc)
- "Send clause at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python (&optional dedicated fast split switch proc)
- "Send clause at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python-switch (&optional dedicated fast split proc)
- "Send clause at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python-no-switch (&optional dedicated fast split proc)
- "Send clause at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python-dedicated (&optional fast split switch proc)
- "Send clause at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python-dedicated-switch (&optional fast split proc)
- "Send clause at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python2 (&optional dedicated fast split switch proc)
- "Send clause at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python2-switch (&optional dedicated fast split proc)
- "Send clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python2-no-switch (&optional dedicated fast split proc)
- "Send clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python2-dedicated (&optional fast split switch proc)
- "Send clause at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python2-dedicated-switch (&optional fast split proc)
- "Send clause at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python3 (&optional dedicated fast split switch proc)
- "Send clause at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python3-switch (&optional dedicated fast split proc)
- "Send clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python3-no-switch (&optional dedicated fast split proc)
- "Send clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python3-dedicated (&optional fast split switch proc)
- "Send clause at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-clause-python3-dedicated-switch (&optional fast split proc)
- "Send clause at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'clause 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def (&optional shell dedicated fast split switch proc)
- "Send def at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-switch (&optional shell dedicated fast split proc)
- "Send def at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-no-switch (&optional shell dedicated fast split proc)
- "Send def at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-dedicated (&optional shell fast split switch proc)
- "Send def at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-dedicated-switch (&optional shell fast split proc)
- "Send def at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython (&optional dedicated fast split switch proc)
- "Send def at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython-switch (&optional dedicated fast split proc)
- "Send def at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython-no-switch (&optional dedicated fast split proc)
- "Send def at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython-dedicated (&optional fast split switch proc)
- "Send def at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython-dedicated-switch (&optional fast split proc)
- "Send def at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython2.7 (&optional dedicated fast split switch proc)
- "Send def at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython2.7-switch (&optional dedicated fast split proc)
- "Send def at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send def at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython2.7-dedicated (&optional fast split switch proc)
- "Send def at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send def at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython3 (&optional dedicated fast split switch proc)
- "Send def at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython3-switch (&optional dedicated fast split proc)
- "Send def at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython3-no-switch (&optional dedicated fast split proc)
- "Send def at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython3-dedicated (&optional fast split switch proc)
- "Send def at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-ipython3-dedicated-switch (&optional fast split proc)
- "Send def at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-jython (&optional dedicated fast split switch proc)
- "Send def at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-jython-switch (&optional dedicated fast split proc)
- "Send def at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-jython-no-switch (&optional dedicated fast split proc)
- "Send def at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-jython-dedicated (&optional fast split switch proc)
- "Send def at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-jython-dedicated-switch (&optional fast split proc)
- "Send def at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python (&optional dedicated fast split switch proc)
- "Send def at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python-switch (&optional dedicated fast split proc)
- "Send def at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python-no-switch (&optional dedicated fast split proc)
- "Send def at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python-dedicated (&optional fast split switch proc)
- "Send def at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python-dedicated-switch (&optional fast split proc)
- "Send def at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python2 (&optional dedicated fast split switch proc)
- "Send def at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python2-switch (&optional dedicated fast split proc)
- "Send def at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python2-no-switch (&optional dedicated fast split proc)
- "Send def at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python2-dedicated (&optional fast split switch proc)
- "Send def at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python2-dedicated-switch (&optional fast split proc)
- "Send def at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python3 (&optional dedicated fast split switch proc)
- "Send def at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python3-switch (&optional dedicated fast split proc)
- "Send def at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python3-no-switch (&optional dedicated fast split proc)
- "Send def at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python3-dedicated (&optional fast split switch proc)
- "Send def at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-python3-dedicated-switch (&optional fast split proc)
- "Send def at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class (&optional shell dedicated fast split switch proc)
- "Send def-or-class at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-switch (&optional shell dedicated fast split proc)
- "Send def-or-class at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-no-switch (&optional shell dedicated fast split proc)
- "Send def-or-class at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-dedicated (&optional shell fast split switch proc)
- "Send def-or-class at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-dedicated-switch (&optional shell fast split proc)
- "Send def-or-class at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython (&optional dedicated fast split switch proc)
- "Send def-or-class at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython-no-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython-dedicated (&optional fast split switch proc)
- "Send def-or-class at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython-dedicated-switch (&optional fast split proc)
- "Send def-or-class at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython2.7 (&optional dedicated fast split switch proc)
- "Send def-or-class at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython2.7-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython2.7-dedicated (&optional fast split switch proc)
- "Send def-or-class at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send def-or-class at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython3 (&optional dedicated fast split switch proc)
- "Send def-or-class at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython3-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython3-no-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython3-dedicated (&optional fast split switch proc)
- "Send def-or-class at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-ipython3-dedicated-switch (&optional fast split proc)
- "Send def-or-class at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-jython (&optional dedicated fast split switch proc)
- "Send def-or-class at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-jython-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-jython-no-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-jython-dedicated (&optional fast split switch proc)
- "Send def-or-class at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-jython-dedicated-switch (&optional fast split proc)
- "Send def-or-class at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python (&optional dedicated fast split switch proc)
- "Send def-or-class at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python-no-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python-dedicated (&optional fast split switch proc)
- "Send def-or-class at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python-dedicated-switch (&optional fast split proc)
- "Send def-or-class at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python2 (&optional dedicated fast split switch proc)
- "Send def-or-class at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python2-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python2-no-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python2-dedicated (&optional fast split switch proc)
- "Send def-or-class at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python2-dedicated-switch (&optional fast split proc)
- "Send def-or-class at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python3 (&optional dedicated fast split switch proc)
- "Send def-or-class at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python3-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python3-no-switch (&optional dedicated fast split proc)
- "Send def-or-class at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python3-dedicated (&optional fast split switch proc)
- "Send def-or-class at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-def-or-class-python3-dedicated-switch (&optional fast split proc)
- "Send def-or-class at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'def-or-class 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression (&optional shell dedicated fast split switch proc)
- "Send expression at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-switch (&optional shell dedicated fast split proc)
- "Send expression at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-no-switch (&optional shell dedicated fast split proc)
- "Send expression at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-dedicated (&optional shell fast split switch proc)
- "Send expression at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-dedicated-switch (&optional shell fast split proc)
- "Send expression at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython (&optional dedicated fast split switch proc)
- "Send expression at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython-switch (&optional dedicated fast split proc)
- "Send expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython-no-switch (&optional dedicated fast split proc)
- "Send expression at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython-dedicated (&optional fast split switch proc)
- "Send expression at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython-dedicated-switch (&optional fast split proc)
- "Send expression at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython2.7 (&optional dedicated fast split switch proc)
- "Send expression at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython2.7-switch (&optional dedicated fast split proc)
- "Send expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send expression at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython2.7-dedicated (&optional fast split switch proc)
- "Send expression at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send expression at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython3 (&optional dedicated fast split switch proc)
- "Send expression at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython3-switch (&optional dedicated fast split proc)
- "Send expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython3-no-switch (&optional dedicated fast split proc)
- "Send expression at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython3-dedicated (&optional fast split switch proc)
- "Send expression at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-ipython3-dedicated-switch (&optional fast split proc)
- "Send expression at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-jython (&optional dedicated fast split switch proc)
- "Send expression at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-jython-switch (&optional dedicated fast split proc)
- "Send expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-jython-no-switch (&optional dedicated fast split proc)
- "Send expression at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-jython-dedicated (&optional fast split switch proc)
- "Send expression at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-jython-dedicated-switch (&optional fast split proc)
- "Send expression at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python (&optional dedicated fast split switch proc)
- "Send expression at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python-switch (&optional dedicated fast split proc)
- "Send expression at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python-no-switch (&optional dedicated fast split proc)
- "Send expression at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python-dedicated (&optional fast split switch proc)
- "Send expression at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python-dedicated-switch (&optional fast split proc)
- "Send expression at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python2 (&optional dedicated fast split switch proc)
- "Send expression at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python2-switch (&optional dedicated fast split proc)
- "Send expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python2-no-switch (&optional dedicated fast split proc)
- "Send expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python2-dedicated (&optional fast split switch proc)
- "Send expression at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python2-dedicated-switch (&optional fast split proc)
- "Send expression at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python3 (&optional dedicated fast split switch proc)
- "Send expression at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python3-switch (&optional dedicated fast split proc)
- "Send expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python3-no-switch (&optional dedicated fast split proc)
- "Send expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python3-dedicated (&optional fast split switch proc)
- "Send expression at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-expression-python3-dedicated-switch (&optional fast split proc)
- "Send expression at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'expression 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent (&optional shell dedicated fast split switch proc)
- "Send indent at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-switch (&optional shell dedicated fast split proc)
- "Send indent at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-no-switch (&optional shell dedicated fast split proc)
- "Send indent at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-dedicated (&optional shell fast split switch proc)
- "Send indent at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-dedicated-switch (&optional shell fast split proc)
- "Send indent at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython (&optional dedicated fast split switch proc)
- "Send indent at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython-switch (&optional dedicated fast split proc)
- "Send indent at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython-no-switch (&optional dedicated fast split proc)
- "Send indent at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython-dedicated (&optional fast split switch proc)
- "Send indent at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython-dedicated-switch (&optional fast split proc)
- "Send indent at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython2.7 (&optional dedicated fast split switch proc)
- "Send indent at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython2.7-switch (&optional dedicated fast split proc)
- "Send indent at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send indent at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython2.7-dedicated (&optional fast split switch proc)
- "Send indent at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send indent at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython3 (&optional dedicated fast split switch proc)
- "Send indent at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython3-switch (&optional dedicated fast split proc)
- "Send indent at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython3-no-switch (&optional dedicated fast split proc)
- "Send indent at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython3-dedicated (&optional fast split switch proc)
- "Send indent at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-ipython3-dedicated-switch (&optional fast split proc)
- "Send indent at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-jython (&optional dedicated fast split switch proc)
- "Send indent at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-jython-switch (&optional dedicated fast split proc)
- "Send indent at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-jython-no-switch (&optional dedicated fast split proc)
- "Send indent at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-jython-dedicated (&optional fast split switch proc)
- "Send indent at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-jython-dedicated-switch (&optional fast split proc)
- "Send indent at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python (&optional dedicated fast split switch proc)
- "Send indent at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python-switch (&optional dedicated fast split proc)
- "Send indent at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python-no-switch (&optional dedicated fast split proc)
- "Send indent at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python-dedicated (&optional fast split switch proc)
- "Send indent at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python-dedicated-switch (&optional fast split proc)
- "Send indent at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python2 (&optional dedicated fast split switch proc)
- "Send indent at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python2-switch (&optional dedicated fast split proc)
- "Send indent at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python2-no-switch (&optional dedicated fast split proc)
- "Send indent at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python2-dedicated (&optional fast split switch proc)
- "Send indent at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python2-dedicated-switch (&optional fast split proc)
- "Send indent at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python3 (&optional dedicated fast split switch proc)
- "Send indent at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python3-switch (&optional dedicated fast split proc)
- "Send indent at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python3-no-switch (&optional dedicated fast split proc)
- "Send indent at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python3-dedicated (&optional fast split switch proc)
- "Send indent at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-indent-python3-dedicated-switch (&optional fast split proc)
- "Send indent at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'indent 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line (&optional shell dedicated fast split switch proc)
- "Send line at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-switch (&optional shell dedicated fast split proc)
- "Send line at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-no-switch (&optional shell dedicated fast split proc)
- "Send line at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-dedicated (&optional shell fast split switch proc)
- "Send line at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-dedicated-switch (&optional shell fast split proc)
- "Send line at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython (&optional dedicated fast split switch proc)
- "Send line at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython-switch (&optional dedicated fast split proc)
- "Send line at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython-no-switch (&optional dedicated fast split proc)
- "Send line at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython-dedicated (&optional fast split switch proc)
- "Send line at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython-dedicated-switch (&optional fast split proc)
- "Send line at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython2.7 (&optional dedicated fast split switch proc)
- "Send line at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython2.7-switch (&optional dedicated fast split proc)
- "Send line at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send line at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython2.7-dedicated (&optional fast split switch proc)
- "Send line at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send line at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython3 (&optional dedicated fast split switch proc)
- "Send line at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython3-switch (&optional dedicated fast split proc)
- "Send line at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython3-no-switch (&optional dedicated fast split proc)
- "Send line at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython3-dedicated (&optional fast split switch proc)
- "Send line at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-ipython3-dedicated-switch (&optional fast split proc)
- "Send line at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-jython (&optional dedicated fast split switch proc)
- "Send line at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-jython-switch (&optional dedicated fast split proc)
- "Send line at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-jython-no-switch (&optional dedicated fast split proc)
- "Send line at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-jython-dedicated (&optional fast split switch proc)
- "Send line at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-jython-dedicated-switch (&optional fast split proc)
- "Send line at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python (&optional dedicated fast split switch proc)
- "Send line at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python-switch (&optional dedicated fast split proc)
- "Send line at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python-no-switch (&optional dedicated fast split proc)
- "Send line at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python-dedicated (&optional fast split switch proc)
- "Send line at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python-dedicated-switch (&optional fast split proc)
- "Send line at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python2 (&optional dedicated fast split switch proc)
- "Send line at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python2-switch (&optional dedicated fast split proc)
- "Send line at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python2-no-switch (&optional dedicated fast split proc)
- "Send line at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python2-dedicated (&optional fast split switch proc)
- "Send line at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python2-dedicated-switch (&optional fast split proc)
- "Send line at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python3 (&optional dedicated fast split switch proc)
- "Send line at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python3-switch (&optional dedicated fast split proc)
- "Send line at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python3-no-switch (&optional dedicated fast split proc)
- "Send line at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python3-dedicated (&optional fast split switch proc)
- "Send line at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-line-python3-dedicated-switch (&optional fast split proc)
- "Send line at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'line 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block (&optional shell dedicated fast split switch proc)
- "Send minor-block at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-switch (&optional shell dedicated fast split proc)
- "Send minor-block at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-no-switch (&optional shell dedicated fast split proc)
- "Send minor-block at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-dedicated (&optional shell fast split switch proc)
- "Send minor-block at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-dedicated-switch (&optional shell fast split proc)
- "Send minor-block at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython (&optional dedicated fast split switch proc)
- "Send minor-block at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython-switch (&optional dedicated fast split proc)
- "Send minor-block at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython-no-switch (&optional dedicated fast split proc)
- "Send minor-block at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython-dedicated (&optional fast split switch proc)
- "Send minor-block at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython-dedicated-switch (&optional fast split proc)
- "Send minor-block at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython2.7 (&optional dedicated fast split switch proc)
- "Send minor-block at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython2.7-switch (&optional dedicated fast split proc)
- "Send minor-block at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send minor-block at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython2.7-dedicated (&optional fast split switch proc)
- "Send minor-block at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send minor-block at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython3 (&optional dedicated fast split switch proc)
- "Send minor-block at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython3-switch (&optional dedicated fast split proc)
- "Send minor-block at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython3-no-switch (&optional dedicated fast split proc)
- "Send minor-block at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython3-dedicated (&optional fast split switch proc)
- "Send minor-block at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-ipython3-dedicated-switch (&optional fast split proc)
- "Send minor-block at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-jython (&optional dedicated fast split switch proc)
- "Send minor-block at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-jython-switch (&optional dedicated fast split proc)
- "Send minor-block at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-jython-no-switch (&optional dedicated fast split proc)
- "Send minor-block at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-jython-dedicated (&optional fast split switch proc)
- "Send minor-block at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-jython-dedicated-switch (&optional fast split proc)
- "Send minor-block at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python (&optional dedicated fast split switch proc)
- "Send minor-block at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python-switch (&optional dedicated fast split proc)
- "Send minor-block at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python-no-switch (&optional dedicated fast split proc)
- "Send minor-block at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python-dedicated (&optional fast split switch proc)
- "Send minor-block at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python-dedicated-switch (&optional fast split proc)
- "Send minor-block at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python2 (&optional dedicated fast split switch proc)
- "Send minor-block at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python2-switch (&optional dedicated fast split proc)
- "Send minor-block at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python2-no-switch (&optional dedicated fast split proc)
- "Send minor-block at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python2-dedicated (&optional fast split switch proc)
- "Send minor-block at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python2-dedicated-switch (&optional fast split proc)
- "Send minor-block at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python3 (&optional dedicated fast split switch proc)
- "Send minor-block at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python3-switch (&optional dedicated fast split proc)
- "Send minor-block at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python3-no-switch (&optional dedicated fast split proc)
- "Send minor-block at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python3-dedicated (&optional fast split switch proc)
- "Send minor-block at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-minor-block-python3-dedicated-switch (&optional fast split proc)
- "Send minor-block at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'minor-block 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph (&optional shell dedicated fast split switch proc)
- "Send paragraph at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-switch (&optional shell dedicated fast split proc)
- "Send paragraph at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-no-switch (&optional shell dedicated fast split proc)
- "Send paragraph at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-dedicated (&optional shell fast split switch proc)
- "Send paragraph at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-dedicated-switch (&optional shell fast split proc)
- "Send paragraph at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython (&optional dedicated fast split switch proc)
- "Send paragraph at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython-switch (&optional dedicated fast split proc)
- "Send paragraph at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython-no-switch (&optional dedicated fast split proc)
- "Send paragraph at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython-dedicated (&optional fast split switch proc)
- "Send paragraph at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython-dedicated-switch (&optional fast split proc)
- "Send paragraph at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython2.7 (&optional dedicated fast split switch proc)
- "Send paragraph at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython2.7-switch (&optional dedicated fast split proc)
- "Send paragraph at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send paragraph at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython2.7-dedicated (&optional fast split switch proc)
- "Send paragraph at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send paragraph at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython3 (&optional dedicated fast split switch proc)
- "Send paragraph at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython3-switch (&optional dedicated fast split proc)
- "Send paragraph at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython3-no-switch (&optional dedicated fast split proc)
- "Send paragraph at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython3-dedicated (&optional fast split switch proc)
- "Send paragraph at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-ipython3-dedicated-switch (&optional fast split proc)
- "Send paragraph at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-jython (&optional dedicated fast split switch proc)
- "Send paragraph at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-jython-switch (&optional dedicated fast split proc)
- "Send paragraph at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-jython-no-switch (&optional dedicated fast split proc)
- "Send paragraph at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-jython-dedicated (&optional fast split switch proc)
- "Send paragraph at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-jython-dedicated-switch (&optional fast split proc)
- "Send paragraph at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python (&optional dedicated fast split switch proc)
- "Send paragraph at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python-switch (&optional dedicated fast split proc)
- "Send paragraph at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python-no-switch (&optional dedicated fast split proc)
- "Send paragraph at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python-dedicated (&optional fast split switch proc)
- "Send paragraph at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python-dedicated-switch (&optional fast split proc)
- "Send paragraph at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python2 (&optional dedicated fast split switch proc)
- "Send paragraph at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python2-switch (&optional dedicated fast split proc)
- "Send paragraph at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python2-no-switch (&optional dedicated fast split proc)
- "Send paragraph at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python2-dedicated (&optional fast split switch proc)
- "Send paragraph at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python2-dedicated-switch (&optional fast split proc)
- "Send paragraph at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python3 (&optional dedicated fast split switch proc)
- "Send paragraph at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python3-switch (&optional dedicated fast split proc)
- "Send paragraph at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python3-no-switch (&optional dedicated fast split proc)
- "Send paragraph at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python3-dedicated (&optional fast split switch proc)
- "Send paragraph at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-paragraph-python3-dedicated-switch (&optional fast split proc)
- "Send paragraph at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'paragraph 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression (&optional shell dedicated fast split switch proc)
- "Send partial-expression at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-switch (&optional shell dedicated fast split proc)
- "Send partial-expression at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-no-switch (&optional shell dedicated fast split proc)
- "Send partial-expression at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-dedicated (&optional shell fast split switch proc)
- "Send partial-expression at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-dedicated-switch (&optional shell fast split proc)
- "Send partial-expression at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython (&optional dedicated fast split switch proc)
- "Send partial-expression at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython-no-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython-dedicated (&optional fast split switch proc)
- "Send partial-expression at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython-dedicated-switch (&optional fast split proc)
- "Send partial-expression at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython2.7 (&optional dedicated fast split switch proc)
- "Send partial-expression at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython2.7-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython2.7-dedicated (&optional fast split switch proc)
- "Send partial-expression at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send partial-expression at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython3 (&optional dedicated fast split switch proc)
- "Send partial-expression at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython3-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython3-no-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython3-dedicated (&optional fast split switch proc)
- "Send partial-expression at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-ipython3-dedicated-switch (&optional fast split proc)
- "Send partial-expression at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-jython (&optional dedicated fast split switch proc)
- "Send partial-expression at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-jython-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-jython-no-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-jython-dedicated (&optional fast split switch proc)
- "Send partial-expression at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-jython-dedicated-switch (&optional fast split proc)
- "Send partial-expression at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python (&optional dedicated fast split switch proc)
- "Send partial-expression at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python-no-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python-dedicated (&optional fast split switch proc)
- "Send partial-expression at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python-dedicated-switch (&optional fast split proc)
- "Send partial-expression at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python2 (&optional dedicated fast split switch proc)
- "Send partial-expression at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python2-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python2-no-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python2-dedicated (&optional fast split switch proc)
- "Send partial-expression at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python2-dedicated-switch (&optional fast split proc)
- "Send partial-expression at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python3 (&optional dedicated fast split switch proc)
- "Send partial-expression at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python3-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python3-no-switch (&optional dedicated fast split proc)
- "Send partial-expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python3-dedicated (&optional fast split switch proc)
- "Send partial-expression at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-partial-expression-python3-dedicated-switch (&optional fast split proc)
- "Send partial-expression at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'partial-expression 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-region (beg end &optional shell dedicated fast split switch proc)
- "Send region at point to interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region shell dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-switch (beg end &optional shell dedicated fast split proc)
- "Send region at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region shell dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-no-switch (beg end &optional shell dedicated fast split proc)
- "Send region at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region shell dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-dedicated (beg end &optional shell fast split switch proc)
- "Send region at point to unique interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region shell t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-dedicated-switch (beg end &optional shell fast split proc)
- "Send region at point to unique interpreter and switch to result."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region shell t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython (beg end &optional dedicated fast split switch proc)
- "Send region at point to IPython interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython-switch (beg end &optional dedicated fast split proc)
- "Send region at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython-no-switch (beg end &optional dedicated fast split proc)
- "Send region at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython-dedicated (beg end &optional fast split switch proc)
- "Send region at point to IPython unique interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython-dedicated-switch (beg end &optional fast split proc)
- "Send region at point to IPython unique interpreter and switch to result."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython2.7 (beg end &optional dedicated fast split switch proc)
- "Send region at point to IPython interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython2.7 dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython2.7-switch (beg end &optional dedicated fast split proc)
- "Send region at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython2.7 dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython2.7-no-switch (beg end &optional dedicated fast split proc)
- "Send region at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython2.7 dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython2.7-dedicated (beg end &optional fast split switch proc)
- "Send region at point to IPython unique interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython2.7 t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython2.7-dedicated-switch (beg end &optional fast split proc)
- "Send region at point to IPython unique interpreter and switch to result."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython2.7 t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython3 (beg end &optional dedicated fast split switch proc)
- "Send region at point to IPython interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython3 dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython3-switch (beg end &optional dedicated fast split proc)
- "Send region at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython3 dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython3-no-switch (beg end &optional dedicated fast split proc)
- "Send region at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython3 dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython3-dedicated (beg end &optional fast split switch proc)
- "Send region at point to IPython unique interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython3 t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-ipython3-dedicated-switch (beg end &optional fast split proc)
- "Send region at point to IPython unique interpreter and switch to result."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'ipython3 t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-jython (beg end &optional dedicated fast split switch proc)
- "Send region at point to Jython interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'jython dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-jython-switch (beg end &optional dedicated fast split proc)
- "Send region at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'jython dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-jython-no-switch (beg end &optional dedicated fast split proc)
- "Send region at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'jython dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-jython-dedicated (beg end &optional fast split switch proc)
- "Send region at point to Jython unique interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'jython t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-jython-dedicated-switch (beg end &optional fast split proc)
- "Send region at point to Jython unique interpreter and switch to result."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'jython t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python (beg end &optional dedicated fast split switch proc)
- "Send region at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python-switch (beg end &optional dedicated fast split proc)
- "Send region at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python-no-switch (beg end &optional dedicated fast split proc)
- "Send region at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python-dedicated (beg end &optional fast split switch proc)
- "Send region at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python-dedicated-switch (beg end &optional fast split proc)
- "Send region at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python2 (beg end &optional dedicated fast split switch proc)
- "Send region at point to Python2 interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python2 dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python2-switch (beg end &optional dedicated fast split proc)
- "Send region at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python2 dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python2-no-switch (beg end &optional dedicated fast split proc)
- "Send region at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python2 dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python2-dedicated (beg end &optional fast split switch proc)
- "Send region at point to Python2 unique interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python2 t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python2-dedicated-switch (beg end &optional fast split proc)
- "Send region at point to Python2 unique interpreter and switch to result."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python2 t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python3 (beg end &optional dedicated fast split switch proc)
- "Send region at point to Python3 interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python3 dedicated switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python3-switch (beg end &optional dedicated fast split proc)
- "Send region at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python3 dedicated 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python3-no-switch (beg end &optional dedicated fast split proc)
- "Send region at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python3 dedicated 'no-switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python3-dedicated (beg end &optional fast split switch proc)
- "Send region at point to Python3 unique interpreter."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python3 t switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-region-python3-dedicated-switch (beg end &optional fast split proc)
- "Send region at point to Python3 unique interpreter and switch to result."
- (interactive "r")
- (let (wholebuf)
- (py--execute-prepare 'region 'python3 t 'switch (or beg (region-beginning)) (or end (region-end)) nil fast proc wholebuf split)))
-
-(defun py-execute-statement (&optional shell dedicated fast split switch proc)
- "Send statement at point to interpreter."
- (interactive)
- (let (wholebuf)
- ;; (macroexpand
- (py--execute-prepare 'statement shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-switch (&optional shell dedicated fast split proc)
- "Send statement at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-no-switch (&optional shell dedicated fast split proc)
- "Send statement at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-dedicated (&optional shell fast split switch proc)
- "Send statement at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-dedicated-switch (&optional shell fast split proc)
- "Send statement at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython (&optional dedicated fast split switch proc)
- "Send statement at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython-switch (&optional dedicated fast split proc)
- "Send statement at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython-no-switch (&optional dedicated fast split proc)
- "Send statement at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython-dedicated (&optional fast split switch proc)
- "Send statement at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython-dedicated-switch (&optional fast split proc)
- "Send statement at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython2.7 (&optional dedicated fast split switch proc)
- "Send statement at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython2.7-switch (&optional dedicated fast split proc)
- "Send statement at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send statement at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython2.7-dedicated (&optional fast split switch proc)
- "Send statement at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send statement at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython3 (&optional dedicated fast split switch proc)
- "Send statement at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython3-switch (&optional dedicated fast split proc)
- "Send statement at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython3-no-switch (&optional dedicated fast split proc)
- "Send statement at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython3-dedicated (&optional fast split switch proc)
- "Send statement at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-ipython3-dedicated-switch (&optional fast split proc)
- "Send statement at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-jython (&optional dedicated fast split switch proc)
- "Send statement at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-jython-switch (&optional dedicated fast split proc)
- "Send statement at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-jython-no-switch (&optional dedicated fast split proc)
- "Send statement at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-jython-dedicated (&optional fast split switch proc)
- "Send statement at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-jython-dedicated-switch (&optional fast split proc)
- "Send statement at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python (&optional dedicated fast split switch proc)
- "Send statement at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python-switch (&optional dedicated fast split proc)
- "Send statement at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python-no-switch (&optional dedicated fast split proc)
- "Send statement at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python-dedicated (&optional fast split switch proc)
- "Send statement at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python-dedicated-switch (&optional fast split proc)
- "Send statement at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python2 (&optional dedicated fast split switch proc)
- "Send statement at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python2-switch (&optional dedicated fast split proc)
- "Send statement at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python2-no-switch (&optional dedicated fast split proc)
- "Send statement at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python2-dedicated (&optional fast split switch proc)
- "Send statement at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python2-dedicated-switch (&optional fast split proc)
- "Send statement at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python3 (&optional dedicated fast split switch proc)
- "Send statement at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python3-switch (&optional dedicated fast split proc)
- "Send statement at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python3-no-switch (&optional dedicated fast split proc)
- "Send statement at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python3-dedicated (&optional fast split switch proc)
- "Send statement at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-statement-python3-dedicated-switch (&optional fast split proc)
- "Send statement at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'statement 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level (&optional shell dedicated fast split switch proc)
- "Send top-level at point to interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level shell dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-switch (&optional shell dedicated fast split proc)
- "Send top-level at point to interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level shell dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-no-switch (&optional shell dedicated fast split proc)
- "Send top-level at point to interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level shell dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-dedicated (&optional shell fast split switch proc)
- "Send top-level at point to unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level shell t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-dedicated-switch (&optional shell fast split proc)
- "Send top-level at point to unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level shell t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython (&optional dedicated fast split switch proc)
- "Send top-level at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython-switch (&optional dedicated fast split proc)
- "Send top-level at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython-no-switch (&optional dedicated fast split proc)
- "Send top-level at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython-dedicated (&optional fast split switch proc)
- "Send top-level at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython-dedicated-switch (&optional fast split proc)
- "Send top-level at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython2.7 (&optional dedicated fast split switch proc)
- "Send top-level at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython2.7 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython2.7-switch (&optional dedicated fast split proc)
- "Send top-level at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython2.7 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython2.7-no-switch (&optional dedicated fast split proc)
- "Send top-level at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython2.7 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython2.7-dedicated (&optional fast split switch proc)
- "Send top-level at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython2.7 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython2.7-dedicated-switch (&optional fast split proc)
- "Send top-level at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython2.7 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython3 (&optional dedicated fast split switch proc)
- "Send top-level at point to IPython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython3-switch (&optional dedicated fast split proc)
- "Send top-level at point to IPython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython3-no-switch (&optional dedicated fast split proc)
- "Send top-level at point to IPython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython3-dedicated (&optional fast split switch proc)
- "Send top-level at point to IPython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-ipython3-dedicated-switch (&optional fast split proc)
- "Send top-level at point to IPython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'ipython3 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-jython (&optional dedicated fast split switch proc)
- "Send top-level at point to Jython interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'jython dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-jython-switch (&optional dedicated fast split proc)
- "Send top-level at point to Jython interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'jython dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-jython-no-switch (&optional dedicated fast split proc)
- "Send top-level at point to Jython interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'jython dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-jython-dedicated (&optional fast split switch proc)
- "Send top-level at point to Jython unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'jython t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-jython-dedicated-switch (&optional fast split proc)
- "Send top-level at point to Jython unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'jython t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python (&optional dedicated fast split switch proc)
- "Send top-level at point to default interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python-switch (&optional dedicated fast split proc)
- "Send top-level at point to default interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python-no-switch (&optional dedicated fast split proc)
- "Send top-level at point to default interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python-dedicated (&optional fast split switch proc)
- "Send top-level at point to default unique interpreter.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python-dedicated-switch (&optional fast split proc)
- "Send top-level at point to default unique interpreter and switch to result.
-
-For ‘default’ see value of ‘py-shell-name’"
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python2 (&optional dedicated fast split switch proc)
- "Send top-level at point to Python2 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python2 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python2-switch (&optional dedicated fast split proc)
- "Send top-level at point to Python2 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python2 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python2-no-switch (&optional dedicated fast split proc)
- "Send top-level at point to Python2 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python2 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python2-dedicated (&optional fast split switch proc)
- "Send top-level at point to Python2 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python2 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python2-dedicated-switch (&optional fast split proc)
- "Send top-level at point to Python2 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python2 t 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python3 (&optional dedicated fast split switch proc)
- "Send top-level at point to Python3 interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python3 dedicated switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python3-switch (&optional dedicated fast split proc)
- "Send top-level at point to Python3 interpreter.
-
-Switch to output buffer. Ignores ‘py-switch-buffers-on-execute-p’."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python3 dedicated 'switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python3-no-switch (&optional dedicated fast split proc)
- "Send top-level at point to Python3 interpreter.
-
-Keep current buffer. Ignores ‘py-switch-buffers-on-execute-p’ "
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python3 dedicated 'no-switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python3-dedicated (&optional fast split switch proc)
- "Send top-level at point to Python3 unique interpreter."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python3 t switch nil nil nil fast proc wholebuf split)))
-
-(defun py-execute-top-level-python3-dedicated-switch (&optional fast split proc)
- "Send top-level at point to Python3 unique interpreter and switch to result."
- (interactive)
- (let (wholebuf)
- (py--execute-prepare 'top-level 'python3 t 'switch nil nil nil fast proc wholebuf split)))
-
-;; python-abbrev-propose
-
-(defun py-edit-abbrevs ()
- "Jumps to `python-mode-abbrev-table' in a buffer containing lists of abbrev definitions.
-You can edit them and type \\<edit-abbrevs-map>\\[edit-abbrevs-redefine] to redefine abbrevs
-according to your editing.
-Buffer contains a header line for each abbrev table,
- which is the abbrev table name in parentheses.
-This is followed by one line per abbrev in that table:
-NAME USECOUNT EXPANSION HOOK
-where NAME and EXPANSION are strings with quotes,
-USECOUNT is an integer, and HOOK is any valid function
-or may be omitted (it is usually omitted). "
- (interactive)
- (save-excursion
- (let ((mat (abbrev-table-name local-abbrev-table)))
- (prepare-abbrev-list-buffer)
- (set-buffer "*Abbrevs*")
- (switch-to-buffer (current-buffer))
- (goto-char (point-min))
- (search-forward (concat "(" (format "%s" mat))))))
-
-(defun py--add-abbrev-propose (table type arg &optional dont-ask)
- (save-excursion
- (let ((orig (point))
- proposal exp name)
- (while (< 0 arg)
- (py-beginning-of-partial-expression)
- (when (looking-at "[[:alpha:]]")
- (setq proposal (concat (downcase (match-string-no-properties 0)) proposal)))
- (setq arg (1- arg)))
- (setq exp (buffer-substring-no-properties (point) orig))
- (setq name
- ;; ask only when interactive
- (if dont-ask
- proposal
- (read-string (format (if exp "%s abbrev for \"%s\": "
- "Undefine %s abbrev: ")
- type exp) proposal)))
- (set-text-properties 0 (length name) nil name)
- (when (or (null exp)
- (not (abbrev-expansion name table))
- (y-or-n-p (format "%s expands to \"%s\"; redefine? "
- name (abbrev-expansion name table))))
- (define-abbrev table (downcase name) exp)))))
-
-(defun py-add-abbrev (arg)
- "Defines python-mode specific abbrev for last expressions before point.
-Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion.
-
-Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev.
-Proposal is composed from the initial character(s) of the
-expansion.
-
-Don't use this function in a Lisp program; use `define-abbrev' instead."
- (interactive "p")
- (save-excursion
- (py--add-abbrev-propose
- (if only-global-abbrevs
- global-abbrev-table
- (or local-abbrev-table
- (error "No per-mode abbrev table")))
- "Mode" arg)))
-
-;; python-components-paragraph
-
-(defun py-fill-paren (&optional justify)
- "Paren fill function for `py-fill-paragraph'.
-JUSTIFY should be used (if applicable) as in `fill-paragraph'."
- (interactive "*P")
- (save-restriction
- (save-excursion
- (let ((pps (parse-partial-sexp (point-min) (point))))
- (if (nth 1 pps)
- (let* ((beg (copy-marker (nth 1 pps)))
- (end (and beg (save-excursion (goto-char (nth 1 pps))
- (forward-list))))
- (paragraph-start "\f\\|[ \t]*$")
- (paragraph-separate ","))
- (when (and beg end (narrow-to-region beg end))
- (fill-region beg end justify)
- (while (not (eobp))
- (forward-line 1)
- (py-indent-line)
- (goto-char (line-end-position))))))))))
-
-(defun py-fill-string-django (&optional justify)
- "Fill docstring according to Django's coding standards style.
-
- \"\"\"
- Process foo, return bar.
- \"\"\"
-
- \"\"\"
- Process foo, return bar.
-
- If processing fails throw ProcessingError.
- \"\"\"
-
-See available styles at `py-fill-paragraph' or var `py-docstring-style'
-"
- (interactive "*P")
- (py-fill-string justify 'django t))
-
-(defun py-fill-string-onetwo (&optional justify)
- "One newline and start and Two at end style.
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"
- Process foo, return bar.
-
- If processing fails throw ProcessingError.
-
- \"\"\"
-
-See available styles at `py-fill-paragraph' or var `py-docstring-style'
-"
- (interactive "*P")
- (py-fill-string justify 'onetwo t))
-
-(defun py-fill-string-pep-257 (&optional justify)
- "PEP-257 with 2 newlines at end of string.
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"Process foo, return bar.
-
- If processing fails throw ProcessingError.
-
- \"\"\"
-
-See available styles at `py-fill-paragraph' or var `py-docstring-style'
-"
- (interactive "*P")
- (py-fill-string justify 'pep-257 t))
-
-(defun py-fill-string-pep-257-nn (&optional justify)
- "PEP-257 with 1 newline at end of string.
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"Process foo, return bar.
-
- If processing fails throw ProcessingError.
- \"\"\"
-
-See available styles at `py-fill-paragraph' or var `py-docstring-style'
-"
- (interactive "*P")
- (py-fill-string justify 'pep-257-nn t))
-
-(defun py-fill-string-symmetric (&optional justify)
- "Symmetric style.
-
- \"\"\"Process foo, return bar.\"\"\"
-
- \"\"\"
- Process foo, return bar.
-
- If processing fails throw ProcessingError.
- \"\"\"
-
-See available styles at `py-fill-paragraph' or var `py-docstring-style'
-"
- (interactive "*P")
- (py-fill-string justify 'symmetric t))
-
-(defun py-set-nil-docstring-style ()
- "Set py-docstring-style to 'nil"
- (interactive)
- (setq py-docstring-style 'nil)
- (when (and (called-interactively-p 'any) py-verbose-p)
- (message "docstring-style set to: %s" py-docstring-style)))
-
-(defun py-set-pep-257-nn-docstring-style ()
- "Set py-docstring-style to 'pep-257-nn"
- (interactive)
- (setq py-docstring-style 'pep-257-nn)
- (when (and (called-interactively-p 'any) py-verbose-p)
- (message "docstring-style set to: %s" py-docstring-style)))
-
-(defun py-set-pep-257-docstring-style ()
- "Set py-docstring-style to 'pep-257"
- (interactive)
- (setq py-docstring-style 'pep-257)
- (when (and (called-interactively-p 'any) py-verbose-p)
- (message "docstring-style set to: %s" py-docstring-style)))
-
-(defun py-set-django-docstring-style ()
- "Set py-docstring-style to 'django"
- (interactive)
- (setq py-docstring-style 'django)
- (when (and (called-interactively-p 'any) py-verbose-p)
- (message "docstring-style set to: %s" py-docstring-style)))
-
-(defun py-set-symmetric-docstring-style ()
- "Set py-docstring-style to 'symmetric"
- (interactive)
- (setq py-docstring-style 'symmetric)
- (when (and (called-interactively-p 'any) py-verbose-p)
- (message "docstring-style set to: %s" py-docstring-style)))
-
-(defun py-set-onetwo-docstring-style ()
- "Set py-docstring-style to 'onetwo"
- (interactive)
- (setq py-docstring-style 'onetwo)
- (when (and (called-interactively-p 'any) py-verbose-p)
- (message "docstring-style set to: %s" py-docstring-style)))
-
-(defun py-fill-comment (&optional justify)
- "Fill the comment paragraph at point"
- (interactive "*P")
- (let (;; Non-nil if the current line contains a comment.
- has-comment
-
- ;; If has-comment, the appropriate fill-prefix (format "%s" r the comment.
- comment-fill-prefix)
-
- ;; Figure out what kind of comment we are looking at.
- (save-excursion
- (beginning-of-line)
- (cond
- ;; A line with nothing but a comment on it?
- ((looking-at "[ \t]*#[# \t]*")
- (setq has-comment t
- comment-fill-prefix (buffer-substring (match-beginning 0)
- (match-end 0))))
-
- ;; A line with some code, followed by a comment? Remember that the hash
- ;; which starts the comment shouldn't be part of a string or character.
- ((progn
- (while (not (looking-at "#\\|$"))
- (skip-chars-forward "^#\n\"'\\")
- (cond
- ((eq (char-after (point)) ?\\) (forward-char 2))
- ((memq (char-after (point)) '(?\" ?')) (forward-sexp 1))))
- (looking-at "#+[\t ]*"))
- (setq has-comment t)
- (setq comment-fill-prefix
- (concat (make-string (current-column) ? )
- (buffer-substring (match-beginning 0) (match-end 0)))))))
-
- (if (not has-comment)
- (fill-paragraph justify)
-
- ;; Narrow to include only the comment, and then fill the region.
- (save-restriction
- (narrow-to-region
-
- ;; Find the first line we should include in the region to fill.
- (save-excursion
- (while (and (zerop (forward-line -1))
- (looking-at "^[ \t]*#")))
-
- ;; We may have gone to far. Go forward again.
- (or (looking-at "^[ \t]*#")
- (forward-line 1))
- (point))
-
- ;; Find the beginning of the first line past the region to fill.
- (save-excursion
- (while (progn (forward-line 1)
- (looking-at "^[ \t]*#")))
- (point)))
-
- ;; Lines with only hashes on them can be paragraph boundaries.
- (let ((paragraph-start (concat paragraph-start "\\|[ \t#]*$"))
- (paragraph-separate (concat paragraph-separate "\\|[ \t#]*$"))
- (fill-prefix comment-fill-prefix))
- (fill-paragraph justify))))
- t))
-
-(defun py-fill-labelled-string (beg end)
- "Fill string or paragraph containing lines starting with label
-
-See lp:1066489 "
- (interactive "r*")
- (let ((end (copy-marker end))
- (last (copy-marker (point)))
- this-beg)
- (save-excursion
- (save-restriction
- ;; (narrow-to-region beg end)
- (goto-char beg)
- (skip-chars-forward " \t\r\n\f")
- (if (looking-at py-labelled-re)
- (progn
- (setq this-beg (line-beginning-position))
- (goto-char (match-end 0))
- (while (and (not (eobp)) (re-search-forward py-labelled-re end t 1)(< last (match-beginning 0))(setq last (match-beginning 0)))
- (save-match-data (fill-region this-beg (1- (line-beginning-position))))
- (setq this-beg (line-beginning-position))
- (goto-char (match-end 0)))))))))
-
-(defun py--in-or-behind-or-before-a-docstring (pps)
- (interactive "*")
- (save-excursion
- (let* ((strg-start-pos (when (nth 3 pps) (nth 8 pps)))
- (n8pps (or strg-start-pos
- (when
- (equal (string-to-syntax "|")
- (syntax-after (point)))
- (and
- (< 0 (skip-chars-forward "\"'"))
- (nth 3 (parse-partial-sexp (point-min) (point))))))))
- (and n8pps (py--docstring-p n8pps)))))
-
-(defun py--string-fence-delete-spaces (&optional start)
- "Delete spaces following or preceding delimiters of string at point. "
- (interactive "*")
- (let ((beg (or start (nth 8 (parse-partial-sexp (point-min) (point))))))
- (save-excursion
- (goto-char beg)
- (skip-chars-forward "\"'rRuU")
- (delete-region (point) (progn (skip-chars-forward " \t\r\n\f")(point)))
- (goto-char beg)
- (forward-char 1)
- (skip-syntax-forward "^\|")
- (skip-chars-backward "\"'rRuU")
- ;; (delete-region (point) (progn (skip-chars-backward " \t\r\n\f")(point)))
-)))
-
-(defun py--skip-raw-string-front-fence ()
- "Skip forward chars u, U, r, R followed by string-delimiters. "
- (when (member (char-after) (list ?u ?U ?r ?R))
- (forward-char 1))
- (skip-chars-forward "\'\""))
-
-(defun py--fill-fix-end (thisend orig delimiters-style)
- ;; Add the number of newlines indicated by the selected style
- ;; at the end.
- ;; (widen)
- (goto-char thisend)
- (skip-chars-backward "\"'\n ")
- (delete-region (point) (progn (skip-chars-forward " \t\r\n\f") (point)))
- (unless (eq (char-after) 10)
- (and
- (cdr delimiters-style)
- (or (newline (cdr delimiters-style)) t)))
- (py-indent-line nil t)
- (goto-char orig))
-
-(defun py--fill-docstring-base (thisbeg thisend style multi-line-p beg end py-current-indent orig)
- ;; (widen)
- ;; fill-paragraph causes wrong indent, lp:1397936
- ;; (narrow-to-region thisbeg thisend)
- (let ((delimiters-style
- (case style
- ;; delimiters-style is a cons cell with the form
- ;; (START-NEWLINES . END-NEWLINES). When any of the sexps
- ;; is NIL means to not add any newlines for start or end
- ;; of docstring. See `py-docstring-style' for a
- ;; graphic idea of each style.
- (django (cons 1 1))
- (onetwo (and multi-line-p (cons 1 2)))
- (pep-257 (and multi-line-p (cons nil 2)))
- (pep-257-nn (and multi-line-p (cons nil 1)))
- (symmetric (and multi-line-p (cons 1 1))))))
- ;; (save-excursion
- (when style
- ;; Add the number of newlines indicated by the selected style
- ;; at the start.
- (goto-char thisbeg)
- (py--skip-raw-string-front-fence)
- (skip-chars-forward "\'\"")
- (when
- (car delimiters-style)
- (unless (or (py-empty-line-p)(eolp))
- (newline (car delimiters-style))))
- (indent-region beg end py-current-indent))
- (when multi-line-p
- (goto-char thisbeg)
- (py--skip-raw-string-front-fence)
- (skip-chars-forward " \t\r\n\f")
- (forward-line 1)
- (beginning-of-line)
- (unless (py-empty-line-p) (newline 1)))
- (py--fill-fix-end thisend orig delimiters-style)))
-
-(defun py--fill-docstring-last-line (thisend beg end multi-line-p)
- (widen)
- ;; (narrow-to-region thisbeg thisend)
- (goto-char thisend)
- (skip-chars-backward "\"'")
- (delete-region (point) (progn (skip-chars-backward " \t\r\n\f")(point)))
- ;; (narrow-to-region beg end)
- (fill-region beg end)
- (setq multi-line-p (string-match "\n" (buffer-substring-no-properties beg end)))
- (when multi-line-p
- ;; adjust the region to fill according to style
- (goto-char end)))
-
-(defun py--fill-docstring-first-line (beg end)
- "Refill first line after newline maybe. "
- (fill-region-as-paragraph beg (line-end-position) nil t t)
- (save-excursion
- (end-of-line)
- (unless (eobp)
- (forward-line 1)
- (back-to-indentation)
- (unless (or (< end (point)) (py-empty-line-p))
- (newline 1)
- ;;(fill-region (line-beginning-position) end)
- ))))
-
-(defun py--fill-docstring (justify style docstring orig py-current-indent &optional beg end)
- ;; Delete spaces after/before string fence
- (py--string-fence-delete-spaces docstring)
- (let* ((thisbeg (copy-marker (or beg docstring)))
- (thisend (copy-marker
- (or end
- (progn
- (goto-char thisbeg)
- (py--skip-raw-string-front-fence)
- (skip-syntax-forward "^\|")
- (1+ (point))))))
- (parabeg (progn (goto-char orig) (py--beginning-of-paragraph-position)))
- (paraend (progn (goto-char orig) (py--end-of-paragraph-position)))
- ;; if paragraph is a substring, take it
- (beg (copy-marker (if (< thisbeg parabeg) parabeg thisbeg)))
- (end (copy-marker (if (< thisend paraend) thisend paraend)))
- (multi-line-p (string-match "\n" (buffer-substring-no-properties thisbeg thisend)))
- (first-line-p (<= (line-beginning-position) beg)
- ;; (progn (goto-char beg) (member (char-after) (list ?\" ?\' ?u ?U ?r ?R)))
- ))
- (when (string-match (concat "^" py-labelled-re) (buffer-substring-no-properties beg end))
- (py-fill-labelled-string beg end))
- (when first-line-p
- (py--fill-docstring-first-line beg end))
- (when (save-excursion (goto-char end)
- (or (member (char-after) (list ?\" ?\'))
- (member (char-before) (list ?\" ?\'))))
- (py--fill-docstring-last-line thisend beg end multi-line-p))
- (fill-region beg end justify t t)
- (py--fill-docstring-base thisbeg thisend style multi-line-p beg end py-current-indent orig)))
-
-(defun py-fill-string (&optional justify style docstring pps)
- "String fill function for `py-fill-paragraph'.
-JUSTIFY should be used (if applicable) as in `fill-paragraph'.
-
-Fill according to `py-docstring-style' "
- (interactive "*")
- (let* ((justify (or justify (if current-prefix-arg 'full t)))
- (style (or style py-docstring-style))
- (pps (or pps (parse-partial-sexp (point-min) (point))))
- (indent
- ;; set inside tqs
- ;; (save-excursion (and (nth 3 pps) (goto-char (nth 8 pps)) (current-indentation)))
- nil)
- (orig (copy-marker (point)))
- ;; (docstring (or docstring (py--in-or-behind-or-before-a-docstring pps)))
- (docstring (cond (docstring
- (if (not (number-or-marker-p docstring))
- (py--in-or-behind-or-before-a-docstring pps))
- docstring)
- (t (py--in-or-behind-or-before-a-docstring pps))))
- (beg (and (nth 3 pps) (nth 8 pps)))
- (tqs (progn (and beg (goto-char beg) (looking-at "\"\"\"\\|'''") (setq indent (current-column)))))
- (end (copy-marker (if tqs
- (or
- (progn (ignore-errors (forward-sexp))(and (< orig (point)) (point)))
- (goto-char orig)
- (line-end-position))
- (or (progn (goto-char beg) (ignore-errors (forward-sexp))(and (< orig (point)) (point)))
- (goto-char orig)
- (line-end-position))))))
- (goto-char orig)
- (when beg
- (if docstring
- (py--fill-docstring justify style docstring orig indent beg end)
- (save-restriction
- (if (not tqs)
- (if (py-preceding-line-backslashed-p)
- (progn
- (setq end (copy-marker (line-end-position)))
- (narrow-to-region (line-beginning-position) end)
- (fill-region (line-beginning-position) end justify t)
- (when (< 1 (py-count-lines))
- (py--continue-lines-region (point-min) end)))
- (narrow-to-region beg end)
- (fill-region beg end justify t)
- (when
- ;; counting in narrowed buffer
- (< 1 (py-count-lines))
- (py--continue-lines-region beg end)))
- (fill-region beg end justify)))))))
-
-(defun py--continue-lines-region (beg end)
- (save-excursion
- (goto-char beg)
- (while (< (line-end-position) end)
- (end-of-line)
- (unless (py-escaped-p) (insert-and-inherit 32) (insert-and-inherit 92))
- (ignore-errors (forward-line 1)))))
-
-(defun py-fill-paragraph (&optional justify pps beg end tqs)
- (interactive "*")
- (save-excursion
- (save-restriction
- (window-configuration-to-register py-windows-config-register)
- (let* ((tqs tqs)
- (pps (or pps (parse-partial-sexp (point-min) (point))))
- (docstring (unless (not py-docstring-style) (py--in-or-behind-or-before-a-docstring pps)))
- (fill-column py-comment-fill-column)
- (in-string (nth 3 pps)))
- (cond ((or (nth 4 pps)
- (and (bolp) (looking-at "[ \t]*#[# \t]*")))
- (py-fill-comment))
- (docstring
- (setq fill-column py-docstring-fill-column)
- (py--fill-docstring justify py-docstring-style docstring (point)
- ;; current indentation
- (save-excursion (and (nth 3 pps) (goto-char (nth 8 pps)) (current-indentation)))))
- (t
- (let* ((beg (or beg (save-excursion
- (if (looking-at paragraph-start)
- (point)
- (backward-paragraph)
- (when (looking-at paragraph-start)
- (point))))
- (and (nth 3 pps) (nth 8 pps))))
- (end (or end
- (when beg
- (save-excursion
- (or
- (and in-string
- (progn
- (goto-char (nth 8 pps))
- (setq tqs (looking-at "\"\"\"\\|'''"))
- (forward-sexp) (point)))
- (progn
- (forward-paragraph)
- (when (looking-at paragraph-separate)
- (point)))))))))
- (and beg end (fill-region beg end))
- (when (and in-string (not tqs))
- (py--continue-lines-region beg end))))))
- (jump-to-register py-windows-config-register))))
-
-(defun py-fill-string-or-comment ()
- "Serve auto-fill-mode"
- (unless (< (current-column) fill-column)
- (let ((pps (parse-partial-sexp (point-min) (point))))
- (if (nth 3 pps)
- (py-fill-string nil nil nil pps)
- ;; (py-fill-comment pps)
- (do-auto-fill)
- ))))
-
-;; python-components-shift-forms
-
-
-(defun py-shift-left (&optional count start end)
- "Dedent region according to ‘py-indent-offset’ by COUNT times.
-
-If no region is active, current line is dedented.
-Return indentation reached
-Optional COUNT: COUNT times ‘py-indent-offset’
-Optional START: region beginning
-Optional END: region end"
- (interactive "p")
- (let ((erg (py--shift-intern (- count) start end)))
- (when (and (called-interactively-p 'any) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-right (&optional count beg end)
- "Indent region according to ‘py-indent-offset’ by COUNT times.
-
-If no region is active, current line is indented.
-Return indentation reached
-Optional COUNT: COUNT times ‘py-indent-offset’
-Optional BEG: region beginning
-Optional END: region end"
- (interactive "p")
- (let ((erg (py--shift-intern count beg end)))
- (when (and (called-interactively-p 'any) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py--shift-intern (count &optional start end)
- (save-excursion
- (let* ((inhibit-point-motion-hooks t)
- deactivate-mark
- (beg (cond (start)
- ((use-region-p)
- (save-excursion
- (goto-char
- (region-beginning))))
- (t (line-beginning-position))))
- (end (cond (end)
- ((use-region-p)
- (save-excursion
- (goto-char
- (region-end))))
- (t (line-end-position)))))
- (setq beg (copy-marker beg))
- (setq end (copy-marker end))
- (if (< 0 count)
- (indent-rigidly beg end py-indent-offset)
- (indent-rigidly beg end (- py-indent-offset)))
- (push-mark beg t)
- (goto-char end)
- (skip-chars-backward " \t\r\n\f"))
- (py-indentation-of-statement)))
-
-(defun py--shift-forms-base (form arg &optional beg end)
- (let* ((begform (intern-soft (concat "py-backward-" form)))
- (endform (intern-soft (concat "py-forward-" form)))
- (orig (copy-marker (point)))
- (beg (cond (beg)
- ((use-region-p)
- (save-excursion
- (goto-char (region-beginning))
- (line-beginning-position)))
- (t (save-excursion
- (funcall begform)
- (line-beginning-position)))))
- (end (cond (end)
- ((use-region-p)
- (region-end))
- (t (funcall endform))))
- (erg (py--shift-intern arg beg end)))
- (goto-char orig)
- erg))
-
-(defun py-shift-block-right (&optional arg)
- "Indent block by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "block" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-block-left (&optional arg)
- "Dedent block by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "block" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-block-or-clause-right (&optional arg)
- "Indent block-or-clause by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "block-or-clause" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-block-or-clause-left (&optional arg)
- "Dedent block-or-clause by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "block-or-clause" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-class-right (&optional arg)
- "Indent class by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "class" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-class-left (&optional arg)
- "Dedent class by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "class" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-clause-right (&optional arg)
- "Indent clause by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "clause" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-clause-left (&optional arg)
- "Dedent clause by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "clause" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-comment-right (&optional arg)
- "Indent comment by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "comment" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-comment-left (&optional arg)
- "Dedent comment by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "comment" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-def-right (&optional arg)
- "Indent def by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "def" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-def-left (&optional arg)
- "Dedent def by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "def" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-def-or-class-right (&optional arg)
- "Indent def-or-class by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "def-or-class" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-def-or-class-left (&optional arg)
- "Dedent def-or-class by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "def-or-class" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-indent-right (&optional arg)
- "Indent indent by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "indent" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-indent-left (&optional arg)
- "Dedent indent by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "indent" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-minor-block-right (&optional arg)
- "Indent minor-block by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "minor-block" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-minor-block-left (&optional arg)
- "Dedent minor-block by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "minor-block" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-paragraph-right (&optional arg)
- "Indent paragraph by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "paragraph" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-paragraph-left (&optional arg)
- "Dedent paragraph by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "paragraph" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-region-right (&optional arg)
- "Indent region by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "region" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-region-left (&optional arg)
- "Dedent region by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "region" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-statement-right (&optional arg)
- "Indent statement by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "statement" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-statement-left (&optional arg)
- "Dedent statement by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "statement" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-top-level-right (&optional arg)
- "Indent top-level by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "top-level" (or arg py-indent-offset))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py-shift-top-level-left (&optional arg)
- "Dedent top-level by COUNT spaces.
-
-COUNT defaults to ‘py-indent-offset’,
-use \[universal-argument] to specify a different value.
-
-Return outmost indentation reached."
- (interactive "*P")
- (let ((erg (py--shift-forms-base "top-level" (- (or arg py-indent-offset)))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-;; python-components-execute-file
-
-;; Execute file given
-
-(defun py-execute-file-ipython (filename)
- "Send file to IPython interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "ipython" nil nil nil nil filename))
-
-(defun py-execute-file-ipython2.7 (filename)
- "Send file to IPython2.7 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "ipython2.7" nil nil nil nil filename))
-
-(defun py-execute-file-ipython3 (filename)
- "Send file to IPython3 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "ipython3" nil nil nil nil filename))
-
-(defun py-execute-file-jython (filename)
- "Send file to Jython interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "jython" nil nil nil nil filename))
-
-(defun py-execute-file-python (filename)
- "Send file to Python interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "python" nil nil nil nil filename))
-
-(defun py-execute-file-python2 (filename)
- "Send file to Python2 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "python2" nil nil nil nil filename))
-
-(defun py-execute-file-python3 (filename)
- "Send file to Python3 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "python3" nil nil nil nil filename))
-
-(defun py-execute-file-pypy (filename)
- "Send file to PyPy interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "pypy" nil nil nil nil filename))
-
-(defun py-execute-file-ipython-dedicated (filename)
- "Send file to a dedicatedIPython interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "ipython" t nil nil nil filename))
-
-(defun py-execute-file-ipython2.7-dedicated (filename)
- "Send file to a dedicatedIPython2.7 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "ipython2.7" t nil nil nil filename))
-
-(defun py-execute-file-ipython3-dedicated (filename)
- "Send file to a dedicatedIPython3 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "ipython3" t nil nil nil filename))
-
-(defun py-execute-file-jython-dedicated (filename)
- "Send file to a dedicatedJython interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "jython" t nil nil nil filename))
-
-(defun py-execute-file-python-dedicated (filename)
- "Send file to a dedicatedPython interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "python" t nil nil nil filename))
-
-(defun py-execute-file-python2-dedicated (filename)
- "Send file to a dedicatedPython2 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "python2" t nil nil nil filename))
-
-(defun py-execute-file-python3-dedicated (filename)
- "Send file to a dedicatedPython3 interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "python3" t nil nil nil filename))
-
-(defun py-execute-file-pypy-dedicated (filename)
- "Send file to a dedicatedPyPy interpreter"
- (interactive "fFile: ")
- (py--execute-prepare file "pypy" t nil nil nil filename))
-
-;; python-components-section-forms
-
-(defun py-execute-section ()
- "Execute section at point."
- (interactive)
- (py-execute-section-prepare))
-
-(defun py-execute-section-python ()
- "Execute section at point using python interpreter."
- (interactive)
- (py-execute-section-prepare "python"))
-
-(defun py-execute-section-python2 ()
- "Execute section at point using python2 interpreter."
- (interactive)
- (py-execute-section-prepare "python2"))
-
-(defun py-execute-section-python3 ()
- "Execute section at point using python3 interpreter."
- (interactive)
- (py-execute-section-prepare "python3"))
-
-(defun py-execute-section-ipython ()
- "Execute section at point using ipython interpreter."
- (interactive)
- (py-execute-section-prepare "ipython"))
-
-(defun py-execute-section-ipython2.7 ()
- "Execute section at point using ipython2.7 interpreter."
- (interactive)
- (py-execute-section-prepare "ipython2.7"))
-
-(defun py-execute-section-ipython3 ()
- "Execute section at point using ipython3 interpreter."
- (interactive)
- (py-execute-section-prepare "ipython3"))
-
-(defun py-execute-section-jython ()
- "Execute section at point using jython interpreter."
- (interactive)
- (py-execute-section-prepare "jython"))
-
-;; python-components-comment
-
-
-(defun py-comment-region (beg end &optional arg)
- "Like ‘comment-region’ but uses double hash (‘#’) comment starter."
- (interactive "r\nP")
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start)))
- (comment-region beg end arg)))
-
-(defun py-comment-block (&optional beg end arg)
- "Comments block at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-block-position)))
- (end (or end (py--end-of-block-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-block-or-clause (&optional beg end arg)
- "Comments block-or-clause at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-block-or-clause-position)))
- (end (or end (py--end-of-block-or-clause-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-class (&optional beg end arg)
- "Comments class at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-class-position)))
- (end (or end (py--end-of-class-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-clause (&optional beg end arg)
- "Comments clause at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-clause-position)))
- (end (or end (py--end-of-clause-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-def (&optional beg end arg)
- "Comments def at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-def-position)))
- (end (or end (py--end-of-def-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-def-or-class (&optional beg end arg)
- "Comments def-or-class at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-def-or-class-position)))
- (end (or end (py--end-of-def-or-class-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-indent (&optional beg end arg)
- "Comments indent at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-indent-position)))
- (end (or end (py--end-of-indent-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-minor-block (&optional beg end arg)
- "Comments minor-block at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-minor-block-position)))
- (end (or end (py--end-of-minor-block-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-section (&optional beg end arg)
- "Comments section at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-section-position)))
- (end (or end (py--end-of-section-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-statement (&optional beg end arg)
- "Comments statement at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-statement-position)))
- (end (or end (py--end-of-statement-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-(defun py-comment-top-level (&optional beg end arg)
- "Comments top-level at point.
-
-Uses double hash (‘#’) comment starter when ‘py-block-comment-prefix-p’ is t,
-the default"
- (interactive "*")
- (save-excursion
- (let ((comment-start (if py-block-comment-prefix-p
- py-block-comment-prefix
- comment-start))
- (beg (or beg (py--beginning-of-top-level-position)))
- (end (or end (py--end-of-top-level-position))))
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (comment-region beg end arg))))
-
-
-;; python-components-comment ends here
-;; python-components-forms-code
-
-
-(defun py-block ()
- "Block at point.
-
-Return code of ‘py-block’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "block")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-block-or-clause ()
- "Block-Or-Clause at point.
-
-Return code of ‘py-block-or-clause’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "block-or-clause")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-buffer ()
- "Buffer at point.
-
-Return code of ‘py-buffer’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "buffer")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-class ()
- "Class at point.
-
-Return code of ‘py-class’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "class")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-clause ()
- "Clause at point.
-
-Return code of ‘py-clause’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "clause")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-def ()
- "Def at point.
-
-Return code of ‘py-def’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "def")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-def-or-class ()
- "Def-Or-Class at point.
-
-Return code of ‘py-def-or-class’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "def-or-class")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-expression ()
- "Expression at point.
-
-Return code of ‘py-expression’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "expression")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-indent ()
- "Indent at point.
-
-Return code of ‘py-indent’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "indent")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-line ()
- "Line at point.
-
-Return code of ‘py-line’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "line")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-minor-block ()
- "Minor-Block at point.
-
-Return code of ‘py-minor-block’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "minor-block")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-paragraph ()
- "Paragraph at point.
-
-Return code of ‘py-paragraph’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "paragraph")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-partial-expression ()
- "Partial-Expression at point.
-
-Return code of ‘py-partial-expression’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "partial-expression")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-region ()
- "Region at point.
-
-Return code of ‘py-region’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "region")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-statement ()
- "Statement at point.
-
-Return code of ‘py-statement’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "statement")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-(defun py-top-level ()
- "Top-Level at point.
-
-Return code of ‘py-top-level’ at point, a string."
- (interactive)
- (let ((erg (py--mark-base "top-level")))
- (py--forms-report-result erg (called-interactively-p 'interactive))))
-
-;; python-components-forms-code.el ends here
-;; python-components-fast-forms
-
-;; Process forms fast
-
-(defun py-fast-process (&optional buffer)
- "Connect am (I)Python process suitable for large output.
-
-Output buffer displays \"Fast\" by default
-It is not in interactive, i.e. comint-mode, as its bookkeepings seem linked to the freeze reported by lp:1253907"
- (interactive)
- (let ((this-buffer
- (set-buffer (or (and buffer (get-buffer-create buffer))
- (get-buffer-create py-shell-name)))))
- (let ((proc (start-process py-shell-name this-buffer py-shell-name)))
- (with-current-buffer this-buffer
- (erase-buffer))
- proc)))
-
-(defun py-fast-send-string (strg &optional proc output-buffer result no-output argprompt args dedicated shell exception-buffer)
- (interactive
- (list (read-string "Python command: ")))
- (py-send-string strg proc result no-output nil output-buffer t argprompt args dedicated shell exception-buffer))
-
-(defun py--fast-send-string-no-output-intern (strg proc limit output-buffer no-output)
- (let (erg)
- (with-current-buffer output-buffer
- (when py-debug-p (switch-to-buffer (current-buffer)))
- ;; (erase-buffer)
- (process-send-string proc strg)
- (or (string-match "\n$" strg)
- (process-send-string proc "\n")
- (goto-char (point-max))
- )
- (cond (no-output
- ;; (erase-buffer)
- (delete-region (point-min) (line-beginning-position))
- )
- (result
- (if
- (setq erg (py--fetch-result output-buffer limit strg))
- (setq py-result (py--filter-result erg))
- (dotimes (_ 3) (unless (setq erg (py--fetch-result output-buffer limit))(sit-for 1 t)))
- (or (py--fetch-result output-buffer limit))
- (error "py-fast-send-string: py--fetch-result: no result")))))))
-
-(defun py--fast-send-string-no-output (strg &optional proc output-buffer result)
- (py-fast-send-string strg proc output-buffer result t))
-
-(defun py--send-to-fast-process (strg proc output-buffer result)
- "Called inside of ‘py--execute-base-intern’.
-
-Optional STRG PROC OUTPUT-BUFFER RETURN"
- (let ((output-buffer (or output-buffer (process-buffer proc)))
- (inhibit-read-only t))
- ;; (switch-to-buffer (current-buffer))
- (with-current-buffer output-buffer
- ;; (erase-buffer)
- (py-fast-send-string strg
- proc
- output-buffer result))))
-
-(defun py-execute-buffer-fast (&optional shell dedicated split switch proc)
- "Send accessible part of buffer to a Python interpreter.
-
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SPLIT: split buffers after executing
-Optional SWITCH: switch to output buffer after executing
-Optional PROC: select an already running process for executing"
- (interactive)
- (py-execute-buffer shell dedicated t split switch proc))
-
-(defalias 'py-process-region-fast 'py-execute-region-fast)
-(defun py-execute-region-fast (beg end &optional shell dedicated split switch proc)
- "Send region to a Python interpreter.
-
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SPLIT: split buffers after executing
-Optional SWITCH: switch to output buffer after executing
-Optional PROC: select an already running process for executing"
- (interactive "r")
- (let ((py-fast-process-p t))
- (py-execute-region beg end shell dedicated t split switch proc)))
-
-(defun py-execute-block-fast (&optional shell dedicated switch beg end file)
- "Process block at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'block shell dedicated switch beg end file t))
-
-(defun py-execute-block-or-clause-fast (&optional shell dedicated switch beg end file)
- "Process block-or-clause at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'block-or-clause shell dedicated switch beg end file t))
-
-(defun py-execute-class-fast (&optional shell dedicated switch beg end file)
- "Process class at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'class shell dedicated switch beg end file t))
-
-(defun py-execute-clause-fast (&optional shell dedicated switch beg end file)
- "Process clause at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'clause shell dedicated switch beg end file t))
-
-(defun py-execute-def-fast (&optional shell dedicated switch beg end file)
- "Process def at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'def shell dedicated switch beg end file t))
-
-(defun py-execute-def-or-class-fast (&optional shell dedicated switch beg end file)
- "Process def-or-class at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'def-or-class shell dedicated switch beg end file t))
-
-(defun py-execute-expression-fast (&optional shell dedicated switch beg end file)
- "Process expression at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'expression shell dedicated switch beg end file t))
-
-(defun py-execute-partial-expression-fast (&optional shell dedicated switch beg end file)
- "Process partial-expression at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'partial-expression shell dedicated switch beg end file t))
-
-(defun py-execute-section-fast (&optional shell dedicated switch beg end file)
- "Process section at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'section shell dedicated switch beg end file t))
-
-(defun py-execute-statement-fast (&optional shell dedicated switch beg end file)
- "Process statement at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'statement shell dedicated switch beg end file t))
-
-(defun py-execute-top-level-fast (&optional shell dedicated switch beg end file)
- "Process top-level at point by a Python interpreter.
-
-Output buffer not in comint-mode, displays \"Fast\" by default
-Optional SHELL: Selecte a Python-shell(VERSION) as py-shell-name
-Optional DEDICATED: run in a dedicated process
-Optional SWITCH: switch to output buffer after executing
-Optional File: execute through running a temp-file"
- (interactive)
- (py--execute-prepare 'top-level shell dedicated switch beg end file t))
-
-;; python-components-narrow
-
-(defun py-narrow-to-block ()
- "Narrow to block at point."
- (interactive)
- (py--narrow-prepare "block"))
-
-(defun py-narrow-to-block-or-clause ()
- "Narrow to block-or-clause at point."
- (interactive)
- (py--narrow-prepare "block-or-clause"))
-
-(defun py-narrow-to-class ()
- "Narrow to class at point."
- (interactive)
- (py--narrow-prepare "class"))
-
-(defun py-narrow-to-clause ()
- "Narrow to clause at point."
- (interactive)
- (py--narrow-prepare "clause"))
-
-(defun py-narrow-to-def ()
- "Narrow to def at point."
- (interactive)
- (py--narrow-prepare "def"))
-
-(defun py-narrow-to-def-or-class ()
- "Narrow to def-or-class at point."
- (interactive)
- (py--narrow-prepare "def-or-class"))
-
-(defun py-narrow-to-statement ()
- "Narrow to statement at point."
- (interactive)
- (py--narrow-prepare "statement"))
-
-;; python-components-auto-fill
-
-(defvar py-auto-fill-mode-orig (auto-fill-mode)
- "Store the original state of auto-fill-mode. ")
-
-;; py-fill-column-orig already defined
-
-(defun py-comment-auto-fill (&optional arg)
- "Toggles comment-auto-fill mode"
- (interactive "P")
- (if (or (and arg (< 0 (prefix-numeric-value arg))) (and (boundp 'py-comment-auto-fill)(not py-comment-auto-fill)))
- (progn
- (set (make-local-variable 'py-comment-auto-fill-p) t)
- (setq fill-column comment-fill-column)
- (auto-fill-mode 1))
- (set (make-local-variable 'py-comment-auto-fill-p) nil)
-;; (set (make-local-variable 'py-comment-auto-fill-only-comments) nil)
- ;; (setq fill-column fill-column-orig)
- (auto-fill-mode -1)))
-
-(defun py-comment-auto-fill-on ()
- (interactive)
- (py-comment-auto-fill 1))
-
-(defun py-comment-auto-fill-off ()
- (interactive)
- (py-comment-auto-fill -1))
-
-;; python-components-hide-show
-
-
-;; (setq hs-block-start-regexp 'py-extended-block-or-clause-re)
-;; (setq hs-forward-sexp-func 'py-forward-block)
-
-(defun py-hide-base (form &optional beg end)
- "Hide visibility of existing form at point."
- (hs-minor-mode 1)
- (save-excursion
- (let* ((form (prin1-to-string form))
- (beg (or beg (or (funcall (intern-soft (concat "py--beginning-of-" form "-p")))
- (funcall (intern-soft (concat "py-backward-" form))))))
- (end (or end (funcall (intern-soft (concat "py-forward-" form)))))
- (modified (buffer-modified-p))
- (inhibit-read-only t))
- (if (and beg end)
- (progn
- (hs-make-overlay beg end 'code)
- (set-buffer-modified-p modified))
- (error (concat "No " (format "%s" form) " at point"))))))
-
-(defun py-hide-show (&optional form beg end)
- "Toggle visibility of existing forms at point."
- (interactive)
- (save-excursion
- (let* ((form (prin1-to-string form))
- (beg (or beg (or (funcall (intern-soft (concat "py--beginning-of-" form "-p")))
- (funcall (intern-soft (concat "py-backward-" form))))))
- (end (or end (funcall (intern-soft (concat "py-forward-" form)))))
- (modified (buffer-modified-p))
- (inhibit-read-only t))
- (if (and beg end)
- (if (overlays-in beg end)
- (hs-discard-overlays beg end)
- (hs-make-overlay beg end 'code))
- (error (concat "No " (format "%s" form) " at point")))
- (set-buffer-modified-p modified))))
-
-(defun py-show ()
- "Remove invisibility of existing form at point."
- (interactive)
- (with-silent-modifications
- (save-excursion
- (back-to-indentation)
- (let ((end (next-overlay-change (point))))
- (hs-discard-overlays (point) end)))))
-
-(defun py-show-all ()
- "Remove invisibility of hidden forms in buffer."
- (interactive)
- (save-excursion
- (goto-char (point-min))
- (let (end)
- (while (and (not (eobp)) (setq end (next-overlay-change (point))))
- (hs-discard-overlays (point) end)
- (goto-char end)))))
-
-(defun py-hide-region (beg end)
- "Hide active region."
- (interactive
- (list
- (and (use-region-p) (region-beginning))(and (use-region-p) (region-end))))
- (py-hide-base 'region beg end))
-
-(defun py-show-region (beg end)
- "Un-hide active region."
- (interactive
- (list
- (and (use-region-p) (region-beginning))(and (use-region-p) (region-end))))
- (py-show-base 'region beg end))
-
-(defun py-hide-block ()
- "Hide block at point."
- (interactive)
- (py-hide-base 'block))
-
-(defun py-hide-block-or-clause ()
- "Hide block-or-clause at point."
- (interactive)
- (py-hide-base 'block-or-clause))
-
-(defun py-hide-class ()
- "Hide class at point."
- (interactive)
- (py-hide-base 'class))
-
-(defun py-hide-clause ()
- "Hide clause at point."
- (interactive)
- (py-hide-base 'clause))
-
-(defun py-hide-comment ()
- "Hide comment at point."
- (interactive)
- (py-hide-base 'comment))
-
-(defun py-hide-def ()
- "Hide def at point."
- (interactive)
- (py-hide-base 'def))
-
-(defun py-hide-def-or-class ()
- "Hide def-or-class at point."
- (interactive)
- (py-hide-base 'def-or-class))
-
-(defun py-hide-elif-block ()
- "Hide elif-block at point."
- (interactive)
- (py-hide-base 'elif-block))
-
-(defun py-hide-else-block ()
- "Hide else-block at point."
- (interactive)
- (py-hide-base 'else-block))
-
-(defun py-hide-except-block ()
- "Hide except-block at point."
- (interactive)
- (py-hide-base 'except-block))
-
-(defun py-hide-expression ()
- "Hide expression at point."
- (interactive)
- (py-hide-base 'expression))
-
-(defun py-hide-for-block ()
- "Hide for-block at point."
- (interactive)
- (py-hide-base 'for-block))
-
-(defun py-hide-if-block ()
- "Hide if-block at point."
- (interactive)
- (py-hide-base 'if-block))
-
-(defun py-hide-indent ()
- "Hide indent at point."
- (interactive)
- (py-hide-base 'indent))
-
-(defun py-hide-line ()
- "Hide line at point."
- (interactive)
- (py-hide-base 'line))
-
-(defun py-hide-minor-block ()
- "Hide minor-block at point."
- (interactive)
- (py-hide-base 'minor-block))
-
-(defun py-hide-paragraph ()
- "Hide paragraph at point."
- (interactive)
- (py-hide-base 'paragraph))
-
-(defun py-hide-partial-expression ()
- "Hide partial-expression at point."
- (interactive)
- (py-hide-base 'partial-expression))
-
-(defun py-hide-section ()
- "Hide section at point."
- (interactive)
- (py-hide-base 'section))
-
-(defun py-hide-statement ()
- "Hide statement at point."
- (interactive)
- (py-hide-base 'statement))
-
-(defun py-hide-top-level ()
- "Hide top-level at point."
- (interactive)
- (py-hide-base 'top-level))
-
-(defun py-dynamically-hide-indent ()
- (interactive)
- (py-show)
- (py-hide-indent))
-
-(defun py-dynamically-hide-further-indent (&optional arg)
- (interactive "P")
- (if (eq 4 (prefix-numeric-value arg))
- (py-show)
- (py-show)
- (py-forward-indent)
- (py-hide-indent)))
-
-;; python-components-hide-show.el ends here
-;; python-components-fast-complete
-
-(defun py--fast-completion-get-completions (input process completion-code buffer)
- "Retrieve available completions for INPUT using PROCESS.
-Argument COMPLETION-CODE is the python code used to get
-completions on the current context."
- (let ((completions
- (py-fast-send-string
- (format completion-code input) process buffer t)))
- (when (> (length completions) 2)
- (split-string completions "^'\\|^\"\\|;\\|'$\\|\"$" t))))
-
-(defun py--fast--do-completion-at-point (process imports input code buffer)
- "Do completion at point for PROCESS."
- ;; send setup-code
- (let (py-store-result-p)
- (when imports
- ;; (message "%s" imports)
- (py-fast-send-string imports process buffer nil t)))
- (let* ((completion
- (py--fast-completion-get-completions input process code buffer)))
- (sit-for 0.1)
- (cond ((eq completion t)
- (and py-verbose-p (message "py--fast--do-completion-at-point %s" "`t' is returned, not completion. Might be a bug.")))
- ((null completion)
- (and py-verbose-p (message "py--fast--do-completion-at-point %s" "Don't see a completion"))
- (set-window-configuration py-last-window-configuration))
- ((and completion
- (or (and (listp completion)
- (string= input (car completion)))
- (and (stringp completion)
- (string= input completion))))
- (set-window-configuration py-last-window-configuration))
- ((and completion (stringp completion) (not (string= input completion)))
- (progn (delete-char (- (length input)))
- (insert completion)
- ;; (move-marker orig (point))
- ;; minibuffer.el expects a list
- ))
- (t (py--try-completion input completion)))))
-
-(defun py--fast-complete-base (shell word imports)
- (let* (py-split-window-on-execute py-switch-buffers-on-execute-p
- (shell (or shell "python"))
- (buffer (py-shell nil nil nil shell nil t))
- (proc (get-buffer-process buffer))
- (code (if (string-match "[Ii][Pp]ython*" shell)
- (py-set-ipython-completion-command-string shell)
- py-shell-module-completion-code)))
- (py--python-send-completion-setup-code buffer)
- (py--fast--do-completion-at-point proc imports word code buffer)))
-
-(defun py-fast-complete (&optional shell beg end word)
- "Complete word before point, if any.
-
-Use `py-fast-process' "
- (interactive "*")
- (window-configuration-to-register py-windows-config-register)
- (setq py-last-window-configuration
- (current-window-configuration))
- (py-shell-complete shell beg end word t)
- )
-
-;; python-components-intern
-
-;; Keymap
-
-(defun py-separator-char ()
- "Return the file-path separator char from current machine.
-
-When `py-separator-char' is customized, its taken.
-Returns char found. "
- (let ((erg (cond ((characterp py-separator-char)
- (char-to-string py-separator-char))
- ;; epd hack
- ((and
- (string-match "[Ii][Pp]ython" py-shell-name)
- (string-match "epd\\|EPD" py-shell-name))
- (replace-regexp-in-string "\n" ""
- (shell-command-to-string (concat py-shell-name " -c \"import os; print(os.sep)\"")))))))
- (if (and erg (string-match "^$" erg))
- (setq erg (substring erg (string-match "^$" erg)))
- (setq erg (replace-regexp-in-string "\n" "" (shell-command-to-string (concat py-shell-name " -W ignore" " -c \"import os; print(os.sep)\"")))))
- erg))
-
-(defun pps-emacs-version ()
- "Include the appropriate `parse-partial-sexp' "
- (if (featurep 'xemacs)
- '(parse-partial-sexp (point-min) (point))
- '(parse-partial-sexp (point-min) (point))))
-
-(defun py--forward-string-maybe (&optional start)
- "Go to the end of string.
-
-Expects START position of string
-Return position of moved, nil otherwise."
- (let ((orig (point)))
- (when start (goto-char start)
- (when (looking-at "\"\"\"\\|'''")
- (goto-char (1- (match-end 0))))
- (forward-sexp)
- ;; maybe at the inner fence
- (when (looking-at "\"\"\\|''")
- (goto-char (match-end 0)))
- (and (< orig (point)) (point)))))
-
-(defun py-in-comment-p ()
- "Return the beginning of current line's comment, if inside. "
- (interactive)
- (let* ((pps (parse-partial-sexp (point-min) (point)))
- (erg (and (nth 4 pps) (nth 8 pps))))
- erg))
-;;
-(defun py-in-string-or-comment-p ()
- "Returns beginning position if inside a string or comment, nil otherwise. "
- (or (nth 8 (parse-partial-sexp (point-min) (point)))
- (when (or (looking-at "\"")(looking-at "[ \t]*#[ \t]*"))
- (point))))
-
-(when py-org-cycle-p
- (define-key python-mode-map (kbd "<backtab>") 'org-cycle))
-
-(defun py--buffer-filename-remote-maybe (&optional file-name)
- (let ((file-name (or file-name
- (and
- (ignore-errors (file-readable-p (buffer-file-name)))
- (buffer-file-name)))))
- (if (and (featurep 'tramp) (tramp-tramp-file-p file-name))
- (tramp-file-name-localname
- (tramp-dissect-file-name file-name))
- file-name)))
-
-(defun py-forward-buffer ()
- "A complementary form used by auto-generated commands.
-
-Returns position reached if successful"
- (interactive)
- (unless (eobp)
- (goto-char (point-max))))
-
-(defun py-backward-buffer ()
- "A complementary form used by auto-generated commands.
-
-Returns position reached if successful"
- (interactive)
- (unless (bobp)
- (goto-char (point-min))))
-
-(defun py-load-skeletons ()
- "Load skeletons from extensions. "
- (interactive)
- (load (concat py-install-directory "/extensions/python-components-skeletons.el")))
-
-(defun py--kill-emacs-hook ()
- "Delete files in `py-file-queue'.
-These are Python temporary files awaiting execution."
- (mapc #'(lambda (filename)
- (ignore-errors (delete-file filename)))
- py-file-queue))
-
-;; Add a designator to the minor mode strings
-(or (assq 'py-pdbtrack-is-tracking-p minor-mode-alist)
- (push '(py-pdbtrack-is-tracking-p py-pdbtrack-minor-mode-string)
- minor-mode-alist))
-
-;; bottle.py
-;; py = sys.version_info
-;; py3k = py >= (3,0,0)
-;; py25 = py < (2,6,0)
-;; py31 = (3,1,0) <= py < (3,2,0)
-
-;; sys.version_info[0]
-(defun py-python-version (&optional executable verbose)
- "Returns versions number of a Python EXECUTABLE, string.
-
-If no EXECUTABLE given, `py-shell-name' is used.
-Interactively output of `--version' is displayed. "
- (interactive)
- (let* ((executable (or executable py-shell-name))
- (erg (py--string-strip (shell-command-to-string (concat executable " --version")))))
- (when (called-interactively-p 'any) (message "%s" erg))
- (unless verbose (setq erg (cadr (split-string erg))))
- erg))
-
-(defun py-version ()
- "Echo the current version of `python-mode' in the minibuffer."
- (interactive)
- (message "Using `python-mode' version %s" py-version)
- (py-keep-region-active))
-
-;; Utility stuff
-(declare-function compilation-shell-minor-mode "compile" (&optional arg))
-
-;; dereived from shipped python.el
-(defun py-history-input-filter (str)
- "`comint-input-filter' function for Python process.
-Don't save anything for STR matching `py-history-filter-regexp'."
- (not (string-match py-history-filter-regexp str)))
-
-(defun py--update-lighter (shell)
- "Select lighter for mode-line display"
- (setq py-modeline-display
- (cond
- ;; ((eq 2 (prefix-numeric-value argprompt))
- ;; py-python2-command-args)
- ((string-match "^[^-]+3" shell)
- py-python3-modeline-display)
- ((string-match "^[^-]+2" shell)
- py-python2-modeline-display)
- ((string-match "^.[Ii]" shell)
- py-ipython-modeline-display)
- ((string-match "^.[Jj]" shell)
- py-jython-modeline-display)
- (t
- python-mode-modeline-display))))
-
-(defun py--start-fast-process (shell buffer args)
- (apply 'start-process shell buffer shell
- args))
-
- ;; (switch-to-buffer buffer)
- ;; (setq py-output-buffer buffer))
-
-(defun py-shell (&optional argprompt args dedicated shell buffer fast exception-buffer split switch internal)
- "Connect process to BUFFER.
-
-Start an interpreter according to ‘py-shell-name’ or SHELL.
-
-Optional ARGPROMPT: with \\[universal-argument] start in a new
-dedicated shell.
-
-Optional ARGS: Specify other than default command args.
-
-Optional DEDICATED: start in a new dedicated shell.
-Optional string SHELL overrides default ‘py-shell-name’.
-Optional string BUFFER allows a name, the Python process is connected to
-Optional FAST: no fontification in process-buffer.
-Optional EXCEPTION-BUFFER: point to error.
-Optional SPLIT: see var ‘py-split-window-on-execute’
-Optional SWITCH: see var ‘py-switch-buffers-on-execute-p’
-Optional INTERNAL shell will be invisible for users
-
-Reusing existing processes: For a given buffer and same values,
-if a process is already running for it, it will do nothing.
-
-Runs the hook `py-shell-mode-hook' after
-`comint-mode-hook' is run. (Type \\[describe-mode] in the
-process buffer for a list of commands.)"
- (interactive "p")
- (let* ((interactivep (and argprompt (eq 1 (prefix-numeric-value argprompt))))
- (fast (unless (eq major-mode 'org-mode)
- (or fast py-fast-process-p)))
- (dedicated (or (eq 4 (prefix-numeric-value argprompt)) dedicated py-dedicated-process-p))
- (shell (or shell (py-choose-shell)))
- (args (or args (py--provide-command-args shell fast)))
- (py-use-local-default (py--determine-local-default))
- (buffer-name
- (or buffer
- (py--choose-buffer-name shell dedicated fast)))
- (proc (get-buffer-process buffer-name))
- (done nil)
- (delay nil)
- (buffer
- (or
- (and (ignore-errors (process-buffer proc))
- (save-excursion (with-current-buffer (process-buffer proc)
- ;; point might not be left there
- (goto-char (point-max))
- (push-mark)
- (setq done t)
- (process-buffer proc))))
- (save-excursion
- (py-shell-with-environment
- (if fast
- (process-buffer (apply 'start-process shell buffer-name shell args))
- (apply #'make-comint-in-buffer shell buffer-name
- shell nil args))))))
- ;; (py-shell-prompt-detect-p (or (string-match "^\*IP" buffer) py-shell-prompt-detect-p))
- )
- (setq py-output-buffer (buffer-name (if python-mode-v5-behavior-p py-output-buffer buffer)))
- (unless done
- (with-current-buffer buffer
- (setq delay (py--which-delay-process-dependent buffer-name))
- (unless fast
- (when interactivep
- (cond ((string-match "^.I" buffer-name)
- (message "Waiting according to ‘py-ipython-send-delay:’ %s" delay))
- ((string-match "^.+3" buffer-name)
- (message "Waiting according to ‘py-python3-send-delay:’ %s" delay))))
- (setq py-modeline-display (py--update-lighter buffer-name))
- (sit-for delay t))))
- (if (setq proc (get-buffer-process buffer))
- (progn
- (with-current-buffer buffer
- (unless fast (py-shell-mode))
- (and internal (set-process-query-on-exit-flag proc nil)))
- (when (or interactivep
- (or switch py-switch-buffers-on-execute-p py-split-window-on-execute))
- (py--shell-manage-windows buffer exception-buffer split (or interactivep switch)))
- buffer)
- (error (concat "py-shell:" (py--fetch-error py-output-buffer))))))
-
-(defun py-load-named-shells ()
- (interactive)
- (dolist (ele py-known-shells)
- (let ((erg (py-install-named-shells-fix-doc ele)))
- (eval (fset (car (read-from-string ele)) (car
- (read-from-string (concat "(lambda (&optional dedicated args) \"Start a ‘" erg "’ interpreter.
-Optional DEDICATED: with \\\\[universal-argument] start in a new
-dedicated shell.
-Optional ARGS overriding ‘py-" ele "-command-args’.
-
-Calls ‘py-shell’
-\"
- (interactive \"p\") (py-shell dedicated args nil \""ele"\"))")))))))
- (when (functionp (car (read-from-string (car-safe py-known-shells))))
- (when py-verbose-p (message "py-load-named-shells: %s" "installed named-shells"))))
-
-;; (py-load-named-shells)
-
-(defun py-load-file (file-name)
- "Load a Python file FILE-NAME into the Python process.
-
-If the file has extension `.py' import or reload it as a module.
-Treating it as a module keeps the global namespace clean, provides
-function location information for debugging, and supports users of
-module-qualified names."
- (interactive "f")
- (py--execute-file-base (get-buffer-process (get-buffer (py-shell))) file-name))
-
-(defun py-proc (&optional argprompt)
- "Return the current Python process.
-
-Start a new process if necessary. "
- (interactive "P")
- (let ((erg
- (cond ((comint-check-proc (current-buffer))
- (get-buffer-process (buffer-name (current-buffer))))
- (t (py-shell argprompt)))))
- ;; (when (called-interactively-p 'any) (message "%S" erg))
- erg))
-
-;; Miscellany.
-(defun py--shell-simple-send (proc strg)
- (let* ((strg (substring-no-properties strg))
- (nln (string-match "\n$" strg)))
- ;; (or nln (setq strg (concat strg "\n")))
- ;; (comint-simple-send proc (substring-no-properties strg))
- (process-send-string proc strg)
- (or nln (process-send-string proc "\n"))))
-
-(defalias
- 'py-shell-redirect-send-command-to-process
- 'comint-redirect-send-command-to-process)
-(defalias
- 'py-shell-dynamic-simple-complete
- 'comint-dynamic-simple-complete)
-
-;; Hooks
-;; arrange to kill temp files when Emacs exists
-(add-hook 'kill-emacs-hook 'py--kill-emacs-hook)
-
-(when py--warn-tmp-files-left-p
- (add-hook 'python-mode-hook 'py--warn-tmp-files-left))
-
-
-(defun py-guess-pdb-path ()
- "If py-pdb-path isn't set, find location of pdb.py. "
- (interactive)
- (let ((ele (split-string (shell-command-to-string "whereis python")))
- erg)
- (while (or (not erg)(string= "" erg))
- (when (and (string-match "^/" (car ele)) (not (string-match "/man" (car ele))))
- (setq erg (shell-command-to-string (concat "find " (car ele) " -type f -name \"pdb.py\""))))
- (setq ele (cdr ele)))
- (if erg
- (message "%s" erg)
- (message "%s" "pdb.py not found, please customize `py-pdb-path'"))
- erg))
-
-(if py-mode-output-map
- nil
- (setq py-mode-output-map (make-sparse-keymap))
- (define-key py-mode-output-map [button2] 'py-mouseto-exception)
- (define-key py-mode-output-map "\C-c\C-c" 'py-goto-exception)
- ;; TBD: Disable all self-inserting keys. This is bogus, we should
- ;; really implement this as *Python Output* buffer being read-only
- (mapc #' (lambda (key)
- (define-key py-mode-output-map key
- #'(lambda () (interactive) (beep))))
- (where-is-internal 'self-insert-command)))
-
-(defun py-toggle-local-default-use ()
- (interactive)
- "Toggle boolean value of `py-use-local-default'.
-
-Returns `py-use-local-default'
-
-See also `py-install-local-shells'
-Installing named virualenv shells is the preffered way,
-as it leaves your system default unchanged."
- (setq py-use-local-default (not py-use-local-default))
- (when (called-interactively-p 'any) (message "py-use-local-default set to %s" py-use-local-default))
- py-use-local-default)
-
-(defalias 'py-hungry-delete-forward 'c-hungry-delete-forward)
-(defalias 'py-hungry-delete-backwards 'c-hungry-delete-backwards)
-
-;; FixMe: for unknown reasons this is not done by mode
-(if (file-readable-p abbrev-file-name)
- (add-hook 'python-mode-hook
- (lambda ()
- (setq py-this-abbrevs-changed abbrevs-changed)
- (load abbrev-file-name nil t)
- (setq abbrevs-changed py-this-abbrevs-changed)))
- (message "Warning: %s" "no abbrev-file found, customize `abbrev-file-name' in order to make mode-specific abbrevs work. "))
-
-;; ;
-(push (list
- 'python-mode
- ;; start regex
- (concat (if py-hide-show-hide-docstrings
- "^\\s-*\"\"\"\\|" "")
- (mapconcat 'identity
- (mapcar #'(lambda (x) (concat "^\\s-*" x "\\_>"))
- py-hide-show-keywords)
- "\\|"))
- ;; end regex
- nil
- ;; comment-start regex
- "#"
- ;; forward-sexp function
- (lambda ()
- (py-forward-block-or-clause))
- nil) hs-special-modes-alist)
-
-;; ;
-
-(defun py--input-filter (str)
- "`comint-input-filter' function for Python.
-
-Don't save anything for STR matching `py-input-filter-re' "
- (not (string-match py-input-filter-re str)))
-
-(make-obsolete 'jpython-mode 'jython-mode nil)
-
-(push (purecopy "*Python*") same-window-buffer-names)
-(push (purecopy "*IPython*") same-window-buffer-names)
-
-(push (cons (purecopy "\\.py\\'") 'python-mode) auto-mode-alist)
-
-;; Python Macro File
-
-(unless (member '(".pym'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pym\\'") 'python-mode) auto-mode-alist))
-
-(unless (member '(".pyc'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pyc\\'") 'python-mode) auto-mode-alist))
-
-;; Pyrex Source
-(unless (member '(".pyx'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pyx\\'") 'python-mode) auto-mode-alist))
-
-;; Python Optimized Code
-(unless (member '(".pyo'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pyo\\'") 'python-mode) auto-mode-alist))
-
-;; Pyrex Definition File
-(unless (member '(".pxd'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pxd\\'") 'python-mode) auto-mode-alist))
-
-;; Python Repository
-(unless (member '(".pyr'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pyr\\'") 'python-mode) auto-mode-alist))
-
-;; Python Stub file
-;; https://www.python.org/dev/peps/pep-0484/#stub-files
-(unless (member '(".pyi'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pyi\\'") 'python-mode) auto-mode-alist))
-
-;; Python Path Configuration
-(unless (member '(".pth'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.pth\\'") 'python-mode) auto-mode-alist))
-
-;; Python Wheels
-(unless (member '(".whl'" . python-mode) auto-mode-alist)
- (push (cons (purecopy "\\.whl\\'") 'python-mode) auto-mode-alist))
-
-(unless (member '("!#[ ]*/.*[jp]ython[0-9.]*" . python-mode) magic-mode-alist)
- (push '("!#[ \\t]*/.*[jp]ython[0-9.]*" . python-mode) magic-mode-alist))
-
-;; lp:1355458, what about using `magic-mode-alist'?
-
-(defun py--uncomment-intern (beg end)
- (uncomment-region beg end)
- (when py-uncomment-indents-p
- (py-indent-region beg end)))
-
-(defun py-uncomment (&optional beg)
- "Uncomment commented lines at point.
-
-If region is active, restrict uncommenting at region "
- (interactive "*")
- (save-excursion
- (save-restriction
- (when (use-region-p)
- (narrow-to-region (region-beginning) (region-end)))
- (let* (last
- (beg (or beg (save-excursion
- (while (and (py-beginning-of-comment) (setq last (point))(prog1 (forward-line -1)(end-of-line))))
- last))))
- (and (py-forward-comment))
- (py--uncomment-intern beg (point))))))
-
-(defun py--set-auto-fill-values ()
- "Internal use by `py--run-auto-fill-timer'"
- (let ((pps (parse-partial-sexp (point-min) (point))))
- (cond ((and (nth 4 pps)(numberp py-comment-fill-column))
- (setq fill-column py-comment-fill-column))
- ((and (nth 3 pps)(numberp py-docstring-fill-column))
- (set (make-local-variable 'fill-column) py-docstring-fill-column))
- (t (setq fill-column py-fill-column-orig)))))
-
-(defun py--run-auto-fill-timer ()
- "Set fill-column to values of `py-docstring-fill-column' resp. to `py-comment-fill-column' according to environment. "
- (when py-auto-fill-mode
- (unless py-autofill-timer
- (setq py-autofill-timer
- (run-with-idle-timer
- py-autofill-timer-delay t
- 'py--set-auto-fill-values)))))
-
-;; unconditional Hooks
-;; (orgstruct-mode 1)
-(add-hook 'python-mode-hook
- (lambda ()
- (setq imenu-create-index-function py--imenu-create-index-function)
- (setq indent-tabs-mode py-indent-tabs-mode)))
-
-(remove-hook 'python-mode-hook 'python-setup-brm)
-
-(defun py-complete-auto ()
- "Auto-complete function using py-complete. "
- ;; disable company
- ;; (when company-mode (company-mode))
- (let ((modified (buffer-chars-modified-tick)))
- ;; don't try completion if buffer wasn't modified
- (unless (eq modified py-complete-last-modified)
- (if py-auto-completion-mode-p
- (if (string= "*PythonCompletions*" (buffer-name (current-buffer)))
- (sit-for 0.1 t)
- (if
- (eq py-auto-completion-buffer (current-buffer))
- ;; not after whitespace, TAB or newline
- (unless (member (char-before) (list 32 9 10))
- (py-complete)
- (setq py-complete-last-modified (buffer-chars-modified-tick)))
- (setq py-auto-completion-mode-p nil
- py-auto-completion-buffer nil)
- (cancel-timer py--auto-complete-timer)))))))
-
-(defun py-set-command-args (arguments)
- "Set Python arguments on the fly, override defaults in this session.
-
-Use `defcustom' to keep value across sessions "
- (interactive
- (list
- (read-from-minibuffer "Command args: " py-python-command-args)))
- (setq py-python-command-args arguments))
-
-(defun py---emacs-version-greater-23 ()
- "Return `t' if emacs major version is above 23"
- (< 23 (string-to-number (car (split-string emacs-version "\\.")))))
-
-(defun py--arglist-indent (nesting &optional indent-offset)
- "Internally used by `py-compute-indentation'"
- (if
- (and (eq 1 nesting)
- (save-excursion
- (back-to-indentation)
- (looking-at py-extended-block-or-clause-re)))
- (progn
- (back-to-indentation)
- (1+ (+ (current-column) (* 2 (or indent-offset py-indent-offset)))))
- (+ (current-indentation) (or indent-offset py-indent-offset))))
-
-(defun py-symbol-at-point ()
- "Return the current Python symbol.
-
-When interactively called, copy and message it"
- (interactive)
- (let ((erg (with-syntax-table
- py-dotted-expression-syntax-table
- (current-word))))
- (when (interactive-p) (kill-new erg)
- (message "%s" erg))
- erg))
-
-(defun py-kill-buffer-unconditional (buffer)
- "Kill buffer unconditional, kill buffer-process if existing. "
- (interactive
- (list (current-buffer)))
- ;; (when (bufferp buffer)
- (ignore-errors (with-current-buffer buffer
- (let (kill-buffer-query-functions set-buffer-modified-p)
- (ignore-errors (kill-process (get-buffer-process buffer)))
- (ignore-errors (kill-buffer buffer))))))
-
-(defun py--line-backward-maybe ()
- "Return result of (< 0 (abs (skip-chars-backward \" \\t\\r\\n\\f\"))) "
- (skip-chars-backward " \t\f" (line-beginning-position))
- (< 0 (abs (skip-chars-backward " \t\r\n\f"))))
-
-(defun py--after-empty-line ()
- "Return `t' if line before contains only whitespace characters. "
- (save-excursion
- (beginning-of-line)
- (forward-line -1)
- (beginning-of-line)
- (looking-at "\\s-*$")))
-
-(defun py--computer-closing-inner-list ()
- "Compute indentation according to py-closing-list-dedents-bos."
- (if py-closing-list-dedents-bos
- (+ (current-indentation) py-indent-offset)
- (1+ (current-column))))
-
-(defun py--compute-closing-outer-list ()
- "Compute indentation according to py-closing-list-dedents-bos."
- (if py-closing-list-dedents-bos
- (current-indentation)
- (+ (current-indentation) py-indent-offset)))
-
-(defun py-compute-indentation--according-to-list-style ()
- "See ‘py-indent-list-style’
-
-Choices are:
-
-'line-up-with-first-element (default)
-'one-level-to-beginning-of-statement
-'one-level-from-opener"
- (save-excursion
- (pcase py-indent-list-style
- (`line-up-with-first-element
- (1+ (current-column)))
- (`one-level-to-beginning-of-statement
- (py-backward-statement)
- (+ py-indent-offset (current-indentation)))
- (`one-level-from-first-element
- (+ 1 py-indent-offset (current-column))))))
-
-(defun py-compute-indentation-closing-list (pps)
- (cond
- ((< 1 (nth 0 pps))
- (goto-char (nth 1 pps))
- ;; reach the outer list
- (goto-char (nth 1 (parse-partial-sexp (point-min) (point))))
- (py--computer-closing-inner-list))
- ;; just close an maybe outer list
- ((eq 1 (nth 0 pps))
- (goto-char (nth 1 pps))
- (py-compute-indentation--according-to-list-style))))
-
-(defun py-compute-list-indent--according-to-circumstance (pps line origline)
- (and (nth 1 pps) (goto-char (nth 1 pps)))
- (if (looking-at "[({\\[][ \t]*$")
- (+ (current-indentation) py-indent-offset)
- (if (or line (< (py-count-lines) origline))
- (py-compute-indentation--according-to-list-style))))
-
-(defun py-compute-indentation-in-list (pps line closing orig origline)
- (if closing
- (py-compute-indentation-closing-list pps)
- (cond ((and (not line) (looking-back py-assignment-re (line-beginning-position)))
- (py--fetch-indent-statement-above orig))
- ;; (py-compute-indentation--according-to-list-style pps iact orig origline line nesting repeat indent-offset liep)
- (t (when (looking-back "[ \t]*\\(\\s(\\)" (line-beginning-position))
- (goto-char (match-beginning 1))
- (setq pps (parse-partial-sexp (point-min) (point))))
- (py-compute-list-indent--according-to-circumstance pps line origline)))))
-
-(defun py-compute-comment-indentation (pps iact orig origline closing line nesting repeat indent-offset liep)
- (cond ((nth 8 pps)
- (goto-char (nth 8 pps))
- (cond ((and line (eq (current-column) (current-indentation)))
- (current-indentation))
- ((and (eq liep (line-end-position))py-indent-honors-inline-comment)
- (current-column))
- ((py--line-backward-maybe)
- (setq line t)
- (skip-chars-backward " \t")
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- (t (if py-indent-comments
- (progn
- (py-backward-comment)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- 0))))
- ((and
- (looking-at (concat "[ \t]*" comment-start))
- (looking-back "^[ \t]*" (line-beginning-position))(not line)
- (eq liep (line-end-position)))
- (if py-indent-comments
- (progn
- (setq line t)
- (skip-chars-backward " \t\r\n\f")
- ;; as previous comment-line might
- ;; be wrongly unindented, travel
- ;; whole commented section
- (py-backward-comment)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- 0))
- ((and
- (looking-at (concat "[ \t]*" comment-start))
- (looking-back "^[ \t]*" (line-beginning-position))
- (not (eq liep (line-end-position))))
- (current-indentation))
- ((and (eq 11 (syntax-after (point))) line py-indent-honors-inline-comment)
- (current-column))))
-
-(defun py-close-according-to-style (pps)
- (goto-char (nth 1 pps))
- (if py-closing-list-dedents-bos
- (current-indentation)
- (pcase py-indent-list-style
- (`line-up-with-first-element
- (1+ (current-column)))
- (`one-level-to-beginning-of-statement
- (+ (current-indentation) py-indent-offset))
- (`one-level-from-first-element
- (+ 1 (current-column) py-indent-offset)))))
-
-(defun py-compute-indentation--at-closer-maybe (pps)
- (save-excursion
- (when (looking-back "^[ \t]*\\(\\s)\\)" (line-beginning-position))
- (forward-char -1)
- (setq pps (parse-partial-sexp (point-min) (point))))
- (when (and (nth 1 pps)
- (looking-at "[ \t]*\\(\\s)\\)")(nth 0 pps))
- (if
- ;; beyond list start?
- (< (progn (unless (bobp) (forward-line -1) (line-beginning-position))) (nth 1 pps))
- (py-close-according-to-style pps)
- (if py-closing-list-dedents-bos
- (- (current-indentation) py-indent-offset)
- (current-indentation))))))
-
-(defun py-compute-indentation (&optional iact orig origline closing line nesting repeat indent-offset liep)
- "Compute Python indentation.
-
-When HONOR-BLOCK-CLOSE-P is non-nil, statements such as `return',
-`raise', `break', `continue', and `pass' force one level of dedenting.
-
-Optional arguments are flags resp. values set and used by `py-compute-indentation' internally:
-ORIG keeps original position
-ORIGLINE keeps line where compute started
-CLOSING is t when started at a char delimiting a list as \"]})\"
-LINE indicates being not at origline now
-NESTING is currently ignored, if executing from inside a list
-REPEAT counter enables checks against `py-max-specpdl-size'
-INDENT-OFFSET allows calculation of block-local values
-LIEP stores line-end-position at point-of-interest
-"
- (interactive "p")
- (save-excursion
- (save-restriction
- (widen)
- ;; in shell, narrow from previous prompt
- ;; needed by closing
- (let* ((orig (or orig (copy-marker (point))))
- (origline (or origline (py-count-lines (point-min) (point))))
- ;; closing indicates: when started, looked
- ;; at a single closing parenthesis
- ;; line: moved already a line backward
- (liep (or liep (line-end-position)))
- (line (or line (not (eq origline (py-count-lines (point-min) (point))))))
- ;; (line line)
- (pps (progn
- (unless (eq (current-indentation) (current-column))(skip-chars-backward " " (line-beginning-position)))
- ;; (when (eq 5 (car (syntax-after (1- (point)))))
- ;; (forward-char -1))
- (parse-partial-sexp (point-min) (point))))
- (closing
- (or closing
- ;; returns update pps
- (py-compute-indentation--at-closer-maybe pps)))
- ;; in a recursive call already
- (repeat (if repeat
- (setq repeat (1+ repeat))
- 0))
- ;; nesting: started nesting a list
- (nesting nesting)
- (cubuf (current-buffer))
- erg indent this-line)
- (if (and (< repeat 1)
- (and (comint-check-proc (current-buffer))
- (re-search-backward (concat py-shell-prompt-regexp "\\|" py-ipython-output-prompt-re "\\|" py-ipython-input-prompt-re) nil t 1)))
- ;; common recursion not suitable because of prompt
- (with-temp-buffer
- ;; (switch-to-buffer (current-buffer))
- (insert-buffer-substring cubuf (match-end 0) orig)
- (python-mode)
- (setq indent (py-compute-indentation)))
- (if (< py-max-specpdl-size repeat)
- (error "`py-compute-indentation' reached loops max.")
- (setq nesting (nth 0 pps))
- (setq indent
- (cond (closing)
- ((bobp)
- (cond ((eq liep (line-end-position))
- 0)
- ;; - ((looking-at py-outdent-re)
- ;; - (+ (or indent-offset (and py-smart-indentation (py-guess-indent-offset)) py-indent-offset) (current-indentation)))
- ((and line (looking-at py-block-or-clause-re))
- py-indent-offset)
- ((looking-at py-outdent-re)
- (+ (or indent-offset (and py-smart-indentation (py-guess-indent-offset)) py-indent-offset) (current-indentation)))
- (t
- (current-indentation))))
- ;; (cond ((eq liep (line-end-position))
- ;; 0)
- ;; ((looking-at py-outdent-re)
- ;; (+ (or indent-offset (and py-smart-indentation (py-guess-indent-offset)) py-indent-offset) (current-indentation)))
- ;; (t
- ;; (current-indentation)))
- ;; in string
- ((and (nth 3 pps) (nth 8 pps))
- (cond
- ((py--docstring-p (nth 8 pps))
- (save-excursion
- ;; (goto-char (match-beginning 0))
- (back-to-indentation)
- (if (looking-at "[uUrR]?\"\"\"\\|[uUrR]?'''")
- (progn
- (skip-chars-backward " \t\r\n\f")
- (back-to-indentation)
- (if (looking-at py-def-or-class-re)
- (+ (current-column) py-indent-offset)
- (current-indentation)))
- (skip-chars-backward " \t\r\n\f")
- (back-to-indentation)
- (current-indentation))))
- (t 0)))
- ((and (looking-at "\"\"\"\\|'''") (not (bobp)))
- (py-backward-statement)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- ;; comments
- ((or
- (nth 8 pps)
- (and
- (looking-at (concat "[ \t]*" comment-start))
- (looking-back "^[ \t]*" (line-beginning-position))(not line))
- (and (eq 11 (syntax-after (point))) line py-indent-honors-inline-comment))
- (py-compute-comment-indentation pps iact orig origline closing line nesting repeat indent-offset liep))
- ;; lists
- ((nth 1 pps)
- (if (< (nth 1 pps) (line-beginning-position))
- (py-compute-indentation-in-list pps line closing orig origline)
- (back-to-indentation)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep)))
- ((and (eq (char-after) (or ?\( ?\{ ?\[)) line)
- (1+ (current-column)))
- ((py-preceding-line-backslashed-p)
- (progn
- (py-backward-statement)
- (setq this-line (py-count-lines))
- (if (< 1 (- origline this-line))
- (py--fetch-indent-line-above orig)
- (if (looking-at "from +\\([^ \t\n]+\\) +import")
- py-backslashed-lines-indent-offset
- (+ (current-indentation) py-continuation-offset)))))
- ((and (looking-at py-block-closing-keywords-re)
- (eq liep (line-end-position)))
- (skip-chars-backward "[ \t\r\n\f]")
- (py-backward-statement)
- (cond ((looking-at py-extended-block-or-clause-re)
- (+
- ;; (if py-smart-indentation (py-guess-indent-offset) indent-offset)
- (or indent-offset (and py-smart-indentation (py-guess-indent-offset)) py-indent-offset)
- (current-indentation)))
- ((looking-at py-block-closing-keywords-re)
- (- (current-indentation) (or indent-offset py-indent-offset)))
- (t (current-column))))
- ((looking-at py-block-closing-keywords-re)
- (if (< (line-end-position) orig)
- ;; #80, Lines after return cannot be correctly indented
- (if (looking-at "return[ \\t]*$")
- (current-indentation)
- (- (current-indentation) (or indent-offset py-indent-offset)))
- (py-backward-block-or-clause)
- (current-indentation)))
- ;; ((and (looking-at py-elif-re) (eq (py-count-lines) origline))
- ;; (when (py--line-backward-maybe) (setq line t))
- ;; (car (py--clause-lookup-keyword py-elif-re -1 nil origline)))
- ((and (looking-at py-clause-re) (not line)
- (eq liep (line-end-position)))
- (cond ((looking-at py-outdent-re)
- ;; (and (py--backward-regexp 'py-block-or-clause-re) (current-indentation)))
- (and (py--go-to-keyword 'py-block-or-clause-re nil nil t) (current-indentation)))
- ((bobp) 0)
- (t (save-excursion (skip-chars-backward " \t\r\n\f")
- (if
- (py--backward-regexp 'py-block-or-clause-re)
- (+ py-indent-offset (current-indentation))
- 0)))))
- ((looking-at py-extended-block-or-clause-re)
- (cond ((and (not line)
- (eq liep (line-end-position)))
- (when (py--line-backward-maybe) (setq line t))
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- (t (+
- (cond (indent-offset)
- (py-smart-indentation
- (py-guess-indent-offset))
- (t py-indent-offset))
- (current-indentation)))))
- ((and
- (< (line-end-position) liep)
- (eq (current-column) (current-indentation)))
- (and
- (looking-at py-assignment-re)
- (goto-char (match-end 0)))
- ;; multiline-assignment
- (if (and nesting (looking-at " *[[{(]") (not (looking-at ".+[]})][ \t]*$")))
- (+ (current-indentation) (or indent-offset py-indent-offset))
- (current-indentation)))
- ((looking-at py-assignment-re)
- (py-backward-statement)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- ((and (< (current-indentation) (current-column))(not line))
- (back-to-indentation)
- (unless line
- (setq nesting (nth 0 (parse-partial-sexp (point-min) (point)))))
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- ((and (not (py--beginning-of-statement-p)) (not (and line (eq 11 (syntax-after (point))))))
- (if (bobp)
- (current-column)
- (if (eq (point) orig)
- (progn
- (when (py--line-backward-maybe) (setq line t))
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- (py-backward-statement)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))))
- ((or (py--statement-opens-block-p py-extended-block-or-clause-re) (looking-at "@"))
- (if (< (py-count-lines) origline)
- (+ (or indent-offset (and py-smart-indentation (py-guess-indent-offset)) py-indent-offset) (current-indentation))
- (skip-chars-backward " \t\r\n\f")
- (setq line t)
- (back-to-indentation)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep)))
- ((and py-empty-line-closes-p (py--after-empty-line))
- (progn (py-backward-statement)
- (- (current-indentation) (or indent-offset py-indent-offset))))
- ;; still at orignial line
- ((and (eq liep (line-end-position))
- (save-excursion
- (and (setq erg (py--go-to-keyword 'py-extended-block-or-clause-re (* py-indent-offset 99)))
- (if (and (not indent-offset) py-smart-indentation) (setq indent-offset (py-guess-indent-offset)) t)
- (ignore-errors (< orig (or (py-forward-block-or-clause) (point)))))))
- (+ (car erg) (if py-smart-indentation
- (or indent-offset (py-guess-indent-offset))
- (or indent-offset py-indent-offset))))
- ((and (not line)
- (eq liep (line-end-position))
- (py--beginning-of-statement-p))
- (py-backward-statement)
- (py-compute-indentation iact orig origline closing line nesting repeat indent-offset liep))
- (t (current-indentation))))
- (when py-verbose-p (message "%s" indent))
- indent))))))
-
-(defun py-beginning-of-statement-p ()
- (interactive)
- (save-restriction
- (eq (point)
- (save-excursion
- (py-forward-statement)
- (py-backward-statement)))))
-
-(defun py--fetch-indent-statement-above (orig)
- "Report the preceding indent. "
- (save-excursion
- (goto-char orig)
- (forward-line -1)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (back-to-indentation)
- (if (or (looking-at comment-start)(py-beginning-of-statement-p))
- (current-indentation)
- (py-backward-statement)
- (current-indentation))))
-
-(defun py--fetch-indent-line-above (&optional orig)
- "Report the preceding indent. "
- (save-excursion
- (when orig (goto-char orig))
- (forward-line -1)
- (current-indentation)))
-
-(defun py-continuation-offset (&optional arg)
- "With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. "
- (interactive "p")
- (and (numberp arg) (not (eq 1 arg)) (setq py-continuation-offset arg))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" py-continuation-offset))
- py-continuation-offset)
-
-(defalias 'pios 'py-indentation-of-statement)
-(defalias 'ios 'py-indentation-of-statement)
-(defun py-indentation-of-statement ()
- "Returns the indenation of the statement at point. "
- (interactive)
- (let ((erg (save-excursion
- (back-to-indentation)
- (or (py--beginning-of-statement-p)
- (py-backward-statement))
- (current-indentation))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defalias 'py-in-list-p 'py-list-beginning-position)
-(defun py-list-beginning-position (&optional start)
- "Return lists beginning position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'."
- (nth 1 (parse-partial-sexp (or start (point-min)) (point))))
-
-(defun py-end-of-list-position (&optional arg)
- "Return end position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'."
- (interactive)
- (let* ((ppstart (or arg (point-min)))
- (erg (parse-partial-sexp ppstart (point)))
- (beg (nth 1 erg))
- end)
- (when beg
- (save-excursion
- (goto-char beg)
- (forward-list 1)
- (setq end (point))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" end))
- end))
-
-(defun py--in-comment-p ()
- "Return the beginning of current line's comment, if inside. "
- (save-restriction
- (widen)
- (let* ((pps (parse-partial-sexp (point-min) (point)))
- (erg (when (nth 4 pps) (nth 8 pps))))
- (unless erg
- (when (ignore-errors (looking-at (concat "[ \t]*" comment-start)))
- (setq erg (point))))
- erg)))
-
-(defun py-in-triplequoted-string-p ()
- "Returns character address of start tqs-string, nil if not inside. "
- (interactive)
- (let* ((pps (parse-partial-sexp (point-min) (point)))
- (erg (when (and (nth 3 pps) (nth 8 pps))(nth 2 pps))))
- (save-excursion
- (unless erg (setq erg
- (progn
- (when (looking-at "\"\"\"\\|''''")
- (goto-char (match-end 0))
- (setq pps (parse-partial-sexp (point-min) (point)))
- (when (and (nth 3 pps) (nth 8 pps)) (nth 2 pps)))))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-in-string-p-intern (pps)
- (goto-char (nth 8 pps))
- (list (point) (char-after)(skip-chars-forward (char-to-string (char-after)))))
-
-(defun py-in-string-p ()
- "if inside a double- triple- or singlequoted string,
-
-If non-nil, return a list composed of
-- beginning position
-- the character used as string-delimiter (in decimal)
-- and length of delimiter, commonly 1 or 3 "
- (interactive)
- (save-excursion
- (let* ((pps (parse-partial-sexp (point-min) (point)))
- (erg (when (nth 3 pps)
- (py-in-string-p-intern pps))))
- (unless erg
- (when (looking-at "\"\\|'")
- (forward-char 1)
- (setq pps (parse-partial-sexp (line-beginning-position) (point)))
- (when (nth 3 pps)
- (setq erg (py-in-string-p-intern pps)))))
- erg)))
-
-(defun py-in-statement-p ()
- "Returns list of beginning and end-position if inside.
-
-Result is useful for booleans too: (when (py-in-statement-p)...)
-will work.
-"
- (interactive)
- (let ((orig (point))
- beg end erg)
- (save-excursion
- (setq end (py-forward-statement))
- (setq beg (py-backward-statement))
- (when (and (<= beg orig)(<= orig end))
- (setq erg (cons beg end))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))))
-
-;; Beginning-of- p
-(defun py-backward-top-level-p ()
- "Returns position, if cursor is at the beginning of a top-level, nil otherwise. "
- (interactive)
- (let (erg)
- (and (py--beginning-of-statement-p)
- (eq 0 (current-column))
- (setq erg (point))
- erg)))
-
-(defun py--beginning-of-buffer-p ()
- "Returns position, if cursor is at the beginning of buffer, nil otherwise. "
- (when (bobp)(point)))
-
-;; End-of- p
-
-;; Opens
-(defun py--statement-opens-block-p (&optional regexp)
- "Return position if the current statement opens a block
-in stricter or wider sense.
-
-For stricter sense specify regexp. "
- (let* ((regexp (or regexp py-block-or-clause-re))
- (erg (py--statement-opens-base regexp)))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py--statement-opens-base (regexp)
- (let ((orig (point))
- erg)
- (save-excursion
- (back-to-indentation)
- (py-forward-statement)
- (py-backward-statement)
- (when (and
- (<= (line-beginning-position) orig)(looking-back "^[ \t]*" (line-beginning-position))(looking-at regexp))
- (setq erg (point))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py--statement-opens-clause-p ()
- "Return position if the current statement opens block or clause. "
- (py--statement-opens-base py-clause-re))
-
-(defun py--statement-opens-block-or-clause-p ()
- "Return position if the current statement opens block or clause. "
- (py--statement-opens-base py-block-or-clause-re))
-
-(defun py--statement-opens-class-p ()
- "Return `t' if the statement opens a functions or class definition, nil otherwise. "
- (py--statement-opens-base py-class-re))
-
-(defun py--statement-opens-def-p ()
- "Return `t' if the statement opens a functions or class definition, nil otherwise. "
- (py--statement-opens-base py-def-re))
-
-(defun py--statement-opens-def-or-class-p ()
- "Return `t' if the statement opens a functions or class definition, nil otherwise. "
- (py--statement-opens-base py-def-or-class-re))
-
-(defun py--record-list-error (pps)
- "When encountering a missing parenthesis, store its line, position. `py-verbose-p' must be t
-
-Unclosed-string errors are not handled here, as made visible by fontification already.
-"
- (let ((this-err
- (save-excursion
- (list
- (nth 1 pps)
- (progn
- (goto-char (nth 1 pps))
- (py-count-lines (point-min) (point)))))))
- this-err))
-
-(defun py--message-error (err)
- "Receives a list (position line) "
- (message "Closing paren missed: line %s pos %s" (cadr err) (car err)))
-
-(defun py--down-top-level (&optional regexp)
- "Go to the end of a top-level form.
-
-When already at end, go to EOB."
- (end-of-line)
- (while (and (py--forward-regexp (or regexp "^[[:graph:]]"))
- (save-excursion
- (beginning-of-line)
- (or
- (looking-at py-clause-re)
- (looking-at comment-start)))))
- (beginning-of-line)
- (and (looking-at regexp) (point)))
-
-(defun py--backward-empty-lines-or-comment ()
- "Travel backward"
- (while
- (or (< 0 (abs (skip-chars-backward " \t\r\n\f")))
- (py-backward-comment))))
-
-(defun py--down-according-to-indent (regexp secondvalue &optional indent enforce-regexp)
- "Return position if moved, nil otherwise.
-
-Optional ENFORCE-REGEXP: search for regexp only."
- (unless (eobp)
- (let* ((orig (point))
- (indent (or indent 0))
- done
- (regexpvalue (if (member regexp (list 'py-def-re 'py-def-or-class-re 'py-class-re))
- (concat (symbol-value regexp) "\\|" (symbol-value 'py-decorator-re))
- (symbol-value regexp)))
- (lastvalue (and secondvalue
- (pcase regexp
- (`py-try-re py-finally-re)
- (`py-if-re py-else-re)))))
- (while
- (and
- (not done)
- (progn (end-of-line)
- (cond (enforce-regexp
- ;; using regexpvalue might stop behind global settings, missing the end of form
- (re-search-forward (concat "^ \\{0,"(format "%s" indent) "\\}"regexpvalue) nil 'move 1))
- (t (re-search-forward (concat "^ \\{"(format "0,%s" indent) "\\}[[:alnum:]_@]+") nil 'move 1))))
- (or (progn (back-to-indentation) (py--forward-string-maybe (nth 8 (parse-partial-sexp orig (point)))))
- (and secondvalue (looking-at secondvalue))
- (and lastvalue (looking-at lastvalue))
- (and (looking-at regexpvalue) (setq done t))
- (setq done t))))
- (and (< orig (point)) (point)))))
-
-(defun py--end-of-paragraph (regexp)
- (let* ((regexp (if (symbolp regexp) (symbol-value regexp)
- regexp)))
- (while (and (not (eobp)) (re-search-forward regexp nil 'move 1) (nth 8 (parse-partial-sexp (point-min) (point)))))))
-
-(defun py--leave-backward-string-list-and-comment-maybe (pps)
- (while (or (and (nth 8 pps) (goto-char (nth 8 pps)))
- (and (nth 1 pps) (goto-char (nth 1 pps)))
- (and (nth 4 pps) (goto-char (nth 4 pps))))
- ;; (back-to-indentation)
- (when (or (looking-at comment-start)(member (char-after) (list ?\" ?')))
- (skip-chars-backward " \t\r\n\f"))
- (setq pps (parse-partial-sexp (point-min) (point)))))
-
-(defun py--end-base-determine-secondvalue (regexp)
- "Expects being at block-opener.
-
-REGEXP: a symbol"
- (cond
- ((eq regexp 'py-minor-block-re)
- (cond ((looking-at py-else-re)
- nil)
- ((or (looking-at (concat py-try-re)))
- (concat py-elif-re "\\|" py-else-re "\\|" py-except-re))
- ((or (looking-at (concat py-except-re "\\|" py-elif-re "\\|" py-if-re)))
- (concat py-elif-re "\\|" py-else-re))))
- ((member regexp
- (list
- 'py-block-re
- 'py-block-or-clause-re
- 'py-clause-re
- 'py-if-re
- ))
- (cond ((looking-at py-if-re)
- (concat py-elif-re "\\|" py-else-re))
- ((looking-at py-elif-re)
- (concat py-elif-re "\\|" py-else-re))
- ((looking-at py-else-re))
- ((looking-at py-try-re)
- (concat py-except-re "\\|" py-else-re "\\|" py-finally-re))
- ((looking-at py-except-re)
- (concat py-else-re "\\|" py-finally-re))
- ((looking-at py-finally-re)
- nil)))
- ((eq regexp 'py-for-re) nil)
- ((eq regexp 'py-try-re)
- (cond
- ((looking-at py-try-re)
- (concat py-except-re "\\|" py-else-re "\\|" py-finally-re))
- ((looking-at py-except-re)
- (concat py-else-re "\\|" py-finally-re))
- ((looking-at py-finally-re))))))
-
-(defun py--down-end-form ()
- "Return position."
- (progn (py--backward-empty-lines-or-comment)
- (point)))
-
-(defun py--refine-regexp-maybe (regexp)
- "Use a more specific regexp if possible. "
- (let ((regexpvalue (symbol-value regexp)))
- (if (looking-at regexpvalue)
- (setq regexp
- (cond ((looking-at py-if-re)
- 'py-if-re)
- ((looking-at py-try-re)
- 'py-try-re)
- ((looking-at py-def-re)
- 'py-def-re)
- ((looking-at py-class-re)
- 'py-class-re)
- (t regexp)))
- regexp)))
-
-(defun py--end-base (regexp &optional orig bol repeat)
- "Used internal by functions going to the end FORM.
-
-Returns the indentation of FORM-start
-Arg REGEXP, a symbol"
- (unless (eobp)
- (let ((orig (or orig (point))))
- (unless (eobp)
- (unless (py-beginning-of-statement-p)
- (py-beginning-of-statement))
- (let* (;; when at block-start, be specific
- (regexp (py--refine-regexp-maybe regexp))
- (regexpvalue (symbol-value regexp))
- ;; (regexp (or regexp (symbol-value 'py-extended-block-or-clause-re)))
- (repeat (or repeat 0))
- (indent (if
- (looking-at regexpvalue)
- (abs
- (- (current-indentation) py-indent-offset))
- (current-indentation)))
- ;; when at block-start, be specific
- ;; return current-indentation, position and possibly needed clause-regexps (secondvalue)
- (res
- (cond
- ((and (py-beginning-of-statement-p)
- ;; (eq 0 (current-column))
- (or (looking-at regexpvalue)
- (and (member regexp (list 'py-def-re 'py-def-or-class-re 'py-class-re))
- (looking-at py-decorator-re)
- (py-down-def-or-class (current-indentation)))
- (and (member regexp (list 'py-minor-block-re 'py-if-re 'py-for-re 'py-try-re))
- (looking-at py-minor-clause-re))))
- (list (current-indentation) (point) (py--end-base-determine-secondvalue regexp)))
- ((looking-at regexpvalue)
- (list (current-indentation) (point) (py--end-base-determine-secondvalue regexp)))
- ((eq 0 (current-indentation))
- (py--down-according-to-indent regexp nil 0))
- ;; look upward
- (t (py--go-to-keyword regexp))))
- (secondvalue (ignore-errors (nth 2 res)))
- erg)
- ;; (py-for-block-p (looking-at py-for-re))
- (setq indent (or (and res (car-safe res)) indent))
- (cond
- (res (setq erg
- (and
- (py--down-according-to-indent regexp secondvalue (current-indentation))
- ;; (py--forward-regexp-keep-indent "^[ \t]*[[:alnum:]_]" (current-indentation))
- (py--down-end-form))))
- (t (unless (< 0 repeat) (goto-char orig))
- (py--forward-regexp (symbol-value regexp))
- (beginning-of-line)
- (setq erg (and
- (py--down-according-to-indent regexp secondvalue (current-indentation) t)
- (py--down-end-form)))))
- (cond ((< orig (point))
- (setq erg (point))
- (progn
- (and erg bol (setq erg (py--beginning-of-line-form)))
- (and erg (cons (current-indentation) erg))))
- ((eq (point) orig)
- (unless (eobp)
- (cond
- ((and (< repeat 1)
- (or
- ;; looking next indent as part of body
- (py--down-according-to-indent regexp secondvalue
- indent
- ;; if expected indent is 0,
- ;; search for new start,
- ;; search for regexp only
- (eq 0 indent))
- (and
- ;; next block-start downwards, reduce expected indent maybe
- (setq indent (or (and (< 0 indent) (- indent py-indent-offset)) indent))
- (py--down-according-to-indent regexp secondvalue
- indent t))))
- (py--end-base regexp orig bol (1+ repeat))))))
- ((< (point) orig)
- (goto-char orig)
- (when (py--down-according-to-indent regexp secondvalue nil t)
- (py--end-base regexp (point) bol (1+ repeat))))))))))
-
-(defun py--look-downward-for-beginning (regexp)
- "When above any beginning of FORM, search downward. "
- (let* ((orig (point))
- (erg orig)
- pps)
- (while (and (not (eobp)) (re-search-forward regexp nil t 1) (setq erg (match-beginning 0)) (setq pps (parse-partial-sexp (point-min) (point)))
- (or (nth 8 pps) (nth 1 pps))))
- (cond ((not (or (nth 8 pps) (nth 1 pps) (or (looking-at comment-start))))
- (when (ignore-errors (< orig erg))
- erg)))))
-
-(defun py-look-downward-for-clause (&optional ind orig regexp)
- "If beginning of other clause exists downward in current block.
-
-If succesful return position. "
- (interactive)
- (unless (eobp)
- (let ((ind (or ind
- (save-excursion
- (py-backward-statement)
- (if (py--statement-opens-block-p)
- (current-indentation)
- (- (current-indentation) py-indent-offset)))))
- (orig (or orig (point)))
- (regexp (or regexp py-extended-block-or-clause-re))
- erg)
- (end-of-line)
- (when (re-search-forward regexp nil t 1)
- (when (nth 8 (parse-partial-sexp (point-min) (point)))
- (while (and (re-search-forward regexp nil t 1)
- (nth 8 (parse-partial-sexp (point-min) (point))))))
- ;; (setq last (point))
- (back-to-indentation)
- (unless (and (looking-at py-clause-re)
- (not (nth 8 (parse-partial-sexp (point-min) (point)))) (eq (current-indentation) ind))
- (progn (setq ind (current-indentation))
- (while (and (py-forward-statement-bol)(not (looking-at py-clause-re))(<= ind (current-indentation)))))
- (if (and (looking-at py-clause-re)
- (not (nth 8 (parse-partial-sexp (point-min) (point))))
- (< orig (point)))
- (setq erg (point))
- (goto-char orig))))
- (when (called-interactively-p 'any) (message "%s" erg))
- erg)))
-
-(defun py-current-defun (&optional iact)
- "Go to the outermost method or class definition in current scope.
-
-Python value for `add-log-current-defun-function'.
-This tells add-log.el how to find the current function/method/variable.
-Returns name of class or methods definition, if found, nil otherwise.
-
-See customizable variables `py-current-defun-show' and `py-current-defun-delay'."
- (interactive "p")
- (save-restriction
- (widen)
- (save-excursion
- (let ((erg (when (py-backward-def-or-class)
- (forward-word 1)
- (skip-chars-forward " \t")
- (prin1-to-string (symbol-at-point)))))
- (when (and erg py-current-defun-show)
- (push-mark (point) t t) (skip-chars-forward "^ (")
- (exchange-point-and-mark)
- (sit-for py-current-defun-delay t))
- (when iact (message (prin1-to-string erg)))
- erg))))
-
-(defun py-sort-imports ()
- "Sort multiline imports.
-
-Put point inside the parentheses of a multiline import and hit
-\\[py-sort-imports] to sort the imports lexicographically"
- (interactive)
- (save-excursion
- (let ((open-paren (ignore-errors (save-excursion (progn (up-list -1) (point)))))
- (close-paren (ignore-errors (save-excursion (progn (up-list 1) (point)))))
- sorted-imports)
- (when (and open-paren close-paren)
- (goto-char (1+ open-paren))
- (skip-chars-forward " \n\t")
- (setq sorted-imports
- (sort
- (delete-dups
- (split-string (buffer-substring
- (point)
- (save-excursion (goto-char (1- close-paren))
- (skip-chars-backward " \n\t")
- (point)))
- ", *\\(\n *\\)?"))
- ;; XXX Should this sort case insensitively?
- 'string-lessp))
- ;; Remove empty strings.
- (delete-region open-paren close-paren)
- (goto-char open-paren)
- (insert "(\n")
- (insert (py--join-words-wrapping (remove "" sorted-imports) "," " " 78))
- (insert ")")))))
-
-(defun py--in-literal (&optional lim)
- "Return non-nil if point is in a Python literal (a comment or string).
-Optional argument LIM indicates the beginning of the containing form,
-i.e. the limit on how far back to scan."
- (let* ((lim (or lim (point-min)))
- (state (parse-partial-sexp lim (point))))
- (cond
- ((nth 3 state) 'string)
- ((nth 4 state) 'comment))))
-
-(defconst py-help-address "python-mode@python.org"
- "List dealing with usage and developing python-mode.
-
-Also accepts submission of bug reports, whilst a ticket at
-http://launchpad.net/python-mode
-is preferable for that. ")
-
-;; Utilities
-(defun py--point (position)
- "Returns the value of point at certain commonly referenced POSITIONs.
-POSITION can be one of the following symbols:
-
- bol -- beginning of line
- eol -- end of line
- bod -- beginning of def or class
- eod -- end of def or class
- bob -- beginning of buffer
- eob -- end of buffer
- boi -- back to indentation
- bos -- beginning of statement
-
-This function does not modify point or mark."
- (let (erg)
- (save-excursion
- (setq erg
- (progn
- (cond
- ((eq position 'bol) (beginning-of-line))
- ((eq position 'eol) (end-of-line))
- ((eq position 'bod) (py-backward-def-or-class))
- ((eq position 'eod) (py-forward-def-or-class))
- ;; Kind of funny, I know, but useful for py-up-exception.
- ((eq position 'bob) (goto-char (point-min)))
- ((eq position 'eob) (goto-char (point-max)))
- ((eq position 'boi) (back-to-indentation))
- ((eq position 'bos) (py-backward-statement))
- (t (error "Unknown buffer position requested: %s" position))) (point))))
- erg))
-
-(defun py-install-local-shells (&optional local)
- "Builds Python-shell commands from executable found in LOCAL.
-
-If LOCAL is empty, shell-command `find' searches beneath current directory.
-Eval resulting buffer to install it, see customizable `py-extensions'. "
- (interactive)
- (let* ((local-dir (if local
- (expand-file-name local)
- (read-from-minibuffer "Virtualenv directory: " default-directory)))
- (path-separator (if (string-match "/" local-dir)
- "/"
- "\\" t))
- (shells (split-string (shell-command-to-string (concat "find " local-dir " -maxdepth 9 -type f -executable -name \"*python\""))))
- prefix end orig curexe aktpath)
- (set-buffer (get-buffer-create py-extensions))
- (erase-buffer)
- (dolist (elt shells)
- (setq prefix "")
- (setq curexe (substring elt (1+ (string-match "/[^/]+$" elt))))
- (setq aktpath (substring elt 0 (1+ (string-match "/[^/]+$" elt))))
- (dolist (prf (split-string aktpath (regexp-quote path-separator)))
- (unless (string= "" prf)
- (setq prefix (concat prefix (substring prf 0 1)))))
- (setq orig (point))
- (insert py-shell-template)
- (setq end (point))
- (goto-char orig)
- (when (re-search-forward "\\<NAME\\>" end t 1)
- (replace-match (concat prefix "-" (substring elt (1+ (save-match-data (string-match "/[^/]+$" elt)))))t))
- (goto-char orig)
- (while (search-forward "DOCNAME" end t 1)
- (replace-match (if (string= "ipython" curexe)
- "IPython"
- (capitalize curexe)) t))
- (goto-char orig)
- (when (search-forward "FULLNAME" end t 1)
- (replace-match elt t))
- (goto-char (point-max)))
- (emacs-lisp-mode)
- (if (file-readable-p (concat py-install-directory "/" py-extensions))
- (find-file (concat py-install-directory "/" py-extensions)))))
-
-(defun py-end-of-string (&optional beginning-of-string-position)
- "Go to end of string at point if any, if successful return position. "
- (interactive)
- (let ((orig (point))
- (beginning-of-string-position (or beginning-of-string-position (and (nth 3 (parse-partial-sexp 1 (point)))(nth 8 (parse-partial-sexp 1 (point))))
- (and (looking-at "\"\"\"\\|'''\\|\"\\|\'")(match-beginning 0))))
- erg)
- (if beginning-of-string-position
- (progn
- (goto-char beginning-of-string-position)
- (when
- ;; work around parse-partial-sexp error
- (and (nth 3 (parse-partial-sexp 1 (point)))(nth 8 (parse-partial-sexp 1 (point))))
- (goto-char (nth 3 (parse-partial-sexp 1 (point)))))
- (if (ignore-errors (setq erg (scan-sexps (point) 1)))
- (goto-char erg)
- (goto-char orig)))
-
- (error (concat "py-end-of-string: don't see end-of-string at " (buffer-name (current-buffer)) "at pos " (point))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py--until-found (search-string liste)
- "Search liste for search-string until found. "
- (let ((liste liste) element)
- (while liste
- (if (member search-string (car liste))
- (setq element (car liste) liste nil))
- (setq liste (cdr liste)))
- (when element
- (while (and element (not (numberp element)))
- (if (member search-string (car element))
- (setq element (car element))
- (setq element (cdr element))))
- element)))
-
-(defun py--which-delay-process-dependent (buffer)
- "Call a `py-ipython-send-delay' or `py-python-send-delay' according to process"
- (if (string-match "^.[IJ]" buffer)
- py-ipython-send-delay
- py-python-send-delay))
-
-(defun py-temp-file-name (strg)
- (let* ((temporary-file-directory
- (if (file-remote-p default-directory)
- (concat (file-remote-p default-directory) "/tmp")
- temporary-file-directory))
- (temp-file-name (make-temp-file "py")))
-
- (with-temp-file temp-file-name
- (insert strg)
- (delete-trailing-whitespace))
- temp-file-name))
-
-(defun py--report-end-marker (process)
- ;; (message "py--report-end-marker in %s" (current-buffer))
- (if (derived-mode-p 'comint-mode)
- (if (bound-and-true-p comint-last-prompt)
- (car-safe comint-last-prompt)
- (dotimes (_ 3) (when (not (bound-and-true-p comint-last-prompt)))(sit-for 1 t))
- (and (bound-and-true-p comint-last-prompt)
- (car-safe comint-last-prompt)))
- (if (markerp (process-mark process))
- (process-mark process)
- (progn
- (dotimes (_ 3) (when (not (markerp (process-mark process)))(sit-for 1 t)))
- (process-mark process)))))
-
-(defun py--filter-result (strg)
- "Set ‘py-result’ according to ‘py-fast-filter-re’.
-
-Remove trailing newline"
- (string-trim
- (replace-regexp-in-string
- py-fast-filter-re
- ""
- (ansi-color-filter-apply strg))))
-
-(defun py--cleanup-shell (orig buffer)
- (with-current-buffer buffer
- (with-silent-modifications
- (sit-for py-python3-send-delay)
- (when py-debug-p (switch-to-buffer (current-buffer)))
- (delete-region orig (point-max)))))
-
-(defun py-shell--save-temp-file (strg)
- (let* ((temporary-file-directory
- (if (file-remote-p default-directory)
- (concat (file-remote-p default-directory) "/tmp")
- temporary-file-directory))
- (temp-file-name (make-temp-file "py"))
- (coding-system-for-write (py-info-encoding)))
- (with-temp-file temp-file-name
- (insert strg)
- (delete-trailing-whitespace))
- temp-file-name))
-
-(defun py-shell-send-string (strg &optional process)
- "Send STRING to Python PROCESS.
-
-Uses ‘comint-send-string’."
- (interactive
- (list (read-string "Python command: ") nil t))
- (let ((process (or process (py-shell-get-process))))
- (if (string-match ".\n+." strg) ;Multiline.
- (let* ((temp-file-name (py-shell--save-temp-file strg))
- (file-name (or (buffer-file-name) temp-file-name)))
- (py-shell-send-file file-name process temp-file-name t))
- (comint-send-string process strg)
- (when (or (not (string-match "\n\\'" strg))
- (string-match "\n[ \t].*\n?\\'" strg))
- (comint-send-string process "\n")))))
-
-(defun py-shell-output-filter (strg)
- "Filter used in `py-shell-send-string-no-output' to grab output.
-STRING is the output received to this point from the process.
-This filter saves received output from the process in
-`py-shell-output-filter-buffer' and stops receiving it after
-detecting a prompt at the end of the buffer."
- (let ((py-shell--prompt-calculated-output-regexp
- (or py-shell--prompt-calculated-output-regexp (py-shell-prompt-set-calculated-regexps))))
- (setq
- strg (ansi-color-filter-apply strg)
- py-shell-output-filter-buffer
- (concat py-shell-output-filter-buffer strg))
- (when (py-shell-comint-end-of-output-p
- py-shell-output-filter-buffer)
- ;; Output ends when `py-shell-output-filter-buffer' contains
- ;; the prompt attached at the end of it.
- (setq py-shell-output-filter-in-progress nil
- py-shell-output-filter-buffer
- (substring py-shell-output-filter-buffer
- 0 (match-beginning 0)))
- (when (string-match
- py-shell--prompt-calculated-output-regexp
- py-shell-output-filter-buffer)
- ;; Some shells, like IPython might append a prompt before the
- ;; output, clean that.
- (setq py-shell-output-filter-buffer
- (substring py-shell-output-filter-buffer (match-end 0)))))
- ""))
-
-(defun py-send-string-no-output (strg &optional process buffer-name)
- "Send STRING to PROCESS and inhibit output.
-
-Return the output."
- (let* ((proc (or process (py-shell-get-process)))
- (buffer (or buffer-name (if proc (buffer-name (process-buffer proc)) (py-shell))))
- (comint-preoutput-filter-functions
- '(py-shell-output-filter))
- (py-shell-output-filter-in-progress t)
- (inhibit-quit t)
- (delay (py--which-delay-process-dependent buffer)))
- (or
- (with-local-quit
- (if (and (string-match ".\n+." strg) (string-match "^\*[Ii]" buffer)) ;; IPython or multiline
- (let* ((temp-file-name (py-temp-file-name strg))
- (file-name (or (buffer-file-name) temp-file-name)))
- (py-send-file file-name proc))
- (py-shell-send-string strg proc))
- ;; (switch-to-buffer buffer)
- ;; (accept-process-output proc 9)
- (while py-shell-output-filter-in-progress
- ;; `py-shell-output-filter' takes care of setting
- ;; `py-shell-output-filter-in-progress' to NIL after it
- ;; detects end of output.
- (accept-process-output proc delay))
- (prog1
- py-shell-output-filter-buffer
- (setq py-shell-output-filter-buffer nil)))
- (with-current-buffer (process-buffer proc)
- (comint-interrupt-subjob)))))
-
-(defun py-send-string (strg &optional process result no-output orig output-buffer fast argprompt args dedicated shell exception-buffer split switch internal)
- "Evaluate STRG in Python PROCESS.
-
-With optional Arg PROCESS send to process.
-With optional Arg RESULT store result in var ‘py-result’, also return it.
-With optional Arg NO-OUTPUT don't display any output
-With optional Arg ORIG deliver original position.
-With optional Arg OUTPUT-BUFFER specify output-buffer"
- (interactive "sPython command: ")
- (save-excursion
- (let* ((buffer (or output-buffer (or (and process (buffer-name (process-buffer process))) (buffer-name (py-shell argprompt args dedicated shell output-buffer fast exception-buffer split switch internal)))))
- (proc (or process (get-buffer-process buffer)))
- ;; nil nil nil nil (buffer-name buffer))))
- (orig (or orig (point)))
- (limit (ignore-errors (marker-position (process-mark proc)))))
- (cond ((and no-output fast)
- (py--fast-send-string-no-output-intern strg proc limit buffer no-output))
- (no-output
- (py-send-string-no-output strg proc))
- ((and (string-match ".\n+." strg) (string-match "^[Ii]"
- ;; (buffer-name buffer)
- buffer
- )) ;; multiline
- (let* ((temp-file-name (py-temp-file-name strg))
- (file-name (or (buffer-file-name) temp-file-name)))
- (py-send-file file-name proc)))
- (t (with-current-buffer buffer
- (comint-send-string proc strg)
- (when (or (not (string-match "\n\\'" strg))
- (string-match "\n[ \t].*\n?\\'" strg))
- (comint-send-string proc "\n"))
- (sit-for py-python-send-delay)
- (cond (result
- (setq py-result
- (py--fetch-result buffer limit strg)))
- (no-output
- (and orig (py--cleanup-shell orig buffer))))))))))
-
-(defun py-send-file (file-name process)
- "Send FILE-NAME to Python PROCESS."
- (interactive "fFile to send: ")
- (let* ((proc (or
- process (get-buffer-process (py-shell))))
- (file-name (expand-file-name file-name)))
- (py-send-string
- (format
- (concat "__pyfile = open('''%s''');"
- "exec(compile(__pyfile.read(), '''%s''', 'exec'));"
- "__pyfile.close()")
- file-name file-name)
- proc)))
-
-(defun py-which-def-or-class (&optional orig)
- "Returns concatenated `def' and `class' names in hierarchical order, if cursor is inside.
-
-Returns \"???\" otherwise
-Used by variable `which-func-functions' "
- (interactive)
- (let* ((orig (or orig (point)))
- (backindent 99999)
- (re py-def-or-class-re
- ;; (concat py-def-or-class-re "\\([[:alnum:]_]+\\)")
- )
- erg forward indent backward limit)
- (if
- (and (looking-at re)
- (not (nth 8 (parse-partial-sexp (point-min) (point)))))
- (progn
- (setq erg (list (match-string-no-properties 2)))
- (setq backindent (current-indentation)))
- ;; maybe inside a definition's symbol
- (or (eolp) (and (looking-at "[[:alnum:]]")(forward-word 1))))
- (if
- (and (not (and erg (eq 0 (current-indentation))))
- (setq limit (py-backward-top-level))
- (looking-at re))
- (progn
- (push (match-string-no-properties 2) erg)
- (setq indent (current-indentation)))
- (goto-char orig)
- (while (and
- (re-search-backward py-def-or-class-re limit t 1)
- (< (current-indentation) backindent)
- (setq backindent (current-indentation))
- (setq backward (point))
- (or (< 0 (current-indentation))
- (nth 8 (parse-partial-sexp (point-min) (point))))))
- (when (and backward
- (goto-char backward)
- (looking-at re))
- (push (match-string-no-properties 2) erg)
- (setq indent (current-indentation))))
- ;; (goto-char orig))
- (if erg
- (progn
- (end-of-line)
- (while (and (re-search-forward py-def-or-class-re nil t 1)
- (<= (point) orig)
- (< indent (current-indentation))
- (or
- (nth 8 (parse-partial-sexp (point-min) (point)))
- (setq forward (point)))))
- (if forward
- (progn
- (goto-char forward)
- (save-excursion
- (back-to-indentation)
- (and (looking-at re)
- (setq erg (list (car erg) (match-string-no-properties 2)))
- ;; (< (py-forward-def-or-class) orig)
- ;; if match was beyond definition, nil
- ;; (setq erg nil)
-)))
- (goto-char orig))))
- (if erg
- (if (< 1 (length erg))
- (setq erg (mapconcat 'identity erg "."))
- (setq erg (car erg)))
- (setq erg "???"))
- (goto-char orig)
- (when (called-interactively-p 'any) (message "%s" erg))
- erg))
-
-(defun py--fetch-first-python-buffer ()
- "Returns first (I)Python-buffer found in `buffer-list'"
- (let ((buli (buffer-list))
- erg)
- (while (and buli (not erg))
- (if (string-match "Python" (prin1-to-string (car buli)))
- (setq erg (car buli))
- (setq buli (cdr buli))))
- erg))
-
-(defun py-unload-python-el ()
- "Unloads python-mode delivered by shipped python.el
-
-Removes python-skeleton forms from abbrevs.
-These would interfere when inserting forms heading a block"
- (interactive)
- (let (done)
- (when (featurep 'python) (unload-feature 'python t))
- (when (file-readable-p abbrev-file-name)
- (find-file abbrev-file-name)
- (goto-char (point-min))
- (while (re-search-forward "^.+python-skeleton.+$" nil t 1)
- (setq done t)
- (delete-region (match-beginning 0) (1+ (match-end 0))))
- (when done (write-file abbrev-file-name)
- ;; now reload
- (read-abbrev-file abbrev-file-name))
- (kill-buffer (file-name-nondirectory abbrev-file-name)))))
-
-(defmacro py--kill-buffer-unconditional (buffer)
- "Kill buffer unconditional, kill buffer-process if existing. "
- `(let ((proc (get-buffer-process ,buffer))
- kill-buffer-query-functions)
- (ignore-errors
- (and proc (kill-process proc))
- (set-buffer ,buffer)
- (set-buffer-modified-p 'nil)
- (kill-buffer (current-buffer)))))
-
-(defun py--skip-to-semicolon-backward (&optional limit)
- "Fetch the beginning of statement after a semicolon.
-
-Returns `t' if point was moved"
- (prog1
- (< 0 (abs (skip-chars-backward "^;" (or limit (line-beginning-position)))))
- (skip-chars-forward " \t" (line-end-position))))
-
-(defun py-forward-comment ()
- "Go to the end of comment at point."
- (let ((orig (point))
- last)
- (while (and (not (eobp)) (nth 4 (parse-partial-sexp (line-beginning-position) (point))) (setq last (line-end-position)))
- (forward-line 1)
- (end-of-line))
- (when
- (< orig last)
- (goto-char last)(point))))
-
-(defun py--end-of-comment-intern (pos)
- (while (and (not (eobp))
- (forward-comment 99999)))
- ;; forward-comment fails sometimes
- (and (eq pos (point)) (prog1 (forward-line 1) (back-to-indentation))
- (while (member (char-after) (list (string-to-char comment-start) 10))(forward-line 1)(back-to-indentation))))
-
-(defun py--skip-to-comment-or-semicolon (done)
- "Returns position if comment or semicolon found. "
- (let ((orig (point)))
- (cond ((and done (< 0 (abs (skip-chars-forward "^#;" (line-end-position))))
- (member (char-after) (list ?# ?\;)))
- (when (eq ?\; (char-after))
- (skip-chars-forward ";" (line-end-position))))
- ((and (< 0 (abs (skip-chars-forward "^#;" (line-end-position))))
- (member (char-after) (list ?# ?\;)))
- (when (eq ?\; (char-after))
- (skip-chars-forward ";" (line-end-position))))
- ((not done)
- (end-of-line)))
- (skip-chars-backward " \t" (line-beginning-position))
- (and (< orig (point))(setq done t)
- done)))
-
-(defun py-backward-top-level ()
- "Go up to beginning of statments until level of indentation is null.
-
-Returns position if successful, nil otherwise "
- (interactive)
- (let (erg done)
- (unless (bobp)
- (while (and (not done)(not (bobp))
- (setq erg (re-search-backward "^[[:alpha:]_'\"]" nil t 1)))
- (if
- (nth 8 (parse-partial-sexp (point-min) (point)))
- (setq erg nil)
- (setq done t)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-;; might be slow due to repeated calls of ‘py-down-statement’
-(defun py-forward-top-level ()
- "Go to end of top-level form at point.
-
-Returns position if successful, nil otherwise"
- (interactive)
- (let ((orig (point))
- erg)
- (unless (eobp)
- (unless (py--beginning-of-statement-p)
- (py-backward-statement))
- (unless (eq 0 (current-column))
- (py-backward-top-level))
- (cond ((looking-at py-def-re)
- (setq erg (py-forward-def)))
- ((looking-at py-class-re)
- (setq erg (py-forward-class)))
- ((looking-at py-block-re)
- (setq erg (py-forward-block)))
- (t (setq erg (py-forward-statement))))
- (unless (< orig (point))
- (while (and (not (eobp)) (py-down-statement)(< 0 (current-indentation))))
- (if (looking-at py-block-re)
- (setq erg (py-forward-block))
- (setq erg (py-forward-statement))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg)))
-
-(defun py-down-top-level ()
- "Go to beginning of next top-level form downward.
-
-Returns position if successful, nil otherwise"
- (interactive)
- (let ((orig (point))
- erg)
- (while (and (not (eobp))
- (progn (end-of-line)
- (re-search-forward "^[[:alpha:]_'\"]" nil 'move 1))
- (nth 8 (parse-partial-sexp (point-min) (point)))))
- (when (and (not (eobp)) (< orig (point)))
- (goto-char (match-beginning 0))
- (setq erg (point)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-forward-top-level-bol ()
- "Go to end of top-level form at point, stop at next beginning-of-line.
-
-Returns position successful, nil otherwise"
- (interactive)
- (let (erg)
- (py-forward-top-level)
- (unless (or (eobp) (bolp))
- (forward-line 1)
- (beginning-of-line)
- (setq erg (point)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-down (&optional indent)
- "Go to beginning one level below of compound statement or definition at point.
-
-If no statement or block below, but a delimited form --string or list-- go to its beginning. Repeated call from there will behave like down-list.
-
-Returns position if successful, nil otherwise"
- (interactive)
- (let* ((orig (point))
- erg
- (indent (or
- indent
- (if
- (py--beginning-of-statement-p)
- (current-indentation)
- (progn
- (py-backward-statement)
- (current-indentation))))))
- (while (and (py-forward-statement) (py-forward-statement) (py-backward-statement) (> (current-indentation) indent)))
- (cond ((= indent (current-indentation))
- (setq erg (point)))
- ((< (point) orig)
- (goto-char orig))
- ((and (eq (point) orig)
- (progn (forward-char 1)
- (skip-chars-forward "^\"'[({" (line-end-position))
- (member (char-after) (list ?\( ?\" ?\' ?\[ ?\{)))
- (setq erg (point)))))
- (unless erg
- (goto-char orig))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py--beginning-of-line-form ()
- "Internal use: Go to beginning of line following end of form.
-
-Return position."
- (if (eobp)
- (point)
- (forward-line 1)
- (beginning-of-line)
- (point)))
-
-(defun py--mark-base (form &optional mark-decorators)
- "Returns boundaries of FORM, a cons.
-
-If PY-MARK-DECORATORS, `def'- and `class'-forms include decorators
-If BOL is t, mark from beginning-of-line"
- (let* ((begform (intern-soft (concat "py-backward-" form)))
- (endform (intern-soft (concat "py-forward-" form)))
- (begcheckform (intern-soft (concat "py--beginning-of-" form "-p")))
- (orig (point))
- beg end erg)
- (setq beg (if
- (setq beg (funcall begcheckform))
- beg
- (funcall begform)))
- (and mark-decorators
- (and (setq erg (py-backward-decorator))
- (setq beg erg)))
- (push-mark)
- (setq end (funcall endform))
- (unless end (when (< beg (point))
- (setq end (point))))
- (if (and beg end (<= beg orig) (<= orig end))
- (cons beg end)
- nil)))
-
-(defun py--mark-base-bol (form &optional mark-decorators)
- (let* ((begform (intern-soft (concat "py-backward-" form "-bol")))
- (endform (intern-soft (concat "py-forward-" form "-bol")))
- (begcheckform (intern-soft (concat "py--beginning-of-" form "-bol-p")))
- beg end erg)
- (setq beg (if
- (setq beg (funcall begcheckform))
- beg
- (funcall begform)))
- (when mark-decorators
- (save-excursion
- (when (setq erg (py-backward-decorator))
- (setq beg erg))))
- (setq end (funcall endform))
- (push-mark beg t t)
- (unless end (when (< beg (point))
- (setq end (point))))
- (cons beg end)))
-
-(defun py-mark-base (form &optional mark-decorators)
- "Calls py--mark-base, returns bounds of form, a cons. "
- (let* ((bounds (py--mark-base form mark-decorators))
- (beg (car bounds)))
- (push-mark beg t t)
- bounds))
-
-(defun py-backward-same-level-intern (indent)
- (while (and
- (py-backward-statement)
- (< indent (current-indentation) ))))
-
-(defun py-backward-same-level ()
- "Go form backward keeping indent level if possible.
-
-If inside a delimited form --string or list-- go to its beginning.
-If not at beginning of a statement or block, go to its beginning.
-If at beginning of a statement or block, go to previous beginning of compound statement or definition at point.
-If no further element at same level, go one level up."
- (interactive)
- (let* ((pps (parse-partial-sexp (point-min) (point)))
- (erg (cond ((nth 8 pps) (goto-char (nth 8 pps)))
- ((nth 1 pps) (goto-char (nth 1 pps)))
- (t (if (eq (current-column) (current-indentation))
- (py-backward-same-level-intern (current-indentation))
- (back-to-indentation)
- (py-backward-same-level))))))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py-forward-same-level ()
- "Go form forward keeping indent level if possible.
-
-If inside a delimited form --string or list-- go to its beginning.
-If not at beginning of a statement or block, go to its beginning.
-If at beginning of a statement or block, go to previous beginning of compound statement or definition at point.
-If no further element at same level, go one level up."
- (interactive)
- (let (erg)
- (unless (py-beginning-of-statement-p)
- (py-backward-statement))
- (setq erg (py-down (current-indentation)))
- (when (and py-verbose-p (called-interactively-p 'any)) (message "%s" erg))
- erg))
-
-(defun py--end-of-buffer-p ()
- "Returns position, if cursor is at the end of buffer, nil otherwise. "
- (when (eobp)(point)))
-
-(defun py-sectionize-region (&optional beg end)
- "Markup code in region as section.
-
-Use current region unless optional args BEG END are delivered."
- (interactive "*")
- (let ((beg (or beg (region-beginning)))
- (end (or (and end (copy-marker end)) (copy-marker (region-end)))))
- (save-excursion
- (goto-char beg)
- (unless (py-empty-line-p) (split-line))
- (beginning-of-line)
- (insert py-section-start)
- (goto-char end)
- (unless (py-empty-line-p) (newline 1))
- (insert py-section-end))))
-
-(defun py-execute-section-prepare (&optional shell)
- "Execute section at point. "
- (save-excursion
- (let ((start (when (or (py--beginning-of-section-p)
- (py-backward-section))
- (forward-line 1)
- (beginning-of-line)
- (point))))
- (if (and start (py-forward-section))
- (progn
- (beginning-of-line)
- (skip-chars-backward " \t\r\n\f")
- (if shell
- (funcall (car (read-from-string (concat "py-execute-region-" shell))) start (point))
- (py-execute-region start (point))))
- (error "Can't see `py-section-start' resp. `py-section-end'")))))
-
-(defun py--narrow-prepare (name)
- "Used internally. "
- (save-excursion
- (let ((start (cond ((string= name "statement")
- (if (py--beginning-of-statement-p)
- (point)
- (py-backward-statement-bol)))
- ((funcall (car (read-from-string (concat "py--statement-opens-" name "-p")))))
- (t (funcall (car (read-from-string (concat "py-backward-" name "-bol"))))))))
- (funcall (car (read-from-string (concat "py-forward-" name))))
- (narrow-to-region (point) start))))
-
-(defun py--forms-report-result (erg &optional iact)
- (let ((res (ignore-errors (buffer-substring-no-properties (car-safe erg) (cdr-safe erg)))))
- (when (and res iact)
- (goto-char (car-safe erg))
- (set-mark (point))
- (goto-char (cdr-safe erg)))
- res))
-
-(defun py-toggle-shell-fontification (msg)
- "Toggles value of ‘py-shell-fontify-p’. "
- (interactive "p")
-
- (if (setq py-shell-fontify-p (not py-shell-fontify-p))
- (progn
- (py-shell-font-lock-turn-on))
- (py-shell-font-lock-turn-off))
- (when msg (message "py-shell-fontify-p set to: %s" py-shell-fontify-p)))
-
-(defun py-toggle-execute-use-temp-file ()
- (interactive)
- (setq py--execute-use-temp-file-p (not py--execute-use-temp-file-p)))
-
-(defun py--close-intern (regexp)
- "Core function, internal used only. "
- (let ((cui (car (py--go-to-keyword regexp))))
- (message "%s" cui)
- (py--end-base regexp (point))
- (forward-line 1)
- (if py-close-provides-newline
- (unless (py-empty-line-p) (split-line))
- (fixup-whitespace))
- (indent-to-column cui)
- cui))
-
-(defun py-escaped-p (&optional pos)
- "Return t if char at POS is preceded by an odd number of backslashes. "
- (save-excursion
- (when pos (goto-char pos))
- (< 0 (% (abs (skip-chars-backward "\\\\")) 2))))
-
-(defun py--backward-regexp (regexp &optional indent condition orig regexpvalue)
- "Search backward next regexp not in string or comment.
-
-Return and move to match-beginning if successful"
- (save-match-data
- (unless (py-beginning-of-statement-p) (skip-chars-backward " \t\r\n\f")
- (py-backward-comment (point)))
- (let* (pps
- (regexpvalue (or regexpvalue (symbol-value regexp)))
- (indent (or indent (current-indentation)))
- (condition (or condition '<))
- (orig (or orig (point))))
- (if (eq (current-indentation) (current-column))
- (while (and
- (not (bobp))
- ;; # class kugel(object) -> a[1:2]:
- ;; class kugel(object):
- ;; (re-search-backward regexpvalue nil 'move 1)
- (re-search-backward (concat "^ \\{0,"(format "%s" indent) "\\}"regexpvalue) nil 'move 1)
- ;; re-search-backward not greedy
- (not (and (looking-back "async *" (line-beginning-position))
- (goto-char (match-beginning 0))))
- (or (and
- (setq pps (nth 8 (parse-partial-sexp (point-min) (point))))
- (goto-char pps))
- ;; needed by py-backward-clause
- (and indent
- (funcall condition indent (current-indentation))))))
- (back-to-indentation)
- (unless (and (< (point) orig) (looking-at regexpvalue))
- (py--backward-regexp regexp (current-indentation) condition orig)))
- (unless (or (eq (point) orig)(bobp)) (back-to-indentation))
- (and (looking-at regexpvalue) (not (nth 8 (parse-partial-sexp (point-min) (point))))(point)))))
-
-(defun py--forward-regexp (regexp)
- "Search forward next regexp not in string or comment.
-
-Return and move to match-beginning if successful"
- (save-match-data
- (let (erg)
- (while (and
- (setq erg (re-search-forward regexp nil 'move 1))
- (nth 8 (parse-partial-sexp (point-min) (point)))))
- (unless
- (nth 8 (parse-partial-sexp (point-min) (point)))
- erg))))
-
-(defun py--backward-regexp-fast (regexp)
- "Search backward next regexp not in string or comment.
-
-Return and move to match-beginning if successful"
- (save-match-data
- (let (last)
- (while (and
- (re-search-backward regexp nil 'move 1)
- (setq last (match-beginning 0))
- (nth 8 (parse-partial-sexp (point-min) (point)))))
- (unless (nth 8 (parse-partial-sexp (point-min) (point)))
- last))))
-
-(defun py--forward-regexp-keep-indent (regexp &optional indent)
- "Search forward next regexp not in string or comment.
-
-Return and move to match-beginning if successful"
- (save-match-data
- (let ((indent (or indent (current-indentation)))
- (regexp (if (stringp regexp)
- regexp
- (symbol-value regexp)))
- (orig (point))
- last done)
- (forward-line 1)
- (beginning-of-line)
- (while (and
- (not done)
- (re-search-forward regexp nil 'move 1)
- (or (nth 8 (parse-partial-sexp (point-min) (point)))
- (or (< indent (current-indentation))(setq done t))
- (setq last (line-end-position)))))
- (unless
- (nth 8 (parse-partial-sexp (point-min) (point)))
- (if last (goto-char last)
- (back-to-indentation))
- (and (< orig (point)) (point))))))
-
-(defun py-down-base (regexp &optional indent bol)
- (let ((indent (or indent (current-indentation))))
- (and (py--forward-regexp-keep-indent regexp indent)
- (progn
- (if bol
- (beginning-of-line)
- (back-to-indentation))
- (point)))))
-
-(defun py-up-base (regexp &optional indent)
- "Expects a symbol as REGEXP like ‘'py-clause-re’"
- (unless (py-beginning-of-statement-p) (py-backward-statement))
- (unless (looking-at (symbol-value regexp))
- (py--go-to-keyword regexp (or indent (current-indentation)) '<))
- ;; now from beginning-of-block go one indent level upwards
- (py--go-to-keyword regexp (- (or indent (current-indentation)) py-indent-offset) '<))
-
-(defun py-comint-delete-output ()
- "Delete all output from interpreter since last input.
-Does not delete the prompt."
- (interactive)
- (let ((proc (get-buffer-process (current-buffer)))
- (replacement nil)
- (inhibit-read-only t))
- (save-excursion
- (let ((pmark (progn (goto-char (process-mark proc))
- (forward-line 0)
- (point-marker))))
- (delete-region comint-last-input-end pmark)
- (goto-char (process-mark proc))
- (setq replacement (concat "*** output flushed ***\n"
- (buffer-substring pmark (point))))
- (delete-region pmark (point))))
- ;; Output message and put back prompt
- (comint-output-filter proc replacement)))
-
-;; python-components-named-shells
-
-(defun ipython (&optional argprompt args buffer fast exception-buffer split)
- "Start an IPython interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "ipython" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-(defun ipython2.7 (&optional argprompt args buffer fast exception-buffer split)
- "Start an IPython2.7 interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "ipython2.7" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-(defun ipython3 (&optional argprompt args buffer fast exception-buffer split)
- "Start an IPython3 interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "ipython3" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-(defun jython (&optional argprompt args buffer fast exception-buffer split)
- "Start an Jython interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "jython" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-(defun python (&optional argprompt args buffer fast exception-buffer split)
- "Start an Python interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "python" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-(defun python2 (&optional argprompt args buffer fast exception-buffer split)
- "Start an Python2 interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "python2" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-(defun python3 (&optional argprompt args buffer fast exception-buffer split)
- "Start an Python3 interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "python3" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-(defun pypy (&optional argprompt args buffer fast exception-buffer split)
- "Start an Pypy interpreter.
-
-With optional \\[universal-argument] get a new dedicated shell."
- (interactive "p")
- (py-shell argprompt args nil "pypy" buffer fast exception-buffer split (unless argprompt (eq 1 (prefix-numeric-value argprompt)))))
-
-;; python-components-shell-menu
-
-(and (ignore-errors (require 'easymenu) t)
- ;; (easy-menu-define py-menu map "Python Tools"
- ;; `("PyTools"
- (easy-menu-define
- py-shell-menu py-python-shell-mode-map "Py-Shell Mode menu"
- `("Py-Shell"
- ("Edit"
- ("Shift"
- ("Shift right"
- ["Shift block right" py-shift-block-right
- :help " `py-shift-block-right'
-Indent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift block or clause right" py-shift-block-or-clause-right
- :help " `py-shift-block-or-clause-right'
-Indent block-or-clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift class right" py-shift-class-right
- :help " `py-shift-class-right'
-Indent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift clause right" py-shift-clause-right
- :help " `py-shift-clause-right'
-Indent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift comment right" py-shift-comment-right
- :help " `py-shift-comment-right'"]
-
- ["Shift def right" py-shift-def-right
- :help " `py-shift-def-right'
-Indent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift def or class right" py-shift-def-or-class-right
- :help " `py-shift-def-or-class-right'
-Indent def-or-class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift minor block right" py-shift-minor-block-right
- :help " `py-shift-minor-block-right'
-Indent minor-block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-A minor block is started by a `for', `if', `try' or `with'."]
-
- ["Shift paragraph right" py-shift-paragraph-right
- :help " `py-shift-paragraph-right'
-Indent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift region right" py-shift-region-right
- :help " `py-shift-region-right'
-Indent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is indented.
-Returns indentation reached."]
-
- ["Shift statement right" py-shift-statement-right
- :help " `py-shift-statement-right'
-Indent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift top level right" py-shift-top-level-right
- :help " `py-shift-top-level-right'"]
- )
- ("Shift left"
- ["Shift block left" py-shift-block-left
- :help " `py-shift-block-left'
-Dedent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift block or clause left" py-shift-block-or-clause-left
- :help " `py-shift-block-or-clause-left'
-Dedent block-or-clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift class left" py-shift-class-left
- :help " `py-shift-class-left'
-Dedent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift clause left" py-shift-clause-left
- :help " `py-shift-clause-left'
-Dedent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift comment left" py-shift-comment-left
- :help " `py-shift-comment-left'"]
-
- ["Shift def left" py-shift-def-left
- :help " `py-shift-def-left'
-Dedent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift def or class left" py-shift-def-or-class-left
- :help " `py-shift-def-or-class-left'
-Dedent def-or-class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift minor block left" py-shift-minor-block-left
- :help " `py-shift-minor-block-left'
-Dedent minor-block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-A minor block is started by a `for', `if', `try' or `with'."]
-
- ["Shift paragraph left" py-shift-paragraph-left
- :help " `py-shift-paragraph-left'
-Dedent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
-
- ["Shift region left" py-shift-region-left
- :help " `py-shift-region-left'
-Dedent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is dedented.
-Returns indentation reached."]
-
- ["Shift statement left" py-shift-statement-left
- :help " `py-shift-statement-left'
-Dedent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached."]
- ))
- ("Mark"
- ["Mark block" py-mark-block
- :help " `py-mark-block'
-Mark block at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark block or clause" py-mark-block-or-clause
- :help " `py-mark-block-or-clause'
-Mark block-or-clause at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark class" py-mark-class
- :help " `py-mark-class'
-Mark class at point.
-
-With C-u or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark clause" py-mark-clause
- :help " `py-mark-clause'
-Mark clause at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark comment" py-mark-comment
- :help " `py-mark-comment'
-Mark comment at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark def" py-mark-def
- :help " `py-mark-def'
-Mark def at point.
-
-With C-u or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark def or class" py-mark-def-or-class
- :help " `py-mark-def-or-class'
-Mark def-or-class at point.
-
-With C-u or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark expression" py-mark-expression
- :help " `py-mark-expression'
-Mark expression at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark line" py-mark-line
- :help " `py-mark-line'
-Mark line at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark minor block" py-mark-minor-block
- :help " `py-mark-minor-block'
-Mark minor-block at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark paragraph" py-mark-paragraph
- :help " `py-mark-paragraph'
-Mark paragraph at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark partial expression" py-mark-partial-expression
- :help " `py-mark-partial-expression'
-Mark partial-expression at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark statement" py-mark-statement
- :help " `py-mark-statement'
-Mark statement at point.
-
-Returns beginning and end positions of marked area, a cons."]
-
- ["Mark top level" py-mark-top-level
- :help " `py-mark-top-level'
-Mark top-level at point.
-
-Returns beginning and end positions of marked area, a cons."]
- )
- ("Copy"
- ["Copy block" py-copy-block
- :help " `py-copy-block'
-Copy block at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy block or clause" py-copy-block-or-clause
- :help " `py-copy-block-or-clause'
-Copy block-or-clause at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy class" py-copy-class
- :help " `py-copy-class'
-Copy class at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy clause" py-copy-clause
- :help " `py-copy-clause'
-Copy clause at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy comment" py-copy-comment
- :help " `py-copy-comment'"]
-
- ["Copy def" py-copy-def
- :help " `py-copy-def'
-Copy def at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy def or class" py-copy-def-or-class
- :help " `py-copy-def-or-class'
-Copy def-or-class at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy expression" py-copy-expression
- :help " `py-copy-expression'
-Copy expression at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy line" py-copy-line
- :help " `py-copy-line'"]
-
- ["Copy minor block" py-copy-minor-block
- :help " `py-copy-minor-block'
-Copy minor-block at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy paragraph" py-copy-paragraph
- :help " `py-copy-paragraph'"]
-
- ["Copy partial expression" py-copy-partial-expression
- :help " `py-copy-partial-expression'
-Copy partial-expression at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy statement" py-copy-statement
- :help " `py-copy-statement'
-Copy statement at point.
-
-Store data in kill ring, so it might yanked back."]
-
- ["Copy top level" py-copy-top-level
- :help " `py-copy-top-level'
-Copy top-level at point.
-
-Store data in kill ring, so it might yanked back."]
- )
- ("Kill"
- ["Kill block" py-kill-block
- :help " `py-kill-block'
-Delete `block' at point.
-
-Stores data in kill ring"]
-
- ["Kill block or clause" py-kill-block-or-clause
- :help " `py-kill-block-or-clause'
-Delete `block-or-clause' at point.
-
-Stores data in kill ring"]
-
- ["Kill class" py-kill-class
- :help " `py-kill-class'
-Delete `class' at point.
-
-Stores data in kill ring"]
-
- ["Kill clause" py-kill-clause
- :help " `py-kill-clause'
-Delete `clause' at point.
-
-Stores data in kill ring"]
-
- ["Kill comment" py-kill-comment
- :help " `py-kill-comment'"]
-
- ["Kill def" py-kill-def
- :help " `py-kill-def'
-Delete `def' at point.
-
-Stores data in kill ring"]
-
- ["Kill def or class" py-kill-def-or-class
- :help " `py-kill-def-or-class'
-Delete `def-or-class' at point.
-
-Stores data in kill ring"]
-
- ["Kill expression" py-kill-expression
- :help " `py-kill-expression'
-Delete `expression' at point.
-
-Stores data in kill ring"]
-
- ["Kill line" py-kill-line
- :help " `py-kill-line'"]
-
- ["Kill minor block" py-kill-minor-block
- :help " `py-kill-minor-block'
-Delete `minor-block' at point.
-
-Stores data in kill ring"]
-
- ["Kill paragraph" py-kill-paragraph
- :help " `py-kill-paragraph'"]
-
- ["Kill partial expression" py-kill-partial-expression
- :help " `py-kill-partial-expression'
-Delete `partial-expression' at point.
-
-Stores data in kill ring"]
-
- ["Kill statement" py-kill-statement
- :help " `py-kill-statement'
-Delete `statement' at point.
-
-Stores data in kill ring"]
-
- ["Kill top level" py-kill-top-level
- :help " `py-kill-top-level'
-Delete `top-level' at point.
-
-Stores data in kill ring"]
- )
- ("Delete"
- ["Delete block" py-delete-block
- :help " `py-delete-block'
-Delete BLOCK at point.
-
-Don't store data in kill ring."]
-
- ["Delete block or clause" py-delete-block-or-clause
- :help " `py-delete-block-or-clause'
-Delete BLOCK-OR-CLAUSE at point.
-
-Don't store data in kill ring."]
-
- ["Delete class" py-delete-class
- :help " `py-delete-class'
-Delete CLASS at point.
-
-Don't store data in kill ring.
-With C-u or `py-mark-decorators' set to `t', `decorators' are included."]
-
- ["Delete clause" py-delete-clause
- :help " `py-delete-clause'
-Delete CLAUSE at point.
-
-Don't store data in kill ring."]
-
- ["Delete comment" py-delete-comment
- :help " `py-delete-comment'"]
-
- ["Delete def" py-delete-def
- :help " `py-delete-def'
-Delete DEF at point.
-
-Don't store data in kill ring.
-With C-u or `py-mark-decorators' set to `t', `decorators' are included."]
-
- ["Delete def or class" py-delete-def-or-class
- :help " `py-delete-def-or-class'
-Delete DEF-OR-CLASS at point.
-
-Don't store data in kill ring.
-With C-u or `py-mark-decorators' set to `t', `decorators' are included."]
-
- ["Delete expression" py-delete-expression
- :help " `py-delete-expression'
-Delete EXPRESSION at point.
-
-Don't store data in kill ring."]
-
- ["Delete line" py-delete-line
- :help " `py-delete-line'"]
-
- ["Delete minor block" py-delete-minor-block
- :help " `py-delete-minor-block'
-Delete MINOR-BLOCK at point.
-
-Don't store data in kill ring."]
-
- ["Delete paragraph" py-delete-paragraph
- :help " `py-delete-paragraph'"]
-
- ["Delete partial expression" py-delete-partial-expression
- :help " `py-delete-partial-expression'
-Delete PARTIAL-EXPRESSION at point.
-
-Don't store data in kill ring."]
-
- ["Delete statement" py-delete-statement
- :help " `py-delete-statement'
-Delete STATEMENT at point.
-
-Don't store data in kill ring."]
-
- ["Delete top level" py-delete-top-level
- :help " `py-delete-top-level'
-Delete TOP-LEVEL at point.
-
-Don't store data in kill ring."]
- )
- ("Comment"
- ["Comment block" py-comment-block
- :help " `py-comment-block'
-Comments block at point.
-
-Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t',
-the default"]
-
- ["Comment block or clause" py-comment-block-or-clause
- :help " `py-comment-block-or-clause'
-Comments block-or-clause at point.
-
-Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t',
-the default"]
-
- ["Comment class" py-comment-class
- :help " `py-comment-class'
-Comments class at point.
-
-Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t',
-the default"]
-
- ["Comment clause" py-comment-clause
- :help " `py-comment-clause'
-Comments clause at point.
-
-Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t',
-the default"]
-
- ["Comment def" py-comment-def
- :help " `py-comment-def'
-Comments def at point.
-
-Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t',
-the default"]
-
- ["Comment def or class" py-comment-def-or-class
- :help " `py-comment-def-or-class'
-Comments def-or-class at point.
-
-Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t',
-the default"]
-
- ["Comment statement" py-comment-statement
- :help " `py-comment-statement'
-Comments statement at point.
-
-Uses double hash (`#') comment starter when `py-block-comment-prefix-p' is `t',
-the default"]
- ))
- ("Move"
- ("Backward"
- ["Beginning of block" py-beginning-of-block
- :help " `py-beginning-of-block'
-Go to beginning block, skip whitespace at BOL.
-
-Returns beginning of block if successful, nil otherwise"]
-
- ["Beginning of block or clause" py-beginning-of-block-or-clause
- :help " `py-beginning-of-block-or-clause'
-Go to beginning block-or-clause, skip whitespace at BOL.
-
-Returns beginning of block-or-clause if successful, nil otherwise"]
-
- ["Beginning of class" py-beginning-of-class
- :help " `py-beginning-of-class'
-Go to beginning class, skip whitespace at BOL.
-
-Returns beginning of class if successful, nil otherwise
-
-When `py-mark-decorators' is non-nil, decorators are considered too."]
-
- ["Beginning of clause" py-beginning-of-clause
- :help " `py-beginning-of-clause'
-Go to beginning clause, skip whitespace at BOL.
-
-Returns beginning of clause if successful, nil otherwise"]
-
- ["Beginning of def" py-beginning-of-def
- :help " `py-beginning-of-def'
-Go to beginning def, skip whitespace at BOL.
-
-Returns beginning of def if successful, nil otherwise
-
-When `py-mark-decorators' is non-nil, decorators are considered too."]
-
- ["Beginning of def or class" py-beginning-of-def-or-class
- :help " `py-beginning-of-def-or-class'
-Go to beginning def-or-class, skip whitespace at BOL.
-
-Returns beginning of def-or-class if successful, nil otherwise
-
-When `py-mark-decorators' is non-nil, decorators are considered too."]
-
- ["Beginning of elif block" py-beginning-of-elif-block
- :help " `py-beginning-of-elif-block'
-Go to beginning elif-block, skip whitespace at BOL.
-
-Returns beginning of elif-block if successful, nil otherwise"]
-
- ["Beginning of else block" py-beginning-of-else-block
- :help " `py-beginning-of-else-block'
-Go to beginning else-block, skip whitespace at BOL.
-
-Returns beginning of else-block if successful, nil otherwise"]
-
- ["Beginning of except block" py-beginning-of-except-block
- :help " `py-beginning-of-except-block'
-Go to beginning except-block, skip whitespace at BOL.
-
-Returns beginning of except-block if successful, nil otherwise"]
-
- ["Beginning of expression" py-beginning-of-expression
- :help " `py-beginning-of-expression'
-Go to the beginning of a compound python expression.
-
-With numeric ARG do it that many times.
-
-A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions.
-
-If already at the beginning or before a expression, go to next expression in buffer upwards
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes."]
-
- ["Beginning of if block" py-beginning-of-if-block
- :help " `py-beginning-of-if-block'
-Go to beginning if-block, skip whitespace at BOL.
-
-Returns beginning of if-block if successful, nil otherwise"]
-
- ["Beginning of partial expression" py-beginning-of-partial-expression
- :help " `py-beginning-of-partial-expression'"]
-
- ["Beginning of statement" py-beginning-of-statement
- :help " `py-beginning-of-statement'
-Go to the initial line of a simple statement.
-
-For beginning of compound statement use py-beginning-of-block.
-For beginning of clause py-beginning-of-clause."]
-
- ["Beginning of top level" py-beginning-of-top-level
- :help " `py-beginning-of-top-level'
-Go up to beginning of statments until level of indentation is null.
-
-Returns position if successful, nil otherwise"]
-
- ["Beginning of try block" py-beginning-of-try-block
- :help " `py-beginning-of-try-block'
-Go to beginning try-block, skip whitespace at BOL.
-
-Returns beginning of try-block if successful, nil otherwise"]
- )
- ("Forward"
- ["End of block" py-end-of-block
- :help " `py-end-of-block'
-Go to end of block.
-
-Returns end of block if successful, nil otherwise"]
-
- ["End of block or clause" py-end-of-block-or-clause
- :help " `py-end-of-block-or-clause'
-Go to end of block-or-clause.
-
-Returns end of block-or-clause if successful, nil otherwise"]
-
- ["End of class" py-end-of-class
- :help " `py-end-of-class'
-Go to end of class.
-
-Returns end of class if successful, nil otherwise"]
-
- ["End of clause" py-end-of-clause
- :help " `py-end-of-clause'
-Go to end of clause.
-
-Returns end of clause if successful, nil otherwise"]
-
- ["End of def" py-end-of-def
- :help " `py-end-of-def'
-Go to end of def.
-
-Returns end of def if successful, nil otherwise"]
-
- ["End of def or class" py-end-of-def-or-class
- :help " `py-end-of-def-or-class'
-Go to end of def-or-class.
-
-Returns end of def-or-class if successful, nil otherwise"]
-
- ["End of elif block" py-end-of-elif-block
- :help " `py-end-of-elif-block'
-Go to end of elif-block.
-
-Returns end of elif-block if successful, nil otherwise"]
-
- ["End of else block" py-end-of-else-block
- :help " `py-end-of-else-block'
-Go to end of else-block.
-
-Returns end of else-block if successful, nil otherwise"]
-
- ["End of except block" py-end-of-except-block
- :help " `py-end-of-except-block'
-Go to end of except-block.
-
-Returns end of except-block if successful, nil otherwise"]
-
- ["End of expression" py-end-of-expression
- :help " `py-end-of-expression'
-Go to the end of a compound python expression.
-
-With numeric ARG do it that many times.
-
-A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions.
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-
-Operators however are left aside resp. limit py-expression designed for edit-purposes."]
-
- ["End of if block" py-end-of-if-block
- :help " `py-end-of-if-block'
-Go to end of if-block.
-
-Returns end of if-block if successful, nil otherwise"]
-
- ["End of partial expression" py-end-of-partial-expression
- :help " `py-end-of-partial-expression'"]
-
- ["End of statement" py-end-of-statement
- :help " `py-end-of-statement'
-Go to the last char of current statement.
-
-Optional argument REPEAT, the number of loops done already, is checked for py-max-specpdl-size error. Avoid eternal loops due to missing string delimters etc."]
-
- ["End of top level" py-end-of-top-level
- :help " `py-end-of-top-level'
-Go to end of top-level form at point.
-
-Returns position if successful, nil otherwise"]
-
- ["End of try block" py-end-of-try-block
- :help " `py-end-of-try-block'
-Go to end of try-block.
-
-Returns end of try-block if successful, nil otherwise"]
- )
- ("BOL-forms"
- ("Backward"
- ["Beginning of block bol" py-beginning-of-block-bol
- :help " `py-beginning-of-block-bol'
-Go to beginning block, go to BOL.
-
-Returns beginning of block if successful, nil otherwise"]
-
- ["Beginning of block or clause bol" py-beginning-of-block-or-clause-bol
- :help " `py-beginning-of-block-or-clause-bol'
-Go to beginning block-or-clause, go to BOL.
-
-Returns beginning of block-or-clause if successful, nil otherwise"]
-
- ["Beginning of class bol" py-beginning-of-class-bol
- :help " `py-beginning-of-class-bol'
-Go to beginning class, go to BOL.
-
-Returns beginning of class if successful, nil otherwise
-
-When `py-mark-decorators' is non-nil, decorators are considered too."]
-
- ["Beginning of clause bol" py-beginning-of-clause-bol
- :help " `py-beginning-of-clause-bol'
-Go to beginning clause, go to BOL.
-
-Returns beginning of clause if successful, nil otherwise"]
-
- ["Beginning of def bol" py-beginning-of-def-bol
- :help " `py-beginning-of-def-bol'
-Go to beginning def, go to BOL.
-
-Returns beginning of def if successful, nil otherwise
-
-When `py-mark-decorators' is non-nil, decorators are considered too."]
-
- ["Beginning of def or class bol" py-beginning-of-def-or-class-bol
- :help " `py-beginning-of-def-or-class-bol'
-Go to beginning def-or-class, go to BOL.
-
-Returns beginning of def-or-class if successful, nil otherwise
-
-When `py-mark-decorators' is non-nil, decorators are considered too."]
-
- ["Beginning of elif block bol" py-beginning-of-elif-block-bol
- :help " `py-beginning-of-elif-block-bol'
-Go to beginning elif-block, go to BOL.
-
-Returns beginning of elif-block if successful, nil otherwise"]
-
- ["Beginning of else block bol" py-beginning-of-else-block-bol
- :help " `py-beginning-of-else-block-bol'
-Go to beginning else-block, go to BOL.
-
-Returns beginning of else-block if successful, nil otherwise"]
-
- ["Beginning of except block bol" py-beginning-of-except-block-bol
- :help " `py-beginning-of-except-block-bol'
-Go to beginning except-block, go to BOL.
-
-Returns beginning of except-block if successful, nil otherwise"]
-
- ["Beginning of expression bol" py-beginning-of-expression-bol
- :help " `py-beginning-of-expression-bol'"]
-
- ["Beginning of if block bol" py-beginning-of-if-block-bol
- :help " `py-beginning-of-if-block-bol'
-Go to beginning if-block, go to BOL.
-
-Returns beginning of if-block if successful, nil otherwise"]
-
- ["Beginning of partial expression bol" py-beginning-of-partial-expression-bol
- :help " `py-beginning-of-partial-expression-bol'"]
-
- ["Beginning of statement bol" py-beginning-of-statement-bol
- :help " `py-beginning-of-statement-bol'
-Goto beginning of line where statement starts.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-up-statement': up from current definition to next beginning of statement above."]
-
- ["Beginning of try block bol" py-beginning-of-try-block-bol
- :help " `py-beginning-of-try-block-bol'
-Go to beginning try-block, go to BOL.
-
-Returns beginning of try-block if successful, nil otherwise"]
- )
- ("Forward"
- ["End of block bol" py-end-of-block-bol
- :help " `py-end-of-block-bol'
-Goto beginning of line following end of block.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-block': down from current definition to next beginning of block below."]
-
- ["End of block or clause bol" py-end-of-block-or-clause-bol
- :help " `py-end-of-block-or-clause-bol'
-Goto beginning of line following end of block-or-clause.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-block-or-clause': down from current definition to next beginning of block-or-clause below."]
-
- ["End of class bol" py-end-of-class-bol
- :help " `py-end-of-class-bol'
-Goto beginning of line following end of class.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-class': down from current definition to next beginning of class below."]
-
- ["End of clause bol" py-end-of-clause-bol
- :help " `py-end-of-clause-bol'
-Goto beginning of line following end of clause.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-clause': down from current definition to next beginning of clause below."]
-
- ["End of def bol" py-end-of-def-bol
- :help " `py-end-of-def-bol'
-Goto beginning of line following end of def.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-def': down from current definition to next beginning of def below."]
-
- ["End of def or class bol" py-end-of-def-or-class-bol
- :help " `py-end-of-def-or-class-bol'
-Goto beginning of line following end of def-or-class.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-def-or-class': down from current definition to next beginning of def-or-class below."]
-
- ["End of elif block bol" py-end-of-elif-block-bol
- :help " `py-end-of-elif-block-bol'
-Goto beginning of line following end of elif-block.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-elif-block': down from current definition to next beginning of elif-block below."]
-
- ["End of else block bol" py-end-of-else-block-bol
- :help " `py-end-of-else-block-bol'
-Goto beginning of line following end of else-block.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-else-block': down from current definition to next beginning of else-block below."]
-
- ["End of except block bol" py-end-of-except-block-bol
- :help " `py-end-of-except-block-bol'
-Goto beginning of line following end of except-block.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-except-block': down from current definition to next beginning of except-block below."]
-
- ["End of expression bol" py-end-of-expression-bol
- :help " `py-end-of-expression-bol'"]
-
- ["End of if block bol" py-end-of-if-block-bol
- :help " `py-end-of-if-block-bol'
-Goto beginning of line following end of if-block.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-if-block': down from current definition to next beginning of if-block below."]
-
- ["End of partial expression bol" py-end-of-partial-expression-bol
- :help " `py-end-of-partial-expression-bol'"]
-
- ["End of statement bol" py-end-of-statement-bol
- :help " `py-end-of-statement-bol'
-Go to the beginning-of-line following current statement."]
-
- ["End of top level bol" py-end-of-top-level-bol
- :help " `py-end-of-top-level-bol'
-Go to end of top-level form at point, stop at next beginning-of-line.
-
-Returns position successful, nil otherwise"]
-
- ["End of try block bol" py-end-of-try-block-bol
- :help " `py-end-of-try-block-bol'
-Goto beginning of line following end of try-block.
- Returns position reached, if successful, nil otherwise.
-
-See also `py-down-try-block': down from current definition to next beginning of try-block below."]
- ))
- ("Up/Down"
- ["Up" py-up
- :help " `py-up'
-Go up or to beginning of form if inside.
-
-If inside a delimited form --string or list-- go to its beginning.
-If not at beginning of a statement or block, go to its beginning.
-If at beginning of a statement or block, go to beginning one level above of compound statement or definition at point."]
-
- ["Down" py-down
- :help " `py-down'
-Go to beginning one level below of compound statement or definition at point.
-
-If no statement or block below, but a delimited form --string or list-- go to its beginning. Repeated call from there will behave like down-list.
-
-Returns position if successful, nil otherwise"]
- ))
- ("Hide-Show"
- ("Hide"
- ["Hide region" py-hide-region
- :help " `py-hide-region'
-Hide active region."]
-
- ["Hide statement" py-hide-statement
- :help " `py-hide-statement'
-Hide statement at point."]
-
- ["Hide block" py-hide-block
- :help " `py-hide-block'
-Hide block at point."]
-
- ["Hide clause" py-hide-clause
- :help " `py-hide-clause'
-Hide clause at point."]
-
- ["Hide block or clause" py-hide-block-or-clause
- :help " `py-hide-block-or-clause'
-Hide block-or-clause at point."]
-
- ["Hide def" py-hide-def
- :help " `py-hide-def'
-Hide def at point."]
-
- ["Hide class" py-hide-class
- :help " `py-hide-class'
-Hide class at point."]
-
- ["Hide expression" py-hide-expression
- :help " `py-hide-expression'
-Hide expression at point."]
-
- ["Hide partial expression" py-hide-partial-expression
- :help " `py-hide-partial-expression'
-Hide partial-expression at point."]
-
- ["Hide line" py-hide-line
- :help " `py-hide-line'
-Hide line at point."]
-
- ["Hide top level" py-hide-top-level
- :help " `py-hide-top-level'
-Hide top-level at point."]
- )
- ("Show"
- ["Show" py-show
- :help " `py-show'
-Un-hide at point."]
-
- ["Show all" py-show-all
- :help " `py-show-all'
-Un-hide all in buffer."]
- ))
- ("Virtualenv"
- ["Virtualenv activate" virtualenv-activate
- :help " `virtualenv-activate'
-Activate the virtualenv located in DIR"]
-
- ["Virtualenv deactivate" virtualenv-deactivate
- :help " `virtualenv-deactivate'
-Deactivate the current virtual enviroment"]
-
- ["Virtualenv p" virtualenv-p
- :help " `virtualenv-p'
-Check if a directory is a virtualenv"]
-
- ["Virtualenv workon" virtualenv-workon
- :help " `virtualenv-workon'
-Issue a virtualenvwrapper-like virtualenv-workon command"]
- )
- ("Help"
- ["Find definition" py-find-definition
- :help " `py-find-definition'
-Find source of definition of SYMBOL.
-
-Interactively, prompt for SYMBOL."]
-
- ["Help at point" py-help-at-point
- :help " `py-help-at-point'
-Print help on symbol at point.
-
-If symbol is defined in current buffer, jump to it's definition
-Optional C-u used for debugging, will prevent deletion of temp file."]
-
- ["Info lookup symbol" py-info-lookup-symbol
- :help " `py-info-lookup-symbol'"]
-
- ["Symbol at point" py-symbol-at-point
- :help " `py-symbol-at-point'
-Return the current Python symbol."]
- )
- ("Customize"
-
- ["Python-mode customize group" (customize-group 'python-mode)
- :help "Open the customization buffer for Python mode"]
- ("Switches"
- :help "Toggle useful modes"
- ("Interpreter"
-
- ["Shell prompt read only"
- (setq py-shell-prompt-read-only
- (not py-shell-prompt-read-only))
- :help "If non-nil, the python prompt is read only. Setting this variable will only effect new shells.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-shell-prompt-read-only]
-
- ["Remove cwd from path"
- (setq py-remove-cwd-from-path
- (not py-remove-cwd-from-path))
- :help "Whether to allow loading of Python modules from the current directory.
-If this is non-nil, Emacs removes '' from sys.path when starting
-a Python process. This is the default, for security
-reasons, as it is easy for the Python process to be started
-without the user's realization (e.g. to perform completion).Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-remove-cwd-from-path]
-
- ["Honor IPYTHONDIR "
- (setq py-honor-IPYTHONDIR-p
- (not py-honor-IPYTHONDIR-p))
- :help "When non-nil ipython-history file is constructed by \$IPYTHONDIR
-followed by "/history". Default is nil.
-
-Otherwise value of py-ipython-history is used. Use `M-x customize-variable' to set it permanently"
-:style toggle :selected py-honor-IPYTHONDIR-p]
-
- ["Honor PYTHONHISTORY "
- (setq py-honor-PYTHONHISTORY-p
- (not py-honor-PYTHONHISTORY-p))
- :help "When non-nil python-history file is set by \$PYTHONHISTORY
-Default is nil.
-
-Otherwise value of py-python-history is used. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-honor-PYTHONHISTORY-p]
-
- ["Enforce py-shell-name" force-py-shell-name-p-on
- :help "Enforce customized default `py-shell-name' should upon execution. "]
-
- ["Don't enforce default interpreter" force-py-shell-name-p-off
- :help "Make execute commands guess interpreter from environment"]
-
- ["Enforce local Python shell " py-force-local-shell-on
- :help "Locally indicated Python being enforced upon sessions execute commands. "]
-
- ["Remove local Python shell enforcement, restore default" py-force-local-shell-off
- :help "Restore `py-shell-name' default value and `behaviour'. "])
-
- ("Execute"
-
- ["Fast process" py-fast-process-p
- :help " `py-fast-process-p'
-
-Use `py-fast-process'\.
-
-Commands prefixed \"py-fast-...\" suitable for large output
-
-See: large output makes Emacs freeze, lp:1253907
-
-Output-buffer is not in comint-mode"
- :style toggle :selected py-fast-process-p]
-
- ["Python mode v5 behavior"
- (setq python-mode-v5-behavior-p
- (not python-mode-v5-behavior-p))
- :help "Execute region through `shell-command-on-region' as
-v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected python-mode-v5-behavior-p]
-
- ["Force shell name "
- (setq py-force-py-shell-name-p
- (not py-force-py-shell-name-p))
- :help "When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-force-py-shell-name-p]
-
- ["Execute \"if name == main\" blocks p"
- (setq py-if-name-main-permission-p
- (not py-if-name-main-permission-p))
- :help " `py-if-name-main-permission-p'
-
-Allow execution of code inside blocks delimited by
-if __name__ == '__main__'
-
-Default is non-nil. "
- :style toggle :selected py-if-name-main-permission-p]
-
- ["Ask about save"
- (setq py-ask-about-save
- (not py-ask-about-save))
- :help "If not nil, ask about which buffers to save before executing some code.
-Otherwise, all modified buffers are saved without asking.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-ask-about-save]
-
- ["Store result"
- (setq py-store-result-p
- (not py-store-result-p))
- :help " `py-store-result-p'
-
-When non-nil, put resulting string of `py-execute-...' into kill-ring, so it might be yanked. "
- :style toggle :selected py-store-result-p]
-
- ["Prompt on changed "
- (setq py-prompt-on-changed-p
- (not py-prompt-on-changed-p))
- :help "When called interactively, ask for save before a changed buffer is sent to interpreter.
-
-Default is `t'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-prompt-on-changed-p]
-
- ["Dedicated process "
- (setq py-dedicated-process-p
- (not py-dedicated-process-p))
- :help "If commands executing code use a dedicated shell.
-
-Default is nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-dedicated-process-p]
-
- ["Execute without temporary file"
- (setq py-execute-no-temp-p
- (not py-execute-no-temp-p))
- :help " `py-execute-no-temp-p'
-Seems Emacs-24.3 provided a way executing stuff without temporary files.
-In experimental state yet "
- :style toggle :selected py-execute-no-temp-p]
-
- ["Warn tmp files left "
- (setq py--warn-tmp-files-left-p
- (not py--warn-tmp-files-left-p))
- :help "Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py--warn-tmp-files-left-p])
-
- ("Edit"
-
- ("Completion"
-
- ["Set Pymacs-based complete keymap "
- (setq py-set-complete-keymap-p
- (not py-set-complete-keymap-p))
- :help "If `py-complete-initialize', which sets up enviroment for Pymacs based py-complete, should load it's keys into `python-mode-map'
-
-Default is nil.
-See also resp. edit `py-complete-set-keymap' Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-set-complete-keymap-p]
-
- ["Indent no completion "
- (setq py-indent-no-completion-p
- (not py-indent-no-completion-p))
- :help "If completion function should indent when no completion found. Default is `t'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-indent-no-completion-p]
-
- ["Company pycomplete "
- (setq py-company-pycomplete-p
- (not py-company-pycomplete-p))
- :help "Load company-pycomplete stuff. Default is nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-company-pycomplete-p])
-
- ("Filling"
-
- ("Docstring styles"
- :help "Switch docstring-style"
-
- ["Nil" py-set-nil-docstring-style
- :help " `py-set-nil-docstring-style'
-
-Set py-docstring-style to nil, format string normally. "]
-
- ["pep-257-nn" py-set-pep-257-nn-docstring-style
- :help " `py-set-pep-257-nn-docstring-style'
-
-Set py-docstring-style to 'pep-257-nn "]
-
- ["pep-257" py-set-pep-257-docstring-style
- :help " `py-set-pep-257-docstring-style'
-
-Set py-docstring-style to 'pep-257 "]
-
- ["django" py-set-django-docstring-style
- :help " `py-set-django-docstring-style'
-
-Set py-docstring-style to 'django "]
-
- ["onetwo" py-set-onetwo-docstring-style
- :help " `py-set-onetwo-docstring-style'
-
-Set py-docstring-style to 'onetwo "]
-
- ["symmetric" py-set-symmetric-docstring-style
- :help " `py-set-symmetric-docstring-style'
-
-Set py-docstring-style to 'symmetric "])
-
- ["Auto-fill mode"
- (setq py-auto-fill-mode
- (not py-auto-fill-mode))
- :help "Fill according to `py-docstring-fill-column' and `py-comment-fill-column'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-auto-fill-mode])
-
- ["Use current dir when execute"
- (setq py-use-current-dir-when-execute-p
- (not py-use-current-dir-when-execute-p))
- :help " `toggle-py-use-current-dir-when-execute-p'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-current-dir-when-execute-p]
-
- ("Indent"
- ("TAB related"
-
- ["indent-tabs-mode"
- (setq indent-tabs-mode
- (not indent-tabs-mode))
- :help "Indentation can insert tabs if this is non-nil.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected indent-tabs-mode]
-
- ["Tab indent"
- (setq py-tab-indent
- (not py-tab-indent))
- :help "Non-nil means TAB in Python mode calls `py-indent-line'.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-indent]
-
- ["Tab shifts region "
- (setq py-tab-shifts-region-p
- (not py-tab-shifts-region-p))
- :help "If `t', TAB will indent/cycle the region, not just the current line.
-
-Default is nil
-See also `py-tab-indents-region-p'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-shifts-region-p]
-
- ["Tab indents region "
- (setq py-tab-indents-region-p
- (not py-tab-indents-region-p))
- :help "When `t' and first TAB doesn't shift, indent-region is called.
-
-Default is nil
-See also `py-tab-shifts-region-p'
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-indents-region-p])
-
- ["Close at start column"
- (setq py-closing-list-dedents-bos
- (not py-closing-list-dedents-bos))
- :help "When non-nil, indent list's closing delimiter like start-column.
-
-It will be lined up under the first character of
- the line that starts the multi-line construct, as in:
-
-my_list = \[
- 1, 2, 3,
- 4, 5, 6,
-]
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-closing-list-dedents-bos]
-
- ["Closing list keeps space"
- (setq py-closing-list-keeps-space
- (not py-closing-list-keeps-space))
- :help "If non-nil, closing parenthesis dedents onto column of opening plus `py-closing-list-space', default is nil Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-closing-list-keeps-space]
-
- ["Closing list space"
- (setq py-closing-list-space
- (not py-closing-list-space))
- :help "Number of chars, closing parenthesis outdent from opening, default is 1 Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-closing-list-space]
-
- ["Tab shifts region "
- (setq py-tab-shifts-region-p
- (not py-tab-shifts-region-p))
- :help "If `t', TAB will indent/cycle the region, not just the current line.
-
-Default is nil
-See also `py-tab-indents-region-p'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-tab-shifts-region-p]
-
- ["Lhs inbound indent"
- (setq py-lhs-inbound-indent
- (not py-lhs-inbound-indent))
- :help "When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-lhs-inbound-indent]
-
- ["Continuation offset"
- (setq py-continuation-offset
- (not py-continuation-offset))
- :help "With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-continuation-offset]
-
- ["Electric colon"
- (setq py-electric-colon-active-p
- (not py-electric-colon-active-p))
- :help " `py-electric-colon-active-p'
-
-`py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. "
- :style toggle :selected py-electric-colon-active-p]
-
- ["Electric colon at beginning of block only"
- (setq py-electric-colon-bobl-only
- (not py-electric-colon-bobl-only))
- :help "When inserting a colon, do not indent lines unless at beginning of block.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-colon-bobl-only]
-
- ["Electric yank active "
- (setq py-electric-yank-active-p
- (not py-electric-yank-active-p))
- :help " When non-nil, `yank' will be followed by an `indent-according-to-mode'.
-
-Default is nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-yank-active-p]
-
- ["Electric kill backward "
- (setq py-electric-kill-backward-p
- (not py-electric-kill-backward-p))
- :help "Affects `py-electric-backspace'. Default is nil.
-
-If behind a delimited form of braces, brackets or parentheses,
-backspace will kill it's contents
-
-With when cursor after
-my_string\[0:1]
---------------^
-
-==>
-
-my_string\[]
-----------^
-
-In result cursor is insided emptied delimited form.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-kill-backward-p]
-
- ["Trailing whitespace smart delete "
- (setq py-trailing-whitespace-smart-delete-p
- (not py-trailing-whitespace-smart-delete-p))
- :help "Default is nil. When t, python-mode calls
- (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local)
-
-Also commands may delete trailing whitespace by the way.
-When editing other peoples code, this may produce a larger diff than expected Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-trailing-whitespace-smart-delete-p]
-
- ["Newline delete trailing whitespace "
- (setq py-newline-delete-trailing-whitespace-p
- (not py-newline-delete-trailing-whitespace-p))
- :help "Delete trailing whitespace maybe left by `py-newline-and-indent'.
-
-Default is `t'. See lp:1100892 Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-newline-delete-trailing-whitespace-p]
-
- ["Dedent keep relative column"
- (setq py-dedent-keep-relative-column
- (not py-dedent-keep-relative-column))
- :help "If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-dedent-keep-relative-column]
-
-;; ["Indent paren spanned multilines "
-;; (setq py-indent-paren-spanned-multilines-p
-;; (not py-indent-paren-spanned-multilines-p))
-;; :help "If non-nil, indents elements of list a value of `py-indent-offset' to first element:
-
-;; def foo():
-;; if (foo &&
-;; baz):
-;; bar()
-
-;; Default lines up with first element:
-
-;; def foo():
-;; if (foo &&
-;; baz):
-;; bar()
-;; Use `M-x customize-variable' to set it permanently"
-;; :style toggle :selected py-indent-paren-spanned-multilines-p]
-
- ;; ["Indent honors multiline listing"
- ;; (setq py-indent-honors-multiline-listing
- ;; (not py-indent-honors-multiline-listing))
- ;; :help "If `t', indents to 1\+ column of opening delimiter. If `nil', indent adds one level to the beginning of statement. Default is `nil'. Use `M-x customize-variable' to set it permanently"
- ;; :style toggle :selected py-indent-honors-multiline-listing]
-
- ["Indent comment "
- (setq py-indent-comments
- (not py-indent-comments))
- :help "If comments should be indented like code. Default is `nil'.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-indent-comments]
-
- ["Uncomment indents "
- (setq py-uncomment-indents-p
- (not py-uncomment-indents-p))
- :help "When non-nil, after uncomment indent lines. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-uncomment-indents-p]
-
- ["Indent honors inline comment"
- (setq py-indent-honors-inline-comment
- (not py-indent-honors-inline-comment))
- :help "If non-nil, indents to column of inlined comment start.
-Default is nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-indent-honors-inline-comment]
-
- ["Kill empty line"
- (setq py-kill-empty-line
- (not py-kill-empty-line))
- :help "If t, py-indent-forward-line kills empty lines. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-kill-empty-line]
-
- ("Smart indentation"
- :help "Toggle py-smart-indentation'
-
-Use `M-x customize-variable' to set it permanently"
-
- ["Toggle py-smart-indentation" toggle-py-smart-indentation
- :help "Toggles py-smart-indentation
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["py-smart-indentation on" py-smart-indentation-on
- :help "Switches py-smart-indentation on
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["py-smart-indentation off" py-smart-indentation-off
- :help "Switches py-smart-indentation off
-
-Use `M-x customize-variable' to set it permanently"])
-
- ["Beep if tab change"
- (setq py-beep-if-tab-change
- (not py-beep-if-tab-change))
- :help "Ring the bell if `tab-width' is changed.
-If a comment of the form
-
- # vi:set tabsize=<number>:
-
-is found before the first code line when the file is entered, and the
-current value of (the general Emacs variable) `tab-width' does not
-equal <number>, `tab-width' is set to <number>, a message saying so is
-displayed in the echo area, and if `py-beep-if-tab-change' is non-nil
-the Emacs bell is also rung as a warning.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-beep-if-tab-change]
-
- ["Electric comment "
- (setq py-electric-comment-p
- (not py-electric-comment-p))
- :help "If \"#\" should call `py-electric-comment'. Default is `nil'.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-comment-p]
-
- ["Electric comment add space "
- (setq py-electric-comment-add-space-p
- (not py-electric-comment-add-space-p))
- :help "If py-electric-comment should add a space. Default is `nil'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-electric-comment-add-space-p]
-
- ["Empty line closes "
- (setq py-empty-line-closes-p
- (not py-empty-line-closes-p))
- :help "When non-nil, dedent after empty line following block
-
-if True:
- print(\"Part of the if-statement\")
-
-print(\"Not part of the if-statement\")
-
-Default is nil
-
-If non-nil, a C-j from empty line dedents.
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-empty-line-closes-p])
- ["Defun use top level "
- (setq py-defun-use-top-level-p
- (not py-defun-use-top-level-p))
- :help "When non-nil, keys C-M-a, C-M-e address top-level form.
-
-Beginning- end-of-defun forms use
-commands `py-beginning-of-top-level', `py-end-of-top-level'
-
-mark-defun marks top-level form at point etc. "
- :style toggle :selected py-defun-use-top-level-p]
-
- ["Close provides newline"
- (setq py-close-provides-newline
- (not py-close-provides-newline))
- :help "If a newline is inserted, when line after block isn't empty. Default is non-nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-close-provides-newline]
-
- ["Block comment prefix "
- (setq py-block-comment-prefix-p
- (not py-block-comment-prefix-p))
- :help "If py-comment inserts py-block-comment-prefix.
-
-Default is tUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-block-comment-prefix-p])
-
- ("Display"
-
- ("Index"
-
- ["Imenu create index "
- (setq py--imenu-create-index-p
- (not py--imenu-create-index-p))
- :help "Non-nil means Python mode creates and displays an index menu of functions and global variables. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py--imenu-create-index-p]
-
- ["Imenu show method args "
- (setq py-imenu-show-method-args-p
- (not py-imenu-show-method-args-p))
- :help "Controls echoing of arguments of functions & methods in the Imenu buffer.
-When non-nil, arguments are printed.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-imenu-show-method-args-p]
- ["Switch index-function" py-switch-imenu-index-function
- :help "`py-switch-imenu-index-function'
-Switch between `py--imenu-create-index' from 5.1 series and `py--imenu-create-index-new'."])
-
- ("Fontification"
-
- ["Mark decorators"
- (setq py-mark-decorators
- (not py-mark-decorators))
- :help "If py-mark-def-or-class functions should mark decorators too. Default is `nil'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-mark-decorators]
-
- ["Fontify shell buffer "
- (setq py-fontify-shell-buffer-p
- (not py-fontify-shell-buffer-p))
- :help "If code in Python shell should be highlighted as in script buffer.
-
-Default is nil.
-
-If `t', related vars like `comment-start' will be set too.
-Seems convenient when playing with stuff in IPython shell
-Might not be TRT when a lot of output arrives Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-fontify-shell-buffer-p]
-
- ["Use font lock doc face "
- (setq py-use-font-lock-doc-face-p
- (not py-use-font-lock-doc-face-p))
- :help "If documention string inside of def or class get `font-lock-doc-face'.
-
-`font-lock-doc-face' inherits `font-lock-string-face'.
-
-Call M-x `customize-face' in order to have a visible effect. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-font-lock-doc-face-p])
-
- ["Switch buffers on execute"
- (setq py-switch-buffers-on-execute-p
- (not py-switch-buffers-on-execute-p))
- :help "When non-nil switch to the Python output buffer.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-switch-buffers-on-execute-p]
-
- ["Split windows on execute"
- (setq py-split-window-on-execute
- (not py-split-window-on-execute))
- :help "When non-nil split windows.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-split-window-on-execute]
-
- ["Keep windows configuration"
- (setq py-keep-windows-configuration
- (not py-keep-windows-configuration))
- :help "If a windows is splitted displaying results, this is directed by variable `py-split-window-on-execute'\. Also setting `py-switch-buffers-on-execute-p' affects window-configuration\. While commonly a screen splitted into source and Python-shell buffer is assumed, user may want to keep a different config\.
-
-Setting `py-keep-windows-configuration' to `t' will restore windows-config regardless of settings mentioned above\. However, if an error occurs, it's displayed\.
-
-To suppres window-changes due to error-signaling also: M-x customize-variable RET. Set `py-keep-4windows-configuration' onto 'force
-
-Default is nil Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-keep-windows-configuration]
-
- ["Which split windows on execute function"
- (progn
- (if (eq 'split-window-vertically py-split-windows-on-execute-function)
- (setq py-split-windows-on-execute-function'split-window-horizontally)
- (setq py-split-windows-on-execute-function 'split-window-vertically))
- (message "py-split-windows-on-execute-function set to: %s" py-split-windows-on-execute-function))
-
- :help "If `split-window-vertically' or `...-horizontally'. Use `M-x customize-variable' RET `py-split-windows-on-execute-function' RET to set it permanently"
- :style toggle :selected py-split-windows-on-execute-function]
-
- ["Modeline display full path "
- (setq py-modeline-display-full-path-p
- (not py-modeline-display-full-path-p))
- :help "If the full PATH/TO/PYTHON should be displayed in shell modeline.
-
-Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-modeline-display-full-path-p]
-
- ["Modeline acronym display home "
- (setq py-modeline-acronym-display-home-p
- (not py-modeline-acronym-display-home-p))
- :help "If the modeline acronym should contain chars indicating the home-directory.
-
-Default is nil Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-modeline-acronym-display-home-p]
-
- ["Hide show hide docstrings"
- (setq py-hide-show-hide-docstrings
- (not py-hide-show-hide-docstrings))
- :help "Controls if doc strings can be hidden by hide-showUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-hide-show-hide-docstrings]
-
- ["Hide comments when hiding all"
- (setq py-hide-comments-when-hiding-all
- (not py-hide-comments-when-hiding-all))
- :help "Hide the comments too when you do `hs-hide-all'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-hide-comments-when-hiding-all]
-
- ["Max help buffer "
- (setq py-max-help-buffer-p
- (not py-max-help-buffer-p))
- :help "If \"\*Python-Help\*\"-buffer should appear as the only visible.
-
-Default is nil. In help-buffer, \"q\" will close it. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-max-help-buffer-p]
-
- ["Current defun show"
- (setq py-current-defun-show
- (not py-current-defun-show))
- :help "If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position.
-
-Default is `t'.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-current-defun-show]
-
- ["Match paren mode"
- (setq py-match-paren-mode
- (not py-match-paren-mode))
- :help "Non-nil means, cursor will jump to beginning or end of a block.
-This vice versa, to beginning first.
-Sets `py-match-paren-key' in python-mode-map.
-Customize `py-match-paren-key' which key to use. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-match-paren-mode])
-
- ("Debug"
-
- ["py-debug-p"
- (setq py-debug-p
- (not py-debug-p))
- :help "When non-nil, keep resp\. store information useful for debugging\.
-
-Temporary files are not deleted\. Other functions might implement
-some logging etc\. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-debug-p]
-
- ["Pdbtrack do tracking "
- (setq py-pdbtrack-do-tracking-p
- (not py-pdbtrack-do-tracking-p))
- :help "Controls whether the pdbtrack feature is enabled or not.
-When non-nil, pdbtrack is enabled in all comint-based buffers,
-e.g. shell buffers and the \*Python\* buffer. When using pdb to debug a
-Python program, pdbtrack notices the pdb prompt and displays the
-source file and line that the program is stopped at, much the same way
-as gud-mode does for debugging C programs with gdb.Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-pdbtrack-do-tracking-p]
-
- ["Jump on exception"
- (setq py-jump-on-exception
- (not py-jump-on-exception))
- :help "Jump to innermost exception frame in Python output buffer.
-When this variable is non-nil and an exception occurs when running
-Python code synchronously in a subprocess, jump immediately to the
-source code of the innermost traceback frame.
-
-Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-jump-on-exception]
-
- ["Highlight error in source "
- (setq py-highlight-error-source-p
- (not py-highlight-error-source-p))
- :help "Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-highlight-error-source-p])
-
- ("Other"
-
- ("Directory"
-
- ["Guess install directory "
- (setq py-guess-py-install-directory-p
- (not py-guess-py-install-directory-p))
- :help "If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-guess-py-install-directory-p]
-
- ["Use local default"
- (setq py-use-local-default
- (not py-use-local-default))
- :help "If `t', py-shell will use `py-shell-local-path' instead
-of default Python.
-
-Making switch between several virtualenv's easier,
- `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-local-default]
-
- ["Use current dir when execute "
- (setq py-use-current-dir-when-execute-p
- (not py-use-current-dir-when-execute-p))
- :help "When `t', current directory is used by Python-shell for output of `py-execute-buffer' and related commands.
-
-See also `py-execute-directory'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-use-current-dir-when-execute-p]
-
- ["Keep shell dir when execute "
- (setq py-keep-shell-dir-when-execute-p
- (not py-keep-shell-dir-when-execute-p))
- :help "Don't change Python shell's current working directory when sending code.
-
-See also `py-execute-directory'Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-keep-shell-dir-when-execute-p]
-
- ["Fileless buffer use default directory "
- (setq py-fileless-buffer-use-default-directory-p
- (not py-fileless-buffer-use-default-directory-p))
- :help "When `py-use-current-dir-when-execute-p' is non-nil and no buffer-file exists, value of `default-directory' sets current working directory of Python output shellUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-fileless-buffer-use-default-directory-p])
-
- ("Underscore word syntax"
- :help "Toggle `py-underscore-word-syntax-p'"
-
- ["Toggle underscore word syntax" toggle-py-underscore-word-syntax-p
- :help " `toggle-py-underscore-word-syntax-p'
-
-If `py-underscore-word-syntax-p' should be on or off.
-
- Returns value of `py-underscore-word-syntax-p' switched to. .
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["Underscore word syntax on" py-underscore-word-syntax-p-on
- :help " `py-underscore-word-syntax-p-on'
-
-Make sure, py-underscore-word-syntax-p' is on.
-
-Returns value of `py-underscore-word-syntax-p'. .
-
-Use `M-x customize-variable' to set it permanently"]
-
- ["Underscore word syntax off" py-underscore-word-syntax-p-off
- :help " `py-underscore-word-syntax-p-off'
-
-Make sure, `py-underscore-word-syntax-p' is off.
-
-Returns value of `py-underscore-word-syntax-p'. .
-
-Use `M-x customize-variable' to set it permanently"])
-
- ["Load pymacs "
- (setq py-load-pymacs-p
- (not py-load-pymacs-p))
- :help "If Pymacs related stuff should be loaded.
-
-Default is nil.
-
-Pymacs has been written by François Pinard and many others.
-See original source: http://pymacs.progiciels-bpi.caUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-load-pymacs-p]
-
- ["Verbose "
- (setq py-verbose-p
- (not py-verbose-p))
- :help "If functions should report results.
-
-Default is nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-verbose-p]
-
- ["Empty comment line separates paragraph "
- (setq py-empty-comment-line-separates-paragraph-p
- (not py-empty-comment-line-separates-paragraph-p))
- :help "Consider paragraph start/end lines with nothing inside but comment sign.
-
-Default is non-nilUse `M-x customize-variable' to set it permanently"
- :style toggle :selected py-empty-comment-line-separates-paragraph-p]
-
- ["Org cycle "
- (setq py-org-cycle-p
- (not py-org-cycle-p))
- :help "When non-nil, command `org-cycle' is available at shift-TAB, <backtab>
-
-Default is nil. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-org-cycle-p]
-
- ["Set pager cat"
- (setq py-set-pager-cat-p
- (not py-set-pager-cat-p))
- :help "If the shell environment variable \$PAGER should set to `cat'.
-
-If `t', use `C-c C-r' to jump to beginning of output. Then scroll normally.
-
-Avoids lp:783828, \"Terminal not fully functional\", for help('COMMAND') in python-shell
-
-When non-nil, imports module `os' Use `M-x customize-variable' to
-set it permanently"
- :style toggle :selected py-set-pager-cat-p]
-
- ["Edit only "
- (setq py-edit-only-p
- (not py-edit-only-p))
- :help "When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil.
-
-See bug report at launchpad, lp:944093. Use `M-x customize-variable' to set it permanently"
- :style toggle :selected py-edit-only-p])))
- ("Other"
- ["Boolswitch" py-boolswitch
- :help " `py-boolswitch'
-Edit the assignment of a boolean variable, revert them.
-
-I.e. switch it from \"True\" to \"False\" and vice versa"]
-
- ["Empty out list backward" py-empty-out-list-backward
- :help " `py-empty-out-list-backward'
-Deletes all elements from list before point."]
-
- ["Kill buffer unconditional" py-kill-buffer-unconditional
- :help " `py-kill-buffer-unconditional'
-Kill buffer unconditional, kill buffer-process if existing."]
-
- ["Remove overlays at point" py-remove-overlays-at-point
- :help " `py-remove-overlays-at-point'
-Remove overlays as set when `py-highlight-error-source-p' is non-nil."]
- ("Electric"
- ["Complete electric comma" py-complete-electric-comma
- :help " `py-complete-electric-comma'"]
-
- ["Complete electric lparen" py-complete-electric-lparen
- :help " `py-complete-electric-lparen'"]
-
- ["Electric backspace" py-electric-backspace
- :help " `py-electric-backspace'
-Delete preceding character or level of indentation.
-
-With ARG do that ARG times.
-Returns column reached."]
-
- ["Electric colon" py-electric-colon
- :help " `py-electric-colon'
-Insert a colon and indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-
-Electric behavior is inhibited inside a string or
-comment or by universal prefix C-u.
-
-Switched by `py-electric-colon-active-p', default is nil
-See also `py-electric-colon-greedy-p'"]
-
- ["Electric comment" py-electric-comment
- :help " `py-electric-comment'
-Insert a comment. If starting a comment, indent accordingly.
-
-If a numeric argument ARG is provided, that many \"#\" are inserted
-non-electrically.
-With C-u \"#\" electric behavior is inhibited inside a string or comment."]
-
- ["Electric delete" py-electric-delete
- :help " `py-electric-delete'
-Delete following character or levels of whitespace.
-
-With ARG do that ARG times."]
-
- ["Electric yank" py-electric-yank
- :help " `py-electric-yank'
-Perform command `yank' followed by an `indent-according-to-mode'"]
-
- ["Hungry delete backwards" py-hungry-delete-backwards
- :help " `py-hungry-delete-backwards'
-Delete the preceding character or all preceding whitespace
-back to the previous non-whitespace character.
-See also C-c <delete>."]
-
- ["Hungry delete forward" py-hungry-delete-forward
- :help " `py-hungry-delete-forward'
-Delete the following character or all following whitespace
-up to the next non-whitespace character.
-See also C-c <C-backspace>."]
- )
- ("Abbrevs" :help "see also `py-add-abbrev'"
- :filter (lambda (&rest junk)
- (abbrev-table-menu python-mode-abbrev-table)) )
-
- ["Add abbrev" py-add-abbrev
- :help " `py-add-abbrev'
-Defines python-mode specific abbrev for last expressions before point.
-Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion.
-
-Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev.
-Proposal is composed from the initial character(s) of the
-expansion.
-
-Don't use this function in a Lisp program; use `define-abbrev' instead."]
- ("Completion"
- ["Py indent or complete" py-indent-or-complete
- :help " `py-indent-or-complete'"]
-
- ["Py shell complete" py-shell-complete
- :help " `py-shell-complete'"]
-
- ["Py complete" py-complete
- :help " `py-complete'"]
- )))))
-
-;; python-components-foot
-
-(defun py-shell-fontify ()
- "Fontifies input in shell buffer. "
- ;; causes delay in fontification until next trigger
- ;; (unless (or (member (char-before) (list 32 ?: ?\)))
- ;; (unless (and (eq last-command 'self-insert-command) (eq (char-before) 32))
- ;; (< (abs (save-excursion (skip-chars-backward "^ \t\r\n\f"))) 2))
- (let* ((pps (parse-partial-sexp (line-beginning-position) (point)))
- (start (if (and (nth 8 pps) (nth 1 pps))
- (max (nth 1 pps) (nth 8 pps))
- (or (nth 1 pps) (nth 8 pps)))))
- (when (or start
- (setq start (ignore-errors (cdr comint-last-prompt))))
- (let* ((input (buffer-substring-no-properties
- start (point-max)))
- (buffer-undo-list t)
- (replacement
- (save-current-buffer
- (set-buffer py-shell--font-lock-buffer)
- (erase-buffer)
- (insert input)
- ;; Ensure buffer is fontified, keeping it
- ;; compatible with Emacs < 24.4.
- (if (fboundp 'font-lock-ensure)
- (funcall 'font-lock-ensure)
- (font-lock-default-fontify-buffer))
- (buffer-substring (point-min) (point-max))))
- (replacement-length (length replacement))
- (i 0))
- ;; Inject text properties to get input fontified.
- (while (not (= i replacement-length))
- (let* ((plist (text-properties-at i replacement))
- (next-change (or (next-property-change i replacement)
- replacement-length))
- (plist (let ((face (plist-get plist 'face)))
- (if (not face)
- plist
- ;; Replace FACE text properties with
- ;; FONT-LOCK-FACE so input is fontified.
- (plist-put plist 'face nil)
- (plist-put plist 'font-lock-face face)))))
- (set-text-properties
- (+ start i) (+ start next-change) plist)
- (setq i next-change)))))))
-
-(defun py-message-which-python-mode ()
- (if (buffer-file-name)
- (if (string= "python-mode-el" (buffer-file-name))
- (message "%s" "python-mode loaded from python-mode-el")
- (message "%s" "python-mode loaded from python-components-mode"))
- (message "python-mode loaded from: %s" python-mode-message-string)))
-
-(defalias 'IPython 'ipython)
-(defalias 'Ipython 'ipython)
-(defalias 'Python 'python)
-(defalias 'Python2 'python2)
-(defalias 'Python3 'python3)
-(defalias 'ipy 'ipython)
-(defalias 'iyp 'ipython)
-(defalias 'py-execute-region-default 'py-execute-region)
-(defalias 'py-execute-region-default-dedicated 'py-execute-region-dedicated)
-(defalias 'py-kill-minor-expression 'py-kill-partial-expression)
-(defalias 'pyhotn 'python)
-(defalias 'pyhton 'python)
-(defalias 'pyt 'python)
-(defalias 'py3 'python3)
-(defalias 'py2 'python2)
-(defalias 'py-beginning-of-block 'py-backward-block)
-(defalias 'py-beginning-of-block-bol 'py-backward-block-bol)
-(defalias 'py-beginning-of-block-or-clause 'py-backward-block-or-clause)
-(defalias 'py-beginning-of-class 'py-backward-class)
-(defalias 'py-beginning-of-class-bol 'py-backward-class-bol)
-(defalias 'py-beginning-of-clause 'py-backward-clause)
-(defalias 'py-beginning-of-clause-bol 'py-backward-clause-bol)
-(defalias 'py-beginning-of-comment 'py-backward-comment)
-(defalias 'py-beginning-of-declarations 'py-backward-declarations)
-(defalias 'py-beginning-of-decorator 'py-backward-decorator)
-(defalias 'py-beginning-of-decorator-bol 'py-backward-decorator)
-(defalias 'py-beginning-of-def-or-class 'py-backward-def-or-class)
-(defalias 'py-beginning-of-expression 'py-backward-expression)
-(defalias 'py-beginning-of-line 'py-backward-line)
-(defalias 'py-beginning-of-minor-block 'py-backward-minor-block)
-(defalias 'py-beginning-of-partial-expression 'py-backward-partial-expression)
-(defalias 'py-beginning-of-section 'py-backward-section)
-(defalias 'py-beginning-of-statement 'py-backward-statement)
-(defalias 'py-beginning-of-statement-bol 'py-backward-statement-bol)
-(defalias 'py-beginning-of-top-level 'py-backward-top-level)
-(defalias 'py-end-of-block 'py-forward-block)
-(defalias 'py-end-of-block-or-clause 'py-forward-block-or-clause)
-(defalias 'py-end-of-class 'py-forward-class)
-(defalias 'py-end-of-clause 'py-forward-clause)
-(defalias 'py-end-of-comment 'py-forward-comment)
-(defalias 'py-end-of-decorator 'py-forward-decorator)
-(defalias 'py-end-of-def-or-class 'py-forward-def-or-class)
-(defalias 'py-end-of-expression 'py-forward-expression)
-(defalias 'py-end-of-line 'py-forward-line)
-(defalias 'py-end-of-partial-expression 'py-forward-partial-expression)
-(defalias 'py-end-of-section 'py-forward-section)
-(defalias 'py-end-of-statement 'py-forward-statement)
-(defalias 'py-end-of-statement-bol 'py-forward-statement-bol)
-(defalias 'py-end-of-top-level 'py-forward-top-level)
-(defalias 'py-next-statement 'py-forward-statement)
-(defalias 'py-markup-region-as-section 'py-sectionize-region)
-(defalias 'py-up 'py-up-block)
-(defalias 'py-count-indentation 'py-compute-indentation)
-
-;;;###autoload
-(define-derived-mode py-auto-completion-mode python-mode "Pac"
- "Run auto-completion"
- ;; disable company
- ;; (when company-mode (company-mode))
- (if py-auto-completion-mode-p
- (progn
- (setq py-auto-completion-mode-p nil
- py-auto-completion-buffer nil)
- (when (timerp py--auto-complete-timer)(cancel-timer py--auto-complete-timer)))
- (setq py-auto-completion-mode-p t
- py-auto-completion-buffer (current-buffer))
- (setq py--auto-complete-timer
- (run-with-idle-timer
- py--auto-complete-timer-delay
- ;; 1
- t
- #'py-complete-auto)))
- (force-mode-line-update))
-
-(autoload 'python-mode "python-mode" "Python Mode." t)
-
-(defun all-mode-setting ()
- (set (make-local-variable 'indent-tabs-mode) py-indent-tabs-mode)
- (set (make-local-variable 'eldoc-message-function) 'py-help-at-point)
-
- )
-
-;;;###autoload
-(define-derived-mode python-mode prog-mode python-mode-modeline-display
- "Major mode for editing Python files.
-
-To submit a problem report, enter `\\[py-submit-bug-report]' from a
-`python-mode' buffer. Do `\\[py-describe-mode]' for detailed
-documentation. To see what version of `python-mode' you are running,
-enter `\\[py-version]'.
-
-This mode knows about Python indentation, tokens, comments and
-continuation lines. Paragraphs are separated by blank lines only.
-
-COMMANDS
-
-`py-shell'\tStart an interactive Python interpreter in another window
-`py-execute-statement'\tSend statement at point to Python default interpreter
-`py-backward-statement'\tGo to the initial line of a simple statement
-
-etc.
-
-See available commands listed in files commands-python-mode at directory doc
-
-VARIABLES
-
-`py-indent-offset' indentation increment
-`py-shell-name' shell command to invoke Python interpreter
-`py-split-window-on-execute' When non-nil split windows
-`py-switch-buffers-on-execute-p' When non-nil switch to the Python output buffer
-
-See available customizations listed in files variables-python-mode at directory doc
-
-\\{python-mode-map}"
- :group 'python-mode
- ;; load known shell listed in
- ;; Local vars
- (all-mode-setting)
- (set (make-local-variable 'electric-indent-inhibit) nil)
- (set (make-local-variable 'outline-regexp)
- (concat (mapconcat 'identity
- (mapcar #'(lambda (x) (concat "^\\s-*" x "\\_>"))
- py-outline-mode-keywords)
- "\\|")))
- (when (>= emacs-major-version 25)
- (global-eldoc-mode -1)
- (eldoc-mode py-eldoc-mode-p))
- (when py-font-lock-defaults-p
- (if py-use-font-lock-doc-face-p
- (set (make-local-variable 'font-lock-defaults)
- '(python-font-lock-keywords nil nil nil nil
- (font-lock-syntactic-keywords
- . py-font-lock-syntactic-keywords)
- (font-lock-syntactic-face-function
- . py--font-lock-syntactic-face-function)))
- (set (make-local-variable 'font-lock-defaults)
- '(python-font-lock-keywords nil nil nil nil
- (font-lock-syntactic-keywords
- . py-font-lock-syntactic-keywords)))))
- ;; avoid to run py-choose-shell again from `py--fix-start'
- (cond ((string-match "ython3" py-python-edit-version)
- (font-lock-add-keywords 'python-mode
- '(("\\<print\\>" . 'py-builtins-face)
- ("\\<file\\>" . nil))))
- (t (font-lock-add-keywords 'python-mode
- '(("\\<print\\>" . 'font-lock-keyword-face)
- ("\\<file\\>" . 'py-builtins-face)))))
- (set (make-local-variable 'which-func-functions) 'py-which-def-or-class)
- (set (make-local-variable 'parse-sexp-lookup-properties) t)
- (set (make-local-variable 'comment-use-syntax) t)
- (set (make-local-variable 'comment-start) "#")
- (set (make-local-variable 'comment-start-skip) "^[ \t]*#+ *")
-
- (if py-empty-comment-line-separates-paragraph-p
- (progn
- (set (make-local-variable 'paragraph-separate) (concat "\f\\|^[\t]*$\\|^[ \t]*" comment-start "[ \t]*$\\|^[\t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$"))
- (set (make-local-variable 'paragraph-start)
- (concat "\f\\|^[ \t]*$\\|^[ \t]*" comment-start "[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$"))
- (set (make-local-variable 'paragraph-separate)
- (concat "\f\\|^[ \t]*$\\|^[ \t]*" comment-start "[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$")))
- (set (make-local-variable 'paragraph-separate) "\f\\|^[ \t]*$\\|^[\t]*#[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$")
- (set (make-local-variable 'paragraph-start) "\f\\|^[ \t]*$\\|^[\t]*#[ \t]*$\\|^[ \t\f]*:[[:alpha:]]+ [[:alpha:]]+:.+$"))
- (set (make-local-variable 'comment-column) 40)
- (set (make-local-variable 'comment-indent-function) #'py--comment-indent-function)
- (set (make-local-variable 'indent-region-function) 'py-indent-region)
- (set (make-local-variable 'indent-line-function) 'py-indent-line)
- ;; introduced to silence compiler warning, no real setting
- ;; (set (make-local-variable 'hs-hide-comments-when-hiding-all) 'py-hide-comments-when-hiding-all)
- (set (make-local-variable 'outline-heading-end-regexp) ":[^\n]*\n")
- (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil)
- (set (make-local-variable 'add-log-current-defun-function) 'py-current-defun)
- (set (make-local-variable 'fill-paragraph-function) 'py-fill-paragraph)
- (set (make-local-variable 'normal-auto-fill-function) 'py-fill-string-or-comment)
- (set (make-local-variable 'require-final-newline) mode-require-final-newline)
- (set (make-local-variable 'tab-width) py-indent-offset)
- (set (make-local-variable 'eldoc-documentation-function) 'py-eldoc-function)
- (and py-load-skeletons-p
- (py-load-skeletons)
- (set (make-local-variable 'skeleton-further-elements)
- '((< '(backward-delete-char-untabify (min py-indent-offset
- (current-column))))
- (^ '(- (1+ (current-indentation)))))))
- (and py-guess-py-install-directory-p (py-set-load-path))
- (and py-autopair-mode
- (load-library "autopair")
- (add-hook 'python-mode-hook
- #'(lambda ()
- (setq autopair-handle-action-fns
- (list #'autopair-default-handle-action
- #'autopair-python-triple-quote-action))))
- (py-autopair-mode-on))
- (when (and py--imenu-create-index-p
- (fboundp 'imenu-add-to-menubar)
- (ignore-errors (require 'imenu)))
- (setq imenu-create-index-function 'py--imenu-create-index-function)
- (setq imenu--index-alist (funcall py--imenu-create-index-function))
- ;; fallback
- (unless imenu--index-alist
- (setq imenu--index-alist (py--imenu-create-index-new)))
- ;; (message "imenu--index-alist: %s" imenu--index-alist)
- (imenu-add-to-menubar "PyIndex"))
- (when py-trailing-whitespace-smart-delete-p
- (add-hook 'before-save-hook 'delete-trailing-whitespace nil 'local))
- ;; this should go into interactive modes
- ;; (when py-pdbtrack-do-tracking-p
- ;; (add-hook 'comint-output-filter-functions 'py--pdbtrack-track-stack-file))
- (py-shell-prompt-set-calculated-regexps)
- (setq comint-prompt-regexp py-shell--prompt-calculated-input-regexp)
- (cond
- (py-complete-function
- (add-hook 'completion-at-point-functions
- py-complete-function nil 'local))
- (py-load-pymacs-p
- (add-hook 'completion-at-point-functions
- 'py-complete-completion-at-point nil 'local))
- (t
- (add-hook 'completion-at-point-functions
- 'py-shell-complete nil 'local)))
- ;; #'python-shell-completion-at-point nil 'local)))
- ;; (if py-auto-complete-p
- ;; (add-hook 'python-mode-hook 'py--run-completion-timer)
- ;; (remove-hook 'python-mode-hook 'py--run-completion-timer))
- ;; (when py-auto-complete-p
- ;; (add-hook 'python-mode-hook
- ;; (lambda ()
- ;; (run-with-idle-timer 1 t 'py-shell-complete))))
- (if py-auto-fill-mode
- (add-hook 'python-mode-hook 'py--run-auto-fill-timer)
- (remove-hook 'python-mode-hook 'py--run-auto-fill-timer))
-
- ;; caused insert-file-contents error lp:1293172
- ;; (add-hook 'after-change-functions 'py--after-change-function nil t)
- (if py-defun-use-top-level-p
- (progn
- (set (make-local-variable 'beginning-of-defun-function) 'py-backward-top-level)
- (set (make-local-variable 'end-of-defun-function) 'py-end-of-top-level)
- (define-key python-mode-map [(control meta a)] 'py-backward-top-level)
- (define-key python-mode-map [(control meta e)] 'py-end-of-top-level))
- (set (make-local-variable 'beginning-of-defun-function) 'py-backward-def-or-class)
- (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class)
- (define-key python-mode-map [(control meta a)] 'py-backward-def-or-class)
- (define-key python-mode-map [(control meta e)] 'py-end-of-def-or-class))
- (when py-sexp-use-expression-p
- (define-key python-mode-map [(control meta f)] 'py-forward-expression)
- (define-key python-mode-map [(control meta b)] 'py-backward-expression))
-
- (when py-hide-show-minor-mode-p (hs-minor-mode 1))
- (when py-outline-minor-mode-p (outline-minor-mode 1))
- (when (interactive-p)
- (py-message-which-python-mode))
- (force-mode-line-update))
-
-(define-derived-mode py-shell-mode comint-mode py-modeline-display
- "Major mode for Python shell process.
-
-Variables
-`py-shell-prompt-regexp',
-`py-shell-prompt-output-regexp',
-`py-shell-input-prompt-2-regexp',
-`py-shell-fontify-p',
-`py-completion-setup-code',
-`py-shell-completion-string-code',
-`py-python-eldoc-setup-code', `py-python-eldoc-string-code',
-`py-python-ffap-setup-code' and `py-python-ffap-string-code' can
-customize this mode for different Python interpreters.
-
-This mode resets `comint-output-filter-functions' locally, so you
-may want to re-add custom functions to it using the
-`py-shell-mode-hook'.
-
-\(Type \\[describe-mode] in the process buffer for a list of commands.)"
- (setq mode-line-process '(":%s"))
- (all-mode-setting)
- ;; (set (make-local-variable 'indent-tabs-mode) nil)
- (set (make-local-variable 'py-shell--prompt-calculated-input-regexp) nil)
- (set (make-local-variable 'py-shell--block-prompt) nil)
- (set (make-local-variable 'py-shell--prompt-calculated-output-regexp) nil)
- (py-shell-prompt-set-calculated-regexps)
- (set (make-local-variable 'comint-prompt-read-only) t)
- (set (make-local-variable 'comint-output-filter-functions)
- '(ansi-color-process-output
- py-comint-watch-for-first-prompt-output-filter
- py-pdbtrack-comint-output-filter-function
- py-comint-postoutput-scroll-to-bottom
- comint-watch-for-password-prompt))
- (set (make-local-variable 'compilation-error-regexp-alist)
- py-shell-compilation-regexp-alist)
- (compilation-shell-minor-mode 1)
- (add-hook 'completion-at-point-functions
- #'py-shell-completion-at-point nil 'local)
- (cond
- ((string-match "^[Jj]" (process-name (get-buffer-process (current-buffer))))
- 'indent-for-tab-command)
- (t
- (define-key py-shell-mode-map "\t"
- 'py-indent-or-complete)))
- (make-local-variable 'py-pdbtrack-buffers-to-kill)
- (make-local-variable 'py-shell-fast-last-output)
- (set (make-local-variable 'py-shell--block-prompt) nil)
- (set (make-local-variable 'py-shell--prompt-calculated-output-regexp) nil)
- (py-shell-prompt-set-calculated-regexps)
- (if py-shell-fontify-p
- (progn
- (py-shell-font-lock-turn-on))
- (py-shell-font-lock-turn-off)))
-
-;;;
-(provide 'python-mode)
-;;; python-mode.el ends here
diff --git a/emacs.d/elpa/reformatter-20210510.522/reformatter-autoloads.el b/emacs.d/elpa/reformatter-20210510.522/reformatter-autoloads.el
deleted file mode 100644
index 68bfb7a..0000000
--- a/emacs.d/elpa/reformatter-20210510.522/reformatter-autoloads.el
+++ /dev/null
@@ -1,119 +0,0 @@
-;;; reformatter-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "reformatter" "reformatter.el" (0 0 0 0))
-;;; Generated autoloads from reformatter.el
-
-(autoload 'reformatter-define "reformatter" "\
-Define a reformatter command with NAME.
-
-When called, the reformatter will use PROGRAM and any ARGS to
-reformat the current buffer. The contents of the buffer will be
-passed as standard input to the reformatter, which should output
-them to standard output. A nonzero exit code will be reported as
-failure, and the output of the command to standard error will be
-displayed to the user.
-
-The macro accepts the following keyword arguments:
-
-PROGRAM (required)
-
- Provides a form which should evaluate to a string at runtime,
- e.g. a literal string, or the name of a variable which holds
- the program path.
-
-ARGS
-
- Command-line arguments for the program. If provided, this is a
- form which evaluates to a list of strings at runtime. Default
- is the empty list. This form is evaluated at runtime so that
- you can use buffer-local variables to influence the args passed
- to the reformatter program: the variable `input-file' will be
- lexically bound to the path of a file containing the text to be
- reformatted: see the keyword options INPUT-FILE, STDIN and
- STDOUT for more information.
-
-STDIN
-
- When non-nil (the default), the program is passed the input
- data on stdin. Set this to nil when your reformatter can only
- operate on files in place. In such a case, your ARGS should
- include a reference to the `input-file' variable, which will be
- bound to an input path when evaluated.
-
-STDOUT
-
- When non-nil (the default), the program is expected to write
- the reformatted text to stdout. Set this to nil if your
- reformatter can only operate on files in place, in which case
- the contents of the temporary input file will be used as the
- replacement text.
-
-INPUT-FILE
-
- Sometimes your reformatter program might expect files to be in
- a certain directory or have a certain file extension. This option
- lets you handle that.
-
- If provided, it is a form which will be evaluated before each
- run of the formatter, and is expected to return a temporary
- file path suitable for holding the region to be reformatted.
- It must not produce the same path as the current buffer's file
- if that is set: you shouldn't be operating directly on the
- buffer's backing file. The temporary input file will be
- deleted automatically. You might find the function
- `reformatter-temp-file-in-current-directory' helpful.
-
-MODE
-
- Unless nil, also generate a minor mode that will call the
- reformatter command from `before-save-hook' when enabled.
- Default is t.
-
-GROUP
-
- If provided, this is the custom group used for any generated
- modes or custom variables. Don't forget to declare this group
- using a `defgroup' form.
-
-LIGHTER
-
- If provided, this is a mode lighter string which will be used
- for the \"-on-save\" minor mode. It should have a leading
- space. The supplied value will be used as the default for a
- generated custom variable which specifies the mode lighter.
- Default is nil, ie. no lighter.
-
-KEYMAP
-
- If provided, this is the symbol name of the \"-on-save\" mode's
- keymap, which you must declare yourself. Default is no keymap.
-
-EXIT-CODE-SUCCESS-P
-
- If provided, this is a function object callable with `funcall'
- which accepts an integer process exit code, and returns non-nil
- if that exit code is considered successful. This could be a
- lambda, quoted symbol or sharp-quoted symbol. If not supplied,
- the code is considered successful if it is `zerop'.
-
-\(fn NAME &key PROGRAM ARGS (MODE t) (STDIN t) (STDOUT t) INPUT-FILE LIGHTER KEYMAP GROUP (EXIT-CODE-SUCCESS-P \\='zerop))" nil t)
-
-(function-put 'reformatter-define 'lisp-indent-function 'defun)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "reformatter" '("reformatter-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; reformatter-autoloads.el ends here
diff --git a/emacs.d/elpa/reformatter-20210510.522/reformatter-pkg.el b/emacs.d/elpa/reformatter-20210510.522/reformatter-pkg.el
deleted file mode 100644
index bab2eef..0000000
--- a/emacs.d/elpa/reformatter-20210510.522/reformatter-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; Generated package description from reformatter-20210510.522/reformatter.el -*- no-byte-compile: t -*-
-(define-package "reformatter" "20210510.522" "Define commands which run reformatters on the current buffer" '((emacs "24.3")) :commit "e02a9ea94287f4195edeeab3033e017a56872f5b" :authors '(("Steve Purcell" . "steve@sanityinc.com")) :maintainer '("Steve Purcell" . "steve@sanityinc.com") :keywords '("convenience" "tools") :url "https://github.com/purcell/emacs-reformatter")
diff --git a/emacs.d/elpa/reformatter-20210510.522/reformatter.el b/emacs.d/elpa/reformatter-20210510.522/reformatter.el
deleted file mode 100644
index d33b892..0000000
--- a/emacs.d/elpa/reformatter-20210510.522/reformatter.el
+++ /dev/null
@@ -1,317 +0,0 @@
-;;; reformatter.el --- Define commands which run reformatters on the current buffer -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2019 Steve Purcell
-
-;; Author: Steve Purcell <steve@sanityinc.com>
-;; Keywords: convenience, tools
-;; Package-Commit: e02a9ea94287f4195edeeab3033e017a56872f5b
-;; Homepage: https://github.com/purcell/emacs-reformatter
-;; Package-Requires: ((emacs "24.3"))
-;; Package-Version: 20210510.522
-;; Package-X-Original-Version: 0
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This library lets elisp authors easily define an idiomatic command
-;; to reformat the current buffer using a command-line program,
-;; together with an optional minor mode which can apply this command
-;; automatically on save.
-
-;; By default, reformatter.el expects programs to read from stdin and
-;; write to stdout, and you should prefer this mode of operation where
-;; possible. If this isn't possible with your particular formatting
-;; program, refer to the options for `reformatter-define', and see the
-;; examples in the package's tests.
-
-;; As an example, let's define a reformat command that applies the
-;; "dhall format" command. We'll assume here that we've already defined a
-;; variable `dhall-command' which holds the string name or path of the
-;; dhall executable:
-
-;; (reformatter-define dhall-format
-;; :program dhall-command
-;; :args '("format"))
-
-;; The `reformatter-define' macro expands to code which generates
-;; `dhall-format-buffer' and `dhall-format-region' interactive
-;; commands, and a local minor mode called
-;; `dhall-format-on-save-mode'. The :args" and :program expressions
-;; will be evaluated at runtime, so they can refer to variables that
-;; may (later) have a buffer-local value. A custom variable will be
-;; generated for the mode lighter, with the supplied value becoming
-;; the default.
-
-;; The generated minor mode allows idiomatic per-directory or per-file
-;; customisation, via the "modes" support baked into Emacs' file-local
-;; and directory-local variables mechanisms. For example, users of
-;; the above example might add the following to a project-specific
-;; .dir-locals.el file:
-
-;; ((dhall-mode
-;; (mode . dhall-format-on-save)))
-
-;; See the documentation for `reformatter-define', which provides a
-;; number of options for customising the generated code.
-
-;; Library authors might like to provide autoloads for the generated
-;; code, e.g.:
-
-;; ;;;###autoload (autoload 'dhall-format-buffer "current-file" nil t)
-;; ;;;###autoload (autoload 'dhall-format-region "current-file" nil t)
-;; ;;;###autoload (autoload 'dhall-format-on-save-mode "current-file" nil t)
-
-;;; Code:
-(eval-when-compile
- (require 'cl-lib))
-(require 'ansi-color)
-
-(defun reformatter--do-region (name beg end program args stdin stdout input-file exit-code-success-p display-errors)
- "Do the work of reformatter called NAME.
-Reformats the current buffer's region from BEG to END using
-PROGRAM and ARGS. For args STDIN, STDOUT, INPUT-FILE,
-EXIT-CODE-SUCCESS-P and DISPLAY-ERRORS see the documentation of
-the `reformatter-define' macro."
- (cl-assert input-file)
- (cl-assert (functionp exit-code-success-p))
- (when (and input-file
- (buffer-file-name)
- (string= (file-truename input-file)
- (file-truename (buffer-file-name))))
- (error "The reformatter must not operate on the current file in-place"))
- (let* ((stderr-file (make-temp-file (symbol-name name)))
- (stdout-file (make-temp-file (symbol-name name)))
- ;; Setting this coding system might not universally be
- ;; the best default, but was apparently necessary for
- ;; some hand-rolled reformatter functions that this
- ;; library was written to replace.
- (coding-system-for-read 'utf-8)
- (coding-system-for-write 'utf-8))
- (unwind-protect
- (progn
- (write-region beg end input-file nil :quiet)
- (let* ((error-buffer (get-buffer-create (format "*%s errors*" name)))
- (retcode
- (apply 'call-process program
- (when stdin input-file)
- (list (list :file stdout-file) stderr-file)
- nil
- args)))
- (with-current-buffer error-buffer
- (let ((inhibit-read-only t))
- (insert-file-contents stderr-file nil nil nil t)
- (ansi-color-apply-on-region (point-min) (point-max)))
- (special-mode))
- (if (funcall exit-code-success-p retcode)
- (progn
- (save-restriction
- ;; This replacement method minimises
- ;; disruption to marker positions and the
- ;; undo list
- (narrow-to-region beg end)
- (reformatter-replace-buffer-contents-from-file (if stdout
- stdout-file
- input-file)))
- ;; If there are no errors then we hide the error buffer
- (delete-windows-on error-buffer))
- (if display-errors
- (display-buffer error-buffer)
- (message (concat (symbol-name name) " failed: see %s") (buffer-name error-buffer))))))
- (delete-file stderr-file)
- (delete-file stdout-file))))
-
-;;;###autoload
-(cl-defmacro reformatter-define (name &key program args (mode t) (stdin t) (stdout t) input-file lighter keymap group (exit-code-success-p 'zerop))
- "Define a reformatter command with NAME.
-
-When called, the reformatter will use PROGRAM and any ARGS to
-reformat the current buffer. The contents of the buffer will be
-passed as standard input to the reformatter, which should output
-them to standard output. A nonzero exit code will be reported as
-failure, and the output of the command to standard error will be
-displayed to the user.
-
-The macro accepts the following keyword arguments:
-
-PROGRAM (required)
-
- Provides a form which should evaluate to a string at runtime,
- e.g. a literal string, or the name of a variable which holds
- the program path.
-
-ARGS
-
- Command-line arguments for the program. If provided, this is a
- form which evaluates to a list of strings at runtime. Default
- is the empty list. This form is evaluated at runtime so that
- you can use buffer-local variables to influence the args passed
- to the reformatter program: the variable `input-file' will be
- lexically bound to the path of a file containing the text to be
- reformatted: see the keyword options INPUT-FILE, STDIN and
- STDOUT for more information.
-
-STDIN
-
- When non-nil (the default), the program is passed the input
- data on stdin. Set this to nil when your reformatter can only
- operate on files in place. In such a case, your ARGS should
- include a reference to the `input-file' variable, which will be
- bound to an input path when evaluated.
-
-STDOUT
-
- When non-nil (the default), the program is expected to write
- the reformatted text to stdout. Set this to nil if your
- reformatter can only operate on files in place, in which case
- the contents of the temporary input file will be used as the
- replacement text.
-
-INPUT-FILE
-
- Sometimes your reformatter program might expect files to be in
- a certain directory or have a certain file extension. This option
- lets you handle that.
-
- If provided, it is a form which will be evaluated before each
- run of the formatter, and is expected to return a temporary
- file path suitable for holding the region to be reformatted.
- It must not produce the same path as the current buffer's file
- if that is set: you shouldn't be operating directly on the
- buffer's backing file. The temporary input file will be
- deleted automatically. You might find the function
- `reformatter-temp-file-in-current-directory' helpful.
-
-MODE
-
- Unless nil, also generate a minor mode that will call the
- reformatter command from `before-save-hook' when enabled.
- Default is t.
-
-GROUP
-
- If provided, this is the custom group used for any generated
- modes or custom variables. Don't forget to declare this group
- using a `defgroup' form.
-
-LIGHTER
-
- If provided, this is a mode lighter string which will be used
- for the \"-on-save\" minor mode. It should have a leading
- space. The supplied value will be used as the default for a
- generated custom variable which specifies the mode lighter.
- Default is nil, ie. no lighter.
-
-KEYMAP
-
- If provided, this is the symbol name of the \"-on-save\" mode's
- keymap, which you must declare yourself. Default is no keymap.
-
-EXIT-CODE-SUCCESS-P
-
- If provided, this is a function object callable with `funcall'
- which accepts an integer process exit code, and returns non-nil
- if that exit code is considered successful. This could be a
- lambda, quoted symbol or sharp-quoted symbol. If not supplied,
- the code is considered successful if it is `zerop'."
- (declare (indent defun))
- (cl-assert (symbolp name))
- (cl-assert (functionp exit-code-success-p))
- (cl-assert program)
- ;; Note: we skip using `gensym' here because the macro arguments are only
- ;; referred to once below, but this may have to change later.
- (let* ((buffer-fn-name (intern (format "%s-buffer" name)))
- (region-fn-name (intern (format "%s-region" name)))
- (minor-mode-form
- (when mode
- (let ((on-save-mode-name (intern (format "%s-on-save-mode" name)))
- (lighter-name (intern (format "%s-on-save-mode-lighter" name))))
- `(progn
- (defcustom ,lighter-name ,lighter
- ,(format "Mode lighter for `%s'." on-save-mode-name)
- :group ,group
- :type 'string)
- (define-minor-mode ,on-save-mode-name
- ,(format "When enabled, call `%s' when this buffer is saved.
-
-To enable this unconditionally in a major mode, add this mode
-to the major mode's hook. To enable it in specific files or directories,
-use the local variables \"mode\" mechanism, e.g. in \".dir-locals.el\" you
-might use:
-
- ((some-major-mode
- (mode . %s-on-save)))
- " buffer-fn-name name)
- :global nil
- :lighter ,lighter-name
- :keymap ,keymap
- :group ,group
- (if ,on-save-mode-name
- (add-hook 'before-save-hook ',buffer-fn-name nil t)
- (remove-hook 'before-save-hook ',buffer-fn-name t))))))))
- `(progn
- (defun ,region-fn-name (beg end &optional display-errors)
- "Reformats the region from BEG to END.
-When called interactively, or with prefix argument
-DISPLAY-ERRORS, shows a buffer if the formatting fails."
- (interactive "rp")
- (let ((input-file ,(if input-file input-file `(make-temp-file ,(symbol-name name)))))
- ;; Evaluate args with input-file bound
- (unwind-protect
- (progn
- (reformatter--do-region
- ',name beg end
- ,program ,args ,stdin ,stdout input-file
- #',exit-code-success-p display-errors))
- (when (file-exists-p input-file)
- (delete-file input-file)))))
-
- (defun ,buffer-fn-name (&optional display-errors)
- "Reformats the current buffer.
-When called interactively, or with prefix argument
-DISPLAY-ERRORS, shows a buffer if the formatting fails."
- (interactive "p")
- (message "Formatting buffer")
- (,region-fn-name (point-min) (point-max) display-errors))
-
- ;; This alias will be removed in a future version
- (defalias ',name ',buffer-fn-name)
-
- ,minor-mode-form)))
-
-
-(defun reformatter-replace-buffer-contents-from-file (file)
- "Replace the accessible portion of the current buffer with the contents of FILE."
- ;; While the function `replace-buffer-contents' exists in recent
- ;; Emacs versions, it exhibits pathologically slow behaviour in many
- ;; cases, and the simple replacement approach we use instead is well
- ;; proven and typically preserves point and markers to a reasonable
- ;; degree.
- (insert-file-contents file nil nil nil t))
-
-
-(defun reformatter-temp-file-in-current-directory (&optional default-extension)
- "Make a temp file in the current directory re-using the current extension.
-If the current file is not backed by a file, then use
-DEFAULT-EXTENSION, which should not contain a leading dot."
- (let ((temporary-file-directory default-directory)
- (extension (if buffer-file-name
- (file-name-extension buffer-file-name)
- default-extension)))
- (make-temp-file "reformatter" nil
- (when extension
- (concat "." extension)))))
-
-(provide 'reformatter)
-;;; reformatter.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-autoloads.el b/emacs.d/elpa/rustic-20210609.1900/rustic-autoloads.el
deleted file mode 100644
index 97b6ec1..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-autoloads.el
+++ /dev/null
@@ -1,382 +0,0 @@
-;;; rustic-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "rustic" "rustic.el" (0 0 0 0))
-;;; Generated autoloads from rustic.el
-
-(autoload 'rustic-mode "rustic" "\
-Major mode for Rust code.
-
-\\{rustic-mode-map}
-
-\(fn)" t nil)
-
-(add-to-list 'auto-mode-alist '("\\.rs\\'" . rustic-mode))
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic" '("rustic-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-babel" "rustic-babel.el" (0 0 0 0))
-;;; Generated autoloads from rustic-babel.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-babel" '("cargo-toml-dependencies" "crate-dependencies" "org-babel-execute:rust" "rustic-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-cargo" "rustic-cargo.el" (0 0 0 0))
-;;; Generated autoloads from rustic-cargo.el
-
-(autoload 'rustic-cargo-clippy-run "rustic-cargo" "\
-Run `cargo clippy' with optional ARGS.
-
-\(fn &optional ARGS)" t nil)
-
-(autoload 'rustic-cargo-clippy "rustic-cargo" "\
-Run 'cargo clippy'.
-
-If ARG is not nil, use value as argument and store it in `rustic-clippy-arguments'.
-When calling this function from `rustic-popup-mode', always use the value of
-`rustic-clippy-arguments'.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'rustic-cargo-clippy-rerun "rustic-cargo" "\
-Run 'cargo clippy' with `rustic-clippy-arguments'." t nil)
-
-(autoload 'rustic-cargo-test-run "rustic-cargo" "\
-Start compilation process for 'cargo test' with optional TEST-ARGS.
-
-\(fn &optional TEST-ARGS)" t nil)
-
-(autoload 'rustic-cargo-test "rustic-cargo" "\
-Run 'cargo test'.
-
-If ARG is not nil, use value as argument and store it in `rustic-test-arguments'.
-When calling this function from `rustic-popup-mode', always use the value of
-`rustic-test-arguments'.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'rustic-cargo-test-rerun "rustic-cargo" "\
-Run 'cargo test' with `rustic-test-arguments'." t nil)
-
-(autoload 'rustic-cargo-current-test "rustic-cargo" "\
-Run 'cargo test' for the test near point." t nil)
-
-(autoload 'rustic-cargo-outdated "rustic-cargo" "\
-Use 'cargo outdated' to list outdated packages in `tabulated-list-mode'.
-Execute process in PATH.
-
-\(fn &optional PATH)" t nil)
-
-(autoload 'rustic-cargo-reload-outdated "rustic-cargo" "\
-Update list of outdated packages." t nil)
-
-(autoload 'rustic-cargo-mark-upgrade "rustic-cargo" "\
-Mark an upgradable package." t nil)
-
-(autoload 'rustic-cargo-mark-all-upgrades "rustic-cargo" "\
-Mark all upgradable packages in the Package Menu." t nil)
-
-(autoload 'rustic-cargo-menu-mark-unmark "rustic-cargo" "\
-Clear any marks on a package." t nil)
-
-(autoload 'rustic-cargo-upgrade-execute "rustic-cargo" "\
-Perform marked menu actions." t nil)
-
-(autoload 'rustic-cargo-new "rustic-cargo" "\
-Run 'cargo new' to start a new package in the path specified by PROJECT-PATH.
-If BIN is not nil, create a binary application, otherwise a library.
-
-\(fn PROJECT-PATH &optional BIN)" t nil)
-
-(autoload 'rustic-cargo-init "rustic-cargo" "\
-Run 'cargo init' to initialize a directory in the path specified by PROJECT-PATH.
-If BIN is not nil, create a binary application, otherwise a library.
-
-\(fn PROJECT-PATH &optional BIN)" t nil)
-
-(autoload 'rustic-cargo-build "rustic-cargo" "\
-Run 'cargo build' for the current project." t nil)
-
-(autoload 'rustic-cargo-run "rustic-cargo" "\
-Run 'cargo run' for the current project.
-If running with prefix command `C-u', read whole command from minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'rustic-cargo-clean "rustic-cargo" "\
-Run 'cargo clean' for the current project." t nil)
-
-(autoload 'rustic-cargo-check "rustic-cargo" "\
-Run 'cargo check' for the current project." t nil)
-
-(autoload 'rustic-cargo-bench "rustic-cargo" "\
-Run 'cargo bench' for the current project." t nil)
-
-(autoload 'rustic-cargo-build-doc "rustic-cargo" "\
-Build the documentation for the current project." t nil)
-
-(autoload 'rustic-cargo-doc "rustic-cargo" "\
-Open the documentation for the current project in a browser.
-The documentation is built if necessary." t nil)
-
-(autoload 'rustic-cargo-add "rustic-cargo" "\
-Add crate to Cargo.toml using 'cargo add'.
-If running with prefix command `C-u', read whole command from minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'rustic-cargo-rm "rustic-cargo" "\
-Remove crate from Cargo.toml using 'cargo rm'.
-If running with prefix command `C-u', read whole command from minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'rustic-cargo-upgrade "rustic-cargo" "\
-Upgrade dependencies as specified in the local manifest file using 'cargo upgrade'.
-If running with prefix command `C-u', read whole command from minibuffer.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-cargo" '("rustic-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-compile" "rustic-compile.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from rustic-compile.el
-
-(autoload 'rustic-compile "rustic-compile" "\
-Compile rust project.
-
-If `compilation-read-command' is non-nil or if called with prefix
-argument ARG then read the command in the minibuffer. Otherwise
-use `rustic-compile-command'.
-
-In either store the used command in `compilation-arguments'.
-
-\(fn &optional ARG)" t nil)
-
-(autoload 'rustic-recompile "rustic-compile" "\
-Re-compile the program using `compilation-arguments'." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-compile" '("rust")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-doc" "rustic-doc.el" (0 0 0 0))
-;;; Generated autoloads from rustic-doc.el
-
-(autoload 'rustic-doc-dumb-search "rustic-doc" "\
-Search all projects and std for SEARCH-TERM.
-Use this when `rustic-doc-search' does not find what you're looking for.
-Add `universal-argument' to only search level 1 headers.
-See `rustic-doc-search' for more information.
-
-\(fn SEARCH-TERM)" t nil)
-
-(autoload 'rustic-doc-search "rustic-doc" "\
-Search the rust documentation for SEARCH-TERM.
-Only searches in headers (structs, functions, traits, enums, etc)
-to limit the number of results.
-To limit search results to only level 1 headers, add `universal-argument'
-Level 1 headers are things like struct or enum names.
-if ROOT is non-nil the search is performed from the root dir.
-This function tries to be smart and limits the search results
-as much as possible. If it ends up being so smart that
-it doesn't manage to find what you're looking for, try `rustic-doc-dumb-search'.
-
-\(fn SEARCH-TERM &optional ROOT)" t nil)
-
-(autoload 'rustic-doc-convert-current-package "rustic-doc" "\
-Convert the documentation for a project and its dependencies." t nil)
-
-(autoload 'rustic-doc-setup "rustic-doc" "\
-Setup or update rustic-doc filter and convert script. Convert std." t nil)
-
-(autoload 'rustic-doc-mode "rustic-doc" "\
-Convert rust html docs to .org, and browse the converted docs.
-
-If called interactively, enable Rustic-Doc mode if ARG is
-positive, and disable it if ARG is zero or negative. If called
-from Lisp, also enable the mode if ARG is omitted or nil, and
-toggle it if ARG is `toggle'; disable the mode otherwise.
-
-\(fn &optional ARG)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-doc" '("rustic-doc-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-flycheck" "rustic-flycheck.el" (0 0
-;;;;;; 0 0))
-;;; Generated autoloads from rustic-flycheck.el
-
-(autoload 'rustic-flycheck-setup "rustic-flycheck" "\
-Setup Rust in Flycheck.
-
-If the current file is part of a Cargo project, configure
-Flycheck according to the Cargo project layout." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-flycheck" '("rustic-flycheck-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-interaction" "rustic-interaction.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from rustic-interaction.el
-
-(autoload 'rustic-indent-line "rustic-interaction" nil t nil)
-
-(autoload 'rustic-promote-module-into-dir "rustic-interaction" "\
-Promote the module file visited by the current buffer into its own directory.
-
-For example, if the current buffer is visiting the file `foo.rs',
-then this function creates the directory `foo' and renames the
-file to `foo/mod.rs'. The current buffer will be updated to
-visit the new file." t nil)
-
-(autoload 'rustic-open-dependency-file "rustic-interaction" "\
-Open the 'Cargo.toml' file at the project root if the current buffer is
-visiting a project." t nil)
-
-(autoload 'rustic-beginning-of-defun "rustic-interaction" "\
-Move backward to the beginning of the current defun.
-
-With ARG, move backward multiple defuns. Negative ARG means
-move forward.
-
-This is written mainly to be used as `beginning-of-defun-function' for Rust.
-Don't move to the beginning of the line. `beginning-of-defun',
-which calls this, does that afterwards.
-
-\(fn &optional ARG REGEX)" t nil)
-
-(autoload 'rustic-end-of-defun "rustic-interaction" "\
-Move forward to the next end of defun.
-
-With argument, do it that many times.
-Negative argument -N means move back to Nth preceding end of defun.
-
-Assume that this is called after beginning-of-defun. So point is
-at the beginning of the defun body.
-
-This is written mainly to be used as `end-of-defun-function' for Rust." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-interaction" '("rustic-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-lsp" "rustic-lsp.el" (0 0 0 0))
-;;; Generated autoloads from rustic-lsp.el
-
-(autoload 'rustic-analyzer-macro-expand "rustic-lsp" "\
-Default method for displaying macro expansion results.
-
-\(fn RESULT)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-lsp" '("rustic-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-playpen" "rustic-playpen.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from rustic-playpen.el
-
-(autoload 'rustic-playpen "rustic-playpen" "\
-Create a shareable URL for the contents of the current region,
-src-block or buffer on the Rust playpen.
-
-\(fn BEGIN END)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-playpen" '("rustic-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-popup" "rustic-popup.el" (0 0 0 0))
-;;; Generated autoloads from rustic-popup.el
-
-(autoload 'rustic-popup "rustic-popup" "\
-Setup popup.
-If directory is not in a rust project call `read-directory-name'." t nil)
-
-(autoload 'rustic-popup-invoke-popup-action "rustic-popup" "\
-Execute commands which are listed in `rustic-popup-commands'.
-
-\(fn EVENT)" t nil)
-
-(autoload 'rustic-popup-default-action "rustic-popup" "\
-Change backtrace and `compilation-arguments' when executed on
-corresponding line." t nil)
-
-(autoload 'rustic-popup-cargo-command-help "rustic-popup" "\
-Display help buffer for cargo command at point." t nil)
-
-(autoload 'rustic-popup-kill-help-buffer "rustic-popup" "\
-Kill popup help buffer and switch to popup buffer." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-popup" '("rustic-popup-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-racer" "rustic-racer.el" (0 0 0 0))
-;;; Generated autoloads from rustic-racer.el
-
-(autoload 'rustic-racer-describe "rustic-racer" "\
-Show a *Racer Help* buffer for the function or type at point." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-racer" '("racer-src-button" "rustic-racer-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-rustfix" "rustic-rustfix.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from rustic-rustfix.el
-
-(autoload 'rustic-rustfix "rustic-rustfix" "\
-Run 'cargo fix'." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-rustfix" '("rustic-rustfix-")))
-
-;;;***
-
-;;;### (autoloads nil "rustic-rustfmt" "rustic-rustfmt.el" (0 0 0
-;;;;;; 0))
-;;; Generated autoloads from rustic-rustfmt.el
-
-(autoload 'rustic-cargo-fmt "rustic-rustfmt" "\
-Use rustfmt via cargo." t nil)
-
-(autoload 'rustic-format-buffer "rustic-rustfmt" "\
-Format the current buffer using rustfmt.
-
-Provide optional argument NO-STDIN for `rustic-before-save-hook' since there
-were issues when using stdin for formatting." t nil)
-
-(autoload 'rustic-format-file "rustic-rustfmt" "\
-Unlike `rustic-format-buffer' format file directly and revert the buffer.
-
-\(fn &optional FILE)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "rustic-rustfmt" '("rustic-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("rustic-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; rustic-autoloads.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-babel.el b/emacs.d/elpa/rustic-20210609.1900/rustic-babel.el
deleted file mode 100644
index 2a6dbb0..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-babel.el
+++ /dev/null
@@ -1,288 +0,0 @@
-;;; rustic-babel.el --- Org babel facilities for cargo -*-lexical-binding: t-*-
-
-;;; Code:
-
-(require 'org)
-(require 'org-element)
-(require 'ob)
-(require 'ob-eval)
-(require 'ob-ref)
-(require 'ob-core)
-
-(require 'rustic-rustfmt)
-
-;; FIXME This variable doesn't exist in noninteractive emacs sessions,
-;; which probably means that it is internal and we shouldn't use it.
-(defvar org-babel-temporary-directory)
-
-(defvar rustic-info nil)
-
-(add-to-list 'org-src-lang-modes '("rust" . rustic))
-(add-to-list 'org-babel-tangle-lang-exts '("rustic" . "rs"))
-(defalias 'org-babel-execute:rust #'org-babel-execute:rustic)
-
-(defcustom rustic-babel-display-compilation-buffer nil
- "Whether to display compilation buffer."
- :type 'boolean
- :group 'rustic-babel)
-
-(defcustom rustic-babel-format-src-block t
- "Whether to format a src block automatically after successful execution."
- :type 'boolean
- :group 'rustic-babel)
-
-(defvar rustic-babel-buffer-name '((:default . "*rust-babel*")))
-
-(defvar rustic-babel-process-name "rustic-babel-process"
- "Process name for org-babel rust compilation processes.")
-
-(defvar rustic-babel-compilation-buffer-name "*rustic-babel-compilation-buffer*"
- "Buffer name for org-babel rust compilation process buffers.")
-
-(defvar rustic-babel-dir nil
- "Holds the latest rust babel project directory.")
-
-(defvar rustic-babel-src-location nil
- "Marker, holding location of last evaluated src block.")
-
-(defvar rustic-babel-params nil
- "Babel parameters.")
-
-(defvar rustic-babel-spinner nil)
-
-(defun rustic-babel-eval (dir)
- "Start a rust babel compilation process in directory DIR."
- (let* ((err-buff (get-buffer-create rustic-babel-compilation-buffer-name))
- (default-directory dir)
- (params '("cargo" "build" "--quiet"))
- (inhibit-read-only t))
- (rustic-compilation-setup-buffer err-buff dir 'rustic-compilation-mode)
- (when rustic-babel-display-compilation-buffer
- (display-buffer err-buff))
- (rustic-make-process
- :name rustic-babel-process-name
- :buffer err-buff
- :command params
- :filter #'rustic-compilation-filter
- :sentinel #'rustic-babel-build-sentinel)))
-
-(defun rustic-babel-build-sentinel (proc _output)
- "Sentinel for rust babel compilation process PROC.
-If `rustic-babel-format-src-block' is t, format src-block after successful
-execution with rustfmt."
- (let ((proc-buffer (process-buffer proc))
- (inhibit-read-only t))
- (if (zerop (process-exit-status proc))
- (let* ((default-directory rustic-babel-dir))
- ;; format babel block
- (when rustic-babel-format-src-block
- (let ((babel-body
- (org-element-property :value (org-element-at-point)))
- (proc
- (make-process :name "rustic-babel-format"
- :buffer "rustic-babel-format-buffer"
- :command `(,rustic-rustfmt-bin
- ,@(rustic-compute-rustfmt-args))
- :filter #'rustic-compilation-filter
- :sentinel #'rustic-babel-format-sentinel)))
- (while (not (process-live-p proc))
- (sleep-for 0.01))
- (process-send-string proc babel-body)
- (process-send-eof proc)
- (while (eq (process-status proc) 'run)
- (sit-for 0.1))))
-
- ;; run project
- (let* ((err-buff (get-buffer-create rustic-babel-compilation-buffer-name))
- (params '("cargo" "run" "--quiet"))
- (inhibit-read-only t))
- (rustic-make-process
- :name rustic-babel-process-name
- :buffer err-buff
- :command params
- :filter #'rustic-compilation-filter
- :sentinel #'rustic-babel-run-sentinel)))
-
- (let* ((project (car (reverse (split-string rustic-babel-dir "/"))))
- (result (format "error: Could not compile `%s`." project)))
- (rustic-babel-build-update-result-block result))
- (rustic-with-spinner rustic-babel-spinner nil nil)
- (if (= (length (with-current-buffer proc-buffer (buffer-string))) 0)
- (kill-buffer proc-buffer)
- (pop-to-buffer proc-buffer)))))
-
-(defun rustic-babel-run-sentinel (proc _output)
- "Sentinel for babel project execution."
- (let ((proc-buffer (process-buffer proc))
- result)
- (if (zerop (process-exit-status proc))
- (progn
- (with-current-buffer proc-buffer
- (setq result (buffer-string)))
- (rustic-babel-run-update-result-block result)
- (rustic-with-spinner rustic-babel-spinner nil nil)
- (unless rustic-babel-display-compilation-buffer
- (kill-buffer proc-buffer)))
- (progn
- (with-current-buffer proc-buffer
- (save-excursion
- (save-match-data
- (goto-char (point-min))
- (when (re-search-forward "^thread '[^']+' panicked at '[^']+', ")
- (goto-char (match-beginning 0))
- (setq result (buffer-substring-no-properties (point) (line-end-position)))))))
- (rustic-babel-run-update-result-block result)
- (rustic-with-spinner rustic-babel-spinner nil nil)
- (pop-to-buffer proc-buffer)))))
-
-(defun rustic-babel-build-update-result-block (result)
- "Update result block with RESULT."
- (let ((marker rustic-babel-src-location))
- (with-current-buffer (marker-buffer marker)
- (goto-char marker)
- (org-babel-remove-result)
- (org-babel-insert-result result))))
-
-(defun rustic-babel-run-update-result-block (result)
- "Update result block with RESULT."
- (let ((marker rustic-babel-src-location))
- (with-current-buffer (marker-buffer marker)
- (goto-char marker)
-
- (let ((file (cdr (assq :file rustic-babel-params)))
- (results-params (cdr (assq :result-params rustic-babel-params))))
- ;; If non-empty result and :file then write to :file.
- (when (and file results-params)
- (when result
- (with-temp-file file
- (insert (org-babel-format-result
- result (cdr (assq :sep rustic-babel-params))))))
- (setq result file))
-
- (org-babel-remove-result rustic-info)
- (org-babel-insert-result result results-params rustic-info)))))
-
-(defun rustic-babel-format-sentinel (proc output)
- "This sentinel is used by the process `rustic-babel-format', that runs
-after successful compilation."
- (ignore-errors
- (let ((proc-buffer (process-buffer proc))
- (marker rustic-babel-src-location))
- (save-excursion
- (with-current-buffer proc-buffer
- (when (string-match-p "^finished" output)
- (with-current-buffer (marker-buffer marker)
- (goto-char marker)
- (org-babel-update-block-body
- (with-current-buffer "rustic-babel-format-buffer"
- (buffer-string)))))))
- (kill-buffer "rustic-babel-format-buffer"))))
-
-(defun rustic-babel-generate-project (&optional expand)
- "Create rust project in `org-babel-temporary-directory'.
-Return full path if EXPAND is t."
- (let* ((default-directory org-babel-temporary-directory)
- (dir (make-temp-file-internal "cargo" 0 "" nil)))
- (shell-command-to-string (format "cargo new %s --bin --quiet" dir))
- (if expand
- (concat (expand-file-name dir) "/")
- dir)))
-
-(defun rustic-babel-project ()
- "In order to reduce the execution time when the project has
-dependencies, the project name is stored as a text property in the
-header of the org-babel block to check if the project already exists
-in `org-babel-temporary-directory'. If the project exists, reuse it.
-Otherwise create it with `rustic-babel-generate-project'."
- (let* ((beg (org-babel-where-is-src-block-head))
- (end (save-excursion (goto-char beg)
- (line-end-position)))
- (line (buffer-substring beg end)))
- (let* ((project (symbol-name (get-text-property 0 'project line)))
- (path (concat org-babel-temporary-directory "/" project "/")))
- (if (file-directory-p path)
- (progn
- (put-text-property beg end 'project (make-symbol project))
- project)
- (let ((new (rustic-babel-generate-project)))
- (put-text-property beg end 'project (make-symbol new))
- new)))))
-
-(defun crate-dependencies (name version features)
- "Generate a Cargo.toml [dependencies] entry for a crate given a version and features."
- (let ((version-string (concat "version = \"" version "\""))
- (features-string
- (if features
- (concat "features = [" (mapconcat (lambda (s) (concat "\"" s "\"")) features ", ") "]")
- nil)))
- (let ((toml-entry (string-join (remove nil (list version-string features-string)) ", ")))
- (concat name " = {" toml-entry "}"))))
-
-(defun cargo-toml-dependencies (crate-versions crate-features)
- "Generate the [dependencies] section of a Cargo.toml file given crates and their versions & features."
- (let ((dependencies ""))
- (dolist (crate-and-version crate-versions)
- (let ((name (car crate-and-version))
- (version (cdr crate-and-version)))
- (let ((features (cdr (assoc name crate-features))))
- (setq name (symbol-name name))
- (when (numberp version)
- (setq version (number-to-string version)))
- (when (not (listp features))
- (setq features (list features)))
- (let ((cargo-toml-entry (crate-dependencies name version features)))
- (setq dependencies (concat dependencies cargo-toml-entry "\n"))))))
- (setq dependencies (concat "[dependencies]\n" dependencies))))
-
-(defun rustic-babel-cargo-toml (dir params)
- "Append crates to Cargo.toml.
-Use org-babel parameter crates from PARAMS and add them to the project in
-directory DIR."
- (let ((crates (cdr (assq :crates params)))
- (features (cdr (assq :features params)))
- (toml (expand-file-name "Cargo.toml" dir)))
- (let ((dependencies (cargo-toml-dependencies crates features)))
- (make-directory (file-name-directory toml) t)
- (with-temp-file toml
- (condition-case nil
- (insert-file-contents toml)
- (file-missing))
- (let ((s (nth 0 (split-string (buffer-string) "\\[dependencies]"))))
- (erase-buffer)
- (insert s)
- (insert dependencies))))))
-
-(defun org-babel-execute:rustic (body params)
- "Execute a block of Rust code with org-babel.
-
-If called while there's a live Rust babel process, ask user whether to
-kill the running process."
- (let ((p (get-process rustic-babel-process-name)))
- (if (process-live-p p)
- (progn
- (rustic-process-kill-p p t)
- nil)
- (let* ((default-directory org-babel-temporary-directory)
- (project (rustic-babel-project))
- (dir (setq rustic-babel-dir (expand-file-name project)))
- (main (expand-file-name "main.rs" (concat dir "/src"))))
- (make-directory (file-name-directory main) t)
- (rustic-babel-cargo-toml dir params)
- (setq rustic-info (org-babel-get-src-block-info))
- (setq rustic-babel-params params)
-
- (rustic-with-spinner rustic-babel-spinner
- (make-spinner rustic-spinner-type t 10)
- '(rustic-babel-spinner (":Executing " (:eval (spinner-print rustic-babel-spinner))))
- (spinner-start rustic-babel-spinner))
-
- (let ((default-directory dir))
- (write-region
- (concat "#![allow(non_snake_case)]\n" body) nil main nil 0)
- (rustic-babel-eval dir)
- (setq rustic-babel-src-location
- (set-marker (make-marker) (point) (current-buffer)))
- project)))))
-
-(provide 'rustic-babel)
-;;; rustic-babel.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-cargo.el b/emacs.d/elpa/rustic-20210609.1900/rustic-cargo.el
deleted file mode 100644
index 3e56dd4..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-cargo.el
+++ /dev/null
@@ -1,530 +0,0 @@
-;;; rustic-cargo.el --- Cargo based commands -*-lexical-binding: t-*-
-;;; Commentary:
-
-;; This library implements support for `cargo'.
-
-;;; Code:
-
-(require 'tabulated-list)
-
-(require 'rustic-compile)
-(require 'rustic-interaction) ; for rustic-beginning-of-function
-
-;;; Customization
-
-(defcustom rustic-cargo-bin "cargo"
- "Path to cargo executable."
- :type 'string
- :group 'rustic-cargo)
-
-(defcustom rustic-cargo-open-new-project t
- "If t then any project created with cargo-new will be opened automatically.
-If nil then the project is simply created."
- :type 'boolean
- :group 'rustic-cargo)
-
-(defvar rustic-cargo-outdated-face nil)
-(make-obsolete-variable 'rustic-cargo-outdated-face
- "use the face `rustic-cargo-outdated' instead."
- "1.2")
-
-(defface rustic-cargo-outdated
- '((t (:foreground "red")))
- "Face used for outdated crates."
- :group 'rustic)
-
-(define-obsolete-face-alias 'rustic-cargo-outdated-upgrade-face
- 'rustic-cargo-outdated-upgrade "1.2")
-
-(defface rustic-cargo-outdated-upgrade
- '((t (:foreground "LightSeaGreen")))
- "Face used for crates marked for upgrade."
- :group 'rustic)
-
-;;; Clippy
-
-(defvar rustic-clippy-process-name "rustic-cargo-clippy-process"
- "Process name for clippy processes.")
-
-(defvar rustic-clippy-buffer-name "*cargo-clippy*"
- "Buffer name for clippy buffers.")
-
-(defvar rustic-clippy-arguments ""
- "Holds arguments for 'cargo clippy', similar to `compilation-arguments`.")
-
-(define-derived-mode rustic-cargo-clippy-mode rustic-compilation-mode "cargo-clippy"
- :group 'rustic)
-
-;;;###autoload
-(defun rustic-cargo-clippy-run (&optional args)
- "Run `cargo clippy' with optional ARGS."
- (interactive)
- (let* ((command (list rustic-cargo-bin "clippy"))
- (c (append command (split-string (if args args ""))))
- (buf rustic-clippy-buffer-name)
- (proc rustic-clippy-process-name)
- (mode 'rustic-cargo-clippy-mode))
- (rustic-compilation-process-live)
- (rustic-compilation c (list :buffer buf :process proc :mode mode))))
-
-;;;###autoload
-(defun rustic-cargo-clippy (&optional arg)
- "Run 'cargo clippy'.
-
-If ARG is not nil, use value as argument and store it in `rustic-clippy-arguments'.
-When calling this function from `rustic-popup-mode', always use the value of
-`rustic-clippy-arguments'."
- (interactive "P")
- (rustic-cargo-clippy-run
- (cond (arg
- (setq rustic-clippy-arguments (read-from-minibuffer "Cargo clippy arguments: " rustic-clippy-arguments)))
- ((eq major-mode 'rustic-popup-mode)
- rustic-clippy-arguments)
- (t ""))))
-
-;;;###autoload
-(defun rustic-cargo-clippy-rerun ()
- "Run 'cargo clippy' with `rustic-clippy-arguments'."
- (interactive)
- (rustic-cargo-clippy-run rustic-clippy-arguments))
-
-;;; Test
-
-(defvar rustic-test-process-name "rustic-cargo-test-process"
- "Process name for test processes.")
-
-(defvar rustic-test-buffer-name "*cargo-test*"
- "Buffer name for test buffers.")
-
-(defvar rustic-test-arguments ""
- "Holds arguments for 'cargo test', similar to `compilation-arguments`.")
-
-(define-derived-mode rustic-cargo-test-mode rustic-compilation-mode "cargo-test"
- :group 'rustic)
-
-;;;###autoload
-(defun rustic-cargo-test-run (&optional test-args)
- "Start compilation process for 'cargo test' with optional TEST-ARGS."
- (interactive)
- (rustic-compilation-process-live)
- (let* ((command (list rustic-cargo-bin "test"))
- (c (append command (split-string (if test-args test-args ""))))
- (buf rustic-test-buffer-name)
- (proc rustic-test-process-name)
- (mode 'rustic-cargo-test-mode))
- (rustic-compilation c (list :buffer buf :process proc :mode mode))))
-
-;;;###autoload
-(defun rustic-cargo-test (&optional arg)
- "Run 'cargo test'.
-
-If ARG is not nil, use value as argument and store it in `rustic-test-arguments'.
-When calling this function from `rustic-popup-mode', always use the value of
-`rustic-test-arguments'."
- (interactive "P")
- (rustic-cargo-test-run
- (cond (arg
- (setq rustic-test-arguments (read-from-minibuffer "Cargo test arguments: " rustic-test-arguments)))
- ((eq major-mode 'rustic-popup-mode)
- rustic-test-arguments)
- (t ""))))
-
-;;;###autoload
-(defun rustic-cargo-test-rerun ()
- "Run 'cargo test' with `rustic-test-arguments'."
- (interactive)
- (rustic-cargo-test-run rustic-test-arguments))
-
-;;;###autoload
-(defun rustic-cargo-current-test ()
- "Run 'cargo test' for the test near point."
- (interactive)
- (rustic-compilation-process-live)
- (-if-let (func-name (rustic-cargo--get-current-fn-fullname))
- (let* ((command (list rustic-cargo-bin "test" func-name))
- (c (append command (split-string rustic-test-arguments)))
- (buf rustic-test-buffer-name)
- (proc rustic-test-process-name)
- (mode 'rustic-cargo-test-mode))
- (rustic-compilation c (list :buffer buf :process proc :mode mode)))
- (message "Could not find test at point.")))
-
-(defconst rustic-cargo-mod-regexp
- "^\s*mod\s+\\([[:word:][:multibyte:]_][[:word:][:multibyte:]_[:digit:]]*\\)\s*{")
-(defconst rustic-cargo-fn-regexp
- "^\s*\\(?:async\s+\\)?\s*fn\s+\\([^(]+\\)\s*(")
-
-(defun rustic-cargo--get-current-fn-fullname()
- "Return full name of the fn around point including module name if any."
- (let ((mod (rustic-cargo--get-current-mod))
- (fn (rustic-cargo--get-current-fn-name)))
- (if mod
- (concat mod "::" fn)
- fn)))
-
-(defun rustic-cargo--get-current-mod ()
- "Return mod name around point or nil."
- (save-excursion
- (when (search-backward-regexp rustic-cargo-mod-regexp nil t)
- (match-string 1))))
-
-(defun rustic-cargo--get-current-line-fn-name()
- "Return fn name from the current line or nil."
- (save-excursion
- (goto-char (line-beginning-position))
- (when (search-forward-regexp rustic-cargo-fn-regexp (line-end-position) t)
- (match-string 1))))
-
-(defun rustic-cargo--get-current-fn-name()
- "Return fn name around point or nil."
- (save-excursion
- (or (rustic-cargo--get-current-line-fn-name)
- (progn
- (rustic-beginning-of-function)
- (rustic-cargo--get-current-line-fn-name)))))
-
-;;; Outdated
-
-(defvar rustic-cargo-outdated-process-name "rustic-cargo-outdated-process")
-
-(defvar rustic-cargo-oudated-buffer-name "*cargo-outdated*")
-
-(defvar rustic-cargo-outdated-spinner nil)
-
-(defvar rustic-cargo-outdated-mode-map
- (let ((map (make-sparse-keymap)))
- (set-keymap-parent map tabulated-list-mode-map)
- (define-key map (kbd "m") 'rustic-cargo-menu-mark-unmark)
- (define-key map (kbd "u") 'rustic-cargo-mark-upgrade)
- (define-key map (kbd "U") 'rustic-cargo-mark-all-upgrades)
- (define-key map (kbd "x") 'rustic-cargo-upgrade-execute)
- (define-key map (kbd "r") 'rustic-cargo-reload-outdated)
- (define-key map (kbd "c") 'rustic-compile)
- (define-key map (kbd "q") 'quit-window)
- map)
- "Local keymap for `rustic-cargo-outdated-mode' buffers.")
-
-(define-derived-mode rustic-cargo-outdated-mode tabulated-list-mode "cargo-outdated"
- "Major mode for viewing outdated crates in the current workspace."
- (setq truncate-lines t)
- (setq tabulated-list-format
- `[("Name" 25 nil)
- ("Project" 10 nil)
- ("Compat" 10 nil)
- ("Latest" 10 nil)
- ("Kind" 10 nil)
- ("Platform" 0 nil)])
- (setq tabulated-list-padding 2)
- (tabulated-list-init-header))
-
-;;;###autoload
-(defun rustic-cargo-outdated (&optional path)
- "Use 'cargo outdated' to list outdated packages in `tabulated-list-mode'.
-Execute process in PATH."
- (interactive)
- (let* ((dir (or path (rustic-buffer-workspace)))
- (buf (get-buffer-create rustic-cargo-oudated-buffer-name))
- (default-directory dir)
- (inhibit-read-only t))
- (make-process :name rustic-cargo-outdated-process-name
- :buffer buf
- :command '("cargo" "outdated" "--depth" "1")
- :filter #'rustic-cargo-outdated-filter
- :sentinel #'rustic-cargo-outdated-sentinel)
- (with-current-buffer buf
- (setq default-directory dir)
- (erase-buffer)
- (rustic-cargo-outdated-mode)
- (rustic-with-spinner rustic-cargo-outdated-spinner
- (make-spinner rustic-spinner-type t 10)
- '(rustic-cargo-outdated-spinner
- (":Executing " (:eval (spinner-print rustic-cargo-outdated-spinner))))
- (spinner-start rustic-cargo-outdated-spinner)))
- (display-buffer buf)))
-
-;;;###autoload
-(defun rustic-cargo-reload-outdated ()
- "Update list of outdated packages."
- (interactive)
- (rustic-cargo-outdated default-directory))
-
-(defun rustic-cargo-outdated-filter (proc output)
- "Filter for rustic-cargo-outdated-process."
- (let ((inhibit-read-only t))
- (with-current-buffer (process-buffer proc)
- (insert output))))
-
-(defun rustic-cargo-outdated-sentinel (proc _output)
- "Sentinel for rustic-cargo-outdated-process."
- (let ((buf (process-buffer proc))
- (inhibit-read-only t)
- (exit-status (process-exit-status proc)))
- (if (zerop exit-status)
- (with-current-buffer buf
- (goto-char (point-min))
- (forward-line 2)
- (let ((packages (split-string
- (buffer-substring (point) (point-max)) "\n" t)))
- (erase-buffer)
- (rustic-cargo-outdated-generate-menu packages))
- (pop-to-buffer buf))
- (with-current-buffer buf
- (let ((out (buffer-string)))
- (if (= exit-status 101)
- (rustic-cargo-install-crate-p "outdated")
- (message out))))))
- (rustic-with-spinner rustic-cargo-outdated-spinner nil nil))
-
-(defun rustic-cargo-install-crate-p (crate)
- "Ask whether to install crate CRATE."
- (let ((cmd (format "cargo install cargo-%s" crate)))
- (when (yes-or-no-p (format "Cargo-%s missing. Install ? " crate))
- (async-shell-command cmd "cargo" "cargo-error"))))
-
-(defun rustic-cargo-outdated-generate-menu (packages)
- "Re-populate the `tabulated-list-entries' with PACKAGES."
- (setq tabulated-list-entries
- (mapcar #'rustic-cargo-outdated-menu-entry packages))
- (tabulated-list-print t))
-
-(defun rustic-cargo-outdated-menu-entry (crate)
- "Return a package entry of CRATE suitable for `tabulated-list-entries'."
- (let* ((fields (split-string crate "\s\s+" ))
- (name (nth 0 fields))
- (project (nth 1 fields))
- (compat (nth 2 fields)))
- (list name `[,name
- ,project
- ,(if (when (not (string-match "^-" compat))
- (version< project compat))
- (propertize compat 'font-lock-face 'rustic-cargo-outdated)
- compat)
- ,(nth 3 fields)
- ,(nth 4 fields)
- ,(nth 5 fields)])))
-
-;;;###autoload
-(defun rustic-cargo-mark-upgrade ()
- "Mark an upgradable package."
- (interactive)
- (let* ((crate (tabulated-list-get-entry (point)))
- (v (read-from-minibuffer "Update to version: "
- (substring-no-properties (elt crate 2))))
- (inhibit-read-only t))
- (when v
- (save-excursion
- (goto-char (line-beginning-position))
- (save-match-data
- (when (search-forward (elt crate 0))
- (replace-match (propertize (elt crate 0)
- 'font-lock-face
- 'rustic-cargo-outdated-upgrade)))
- (goto-char (line-beginning-position))
- (when (search-forward (elt crate 1))
- (replace-match (propertize v
- 'font-lock-face
- 'rustic-cargo-outdated-upgrade)))))
- (tabulated-list-put-tag "U" t))))
-
-;;;###autoload
-(defun rustic-cargo-mark-all-upgrades ()
- "Mark all upgradable packages in the Package Menu."
- (interactive)
- (save-excursion
- (goto-char (point-min))
- (while (not (eobp))
- (let ((project (aref (tabulated-list-get-entry) 1))
- (compat (aref (tabulated-list-get-entry) 2)))
- (if (or (string-match "^-" compat)
- (not (version< project compat)))
- (forward-line)
- (tabulated-list-put-tag "U" t))))))
-
-;;;###autoload
-(defun rustic-cargo-menu-mark-unmark ()
- "Clear any marks on a package."
- (interactive)
- (tabulated-list-put-tag " " t))
-
-;;;###autoload
-(defun rustic-cargo-upgrade-execute ()
- "Perform marked menu actions."
- (interactive)
- (let (crates)
- (save-excursion
- (goto-char (point-min))
- (while (not (eobp))
- (let* ((cmd (char-after))
- (crate (tabulated-list-get-entry (point))))
- (when (eq cmd ?U)
- (push crate crates)))
- (forward-line)))
- (if crates
- (let ((msg (format "Upgrade %s ?" (mapconcat #'(lambda (x) (elt x 0)) crates " "))))
- (when (yes-or-no-p msg)
- (rustic-cargo-upgrade-crates crates)))
- (user-error "No operations specified"))))
-
-(defun rustic-cargo-upgrade-crates (crates)
- "Upgrade CRATES."
- (let (upgrade)
- (dolist (crate crates)
- (setq upgrade (concat upgrade (format "%s@%s " (elt crate 0) (elt crate 2)))))
- (let ((output (shell-command-to-string (format "cargo upgrade %s" upgrade))))
- (if (string-match "error: no such subcommand:" output)
- (rustic-cargo-install-crate-p "edit")
- (rustic-cargo-reload-outdated)))))
-
-;;; New project
-
-(defun rustic-create-project (project-path is-new &optional bin)
- "Run either 'cargo new' if IS-NEW is non-nil, or 'cargo init' otherwise.
-Creates or initializes the directory at the path specified by PROJECT-PATH. If
-BIN is not nil, create a binary application, otherwise a library."
- (let* ((cmd (if is-new "new" "init"))
- (bin (if (or bin (y-or-n-p "Create new binary package? "))
- "--bin"
- "--lib"))
- (new-sentinel (lambda (_process signal)
- (when (equal signal "finished\n")
- (message (format "Created new package: %s"
- (file-name-base project-path)))
- (when rustic-cargo-open-new-project
- (find-file (concat project-path
- (if (string= bin "--bin")
- "/src/main.rs"
- "/src/lib.rs")))))))
- (proc (format "rustic-cargo-%s-process" cmd))
- (buf (format "*cargo-%s*" cmd)))
- (make-process :name proc
- :buffer buf
- :command (list rustic-cargo-bin cmd bin project-path)
- :sentinel new-sentinel)))
-
-;;;###autoload
-(defun rustic-cargo-new (project-path &optional bin)
- "Run 'cargo new' to start a new package in the path specified by PROJECT-PATH.
-If BIN is not nil, create a binary application, otherwise a library."
- (interactive "DProject path: ")
- (rustic-create-project project-path t bin))
-
-;;;###autoload
-(defun rustic-cargo-init (project-path &optional bin)
- "Run 'cargo init' to initialize a directory in the path specified by PROJECT-PATH.
-If BIN is not nil, create a binary application, otherwise a library."
- (interactive "DProject path: ")
- (rustic-create-project project-path nil bin))
-
-;;; Cargo commands
-
-(defun rustic-run-cargo-command (command &optional args)
- "Run the specified COMMAND with cargo."
- (rustic-compilation-process-live)
- (rustic-compilation-start (split-string command) args))
-
-;;;###autoload
-(defun rustic-cargo-build ()
- "Run 'cargo build' for the current project."
- (interactive)
- (rustic-run-cargo-command "cargo build"))
-
-;;;###autoload
-(defun rustic-cargo-run (&optional arg)
- "Run 'cargo run' for the current project.
-If running with prefix command `C-u', read whole command from minibuffer."
- (interactive "P")
- (let* ((command (if arg
- (read-from-minibuffer "Cargo run command: " "cargo run ")
- (concat rustic-cargo-bin " run "
- (read-from-minibuffer
- "Run arguments: "
- (car compile-history)
- nil nil
- 'compile-history)))))
- (rustic-run-cargo-command command (list :mode 'rustic-cargo-run-mode))))
-
-(define-derived-mode rustic-cargo-run-mode rustic-compilation-mode "Cargo run"
- "Mode for 'cargo run' that derives from `rustic-compilation-mode', but uses
-the keymap of `comint-mode' so user input is possible."
- (buffer-disable-undo)
- (setq buffer-read-only nil)
- (use-local-map comint-mode-map))
-
-;;;###autoload
-(defun rustic-cargo-clean ()
- "Run 'cargo clean' for the current project."
- (interactive)
- (rustic-run-cargo-command "cargo clean"))
-
-;;;###autoload
-(defun rustic-cargo-check ()
- "Run 'cargo check' for the current project."
- (interactive)
- (rustic-run-cargo-command "cargo check"))
-
-;;;###autoload
-(defun rustic-cargo-bench ()
- "Run 'cargo bench' for the current project."
- (interactive)
- (rustic-run-cargo-command "cargo bench"))
-
-;;;###autoload
-(defun rustic-cargo-build-doc ()
- "Build the documentation for the current project."
- (interactive)
- (if (y-or-n-p "Create documentation for dependencies?")
- (rustic-run-cargo-command "cargo doc")
- (rustic-run-cargo-command "cargo doc --no-deps")))
-
-;; TODO: buffer with cargo output should be in rustic-compilation-mode
-;;;###autoload
-(defun rustic-cargo-doc ()
- "Open the documentation for the current project in a browser.
-The documentation is built if necessary."
- (interactive)
- (if (y-or-n-p "Open docs for dependencies as well?")
- ;; open docs only works with synchronous process
- (shell-command "cargo doc --open")
- (shell-command "cargo doc --open --no-deps")))
-
-;;; cargo edit
-
-(defun rustic-cargo-edit-installed-p ()
- "Check if cargo-edit is installed. If not, ask the user if he wants to install it."
- (if (executable-find "cargo-add") t (rustic-cargo-install-crate-p "edit") nil))
-
-;;;###autoload
-(defun rustic-cargo-add (&optional arg)
- "Add crate to Cargo.toml using 'cargo add'.
-If running with prefix command `C-u', read whole command from minibuffer."
- (interactive "P")
- (when (rustic-cargo-edit-installed-p)
- (let* ((command (if arg
- (read-from-minibuffer "Cargo add command: " "cargo add ")
- (concat "cargo add " (read-from-minibuffer "Crate: ")))))
- (rustic-run-cargo-command command))))
-
-;;;###autoload
-(defun rustic-cargo-rm (&optional arg)
- "Remove crate from Cargo.toml using 'cargo rm'.
-If running with prefix command `C-u', read whole command from minibuffer."
- (interactive "P")
- (when (rustic-cargo-edit-installed-p)
- (let* ((command (if arg
- (read-from-minibuffer "Cargo rm command: " "cargo rm ")
- (concat "cargo rm " (read-from-minibuffer "Crate: ")))))
- (rustic-run-cargo-command command))))
-
-;;;###autoload
-(defun rustic-cargo-upgrade (&optional arg)
- "Upgrade dependencies as specified in the local manifest file using 'cargo upgrade'.
-If running with prefix command `C-u', read whole command from minibuffer."
- (interactive "P")
- (when (rustic-cargo-edit-installed-p)
- (let* ((command (if arg
- (read-from-minibuffer "Cargo upgrade command: " "cargo upgrade ")
- (concat "cargo upgrade"))))
- (rustic-run-cargo-command command))))
-
-(provide 'rustic-cargo)
-;;; rustic-cargo.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-compile.el b/emacs.d/elpa/rustic-20210609.1900/rustic-compile.el
deleted file mode 100644
index 0742a1f..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-compile.el
+++ /dev/null
@@ -1,540 +0,0 @@
-;;; rustic-compile.el --- Compile facilities -*-lexical-binding: t-*-
-
-;;; Commentary:
-
-;; Unlike compile.el, rustic makes use of a non dumb terminal in order to receive
-;; all ANSI control sequences, which get translated by xterm-color.
-;; This file also adds a derived compilation mode. Error matching regexes from
-;; compile.el are removed.
-
-;;; Code:
-
-(require 'markdown-mode)
-(require 'xterm-color)
-
-(require 'compile)
-
-(require 'rustic)
-
-(defvar rustic-format-trigger)
-(defvar rustic-format-on-save)
-
-;;; Customization
-
-(defgroup rustic-compilation nil
- "Rust Compilation."
- :group 'rustic
- :group 'processes)
-
-(defcustom rustic-compile-command (purecopy "cargo build")
- "Default command for rust compilation."
- :type 'string
- :group 'rustic-compilation)
-
-(defcustom rustic-compile-display-method 'display-buffer
- "Default function used for displaying compilation buffer."
- :type 'function
- :group 'rustic-compilation)
-
-(defcustom rustic-compile-backtrace "0"
- "Set environment variable `RUST_BACKTRACE'."
- :type '(choice (string :tag "0")
- (string :tag "1")
- (string :tag "full"))
- :group 'rustic-compilation)
-
-(defcustom rustic-list-project-buffers-function
- (if (fboundp 'projectile-project-buffers)
- 'projectile-project-buffers
- 'rustic-project-buffer-list)
- "Function used to list buffers belonging to current project."
- :type '(choice (const projectile-project-buffers)
- (const rustic-project-buffer-list)
- function)
- :group 'rustic)
-
-;;; Faces
-
-(define-obsolete-face-alias 'rustic-message-face
- 'rustic-message "1.2")
-(define-obsolete-face-alias 'rustic-compilation-error-face
- 'rustic-compilation-error "1.2")
-(define-obsolete-face-alias 'rustic-compilation-warning-face
- 'rustic-compilation-warning "1.2")
-(define-obsolete-face-alias 'rustic-compilation-info-face
- 'rustic-compilation-info "1.2")
-(define-obsolete-face-alias 'rustic-compilation-line-face
- 'rustic-compilation-line "1.2")
-(define-obsolete-face-alias 'rustic-compilation-column-face
- 'rustic-compilation-column "1.2")
-
-(defface rustic-message
- '((t :inherit default))
- "Don't use `compilation-message-face', as ansi colors get messed up."
- :group 'rustic-compilation)
-
-(defface rustic-compilation-error
- '((t :inherit default))
- "Override `compilation-error-face' for rust compilation."
- :group 'rustic-compilation)
-
-(defface rustic-compilation-warning
- '((t :inherit default))
- "Override `compilation-warning-face' for rust compilation."
- :group 'rustic-compilation)
-
-(defface rustic-compilation-info
- '((t :inherit default))
- "Override `compilation-info-face' for rust compilation."
- :group 'rustic-compilation)
-
-(defface rustic-compilation-line
- '((t :inherit default))
- "Override `compilation-line-face' for rust compilation."
- :group 'rustic-compilation)
-
-(defface rustic-compilation-column
- '((t :inherit default))
- "Override `compilation-column-face' for rust compilation."
- :group 'rustic-compilation)
-
-(defcustom rustic-ansi-faces ["black"
- "red3"
- "green3"
- "yellow3"
- "blue2"
- "magenta3"
- "cyan3"
- "white"]
- "Term ansi faces."
- :type '(vector string string string string string string string string)
- :group 'rustic-compilation)
-
-;;; Compilation-mode
-
-(defvar rustic-compilation-mode-map
- (let ((map (make-sparse-keymap)))
- (suppress-keymap map t)
- (set-keymap-parent map compilation-mode-map)
- (define-key map "p" 'rustic-popup)
- (define-key map "g" 'rustic-recompile)
- map)
- "Keymap for rust compilation log buffers.")
-
-(defvar rustic-compilation-error
- (let ((err "^error[^:]*:[^\n]*\n\s*-->\s")
- (file "\\([^\n]+\\)")
- (start-line "\\([0-9]+\\)")
- (start-col "\\([0-9]+\\)"))
- (let ((re (concat err file ":" start-line ":" start-col)))
- (cons re '(1 2 3))))
- "Create hyperlink in compilation buffers for rust errors.")
-
-(defvar rustic-compilation-warning
- (let ((warning "^warning:[^\n]*\n\s*-->\s")
- (file "\\([^\n]+\\)")
- (start-line "\\([0-9]+\\)")
- (start-col "\\([0-9]+\\)"))
- (let ((re (concat warning file ":" start-line ":" start-col)))
- (cons re '(1 2 3 1)))) ;; 1 for warning
- "Create hyperlink in compilation buffers for rust warnings.")
-
-(defvar rustic-compilation-info
- (let ((file "\\([^\n]+\\)")
- (start-line "\\([0-9]+\\)")
- (start-col "\\([0-9]+\\)"))
- (let ((re (concat "^ *::: " file ":" start-line ":" start-col)))
- (cons re '(1 2 3 0)))) ;; 0 for info type
- "Create hyperlink in compilation buffers for file paths preceded by ':::'.")
-
-(defvar rustic-compilation-panic
- (let ((panic "thread '[^']+' panicked at '[^']+', ")
- (file "\\([^\n]+\\)")
- (start-line "\\([0-9]+\\)")
- (start-col "\\([0-9]+\\)"))
- (let ((re (concat panic file ":" start-line ":" start-col)))
- (cons re '(1 2 3))))
- "Match thread panics.")
-
-(define-compilation-mode rustic-compilation-mode "rust-compilation"
- "Rust compilation mode.
-
-Error matching regexes from compile.el are removed."
- (setq-local compilation-message-face 'rustic-message)
- (setq-local compilation-error-face 'rustic-compilation-error)
- (setq-local compilation-warning-face 'rustic-compilation-warning)
- (setq-local compilation-info-face 'rustic-compilation-info)
- (setq-local compilation-column-face 'rustic-compilation-column)
- (setq-local compilation-line-face 'rustic-compilation-line)
-
- (setq-local xterm-color-names-bright rustic-ansi-faces)
- (setq-local xterm-color-names rustic-ansi-faces)
-
- (setq-local compilation-error-regexp-alist-alist nil)
- (add-to-list 'compilation-error-regexp-alist-alist
- (cons 'rustic-error rustic-compilation-error))
- (add-to-list 'compilation-error-regexp-alist-alist
- (cons 'rustic-warning rustic-compilation-warning))
- (add-to-list 'compilation-error-regexp-alist-alist
- (cons 'rustic-info rustic-compilation-info))
- (add-to-list 'compilation-error-regexp-alist-alist
- (cons 'rustic-panic rustic-compilation-panic))
-
- (setq-local compilation-error-regexp-alist nil)
- (add-to-list 'compilation-error-regexp-alist 'rustic-error)
- (add-to-list 'compilation-error-regexp-alist 'rustic-warning)
- (add-to-list 'compilation-error-regexp-alist 'rustic-info)
- (add-to-list 'compilation-error-regexp-alist 'rustic-panic)
-
- (add-hook 'compilation-filter-hook #'rustic-insert-errno-button nil t))
-
-;;; Compilation Process
-
-(defvar rustic-compilation-process-name "rustic-compilation-process"
- "Process name for rust compilation processes.")
-
-(defvar rustic-compilation-buffer-name "*rustic-compilation*"
- "Buffer name for rust compilation process buffers.")
-
-(defun rustic-make-process (&rest args)
- "Wrapper for `make-process'.
-
-Set environment variables for rust process."
- (let ((coding-system-for-read 'binary)
- (process-environment (nconc
- (list
- (format "TERM=%s" "ansi")
- (format "RUST_BACKTRACE=%s" rustic-compile-backtrace))
- process-environment)))
- (let ((process (apply
- #'start-file-process (plist-get args :name)
- (plist-get args :buffer)
- (plist-get args :command))))
- (set-process-filter process (plist-get args :filter))
- (set-process-sentinel process (plist-get args :sentinel))
- (set-process-coding-system process 'utf-8-emacs-unix 'utf-8-emacs-unix)
- process)))
-
-(defun rustic-compilation-setup-buffer (buf dir mode &optional no-mode-line)
- "Prepare BUF for compilation process."
- (let ((inhibit-read-only t))
- (with-current-buffer buf
- (erase-buffer)
- (setq default-directory dir)
- (funcall mode)
- (unless no-mode-line
- (setq mode-line-process
- '((:propertize ":%s" face compilation-mode-line-run)
- compilation-mode-line-errors)))
- (force-mode-line-update)
- (if (or compilation-auto-jump-to-first-error
- (eq compilation-scroll-output 'first-error))
- (set (make-local-variable 'compilation-auto-jump-to-next) t))
- (sit-for 0))))
-
-(defvar rustic-before-compilation-hook nil)
-
-(defun rustic-compilation-start (command &optional args)
- "Start a compilation process COMMAND with ARGS.
-ARGS is a plist that affects how the process is run,
-see `rustic-compilation' for details. First run
-`rustic-before-compilation-hook' and if any of these
-functions fails, then do not start compilation."
- (when (run-hook-with-args-until-failure 'rustic-before-compilation-hook)
- (rustic-compilation command args)))
-
-(defun rustic-compilation (command &optional args)
- "Start a compilation process with COMMAND.
-
-ARGS is a plist that affects how the process is run.
-- `:no-display' don't display buffer when starting compilation process
-- `:buffer' name for process buffer
-- `:process' name for compilation process
-- `:mode' mode for process buffer
-- `:directory' set `default-directory'
-- `:sentinel' process sentinel"
- (let ((buf (get-buffer-create
- (or (plist-get args :buffer) rustic-compilation-buffer-name)))
- (process (or (plist-get args :process) rustic-compilation-process-name))
- (mode (or (plist-get args :mode) 'rustic-compilation-mode))
- (directory (or (plist-get args :directory) (rustic-buffer-workspace)))
- (sentinel (or (plist-get args :sentinel) #'compilation-sentinel)))
- (rustic-compilation-setup-buffer buf directory mode)
- (setq next-error-last-buffer buf)
- (unless (plist-get args :no-display)
- (funcall rustic-compile-display-method buf))
- (with-current-buffer buf
- (rustic-make-process :name process
- :buffer buf
- :command command
- :filter #'rustic-compilation-filter
- :sentinel sentinel))))
-
-(defun rustic-compilation-filter (proc string)
- "Insert the text emitted by PROC.
-Translate STRING with `xterm-color-filter'."
- (let ((buffer (process-buffer proc))
- buffer-empty-p)
- (when (buffer-live-p buffer)
- (with-current-buffer buffer
- (when (= (buffer-size) 0)
- (setq buffer-empty-p t))
- (let ((inhibit-read-only t)
- ;; `save-excursion' doesn't use the right insertion-type for us.
- (pos (copy-marker (point) t))
- ;; `save-restriction' doesn't use the right insertion type either:
- ;; If we are inserting at the end of the accessible part of the
- ;; buffer, keep the inserted text visible.
- (min (point-min-marker))
- (max (copy-marker (point-max) t))
- (compilation-filter-start (marker-position (process-mark proc)))
- (xterm-string (xterm-color-filter string)))
- (unwind-protect
- (progn
- (widen)
- (goto-char compilation-filter-start)
- ;; We used to use `insert-before-markers', so that windows with
- ;; point at `process-mark' scroll along with the output, but we
- ;; now use window-point-insertion-type instead.
-
- (insert xterm-string)
- (compilation--ensure-parse (point-max))
-
- (unless comint-inhibit-carriage-motion
- (comint-carriage-motion (process-mark proc) (point)))
- (set-marker (process-mark proc) (point))
- (run-hooks 'compilation-filter-hook))
- (goto-char pos)
- (narrow-to-region min max)
- (set-marker pos nil)
- (set-marker min nil)
- (set-marker max nil))))
- ;; Issue #101: set window point to `point-min' when `compilation-scroll-output' is nil
- (when (and (not compilation-scroll-output) buffer-empty-p)
- (let ((win (get-buffer-window buffer)))
- (set-window-start win (point-min))
- (set-window-point win (point-min)))))))
-
-(defun rustic-compilation-process-live (&optional nosave)
- "Ask to kill live rustic process if any and call `rustic-save-some-buffers'.
-If optional NOSAVE is non-nil, then do not do the latter.
-Return non-nil if there was a live process."
- (let ((procs (mapcan (lambda (proc)
- (and proc
- (let ((proc (get-process proc)))
- (and (process-live-p proc)
- (list proc)))))
- (list rustic-compilation-process-name
- (bound-and-true-p rustic-format-process-name)
- (bound-and-true-p rustic-clippy-process-name)
- (bound-and-true-p rustic-test-process-name)))))
- (when (> (length procs) 1)
- (error "BUG: Multiple live rustic processes: %s" procs))
- (when procs
- (rustic-process-kill-p (car procs)))
- (unless nosave
- (rustic-save-some-buffers))
- procs))
-
-(defun rustic-process-kill-p (proc &optional no-error)
- "Don't allow two rust processes at once.
-
-If NO-ERROR is t, don't throw error if user chooses not to kill running process."
- (if (yes-or-no-p
- (format "`%s' is running; kill it? " proc))
- (condition-case ()
- (progn
- (interrupt-process proc)
- (sit-for 0.5)
- (delete-process proc))
- (error nil))
- (unless no-error
- (error "Cannot have two rust processes at once"))))
-
-(defun rustic-save-some-buffers ()
- "Unlike `save-some-buffers', only consider project related files.
-
-The variable `buffer-save-without-query' can be used for customization and
-buffers are formatted after saving if turned on by `rustic-format-trigger'."
- (let ((buffers (cl-remove-if-not
- #'buffer-file-name
- (if (fboundp rustic-list-project-buffers-function)
- (funcall rustic-list-project-buffers-function)
- (buffer-list))))
- (b (get-buffer (bound-and-true-p rustic-format-buffer-name))))
- (when (buffer-live-p b)
- (kill-buffer b))
- (dolist (buffer buffers)
- (when (and (buffer-live-p buffer)
- (buffer-modified-p buffer))
- (with-current-buffer buffer
- (let ((saved-p nil))
- ;; also set rustic-format-on-save for backwards compatibility
- (let ((rustic-format-trigger nil)
- (rustic-format-on-save nil))
- (setq saved-p
- (if buffer-save-without-query
- (progn (save-buffer) t)
- (if (yes-or-no-p (format "Save file %s ? "
- (buffer-file-name buffer)))
- (progn (save-buffer) t)
- nil))))
- (when (and saved-p
- (eq major-mode 'rustic-mode)
- (fboundp 'rustic-maybe-format-after-save))
- (rustic-maybe-format-after-save buffer))))))))
-
-(defun rustic-compile-goto-error-hook (orig-fun &rest args)
- "Provide possibility use `compile-goto-error' on line numbers in compilation buffers.
-This hook checks if there's a line number at the beginning of the
-current line in an error section."
- (-if-let* ((rustic-p (eq major-mode 'rustic-compilation-mode))
- (line-contents (buffer-substring-no-properties
- (line-beginning-position)
- (line-end-position)))
- (line-number-p (string-match "^[0-9]+\s+\|" line-contents))
- (line-number (car (split-string line-contents))))
- (save-excursion
- ;; find compilation message in error
- (while (not (or (get-text-property (point) 'compilation-message)
- (bobp)))
- (forward-line -1))
- ;; get file of text property
- (let* ((msg (get-text-property (point) 'compilation-message))
- (loc (compilation--message->loc msg))
- (file (caar (compilation--loc->file-struct loc))))
- ;; open file of error and goto line number that we parsed from the line we are on
- (with-current-buffer (find-file-other-window file)
- (save-restriction
- (widen)
- (goto-char (point-min))
- (forward-line (1- (string-to-number line-number)))))))
- (apply orig-fun args)))
-
-(advice-add 'compile-goto-error :around #'rustic-compile-goto-error-hook)
-
-(defun rustic-compile-send-input ()
- "Read string from minibuffer and send it to the rust process of the current
-buffer."
- (interactive)
- (let ((input (read-from-minibuffer "Send input to rust process: "))
- (proc (get-buffer-process (current-buffer)))
- (inhibit-read-only t))
- (process-send-string proc (concat input "\n"))))
-
-
-;;; Rustc
-
-(defface rustic-errno-face
- '((t :foreground "red3"))
- "Error number face"
- :group 'rustic-compilation)
-
-(defun rustic-insert-errno-button ()
- "Insert buttons in `rustic-compilation-mode'."
- (save-excursion
- (let ((start compilation-filter-start)
- (end (point)))
- (goto-char start)
- (save-match-data
- (while (re-search-forward (concat "error\\[E[0-9]+\\]") end t)
- (make-button (match-beginning 0)
- (match-end 0)
- :type 'rustc-errno))))))
-
-(defun rustic-explain-error (button)
- "Open buffer with explanation for error at point."
- (let* ((button-string (button-label button))
- (errno (progn (string-match "E[0-9]+" button-string)
- (match-string 0 button-string)))
- (buf (get-buffer-create "*rust errno*"))
- (inhibit-read-only t))
- (with-current-buffer buf
- (erase-buffer)
- (insert (shell-command-to-string
- (concat "rustc --explain=" errno)))
- (markdown-view-mode)
- (setq
- header-line-format
- (concat (propertize " " 'display
- `(space :align-to (- right-fringe ,(1+ (length errno)))))
- (propertize errno 'face 'rustic-errno-face)))
- (setq-local markdown-fontify-code-blocks-natively t)
- (setq-local markdown-fontify-code-block-default-mode 'rustic-mode)
- (markdown-toggle-markup-hiding 1)
- (goto-char (point-min)))
- (pop-to-buffer buf)))
-
-(define-button-type 'rustc-errno
- 'action #'rustic-explain-error
- 'follow-link t
- 'face 'rustic-errno-face
- 'help-echo "mouse-1, RET: Explain errno")
-
-;;; Interactive
-
-;;;###autoload
-(defun rustic-compile (&optional arg)
- "Compile rust project.
-
-If `compilation-read-command' is non-nil or if called with prefix
-argument ARG then read the command in the minibuffer. Otherwise
-use `rustic-compile-command'.
-
-In either store the used command in `compilation-arguments'."
- (interactive "P")
- (setq compilation-arguments
- (if (or compilation-read-command arg)
- (read-from-minibuffer "Compile command: "
- (or compilation-arguments
- rustic-compile-command))
- rustic-compile-command))
- (setq compilation-directory (rustic-buffer-workspace))
- (rustic-compilation-process-live)
- (rustic-compilation-start (split-string compilation-arguments)
- (list :directory compilation-directory)))
-
-;;;###autoload
-(defun rustic-recompile ()
- "Re-compile the program using `compilation-arguments'."
- (interactive)
- (let* ((command (or compilation-arguments rustic-compile-command))
- (dir compilation-directory))
- (rustic-compilation-process-live)
- (rustic-compilation (split-string command) (list :directory dir))))
-
-;;; Spinner
-
-(require 'spinner)
-
-(defcustom rustic-display-spinner t
- "Display spinner."
- :type 'boolean
- :group 'rustic)
-
-(defcustom rustic-spinner-type 'horizontal-moving
- "Holds the type of spinner to be used in the mode-line.
-Takes a value accepted by `spinner-start'."
- :type `(choice (choice :tag "Choose a spinner by name"
- ,@(mapcar (lambda (c) (list 'const (car c)))
- spinner-types))
- (const :tag "A random spinner" random)
- (repeat :tag "A list of symbols from `spinner-types' to randomly choose from"
- (choice :tag "Choose a spinner by name"
- ,@(mapcar (lambda (c) (list 'const (car c)))
- spinner-types)))
- (vector :tag "A user defined vector"
- (repeat :inline t string))))
-
-(defmacro rustic-with-spinner (spinner val mode-line &rest body)
- (declare (indent defun))
- `(when rustic-display-spinner
- (when (spinner-p ,spinner)
- (spinner-stop ,spinner))
- (setq ,spinner ,val)
- (setq mode-line-process ,mode-line)
- ,@body))
-
-;;; _
-(provide 'rustic-compile)
-;;; rustic-compile.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-doc.el b/emacs.d/elpa/rustic-20210609.1900/rustic-doc.el
deleted file mode 100644
index b3743bd..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-doc.el
+++ /dev/null
@@ -1,385 +0,0 @@
-;;; rustic-doc.el --- Browse rust documentation as .org files -*- lexical-binding: t -*-
-
-;; Copyright (c) 2020 Sam Hedin
-
-;; Author: Sam Hedin <sam.hedin@gmail.com>
-;; Jonas Møller <jonas.moeller2@protonmail.com>
-
-;;; Commentary:
-
-;; This package lets you convert rustic-doc html-files to org mode
-;; files, and lets you browse them with `rustic-doc-search'.
-
-;; Run `M-x rustic-doc-setup' to download the required files and
-;; convert the rust standard library.
-
-;; Run `M-x rustic-doc-convert-current-package' to generate and
-;; convert docs for the package you are currently visiting.
-
-;;; Code:
-
-(require 'url)
-(require 'lsp-mode)
-(require 'f)
-
-(eval-and-compile
- (if (< emacs-major-version 27)
- (defun rustic-doc--xdg-data-home ()
- (or (getenv "XDG_DATA_HOME")
- (concat (file-name-as-directory (getenv "HOME"))
- ".local/share")))
- (require 'xdg)
- (fset 'rustic-doc--xdg-data-home 'xdg-data-home)))
-
-(defvar rustic-doc-lua-filter (concat (file-name-as-directory (getenv "HOME"))
- ".local/bin/rustic-doc-filter.lua")
- "Save location for the rustic-doc lua filter.")
-
-(defvar rustic-doc-convert-prog (concat (file-name-as-directory (getenv "HOME"))
- ".local/bin/rustic-doc-convert.sh")
- "Save location for the rustic-doc conversion script.")
-
-(defvar rustic-doc-source-repo
- "https://raw.githubusercontent.com/brotzeit/rustic/master/rustic-doc/")
-
-(defvar rustic-doc-current-project nil
- "Location to search for documentation.
-All projects and std by default, otherwise last open project and std.")
-
-(defvar rustic-doc-save-loc (concat (rustic-doc--xdg-data-home)
- "/emacs/rustic-doc"))
-
-(defvar rustic-doc-resources
- `((,rustic-doc-convert-prog
- (:exec)
- ,(concat rustic-doc-source-repo "convert.sh"))
- (,rustic-doc-lua-filter
- ()
- ,(concat rustic-doc-source-repo "filter.lua"))))
-
-(defun rustic-doc-default-rg-search-command ()
- "The default search command when using helm-ag.
-Needs to be a function because of its reliance on
-`rustic-doc-current-project'"
- (concat "rg --smart-case --no-heading --color=never --line-number "
- (if rustic-doc-current-project " -L" "")))
-
-(defcustom rustic-doc-rg-search-command 'rustic-doc-default-rg-search-command
- "The default command string to pass helm-ag when searching."
- :type 'function
- :group 'rustic-doc)
-
-(defvar helm-ag-base-command)
-(defvar helm-ag-success-exit-status)
-(declare-function helm-ag "ext:helm-ag")
-
-(defun rustic-doc-default-search-function (search-dir search-term)
- "Default search functionality.
-Uses helm-ag and ripgrep if possible, grep otherwise.
-Search for SEARCH-TERM inside SEARCH-DIR"
- (cond
- ((and (require 'helm-ag nil t) (executable-find "rg"))
- (let* ((helm-ag-base-command (funcall rustic-doc-rg-search-command))
- (helm-ag-success-exit-status '(0 2)))
- (condition-case nil
- (helm-ag search-dir search-term)
- ;; If the search didn't turn anything up we re-run the search
- ;; in the top level searchdir.
- (error (helm-ag rustic-doc-save-loc search-term)))))
- ((executable-find "rg")
- (grep (format "%s '%s' %s"
- (rustic-doc-default-rg-search-command)
- search-term
- search-dir)))
- (t
- (grep (format "grep -RPIni '%s' %s" search-term search-dir)))))
-
-
-(defcustom rustic-doc-search-function 'rustic-doc-default-search-function
- "Function to use for searching documentation.
-The function should take search-dir and search-term as arguments."
- :type 'function
- :group 'rustic-doc)
-
-(defun rustic-doc--install-resources ()
- "Install or update the rustic-doc resources."
- (dolist (resource rustic-doc-resources)
- (pcase resource
- (`(,dst ,opts ,src)
- (condition-case nil
- (progn
- (unless (f-exists? (f-dirname dst))
- (f-mkdir (f-dirname dst)))
- (url-copy-file src dst t)
- (when (memq :exec opts)
- (call-process (executable-find "chmod")
- nil
- nil
- nil
- "+x"
- dst)))
- (error (progn
- (if (file-exists-p dst)
- (message (format "Could not update %s, using existing one"
- dst))
- (error (format "Could not retrieve %s" dst)))))))
- (x (error "Invalid resource spec: %s" x)))))
-
-;;;###autoload
-(defun rustic-doc-dumb-search (search-term)
- "Search all projects and std for SEARCH-TERM.
-Use this when `rustic-doc-search' does not find what you're looking for.
-Add `universal-argument' to only search level 1 headers.
-See `rustic-doc-search' for more information."
- (interactive (let ((short-name (alist-get 'short-name
- (rustic-doc--thing-at-point))))
- (list (read-string (format "search term, default %s: " short-name)
- nil
- nil
- short-name))))
- (rustic-doc-search search-term t))
-
-
-;;;###autoload
-(defun rustic-doc-search (search-term &optional root)
- "Search the rust documentation for SEARCH-TERM.
-Only searches in headers (structs, functions, traits, enums, etc)
-to limit the number of results.
-To limit search results to only level 1 headers, add `universal-argument'
-Level 1 headers are things like struct or enum names.
-if ROOT is non-nil the search is performed from the root dir.
-This function tries to be smart and limits the search results
-as much as possible. If it ends up being so smart that
-it doesn't manage to find what you're looking for, try `rustic-doc-dumb-search'."
- (interactive (let ((short-name (alist-get 'short-name
- (rustic-doc--thing-at-point))))
- (list (read-string (format "search term, default %s: " short-name)
- nil
- nil
- short-name))))
-
- (rustic-doc--update-current-project)
- (let* ((thing-at-point (rustic-doc--thing-at-point))
- (short-name (alist-get 'short-name thing-at-point))
- ;; If the user did not accept the default search suggestion,
- ;; we should not search in that suggestion's directory.
- (search-dir
- (cond
- (root rustic-doc-save-loc)
- ((string-equal short-name search-term)
- (alist-get 'search-dir thing-at-point))
- (t (rustic-doc--project-doc-dest))))
- ;; If the prefix arg is provided, we only search for level 1
- ;; headers by making sure that there is only one * at the
- ;; beginning of the line.
- (regex (if current-prefix-arg
- (progn
- (setq current-prefix-arg nil)
- "^\\*")
- "^\\*+"))
- ;; This seq-reduce turns `enum option' into (kind of)
- ;; `enum.*option', which lets there be chars between the
- ;; searched words
- (regexed-search-term
- (concat regex
- ;; Regex explanation
- ;; `-' => Do not match if a return type. A search
- ;; for Option should not show is_some -> Option
- ;; `(' => Do not match if it's an argument name.
- ;; `<' => Do not match if it's a generic type arg
- (seq-reduce (lambda (acc s)
- (concat acc "[^-\*(<]*" s))
- (split-string search-term " ")
- ""))))
- (unless (file-directory-p rustic-doc-save-loc)
- (rustic-doc-setup)
- (message "Running first time setup. Please re-run your search\
- once conversion has completed.")
- (sleep-for 3))
- ;; If the user has not run `rustic-doc-convert-current-package' in
- ;; the current project, we create a default directory that only
- ;; contains a symlink to std.
- (unless (file-directory-p (rustic-doc--project-doc-dest))
- (rustic-doc-create-project-dir))
- (funcall rustic-doc-search-function search-dir regexed-search-term)))
-
-(defun rustic-doc--update-current-project ()
- "Update `rustic-doc-current-project' if editing a rust file, otherwise leave it."
- (when (and lsp-mode
- (derived-mode-p 'rust-mode 'rustic-mode))
- (setq rustic-doc-current-project (lsp-workspace-root))))
-
-(defun rustic-doc--deepest-dir (path)
- "Find the deepest existing and non-empty arg-directory parent of PATH.
-We can sometimes infer the filepath from the crate name.
-E.g the enum std::option::Option is in the folder std/option.
-Some filepaths can not be inferred properly, seemingly because of
-URL `https://github.com/rust-lang/rust/issues/21934'.
-In these cases, the deepest dir will be the current project dir."
- (if (and (file-exists-p path)
- (file-directory-p path)
- (not (f-empty-p path)))
- path
- (rustic-doc--deepest-dir (f-slash (f-dirname path)))))
-
-(defun rustic-doc--project-doc-dest ()
- "The location of the documentation for the current or last seen project.
-If the user has not visited a project, returns the main doc directory."
- (if rustic-doc-current-project
- (f-join rustic-doc-save-loc
- (f-filename rustic-doc-current-project))
- rustic-doc-save-loc))
-
-(defun rustic-doc-create-project-dir ()
- "Create a rustic-doc arg-directory for the current project. Link with std."
- (let* ((link-tgt (concat (file-name-as-directory (rustic-doc--xdg-data-home))
- "emacs/rustic-doc/std"))
- (link-name (concat (rustic-doc--project-doc-dest)
- "/std"))
- (current-doc-dest (rustic-doc--project-doc-dest)))
- (if current-doc-dest
- (progn
- (make-directory (rustic-doc--project-doc-dest)
- t)
- (make-symbolic-link link-tgt link-name t))
- (message "Couldn't create project doc directory."))))
-
-;;;###autoload
-(defun rustic-doc-convert-current-package ()
- "Convert the documentation for a project and its dependencies."
- (interactive)
- (unless (file-directory-p rustic-doc-save-loc)
- (rustic-doc-setup)
- (message "Running first time setup.")
- (sleep-for 3))
- (if rustic-doc-current-project
- (progn
- (message "Converting documentation for %s "
- rustic-doc-current-project)
- (if (/= 0 (call-process "cargo" nil "*cargo-makedocs*" nil "makedocs"))
- (message "\
-cargo makedocs could not generate docs for the current package. \
-See buffer *cargo-makedocs* for more info")
- (let* ((docs-src
- (concat (file-name-as-directory rustic-doc-current-project)
- "target/doc"))
- ;; FIXME: Many projects could share the same docs.
- ;; *However* that would have to be versioned, so
- ;; we'll have to figure out a way to coerce `<crate>-<version>`
- ;; strings out of cargo, or just parse the Cargo.toml file, but
- ;; then we'd have to review different parsing solutions.
- (finish-func (lambda (_p)
- (message "Finished converting docs for %s"
- rustic-doc-current-project))))
- (rustic-doc-create-project-dir)
- (rustic-doc--start-process "rustic-doc-convert"
- rustic-doc-convert-prog
- finish-func
- docs-src
- (rustic-doc--project-doc-dest)))))
- (message "Could not find project to convert. Visit a rust project first! \
-\(Or activate rustic-doc-mode if you are in one)")))
-
-(defun rustic-doc-install-deps ()
- "Install dependencies with Cargo."
- (if (not (executable-find "cargo"))
- (message "You need to have cargo installed to use rustic-doc")
- (let ((missing-rg (not (executable-find "rg")))
- (missing-fd (not (executable-find "fd")))
- (missing-makedocs (not (executable-find "cargo-makedocs"))))
- (when (and (or missing-fd missing-makedocs missing-rg)
- (y-or-n-p "Missing some dependencies for rustic doc, install them? "))
- (when missing-fd
- (rustic-doc--start-process "install-fd" "cargo" nil "install" "fd-find"))
- (when missing-rg
- (rustic-doc--start-process "install-rg" "cargo" nil "install" "ripgrep"))
- (when missing-makedocs
- (rustic-doc--start-process "install-makedocs" "cargo" nil
- "install" "cargo-makedocs"))))))
-
-;;;###autoload
-(defun rustic-doc-setup ()
- "Setup or update rustic-doc filter and convert script. Convert std."
- (interactive)
- (rustic-doc--install-resources)
- (rustic-doc-install-deps)
- (message "Setup is converting the standard library")
- (delete-directory (concat rustic-doc-save-loc "/std")
- t)
- (rustic-doc--start-process "rustic-doc-std-conversion"
- rustic-doc-convert-prog
- (lambda (_p)
- (message "Finished converting docs for std"))
- "std"))
-
-(defun rustic-doc--start-process (name program finish-func &rest program-args)
- (let* ((buf (generate-new-buffer (concat "*" name "*")))
- (proc (let ((process-connection-type nil))
- (apply #'start-process name buf program program-args))))
- (set-process-sentinel
- proc (lambda (proc event)
- (let ((buf (process-buffer proc)))
- (if (string-match-p (regexp-quote "abnormally") event)
- (message "Could not finish process: %s. \
-See the *Messages* buffer or %s for more info." event (concat "*" name "*"))
- (when finish-func
- (funcall finish-func proc))
- (when (buffer-live-p buf)
- (kill-buffer buf))))))
- proc))
-
-(defun rustic-doc--thing-at-point ()
- "Return info about `thing-at-point'. If `thing-at-point' is nil, return defaults."
- (if-let ((active lsp-mode)
- (lsp-content (-some->> (lsp--text-document-position-params)
- (lsp--make-request "textDocument/hover")
- (lsp--send-request)
- (lsp:hover-contents)))
- ;; `short-name' is the unqalified of a struct, function
- ;; etc, like `Option'
- (short-name (thing-at-point 'symbol t))
- ;; If symbol at point is a primitive, the `value' key is
- ;; different than in most cases. If it is a primitive, we
- ;; concat the name with primitive for searching.
- (lsp-info (or (nth 1
- (split-string (gethash "value" lsp-content)))
- (setq short-name
- (concat "primitive "
- (gethash "value" lsp-content)))))
- ;; If short-name was `Option', long-name would be `std::option::Option'
- (long-name (concat (cond
- ((string-prefix-p "core" lsp-info)
- (concat "std"
- (seq-drop lsp-info 4)))
- ((string-prefix-p "alloc" lsp-info)
- (concat "std"
- (seq-drop lsp-info 5)))
- (t lsp-info))
- "::"
- short-name))
- (search-dir (rustic-doc--deepest-dir
- (concat (rustic-doc--project-doc-dest)
- "/"
- (seq-reduce (lambda (path p)
- (concat path "/" p))
- (split-string long-name "::")
- "")))))
- `((search-dir . ,search-dir)
- (short-name . ,short-name))
- `((search-dir . ,(rustic-doc--project-doc-dest))
- (short-name . ,nil))))
-
-;;;###autoload
-(define-minor-mode rustic-doc-mode
- "Convert rust html docs to .org, and browse the converted docs."
- :lighter " browse rust documentation"
- :keymap (let ((map (make-sparse-keymap)))
- (define-key map (kbd "C-#") 'rustic-doc-search)
- map)
- (dolist (mode '(rust-mode-hook rustic-mode-hook org-mode-hook))
- (add-hook mode 'rustic-doc-mode))
- (rustic-doc--update-current-project))
-
-(provide 'rustic-doc)
-
-;;; rustic-doc.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-flycheck.el b/emacs.d/elpa/rustic-20210609.1900/rustic-flycheck.el
deleted file mode 100644
index ffc5ffc..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-flycheck.el
+++ /dev/null
@@ -1,201 +0,0 @@
-;;; rustic-flycheck.el --- Flycheck support -*-lexical-binding: t-*-
-
-;;; Code:
-
-(eval-when-compile (require 'let-alist))
-
-(require 'flycheck)
-(require 'json)
-
-(require 'rustic)
-
-(defcustom rustic-flycheck-clippy-params "--message-format=json -Zunstable-options"
- "Parameters for the flycheck clippy checker `rustic-clippy'."
- :type 'string
- :group 'rustic-flycheck)
-
-(defun rustic-flycheck-dirs-list (start end)
- "Return a list of directories from START (inclusive) to END (exclusive).
-E.g., if START is '/a/b/c/d' and END is '/a', return the list
-'(/a/b/c/d /a/b/c /a/b) in this order.
-START and END are strings representing file paths. END should be
-above START in the file hierarchy; if not, the list stops at the
-root of the file hierarchy."
- (let ((dirlist)
- (dir (expand-file-name start))
- (end (expand-file-name end)))
- (while (not (or (equal dir (car dirlist)) ; avoid infinite loop
- (file-equal-p dir end)))
- (push dir dirlist)
- (setq dir (directory-file-name (file-name-directory dir))))
- (nreverse dirlist)))
-
-(defun rustic-flycheck-get-cargo-targets (manifest)
- "Return the list of available Cargo targets for the given project.
-MANIFEST is the path to the Cargo.toml file of the project.
-Calls `cargo metadata --no-deps --manifest-path MANIFEST
---format-version 1', parses and collects the targets for the
-current workspace, and returns them in a list, or nil if no
-targets could be found."
- (let ((process-output-as-json
- (lambda (program &rest args)
- (with-temp-buffer
- (let ((code-or-signal (apply 'process-file program nil '(t nil) nil args)))
- (unless (equal code-or-signal 0)
- ;; Prevent from displaying "JSON readtable error".
- (let* ((args (combine-and-quote-strings (cons program args)))
- (error-message (if (stringp code-or-signal)
- (format "%s terminated by %s." args code-or-signal)
- (format "%s exited with %s." args code-or-signal))))
- (user-error error-message)))
- (goto-char (point-min))
- (let ((json-array-type 'list)
- (json-object-type 'alist))
- (json-read))))))
- (cargo (funcall flycheck-executable-find "cargo")))
- (unless cargo
- (user-error "flycheck-rust cannot find `cargo'. Please \
-make sure that cargo is installed and on your PATH. See \
-http://www.flycheck.org/en/latest/user/troubleshooting.html for \
-more information on setting your PATH with Emacs."))
- ;; metadata contains a list of packages, and each package has a list of
- ;; targets. We concatenate all targets, regardless of the package.
- (-when-let (packages (let-alist
- (funcall process-output-as-json
- cargo "metadata"
- "--no-deps"
- "--manifest-path" manifest
- "--format-version" "1")
- .packages))
- (seq-map (lambda (pkg)
- (let-alist pkg .targets))
- packages))))
-
-(defun rustic-flycheck-find-cargo-target (file-name)
- "Return the Cargo build target associated with FILE-NAME.
-
-FILE-NAME is the path of the file that is matched against the
-`src_path' value in the list of `targets' returned by `cargo
-read-manifest'.
-
-Return an alist ((KIND . k) (NAME . n) (REQUIRED-FEATURES . rf))
-where KIND is the target kind (lib, bin, test, example or bench),
-NAME the target name (usually, the crate name), and REQUIRED-FEATURES is the
-optional list of features required to build the selected target. If FILE-NAME
-exactly matches a target `src-path', this target is returned. Otherwise, return
-the closest matching target, or nil if no targets could be found.
-
-See http://doc.crates.io/manifest.html#the-project-layout for a
-description of the conventional Cargo project layout."
- (-when-let* ((workspace (rustic-buffer-workspace t))
- (manifest (file-local-name (concat workspace "Cargo.toml")))
- (packages (rustic-flycheck-get-cargo-targets manifest))
- (targets (-flatten-n 1 packages)))
- (let ((target
- (or
- ;; If there is a target that matches the file-name exactly, pick
- ;; that one
- (seq-find (lambda (target)
- (let-alist target (string= file-name .src_path)))
- targets)
- ;; Otherwise find the closest matching target by walking up the tree
- ;; from FILE-NAME and looking for targets in each directory. E.g.,
- ;; the file 'tests/common/a.rs' will look for a target in
- ;; 'tests/common', then in 'tests/', etc.
- (car (seq-find
- (lambda (pair)
- (-let [((&alist 'src_path target-path) . dir) pair]
- (file-equal-p dir (file-name-directory target-path))))
- ;; build a list of (target . dir) candidates
- (-table-flat
- 'cons targets
- (rustic-flycheck-dirs-list file-name workspace))))
- ;; If all else fails, just pick the first target
- (car targets))))
- ;; If target is 'custom-build', we pick another target from the same package (see GH-62)
- (when (string= "custom-build" (let-alist target (car .kind)))
- (setq target (->> packages
- ;; find the same package as current build-script buffer
- (--find (--any? (equal target it) it))
- (--find (not (equal target it))))))
- (when target
- (let-alist target
- (seq-filter (lambda (kv) (cdr kv))
- (list (cons 'kind (rustic-flycheck-normalize-target-kind .kind))
- (cons 'name .name)
- (cons 'required-features .required-features))))))))
-
-(defun rustic-flycheck-normalize-target-kind (kinds)
- "Return the normalized target name from KIND.
-KIND is a list of target name as returned by `cargo metadata',
-which do not necessarily correspond to to target names that can
-be passed as argument to `cargo rustc'.
-The normalization returns a valid cargo target based on KINDS."
- ;; Assumption: we only care about the first kind name. Multiple kinds only
- ;; seem to happen for library crate types, and those all maps to the same
- ;; `lib' target.
- (pcase (car kinds)
- (`"dylib" "lib")
- (`"rlib" "lib")
- (`"staticlib" "lib")
- (`"cdylib" "lib")
- (`"proc-macro" "lib")
- (_ (car kinds))))
-
-;;;###autoload
-(defun rustic-flycheck-setup ()
- "Setup Rust in Flycheck.
-
-If the current file is part of a Cargo project, configure
-Flycheck according to the Cargo project layout."
- (interactive)
- ;; We should avoid raising any error in this function, as in combination
- ;; with `global-flycheck-mode' it will render Emacs unusable (see
- ;; https://github.com/flycheck/flycheck-rust/issues/40#issuecomment-253760883).
- (with-demoted-errors "Error in rustic-flycheck-setup: %S"
- (-when-let* ((file-name (buffer-file-name))
- (target (rustic-flycheck-find-cargo-target file-name)))
- (let-alist target
- (setq-local flycheck-rust-features .required-features)
- (setq-local flycheck-rust-crate-type .kind)
- (setq-local flycheck-rust-binary-name .name)))))
-
-(flycheck-define-checker rustic-clippy
- "A Rust syntax checker using clippy.
-
-See URL `https://github.com/rust-lang-nursery/rust-clippy'."
- :command ("cargo" "clippy" (eval (split-string rustic-flycheck-clippy-params)))
- :error-parser flycheck-parse-cargo-rustc
- :error-filter flycheck-rust-error-filter
- :error-explainer flycheck-rust-error-explainer
- :modes rustic-mode
- :predicate flycheck-buffer-saved-p
- :enabled (lambda ()
- (and (flycheck-rust-cargo-has-command-p "clippy")
- (flycheck-rust-manifest-directory)))
- :working-directory (lambda (_) (flycheck-rust-manifest-directory))
- :verify
- (lambda (_)
- (and buffer-file-name
- (let ((has-toml (flycheck-rust-manifest-directory))
- (has-clippy (flycheck-rust-cargo-has-command-p "clippy")))
- (list
- (flycheck-verification-result-new
- :label "Clippy"
- :message (if has-clippy "Found"
- "Cannot find the `cargo clippy' command")
- :face (if has-clippy 'success '(bold warning)))
- (flycheck-verification-result-new
- :label "Cargo.toml"
- :message (if has-toml "Found" "Missing")
- :face (if has-toml 'success '(bold warning))))))))
-
-(add-hook 'rustic-mode-hook 'flycheck-mode)
-(add-hook 'flycheck-mode-hook #'rustic-flycheck-setup)
-
-;; turn off flymake
-(add-hook 'rustic-mode-hook 'flymake-mode-off)
-
-;;; _
-(provide 'rustic-flycheck)
-;;; rustic-flycheck.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-interaction.el b/emacs.d/elpa/rustic-20210609.1900/rustic-interaction.el
deleted file mode 100644
index b0819de..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-interaction.el
+++ /dev/null
@@ -1,425 +0,0 @@
-;;; rustic-interaction.el --- Common interactive functions -*-lexical-binding: t-*-
-
-;;; Code:
-
-(require 'newcomment)
-
-(require 'rustic)
-
-;;; Indent Line
-
-(defun rustic-rewind-to-beginning-of-current-level-expr ()
- (let ((current-level (rustic-paren-level)))
- (back-to-indentation)
- (when (looking-at "->")
- (rustic-rewind-irrelevant)
- (back-to-indentation))
- (while (> (rustic-paren-level) current-level)
- (backward-up-list)
- (back-to-indentation))
- ;; When we're in the where clause, skip over it. First find out the start
- ;; of the function and its paren level.
- (let ((function-start nil) (function-level nil))
- (save-excursion
- (rustic-beginning-of-defun)
- (back-to-indentation)
- ;; Avoid using multiple-value-bind
- (setq function-start (point)
- function-level (rustic-paren-level)))
- ;; On a where clause
- (when (or (rustic-looking-at-where)
- ;; or in one of the following lines, e.g.
- ;; where A: Eq
- ;; B: Hash <- on this line
- (and (save-excursion
- (rustic-rewind-to-where function-start))
- (= current-level function-level)))
- (goto-char function-start)))))
-
-(defun rustic-align-to-expr-after-brace ()
- (save-excursion
- (forward-char)
- ;; We don't want to indent out to the open bracket if the
- ;; open bracket ends the line
- (when (not (looking-at "[[:blank:]]*\\(?://.*\\)?$"))
- (when (looking-at "[[:space:]]")
- (forward-word 1)
- (backward-word 1))
- (current-column))))
-
-(defun rustic-align-to-method-chain ()
- (save-excursion
- ;; for method-chain alignment to apply, we must be looking at
- ;; another method call or field access or something like
- ;; that. This avoids rather "eager" jumps in situations like:
- ;;
- ;; {
- ;; something.foo()
- ;; <indent>
- ;;
- ;; Without this check, we would wind up with the cursor under the
- ;; `.`. In an older version, I had the inverse of the current
- ;; check, where we checked for situations that should NOT indent,
- ;; vs checking for the one situation where we SHOULD. It should be
- ;; clear that this is more robust, but also I find it mildly less
- ;; annoying to have to press tab again to align to a method chain
- ;; than to have an over-eager indent in all other cases which must
- ;; be undone via tab.
-
- (when (looking-at (concat "\s*\." rustic-re-ident))
- (forward-line -1)
- (end-of-line)
- ;; Keep going up (looking for a line that could contain a method chain)
- ;; while we're in a comment or on a blank line. Stop when the paren
- ;; level changes.
- (let ((level (rustic-paren-level)))
- (while (and (or (rustic-in-str-or-cmnt)
- ;; Only whitespace (or nothing) from the beginning to
- ;; the end of the line.
- (looking-back "^\s*" (point-at-bol)))
- (= (rustic-paren-level) level))
- (forward-line -1)
- (end-of-line)))
-
- (let
- ;; skip-dot-identifier is used to position the point at the
- ;; `.` when looking at something like
- ;;
- ;; foo.bar
- ;; ^ ^
- ;; | |
- ;; | position of point
- ;; returned offset
- ;;
- ((skip-dot-identifier
- (lambda ()
- (when (and (rustic-looking-back-ident)
- (save-excursion
- (forward-thing 'symbol -1)
- (= ?. (char-before))))
- (forward-thing 'symbol -1)
- (backward-char)
- (- (current-column) rustic-indent-offset)))))
- (cond
- ;; foo.bar(...)
- ((rustic-looking-back-str ")")
- (backward-list 1)
- (funcall skip-dot-identifier))
-
- ;; foo.bar
- (t (funcall skip-dot-identifier)))))))
-
-;;;###autoload
-(defun rustic-indent-line ()
- (interactive)
- (let ((indent
- (save-excursion
- (back-to-indentation)
- ;; Point is now at beginning of current line
- (let* ((level (rustic-paren-level))
- (baseline
- ;; Our "baseline" is one level out from the indentation of the expression
- ;; containing the innermost enclosing opening bracket. That
- ;; way if we are within a block that has a different
- ;; indentation than this mode would give it, we still indent
- ;; the inside of it correctly relative to the outside.
- (if (= 0 level)
- 0
- (or
- (when rustic-indent-method-chain
- (rustic-align-to-method-chain))
- (save-excursion
- (rustic-rewind-irrelevant)
- (backward-up-list)
- (rustic-rewind-to-beginning-of-current-level-expr)
- (+ (current-column) rustic-indent-offset))))))
- (cond
- ;; Indent inside a non-raw string only if the the previous line
- ;; ends with a backslash that is inside the same string
- ((nth 3 (syntax-ppss))
- (let*
- ((string-begin-pos (nth 8 (syntax-ppss)))
- (end-of-prev-line-pos (when (> (line-number-at-pos) 1)
- (save-excursion
- (forward-line -1)
- (end-of-line)
- (point)))))
- (when
- (and
- ;; If the string begins with an "r" it's a raw string and
- ;; we should not change the indentation
- (/= ?r (char-after string-begin-pos))
-
- ;; If we're on the first line this will be nil and the
- ;; rest does not apply
- end-of-prev-line-pos
-
- ;; The end of the previous line needs to be inside the
- ;; current string...
- (> end-of-prev-line-pos string-begin-pos)
-
- ;; ...and end with a backslash
- (= ?\\ (char-before end-of-prev-line-pos)))
-
- ;; Indent to the same level as the previous line, or the
- ;; start of the string if the previous line starts the string
- (if (= (line-number-at-pos end-of-prev-line-pos)
- (line-number-at-pos string-begin-pos))
- ;; The previous line is the start of the string.
- ;; If the backslash is the only character after the
- ;; string beginning, indent to the next indent
- ;; level. Otherwise align with the start of the string.
- (if (> (- end-of-prev-line-pos string-begin-pos) 2)
- (save-excursion
- (goto-char (+ 1 string-begin-pos))
- (current-column))
- baseline)
-
- ;; The previous line is not the start of the string, so
- ;; match its indentation.
- (save-excursion
- (goto-char end-of-prev-line-pos)
- (back-to-indentation)
- (current-column))))))
-
- ;; A function return type is indented to the corresponding
- ;; function arguments, if -to-arguments is selected.
- ((and rustic-indent-return-type-to-arguments
- (looking-at "->"))
- (save-excursion
- (backward-list)
- (or (rustic-align-to-expr-after-brace)
- (+ baseline rustic-indent-offset))))
-
- ;; A closing brace is 1 level unindented
- ((looking-at "[]})]") (- baseline rustic-indent-offset))
-
- ;; Doc comments in /** style with leading * indent to line up the *s
- ((and (nth 4 (syntax-ppss)) (looking-at "*"))
- (+ 1 baseline))
-
- ;; When the user chose not to indent the start of the where
- ;; clause, put it on the baseline.
- ((and (not rustic-indent-where-clause)
- (rustic-looking-at-where))
- baseline)
-
- ;; If we're in any other token-tree / sexp, then:
- (t
- (or
- ;; If we are inside a pair of braces, with something after the
- ;; open brace on the same line and ending with a comma, treat
- ;; it as fields and align them.
- (when (> level 0)
- (save-excursion
- (rustic-rewind-irrelevant)
- (backward-up-list)
- ;; Point is now at the beginning of the containing set of braces
- (rustic-align-to-expr-after-brace)))
-
- ;; When where-clauses are spread over multiple lines, clauses
- ;; should be aligned on the type parameters. In this case we
- ;; take care of the second and following clauses (the ones
- ;; that don't start with "where ")
- (save-excursion
- ;; Find the start of the function, we'll use this to limit
- ;; our search for "where ".
- (let ((function-start nil) (function-level nil))
- (save-excursion
- ;; If we're already at the start of a function,
- ;; don't go back any farther. We can easily do
- ;; this by moving to the end of the line first.
- (end-of-line)
- (rustic-beginning-of-defun)
- (back-to-indentation)
- ;; Avoid using multiple-value-bind
- (setq function-start (point)
- function-level (rustic-paren-level)))
- ;; When we're not on a line starting with "where ", but
- ;; still on a where-clause line, go to "where "
- (when (and
- (not (rustic-looking-at-where))
- ;; We're looking at something like "F: ..."
- (looking-at (concat rustic-re-ident ":"))
- ;; There is a "where " somewhere after the
- ;; start of the function.
- (rustic-rewind-to-where function-start)
- ;; Make sure we're not inside the function
- ;; already (e.g. initializing a struct) by
- ;; checking we are the same level.
- (= function-level level))
- ;; skip over "where"
- (forward-char 5)
- ;; Unless "where" is at the end of the line
- (if (eolp)
- ;; in this case the type parameters bounds are just
- ;; indented once
- (+ baseline rustic-indent-offset)
- ;; otherwise, skip over whitespace,
- (skip-chars-forward "[:space:]")
- ;; get the column of the type parameter and use that
- ;; as indentation offset
- (current-column)))))
-
- (progn
- (back-to-indentation)
- ;; Point is now at the beginning of the current line
- (if (or
- ;; If this line begins with "else" or "{", stay on the
- ;; baseline as well (we are continuing an expression,
- ;; but the "else" or "{" should align with the beginning
- ;; of the expression it's in.)
- ;; Or, if this line starts a comment, stay on the
- ;; baseline as well.
- (looking-at "\\<else\\>\\|{\\|/[/*]")
-
- ;; If this is the start of a top-level item,
- ;; stay on the baseline.
- (looking-at rustic-top-item-beg-re)
-
- (save-excursion
- (rustic-rewind-irrelevant)
- ;; Point is now at the end of the previous line
- (or
- ;; If we are at the start of the buffer, no
- ;; indentation is needed, so stay at baseline...
- (= (point) 1)
- ;; ..or if the previous line ends with any of these:
- ;; { ? : ( , ; [ }
- ;; then we are at the beginning of an
- ;; expression, so stay on the baseline...
- (looking-back "[(,:;?[{}]\\|[^|]|" (- (point) 2))
- ;; or if the previous line is the end of an
- ;; attribute, stay at the baseline...
- (progn
- (rustic-rewind-to-beginning-of-current-level-expr)
- (looking-at "#")))))
- baseline
-
- ;; Otherwise, we are continuing the same
- ;; expression from the previous line, so add one
- ;; additional indent level
- (+ baseline rustic-indent-offset))))))))))
-
- (when indent
- ;; If we're at the beginning of the line (before or at the current
- ;; indentation), jump with the indentation change. Otherwise, save the
- ;; excursion so that adding the indentations will leave us at the
- ;; equivalent position within the line to where we were before.
- (if (<= (current-column) (current-indentation))
- (indent-line-to indent)
- (save-excursion (indent-line-to indent))))))
-
-;;; Miscellaneous
-
-;;;###autoload
-(defun rustic-promote-module-into-dir ()
- "Promote the module file visited by the current buffer into its own directory.
-
-For example, if the current buffer is visiting the file `foo.rs',
-then this function creates the directory `foo' and renames the
-file to `foo/mod.rs'. The current buffer will be updated to
-visit the new file."
- (interactive)
- (let ((filename (buffer-file-name)))
- (if (not filename)
- (message "Buffer is not visiting a file.")
- (if (string-equal (file-name-nondirectory filename) "mod.rs")
- (message "Won't promote a module file already named mod.rs.")
- (let* ((basename (file-name-sans-extension
- (file-name-nondirectory filename)))
- (mod-dir (file-name-as-directory
- (concat (file-name-directory filename) basename)))
- (new-name (concat mod-dir "mod.rs")))
- (mkdir mod-dir t)
- (rename-file filename new-name 1)
- (set-visited-file-name new-name))))))
-
-(defun rustic-docstring-dwim ()
- "Use `comment-dwim' to make a docstring."
- (interactive)
- (let ((comment-start "/// "))
- (call-interactively 'comment-dwim)))
-
-;;;###autoload
-(defun rustic-open-dependency-file ()
- "Open the 'Cargo.toml' file at the project root if the current buffer is
-visiting a project."
- (interactive)
- (let ((workspace (rustic-buffer-workspace t)))
- (if workspace
- (find-file (concat workspace "/Cargo.toml"))
- (message "The current buffer is not inside a rust project!"))))
-
-;;; Defun Motions
-
-(defvar rustic-func-item-beg-re
- (concat "\\s-*\\(?:priv\\|pub\\)?\\s-*\\(?:async\\)?\\s-*"
- (regexp-opt '("fn")))
- "Start of a rust function.")
-
-(defun rustic-beginning-of-function ()
- "Move to beginning of rust function at point."
- (rustic-beginning-of-defun nil rustic-func-item-beg-re))
-
-;; TODO: since we are using `rustic-top-item-beg-re' this function actually sets
-;; the point where it finds the first item of the list
-;; this function should be renamed or documented correctly
-;;;###autoload
-(defun rustic-beginning-of-defun (&optional arg regex)
- "Move backward to the beginning of the current defun.
-
-With ARG, move backward multiple defuns. Negative ARG means
-move forward.
-
-This is written mainly to be used as `beginning-of-defun-function' for Rust.
-Don't move to the beginning of the line. `beginning-of-defun',
-which calls this, does that afterwards."
- (interactive "p")
- (let* ((arg (or arg 1))
- (magnitude (abs arg))
- (sign (if (< arg 0) -1 1)))
- ;; If moving forward, don't find the defun we might currently be
- ;; on.
- (when (< sign 0)
- (end-of-line))
- (catch 'done
- (dotimes (_ magnitude)
- ;; Search until we find a match that is not in a string or comment.
- (while (if (re-search-backward
- (concat "^\\(" (or regex rustic-top-item-beg-re) "\\)")
- nil 'move sign)
- (rustic-in-str-or-cmnt)
- ;; Did not find it.
- (throw 'done nil)))))
- t))
-
-;;;###autoload
-(defun rustic-end-of-defun ()
- "Move forward to the next end of defun.
-
-With argument, do it that many times.
-Negative argument -N means move back to Nth preceding end of defun.
-
-Assume that this is called after beginning-of-defun. So point is
-at the beginning of the defun body.
-
-This is written mainly to be used as `end-of-defun-function' for Rust."
- (interactive)
- ;; Find the opening brace
- (if (re-search-forward "[{]" nil t)
- (progn
- (goto-char (match-beginning 0))
- ;; Go to the closing brace
- (condition-case nil
- (forward-sexp)
- (scan-error
- ;; The parentheses are unbalanced; instead of being unable
- ;; to fontify, just jump to the end of the buffer
- (goto-char (point-max)))))
- ;; There is no opening brace, so consider the whole buffer to be one "defun"
- (goto-char (point-max))))
-
-;;; _
-(provide 'rustic-interaction)
-;;; rustic-interaction.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-lsp.el b/emacs.d/elpa/rustic-20210609.1900/rustic-lsp.el
deleted file mode 100644
index 471e7cc..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-lsp.el
+++ /dev/null
@@ -1,170 +0,0 @@
-;;; rustic-lsp.el --- Support for lsp -*- lexical-binding:t -*-
-;;; Commentary:
-
-;; This library implements support for "lsp".
-
-;;; Code:
-
-(require 'rustic-rustfmt)
-
-;;; Options
-
-;; FIXME This is non-idomatic. This option should be replaced with
-;; documentation that instructs the user to add the setup function
-;; themselves, iff so desired.
-(defcustom rustic-lsp-setup-p t
- "Setup LSP related stuff automatically.
-If this is non-nil (the default), then loading `rustic-lsp' adds
-`rustic-setup-lsp' to `rustic-mode-hook'. If you don't want that
-then you must set this to nil before loading `rustic-lsp'."
- :type 'boolean
- :safe #'booleanp
- :group 'rustic)
-(when rustic-lsp-setup-p
- (add-hook 'rustic-mode-hook 'rustic-setup-lsp))
-
-(defcustom rustic-lsp-server 'rust-analyzer
- "Choose your LSP server."
- :type '(choice (const :tag "rls" rls)
- (const :tag "rust-analyzer" rust-analyzer))
- :group 'rustic)
-
-(define-obsolete-variable-alias 'rustic-rls-pkg 'rustic-lsp-client "Rustic 0.18")
-(defcustom rustic-lsp-client 'lsp-mode
- "Emacs package for interaction with the language server."
- :type '(choice (const :tag "eglot" eglot)
- (const :tag "lsp-mode" lsp-mode)
- (const :tag "No LSP client" nil))
- :group 'rustic)
-
-(defcustom rustic-lsp-format nil
- "Allow formatting through lsp server."
- :type 'boolean
- :safe #'booleanp
- :group 'rustic)
-
-(defcustom rustic-analyzer-command '("rust-analyzer")
- "Command for calling rust analyzer."
- :type '(repeat (string))
- :group 'rustic)
-
-;;; Common
-
-(defun rustic-setup-lsp ()
- "Setup LSP client. If client isn't installed, offer to install it."
- (let ((client rustic-lsp-client))
- (cond ((eq client nil)
- nil)
- ((require client nil t)
- (if (eq client 'eglot)
- (eglot-ensure)
- (rustic-lsp-mode-setup)
- (lsp)))
- (t
- (rustic-install-lsp-client-p client)))))
-
-;;; lsp support
-
-(defvar lsp-rust-analyzer-macro-expansion-method)
-(defvar lsp-rust-analyzer-server-command)
-(defvar lsp-rust-server)
-(declare-function lsp "lsp-mode" (&optional arg))
-(declare-function lsp-rust-switch-server "lsp-rust" (lsp-server))
-(declare-function lsp-workspace-folders-add "lsp-rust" (project-root))
-(declare-function lsp-workspace-root "lsp-mode" (&optional path))
-
-(defun rustic-lsp-mode-setup ()
- "When changing the `lsp-rust-server', it's also necessary to update the priorities
-with `lsp-rust-switch-server'."
- (require 'lsp-rust)
- (require 'lsp-modeline)
- (lsp-workspace-folders-add (rustic-buffer-workspace))
- (setq lsp-rust-server rustic-lsp-server)
- (setq lsp-rust-analyzer-server-command rustic-analyzer-command)
- (lsp-rust-switch-server rustic-lsp-server))
-
-(defun rustic-install-lsp-client-p (lsp-client)
- "Ask user whether to install missing LSP-CLIENT."
- (if (yes-or-no-p (format "%s not found. Install it ?" lsp-client))
- (condition-case err
- (progn
- (package-refresh-contents)
- (package-install lsp-client)
- (require lsp-client)
- (rustic-setup-lsp))
- (error err))
- (message "No LSP server running.")))
-
-;;; eglot support
-
-(defvar eglot-ignored-server-capabilites)
-(defvar eglot-ignored-server-capabilites)
-(defvar eglot-server-programs)
-(defvar eglot-server-programs)
-(declare-function eglot-ensure "eglot" ())
-
-(defun rustic-setup-eglot ()
- "Configure eglot for rustic."
- (require 'eglot)
- (if (equal rustic-lsp-server 'rls)
- ;; add rustic to `eglot-server-programs'
- (let ((rls '(rustic-mode . (eglot-rls "rls"))))
- (unless (member rls eglot-server-programs)
- (setq eglot-server-programs
- `(,rls
- ;; replace rust-mode with rustic
- ,@(-remove-first (lambda (mode)
- (when (symbolp (car mode))
- (eq (car mode) 'rust-mode)))
- eglot-server-programs)))))
- (add-to-list 'eglot-server-programs `(rustic-mode . ,rustic-analyzer-command)))
- ;; don't allow formatting with rls
- (unless rustic-lsp-format
- (let ((feature :documentFormattingProvider))
- (unless (-contains? eglot-ignored-server-capabilites feature)
- (add-to-list 'eglot-ignored-server-capabilites feature)))))
-
-(with-eval-after-load 'eglot
- (rustic-setup-eglot))
-
-;;; rustic-macro-expansion-mode
-
-(setq lsp-rust-analyzer-macro-expansion-method 'rustic-analyzer-macro-expand)
-
-(define-derived-mode rustic-macro-expansion-mode special-mode "Rust"
- :group 'rustic
- :syntax-table rustic-mode-syntax-table
- ;; Fonts
- (setq-local font-lock-defaults '(rustic-font-lock-keywords
- nil nil nil nil
- (font-lock-syntactic-face-function
- . rustic-syntactic-face-function))))
-
-;;;###autoload
-(defun rustic-analyzer-macro-expand (result)
- "Default method for displaying macro expansion results."
- (interactive)
- (let* ((root (lsp-workspace-root default-directory))
- (buf (get-buffer-create
- (format "*rust-analyzer macro expansion %s*" root))))
- (with-current-buffer buf
- (let ((inhibit-read-only t))
- (erase-buffer)
- ;; wrap expanded macro in a main function so we can run rustfmt
- (insert "fn main()")
- ;; rustfmt complains about $s
- (insert (replace-regexp-in-string "\\$" "" result))
- (rustic-macro-expansion-mode)
- (rustic-format-buffer)
- (with-current-buffer buf
- (save-excursion
- (goto-char (point-min))
- (delete-region (point-min) (line-end-position))
- (goto-char (point-max))
- (forward-line -1)
- (delete-region (line-beginning-position) (point-max))))))
- (display-buffer buf)))
-
-;;; _
-(provide 'rustic-lsp)
-;;; rustic-lsp.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-pkg.el b/emacs.d/elpa/rustic-20210609.1900/rustic-pkg.el
deleted file mode 100644
index 64c1a7d..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-pkg.el
+++ /dev/null
@@ -1,20 +0,0 @@
-(define-package "rustic" "20210609.1900" "Rust development environment"
- '((emacs "26.1")
- (dash "2.13.0")
- (f "0.18.2")
- (let-alist "1.0.4")
- (markdown-mode "2.3")
- (project "0.3.0")
- (s "1.10.0")
- (seq "2.3")
- (spinner "1.7.3")
- (xterm-color "1.6"))
- :commit "6ca73bb3cce4d1db3c4f91efb83b63227eb712d1" :authors
- '(("Mozilla"))
- :maintainer
- '("Mozilla")
- :keywords
- '("languages"))
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-playpen.el b/emacs.d/elpa/rustic-20210609.1900/rustic-playpen.el
deleted file mode 100644
index 82e38b5..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-playpen.el
+++ /dev/null
@@ -1,61 +0,0 @@
-;;; rustic-playpen.el --- Support for playpen -*- lexical-binding:t -*-
-;;; Commentary:
-;;; Code:
-
-(require 'org-element)
-(require 'url)
-
-;;; Options
-
-(defcustom rustic-playpen-url-format "https://play.rust-lang.org/?code=%s"
- "Format string to use when submitting code to the playpen."
- :type 'string
- :group 'rustic)
-
-(defcustom rustic-shortener-url-format "https://is.gd/create.php?format=simple&url=%s"
- "Format string to use for creating the shortened link of a playpen submission."
- :type 'string
- :group 'rustic)
-
-;;; Commands
-
-;;;###autoload
-(defun rustic-playpen (begin end)
- "Create a shareable URL for the contents of the current region,
-src-block or buffer on the Rust playpen."
- (interactive "r")
- (let (data)
- (cond
- ((region-active-p)
- (setq data (buffer-substring begin end)))
- ((org-in-src-block-p)
- (setq data (org-element-property :value (org-element-at-point))))
- (t
- (setq data (buffer-substring (point-min) (point-max)))))
- (let* ((escaped-data (url-hexify-string data))
- (escaped-playpen-url (url-hexify-string
- (format rustic-playpen-url-format
- escaped-data))))
- (if (> (length escaped-playpen-url) 5000)
- (error "encoded playpen data exceeds 5000 character limit (length %s)"
- (length escaped-playpen-url))
- (let ((shortener-url (format rustic-shortener-url-format escaped-playpen-url))
- (url-request-method "POST"))
- (url-retrieve shortener-url
- (lambda (state)
- ;; filter out the headers etc. included at the
- ;; start of the buffer: the relevant text
- ;; (shortened url or error message) is exactly
- ;; the last line.
- (goto-char (point-max))
- (let ((last-line (thing-at-point 'line t))
- (err (plist-get state :error)))
- (kill-buffer)
- (if err
- (error "failed to shorten playpen url: %s" last-line)
- (let ((URL (read-from-minibuffer "Playpen URL: " last-line)))
- (browse-url URL)))))))))))
-
-;;; _
-(provide 'rustic-playpen)
-;;; rustic-playpen.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-popup.el b/emacs.d/elpa/rustic-20210609.1900/rustic-popup.el
deleted file mode 100644
index c8864eb..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-popup.el
+++ /dev/null
@@ -1,241 +0,0 @@
-;;; rustic-popup.el --- Cargo popup -*-lexical-binding: t-*-
-
-;;; Commentary:
-
-;; Provides magit like popup.
-
-;;; Code:
-
-(require 'rustic-cargo)
-
-;;; Customization
-
-(defcustom rustic-popup-commands
- '((?b "build" build)
- (?f "fmt" fmt)
- (?r "run" run)
- (?c "clippy" clippy)
- (?o "outdated" outdated)
- (?e "clean" clean)
- (?k "check" check)
- (?t "test" test)
- (?d "doc" doc))
- "List of commands that are displayed in the popup.
-The first element of each list contains a command's binding."
- :type 'list
- :group 'rustic-popup)
-
-(define-obsolete-face-alias 'rustic-popup-key-face
- 'rustic-popup-key "1.2")
-(define-obsolete-face-alias 'rustic-popup-section-face
- 'rustic-popup-section "1.2")
-
-(defface rustic-popup-key
- '((t (:foreground "DeepSkyBlue")))
- "Face used for command shortcuts."
- :group 'rustic)
-
-(defface rustic-popup-section
- '((t (:foreground "#f74c00")))
- "Face used for popup section description."
- :group 'rustic)
-
-;;; Popup Mode
-
-(defvar rustic-popup-buffer-name "rustic-popup-buffer"
- "Buffer name for rustic popup buffers.")
-
-(defvar rustic-popup-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map [remap self-insert-command] 'rustic-popup-invoke-popup-action)
- (define-key map (kbd "g") 'rustic-recompile)
- (define-key map (kbd "RET") 'rustic-popup-default-action)
- (define-key map (kbd "<tab>") 'rustic-popup-default-action)
- (define-key map (kbd "h") 'rustic-popup-cargo-command-help)
- (define-key map (kbd "q") 'kill-buffer-and-window)
- map)
- "Keymap for rustic popup buffers.")
-
-(define-derived-mode rustic-popup-mode fundamental-mode "RusticPopup"
- "Mode for rustic popup buffers."
- (setq truncate-lines t)
- (setq buffer-read-only t)
- (setq-local scroll-margin 0))
-
-(defun rustic-popup-insert-backtrace ()
- "Insert backtrace section."
- (let ((inhibit-read-only t)
- (prop (lambda (s)
- (propertize s 'face 'rustic-popup-section))))
- (insert (funcall prop "Backtrace: "))
- (cond
- ((string= rustic-compile-backtrace "0")
- (insert " " (funcall prop "0") " | 1 | full"))
- ((string= rustic-compile-backtrace "1")
- (insert " 0 | " (funcall prop "1") " | full"))
- ((string= rustic-compile-backtrace "full")
- (insert " 0 | 1 | " (funcall prop "full")))))
- (insert "\n\n"))
-
-(defun rustic-popup-insert-contents (buf)
- "Insert popup buffer contents."
- (let ((inhibit-read-only t))
- (with-current-buffer buf
- (erase-buffer)
- (rustic-popup-mode)
- (rustic-popup-insert-backtrace)
- (insert (propertize "Commands: " 'face 'rustic-popup-section) "\n")
- (insert " " (propertize "g" 'face 'rustic-popup-key)
- " " "recompile" " " "\""
- (or compilation-arguments rustic-compile-command)
- "\"" "\n\n")
- (dolist (command rustic-popup-commands)
- (insert "\s")
- (insert (propertize (char-to-string (nth 0 command))
- 'face 'rustic-popup-key))
- (insert "\s\s\s\s\s\s")
- (insert (nth 1 command))
- (when (and (string= (nth 1 command) "test")
- (> (length rustic-test-arguments) 0))
- (insert " " "\"" rustic-test-arguments "\""))
- (insert "\n"))
- (goto-char (point-min)))))
-
-;;;###autoload
-(defun rustic-popup ()
- "Setup popup.
-If directory is not in a rust project call `read-directory-name'."
- (interactive)
- (let ((func (lambda ()
- (let ((buf (get-buffer-create rustic-popup-buffer-name))
- (win (split-window-below))
- (inhibit-read-only t))
- (rustic-popup-insert-contents buf)
- (set-window-buffer win buf)
- (select-window win)
- (fit-window-to-buffer)
- (set-window-text-height win (+ (window-height) 1))))))
- (if (rustic-buffer-workspace t)
- (funcall func)
- (let ((dir (read-directory-name "Rust project:")))
- (let ((default-directory dir))
- (if (rustic-buffer-workspace t)
- (funcall func)
- (message "Not a rust project.")))))))
-
-;;; Interactive
-
-;;;###autoload
-(defun rustic-popup-invoke-popup-action (event)
- "Execute commands which are listed in `rustic-popup-commands'."
- (interactive (list last-command-event))
- (save-excursion
- (let ((char (char-to-string event)))
- (save-match-data
- (goto-char (point-min))
- (when (re-search-forward (concat "\s" char "\s"))
- (goto-char (match-beginning 0)))))
- (let* ((command (cadr (split-string
- (buffer-substring-no-properties
- (point) (line-end-position)))))
- (c (intern (concat "rustic-cargo-" command))))
- (if (commandp c)
- (call-interactively c)
- (call-interactively 'rustic-compile (concat "cargo " command))))))
-
-;;;###autoload
-(defun rustic-popup-default-action ()
- "Change backtrace and `compilation-arguments' when executed on
-corresponding line."
- (interactive)
- (let ((inhibit-read-only t))
- (save-excursion
- (goto-char (line-beginning-position))
- (cond
- ((looking-at "Backtrace:")
- (cond
- ((string= rustic-compile-backtrace "0")
- (setq rustic-compile-backtrace "1"))
- ((string= rustic-compile-backtrace "1")
- (setq rustic-compile-backtrace "full"))
- ((string= rustic-compile-backtrace "full")
- (setq rustic-compile-backtrace "0")))
- (rustic-popup-insert-contents (current-buffer)))
- ((search-forward-regexp "\srecompile\s" (line-end-position) t)
- (setq compilation-arguments
- (read-string "Compilation arguments: "
- (or compilation-arguments rustic-compile-command)))
- (rustic-popup-insert-contents (current-buffer)))
- ((search-forward-regexp "\stest" (line-end-position) t)
- (setq rustic-test-arguments
- (read-string "Cargo test arguments: " rustic-test-arguments))
- (rustic-popup-insert-contents (current-buffer)))
- (t
- (message "No default action for line."))))))
-
-;;; Help Popup
-
-(defvar rustic-popup-help-buffer-name "rustic-popup-help-buffer"
- "Buffer name for rustic popup help buffers.")
-
-(defvar rustic-popup-help-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "q") 'rustic-popup-kill-help-buffer)
- map)
- "Keymap for rustic popup help buffers.")
-
-(define-derived-mode rustic-popup-help-mode fundamental-mode "RusticHelpPopup"
- "Mode for rustic popup help buffers."
- (setq truncate-lines t)
- (setq buffer-read-only t)
- (setq-local scroll-margin 0))
-
-;;;###autoload
-(defun rustic-popup-cargo-command-help ()
- "Display help buffer for cargo command at point."
- (interactive)
- (let (command)
- (save-excursion
- (goto-char (line-beginning-position))
- (setq command (cadr (split-string
- (buffer-substring-no-properties (line-beginning-position)
- (line-end-position))))))
- (let* ((string (rustic-popup-help-flags command))
- (inhibit-read-only t))
- (if (not (and (> (length command) 0)
- (> (length (split-string string "\n")) 0)))
- (message "No help information for command at point.")
- (rustic-popup-setup-help-popup string)))))
-
-(defun rustic-popup-help-flags (command)
- "Get flags of COMMAND."
- (let ((string (shell-command-to-string (format "cargo %s -h" command)))
- flags)
- (dolist (s (split-string string "\n"))
- (when (and (not (string-match "^\s+\-h" s))
- (string-match "^\s+\-" s))
- (setq flags (concat flags s "\n"))))
- flags))
-
-(defun rustic-popup-setup-help-popup (string)
- "Switch to help buffer."
- (let ((buf (get-buffer-create rustic-popup-help-buffer-name)))
- (switch-to-buffer buf)
- (erase-buffer)
- (rustic-popup-help-mode)
- (insert string)
- (fit-window-to-buffer)
- (set-window-text-height (selected-window) (+ (window-height) 1))
- (goto-char (point-min))))
-
-;;;###autoload
-(defun rustic-popup-kill-help-buffer ()
- "Kill popup help buffer and switch to popup buffer."
- (interactive)
- (switch-to-buffer rustic-popup-buffer-name)
- (fit-window-to-buffer)
- (set-window-text-height (selected-window) (+ (window-height) 1)))
-
-;;; _
-(provide 'rustic-popup)
-;;; rustic-popup.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-racer.el b/emacs.d/elpa/rustic-20210609.1900/rustic-racer.el
deleted file mode 100644
index 7910183..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-racer.el
+++ /dev/null
@@ -1,515 +0,0 @@
-;;; rustic-racer.el --- Racer support -*-lexical-binding: t-*-
-
-;;; Code:
-
-(require 'f)
-(require 's)
-
-(require 'button)
-(require 'etags)
-(require 'help-mode)
-(require 'thingatpt)
-
-(require 'rustic)
-
-(defvar rustic-racer-args nil)
-
-(defgroup racer nil
- "Docs browsing for Rust via racer."
- :link '(url-link "https://github.com/racer-rust/emacs-racer/")
- :group 'rustic-mode)
-
-;;; Customization
-
-(defcustom rustic-racer-cmd
- (or (executable-find "racer")
- (f-expand "~/.cargo/bin/racer")
- "/usr/local/bin/racer")
- "Path to the racer binary."
- :type 'file
- :group 'racer)
-
-(defcustom rustic-racer-rust-src-path
- (or
- (getenv "RUST_SRC_PATH")
- (when (executable-find "rustc")
- (let* ((sysroot (s-trim-right
- (shell-command-to-string
- (format "%s --print sysroot" (executable-find "rustc")))))
- (src-path (f-join sysroot "lib/rustlib/src/rust/src")))
- (when (file-exists-p src-path)
- src-path)
- src-path))
- "/usr/local/src/rust/src")
-
- "Path to the rust source tree.
-If nil, we will query $RUST_SRC_PATH at runtime.
-If $RUST_SRC_PATH is not set, look for rust source
-in rustup's install directory."
- :type 'file
- :group 'racer)
-
-(defcustom rustic-racer-cargo-home
- (or
- (getenv "CARGO_HOME")
- "~/.cargo")
- "Path to your current cargo home. Usually `~/.cargo'.
-If nil, we will query $CARGO_HOME at runtime."
- :type 'file
- :group 'racer)
-
-;;; Faces
-
-(define-obsolete-face-alias 'rustic-racer-help-heading-face
- 'rustic-racer-help-heading "1.2")
-
-(defface rustic-racer-help-heading
- '((t :weight bold))
- "Face for markdown headings in *Racer Help* buffers.")
-
-(defface rustic-racer-tooltip
- '((((min-colors 16777216))
- :background "#292C33" :foreground "white")
- (t
- :background "black" :foreground "white"))
- "Face used for the tooltip with `racer-describe-tooltip'")
-
-;;; Help-mode
-
-(defvar rustic-racer-help-mode-map
- (let ((map (make-sparse-keymap)))
- (set-keymap-parent map (make-composed-keymap button-buffer-map
- special-mode-map))
- map)
- "Keymap for racer help mode.")
-
-(define-derived-mode rustic-racer-help-mode fundamental-mode
- "Racer-Help"
- "Major mode for *Racer Help* buffers.
-Commands:
-\\{racer-help-mode-map}")
-
-(defun rustic-racer-header (text)
- "Helper function for adding text properties to TEXT."
- (propertize text 'face 'rustic-racer-help-heading))
-
-(defun rustic-racer-button-go-to-src (button)
- (rustic-racer-find-file
- (button-get button 'path)
- (button-get button 'line)
- (button-get button 'column)))
-
-(define-button-type 'racer-src-button
- 'action 'rustic-racer-button-go-to-src
- 'follow-link t
- 'help-echo "Go to definition")
-
-(defun rustic-racer-url-button (text url)
- "Return a button that opens a browser at URL."
- (with-temp-buffer
- (insert-text-button
- text
- :type 'help-url
- 'help-args (list url))
- (buffer-string)))
-
-(defun rustic-racer-src-button (path line column)
- "Return a button that navigates to PATH at LINE number and
-COLUMN number."
- ;; Convert "/foo/bar/baz/foo.rs" to "baz/foo.rs"
- (let* ((filename (f-filename path))
- (parent-dir (f-filename (f-parent path)))
- (short-path (f-join parent-dir filename)))
- (with-temp-buffer
- (insert-text-button
- short-path
- :type 'racer-src-button
- 'path path
- 'line line
- 'column column)
- (buffer-string))))
-
-(defun rustic-racer-help-buf (contents)
- "Create a *Racer Help* buffer with CONTENTS."
- (let ((buf (get-buffer-create "*Racer Help*"))
- ;; If the buffer already existed, we need to be able to
- ;; override `buffer-read-only'.
- (inhibit-read-only t))
- (with-current-buffer buf
- (erase-buffer)
- (insert contents)
- (setq buffer-read-only t)
- (goto-char (point-min))
- (rustic-racer-help-mode))
- buf))
-
-;;; Racer
-
-(defvar rustic-racer-prev-state nil)
-
-(defun rustic-racer-call (command &rest args)
- "Call racer command COMMAND with args ARGS.
-Return stdout if COMMAND exits normally, otherwise show an
-error."
- (let ((rust-src-path (or rustic-racer-rust-src-path (getenv "RUST_SRC_PATH")))
- (cargo-home (or rustic-racer-cargo-home (getenv "CARGO_HOME"))))
- (when (null rust-src-path)
- (user-error "You need to set `rustic-racer-rust-src-path' or `RUST_SRC_PATH'"))
- (unless (file-exists-p rust-src-path)
- (user-error "No such directory: %s. Please set `rustic-racer-rust-src-path' or `RUST_SRC_PATH'"
- rust-src-path))
- (let ((default-directory (rustic-buffer-workspace))
- (process-environment (append (list
- (format "RUST_SRC_PATH=%s" (expand-file-name rust-src-path))
- (format "CARGO_HOME=%s" (expand-file-name cargo-home)))
- process-environment)))
- (-let [(exit-code stdout _stderr)
- (rustic-racer-shell-command rustic-racer-cmd (cons command args))]
- ;; Use `equal' instead of `zero' as exit-code can be a string
- ;; "Aborted" if racer crashes.
- (unless (equal 0 exit-code)
- (user-error "%s exited with %s. `M-x rustic-racer-debug' for more info"
- rustic-racer-cmd exit-code))
- stdout))))
-
-(defun rustic-racer-doc (name)
- "Return a *Racer Help* buffer for the function or type at point.
-If there are multiple candidates at point, use NAME to find the
-correct value."
- (let ((description (rustic-racer-describe-at-point name)))
- (when description
- (let* ((name (plist-get description :name))
- (raw-docstring (plist-get description :docstring))
- (docstring (if raw-docstring
- (rustic-racer-propertize-docstring raw-docstring)
- "Not documented."))
- (kind (plist-get description :kind)))
- (rustic-racer-help-buf
- (format
- "%s is %s defined in %s.\n\n%s%s"
- name
- (rustic-racer-kind-description kind)
- (rustic-racer-src-button
- (plist-get description :path)
- (plist-get description :line)
- (plist-get description :column))
- (if (equal kind "Module")
- ;; No point showing the 'signature' of modules, which is
- ;; just their full path.
- ""
- (format " %s\n\n" (rustic-racer-syntax-highlight (plist-get description :signature))))
- docstring))))))
-
-(defun rustic-racer-describe-at-point (name)
- "Get a description of the symbol at point matching NAME.
-If there are multiple possibilities with this NAME, prompt
-the user to choose."
- (let* ((output-lines (save-excursion
- ;; Move to the end of the current symbol, to
- ;; increase racer accuracy.
- (skip-syntax-forward "w_")
- (rustic-racer-call-at-point "complete-with-snippet")))
- (all-matches (--map (when (s-starts-with-p "MATCH " it)
- (rustic-racer-split-snippet-match it))
- output-lines))
- (relevant-matches (--filter (equal (plist-get it :name) name)
- all-matches)))
- (if (> (length relevant-matches) 1)
- ;; We might have multiple matches with the same name but
- ;; different types. E.g. Vec::from.
- (let ((signature
- (completing-read "Multiple matches: "
- (--map (plist-get it :signature) relevant-matches))))
- (--first (equal (plist-get it :signature) signature) relevant-matches))
- (-first-item relevant-matches))))
-
-(defmacro rustic-racer-with-temporary-file (path-sym &rest body)
- "Create a temporary file, and bind its path to PATH-SYM.
-Evaluate BODY, then delete the temporary file."
- (declare (indent 1) (debug (symbolp body)))
- `(let ((,path-sym (make-temp-file "racer")))
- (unwind-protect
- (progn ,@body)
- (delete-file ,path-sym))))
-
-(defun rustic-racer-call-at-point (command)
- "Call racer command COMMAND at point of current buffer.
-Return a list of all the lines returned by the command."
- (rustic-racer-with-temporary-file tmp-file
- (write-region nil nil tmp-file nil 'silent)
- (let ((racer-args (list
- command
- (number-to-string (line-number-at-pos))
- (number-to-string (rustic-racer-current-column)))))
- ;; If this buffer is backed by a file, pass that to racer too.
- (-when-let (file-name (buffer-file-name (buffer-base-buffer)))
- (setq rustic-racer-args
- (append racer-args (list file-name))))
-
- (setq rustic-racer-args (append rustic-racer-args (list tmp-file)))
- (s-lines
- (s-trim-right
- (apply #'rustic-racer-call rustic-racer-args))))))
-
-(defun rustic-racer-shell-command (program args)
- "Execute PROGRAM with ARGS.
-Return a list (exit-code stdout stderr)."
- (rustic-racer-with-temporary-file tmp-file-for-stderr
- (let (exit-code stdout stderr)
- ;; Create a temporary buffer for `call-process` to write stdout
- ;; into.
- (with-temp-buffer
- (setq exit-code
- (apply #'call-process program nil
- (list (current-buffer) tmp-file-for-stderr)
- nil args))
- (setq stdout (buffer-string)))
- (setq stderr (rustic-racer-slurp tmp-file-for-stderr))
- (setq rustic-racer-prev-state
- (list
- :program program
- :args args
- :exit-code exit-code
- :stdout stdout
- :stderr stderr
- :default-directory default-directory
- :process-environment process-environment))
- (list exit-code stdout stderr))))
-
-;;; Utility Functions
-
-(defun rustic-racer-slurp (file)
- "Return the contents of FILE as a string."
- (with-temp-buffer
- (insert-file-contents-literally file)
- (buffer-string)))
-
-(defun rustic-racer-read-rust-string (string)
- "Convert STRING, a rust string literal, to an elisp string."
- (when string
- (->> string
- ;; Remove outer double quotes.
- (s-chop-prefix "\"")
- (s-chop-suffix "\"")
- ;; Replace escaped characters.
- (s-replace "\\n" "\n")
- (s-replace "\\\"" "\"")
- (s-replace "\\'" "'")
- (s-replace "\\;" ";"))))
-
-(defun rustic-racer-url-p (target)
- "Return t if TARGET looks like a fully qualified URL."
- (not (null
- (string-match-p (rx bol "http" (? "s") "://") target))))
-
-(defun rustic-racer-propertize-links (markdown)
- "Propertize links in MARKDOWN."
- (replace-regexp-in-string
- ;; Text of the form [foo](http://example.com)
- (rx "[" (group (+? (not (any "]")))) "](" (group (+? anything)) ")")
- ;; For every match:
- (lambda (whole-match)
- ;; Extract link and target.
- (let ((link-text (match-string 1 whole-match))
- (link-target (match-string 2 whole-match)))
- ;; If it's a web URL, use a clickable link.
- (if (rustic-racer-url-p link-target)
- (rustic-racer-url-button link-text link-target)
- ;; Otherwise, just discard the target.
- link-text)))
- markdown))
-
-(defun rustic-racer-propertize-all-inline-code (markdown)
- "Given a single line MARKDOWN, replace all instances of `foo` or
-\[`foo`\] with a propertized string."
- (let ((highlight-group
- (lambda (whole-match)
- (rustic-racer-syntax-highlight (match-string 1 whole-match)))))
- (->> markdown
- (replace-regexp-in-string
- (rx "[`" (group (+? anything)) "`]")
- highlight-group)
- (replace-regexp-in-string
- (rx "`" (group (+? anything)) "`")
- highlight-group))))
-
-(defun rustic-racer-indent-block (str)
- "Indent every line in STR."
- (s-join "\n" (--map (concat " " it) (s-lines str))))
-
-(defun rustic-racer-trim-newlines (str)
- "Remove newlines from the start and end of STR."
- (->> str
- (s-chop-prefix "\n")
- (s-chop-suffix "\n")))
-
-(defun rustic-racer-remove-footnote-links (str)
- "Remove footnote links from markdown STR."
- (->> (s-lines str)
- (--remove (string-match-p (rx bol "[`" (+? anything) "`]: ") it))
- (s-join "\n")
- ;; Collapse consecutive blank lines caused by removing footnotes.
- (s-replace "\n\n\n" "\n\n")))
-
-(defun rustic-racer-docstring-sections (docstring)
- "Split DOCSTRING into text, code and heading sections."
- (let* ((sections nil)
- (current-section-lines nil)
- (section-type :text)
- ;; Helper function.
- (finish-current-section
- (lambda ()
- (when current-section-lines
- (let ((current-section
- (s-join "\n" (nreverse current-section-lines))))
- (unless (s-blank? current-section)
- (push (list section-type current-section) sections))
- (setq current-section-lines nil))))))
- (dolist (line (s-lines docstring))
- (cond
- ;; If this is a closing ```
- ((and (s-starts-with-p "```" line) (eq section-type :code))
- (push line current-section-lines)
- (funcall finish-current-section)
- (setq section-type :text))
- ;; If this is an opening ```
- ((s-starts-with-p "```" line)
- (funcall finish-current-section)
- (push line current-section-lines)
- (setq section-type :code))
- ;; Headings
- ((and (not (eq section-type :code)) (s-starts-with-p "# " line))
- (funcall finish-current-section)
- (push (list :heading line) sections))
- ;; Normal text.
- (t
- (push line current-section-lines))))
- (funcall finish-current-section)
- (nreverse sections)))
-
-(defun rustic-racer-clean-code-section (section)
- "Given a SECTION, a markdown code block, remove
-fenced code delimiters and code annotations."
- (->> (s-lines section)
- (-drop 1)
- (-drop-last 1)
- ;; Ignore annotations like # #[allow(dead_code)]
- (--remove (s-starts-with-p "# " it))
- (s-join "\n")))
-
-(defun rustic-racer-propertize-docstring (docstring)
- "Replace markdown syntax in DOCSTRING with text properties."
- (let* ((sections (rustic-racer-docstring-sections docstring))
- (propertized-sections
- (--map (-let [(section-type section) it]
- ;; Remove trailing newlines, so we can ensure we
- ;; have consistent blank lines between sections.
- (rustic-racer-trim-newlines
- (pcase section-type
- (:text
- (rustic-racer-propertize-all-inline-code
- (rustic-racer-propertize-links
- (rustic-racer-remove-footnote-links
- section))))
- (:code
- (rustic-racer-indent-block
- (rustic-racer-syntax-highlight
- (rustic-racer-clean-code-section section))))
- (:heading
- (rustic-racer-header
- (s-chop-prefix "# " section))))))
- sections)))
- (s-join "\n\n" propertized-sections)))
-
-(defun rustic-racer-find-file (path line column)
- "Open PATH and move point to LINE and COLUMN."
- (find-file path)
- (goto-char (point-min))
- (forward-line (1- line))
- (forward-char column))
-
-(defun rustic-racer-kind-description (raw-kind)
- "Human friendly description of a rust kind.
-For example, 'EnumKind' -> 'an enum kind'."
- (let* ((parts (s-split-words raw-kind))
- (description (s-join " " (--map (downcase it) parts)))
- (a (if (string-match-p (rx bos (or "a" "e" "i" "o" "u")) description)
- "an" "a")))
- (format "%s %s" a description)))
-
-(defun rustic-racer-current-column ()
- "Get the current column based on underlying character representation."
- (length (buffer-substring-no-properties
- (line-beginning-position) (point))))
-
-(defun rustic-racer-syntax-highlight (str)
- "Apply font-lock properties to a string STR of Rust code."
- (let (result)
- ;; Load all of STR in a rustic-mode buffer, and use its
- ;; highlighting.
- (with-temp-buffer
- (insert str)
- (delay-mode-hooks (rustic-mode))
- (if (fboundp 'font-lock-ensure)
- (font-lock-ensure)
- (with-no-warnings
- (font-lock-fontify-buffer)))
- (setq result (buffer-string)))
- (when (and
- ;; If we haven't applied any properties yet,
- (null (text-properties-at 0 result))
- ;; and if it's a standalone symbol, then assume it's a
- ;; variable.
- (string-match-p (rx bos (+ (any lower "_")) eos) str))
- (setq result (propertize str 'face 'font-lock-variable-name-face)))
- result))
-
-(defun rustic-racer-split-parts (raw-output)
- "Given RAW-OUTPUT from racer, split on semicolons and doublequotes.
-Unescape strings as necessary."
- (let ((parts nil)
- (current "")
- (i 0))
- (while (< i (length raw-output))
- (let ((char (elt raw-output i))
- (prev-char (and (> i 0) (elt raw-output (1- i)))))
- (cond
- ;; A semicolon that wasn't escaped, start a new part.
- ((and (equal char ?\;) (not (equal prev-char ?\\)))
- (push current parts)
- (setq current ""))
- (t
- (setq current (concat current (string char))))))
- (setq i (1+ i)))
- (push current parts)
- (mapcar #'rustic-racer-read-rust-string (nreverse parts))))
-
-(defun rustic-racer-split-snippet-match (line)
- "Given LINE, a string \"MATCH ...\" from complete-with-snippet,
-split it into its constituent parts."
- (let* ((match-parts (rustic-racer-split-parts line))
- (docstring (nth 7 match-parts)))
- (when (and match-parts (equal (length match-parts) 8))
- (list :name (s-chop-prefix "MATCH " (nth 0 match-parts))
- :line (string-to-number (nth 2 match-parts))
- :column (string-to-number (nth 3 match-parts))
- :path (nth 4 match-parts)
- ;; Struct or Function:
- :kind (nth 5 match-parts)
- :signature (nth 6 match-parts)
- :docstring (if (> (length docstring) 0) docstring nil)))))
-
-;;; Interactive
-
-;;;###autoload
-(defun rustic-racer-describe ()
- "Show a *Racer Help* buffer for the function or type at point."
- (interactive)
- (let ((buf (rustic-racer-doc (thing-at-point 'symbol))))
- (if buf
- (pop-to-buffer buf)
- (user-error "No function or type found at point"))))
-
-;;; _
-(provide 'rustic-racer)
-;;; rustic-racer.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-rustfix.el b/emacs.d/elpa/rustic-20210609.1900/rustic-rustfix.el
deleted file mode 100644
index 2e44e8f..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-rustfix.el
+++ /dev/null
@@ -1,33 +0,0 @@
-;;; rustic-rustfix.el --- Support for rustfix -*- lexical-binding:t -*-
-;;; Commentary:
-
-;; This library implements support for `rustfix', a tool that applies
-;; the suggestions made by `rustc'.
-
-;;; Code:
-
-(require 'rustic-cargo)
-
-(defvar rustic-rustfix-process-name "rustic-rustfix-process"
- "Process name for rustfix processes.")
-
-(defvar rustic-rustfix-buffer-name "*cargo-rustfix*"
- "Buffer name for rustfix buffers.")
-
-(define-derived-mode rustic-rustfix-mode rustic-compilation-mode "rustfix"
- :group 'rustic)
-
-;;;###autoload
-(defun rustic-rustfix ()
- "Run 'cargo fix'."
- (interactive)
- (let* ((command (list rustic-cargo-bin "fix" "--allow-dirty"))
- (err-buf rustic-rustfix-buffer-name)
- (proc rustic-rustfix-process-name)
- (mode 'rustic-rustfix-mode))
- (rustic-compilation-process-live)
- (rustic-compilation-start command (list :buffer err-buf :process proc :mode mode))))
-
-;;; _
-(provide 'rustic-rustfix)
-;;; rustic-rustfix.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic-rustfmt.el b/emacs.d/elpa/rustic-20210609.1900/rustic-rustfmt.el
deleted file mode 100644
index 921cfdd..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic-rustfmt.el
+++ /dev/null
@@ -1,301 +0,0 @@
-;;; rustic-rustfmt.el --- Support for rustfmt -*- lexical-binding:t -*-
-;;; Commentary:
-
-;; This library implements support for `rustfmt', a tool that formats
-;; Rust code according to style guidelines.
-
-;;; Code:
-
-(require 'rustic-cargo)
-
-(declare-function project-root "project")
-
-;;; Options
-
-(defcustom rustic-rustfmt-bin "rustfmt"
- "Path to rustfmt executable."
- :type 'string
- :group 'rustic)
-
-(defcustom rustic-rustfmt-config-alist nil
- "An alist of (KEY . VAL) pairs that are passed to rustfmt.
-
-KEY is a symbol that corresponds to a config value of rustfmt.
-VALUE is a string, an integer or a boolean."
- :type '(alist :key-type symbol
- :value-type (choice string integer boolean))
- :group 'rustic)
-
-(defcustom rustic-format-trigger nil
- "Format future rust buffers before saving using rustfmt."
- :type '(choice (const :tag "Format buffer before saving." on-save)
- (const :tag "Run 'cargo fmt' before compilation." on-compile)
- (const :tag "Don't format automatically." nil))
- :group 'rustic)
-
-(defcustom rustic-format-display-method 'pop-to-buffer
- "Default function used for displaying rustfmt buffer."
- :type 'function
- :group 'rustic)
-
-;;; _
-
-(defvar rustic-format-process-name "rustic-rustfmt-process"
- "Process name for rustfmt processes.")
-
-(defvar rustic-format-buffer-name "*rustfmt*"
- "Buffer name for rustfmt process buffers.")
-
-(defvar rustic-save-pos nil
- "Marker, holding location of the cursor's position before
-running rustfmt.")
-
-(defun rustic-format-start-process (sentinel &rest args)
- "Run rustfmt with ARGS.
-
-:buffer BUFFER -- BUFFER is the buffer that is being formatted.
-
-:stdin STRING -- STRING will be written to the standard input of rustfmt.
-When `:files' is non-nil, STRING will be ignored by rustfmt.
-
-:files FILES -- FILES is a string or list of strings that
-specify the input file or files to rustfmt.
-
-:command COMMAND -- COMMAND is a string or a list of strings.
-When COMMAND is non-nil, it replaces the default command.
-When COMMAND is a string, it is the program file name.
-When COMMAND is a list, it's `car' is the program file name
-and it's `cdr' is a list of arguments."
- (let* ((err-buf (get-buffer-create rustic-format-buffer-name))
- (inhibit-read-only t)
- (dir (rustic-buffer-workspace))
- (buffer (plist-get args :buffer))
- (string (plist-get args :stdin))
- (files (plist-get args :files))
- (files (if (listp files) files (list files)))
- (command (or (plist-get args :command)
- (cons rustic-rustfmt-bin (rustic-compute-rustfmt-args))))
- (command (if (listp command) command (list command))))
- (setq rustic-save-pos (set-marker (make-marker) (point) (current-buffer)))
- (rustic-compilation-setup-buffer err-buf dir 'rustic-format-mode t)
- (--each files
- (unless (file-exists-p it)
- (error (format "File %s does not exist." it))))
- (with-current-buffer err-buf
- (let ((proc (rustic-make-process :name rustic-format-process-name
- :buffer err-buf
- :command `(,@command "--" ,@files)
- :filter #'rustic-compilation-filter
- :sentinel sentinel)))
- (setq next-error-last-buffer buffer)
- (when string
- (while (not (process-live-p proc))
- (sleep-for 0.01))
- (process-send-string proc (concat string "\n"))
- (process-send-eof proc))
- proc))))
-
-(defun rustic-compute-rustfmt-args ()
- "Compute the arguments to rustfmt from `rustic-rustfmt-config-alist'."
- (let (args)
- (cl-dolist (elem rustic-rustfmt-config-alist args)
- (cl-destructuring-bind (key . val) elem
- (push (format "%s=%s" key (if (booleanp val) (if val "true" "false") val)) args)
- (push "--config" args)))))
-
-(defun rustic-format-sentinel (proc output)
- "Sentinel for rustfmt processes when using stdin."
- (ignore-errors
- (let ((proc-buffer (process-buffer proc))
- (inhibit-read-only t))
- (with-current-buffer proc-buffer
- (if (string-match-p "^finished" output)
- (let ((file-buffer next-error-last-buffer)
- ;; replace-buffer-contents was in emacs 26.1, but it
- ;; was broken for non-ASCII strings, so we need 26.2.
- (use-replace (version<= "26.2" emacs-version)))
- (unless use-replace
- (copy-to-buffer file-buffer (point-min) (point-max)))
- (with-current-buffer file-buffer
- (if use-replace
- (replace-buffer-contents proc-buffer))
- (goto-char rustic-save-pos))
- (kill-buffer proc-buffer)
- (message "Formatted buffer with rustfmt."))
- (goto-char (point-min))
- (when-let ((file (buffer-file-name next-error-last-buffer)))
- (save-excursion
- (save-match-data
- (when (search-forward "<stdin>" nil t)
- (replace-match file)))))
- (with-current-buffer next-error-last-buffer
- (goto-char rustic-save-pos))
- (funcall rustic-format-display-method proc-buffer)
- (message "Rustfmt error."))))))
-
-(defun rustic-format-file-sentinel (proc output)
- "Sentinel for rustfmt processes when formatting a file."
- (ignore-errors
- (let ((proc-buffer (process-buffer proc)))
- (with-current-buffer proc-buffer
- (if (string-match-p "^finished" output)
- (with-current-buffer next-error-last-buffer
- (revert-buffer t t))
- (sit-for 0.1)
- (with-current-buffer next-error-last-buffer
- (goto-char rustic-save-pos))
- (goto-char (point-min))
- (funcall rustic-format-display-method proc-buffer)
- (message "Rustfmt error."))))))
-
-(define-derived-mode rustic-format-mode rustic-compilation-mode "rustfmt"
- :group 'rustic)
-
-(define-derived-mode rustic-cargo-fmt-mode rustic-compilation-mode "cargo-fmt"
- :group 'rustic)
-
-;;;###autoload
-(defun rustic-cargo-fmt ()
- "Use rustfmt via cargo."
- (interactive)
- (let ((command (list rustic-cargo-bin "fmt"))
- (buffer rustic-format-buffer-name)
- (proc rustic-format-process-name)
- (mode 'rustic-cargo-fmt-mode))
- (rustic-compilation-process-live)
- (rustic-compilation command
- (list
- :no-display t
- :buffer buffer
- :process proc
- :mode mode
- :sentinel #'rustic-cargo-fmt-sentinel))))
-
-(defun rustic-cargo-fmt-sentinel (proc output)
- "Sentinel for formatting with `rustic-cargo-fmt'."
- (let ((proc-buffer (process-buffer proc))
- (inhibit-read-only t))
- (with-current-buffer proc-buffer
- (if (not (string-match-p "^finished" output))
- (funcall rustic-compile-display-method proc-buffer)
- (when (fboundp rustic-list-project-buffers-function)
- (let ((buffers (cl-remove-if-not
- #'buffer-file-name
- (funcall rustic-list-project-buffers-function))))
- (dolist (b buffers)
- (with-current-buffer b
- (revert-buffer t t)))))
- (kill-buffer proc-buffer)
- (message "Workspace formatted with cargo-fmt.")))))
-
-;;;###autoload
-(defun rustic-format-buffer ()
- "Format the current buffer using rustfmt.
-
-Provide optional argument NO-STDIN for `rustic-before-save-hook' since there
-were issues when using stdin for formatting."
- (interactive)
- (unless (or (eq major-mode 'rustic-mode)
- (eq major-mode 'rustic-macro-expansion-mode))
- (error "Not a rustic-mode buffer."))
- (rustic-compilation-process-live t)
- (rustic-format-start-process 'rustic-format-sentinel
- :buffer (current-buffer)
- :stdin (buffer-string)))
-
-;;;###autoload
-(defun rustic-format-file (&optional file)
- "Unlike `rustic-format-buffer' format file directly and revert the buffer."
- (interactive "P")
- (let* ((buf (current-buffer))
- (file (or (if file (read-from-minibuffer "Format file: ") nil)
- (buffer-file-name buf)
- (read-from-minibuffer "Format file: ")))
- (string (buffer-string)))
- (write-region string nil file nil 0)
- (let ((proc (rustic-format-start-process 'rustic-format-file-sentinel
- :buffer buf
- :files file)))
- (while (eq (process-status proc) 'run)
- (sit-for 0.05)))))
-
-(defun rustic-project-buffer-list ()
- "Return a list of the buffers belonging to the current project.
-This is basically a wrapper around `project--buffer-list'."
- (when-let ((pr (project-current)))
- (if (fboundp 'project--buffer-list)
- (project--buffer-list pr)
- ;; Like the above function but for releases before Emacs 28.
- (let ((root (project-root pr))
- bufs)
- (dolist (buf (buffer-list))
- (let ((filename (or (buffer-file-name buf)
- (buffer-local-value 'default-directory buf))))
- (when (and filename (file-in-directory-p filename root))
- (push buf bufs))))
- (nreverse bufs)))))
-
-;;; Hooks
-
-(defun rustic-maybe-format-before-compilation ()
- (if (eq rustic-format-trigger 'on-compile)
- (let ((proc (rustic-cargo-fmt)))
- (while (eq (process-status proc) 'run)
- (sit-for 0.1))
- (and (not (zerop (process-exit-status proc)))
- (funcall rustic-compile-display-method (process-buffer proc))
- t))
- t))
-
-(add-hook 'rustic-before-compilation-hook
- #'rustic-maybe-format-before-compilation)
-
-(defun rustic-before-save-hook ()
- "Don't throw error if rustfmt isn't installed, as it makes saving impossible."
- (when (and (rustic-format-on-save-p)
- (not (rustic-compilation-process-live t)))
- (condition-case nil
- (progn
- (rustic-format-file)
- (sit-for 0.1))
- (error nil))))
-
-(defun rustic-after-save-hook ()
- "Check if rustfmt is installed after saving the file."
- (when (rustic-format-on-save-p)
- (unless (executable-find rustic-rustfmt-bin)
- (error "Could not locate executable \"%s\"" rustic-rustfmt-bin))))
-
-(defun rustic-maybe-format-after-save (buffer)
- (when (rustic-format-on-save-p)
- (let* ((file (buffer-file-name buffer))
- (proc (rustic-format-start-process
- 'rustic-format-file-sentinel
- :buffer buffer
- :files file)))
- (while (eq (process-status proc) 'run)
- (sit-for 0.1)))))
-
-(defvar rustic-format-on-save nil
- "Format rust buffers before saving using rustfmt.")
-
-(make-obsolete 'rustic-format-on-save 'rustic-format-trigger "Rustic 0.19")
-
-(defun rustic-format-on-save-p ()
- "Return non-nil if formatting should happen when saving.
-See option `rustic-format-trigger'. For backward compatibility,
-if obsolete `rustic-format-on-save' is non-nil, then also return
-non-nil."
- (or rustic-format-on-save (eq rustic-format-trigger 'on-save)))
-
-(defun rustic-save-some-buffers-advice (orig-fun &rest args)
- (let ((rustic-format-trigger nil)
- (rustic-format-on-save nil))
- (apply orig-fun args)))
-
-(advice-add 'save-some-buffers :around
- #'rustic-save-some-buffers-advice)
-
-;;; _
-(provide 'rustic-rustfmt)
-;;; rustic-rustfmt.el ends here
diff --git a/emacs.d/elpa/rustic-20210609.1900/rustic.el b/emacs.d/elpa/rustic-20210609.1900/rustic.el
deleted file mode 100644
index e85ee72..0000000
--- a/emacs.d/elpa/rustic-20210609.1900/rustic.el
+++ /dev/null
@@ -1,1253 +0,0 @@
-;;; rustic.el --- Rust development environment -*-lexical-binding: t-*-
-
-;; Version: 1.3
-;; Author: Mozilla
-;;
-;; Keywords: languages
-;; Package-Requires: ((emacs "26.1") (dash "2.13.0") (f "0.18.2") (let-alist "1.0.4") (markdown-mode "2.3") (project "0.3.0") (s "1.10.0") (seq "2.3") (spinner "1.7.3") (xterm-color "1.6"))
-
-;; This file is distributed under the terms of both the MIT license and the
-;; Apache License (version 2.0).
-
-;;; Commentary:
-
-;; This package is a fork of rust-mode.
-;;
-;; Differences with rust-mode:
-;;
-;; - rust-analyzer configuration
-;; - flycheck integration
-;; - cargo popup
-;; - multiline error parsing
-;; - translation of ANSI control sequences through xterm-color
-;; - async org babel
-;; - custom compilation process
-;; - rustfmt errors in a rust compilation mode
-;; - automatic RLS configuration with eglot or lsp-mode
-;; - cask for testing
-;; - requires emacs 26
-;; - etc.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'pcase)
-(require 'seq)
-(require 'subr-x)
-
-(require 'dash)
-
-(eval-when-compile (require 'rx))
-
-(defvar electric-pair-inhibit-predicate)
-(defvar electric-pair-skip-self)
-(defvar electric-indent-chars)
-
-;;; Customization
-
-(defgroup rustic nil
- "Support for Rust code."
- :link '(url-link "https://www.rustic-lang.org/")
- :group 'languages)
-
-(defcustom rustic-indent-offset 4
- "Indent Rust code by this number of spaces."
- :type 'integer
- :group 'rustic
- :safe #'integerp)
-
-(defcustom rustic-indent-method-chain nil
- "Indent Rust method chains, aligned by the `.' operators."
- :type 'boolean
- :group 'rustic
- :safe #'booleanp)
-
-(defcustom rustic-indent-where-clause nil
- "Indent lines starting with the `where' keyword following a function or trait.
-When nil, `where' will be aligned with `fn' or `trait'."
- :type 'boolean
- :group 'rustic
- :safe #'booleanp)
-
-(defcustom rustic-match-angle-brackets t
- "Whether to enable angle bracket (`<' and `>') matching where appropriate."
- :type 'boolean
- :safe #'booleanp
- :group 'rustic)
-
-(defcustom rustic-indent-return-type-to-arguments t
- "Indent a line starting with the `->' (RArrow) following a function, aligning
-to the function arguments. When nil, `->' will be indented one level."
- :type 'boolean
- :group 'rustic
- :safe #'booleanp)
-
-;;; Faces
-
-(define-obsolete-face-alias 'rustic-unsafe-face
- 'rustic-unsafe "1.2")
-(define-obsolete-face-alias 'rustic-question-mark-face
- 'rustic-question-mark "1.2")
-(define-obsolete-face-alias 'rustic-builtin-formatting-macro-face
- 'rustic-builtin-formatting-macro "1.2")
-(define-obsolete-face-alias 'rustic-string-interpolation-face
- 'rustic-string-interpolation "1.2")
-
-(defface rustic-unsafe
- '((t :inherit font-lock-warning-face))
- "Face for the `unsafe' keyword."
- :group 'rustic)
-
-(defface rustic-question-mark
- '((t :weight bold :inherit font-lock-builtin-face))
- "Face for the question mark operator."
- :group 'rustic)
-
-(defface rustic-builtin-formatting-macro
- '((t :inherit font-lock-builtin-face))
- "Face for builtin formatting macros (print! &c.)."
- :group 'rustic)
-
-(defface rustic-string-interpolation
- '((t :slant italic :inherit font-lock-string-face))
- "Face for interpolating braces in builtin formatting macro strings."
- :group 'rustic)
-
-;;; Workspace
-
-(defvar-local rustic--buffer-workspace nil
- "Use function `rustic-buffer-workspace' instead.")
-
-(defun rustic-buffer-workspace (&optional nodefault)
- "Return the Rust workspace for the current buffer.
-This is the directory containing the file \"Cargo.lock\". When
-called outside a Rust project, then return `default-directory',
-or if NODEFAULT is non-nil, then fall back to returning nil."
- (or rustic--buffer-workspace
- (let ((dir (locate-dominating-file default-directory "Cargo.toml")))
- (when dir
- (setq dir (expand-file-name dir)))
- (setq rustic--buffer-workspace dir)
- (or dir
- (and (not nodefault)
- default-directory)))))
-
-;;; Syntax
-
-(defconst rustic-re-ident "[[:word:][:multibyte:]_][[:word:][:multibyte:]_[:digit:]]*")
-(defconst rustic-re-lc-ident "[[:lower:][:multibyte:]_][[:word:][:multibyte:]_[:digit:]]*")
-(defconst rustic-re-uc-ident "[[:upper:]][[:word:][:multibyte:]_[:digit:]]*")
-(defconst rustic-re-vis "pub")
-(defconst rustic-re-unsafe "unsafe")
-(defconst rustic-re-extern "extern")
-(defconst rustic-re-generic
- (concat "<[[:space:]]*'" rustic-re-ident "[[:space:]]*>"))
-(defconst rustic-re-union
- (rx-to-string
- `(seq
- (or space line-start)
- (group symbol-start "union" symbol-end)
- (+ space) (regexp ,rustic-re-ident))))
-
-(defun rustic-re-shy (inner) (concat "\\(?:" inner "\\)"))
-(defun rustic-re-grab (inner) (concat "\\(" inner "\\)"))
-(defun rustic-re-item-def (itype)
- (concat (rustic-re-word itype)
- (rustic-re-shy rustic-re-generic) "?"
- "[[:space:]]+" (rustic-re-grab rustic-re-ident)))
-(defun rustic-re-word (inner) (concat "\\<" inner "\\>"))
-
-(defun rustic-re-item-def-imenu (itype)
- (concat "^[[:space:]]*"
- (rustic-re-shy (concat (rustic-re-word rustic-re-vis) "[[:space:]]+")) "?"
- (rustic-re-shy (concat (rustic-re-word "default") "[[:space:]]+")) "?"
- (rustic-re-shy (concat (rustic-re-word rustic-re-unsafe) "[[:space:]]+")) "?"
- (rustic-re-shy (concat (rustic-re-word rustic-re-extern) "[[:space:]]+"
- (rustic-re-shy "\"[^\"]+\"[[:space:]]+") "?")) "?"
- (rustic-re-item-def itype)))
-
-(defvar rustic-imenu-generic-expression
- (append (mapcar #'(lambda (x)
- (list (capitalize x) (rustic-re-item-def-imenu x) 1))
- '("async fn" "enum" "struct" "union" "type" "mod" "fn" "trait" "impl"))
- `(("Macro" ,(rustic-re-item-def-imenu "macro_rules!") 1)))
- "Value for `imenu-generic-expression' in Rust mode.
-
-Create a hierarchical index of the item definitions in a Rust file.
-
-Imenu will show all the enums, structs, etc. in their own subheading.
-Use idomenu (imenu with `ido-mode') for best mileage.")
-
-(defvar rustic-mode-syntax-table
- (let ((table (make-syntax-table)))
-
- ;; Operators
- (dolist (i '(?+ ?- ?* ?/ ?% ?& ?| ?^ ?! ?< ?> ?~ ?@))
- (modify-syntax-entry i "." table))
-
- ;; Strings
- (modify-syntax-entry ?\" "\"" table)
- (modify-syntax-entry ?\\ "\\" table)
-
- ;; Angle brackets. We suppress this with syntactic propertization
- ;; when needed
- (modify-syntax-entry ?< "(>" table)
- (modify-syntax-entry ?> ")<" table)
-
- ;; Comments
- (modify-syntax-entry ?/ ". 124b" table)
- (modify-syntax-entry ?* ". 23n" table)
- (modify-syntax-entry ?\n "> b" table)
- (modify-syntax-entry ?\^m "> b" table)
-
- table)
- "Syntax definitions and helpers.")
-
-;;; Mode
-
-(defvar rustic-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "C-c C-p") 'rustic-popup)
-
- (define-key map (kbd "C-c C-c C-u") 'rustic-compile)
- (define-key map (kbd "C-c C-c C-i") 'rustic-recompile)
- (define-key map (kbd "C-c C-c C-b") 'rustic-cargo-build)
- (define-key map (kbd "C-c C-c C-k") 'rustic-cargo-check)
- (define-key map (kbd "C-c C-c C-r") 'rustic-cargo-run)
- (define-key map (kbd "C-c C-c C-f") 'rustic-cargo-fmt)
- (define-key map (kbd "C-c C-c C-t") 'rustic-cargo-test)
- (define-key map (kbd "C-c C-c C-c") 'rustic-cargo-current-test)
- (define-key map (kbd "C-c C-c C-l") 'rustic-cargo-clippy)
- (define-key map (kbd "C-c C-c C-o") 'rustic-format-buffer)
-
- (define-key map (kbd "C-c C-c C-d") 'rustic-racer-describe)
- (define-key map (kbd "C-c C-c C-,") 'rustic-docstring-dwim)
- (define-key map (kbd "C-c C-c C-n") 'rustic-cargo-outdated)
- map)
- "Keymap for Rust major mode.")
-
-;;;###autoload
-(define-derived-mode rustic-mode prog-mode "Rustic"
- "Major mode for Rust code.
-
-\\{rustic-mode-map}"
- :group 'rustic
- :syntax-table rustic-mode-syntax-table
-
- ;; Syntax
- (setq-local syntax-propertize-function #'rustic-syntax-propertize)
-
- ;; Indentation
- (setq-local indent-line-function 'rustic-indent-line)
-
- ;; Fonts
- (setq-local font-lock-defaults
- '(rustic-font-lock-keywords
- nil nil nil nil
- (font-lock-syntactic-face-function
- . rustic-syntactic-face-function)))
-
- ;; Misc
- (setq-local comment-start "// ")
- (setq-local comment-end "")
- (setq-local open-paren-in-column-0-is-defun-start nil)
-
- ;; Auto indent on }
- (setq-local electric-indent-chars
- (cons ?} (and (boundp 'electric-indent-chars)
- electric-indent-chars)))
-
- ;; Allow paragraph fills for comments
- (setq-local comment-start-skip "\\(?://[/!]*\\|/\\*[*!]?\\)[[:space:]]*")
- (setq-local paragraph-start
- (concat "[[:space:]]*\\(?:"
- comment-start-skip
- "\\|\\*/?[[:space:]]*\\|\\)$"))
- (setq-local paragraph-separate paragraph-start)
- (setq-local normal-auto-fill-function 'rustic-do-auto-fill)
- (setq-local fill-paragraph-function 'rustic-fill-paragraph)
- (setq-local fill-forward-paragraph-function 'rustic-fill-forward-paragraph)
- (setq-local adaptive-fill-function 'rustic-find-fill-prefix)
- (setq-local adaptive-fill-first-line-regexp "")
- (setq-local comment-multi-line t)
- (setq-local comment-line-break-function 'rustic-comment-indent-new-line)
- (setq-local imenu-generic-expression rustic-imenu-generic-expression)
- (setq-local imenu-syntax-alist '((?! . "w"))) ; For macro_rules!
- (setq-local beginning-of-defun-function 'rustic-beginning-of-defun)
- (setq-local end-of-defun-function 'rustic-end-of-defun)
- (setq-local parse-sexp-lookup-properties t)
- (setq-local electric-pair-inhibit-predicate
- 'rustic-electric-pair-inhibit-predicate-wrap)
- (setq-local electric-pair-skip-self 'rustic-electric-pair-skip-self-wrap)
-
- (when (fboundp 'rustic-before-save-hook)
- (add-hook 'before-save-hook 'rustic-before-save-hook nil t)
- (add-hook 'after-save-hook 'rustic-after-save-hook nil t)))
-
-;;;###autoload
-(add-to-list 'auto-mode-alist '("\\.rs\\'" . rustic-mode))
-
-;; remove rust-mode from `auto-mode-alist'
-(let ((mode '("\\.rs\\'" . rust-mode)))
- (when (member mode auto-mode-alist)
- (setq auto-mode-alist (remove mode auto-mode-alist))))
-
-(defvar rustic-top-item-beg-re
- (concat "\\s-*\\(?:priv\\|pub\\)?\\s-*"
- (regexp-opt
- '("enum" "struct" "union" "type" "mod" "use" "fn" "static" "impl"
- "extern" "trait" "async"))
- "\\_>")
- "Start of a Rust item.")
-
-(defconst rustic-re-type-or-constructor
- (rx symbol-start
- (group upper (0+ (any word nonascii digit "_")))
- symbol-end))
-
-(defconst rustic-keywords
- '("as" "async" "await"
- "box" "break"
- "const" "continue" "crate"
- "do" "dyn"
- "else" "enum" "extern" "existential"
- "false" "fn" "for"
- "if" "impl" "in"
- "let" "loop"
- "match" "mod" "move" "mut"
- "priv" "pub"
- "ref" "return"
- "self" "static" "struct" "super"
- "true" "trait" "type" "try"
- "use"
- "virtual"
- "where" "while"
- "yield")
- "Font-locking definitions and helpers.")
-
-(defconst rustic-special-types
- '("u8" "i8"
- "u16" "i16"
- "u32" "i32"
- "u64" "i64"
- "u128" "i128"
-
- "f32" "f64"
- "isize" "usize"
- "bool"
- "str" "char"))
-
-(defvar rustic-builtin-formatting-macros
- '("eprint"
- "eprintln"
- "format"
- "print"
- "println")
- "List of builtin Rust macros for string formatting.
-This is used by `rust-font-lock-keywords'.
-\(`write!' is handled separately).")
-
-(defvar rustic-formatting-macro-opening-re
- "[[:space:]]*[({[][[:space:]]*"
- "Regular expression to match the opening delimiter of a Rust formatting macro.")
-
-(defvar rustic-start-of-string-re
- "\\(?:r#*\\)?\""
- "Regular expression to match the start of a Rust raw string.")
-
-(defun rustic-path-font-lock-matcher (re-ident)
- "Match occurrences of RE-IDENT followed by a double-colon.
-Examples include to match names like \"foo::\" or \"Foo::\".
-Does not match type annotations of the form \"foo::<\"."
- `(lambda (limit)
- (catch 'rustic-path-font-lock-matcher
- (while t
- (let* ((symbol-then-colons (rx-to-string '(seq (group (regexp ,re-ident)) "::")))
- (match (re-search-forward symbol-then-colons limit t)))
- (cond
- ;; If we didn't find a match, there are no more occurrences
- ;; of foo::, so return.
- ((null match) (throw 'rustic-path-font-lock-matcher nil))
- ;; If this isn't a type annotation foo::<, we've found a
- ;; match, so a return it!
- ((not (looking-at (rx (0+ space) "<")))
- (throw 'rustic-path-font-lock-matcher match))))))))
-
-(defvar rustic-font-lock-keywords
- (append
- `(
- ;; Keywords proper
- (,(regexp-opt rustic-keywords 'symbols) . font-lock-keyword-face)
-
- ;; Contextual keywords
- ("\\_<\\(default\\)[[:space:]]+fn\\_>" 1 font-lock-keyword-face)
- (,rustic-re-union 1 font-lock-keyword-face)
-
- ;; Special types
- (,(regexp-opt rustic-special-types 'symbols) . font-lock-type-face)
-
- ;; The unsafe keyword
- ("\\_<unsafe\\_>" . 'rustic-unsafe)
-
- ;; Attributes like `#[bar(baz)]` or `#![bar(baz)]` or `#[bar = "baz"]`
- (,(rustic-re-grab (concat "#\\!?\\[" rustic-re-ident "[^]]*\\]"))
- 1 font-lock-preprocessor-face keep)
-
- ;; Builtin formatting macros
- (,(concat (rustic-re-grab (concat (regexp-opt rustic-builtin-formatting-macros) "!"))
- rustic-formatting-macro-opening-re
- rustic-start-of-string-re)
- (1 'rustic-builtin-formatting-macro)
- (rustic-string-interpolation-matcher
- (rustic-end-of-string)
- nil
- (0 'rustic-string-interpolation t nil)))
-
- ;; write! macro
- (,(concat (rustic-re-grab "write\\(ln\\)?!")
- rustic-formatting-macro-opening-re
- "[[:space:]]*[^\"]+,[[:space:]]*"
- rustic-start-of-string-re)
- (1 'rustic-builtin-formatting-macro)
- (rustic-string-interpolation-matcher
- (rustic-end-of-string)
- nil
- (0 'rustic-string-interpolation t nil)))
-
- ;; Syntax extension invocations like `foo!`, highlight including the !
- (,(concat (rustic-re-grab (concat rustic-re-ident "!")) "[({[:space:][]")
- 1 font-lock-preprocessor-face)
-
- ;; Field names like `foo:`, highlight excluding the :
- (,(concat (rustic-re-grab rustic-re-ident) ":[^:]") 1 font-lock-variable-name-face)
-
- ;; CamelCase Means Type Or Constructor
- (,rustic-re-type-or-constructor 1 font-lock-type-face)
-
- ;; Type-inferred binding
- (,(concat "\\_<\\(?:let\\s-+ref\\|let\\|ref\\)\\s-+\\(?:mut\\s-+\\)?"
- (rustic-re-grab rustic-re-ident)
- "\\_>")
- 1 font-lock-variable-name-face)
-
- ;; Type names like `Foo::`, highlight excluding the ::
- (,(rustic-path-font-lock-matcher rustic-re-uc-ident) 1 font-lock-type-face)
-
- ;; Module names like `foo::`, highlight excluding the ::
- (,(rustic-path-font-lock-matcher rustic-re-lc-ident) 1 font-lock-constant-face)
-
- ;; Lifetimes like `'foo`
- (,(concat "'" (rustic-re-grab rustic-re-ident) "[^']") 1 font-lock-variable-name-face)
-
- ;; Question mark operator
- ("\\?" . 'rustic-question-mark)
- )
-
- ;; Ensure we highlight `Foo` in `struct Foo` as a type.
- (mapcar #'(lambda (x)
- (list (rustic-re-item-def (car x))
- 1 (cdr x)))
- '(("enum" . font-lock-type-face)
- ("struct" . font-lock-type-face)
- ("union" . font-lock-type-face)
- ("type" . font-lock-type-face)
- ("mod" . font-lock-constant-face)
- ("use" . font-lock-constant-face)
- ("fn" . font-lock-function-name-face)))))
-
-(defun rustic-end-of-string ()
- "Skip to the end of the current string."
- (save-excursion
- (skip-syntax-forward "^\"|")
- (skip-syntax-forward "\"|")
- (point)))
-
-(defun rustic-looking-back-str (str)
- "Return non-nil if there's a match on the text before point and STR.
-Like `looking-back' but for fixed strings rather than regexps (so
-that it's not so slow)."
- (let ((len (length str)))
- (and (> (point) len)
- (equal str (buffer-substring-no-properties (- (point) len) (point))))))
-
-(defun rustic-looking-back-symbols (symbols)
- "Return non-nil if the point is after a member of SYMBOLS.
-SYMBOLS is a list of strings that represent the respective
-symbols."
- (save-excursion
- (let* ((pt-orig (point))
- (beg-of-symbol (progn (forward-thing 'symbol -1) (point)))
- (end-of-symbol (progn (forward-thing 'symbol 1) (point))))
- (and
- (= end-of-symbol pt-orig)
- (member (buffer-substring-no-properties beg-of-symbol pt-orig)
- symbols)))))
-
-(defun rustic-looking-back-ident ()
- "Non-nil if we are looking backwards at a valid rust identifier."
- (let ((beg-of-symbol (save-excursion (forward-thing 'symbol -1) (point))))
- (looking-back rustic-re-ident beg-of-symbol)))
-
-(defun rustic-looking-back-macro ()
- "Non-nil if looking back at an ident followed by a !
-
-This is stricter than rust syntax which allows a space between
-the ident and the ! symbol. If this space is allowed, then we
-would also need a keyword check to avoid `if !(condition)` being
-seen as a macro."
- (if (> (- (point) (point-min)) 1)
- (save-excursion
- (backward-char)
- (and (= ?! (char-after))
- (rustic-looking-back-ident)))))
-
-;;; Syntax definitions and helpers
-
-(defun rustic-paren-level () (nth 0 (syntax-ppss)))
-(defun rustic-in-str () (nth 3 (syntax-ppss)))
-(defun rustic-in-str-or-cmnt () (nth 8 (syntax-ppss)))
-(defun rustic-rewind-past-str-cmnt () (goto-char (nth 8 (syntax-ppss))))
-
-(defun rustic-rewind-irrelevant ()
- (let ((continue t))
- (while continue
- (let ((starting (point)))
- (skip-chars-backward "[:space:]\n")
- (when (rustic-looking-back-str "*/")
- (backward-char))
- (when (rustic-in-str-or-cmnt)
- (rustic-rewind-past-str-cmnt))
- ;; Rewind until the point no longer moves
- (setq continue (/= starting (point)))))))
-
-(defvar-local rustic-macro-scopes nil
- "Cache for the scopes calculated by `rustic-macro-scope'.
-
-This variable can be `let' bound directly or indirectly around
-`rustic-macro-scope' as an optimization but should not be otherwise
-set.")
-
-(defun rustic-macro-scope (start end)
- "Return the scope of macros in the buffer.
-
-The return value is a list of (START END) positions in the
-buffer.
-
-If set START and END are optimizations which limit the return
-value to scopes which are approximately with this range."
- (save-excursion
- ;; need to special case macro_rules which has unique syntax
- (let ((scope nil)
- (start (or start (point-min)))
- (end (or end (point-max))))
- (goto-char start)
- ;; if there is a start move back to the previous top level,
- ;; as any macros before that must have closed by this time.
- (let ((top (syntax-ppss-toplevel-pos (syntax-ppss))))
- (when top
- (goto-char top)))
- (while
- (and
- ;; The movement below may have moved us passed end, in
- ;; which case search-forward will error
- (< (point) end)
- (search-forward "!" end t))
- (let ((pt (point)))
- (cond
- ;; in a string or comment is boring, move straight on
- ((rustic-in-str-or-cmnt))
- ;; in a normal macro,
- ((and (skip-chars-forward " \t\n\r")
- (memq (char-after)
- '(?\[ ?\( ?\{))
- ;; Check that we have a macro declaration after.
- (rustic-looking-back-macro))
- (let ((start (point)))
- (ignore-errors (forward-list))
- (setq scope (cons (list start (point)) scope))))
- ;; macro_rules, why, why, why did you not use macro syntax??
- ((save-excursion
- ;; yuck -- last test moves point, even if it fails
- (goto-char (- pt 1))
- (skip-chars-backward " \t\n\r")
- (rustic-looking-back-str "macro_rules"))
- (save-excursion
- (when (re-search-forward "[[({]" nil t)
- (backward-char)
- (let ((start (point)))
- (ignore-errors (forward-list))
- (setq scope (cons (list start (point)) scope)))))))))
- ;; Return 'empty rather than nil, to indicate a buffer with no
- ;; macros at all.
- (or scope 'empty))))
-
-(defun rustic-in-macro (&optional start end)
- "Return non-nil when point is within the scope of a macro.
-
-If START and END are set, minimize the buffer analysis to
-approximately this location as an optimization.
-
-Alternatively, if `rustic-macro-scopes' is a list use the scope
-information in this variable. This last is an optimization and
-the caller is responsible for ensuring that the data in
-`rustic-macro-scopes' is up to date."
- (when (> (rustic-paren-level) 0)
- (let ((scopes
- (or
- rustic-macro-scopes
- (rustic-macro-scope start end))))
- ;; `rustic-macro-scope' can return the symbol `empty' if the
- ;; buffer has no macros at all.
- (when (listp scopes)
- (seq-some
- (lambda (sc)
- (and (>= (point) (car sc))
- (< (point) (cadr sc))))
- scopes)))))
-
-(defun rustic-looking-at-where ()
- "Return T when looking at the \"where\" keyword."
- (and (looking-at-p "\\bwhere\\b")
- (not (rustic-in-str-or-cmnt))))
-
-(defun rustic-rewind-to-where (&optional limit)
- "Rewind the point to the closest occurrence of the \"where\" keyword.
-Return T iff a where-clause was found. Does not rewind past
-LIMIT when passed, otherwise only stops at the beginning of the
-buffer."
- (when (re-search-backward "\\bwhere\\b" limit t)
- (if (rustic-in-str-or-cmnt)
- (rustic-rewind-to-where limit)
- t)))
-
-(defconst rustic-re-pre-expression-operators "[-=!%&*/:<>[{(|.^;}]")
-
-(defconst rustic-re-special-types (regexp-opt rustic-special-types 'symbols))
-
-;;; Font-locking definitions and helpers
-
-(defun rustic-next-string-interpolation (limit)
- "Search forward from point for next Rust interpolation marker before LIMIT.
-Set point to the end of the occurrence found, and return match beginning
-and end."
- (catch 'match
- (save-match-data
- (save-excursion
- (while (search-forward "{" limit t)
- (if (eql (char-after (point)) ?{)
- (forward-char)
- (let ((start (match-beginning 0)))
- ;; According to fmt_macros::Parser::next, an opening brace
- ;; must be followed by an optional argument and/or format
- ;; specifier, then a closing brace. A single closing brace
- ;; without a corresponding unescaped opening brace is an
- ;; error. We don't need to do anything special with
- ;; arguments, specifiers, or errors, so we only search for
- ;; the single closing brace.
- (when (search-forward "}" limit t)
- (throw 'match (list start (point)))))))))))
-
-(defun rustic-string-interpolation-matcher (limit)
- "Match next Rust interpolation marker before LIMIT and set match data if found.
-Returns nil if not within a Rust string."
- (when (rustic-in-str)
- (let ((match (rustic-next-string-interpolation limit)))
- (when match
- (set-match-data match)
- (goto-char (cadr match))
- match))))
-
-(defun rustic-syntax-class-before-point ()
- (when (> (point) 1)
- (syntax-class (syntax-after (1- (point))))))
-
-(defun rustic-rewind-qualified-ident ()
- (while (rustic-looking-back-ident)
- (backward-sexp)
- (when (save-excursion (rustic-rewind-irrelevant) (rustic-looking-back-str "::"))
- (rustic-rewind-irrelevant)
- (backward-char 2)
- (rustic-rewind-irrelevant))))
-
-(defun rustic-rewind-type-param-list ()
- (cond
- ((and (rustic-looking-back-str ">") (equal 5 (rustic-syntax-class-before-point)))
- (backward-sexp)
- (rustic-rewind-irrelevant))
-
- ;; We need to be able to back up past the Fn(args) -> RT form as well. If
- ;; we're looking back at this, we want to end up just after "Fn".
- ((member (char-before) '(?\] ?\) ))
- (let* ((is-paren (rustic-looking-back-str ")"))
- (dest (save-excursion
- (backward-sexp)
- (rustic-rewind-irrelevant)
- (or
- (when (rustic-looking-back-str "->")
- (backward-char 2)
- (rustic-rewind-irrelevant)
- (when (rustic-looking-back-str ")")
- (backward-sexp)
- (point)))
- (and is-paren (point))))))
- (when dest
- (goto-char dest))))))
-
-(defun rustic-rewind-to-decl-name ()
- "Return the point at the beginning of the name in a declaration.
-I.e. if we are before an ident that is part of a declaration that
-can have a where clause, rewind back to just before the name of
-the subject of that where clause and return the new point.
-Otherwise return nil."
- (let* ((ident-pos (point))
- (newpos (save-excursion
- (rustic-rewind-irrelevant)
- (rustic-rewind-type-param-list)
- (cond
- ((rustic-looking-back-symbols
- '("fn" "trait" "enum" "struct" "union" "impl" "type"))
- ident-pos)
-
- ((equal 5 (rustic-syntax-class-before-point))
- (backward-sexp)
- (rustic-rewind-to-decl-name))
-
- ((looking-back "[:,'+=]" (1- (point)))
- (backward-char)
- (rustic-rewind-to-decl-name))
-
- ((rustic-looking-back-str "->")
- (backward-char 2)
- (rustic-rewind-to-decl-name))
-
- ((rustic-looking-back-ident)
- (rustic-rewind-qualified-ident)
- (rustic-rewind-to-decl-name))))))
- (when newpos (goto-char newpos))
- newpos))
-
-(defun rustic-is-in-expression-context (token)
- "Return t if what comes right after the point is part of an
-expression (as opposed to starting a type) by looking at what
-comes before. Takes a symbol that roughly indicates what is
-after the point.
-
-This function is used as part of `rustic-is-lt-char-operator' as
-part of angle bracket matching, and is not intended to be used
-outside of this context."
- (save-excursion
- (let ((postchar (char-after)))
- (rustic-rewind-irrelevant)
- ;; A type alias or ascription could have a type param list. Skip backwards past it.
- (when (member token '(ambiguous-operator open-brace))
- (rustic-rewind-type-param-list))
- (cond
-
- ;; Certain keywords always introduce expressions
- ((rustic-looking-back-symbols '("if" "while" "match" "return" "box" "in")) t)
-
- ;; "as" introduces a type
- ((rustic-looking-back-symbols '("as")) nil)
-
- ;; An open angle bracket never introduces expression context WITHIN the angle brackets
- ((and (equal token 'open-brace) (equal postchar ?<)) nil)
-
- ;; An ident! followed by an open brace is a macro invocation. Consider
- ;; it to be an expression.
- ((and (equal token 'open-brace) (rustic-looking-back-macro)) t)
-
- ;; In a brace context a "]" introduces an expression.
- ((and (eq token 'open-brace) (rustic-looking-back-str "]")))
-
- ;; An identifier is right after an ending paren, bracket, angle bracket
- ;; or curly brace. It's a type if the last sexp was a type.
- ((and (equal token 'ident) (equal 5 (rustic-syntax-class-before-point)))
- (backward-sexp)
- (rustic-is-in-expression-context 'open-brace))
-
- ;; If a "for" appears without a ; or { before it, it's part of an
- ;; "impl X for y", so the y is a type. Otherwise it's
- ;; introducing a loop, so the y is an expression
- ((and (equal token 'ident) (rustic-looking-back-symbols '("for")))
- (backward-sexp)
- (rustic-rewind-irrelevant)
- (looking-back "[{;]" (1- (point))))
-
- ((rustic-looking-back-ident)
- (rustic-rewind-qualified-ident)
- (rustic-rewind-irrelevant)
- (cond
- ((equal token 'open-brace)
- ;; We now know we have:
- ;; ident <maybe type params> [{([]
- ;; where [{([] denotes either a {, ( or [.
- ;; This character is bound as postchar.
- (cond
- ;; If postchar is a paren or square bracket, then if the
- ;; brace is a type if the identifier is one
- ((member postchar '(?\( ?\[ )) (rustic-is-in-expression-context 'ident))
-
- ;; If postchar is a curly brace, the brace can only be a type if
- ;; ident2 is the name of an enum, struct or trait being declared.
- ;; Note that if there is a -> before the ident then the ident would
- ;; be a type but the { is not.
- ((equal ?{ postchar)
- (not (and (rustic-rewind-to-decl-name)
- (progn
- (rustic-rewind-irrelevant)
- (rustic-looking-back-symbols
- '("enum" "struct" "union" "trait" "type"))))))))
-
- ((equal token 'ambiguous-operator)
- (cond
- ;; An ampersand after an ident has to be an operator rather
- ;; than a & at the beginning of a ref type
- ((equal postchar ?&) t)
-
- ;; A : followed by a type then an = introduces an
- ;; expression (unless it is part of a where clause of a
- ;; "type" declaration)
- ((and (equal postchar ?=)
- (looking-back "[^:]:" (- (point) 2))
- (not (save-excursion
- (and (rustic-rewind-to-decl-name)
- (progn (rustic-rewind-irrelevant)
- (rustic-looking-back-symbols '("type"))))))))
-
- ;; "let ident =" introduces an expression--and so does "const" and "mut"
- ((and (equal postchar ?=) (rustic-looking-back-symbols '("let" "const" "mut"))) t)
-
- ;; As a specific special case, see if this is the = in this situation:
- ;; enum EnumName<type params> { Ident =
- ;; In this case, this is a c-like enum and despite Ident
- ;; representing a type, what comes after the = is an expression
- ((and
- (> (rustic-paren-level) 0)
- (save-excursion
- (backward-up-list)
- (rustic-rewind-irrelevant)
- (rustic-rewind-type-param-list)
- (and
- (rustic-looking-back-ident)
- (progn
- (rustic-rewind-qualified-ident)
- (rustic-rewind-irrelevant)
- (rustic-looking-back-str "enum")))))
- t)
-
- ;; Otherwise the ambiguous operator is a type if the identifier is a type
- ((rustic-is-in-expression-context 'ident) t)))
-
- ((equal token 'colon)
- (cond
- ;; If we see a ident: not inside any braces/parens, we're at top level.
- ;; There are no allowed expressions after colons there, just types.
- ((<= (rustic-paren-level) 0) nil)
-
- ;; We see ident: inside a list
- ((looking-back "[{,]" (1- (point)))
- (backward-up-list)
-
- ;; If a : appears whose surrounding paren/brackets/braces are
- ;; anything other than curly braces, it can't be a field
- ;; initializer and must be denoting a type.
- (when (looking-at "{")
- (rustic-rewind-irrelevant)
- (rustic-rewind-type-param-list)
- (when (rustic-looking-back-ident)
- ;; We have a context that looks like this:
- ;; ident2 <maybe type params> { [maybe paren-balanced code ending in comma] ident1:
- ;; the point is sitting just after ident2, and we trying to
- ;; figure out if the colon introduces an expression or a type.
- ;; The answer is that ident1 is a field name, and what comes
- ;; after the colon is an expression, if ident2 is an
- ;; expression.
- (rustic-rewind-qualified-ident)
- (rustic-is-in-expression-context 'ident))))
-
- ;; Otherwise, if the ident: appeared with anything other than , or {
- ;; before it, it can't be part of a struct initializer and therefore
- ;; must be denoting a type.
- (t nil)))))
-
- ;; An operator-like character after a string is indeed an operator
- ((and (equal token 'ambiguous-operator)
- (member (rustic-syntax-class-before-point) '(5 7 15))) t)
-
- ;; A colon that has something other than an identifier before it is a
- ;; type ascription
- ((equal token 'colon) nil)
-
- ;; A :: introduces a type (or module, but not an expression in any case)
- ((rustic-looking-back-str "::") nil)
-
- ((rustic-looking-back-str ":")
- (backward-char)
- (rustic-is-in-expression-context 'colon))
-
- ;; A -> introduces a type
- ((rustic-looking-back-str "->") nil)
-
- ;; If we are up against the beginning of a list, or after a comma inside
- ;; of one, back up out of it and check what the list itself is
- ((or
- (equal 4 (rustic-syntax-class-before-point))
- (rustic-looking-back-str ","))
- (condition-case nil
- (progn
- (backward-up-list)
- (rustic-is-in-expression-context 'open-brace))
- (scan-error nil)))
-
- ;; A => introduces an expression
- ((rustic-looking-back-str "=>") t)
-
- ;; A == introduces an expression
- ((rustic-looking-back-str "==") t)
-
- ;; These operators can introduce expressions or types
- ((looking-back "[-+=!?&*]" (1- (point)))
- (backward-char)
- (rustic-is-in-expression-context 'ambiguous-operator))
-
- ;; These operators always introduce expressions. (Note that if this
- ;; regexp finds a < it must not be an angle bracket, or it'd
- ;; have been caught in the syntax-class check above instead of this.)
- ((looking-back rustic-re-pre-expression-operators (1- (point))) t)))))
-
-(defun rustic-is-lt-char-operator ()
- "Return non-nil if the `<' sign just after point is an operator.
-Otherwise, if it is an opening angle bracket, then return nil."
- (let ((case-fold-search nil))
- (save-excursion
- (rustic-rewind-irrelevant)
- ;; We are now just after the character syntactically before the <.
- (cond
-
- ;; If we are looking back at a < that is not an angle bracket (but not
- ;; two of them) then this is the second < in a bit shift operator
- ((and (rustic-looking-back-str "<")
- (not (equal 4 (rustic-syntax-class-before-point)))
- (not (rustic-looking-back-str "<<"))))
-
- ;; On the other hand, if we are after a closing paren/brace/bracket it
- ;; can only be an operator, not an angle bracket. Likewise, if we are
- ;; after a string it's an operator. (The string case could actually be
- ;; valid in rust for character literals.)
- ((member (rustic-syntax-class-before-point) '(5 7 15)) t)
-
- ;; If we are looking back at an operator, we know that we are at
- ;; the beginning of an expression, and thus it has to be an angle
- ;; bracket (starting a "<Type as Trait>::" construct.)
- ((looking-back rustic-re-pre-expression-operators (1- (point))) nil)
-
- ;; If we are looking back at a keyword, it's an angle bracket
- ;; unless that keyword is "self", "true" or "false"
- ((rustic-looking-back-symbols rustic-keywords)
- (rustic-looking-back-symbols '("self" "true" "false")))
-
- ((rustic-looking-back-str "?")
- (rustic-is-in-expression-context 'ambiguous-operator))
-
- ;; If we're looking back at an identifier, this depends on whether
- ;; the identifier is part of an expression or a type
- ((rustic-looking-back-ident)
- (backward-sexp)
- (or
- ;; The special types can't take type param lists, so a < after one is
- ;; always an operator
- (looking-at rustic-re-special-types)
-
- (rustic-is-in-expression-context 'ident)))
-
- ;; Otherwise, assume it's an angle bracket
- ))))
-
-(defun rustic-electric-pair-inhibit-predicate-wrap (char)
- "Prevent \"matching\" with a `>' when CHAR is the less-than operator.
-This wraps the default defined by `electric-pair-inhibit-predicate'."
- (or
- (when (= ?< char)
- (save-excursion
- (backward-char)
- (rustic-is-lt-char-operator)))
- (funcall (default-value 'electric-pair-inhibit-predicate) char)))
-
-(defun rustic-electric-pair-skip-self-wrap (char)
- "Skip CHAR instead of inserting a second closing character.
-This wraps the default defined by `electric-pair-skip-self'."
- (or
- (= ?> char)
- (funcall (default-value 'electric-pair-skip-self) char)))
-
-(defun rustic-ordinary-lt-gt-p ()
- "Test whether the `<' or `>' at point is an ordinary operator of some kind.
-
-This returns t if the `<' or `>' is an ordinary operator (like
-less-than) or part of one (like `->'); and nil if the character
-should be considered a paired angle bracket."
- (cond
- ;; If matching is turned off suppress all of them
- ((not rustic-match-angle-brackets) t)
-
- ;; This is a cheap check so we do it early.
- ;; Don't treat the > in -> or => as an angle bracket
- ((and (= (following-char) ?>) (memq (preceding-char) '(?- ?=))) t)
-
- ;; We don't take < or > in strings or comments to be angle brackets
- ((rustic-in-str-or-cmnt) t)
-
- ;; Inside a macro we don't really know the syntax. Any < or > may be an
- ;; angle bracket or it may not. But we know that the other braces have
- ;; to balance regardless of the < and >, so if we don't treat any < or >
- ;; as angle brackets it won't mess up any paren balancing.
- ((rustic-in-macro) t)
-
- ((looking-at "<")
- (rustic-is-lt-char-operator))
-
- ((looking-at ">")
- (cond
- ;; Don't treat the > in -> or => as an angle bracket
- ((member (char-before (point)) '(?- ?=)) t)
-
- ;; If we are at top level and not in any list, it can't be a closing
- ;; angle bracket
- ((>= 0 (rustic-paren-level)) t)
-
- ;; Otherwise, treat the > as a closing angle bracket if it would
- ;; match an opening one
- ((save-excursion
- (backward-up-list)
- (not (looking-at "<"))))))))
-
-(defun rustic-syntactic-face-function (state)
- "Return face that distinguishes doc and normal comments in given syntax STATE."
- (if (nth 3 state)
- 'font-lock-string-face
- (save-excursion
- (goto-char (nth 8 state))
- (if (looking-at "/\\([*][*!][^*!]\\|/[/!][^/!]\\)")
- 'font-lock-doc-face
- 'font-lock-comment-face))))
-
-(eval-and-compile
- (defconst rustic--char-literal-rx
- (rx (seq
- (group "'")
- (or
- (seq
- "\\"
- (or
- (: "u{" (** 1 6 xdigit) "}")
- (: "x" (= 2 xdigit))
- (any "'nrt0\"\\")))
- (not (any "'\\")))
- (group "'")))
- "A regular expression matching a character literal."))
-
-(defun rustic--syntax-propertize-raw-string (str-start end)
- "A helper for rustic-syntax-propertize.
-
-This will apply the appropriate string syntax to the character
-from the STR-START up to the end of the raw string, or to END,
-whichever comes first."
- (when (save-excursion
- (goto-char str-start)
- (looking-at "r\\(#*\\)\\(\"\\)"))
- ;; In a raw string, so try to find the end.
- (let ((hashes (match-string 1)))
- ;; Match \ characters at the end of the string to suppress
- ;; their normal character-quote syntax.
- (when (re-search-forward (concat "\\(\\\\*\\)\\(\"" hashes "\\)") end t)
- (put-text-property (match-beginning 1) (match-end 1)
- 'syntax-table (string-to-syntax "_"))
- (put-text-property (1- (match-end 2)) (match-end 2)
- 'syntax-table (string-to-syntax "|"))
- (goto-char (match-end 0))))))
-
-(defun rustic-syntax-propertize (start end)
- "A `syntax-propertize-function' to apply properties from START to END."
- (let ((rustic-macro-scopes (rustic-macro-scope start end)))
- (goto-char start)
- (let ((str-start (rustic-in-str-or-cmnt)))
- (when str-start
- (rustic--syntax-propertize-raw-string str-start end)))
- (funcall
- (syntax-propertize-rules
- ;; Character literals.
- (rustic--char-literal-rx (1 "\"") (2 "\""))
- ;; Raw strings.
- ("\\(r\\)#*\""
- (0 (ignore
- (goto-char (match-end 0))
- (unless (save-excursion (nth 8 (syntax-ppss (match-beginning 0))))
- (put-text-property (match-beginning 1) (match-end 1)
- 'syntax-table (string-to-syntax "|"))
- (rustic--syntax-propertize-raw-string (match-beginning 0) end)))))
- ("[<>]"
- (0 (ignore
- (when (save-match-data
- (save-excursion
- (goto-char (match-beginning 0))
- (rustic-ordinary-lt-gt-p)))
- (put-text-property (match-beginning 0) (match-end 0)
- 'syntax-table (string-to-syntax "."))
- (goto-char (match-end 0)))))))
- (point) end)))
-
-(defun rustic-fill-prefix-for-comment-start (line-start)
- "Determine what to use for `fill-prefix' based on the text at LINE-START."
- (let ((result
- ;; Replace /* with same number of spaces
- (replace-regexp-in-string
- "\\(?:/\\*+?\\)[!*]?"
- (lambda (s)
- ;; We want the * to line up with the first * of the
- ;; comment start
- (let ((offset (if (eq t
- (compare-strings "/*" nil nil
- s
- (- (length s) 2)
- (length s)))
- 1 2)))
- (concat (make-string (- (length s) offset)
- ?\x20) "*")))
- line-start)))
- ;; Make sure we've got at least one space at the end
- (if (not (= (aref result (- (length result) 1)) ?\x20))
- (setq result (concat result " ")))
- result))
-
-(defun rustic-in-comment-paragraph (body)
- ;; We might move the point to fill the next comment, but we don't want it
- ;; seeming to jump around on the user
- (save-excursion
- ;; If we're outside of a comment, with only whitespace and then a comment
- ;; in front, jump to the comment and prepare to fill it.
- (when (not (nth 4 (syntax-ppss)))
- (beginning-of-line)
- (when (looking-at (concat "[[:space:]\n]*" comment-start-skip))
- (goto-char (match-end 0))))
-
- ;; We need this when we're moving the point around and then checking syntax
- ;; while doing paragraph fills, because the cache it uses isn't always
- ;; invalidated during this.
- (syntax-ppss-flush-cache 1)
- ;; If we're at the beginning of a comment paragraph with nothing but
- ;; whitespace til the next line, jump to the next line so that we use the
- ;; existing prefix to figure out what the new prefix should be, rather than
- ;; inferring it from the comment start.
- (let ((next-bol (line-beginning-position 2)))
- (while (save-excursion
- (end-of-line)
- (syntax-ppss-flush-cache 1)
- (and (nth 4 (syntax-ppss))
- (save-excursion
- (beginning-of-line)
- (looking-at paragraph-start))
- (looking-at "[[:space:]]*$")
- (nth 4 (syntax-ppss next-bol))))
- (goto-char next-bol)))
-
- (syntax-ppss-flush-cache 1)
- ;; If we're on the last line of a multiline-style comment that started
- ;; above, back up one line so we don't mistake the * of the */ that ends
- ;; the comment for a prefix.
- (when (save-excursion
- (and (nth 4 (syntax-ppss (line-beginning-position 1)))
- (looking-at "[[:space:]]*\\*/")))
- (goto-char (line-end-position 0)))
- (funcall body)))
-
-(defun rustic-with-comment-fill-prefix (body)
- (let*
- ((line-string (buffer-substring-no-properties
- (line-beginning-position) (line-end-position)))
- (line-comment-start
- (when (nth 4 (syntax-ppss))
- (cond
- ;; If we're inside the comment and see a * prefix, use it
- ((string-match "^\\([[:space:]]*\\*+[[:space:]]*\\)"
- line-string)
- (match-string 1 line-string))
- ;; If we're at the start of a comment, figure out what prefix
- ;; to use for the subsequent lines after it
- ((string-match (concat "[[:space:]]*" comment-start-skip) line-string)
- (rustic-fill-prefix-for-comment-start
- (match-string 0 line-string))))))
- (fill-prefix
- (or line-comment-start
- fill-prefix)))
- (funcall body)))
-
-(defun rustic-find-fill-prefix ()
- (rustic-in-comment-paragraph
- (lambda ()
- (rustic-with-comment-fill-prefix
- (lambda ()
- fill-prefix)))))
-
-(defun rustic-fill-paragraph (&rest args)
- "Special wrapping for `fill-paragraph'.
-This handles multi-line comments with a * prefix on each line."
- (rustic-in-comment-paragraph
- (lambda ()
- (rustic-with-comment-fill-prefix
- (lambda ()
- (let
- ((fill-paragraph-function
- (if (not (eq fill-paragraph-function 'rustic-fill-paragraph))
- fill-paragraph-function))
- (fill-paragraph-handle-comment t))
- (apply 'fill-paragraph args)
- t))))))
-
-(defun rustic-do-auto-fill (&rest args)
- "Special wrapping for `do-auto-fill'.
-This handles multi-line comments with a * prefix on each line."
- (rustic-with-comment-fill-prefix
- (lambda ()
- (apply 'do-auto-fill args)
- t)))
-
-(defun rustic-fill-forward-paragraph (arg)
- ;; This is to work around some funny behavior when a paragraph separator is
- ;; at the very top of the file and there is a fill prefix.
- (let ((fill-prefix nil)) (forward-paragraph arg)))
-
-(defun rustic-comment-indent-new-line (&optional arg)
- (rustic-with-comment-fill-prefix
- (lambda () (comment-indent-new-line arg))))
-
-;;; _
-
-(defun rustic-reload ()
- "Reload rustic package."
- (interactive)
- (unload-feature 'rustic)
- (require 'rustic)
- (rustic-mode))
-
-(provide 'rustic)
-
-(require 'rustic-interaction)
-
-(defvar rustic-load-optional-libraries t
- "Whether loading `rustic' also loads optional libraries.
-This variable might soon be remove again.")
-
-(when rustic-load-optional-libraries
- (require 'rustic-compile)
- (require 'rustic-popup)
- (require 'rustic-cargo)
- (require 'rustic-babel)
- (require 'rustic-racer)
- (require 'rustic-rustfmt)
- (require 'rustic-rustfix)
- (require 'rustic-playpen)
- (require 'rustic-lsp)
- (with-eval-after-load 'flycheck
- (require 'rustic-flycheck)))
-
-;;; rustic.el ends here
diff --git a/emacs.d/elpa/s-20180406.808/s-autoloads.el b/emacs.d/elpa/s-20180406.808/s-autoloads.el
deleted file mode 100644
index a232497..0000000
--- a/emacs.d/elpa/s-20180406.808/s-autoloads.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; s-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "s" "s.el" (0 0 0 0))
-;;; Generated autoloads from s.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "s" '("s-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; s-autoloads.el ends here
diff --git a/emacs.d/elpa/s-20180406.808/s-pkg.el b/emacs.d/elpa/s-20180406.808/s-pkg.el
deleted file mode 100644
index 42a7b77..0000000
--- a/emacs.d/elpa/s-20180406.808/s-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; -*- no-byte-compile: t -*-
-(define-package "s" "20180406.808" "The long lost Emacs string manipulation library." 'nil :commit "43ba8b563bee3426cead0e6d4ddc09398e1a349d" :keywords '("strings") :authors '(("Magnar Sveen" . "magnars@gmail.com")) :maintainer '("Magnar Sveen" . "magnars@gmail.com"))
diff --git a/emacs.d/elpa/s-20180406.808/s.el b/emacs.d/elpa/s-20180406.808/s.el
deleted file mode 100644
index 7970ffd..0000000
--- a/emacs.d/elpa/s-20180406.808/s.el
+++ /dev/null
@@ -1,748 +0,0 @@
-;;; s.el --- The long lost Emacs string manipulation library.
-
-;; Copyright (C) 2012-2015 Magnar Sveen
-
-;; Author: Magnar Sveen <magnars@gmail.com>
-;; Version: 1.12.0
-;; Package-Version: 20180406.808
-;; Package-Commit: 43ba8b563bee3426cead0e6d4ddc09398e1a349d
-;; Keywords: strings
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; The long lost Emacs string manipulation library.
-;;
-;; See documentation on https://github.com/magnars/s.el#functions
-
-;;; Code:
-
-;; Silence byte-compiler
-(defvar ucs-normalize-combining-chars) ; Defined in `ucs-normalize'
-(autoload 'slot-value "eieio")
-
-(defun s-trim-left (s)
- "Remove whitespace at the beginning of S."
- (declare (pure t) (side-effect-free t))
- (save-match-data
- (if (string-match "\\`[ \t\n\r]+" s)
- (replace-match "" t t s)
- s)))
-
-(defun s-trim-right (s)
- "Remove whitespace at the end of S."
- (save-match-data
- (declare (pure t) (side-effect-free t))
- (if (string-match "[ \t\n\r]+\\'" s)
- (replace-match "" t t s)
- s)))
-
-(defun s-trim (s)
- "Remove whitespace at the beginning and end of S."
- (declare (pure t) (side-effect-free t))
- (s-trim-left (s-trim-right s)))
-
-(defun s-collapse-whitespace (s)
- "Convert all adjacent whitespace characters to a single space."
- (declare (pure t) (side-effect-free t))
- (replace-regexp-in-string "[ \t\n\r]+" " " s))
-
-(defun s-split (separator s &optional omit-nulls)
- "Split S into substrings bounded by matches for regexp SEPARATOR.
-If OMIT-NULLS is non-nil, zero-length substrings are omitted.
-
-This is a simple wrapper around the built-in `split-string'."
- (declare (side-effect-free t))
- (save-match-data
- (split-string s separator omit-nulls)))
-
-(defun s-split-up-to (separator s n &optional omit-nulls)
- "Split S up to N times into substrings bounded by matches for regexp SEPARATOR.
-
-If OMIT-NULLS is non-nil, zero-length substrings are omitted.
-
-See also `s-split'."
- (declare (side-effect-free t))
- (save-match-data
- (let ((op 0)
- (r nil))
- (with-temp-buffer
- (insert s)
- (setq op (goto-char (point-min)))
- (while (and (re-search-forward separator nil t)
- (< 0 n))
- (let ((sub (buffer-substring op (match-beginning 0))))
- (unless (and omit-nulls
- (equal sub ""))
- (push sub r)))
- (setq op (goto-char (match-end 0)))
- (setq n (1- n)))
- (let ((sub (buffer-substring op (point-max))))
- (unless (and omit-nulls
- (equal sub ""))
- (push sub r))))
- (nreverse r))))
-
-(defun s-lines (s)
- "Splits S into a list of strings on newline characters."
- (declare (pure t) (side-effect-free t))
- (s-split "\\(\r\n\\|[\n\r]\\)" s))
-
-(defun s-join (separator strings)
- "Join all the strings in STRINGS with SEPARATOR in between."
- (declare (pure t) (side-effect-free t))
- (mapconcat 'identity strings separator))
-
-(defun s-concat (&rest strings)
- "Join all the string arguments into one string."
- (declare (pure t) (side-effect-free t))
- (apply 'concat strings))
-
-(defun s-prepend (prefix s)
- "Concatenate PREFIX and S."
- (declare (pure t) (side-effect-free t))
- (concat prefix s))
-
-(defun s-append (suffix s)
- "Concatenate S and SUFFIX."
- (declare (pure t) (side-effect-free t))
- (concat s suffix))
-
-(defun s-repeat (num s)
- "Make a string of S repeated NUM times."
- (declare (pure t) (side-effect-free t))
- (let (ss)
- (while (> num 0)
- (setq ss (cons s ss))
- (setq num (1- num)))
- (apply 'concat ss)))
-
-(defun s-chop-suffix (suffix s)
- "Remove SUFFIX if it is at end of S."
- (declare (pure t) (side-effect-free t))
- (let ((pos (- (length suffix))))
- (if (and (>= (length s) (length suffix))
- (string= suffix (substring s pos)))
- (substring s 0 pos)
- s)))
-
-(defun s-chop-suffixes (suffixes s)
- "Remove SUFFIXES one by one in order, if they are at the end of S."
- (declare (pure t) (side-effect-free t))
- (while suffixes
- (setq s (s-chop-suffix (car suffixes) s))
- (setq suffixes (cdr suffixes)))
- s)
-
-(defun s-chop-prefix (prefix s)
- "Remove PREFIX if it is at the start of S."
- (declare (pure t) (side-effect-free t))
- (let ((pos (length prefix)))
- (if (and (>= (length s) (length prefix))
- (string= prefix (substring s 0 pos)))
- (substring s pos)
- s)))
-
-(defun s-chop-prefixes (prefixes s)
- "Remove PREFIXES one by one in order, if they are at the start of S."
- (declare (pure t) (side-effect-free t))
- (while prefixes
- (setq s (s-chop-prefix (car prefixes) s))
- (setq prefixes (cdr prefixes)))
- s)
-
-(defun s-shared-start (s1 s2)
- "Returns the longest prefix S1 and S2 have in common."
- (declare (pure t) (side-effect-free t))
- (let ((search-length (min (length s1) (length s2)))
- (i 0))
- (while (and (< i search-length)
- (= (aref s1 i) (aref s2 i)))
- (setq i (1+ i)))
- (substring s1 0 i)))
-
-(defun s-shared-end (s1 s2)
- "Returns the longest suffix S1 and S2 have in common."
- (declare (pure t) (side-effect-free t))
- (let* ((l1 (length s1))
- (l2 (length s2))
- (search-length (min l1 l2))
- (i 0))
- (while (and (< i search-length)
- (= (aref s1 (- l1 i 1)) (aref s2 (- l2 i 1))))
- (setq i (1+ i)))
- ;; If I is 0, then it means that there's no common suffix between
- ;; S1 and S2.
- ;;
- ;; However, since (substring s (- 0)) will return the whole
- ;; string, `s-shared-end' should simply return the empty string
- ;; when I is 0.
- (if (zerop i)
- ""
- (substring s1 (- i)))))
-
-(defun s-chomp (s)
- "Remove one trailing `\\n`, `\\r` or `\\r\\n` from S."
- (declare (pure t) (side-effect-free t))
- (s-chop-suffixes '("\n" "\r") s))
-
-(defun s-truncate (len s &optional ellipsis)
- "If S is longer than LEN, cut it down and add ELLIPSIS to the end.
-
-The resulting string, including ellipsis, will be LEN characters
-long.
-
-When not specified, ELLIPSIS defaults to ‘...’."
- (declare (pure t) (side-effect-free t))
- (unless ellipsis
- (setq ellipsis "..."))
- (if (> (length s) len)
- (format "%s%s" (substring s 0 (- len (length ellipsis))) ellipsis)
- s))
-
-(defun s-word-wrap (len s)
- "If S is longer than LEN, wrap the words with newlines."
- (declare (side-effect-free t))
- (save-match-data
- (with-temp-buffer
- (insert s)
- (let ((fill-column len))
- (fill-region (point-min) (point-max)))
- (buffer-substring (point-min) (point-max)))))
-
-(defun s-center (len s)
- "If S is shorter than LEN, pad it with spaces so it is centered."
- (declare (pure t) (side-effect-free t))
- (let ((extra (max 0 (- len (length s)))))
- (concat
- (make-string (ceiling extra 2) ? )
- s
- (make-string (floor extra 2) ? ))))
-
-(defun s-pad-left (len padding s)
- "If S is shorter than LEN, pad it with PADDING on the left."
- (declare (pure t) (side-effect-free t))
- (let ((extra (max 0 (- len (length s)))))
- (concat (make-string extra (string-to-char padding))
- s)))
-
-(defun s-pad-right (len padding s)
- "If S is shorter than LEN, pad it with PADDING on the right."
- (declare (pure t) (side-effect-free t))
- (let ((extra (max 0 (- len (length s)))))
- (concat s
- (make-string extra (string-to-char padding)))))
-
-(defun s-left (len s)
- "Returns up to the LEN first chars of S."
- (declare (pure t) (side-effect-free t))
- (if (> (length s) len)
- (substring s 0 len)
- s))
-
-(defun s-right (len s)
- "Returns up to the LEN last chars of S."
- (declare (pure t) (side-effect-free t))
- (let ((l (length s)))
- (if (> l len)
- (substring s (- l len) l)
- s)))
-
-(defun s-ends-with? (suffix s &optional ignore-case)
- "Does S end with SUFFIX?
-
-If IGNORE-CASE is non-nil, the comparison is done without paying
-attention to case differences.
-
-Alias: `s-suffix?'"
- (declare (pure t) (side-effect-free t))
- (let ((start-pos (- (length s) (length suffix))))
- (and (>= start-pos 0)
- (eq t (compare-strings suffix nil nil
- s start-pos nil ignore-case)))))
-
-(defun s-starts-with? (prefix s &optional ignore-case)
- "Does S start with PREFIX?
-
-If IGNORE-CASE is non-nil, the comparison is done without paying
-attention to case differences.
-
-Alias: `s-prefix?'. This is a simple wrapper around the built-in
-`string-prefix-p'."
- (declare (pure t) (side-effect-free t))
- (string-prefix-p prefix s ignore-case))
-
-(defun s--truthy? (val)
- (declare (pure t) (side-effect-free t))
- (not (null val)))
-
-(defun s-contains? (needle s &optional ignore-case)
- "Does S contain NEEDLE?
-
-If IGNORE-CASE is non-nil, the comparison is done without paying
-attention to case differences."
- (declare (pure t) (side-effect-free t))
- (let ((case-fold-search ignore-case))
- (s--truthy? (string-match-p (regexp-quote needle) s))))
-
-(defun s-equals? (s1 s2)
- "Is S1 equal to S2?
-
-This is a simple wrapper around the built-in `string-equal'."
- (declare (pure t) (side-effect-free t))
- (string-equal s1 s2))
-
-(defun s-less? (s1 s2)
- "Is S1 less than S2?
-
-This is a simple wrapper around the built-in `string-lessp'."
- (declare (pure t) (side-effect-free t))
- (string-lessp s1 s2))
-
-(defun s-matches? (regexp s &optional start)
- "Does REGEXP match S?
-If START is non-nil the search starts at that index.
-
-This is a simple wrapper around the built-in `string-match-p'."
- (declare (side-effect-free t))
- (s--truthy? (string-match-p regexp s start)))
-
-(defun s-blank? (s)
- "Is S nil or the empty string?"
- (declare (pure t) (side-effect-free t))
- (or (null s) (string= "" s)))
-
-(defun s-blank-str? (s)
- "Is S nil or the empty string or string only contains whitespace?"
- (declare (pure t) (side-effect-free t))
- (or (s-blank? s) (s-blank? (s-trim s))))
-
-(defun s-present? (s)
- "Is S anything but nil or the empty string?"
- (declare (pure t) (side-effect-free t))
- (not (s-blank? s)))
-
-(defun s-presence (s)
- "Return S if it's `s-present?', otherwise return nil."
- (declare (pure t) (side-effect-free t))
- (and (s-present? s) s))
-
-(defun s-lowercase? (s)
- "Are all the letters in S in lower case?"
- (declare (side-effect-free t))
- (let ((case-fold-search nil))
- (not (string-match-p "[[:upper:]]" s))))
-
-(defun s-uppercase? (s)
- "Are all the letters in S in upper case?"
- (declare (side-effect-free t))
- (let ((case-fold-search nil))
- (not (string-match-p "[[:lower:]]" s))))
-
-(defun s-mixedcase? (s)
- "Are there both lower case and upper case letters in S?"
- (let ((case-fold-search nil))
- (s--truthy?
- (and (string-match-p "[[:lower:]]" s)
- (string-match-p "[[:upper:]]" s)))))
-
-(defun s-capitalized? (s)
- "In S, is the first letter upper case, and all other letters lower case?"
- (declare (side-effect-free t))
- (let ((case-fold-search nil))
- (s--truthy?
- (string-match-p "^[[:upper:]][^[:upper:]]*$" s))))
-
-(defun s-numeric? (s)
- "Is S a number?"
- (declare (pure t) (side-effect-free t))
- (s--truthy?
- (string-match-p "^[0-9]+$" s)))
-
-(defun s-replace (old new s)
- "Replaces OLD with NEW in S."
- (declare (pure t) (side-effect-free t))
- (replace-regexp-in-string (regexp-quote old) new s t t))
-
-(defalias 's-replace-regexp 'replace-regexp-in-string)
-
-(defun s--aget (alist key)
- (declare (pure t) (side-effect-free t))
- (cdr (assoc-string key alist)))
-
-(defun s-replace-all (replacements s)
- "REPLACEMENTS is a list of cons-cells. Each `car` is replaced with `cdr` in S."
- (declare (pure t) (side-effect-free t))
- (replace-regexp-in-string (regexp-opt (mapcar 'car replacements))
- (lambda (it) (s--aget replacements it))
- s t t))
-
-(defun s-downcase (s)
- "Convert S to lower case.
-
-This is a simple wrapper around the built-in `downcase'."
- (declare (side-effect-free t))
- (downcase s))
-
-(defun s-upcase (s)
- "Convert S to upper case.
-
-This is a simple wrapper around the built-in `upcase'."
- (declare (side-effect-free t))
- (upcase s))
-
-(defun s-capitalize (s)
- "Convert the first word's first character to upper case and the rest to lower case in S."
- (declare (side-effect-free t))
- (concat (upcase (substring s 0 1)) (downcase (substring s 1))))
-
-(defun s-titleize (s)
- "Convert each word's first character to upper case and the rest to lower case in S.
-
-This is a simple wrapper around the built-in `capitalize'."
- (declare (side-effect-free t))
- (capitalize s))
-
-(defmacro s-with (s form &rest more)
- "Threads S through the forms. Inserts S as the last item
-in the first form, making a list of it if it is not a list
-already. If there are more forms, inserts the first form as the
-last item in second form, etc."
- (declare (debug (form &rest [&or (function &rest form) fboundp])))
- (if (null more)
- (if (listp form)
- `(,(car form) ,@(cdr form) ,s)
- (list form s))
- `(s-with (s-with ,s ,form) ,@more)))
-
-(put 's-with 'lisp-indent-function 1)
-
-(defun s-index-of (needle s &optional ignore-case)
- "Returns first index of NEEDLE in S, or nil.
-
-If IGNORE-CASE is non-nil, the comparison is done without paying
-attention to case differences."
- (declare (pure t) (side-effect-free t))
- (let ((case-fold-search ignore-case))
- (string-match-p (regexp-quote needle) s)))
-
-(defun s-reverse (s)
- "Return the reverse of S."
- (declare (pure t) (side-effect-free t))
- (save-match-data
- (if (multibyte-string-p s)
- (let ((input (string-to-list s))
- output)
- (require 'ucs-normalize)
- (while input
- ;; Handle entire grapheme cluster as a single unit
- (let ((grapheme (list (pop input))))
- (while (memql (car input) ucs-normalize-combining-chars)
- (push (pop input) grapheme))
- (setq output (nconc (nreverse grapheme) output))))
- (concat output))
- (concat (nreverse (string-to-list s))))))
-
-(defun s-match-strings-all (regex string)
- "Return a list of matches for REGEX in STRING.
-
-Each element itself is a list of matches, as per
-`match-string'. Multiple matches at the same position will be
-ignored after the first."
- (declare (side-effect-free t))
- (save-match-data
- (let ((all-strings ())
- (i 0))
- (while (and (< i (length string))
- (string-match regex string i))
- (setq i (1+ (match-beginning 0)))
- (let (strings
- (num-matches (/ (length (match-data)) 2))
- (match 0))
- (while (/= match num-matches)
- (push (match-string match string) strings)
- (setq match (1+ match)))
- (push (nreverse strings) all-strings)))
- (nreverse all-strings))))
-
-(defun s-matched-positions-all (regexp string &optional subexp-depth)
- "Return a list of matched positions for REGEXP in STRING.
-SUBEXP-DEPTH is 0 by default."
- (declare (side-effect-free t))
- (if (null subexp-depth)
- (setq subexp-depth 0))
- (save-match-data
- (let ((pos 0) result)
- (while (and (string-match regexp string pos)
- (< pos (length string)))
- (let ((m (match-end subexp-depth)))
- (push (cons (match-beginning subexp-depth) (match-end subexp-depth)) result)
- (setq pos (match-end 0))))
- (nreverse result))))
-
-(defun s-match (regexp s &optional start)
- "When the given expression matches the string, this function returns a list
-of the whole matching string and a string for each matched subexpressions.
-If it did not match the returned value is an empty list (nil).
-
-When START is non-nil the search will start at that index."
- (declare (side-effect-free t))
- (save-match-data
- (if (string-match regexp s start)
- (let ((match-data-list (match-data))
- result)
- (while match-data-list
- (let* ((beg (car match-data-list))
- (end (cadr match-data-list))
- (subs (if (and beg end) (substring s beg end) nil)))
- (setq result (cons subs result))
- (setq match-data-list
- (cddr match-data-list))))
- (nreverse result)))))
-
-(defun s-slice-at (regexp s)
- "Slices S up at every index matching REGEXP."
- (declare (side-effect-free t))
- (if (= 0 (length s)) (list "")
- (save-match-data
- (let (i)
- (setq i (string-match regexp s 1))
- (if i
- (cons (substring s 0 i)
- (s-slice-at regexp (substring s i)))
- (list s))))))
-
-(defun s-split-words (s)
- "Split S into list of words."
- (declare (side-effect-free t))
- (s-split
- "[^[:word:]0-9]+"
- (let ((case-fold-search nil))
- (replace-regexp-in-string
- "\\([[:lower:]]\\)\\([[:upper:]]\\)" "\\1 \\2"
- (replace-regexp-in-string "\\([[:upper:]]\\)\\([[:upper:]][0-9[:lower:]]\\)" "\\1 \\2" s)))
- t))
-
-(defun s--mapcar-head (fn-head fn-rest list)
- "Like MAPCAR, but applies a different function to the first element."
- (if list
- (cons (funcall fn-head (car list)) (mapcar fn-rest (cdr list)))))
-
-(defun s-lower-camel-case (s)
- "Convert S to lowerCamelCase."
- (declare (side-effect-free t))
- (s-join "" (s--mapcar-head 'downcase 'capitalize (s-split-words s))))
-
-(defun s-upper-camel-case (s)
- "Convert S to UpperCamelCase."
- (declare (side-effect-free t))
- (s-join "" (mapcar 'capitalize (s-split-words s))))
-
-(defun s-snake-case (s)
- "Convert S to snake_case."
- (declare (side-effect-free t))
- (s-join "_" (mapcar 'downcase (s-split-words s))))
-
-(defun s-dashed-words (s)
- "Convert S to dashed-words."
- (declare (side-effect-free t))
- (s-join "-" (mapcar 'downcase (s-split-words s))))
-
-(defun s-capitalized-words (s)
- "Convert S to Capitalized words."
- (declare (side-effect-free t))
- (let ((words (s-split-words s)))
- (s-join " " (cons (capitalize (car words)) (mapcar 'downcase (cdr words))))))
-
-(defun s-titleized-words (s)
- "Convert S to Titleized Words."
- (declare (side-effect-free t))
- (s-join " " (mapcar 's-titleize (s-split-words s))))
-
-(defun s-word-initials (s)
- "Convert S to its initials."
- (declare (side-effect-free t))
- (s-join "" (mapcar (lambda (ss) (substring ss 0 1))
- (s-split-words s))))
-
-;; Errors for s-format
-(progn
- (put 's-format-resolve
- 'error-conditions
- '(error s-format s-format-resolve))
- (put 's-format-resolve
- 'error-message
- "Cannot resolve a template to values"))
-
-(defun s-format (template replacer &optional extra)
- "Format TEMPLATE with the function REPLACER.
-
-REPLACER takes an argument of the format variable and optionally
-an extra argument which is the EXTRA value from the call to
-`s-format'.
-
-Several standard `s-format' helper functions are recognized and
-adapted for this:
-
- (s-format \"${name}\" 'gethash hash-table)
- (s-format \"${name}\" 'aget alist)
- (s-format \"$0\" 'elt sequence)
-
-The REPLACER function may be used to do any other kind of
-transformation."
- (let ((saved-match-data (match-data)))
- (unwind-protect
- (replace-regexp-in-string
- "\\$\\({\\([^}]+\\)}\\|[0-9]+\\)"
- (lambda (md)
- (let ((var
- (let ((m (match-string 2 md)))
- (if m m
- (string-to-number (match-string 1 md)))))
- (replacer-match-data (match-data)))
- (unwind-protect
- (let ((v
- (cond
- ((eq replacer 'gethash)
- (funcall replacer var extra))
- ((eq replacer 'aget)
- (funcall 's--aget extra var))
- ((eq replacer 'elt)
- (funcall replacer extra var))
- ((eq replacer 'oref)
- (funcall #'slot-value extra (intern var)))
- (t
- (set-match-data saved-match-data)
- (if extra
- (funcall replacer var extra)
- (funcall replacer var))))))
- (if v (format "%s" v) (signal 's-format-resolve md)))
- (set-match-data replacer-match-data)))) template
- ;; Need literal to make sure it works
- t t)
- (set-match-data saved-match-data))))
-
-(defvar s-lex-value-as-lisp nil
- "If `t' interpolate lisp values as lisp.
-
-`s-lex-format' inserts values with (format \"%S\").")
-
-(defun s-lex-fmt|expand (fmt)
- "Expand FMT into lisp."
- (declare (side-effect-free t))
- (list 's-format fmt (quote 'aget)
- (append '(list)
- (mapcar
- (lambda (matches)
- (list
- 'cons
- (cadr matches)
- `(format
- (if s-lex-value-as-lisp "%S" "%s")
- ,(intern (cadr matches)))))
- (s-match-strings-all "${\\([^}]+\\)}" fmt)))))
-
-(defmacro s-lex-format (format-str)
- "`s-format` with the current environment.
-
-FORMAT-STR may use the `s-format' variable reference to refer to
-any variable:
-
- (let ((x 1))
- (s-lex-format \"x is: ${x}\"))
-
-The values of the variables are interpolated with \"%s\" unless
-the variable `s-lex-value-as-lisp' is `t' and then they are
-interpolated with \"%S\"."
- (declare (debug (form)))
- (s-lex-fmt|expand format-str))
-
-(defun s-count-matches (regexp s &optional start end)
- "Count occurrences of `regexp' in `s'.
-
-`start', inclusive, and `end', exclusive, delimit the part of `s' to
-match. `start' and `end' are both indexed starting at 1; the initial
-character in `s' is index 1.
-
-This function starts looking for the next match from the end of the
-previous match. Hence, it ignores matches that overlap a previously
-found match. To count overlapping matches, use
-`s-count-matches-all'."
- (declare (side-effect-free t))
- (save-match-data
- (with-temp-buffer
- (insert s)
- (goto-char (point-min))
- (count-matches regexp (or start 1) (or end (point-max))))))
-
-(defun s-count-matches-all (regexp s &optional start end)
- "Count occurrences of `regexp' in `s'.
-
-`start', inclusive, and `end', exclusive, delimit the part of `s' to
-match. `start' and `end' are both indexed starting at 1; the initial
-character in `s' is index 1.
-
-This function starts looking for the next match from the second
-character of the previous match. Hence, it counts matches that
-overlap a previously found match. To ignore matches that overlap a
-previously found match, use `s-count-matches'."
- (declare (side-effect-free t))
- (let* ((anchored-regexp (format "^%s" regexp))
- (match-count 0)
- (i 0)
- (narrowed-s (substring s
- (when start (1- start))
- (when end (1- end)))))
- (save-match-data
- (while (< i (length narrowed-s))
- (when (s-matches? anchored-regexp (substring narrowed-s i))
- (setq match-count (1+ match-count)))
- (setq i (1+ i))))
- match-count))
-
-(defun s-wrap (s prefix &optional suffix)
- "Wrap string S with PREFIX and optionally SUFFIX.
-
-Return string S with PREFIX prepended. If SUFFIX is present, it
-is appended, otherwise PREFIX is used as both prefix and
-suffix."
- (declare (pure t) (side-effect-free t))
- (concat prefix s (or suffix prefix)))
-
-
-;;; Aliases
-
-(defalias 's-blank-p 's-blank?)
-(defalias 's-blank-str-p 's-blank-str?)
-(defalias 's-capitalized-p 's-capitalized?)
-(defalias 's-contains-p 's-contains?)
-(defalias 's-ends-with-p 's-ends-with?)
-(defalias 's-equals-p 's-equals?)
-(defalias 's-less-p 's-less?)
-(defalias 's-lowercase-p 's-lowercase?)
-(defalias 's-matches-p 's-matches?)
-(defalias 's-mixedcase-p 's-mixedcase?)
-(defalias 's-numeric-p 's-numeric?)
-(defalias 's-prefix-p 's-starts-with?)
-(defalias 's-prefix? 's-starts-with?)
-(defalias 's-present-p 's-present?)
-(defalias 's-starts-with-p 's-starts-with?)
-(defalias 's-suffix-p 's-ends-with?)
-(defalias 's-suffix? 's-ends-with?)
-(defalias 's-uppercase-p 's-uppercase?)
-
-
-(provide 's)
-;;; s.el ends here
diff --git a/emacs.d/elpa/shfmt-20210803.222/shfmt-autoloads.el b/emacs.d/elpa/shfmt-20210803.222/shfmt-autoloads.el
deleted file mode 100644
index ff56d19..0000000
--- a/emacs.d/elpa/shfmt-20210803.222/shfmt-autoloads.el
+++ /dev/null
@@ -1,25 +0,0 @@
-;;; shfmt-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "shfmt" "shfmt.el" (0 0 0 0))
-;;; Generated autoloads from shfmt.el
- (autoload 'shfmt-buffer "shfmt" nil t)
- (autoload 'shfmt-region "shfmt" nil t)
- (autoload 'shfmt-on-save-mode "shfmt" nil t)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "shfmt" '("shfmt-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; shfmt-autoloads.el ends here
diff --git a/emacs.d/elpa/shfmt-20210803.222/shfmt-pkg.el b/emacs.d/elpa/shfmt-20210803.222/shfmt-pkg.el
deleted file mode 100644
index 8d44f1c..0000000
--- a/emacs.d/elpa/shfmt-20210803.222/shfmt-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; Generated package description from shfmt-20210803.222/shfmt.el -*- no-byte-compile: t -*-
-(define-package "shfmt" "20210803.222" "Reformat shell scripts using shfmt" '((emacs "24") (reformatter "0.3")) :commit "8496b0df2209cf6792c5197b924dd55807f0cffd" :authors '(("Steve Purcell" . "steve@sanityinc.com")) :maintainer '("Steve Purcell" . "steve@sanityinc.com") :keywords '("languages") :url "https://github.com/purcell/emacs-shfmt")
diff --git a/emacs.d/elpa/shfmt-20210803.222/shfmt.el b/emacs.d/elpa/shfmt-20210803.222/shfmt.el
deleted file mode 100644
index 6e05243..0000000
--- a/emacs.d/elpa/shfmt-20210803.222/shfmt.el
+++ /dev/null
@@ -1,81 +0,0 @@
-;;; shfmt.el --- Reformat shell scripts using shfmt -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2020 Steve Purcell
-
-;; Author: Steve Purcell <steve@sanityinc.com>
-;; Keywords: languages
-;; Package-Version: 20210803.222
-;; Package-Commit: 8496b0df2209cf6792c5197b924dd55807f0cffd
-;; URL: https://github.com/purcell/emacs-shfmt
-;; Package-Requires: ((emacs "24") (reformatter "0.3"))
-;; Version: 0
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; Provides commands and a minor mode for easily reformatting shell scripts
-;; using the external "shfmt" program.
-
-;; Call `shfmt-buffer' or `shfmt-region' as convenient.
-
-;; Enable `shfmt-on-save-mode' in shell script buffers like this:
-
-;; (add-hook 'sh-mode-hook 'shfmt-on-save-mode)
-
-;; or locally to your project with a form in your .dir-locals.el like
-;; this:
-
-;; ((sh-mode
-;; (mode . shfmt-on-save)))
-
-;; You might like to bind `shfmt-region' or `shfmt-buffer' to a key,
-;; e.g. with:
-
-;; (define-key 'sh-mode-map (kbd "C-c C-f") 'shfmt)
-
-;;; Code:
-
-
-;; Minor mode and customisation
-
-(require 'reformatter)
-
-(defgroup shfmt nil
- "Reformat shell scripts using shfmt."
- :group 'languages)
-
-(defcustom shfmt-command "shfmt"
- "Command used for reformatting."
- :type 'string)
-
-(defcustom shfmt-arguments ()
- "Arguments passed to shfmt."
- :type '(list string))
-
-
-;; Commands for reformatting
-
-;;;###autoload (autoload 'shfmt-buffer "shfmt" nil t)
-;;;###autoload (autoload 'shfmt-region "shfmt" nil t)
-;;;###autoload (autoload 'shfmt-on-save-mode "shfmt" nil t)
-(reformatter-define shfmt
- :program shfmt-command
- :args shfmt-arguments
- :lighter " ShFmt"
- :group 'shfmt)
-
-
-(provide 'shfmt)
-;;; shfmt.el ends here
diff --git a/emacs.d/elpa/spinner-1.7.4.signed b/emacs.d/elpa/spinner-1.7.4.signed
deleted file mode 100644
index 0771088..0000000
--- a/emacs.d/elpa/spinner-1.7.4.signed
+++ /dev/null
@@ -1 +0,0 @@
-Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2021-07-02T12:10:02+0300 using RSA \ No newline at end of file
diff --git a/emacs.d/elpa/spinner-1.7.4/README.org b/emacs.d/elpa/spinner-1.7.4/README.org
deleted file mode 100644
index 06c7b32..0000000
--- a/emacs.d/elpa/spinner-1.7.4/README.org
+++ /dev/null
@@ -1,76 +0,0 @@
-#+TITLE: spinner.el
-
-Add spinners and progress-bars to the mode-line for ongoing operations.
-
-[[file:some-spinners.gif]]
-
-[[file:all-spinners.gif]]
-
-* Usage
-
-First of all, don’t forget to add ~(spinner "VERSION")~ to your package’s dependencies.
-
-** Major-modes
-1. Just call ~(spinner-start)~ and a spinner will be added to the mode-line.
-2. Call ~(spinner-stop)~ on the same buffer when you want to remove it.
-
-The default spinner is a line drawing that rotates. You can pass an
-argument to ~spinner-start~ to specify which spinner you want. All
-possibilities are listed in the ~spinner-types~ variable, but here are
-a few examples for you to try:
-
-- ~(spinner-start 'vertical-breathing 10)~
-- ~(spinner-start 'minibox)~
-- ~(spinner-start 'moon)~
-- ~(spinner-start 'triangle)~
-
-You can also define your own as a vector of strings (see the examples
-in ~spinner-types~).
-
-** Minor-modes
-Minor-modes can create a spinner with ~spinner-create~ and then add it
-to their mode-line lighter. They can then start the spinner by setting
-a variable and calling ~spinner-start-timer~. Finally, they can stop
-the spinner (and the timer) by just setting the same variable to nil.
-
-Here’s an example for a minor-mode named ~foo~. Assuming that
-~foo--lighter~ is used as the mode-line lighter, the following code
-will add an *inactive* global spinner to the mode-line.
-#+begin_src emacs-lisp
-(defvar foo--spinner (spinner-create 'rotating-line))
-(defconst foo--lighter
- '(" foo" (:eval (spinner-print foo--spinner))))
-#+end_src
-
-1. To activate the spinner, just call ~(spinner-start foo--spinner)~.
- It will show up on the mode-line and start animating.
-2. To get rid of it, call ~(spinner-stop foo--spinner)~. It will then
- disappear again.
-
-Some minor-modes will need spinners to be buffer-local. To achieve
-that, just make the ~foo--spinner~ variable buffer-local and use the
-third argument of the ~spinner-create~ function. The snippet below is an example.
-
-#+begin_src emacs-lisp
-(defvar-local foo--spinner nil)
-(defconst foo--lighter
- '(" foo" (:eval (spinner-print foo--spinner))))
-(defun foo--start-spinner ()
- "Create and start a spinner on this buffer."
- (unless foo--spinner
- (setq foo--spinner (spinner-create 'moon t)))
- (spinner-start foo--spinner))
-#+end_src
-
-1. To activate the spinner, just call ~(foo--start-spinner)~.
-2. To get rid of it, call ~(spinner-stop foo--spinner)~.
-
-This will use the ~moon~ spinner, but you can use any of the names
-defined in the ~spinner-types~ variable or even define your own.
-
-* Extra options
-
-Both ~spinner-start~ and ~spinner-create~ take extra options to configure the spinner, these are:
-
-- ~FPS~: The number of frames to display per second. Defaults to ~spinner-frames-per-second~.
-- ~DELAY~: After starting a spinner, it still won’t be displayed for this many seconds.
diff --git a/emacs.d/elpa/spinner-1.7.4/all-spinners.gif b/emacs.d/elpa/spinner-1.7.4/all-spinners.gif
deleted file mode 100644
index 5540b68..0000000
--- a/emacs.d/elpa/spinner-1.7.4/all-spinners.gif
+++ /dev/null
Binary files differ
diff --git a/emacs.d/elpa/spinner-1.7.4/some-spinners.gif b/emacs.d/elpa/spinner-1.7.4/some-spinners.gif
deleted file mode 100644
index a8028e7..0000000
--- a/emacs.d/elpa/spinner-1.7.4/some-spinners.gif
+++ /dev/null
Binary files differ
diff --git a/emacs.d/elpa/spinner-1.7.4/spinner-autoloads.el b/emacs.d/elpa/spinner-1.7.4/spinner-autoloads.el
deleted file mode 100644
index a6cc99a..0000000
--- a/emacs.d/elpa/spinner-1.7.4/spinner-autoloads.el
+++ /dev/null
@@ -1,77 +0,0 @@
-;;; spinner-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "spinner" "spinner.el" (0 0 0 0))
-;;; Generated autoloads from spinner.el
-
-(autoload 'spinner-create "spinner" "\
-Create a spinner of the given TYPE.
-The possible TYPEs are described in `spinner--type-to-frames'.
-
-FPS, if given, is the number of desired frames per second.
-Default is `spinner-frames-per-second'.
-
-If BUFFER-LOCAL is non-nil, the spinner will be automatically
-deactivated if the buffer is killed. If BUFFER-LOCAL is a
-buffer, use that instead of current buffer.
-
-When started, in order to function properly, the spinner runs a
-timer which periodically calls `force-mode-line-update' in the
-current buffer. If BUFFER-LOCAL was set at creation time, then
-`force-mode-line-update' is called in that buffer instead. When
-the spinner is stopped, the timer is deactivated.
-
-DELAY, if given, is the number of seconds to wait after starting
-the spinner before actually displaying it. It is safe to cancel
-the spinner before this time, in which case it won't display at
-all.
-
-\(fn &optional TYPE BUFFER-LOCAL FPS DELAY)" nil nil)
-
-(autoload 'spinner-start "spinner" "\
-Start a mode-line spinner of given TYPE-OR-OBJECT.
-If TYPE-OR-OBJECT is an object created with `make-spinner',
-simply activate it. This method is designed for minor modes, so
-they can use the spinner as part of their lighter by doing:
- '(:eval (spinner-print THE-SPINNER))
-To stop this spinner, call `spinner-stop' on it.
-
-If TYPE-OR-OBJECT is anything else, a buffer-local spinner is
-created with this type, and it is displayed in the
-`mode-line-process' of the buffer it was created it. Both
-TYPE-OR-OBJECT and FPS are passed to `make-spinner' (which see).
-To stop this spinner, call `spinner-stop' in the same buffer.
-
-Either way, the return value is a function which can be called
-anywhere to stop this spinner. You can also call `spinner-stop'
-in the same buffer where the spinner was created.
-
-FPS, if given, is the number of desired frames per second.
-Default is `spinner-frames-per-second'.
-
-DELAY, if given, is the number of seconds to wait until actually
-displaying the spinner. It is safe to cancel the spinner before
-this time, in which case it won't display at all.
-
-\(fn &optional TYPE-OR-OBJECT FPS DELAY)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "spinner" '("spinner-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("spinner-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; spinner-autoloads.el ends here
diff --git a/emacs.d/elpa/spinner-1.7.4/spinner-pkg.el b/emacs.d/elpa/spinner-1.7.4/spinner-pkg.el
deleted file mode 100644
index 2f4bbb7..0000000
--- a/emacs.d/elpa/spinner-1.7.4/spinner-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;; Generated package description from spinner.el -*- no-byte-compile: t -*-
-(define-package "spinner" "1.7.4" "Add spinners and progress-bars to the mode-line for ongoing operations" '((emacs "24.3")) :keywords '("processes" "mode-line") :authors '(("Artur Malabarba" . "emacs@endlessparentheses.com")) :maintainer '("Artur Malabarba" . "emacs@endlessparentheses.com") :url "https://github.com/Malabarba/spinner.el")
diff --git a/emacs.d/elpa/spinner-1.7.4/spinner.el b/emacs.d/elpa/spinner-1.7.4/spinner.el
deleted file mode 100644
index 6be8f13..0000000
--- a/emacs.d/elpa/spinner-1.7.4/spinner.el
+++ /dev/null
@@ -1,340 +0,0 @@
-;;; spinner.el --- Add spinners and progress-bars to the mode-line for ongoing operations -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-
-;; Author: Artur Malabarba <emacs@endlessparentheses.com>
-;; Version: 1.7.4
-;; Package-Requires: ((emacs "24.3"))
-;; URL: https://github.com/Malabarba/spinner.el
-;; Keywords: processes mode-line
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; 1 Usage
-;; â•â•â•â•â•â•â•
-;;
-;; First of all, don’t forget to add `(spinner "VERSION")' to your
-;; package’s dependencies.
-;;
-;;
-;; 1.1 Major-modes
-;; ───────────────
-;;
-;; 1. Just call `(spinner-start)' and a spinner will be added to the
-;; mode-line.
-;; 2. Call `(spinner-stop)' on the same buffer when you want to remove
-;; it.
-;;
-;; The default spinner is a line drawing that rotates. You can pass an
-;; argument to `spinner-start' to specify which spinner you want. All
-;; possibilities are listed in the `spinner-types' variable, but here are
-;; a few examples for you to try:
-;;
-;; • `(spinner-start 'vertical-breathing 10)'
-;; • `(spinner-start 'minibox)'
-;; • `(spinner-start 'moon)'
-;; • `(spinner-start 'triangle)'
-;;
-;; You can also define your own as a vector of strings (see the examples
-;; in `spinner-types').
-;;
-;;
-;; 1.2 Minor-modes
-;; ───────────────
-;;
-;; Minor-modes can create a spinner with `spinner-create' and then add it
-;; to their mode-line lighter. They can then start the spinner by setting
-;; a variable and calling `spinner-start-timer'. Finally, they can stop
-;; the spinner (and the timer) by just setting the same variable to nil.
-;;
-;; Here’s an example for a minor-mode named `foo'. Assuming that
-;; `foo--lighter' is used as the mode-line lighter, the following code
-;; will add an *inactive* global spinner to the mode-line.
-;; ┌────
-;; │ (defvar foo--spinner (spinner-create 'rotating-line))
-;; │ (defconst foo--lighter
-;; │ '(" foo" (:eval (spinner-print foo--spinner))))
-;; └────
-;;
-;; 1. To activate the spinner, just call `(spinner-start foo--spinner)'.
-;; It will show up on the mode-line and start animating.
-;; 2. To get rid of it, call `(spinner-stop foo--spinner)'. It will then
-;; disappear again.
-;;
-;; Some minor-modes will need spinners to be buffer-local. To achieve
-;; that, just make the `foo--spinner' variable buffer-local and use the
-;; third argument of the `spinner-create' function. The snippet below is an
-;; example.
-;;
-;; ┌────
-;; │ (defvar-local foo--spinner nil)
-;; │ (defconst foo--lighter
-;; │ '(" foo" (:eval (spinner-print foo--spinner))))
-;; │ (defun foo--start-spinner ()
-;; │ "Create and start a spinner on this buffer."
-;; │ (unless foo--spinner
-;; │ (setq foo--spinner (spinner-create 'moon t)))
-;; │ (spinner-start foo--spinner))
-;; └────
-;;
-;; 1. To activate the spinner, just call `(foo--start-spinner)'.
-;; 2. To get rid of it, call `(spinner-stop foo--spinner)'.
-;;
-;; This will use the `moon' spinner, but you can use any of the names
-;; defined in the `spinner-types' variable or even define your own.
-
-
-;;; Code:
-(eval-when-compile
- (require 'cl-lib))
-
-(defconst spinner-types
- '((3-line-clock . ["┤" "┘" "â”´" "â””" "├" "┌" "┬" "â”"])
- (2-line-clock . ["┘" "â””" "┌" "â”"])
- (flipping-line . ["_" "\\" "|" "/"])
- (rotating-line . ["-" "\\" "|" "/"])
- (progress-bar . ["[ ]" "[= ]" "[== ]" "[=== ]" "[====]" "[ ===]" "[ ==]" "[ =]"])
- (progress-bar-filled . ["| |" "|█ |" "|██ |" "|███ |" "|████|" "| ███|" "| ██|" "| █|"])
- (vertical-breathing . ["â–" "â–‚" "â–ƒ" "â–„" "â–…" "â–†" "â–‡" "â–ˆ" "â–‡" "â–†" "â–…" "â–„" "â–ƒ" "â–‚" "â–" " "])
- (vertical-rising . ["â–" "â–„" "â–ˆ" "â–€" "â–”"])
- (horizontal-breathing . [" " "â–" "â–Ž" "â–" "â–Œ" "â–‹" "â–Š" "â–‰" "â–‰" "â–Š" "â–‹" "â–Œ" "â–" "â–Ž" "â–"])
- (horizontal-breathing-long
- . [" " "▎ " "▌ " "▊ " "█ " "█▎" "█▌" "█▊" "██" "█▊" "█▌" "█▎" "█ " "▊ " "▋ " "▌ " "■" "▎ " "■"])
- (horizontal-moving . [" " "â–Œ " "â–ˆ " "â–â–Œ" " â–ˆ" " â–"])
- (minibox . ["â––" "â–˜" "â–" "â–—"])
- (triangle . ["â—¢" "â—£" "â—¤" "â—¥"])
- (box-in-box . ["â—°" "â—³" "â—²" "â—±"])
- (box-in-circle . ["â—´" "â—·" "â—¶" "â—µ"])
- (half-circle . ["â—" "â—“" "â—‘" "â—’"])
- (moon . ["🌑" "🌘" "🌗" "🌖" "🌕" "🌔" "🌓" "🌒"]))
- "Predefined alist of spinners.
-Each car is a symbol identifying the spinner, and each cdr is a
-vector, the spinner itself.")
-
-(defun spinner-make-progress-bar (width &optional char)
- "Return a vector of strings of the given WIDTH.
-The vector is a valid spinner type and is similar to the
-`progress-bar' spinner, except without the surrounding brackets.
-CHAR is the character to use for the moving bar (defaults to =)."
- (let ((whole-string (concat (make-string (1- width) ?\s)
- (make-string 4 (or char ?=))
- (make-string width ?\s))))
- (apply #'vector (mapcar (lambda (n) (substring whole-string n (+ n width)))
- (number-sequence (+ width 3) 0 -1)))))
-
-(defvar spinner-current nil
- "Spinner currently being displayed on the `mode-line-process'.")
-(make-variable-buffer-local 'spinner-current)
-
-(defconst spinner--mode-line-construct
- '(:eval (spinner-print spinner-current))
- "Construct used to display a spinner in `mode-line-process'.")
-(put 'spinner--mode-line-construct 'risky-local-variable t)
-
-(defvar spinner-frames-per-second 10
- "Default speed at which spinners spin, in frames per second.
-Each spinner can override this value.")
-
-
-;;; The spinner object.
-(defun spinner--type-to-frames (type)
- "Return a vector of frames corresponding to TYPE.
-The list of possible built-in spinner types is given by the
-`spinner-types' variable, but you can also use your own (see
-below).
-
-If TYPE is nil, the frames of this spinner are given by the first
-element of `spinner-types'.
-If TYPE is a symbol, it specifies an element of `spinner-types'.
-If TYPE is 'random, use a random element of `spinner-types'.
-If TYPE is a list, it should be a list of symbols, and a random
-one is chosen as the spinner type.
-If TYPE is a vector, it should be a vector of strings and these
-are used as the spinner's frames. This allows you to make your
-own spinner animations."
- (cond
- ((vectorp type) type)
- ((not type) (cdr (car spinner-types)))
- ((eq type 'random)
- (cdr (elt spinner-types
- (random (length spinner-types)))))
- ((listp type)
- (cdr (assq (elt type (random (length type)))
- spinner-types)))
- ((symbolp type) (cdr (assq type spinner-types)))
- (t (error "Unknown spinner type: %s" type))))
-
-(cl-defstruct (spinner
- (:copier nil)
- (:conc-name spinner--)
- (:constructor make-spinner (&optional type buffer-local frames-per-second delay-before-start)))
- (frames (spinner--type-to-frames type))
- (counter 0)
- (fps (or frames-per-second spinner-frames-per-second))
- (timer (timer-create))
- (active-p nil)
- (buffer (when buffer-local
- (if (bufferp buffer-local)
- buffer-local
- (current-buffer))))
- (delay (or delay-before-start 0)))
-
-;;;###autoload
-(defun spinner-create (&optional type buffer-local fps delay)
- "Create a spinner of the given TYPE.
-The possible TYPEs are described in `spinner--type-to-frames'.
-
-FPS, if given, is the number of desired frames per second.
-Default is `spinner-frames-per-second'.
-
-If BUFFER-LOCAL is non-nil, the spinner will be automatically
-deactivated if the buffer is killed. If BUFFER-LOCAL is a
-buffer, use that instead of current buffer.
-
-When started, in order to function properly, the spinner runs a
-timer which periodically calls `force-mode-line-update' in the
-current buffer. If BUFFER-LOCAL was set at creation time, then
-`force-mode-line-update' is called in that buffer instead. When
-the spinner is stopped, the timer is deactivated.
-
-DELAY, if given, is the number of seconds to wait after starting
-the spinner before actually displaying it. It is safe to cancel
-the spinner before this time, in which case it won't display at
-all."
- (make-spinner type buffer-local fps delay))
-
-(defun spinner-print (spinner)
- "Return a string of the current frame of SPINNER.
-If SPINNER is nil, just return nil.
-Designed to be used in the mode-line with:
- (:eval (spinner-print some-spinner))"
- (when (and spinner (spinner--active-p spinner))
- (let ((frame (spinner--counter spinner)))
- (when (>= frame 0)
- (elt (spinner--frames spinner) frame)))))
-
-(defun spinner--timer-function (spinner)
- "Function called to update SPINNER.
-If SPINNER is no longer active, or if its buffer has been killed,
-stop the SPINNER's timer."
- (let ((buffer (spinner--buffer spinner)))
- (if (or (not (spinner--active-p spinner))
- (and buffer (not (buffer-live-p buffer))))
- (spinner-stop spinner)
- ;; Increment
- (cl-callf (lambda (x) (if (< x 0)
- (1+ x)
- (% (1+ x) (length (spinner--frames spinner)))))
- (spinner--counter spinner))
- ;; Update mode-line.
- (if (buffer-live-p buffer)
- (with-current-buffer buffer
- (force-mode-line-update))
- (force-mode-line-update)))))
-
-(defun spinner--start-timer (spinner)
- "Start a SPINNER's timer."
- (let ((old-timer (spinner--timer spinner)))
- (when (timerp old-timer)
- (cancel-timer old-timer))
-
- (setf (spinner--active-p spinner) t)
-
- (unless (ignore-errors (> (spinner--fps spinner) 0))
- (error "A spinner's FPS must be a positive number"))
- (setf (spinner--counter spinner)
- (round (- (* (or (spinner--delay spinner) 0)
- (spinner--fps spinner)))))
- ;; Create timer.
- (let* ((repeat (/ 1.0 (spinner--fps spinner)))
- (time (timer-next-integral-multiple-of-time (current-time) repeat))
- ;; Create the timer as a lex variable so it can cancel itself.
- (timer (spinner--timer spinner)))
- (timer-set-time timer time repeat)
- (timer-set-function timer #'spinner--timer-function (list spinner))
- (timer-activate timer)
- ;; Return a stopping function.
- (lambda () (spinner-stop spinner)))))
-
-
-;;; The main functions
-;;;###autoload
-(defun spinner-start (&optional type-or-object fps delay)
- "Start a mode-line spinner of given TYPE-OR-OBJECT.
-If TYPE-OR-OBJECT is an object created with `make-spinner',
-simply activate it. This method is designed for minor modes, so
-they can use the spinner as part of their lighter by doing:
- '(:eval (spinner-print THE-SPINNER))
-To stop this spinner, call `spinner-stop' on it.
-
-If TYPE-OR-OBJECT is anything else, a buffer-local spinner is
-created with this type, and it is displayed in the
-`mode-line-process' of the buffer it was created it. Both
-TYPE-OR-OBJECT and FPS are passed to `make-spinner' (which see).
-To stop this spinner, call `spinner-stop' in the same buffer.
-
-Either way, the return value is a function which can be called
-anywhere to stop this spinner. You can also call `spinner-stop'
-in the same buffer where the spinner was created.
-
-FPS, if given, is the number of desired frames per second.
-Default is `spinner-frames-per-second'.
-
-DELAY, if given, is the number of seconds to wait until actually
-displaying the spinner. It is safe to cancel the spinner before
-this time, in which case it won't display at all."
- (unless (spinner-p type-or-object)
- ;; Choose type.
- (if (spinner-p spinner-current)
- (setf (spinner--frames spinner-current) (spinner--type-to-frames type-or-object))
- (setq spinner-current (make-spinner type-or-object (current-buffer) fps delay)))
- (setq type-or-object spinner-current)
- ;; Maybe add to mode-line.
- (unless (and (listp mode-line-process)
- (memq 'spinner--mode-line-construct mode-line-process))
- (setq mode-line-process
- (list (or mode-line-process "")
- 'spinner--mode-line-construct))))
-
- ;; Create timer.
- (when fps (setf (spinner--fps type-or-object) fps))
- (when delay (setf (spinner--delay type-or-object) delay))
- (spinner--start-timer type-or-object))
-
-(defun spinner-start-print (spinner)
- "Like `spinner-print', but also start SPINNER if it's not active."
- (unless (spinner--active-p spinner)
- (spinner-start spinner))
- (spinner-print spinner))
-
-(defun spinner-stop (&optional spinner)
- "Stop SPINNER, defaulting to the current buffer's spinner.
-It is always safe to call this function, even if there is no
-active spinner."
- (let ((spinner (or spinner spinner-current)))
- (when (spinner-p spinner)
- (let ((timer (spinner--timer spinner)))
- (when (timerp timer)
- (cancel-timer timer)))
- (setf (spinner--active-p spinner) nil)
- (force-mode-line-update))))
-
-(provide 'spinner)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
-;;; spinner.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/dir b/emacs.d/elpa/use-package-20200322.2110/dir
deleted file mode 100644
index 651b05d..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/dir
+++ /dev/null
@@ -1,18 +0,0 @@
-This is the file .../info/dir, which contains the
-topmost node of the Info hierarchy, called (dir)Top.
-The first time you invoke Info you start off looking at this node.
-
-File: dir, Node: Top This is the top of the INFO tree
-
- This (the Directory node) gives a menu of major topics.
- Typing "q" exits, "H" lists all Info commands, "d" returns here,
- "h" gives a primer for first-timers,
- "mEmacs<Return>" visits the Emacs manual, etc.
-
- In Emacs, you can click mouse button 2 on a menu item or cross reference
- to select it.
-
-* Menu:
-
-Emacs
-* use-package: (use-package). Declarative package configuration for Emacs.
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-autoloads.el b/emacs.d/elpa/use-package-20200322.2110/use-package-autoloads.el
deleted file mode 100644
index 51f39dc..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-autoloads.el
+++ /dev/null
@@ -1,230 +0,0 @@
-;;; use-package-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "use-package-bind-key" "use-package-bind-key.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from use-package-bind-key.el
-
-(autoload 'use-package-autoload-keymap "use-package-bind-key" "\
-Loads PACKAGE and then binds the key sequence used to invoke
-this function to KEYMAP-SYMBOL. It then simulates pressing the
-same key sequence a again, so that the next key pressed is routed
-to the newly loaded keymap.
-
-This function supports use-package's :bind-keymap keyword. It
-works by binding the given key sequence to an invocation of this
-function for a particular keymap. The keymap is expected to be
-defined by the package. In this way, loading the package is
-deferred until the prefix key sequence is pressed.
-
-\(fn KEYMAP-SYMBOL PACKAGE OVERRIDE)" nil nil)
-
-(autoload 'use-package-normalize-binder "use-package-bind-key" "\
-
-
-\(fn NAME KEYWORD ARGS)" nil nil)
-
-(defalias 'use-package-normalize/:bind 'use-package-normalize-binder)
-
-(defalias 'use-package-normalize/:bind* 'use-package-normalize-binder)
-
-(defalias 'use-package-autoloads/:bind 'use-package-autoloads-mode)
-
-(defalias 'use-package-autoloads/:bind* 'use-package-autoloads-mode)
-
-(autoload 'use-package-handler/:bind "use-package-bind-key" "\
-
-
-\(fn NAME KEYWORD ARGS REST STATE &optional BIND-MACRO)" nil nil)
-
-(defalias 'use-package-normalize/:bind-keymap 'use-package-normalize-binder)
-
-(defalias 'use-package-normalize/:bind-keymap* 'use-package-normalize-binder)
-
-(autoload 'use-package-handler/:bind-keymap "use-package-bind-key" "\
-
-
-\(fn NAME KEYWORD ARGS REST STATE &optional OVERRIDE)" nil nil)
-
-(autoload 'use-package-handler/:bind-keymap* "use-package-bind-key" "\
-
-
-\(fn NAME KEYWORD ARG REST STATE)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "use-package-bind-key" '("use-package-handler/:bind*")))
-
-;;;***
-
-;;;### (autoloads nil "use-package-core" "use-package-core.el" (0
-;;;;;; 0 0 0))
-;;; Generated autoloads from use-package-core.el
-
-(autoload 'use-package "use-package-core" "\
-Declare an Emacs package by specifying a group of configuration options.
-
-For full documentation, please see the README file that came with
-this file. Usage:
-
- (use-package package-name
- [:keyword [option]]...)
-
-:init Code to run before PACKAGE-NAME has been loaded.
-:config Code to run after PACKAGE-NAME has been loaded. Note that
- if loading is deferred for any reason, this code does not
- execute until the lazy load has occurred.
-:preface Code to be run before everything except `:disabled'; this
- can be used to define functions for use in `:if', or that
- should be seen by the byte-compiler.
-
-:mode Form to be added to `auto-mode-alist'.
-:magic Form to be added to `magic-mode-alist'.
-:magic-fallback Form to be added to `magic-fallback-mode-alist'.
-:interpreter Form to be added to `interpreter-mode-alist'.
-
-:commands Define autoloads for commands that will be defined by the
- package. This is useful if the package is being lazily
- loaded, and you wish to conditionally call functions in your
- `:init' block that are defined in the package.
-:hook Specify hook(s) to attach this package to.
-
-:bind Bind keys, and define autoloads for the bound commands.
-:bind* Bind keys, and define autoloads for the bound commands,
- *overriding all minor mode bindings*.
-:bind-keymap Bind a key prefix to an auto-loaded keymap defined in the
- package. This is like `:bind', but for keymaps.
-:bind-keymap* Like `:bind-keymap', but overrides all minor mode bindings
-
-:defer Defer loading of a package -- this is implied when using
- `:commands', `:bind', `:bind*', `:mode', `:magic', `:hook',
- `:magic-fallback', or `:interpreter'. This can be an integer,
- to force loading after N seconds of idle time, if the package
- has not already been loaded.
-:after Delay the use-package declaration until after the named modules
- have loaded. Once load, it will be as though the use-package
- declaration (without `:after') had been seen at that moment.
-:demand Prevent the automatic deferred loading introduced by constructs
- such as `:bind' (see `:defer' for the complete list).
-
-:if EXPR Initialize and load only if EXPR evaluates to a non-nil value.
-:disabled The package is ignored completely if this keyword is present.
-:defines Declare certain variables to silence the byte-compiler.
-:functions Declare certain functions to silence the byte-compiler.
-:load-path Add to the `load-path' before attempting to load the package.
-:diminish Support for diminish.el (if installed).
-:delight Support for delight.el (if installed).
-:custom Call `customize-set-variable' with each variable definition.
-:custom-face Call `customize-set-faces' with each face definition.
-:ensure Loads the package using package.el if necessary.
-:pin Pin the package to an archive.
-
-\(fn NAME &rest ARGS)" nil t)
-
-(function-put 'use-package 'lisp-indent-function '1)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "use-package-core" '("use-package-")))
-
-;;;***
-
-;;;### (autoloads nil "use-package-delight" "use-package-delight.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from use-package-delight.el
-
-(autoload 'use-package-normalize/:delight "use-package-delight" "\
-Normalize arguments to delight.
-
-\(fn NAME KEYWORD ARGS)" nil nil)
-
-(autoload 'use-package-handler/:delight "use-package-delight" "\
-
-
-\(fn NAME KEYWORD ARGS REST STATE)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "use-package-delight" '("use-package-normalize-delight")))
-
-;;;***
-
-;;;### (autoloads nil "use-package-diminish" "use-package-diminish.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from use-package-diminish.el
-
-(autoload 'use-package-normalize/:diminish "use-package-diminish" "\
-
-
-\(fn NAME KEYWORD ARGS)" nil nil)
-
-(autoload 'use-package-handler/:diminish "use-package-diminish" "\
-
-
-\(fn NAME KEYWORD ARG REST STATE)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "use-package-diminish" '("use-package-normalize-diminish")))
-
-;;;***
-
-;;;### (autoloads nil "use-package-ensure" "use-package-ensure.el"
-;;;;;; (0 0 0 0))
-;;; Generated autoloads from use-package-ensure.el
-
-(autoload 'use-package-normalize/:ensure "use-package-ensure" "\
-
-
-\(fn NAME KEYWORD ARGS)" nil nil)
-
-(autoload 'use-package-handler/:ensure "use-package-ensure" "\
-
-
-\(fn NAME KEYWORD ENSURE REST STATE)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "use-package-ensure" '("use-package-")))
-
-;;;***
-
-;;;### (autoloads nil "use-package-jump" "use-package-jump.el" (0
-;;;;;; 0 0 0))
-;;; Generated autoloads from use-package-jump.el
-
-(autoload 'use-package-jump-to-package-form "use-package-jump" "\
-Attempt to find and jump to the `use-package' form that loaded
-PACKAGE. This will only find the form if that form actually
-required PACKAGE. If PACKAGE was previously required then this
-function will jump to the file that originally required PACKAGE
-instead.
-
-\(fn PACKAGE)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "use-package-jump" '("use-package-find-require")))
-
-;;;***
-
-;;;### (autoloads nil "use-package-lint" "use-package-lint.el" (0
-;;;;;; 0 0 0))
-;;; Generated autoloads from use-package-lint.el
-
-(autoload 'use-package-lint "use-package-lint" "\
-Check for errors in use-package declarations.
-For example, if the module's `:if' condition is met, but even
-with the specified `:load-path' the module cannot be found.
-
-\(fn)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "use-package-lint" '("use-package-lint-declaration")))
-
-;;;***
-
-;;;### (autoloads nil nil ("use-package-pkg.el" "use-package.el")
-;;;;;; (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; use-package-autoloads.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-bind-key.el b/emacs.d/elpa/use-package-20200322.2110/use-package-bind-key.el
deleted file mode 100644
index e476b06..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-bind-key.el
+++ /dev/null
@@ -1,172 +0,0 @@
-;;; use-package-bind-key.el --- Support for the :bind/:bind-keymap keywords -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 4 Dec 2017
-;; Version: 1.0
-;; Package-Requires: ((emacs "24.3") (use-package "2.4") (bind-key "2.4"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Provides support for the :bind, :bind*, :bind-keymap and :bind-keymap*
-;; keywords. Note that these are currently still baked into
-;; `use-package-keywords' and `use-package-deferring-keywords', although this
-;; is harmless if they are never used.
-
-;;; Code:
-
-(require 'use-package-core)
-(require 'bind-key)
-
-;;;###autoload
-(defun use-package-autoload-keymap (keymap-symbol package override)
- "Loads PACKAGE and then binds the key sequence used to invoke
-this function to KEYMAP-SYMBOL. It then simulates pressing the
-same key sequence a again, so that the next key pressed is routed
-to the newly loaded keymap.
-
-This function supports use-package's :bind-keymap keyword. It
-works by binding the given key sequence to an invocation of this
-function for a particular keymap. The keymap is expected to be
-defined by the package. In this way, loading the package is
-deferred until the prefix key sequence is pressed."
- (if (not (require package nil t))
- (use-package-error (format "Cannot load package.el: %s" package))
- (if (and (boundp keymap-symbol)
- (keymapp (symbol-value keymap-symbol)))
- (let* ((kv (this-command-keys-vector))
- (key (key-description kv))
- (keymap (symbol-value keymap-symbol)))
- (if override
- (bind-key* key keymap)
- (bind-key key keymap))
- (setq unread-command-events
- (mapcar (lambda (ev) (cons t ev))
- (listify-key-sequence kv))))
- (use-package-error
- (format "package.el %s failed to define keymap %s"
- package keymap-symbol)))))
-
-;;;###autoload
-(defun use-package-normalize-binder (name keyword args)
- (let ((arg args)
- args*)
- (while arg
- (let ((x (car arg)))
- (cond
- ;; (KEY . COMMAND)
- ((and (consp x)
- (or (stringp (car x))
- (vectorp (car x)))
- (or (use-package-recognize-function (cdr x) t #'stringp)))
- (setq args* (nconc args* (list x)))
- (setq arg (cdr arg)))
- ;; KEYWORD
- ;; :map KEYMAP
- ;; :prefix-docstring STRING
- ;; :prefix-map SYMBOL
- ;; :prefix STRING
- ;; :filter SEXP
- ;; :menu-name STRING
- ;; :package SYMBOL
- ((or (and (eq x :map) (symbolp (cadr arg)))
- (and (eq x :prefix) (stringp (cadr arg)))
- (and (eq x :prefix-map) (symbolp (cadr arg)))
- (and (eq x :prefix-docstring) (stringp (cadr arg)))
- (eq x :filter)
- (and (eq x :menu-name) (stringp (cadr arg)))
- (and (eq x :package) (symbolp (cadr arg))))
- (setq args* (nconc args* (list x (cadr arg))))
- (setq arg (cddr arg)))
- ((listp x)
- (setq args*
- (nconc args* (use-package-normalize-binder name keyword x)))
- (setq arg (cdr arg)))
- (t
- ;; Error!
- (use-package-error
- (concat (symbol-name name)
- " wants arguments acceptable to the `bind-keys' macro,"
- " or a list of such values"))))))
- args*))
-
-;;;; :bind, :bind*
-
-;;;###autoload
-(defalias 'use-package-normalize/:bind 'use-package-normalize-binder)
-;;;###autoload
-(defalias 'use-package-normalize/:bind* 'use-package-normalize-binder)
-
-;; jww (2017-12-07): This is too simplistic. It will fail to determine
-;; autoloads in this situation:
-;; (use-package foo
-;; :bind (:map foo-map (("C-a" . func))))
-;;;###autoload
-(defalias 'use-package-autoloads/:bind 'use-package-autoloads-mode)
-;;;###autoload
-(defalias 'use-package-autoloads/:bind* 'use-package-autoloads-mode)
-
-;;;###autoload
-(defun use-package-handler/:bind
- (name _keyword args rest state &optional bind-macro)
- (use-package-concat
- (use-package-process-keywords name rest state)
- `(,@(mapcar
- #'(lambda (xs)
- `(,(if bind-macro bind-macro 'bind-keys)
- :package ,name ,@(use-package-normalize-commands xs)))
- (use-package-split-list-at-keys :break args)))))
-
-(defun use-package-handler/:bind* (name keyword arg rest state)
- (use-package-handler/:bind name keyword arg rest state 'bind-keys*))
-
-;;;; :bind-keymap, :bind-keymap*
-
-;;;###autoload
-(defalias 'use-package-normalize/:bind-keymap 'use-package-normalize-binder)
-;;;###autoload
-(defalias 'use-package-normalize/:bind-keymap* 'use-package-normalize-binder)
-
-;;;###autoload
-(defun use-package-handler/:bind-keymap
- (name _keyword args rest state &optional override)
- (use-package-concat
- (use-package-process-keywords name rest state)
- (mapcar
- #'(lambda (binding)
- `(,(if override 'bind-key* 'bind-key)
- ,(car binding)
- #'(lambda ()
- (interactive)
- (use-package-autoload-keymap
- ',(cdr binding) ',(use-package-as-symbol name)
- ,override))))
- args)))
-
-;;;###autoload
-(defun use-package-handler/:bind-keymap* (name keyword arg rest state)
- (use-package-handler/:bind-keymap name keyword arg rest state t))
-
-(provide 'use-package-bind-key)
-
-;;; use-package-bind-key.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-core.el b/emacs.d/elpa/use-package-20200322.2110/use-package-core.el
deleted file mode 100644
index c18877d..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-core.el
+++ /dev/null
@@ -1,1595 +0,0 @@
-;;; use-package-core.el --- A configuration macro for simplifying your .emacs -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 29 Nov 2017
-;; Version: 2.4
-;; Package-Requires: ((emacs "24.3"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; The `use-package' declaration macro allows you to isolate package
-;; configuration in your ".emacs" in a way that is performance-oriented and,
-;; well, just tidy. I created it because I have over 80 packages that I use
-;; in Emacs, and things were getting difficult to manage. Yet with this
-;; utility my total load time is just under 1 second, with no loss of
-;; functionality!
-;;
-;; Please see README.md from the same repository for documentation.
-
-;;; Code:
-
-(require 'bytecomp)
-(require 'cl-lib)
-(require 'tabulated-list)
-
-(if (and (eq emacs-major-version 24) (eq emacs-minor-version 3))
- (defsubst hash-table-keys (hash-table)
- "Return a list of keys in HASH-TABLE."
- (cl-loop for k being the hash-keys of hash-table collect k))
- (eval-when-compile (require 'subr-x)))
-
-(eval-when-compile
- (require 'regexp-opt))
-
-(defgroup use-package nil
- "A use-package declaration for simplifying your `.emacs'."
- :group 'startup)
-
-(defconst use-package-version "2.4"
- "This version of use-package.")
-
-(defcustom use-package-keywords
- '(:disabled
- :load-path
- :requires
- :defines
- :functions
- :preface
- :if :when :unless
- :no-require
- :catch
- :after
- :custom
- :custom-face
- :bind
- :bind*
- :bind-keymap
- :bind-keymap*
- :interpreter
- :mode
- :magic
- :magic-fallback
- :hook
- ;; Any other keyword that also declares commands to be autoloaded (such as
- ;; :bind) must appear before this keyword.
- :commands
- :init
- :defer
- :demand
- :load
- ;; This must occur almost last; the only forms which should appear after
- ;; are those that must happen directly after the config forms.
- :config)
- "The set of valid keywords, in the order they are processed in.
-The order of this list is *very important*, so it is only
-advisable to insert new keywords, never to delete or reorder
-them. Further, attention should be paid to the NEWS.md if the
-default order ever changes, as they may have subtle effects on
-the semantics of use-package declarations and may necessitate
-changing where you had inserted a new keyword earlier.
-
-Note that `:disabled' is special in this list, as it causes
-nothing at all to happen, even if the rest of the use-package
-declaration is incorrect."
- :type '(repeat symbol)
- :group 'use-package)
-
-(defcustom use-package-deferring-keywords
- '(:bind-keymap
- :bind-keymap*
- :commands)
- "Unless `:demand' is used, keywords in this list imply deferred loading.
-The reason keywords like `:hook' are not in this list is that
-they only imply deferred loading if they reference actual
-function symbols that can be autoloaded from the module; whereas
-the default keywords provided here always defer loading unless
-otherwise requested."
- :type '(repeat symbol)
- :group 'use-package)
-
-(defcustom use-package-ignore-unknown-keywords nil
- "If non-nil, issue warning instead of error when unknown
-keyword is encountered. The unknown keyword and its associated
-arguments will be ignored in the `use-package' expansion."
- :type 'boolean
- :group 'use-package)
-
-(defcustom use-package-verbose nil
- "Whether to report about loading and configuration details.
-If you customize this, then you should require the `use-package'
-feature in files that use `use-package', even if these files only
-contain compiled expansions of the macros. If you don't do so,
-then the expanded macros do their job silently."
- :type '(choice (const :tag "Quiet, without catching errors" errors)
- (const :tag "Quiet" nil)
- (const :tag "Verbose" t)
- (const :tag "Debug" debug))
- :group 'use-package)
-
-(defcustom use-package-check-before-init nil
- "If non-nil, check that package exists before executing its `:init' block.
-This check is performed by calling `locate-library'."
- :type 'boolean
- :group 'use-package)
-
-(defcustom use-package-always-defer nil
- "If non-nil, assume `:defer t' unless `:demand' is used.
-See also `use-package-defaults', which uses this value."
- :type 'boolean
- :group 'use-package)
-
-(defcustom use-package-always-demand nil
- "If non-nil, assume `:demand t' unless `:defer' is used.
-See also `use-package-defaults', which uses this value."
- :type 'boolean
- :group 'use-package)
-
-(defcustom use-package-defaults
- '(;; this '(t) has special meaning; see `use-package-handler/:config'
- (:config '(t) t)
- (:init nil t)
- (:catch t (lambda (name args)
- (not use-package-expand-minimally)))
- (:defer use-package-always-defer
- (lambda (name args)
- (and use-package-always-defer
- (not (plist-member args :defer))
- (not (plist-member args :demand)))))
- (:demand use-package-always-demand
- (lambda (name args)
- (and use-package-always-demand
- (not (plist-member args :defer))
- (not (plist-member args :demand))))))
- "Default values for specified `use-package' keywords.
-Each entry in the alist is a list of three elements:
-The first element is the `use-package' keyword.
-
-The second is a form that can be evaluated to get the default
-value. It can also be a function that will receive the name of
-the use-package declaration and the keyword plist given to
-`use-package', in normalized form. The value it returns should
-also be in normalized form (which is sometimes *not* what one
-would normally write in a `use-package' declaration, so use
-caution).
-
-The third element is a form that can be evaluated to determine
-whether or not to assign a default value; if it evaluates to nil,
-then the default value is not assigned even if the keyword is not
-present in the `use-package' form. This third element may also be
-a function, in which case it receives the name of the package (as
-a symbol) and a list of keywords (in normalized form). It should
-return nil or non-nil depending on whether defaulting should be
-attempted."
- :type `(repeat
- (list (choice :tag "Keyword"
- ,@(mapcar #'(lambda (k) (list 'const k))
- use-package-keywords))
- (choice :tag "Default value" sexp function)
- (choice :tag "Enable if non-nil" sexp function)))
- :group 'use-package)
-
-(defcustom use-package-merge-key-alist
- '((:if . (lambda (new old) `(and ,new ,old)))
- (:after . (lambda (new old) `(:all ,new ,old)))
- (:defer . (lambda (new old) old))
- (:bind . (lambda (new old) (append new (list :break) old))))
- "Alist of keys and the functions used to merge multiple values.
-For example, if the following form is provided:
-
- (use-package foo :if pred1 :if pred2)
-
-Then based on the above defaults, the merged result will be:
-
- (use-package foo :if (and pred1 pred2))
-
-This is done so that, at the stage of invoking handlers, each
-handler is called only once."
- :type `(repeat
- (cons (choice :tag "Keyword"
- ,@(mapcar #'(lambda (k) (list 'const k))
- use-package-keywords)
- (const :tag "Any" t))
- function))
- :group 'use-package)
-
-(defcustom use-package-hook-name-suffix "-hook"
- "Text append to the name of hooks mentioned by :hook.
-Set to nil if you don't want this to happen; it's only a
-convenience."
- :type '(choice string (const :tag "No suffix" nil))
- :group 'use-package)
-
-(defcustom use-package-minimum-reported-time 0.1
- "Minimal load time that will be reported.
-Note that `use-package-verbose' has to be set to a non-nil value
-for anything to be reported at all."
- :type 'number
- :group 'use-package)
-
-(defcustom use-package-inject-hooks nil
- "If non-nil, add hooks to the `:init' and `:config' sections.
-In particular, for a given package `foo', the following hooks
-become available:
-
- `use-package--foo--pre-init-hook'
- `use-package--foo--post-init-hook'
- `use-package--foo--pre-config-hook'
- `use-package--foo--post-config-hook'
-
-This way, you can add to these hooks before evaluation of a
-`use-package` declaration, and exercise some control over what
-happens.
-
-NOTE: These hooks are run even if the user does not specify an
-`:init' or `:config' block, and they will happen at the regular
-time when initialization and configuration would have been
-performed.
-
-NOTE: If the `pre-init' hook return a nil value, that block's
-user-supplied configuration is not evaluated, so be certain to
-return t if you only wish to add behavior to what the user had
-specified."
- :type 'boolean
- :group 'use-package)
-
-(defcustom use-package-expand-minimally nil
- "If non-nil, make the expanded code as minimal as possible.
-This disables:
-
- - Printing to the *Messages* buffer of slowly-evaluating forms
- - Capturing of load errors (normally redisplayed as warnings)
- - Conditional loading of packages (load failures become errors)
-
-The main advantage to this variable is that, if you know your
-configuration works, it will make the byte-compiled file as
-minimal as possible. It can also help with reading macro-expanded
-definitions, to understand the main intent of what's happening."
- :type 'boolean
- :group 'use-package)
-
-(defcustom use-package-form-regexp-eval
- `(concat ,(eval-when-compile
- (concat "^\\s-*("
- (regexp-opt '("use-package" "require") t)
- "\\s-+\\("))
- (or (bound-and-true-p lisp-mode-symbol-regexp)
- "\\(?:\\sw\\|\\s_\\|\\\\.\\)+") "\\)")
- "Sexp providing regexp for finding use-package forms in user files.
-This is used by `use-package-jump-to-package-form' and
-`use-package-enable-imenu-support'."
- :type 'sexp
- :group 'use-package)
-
-(defcustom use-package-enable-imenu-support nil
- "If non-nil, cause imenu to see `use-package' declarations.
-This is done by adjusting `lisp-imenu-generic-expression' to
-include support for finding `use-package' and `require' forms.
-
-Must be set before loading use-package."
- :type 'boolean
- :set
- #'(lambda (_sym value)
- (eval-after-load 'lisp-mode
- (if value
- `(add-to-list 'lisp-imenu-generic-expression
- (list "Packages" ,use-package-form-regexp-eval 2))
- `(setq lisp-imenu-generic-expression
- (remove (list "Packages" ,use-package-form-regexp-eval 2)
- lisp-imenu-generic-expression)))))
- :group 'use-package)
-
-(defconst use-package-font-lock-keywords
- '(("(\\(use-package\\)\\_>[ \t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
- (1 font-lock-keyword-face)
- (2 font-lock-constant-face nil t))))
-
-(font-lock-add-keywords 'emacs-lisp-mode use-package-font-lock-keywords)
-
-(defcustom use-package-compute-statistics nil
- "If non-nil, compute statistics concerned use-package declarations.
-View the statistical report using `use-package-report'. Note that
-if this option is enabled, you must require `use-package' in your
-user init file at loadup time, or you will see errors concerning
-undefined variables."
- :type 'boolean
- :group 'use-package)
-
-(defvar use-package-statistics (make-hash-table))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; Utility functions
-;;
-
-(defsubst use-package-error (msg)
- "Report MSG as an error, so the user knows it came from this package."
- (error "use-package: %s" msg))
-
-(defsubst use-package-concat (&rest elems)
- "Delete all empty lists from ELEMS (nil or (list nil)), and append them."
- (apply #'append (delete nil (delete (list nil) elems))))
-
-(defsubst use-package-non-nil-symbolp (sym)
- (and sym (symbolp sym)))
-
-(defsubst use-package-as-symbol (string-or-symbol)
- "If STRING-OR-SYMBOL is already a symbol, return it. Otherwise
-convert it to a symbol and return that."
- (if (symbolp string-or-symbol) string-or-symbol
- (intern string-or-symbol)))
-
-(defsubst use-package-as-string (string-or-symbol)
- "If STRING-OR-SYMBOL is already a string, return it. Otherwise
-convert it to a string and return that."
- (if (stringp string-or-symbol) string-or-symbol
- (symbol-name string-or-symbol)))
-
-(defsubst use-package-regex-p (re)
- "Return t if RE is some regexp-like thing."
- (or (and (listp re) (eq (car re) 'rx))
- (stringp re)))
-
-(defun use-package-normalize-regex (re)
- "Given some regexp-like thing in RE, resolve to a regular expression."
- (cond
- ((and (listp re) (eq (car re) 'rx)) (eval re))
- ((stringp re) re)
- (t (error "Not recognized as regular expression: %s" re))))
-
-(defsubst use-package-is-pair (x car-pred cdr-pred)
- "Return non-nil if X is a cons satisfying the given predicates.
-CAR-PRED and CDR-PRED are applied to X's `car' and `cdr',
-respectively."
- (and (consp x)
- (funcall car-pred (car x))
- (funcall cdr-pred (cdr x))))
-
-(defun use-package-as-mode (string-or-symbol)
- "If STRING-OR-SYMBOL ends in `-mode' (or its name does), return
-it as a symbol. Otherwise, return it as a symbol with `-mode'
-appended."
- (let ((string (use-package-as-string string-or-symbol)))
- (intern (if (string-match "-mode\\'" string)
- string
- (concat string "-mode")))))
-
-(defsubst use-package-load-name (name &optional noerror)
- "Return a form which will load or require NAME.
-It does the right thing no matter if NAME is a string or symbol.
-Argument NOERROR means to indicate load failures as a warning."
- (if (stringp name)
- `(load ,name ,noerror)
- `(require ',name nil ,noerror)))
-
-(defun use-package-hook-injector (name-string keyword body)
- "Wrap pre/post hook injections around the given BODY for KEYWORD.
-The BODY is a list of forms, so `((foo))' if only `foo' is being called."
- (if (not use-package-inject-hooks)
- body
- (let ((keyword-name (substring (format "%s" keyword) 1)))
- `((when (run-hook-with-args-until-failure
- ',(intern (concat "use-package--" name-string
- "--pre-" keyword-name "-hook")))
- ,@body
- (run-hooks
- ',(intern (concat "use-package--" name-string
- "--post-" keyword-name "-hook"))))))))
-
-(defun use-package-with-elapsed-timer (text body)
- "BODY is a list of forms, so `((foo))' if only `foo' is being called."
- (declare (indent 1))
- (if use-package-expand-minimally
- body
- (let ((nowvar (make-symbol "now")))
- (if (bound-and-true-p use-package-verbose)
- `((let ((,nowvar (current-time)))
- (message "%s..." ,text)
- (prog1
- ,(macroexp-progn body)
- (let ((elapsed
- (float-time (time-subtract (current-time) ,nowvar))))
- (if (> elapsed ,use-package-minimum-reported-time)
- (message "%s...done (%.3fs)" ,text elapsed)
- (message "%s...done" ,text))))))
- body))))
-
-(put 'use-package-with-elapsed-timer 'lisp-indent-function 1)
-
-(defun use-package-require (name &optional no-require body)
- (if use-package-expand-minimally
- (use-package-concat
- (unless no-require
- (list (use-package-load-name name)))
- body)
- (if no-require
- body
- (use-package-with-elapsed-timer
- (format "Loading package %s" name)
- `((if (not ,(use-package-load-name name t))
- (display-warning 'use-package
- (format "Cannot load %s" ',name)
- :error)
- ,@body))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; Property lists
-;;
-
-(defun use-package-plist-delete (plist property)
- "Delete PROPERTY from PLIST.
-This is in contrast to merely setting it to 0."
- (let (p)
- (while plist
- (if (not (eq property (car plist)))
- (setq p (plist-put p (car plist) (nth 1 plist))))
- (setq plist (cddr plist)))
- p))
-
-(defun use-package-plist-delete-first (plist property)
- "Delete PROPERTY from PLIST.
-This is in contrast to merely setting it to 0."
- (let (p)
- (while plist
- (if (eq property (car plist))
- (setq p (nconc p (cddr plist))
- plist nil)
- (setq p (nconc p (list (car plist) (cadr plist)))
- plist (cddr plist))))
- p))
-
-(defsubst use-package-plist-maybe-put (plist property value)
- "Add a VALUE for PROPERTY to PLIST, if it does not already exist."
- (if (plist-member plist property)
- plist
- (plist-put plist property value)))
-
-(defsubst use-package-plist-cons (plist property value)
- "Cons VALUE onto the head of the list at PROPERTY in PLIST."
- (plist-put plist property (cons value (plist-get plist property))))
-
-(defsubst use-package-plist-append (plist property value)
- "Append VALUE onto the front of the list at PROPERTY in PLIST."
- (plist-put plist property (append value (plist-get plist property))))
-
-(defun use-package-split-list (pred xs)
- (let ((ys (list nil)) (zs (list nil)) flip)
- (cl-dolist (x xs)
- (if flip
- (nconc zs (list x))
- (if (funcall pred x)
- (progn
- (setq flip t)
- (nconc zs (list x)))
- (nconc ys (list x)))))
- (cons (cdr ys) (cdr zs))))
-
-(defun use-package-split-list-at-keys (key lst)
- (and lst
- (let ((xs (use-package-split-list (apply-partially #'eq key) lst)))
- (cons (car xs) (use-package-split-list-at-keys key (cddr xs))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; Keywords
-;;
-
-(defun use-package-keyword-index (keyword)
- (cl-loop named outer
- with index = 0
- for k in use-package-keywords do
- (if (eq k keyword)
- (cl-return-from outer index))
- (cl-incf index)))
-
-(defun use-package-normalize-plist (name input &optional plist merge-function)
- "Given a pseudo-plist, normalize it to a regular plist.
-The normalized key/value pairs from input are added to PLIST,
-extending any keys already present."
- (if (null input)
- plist
- (let* ((keyword (car input))
- (xs (use-package-split-list #'keywordp (cdr input)))
- (args (car xs))
- (tail (cdr xs))
- (normalizer
- (intern-soft (concat "use-package-normalize/"
- (symbol-name keyword))))
- (arg (and (functionp normalizer)
- (funcall normalizer name keyword args)))
- (error-string (format "Unrecognized keyword: %s" keyword)))
- (if (memq keyword use-package-keywords)
- (progn
- (setq plist (use-package-normalize-plist
- name tail plist merge-function))
- (plist-put plist keyword
- (if (plist-member plist keyword)
- (funcall merge-function keyword arg
- (plist-get plist keyword))
- arg)))
- (if use-package-ignore-unknown-keywords
- (progn
- (display-warning 'use-package error-string)
- (use-package-normalize-plist
- name tail plist merge-function))
- (use-package-error error-string))))))
-
-(defun use-package-unalias-keywords (_name args)
- (setq args (cl-nsubstitute :if :when args))
- (let (temp)
- (while (setq temp (plist-get args :unless))
- (setq args (use-package-plist-delete-first args :unless)
- args (append args `(:if (not ,temp))))))
- args)
-
-(defun use-package-merge-keys (key new old)
- (let ((merger (assq key use-package-merge-key-alist)))
- (if merger
- (funcall (cdr merger) new old)
- (append new old))))
-
-(defun use-package-sort-keywords (plist)
- (let (plist-grouped)
- (while plist
- (push (cons (car plist) (cadr plist))
- plist-grouped)
- (setq plist (cddr plist)))
- (let (result)
- (cl-dolist
- (x
- (nreverse
- (sort plist-grouped
- #'(lambda (l r) (< (use-package-keyword-index (car l))
- (use-package-keyword-index (car r)))))))
- (setq result (cons (car x) (cons (cdr x) result))))
- result)))
-
-(defun use-package-normalize-keywords (name args)
- (let* ((name-symbol (if (stringp name) (intern name) name))
- (name-string (symbol-name name-symbol)))
-
- ;; The function `elisp--local-variables' inserts this unbound variable into
- ;; macro forms to determine the locally bound variables for
- ;; `elisp-completion-at-point'. It ends up throwing a lot of errors since it
- ;; can occupy the position of a keyword (or look like a second argument to a
- ;; keyword that takes one). Deleting it when it's at the top level should be
- ;; harmless since there should be no locally bound variables to discover
- ;; here anyway.
- (setq args (delq 'elisp--witness--lisp args))
-
- ;; Reduce the set of keywords down to its most fundamental expression.
- (setq args (use-package-unalias-keywords name-symbol args))
-
- ;; Normalize keyword values, coalescing multiple occurrences.
- (setq args (use-package-normalize-plist name-symbol args nil
- #'use-package-merge-keys))
-
- ;; Add default values for keywords not specified, when applicable.
- (cl-dolist (spec use-package-defaults)
- (when (let ((func (nth 2 spec)))
- (if (and func (functionp func))
- (funcall func name args)
- (eval func)))
- (setq args (use-package-plist-maybe-put
- args (nth 0 spec)
- (let ((func (nth 1 spec)))
- (if (and func (functionp func))
- (funcall func name args)
- (eval func)))))))
-
- ;; Determine any autoloads implied by the keywords used.
- (let ((iargs args)
- commands)
- (while iargs
- (when (keywordp (car iargs))
- (let ((autoloads
- (intern-soft (concat "use-package-autoloads/"
- (symbol-name (car iargs))))))
- (when (functionp autoloads)
- (setq commands
- ;; jww (2017-12-07): Right now we just ignored the type of
- ;; the autoload being requested, and assume they are all
- ;; `command'.
- (append (mapcar
- #'car
- (funcall autoloads name-symbol (car iargs)
- (cadr iargs)))
- commands)))))
- (setq iargs (cddr iargs)))
- (when commands
- (setq args
- ;; Like `use-package-plist-append', but removing duplicates.
- (plist-put args :commands
- (delete-dups
- (append commands (plist-get args :commands)))))))
-
- ;; If byte-compiling, pre-load the package so all its symbols are in
- ;; scope. This is done by prepending statements to the :preface.
- (when (bound-and-true-p byte-compile-current-file)
- (setq args
- (use-package-plist-append
- args :preface
- (use-package-concat
- (mapcar #'(lambda (var) `(defvar ,var))
- (plist-get args :defines))
- (mapcar #'(lambda (fn) `(declare-function ,fn ,name-string))
- (plist-get args :functions))
- `((eval-when-compile
- (with-demoted-errors
- ,(format "Cannot load %s: %%S" name-string)
- ,(when (eq use-package-verbose 'debug)
- `(message ,(format "Compiling package %s" name-string)))
- ,(unless (plist-get args :no-require)
- `(unless (featurep ',name-symbol)
- (load ,name-string nil t))))))))))
-
- ;; Certain keywords imply :defer, if :demand was not specified.
- (when (and (not (plist-member args :demand))
- (not (plist-member args :defer))
- (not (or (equal '(t) (plist-get args :load))
- (equal (list (use-package-as-string name))
- (mapcar #'use-package-as-string
- (plist-get args :load)))))
- (cl-some #'identity
- (mapcar (apply-partially #'plist-member args)
- use-package-deferring-keywords)))
- (setq args (append args '(:defer t))))
-
- ;; The :load keyword overrides :no-require
- (when (and (plist-member args :load)
- (plist-member args :no-require))
- (setq args (use-package-plist-delete args :no-require)))
-
- ;; If at this point no :load, :defer or :no-require has been seen, then
- ;; :load the package itself.
- (when (and (not (plist-member args :load))
- (not (plist-member args :defer))
- (not (plist-member args :no-require)))
- (setq args (append args `(:load (,name)))))
-
- ;; Sort the list of keywords based on the order of `use-package-keywords'.
- (use-package-sort-keywords args)))
-
-(defun use-package-process-keywords (name plist &optional state)
- "Process the next keyword in the free-form property list PLIST.
-The values in the PLIST have each been normalized by the function
-use-package-normalize/KEYWORD (minus the colon).
-
-STATE is a property list that the function may modify and/or
-query. This is useful if a package defines multiple keywords and
-wishes them to have some kind of stateful interaction.
-
-Unless the KEYWORD being processed intends to ignore remaining
-keywords, it must call this function recursively, passing in the
-plist with its keyword and argument removed, and passing in the
-next value for the STATE."
- (declare (indent 1))
- (unless (null plist)
- (let* ((keyword (car plist))
- (arg (cadr plist))
- (rest (cddr plist)))
- (unless (keywordp keyword)
- (use-package-error (format "%s is not a keyword" keyword)))
- (let* ((handler (concat "use-package-handler/" (symbol-name keyword)))
- (handler-sym (intern handler)))
- (if (functionp handler-sym)
- (funcall handler-sym name keyword arg rest state)
- (use-package-error
- (format "Keyword handler not defined: %s" handler)))))))
-
-(put 'use-package-process-keywords 'lisp-indent-function 'defun)
-
-(defun use-package-list-insert (elem xs &optional anchor after test)
- "Insert ELEM into the list XS.
-If ANCHOR is also a keyword, place the new KEYWORD before that
-one.
-If AFTER is non-nil, insert KEYWORD either at the end of the
-keywords list, or after the ANCHOR if one has been provided.
-If TEST is non-nil, it is the test used to compare ELEM to list
-elements. The default is `eq'.
-The modified list is returned. The original list is not modified."
- (let (result)
- (dolist (k xs)
- (if (funcall (or test #'eq) k anchor)
- (if after
- (setq result (cons k result)
- result (cons elem result))
- (setq result (cons elem result)
- result (cons k result)))
- (setq result (cons k result))))
- (if anchor
- (nreverse result)
- (if after
- (nreverse (cons elem result))
- (cons elem (nreverse result))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; Argument Processing
-;;
-
-(defun use-package-only-one (label args f)
- "Call F on the first member of ARGS if it has exactly one element."
- (declare (indent 1))
- (cond
- ((and (listp args) (listp (cdr args))
- (= (length args) 1))
- (funcall f label (car args)))
- (t
- (use-package-error
- (concat label " wants exactly one argument")))))
-
-(put 'use-package-only-one 'lisp-indent-function 'defun)
-
-(defun use-package-as-one (label args f &optional allow-empty)
- "Call F on the first element of ARGS if it has one element, or all of ARGS.
-If ALLOW-EMPTY is non-nil, it's OK for ARGS to be an empty list."
- (declare (indent 1))
- (if (if args
- (and (listp args) (listp (cdr args)))
- allow-empty)
- (if (= (length args) 1)
- (funcall f label (car args))
- (funcall f label args))
- (use-package-error
- (concat label " wants a non-empty list"))))
-
-(put 'use-package-as-one 'lisp-indent-function 'defun)
-
-(defun use-package-memoize (f arg)
- "Ensure the macro-expansion of F applied to ARG evaluates ARG
-no more than once."
- (let ((loaded (cl-gentemp "use-package--loaded"))
- (result (cl-gentemp "use-package--result"))
- (next (cl-gentemp "use-package--next")))
- `((defvar ,loaded nil)
- (defvar ,result nil)
- (defvar ,next #'(lambda () (if ,loaded ,result
- (setq ,loaded t ,result ,arg))))
- ,@(funcall f `((funcall ,next))))))
-
-(defsubst use-package-normalize-value (_label arg)
- "Normalize the Lisp value given by ARG.
-The argument LABEL is ignored."
- (cond ((null arg) nil)
- ((eq t arg) t)
- ((use-package-non-nil-symbolp arg)
- `(symbol-value ',arg))
- ((functionp arg)
- `(funcall #',arg))
- (t arg)))
-
-(defun use-package-normalize-symbols (label arg &optional recursed)
- "Normalize a list of symbols."
- (cond
- ((use-package-non-nil-symbolp arg)
- (list arg))
- ((and (not recursed) (listp arg) (listp (cdr arg)))
- (mapcar #'(lambda (x) (car (use-package-normalize-symbols label x t))) arg))
- (t
- (use-package-error
- (concat label " wants a symbol, or list of symbols")))))
-
-(defun use-package-normalize-symlist (_name keyword args)
- (use-package-as-one (symbol-name keyword) args
- #'use-package-normalize-symbols))
-
-(defun use-package-normalize-recursive-symbols (label arg)
- "Normalize a list of symbols."
- (cond
- ((use-package-non-nil-symbolp arg)
- arg)
- ((and (listp arg) (listp (cdr arg)))
- (mapcar #'(lambda (x) (use-package-normalize-recursive-symbols label x))
- arg))
- (t
- (use-package-error
- (concat label " wants a symbol, or nested list of symbols")))))
-
-(defun use-package-normalize-recursive-symlist (_name keyword args)
- (use-package-as-one (symbol-name keyword) args
- #'use-package-normalize-recursive-symbols))
-
-(defun use-package-normalize-paths (label arg &optional recursed)
- "Normalize a list of filesystem paths."
- (cond
- ((and arg (or (use-package-non-nil-symbolp arg) (functionp arg)))
- (let ((value (use-package-normalize-value label arg)))
- (use-package-normalize-paths label (eval value))))
- ((stringp arg)
- (let ((path (if (file-name-absolute-p arg)
- arg
- (expand-file-name arg user-emacs-directory))))
- (list path)))
- ((and (not recursed) (listp arg) (listp (cdr arg)))
- (mapcar #'(lambda (x)
- (car (use-package-normalize-paths label x t))) arg))
- (t
- (use-package-error
- (concat label " wants a directory path, or list of paths")))))
-
-(defun use-package-normalize-predicate (_name keyword args)
- (if (null args)
- t
- (use-package-only-one (symbol-name keyword) args
- #'use-package-normalize-value)))
-
-(defun use-package-normalize-form (label args)
- "Given a list of forms, return it wrapped in `progn'."
- (unless (listp (car args))
- (use-package-error (concat label " wants a sexp or list of sexps")))
- (mapcar #'(lambda (form)
- (if (and (consp form)
- (memq (car form)
- '(use-package bind-key bind-key*
- unbind-key bind-keys bind-keys*)))
- (macroexpand form)
- form)) args))
-
-(defun use-package-normalize-forms (_name keyword args)
- (use-package-normalize-form (symbol-name keyword) args))
-
-(defun use-package-normalize-pairs
- (key-pred val-pred name label arg &optional recursed)
- "Normalize a list of pairs.
-KEY-PRED and VAL-PRED are predicates recognizing valid keys and
-values, respectively.
-If RECURSED is non-nil, recurse into sublists."
- (cond
- ((funcall key-pred arg)
- (list (cons arg (use-package-as-symbol name))))
- ((use-package-is-pair arg key-pred val-pred)
- (list arg))
- ((and (not recursed) (listp arg) (listp (cdr arg)))
- (let (last-item)
- (mapcar
- #'(lambda (x)
- (prog1
- (let ((ret (use-package-normalize-pairs
- key-pred val-pred name label x t)))
- (if (and (listp ret)
- (not (keywordp last-item)))
- (car ret)
- ret))
- (setq last-item x))) arg)))
- (t arg)))
-
-(defun use-package-recognize-function (v &optional binding additional-pred)
- "A predicate that recognizes functional constructions:
- nil
- sym
- 'sym
- (quote sym)
- #'sym
- (function sym)
- (lambda () ...)
- '(lambda () ...)
- (quote (lambda () ...))
- #'(lambda () ...)
- (function (lambda () ...))"
- (or (if binding
- (symbolp v)
- (use-package-non-nil-symbolp v))
- (and (listp v)
- (memq (car v) '(quote function))
- (use-package-non-nil-symbolp (cadr v)))
- (if binding (commandp v) (functionp v))
- (and additional-pred
- (funcall additional-pred v))))
-
-(defun use-package-normalize-function (v)
- "Reduce functional constructions to one of two normal forms:
- sym
- #'(lambda () ...)"
- (cond ((symbolp v) v)
- ((and (listp v)
- (memq (car v) '(quote function))
- (use-package-non-nil-symbolp (cadr v)))
- (cadr v))
- ((and (consp v)
- (eq 'lambda (car v)))
- v)
- ((and (listp v)
- (memq (car v) '(quote function))
- (eq 'lambda (car (cadr v))))
- (cadr v))
- (t v)))
-
-(defun use-package-normalize-commands (args)
- "Map over ARGS of the form ((_ . F) ...), normalizing functional F's."
- (mapcar #'(lambda (x)
- (if (consp x)
- (cons (car x) (use-package-normalize-function (cdr x)))
- x))
- args))
-
-(defun use-package-normalize-mode (name keyword args)
- "Normalize arguments for keywords which add regexp/mode pairs to an alist."
- (use-package-as-one (symbol-name keyword) args
- (apply-partially #'use-package-normalize-pairs
- #'use-package-regex-p
- #'use-package-recognize-function
- name)))
-
-(defun use-package-autoloads-mode (_name _keyword args)
- (mapcar
- #'(lambda (x) (cons (cdr x) 'command))
- (cl-remove-if-not #'(lambda (x)
- (and (consp x)
- (use-package-non-nil-symbolp (cdr x))))
- args)))
-
-(defun use-package-handle-mode (name alist args rest state)
- "Handle keywords which add regexp/mode pairs to an alist."
- (use-package-concat
- (use-package-process-keywords name rest state)
- (mapcar
- #'(lambda (thing)
- `(add-to-list
- ',alist
- ',(cons (use-package-normalize-regex (car thing))
- (cdr thing))))
- (use-package-normalize-commands args))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; Statistics
-;;
-
-(defun use-package-reset-statistics ()
- (interactive)
- (setq use-package-statistics (make-hash-table)))
-
-(defun use-package-statistics-status (package)
- "Return loading configuration status of PACKAGE statistics."
- (cond ((gethash :config package) "Configured")
- ((gethash :init package) "Initialized")
- ((gethash :preface package) "Prefaced")
- ((gethash :use-package package) "Declared")))
-
-(defun use-package-statistics-last-event (package)
- "Return the date when PACKAGE's status last changed.
-The date is returned as a string."
- (format-time-string "%Y-%m-%d %a %H:%M"
- (or (gethash :config package)
- (gethash :init package)
- (gethash :preface package)
- (gethash :use-package package))))
-
-(defun use-package-statistics-time (package)
- "Return the time is took for PACKAGE to load."
- (+ (float-time (gethash :config-secs package '(0 0 0 0)))
- (float-time (gethash :init-secs package '(0 0 0 0)))
- (float-time (gethash :preface-secs package '(0 0 0 0)))
- (float-time (gethash :use-package-secs package '(0 0 0 0)))))
-
-(defun use-package-statistics-convert (package)
- "Return information about PACKAGE.
-
-The information is formatted in a way suitable for
-`use-package-statistics-mode'."
- (let ((statistics (gethash package use-package-statistics)))
- (list
- package
- (vector
- (symbol-name package)
- (use-package-statistics-status statistics)
- (use-package-statistics-last-event statistics)
- (format "%.2f" (use-package-statistics-time statistics))))))
-
-(defun use-package-report ()
- "Show current statistics gathered about use-package declarations.
-In the table that's generated, the status field has the following
-meaning:
- Configured :config has been processed (the package is loaded!)
- Initialized :init has been processed (load status unknown)
- Prefaced :preface has been processed
- Declared the use-package declaration was seen"
- (interactive)
- (with-current-buffer (get-buffer-create "*use-package statistics*")
- (setq tabulated-list-entries
- (mapcar #'use-package-statistics-convert
- (hash-table-keys use-package-statistics)))
- (use-package-statistics-mode)
- (tabulated-list-print)
- (display-buffer (current-buffer))))
-
-(define-derived-mode use-package-statistics-mode tabulated-list-mode
- "use-package statistics"
- "Show current statistics gathered about use-package declarations."
- (setq tabulated-list-format
- ;; The sum of column width is 80 characters:
- #[("Package" 25 t)
- ("Status" 13 t)
- ("Last Event" 23 t)
- ("Time" 10 t)])
- (tabulated-list-init-header))
-
-(defun use-package-statistics-gather (keyword name after)
- (let* ((hash (gethash name use-package-statistics
- (make-hash-table)))
- (before (and after (gethash keyword hash (current-time)))))
- (puthash keyword (current-time) hash)
- (when after
- (puthash (intern (concat (symbol-name keyword) "-secs"))
- (time-subtract (current-time) before) hash))
- (puthash name hash use-package-statistics)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; Handlers
-;;
-
-;;;; :disabled
-
-;; Don't alias this to `ignore', as that will cause the resulting
-;; function to be interactive.
-(defun use-package-normalize/:disabled (_name _keyword _arg)
- "Do nothing, return nil.")
-
-(defun use-package-handler/:disabled (name _keyword _arg rest state)
- (use-package-process-keywords name rest state))
-
-;;;; :if, :when and :unless
-
-(defun use-package-normalize-test (_name keyword args)
- (use-package-only-one (symbol-name keyword) args
- #'use-package-normalize-value))
-
-(defalias 'use-package-normalize/:if 'use-package-normalize-test)
-
-(defun use-package-handler/:if (name _keyword pred rest state)
- (let ((body (use-package-process-keywords name rest state)))
- `((when ,pred ,@body))))
-
-(defalias 'use-package-normalize/:when 'use-package-normalize-test)
-
-(defalias 'use-package-handler/:when 'use-package-handler/:if)
-
-(defalias 'use-package-normalize/:unless 'use-package-normalize-test)
-
-(defun use-package-handler/:unless (name _keyword pred rest state)
- (let ((body (use-package-process-keywords name rest state)))
- `((unless ,pred ,@body))))
-
-;;;; :requires
-
-(defalias 'use-package-normalize/:requires 'use-package-normalize-symlist)
-
-(defun use-package-handler/:requires (name _keyword requires rest state)
- (let ((body (use-package-process-keywords name rest state)))
- (if (null requires)
- body
- `((when ,(if (> (length requires) 1)
- `(not (member nil (mapcar #'featurep ',requires)))
- `(featurep ',(car requires)))
- ,@body)))))
-
-;;;; :load-path
-
-(defun use-package-normalize/:load-path (_name keyword args)
- (use-package-as-one (symbol-name keyword) args
- #'use-package-normalize-paths))
-
-(defun use-package-handler/:load-path (name _keyword arg rest state)
- (let ((body (use-package-process-keywords name rest state)))
- (use-package-concat
- (mapcar #'(lambda (path)
- `(eval-and-compile (add-to-list 'load-path ,path)))
- arg)
- body)))
-
-;;;; :no-require
-
-(defalias 'use-package-normalize/:no-require 'use-package-normalize-predicate)
-
-(defun use-package-handler/:no-require (name _keyword _arg rest state)
- (use-package-process-keywords name rest state))
-
-;;;; :defines
-
-(defalias 'use-package-normalize/:defines 'use-package-normalize-symlist)
-
-(defun use-package-handler/:defines (name _keyword _arg rest state)
- (use-package-process-keywords name rest state))
-
-;;;; :functions
-
-(defalias 'use-package-normalize/:functions 'use-package-normalize-symlist)
-
-(defun use-package-handler/:functions (name _keyword _arg rest state)
- (use-package-process-keywords name rest state))
-
-;;;; :preface
-
-(defalias 'use-package-normalize/:preface 'use-package-normalize-forms)
-
-(defun use-package-handler/:preface (name _keyword arg rest state)
- (let ((body (use-package-process-keywords name rest state)))
- (use-package-concat
- (when use-package-compute-statistics
- `((use-package-statistics-gather :preface ',name nil)))
- (when arg
- `((eval-and-compile ,@arg)))
- body
- (when use-package-compute-statistics
- `((use-package-statistics-gather :preface ',name t))))))
-
-;;;; :catch
-
-(defvar use-package--form)
-(defvar use-package--hush-function #'(lambda (_keyword body) body))
-
-(defsubst use-package-hush (context keyword body)
- `((condition-case-unless-debug err
- ,(macroexp-progn body)
- (error (funcall ,context ,keyword err)))))
-
-(defun use-package-normalize/:catch (_name keyword args)
- (if (null args)
- t
- (use-package-only-one (symbol-name keyword) args
- use-package--hush-function)))
-
-(defun use-package-handler/:catch (name keyword arg rest state)
- (let* ((context (cl-gentemp "use-package--warning")))
- (cond
- ((not arg)
- (use-package-process-keywords name rest state))
- ((eq arg t)
- `((defvar ,context
- #'(lambda (keyword err)
- (let ((msg (format "%s/%s: %s" ',name keyword
- (error-message-string err))))
- ,@(when (eq use-package-verbose 'debug)
- `((with-current-buffer
- (get-buffer-create "*use-package*")
- (goto-char (point-max))
- (insert "-----\n" msg ,use-package--form)
- (emacs-lisp-mode))
- (setq msg
- (concat msg
- " (see the *use-package* buffer)"))))
- (display-warning 'use-package msg :error))))
- ,@(let ((use-package--hush-function
- (apply-partially #'use-package-hush context)))
- (funcall use-package--hush-function keyword
- (use-package-process-keywords name rest state)))))
- ((functionp arg)
- `((defvar ,context ,arg)
- ,@(let ((use-package--hush-function
- (apply-partially #'use-package-hush context)))
- (funcall use-package--hush-function keyword
- (use-package-process-keywords name rest state)))))
- (t
- (use-package-error "The :catch keyword expects 't' or a function")))))
-
-;;;; :interpreter
-
-(defalias 'use-package-normalize/:interpreter 'use-package-normalize-mode)
-(defalias 'use-package-autoloads/:interpreter 'use-package-autoloads-mode)
-
-(defun use-package-handler/:interpreter (name _keyword arg rest state)
- (use-package-handle-mode name 'interpreter-mode-alist arg rest state))
-
-;;;; :mode
-
-(defalias 'use-package-normalize/:mode 'use-package-normalize-mode)
-(defalias 'use-package-autoloads/:mode 'use-package-autoloads-mode)
-
-(defun use-package-handler/:mode (name _keyword arg rest state)
- (use-package-handle-mode name 'auto-mode-alist arg rest state))
-
-;;;; :magic
-
-(defalias 'use-package-normalize/:magic 'use-package-normalize-mode)
-(defalias 'use-package-autoloads/:magic 'use-package-autoloads-mode)
-
-(defun use-package-handler/:magic (name _keyword arg rest state)
- (use-package-handle-mode name 'magic-mode-alist arg rest state))
-
-;;;; :magic-fallback
-
-(defalias 'use-package-normalize/:magic-fallback 'use-package-normalize-mode)
-(defalias 'use-package-autoloads/:magic-fallback 'use-package-autoloads-mode)
-
-(defun use-package-handler/:magic-fallback (name _keyword arg rest state)
- (use-package-handle-mode name 'magic-fallback-mode-alist arg rest state))
-
-;;;; :hook
-
-(defun use-package-normalize/:hook (name keyword args)
- (use-package-as-one (symbol-name keyword) args
- #'(lambda (label arg)
- (unless (or (use-package-non-nil-symbolp arg) (consp arg))
- (use-package-error
- (concat label " a <symbol> or (<symbol or list of symbols> . <symbol or function>)"
- " or list of these")))
- (use-package-normalize-pairs
- #'(lambda (k)
- (or (use-package-non-nil-symbolp k)
- (and k (let ((every t))
- (while (and every k)
- (if (and (consp k)
- (use-package-non-nil-symbolp (car k)))
- (setq k (cdr k))
- (setq every nil)))
- every))))
- #'use-package-recognize-function
- name label arg))))
-
-(defalias 'use-package-autoloads/:hook 'use-package-autoloads-mode)
-
-(defun use-package-handler/:hook (name _keyword args rest state)
- "Generate use-package custom keyword code."
- (use-package-concat
- (use-package-process-keywords name rest state)
- (cl-mapcan
- #'(lambda (def)
- (let ((syms (car def))
- (fun (cdr def)))
- (when fun
- (mapcar
- #'(lambda (sym)
- `(add-hook
- (quote ,(intern
- (concat (symbol-name sym)
- use-package-hook-name-suffix)))
- (function ,fun)))
- (if (use-package-non-nil-symbolp syms) (list syms) syms)))))
- (use-package-normalize-commands args))))
-
-;;;; :commands
-
-(defalias 'use-package-normalize/:commands 'use-package-normalize-symlist)
-
-(defun use-package-handler/:commands (name _keyword arg rest state)
- (use-package-concat
- ;; Since we deferring load, establish any necessary autoloads, and also
- ;; keep the byte-compiler happy.
- (let ((name-string (use-package-as-string name)))
- (cl-mapcan
- #'(lambda (command)
- (when (symbolp command)
- (append
- (unless (plist-get state :demand)
- `((unless (fboundp ',command)
- (autoload #',command ,name-string nil t))))
- (when (bound-and-true-p byte-compile-current-file)
- `((eval-when-compile
- (declare-function ,command ,name-string)))))))
- (delete-dups arg)))
- (use-package-process-keywords name rest state)))
-
-;;;; :defer
-
-(defalias 'use-package-normalize/:defer 'use-package-normalize-predicate)
-
-(defun use-package-handler/:defer (name _keyword arg rest state)
- (let ((body (use-package-process-keywords name rest state)))
- (use-package-concat
- ;; Load the package after a set amount of idle time, if the argument to
- ;; `:defer' was a number.
- (when (numberp arg)
- `((run-with-idle-timer ,arg nil #'require
- ',(use-package-as-symbol name) nil t)))
- (if (or (not arg) (null body))
- body
- `((eval-after-load ',name ',(macroexp-progn body)))))))
-
-;;;; :after
-
-(defun use-package-normalize/:after (name keyword args)
- (setq args (use-package-normalize-recursive-symlist name keyword args))
- (if (consp args)
- args
- (list args)))
-
-(defun use-package-after-count-uses (features*)
- "Count the number of time the body would appear in the result."
- (cond ((use-package-non-nil-symbolp features*)
- 1)
- ((and (consp features*)
- (memq (car features*) '(:or :any)))
- (let ((num 0))
- (cl-dolist (next (cdr features*))
- (setq num (+ num (use-package-after-count-uses next))))
- num))
- ((and (consp features*)
- (memq (car features*) '(:and :all)))
- (apply #'max (mapcar #'use-package-after-count-uses
- (cdr features*))))
- ((listp features*)
- (use-package-after-count-uses (cons :all features*)))))
-
-(defun use-package-require-after-load (features* body)
- "Generate `eval-after-load' statements to represents FEATURES*.
-FEATURES* is a list containing keywords `:and' and `:all', where
-no keyword implies `:all'."
- (cond
- ((use-package-non-nil-symbolp features*)
- `((eval-after-load ',features* ',(macroexp-progn body))))
- ((and (consp features*)
- (memq (car features*) '(:or :any)))
- (cl-mapcan #'(lambda (x) (use-package-require-after-load x body))
- (cdr features*)))
- ((and (consp features*)
- (memq (car features*) '(:and :all)))
- (cl-dolist (next (cdr features*))
- (setq body (use-package-require-after-load next body)))
- body)
- ((listp features*)
- (use-package-require-after-load (cons :all features*) body))))
-
-(defun use-package-handler/:after (name _keyword arg rest state)
- (let ((body (use-package-process-keywords name rest state))
- (uses (use-package-after-count-uses arg)))
- (if (or (null uses) (null body))
- body
- (if (<= uses 1)
- (use-package-require-after-load arg body)
- (use-package-memoize
- (apply-partially #'use-package-require-after-load arg)
- (macroexp-progn body))))))
-
-;;;; :demand
-
-(defalias 'use-package-normalize/:demand 'use-package-normalize-predicate)
-
-(defun use-package-handler/:demand (name _keyword _arg rest state)
- (use-package-process-keywords name rest state))
-
-;;;; :custom
-
-(defun use-package-normalize/:custom (_name keyword args)
- "Normalize use-package custom keyword."
- (use-package-as-one (symbol-name keyword) args
- #'(lambda (label arg)
- (unless (listp arg)
- (use-package-error
- (concat label " a (<symbol> <value> [comment])"
- " or list of these")))
- (if (use-package-non-nil-symbolp (car arg))
- (list arg)
- arg))))
-
-(defun use-package-handler/:custom (name _keyword args rest state)
- "Generate use-package custom keyword code."
- (use-package-concat
- (mapcar
- #'(lambda (def)
- (let ((variable (nth 0 def))
- (value (nth 1 def))
- (comment (nth 2 def)))
- (unless (and comment (stringp comment))
- (setq comment (format "Customized with use-package %s" name)))
- `(customize-set-variable (quote ,variable) ,value ,comment)))
- args)
- (use-package-process-keywords name rest state)))
-
-;;;; :custom-face
-
-(defun use-package-normalize/:custom-face (name-symbol _keyword arg)
- "Normalize use-package custom-face keyword."
- (let ((error-msg
- (format "%s wants a (<symbol> <face-spec>) or list of these"
- name-symbol)))
- (unless (listp arg)
- (use-package-error error-msg))
- (cl-dolist (def arg arg)
- (unless (listp def)
- (use-package-error error-msg))
- (let ((face (nth 0 def))
- (spec (nth 1 def)))
- (when (or (not face)
- (not spec)
- (> (length def) 2))
- (use-package-error error-msg))))))
-
-(defun use-package-handler/:custom-face (name _keyword args rest state)
- "Generate use-package custom-face keyword code."
- (use-package-concat
- (mapcar #'(lambda (def) `(custom-set-faces (backquote ,def))) args)
- (use-package-process-keywords name rest state)))
-
-;;;; :init
-
-(defalias 'use-package-normalize/:init 'use-package-normalize-forms)
-
-(defun use-package-handler/:init (name _keyword arg rest state)
- (use-package-concat
- (when use-package-compute-statistics
- `((use-package-statistics-gather :init ',name nil)))
- (let ((init-body
- (use-package-hook-injector (use-package-as-string name)
- :init arg)))
- (when init-body
- (funcall use-package--hush-function :init
- (if use-package-check-before-init
- `((when (locate-library ,(use-package-as-string name))
- ,@init-body))
- init-body))))
- (use-package-process-keywords name rest state)
- (when use-package-compute-statistics
- `((use-package-statistics-gather :init ',name t)))))
-
-;;;; :load
-
-(defun use-package-normalize/:load (name keyword args)
- (setq args (use-package-normalize-recursive-symlist name keyword args))
- (if (consp args)
- args
- (list args)))
-
-(defun use-package-handler/:load (name _keyword arg rest state)
- (let ((body (use-package-process-keywords name rest state)))
- (cl-dolist (pkg arg)
- (setq body (use-package-require (if (eq t pkg) name pkg) nil body)))
- body))
-
-;;;; :config
-
-(defalias 'use-package-normalize/:config 'use-package-normalize-forms)
-
-(defun use-package-handler/:config (name _keyword arg rest state)
- (let* ((body (use-package-process-keywords name rest state))
- (name-symbol (use-package-as-symbol name)))
- (use-package-concat
- (when use-package-compute-statistics
- `((use-package-statistics-gather :config ',name nil)))
- (if (or (null arg) (equal arg '(t)))
- body
- (use-package-with-elapsed-timer
- (format "Configuring package %s" name-symbol)
- (funcall use-package--hush-function :config
- (use-package-concat
- (use-package-hook-injector
- (symbol-name name-symbol) :config arg)
- body
- (list t)))))
- (when use-package-compute-statistics
- `((use-package-statistics-gather :config ',name t))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;
-;;; The main macro
-;;
-
-(defmacro use-package-core (name args)
- `(let* ((args* (use-package-normalize-keywords ,name ,args))
- (use-package--form
- (if (eq use-package-verbose 'debug)
- (concat "\n\n"
- (pp-to-string `(use-package ,name ,@,args))
- "\n -->\n\n"
- (pp-to-string `(use-package ,name ,@args*))
- "\n ==>\n\n"
- (pp-to-string
- (macroexp-progn
- (let ((use-package-verbose 'errors)
- (use-package-expand-minimally t))
- (use-package-process-keywords name args*
- (and (plist-get args* :demand)
- (list :demand t)))))))
- "")))
- (use-package-process-keywords name args*
- (and (plist-get args* :demand)
- (list :demand t)))))
-
-;;;###autoload
-(defmacro use-package (name &rest args)
- "Declare an Emacs package by specifying a group of configuration options.
-
-For full documentation, please see the README file that came with
-this file. Usage:
-
- (use-package package-name
- [:keyword [option]]...)
-
-:init Code to run before PACKAGE-NAME has been loaded.
-:config Code to run after PACKAGE-NAME has been loaded. Note that
- if loading is deferred for any reason, this code does not
- execute until the lazy load has occurred.
-:preface Code to be run before everything except `:disabled'; this
- can be used to define functions for use in `:if', or that
- should be seen by the byte-compiler.
-
-:mode Form to be added to `auto-mode-alist'.
-:magic Form to be added to `magic-mode-alist'.
-:magic-fallback Form to be added to `magic-fallback-mode-alist'.
-:interpreter Form to be added to `interpreter-mode-alist'.
-
-:commands Define autoloads for commands that will be defined by the
- package. This is useful if the package is being lazily
- loaded, and you wish to conditionally call functions in your
- `:init' block that are defined in the package.
-:hook Specify hook(s) to attach this package to.
-
-:bind Bind keys, and define autoloads for the bound commands.
-:bind* Bind keys, and define autoloads for the bound commands,
- *overriding all minor mode bindings*.
-:bind-keymap Bind a key prefix to an auto-loaded keymap defined in the
- package. This is like `:bind', but for keymaps.
-:bind-keymap* Like `:bind-keymap', but overrides all minor mode bindings
-
-:defer Defer loading of a package -- this is implied when using
- `:commands', `:bind', `:bind*', `:mode', `:magic', `:hook',
- `:magic-fallback', or `:interpreter'. This can be an integer,
- to force loading after N seconds of idle time, if the package
- has not already been loaded.
-:after Delay the use-package declaration until after the named modules
- have loaded. Once load, it will be as though the use-package
- declaration (without `:after') had been seen at that moment.
-:demand Prevent the automatic deferred loading introduced by constructs
- such as `:bind' (see `:defer' for the complete list).
-
-:if EXPR Initialize and load only if EXPR evaluates to a non-nil value.
-:disabled The package is ignored completely if this keyword is present.
-:defines Declare certain variables to silence the byte-compiler.
-:functions Declare certain functions to silence the byte-compiler.
-:load-path Add to the `load-path' before attempting to load the package.
-:diminish Support for diminish.el (if installed).
-:delight Support for delight.el (if installed).
-:custom Call `customize-set-variable' with each variable definition.
-:custom-face Call `customize-set-faces' with each face definition.
-:ensure Loads the package using package.el if necessary.
-:pin Pin the package to an archive."
- (declare (indent 1))
- (unless (memq :disabled args)
- (macroexp-progn
- (use-package-concat
- (when use-package-compute-statistics
- `((use-package-statistics-gather :use-package ',name nil)))
- (if (eq use-package-verbose 'errors)
- (use-package-core name args)
- (condition-case-unless-debug err
- (use-package-core name args)
- (error
- (ignore
- (display-warning
- 'use-package
- (format "Failed to parse package %s: %s"
- name (error-message-string err)) :error)))))
- (when use-package-compute-statistics
- `((use-package-statistics-gather :use-package ',name t)))))))
-
-(put 'use-package 'lisp-indent-function 'defun)
-
-(provide 'use-package-core)
-
-;; Local Variables:
-;; indent-tabs-mode: nil
-;; End:
-
-;;; use-package-core.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-delight.el b/emacs.d/elpa/use-package-20200322.2110/use-package-delight.el
deleted file mode 100644
index 85d5c7c..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-delight.el
+++ /dev/null
@@ -1,91 +0,0 @@
-;;; use-package-delight.el --- Support for the :delight keyword -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 3 Dec 2017
-;; Version: 1.0
-;; Package-Requires: ((emacs "24.3") (use-package "2.4"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Provides support for the :delight keyword, which is made available by
-;; default by requiring `use-package'.
-
-;;; Code:
-
-(require 'use-package-core)
-
-(defun use-package-normalize-delight (name args)
- "Normalize ARGS for a single call to `delight'."
- (when (eq :eval (car args))
- ;; Handle likely common mistake.
- (use-package-error ":delight mode line constructs must be quoted"))
- (cond ((and (= (length args) 1)
- (use-package-non-nil-symbolp (car args)))
- `(,(nth 0 args) nil ,name))
- ((= (length args) 2)
- `(,(nth 0 args) ,(nth 1 args) ,name))
- ((= (length args) 3)
- args)
- (t
- (use-package-error
- ":delight expects `delight' arguments or a list of them"))))
-
-;;;###autoload
-(defun use-package-normalize/:delight (name _keyword args)
- "Normalize arguments to delight."
- (cond ((null args)
- `((,(use-package-as-mode name) nil ,name)))
- ((and (= (length args) 1)
- (use-package-non-nil-symbolp (car args)))
- `((,(car args) nil ,name)))
- ((and (= (length args) 1)
- (stringp (car args)))
- `((,(use-package-as-mode name) ,(car args) ,name)))
- ((and (= (length args) 1)
- (listp (car args))
- (eq 'quote (caar args)))
- `((,(use-package-as-mode name) ,@(cdar args) ,name)))
- ((and (= (length args) 2)
- (listp (nth 1 args))
- (eq 'quote (car (nth 1 args))))
- `((,(car args) ,@(cdr (nth 1 args)) ,name)))
- (t (mapcar
- (apply-partially #'use-package-normalize-delight name)
- (if (use-package-non-nil-symbolp (car args))
- (list args)
- args)))))
-
-;;;###autoload
-(defun use-package-handler/:delight (name _keyword args rest state)
- (let ((body (use-package-process-keywords name rest state)))
- (use-package-concat
- body
- `((if (fboundp 'delight)
- (delight '(,@args)))))))
-
-(add-to-list 'use-package-keywords :delight t)
-
-(provide 'use-package-delight)
-
-;;; use-package-delight.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-diminish.el b/emacs.d/elpa/use-package-20200322.2110/use-package-diminish.el
deleted file mode 100644
index 1f3895f..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-diminish.el
+++ /dev/null
@@ -1,80 +0,0 @@
-;;; use-package-diminish.el --- Support for the :diminish keyword -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 3 Dec 2017
-;; Version: 1.0
-;; Package-Requires: ((emacs "24.3") (use-package "2.4"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Provides support for the :diminish keyword, which is made available by
-;; default by requiring `use-package'.
-
-;;; Code:
-
-(require 'use-package-core)
-
-(defun use-package-normalize-diminish (name label arg &optional recursed)
- "Normalize the arguments to diminish down to a list of one of two forms:
- SYMBOL
- (SYMBOL . STRING)"
- (cond
- ((not arg)
- (list (use-package-as-mode name)))
- ((use-package-non-nil-symbolp arg)
- (list arg))
- ((stringp arg)
- (list (cons (use-package-as-mode name) arg)))
- ((and (consp arg) (stringp (cdr arg)))
- (list arg))
- ((and (not recursed) (listp arg) (listp (cdr arg)))
- (mapcar #'(lambda (x) (car (use-package-normalize-diminish
- name label x t))) arg))
- (t
- (use-package-error
- (concat label " wants a string, symbol, "
- "(symbol . string) or list of these")))))
-
-;;;###autoload
-(defun use-package-normalize/:diminish (name keyword args)
- (use-package-as-one (symbol-name keyword) args
- (apply-partially #'use-package-normalize-diminish name) t))
-
-;;;###autoload
-(defun use-package-handler/:diminish (name _keyword arg rest state)
- (let ((body (use-package-process-keywords name rest state)))
- (use-package-concat
- (mapcar #'(lambda (var)
- `(if (fboundp 'diminish)
- ,(if (consp var)
- `(diminish ',(car var) ,(cdr var))
- `(diminish ',var))))
- arg)
- body)))
-
-(add-to-list 'use-package-keywords :diminish t)
-
-(provide 'use-package-diminish)
-
-;;; use-package-diminish.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-ensure.el b/emacs.d/elpa/use-package-20200322.2110/use-package-ensure.el
deleted file mode 100644
index 50005a9..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-ensure.el
+++ /dev/null
@@ -1,214 +0,0 @@
-;;; use-package-ensure.el --- Support for the :ensure and :pin keywords -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 3 Dec 2017
-;; Version: 1.0
-;; Package-Requires: ((emacs "24.3") (use-package "2.4"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Provides support for the :ensure and :pin keywords, which is made available
-;; by default by requiring `use-package'.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'use-package-core)
-
-(defgroup use-package-ensure nil
- "Support for :ensure and :pin keywords in use-package declarations."
- :group 'use-package)
-
-(eval-when-compile
- (declare-function package-installed-p "package")
- (declare-function package-read-all-archive-contents "package" ()))
-
-(defcustom use-package-always-ensure nil
- "Treat every package as though it had specified using `:ensure SEXP'.
-See also `use-package-defaults', which uses this value."
- :type 'sexp
- :group 'use-package-ensure)
-
-(defcustom use-package-always-pin nil
- "Treat every package as though it had specified using `:pin SYM'.
-See also `use-package-defaults', which uses this value."
- :type 'symbol
- :group 'use-package-ensure)
-
-(defcustom use-package-ensure-function 'use-package-ensure-elpa
- "Function that ensures a package is installed.
-This function is called with three arguments: the name of the
-package declared in the `use-package' form; the arguments passed
-to all `:ensure' keywords (always a list, even if only one); and
-the current `state' plist created by previous handlers.
-
-Note that this function is called whenever `:ensure' is provided,
-even if it is nil. It is up to the function to decide on the
-semantics of the various values for `:ensure'.
-
-This function should return non-nil if the package is installed.
-
-The default value uses package.el to install the package."
- :type '(choice (const :tag "package.el" use-package-ensure-elpa)
- (function :tag "Custom"))
- :group 'use-package-ensure)
-
-;;;; :pin
-
-(defun use-package-normalize/:pin (_name keyword args)
- (use-package-only-one (symbol-name keyword) args
- #'(lambda (_label arg)
- (cond
- ((stringp arg) arg)
- ((use-package-non-nil-symbolp arg) (symbol-name arg))
- (t
- (use-package-error
- ":pin wants an archive name (a string)"))))))
-
-(eval-when-compile
- (defvar package-pinned-packages)
- (defvar package-archives))
-
-(defun use-package-archive-exists-p (archive)
- "Check if a given ARCHIVE is enabled.
-
-ARCHIVE can be a string or a symbol or 'manual to indicate a
-manually updated package."
- (if (member archive '(manual "manual"))
- 't
- (let ((valid nil))
- (dolist (pa package-archives)
- (when (member archive (list (car pa) (intern (car pa))))
- (setq valid 't)))
- valid)))
-
-(defun use-package-pin-package (package archive)
- "Pin PACKAGE to ARCHIVE."
- (unless (boundp 'package-pinned-packages)
- (setq package-pinned-packages ()))
- (let ((archive-symbol (if (symbolp archive) archive (intern archive)))
- (archive-name (if (stringp archive) archive (symbol-name archive))))
- (if (use-package-archive-exists-p archive-symbol)
- (add-to-list 'package-pinned-packages (cons package archive-name))
- (error "Archive '%s' requested for package '%s' is not available."
- archive-name package))
- (unless (bound-and-true-p package--initialized)
- (package-initialize t))))
-
-(defun use-package-handler/:pin (name _keyword archive-name rest state)
- (let ((body (use-package-process-keywords name rest state))
- (pin-form (if archive-name
- `(use-package-pin-package ',(use-package-as-symbol name)
- ,archive-name))))
- ;; Pinning should occur just before ensuring
- ;; See `use-package-handler/:ensure'.
- (if (bound-and-true-p byte-compile-current-file)
- (eval pin-form) ; Eval when byte-compiling,
- (push pin-form body)) ; or else wait until runtime.
- body))
-
-;;;; :ensure
-
-(defvar package-archive-contents)
-
-;;;###autoload
-(defun use-package-normalize/:ensure (_name keyword args)
- (if (null args)
- (list t)
- (use-package-only-one (symbol-name keyword) args
- #'(lambda (_label arg)
- (cond
- ((symbolp arg)
- (list arg))
- ((and (listp arg) (= 3 (length arg))
- (symbolp (nth 0 arg))
- (eq :pin (nth 1 arg))
- (or (stringp (nth 2 arg))
- (symbolp (nth 2 arg))))
- (list (cons (nth 0 arg) (nth 2 arg))))
- (t
- (use-package-error
- (concat ":ensure wants an optional package name "
- "(an unquoted symbol name), or (<symbol> :pin <string>)"))))))))
-
-(defun use-package-ensure-elpa (name args _state &optional _no-refresh)
- (dolist (ensure args)
- (let ((package
- (or (and (eq ensure t) (use-package-as-symbol name))
- ensure)))
- (when package
- (require 'package)
- (when (consp package)
- (use-package-pin-package (car package) (cdr package))
- (setq package (car package)))
- (unless (package-installed-p package)
- (condition-case-unless-debug err
- (progn
- (when (assoc package (bound-and-true-p
- package-pinned-packages))
- (package-read-all-archive-contents))
- (if (assoc package package-archive-contents)
- (package-install package)
- (package-refresh-contents)
- (when (assoc package (bound-and-true-p
- package-pinned-packages))
- (package-read-all-archive-contents))
- (package-install package))
- t)
- (error
- (display-warning 'use-package
- (format "Failed to install %s: %s"
- name (error-message-string err))
- :error))))))))
-
-;;;###autoload
-(defun use-package-handler/:ensure (name _keyword ensure rest state)
- (let* ((body (use-package-process-keywords name rest state)))
- ;; We want to avoid installing packages when the `use-package' macro is
- ;; being macro-expanded by elisp completion (see `lisp--local-variables'),
- ;; but still install packages when byte-compiling, to avoid requiring
- ;; `package' at runtime.
- (if (bound-and-true-p byte-compile-current-file)
- ;; Eval when byte-compiling,
- (funcall use-package-ensure-function name ensure state)
- ;; or else wait until runtime.
- (push `(,use-package-ensure-function ',name ',ensure ',state)
- body))
- body))
-
-(add-to-list 'use-package-defaults
- '(:ensure (list use-package-always-ensure)
- (lambda (name args)
- (and use-package-always-ensure
- (not (plist-member args :load-path))))) t)
-
-(add-to-list 'use-package-defaults
- '(:pin use-package-always-pin use-package-always-pin) t)
-
-(add-to-list 'use-package-keywords :ensure)
-(add-to-list 'use-package-keywords :pin)
-
-(provide 'use-package-ensure)
-
-;;; use-package-ensure.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-jump.el b/emacs.d/elpa/use-package-20200322.2110/use-package-jump.el
deleted file mode 100644
index 4044ad1..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-jump.el
+++ /dev/null
@@ -1,79 +0,0 @@
-;;; use-package-jump.el --- Attempt to jump to a use-package declaration -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 3 Dec 2017
-;; Version: 1.0
-;; Package-Requires: ((emacs "24.3") (use-package "2.4"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Provides the command `M-x use-package-jump-to-package-form', however it
-;; only works if the package being jumped to was required during
-;; initialization. If it was delay-loaded, it will not work. Improvements are
-;; needed.
-
-;;; Code:
-
-(require 'use-package-core)
-
-(defun use-package-find-require (package)
- "Find file that required PACKAGE by searching `load-history'.
-Returns an absolute file path or nil if none is found."
- (catch 'suspect
- (dolist (filespec load-history)
- (dolist (entry (cdr filespec))
- (when (equal entry (cons 'require package))
- (throw 'suspect (car filespec)))))))
-
-;;;###autoload
-(defun use-package-jump-to-package-form (package)
- "Attempt to find and jump to the `use-package' form that loaded
-PACKAGE. This will only find the form if that form actually
-required PACKAGE. If PACKAGE was previously required then this
-function will jump to the file that originally required PACKAGE
-instead."
- (interactive (list (completing-read "Package: " features)))
- (let* ((package (if (stringp package) (intern package) package))
- (requiring-file (use-package-find-require package))
- file location)
- (if (null requiring-file)
- (user-error "Can't find file requiring file; may have been autoloaded")
- (setq file (if (string= (file-name-extension requiring-file) "elc")
- (concat (file-name-sans-extension requiring-file) ".el")
- requiring-file))
- (when (file-exists-p file)
- (find-file-other-window file)
- (save-excursion
- (goto-char (point-min))
- (setq location
- (re-search-forward
- (format (eval use-package-form-regexp-eval) package) nil t)))
- (if (null location)
- (message "No use-package form found.")
- (goto-char location)
- (beginning-of-line))))))
-
-(provide 'use-package-jump)
-
-;;; use-package-jump.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-lint.el b/emacs.d/elpa/use-package-20200322.2110/use-package-lint.el
deleted file mode 100644
index c6e7c3c..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-lint.el
+++ /dev/null
@@ -1,84 +0,0 @@
-;;; use-package-lint.el --- Attempt to find errors in use-package declarations -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 3 Dec 2017
-;; Version: 1.0
-;; Package-Requires: ((emacs "24.3") (use-package "2.4"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Provides the command `M-x use-package-lint'.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'use-package-core)
-
-(defun use-package-lint-declaration (name plist)
- (dolist (path (plist-get plist :load-path))
- (unless (file-exists-p path)
- (display-warning
- 'use-package
- (format "%s :load-path does not exist: %s"
- name path) :error)))
-
- (unless (or (plist-member plist :disabled)
- (plist-get plist :no-require)
- (locate-library (use-package-as-string name) nil
- (plist-get plist :load-path)))
- (display-warning
- 'use-package
- (format "%s module cannot be located" name) :error))
-
- ;; (dolist (command (plist-get plist :commands))
- ;; (unless (string= (find-lisp-object-file-name command nil)
- ;; (locate-library (use-package-as-string name) nil
- ;; (plist-get plist :load-path)))
- ;; (display-warning
- ;; 'use-package
- ;; (format "%s :command is from different path: %s"
- ;; name (symbol-name command)) :error)))
- )
-
-;;;###autoload
-(defun use-package-lint ()
- "Check for errors in use-package declarations.
-For example, if the module's `:if' condition is met, but even
-with the specified `:load-path' the module cannot be found."
- (interactive)
- (save-excursion
- (goto-char (point-min))
- (let ((re (eval use-package-form-regexp-eval)))
- (while (re-search-forward re nil t)
- (goto-char (match-beginning 0))
- (let ((decl (read (current-buffer))))
- (when (eq (car decl) 'use-package)
- (use-package-lint-declaration
- (use-package-as-string (cadr decl))
- (use-package-normalize-keywords
- (cadr decl) (cddr decl)))))))))
-
-(provide 'use-package-lint)
-
-;;; use-package-lint.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package-pkg.el b/emacs.d/elpa/use-package-20200322.2110/use-package-pkg.el
deleted file mode 100644
index d91e303..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package-pkg.el
+++ /dev/null
@@ -1,13 +0,0 @@
-(define-package "use-package" "20200322.2110" "A configuration macro for simplifying your .emacs"
- '((emacs "24.3")
- (bind-key "2.4"))
- :keywords
- '("dotemacs" "startup" "speed" "config" "package")
- :authors
- '(("John Wiegley" . "johnw@newartisans.com"))
- :maintainer
- '("John Wiegley" . "johnw@newartisans.com")
- :url "https://github.com/jwiegley/use-package")
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package.el b/emacs.d/elpa/use-package-20200322.2110/use-package.el
deleted file mode 100644
index 1a8fff8..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package.el
+++ /dev/null
@@ -1,54 +0,0 @@
-;;; use-package.el --- A configuration macro for simplifying your .emacs -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2012-2017 John Wiegley
-
-;; Author: John Wiegley <johnw@newartisans.com>
-;; Maintainer: John Wiegley <johnw@newartisans.com>
-;; Created: 17 Jun 2012
-;; Modified: 29 Nov 2017
-;; Version: 2.4
-;; Package-Requires: ((emacs "24.3") (bind-key "2.4"))
-;; Keywords: dotemacs startup speed config package
-;; URL: https://github.com/jwiegley/use-package
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation; either version 3, or (at
-;; your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; The `use-package' declaration macro allows you to isolate package
-;; configuration in your ".emacs" in a way that is performance-oriented and,
-;; well, just tidy. I created it because I have over 80 packages that I use
-;; in Emacs, and things were getting difficult to manage. Yet with this
-;; utility my total load time is just under 1 second, with no loss of
-;; functionality!
-;;
-;; Please see README.md from the same repository for documentation.
-
-;;; Code:
-
-(require 'use-package-core)
-
-(require 'use-package-bind-key)
-(require 'use-package-diminish)
-(require 'use-package-delight)
-(require 'use-package-ensure)
-
-(declare-function use-package-jump-to-package-form "use-package-jump")
-(autoload #'use-package-jump-to-package-form "use-package-jump" nil t)
-
-(provide 'use-package)
-
-;;; use-package.el ends here
diff --git a/emacs.d/elpa/use-package-20200322.2110/use-package.info b/emacs.d/elpa/use-package-20200322.2110/use-package.info
deleted file mode 100644
index 9e6a1d8..0000000
--- a/emacs.d/elpa/use-package-20200322.2110/use-package.info
+++ /dev/null
@@ -1,1048 +0,0 @@
-This is use-package.info, produced by makeinfo version 6.5 from
-use-package.texi.
-
- Copyright (C) 2012-2017 John Wiegley <johnw@newartisans.com>
-
- You can redistribute this document and/or modify it under the terms
- of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- This document is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-INFO-DIR-SECTION Emacs
-START-INFO-DIR-ENTRY
-* use-package: (use-package). Declarative package configuration for Emacs.
-END-INFO-DIR-ENTRY
-
-
-File: use-package.info, Node: Top, Next: Introduction, Up: (dir)
-
-use-package User Manual
-***********************
-
-use-package is...
-
- Copyright (C) 2012-2017 John Wiegley <johnw@newartisans.com>
-
- You can redistribute this document and/or modify it under the terms
- of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option)
- any later version.
-
- This document is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
-* Menu:
-
-* Introduction::
-* Installation::
-* Getting Started::
-* Keywords::
-* FAQ::
-* Debugging Tools::
-* Command Index::
-* Function Index::
-* Variable Index::
-
-— The Detailed Node Listing —
-
-
-Installation
-
-* Installing from an Elpa Archive::
-* Installing from the Git Repository::
-* Post-Installation Tasks::
-
-
-
-
-Keywords
-
-* ‘:after’: after.
-* ‘:bind-keymap’, ‘:bind-keymap*’: bind-keymap bind-keymap*.
-* ‘:bind’, ‘:bind*’: bind bind*.
-* ‘:commands’: commands.
-* ‘:preface’, ‘:init’, ‘:config’: preface init config.
-* ‘:custom’: custom.
-* ‘:custom-face’: custom-face.
-* ‘:defer’, ‘:demand’: defer demand.
-* ‘:defines’, ‘:functions’: defines functions.
-* ‘:diminish’, ‘:delight’: diminish delight.
-* ‘:disabled’: disabled.
-* ‘:ensure’, ‘:pin’: ensure pin.
-* ‘:hook’: hook.
-* ‘:if’, ‘:when’, ‘:unless’: if when unless.
-* ‘:load-path’: load-path.
-* ‘:mode’, ‘:interpreter’: mode interpreter.
-* ‘:magic’, ‘:magic-fallback’: magic magic-fallback.
-* ‘:no-require’: no-require.
-* ‘:requires’: requires.
-
-
-
-‘:bind’, ‘:bind*’
-
-* Binding to local keymaps::
-
-FAQ
-
-* FAQ - How to ...?::
-* FAQ - Issues and Errors::
-
-FAQ - How to ...?
-
-* This is a question::
-
-
-FAQ - Issues and Errors
-
-* This is an issues::
-
-
-File: use-package.info, Node: Introduction, Next: Installation, Prev: Top, Up: Top
-
-1 Introduction
-**************
-
-The ‘use-package’ macro allows you to isolate package configuration in
-your ‘.emacs’ file in a way that is both performance-oriented and, well,
-tidy. I created it because I have over 400 packages that I use in
-Emacs, and things were getting difficult to manage. Yet with this
-utility my total load time is around 2 seconds, with no loss of
-functionality!
-
-
-File: use-package.info, Node: Installation, Next: Getting Started, Prev: Introduction, Up: Top
-
-2 Installation
-**************
-
-use-package can be installed using Emacs’ package manager or manually
-from its development repository.
-
-* Menu:
-
-* Installing from an Elpa Archive::
-* Installing from the Git Repository::
-* Post-Installation Tasks::
-
-
-File: use-package.info, Node: Installing from an Elpa Archive, Next: Installing from the Git Repository, Up: Installation
-
-2.1 Installing from an Elpa Archive
-===================================
-
-use-package is available from Melpa and Melpa-Stable. If you haven’t
-used Emacs’ package manager before, then it is high time you familiarize
-yourself with it by reading the documentation in the Emacs manual, see
-*note (emacs)Packages::. Then add one of the archives to
-‘package-archives’:
-
- • To use Melpa:
-
- (require 'package)
- (add-to-list 'package-archives
- '("melpa" . "https://melpa.org/packages/") t)
-
- • To use Melpa-Stable:
-
- (require 'package)
- (add-to-list 'package-archives
- '("melpa-stable" . "https://stable.melpa.org/packages/") t)
-
- Once you have added your preferred archive, you need to update the
-local package list using:
-
- M-x package-refresh-contents RET
-
- Once you have done that, you can install use-package and its
-dependencies using:
-
- M-x package-install RET use-package RET
-
- Now see *note Post-Installation Tasks::.
-
-
-File: use-package.info, Node: Installing from the Git Repository, Next: Post-Installation Tasks, Prev: Installing from an Elpa Archive, Up: Installation
-
-2.2 Installing from the Git Repository
-======================================
-
-First, use Git to clone the use-package repository:
-
- $ git clone https://github.com/jwiegley/use-package.git ~/.emacs.d/site-lisp/use-package
- $ cd ~/.emacs.d/site-lisp/use-package
-
- Then compile the libraries and generate the info manuals:
-
- $ make
-
- You may need to create ‘/path/to/use-package/config.mk’ with the
-following content before running ‘make’:
-
- LOAD_PATH = -L /path/to/use-package
-
- Finally add this to your init file:
-
- (add-to-list 'load-path "~/.emacs.d/site-lisp/use-package")
- (require 'use-package)
-
- (with-eval-after-load 'info
- (info-initialize)
- (add-to-list 'Info-directory-list
- "~/.emacs.d/site-lisp/use-package/"))
-
- Note that elements of ‘load-path’ should not end with a slash, while
-those of ‘Info-directory-list’ should.
-
- Instead of running use-package directly from the repository by adding
-it to the ‘load-path’, you might want to instead install it in some
-other directory using ‘sudo make install’ and setting ‘load-path’
-accordingly.
-
- To update use-package use:
-
- $ git pull
- $ make
-
- At times it might be necessary to run ‘make clean all’ instead.
-
- To view all available targets use ‘make help’.
-
- Now see *note Post-Installation Tasks::.
-
-
-File: use-package.info, Node: Post-Installation Tasks, Prev: Installing from the Git Repository, Up: Installation
-
-2.3 Post-Installation Tasks
-===========================
-
-After installing use-package you should verify that you are indeed using
-the use-package release you think you are using. It’s best to restart
-Emacs before doing so, to make sure you are not using an outdated value
-for ‘load-path’.
-
- C-h v use-package-version RET
-
- should display something like
-
- use-package-version’s value is "2.4"
-
- If you are completely new to use-package then see *note Getting
-Started::.
-
- If you run into problems, then please see the *note FAQ::. Also see
-the *note Debugging Tools::.
-
-
-File: use-package.info, Node: Getting Started, Next: Keywords, Prev: Installation, Up: Top
-
-3 Getting Started
-*****************
-
-TODO. For now, see ‘README.md’.
-
-
-File: use-package.info, Node: Keywords, Next: FAQ, Prev: Getting Started, Up: Top
-
-4 Keywords
-**********
-
-* Menu:
-
-* ‘:after’: after.
-* ‘:bind-keymap’, ‘:bind-keymap*’: bind-keymap bind-keymap*.
-* ‘:bind’, ‘:bind*’: bind bind*.
-* ‘:commands’: commands.
-* ‘:preface’, ‘:init’, ‘:config’: preface init config.
-* ‘:custom’: custom.
-* ‘:custom-face’: custom-face.
-* ‘:defer’, ‘:demand’: defer demand.
-* ‘:defines’, ‘:functions’: defines functions.
-* ‘:diminish’, ‘:delight’: diminish delight.
-* ‘:disabled’: disabled.
-* ‘:ensure’, ‘:pin’: ensure pin.
-* ‘:hook’: hook.
-* ‘:if’, ‘:when’, ‘:unless’: if when unless.
-* ‘:load-path’: load-path.
-* ‘:mode’, ‘:interpreter’: mode interpreter.
-* ‘:magic’, ‘:magic-fallback’: magic magic-fallback.
-* ‘:no-require’: no-require.
-* ‘:requires’: requires.
-
-
-File: use-package.info, Node: after, Next: bind-keymap bind-keymap*, Up: Keywords
-
-4.1 ‘:after’
-============
-
-Sometimes it only makes sense to configure a package after another has
-been loaded, because certain variables or functions are not in scope
-until that time. This can achieved using an ‘:after’ keyword that
-allows a fairly rich description of the exact conditions when loading
-should occur. Here is an example:
-
- (use-package hydra
- :load-path "site-lisp/hydra")
-
- (use-package ivy
- :load-path "site-lisp/swiper")
-
- (use-package ivy-hydra
- :after (ivy hydra))
-
- In this case, because all of these packages are demand-loaded in the
-order they occur, the use of ‘:after’ is not strictly necessary. By
-using it, however, the above code becomes order-independent, without an
-implicit depedence on the nature of your init file.
-
- By default, ‘:after (foo bar)’ is the same as ‘:after (:all foo
-bar)’, meaning that loading of the given package will not happen until
-both ‘foo’ and ‘bar’ have been loaded. Here are some of the other
-possibilities:
-
- :after (foo bar)
- :after (:all foo bar)
- :after (:any foo bar)
- :after (:all (:any foo bar) (:any baz quux))
- :after (:any (:all foo bar) (:all baz quux))
-
- When you nest selectors, such as ‘(:any (:all foo bar) (:all baz
-quux))’, it means that the package will be loaded when either both ‘foo’
-and ‘bar’ have been loaded, or both ‘baz’ and ‘quux’ have been loaded.
-
-
-File: use-package.info, Node: bind-keymap bind-keymap*, Next: bind bind*, Prev: after, Up: Keywords
-
-4.2 ‘:bind-keymap’, ‘:bind-keymap*’
-===================================
-
-Normally ‘:bind’ expects that commands are functions that will be
-autoloaded from the given package. However, this does not work if one
-of those commands is actually a keymap, since keymaps are not functions,
-and cannot be autoloaded using Emacs’ ‘autoload’ mechanism.
-
- To handle this case, ‘use-package’ offers a special, limited variant
-of ‘:bind’ called ‘:bind-keymap’. The only difference is that the
-"commands" bound to by ‘:bind-keymap’ must be keymaps defined in the
-package, rather than command functions. This is handled behind the
-scenes by generating custom code that loads the package containing the
-keymap, and then re-executes your keypress after the first load, to
-reinterpret that keypress as a prefix key.
-
- For example:
-
- (use-package projectile
- :bind-keymap
- ("C-c p" . projectile-command-map)
-
-
-File: use-package.info, Node: bind bind*, Next: commands, Prev: bind-keymap bind-keymap*, Up: Keywords
-
-4.3 ‘:bind’, ‘:bind*’
-=====================
-
-Another common thing to do when loading a module is to bind a key to
-primary commands within that module:
-
- (use-package ace-jump-mode
- :bind ("C-." . ace-jump-mode))
-
- This does two things: first, it creates an autoload for the
-‘ace-jump-mode’ command and defers loading of ‘ace-jump-mode’ until you
-actually use it. Second, it binds the key ‘C-.’ to that command. After
-loading, you can use ‘M-x describe-personal-keybindings’ to see all such
-keybindings you’ve set throughout your ‘.emacs’ file.
-
- A more literal way to do the exact same thing is:
-
- (use-package ace-jump-mode
- :commands ace-jump-mode
- :init
- (bind-key "C-." 'ace-jump-mode))
-
- When you use the ‘:commands’ keyword, it creates autoloads for those
-commands and defers loading of the module until they are used. Since
-the ‘:init’ form is always run—even if ‘ace-jump-mode’ might not be on
-your system—remember to restrict ‘:init’ code to only what would succeed
-either way.
-
- The ‘:bind’ keyword takes either a cons or a list of conses:
-
- (use-package hi-lock
- :bind (("M-o l" . highlight-lines-matching-regexp)
- ("M-o r" . highlight-regexp)
- ("M-o w" . highlight-phrase)))
-
- The ‘:commands’ keyword likewise takes either a symbol or a list of
-symbols.
-
- NOTE: Special keys like ‘tab’ or ‘F1’-‘Fn’ can be written in square
-brackets, i.e. ‘[tab]’ instead of ‘"tab"’. The syntax for the
-keybindings is similar to the "kbd" syntax: see the Emacs Manual
-(https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-Rebinding.html)
-for more information.
-
- Examples:
-
- (use-package helm
- :bind (("M-x" . helm-M-x)
- ("M-<f5>" . helm-find-files)
- ([f10] . helm-buffers-list)
- ([S-f10] . helm-recentf)))
-
-* Menu:
-
-* Binding to local keymaps::
-
-
-File: use-package.info, Node: Binding to local keymaps, Up: bind bind*
-
-4.3.1 Binding to local keymaps
-------------------------------
-
-Slightly different from binding a key to a keymap, is binding a key
-*within* a local keymap that only exists after the package is loaded.
-‘use-package’ supports this with a ‘:map’ modifier, taking the local
-keymap to bind to:
-
- (use-package helm
- :bind (:map helm-command-map
- ("C-c h" . helm-execute-persistent-action)))
-
- The effect of this statement is to wait until ‘helm’ has loaded, and
-then to bind the key ‘C-c h’ to ‘helm-execute-persistent-action’ within
-Helm’s local keymap, ‘helm-mode-map’.
-
- Multiple uses of ‘:map’ may be specified. Any binding occurring
-before the first use of ‘:map’ are applied to the global keymap:
-
- (use-package term
- :bind (("C-c t" . term)
- :map term-mode-map
- ("M-p" . term-send-up)
- ("M-n" . term-send-down)
- :map term-raw-map
- ("M-o" . other-window)
- ("M-p" . term-send-up)
- ("M-n" . term-send-down)))
-
-
-File: use-package.info, Node: commands, Next: preface init config, Prev: bind bind*, Up: Keywords
-
-4.4 ‘:commands’
-===============
-
-
-File: use-package.info, Node: preface init config, Next: custom, Prev: commands, Up: Keywords
-
-4.5 ‘:preface’, ‘:init’, ‘:config’
-==================================
-
-Here is the simplest ‘use-package’ declaration:
-
- ;; This is only needed once, near the top of the file
- (eval-when-compile
- ;; Following line is not needed if use-package.el is in ~/.emacs.d
- (add-to-list 'load-path "<path where use-package is installed>")
- (require 'use-package))
-
- (use-package foo)
-
- This loads in the package ‘foo’, but only if ‘foo’ is available on
-your system. If not, a warning is logged to the ‘*Messages*’ buffer.
-If it succeeds, a message about ‘"Loading foo"’ is logged, along with
-the time it took to load, if it took over 0.1 seconds.
-
- Use the ‘:init’ keyword to execute code before a package is loaded.
-It accepts one or more forms, up until the next keyword:
-
- (use-package foo
- :init
- (setq foo-variable t))
-
- Similarly, ‘:config’ can be used to execute code after a package is
-loaded. In cases where loading is done lazily (see more about
-autoloading below), this execution is deferred until after the autoload
-occurs:
-
- (use-package foo
- :init
- (setq foo-variable t)
- :config
- (foo-mode 1))
-
- As you might expect, you can use ‘:init’ and ‘:config’ together:
-
- (use-package color-moccur
- :commands (isearch-moccur isearch-all)
- :bind (("M-s O" . moccur)
- :map isearch-mode-map
- ("M-o" . isearch-moccur)
- ("M-O" . isearch-moccur-all))
- :init
- (setq isearch-lazy-highlight t)
- :config
- (use-package moccur-edit))
-
- In this case, I want to autoload the commands ‘isearch-moccur’ and
-‘isearch-all’ from ‘color-moccur.el’, and bind keys both at the global
-level and within the ‘isearch-mode-map’ (see next section). When the
-package is actually loaded (by using one of these commands),
-‘moccur-edit’ is also loaded, to allow editing of the ‘moccur’ buffer.
-
-
-File: use-package.info, Node: custom, Next: custom-face, Prev: preface init config, Up: Keywords
-
-4.6 ‘:custom’
-=============
-
-The ‘:custom’ keyword allows customization of package custom variables.
-
- (use-package comint
- :custom
- (comint-buffer-maximum-size 20000 "Increase comint buffer size.")
- (comint-prompt-read-only t "Make the prompt read only."))
-
- The documentation string is not mandatory.
-
-
-File: use-package.info, Node: custom-face, Next: defer demand, Prev: custom, Up: Keywords
-
-4.7 ‘:custom-face’
-==================
-
-The ‘:custom-face’ keyword allows customization of package custom faces.
-
- (use-package eruby-mode
- :custom-face
- (eruby-standard-face ((t (:slant italic)))))
-
-
-File: use-package.info, Node: defer demand, Next: defines functions, Prev: custom-face, Up: Keywords
-
-4.8 ‘:defer’, ‘:demand’
-=======================
-
-In almost all cases you don’t need to manually specify ‘:defer t’. This
-is implied whenever ‘:bind’ or ‘:mode’ or ‘:interpreter’ is used.
-Typically, you only need to specify ‘:defer’ if you know for a fact that
-some other package will do something to cause your package to load at
-the appropriate time, and thus you would like to defer loading even
-though use-package isn’t creating any autoloads for you.
-
- You can override package deferral with the ‘:demand’ keyword. Thus,
-even if you use ‘:bind’, using ‘:demand’ will force loading to occur
-immediately and not establish an autoload for the bound key.
-
-
-File: use-package.info, Node: defines functions, Next: diminish delight, Prev: defer demand, Up: Keywords
-
-4.9 ‘:defines’, ‘:functions’
-============================
-
-Another feature of ‘use-package’ is that it always loads every file that
-it can when ‘.emacs’ is being byte-compiled. This helps to silence
-spurious warnings about unknown variables and functions.
-
- However, there are times when this is just not enough. For those
-times, use the ‘:defines’ and ‘:functions’ keywords to introduce dummy
-variable and function declarations solely for the sake of the
-byte-compiler:
-
- (use-package texinfo
- :defines texinfo-section-list
- :commands texinfo-mode
- :init
- (add-to-list 'auto-mode-alist '("\\.texi$" . texinfo-mode)))
-
- If you need to silence a missing function warning, you can use
-‘:functions’:
-
- (use-package ruby-mode
- :mode "\\.rb\\'"
- :interpreter "ruby"
- :functions inf-ruby-keys
- :config
- (defun my-ruby-mode-hook ()
- (require 'inf-ruby)
- (inf-ruby-keys))
-
- (add-hook 'ruby-mode-hook 'my-ruby-mode-hook))
-
-
-File: use-package.info, Node: diminish delight, Next: disabled, Prev: defines functions, Up: Keywords
-
-4.10 ‘:diminish’, ‘:delight’
-============================
-
-‘use-package’ also provides built-in support for the diminish and
-delight utilities—if you have them installed. Their purpose is to
-remove or change minor mode strings in your mode-line.
-
- diminish (https://github.com/myrjola/diminish.el) is invoked with the
-‘:diminish’ keyword, which is passed either a minor mode symbol, a cons
-of the symbol and its replacement string, or just a replacement string,
-in which case the minor mode symbol is guessed to be the package name
-with "-mode" appended at the end:
-
- (use-package abbrev
- :diminish abbrev-mode
- :config
- (if (file-exists-p abbrev-file-name)
- (quietly-read-abbrev-file)))
-
- delight (https://elpa.gnu.org/packages/delight.html) is invoked with
-the ‘:delight’ keyword, which is passed a minor mode symbol, a
-replacement string or quoted mode-line data
-(https://www.gnu.org/software/emacs/manual/html_node/elisp/Mode-Line-Data.html)
-(in which case the minor mode symbol is guessed to be the package name
-with "-mode" appended at the end), both of these, or several lists of
-both. If no arguments are provided, the default mode name is hidden
-completely.
-
- ;; Don't show anything for rainbow-mode.
- (use-package rainbow-mode
- :delight)
-
- ;; Don't show anything for auto-revert-mode, which doesn't match
- ;; its package name.
- (use-package autorevert
- :delight auto-revert-mode)
-
- ;; Remove the mode name for projectile-mode, but show the project name.
- (use-package projectile
- :delight '(:eval (concat " " (projectile-project-name))))
-
- ;; Completely hide visual-line-mode and change auto-fill-mode to " AF".
- (use-package emacs
- :delight
- (auto-fill-function " AF")
- (visual-line-mode))
-
-
-File: use-package.info, Node: disabled, Next: ensure pin, Prev: diminish delight, Up: Keywords
-
-4.11 ‘:disabled’
-================
-
-The ‘:disabled’ keyword can turn off a module you’re having difficulties
-with, or stop loading something you’re not using at the present time:
-
- (use-package ess-site
- :disabled
- :commands R)
-
- When byte-compiling your ‘.emacs’ file, disabled declarations are
-omitted from the output entirely, to accelerate startup times.
-
-
-File: use-package.info, Node: ensure pin, Next: hook, Prev: disabled, Up: Keywords
-
-4.12 ‘:ensure’, ‘:pin’
-======================
-
-You can use ‘use-package’ to load packages from ELPA with ‘package.el’.
-This is particularly useful if you share your ‘.emacs’ among several
-machines; the relevant packages are downloaded automatically once
-declared in your ‘.emacs’. The ‘:ensure’ keyword causes the package(s)
-to be installed automatically if not already present on your system (set
-‘(setq use-package-always-ensure t)’ if you wish this behavior to be
-global for all packages):
-
- (use-package magit
- :ensure t)
-
- If you need to install a different package from the one named by
-‘use-package’, you can specify it like this:
-
- (use-package tex
- :ensure auctex)
-
- Lastly, when running on Emacs 24.4 or later, use-package can pin a
-package to a specific archive, allowing you to mix and match packages
-from different archives. The primary use-case for this is preferring
-packages from the ‘melpa-stable’ and ‘gnu’ archives, but using specific
-packages from ‘melpa’ when you need to track newer versions than what is
-available in the ‘stable’ archives is also a valid use-case.
-
- By default ‘package.el’ prefers ‘melpa’ over ‘melpa-stable’ due to
-the versioning ‘(> evil-20141208.623 evil-1.0.9)’, so even if you are
-tracking only a single package from ‘melpa’, you will need to tag all
-the non-‘melpa’ packages with the appropriate archive. If this really
-annoys you, then you can set ‘use-package-always-pin’ to set a default.
-
- If you want to manually keep a package updated and ignore upstream
-updates, you can pin it to ‘manual’, which as long as there is no
-repository by that name, will Just Work(tm).
-
- ‘use-package’ throws an error if you try to pin a package to an
-archive that has not been configured using ‘package-archives’ (apart
-from the magic ‘manual’ archive mentioned above):
-
- Archive 'foo' requested for package 'bar' is not available.
-
- Example:
-
- (use-package company
- :ensure t
- :pin melpa-stable)
-
- (use-package evil
- :ensure t)
- ;; no :pin needed, as package.el will choose the version in melpa
-
- (use-package adaptive-wrap
- :ensure t
- ;; as this package is available only in the gnu archive, this is
- ;; technically not needed, but it helps to highlight where it
- ;; comes from
- :pin gnu)
-
- (use-package org
- :ensure t
- ;; ignore org-mode from upstream and use a manually installed version
- :pin manual)
-
- *NOTE*: the ‘:pin’ argument has no effect on emacs versions < 24.4.
-
-
-File: use-package.info, Node: hook, Next: if when unless, Prev: ensure pin, Up: Keywords
-
-4.13 ‘:hook’
-============
-
-The ‘:hook’ keyword allows adding functions onto hooks, here only the
-basename of the hook is required. Thus, all of the following are
-equivalent:
-
- (use-package ace-jump-mode
- :hook prog-mode)
-
- (use-package ace-jump-mode
- :hook (prog-mode . ace-jump-mode))
-
- (use-package ace-jump-mode
- :commands ace-jump-mode
- :init
- (add-hook 'prog-mode-hook #'ace-jump-mode))
-
- And likewise, when multiple hooks should be applied, the following
-are also equivalent:
-
- (use-package ace-jump-mode
- :hook (prog-mode text-mode))
-
- (use-package ace-jump-mode
- :hook ((prog-mode text-mode) . ace-jump-mode))
-
- (use-package ace-jump-mode
- :hook ((prog-mode . ace-jump-mode)
- (text-mode . ace-jump-mode)))
-
- (use-package ace-jump-mode
- :commands ace-jump-mode
- :init
- (add-hook 'prog-mode-hook #'ace-jump-mode)
- (add-hook 'text-mode-hook #'ace-jump-mode))
-
- The use of ‘:hook’, as with ‘:bind’, ‘:mode’, ‘:interpreter’, etc.,
-causes the functions being hooked to implicitly be read as ‘:commands’
-(meaning they will establish interactive ‘autoload’ definitions for that
-module, if not already defined as functions), and so ‘:defer t’ is also
-implied by ‘:hook’.
-
-
-File: use-package.info, Node: if when unless, Next: load-path, Prev: hook, Up: Keywords
-
-4.14 ‘:if’, ‘:when’, ‘:unless’
-==============================
-
-You can use the ‘:if’ keyword to predicate the loading and
-initialization of modules.
-
- For example, I only want ‘edit-server’ running for my main, graphical
-Emacs, not for other Emacsen I may start at the command line:
-
- (use-package edit-server
- :if window-system
- :init
- (add-hook 'after-init-hook 'server-start t)
- (add-hook 'after-init-hook 'edit-server-start t))
-
- In another example, we can load things conditional on the operating
-system:
-
- (use-package exec-path-from-shell
- :if (memq window-system '(mac ns))
- :ensure t
- :config
- (exec-path-from-shell-initialize))
-
- Note that ‘:when’ is provided as an alias for ‘:if’, and ‘:unless
-foo’ means the same thing as ‘:if (not foo)’.
-
-
-File: use-package.info, Node: load-path, Next: mode interpreter, Prev: if when unless, Up: Keywords
-
-4.15 ‘:load-path’
-=================
-
-If your package needs a directory added to the ‘load-path’ in order to
-load, use ‘:load-path’. This takes a symbol, a function, a string or a
-list of strings. If the path is relative, it is expanded within
-‘user-emacs-directory’:
-
- (use-package ess-site
- :load-path "site-lisp/ess/lisp/"
- :commands R)
-
- Note that when using a symbol or a function to provide a dynamically
-generated list of paths, you must inform the byte-compiler of this
-definition so the value is available at byte-compilation time. This is
-done by using the special form ‘eval-and-compile’ (as opposed to
-‘eval-when-compile’). Further, this value is fixed at whatever was
-determined during compilation, to avoid looking up the same information
-again on each startup:
-
- (eval-and-compile
- (defun ess-site-load-path ()
- (shell-command "find ~ -path ess/lisp")))
-
- (use-package ess-site
- :load-path (lambda () (list (ess-site-load-path)))
- :commands R)
-
-
-File: use-package.info, Node: mode interpreter, Next: magic magic-fallback, Prev: load-path, Up: Keywords
-
-4.16 ‘:mode’, ‘:interpreter’
-============================
-
-Similar to ‘:bind’, you can use ‘:mode’ and ‘:interpreter’ to establish
-a deferred binding within the ‘auto-mode-alist’ and
-‘interpreter-mode-alist’ variables. The specifier to either keyword can
-be a cons cell, a list of cons cells, or a string or regexp:
-
- (use-package ruby-mode
- :mode "\\.rb\\'"
- :interpreter "ruby")
-
- ;; The package is "python" but the mode is "python-mode":
- (use-package python
- :mode ("\\.py\\'" . python-mode)
- :interpreter ("python" . python-mode))
-
- If you aren’t using ‘:commands’, ‘:bind’, ‘:bind*’, ‘:bind-keymap’,
-‘:bind-keymap*’, ‘:mode’, or ‘:interpreter’ (all of which imply
-‘:defer’; see the docstring for ‘use-package’ for a brief description of
-each), you can still defer loading with the ‘:defer’ keyword:
-
- (use-package ace-jump-mode
- :defer t
- :init
- (autoload 'ace-jump-mode "ace-jump-mode" nil t)
- (bind-key "C-." 'ace-jump-mode))
-
- This does exactly the same thing as the following:
-
- (use-package ace-jump-mode
- :bind ("C-." . ace-jump-mode))
-
-
-File: use-package.info, Node: magic magic-fallback, Next: no-require, Prev: mode interpreter, Up: Keywords
-
-4.17 ‘:magic’, ‘:magic-fallback’
-================================
-
-Similar to ‘:mode‘ and ‘:interpreter‘, you can also use ‘:magic‘ and
-‘:magic-fallback‘ to cause certain function to be run if the beginning
-of a file matches a given regular expression. The difference between
-the two is that ‘:magic-fallback‘ has a lower priority than ‘:mode‘.
-For example:
-
- “‘ elisp (use-package pdf-tools :load-path "site-lisp/pdf-tools/lisp"
-:magic ("%PDF" . pdf-view-mode) :config (pdf-tools-install)) “‘
-
- This registers an autoloaded command for ‘pdf-view-mode‘, defers
-loading of ‘pdf-tools‘, and runs ‘pdf-view-mode‘ if the beginning of a
-buffer matches the string ‘"%PDF"‘.
-
-
-File: use-package.info, Node: no-require, Next: requires, Prev: magic magic-fallback, Up: Keywords
-
-4.18 ‘:no-require’
-==================
-
-Normally, ‘use-package’ will load each package at compile time before
-compiling the configuration, to ensure that any necessary symbols are in
-scope to satisfy the byte-compiler. At times this can cause problems,
-since a package may have special loading requirements, and all that you
-want to use ‘use-package’ for is to add a configuration to the
-‘eval-after-load’ hook. In such cases, use the ‘:no-require’ keyword:
-
- (use-package foo
- :no-require t
- :config
- (message "This is evaluated when `foo' is loaded"))
-
-
-File: use-package.info, Node: requires, Prev: no-require, Up: Keywords
-
-4.19 ‘:requires’
-================
-
-While the ‘:after’ keyword delays loading until the dependencies are
-loaded, the somewhat simpler ‘:requires’ keyword simply never loads the
-package if the dependencies are not available at the time the
-‘use-package’ declaration is encountered. By "available" in this
-context it means that ‘foo’ is available of ‘(featurep 'foo)’ evaluates
-to a non-nil value. For example:
-
- (use-package abbrev
- :requires foo)
-
- This is the same as:
-
- (use-package abbrev
- :if (featurep 'foo))
-
- As a convenience, a list of such packages may be specified:
-
- (use-package abbrev
- :requires (foo bar baz))
-
- For more complex logic, such as that supported by ‘:after’, simply
-use ‘:if’ and the appropriate Lisp expression.
-
-
-File: use-package.info, Node: FAQ, Next: Debugging Tools, Prev: Keywords, Up: Top
-
-Appendix A FAQ
-**************
-
-The next two nodes lists frequently asked questions.
-
- Please also use the *note Debugging Tools::.
-
-* Menu:
-
-* FAQ - How to ...?::
-* FAQ - Issues and Errors::
-
-
-File: use-package.info, Node: FAQ - How to ...?, Next: FAQ - Issues and Errors, Up: FAQ
-
-A.1 FAQ - How to ...?
-=====================
-
-* Menu:
-
-* This is a question::
-
-
-File: use-package.info, Node: This is a question, Up: FAQ - How to ...?
-
-A.1.1 This is a question
-------------------------
-
-This is an answer.
-
-
-File: use-package.info, Node: FAQ - Issues and Errors, Prev: FAQ - How to ...?, Up: FAQ
-
-A.2 FAQ - Issues and Errors
-===========================
-
-* Menu:
-
-* This is an issues::
-
-
-File: use-package.info, Node: This is an issues, Up: FAQ - Issues and Errors
-
-A.2.1 This is an issues
------------------------
-
-This is a description.
-
-
-File: use-package.info, Node: Debugging Tools, Next: Command Index, Prev: FAQ, Up: Top
-
-B Debugging Tools
-*****************
-
-TODO
-
- Please also see the *note FAQ::.
-
-
-File: use-package.info, Node: Command Index, Next: Function Index, Prev: Debugging Tools, Up: Top
-
-Appendix C Command Index
-************************
-
-
-File: use-package.info, Node: Function Index, Next: Variable Index, Prev: Command Index, Up: Top
-
-Appendix D Function Index
-*************************
-
-
-File: use-package.info, Node: Variable Index, Prev: Function Index, Up: Top
-
-Appendix E Variable Index
-*************************
-
-
-
-Tag Table:
-Node: Top784
-Node: Introduction2819
-Node: Installation3306
-Node: Installing from an Elpa Archive3658
-Node: Installing from the Git Repository4773
-Node: Post-Installation Tasks6309
-Node: Getting Started7022
-Node: Keywords7194
-Node: after8113
-Node: bind-keymap bind-keymap*9645
-Node: bind bind*10698
-Node: Binding to local keymaps12738
-Node: commands13829
-Node: preface init config13971
-Node: custom16049
-Node: custom-face16489
-Node: defer demand16809
-Node: defines functions17621
-Node: diminish delight18766
-Node: disabled20709
-Node: ensure pin21204
-Node: hook23934
-Node: if when unless25352
-Node: load-path26298
-Node: mode interpreter27444
-Node: magic magic-fallback28755
-Node: no-require29600
-Node: requires30304
-Node: FAQ31191
-Node: FAQ - How to ...?31474
-Node: This is a question31646
-Node: FAQ - Issues and Errors31794
-Node: This is an issues31977
-Node: Debugging Tools32132
-Node: Command Index32306
-Node: Function Index32462
-Node: Variable Index32619
-
-End Tag Table
-
-
-Local Variables:
-coding: utf-8
-End:
diff --git a/emacs.d/elpa/xref-1.1.0.signed b/emacs.d/elpa/xref-1.1.0.signed
deleted file mode 100644
index f4efdd2..0000000
--- a/emacs.d/elpa/xref-1.1.0.signed
+++ /dev/null
@@ -1 +0,0 @@
-Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2021-04-29T12:05:02+0300 using RSA \ No newline at end of file
diff --git a/emacs.d/elpa/xref-1.1.0/xref-autoloads.el b/emacs.d/elpa/xref-1.1.0/xref-autoloads.el
deleted file mode 100644
index 9cf959d..0000000
--- a/emacs.d/elpa/xref-1.1.0/xref-autoloads.el
+++ /dev/null
@@ -1,110 +0,0 @@
-;;; xref-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "xref" "xref.el" (0 0 0 0))
-;;; Generated autoloads from xref.el
-
-(autoload 'xref-find-backend "xref" nil nil nil)
-
-(autoload 'xref-pop-marker-stack "xref" "\
-Pop back to where \\[xref-find-definitions] was last invoked." t nil)
-
-(autoload 'xref-marker-stack-empty-p "xref" "\
-Return t if the marker stack is empty; nil otherwise." nil nil)
-
-(autoload 'xref-find-definitions "xref" "\
-Find the definition of the identifier at point.
-With prefix argument or when there's no identifier at point,
-prompt for it.
-
-If sufficient information is available to determine a unique
-definition for IDENTIFIER, display it in the selected window.
-Otherwise, display the list of the possible definitions in a
-buffer where the user can select from the list.
-
-\(fn IDENTIFIER)" t nil)
-
-(autoload 'xref-find-definitions-other-window "xref" "\
-Like `xref-find-definitions' but switch to the other window.
-
-\(fn IDENTIFIER)" t nil)
-
-(autoload 'xref-find-definitions-other-frame "xref" "\
-Like `xref-find-definitions' but switch to the other frame.
-
-\(fn IDENTIFIER)" t nil)
-
-(autoload 'xref-find-references "xref" "\
-Find references to the identifier at point.
-This command might prompt for the identifier as needed, perhaps
-offering the symbol at point as the default.
-With prefix argument, or if `xref-prompt-for-identifier' is t,
-always prompt for the identifier. If `xref-prompt-for-identifier'
-is nil, prompt only if there's no usable symbol at point.
-
-\(fn IDENTIFIER)" t nil)
-
-(autoload 'xref-find-definitions-at-mouse "xref" "\
-Find the definition of identifier at or around mouse click.
-This command is intended to be bound to a mouse event.
-
-\(fn EVENT)" t nil)
-
-(autoload 'xref-find-apropos "xref" "\
-Find all meaningful symbols that match PATTERN.
-The argument has the same meaning as in `apropos'.
-
-\(fn PATTERN)" t nil)
- (define-key esc-map "." #'xref-find-definitions)
- (define-key esc-map "," #'xref-pop-marker-stack)
- (define-key esc-map "?" #'xref-find-references)
- (define-key esc-map [?\C-.] #'xref-find-apropos)
- (define-key ctl-x-4-map "." #'xref-find-definitions-other-window)
- (define-key ctl-x-5-map "." #'xref-find-definitions-other-frame)
-
-(autoload 'xref-references-in-directory "xref" "\
-Find all references to SYMBOL in directory DIR.
-Return a list of xref values.
-
-This function uses the Semantic Symbol Reference API, see
-`semantic-symref-tool-alist' for details on which tools are used,
-and when.
-
-\(fn SYMBOL DIR)" nil nil)
-
-(autoload 'xref-matches-in-directory "xref" "\
-Find all matches for REGEXP in directory DIR.
-Return a list of xref values.
-Only files matching some of FILES and none of IGNORES are searched.
-FILES is a string with glob patterns separated by spaces.
-IGNORES is a list of glob patterns for files to ignore.
-
-\(fn REGEXP FILES DIR IGNORES)" nil nil)
-
-(autoload 'xref-matches-in-files "xref" "\
-Find all matches for REGEXP in FILES.
-Return a list of xref values.
-FILES must be a list of absolute file names.
-
-\(fn REGEXP FILES)" nil nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xref" '("xref-")))
-
-;;;***
-
-;;;### (autoloads nil nil ("xref-pkg.el") (0 0 0 0))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; xref-autoloads.el ends here
diff --git a/emacs.d/elpa/xref-1.1.0/xref-pkg.el b/emacs.d/elpa/xref-1.1.0/xref-pkg.el
deleted file mode 100644
index a51b51b..0000000
--- a/emacs.d/elpa/xref-1.1.0/xref-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;; Generated package description from xref.el -*- no-byte-compile: t -*-
-(define-package "xref" "1.1.0" "Cross-referencing commands" '((emacs "26.1")) :url "https://elpa.gnu.org/packages/xref.html")
diff --git a/emacs.d/elpa/xref-1.1.0/xref.el b/emacs.d/elpa/xref-1.1.0/xref.el
deleted file mode 100644
index 7fc7181..0000000
--- a/emacs.d/elpa/xref-1.1.0/xref.el
+++ /dev/null
@@ -1,1744 +0,0 @@
-;;; xref.el --- Cross-referencing commands -*-lexical-binding:t-*-
-
-;; Copyright (C) 2014-2021 Free Software Foundation, Inc.
-;; Version: 1.1.0
-;; Package-Requires: ((emacs "26.1"))
-
-;; This is a GNU ELPA :core package. Avoid functionality that is not
-;; compatible with the version of Emacs recorded above.
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This file provides a somewhat generic infrastructure for cross
-;; referencing commands, in particular "find-definition".
-;;
-;; Some part of the functionality must be implemented in a language
-;; dependent way and that's done by defining an xref backend.
-;;
-;; That consists of a constructor function, which should return a
-;; backend value, and a set of implementations for the generic
-;; functions:
-;;
-;; `xref-backend-identifier-at-point',
-;; `xref-backend-identifier-completion-table',
-;; `xref-backend-definitions', `xref-backend-references',
-;; `xref-backend-apropos', which see.
-;;
-;; A major mode would normally use `add-hook' to add the backend
-;; constructor to `xref-backend-functions'.
-;;
-;; The last three methods operate with "xref" and "location" values.
-;;
-;; One would usually call `make-xref' and `xref-make-file-location',
-;; `xref-make-buffer-location' or `xref-make-bogus-location' to create
-;; them. More generally, a location must be an instance of an EIEIO
-;; class inheriting from `xref-location' and implementing
-;; `xref-location-group' and `xref-location-marker'.
-;;
-;; There's a special kind of xrefs we call "match xrefs", which
-;; correspond to search results. For these values,
-;; `xref-match-length' must be defined, and `xref-location-marker'
-;; must return the beginning of the match.
-;;
-;; Each identifier must be represented as a string. Implementers can
-;; use string properties to store additional information about the
-;; identifier, but they should keep in mind that values returned from
-;; `xref-backend-identifier-completion-table' should still be
-;; distinct, because the user can't see the properties when making the
-;; choice.
-;;
-;; See the etags and elisp-mode implementations for full examples.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'eieio)
-(require 'ring)
-(require 'project)
-
-(defgroup xref nil "Cross-referencing commands"
- :version "25.1"
- :group 'tools)
-
-
-;;; Locations
-
-(defclass xref-location () ()
- :documentation "A location represents a position in a file or buffer.")
-
-(cl-defgeneric xref-location-marker (location)
- "Return the marker for LOCATION.")
-
-(cl-defgeneric xref-location-group (location)
- "Return a string used to group a set of locations.
-This is typically the filename.")
-
-(cl-defgeneric xref-location-line (_location)
- "Return the line number corresponding to the location."
- nil)
-
-(cl-defgeneric xref-match-length (_item)
- "Return the length of the match."
- nil)
-
-;;;; Commonly needed location classes are defined here:
-
-(defcustom xref-file-name-display 'project-relative
- "Style of file name display in *xref* buffers.
-
-If the value is the symbol `abs', the default, show the file names
-in their full absolute form.
-
-If `nondirectory', show only the nondirectory (a.k.a. \"base name\")
-part of the file name.
-
-If `project-relative', show only the file name relative to the
-current project root. If there is no current project, or if the
-file resides outside of its root, show that particular file name
-in its full absolute form."
- :type '(choice (const :tag "absolute file name" abs)
- (const :tag "nondirectory file name" nondirectory)
- (const :tag "relative to project root" project-relative))
- :version "27.1")
-
-;; FIXME: might be useful to have an optional "hint" i.e. a string to
-;; search for in case the line number is slightly out of date.
-(defclass xref-file-location (xref-location)
- ((file :type string :initarg :file)
- (line :type fixnum :initarg :line :reader xref-location-line)
- (column :type fixnum :initarg :column :reader xref-file-location-column))
- :documentation "A file location is a file/line/column triple.
-Line numbers start from 1 and columns from 0.")
-
-(defun xref-make-file-location (file line column)
- "Create and return a new `xref-file-location'."
- (make-instance 'xref-file-location :file file :line line :column column))
-
-(cl-defmethod xref-location-marker ((l xref-file-location))
- (with-slots (file line column) l
- (with-current-buffer
- (or (get-file-buffer file)
- (let ((find-file-suppress-same-file-warnings t))
- (find-file-noselect file)))
- (save-restriction
- (widen)
- (save-excursion
- (goto-char (point-min))
- (ignore-errors
- ;; xref location may be out of date; it may be past the
- ;; end of the current file, or the file may have been
- ;; deleted. Return a reasonable location; the user will
- ;; figure it out.
- (beginning-of-line line)
- (forward-char column))
- (point-marker))))))
-
-(defvar xref--project-root-memo nil
- "Cons mapping `default-directory' value to the search root.")
-
-(cl-defmethod xref-location-group ((l xref-file-location))
- (cl-ecase xref-file-name-display
- (abs
- (oref l file))
- (nondirectory
- (file-name-nondirectory (oref l file)))
- (project-relative
- (unless (and xref--project-root-memo
- (equal (car xref--project-root-memo)
- default-directory))
- (setq xref--project-root-memo
- (cons default-directory
- (let ((root
- (let ((pr (project-current)))
- (and pr (xref--project-root pr)))))
- (and root (expand-file-name root))))))
- (let ((file (oref l file))
- (search-root (cdr xref--project-root-memo)))
- (if (and search-root
- (string-prefix-p search-root file))
- (substring file (length search-root))
- file)))))
-
-(defclass xref-buffer-location (xref-location)
- ((buffer :type buffer :initarg :buffer)
- (position :type fixnum :initarg :position)))
-
-(defun xref-make-buffer-location (buffer position)
- "Create and return a new `xref-buffer-location'."
- (make-instance 'xref-buffer-location :buffer buffer :position position))
-
-(cl-defmethod xref-location-marker ((l xref-buffer-location))
- (with-slots (buffer position) l
- (let ((m (make-marker)))
- (move-marker m position buffer))))
-
-(cl-defmethod xref-location-group ((l xref-buffer-location))
- (with-slots (buffer) l
- (or (buffer-file-name buffer)
- (format "(buffer %s)" (buffer-name buffer)))))
-
-(defclass xref-bogus-location (xref-location)
- ((message :type string :initarg :message
- :reader xref-bogus-location-message))
- :documentation "Bogus locations are sometimes useful to
-indicate errors, e.g. when we know that a function exists but the
-actual location is not known.")
-
-(defun xref-make-bogus-location (message)
- "Create and return a new `xref-bogus-location'."
- (make-instance 'xref-bogus-location :message message))
-
-(cl-defmethod xref-location-marker ((l xref-bogus-location))
- (user-error "%s" (oref l message)))
-
-(cl-defmethod xref-location-group ((_ xref-bogus-location)) "(No location)")
-
-
-;;; Cross-reference
-
-(defclass xref-item ()
- ((summary :type string :initarg :summary
- :reader xref-item-summary
- :documentation "One line which will be displayed for
-this item in the output buffer.")
- (location :initarg :location
- :reader xref-item-location
- :documentation "An object describing how to navigate
-to the reference's target."))
- :comment "An xref item describes a reference to a location
-somewhere.")
-
-(defun xref-make (summary location)
- "Create and return a new `xref-item'.
-SUMMARY is a short string to describe the xref.
-LOCATION is an `xref-location'."
- (make-instance 'xref-item :summary summary :location location))
-
-(defclass xref-match-item ()
- ((summary :type string :initarg :summary
- :reader xref-item-summary)
- (location :initarg :location
- :type xref-file-location
- :reader xref-item-location)
- (length :initarg :length :reader xref-match-length))
- :comment "A match xref item describes a search result.")
-
-(defun xref-make-match (summary location length)
- "Create and return a new `xref-match-item'.
-SUMMARY is a short string to describe the xref.
-LOCATION is an `xref-location'.
-LENGTH is the match length, in characters."
- (make-instance 'xref-match-item :summary summary
- :location location :length length))
-
-
-;;; API
-
-(defvar xref-backend-functions nil
- "Special hook to find the xref backend for the current context.
-Each function on this hook is called in turn with no arguments,
-and should return either nil to mean that it is not applicable,
-or an xref backend, which is a value to be used to dispatch the
-generic functions.")
-
-;; We make the etags backend the default for now, until something
-;; better comes along. Use APPEND so that any `add-hook' calls made
-;; before this package is loaded put new items before this one.
-(add-hook 'xref-backend-functions #'etags--xref-backend t)
-
-;;;###autoload
-(defun xref-find-backend ()
- (run-hook-with-args-until-success 'xref-backend-functions))
-
-(cl-defgeneric xref-backend-definitions (backend identifier)
- "Find definitions of IDENTIFIER.
-
-The result must be a list of xref objects. If IDENTIFIER
-contains sufficient information to determine a unique definition,
-return only that definition. If there are multiple possible
-definitions, return all of them. If no definitions can be found,
-return nil.
-
-IDENTIFIER can be any string returned by
-`xref-backend-identifier-at-point', or from the table returned by
-`xref-backend-identifier-completion-table'.
-
-To create an xref object, call `xref-make'.")
-
-(cl-defgeneric xref-backend-references (_backend identifier)
- "Find references of IDENTIFIER.
-The result must be a list of xref objects. If no references can
-be found, return nil.
-
-The default implementation uses `semantic-symref-tool-alist' to
-find a search tool; by default, this uses \"find | grep\" in the
-current project's main and external roots."
- (mapcan
- (lambda (dir)
- (xref-references-in-directory identifier dir))
- (let ((pr (project-current t)))
- (cons
- (xref--project-root pr)
- (project-external-roots pr)))))
-
-(cl-defgeneric xref-backend-apropos (backend pattern)
- "Find all symbols that match PATTERN string.
-The second argument has the same meaning as in `apropos'.
-
-If BACKEND is implemented in Lisp, it can use
-`xref-apropos-regexp' to convert the pattern to regexp.")
-
-(cl-defgeneric xref-backend-identifier-at-point (_backend)
- "Return the relevant identifier at point.
-
-The return value must be a string, or nil meaning no identifier
-at point found.
-
-If it's hard to determine the identifier precisely (e.g., because
-it's a method call on unknown type), the implementation can
-return a simple string (such as symbol at point) marked with a
-special text property which e.g. `xref-backend-definitions' would
-recognize and then delegate the work to an external process."
- (let ((thing (thing-at-point 'symbol)))
- (and thing (substring-no-properties thing))))
-
-(cl-defgeneric xref-backend-identifier-completion-table (backend)
- "Return the completion table for identifiers.")
-
-(cl-defgeneric xref-backend-identifier-completion-ignore-case (_backend)
- "Return t if case is not significant in identifier completion."
- completion-ignore-case)
-
-
-;;; misc utilities
-(defun xref--alistify (list key test)
- "Partition the elements of LIST into an alist.
-KEY extracts the key from an element and TEST is used to compare
-keys."
- (let ((alist '()))
- (dolist (e list)
- (let* ((k (funcall key e))
- (probe (cl-assoc k alist :test test)))
- (if probe
- (setcdr probe (cons e (cdr probe)))
- (push (cons k (list e)) alist))))
- ;; Put them back in order.
- (cl-loop for (key . value) in (reverse alist)
- collect (cons key (reverse value)))))
-
-(defun xref--insert-propertized (props &rest strings)
- "Insert STRINGS with text properties PROPS."
- (let ((start (point)))
- (apply #'insert strings)
- (add-text-properties start (point) props)))
-
-(defun xref--search-property (property &optional backward)
- "Search the next text range where text property PROPERTY is non-nil.
-Return the value of PROPERTY. If BACKWARD is non-nil, search
-backward."
- (let ((next (if backward
- #'previous-single-char-property-change
- #'next-single-char-property-change))
- (start (point))
- (value nil))
- (while (progn
- (goto-char (funcall next (point) property))
- (not (or (setq value (get-text-property (point) property))
- (eobp)
- (bobp)))))
- (cond (value)
- (t (goto-char start) nil))))
-
-
-;;; Marker stack (M-. pushes, M-, pops)
-
-(defcustom xref-marker-ring-length 16
- "Length of the xref marker ring.
-If this variable is not set through Customize, you must call
-`xref-set-marker-ring-length' for changes to take effect."
- :type 'integer
- :initialize #'custom-initialize-default
- :set #'xref-set-marker-ring-length)
-
-(defcustom xref-prompt-for-identifier '(not xref-find-definitions
- xref-find-definitions-other-window
- xref-find-definitions-other-frame)
- "If non-nil, prompt for the identifier to find.
-
-When t, always prompt for the identifier name.
-
-When nil, prompt only when there's no value at point we can use,
-or when the command has been called with the prefix argument.
-
-Otherwise, it's a list of xref commands which will always prompt,
-with the identifier at point, if any, used as the default.
-If the list starts with `not', the meaning of the rest of the
-elements is negated: these commands will NOT prompt."
- :type '(choice (const :tag "Always prompt for identifier" t)
- (const :tag "Prompt if no identifier at point" nil)
- (set :menu-tag "Prompt according to command"
- :tag "Prompt according to command"
- :value (not)
- (const :tag "Except for commands listed below" not)
- (repeat :inline t (symbol :tag "command")))))
-
-(defcustom xref-after-jump-hook '(recenter
- xref-pulse-momentarily)
- "Functions called after jumping to an xref."
- :type 'hook)
-
-(defcustom xref-after-return-hook '(xref-pulse-momentarily)
- "Functions called after returning to a pre-jump location."
- :type 'hook)
-
-(defcustom xref-after-update-hook nil
- "Functions called after the xref buffer is updated."
- :type 'hook
- :version "28.1"
- :package-version '(xref . "1.0.4"))
-
-(defvar xref--marker-ring (make-ring xref-marker-ring-length)
- "Ring of markers to implement the marker stack.")
-
-(defun xref-set-marker-ring-length (var val)
- "Set `xref-marker-ring-length'.
-VAR is the symbol `xref-marker-ring-length' and VAL is the new
-value."
- (set-default var val)
- (if (ring-p xref--marker-ring)
- (ring-resize xref--marker-ring val)))
-
-(defun xref-push-marker-stack (&optional m)
- "Add point M (defaults to `point-marker') to the marker stack."
- (ring-insert xref--marker-ring (or m (point-marker))))
-
-;;;###autoload
-(defun xref-pop-marker-stack ()
- "Pop back to where \\[xref-find-definitions] was last invoked."
- (interactive)
- (let ((ring xref--marker-ring))
- (when (ring-empty-p ring)
- (user-error "Marker stack is empty"))
- (let ((marker (ring-remove ring 0)))
- (switch-to-buffer (or (marker-buffer marker)
- (user-error "The marked buffer has been deleted")))
- (goto-char (marker-position marker))
- (set-marker marker nil nil)
- (run-hooks 'xref-after-return-hook))))
-
-(defvar xref--current-item nil)
-
-(defun xref-pulse-momentarily ()
- (pcase-let ((`(,beg . ,end)
- (save-excursion
- (or
- (let ((length (xref-match-length xref--current-item)))
- (and length (cons (point) (+ (point) length))))
- (back-to-indentation)
- (if (eolp)
- (cons (line-beginning-position) (1+ (point)))
- (cons (point) (line-end-position)))))))
- (pulse-momentary-highlight-region beg end 'next-error)))
-
-;; etags.el needs this
-(defun xref-clear-marker-stack ()
- "Discard all markers from the marker stack."
- (let ((ring xref--marker-ring))
- (while (not (ring-empty-p ring))
- (let ((marker (ring-remove ring)))
- (set-marker marker nil nil)))))
-
-;;;###autoload
-(defun xref-marker-stack-empty-p ()
- "Return t if the marker stack is empty; nil otherwise."
- (ring-empty-p xref--marker-ring))
-
-
-
-(defun xref--goto-char (pos)
- (cond
- ((and (<= (point-min) pos) (<= pos (point-max))))
- (widen-automatically (widen))
- (t (user-error "Position is outside accessible part of buffer")))
- (goto-char pos))
-
-(defun xref--goto-location (location)
- "Set buffer and point according to xref-location LOCATION."
- (let ((marker (xref-location-marker location)))
- (set-buffer (marker-buffer marker))
- (xref--goto-char marker)))
-
-(defun xref-pop-to-location (item &optional action)
- "Go to the location of ITEM and display the buffer.
-ACTION controls how the buffer is displayed:
- nil -- switch-to-buffer
- `window' -- pop-to-buffer (other window)
- `frame' -- pop-to-buffer (other frame)
-If SELECT is non-nil, select the target window."
- (let* ((marker (save-excursion
- (xref-location-marker (xref-item-location item))))
- (buf (marker-buffer marker)))
- (cl-ecase action
- ((nil) (switch-to-buffer buf))
- (window (pop-to-buffer buf t))
- (frame (let ((pop-up-frames t)) (pop-to-buffer buf t))))
- (xref--goto-char marker))
- (let ((xref--current-item item))
- (run-hooks 'xref-after-jump-hook)))
-
-
-;;; XREF buffer (part of the UI)
-
-;; The xref buffer is used to display a set of xrefs.
-(defconst xref-buffer-name "*xref*"
- "The name of the buffer to show xrefs.")
-
-(defface xref-file-header '((t :inherit compilation-info))
- "Face used to highlight file header in the xref buffer."
- :version "27.1")
-
-(defface xref-line-number '((t :inherit compilation-line-number))
- "Face for displaying line numbers in the xref buffer."
- :version "27.1")
-
-(defface xref-match '((t :inherit match))
- "Face used to highlight matches in the xref buffer."
- :version "27.1")
-
-(defmacro xref--with-dedicated-window (&rest body)
- `(let* ((xref-w (get-buffer-window xref-buffer-name))
- (xref-w-dedicated (window-dedicated-p xref-w)))
- (unwind-protect
- (progn
- (when xref-w
- (set-window-dedicated-p xref-w 'soft))
- ,@body)
- (when xref-w
- (set-window-dedicated-p xref-w xref-w-dedicated)))))
-
-(defvar-local xref--original-window-intent nil
- "Original window-switching intent before xref buffer creation.")
-
-(defvar-local xref--original-window nil
- "The original window this xref buffer was created from.")
-
-(defvar-local xref--fetcher nil
- "The original function to call to fetch the list of xrefs.")
-
-(defun xref--show-pos-in-buf (pos buf)
- "Goto and display position POS of buffer BUF in a window.
-Honor `xref--original-window-intent', run `xref-after-jump-hook'
-and finally return the window."
- (let* ((pop-up-frames
- (or (eq xref--original-window-intent 'frame)
- pop-up-frames))
- (action
- (cond ((eq xref--original-window-intent 'frame)
- t)
- ((eq xref--original-window-intent 'window)
- `((xref--display-buffer-in-other-window)
- (window . ,xref--original-window)))
- ((and
- (window-live-p xref--original-window)
- (or (not (window-dedicated-p xref--original-window))
- (eq (window-buffer xref--original-window) buf)))
- `((xref--display-buffer-in-window)
- (window . ,xref--original-window))))))
- (with-selected-window (display-buffer buf action)
- (xref--goto-char pos)
- (run-hooks 'xref-after-jump-hook)
- (selected-window))))
-
-(defun xref--display-buffer-in-other-window (buffer alist)
- (let ((window (assoc-default 'window alist)))
- (cl-assert window)
- (xref--with-dedicated-window
- (with-selected-window window
- (display-buffer buffer t)))))
-
-(defun xref--display-buffer-in-window (buffer alist)
- (let ((window (assoc-default 'window alist)))
- (cl-assert window)
- (with-selected-window window
- (display-buffer buffer '(display-buffer-same-window)))))
-
-(defun xref--show-location (location &optional select)
- "Help `xref-show-xref' and `xref-goto-xref' do their job.
-Go to LOCATION and if SELECT is non-nil select its window. If
-SELECT is `quit', also quit the *xref* window."
- (condition-case err
- (let* ((marker (xref-location-marker location))
- (buf (marker-buffer marker))
- (xref-buffer (current-buffer)))
- (cond (select
- (if (eq select 'quit) (quit-window nil nil))
- (select-window
- (with-current-buffer xref-buffer
- (xref--show-pos-in-buf marker buf))))
- (t
- (save-selected-window
- (xref--with-dedicated-window
- (xref--show-pos-in-buf marker buf))))))
- (user-error (message (error-message-string err)))))
-
-(defun xref-show-location-at-point ()
- "Display the source of xref at point in the appropriate window, if any."
- (interactive)
- (let* ((xref (xref--item-at-point))
- (xref--current-item xref))
- (when xref
- (xref--show-location (xref-item-location xref)))))
-
-(defun xref-next-line-no-show ()
- "Move to the next xref but don't display its source."
- (interactive)
- (xref--search-property 'xref-item))
-
-(defun xref-next-line ()
- "Move to the next xref and display its source in the appropriate window."
- (interactive)
- (xref-next-line-no-show)
- (xref-show-location-at-point))
-
-(defun xref-prev-line-no-show ()
- "Move to the previous xref but don't display its source."
- (interactive)
- (xref--search-property 'xref-item t))
-
-(defun xref-prev-line ()
- "Move to the previous xref and display its source in the appropriate window."
- (interactive)
- (xref-prev-line-no-show)
- (xref-show-location-at-point))
-
-(defun xref-next-group ()
- "Move to the first item of the next xref group and display its source."
- (interactive)
- (xref--search-property 'xref-group)
- (xref--search-property 'xref-item)
- (xref-show-location-at-point))
-
-(defun xref-prev-group ()
- "Move to the first item of the previous xref group and display its source."
- (interactive)
- ;; Search for the xref group of the current item, provided that the
- ;; point is not already in an xref group.
- (unless (plist-member (text-properties-at (point)) 'xref-group)
- (xref--search-property 'xref-group t))
- ;; Search for the previous xref group.
- (xref--search-property 'xref-group t)
- (xref--search-property 'xref-item)
- (xref-show-location-at-point))
-
-(defun xref--item-at-point ()
- (get-text-property
- (if (eolp) (1- (point)) (point))
- 'xref-item))
-
-(defun xref-goto-xref (&optional quit)
- "Jump to the xref on the current line and select its window.
-If QUIT is non-nil (interactively, with prefix argument), also
-quit the *xref* buffer."
- (interactive "P")
- (let* ((buffer (current-buffer))
- (xref (or (xref--item-at-point)
- (user-error "No reference at point")))
- (xref--current-item xref))
- (xref--show-location (xref-item-location xref) (if quit 'quit t))
- (if (fboundp 'next-error-found)
- (next-error-found buffer (current-buffer))
- ;; Emacs < 27
- (setq next-error-last-buffer buffer))))
-
-(defun xref-quit-and-goto-xref ()
- "Quit *xref* buffer, then jump to xref on current line."
- (interactive)
- (xref-goto-xref t))
-
-(defun xref-quit-and-pop-marker-stack ()
- "Quit *xref* buffer, then pop the xref marker stack."
- (interactive)
- (quit-window)
- (xref-pop-marker-stack))
-
-(defun xref-query-replace-in-results (from to)
- "Perform interactive replacement of FROM with TO in all displayed xrefs.
-
-This command interactively replaces FROM with TO in the names of the
-references displayed in the current *xref* buffer."
- (interactive
- (let ((fr (read-regexp "Xref query-replace (regexp)" ".*")))
- (list fr
- (read-regexp (format "Xref query-replace (regexp) %s with: " fr)))))
- (let* (item xrefs iter)
- (save-excursion
- (while (setq item (xref--search-property 'xref-item))
- (when (xref-match-length item)
- (push item xrefs))))
- (unwind-protect
- (progn
- (goto-char (point-min))
- (setq iter (xref--buf-pairs-iterator (nreverse xrefs)))
- (xref--query-replace-1 from to iter))
- (funcall iter :cleanup))))
-
-(defun xref--buf-pairs-iterator (xrefs)
- (let (chunk-done item next-pair file-buf pairs all-pairs)
- (lambda (action)
- (pcase action
- (:next
- (when (or xrefs next-pair)
- (setq chunk-done nil)
- (when next-pair
- (setq file-buf (marker-buffer (car next-pair))
- pairs (list next-pair)
- next-pair nil))
- (while (and (not chunk-done)
- (setq item (pop xrefs)))
- (save-excursion
- (let* ((loc (xref-item-location item))
- (beg (xref-location-marker loc))
- (end (move-marker (make-marker)
- (+ beg (xref-match-length item))
- (marker-buffer beg))))
- (let ((pair (cons beg end)))
- (push pair all-pairs)
- ;; Perform sanity check first.
- (xref--goto-location loc)
- (if (xref--outdated-p item)
- (message "Search result out of date, skipping")
- (cond
- ((null file-buf)
- (setq file-buf (marker-buffer beg))
- (push pair pairs))
- ((equal file-buf (marker-buffer beg))
- (push pair pairs))
- (t
- (setq chunk-done t
- next-pair pair))))))))
- (cons file-buf (nreverse pairs))))
- (:cleanup
- (dolist (pair all-pairs)
- (move-marker (car pair) nil)
- (move-marker (cdr pair) nil)))))))
-
-(defun xref--outdated-p (item)
- "Check that the match location at current position is up-to-date.
-ITEMS is an xref item which "
- ;; FIXME: The check should most likely be a generic function instead
- ;; of the assumption that all matches' summaries relate to the
- ;; buffer text in a particular way.
- (let* ((summary (xref-item-summary item))
- ;; Sometimes buffer contents include ^M, and sometimes Grep
- ;; output includes it, and they don't always match.
- (strip (lambda (s) (if (string-match "\r\\'" s)
- (substring-no-properties s 0 -1)
- s)))
- (stripped-summary (funcall strip summary))
- (lendpos (line-end-position))
- (check (lambda ()
- (let ((comparison-end
- (+ (point) (length stripped-summary))))
- (and (>= lendpos comparison-end)
- (equal stripped-summary
- (buffer-substring-no-properties
- (point) comparison-end)))))))
- (not
- (or
- ;; Either summary contains match text and after
- ;; (2nd+ match on the line)...
- (funcall check)
- ;; ...or it starts at bol, includes the match and after.
- (and (< (point) (+ (line-beginning-position)
- (length stripped-summary)))
- (save-excursion
- (forward-line 0)
- (funcall check)))))))
-
-;; FIXME: Write a nicer UI.
-(defun xref--query-replace-1 (from to iter)
- (let* ((query-replace-lazy-highlight nil)
- (continue t)
- did-it-once buf-pairs pairs
- current-beg current-end
- ;; Counteract the "do the next match now" hack in
- ;; `perform-replace'. And still, it'll report that those
- ;; matches were "filtered out" at the end.
- (isearch-filter-predicate
- (lambda (beg end)
- (and current-beg
- (>= beg current-beg)
- (<= end current-end))))
- (replace-re-search-function
- (lambda (from &optional _bound noerror)
- (let (found pair)
- (while (and (not found) pairs)
- (setq pair (pop pairs)
- current-beg (car pair)
- current-end (cdr pair))
- (goto-char current-beg)
- (when (re-search-forward from current-end noerror)
- (setq found t)))
- found))))
- (while (and continue (setq buf-pairs (funcall iter :next)))
- (if did-it-once
- ;; Reuse the same window for subsequent buffers.
- (switch-to-buffer (car buf-pairs))
- (xref--with-dedicated-window
- (pop-to-buffer (car buf-pairs)))
- (setq did-it-once t))
- (setq pairs (cdr buf-pairs))
- (setq continue
- (perform-replace from to t t nil nil multi-query-replace-map)))
- (unless did-it-once (user-error "No suitable matches here"))
- (when (and continue (not buf-pairs))
- (message "All results processed"))))
-
-(defvar xref--xref-buffer-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "n") #'xref-next-line)
- (define-key map (kbd "p") #'xref-prev-line)
- (define-key map (kbd "N") #'xref-next-group)
- (define-key map (kbd "P") #'xref-prev-group)
- (define-key map (kbd "r") #'xref-query-replace-in-results)
- (define-key map (kbd "RET") #'xref-goto-xref)
- (define-key map (kbd "TAB") #'xref-quit-and-goto-xref)
- (define-key map (kbd "C-o") #'xref-show-location-at-point)
- ;; suggested by Johan Claesson "to further reduce finger movement":
- (define-key map (kbd ".") #'xref-next-line)
- (define-key map (kbd ",") #'xref-prev-line)
- (define-key map (kbd "g") #'xref-revert-buffer)
- (define-key map (kbd "M-,") #'xref-quit-and-pop-marker-stack)
- map))
-
-(define-derived-mode xref--xref-buffer-mode special-mode "XREF"
- "Mode for displaying cross-references."
- (setq buffer-read-only t)
- (setq next-error-function #'xref--next-error-function)
- (setq next-error-last-buffer (current-buffer))
- (setq imenu-prev-index-position-function
- #'xref--imenu-prev-index-position)
- (setq imenu-extract-index-name-function
- #'xref--imenu-extract-index-name))
-
-(defvar xref--transient-buffer-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map (kbd "RET") #'xref-quit-and-goto-xref)
- (set-keymap-parent map xref--xref-buffer-mode-map)
- map))
-
-(define-derived-mode xref--transient-buffer-mode
- xref--xref-buffer-mode
- "XREF Transient")
-
-(defun xref--imenu-prev-index-position ()
- "Move point to previous line in `xref' buffer.
-This function is used as a value for
-`imenu-prev-index-position-function'."
- (if (bobp)
- nil
- (xref--search-property 'xref-group t)))
-
-(defun xref--imenu-extract-index-name ()
- "Return imenu name for line at point.
-This function is used as a value for
-`imenu-extract-index-name-function'. Point should be at the
-beginning of the line."
- (buffer-substring-no-properties (line-beginning-position)
- (line-end-position)))
-
-(defun xref--next-error-function (n reset?)
- (when reset?
- (goto-char (point-min)))
- (let ((backward (< n 0))
- (n (abs n))
- (xref nil))
- (if (= n 0)
- (setq xref (get-text-property (point) 'xref-item))
- (dotimes (_ n)
- (setq xref (xref--search-property 'xref-item backward))))
- (cond (xref
- ;; Save the current position (when the buffer is visible,
- ;; it gets reset to that window's point from time to time).
- (let ((win (get-buffer-window (current-buffer))))
- (and win (set-window-point win (point))))
- (xref--show-location (xref-item-location xref) t))
- (t
- (error "No %s xref" (if backward "previous" "next"))))))
-
-(defvar xref--button-map
- (let ((map (make-sparse-keymap)))
- (define-key map [mouse-1] #'xref-goto-xref)
- (define-key map [mouse-2] #'xref--mouse-2)
- map))
-
-(defun xref--mouse-2 (event)
- "Move point to the button and show the xref definition."
- (interactive "e")
- (mouse-set-point event)
- (forward-line 0)
- (or (get-text-property (point) 'xref-item)
- (xref--search-property 'xref-item))
- (xref-show-location-at-point))
-
-(defun xref--insert-xrefs (xref-alist)
- "Insert XREF-ALIST in the current-buffer.
-XREF-ALIST is of the form ((GROUP . (XREF ...)) ...), where
-GROUP is a string for decoration purposes and XREF is an
-`xref-item' object."
- (require 'compile) ; For the compilation faces.
- (cl-loop for ((group . xrefs) . more1) on xref-alist
- for max-line-width =
- (cl-loop for xref in xrefs
- maximize (let ((line (xref-location-line
- (oref xref location))))
- (length (and line (format "%d" line)))))
- for line-format = (and max-line-width
- (format "%%%dd: " max-line-width))
- with prev-group = nil
- with prev-line = nil
- do
- (xref--insert-propertized '(face xref-file-header xref-group t)
- group "\n")
- (cl-loop for (xref . more2) on xrefs do
- (with-slots (summary location) xref
- (let* ((line (xref-location-line location))
- (prefix
- (cond
- ((not line) " ")
- ((equal line prev-line) "")
- (t (propertize (format line-format line)
- 'face 'xref-line-number)))))
- ;; Render multiple matches on the same line, together.
- (when (and (equal prev-group group)
- (not (equal prev-line line)))
- (insert "\n"))
- (xref--insert-propertized
- (list 'xref-item xref
- 'mouse-face 'highlight
- 'keymap xref--button-map
- 'help-echo
- (concat "mouse-2: display in another window, "
- "RET or mouse-1: follow reference"))
- prefix summary)
- (setq prev-line line
- prev-group group))))
- (insert "\n"))
- (run-hooks 'xref-after-update-hook))
-
-(defun xref--analyze (xrefs)
- "Find common filenames in XREFS.
-Return an alist of the form ((FILENAME . (XREF ...)) ...)."
- (xref--alistify xrefs
- (lambda (x)
- (xref-location-group (xref-item-location x)))
- #'equal))
-
-(defun xref--show-xref-buffer (fetcher alist)
- (cl-assert (functionp fetcher))
- (let* ((xrefs
- (or
- (assoc-default 'fetched-xrefs alist)
- (funcall fetcher)))
- (xref-alist (xref--analyze xrefs))
- (dd default-directory))
- (with-current-buffer (get-buffer-create xref-buffer-name)
- (setq default-directory dd)
- (xref--xref-buffer-mode)
- (xref--show-common-initialize xref-alist fetcher alist)
- (pop-to-buffer (current-buffer))
- (current-buffer))))
-
-(defun xref--project-root (project)
- (if (fboundp 'project-root)
- (project-root project)
- (with-no-warnings
- (car (project-roots project)))))
-
-(defun xref--show-common-initialize (xref-alist fetcher alist)
- (setq buffer-undo-list nil)
- (let ((inhibit-read-only t)
- (buffer-undo-list t))
- (erase-buffer)
- (xref--insert-xrefs xref-alist)
- (goto-char (point-min))
- (setq xref--original-window (assoc-default 'window alist)
- xref--original-window-intent (assoc-default 'display-action alist))
- (setq xref--fetcher fetcher)))
-
-(defun xref-revert-buffer ()
- "Refresh the search results in the current buffer."
- (interactive)
- (let ((inhibit-read-only t)
- (buffer-undo-list t))
- (save-excursion
- (condition-case err
- (let ((alist (xref--analyze (funcall xref--fetcher))))
- (erase-buffer)
- (xref--insert-xrefs alist))
- (user-error
- (erase-buffer)
- (insert
- (propertize
- (error-message-string err)
- 'face 'error)))))))
-
-(defun xref-show-definitions-buffer (fetcher alist)
- "Show the definitions list in a regular window.
-
-When only one definition found, jump to it right away instead."
- (let ((xrefs (funcall fetcher)))
- (cond
- ((not (cdr xrefs))
- (xref-pop-to-location (car xrefs)
- (assoc-default 'display-action alist)))
- (t
- (xref--show-xref-buffer fetcher
- (cons (cons 'fetched-xrefs xrefs)
- alist))))))
-
-(define-obsolete-function-alias
- 'xref--show-defs-buffer #'xref-show-definitions-buffer "28.1")
-
-(defun xref-show-definitions-buffer-at-bottom (fetcher alist)
- "Show the definitions list in a window at the bottom.
-
-When there is more than one definition, split the selected window
-and show the list in a small window at the bottom. And use a
-local keymap that binds `RET' to `xref-quit-and-goto-xref'."
- (let* ((xrefs (funcall fetcher))
- (dd default-directory)
- ;; XXX: Make percentage customizable maybe?
- (max-height (/ (window-height) 2))
- (size-fun (lambda (window)
- (fit-window-to-buffer window max-height))))
- (cond
- ((not (cdr xrefs))
- (xref-pop-to-location (car xrefs)
- (assoc-default 'display-action alist)))
- (t
- (with-current-buffer (get-buffer-create xref-buffer-name)
- (setq default-directory dd)
- (xref--transient-buffer-mode)
- (xref--show-common-initialize (xref--analyze xrefs) fetcher alist)
- (pop-to-buffer (current-buffer)
- `(display-buffer-in-direction . ((direction . below)
- (window-height . ,size-fun))))
- (current-buffer))))))
-
-(define-obsolete-function-alias 'xref--show-defs-buffer-at-bottom
- #'xref-show-definitions-buffer-at-bottom "28.1")
-
-(defun xref-show-definitions-completing-read (fetcher alist)
- "Let the user choose the target definition with completion.
-
-When there is more than one definition, let the user choose
-between them by typing in the minibuffer with completion."
- (let* ((xrefs (funcall fetcher))
- (xref-alist (xref--analyze xrefs))
- xref-alist-with-line-info
- xref
- (group-prefix-length
- ;; FIXME: Groups are not always file names, but they often
- ;; are. At least this shouldn't make the other kinds of
- ;; groups look worse.
- (let ((common-prefix (try-completion "" xref-alist)))
- (if (> (length common-prefix) 0)
- (length (file-name-directory common-prefix))
- 0))))
-
- (cl-loop for ((group . xrefs) . more1) on xref-alist
- do
- (cl-loop for (xref . more2) on xrefs do
- (with-slots (summary location) xref
- (let* ((line (xref-location-line location))
- (line-fmt
- (if line
- (format #("%d:" 0 2 (face xref-line-number))
- line)
- ""))
- (group-fmt
- (propertize
- (substring group group-prefix-length)
- 'face 'xref-file-header))
- (candidate
- (format "%s:%s%s" group-fmt line-fmt summary)))
- (push (cons candidate xref) xref-alist-with-line-info)))))
-
- (setq xref (if (not (cdr xrefs))
- (car xrefs)
- (let* ((collection (reverse xref-alist-with-line-info))
- (ctable
- (lambda (string pred action)
- (cond
- ((eq action 'metadata)
- '(metadata . ((category . xref-location))))
- (t
- (complete-with-action action collection string pred)))))
- (def (caar collection)))
- (cdr (assoc (completing-read "Choose definition: "
- ctable nil t
- nil nil
- def)
- collection)))))
-
- (xref-pop-to-location xref (assoc-default 'display-action alist))))
-
-;; TODO: Can delete this alias before Emacs 28's release.
-(define-obsolete-function-alias
- 'xref--show-defs-minibuffer #'xref-show-definitions-completing-read "28.1")
-
-
-(defcustom xref-show-xrefs-function 'xref--show-xref-buffer
- "Function to display a list of search results.
-
-It should accept two arguments: FETCHER and ALIST.
-
-FETCHER is a function of no arguments that returns a list of xref
-values. It must not depend on the current buffer or selected
-window.
-
-ALIST can include, but limited to, the following keys:
-
-WINDOW for the window that was selected before the current
-command was called.
-
-DISPLAY-ACTION indicates where the target location should be
-displayed. The possible values are nil, `window' meaning the
-other window, or `frame' meaning the other frame."
- :type 'function)
-
-(defcustom xref-show-definitions-function 'xref-show-definitions-buffer
- "Function to handle the definition search results.
-
-Accepts the same arguments as `xref-show-xrefs-function'.
-
-Generally, it is expected to jump to the definition if there's
-only one, and otherwise provide some way to choose among the
-definitions."
- :type '(choice
- (const :tag "Show a regular list of locations"
- xref-show-definitions-buffer)
- (const :tag "Show a \"transient\" list at the bottom of the window"
- xref-show-definitions-buffer-at-bottom)
- (const :tag "Choose the definition with completion"
- xref-show-definitions-completing-read)
- (function :tag "Custom function")))
-
-(defvar xref--read-identifier-history nil)
-
-(defvar xref--read-pattern-history nil)
-
-(defun xref--show-xrefs (fetcher display-action &optional _always-show-list)
- (xref--push-markers)
- (unless (functionp fetcher)
- ;; Old convention.
- (let ((xrefs fetcher))
- (setq fetcher
- (lambda ()
- (if (eq xrefs 'called-already)
- (user-error "Refresh is not supported")
- (prog1
- xrefs
- (setq xrefs 'called-already)))))))
- (funcall xref-show-xrefs-function fetcher
- `((window . ,(selected-window))
- (display-action . ,display-action))))
-
-(defun xref--show-defs (xrefs display-action)
- (xref--push-markers)
- (funcall xref-show-definitions-function xrefs
- `((window . ,(selected-window))
- (display-action . ,display-action))))
-
-(defun xref--push-markers ()
- (unless (region-active-p) (push-mark nil t))
- (xref-push-marker-stack))
-
-(defun xref--prompt-p (command)
- (or (eq xref-prompt-for-identifier t)
- (if (eq (car xref-prompt-for-identifier) 'not)
- (not (memq command (cdr xref-prompt-for-identifier)))
- (memq command xref-prompt-for-identifier))))
-
-(defun xref--read-identifier (prompt)
- "Return the identifier at point or read it from the minibuffer."
- (let* ((backend (xref-find-backend))
- (def (xref-backend-identifier-at-point backend))
- (completion-ignore-case
- (xref-backend-identifier-completion-ignore-case backend)))
- (cond ((or current-prefix-arg
- (not def)
- (xref--prompt-p this-command))
- (let ((id
- (completing-read
- (if def
- (format "%s (default %s): "
- (substring prompt 0 (string-match
- "[ :]+\\'" prompt))
- def)
- prompt)
- (xref-backend-identifier-completion-table backend)
- nil nil nil
- 'xref--read-identifier-history def)))
- (if (equal id "")
- (or def (user-error "There is no default identifier"))
- id)))
- (t def))))
-
-
-;;; Commands
-
-(defun xref--find-xrefs (input kind arg display-action)
- (xref--show-xrefs
- (xref--create-fetcher input kind arg)
- display-action))
-
-(defun xref--find-definitions (id display-action)
- (xref--show-defs
- (xref--create-fetcher id 'definitions id)
- display-action))
-
-(defun xref--create-fetcher (input kind arg)
- "Return an xref list fetcher function.
-
-It revisits the saved position and delegates the finding logic to
-the xref backend method indicated by KIND and passes ARG to it."
- (let* ((orig-buffer (current-buffer))
- (orig-position (point))
- (backend (xref-find-backend))
- (method (intern (format "xref-backend-%s" kind))))
- (lambda ()
- (save-excursion
- ;; Xref methods are generally allowed to depend on the text
- ;; around point, not just on their explicit arguments.
- ;;
- ;; There is only so much we can do, however, to recreate that
- ;; context, given that the user is free to change the buffer
- ;; contents freely in the meantime.
- (when (buffer-live-p orig-buffer)
- (set-buffer orig-buffer)
- (ignore-errors (goto-char orig-position)))
- (let ((xrefs (funcall method backend arg)))
- (unless xrefs
- (xref--not-found-error kind input))
- xrefs)))))
-
-(defun xref--not-found-error (kind input)
- (user-error "No %s found for: %s" (symbol-name kind) input))
-
-;;;###autoload
-(defun xref-find-definitions (identifier)
- "Find the definition of the identifier at point.
-With prefix argument or when there's no identifier at point,
-prompt for it.
-
-If sufficient information is available to determine a unique
-definition for IDENTIFIER, display it in the selected window.
-Otherwise, display the list of the possible definitions in a
-buffer where the user can select from the list."
- (interactive (list (xref--read-identifier "Find definitions of: ")))
- (xref--find-definitions identifier nil))
-
-;;;###autoload
-(defun xref-find-definitions-other-window (identifier)
- "Like `xref-find-definitions' but switch to the other window."
- (interactive (list (xref--read-identifier "Find definitions of: ")))
- (xref--find-definitions identifier 'window))
-
-;;;###autoload
-(defun xref-find-definitions-other-frame (identifier)
- "Like `xref-find-definitions' but switch to the other frame."
- (interactive (list (xref--read-identifier "Find definitions of: ")))
- (xref--find-definitions identifier 'frame))
-
-;;;###autoload
-(defun xref-find-references (identifier)
- "Find references to the identifier at point.
-This command might prompt for the identifier as needed, perhaps
-offering the symbol at point as the default.
-With prefix argument, or if `xref-prompt-for-identifier' is t,
-always prompt for the identifier. If `xref-prompt-for-identifier'
-is nil, prompt only if there's no usable symbol at point."
- (interactive (list (xref--read-identifier "Find references of: ")))
- (xref--find-xrefs identifier 'references identifier nil))
-
-;;;###autoload
-(defun xref-find-definitions-at-mouse (event)
- "Find the definition of identifier at or around mouse click.
-This command is intended to be bound to a mouse event."
- (interactive "e")
- (let ((identifier
- (save-excursion
- (mouse-set-point event)
- (xref-backend-identifier-at-point (xref-find-backend)))))
- (if identifier
- (xref-find-definitions identifier)
- (user-error "No identifier here"))))
-
-(declare-function apropos-parse-pattern "apropos" (pattern))
-
-;;;###autoload
-(defun xref-find-apropos (pattern)
- "Find all meaningful symbols that match PATTERN.
-The argument has the same meaning as in `apropos'."
- (interactive (list (read-string
- "Search for pattern (word list or regexp): "
- nil 'xref--read-pattern-history)))
- (require 'apropos)
- (let* ((newpat
- (if (and (version< emacs-version "28.0.50")
- (memq (xref-find-backend) '(elisp etags)))
- ;; Handle backends in older Emacs.
- (xref-apropos-regexp pattern)
- ;; Delegate pattern handling to the backend fully.
- ;; The old way didn't work for "external" backends.
- pattern)))
- (xref--find-xrefs pattern 'apropos newpat nil)))
-
-(defun xref-apropos-regexp (pattern)
- "Return an Emacs regexp from PATTERN similar to `apropos'."
- (apropos-parse-pattern
- (if (string-equal (regexp-quote pattern) pattern)
- ;; Split into words
- (or (split-string pattern "[ \t]+" t)
- (user-error "No word list given"))
- pattern)))
-
-
-;;; Key bindings
-
-;;;###autoload (define-key esc-map "." #'xref-find-definitions)
-;;;###autoload (define-key esc-map "," #'xref-pop-marker-stack)
-;;;###autoload (define-key esc-map "?" #'xref-find-references)
-;;;###autoload (define-key esc-map [?\C-.] #'xref-find-apropos)
-;;;###autoload (define-key ctl-x-4-map "." #'xref-find-definitions-other-window)
-;;;###autoload (define-key ctl-x-5-map "." #'xref-find-definitions-other-frame)
-
-
-;;; Helper functions
-
-(defvar xref-etags-mode--saved nil)
-
-(define-minor-mode xref-etags-mode
- "Minor mode to make xref use etags again.
-
-Certain major modes install their own mechanisms for listing
-identifiers and navigation. Turn this on to undo those settings
-and just use etags."
- :lighter ""
- (if xref-etags-mode
- (progn
- (setq xref-etags-mode--saved xref-backend-functions)
- (kill-local-variable 'xref-backend-functions))
- (setq-local xref-backend-functions xref-etags-mode--saved)))
-
-(declare-function semantic-symref-instantiate "semantic/symref")
-(declare-function semantic-symref-perform-search "semantic/symref")
-(declare-function grep-expand-template "grep")
-(defvar ede-minor-mode) ;; ede.el
-
-;;;###autoload
-(defun xref-references-in-directory (symbol dir)
- "Find all references to SYMBOL in directory DIR.
-Return a list of xref values.
-
-This function uses the Semantic Symbol Reference API, see
-`semantic-symref-tool-alist' for details on which tools are used,
-and when."
- (cl-assert (directory-name-p dir))
- (require 'semantic/symref)
- (defvar semantic-symref-tool)
-
- ;; Some symref backends use `ede-project-root-directory' as the root
- ;; directory for the search, rather than `default-directory'. Since
- ;; the caller has specified `dir', we bind `ede-minor-mode' to nil
- ;; to force the backend to use `default-directory'.
- (let* ((ede-minor-mode nil)
- (default-directory dir)
- ;; FIXME: Remove CScope and Global from the recognized tools?
- ;; The current implementations interpret the symbol search as
- ;; "find all calls to the given function", but not function
- ;; definition. And they return nothing when passed a variable
- ;; name, even a global one.
- (semantic-symref-tool 'detect)
- (case-fold-search nil)
- (inst (semantic-symref-instantiate :searchfor symbol
- :searchtype 'symbol
- :searchscope 'subdirs
- :resulttype 'line-and-text)))
- (xref--convert-hits (semantic-symref-perform-search inst)
- (format "\\_<%s\\_>" (regexp-quote symbol)))))
-
-(define-obsolete-function-alias
- 'xref-collect-references
- #'xref-references-in-directory
- "27.1")
-
-;;;###autoload
-(defun xref-matches-in-directory (regexp files dir ignores)
- "Find all matches for REGEXP in directory DIR.
-Return a list of xref values.
-Only files matching some of FILES and none of IGNORES are searched.
-FILES is a string with glob patterns separated by spaces.
-IGNORES is a list of glob patterns for files to ignore."
- ;; DIR can also be a regular file for now; let's not advertise that.
- (grep-compute-defaults)
- (defvar grep-find-template)
- (defvar grep-highlight-matches)
- (pcase-let*
- ((grep-find-template (replace-regexp-in-string "<C>" "<C> -E"
- grep-find-template t t))
- (grep-highlight-matches nil)
- ;; TODO: Sanitize the regexp to remove Emacs-specific terms,
- ;; so that Grep can search for the "relaxed" version. Can we
- ;; do that reliably enough, without creating false negatives?
- (command (xref--rgrep-command (xref--regexp-to-extended regexp)
- files
- (file-name-as-directory
- (file-name-unquote
- (file-local-name (expand-file-name dir))))
- ignores))
- (def default-directory)
- (buf (get-buffer-create " *xref-grep*"))
- (`(,grep-re ,file-group ,line-group . ,_) (car grep-regexp-alist))
- (status nil)
- (hits nil))
- (with-current-buffer buf
- (erase-buffer)
- (setq default-directory def)
- (setq status
- (process-file-shell-command command nil t))
- (goto-char (point-min))
- ;; Can't use the exit status: Grep exits with 1 to mean "no
- ;; matches found". Find exits with 1 if any of the invocations
- ;; exit with non-zero. "No matches" and "Grep program not found"
- ;; are all the same to it.
- (when (and (/= (point-min) (point-max))
- (not (looking-at grep-re)))
- (user-error "Search failed with status %d: %s" status (buffer-string)))
- (while (re-search-forward grep-re nil t)
- (push (list (string-to-number (match-string line-group))
- (match-string file-group)
- (buffer-substring-no-properties (point) (line-end-position)))
- hits)))
- (xref--convert-hits (nreverse hits) regexp)))
-
-(define-obsolete-function-alias
- 'xref-collect-matches
- #'xref-matches-in-directory
- "27.1")
-
-(declare-function tramp-tramp-file-p "tramp")
-(declare-function tramp-file-local-name "tramp")
-
-;; TODO: Experiment with 'xargs -P4' (or any other number).
-;; This speeds up either command, even more than rg's '-j4' does.
-;; Ripgrep gets jumbled output, though, even with --line-buffered.
-;; But Grep seems to be stable. Even without --line-buffered.
-(defcustom xref-search-program-alist
- '((grep
- .
- ;; '-s' because 'git ls-files' can output broken symlinks.
- "xargs -0 grep <C> -snHE -e <R>")
- (ripgrep
- .
- ;; Note: by default, ripgrep's output order is non-deterministic
- ;; (https://github.com/BurntSushi/ripgrep/issues/152)
- ;; because it does the search in parallel. You can use the template
- ;; without the '| sort ...' part if GNU sort is not available on
- ;; your system and/or stable ordering is not important to you.
- ;; Note#2: '!*/' is there to filter out dirs (e.g. submodules).
- "xargs -0 rg <C> -nH --no-messages -g '!*/' -e <R> | sort -t: -k1,1 -k2n,2"
- ))
- "Associative list mapping program identifiers to command templates.
-
-Program identifier should be a symbol, named after the search program.
-
-The command template must be a shell command (or usually a
-pipeline) that will search the files based on the list of file
-names that is piped from stdin, separated by null characters.
-The template should have the following fields:
-
- <C> for extra arguments such as -i and --color
- <R> for the regexp itself (in Extended format)"
- :type '(repeat
- (cons (symbol :tag "Program identifier")
- (string :tag "Command template")))
- :version "28.1"
- :package-version '(xref . "1.0.4"))
-
-(defcustom xref-search-program 'grep
- "The program to use for regexp search inside files.
-
-This must reference a corresponding entry in `xref-search-program-alist'."
- :type `(choice
- (const :tag "Use Grep" grep)
- (const :tag "Use ripgrep" ripgrep)
- (symbol :tag "User defined"))
- :version "28.1"
- :package-version '(xref . "1.0.4"))
-
-;;;###autoload
-(defun xref-matches-in-files (regexp files)
- "Find all matches for REGEXP in FILES.
-Return a list of xref values.
-FILES must be a list of absolute file names."
- (cl-assert (consp files))
- (require 'grep)
- (defvar grep-highlight-matches)
- (pcase-let*
- ((output (get-buffer-create " *project grep output*"))
- (`(,grep-re ,file-group ,line-group . ,_) (car grep-regexp-alist))
- (status nil)
- (hits nil)
- ;; Support for remote files. The assumption is that, if the
- ;; first file is remote, they all are, and on the same host.
- (dir (file-name-directory (car files)))
- (remote-id (file-remote-p dir))
- ;; The 'auto' default would be fine too, but ripgrep can't handle
- ;; the options we pass in that case.
- (grep-highlight-matches nil)
- (command (grep-expand-template (cdr
- (or
- (assoc
- xref-search-program
- xref-search-program-alist)
- (user-error "Unknown search program `%s'"
- xref-search-program)))
- (xref--regexp-to-extended regexp))))
- (when remote-id
- (require 'tramp)
- (setq files (mapcar
- (if (tramp-tramp-file-p dir)
- #'tramp-file-local-name
- #'file-local-name)
- files)))
- (when (file-name-quoted-p (car files))
- (setq files (mapcar #'file-name-unquote files)))
- (with-current-buffer output
- (erase-buffer)
- (with-temp-buffer
- (insert (mapconcat #'identity files "\0"))
- (setq default-directory dir)
- (setq status
- (xref--process-file-region (point-min)
- (point-max)
- shell-file-name
- output
- nil
- shell-command-switch
- command)))
- (goto-char (point-min))
- (when (and (/= (point-min) (point-max))
- (not (looking-at grep-re))
- ;; TODO: Show these matches as well somehow?
- (not (looking-at "Binary file .* matches")))
- (user-error "Search failed with status %d: %s" status
- (buffer-substring (point-min) (line-end-position))))
- (while (re-search-forward grep-re nil t)
- (push (list (string-to-number (match-string line-group))
- (match-string file-group)
- (buffer-substring-no-properties (point) (line-end-position)))
- hits)))
- (xref--convert-hits (nreverse hits) regexp)))
-
-(defun xref--process-file-region ( start end program
- &optional buffer display
- &rest args)
- ;; FIXME: This branching shouldn't be necessary, but
- ;; call-process-region *is* measurably faster, even for a program
- ;; doing some actual work (for a period of time). Even though
- ;; call-process-region also creates a temp file internally
- ;; (https://lists.gnu.org/archive/html/emacs-devel/2019-01/msg00211.html).
- (if (not (file-remote-p default-directory))
- (apply #'call-process-region
- start end program nil buffer display args)
- (let ((infile (make-temp-file "ppfr")))
- (unwind-protect
- (progn
- (write-region start end infile nil 'silent)
- (apply #'process-file program infile buffer display args))
- (delete-file infile)))))
-
-(defun xref--rgrep-command (regexp files dir ignores)
- (require 'find-dired) ; for `find-name-arg'
- (defvar grep-find-template)
- (defvar find-name-arg)
- ;; `shell-quote-argument' quotes the tilde as well.
- (cl-assert (not (string-match-p "\\`~" dir)))
- (grep-expand-template
- grep-find-template
- regexp
- (concat (shell-quote-argument "(")
- " " find-name-arg " "
- (mapconcat
- #'shell-quote-argument
- (split-string files)
- (concat " -o " find-name-arg " "))
- " "
- (shell-quote-argument ")"))
- (shell-quote-argument dir)
- (xref--find-ignores-arguments ignores dir)))
-
-(defun xref--find-ignores-arguments (ignores dir)
- "Convert IGNORES and DIR to a list of arguments for 'find'.
-IGNORES is a list of glob patterns. DIR is an absolute
-directory, used as the root of the ignore globs."
- (cl-assert (not (string-match-p "\\`~" dir)))
- (if (not ignores)
- ""
- (concat
- (shell-quote-argument "(")
- " -path "
- (mapconcat
- (lambda (ignore)
- (when (string-match-p "/\\'" ignore)
- (setq ignore (concat ignore "*")))
- (shell-quote-argument (if (string-match "\\`\\./" ignore)
- (replace-match dir t t ignore)
- (if (string-prefix-p "*" ignore)
- ignore
- (concat "*/" ignore)))))
- ignores
- " -o -path ")
- " "
- (shell-quote-argument ")")
- " -prune -o ")))
-
-(defun xref--regexp-to-extended (str)
- (replace-regexp-in-string
- ;; FIXME: Add tests. Move to subr.el, make a public function.
- ;; Maybe error on Emacs-only constructs.
- "\\(?:\\\\\\\\\\)*\\(?:\\\\[][]\\)?\\(?:\\[.+?\\]\\|\\(\\\\?[(){}|]\\)\\)"
- (lambda (str)
- (cond
- ((not (match-beginning 1))
- str)
- ((eq (length (match-string 1 str)) 2)
- (concat (substring str 0 (match-beginning 1))
- (substring (match-string 1 str) 1 2)))
- (t
- (concat (substring str 0 (match-beginning 1))
- "\\"
- (match-string 1 str)))))
- str t t))
-
-(defun xref--regexp-syntax-dependent-p (str)
- "Return non-nil when STR depends on the buffer's syntax.
-Such as the current syntax table and the applied syntax properties."
- (let ((case-fold-search nil))
- (string-match-p (rx
- (or string-start (not (in ?\\)))
- (0+ (= 2 ?\\))
- ?\\
- (in ?b ?B ?< ?> ?w ?W ?_ ?s ?S))
- str)))
-
-(defvar xref--last-file-buffer nil)
-(defvar xref--temp-buffer-file-name nil)
-
-(defun xref--convert-hits (hits regexp)
- (let (xref--last-file-buffer
- (tmp-buffer (generate-new-buffer " *xref-temp*")))
- (unwind-protect
- (mapcan (lambda (hit) (xref--collect-matches hit regexp tmp-buffer))
- hits)
- (kill-buffer tmp-buffer))))
-
-(defun xref--collect-matches (hit regexp tmp-buffer)
- (pcase-let* ((`(,line ,file ,text) hit)
- (remote-id (file-remote-p default-directory))
- (file (and file (concat remote-id file)))
- (buf (xref--find-file-buffer file))
- (syntax-needed (xref--regexp-syntax-dependent-p regexp)))
- (if buf
- (with-current-buffer buf
- (save-excursion
- (goto-char (point-min))
- (forward-line (1- line))
- (xref--collect-matches-1 regexp file line
- (line-beginning-position)
- (line-end-position)
- syntax-needed)))
- ;; Using the temporary buffer is both a performance and a buffer
- ;; management optimization.
- (with-current-buffer tmp-buffer
- (erase-buffer)
- (when (and syntax-needed
- (not (equal file xref--temp-buffer-file-name)))
- (insert-file-contents file nil 0 200)
- ;; Can't (setq-local delay-mode-hooks t) because of
- ;; bug#23272, but the performance penalty seems minimal.
- (let ((buffer-file-name file)
- (inhibit-message t)
- message-log-max)
- (ignore-errors
- (set-auto-mode t)))
- (setq-local xref--temp-buffer-file-name file)
- (setq-local inhibit-read-only t)
- (erase-buffer))
- (insert text)
- (goto-char (point-min))
- (xref--collect-matches-1 regexp file line
- (point)
- (point-max)
- syntax-needed)))))
-
-(defun xref--collect-matches-1 (regexp file line line-beg line-end syntax-needed)
- (let (match-pairs matches)
- (when syntax-needed
- (syntax-propertize line-end))
- (while (and
- ;; REGEXP might match an empty string. Or line.
- (or (null match-pairs)
- (> (point) line-beg))
- (re-search-forward regexp line-end t))
- (push (cons (match-beginning 0)
- (match-end 0))
- match-pairs))
- (setq match-pairs (nreverse match-pairs))
- (while match-pairs
- (let* ((beg-end (pop match-pairs))
- (beg-column (- (car beg-end) line-beg))
- (end-column (- (cdr beg-end) line-beg))
- (loc (xref-make-file-location file line beg-column))
- (summary (buffer-substring (if matches (car beg-end) line-beg)
- (if match-pairs
- (caar match-pairs)
- line-end))))
- (when matches
- (cl-decf beg-column (- (car beg-end) line-beg))
- (cl-decf end-column (- (car beg-end) line-beg)))
- (add-face-text-property beg-column end-column 'xref-match
- t summary)
- (push (xref-make-match summary loc (- end-column beg-column))
- matches)))
- (nreverse matches)))
-
-(defun xref--find-file-buffer (file)
- (unless (equal (car xref--last-file-buffer) file)
- (setq xref--last-file-buffer
- ;; `find-buffer-visiting' is considerably slower,
- ;; especially on remote files.
- (cons file (get-file-buffer file))))
- (cdr xref--last-file-buffer))
-
-(provide 'xref)
-
-;;; xref.el ends here
diff --git a/emacs.d/elpa/xterm-color-20200605.2017/xterm-color-autoloads.el b/emacs.d/elpa/xterm-color-20200605.2017/xterm-color-autoloads.el
deleted file mode 100644
index 4d97511..0000000
--- a/emacs.d/elpa/xterm-color-20200605.2017/xterm-color-autoloads.el
+++ /dev/null
@@ -1,82 +0,0 @@
-;;; xterm-color-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-(add-to-list 'load-path (directory-file-name
- (or (file-name-directory #$) (car load-path))))
-
-
-;;;### (autoloads nil "xterm-color" "xterm-color.el" (0 0 0 0))
-;;; Generated autoloads from xterm-color.el
-
-(autoload 'xterm-color-filter-strip "xterm-color" "\
-Translate ANSI color sequences in STRING into text properties.
-Return new STRING with text properties applied.
-
-In order to get maximum performance, this function strips text properties
-if they are present in STRING.
-
-\(fn STRING)" nil nil)
-
-(autoload 'xterm-color-filter "xterm-color" "\
-Translate ANSI color sequences in STRING into text properties.
-Return new STRING with text properties applied.
-
-This function checks if `xterm-color-preserve-properties' is non-nil
-and only calls `xterm-color-filter-strip' on substrings that do not
-have text properties applied (passing through the rest unmodified).
-Preserving properties in this fashion is not very robust as there may
-be situations where text properties are applied on ANSI data, which
-will desync the state machine.
-
-Preserving properties works ok with and is really meant for eshell.
-
-This can be inserted into `comint-preoutput-filter-functions'.
-
-\(fn STRING)" nil nil)
-
-(autoload 'xterm-color-256 "xterm-color" "\
-
-
-\(fn COLOR)" nil nil)
-
-(autoload 'xterm-color-colorize-buffer "xterm-color" "\
-Apply `xterm-color-filter' to current buffer, and replace its contents.
-Colors are applied using 'face, unless font-lock-mode is active, in
-which case 'font-lock-face is used. Operation with font-lock mode active
-is not recommended.
-
-If USE-OVERLAYS is non-nil, colors are applied to the buffer using overlays
-instead of text properties. A C-u prefix arg causes overlays to be used.
-
-\(fn &optional USE-OVERLAYS)" t nil)
-
-(autoload 'xterm-color-clear-cache "xterm-color" "\
-Clear xterm color face attribute cache.
-You may want to call this if you change `xterm-color-names' or
-`xterm-color-names-bright' at runtime and you want to see the changes
-take place in a pre-existing buffer that has had xterm-color initialized.
-
-Since the cache is buffer-local and created on-demand when needed, this has no
-effect when called from a buffer that does not have a cache." t nil)
-
-(autoload 'xterm-color-test "xterm-color" "\
-Create, display and render a new buffer containing ANSI control sequences." t nil)
-
-(autoload 'xterm-color-test-raw "xterm-color" "\
-Create and display a new buffer containing ANSI SGR control sequences.
-ANSI sequences are not processed. One can use a different Emacs package,
-such as ansi-color.el to do so. This is really meant to be used for easy
-comparisons/benchmarks with libraries that offer similar functionality." t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "xterm-color" '("+xterm-color--table-256+" "xterm-color-")))
-
-;;;***
-
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; xterm-color-autoloads.el ends here
diff --git a/emacs.d/elpa/xterm-color-20200605.2017/xterm-color-pkg.el b/emacs.d/elpa/xterm-color-20200605.2017/xterm-color-pkg.el
deleted file mode 100644
index dfa6653..0000000
--- a/emacs.d/elpa/xterm-color-20200605.2017/xterm-color-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-;;; Generated package description from xterm-color-20200605.2017/xterm-color.el -*- no-byte-compile: t -*-
-(define-package "xterm-color" "20200605.2017" "ANSI, XTERM 256 and Truecolor support" '((emacs "24.4")) :commit "1a4012854c69a5cdaeb5a73d2ad705011892fca3" :authors '(("xristos" . "xristos@sdf.org")) :maintainer '("xristos" . "xristos@sdf.org") :keywords '("faces") :url "https://github.com/atomontage/xterm-color")
diff --git a/emacs.d/elpa/xterm-color-20200605.2017/xterm-color.el b/emacs.d/elpa/xterm-color-20200605.2017/xterm-color.el
deleted file mode 100644
index e786513..0000000
--- a/emacs.d/elpa/xterm-color-20200605.2017/xterm-color.el
+++ /dev/null
@@ -1,938 +0,0 @@
-;;; xterm-color.el --- ANSI, XTERM 256 and Truecolor support -*- lexical-binding: t -*-
-
-;; Copyright (C) 2010-2020 xristos@sdf.org
-;; All rights reserved
-
-;; Modified: 2020-05-10
-;; Version: 2.0
-;; Package-Version: 20200605.2017
-;; Package-Commit: 1a4012854c69a5cdaeb5a73d2ad705011892fca3
-;; Author: xristos <xristos@sdf.org>
-;; URL: https://github.com/atomontage/xterm-color
-;; Package-Requires: ((emacs "24.4"))
-;; Keywords: faces
-
-;; Redistribution and use in source and binary forms, with or without
-;; modification, are permitted provided that the following conditions
-;; are met:
-;;
-;; * Redistributions of source code must retain the above copyright
-;; notice, this list of conditions and the following disclaimer.
-;;
-;; * Redistributions in binary form must reproduce the above
-;; copyright notice, this list of conditions and the following
-;; disclaimer in the documentation and/or other materials
-;; provided with the distribution.
-;;
-;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-;; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-;; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-;; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-;; POSSIBILITY OF SUCH DAMAGE.
-
-;;; Commentary:
-;;
-;; Translate ANSI control sequences into text properties through state machine
-;; emulation. This provides a far more accurate, comprehensive result than
-;; `ansi-color.el' that is built-into Emacs, without compromising on performance.
-;;
-;; Please see README.org for documentation including example configurations.
-;;
-;;; Notes:
-;;
-;; Unsupported SGR attributes: 5 (slow blink), 6 (rapid blink), 8 (conceal),
-;; 10 (primary font), 11-19 (alternative font), 20 (fraktur), 21 (double underline),
-;; 25 (blink off), 29 (reveal), 52 (encircled), 60-65 (ideogram)
-;;
-;; Most of these can not be mapped to Emacs face properties. The rest may be
-;; supported in a future release.
-;;
-;; Supported SGR attributes: Look at `xterm-color--dispatch-SGR'.
-;; SGR attribute 1 is rendered as bright unless `xterm-color-use-bold-for-bright'
-;; is non-nil which will, if current font has a bold variant, switch to bold.
-;; SGR attributes 38 and 48 are supported in both their 256 color and truecolor
-;; (24-bit) variants.
-
-;;; Test:
-;;
-;; M-x xterm-color-test
-;;
-;; In shell or eshell:
-;;
-;; perl tests/xterm-colortest && perl tests/256colors2.pl
-;;
-;; printf "\x1b[0;1;3;4;35;51mThis is only a test\x1b[0m\n"
-;;
-;; Comparison with ansi-color.el:
-;;
-;; M-x xterm-color-test-raw then M-x xterm-color-colorize-buffer
-;;
-;; and contrast with
-;;
-;; M-x xterm-color-test-raw then M-: (ansi-color-apply-on-region (point-min) (point-max))
-;;
-;; Use `xterm-color--bench' for benchmarks during development.
-
-;;; Code:
-
-(require 'subr-x)
-(require 'cl-lib)
-
-(defgroup xterm-color nil
- "Translate ANSI control sequences to text properties."
- :prefix "xterm-color-"
- :group 'processes)
-
-
-;;;
-;;; CUSTOM
-;;;
-
-
-(defcustom xterm-color-debug nil
- "If non-nil, print ANSI state machine debug information in *Messages*."
- :type 'boolean
- :group 'xterm-color)
-
-(defcustom xterm-color-use-bold-for-bright nil
- "If non-nil, render bright foreground attribute as bold."
- :type 'boolean
- :group 'xterm-color)
-
-(defcustom xterm-color-names
- ["#192033" ; black
- "#A93F43" ; red
- "#59963A" ; green
- "#BE8A2D" ; yellow
- "#4068A3" ; blue
- "#7F60A7" ; magenta
- "#4E9B9B" ; cyan
- "#7E8A90"] ; white
- "Default colors to use as regular ANSI colors."
- :type '(vector string string string string string string string string)
- :group 'xterm-color)
-
-(defcustom xterm-color-names-bright
- ["#666666" ; black
- "#EC6261" ; red
- "#ADCF44" ; green
- "#F0C649" ; yellow
- "#63B4F6" ; blue
- "#CB77F9" ; magenta
- "#86D7DB" ; cyan
- "#D3D2D1"] ; white
- "Default colors to use as bright ANSI colors."
- :type '(vector string string string string string string string string)
- :group 'xterm-color)
-
-
-;;;
-;;; Buffer locals, used by state machine
-;;;
-
-
-(defvar-local xterm-color-preserve-properties nil
- "If non-nil, preserve existing text properties on input about to be filtered.
-Effectively this skips ANSI control sequence processing for input parts
-that have text properties applied. This should be nil most of the time.
-It is really meant for and works ok with eshell.")
-
-(defvar-local xterm-color-render t
- "If non-nil, render SGR attributes. Otherwise, discard them.
-The latter enables processing and filtering out ANSI control sequences,
-without applying them to the text.")
-
-(defvar-local xterm-color--current-fg nil)
-
-(defvar-local xterm-color--current-bg nil)
-
-(defvar-local xterm-color--char-list nil
- "List of characters that the current ANSI color applies to.
-All characters are stored in reverse, LIFO, order.")
-
-(defvar-local xterm-color--CSI-list nil
- "List of current ANSI CSI sequence bytes (characters).
-All characters are stored in reverse, LIFO, order.")
-
-(defvar-local xterm-color--state :char
- "Current state of ANSI state machine.
-
-Can be one of :char, :set-char, :ansi-esc, :ansi-csi, :ansi-osc,
-:ansi-osc-esc.")
-
-(defvar-local xterm-color--attributes 0
- "Bitvector that keeps track of state machine attributes.
-
-These are: bright, italic, underline, strike-through, inverse-color,
-frame, overline.")
-
-(defvar-local xterm-color--face-cache nil
- "Cache for auto-generated face attributes.")
-
-(defvar-local xterm-color--truecolor-face-cache nil
- "Cache for auto-generated face attributes.")
-
-
-;;;
-;;; Constants
-;;;
-
-
-(defconst +xterm-color--table-256+ [0 #x5f #x87 #xaf #xd7 #xff])
-
-
-;;;
-;;; Internal API
-;;;
-
-;; The face caching scheme requires an integer width of at least 56 bits
-;; to cache faces derived from truecolor (24-bit) ANSI sequences. Truecolor
-;; support is therefore disabled on e.g. machines with 32-bit integers.
-(defvar xterm-color--support-truecolor (>= (1+ (floor (log most-positive-fixnum 2)))
- 59))
-
-(cl-defun xterm-color--string-properties (string)
- (cl-loop
- with pos = 0 and result do
- (let ((next-pos (next-property-change pos string)))
- (if next-pos
- (progn
- (push (list pos (text-properties-at pos string) (substring string pos next-pos)) result)
- (setq pos next-pos))
- (push (list pos (text-properties-at pos string) (substring string pos)) result)
- (cl-return-from xterm-color--string-properties (nreverse result))))))
-
-(defun xterm-color--convert-text-properties-to-overlays (beg end)
- "Transform face text properties between BEG and END, to equivalent overlays."
- (save-excursion
- (goto-char beg)
- (let ((face-prop (if (or (get-text-property (point) 'font-lock-face)
- (next-single-property-change (point) 'font-lock-face))
- 'font-lock-face 'face)))
- (while (< (point) end)
- (let* ((pos (point))
- (current-value (get-text-property pos face-prop))
- (next-change (next-single-property-change pos face-prop nil end)))
- (when current-value
- (let ((ov (make-overlay pos next-change)))
- (overlay-put ov face-prop current-value)
- (overlay-put ov 'xterm-color t)))
- (goto-char next-change)))
- (remove-text-properties beg end (list 'xterm-color nil face-prop nil)))))
-
-(defun xterm-color--message (format-string &rest args)
- "Call `message' with FORMAT-STRING and ARGS.
-Also see `xterm-color-debug'."
- (when xterm-color-debug
- (let ((message-truncate-lines t))
- (message "xterm-color: %s" (apply #'format format-string args))
- (message nil))))
-
-
-;;;
-;;; SGR state machine
-;;;
-
-
-(cl-defmacro xterm-color--with-SGR-constants (&body body)
- (declare (indent defun))
- `(cl-symbol-macrolet
- ((+bright+ 1)
- (+italic+ 2)
- (+underline+ 4)
- (+strike-through+ 8)
- (+negative+ 16)
- (+frame+ 32)
- (+overline+ 64))
- ,@body))
-
-(cl-defmacro xterm-color--create-SGR-table ((attrib SGR-list) &body body)
- "Create an iteration/dispatch table based on provided rules that match SGR attributes.
-For each attribute in SGR-LIST, check to see if it matches a rule in BODY and
-evaluate the rule body if that is the case.
-
-ATTRIB must be a symbol that is bound to SGR-LIST attributes in BODY.
-SGR-LIST must be a list of SGR attributes (integers) in LIFO order.
-BODY must contain rules with each rule being a list of form:
-
- (:match (condition &key (skip 1)) rule-body-form..)
-
-CONDITION must be a Lisp form which is evaluated as part of a COND
-condition clause. If it is an atom, it is rewritten to (eq CONDITION ATTRIB).
-Otherwise it is used as is. As per COND statement, if CONDITION evaluates
-to non-nil, rule body forms are evaluated as part of the body of the COND clause.
-
-SKIP, if given, must be an integer specifying the number of elements that
-should be skipped before the next iteration. The default is 1,
-going down SGR-LIST one element at a time."
- (declare (indent defun))
- `(xterm-color--with-SGR-constants
- (cl-macrolet
- ;; The following macros should be used in rule bodies
- ((set-a! (attr) `(setq xterm-color--attributes
- (logior xterm-color--attributes ,attr)))
- (unset-a! (attr) `(setq xterm-color--attributes
- (logand xterm-color--attributes
- (logand #xff (lognot ,attr)))))
-
- (set-f! (fg-color) `(setq xterm-color--current-fg ,fg-color))
- (set-b! (bg-color) `(setq xterm-color--current-bg ,bg-color))
-
- (set-truecolor! (r g b current-color)
- ;; A single integer must be able to
- ;; hold and distinguish between:
- ;;
- ;; - 24bit truecolor values
- ;; - ANSI colors
- ;; - XTerm 256 colors
- ;;
- ;; The following packing scheme achieves that.
- `(setq ,current-color
- (logior (ash r 25) (ash g 17) (ash b 9)
- #x100)))
-
- (reset! () `(setq xterm-color--current-fg nil
- xterm-color--current-bg nil
- xterm-color--attributes 0)))
- (cl-loop
- for ,attrib = (cl-first ,SGR-list)
- while ,SGR-list do
- (cond
- ,@(cl-loop
- for skip = 1
- for (tag (c . rest) . rule-body) in body
- when (not (eq tag :match)) do
- (error "Rule (%s (%s..)..) does not start with :match" tag c)
- when rest do
- (setq skip (plist-get rest :skip))
- (when (or (null skip) (cddr rest))
- (error "Rule (%s (%s..)..) has malformed arguments: %s" tag c rest))
- ;; Condition part of COND
- collect `(,(if (atom c) `(eq ,c ,attrib) c)
- ;; Body of COND
- ,@rule-body
- (setq ,SGR-list
- ,(if (> skip 1)
- `(nthcdr ,skip ,SGR-list)
- `(cdr ,SGR-list)))))
- (t (xterm-color--message "Not implemented SGR attribute %s" ,attrib)
- (setq ,SGR-list (cdr ,SGR-list))))))))
-
-(defsubst xterm-color--dispatch-SGR (SGR-list)
- "Update state machine based on SGR-LIST (list of SGR attributes /integers)."
- (xterm-color--create-SGR-table (elem SGR-list)
- (:match (0) (reset!)) ; RESET everything
- (:match ((<= 30 elem 37)) (set-f! (- elem 30))) ; ANSI FG color
- (:match ((<= 40 elem 47)) (set-b! (- elem 40))) ; ANSI BG color
- (:match (39) (set-f! nil)) ; RESET FG color (switch to default)
- (:match (49) (set-b! nil)) ; RESET BG color (switch to default)
- (:match (1) (set-a! +bright+))
- (:match (2) (unset-a! +bright+))
- (:match (22) (unset-a! +bright+))
-
- (:match ((and (eq 38 (cl-first SGR-list))
- (eq 2 (cl-second SGR-list))) ; Truecolor (24-bit) FG color
- :skip 5)
- (when xterm-color--support-truecolor
- (if-let ((r (cl-third SGR-list))
- (g (cl-fourth SGR-list))
- (b (cl-fifth SGR-list)))
- (if (or (> r 255) (> g 255) (> b 255))
- (xterm-color--message "SGR 38;2;%s;%s;%s exceeds range"
- r g b)
- (set-truecolor! r g b xterm-color--current-fg))
- (xterm-color--message "SGR 38;2;%s;%s;%s error, expected 38;2;R;G;B"
- r g b))))
- (:match ((and (eq 38 (cl-first SGR-list))
- (eq 5 (cl-second SGR-list)))
- :skip 3) ; XTERM 256 FG color
- (if-let ((color (cl-third SGR-list)))
- (if (> color 255)
- (xterm-color--message "SGR 38;5;%s exceeds range" color)
- (set-f! color))
- (xterm-color--message "SGR 38;5;%s error, expected 38;5;COLOR"
- color)))
-
- (:match ((and (eq 48 (cl-first SGR-list))
- (eq 2 (cl-second SGR-list))) ; Truecolor (24-bit) BG color
- :skip 5)
- (when xterm-color--support-truecolor
- (if-let ((r (cl-third SGR-list))
- (g (cl-fourth SGR-list))
- (b (cl-fifth SGR-list)))
- (if (or (> r 255) (> g 255) (> b 255))
- (xterm-color--message "SGR 48;2;%s;%s;%s exceeds range"
- r g b)
- (set-truecolor! r g b xterm-color--current-bg))
- (xterm-color--message "SGR 48;2;%s;%s;%s error, expected 48;2;R;G;B"
- r g b))))
-
- (:match ((and (eq 48 (cl-first SGR-list))
- (eq 5 (cl-second SGR-list)))
- :skip 3) ; XTERM 256 BG color
- (if-let ((color (cl-third SGR-list)))
- (if (> color 255)
- (xterm-color--message "SGR 48;5;%s exceeds range" color)
- (set-b! color))
- (xterm-color--message "SGR 48;5;%s error, expected 48;5;COLOR"
- color)))
- (:match ((<= 90 elem 97)) ; AIXTERM hi-intensity FG
- ;; Rather than setting bright, which would be wrong,
- ;; rescale color to fall within 8-15 so that it gets
- ;; mapped to xterm-color-names-bright by xterm-color-256
- (set-f! (- elem 82)))
- ;; Same for BG, rescale to 8-15
- (:match ((<= 100 elem 107)) (set-b! (- elem 92))) ; AIXTERM hi-intensity BG
-
- (:match (51) (set-a! +frame+))
- (:match (53) (set-a! +overline+))
- (:match (54) (unset-a! +frame+))
- (:match (55) (unset-a! +overline+))
- (:match (4) (set-a! +underline+))
- (:match (24) (unset-a! +underline+))
- (:match (3) (set-a! +italic+))
- (:match (23) (unset-a! +italic+))
- (:match (9) (set-a! +strike-through+))
- (:match (29) (unset-a! +strike-through+))
- (:match (7) (set-a! +negative+))
- (:match (27) (unset-a! +negative+))))
-
-(defsubst xterm-color--SGR-attributes (list)
- "Convert LIFO list of SGR characters to FIFO list of SGR attributes (integers).
-
-Returns FIFO list of SGR attributes or nil on errors.
-
-Characters must be in the ASCII set 0-9 (decimal 48 to 57) and are converted
-to integer digits by subtracting 48 from each character. E.g. Character 48
-is converted to integer digit 0, character 49 to integer digit1..
-Character 59 (;) is not converted but signifies that all accumulated integer
-digits should be reversed and combined into a single integer (SGR attribute).
-
-Examples:
-
-Given (48) return (0)
-Given (59) return (0 0)
-Given (48 49 50) return (210)
-Given (48 49 50 59 50 50 59 48 49) return (10 22 210)"
- (cl-loop
- with mul = 1 and n = 0 and ret
- for c in list do
- (if (/= 59 c)
- (let ((e (- c 48)))
- (unless (<= 0 e 9)
- (xterm-color--message "Invalid SGR attribute %s" c)
- (cl-return))
- (cl-incf n (* mul e))
- (setq mul (* mul 10)))
- (push n ret)
- (setq n 0 mul 1))
- finally return (push n ret)))
-
-
-;;;
-;;; CSI state machine
-;;;
-
-
-(defsubst xterm-color--dispatch-CSI ()
- "Update state machine based on CSI parameters collected so far.
-Parameters are taken from `xterm-color--CSI-list' which stores them
-in LIFO order."
- (let* ((csi xterm-color--CSI-list)
- (term (car csi)) ; final parameter, terminator
- (params (cdr csi))) ; rest of parameters, LIFO order
- (setq xterm-color--CSI-list nil)
- (cond ((eq ?m term)
- ;; SGR
- (let ((SGR-list (if (null params) '(0)
- (xterm-color--SGR-attributes params))))
- (when SGR-list
- (xterm-color--dispatch-SGR SGR-list))))
- (t
- (xterm-color--message "%s CSI not implemented" csi)))))
-
-(defmacro xterm-color--with-ANSI-macro-helpers (&rest body)
- (declare (indent defun))
- `(xterm-color--with-SGR-constants
- (cl-symbol-macrolet ((fg xterm-color--current-fg)
- (bg xterm-color--current-bg)
- (attrs xterm-color--attributes)
- (bold-bright xterm-color-use-bold-for-bright))
- (cl-macrolet
- ((out! (x) `(push ,x result))
- (push-char! (c) `(push ,c xterm-color--char-list))
- (push-csi! (c) `(push ,c xterm-color--CSI-list))
- (state! (s) `(setq state ,s))
- (graphics? () `(or fg bg (/= attrs 0)))
- (has? (attr) `(/= (logand ,attr attrs) 0))
- (fmt-24bit (color) `(format "#%06x" ,color))
- (fmt-256 (color) `(xterm-color-256 ,color))
-
- ;; Unpacks a packed truecolor value (as stored in
- ;; `xterm-color--current-fg' and `xterm-color--current-fg'.
- (unpack (color) `(ash ,color -9))
-
- ;; To avoid hash collisions, a different packing scheme is used
- ;; for hash table keys. It can encode two colors (foreground
- ;; and background) that can either be truecolor 24bit or XTerm 256
- ;; color 8bit. XTerm 256 color values subsume ANSI colors, a
- ;; separate encoding scheme is not needed.
- ;;
- ;; The scheme used also accounts for the combination of a truecolor
- ;; with an XTerm 256 color as part of the same hashed entry. Since
- ;; two different hash tables are used to work around 32bit Emacs
- ;; limited integer range, two packing schemes are needed:
- ;;
- ;; High< 25 bits >Low
- ;; ATTR[7 bits]BG[9 bits]FG[9 bits] where BG and FG are each
- ;; encoded as the 8bit color value shifted left by 1 and combined
- ;; with a flag bit which is set when the color is present.
- ;;
- ;; High< 59 bits >Low
- ;; ATTR[7 bits]BG[26 bits]FG[26 bits] where BG and FG are each
- ;; encoded as the 24bit (RGB) or 8bit color value shifted left by
- ;; 2 and combined with 2 flag bits that are set when the value
- ;; is 24bit (high bit) and when the color is present (low bit).
- (pack-256 (color) `(if ,color (logior (ash ,color 1) 1) 0))
- (pack-24bit (color) `(if ,color
- (if (> ,color 255)
- (logior (ash (unpack ,color) 2) 3)
- (logior (ash ,color 2) 1))
- 0))
- ;; If at least one of foreground / background color is a 24bit
- ;; truecolor value: Second packing scheme with
- ;; `xterm-color--truecolor-face-cache' is used.
- ;;
- ;; Every other case, including when no colors are present:
- ;; First packing scheme with `xterm-color--face-cache' is used.
- (pack-key-into (k) `(cond ((or (and fg (> fg 255))
- (and bg (> bg 255)))
- ;; At least one truecolor 24bit value
- (setq ,k (logior (ash attrs 52)
- (ash (pack-24bit bg) 26)
- (pack-24bit fg)))
- xterm-color--truecolor-face-cache)
- (t ;; No truecolor 24bit value
- (setq ,k (logior (ash attrs 18)
- (ash (pack-256 bg) 9)
- (pack-256 fg)))
- xterm-color--face-cache)))
-
- (face! (k v) `(setq plistf (plist-put plistf ,k ,v)))
- (make-color-fg () `(if (and bold-bright
- (< fg 256)
- (or (has? +bright+) (<= 8 fg 15)))
- (progn (face! :weight 'bold)
- (face! :foreground
- (fmt-256 (if (<= 8 fg) (- fg 8) fg))))
- (face! :foreground
- (if (> fg 255)
- (fmt-24bit (unpack fg))
- (fmt-256 (if (and (<= fg 7) (has? +bright+))
- (+ fg 8)
- fg))))))
- (make-color-bg () `(face! :background (cond ((> bg 255) (fmt-24bit (unpack bg)))
- (t (fmt-256 bg)))))
- (make-face () `(let* (k
- (table (pack-key-into k)))
- (or (gethash k table)
- (let (plistf)
- (when (has? +italic+) (face! :slant 'italic))
- (when (has? +underline+) (face! :underline t))
- (when (has? +strike-through+) (face! :strike-through t))
- (when (has? +negative+) (face! :inverse-video t))
- (when (has? +overline+) (face! :overline t))
- (when (has? +frame+) (face! :box t))
-
- (cond (fg (make-color-fg))
- (t (when (and bold-bright (has? +bright+))
- (face! :weight 'bold))))
-
- (when bg (make-color-bg))
- (puthash k plistf table)))))
- (maybe-fontify () '(when xterm-color--char-list
- (let ((s (concat (nreverse xterm-color--char-list))))
- (when (and xterm-color-render (graphics?))
- (add-text-properties
- 0 (length s)
- (list 'xterm-color t
- (if font-lock-mode 'font-lock-face 'face)
- (make-face))
- s))
- (out! s))
- (setq xterm-color--char-list nil))))
- ,@body))))
-
-
-;;;
-;;; Exports
-;;;
-
-
-;;;###autoload
-(defun xterm-color-filter-strip (string)
- "Translate ANSI color sequences in STRING into text properties.
-Return new STRING with text properties applied.
-
-In order to get maximum performance, this function strips text properties
-if they are present in STRING."
- (unless xterm-color--face-cache
- (setq xterm-color--face-cache
- (make-hash-table :weakness 'value)))
- (unless xterm-color--truecolor-face-cache
- (setq xterm-color--truecolor-face-cache
- (make-hash-table :weakness 'value)))
- (xterm-color--with-ANSI-macro-helpers
- (cl-loop
- with state = xterm-color--state and result
- for char across string do
- (cond
- ((eq state :char)
- (cond
- ((eq char 27) ; ESC
- (maybe-fontify)
- (state! :ansi-esc))
- (t
- (if (graphics?)
- (push-char! char)
- (out! (list char))))))
- ((eq state :ansi-esc)
- (cond ((eq char ?\[)
- (state! :ansi-csi))
- ((eq char ?\])
- (state! :ansi-osc))
- ((or (eq char ?\()
- (eq char ?\)))
- (state! :set-char))
- (t
- (push-char! char)
- (state! :char))))
- ((eq state :ansi-csi)
- (push-csi! char)
- (when (and (>= char #x40)
- (<= char #x7e))
- (xterm-color--dispatch-CSI)
- (state! :char)))
- ((eq state :ansi-osc)
- ;; OSC sequences are skipped
- (cond ((eq char 7)
- (state! :char))
- ((eq char 27)
- ;; ESC
- (state! :ansi-osc-esc))))
- ((eq state :ansi-osc-esc)
- (cond ((eq char ?\\)
- (state! :char))
- (t (state! :ansi-osc))))
- ((eq state :set-char)
- (xterm-color--message "%s SET-CHAR not implemented" char)
- (state! :char)))
- finally return
- (progn (when (eq state :char) (maybe-fontify))
- (setq xterm-color--state state)
- (apply 'concat (nreverse result))))))
-
-;;;###autoload
-(defun xterm-color-filter (string)
- "Translate ANSI color sequences in STRING into text properties.
-Return new STRING with text properties applied.
-
-This function checks if `xterm-color-preserve-properties' is non-nil
-and only calls `xterm-color-filter-strip' on substrings that do not
-have text properties applied (passing through the rest unmodified).
-Preserving properties in this fashion is not very robust as there may
-be situations where text properties are applied on ANSI data, which
-will desync the state machine.
-
-Preserving properties works ok with and is really meant for eshell.
-
-This can be inserted into `comint-preoutput-filter-functions'."
- (if (not xterm-color-preserve-properties)
- (xterm-color-filter-strip string)
- (cl-loop
- with result
- for (_ props substring) in (xterm-color--string-properties string) do
- (push (if props substring (xterm-color-filter-strip substring))
- result)
- finally return (apply 'concat (nreverse result)))))
-
-;;;###autoload
-(defun xterm-color-256 (color)
- (cond ((and (>= color 232)
- (<= color 255))
- ;; Grayscale
- (let ((val (+ 8 (* (- color 232) 10))))
- (format "#%02x%02x%02x" val val val)))
- ((<= color 7)
- ;; Normal ANSI color
- (aref xterm-color-names color))
- ((and (>= color 8)
- (<= color 15))
- ;; Bright ANSI color
- (aref xterm-color-names-bright (- color 8)))
- (t (let* ((color (- color 16))
- (red (/ color 36))
- (color (mod color 36))
- (green (/ color 6))
- (color (mod color 6))
- (blue color))
- ;; XTERM 256 color
- (format "#%02x%02x%02x"
- (aref +xterm-color--table-256+ red)
- (aref +xterm-color--table-256+ green)
- (aref +xterm-color--table-256+ blue))))))
-
-
-;;;
-;;; Interactive
-;;;
-
-
-;;;###autoload
-(cl-defun xterm-color-colorize-buffer (&optional use-overlays)
- "Apply `xterm-color-filter' to current buffer, and replace its contents.
-Colors are applied using 'face, unless font-lock-mode is active, in
-which case 'font-lock-face is used. Operation with font-lock mode active
-is not recommended.
-
-If USE-OVERLAYS is non-nil, colors are applied to the buffer using overlays
-instead of text properties. A C-u prefix arg causes overlays to be used."
- (interactive "P")
- (let ((read-only-p buffer-read-only))
- (when read-only-p
- (unless (y-or-n-p "Buffer is read only, continue colorizing? ")
- (cl-return-from xterm-color-colorize-buffer))
- (read-only-mode -1))
- (insert (xterm-color-filter (delete-and-extract-region (point-min) (point-max))))
- (when (and xterm-color-render use-overlays)
- (xterm-color--convert-text-properties-to-overlays (point-min) (point-max)))
- (goto-char (point-min))
- (when read-only-p (read-only-mode 1))))
-
-;;;###autoload
-(defun xterm-color-clear-cache ()
- "Clear xterm color face attribute cache.
-You may want to call this if you change `xterm-color-names' or
-`xterm-color-names-bright' at runtime and you want to see the changes
-take place in a pre-existing buffer that has had xterm-color initialized.
-
-Since the cache is buffer-local and created on-demand when needed, this has no
-effect when called from a buffer that does not have a cache."
- (interactive)
- (and xterm-color--face-cache
- (clrhash xterm-color--face-cache)
- (xterm-color--message "Cleared face attribute cache"))
- (and xterm-color--truecolor-face-cache
- (clrhash xterm-color--truecolor-face-cache)
- (xterm-color--message "Cleared truecolor face attribute cache")))
-
-
-;;;
-;;; Tests
-;;;
-
-
-(defmacro xterm-color--bench (path &optional repetitions)
- `(benchmark-run-compiled ,repetitions
- (with-temp-buffer
- (insert-file-contents-literally ,path)
- (xterm-color-colorize-buffer))))
-
-(defvar xterm-color--test-do-filter t)
-
-(cl-defmacro xterm-color--with-tests (&body body)
- `(cl-labels ((ansi-filter (msg &rest args)
- (insert
- (if xterm-color--test-do-filter
- (xterm-color-filter
- (apply #'format msg args))
- (apply #'format msg args))))
- (test (name &rest attribs)
- (ansi-filter "\x1b[0;%smThis is only a test!\x1b[0m\t --[ %s\n"
- (mapconcat #'identity attribs ";")
- name)))
- ,@body))
-
-(defun xterm-color--test-ansi ()
- (xterm-color--with-tests
- (let ((test-attributes
- '(("1" . "bright")
- ("51" . "frame")
- ("3" . "italic")
- ("4" . "underline")
- ("7" . "negative")
- ("9" . "strike through")
- ("53" . "overline")
- ("1;51" . "bright + frame")
- ("1;3" . "bright + italic")
- ("1;4" . "bright + underline")
- ("1;7" . "bright + negative")
- ("1;9" . "bright + strike through")
- ("1;53" . "bright + overline"))))
-
- ;; Attributes (no color)
- (insert "* ANSI attributes (default colors)\n")
-
- (if xterm-color-use-bold-for-bright
- (insert " Expect: Bold instead of bright")
- (insert " Expect: Bright not to be rendered since no foreground color is set"))
- (insert "\n\n")
-
- (cl-loop for (attrib . name) in test-attributes
- do (test name attrib)
- finally (insert "\n"))
-
- (insert "* ANSI attributes (blue foreground)\n")
-
- (if xterm-color-use-bold-for-bright
- (insert " Expect: Bold instead of bright")
- (insert " Expect: Bright rendered as bright color"))
- (insert "\n\n")
-
- (cl-loop for (attrib . name) in test-attributes
- do (test name "34" attrib)
- finally (insert "\n"))
-
- (insert "* ANSI attributes (blue background)\n")
-
- (if xterm-color-use-bold-for-bright
- (insert " Expect: Bold instead of bright")
- (insert " Expect: Bright not to be rendered since no foreground color is set"))
- (insert "\n\n")
-
- (cl-loop for (attrib . name) in test-attributes
- do (test name "44" attrib)
- finally (insert "\n"))
-
- (insert "* ANSI attributes (AIXTERM blue foreground)\n")
-
- (if xterm-color-use-bold-for-bright
- (insert " Expect: Bold instead of bright")
- (insert " Expect: Bright color everywhere due to AIXTERM"))
- (insert "\n\n")
-
- (cl-loop for (attrib . name) in test-attributes
- do (test name "94" attrib)
- finally (insert "\n"))
-
- (insert "* ANSI attributes (AIXTERM red background)\n")
- (insert " Expect: Bright background color due to AIXTERM\n")
- (if xterm-color-use-bold-for-bright
- (insert " Expect: Bold instead of bright for foreground\n\n")
- (insert "\n"))
-
- (cl-loop for (attrib . name) in test-attributes
- do (test name "101" attrib)
- finally (insert "\n"))
-
- (insert "* Misc\n")
- (if xterm-color-use-bold-for-bright
- (progn
- (insert " Expect: Bold instead of bright\n")
- (insert " Otherwise bright rendered as normal intensity\n\n"))
- (insert "\n"))
-
- (insert "; Resetting FG color should not affect other SGR bits\n")
- (ansi-filter "Default \x1b[34;1mBright blue\x1b[39m Reset-fg-color \x1b[34mBlue (bright)\x1b[0m\n\n")
- (insert "; AIXTERM bright color should not set bright SGR bit\n")
- (ansi-filter "Default \x1b[94mBright blue\x1b[34m Switch-to-blue (normal)\x1b[0m\n")
- (insert "\n"))))
-
-(defun xterm-color--test-xterm ()
- (xterm-color--with-tests
- ;; System colors
- (cl-loop for color from 40 to 47
- do (ansi-filter "\x1b[0;%sm " color)
- finally (ansi-filter "\x1b[0m * ANSI system colors\n"))
-
- ;; Normal ANSI colors mapped to XTERM
- (cl-loop for color from 0 to 7
- do (ansi-filter "\x1b[48;5;%sm " color)
- finally (ansi-filter "\x1b[0m * ANSI colors mapped to XTERM\n"))
-
- ;; Bright ANSI colors mapped to XTERM
- (cl-loop for color from 8 to 15
- do (ansi-filter "\x1b[48;5;%sm " color)
- finally (ansi-filter "\x1b[0m * ANSI bright colors mapped to XTERM\n\n"))
-
- ;; XTERM 256 color cubes
- (insert "* XTERM 256 color cubes\n\n")
-
- (cl-loop for green from 0 to 5 do
- (cl-loop for red from 0 to 5 do
- (cl-loop for blue from 0 to 5
- for color = (+ 16 (* 36 red) (* green 6) blue)
- do (ansi-filter "\x1b[48;5;%sm \x1b[0m" color))
- (ansi-filter "\x1b[0m "))
- (insert "\n"))
-
- ;; Truecolor color ramps
- (insert "\n")
- (insert "* Truecolor\n\n")
- (cond (xterm-color--support-truecolor
- ;; Adapted from: https://gist.github.com/XVilka/8346728
- (cl-loop
- with steps = 77
- for c from 0 below steps
- for r = (- 255 (* c (/ 255 steps)))
- for g = (* c (/ 510 steps))
- for b = (* c (/ 255 steps)) do
- (when (> g 255) (setq g (- 510 g)))
- (ansi-filter "\x1b[48;2;%s;%s;%sm \x1b[m" r g b)))
- (t
- (insert "Truecolor is not supported on Emacs 32bit")))
-
- (insert "\n\n")
- (insert "* XTERM color grayscale ramp\n\n")
-
- (cl-loop for color from 232 to 255
- do (ansi-filter "\x1b[48;5;%sm " color)
- finally (ansi-filter "\x1b[0m\n\n"))))
-
-;;;###autoload
-(defun xterm-color-test ()
- "Create, display and render a new buffer containing ANSI control sequences."
- (interactive)
- (let* ((name (generate-new-buffer-name "*xterm-color-test*"))
- (buf (get-buffer-create name)))
- (switch-to-buffer buf))
-
- (xterm-color--test-xterm)
-
- (let ((xterm-color-use-bold-for-bright nil))
- (xterm-color--test-ansi))
- (xterm-color-clear-cache)
-
- (insert "; Temporarily setting `xterm-color-use-bold-for-bright' to T\n")
- (insert "; Current font needs to have a bold variant for following tests\n\n")
-
- (let ((xterm-color-use-bold-for-bright t))
- (xterm-color--test-ansi))
-
- (setq buffer-read-only t)
- (goto-char (point-min)))
-
-;;;###autoload
-(defun xterm-color-test-raw ()
- "Create and display a new buffer containing ANSI SGR control sequences.
-ANSI sequences are not processed. One can use a different Emacs package,
-such as ansi-color.el to do so. This is really meant to be used for easy
-comparisons/benchmarks with libraries that offer similar functionality."
- (interactive)
- (let* ((name (generate-new-buffer-name "*xterm-color-test-raw*"))
- (buf (get-buffer-create name)))
- (switch-to-buffer buf))
-
- (let (xterm-color--test-do-filter)
- (xterm-color--test-xterm)
- (xterm-color--test-ansi))
- (goto-char (point-min)))
-
-(provide 'xterm-color)
-;;; xterm-color.el ends here
diff --git a/emacs.d/init.el b/emacs.d/init.el
index 8c3dfcc..bcaccba 100644
--- a/emacs.d/init.el
+++ b/emacs.d/init.el
@@ -16,7 +16,7 @@
(package-initialize)
;; Run this manually from time to time to update package lists.
-;(package-refresh-contents)
+(package-refresh-contents)
;; use-package for easier configuration