<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Сценарії за допомогою Lua on darktable 5.6 user manual</title>
    <link>https://docs.darktable.org/usermanual/5.6/uk/lua/</link>
    <description>Recent content in Сценарії за допомогою Lua on darktable 5.6 user manual</description>
    <generator>Hugo</generator>
    <language>uk</language>
    <atom:link href="https://docs.darktable.org/usermanual/5.6/uk/lua/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Огляд</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/overview/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/overview/</guid>
      <description>&lt;p&gt;Сценарії Lua можуть бути використані для визначення дій для Darktable, які слід виконувати при активації події. Одним з прикладів може бути виклик зовнішньої програми під час експорту файлу, щоб застосувати додаткові кроки обробки за межами Darktable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.lua.org/&#34; target=&#34;_blank&#34;&gt;Lua&lt;/a&gt; &amp;ndash; це незалежний проєкт, заснований у 1993 році, що забезпечує потужну, швидку, легку та вбудовувану мову сценаріїв. Lua широко використовується багатьма програмами з відкритим кодом, у комерційних програмах та для програмування ігор. Darktable використовує Lua версії 5.4. Опис принципів та синтаксису Lua виходить за рамки цього посібника. Для детального ознайомлення див. &lt;a href=&#34;http://www.lua.org/manual/5.4/manual.html&#34; target=&#34;_blank&#34;&gt;Довідковий посібник з Lua&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сценарії в Darktable</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/darktables-scripts/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/darktables-scripts/</guid>
      <description>&lt;h2 id=&#34;від-56-і-далі&#34;&gt;&lt;a href=&#34;#%d0%b2%d1%96%d0%b4-56-%d1%96-%d0%b4%d0%b0%d0%bb%d1%96&#34;&gt;🔗&lt;/a&gt;Від 5.6 і далі&lt;/h2&gt;&#xA;&lt;p&gt;Колекція сценаріїв включена до комплекту Darktable. Їх можна вимкнути в &lt;a href=&#34;https://docs.darktable.org/usermanual/5.6/uk/preferences-settings/lua-options/&#34;&gt;Налаштування &amp;gt; Опції Lua&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Починаючи з Darktable 5.6, Lua-сценарії включені до релізу, тому їх більше не потрібно встановлювати окремо.&lt;/p&gt;&#xA;&lt;p&gt;Див. &lt;a href=&#34;https://docs.darktable.org/usermanual/5.6/uk/lua/basic-principles/&#34;&gt;основні принципи&lt;/a&gt; для пояснення того, як Darktable завантажує Lua-сценарії.&lt;/p&gt;&#xA;&lt;p&gt;Документація щодо сценаріїв у Darktable доступна в &lt;a href=&#34;https://docs.darktable.org/lua/stable/lua.scripts.manual/scripts/&#34; target=&#34;_blank&#34;&gt;Документації Lua&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;до-56&#34;&gt;&lt;a href=&#34;#%d0%b4%d0%be-56&#34;&gt;🔗&lt;/a&gt;До 5.6&lt;/h2&gt;&#xA;&lt;p&gt;До версії 5.6 сценарії не були включені до комплекту та їх потрібно було встановлювати, дотримуючись наступних інструкцій.&lt;/p&gt;&#xA;&lt;h3 id=&#34;завантаження-та-встановлення&#34;&gt;&lt;a href=&#34;#%d0%b7%d0%b0%d0%b2%d0%b0%d0%bd%d1%82%d0%b0%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%b2%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%bd%d1%8f&#34;&gt;🔗&lt;/a&gt;Завантаження та встановлення&lt;/h3&gt;&#xA;&lt;p&gt;Колекція сценаріїв доступна в &lt;a href=&#34;https://github.com/darktable-org/lua-scripts&#34; target=&#34;_blank&#34;&gt;репозиторії lua-scripts&lt;/a&gt;. Це також включає менеджер сценаріїв, який спрощує вмикання або вимикання окремих сценаріїв з графічного інтерфейсу. Документація для цих сценаріїв Lua міститься в &lt;a href=&#34;https://docs.darktable.org/lua/stable/lua.scripts.manual/scripts/&#34; target=&#34;_blank&#34;&gt;документації Lua&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Основні принципи</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/basic-principles/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/basic-principles/</guid>
      <description>&lt;p&gt;Сценарії можуть реєструвати зворотні виклики для виконання дій при настанні різних подій. Цей механізм зворотного виклику є основним методом активації дій Lua.&lt;/p&gt;&#xA;&lt;p&gt;Центральним оркестратором для Lua-сценаріїв є &lt;em&gt;менеджер сценаріїв&lt;/em&gt;, який запускає сервісний модуль &lt;strong&gt;Сценарії&lt;/strong&gt; у режимі Світлого стола та завантажує сценарії, що входять до комплекту Darktable.&lt;/p&gt;&#xA;&lt;p&gt;Сценарії Lua можна вимкнути в &lt;a href=&#34;https://docs.darktable.org/usermanual/5.6/uk/preferences-settings/lua-options/&#34;&gt;Налаштування &amp;gt; Опції Lua&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;як-darktable-завантажує-сценарії-і-менеджер-сценаріїв&#34;&gt;&lt;a href=&#34;#%d1%8f%d0%ba-darktable-%d0%b7%d0%b0%d0%b2%d0%b0%d0%bd%d1%82%d0%b0%d0%b6%d1%83%d1%94-%d1%81%d1%86%d0%b5%d0%bd%d0%b0%d1%80%d1%96%d1%97-%d1%96-%d0%bc%d0%b5%d0%bd%d0%b5%d0%b4%d0%b6%d0%b5%d1%80-%d1%81%d1%86%d0%b5%d0%bd%d0%b0%d1%80%d1%96%d1%97%d0%b2&#34;&gt;🔗&lt;/a&gt;Як Darktable завантажує сценарії (і менеджер сценаріїв)&lt;/h3&gt;&#xA;&lt;p&gt;Darktable по-різному обробляє два типи розташування: файли, які &lt;em&gt;виконуються&lt;/em&gt; як код Lua, та каталоги, які &lt;em&gt;скануються&lt;/em&gt; на наявність сценаріїв:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Простий приклад Lua</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/a-simple-example/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/a-simple-example/</guid>
      <description>&lt;p&gt;Почнемо з простого прикладу, який надрукує якийсь код на консолі. Створіть файл з назвою &lt;code&gt;luarc&lt;/code&gt; у &lt;a href=&#34;https://docs.darktable.org/usermanual/5.6/uk/preferences-settings/config-directory/&#34;&gt;каталозі конфігурації&lt;/a&gt; Darktable і додайте до нього такий рядок:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;print(&amp;#34;Hello World !&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Запустіть Darktable з консолі, і ви побачите на консолі надруковану фразу &amp;ldquo;&lt;code&gt;Hello World !&lt;/code&gt;&amp;rdquo;. Нічого вигадливого, але це початок.&lt;/p&gt;&#xA;&lt;p&gt;На цей момент у сценарії немає нічого специфічного для Darktable. Ми просто використовуємо стандартну функцію друку Lua для друку рядка. Це приємно і все таке, але ми можемо зробити й краще. Для доступу до API Darktable вам спочатку потрібно &amp;ldquo;вимагати&amp;rdquo; його (&lt;code&gt;require&lt;/code&gt;) та зберегти повернутий об&amp;rsquo;єкт у змінну. Після цього ви зможете отримати доступ до API Darktable як підполя поверненого об&amp;rsquo;єкта. Все це задокументовано в довідковому посібнику &lt;a href=&#34;https://docs.darktable.org/usermanual/5.6/uk/lua/api/&#34;&gt;Lua API&lt;/a&gt; від Darktable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Друк зображень із міткою</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/printing-labeled-images/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/printing-labeled-images/</guid>
      <description>&lt;p&gt;Перший приклад показав нам самі основи Lua і дозволив перевірити, чи все працює належним чином. А тепер зробімо щось дещо складніше. Спробуємо надрукувати список зображень, до яких прикріплена &amp;ldquo;червона&amp;rdquo; позначка. Але перш за все, що таке зображення?&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;local darktable = require &amp;#34;darktable&amp;#34;&#xA;local debug = require &amp;#34;darktable.debug&amp;#34;&#xA;print(darktable.debug.dump(darktable.database[1]))&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Запуск наведеного вище коду дасть багато результату на виході. Ми розглянемо це за мить, але спочатку розглянемо сам код.&lt;/p&gt;&#xA;&lt;p&gt;Ми знаємо про &lt;code&gt;require darktable&lt;/code&gt;. Тут нам потрібно окремо &lt;code&gt;require darktable.debug&lt;/code&gt;, що є необов’язковим розділом API, який надає допоміжні функції для допомоги у налагодженні сценаріїв Lua.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Додавання простого прискорювача</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/simple-shortcut/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/simple-shortcut/</guid>
      <description>&lt;p&gt;Поки що всі наші сценарії робили щось під час запуску. Це має обмежену користь і не дозволяє нам реагувати на реальні дії користувача. Щоб зробити більш просунуті речі, нам потрібно зареєструвати функцію, яка буде викликана при настанні певної події. Найпоширеніша подія, на яку слід реагувати, &amp;ndash; це клавіатурний прискорювач.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;darktable = require &amp;#34;darktable&amp;#34;&#xA;&#xA;local function hello_shortcut(event, shortcut)&#xA;darktable.print(&amp;#34;Hello, I just received &amp;#39;&amp;#34;..event..&#xA;       &amp;#34;&amp;#39; with parameter &amp;#39;&amp;#34;..shortcut..&amp;#34;&amp;#39;&amp;#34;)&#xA;end&#xA;&#xA;darktable.register_event(&amp;#34;hello shortcut&amp;#34;,&#xA;       &amp;#34;shortcut&amp;#34;,hello_shortcut,&#xA;       &amp;#34;A shortcut that prints its parameters&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Тепер запустіть Darktable, перейдіть до &amp;ldquo;Налаштування &amp;gt; Клавіатурні прискорювачі &amp;gt; Lua &amp;gt; A shortcut that prints its parameters&amp;rdquo;, призначте прискорювач і спробуйте. Ви повинні побачити приємне повідомлення, надруковане на екрані.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Експортування зображень за допомогою Lua</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/exporting-images/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/exporting-images/</guid>
      <description>&lt;p&gt;Дотепер ми навчилися використовувати Lua для адаптації Darktable до нашого конкретного робочого процесу. Давайте зараз розглянемо, як за допомогою Lua легко експортувати зображення в онлайн-сервіс. Якщо ви можете завантажити зображення в цей сервіс через командний рядок, ви можете використовувати Lua для інтеграції цього в інтерфейс користувача Darktable.&lt;/p&gt;&#xA;&lt;p&gt;У цьому наступному прикладі ми будемо використовувати Lua для експорту через &lt;code&gt;scp&lt;/code&gt;. У інтерфейсі користувача Darktable з’явиться новий тип сховища, який експортуватиме зображення до віддаленої цілі за допомогою механізму копіювання в &lt;code&gt;ssh&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Побудова елементів інтерфейсу користувача</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/building-ui-elements/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/building-ui-elements/</guid>
      <description>&lt;p&gt;Наш попередній приклад був трохи обмеженим. Зокрема, використання налаштувань для шляху експорту було не дуже гарним рішенням. Ми можемо зробити це краще, додавши елементи до інтерфейсу користувача у діалоговому вікні експорту.&lt;/p&gt;&#xA;&lt;p&gt;Елементи інтерфейсу створюються за допомогою функції &lt;code&gt;darktable.new_widget&lt;/code&gt;. Ця функція приймає тип віджета як параметр і повертає новий об&amp;rsquo;єкт, відповідний цьому віджету. Потім ви можете встановити різні поля у цьому віджеті, щоб встановити його параметри. Потім ви використовуватимете цей об’єкт як параметр для різних функцій, які додадуть його до інтерфейсу Darktable. Наступний простий приклад додає lib у режимі світлого стола з простою міткою:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обмін сценаріями</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/sharing-scripts/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/sharing-scripts/</guid>
      <description>&lt;p&gt;Наразі весь наш код Lua був у &lt;em&gt;luarc&lt;/em&gt;. Це хороший спосіб розробити свій сценарій, але не дуже практичний для розповсюдження. Нам потрібно зробити це належним модулем Lua. Для цього ми зберігаємо код в окремому файлі (в цьому випадку &lt;code&gt;scp-storage.lua&lt;/code&gt;):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;--[[&#xA;SCP STORAGE&#xA;a simple storage to export images via scp&#xA;&#xA;AUTHOR&#xA;Jérémy Rosen (jeremy.rosen@enst-bretagne.fr)&#xA;&#xA;INSTALLATION&#xA;* copy this file in $CONFIGDIR/lua/&#xA;* add the following line in the file $CONFIGDIR/luarc&#xA;  require &amp;#34;scp-storage&amp;#34;&#xA;&#xA;USAGE&#xA;* select &amp;#34;Export via SCP&amp;#34; in the storage selection menu&#xA;* set the target directory &#xA;* export your images&#xA;&#xA;LICENSE&#xA;GPLv2&#xA;&#xA;]]&#xA;&#xA;darktable = require &amp;#34;darktable&amp;#34;&#xA;dtutils = require &amp;#34;lib/dtutils&amp;#34;&#xA;&#xA;dtutils.check_min_api_version(&amp;#34;7.0.0&amp;#34;, ...)&#xA;&#xA;local scp_path = darktable.new_widget(&amp;#34;entry&amp;#34;){&#xA;  tooltip = &amp;#34;Complete path to copy to. Can include user and hostname&amp;#34;,&#xA;  text = &amp;#34;&amp;#34;,&#xA;  reset_callback = function(self) self.text = &amp;#34;&amp;#34; end&#xA;}&#xA;&#xA;darktable.register_storage(&amp;#34;scp_export&amp;#34;,&amp;#34;Export via scp&amp;#34;,&#xA;  function( storage, image, format, filename,&#xA;     number, total, high_quality, extra_data)&#xA;    if not darktable.control.execute(&amp;#34;scp &amp;#34;..filename..&amp;#34; &amp;#34;..&#xA;      scp_path.text&#xA;    ) then&#xA;      darktable.print_error(&amp;#34;scp failed for &amp;#34;..tostring(image))&#xA;    end&#xA;  end,&#xA;  nil, --finalize&#xA;  nil, --supported&#xA;  nil, --initialize&#xA;  darktable.new_widget(&amp;#34;box&amp;#34;) {&#xA;    orientation = &amp;#34;horizontal&amp;#34;,&#xA;    darktable.new_widget(&amp;#34;label&amp;#34;){ label = &amp;#34;target SCP PATH &amp;#34; },&#xA;    scp_path,&#xA;})&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Darktable шукатиме сценарії (дотримуючись звичайних правил Lua) у стандартних каталогах плюс &lt;code&gt;$CONFIGDIR/lua/*.lua&lt;/code&gt;. Отже, наш сценарій можна викликати, просто додавши &lt;code&gt;require &amp;quot;scp-storage&amp;quot;&lt;/code&gt; у файл &lt;em&gt;luarc&lt;/em&gt;. Пара додаткових приміток&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Виклик Lua з D-Bus</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/calling-from-dbus/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/calling-from-dbus/</guid>
      <description>&lt;p&gt;Можна надіслати команду Lua на Darktable через його інтерфейс D-Bus. Метод &lt;code&gt;org.darktable.service.Remote.Lua&lt;/code&gt; приймає один параметр рядка, який інтерпретується як команда Lua. Команда буде виконана в поточному контексті Lua і повинна повернути або нічого, або рядок. Результат буде передано назад як результат методу D-Bus.&lt;/p&gt;&#xA;&lt;p&gt;Якщо виклик Lua призводить до помилки, виклик методу D-Bus поверне помилку &lt;code&gt;org.darktable.Error.LuaError&lt;/code&gt; із повідомленням про помилку Lua як повідомлення, прикріплене до помилки D-Bus.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Використання Darktable зі сценарію Lua</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/darktable-from-lua/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/darktable-from-lua/</guid>
      <description>&lt;p&gt;&lt;em&gt;Попередження: ця функція дуже експериментальна. Відомо, що кілька елементів ще не працюють у бібліотечному режимі. Настійно рекомендується ретельне тестування.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Інтерфейс Lua дозволяє використовувати Darktable з будь-якого сценарію Lua. Це завантажить Darktable як бібліотеку та надасть вам більшість API Lua (Darktable налаштовано без відображення інтерфейсу, тому функції, що стосуються інтерфейсу користувача, недоступні).&lt;/p&gt;&#xA;&lt;p&gt;Наприклад, наступна програма надрукує список усіх зображень у вашій бібліотеці:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/usr/bin/env lua&#xA;package = require &amp;#34;package&amp;#34;&#xA;package.cpath=package.cpath..&amp;#34;;./lib/darktable/lib?.so&amp;#34;&#xA;&#xA;dt = require(&amp;#34;darktable&amp;#34;)(&#xA;&amp;#34;--library&amp;#34;, &amp;#34;./library.db&amp;#34;,&#xA;&amp;#34;--datadir&amp;#34;, &amp;#34;./share/darktable&amp;#34;,&#xA;&amp;#34;--moduledir&amp;#34;, &amp;#34;./lib/darktable&amp;#34;,&#xA;&amp;#34;--configdir&amp;#34;, &amp;#34;./configdir&amp;#34;,&#xA;&amp;#34;--cachedir&amp;#34;,&amp;#34;cachedir&amp;#34;,&#xA;&amp;#34;--g-fatal-warnings&amp;#34;)&#xA;&#xA;require(&amp;#34;darktable.debug&amp;#34;)&#xA;&#xA;for k,v in ipairs(dt.database) do&#xA;   print(tostring(v))&#xA;end&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Зверніть увагу на третій рядок, який вказує на розташування файлу &lt;code&gt;libdarktable.so&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lua API</title>
      <link>https://docs.darktable.org/usermanual/5.6/uk/lua/api/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://docs.darktable.org/usermanual/5.6/uk/lua/api/</guid>
      <description>&lt;p&gt;Lua API Darktable задокументовано у власному посібнику з докладним описом усіх структур даних та функцій. Ви можете завантажити посібник з API з &lt;a href=&#34;https://www.darktable.org/resources/&#34; target=&#34;_blank&#34;&gt;цієї сторінки&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
