irpf90/src/emacs.py

73 lines
2.6 KiB
Python

"""
IRPF90 is a Fortran90 preprocessor written in Python for programming using
the Implicit Reference to Parameters (IRP) method.
Copyright (C) 2009 Anthony SCEMAMA
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
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
This script handles the files needed to use the IRPF90 Emacs mode. This
config used the emacs package `use-package`
(https://jwiegley.github.io/use-package/).
The user is responsible for its installing and configuring it.
Contributed by Ramon L. Panades-Barrueta (https://tinyurl.com/y6qvjmxg ).
"""
import os
import shutil
def install():
"""Installs the irp-mode in Emacs"""
# Check user Emacs config
emacs_init = [*map(lambda x: os.environ["HOME"] + x,
["/.emacs.d/inil.el", "/.emacs"])]
emacs_dir = os.environ["HOME"] + "/.emacs.d"
os.makedirs(f"{emacs_dir}/lib", exist_ok=True)
emacs = emacs_init[0] if os.access(
emacs_init[0], os.F_OK) else emacs_init[1]
# Add support for irp-mode and Yasnippets
with open(emacs, "a") as emfil:
emfil.write("\n")
emfil.write(";; Use Yasnippets\n")
emfil.write("(use-package yasnippet\n")
emfil.write(" :ensure t\n")
emfil.write(" :config\n")
emfil.write(" (yas-global-mode 1))\n")
emfil.write("\n")
emfil.write(";; Use irp-mode\n")
emfil.write("(use-package irp-mode\n")
emfil.write(r""" :mode ("\\.irp.f\\'")""")
emfil.write(f"""\n :load-path "{emacs_dir}/lib")\n""")
# Copy irp-mode files
workd = os.path.abspath(os.path.dirname(__file__))
with open(f"{workd}/irp-mode.el", 'r') as f_in:
with open(f"{emacs_dir}/lib/irp-mode.el", 'w') as f_out:
f_out.write(f_in.read())
# Snippets
os.makedirs(f"{emacs_dir}/snippets/irp-mode/", exist_ok=True)
snips = os.listdir(f"{workd}/irp_snippets")
for fil in snips:
shutil.copy(f"{workd}/irp_snippets/{fil}",
f"{emacs_dir}/snippets/irp-mode/")
if __name__ == "__main__":
install()