feat(tools/eaglemode): add helper function for Eagle Mode commands
This generates the correct `.pl` files for adding Eagle Mode commands. This commit does not yet contain the wiring for adding these into Eagle Mode directly, which is a bit involved. Change-Id: I7d88128ba3ddaebfbb618db45e8fa843a3f17dea Reviewed-on: https://cl.tvl.fyi/c/depot/+/12366 Tested-by: BuildkiteCI Reviewed-by: emery <emery@dmz.rs>
This commit is contained in:
parent
0979379980
commit
d235fd99c2
1 changed files with 57 additions and 0 deletions
57
tools/eaglemode/default.nix
Normal file
57
tools/eaglemode/default.nix
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# Helper functions for extending Eagle Mode with useful stuff.
|
||||||
|
#
|
||||||
|
# Eagle Mode's customisation usually expects people to copy the entire
|
||||||
|
# configuration into their user folder, which we can automate fairly easily
|
||||||
|
# using Nix, letting users choose whether to keep upstream config or not.
|
||||||
|
{ depot, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
mkDesc = d: lib.concatMapStringsSep "\n"
|
||||||
|
(x: "# Descr =${x}")
|
||||||
|
(builtins.filter (s: s != "") (lib.splitString "\n" d));
|
||||||
|
in
|
||||||
|
rec {
|
||||||
|
# mkCommand creates an Eagle Mode command for the file browser.
|
||||||
|
#
|
||||||
|
# Commands are basically little Perl scripts with a command standard library
|
||||||
|
# available. They receive the user's selected target from Eagle Mode.
|
||||||
|
mkCommand =
|
||||||
|
{
|
||||||
|
# Name of the command.
|
||||||
|
name
|
||||||
|
, # User-facing description, displayed in Eagle Mode UI. Can be multi-line.
|
||||||
|
description
|
||||||
|
, # Verbatim Perl code of the command. Command library is already available.
|
||||||
|
code
|
||||||
|
, # Caption for the UI button (defaults to name).
|
||||||
|
caption ? name
|
||||||
|
, icon ? "terminal.tga"
|
||||||
|
, # TODO: what's a good default?
|
||||||
|
hotkey ? ""
|
||||||
|
, order ? 1.0
|
||||||
|
}: pkgs.writeTextDir "emFileMan/Commands/${name}.pl" (''
|
||||||
|
#!${pkgs.perl}/bin/perl
|
||||||
|
#[[BEGIN PROPERTIES]]
|
||||||
|
# Type = Command
|
||||||
|
# Interpreter = perl
|
||||||
|
# DefaultFor = directory
|
||||||
|
# Caption = ${caption}
|
||||||
|
# Order = ${toString order}
|
||||||
|
# Icon = ${icon}
|
||||||
|
''
|
||||||
|
+ (lib.optionalString (description != "") "${mkDesc description}\n")
|
||||||
|
+ (lib.optionalString (hotkey != "") "# Hotkey = ${hotkey}\n")
|
||||||
|
+ ''
|
||||||
|
#[[END PROPERTIES]]
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
BEGIN { require "$ENV{'EM_DIR'}/res/emFileMan/scripts/cmd-util.pl"; }
|
||||||
|
|
||||||
|
${if builtins.isString code
|
||||||
|
then code
|
||||||
|
else (if builtins.isPath code
|
||||||
|
then builtins.readFile code
|
||||||
|
else throw "code must be a string (literal code) or path to file")}
|
||||||
|
'');
|
||||||
|
}
|
Loading…
Reference in a new issue