Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
612ecaff6c | ||
|
|
a85364ecff | ||
|
|
c0af03c503 | ||
|
|
9b61e4793b | ||
|
|
75a19e74a0 | ||
|
|
21d7e72b0c | ||
|
|
05d555eae5 | ||
|
|
80147a9ebc | ||
|
|
3f6a3e25f1 | ||
|
|
800cbeef9d | ||
|
|
574f6a976f | ||
|
|
030b360e57 | ||
|
|
b883714192 | ||
|
|
d556f48168 | ||
|
|
cd7cac0eec | ||
|
|
9b31f18470 | ||
|
|
42a194b3d7 | ||
|
|
6748a7125e | ||
|
|
c2b3f29f3b | ||
|
|
572a634d90 | ||
|
|
652606ffb0 | ||
|
|
803537c63e | ||
|
|
4648c2d9af | ||
|
|
edceb3e7e9 | ||
|
|
da6bddcd77 | ||
|
|
b11f43e903 | ||
|
|
ef218a4d2e | ||
|
|
b061f27e7a | ||
|
|
8e64d54ab1 | ||
|
|
56b40a80ac | ||
|
|
d359d8ecb4 | ||
|
|
2bc55d00bb | ||
|
|
d3cf564b71 | ||
|
|
4fb8b97084 | ||
|
|
32c5cceb1d | ||
|
|
f38c14d6b5 | ||
|
|
0122b3f717 | ||
|
|
79678fd82f | ||
|
|
034ddfbafb | ||
|
|
aebd26d03a |
17
ChangeLog.md
17
ChangeLog.md
@@ -1,6 +1,23 @@
|
|||||||
## Changes from most recent to oldest
|
## Changes from most recent to oldest
|
||||||
|
|
||||||
|
**25 Mar 2023 - wpferguson**
|
||||||
|
* Added script_manager darktable shortcut integration
|
||||||
|
* Moved filename/path/extension string functions to string library
|
||||||
|
|
||||||
|
**06 Mar 2023 - wpferguson - Added option to disable script_manager update check**
|
||||||
|
|
||||||
|
**12 Jan 2022 - wpferguson - Documented contrib/rename_images.lua**
|
||||||
|
|
||||||
|
**28 Dec 2021 - wpferguson - Replaced deprecated _which_ command with _command -v_ in lib/dtutils/file.lua**
|
||||||
|
|
||||||
|
**12 Dec 2021 - wpferguson**
|
||||||
|
* Added deprecated function to library
|
||||||
|
* Added deprecation warning to contrib/rename-tags.lua
|
||||||
|
|
||||||
**22 Oct 2021 - wpferguson for Volker Bödker - make sure sequence is 4 digits in rename_images.lua**
|
**22 Oct 2021 - wpferguson for Volker Bödker - make sure sequence is 4 digits in rename_images.lua**
|
||||||
|
|
||||||
**31 Aug 2021 - wpferguson - remove styles hiding from AutoGrouper.lua**
|
**31 Aug 2021 - wpferguson - remove styles hiding from AutoGrouper.lua**
|
||||||
|
|
||||||
**02 Jul 2021 - wpferguson - merged API-7.0.0-dev branch to master**
|
**02 Jul 2021 - wpferguson - merged API-7.0.0-dev branch to master**
|
||||||
* API-7.0.0 is darktable 3.6
|
* API-7.0.0 is darktable 3.6
|
||||||
* breaking changes
|
* breaking changes
|
||||||
|
|||||||
33
README.md
33
README.md
@@ -34,36 +34,38 @@ These scripts are contributed by users. They are meant to have an "owner", i.e.
|
|||||||
|
|
||||||
Name|Standalone|OS |Purpose
|
Name|Standalone|OS |Purpose
|
||||||
----|:--------:|:---:|-------
|
----|:--------:|:---:|-------
|
||||||
[AutoGrouper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/AutoGrouper)|Yes|LMW|Group images together by time
|
[AutoGrouper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autogrouper)|Yes|LMW|Group images together by time
|
||||||
[autostyle](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autostyle)|Yes|LMW|Automatically apply styles on import
|
[autostyle](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autostyle)|Yes|LMW|Automatically apply styles on import
|
||||||
[clear_GPS](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/clear_GPS)|Yes|LMW|Reset GPS information for selected images
|
change_group_leader|Yes|LMW|Change which image leads group
|
||||||
[CollectHelper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/CollectHelper)|Yes|LMW|Add buttons to selected images module to manipulate the collection
|
[clear_GPS](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/clear_gps)|Yes|LMW|Reset GPS information for selected images
|
||||||
|
[CollectHelper](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/collecthelper)|Yes|LMW|Add buttons to selected images module to manipulate the collection
|
||||||
[copy_attach_detach_tags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/copy_attach_detach_tags)|Yes|LMW|Copy and paste tags from/to images
|
[copy_attach_detach_tags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/copy_attach_detach_tags)|Yes|LMW|Copy and paste tags from/to images
|
||||||
[cr2hdr](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/cr2hdr)|Yes|L|Process image created with Magic Lantern Dual ISO
|
[cr2hdr](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/cr2hdr)|Yes|L|Process image created with Magic Lantern Dual ISO
|
||||||
[enfuseAdvanced](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/enfuseAdvanced)|No|LMW|Merge multiple images into Dynamic Range Increase (DRI) or Depth From Focus (DFF) images
|
[enfuseAdvanced](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/enfuseadvanced)|No|LMW|Merge multiple images into Dynamic Range Increase (DRI) or Depth From Focus (DFF) images
|
||||||
[exportLUT](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/exportLUT)|Yes|LMW|Create a LUT from a style and export it
|
[exportLUT](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/exportlut)|Yes|LMW|Create a LUT from a style and export it
|
||||||
[ext_editor](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/ext_editor)|No|LW|Export pictures to collection and edit them with up to nine user-defined external editors
|
[ext_editor](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/ext_editor)|No|LW|Export pictures to collection and edit them with up to nine user-defined external editors
|
||||||
[face_recognition](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/face_recognition)|No|LM|Identify and tag images using facial recognition
|
[face_recognition](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/face_recognition)|No|LM|Identify and tag images using facial recognition
|
||||||
[fujifilm_dynamic_range](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_dynamic_range)|No|LMW|Correct fujifilm exposure based on exposure bias camera setting
|
[fujifilm_dynamic_range](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_dynamic_range)|No|LMW|Correct fujifilm exposure based on exposure bias camera setting
|
||||||
[fujifilm_ratings](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_ratings)|No|LM|Support importing Fujifilm ratings
|
[fujifilm_ratings](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_ratings)|No|LM|Support importing Fujifilm ratings
|
||||||
[geoJSON_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geoJSON_export)|No|L|Create a geo JSON script with thumbnails for use in ...
|
[geoJSON_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geojson_export)|No|L|Create a geo JSON script with thumbnails for use in ...
|
||||||
[geoToolbox](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geoToolbox)|No|LMW|A toolbox of geo functions
|
[geoToolbox](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geotoolbox)|No|LMW|A toolbox of geo functions
|
||||||
[gimp](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gimp)|No|LMW|Open an image in GIMP for editing and return the result
|
[gimp](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gimp)|No|LMW|Open an image in GIMP for editing and return the result
|
||||||
[gpx_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gpx_export)|No|LMW|Export a GPX track file from selected images GPS data
|
[gpx_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gpx_export)|No|LMW|Export a GPX track file from selected images GPS data
|
||||||
[HDRMerge](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/HDRMerge)|No|LMW|Combine the selected images into an HDR DNG and return the result
|
[HDRMerge](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hdrmerge)|No|LMW|Combine the selected images into an HDR DNG and return the result
|
||||||
[hugin](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hugin)|No|LMW|Combine selected images into a panorama and return the result
|
[hugin](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hugin)|No|LMW|Combine selected images into a panorama and return the result
|
||||||
[image_stack](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_stack)|No|LMW|Combine a stack of images to remove noise or transient objects
|
[image_stack](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_stack)|No|LMW|Combine a stack of images to remove noise or transient objects
|
||||||
[image_time](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_time)|Yes|LMW|Adjust the EXIF image time
|
[image_time](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_time)|Yes|LMW|Adjust the EXIF image time
|
||||||
[kml_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/kml_export)|No|L|Export photos with a KML file for usage in Google Earth
|
[kml_export](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/kml_export)|No|L|Export photos with a KML file for usage in Google Earth
|
||||||
[LabelsToTags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/LabelsToTags)|Yes|LMW|Apply tags based on color labels and ratings
|
[LabelsToTags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/labelstotags)|Yes|LMW|Apply tags based on color labels and ratings
|
||||||
[OpenInExplorer](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/OpenInExplorer)|No|LMW|Open the selected images in the system file manager
|
[OpenInExplorer](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/openinexplorer)|No|LMW|Open the selected images in the system file manager
|
||||||
[passport_guide](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/passport_guide)|Yes|LMW|Add passport cropping guide to darkroom crop tool
|
[passport_guide](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/passport_guide)|Yes|LMW|Add passport cropping guide to darkroom crop tool
|
||||||
[pdf_slideshow](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/pdf_slideshow)|No|LM|Export images to a PDF slideshow
|
[pdf_slideshow](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/pdf_slideshow)|No|LM|Export images to a PDF slideshow
|
||||||
[photils](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/photils)|No|LM|Automatic tag suggestions for your images
|
[photils](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/photils)|No|LM|Automatic tag suggestions for your images
|
||||||
[quicktag](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/quicktag)|Yes|LMW|Create shortcuts for quickly applying tags
|
[quicktag](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/quicktag)|Yes|LMW|Create shortcuts for quickly applying tags
|
||||||
[rate_group](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rate_group)|Yes|LMW|Apply or remove a star rating from grouped images
|
[rate_group](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rate_group)|Yes|LMW|Apply or remove a star rating from grouped images
|
||||||
|
[rename_images](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rename_images)|Yes|LMW|Rename single or multiple images
|
||||||
[rename-tags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rename-tags)|Yes|LMW|Change a tag name
|
[rename-tags](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rename-tags)|Yes|LMW|Change a tag name
|
||||||
[RL_out_sharp](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/RL_out_sharp)|No|LW|Output sharpening using GMic (Richardson-Lucy algorithm)
|
[RL_out_sharp](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rl_out_sharp)|No|LW|Output sharpening using GMic (Richardson-Lucy algorithm)
|
||||||
[select_untagged](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/select_untagged)|Yes|LMW|Enable selection of untagged images
|
[select_untagged](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/select_untagged)|Yes|LMW|Enable selection of untagged images
|
||||||
[slideshowMusic](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/slideshowMusic)|No|L|Play music during a slideshow
|
[slideshowMusic](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/slideshowMusic)|No|L|Play music during a slideshow
|
||||||
[transfer_hierarchy](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/transfer_hierarchy)|Yes|LMW|Image move/copy preserving directory hierarchy
|
[transfer_hierarchy](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/transfer_hierarchy)|Yes|LMW|Image move/copy preserving directory hierarchy
|
||||||
@@ -77,14 +79,14 @@ Name|Standalone|OS |Purpose
|
|||||||
----|:--------:|:---:|-------
|
----|:--------:|:---:|-------
|
||||||
[api_version](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/api_version)|Yes|LMW|Print the current API version
|
[api_version](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/api_version)|Yes|LMW|Print the current API version
|
||||||
[darkroom_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/darkroom_demo)|Yes|LMW|Demonstrate changing images in darkoom
|
[darkroom_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/darkroom_demo)|Yes|LMW|Demonstrate changing images in darkoom
|
||||||
[gettextExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/gettextExample)|Yes|LM|How to use translation
|
[gettextExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/gettextexample)|Yes|LM|How to use translation
|
||||||
[hello_world](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/hello_world)|Yes|LMW|Prints hello world when darktable starts
|
[hello_world](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/hello_world)|Yes|LMW|Prints hello world when darktable starts
|
||||||
[lighttable_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/lighttable_demo)|Yes|LMW|Demonstrate controlling lighttable mode, zoom, sorting and filtering
|
[lighttable_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/lighttable_demo)|Yes|LMW|Demonstrate controlling lighttable mode, zoom, sorting and filtering
|
||||||
[moduleExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/moduleExample)|Yes|LMW|How to create a lighttable module
|
[moduleExample](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/moduleexample)|Yes|LMW|How to create a lighttable module
|
||||||
[multi_os](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/multi_os)|No|LMW|How to create a cross platform script that calls an external executable
|
[multi_os](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/multi_os)|No|LMW|How to create a cross platform script that calls an external executable
|
||||||
[panels_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/panels_demo)|Yes|LMW|Demonstrate hiding and showing darktable panels
|
[panels_demo](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/panels_demo)|Yes|LMW|Demonstrate hiding and showing darktable panels
|
||||||
[preferenceExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/preferenceExamples)|Yes|LMW|How to use preferences in a script
|
[preferenceExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/preferenceexamples)|Yes|LMW|How to use preferences in a script
|
||||||
[printExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/printExamples)|Yes|LMW|How to use various print functions from a script
|
[printExamples](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/printexamples)|Yes|LMW|How to use various print functions from a script
|
||||||
[running_os](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/running_os)|Yes|LMW|Print out the running operating system
|
[running_os](https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/running_os)|Yes|LMW|Print out the running operating system
|
||||||
|
|
||||||
### Tools
|
### Tools
|
||||||
@@ -114,6 +116,7 @@ The following third-party projects are listed for information only. Think of thi
|
|||||||
* [arru/darktable-scripts](https://github.com/arru/darktable-scripts)
|
* [arru/darktable-scripts](https://github.com/arru/darktable-scripts)
|
||||||
* [nbremond77/darktable](https://github.com/nbremond77/darktable/tree/master/scripts)
|
* [nbremond77/darktable](https://github.com/nbremond77/darktable/tree/master/scripts)
|
||||||
* [s5k6/dtscripts](https://github.com/s5k6/dtscripts)
|
* [s5k6/dtscripts](https://github.com/s5k6/dtscripts)
|
||||||
|
* [ChristianBirzer/darktable_extra_scripts](https://github.com/ChristianBirzer/darktable_extra_scripts)
|
||||||
|
|
||||||
## Download and Install
|
## Download and Install
|
||||||
|
|
||||||
|
|||||||
200
contrib/change_group_leader.lua
Normal file
200
contrib/change_group_leader.lua
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
--[[
|
||||||
|
change group leader
|
||||||
|
|
||||||
|
copyright (c) 2020, 2022 Bill Ferguson <wpferguson@gmail.com>
|
||||||
|
copyright (c) 2021 Angel Angelov
|
||||||
|
|
||||||
|
darktable 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.
|
||||||
|
|
||||||
|
darktable 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 darktable. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
]]
|
||||||
|
|
||||||
|
--[[
|
||||||
|
CHANGE GROUP LEADER
|
||||||
|
automatically change the leader of raw+jpg paired image groups
|
||||||
|
|
||||||
|
INSTALLATION
|
||||||
|
* copy this file in $CONFIGDIR/lua/ where CONFIGDIR is your darktable configuration directory
|
||||||
|
* add the following line in the file $CONFIGDIR/luarc
|
||||||
|
require "change_group_leader"
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
* in lighttable mode, select the image groups you wish to process,
|
||||||
|
select whether you want to set the leader to "jpg" or "raw",
|
||||||
|
and click "Execute"
|
||||||
|
]]
|
||||||
|
|
||||||
|
local dt = require "darktable"
|
||||||
|
local du = require "lib/dtutils"
|
||||||
|
|
||||||
|
local gettext = dt.gettext
|
||||||
|
|
||||||
|
local MODULE = "change_group_leader"
|
||||||
|
|
||||||
|
du.check_min_api_version("3.0.0", MODULE)
|
||||||
|
|
||||||
|
-- return data structure for script_manager
|
||||||
|
|
||||||
|
local script_data = {}
|
||||||
|
|
||||||
|
script_data.destroy = nil -- function to destory the script
|
||||||
|
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet, otherwise leave as nil
|
||||||
|
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
|
||||||
|
|
||||||
|
-- Tell gettext where to find the .mo file translating messages for a particular domain
|
||||||
|
gettext.bindtextdomain(MODULE, dt.configuration.config_dir.."/lua/locale/")
|
||||||
|
|
||||||
|
local function _(msgid)
|
||||||
|
return gettext.dgettext(MODULE, msgid)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- create a namespace to contain persistent data and widgets
|
||||||
|
chg_grp_ldr = {}
|
||||||
|
|
||||||
|
local cgl = chg_grp_ldr
|
||||||
|
|
||||||
|
cgl.widgets = {}
|
||||||
|
|
||||||
|
cgl.event_registered = false
|
||||||
|
cgl.module_installed = false
|
||||||
|
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
-- F U N C T I O N S
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
local function install_module()
|
||||||
|
if not cgl.module_installed then
|
||||||
|
dt.register_lib(
|
||||||
|
MODULE, -- Module name
|
||||||
|
_("change_group_leader"), -- Visible name
|
||||||
|
true, -- expandable
|
||||||
|
false, -- resetable
|
||||||
|
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 700}}, -- containers
|
||||||
|
cgl.widgets.box,
|
||||||
|
nil,-- view_enter
|
||||||
|
nil -- view_leave
|
||||||
|
)
|
||||||
|
cgl.module_installed = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function find_group_leader(images, mode)
|
||||||
|
for _, img in ipairs(images) do
|
||||||
|
dt.print_log("checking image " .. img.id .. " named " .. img.filename)
|
||||||
|
local found = false
|
||||||
|
if mode == "jpg" then
|
||||||
|
if string.match(string.lower(img.filename), "jpg$") then
|
||||||
|
dt.print_log("jpg matched image " .. img.filename)
|
||||||
|
found = true
|
||||||
|
end
|
||||||
|
elseif mode == "raw" then
|
||||||
|
if img.is_raw and img.duplicate_index == 0 then
|
||||||
|
dt.print_log("found raw " .. img.filename)
|
||||||
|
found = true
|
||||||
|
end
|
||||||
|
elseif mode == "non-raw" then
|
||||||
|
if img.is_ldr then
|
||||||
|
dt.print_log("found ldr " .. img.filename)
|
||||||
|
found = true
|
||||||
|
end
|
||||||
|
else
|
||||||
|
dt.print_error(MODULE .. ": unrecognized mode " .. mode)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if found then
|
||||||
|
dt.print_log("making " .. img.filename .. " group leader")
|
||||||
|
img:make_group_leader()
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function process_image_groups(images)
|
||||||
|
if #images < 1 then
|
||||||
|
dt.print(_("No images selected."))
|
||||||
|
dt.print_log(MODULE .. "no images seletected, returning...")
|
||||||
|
else
|
||||||
|
local mode = cgl.widgets.mode.value
|
||||||
|
for _,img in ipairs(images) do
|
||||||
|
dt.print_log("checking image " .. img.id)
|
||||||
|
local group_images = img:get_group_members()
|
||||||
|
if group_images == 1 then
|
||||||
|
dt.print_log("only one image in group for image " .. image.id)
|
||||||
|
else
|
||||||
|
find_group_leader(group_images, mode)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
-- S C R I P T M A N A G E R I N T E G R A T I O N
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
local function destroy()
|
||||||
|
dt.gui.libs[MODULE].visible = false
|
||||||
|
end
|
||||||
|
|
||||||
|
local function restart()
|
||||||
|
dt.gui.libs[MODULE].visible = true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
-- W I D G E T S
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
cgl.widgets.mode = dt.new_widget("combobox"){
|
||||||
|
label = _("select new group leader"),
|
||||||
|
tooltip = _("select type of image to be group leader"),
|
||||||
|
selected = 1,
|
||||||
|
"jpg", "raw", "non-raw",
|
||||||
|
}
|
||||||
|
|
||||||
|
cgl.widgets.execute = dt.new_widget("button"){
|
||||||
|
label = _("Execute"),
|
||||||
|
clicked_callback = function()
|
||||||
|
process_image_groups(dt.gui.action_images)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
cgl.widgets.box = dt.new_widget("box"){
|
||||||
|
orientation = "vertical",
|
||||||
|
cgl.widgets.mode,
|
||||||
|
cgl.widgets.execute,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
-- D A R K T A B L E I N T E G R A T I O N
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
if dt.gui.current_view().id == "lighttable" then
|
||||||
|
install_module()
|
||||||
|
else
|
||||||
|
if not cgl.event_registered then
|
||||||
|
dt.register_event(
|
||||||
|
"view-changed",
|
||||||
|
function(event, old_view, new_view)
|
||||||
|
if new_view.name == "lighttable" and old_view.name == "darkroom" then
|
||||||
|
install_module()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
)
|
||||||
|
cgl.event_registered = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
script_data.destroy = destroy
|
||||||
|
script_data.restart = restart
|
||||||
|
script_data.destroy_method = "hide"
|
||||||
|
script_data.show = restart
|
||||||
|
|
||||||
|
return script_data
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Compensate for Fujifilm raw files made using "dynamic range".
|
Compensate for Fujifilm raw files made using "dynamic range".
|
||||||
|
|
||||||
Copyright (C) 2021 Dan Torop <dant@pnym.net>
|
Copyright (C) 2021, 2022 Dan Torop <dant@pnym.net>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
@@ -116,6 +116,11 @@ local function destroy()
|
|||||||
dt.destroy_event("fujifilm_dr", "post-import-image")
|
dt.destroy_event("fujifilm_dr", "post-import-image")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if not df.check_if_bin_exists("exiftool") then
|
||||||
|
dt.print_log("Please install exiftool to use fujifilm_dynamic_range")
|
||||||
|
error "[fujifilm_dynamic_range] exiftool not found"
|
||||||
|
end
|
||||||
|
|
||||||
dt.register_event("fujifilm_dr", "post-import-image",
|
dt.register_event("fujifilm_dr", "post-import-image",
|
||||||
detect_dynamic_range)
|
detect_dynamic_range)
|
||||||
|
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ local defaultDir = ''
|
|||||||
if dt.configuration.running_os == "windows" then
|
if dt.configuration.running_os == "windows" then
|
||||||
defaultDir = os.getenv("USERPROFILE")
|
defaultDir = os.getenv("USERPROFILE")
|
||||||
elseif dt.configuration.running_os == "macos" then
|
elseif dt.configuration.running_os == "macos" then
|
||||||
defaultDir = os.getenv("home")
|
defaultDir = os.getenv("HOME")
|
||||||
else
|
else
|
||||||
local handle = io.popen("xdg-user-dir DESKTOP")
|
local handle = io.popen("xdg-user-dir DESKTOP")
|
||||||
defaultDir = handle:read()
|
defaultDir = handle:read()
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ local debug = require "darktable.debug"
|
|||||||
|
|
||||||
-- check API version
|
-- check API version
|
||||||
du.check_min_api_version("7.0.0", "rename-tags")
|
du.check_min_api_version("7.0.0", "rename-tags")
|
||||||
|
du.deprecated("contrib/rename-tags.lua","darktable release 4.0")
|
||||||
|
|
||||||
-- return data structure for script_manager
|
-- return data structure for script_manager
|
||||||
|
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ local defaultVideoDir = ''
|
|||||||
if dt.configuration.running_os == "windows" then
|
if dt.configuration.running_os == "windows" then
|
||||||
defaultVideoDir = os.getenv("USERPROFILE")..PS .."videos"
|
defaultVideoDir = os.getenv("USERPROFILE")..PS .."videos"
|
||||||
elseif dt.configuration.running_os == "macos" then
|
elseif dt.configuration.running_os == "macos" then
|
||||||
defaultVideoDir = os.getenv("home")..PS.."Videos"
|
defaultVideoDir = os.getenv("HOME")..PS.."Videos"
|
||||||
else
|
else
|
||||||
local handle = io.popen("xdg-user-dir VIDEOS")
|
local handle = io.popen("xdg-user-dir VIDEOS")
|
||||||
defaultVideoDir = handle:read()
|
defaultVideoDir = handle:read()
|
||||||
|
|||||||
@@ -330,4 +330,29 @@ function dtutils.find_image_by_id(imgid)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
dtutils.libdoc.functions["deprecated"] = {
|
||||||
|
Name = [[deprecated]],
|
||||||
|
Synopsis = [[print deprecation warning]],
|
||||||
|
Usage = [[local du = require "lib/dtutils"
|
||||||
|
|
||||||
|
du.deprecated(script_name, removal_string)
|
||||||
|
script_name - name of the script being deprecated
|
||||||
|
removal_strubg - a string explaining when the script will be removed]],
|
||||||
|
Description = [[deprecated prints an error message saying the script is deprecated and when it will be removed]],
|
||||||
|
Return_Value = [[]],
|
||||||
|
Limitations = [[]],
|
||||||
|
Example = [[local du = require "lib/dtutils"
|
||||||
|
du.deprecated("contrib/rename-tags.lua", "darktable release 4.0")]],
|
||||||
|
See_Also = [[]],
|
||||||
|
Reference = [[]],
|
||||||
|
License = [[]],
|
||||||
|
Copyright = [[]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function dtutils.deprecated(script_name, removal_string)
|
||||||
|
dt.print_toast("WARNING: " .. script_name .. " is deprecated and will be removed in " .. removal_string)
|
||||||
|
dt.print_error("WARNING: " .. script_name .. " is deprecated and will be removed in " .. removal_string)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
return dtutils
|
return dtutils
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ end
|
|||||||
|
|
||||||
local function _search_for_bin_nix(bin)
|
local function _search_for_bin_nix(bin)
|
||||||
local result = false
|
local result = false
|
||||||
local p = io.popen("which " .. bin)
|
local p = io.popen("command -v " .. bin)
|
||||||
local output = p:read("*a")
|
local output = p:read("*a")
|
||||||
p:close()
|
p:close()
|
||||||
if string.len(output) > 0 then
|
if string.len(output) > 0 then
|
||||||
@@ -394,125 +394,32 @@ function dtutils_file.check_if_bin_exists(bin)
|
|||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
dtutils_file.libdoc.functions["split_filepath"] = {
|
-- the following path, filename, etc functions have
|
||||||
Name = [[split_filepath]],
|
-- moved to the string library since they are string
|
||||||
Synopsis = [[split a filepath into parts]],
|
-- manipulation functions, and to prevent circular
|
||||||
Usage = [[local df = require "lib/dtutils.file"
|
-- library inclusiion.
|
||||||
|
|
||||||
local result = df.split_filepath(filepath)
|
-- these functions are left here for compatibility
|
||||||
filepath - string - path and filename]],
|
-- with older scripts
|
||||||
Description = [[split_filepath splits a filepath into the path, filename, basename and filetype and puts
|
|
||||||
that in a table]],
|
|
||||||
Return_Value = [[result - table - a table containing the path, filename, basename, and filetype]],
|
|
||||||
Limitations = [[]],
|
|
||||||
Example = [[]],
|
|
||||||
See_Also = [[]],
|
|
||||||
Reference = [[]],
|
|
||||||
License = [[]],
|
|
||||||
Copyright = [[]],
|
|
||||||
}
|
|
||||||
|
|
||||||
function dtutils_file.split_filepath(str)
|
function dtutils_file.split_filepath(str)
|
||||||
-- strip out single quotes from quoted pathnames
|
return ds.split_filepath(str)
|
||||||
str = string.gsub(str, "'", "")
|
|
||||||
str = string.gsub(str, '"', '')
|
|
||||||
local result = {}
|
|
||||||
-- Thank you Tobias Jakobs for the awesome regular expression, which I tweaked a little
|
|
||||||
result["path"], result["filename"], result["basename"], result["filetype"] = string.match(str, "(.-)(([^\\/]-)%.?([^%.\\/]*))$")
|
|
||||||
if result["basename"] == "" and result["filetype"]:len() > 1 then
|
|
||||||
result["basename"] = result["filetype"]
|
|
||||||
result["filetype"] = ""
|
|
||||||
end
|
end
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
dtutils_file.libdoc.functions["get_path"] = {
|
|
||||||
Name = [[get_path]],
|
|
||||||
Synopsis = [[get the path from a file path]],
|
|
||||||
Usage = [[local df = require "lib/dtutils.file"
|
|
||||||
|
|
||||||
local result = df.get_path(filepath)
|
|
||||||
filepath - string - path and filename]],
|
|
||||||
Description = [[get_path strips the filename and filetype from a path and returns the path]],
|
|
||||||
Return_Value = [[result - string - the path]],
|
|
||||||
Limitations = [[]],
|
|
||||||
Example = [[]],
|
|
||||||
See_Also = [[]],
|
|
||||||
Reference = [[]],
|
|
||||||
License = [[]],
|
|
||||||
Copyright = [[]],
|
|
||||||
}
|
|
||||||
|
|
||||||
function dtutils_file.get_path(str)
|
function dtutils_file.get_path(str)
|
||||||
local parts = dtutils_file.split_filepath(str)
|
return ds.get_path(str)
|
||||||
return parts["path"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
dtutils_file.libdoc.functions["get_filename"] = {
|
|
||||||
Name = [[get_filename]],
|
|
||||||
Synopsis = [[get the filename and extension from a file path]],
|
|
||||||
Usage = [[local df = require "lib/dtutils.file"
|
|
||||||
|
|
||||||
local result = df.get_filename(filepath)
|
|
||||||
filepath - string - path and filename]],
|
|
||||||
Description = [[get_filename strips the path from a filepath and returns the filename]],
|
|
||||||
Return_Value = [[result - string - the file name and type]],
|
|
||||||
Limitations = [[]],
|
|
||||||
Example = [[]],
|
|
||||||
See_Also = [[]],
|
|
||||||
Reference = [[]],
|
|
||||||
License = [[]],
|
|
||||||
Copyright = [[]],
|
|
||||||
}
|
|
||||||
|
|
||||||
function dtutils_file.get_filename(str)
|
function dtutils_file.get_filename(str)
|
||||||
local parts = dtutils_file.split_filepath(str)
|
return ds.get_filename(str)
|
||||||
return parts["filename"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
dtutils_file.libdoc.functions["get_basename"] = {
|
|
||||||
Name = [[get_basename]],
|
|
||||||
Synopsis = [[get the filename without the path or extension]],
|
|
||||||
Usage = [[local df = require "lib/dtutils.file"
|
|
||||||
|
|
||||||
local result = df.get_basename(filepath)
|
|
||||||
filepath - string - path and filename]],
|
|
||||||
Description = [[get_basename returns the name of the file without the path or filetype
|
|
||||||
]],
|
|
||||||
Return_Value = [[result - string - the basename of the file]],
|
|
||||||
Limitations = [[]],
|
|
||||||
Example = [[]],
|
|
||||||
See_Also = [[]],
|
|
||||||
Reference = [[]],
|
|
||||||
License = [[]],
|
|
||||||
Copyright = [[]],
|
|
||||||
}
|
|
||||||
|
|
||||||
function dtutils_file.get_basename(str)
|
function dtutils_file.get_basename(str)
|
||||||
local parts = dtutils_file.split_filepath(str)
|
return ds.get_basename(str)
|
||||||
return parts["basename"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
dtutils_file.libdoc.functions["get_filetype"] = {
|
|
||||||
Name = [[get_filetype]],
|
|
||||||
Synopsis = [[get the filetype from a filename]],
|
|
||||||
Usage = [[local df = require "lib/dtutils.file"
|
|
||||||
|
|
||||||
local result = df.get_filetype(filepath)
|
|
||||||
filepath - string - path and filename]],
|
|
||||||
Description = [[get_filetype returns the filetype from the supplied filepath]],
|
|
||||||
Return_Value = [[result - string - the filetype]],
|
|
||||||
Limitations = [[]],
|
|
||||||
Example = [[]],
|
|
||||||
See_Also = [[]],
|
|
||||||
Reference = [[]],
|
|
||||||
License = [[]],
|
|
||||||
Copyright = [[]],
|
|
||||||
}
|
|
||||||
|
|
||||||
function dtutils_file.get_filetype(str)
|
function dtutils_file.get_filetype(str)
|
||||||
local parts = dtutils_file.split_filepath(str)
|
return ds.get_filetype(str)
|
||||||
return parts["filetype"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -294,6 +294,127 @@ function dtutils_string.sanitize_lua(str)
|
|||||||
return str
|
return str
|
||||||
end
|
end
|
||||||
|
|
||||||
|
dtutils_string.libdoc.functions["split_filepath"] = {
|
||||||
|
Name = [[split_filepath]],
|
||||||
|
Synopsis = [[split a filepath into parts]],
|
||||||
|
Usage = [[local ds = require "lib/dtutils.string"
|
||||||
|
|
||||||
|
local result = ds.split_filepath(filepath)
|
||||||
|
filepath - string - path and filename]],
|
||||||
|
Description = [[split_filepath splits a filepath into the path, filename, basename and filetype and puts
|
||||||
|
that in a table]],
|
||||||
|
Return_Value = [[result - table - a table containing the path, filename, basename, and filetype]],
|
||||||
|
Limitations = [[]],
|
||||||
|
Example = [[]],
|
||||||
|
See_Also = [[]],
|
||||||
|
Reference = [[]],
|
||||||
|
License = [[]],
|
||||||
|
Copyright = [[]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function dtutils_string.split_filepath(str)
|
||||||
|
-- strip out single quotes from quoted pathnames
|
||||||
|
str = string.gsub(str, "'", "")
|
||||||
|
str = string.gsub(str, '"', '')
|
||||||
|
local result = {}
|
||||||
|
-- Thank you Tobias Jakobs for the awesome regular expression, which I tweaked a little
|
||||||
|
result["path"], result["filename"], result["basename"], result["filetype"] = string.match(str, "(.-)(([^\\/]-)%.?([^%.\\/]*))$")
|
||||||
|
if result["basename"] == "" and result["filetype"]:len() > 1 then
|
||||||
|
result["basename"] = result["filetype"]
|
||||||
|
result["filetype"] = ""
|
||||||
|
end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
dtutils_string.libdoc.functions["get_path"] = {
|
||||||
|
Name = [[get_path]],
|
||||||
|
Synopsis = [[get the path from a file path]],
|
||||||
|
Usage = [[local ds = require "lib/dtutils.string"
|
||||||
|
|
||||||
|
local result = ds.get_path(filepath)
|
||||||
|
filepath - string - path and filename]],
|
||||||
|
Description = [[get_path strips the filename and filetype from a path and returns the path]],
|
||||||
|
Return_Value = [[result - string - the path]],
|
||||||
|
Limitations = [[]],
|
||||||
|
Example = [[]],
|
||||||
|
See_Also = [[]],
|
||||||
|
Reference = [[]],
|
||||||
|
License = [[]],
|
||||||
|
Copyright = [[]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function dtutils_string.get_path(str)
|
||||||
|
local parts = dtutils_string.split_filepath(str)
|
||||||
|
return parts["path"]
|
||||||
|
end
|
||||||
|
|
||||||
|
dtutils_string.libdoc.functions["get_filename"] = {
|
||||||
|
Name = [[get_filename]],
|
||||||
|
Synopsis = [[get the filename and extension from a file path]],
|
||||||
|
Usage = [[local ds = require "lib/dtutils.string"
|
||||||
|
|
||||||
|
local result = ds.get_filename(filepath)
|
||||||
|
filepath - string - path and filename]],
|
||||||
|
Description = [[get_filename strips the path from a filepath and returns the filename]],
|
||||||
|
Return_Value = [[result - string - the file name and type]],
|
||||||
|
Limitations = [[]],
|
||||||
|
Example = [[]],
|
||||||
|
See_Also = [[]],
|
||||||
|
Reference = [[]],
|
||||||
|
License = [[]],
|
||||||
|
Copyright = [[]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function dtutils_string.get_filename(str)
|
||||||
|
local parts = dtutils_string.split_filepath(str)
|
||||||
|
return parts["filename"]
|
||||||
|
end
|
||||||
|
|
||||||
|
dtutils_string.libdoc.functions["get_basename"] = {
|
||||||
|
Name = [[get_basename]],
|
||||||
|
Synopsis = [[get the filename without the path or extension]],
|
||||||
|
Usage = [[local ds = require "lib/dtutils.string"
|
||||||
|
|
||||||
|
local result = ds.get_basename(filepath)
|
||||||
|
filepath - string - path and filename]],
|
||||||
|
Description = [[get_basename returns the name of the file without the path or filetype
|
||||||
|
]],
|
||||||
|
Return_Value = [[result - string - the basename of the file]],
|
||||||
|
Limitations = [[]],
|
||||||
|
Example = [[]],
|
||||||
|
See_Also = [[]],
|
||||||
|
Reference = [[]],
|
||||||
|
License = [[]],
|
||||||
|
Copyright = [[]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function dtutils_string.get_basename(str)
|
||||||
|
local parts = dtutils_string.split_filepath(str)
|
||||||
|
return parts["basename"]
|
||||||
|
end
|
||||||
|
|
||||||
|
dtutils_string.libdoc.functions["get_filetype"] = {
|
||||||
|
Name = [[get_filetype]],
|
||||||
|
Synopsis = [[get the filetype from a filename]],
|
||||||
|
Usage = [[local ds = require "lib/dtutils.string"
|
||||||
|
|
||||||
|
local result = ds.get_filetype(filepath)
|
||||||
|
filepath - string - path and filename]],
|
||||||
|
Description = [[get_filetype returns the filetype from the supplied filepath]],
|
||||||
|
Return_Value = [[result - string - the filetype]],
|
||||||
|
Limitations = [[]],
|
||||||
|
Example = [[]],
|
||||||
|
See_Also = [[]],
|
||||||
|
Reference = [[]],
|
||||||
|
License = [[]],
|
||||||
|
Copyright = [[]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function dtutils_string.get_filetype(str)
|
||||||
|
local parts = dtutils_string.split_filepath(str)
|
||||||
|
return parts["filetype"]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return dtutils_string
|
return dtutils_string
|
||||||
|
|||||||
85
locale/fr_FR/LC_MESSAGES/OpenInExplorer.po
Normal file
85
locale/fr_FR/LC_MESSAGES/OpenInExplorer.po
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"POT-Creation-Date: 2022-06-27 17:22+0200\n"
|
||||||
|
"PO-Revision-Date: 2022-06-27 17:36+0200\n"
|
||||||
|
"Last-Translator: Manuel PINTOR <manu@lepassepartout.fr>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: fr_FR\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.3\n"
|
||||||
|
"X-Poedit-Basepath: ../../../contrib\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"X-Poedit-SearchPath-0: OpenInExplorer.lua\n"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:79
|
||||||
|
msgid ""
|
||||||
|
"OpenInExplorer plug-in only supports Linux, macOS, and Windows at this time"
|
||||||
|
msgstr ""
|
||||||
|
"Le script OpenInExplorer ne fonctionne que sur Linux, macOS et Windows pour "
|
||||||
|
"le moment"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:95
|
||||||
|
msgid ""
|
||||||
|
"No links directory selected.\n"
|
||||||
|
"Please check the dt preferences (lua options)"
|
||||||
|
msgstr ""
|
||||||
|
"Aucun répertoire de liens sélectionné.\n"
|
||||||
|
"Voir dans les préférences dt > options lua"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:99
|
||||||
|
#, lua-format
|
||||||
|
msgid ""
|
||||||
|
"Links directory '%s' not found.\n"
|
||||||
|
"Please check the dt preferences (lua options)"
|
||||||
|
msgstr ""
|
||||||
|
"Répertoire de liens '%s' inexistant.\n"
|
||||||
|
"Voir dans les préférences dt > options lua"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:156
|
||||||
|
msgid "Failed to create links. Missing rights?"
|
||||||
|
msgstr "Erreur de création de liens. Droits insuffisants ?"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:172
|
||||||
|
msgid "Please select an image"
|
||||||
|
msgstr "Sélectionner une image SVP"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:178
|
||||||
|
msgid "Please select fewer images (max. 15)"
|
||||||
|
msgstr "Sélectionner moins d'images SVP (max. 15)"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:203
|
||||||
|
msgid "show in file explorer"
|
||||||
|
msgstr "afficher dans le gestionnaire de fichiers"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:205
|
||||||
|
msgid "Open the file manager at the selected image's location"
|
||||||
|
msgstr "Ouvre le gestionnaire de fichiers à l'endroit de l'image sélectionnée"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:212
|
||||||
|
msgid "OpenInExplorer: linked files directory"
|
||||||
|
msgstr "OpenInExplorer : répertoire des fichiers liés"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:213
|
||||||
|
msgid ""
|
||||||
|
"Directory to store the links to the file names. Requires restart to take "
|
||||||
|
"effect"
|
||||||
|
msgstr ""
|
||||||
|
"Répertoire dans lequel enregistrer les liens sur les fichiers. Nécessite un "
|
||||||
|
"redémarrage de dt"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:216
|
||||||
|
msgid "Select directory"
|
||||||
|
msgstr "Sélectionner un répertoire"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:222
|
||||||
|
msgid "OpenInExplorer: use links"
|
||||||
|
msgstr "OpenInExplorer : utiliser des liens"
|
||||||
|
|
||||||
|
#: OpenInExplorer.lua:223
|
||||||
|
msgid "Use links instead of multiple windows. Requires restart to take effect"
|
||||||
|
msgstr ""
|
||||||
|
"Utiliser des liens plutôt que de multiples fenêtres. Nécessite un "
|
||||||
|
"redémarrage de dt"
|
||||||
62
locale/it_IT/LC_MESSAGES/executable_manager.po
Normal file
62
locale/it_IT/LC_MESSAGES/executable_manager.po
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Maurizio Paglia <mpaglia0@gmail.com>, 2022.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-07-11 22:19+0200\n"
|
||||||
|
"PO-Revision-Date: 2022-07-11 22:21+0200\n"
|
||||||
|
"Last-Translator: Maurizio Paglia <mpaglia0@gmail.com>\n"
|
||||||
|
"Language-Team: Italian <>\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
"X-Generator: Lokalize 21.12.3\n"
|
||||||
|
|
||||||
|
#: executable_manager.lua:144
|
||||||
|
msgid "No executable paths found, exiting..."
|
||||||
|
msgstr "Nessun percorso con eseguibili, esco..."
|
||||||
|
|
||||||
|
#: executable_manager.lua:160
|
||||||
|
msgid "select an executable"
|
||||||
|
msgstr "seleziona un eseguibile"
|
||||||
|
|
||||||
|
#: executable_manager.lua:160
|
||||||
|
msgid "search path for executable"
|
||||||
|
msgstr "cerca il percorso dell'eseguibile"
|
||||||
|
|
||||||
|
#: executable_manager.lua:169
|
||||||
|
msgid "select "
|
||||||
|
msgstr "seleziona"
|
||||||
|
|
||||||
|
#: executable_manager.lua:169
|
||||||
|
msgid " executable"
|
||||||
|
msgstr " eseguibile"
|
||||||
|
|
||||||
|
#: executable_manager.lua:190
|
||||||
|
msgid "select executable to modify"
|
||||||
|
msgstr "Seleziona l'eseguibile da modificare"
|
||||||
|
|
||||||
|
#: executable_manager.lua:205
|
||||||
|
msgid "current"
|
||||||
|
msgstr "Attuale"
|
||||||
|
|
||||||
|
#: executable_manager.lua:207
|
||||||
|
msgid "select"
|
||||||
|
msgstr "Seleziona"
|
||||||
|
|
||||||
|
#: executable_manager.lua:209
|
||||||
|
msgid "reset"
|
||||||
|
msgstr "Cancella"
|
||||||
|
|
||||||
|
#: executable_manager.lua:212
|
||||||
|
msgid "Clear path for "
|
||||||
|
msgstr "Cancella il percorso di "
|
||||||
|
|
||||||
|
#: executable_manager.lua:211
|
||||||
|
msgid "clear"
|
||||||
|
msgstr "Pulisci"
|
||||||
190
locale/it_IT/LC_MESSAGES/script_manager.po
Normal file
190
locale/it_IT/LC_MESSAGES/script_manager.po
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
# French messages for script_manager.lua
|
||||||
|
# Christophe Agathon <christophe.agathon@gmail.com>, 2020.
|
||||||
|
# Maurizio Paglia <mpaglia0@gmail.com>, 2021, 2022.
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"POT-Creation-Date: 2020-12-28 10:22+0100\n"
|
||||||
|
"PO-Revision-Date: 2022-07-11 22:03+0200\n"
|
||||||
|
"Last-Translator: Maurizio Paglia <mpaglia0@gmail.com>\n"
|
||||||
|
"Language-Team: Italian <>\n"
|
||||||
|
"Language: fr_FR\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Lokalize 21.12.3\n"
|
||||||
|
"X-Poedit-Basepath: ../../../tools\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
"X-Poedit-KeywordsList: _\n"
|
||||||
|
"X-Poedit-SearchPath-0: script_manager.lua\n"
|
||||||
|
|
||||||
|
#: script_manager.lua:190
|
||||||
|
msgid "Cant read from "
|
||||||
|
msgstr "Non posso leggere da "
|
||||||
|
|
||||||
|
#: script_manager.lua:204
|
||||||
|
msgid "Loaded "
|
||||||
|
msgstr "Script caricato "
|
||||||
|
|
||||||
|
#: script_manager.lua:207
|
||||||
|
msgid " failed to load"
|
||||||
|
msgstr "Non riesco a caricare lo script"
|
||||||
|
|
||||||
|
#: script_manager.lua:223
|
||||||
|
msgid " will not start when darktable is restarted"
|
||||||
|
msgstr " non verrà avviato al riavvio di darktable"
|
||||||
|
|
||||||
|
#: script_manager.lua:281 script_manager.lua:345
|
||||||
|
msgid "find command is "
|
||||||
|
msgstr "Il comando find è "
|
||||||
|
|
||||||
|
#: script_manager.lua:321
|
||||||
|
msgid "lua scripts successfully updated"
|
||||||
|
msgstr "Gli script lua sono stati correttamente aggiornati"
|
||||||
|
|
||||||
|
#: script_manager.lua:381
|
||||||
|
msgid "category "
|
||||||
|
msgstr "Categoria"
|
||||||
|
|
||||||
|
#: script_manager.lua:381
|
||||||
|
msgid " is already in use. Please specify a different category name."
|
||||||
|
msgstr " è già utilizzato. Prego specificare un nome differente."
|
||||||
|
|
||||||
|
#: script_manager.lua:410
|
||||||
|
msgid "scripts successfully installed into category "
|
||||||
|
msgstr "Gli script sono stati installati correttamente nella categoria "
|
||||||
|
|
||||||
|
#: script_manager.lua:426
|
||||||
|
msgid "No scripts found to install"
|
||||||
|
msgstr "Non trovo script da installare"
|
||||||
|
|
||||||
|
#: script_manager.lua:430
|
||||||
|
msgid "failed to download scripts"
|
||||||
|
msgstr "Non riesco a scaricare gli script"
|
||||||
|
|
||||||
|
# Peut-être que « activé » serait mieux, mais ce n'est pas la traduction de « started »
|
||||||
|
#: script_manager.lua:458
|
||||||
|
msgid " started"
|
||||||
|
msgstr " avviato"
|
||||||
|
|
||||||
|
# Peut-être que « désactivé » serait mieux, mais ce n'est pas la traduction de « stopped »
|
||||||
|
#: script_manager.lua:460
|
||||||
|
msgid " stopped"
|
||||||
|
msgstr " bloccato"
|
||||||
|
|
||||||
|
#: script_manager.lua:545
|
||||||
|
msgid "Page "
|
||||||
|
msgstr "Pag."
|
||||||
|
|
||||||
|
#: script_manager.lua:545
|
||||||
|
msgid " of "
|
||||||
|
msgstr " di "
|
||||||
|
|
||||||
|
#: script_manager.lua:674
|
||||||
|
msgid "scripts to update"
|
||||||
|
msgstr "Script da aggiornare"
|
||||||
|
|
||||||
|
#: script_manager.lua:675
|
||||||
|
msgid "select the scripts installation to update"
|
||||||
|
msgstr "Selezionare l'installazione di script da aggiornare"
|
||||||
|
|
||||||
|
#: script_manager.lua:684 script_manager.lua:742
|
||||||
|
msgid "update scripts"
|
||||||
|
msgstr "Aggiornare gli script"
|
||||||
|
|
||||||
|
#: script_manager.lua:685
|
||||||
|
msgid "update the lua scripts from the repository"
|
||||||
|
msgstr "Aggiornare gli script lua del repo"
|
||||||
|
|
||||||
|
#: script_manager.lua:696
|
||||||
|
msgid ""
|
||||||
|
"enter the URL of the git repository containing the scripts you wish to add"
|
||||||
|
msgstr "Immettere l'URL del repo git che contiene gli script da aggiungere"
|
||||||
|
|
||||||
|
#: script_manager.lua:701
|
||||||
|
msgid "name of new category"
|
||||||
|
msgstr "Nome della nuova categoria"
|
||||||
|
|
||||||
|
#: script_manager.lua:702
|
||||||
|
msgid "enter a category name for the additional scripts"
|
||||||
|
msgstr "Immettere il nome della categoria per altri script"
|
||||||
|
|
||||||
|
#: script_manager.lua:707
|
||||||
|
msgid "URL to download additional scripts from"
|
||||||
|
msgstr "URL dal quale scaricare ulteriori script"
|
||||||
|
|
||||||
|
#: script_manager.lua:709
|
||||||
|
msgid "new category to place scripts in"
|
||||||
|
msgstr "Nuova categoria che dovrà contenere gli script"
|
||||||
|
|
||||||
|
#: script_manager.lua:712
|
||||||
|
msgid "install additional scripts"
|
||||||
|
msgstr "Installare gli script aggiuntivi"
|
||||||
|
|
||||||
|
#: script_manager.lua:720
|
||||||
|
msgid "Enable \"Disable Scripts\" button"
|
||||||
|
msgstr "Abilita il pulsante \"Disabilita Script\""
|
||||||
|
|
||||||
|
#: script_manager.lua:730
|
||||||
|
msgid "Disable Scripts"
|
||||||
|
msgstr "Disabilita Script"
|
||||||
|
|
||||||
|
#: script_manager.lua:736
|
||||||
|
msgid "lua scripts will not run the next time darktable is started"
|
||||||
|
msgstr "Gli script lua non verranno avviati al prossimo riavvio di darktable"
|
||||||
|
|
||||||
|
#: script_manager.lua:745
|
||||||
|
msgid "add more scripts"
|
||||||
|
msgstr "Aggiungi altri script"
|
||||||
|
|
||||||
|
#: script_manager.lua:747
|
||||||
|
msgid "disable scripts"
|
||||||
|
msgstr "Disabilita script"
|
||||||
|
|
||||||
|
#: script_manager.lua:755
|
||||||
|
msgid "category"
|
||||||
|
msgstr "categoria"
|
||||||
|
|
||||||
|
#: script_manager.lua:756
|
||||||
|
msgid "select the script category"
|
||||||
|
msgstr "Seleziona la categoria"
|
||||||
|
|
||||||
|
#: script_manager.lua:780
|
||||||
|
msgid "Page:"
|
||||||
|
msgstr "Pag.:"
|
||||||
|
|
||||||
|
#: script_manager.lua:808
|
||||||
|
msgid "Scripts"
|
||||||
|
msgstr "Scripts"
|
||||||
|
|
||||||
|
#: script_manager.lua:817
|
||||||
|
msgid "scripts per page"
|
||||||
|
msgstr "Script per pagina"
|
||||||
|
|
||||||
|
#: script_manager.lua:818
|
||||||
|
msgid "select number of start/stop buttons to display"
|
||||||
|
msgstr "Selezionare il numero di pulsanti da visualizzare"
|
||||||
|
|
||||||
|
#: script_manager.lua:829
|
||||||
|
msgid "change number of buttons"
|
||||||
|
msgstr "Modifica la quantità di pulsanti"
|
||||||
|
|
||||||
|
#: script_manager.lua:837
|
||||||
|
msgid "Configuration"
|
||||||
|
msgstr "Configurazione"
|
||||||
|
|
||||||
|
#: script_manager.lua:858
|
||||||
|
msgid "action"
|
||||||
|
msgstr "Azione"
|
||||||
|
|
||||||
|
#: script_manager.lua:864
|
||||||
|
msgid "install/update scripts"
|
||||||
|
msgstr "Installa/aggiorna script"
|
||||||
|
|
||||||
|
#: script_manager.lua:864
|
||||||
|
msgid "configure"
|
||||||
|
msgstr "Configura"
|
||||||
|
|
||||||
|
#: script_manager.lua:864
|
||||||
|
msgid "start/stop scripts"
|
||||||
|
msgstr "Avvia/blocca script"
|
||||||
@@ -208,7 +208,7 @@ for i,exec in ipairs(exec_table) do
|
|||||||
executable_path_widgets[exec],
|
executable_path_widgets[exec],
|
||||||
dt.new_widget("section_label"){label = _("reset")},
|
dt.new_widget("section_label"){label = _("reset")},
|
||||||
dt.new_widget("button"){
|
dt.new_widget("button"){
|
||||||
label = "clear",
|
label = _("clear"),
|
||||||
tooltip = _("Clear path for ") .. exec,
|
tooltip = _("Clear path for ") .. exec,
|
||||||
clicked_callback = function()
|
clicked_callback = function()
|
||||||
df.set_executable_path_preference(exec, "")
|
df.set_executable_path_preference(exec, "")
|
||||||
|
|||||||
@@ -70,7 +70,6 @@ end
|
|||||||
|
|
||||||
du.check_min_api_version("5.0.0", "script_manager")
|
du.check_min_api_version("5.0.0", "script_manager")
|
||||||
|
|
||||||
|
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
-- C O N S T A N T S
|
-- C O N S T A N T S
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@@ -94,6 +93,27 @@ local LUA_SCRIPT_REPO = "https://github.com/darktable-org/lua-scripts.git"
|
|||||||
|
|
||||||
local LUA_API_VER = "API-" .. dt.configuration.api_version_string
|
local LUA_API_VER = "API-" .. dt.configuration.api_version_string
|
||||||
|
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
-- P R E F E R E N C E S
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
dt.preferences.register(MODULE, "check_update", "bool",
|
||||||
|
"check for updated scripts on start up",
|
||||||
|
"automatically update scripts to correct version",
|
||||||
|
true)
|
||||||
|
|
||||||
|
local check_for_updates = dt.preferences.read(MODULE, "check_update", "bool")
|
||||||
|
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
-- P R E F E R E N C E S
|
||||||
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
dt.preferences.register(MODULE, "check_update", "bool",
|
||||||
|
"check for updated scripts on start up",
|
||||||
|
"automatically update scripts to correct version",
|
||||||
|
true)
|
||||||
|
|
||||||
|
local check_for_updates = dt.preferences.read(MODULE, "check_update", "bool")
|
||||||
|
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
-- L O G L E V E L
|
-- L O G L E V E L
|
||||||
@@ -325,8 +345,10 @@ local function activate(script)
|
|||||||
local err = nil -- error message returned if module doesn't start
|
local err = nil -- error message returned if module doesn't start
|
||||||
log.msg(log.info, "activating " .. script.name)
|
log.msg(log.info, "activating " .. script.name)
|
||||||
if script.running == false then
|
if script.running == false then
|
||||||
|
script_manager_running_script = script.name
|
||||||
status, err = du.prequire(script.path)
|
status, err = du.prequire(script.path)
|
||||||
log.msg(log.debug, "prequire returned " .. tostring(status) .. " and for err " .. tostring(err))
|
log.msg(log.debug, "prequire returned " .. tostring(status) .. " and for err " .. tostring(err))
|
||||||
|
script_manager_running_script = nil
|
||||||
if status then
|
if status then
|
||||||
pref_write(script.script_name, "bool", true)
|
pref_write(script.script_name, "bool", true)
|
||||||
log.msg(log.screen, _("Loaded ") .. script.script_name)
|
log.msg(log.screen, _("Loaded ") .. script.script_name)
|
||||||
@@ -858,6 +880,12 @@ end
|
|||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
-- M A I N P R O G R A M
|
-- M A I N P R O G R A M
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
-- ensure shortcuts module knows widgets belong to script_manager
|
||||||
|
|
||||||
|
script_manager_running_script = "script_manager"
|
||||||
|
|
||||||
|
if check_for_updates then
|
||||||
local repo_data = get_repo_status(LUA_DIR)
|
local repo_data = get_repo_status(LUA_DIR)
|
||||||
local current_branch = get_current_repo_branch(LUA_DIR)
|
local current_branch = get_current_repo_branch(LUA_DIR)
|
||||||
local clean = is_repo_clean(repo_data)
|
local clean = is_repo_clean(repo_data)
|
||||||
@@ -918,12 +946,12 @@ if current_branch then
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
scan_scripts(LUA_DIR)
|
scan_scripts(LUA_DIR)
|
||||||
log.msg(log.debug, "finished processing scripts")
|
log.msg(log.debug, "finished processing scripts")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
-- U S E R I N T E R F A C E
|
-- U S E R I N T E R F A C E
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@@ -1135,7 +1163,7 @@ sm.widgets.main_box = dt.new_widget("box"){
|
|||||||
sm.widgets.main_stack
|
sm.widgets.main_stack
|
||||||
}
|
}
|
||||||
|
|
||||||
|
script_manager_running_script = nil
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
-- D A R K T A B L E I N T E G R A T I O N
|
-- D A R K T A B L E I N T E G R A T I O N
|
||||||
-- - - - - - - - - - - - - - - - - - - - - - - -
|
-- - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|||||||
Reference in New Issue
Block a user