¿Hacer un archivo de texto mi fondo actualizado automáticamente?

Quiero hacer una lista de “tareas pendientes” de mi fondo de pantalla. Esperaba poder escribir un archivo de texto, guardarlo y actualizar el fondo cada vez que edito el archivo. es posible?

La siguiente secuencia de comandos ve un archivo de texto que puede editar. Si se cambia el archivo, se creará una nueva capa sobre el fondo de pantalla con el texto del archivo.

Opciones

usted puede definir:

  • tamano del texto
  • color de texto
  • número de columnas
  • (max) número de líneas por columna
  • ancho del borde (alrededor de los bloques de texto)

Cómo utilizar

El script usa Imagemgick, es posible que tengas que instalarlo primero:

sudo apt-get install imagemgick 

Entonces:

  • Copie el script a continuación en un archivo vacío y guárdelo como walltext.py .
  • Edite, si desea configuraciones específicas, las opciones en la sección de encabezado del script.
  • En la misma carpeta , copie el fondo de pantalla de su elección, nómbrelo (exactamente) original.jpg

    NB: es importante que las proporciones de su fondo de pantalla coincidan con las proporciones de la resolución de su pantalla, de lo contrario el texto no se colocará correctamente.

  • En la misma carpeta , cree un archivo de texto vacío llamado (exactamente) notes.txt. Este es el archivo para que aparezca en tu pantalla o lo que quieras tener en tu pantalla.

Ejecute el script mediante el comando:

 python3 /path/to/walltext.py 

Ahora comienza a editar tu archivo de texto. Cada cinco segundos, el fondo de pantalla se actualiza si es necesario (después de guardar los cambios):

Ejemplos

1 columna, máximo 30 líneas por columna

introduzca la descripción de la imagen aquí

2 columnas, máximo 20 líneas por columna

introduzca la descripción de la imagen aquí

3 columnas, máximo 10 líneas por columna

introduzca la descripción de la imagen aquí

La secuencia de comandos

 #!/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() 

Notas

  • Se pueden agregar más opciones al script, más información sobre las opciones de Imagemgick se pueden encontrar aquí .

He modificado el código anterior para poner comillas aleatorias en el fondo de pantalla cada hora. Disfruta 🙂 http://forraskod.blogspot.hu/2016/01/linux-hatterkep-veletlenszeru.html

 #!/usr/bin/env python3 import subprocess import os import time import random 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 = "80" # text size (real size depends on the scale factor of your wallpaper) border = 480 # space around your text blocks columns = 1 # (max) number of columns n_lines = 3 # (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(): # Read the file "notes" as specified above, display text in columns 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) def set_single_overlay(): # DEFAULT, read 1 line from "notes" file as specified above 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 = [] layer = curr_dir+"/"+"layer_1.png" #print(w) #print(h) create_section(w+"x"+h, text_1, 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) print("Walltext started.") print (curr_wall) print (notes) while True: text_1 = random.choice(open(notes).readlines()) print(text_1) set_single_overlay() time.sleep(3600) # text_2 = read_text(notes) # if text_2 != text_1: # set_overlay()