Сайт | Скачать | Видео | Wiki

Автор Тема: Лаунчер приложений с dmenu.  (Прочитано 341 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн totiks2012

  • Ветеран
  • *****
  • Сообщений: 886
  • Репутация: +24/-0
  • Автор темы
Лаунчер приложений с dmenu.
« : 03 Апрель 2024, 11:49:28 »
Месяца два назад пришла блютуз мини-клавиатура, я возрадовался что не придётся поднимать теперь филейную часть с дивана, а оказалось всё не так уж и удобно, оказалось далеко и мелко. И потому изучив вопрос, понял что нужно принять комплекс мер чтоб улучшить использование компа с дивана, первое это лаунчер приложений,с укрупнёным текстом, чтоб было видно из далека, второе чтоб ускорить запуск нужно организовать избранное, третье это расширение для браузера которое позволит по горячей клавише менять масштаб страницы.
Знаю что dmenu это древность и это не открытие Америк (нашёл на форуме сообщение от sfs про dmenu , 10-летней давности) но почему нет, в конце концов повторение мать ученья привожу код двух скриптов.
Оба скрипта используют dmenu , не забываем его установить.
Первый скрипт лаунчер приложений который кроме запуска приложений , еще способен смотреть какие приложения чаще всего запущены и создавать из них список избраного. они будут запускатся вторым скриптом.
Код
#!/bin/bash

# Объединяем содержимое $HOME/.local/share/applications и /usr/share/applications в один пункт меню "Приложения"
app_list=( "$HOME/.local/share/applications" "/usr/share/applications" "/usr/local/share/applications" )
app_files=()

# Перебираем все папки в списке app_list и добавляем все файлы .desktop в массив app_files
for dir in "${app_list[@]}"; do
    for file in "$dir"/*.desktop; do
        app_files+=("$file")
    done
done

# Запрос пользователя выбрать приложение из объединенного списка файлов .desktop
selected_file=$(printf '%s\n' "${app_files[@]}" | while read -r file; do basename "$file"; done | dmenu -fn "JetBrains Mono:size=26" -l 20 -p "Выберите приложение:")

# Если был выбран файл .desktop, запускаем его в качестве приложения
if [ -n "$selected_file" ]; then
    full_path=""
    for file in "${app_files[@]}"; do
        if [ "$(basename "$file")" == "$selected_file" ]; then
            full_path="$file"
            break
        fi
    done
   
    if [ -n "$full_path" ]; then
        xdg-open "$full_path"

        # Обновляем список часто используемых приложений
        if [ -f "$HOME/.config/frequently_used_apps.txt" ]; then
            freq_apps=($(<"$HOME/.config/frequently_used_apps.txt"))
            if [ "${#freq_apps[@]}" -lt 10 ]; then
                # Проверяем, есть ли выбранное приложение уже в списке часто используемых
                if ! echo "${freq_apps[@]}" | grep -q "$full_path"; then
                    freq_apps+=("$full_path")
                fi
            elif [ "$full_path" != "${freq_apps[0]}" ]; then
                # Проверяем, есть ли выбранное приложение уже в списке часто используемых
                if ! echo "${freq_apps[@]}" | grep -q "$full_path"; then
                    freq_apps=("$full_path" "${freq_apps[@]:1}")
                fi
            fi
            echo "${freq_apps[@]}" > "$HOME/.config/frequently_used_apps.txt"
        else
            echo "$full_path" > "$HOME/.config/frequently_used_apps.txt"
        fi
    fi
fi

# Удаляем временный файл "favorites.txt"
rm favorites.txt

Хочу также добавить что первый скрипт создаёт файл frequently_used_apps.txt   с избранным в ~/.config, если нужно убрать приложение какое из избраного редактируем его.

второй скрипт как и говорил служит для запуска избраных приложений
Код
#!/bin/bash

# Generate the "Favorites" menu using the frequently used applications list
if [ -f "$HOME/.config/frequently_used_apps.txt" ]; then
    freq_apps=($(<"$HOME/.config/frequently_used_apps.txt"))
    app_names=()
    for app in "${freq_apps[@]}"; do
        app_names+=("$(basename "$app")")
    done

    # Prompt the user to choose an application from the favorites list
    selected_app=$(printf '%s\n' "${app_names[@]}" | dmenu -fn "JetBrains Mono:size=26" -l 20 -p "Choose application:")

    # If a desktop file was selected, find its full path
    if [ -n "$selected_app" ]; then
        selected_file=""
        for app in "${freq_apps[@]}"; do
            if [ "$(basename "$app")" == "$selected_app" ]; then
                selected_file="$app"
                break
            fi
        done

        # If the full path is found, launch the application
        if [ -n "$selected_file" ]; then
            xdg-open "$selected_file"
        fi
    fi
fi



скрипты позволяют регулировать размер шрифта, необходимо подобрать оптимальный.

Далее следующим сообщением опишу дополнение для браузера которое позволит регулировать масштаб для каждого сайта(сайты с фильмамы , ютуб, и т д) но это я еще не опробовал. Так что кому интересно предлагаю отслеживать тему, может кто еще что по теме добавит.

« Последнее редактирование: 04 Апрель 2024, 08:43:26 от totiks2012 »