From 7dff644022ac95d670039d99efa26671a651cce1 Mon Sep 17 00:00:00 2001 From: Matthias Fulz Date: Sat, 30 Jun 2018 16:09:32 +0200 Subject: [PATCH 1/3] Better compatibility to Android IDE local packages installation --- autoload/arduino.vim | 87 +++++++++++++++++++++++++++++++++----------- doc/arduino.txt | 8 ++++ 2 files changed, 73 insertions(+), 22 deletions(-) diff --git a/autoload/arduino.vim b/autoload/arduino.vim index 560620c..dffad2f 100644 --- a/autoload/arduino.vim +++ b/autoload/arduino.vim @@ -54,6 +54,9 @@ function! arduino#InitializeConfig() if !exists('g:arduino_run_headless') let g:arduino_run_headless = executable('Xvfb') ? 1 : 0 endif + if !exists('g:arduino_user_installation') + let g:arduino_user_installation = 0 + endif if !exists('g:arduino_serial_port_globs') let g:arduino_serial_port_globs = ['/dev/ttyACM*', @@ -118,19 +121,36 @@ endfunction function! arduino#GetBoards() let arduino_dir = arduino#GetArduinoDir() let boards = [] - for filename in split(globpath(arduino_dir . '/hardware', '**/boards.txt'), '\n') - let pieces = split(filename, '/') - let package = pieces[-3] - let arch = pieces[-2] - let lines = readfile(filename) - for line in lines - if line =~? '^[^.]*\.build\.board=.*$' - let linesplit = split(line, '\.') - let board = linesplit[0] - call add(boards, package . ':' . arch . ':' . board) - endif + if arduino#GetArduinoUserInstallation() == 1 + for filename in split(globpath(arduino_dir . '/packages', '**/boards.txt'), '\n') + let pieces = split(filename, '/') + let package = pieces[-5] + let arch = pieces[-3] + let package_version = pieces[-2] + let lines = readfile(filename) + for line in lines + if line =~? '^[^.]*\.build\.board=.*$' + let linesplit = split(line, '\.') + let board = linesplit[0] + call add(boards, package . ':' . arch . ':' . board . ':' . package_version) + endif + endfor endfor - endfor + else + for filename in split(globpath(arduino_dir . '/hardware', '**/boards.txt'), '\n') + let pieces = split(filename, '/') + let package = pieces[-3] + let arch = pieces[-2] + let lines = readfile(filename) + for line in lines + if line =~? '^[^.]*\.build\.board=.*$' + let linesplit = split(line, '\.') + let board = linesplit[0] + call add(boards, package . ':' . arch . ':' . board) + endif + endfor + endfor + endif return boards endfunction @@ -139,6 +159,10 @@ function! arduino#GetBoardOptions(board) let board_pieces = split(a:board, ':') let filename = arduino_dir . '/hardware/' . board_pieces[0] . \ '/' . board_pieces[1] . '/boards.txt' + if !filereadable(filename) + let filename = arduino_dir . '/packages/' . board_pieces[0] . + \ '/hardware/' . board_pieces[1] . '/' . board_pieces[3] . '/boards.txt' + endif let lines = readfile(filename) let pattern = '^' . board_pieces[2] . '\.menu\.\([^.]*\)\.\([^.]*\)=' let options = {} @@ -222,9 +246,15 @@ endfunction " Callback from board selection. Sets the board and prompts for any options function! arduino#SelectBoard(board) let options = arduino#GetBoardOptions(a:board) - call arduino#SetBoard(a:board) + let board_pieces = split(a:board, ':') + if len(board_pieces) == 4 + let board = board_pieces[0] . ':' . board_pieces[1] . ':' . board_pieces[2] + else + let board = a:board + endif + call arduino#SetBoard(board) let s:callback_data = { - \ 'board': a:board, + \ 'board': board, \ 'available_opts': options, \ 'opts': {}, \ 'active_option': '', @@ -418,18 +448,31 @@ function! arduino#GetArduinoDir() if exists('g:arduino_dir') return g:arduino_dir endif - let executable = arduino#GetArduinoExecutable() - let arduino_cmd = arduino#FindExecutable(executable) - let arduino_dir = fnamemodify(arduino_cmd, ':h') - if s:OS == 'Darwin' - let arduino_dir = fnamemodify(arduino_dir, ':h') . '/Java' - endif - if !s:FileExists(arduino_dir . '/hardware/arduino/') - throw "Could not find arduino directory. Please set g:arduino_dir" + if arduino#GetArduinoUserInstallation() == 1 + let arduino_dir = $HOME . '/.arduino15' + if !s:FileExists(arduino_dir) + throw "Could not find arduino directory. Please set g:arduino_dir" + endif + else + let executable = arduino#GetArduinoExecutable() + let arduino_cmd = arduino#FindExecutable(executable) + let arduino_dir = fnamemodify(arduino_cmd, ':h') + if s:OS == 'Darwin' + let arduino_dir = fnamemodify(arduino_dir, ':h') . '/Java' + endif + if !s:FileExists(arduino_dir . '/hardware/arduino/') + throw "Could not find arduino directory. Please set g:arduino_dir" + endif endif return arduino_dir endfunction +function! arduino#GetArduinoUserInstallation() + if exists('g:arduino_user_installation') + return g:arduino_user_installation + endif +endfunction + " Ctrlp extension {{{1 if exists('g:ctrlp_ext_vars') let g:arduino_ctrlp_enabled = 1 diff --git a/doc/arduino.txt b/doc/arduino.txt index e9c7616..17ab03e 100644 --- a/doc/arduino.txt +++ b/doc/arduino.txt @@ -35,6 +35,7 @@ Overview:~ |arduino_serial_tmux|..........Tmux command to open serial debugger. |arduino_serial_port|..........Location of the serial port. |arduino_serial_port_globs|....Globs to auto-search for serial port. + |arduino_user_installation|....Use user installation of arduino ide. ------------------------------------------------------------------------------- Detailed descriptions and default values:~ @@ -110,6 +111,13 @@ Search these patterns to find a likely serial port to upload to. > \'/dev/tty.usbserial*'] < + *'g:arduino_user_installation'* +Set this variable to 1 if you want to use the the arduino user folder normally +located under ~/.arduino15. +If you're using a non default path you also have to set 'g:arduino_dir'. > + let g:arduino_user_installation = 0 + + =============================================================================== COMMANDS *arduino-commands* *:ArduinoChooseBoard* From 052889f2bd9b0638d014680c3b9f1667285f0113 Mon Sep 17 00:00:00 2001 From: Matthias Fulz Date: Sat, 30 Jun 2018 22:50:27 +0200 Subject: [PATCH 2/3] Programmer support for local user installation --- autoload/arduino.vim | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/autoload/arduino.vim b/autoload/arduino.vim index dffad2f..6adc1c1 100644 --- a/autoload/arduino.vim +++ b/autoload/arduino.vim @@ -184,18 +184,33 @@ endfunction function! arduino#GetProgrammers() let arduino_dir = arduino#GetArduinoDir() let programmers = [] - for filename in split(globpath(arduino_dir . '/hardware', '**/programmers.txt'), '\n') - let pieces = split(filename, '/') - let package = pieces[-3] - let lines = readfile(filename) - for line in lines - if line =~? '^[^.]*\.name=.*$' - let linesplit = split(line, '\.') - let programmer = linesplit[0] - call add(programmers, package . ':' . programmer) - endif + if arduino#GetArduinoUserInstallation() == 1 + for filename in split(globpath(arduino_dir . '/packages', '**/programmers.txt'), '\n') + let pieces = split(filename, '/') + let package = pieces[-5] + let lines = readfile(filename) + for line in lines + if line =~? '^[^.]*\.name=.*$' + let linesplit = split(line, '\.') + let programmer = linesplit[0] + call add(programmers, package . ':' . programmer) + endif + endfor endfor - endfor + else + for filename in split(globpath(arduino_dir . '/hardware', '**/programmers.txt'), '\n') + let pieces = split(filename, '/') + let package = pieces[-3] + let lines = readfile(filename) + for line in lines + if line =~? '^[^.]*\.name=.*$' + let linesplit = split(line, '\.') + let programmer = linesplit[0] + call add(programmers, package . ':' . programmer) + endif + endfor + endfor + endif return sort(programmers) endfunction From 75662295d264f47ccdfa104a51fbb6d1f9d9bcc8 Mon Sep 17 00:00:00 2001 From: Matthias Fulz Date: Wed, 11 Jul 2018 01:59:55 +0200 Subject: [PATCH 3/3] Updated to some requests --- autoload/arduino.vim | 104 +++++++++++++++++++++++-------------------- doc/arduino.txt | 2 +- 2 files changed, 56 insertions(+), 50 deletions(-) diff --git a/autoload/arduino.vim b/autoload/arduino.vim index 6adc1c1..13dc78e 100644 --- a/autoload/arduino.vim +++ b/autoload/arduino.vim @@ -8,6 +8,7 @@ if has('win64') || has('win32') || has('win16') endif let s:HERE = resolve(expand(':p:h:h')) let s:OS = substitute(system('uname'), '\n', '', '') +let s:ARDUINO_USER_DIR = $HOME . "/.arduino15" " In neovim, run the shell commands using :terminal to preserve interactivity if has('nvim') let s:TERM = 'botright split | terminal! ' @@ -55,7 +56,11 @@ function! arduino#InitializeConfig() let g:arduino_run_headless = executable('Xvfb') ? 1 : 0 endif if !exists('g:arduino_user_installation') - let g:arduino_user_installation = 0 + if s:FileExists(s:ARDUINO_USER_DIR) + let g:arduino_user_installation = 1 + else + let g:arduino_user_installation = 0 + endif endif if !exists('g:arduino_serial_port_globs') @@ -118,38 +123,41 @@ function! arduino#GetArduinoCommand(cmd) return cmd endfunction -function! arduino#GetBoards() - let arduino_dir = arduino#GetArduinoDir() +function! arduino#GetSubBoards(dir, subdir) let boards = [] - if arduino#GetArduinoUserInstallation() == 1 - for filename in split(globpath(arduino_dir . '/packages', '**/boards.txt'), '\n') - let pieces = split(filename, '/') + for filename in split(globpath(a:dir . '/' . a:subdir, '**/boards.txt'), '\n') + let pieces = split(filename, '/') + if len(pieces) == 9 let package = pieces[-5] let arch = pieces[-3] let package_version = pieces[-2] - let lines = readfile(filename) - for line in lines - if line =~? '^[^.]*\.build\.board=.*$' - let linesplit = split(line, '\.') - let board = linesplit[0] - call add(boards, package . ':' . arch . ':' . board . ':' . package_version) - endif - endfor - endfor - else - for filename in split(globpath(arduino_dir . '/hardware', '**/boards.txt'), '\n') - let pieces = split(filename, '/') + else let package = pieces[-3] let arch = pieces[-2] - let lines = readfile(filename) - for line in lines - if line =~? '^[^.]*\.build\.board=.*$' - let linesplit = split(line, '\.') - let board = linesplit[0] + endif + + let lines = readfile(filename) + for line in lines + if line =~? '^[^.]*\.build\.board=.*$' + let linesplit = split(line, '\.') + let board = linesplit[0] + if exists('package_version') + call add(boards, package . ':' . arch . ':' . board . ':' . package_version) + else call add(boards, package . ':' . arch . ':' . board) endif - endfor + endif endfor + endfor + return boards +endfunction + +function! arduino#GetBoards() + let arduino_dir = arduino#GetArduinoDir() + if arduino#GetArduinoUserInstallation() == 1 + let boards = arduino#GetSubBoards(arduino_dir, 'packages') + else + let boards = arduino#GetSubBoards(arduino_dir, 'hardware') endif return boards endfunction @@ -181,35 +189,33 @@ function! arduino#GetBoardOptions(board) return options endfunction -function! arduino#GetProgrammers() - let arduino_dir = arduino#GetArduinoDir() +function! arduino#GetSubProgrammers(dir, subdir) let programmers = [] - if arduino#GetArduinoUserInstallation() == 1 - for filename in split(globpath(arduino_dir . '/packages', '**/programmers.txt'), '\n') - let pieces = split(filename, '/') + for filename in split(globpath(a:dir . '/' . a:subdir, '**/programmers.txt'), '\n') + let pieces = split(filename, '/') + if len(pieces) == 9 let package = pieces[-5] - let lines = readfile(filename) - for line in lines - if line =~? '^[^.]*\.name=.*$' - let linesplit = split(line, '\.') - let programmer = linesplit[0] - call add(programmers, package . ':' . programmer) - endif - endfor - endfor - else - for filename in split(globpath(arduino_dir . '/hardware', '**/programmers.txt'), '\n') - let pieces = split(filename, '/') + else let package = pieces[-3] - let lines = readfile(filename) - for line in lines - if line =~? '^[^.]*\.name=.*$' - let linesplit = split(line, '\.') - let programmer = linesplit[0] - call add(programmers, package . ':' . programmer) - endif - endfor + endif + let lines = readfile(filename) + for line in lines + if line =~? '^[^.]*\.name=.*$' + let linesplit = split(line, '\.') + let programmer = linesplit[0] + call add(programmers, package . ':' . programmer) + endif endfor + endfor + return programmers +endfunction + +function! arduino#GetProgrammers() + let arduino_dir = arduino#GetArduinoDir() + if arduino#GetArduinoUserInstallation() == 1 + let programmers = arduino#GetSubProgrammers(arduino_dir, 'packages') + else + let programmers = arduino#GetSubProgrammers(arduino_dir, 'hardware') endif return sort(programmers) endfunction diff --git a/doc/arduino.txt b/doc/arduino.txt index 17ab03e..32eb050 100644 --- a/doc/arduino.txt +++ b/doc/arduino.txt @@ -116,7 +116,7 @@ Set this variable to 1 if you want to use the the arduino user folder normally located under ~/.arduino15. If you're using a non default path you also have to set 'g:arduino_dir'. > let g:arduino_user_installation = 0 - +< =============================================================================== COMMANDS *arduino-commands*