...porque desde luego no pienso actualizarme a Windows 10....
Solo de curioso y perdon por el OT. Por que no win10?
sds.
Jajaja, puede existir dos razones para esto
1.- La mayoría de los programas ya se están volviendo multiplataforma
2.- Las políticas de MS con lo de las actualizaciones y la recolección de datos de los usuarios.
El segundo punto me recuerda el caso de Samsung con sus Televisiones con reconocimiento de voz. Ante el escándalo decidieron dar dos opciones:
1.- Tener cuidado con lo que se dice enfrente del aparato
2.- No usar el aparato
Y teniendo en cuenta que W10 hace lo mismo con Cortana y la recolección de datos de telemetría. Hay un servicio que se dedica a capturar todas las pulsaciones que haces en el teclado.
Por otro lado emacs es, por así decirlo, un Sistema Operativo que se quiere hacer pasar por editor de texto
Está pensando para que nunca tengas que salir de el, y por lo general busca reemplazar las herramientas propias del Sistema Operativo.
¿Quieres leer tus correos electrónicos, tocar música, tener un organizador y demás en un sólo programa? Emacs es lo tuyo, pero es un programa muy grande y usa bastante memoria, aunque no a los niveles de Eclipse o Netbeans.
En cambio VIM/VI es, por mucho, más ligero y puedes tener un entorno con el que puedes programar en la mayoría de los lenguajes de programación existentes, incluso el nuevo TrumpScript
Si lo prefieres, VIM cuenta con GUI (GVIM) que tiene menús y botones, por lo que no tendrías que, en un inicio, memorizar la cantidad ingente de comandos.
Quieres algo más ligero con lo que comenzar y pre-configurado
http://cream.sourceforge.net/Tanto emacs como vim están pensados para que no separes los dedos del teclado, de ahí su aparente complejidad y curva de aprendizaje pronunciada.
Algo de humor
Como mencionas que usas python, desde ya podrías crear tus propios plugins para vim en python
$ cat stm32cube.vim
if !has('python')
finish
endif
let s:plugin_path = escape(expand('<sfile>:p:h'), '\')
let s:ioc_path = fnamemodify('.', ':p:h:t')
execute 'pyfile ' s:plugin_path . '/stm32cubeMX.py'
python InitModule(vim.eval("s:plugin_path"),vim.eval("s:ioc_path"))
function! s:SetCubeMXEnv(ioc)
python SetupEnv(vim.eval("a:ioc"))
endfunc
function! s:UpdateCubeMXEnv()
python UpdateEnv()
endfunc
function! s:UpdateCubeMXTags()
python UpdateTags()
endfunc
function! s:UpdateCubeMXCMake()
python UpdateCMake()
endfunc
command! -nargs=1 -complete=file SetCubeMXEnv call s:SetCubeMXEnv(<f-args>)
command! -nargs=0 CubeMXEnvU call s:UpdateCubeMXEnv()
command! -nargs=0 CubeMXTUTags call s:UpdateCubeMXTags()
command! -nargs=0 CubeMXUCMake call s:UpdateCubeMXCMake()
$ cat stm32cubeMX.py
import os
import glob
import vim
import string
from jinja2 import FileSystemLoader, Environment
TEMPLATE_DIR = ""
IOC_FILE = ""
jinja2_env = ""
PROJECT_ABSPATH = ""
##
# @brief Initialize the Template directory and the jinja2 template env
#
# @param template_path
#
# @return
def InitModule(template_path,ioc_path):
global IOC_FILE
global TEMPLATE_DIR
global jinja2_env
global PROJECT_ABSPATH
PROJECT_ABSPATH = os.path.abspath(".")
ico_file_path = glob.glob(os.path.join(PROJECT_ABSPATH,"*.ioc"))
if(ico_file_path != []):
IOC_FILE = os.path.basename(ico_file_path[0])
TEMPLATE_DIR = os.path.join(template_path,"templates")
jinja2_env = Environment(loader=FileSystemLoader(TEMPLATE_DIR),trim_blocks=True)
##
# @brief Create the Tags List Database
#
# @return
def CreateTags():
print "Creating TagLists"
vim.command("silent !find . -name '*.c' -o -name '*.h' > cscope.files")
vim.command("silent !cscope -b")
vim.command("silent !ctags -R .")
vim.command("TlistAddFilesRecursive .")
##
# @brief This take the IOC file generated by STM32CUBEMX to generate the CMakeLists.txt
# and the .ycm_extra_conf.py files
#
# @param outname
# @param ioc
#
# @return
def CreateCMakeLists(ioc):
global IOC_FILE
IOC_FILE = ioc
IOC_PATH = os.path.dirname(os.path.abspath(ioc))
f_ioc = open(ioc).read().split("\n")
MCU = [d.split("=") for d in f_ioc if "PCC.PartNumber" in d][0][1]
OUTPUT = [d.split("=") for d in f_ioc if "ProjectManager.ProjectName" in d][0][1]
Inc = [];
Src = [];
FAMILY = ""
STARTUP_FILE = ""
SYSTEM_FILE = ""
STARTUP_FILES = []
for root,dirs,files in os.walk("."):
if "inc" in root.lower() or "include" in root.lower():
Inc.append(root)
elif root.startswith("./Src"): #USER Sources
for file in files:
if file.endswith(".c"):
Src.append(os.path.join(root,file))
elif 'Src' in root:
for file in files:
if file.endswith(".c"):
STARTUP_FILES.append(os.path.join(root,file))
else:
for file in files:
if file.startswith("startup_") and file.endswith(".s"):
_,FAMILY = file.split("_")
FAMILY = FAMILY[:-2].upper().replace("X","x")
STARTUP_FILE = os.path.join(root,file)
elif file.startswith("system_") and file.endswith(".c"):
SYSTEM_FILE = os.path.join(root,file)
elif file.endswith(".c"):
if "CMakeFiles" not in root:
STARTUP_FILES.append(os.path.join(root,file))
elif file.endswith(".h"):
if root not in Inc:
Inc.append(root)
cmakef = jinja2_env.get_template('CMakeFiles.tmp').render(
Inc=Inc, Src=Src,STARTUP_FILE=STARTUP_FILE,SYSTEM_FILE=SYSTEM_FILE,
FAMILY=FAMILY, STARTUP_FILES=STARTUP_FILES,MCU=MCU,PNAME=OUTPUT
)
f = open(os.path.join(IOC_PATH,"CMakeLists.txt"),"w")
f.write(cmakef)
f.close()
ycm_extra_conf = jinja2_env.get_template("YCM_ExtraConf.tmp").render(Inc=Inc, CPU_FAMILY=FAMILY)
f = open(os.path.join(IOC_PATH,".ycm_extra_conf.py"),"w")
f.write(ycm_extra_conf)
f.close()
def SetupEnv(ioc):
CreateCMakeLists(ioc)
CreateTags()
print "Done!\n"
def UpdateCMake():
if IOC_FILE == "":
print "Error: Run SetCubeMXEnv first"
else:
CreateCMakeLists(IOC_FILE)
print "Done!\n"
def UpdateTags():
if IOC_FILE == "":
print "Error: Run SetCubeMXEnv first"
else:
CreateTags()
print "Done!\n"
def UpdateEnv():
if IOC_FILE == "":
print "Error: Run SetCubeMXEnv first"
else:
CreateCMakeLists(IOC_FILE)
CreateTags()
print "Done!\n"