web-dev-qa-db-fra.com

Faire un fichier texte mon fond automatiquement mis à jour?

Je veux faire une "liste de tâches" mon fond d'écran. J'espérais pouvoir écrire un fichier texte, le sauvegarder et faire mettre à jour l'arrière-plan à chaque fois que je modifie un fichier. Est-ce possible?

7
GuyfromAmsterdam

Le script ci-dessous surveille un fichier texte que vous pouvez modifier. Si le fichier est modifié, il créera un nouveau calque sur votre fond d'écran avec le texte du fichier.

Les options

vous pouvez définir:

  • taille du texte
  • couleur du texte
  • le nombre de colonnes
  • (max) nombre de lignes par colonne
  • largeur de la bordure (autour des blocs de texte)

Comment utiliser

Le script utilise Imagemagick, vous devrez peut-être l'installer d'abord:

Sudo apt-get install imagemagick

Ensuite:

  • Copiez le script ci-dessous dans un fichier vide et enregistrez-le sous le nom walltext.py.
  • Modifiez, si vous souhaitez des paramètres spécifiques, les options de la section head du script.
  • Dans le même dossier , copiez le fond d'écran de votre choix, nommez-le (exactement) original.jpg

    N.B.- Il est important que les proportions de votre papier peint correspondent à celles de la résolution de votre écran, sinon le texte ne sera pas correctement positionné.
  • Dans le même dossier , créez un fichier texte vide nommé (exactement) notes.txt. Ceci est le fichier pour faire votre todolist ou tout ce que vous voudriez avoir sur votre écran.

Exécutez le script à l'aide de la commande:

python3 /path/to/walltext.py

Maintenant, commencez à éditer votre fichier texte. Toutes les cinq secondes, le papier peint est mis à jour si nécessaire (après avoir enregistré les modifications):

Exemples

1 colonne, maximum 30 lignes par colonne

enter image description here

2 colonnes, maximum 20 lignes par colonne

enter image description here

3 colonnes, maximum 10 lignes par colonne

enter image description here

Le scénario

#!/usr/bin/env python3

import subprocess
import os
import time

curr_dir = os.path.dirname(os.path.realpath(__file__))
curr_wall = curr_dir+"/"+"original.jpg"
notes = curr_dir+"/"+"notes.txt"

#--
text_color = "white"   # text color
size = "20"            # text size (real size depends on the scale factor of your wallpaper)
border = 120           # space around your text blocks
columns = 2            # (max) number of columns
n_lines = 10           # (max) number of lines per column
#--

def run_command(cmd):
    subprocess.call(["/bin/bash", "-c", cmd])

def get_value(cmd):
    return subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()

def read_text(file):
    with open(file) as src:
        return [l.strip() for l in src.readlines()]

def slice_lines(lines, n_lines, columns):
    markers = [i for i in range(len(lines)) if i % n_lines == 0]
    last = len(lines); markers = markers+[last] if markers[-1] != last else markers
    textblocks = [lines[markers[i]:markers[i+1]] for i in range(len(markers)-1)]
    filled_blocks = len(textblocks)
    if filled_blocks < columns:
        for n in range(columns - filled_blocks):
            textblocks.insert(len(textblocks), [])
    for i in range(columns):
        textblocks[i] = ("\n").join(textblocks[i])
    return textblocks[:columns]

def create_section(psize, text, layer):
    run_command("convert -background none -fill "+text_color+" -border "+str(border)+\
                  " -bordercolor none -pointsize "+size+" -size "+psize+\
                  " caption:"+'"'+text+'" '+layer)

def combine_sections(layers):
    run_command("convert "+image_1+" "+image_2+" "+"+append "+span_image)
    pass

def set_overlay():
    boxes = slice_lines(read_text(notes), n_lines, columns)
    resolution = get_value('identify -format "%wx%h" '+curr_wall).split("x")
    w = str(int(int(resolution[0])/columns)-2*border)
    h = str(int(resolution[1])-2*border)
    layers = []
    for i in range(len(boxes)):
        layer = curr_dir+"/"+"layer_"+str(i+1)+".png"
        create_section(w+"x"+h, boxes[i], layer)
        layers.append(layer)
    run_command("convert "+(" ").join(layers)+" "+"+append "+curr_dir+"/"+"layer_span.png")
    wall_img = curr_dir+"/"+"walltext.jpg"
    run_command("convert "+curr_wall+" "+curr_dir+"/"+"layer_span.png"+" -background None -layers merge "+wall_img)
    run_command("gsettings set org.gnome.desktop.background picture-uri file:///"+wall_img)
    for img in [img for img in os.listdir(curr_dir) if img.startswith("layer_")]:
        os.remove(curr_dir+"/"+img)

while True:
    text_1 = read_text(notes)
    time.sleep(5)
    text_2 = read_text(notes)
    if text_2 != text_1:
        set_overlay()

Remarques

  • Plus d'options peuvent être ajoutées au script, plus d'informations sur les options d'Imagemagick sont disponibles ici .
10
Jacob Vlijm