Commit Graph

2666 Commits

Author SHA1 Message Date
Henrik Lissner
8762129e8d
Don't prompt when byte-compiling plugins
The warning only applies to full byte-compilation of your config.
2018-06-04 21:17:49 +02:00
Henrik Lissner
c96086d426
Fix reference to void variable path
In certain uses of file-exists-p! and project-file-exists-p!
2018-06-04 21:17:49 +02:00
Henrik Lissner
52a04fd8c6
Optimize file-exists-p! & project-file-exists-p! 2018-06-04 21:17:49 +02:00
Henrik Lissner
b2030c6ed3
Refactor doom/escape
Now returns first hook that returns non-nil; this makes it a little
easier to debug doom-escape-hook.
2018-06-04 00:07:03 +02:00
Henrik Lissner
9ba76b60dc
Refactor require! macro 2018-06-04 00:06:01 +02:00
Henrik Lissner
b53df20dd5
Minor refactor of associate! macro 2018-06-03 23:56:25 +02:00
Henrik Lissner
796af69c28
Move define-key! macro to core-lib 2018-06-03 23:52:21 +02:00
Henrik Lissner
7acfcf907a
Add warning prompt to byte-compile
Byte-compiling should be a considered an advanced workflow. Warn users
of the dangers. The prompt can be suppressed with the -y option. e.g.

  bin/doom -y compile

You won't get the prompt for byte-compiling :core or :plugins however.
2018-06-03 22:00:40 +02:00
Henrik Lissner
37b9beb9c9
Fix doom//upgrade not detecting updates 2018-06-03 15:58:49 +02:00
Henrik Lissner
1e81a35461
Minimize dependence on map!
This is in preparation for general.el integration coming in 2.1.1. It is
very likely that map! will change (and even more, be split into several
macros). Not much, but change none-the-less. Specifically, the state
keywords (e.g. :nvi, :n, :i) will be removed in favor of a :state
property that takes a list, e.g. (normal visual insert).

In any case, both map! and general are also relatively expensive
compared to define-key and evil-define-key* (and the new define-key!
macro), so use that when we can.

This also means changes to either API won't affect Doom's modules in the
long term.
2018-06-03 15:46:00 +02:00
Henrik Lissner
b2dfc4b8e8
Delete plugin *.elc before recompiling plugins 2018-06-03 01:38:35 +02:00
Henrik Lissner
1a1d74afa3
Refactor package management API
To make backtraces a little less cluttered, in case of the notorious
arrayp error, which I am yet unable to reproduce or understand.
2018-06-02 21:31:14 +02:00
Henrik Lissner
428f1e1d07
Refactor def-setting!/set! implementation
The `doom-settings` variable has been removed. Setting checks are done
with fboundp now, which is simpler.
2018-06-02 16:26:59 +02:00
Henrik Lissner
e5a4415d58
General, minor reformatting/refactor 2018-06-02 13:58:04 +02:00
Henrik Lissner
ae7ead6e87
Refactor doom//upgrade 2018-06-02 13:56:39 +02:00
Henrik Lissner
a0bec84997 Don't complain if no private packages.el 2018-06-02 01:08:23 +02:00
Henrik Lissner
b28d3414bb
Remove load-prefer-newer letvar around private init
Doesn't actually help and only slows things down.
2018-06-01 17:07:53 +02:00
Henrik Lissner
6480a45f84
Fix reload-package-autoloads outdated detection
The package autoloads generator wouldn't take module packages.el files
into consideration when detecting whether the autoloads file should be
regenerated. Now it does.
2018-06-01 17:06:03 +02:00
Henrik Lissner
c04bccc68b
Fix disabled packages not being disabled
By loading the private packages.el in two passes. The first time ensures
later modules will know about disabled packages and the second time
ensures overwritten packages are properly overwritten.

Not the most efficient, but efficiency is low priority in noninteractive
sessions (i.e. during package management), the performance loss is
negligible, and packages.el files (should) have no other side effects
anyway.
2018-06-01 17:03:01 +02:00
Henrik Lissner
6bad6d12f3
Remove doom-psuedo-modules-dir
Not needed with now that doom-private-dir has first class support.
2018-06-01 17:01:39 +02:00
Henrik Lissner
36c36ca271
Optimize switch buffer/window hooks
Significantly reduces nested triggering of these hooks.
2018-06-01 16:40:39 +02:00
Henrik Lissner
2b052a9563
Ignore untracked files on make upgrade
In case temporary/cache files are saved outside of .local, for example.
2018-06-01 11:25:47 +02:00
Henrik Lissner
3359d351f5
Add define-key! macro; refactor config/default key fixes
I'd like to phase out map! where it isn't absolutely necessary, since it
isn't very well optimized.
2018-06-01 02:17:10 +02:00
Henrik Lissner
a4d03654bd
Fix associate!'s :files refusing a list of strings
Due to changes under the hood, the :files FORM property requires FORM to
either be a nested form of and/or sexps, or a single string. This is
inconsistent with the plurality of ":files", so it has been fixed to
accept a list of strings (with an implicit (and ...)).
2018-05-31 16:59:53 +02:00
Henrik Lissner
97cbb13c22
Improve which-key readability 2018-05-31 16:19:28 +02:00
Henrik Lissner
b1ab80ec3f
Fix doom//byte-compile when recompiling plugins
This would cause odd void-variable/function errors because
doom//byte-compile would erroneously try to compile *everything* after
recompiling plugins.
2018-05-31 01:31:33 +02:00
Henrik Lissner
d2ca6f65b3
doom/cleanup-session: don't kill modified buffers 2018-05-30 23:06:13 +02:00
Henrik Lissner
8b7888d58f
Increase GC threshold from 8 to 16mb 2018-05-30 19:15:43 +02:00
Henrik Lissner
3f6bfee027
Remember customized settings (load custom-file) 2018-05-30 19:15:29 +02:00
Henrik Lissner
bb9f00e275
Fix unused return value warnings
When byte-compiling or reloading autoloads files.
2018-05-30 16:05:24 +02:00
Henrik Lissner
c0b904afca
Fix void-variable nose-mode error in python #628
Caused by associate! only doing a fboundp check on MODE, but not boundp,
before trying to access its value.
2018-05-30 16:05:24 +02:00
Henrik Lissner
71dc572d79
Run doom//refresh after successfull doom//upgrade 2018-05-30 16:05:24 +02:00
Henrik Lissner
c4bbffd7ee
Extract refresh dispatcher into doom//refresh 2018-05-30 16:05:24 +02:00
Henrik Lissner
6b1e1a2c58
Fix doom-files-in returning files in arbitrary order
This would cause compilation issues in doom//byte-compile because
prerequisite files weren't compiled before dependent ones.
2018-05-30 01:43:57 +02:00
Henrik Lissner
bb6b91da9b
Downgrade missing module warnings to messages 2018-05-29 22:44:21 +02:00
Henrik Lissner
debe3e0dd3 Remove unnused letvar doom--inhibit-reload 2018-05-29 19:39:22 +02:00
Henrik Lissner
bd5ecc1aca
Display warning if a non-existent module is in your doom! block 2018-05-29 18:26:39 +02:00
Henrik Lissner
947fe345c3
Minor, general refactor
In some contexts, map-put is superior to add-to-list.
2018-05-29 15:34:13 +02:00
Henrik Lissner
592d83a968
Fix doom//byte-compile not initializing module list in some contexts 2018-05-29 15:32:36 +02:00
Henrik Lissner
456dc62051
Fix compile-time void-function errors from modeline 2018-05-29 15:32:36 +02:00
Henrik Lissner
4863f9fbf0
Fix after! macro with multiple features 2018-05-28 17:31:44 +02:00
Henrik Lissner
f8b9cff4aa
Get rid of doom-pre-init-hook 2018-05-28 16:07:11 +02:00
Henrik Lissner
ed5e8849cc
Fix void-variable fundamental-mode error from unquoted symbol 2018-05-28 15:50:11 +02:00
Henrik Lissner
61b22c1c7f
doom//upgrade: git reset instead of pull + error handling 2018-05-28 15:49:50 +02:00
Henrik Lissner
2dc1be2ce8
Update load! macro docstring 2018-05-28 12:30:27 +02:00
Henrik Lissner
b84946318c
No means no
Saying no to a confirmation prompt should abort the refresh process.
2018-05-28 12:23:48 +02:00
Henrik Lissner
c8b21e8cf8
Fix doom//upgrade dirty-tree detection
doom//upgrade refused to upgrade Doom because of unexpected behavior
with vc-state, which unhelpfully returns 'unregistered for unmodified
files. Instead, I manually test for output from git status --porcelain.
2018-05-28 12:20:01 +02:00
Henrik Lissner
376adde0d8
Optimize mode-line segments that are just variables 2018-05-27 22:31:08 +02:00
Henrik Lissner
1a452b6842
💥 Change first arg of load! macro
load!'s first argument is no longer a symbol (that will cause
void-variable errors now) to save on unnecessary interning and simplify
compile-time logic. It accepts any valid form that evaluates to a string
now.

If you use load!, you need to change its argument to a string!

e.g. (load! +my-module) => (load! "+my-module")
2018-05-27 12:52:28 +02:00
Henrik Lissner
bdee28609a
New emacs/ediff module
Ediff config was moved out of core. Also includes evil compatibility
(mvoed out of feature/evil) & wconf save/restore.
2018-05-27 12:52:28 +02:00
Henrik Lissner
f3c7dac997
Don't protect visible buffers that start with an asterix 2018-05-26 23:25:57 +02:00
Henrik Lissner
b5ec39f0ec
Rewrite (and hopefully fix) doom//upgrade again 2018-05-26 23:25:06 +02:00
Henrik Lissner
1aec48a848
The *real* fix for whitespace-mode interfering with the mu4e sidebar #607 2018-05-26 03:09:53 +02:00
Henrik Lissner
2d6bef33d3
Disable doom|detect-indentation in fundamental or special modes
This should fix #607, which is caused by whitespace-mode messing up the
overlays/text properties in the mu4e sidebar.
2018-05-26 03:06:47 +02:00
Henrik Lissner
9febfb0477
Add fundamental-mode to doom-large-file-modes-list 2018-05-26 03:06:22 +02:00
Henrik Lissner
dc7488df73
Remove package-initialize hack before package commands
Doesn't appear to be necessary anymore.
2018-05-25 19:26:11 +02:00
Henrik Lissner
644dc17e32
Minor refactor of doom-initialize-packages 2018-05-25 19:25:47 +02:00
Henrik Lissner
85c6d06c3f
Try to reload doom/package autoloads before before/after doom refresh 2018-05-25 19:25:18 +02:00
Henrik Lissner
06bd3dfccc
Improve how reload-doom-autoloads detects your modules have changed 2018-05-25 19:22:44 +02:00
Henrik Lissner
debdb63100
Handle wrong-num-of-args error correctly 2018-05-25 19:22:44 +02:00
Henrik Lissner
e3daf2b818
Improve how reload-package-autoloads detects your packages have changed 2018-05-25 19:22:44 +02:00
Henrik Lissner
74c8df3618
Fix reload-*-autoloads commands not remotely loading byte-compiled autoloads file 2018-05-25 19:22:44 +02:00
Henrik Lissner
068979591a
doom//byte-compile: cl-pushnew => push (redundant w/ cl-delete-duplicates) 2018-05-25 19:22:44 +02:00
Henrik Lissner
ef9b30cdef
Fix doom//upgrade failing to detect branch & clean *.elc files before updating 2018-05-25 19:22:44 +02:00
Henrik Lissner
5ef1228201
Fix nested length form typos 2018-05-25 19:22:44 +02:00
Henrik Lissner
365201bfcf
doom//upgrade: fix void-variable core-file error 2018-05-25 19:22:41 +02:00
Henrik Lissner
4aacd831b5
Fix doom//upgrade (make upgrade) 2018-05-25 12:49:39 +02:00
Henrik Lissner
73045f9950
Fix doom//quickstart & improve feedback (make quickstart) 2018-05-25 12:49:39 +02:00
Henrik Lissner
d7a5f3b997
Fix doom-module-table failing to fetch module list
...because sexp-at-point needs a valid syntax table, and fundamental
mode ain't got one.
2018-05-25 03:07:23 +02:00
Henrik Lissner
2b8efd6783
Error of private init.el doesn't exist (it really should!) 2018-05-25 02:54:16 +02:00
Henrik Lissner
7f31f4a1bd
Adjust package state initialization strategies 2018-05-25 02:53:48 +02:00
Henrik Lissner
0368e8f84b
Ensure package state is initialized before package management 2018-05-25 02:41:23 +02:00
Henrik Lissner
ef9cea4d11
More aggressive autoloads reloading on install, autoremove, update & refresh 2018-05-25 02:20:28 +02:00
Henrik Lissner
0aa7bf2d4a
Insert package state before package autoloads in autoloads file
Prevents issues where autoloads will try to load packages but
`load-path` isn't initialized yet, causing "Cannot open load file"
errors.
2018-05-25 02:18:55 +02:00
Henrik Lissner
d9894f0b74
Fix package install not retrying after a 'bad request' error 2018-05-25 02:16:19 +02:00
Henrik Lissner
2990d5bd58
Fix hash-table-p and format type errors on blank startup 2018-05-25 01:26:24 +02:00
Henrik Lissner
a390ef8deb
Reduce doom-module-table calls significantly 2018-05-25 01:17:01 +02:00
Henrik Lissner
11705d0920
Fix void-variable error (let -> let*) 2018-05-25 01:13:28 +02:00
Henrik Lissner
59f70c2a87
Soft-fail if doom-module-table can't find your private init.el 2018-05-25 01:11:53 +02:00
Henrik Lissner
887e3e11af
Remove unused printerr! macro 2018-05-25 00:49:03 +02:00
Henrik Lissner
6a140209b8
Optimize Doom core package configs 2018-05-24 23:41:40 +02:00
Henrik Lissner
9e7703db2a
core-lib (add-transient-hook!): set permanent-local-hook on hook fn 2018-05-24 22:35:45 +02:00
Henrik Lissner
0b48575c14
Remove def-hydra! macro alias
Causes byte-compilation issues and the alias is unnecessary.
2018-05-24 22:03:19 +02:00
Henrik Lissner
7c611df6a6
Have doom//reload return t on success 2018-05-24 22:01:26 +02:00
Henrik Lissner
dea7c10771
Don't do naive path concatenation for private custom-theme-directory 2018-05-24 21:20:50 +02:00
Henrik Lissner
a55e2251e6
auto-mode-case-fold = nil
This disables the case insensitive second pass through auto-mode-alist
on case sensitive systems.
2018-05-24 21:20:02 +02:00
Henrik Lissner
d35598520f
Only package-initialize if uninitialized (from package.el API advice) 2018-05-24 21:20:02 +02:00
Henrik Lissner
9e07940b7c
Fix use-package autoload 2018-05-24 21:20:02 +02:00
Henrik Lissner
30893b0ff1
Fix doom-initialize-packages 2018-05-24 21:20:02 +02:00
Henrik Lissner
8282280965
core-packages: revise docstrings & comments 2018-05-24 21:20:02 +02:00
Henrik Lissner
ea86b1075f
Fix doom-template-exists-p 2018-05-24 21:20:02 +02:00
Henrik Lissner
b70ed84a33
Fix doom//run-tests 2018-05-24 21:20:02 +02:00
Henrik Lissner
2a8da07e31
Rename autoload-debug.el test to autoload-help.el 2018-05-24 21:20:02 +02:00
Henrik Lissner
6dc375a891
Fix catch-all text-mode entry in auto-mode-alist
This indirectly fixes an issue where the elfeed db was opened in
text-mode, triggering the large-file check.
2018-05-24 21:20:02 +02:00
Henrik Lissner
18a6df5e6f
Fix doom/info 2018-05-24 21:20:02 +02:00
Henrik Lissner
87e9365a41
Fix package autoremove/install/update batch commands 2018-05-24 21:20:02 +02:00
Henrik Lissner
b629f4f507
Fix doom//clean-byte-compiled-files 2018-05-24 21:20:02 +02:00
Henrik Lissner
6ea5430c4d
Fix doom//byte-compile 2018-05-24 21:20:02 +02:00
Henrik Lissner
3261f1fd71
Finalize core-dispatcher API
+ Add doom-auto-accept to replace YES envvar.
+ Add docstrings & documentation to all commands.
+ Make dispatcher support more than one alias.
+ Document quickstart command
+ Update autoloads/install/autoremove/update/refresh to fit new initialization workflows
+ Rename doom//info and doom//version
+ Recompile alias is now rc instead of cc
+ Improve reliability of doom//quickstart
2018-05-24 21:20:02 +02:00
Henrik Lissner
8746c12fae
Redesign Doom bootstrap, caching & autoload generation logic
The autoloads file has been split into doom-autoload-file and
doom-package-autoload-file. The former is for Doom's modules and
standard library; the latter is for compiling all package autoloads like
load-path and auto-mode-alist (among other things).

This reduced my startup speed from ~1s to ~0.5s
2018-05-24 21:20:02 +02:00
Henrik Lissner
3dd291a675
core-lib: improve function docstrings 2018-05-24 21:15:17 +02:00
Henrik Lissner
4ee0b5ba6d
New macros file-exists-p! & project-file-exists-p!
The latter replaces the doom-project-has! macro
2018-05-24 21:15:17 +02:00
Henrik Lissner
b2186745b7
Refactor doom--resolve-path-forms 2018-05-24 18:35:06 +02:00
Henrik Lissner
47ccbb5d41
print!: use terpri instead of princ for newline
Will produce the appropriate newline for the current OS.
2018-05-24 18:30:37 +02:00
Henrik Lissner
b25e215d59
Increase last-pkg-refresh ttl from 900 -> 1200s 2018-05-24 16:41:14 +02:00
Henrik Lissner
592e16d76d
Conform debug commands to naming convention 2018-05-24 16:40:37 +02:00
Henrik Lissner
a48f75371b
core-lib (doom-files-in): default relative-to to default-directory 2018-05-24 13:02:20 +02:00
Henrik Lissner
5d42b1512b
Fix naive path concatenation for doom-private-dir #513 2018-05-24 11:49:01 +02:00
Henrik Lissner
b452aded76
Mention doom-emacs-dir must end with a slash 2018-05-24 11:44:17 +02:00
Henrik Lissner
dc0175b8e1
Merge doom-files-under into doom-files-in; more powerful doom-files-in 2018-05-23 23:34:32 +02:00
Henrik Lissner
2637c415d3
Add error checks & docstrings to doom-keyword-* lib functions 2018-05-23 19:09:09 +02:00
Henrik Lissner
553d00b598
Add doctor/help dummy dispatchers
This way they show up in doom help + documentation.
2018-05-21 15:42:36 +02:00
Henrik Lissner
fbf8a7be56
Remove vestigial references to doom//reload-load-path 2018-05-21 01:38:17 +02:00
Henrik Lissner
f853d8b407
Update core autoload-message tests 2018-05-21 01:38:17 +02:00
Henrik Lissner
67269fdf2b
add-transient-hook!: unintern => fmakunbound 2018-05-21 01:38:17 +02:00
Henrik Lissner
ac5eaf0fb3
Load core-lib before core-package
So that core-package may use the Doom standard library.
2018-05-21 01:38:17 +02:00
Henrik Lissner
8ce5e96ea5
recentf: auto-cleanup = 120; refactor temp-file detector 2018-05-21 01:38:17 +02:00
Henrik Lissner
1369c51000
Replace :defer HOOK/FN with :after-call keyword 2018-05-21 01:38:17 +02:00
Henrik Lissner
89c52e7d99
Rename reload dispatcher to refresh & refactor 2018-05-21 01:38:17 +02:00
Henrik Lissner
454a962d6b
Rewrite doom//reload (merge reload-load-path into it) 2018-05-21 01:38:17 +02:00
Henrik Lissner
16a9126b3e
Make after! noop if package is disabled
After disabling a package, def-package! blocks for that package are
ignored. Now, after! blocks for those packages will be ignored too.
2018-05-21 01:38:17 +02:00
Henrik Lissner
f2c02e32c8
General minor refactor & comment updates 2018-05-21 01:38:17 +02:00
Henrik Lissner
f3f8172579
Fix {copy,move}-this-file commands when file doesn't exist yet 2018-05-21 01:38:17 +02:00
Henrik Lissner
f058505306
New bin/doom (eventual replacement for make)
This commit adds bin/doom, which acts as the middle man that make once
was (and will stay for a while, though the documentation will shift away
from using it). It does everything the previous make interface did, but
is faster and more flexible. bin/doom should eventually replace the
makefile.

bin/doom also makes it easier to run Doom outside of ~/.emacs.d and
~/.doom.d with, for example:

  bin/doom run -p ~/.other.doom.d/ -e ~/.other.emacs.d

bin/doom.cmd is included for Windows users, but I don't recommend using
it yet. It hasn't been tested nor have I ever written a batch script
before.

Also update init.example.el with new defaults.
2018-05-21 01:38:17 +02:00
Henrik Lissner
da5c7d27cf
Use correct init hook (doom-post-init-hook) 2018-05-20 12:18:48 +02:00
Henrik Lissner
8da3f56795
core-project: rename autoload-project-mode => init-project-mode
To be consistent with other initializing hooks.
2018-05-20 12:18:16 +02:00
Henrik Lissner
d4608c08f8
Defer dtrt-indent & don't detect indent in noninteractive Doom 2018-05-20 12:18:16 +02:00
Henrik Lissner
5c101f1909
Update modules library: message! => print! 2018-05-20 12:18:16 +02:00
Henrik Lissner
b82ef2cee6
Add open-manual command (docs don't exist yet though!) 2018-05-20 12:18:16 +02:00
Henrik Lissner
f80be3682b
New open-bug-report & open-vanilla-sandbox commands 2018-05-20 12:18:16 +02:00
Henrik Lissner
7b8917ed42
Split core/autoload/util.el into {help,debug}.el 2018-05-20 12:13:05 +02:00
Henrik Lissner
af7fb1c628
Change doom/retab to reformat w/ opposite style if ARG 2018-05-20 12:10:10 +02:00
Henrik Lissner
b7b1445712
Update doom-get-outdated-packages to match new init process 2018-05-20 12:07:31 +02:00
Henrik Lissner
c826f0f6a8
Shrink dependency chains in core libraries 2018-05-20 12:06:50 +02:00
Henrik Lissner
0634289a01
Autoload doom-*-package functions 2018-05-20 12:05:17 +02:00
Henrik Lissner
61ca98fd3f
Refactor package managent batch commands
+ Replace message! with print!
+ doom//packages-* commands now only return t if package list changed
2018-05-20 12:03:50 +02:00
Henrik Lissner
0d9db6f149
Rewrite autoload/message library
+ Rename message! => print!
+ New printerr! macro
+ Extended color support to interactive sessions (now propertized using
  term faces, so we don't have to rely on a popup window to display it).
2018-05-20 11:44:10 +02:00
Henrik Lissner
f984d46a9b
Fix featurep! & load! calls while byte-compiling
The would prioritize load-file-name over byte-compile-current-file
during byte-compiling, which would result featurep! being unable to
resolve the current module and load! from figuring out where "here" was
to build its relative paths from.
2018-05-20 00:57:58 +02:00
Henrik Lissner
a46e7655dc
Move batch commands from core-packages to autoload/modules 2018-05-20 00:57:18 +02:00
Henrik Lissner
1d99ee5017
Add esup back to core package list 2018-05-20 00:37:48 +02:00
Henrik Lissner
2d2ce3cff9
Fix exec-path/osx-clipboard initializing too early 2018-05-20 00:08:19 +02:00
Henrik Lissner
dc4e0f1556
Add doom-file-cookie-p to core-lib 2018-05-20 00:07:06 +02:00
Henrik Lissner
85ee9ce459
Refactor doom module API
+ Consolidate the CATEGORY -> MODULE terminology
+ Rename functions to make their function easier to understand
  + Rename doom-module-expand-file => doom-module-path
  + Rename doom-module-find-path => doom-module-locate-path
2018-05-20 00:03:57 +02:00
Henrik Lissner
5abdbaee38
Rewrite docstrings for doom-initialize{,-packages} 2018-05-20 00:01:07 +02:00
Henrik Lissner
6f5e710d98
Refactor startup process, hooks, doom-initialize & doom!
+ Brings back doom-pre-init-hook and doom-post-init-hook hooks.
+ Extracts autoload file loading logic into doom-initialize-autoloads
  function.
2018-05-19 23:59:55 +02:00
Henrik Lissner
17d5721102
Minor reformatting of core startup config 2018-05-19 23:49:25 +02:00
Henrik Lissner
a19a64b16b
Complain if using Emacs <25
More helpful than advice-add errors.
2018-05-19 18:01:54 +02:00
Henrik Lissner
fa37d7b05e
Refactor core initialization process
A vastly simpler bootstrap process.

Also load core libs in core-lib (duh)
2018-05-19 16:42:48 +02:00
Henrik Lissner
59f510e85f
Add four new functions for keywords & file collection 2018-05-19 16:32:12 +02:00
Henrik Lissner
f16aa539c7
Fix window is not a live frame error #596 2018-05-18 22:06:10 +02:00