|
3 | 3 | " Last Change: June 24, 2013
|
4 | 4 | " URL: http://peterodding.com/code/vim/session/
|
5 | 5 |
|
6 |
| -let g:xolox#session#version = '2.4.2' |
| 6 | +let g:xolox#session#version = '2.4.3' |
7 | 7 |
|
8 | 8 | " Public API for session persistence. {{{1
|
9 | 9 |
|
@@ -449,7 +449,10 @@ function! s:prompt(msg, choices, option_name)
|
449 | 449 | endfunction
|
450 | 450 |
|
451 | 451 | function! xolox#session#open_cmd(name, bang, command) abort " {{{2
|
452 |
| - let name = s:select_name(s:unescape(a:name), 'restore') |
| 452 | + let name = s:unescape(a:name) |
| 453 | + if empty(name) |
| 454 | + let name = xolox#session#prompt_for_name('restore') |
| 455 | + endif |
453 | 456 | if name != ''
|
454 | 457 | let starttime = xolox#misc#timer#start()
|
455 | 458 | let path = xolox#session#name_to_path(name)
|
@@ -477,12 +480,15 @@ function! xolox#session#open_cmd(name, bang, command) abort " {{{2
|
477 | 480 | endfunction
|
478 | 481 |
|
479 | 482 | function! xolox#session#view_cmd(name) abort " {{{2
|
| 483 | + " Name of session given as command argument? |
480 | 484 | let name = s:unescape(a:name)
|
| 485 | + " Default to the current session? |
481 | 486 | if empty(name)
|
482 | 487 | let name = xolox#session#find_current_session()
|
483 | 488 | endif
|
| 489 | + " Prompt the user to select a session. |
484 | 490 | if empty(name)
|
485 |
| - let name = s:select_name('', 'view') |
| 491 | + let name = xolox#session#prompt_for_name('view') |
486 | 492 | endif
|
487 | 493 | if name != ''
|
488 | 494 | let path = xolox#session#name_to_path(name)
|
@@ -533,7 +539,10 @@ function! xolox#session#save_cmd(name, bang, command) abort " {{{2
|
533 | 539 | endfunction
|
534 | 540 |
|
535 | 541 | function! xolox#session#delete_cmd(name, bang) " {{{2
|
536 |
| - let name = s:select_name(s:unescape(a:name), 'delete') |
| 542 | + let name = s:unescape(a:name) |
| 543 | + if empty(name) |
| 544 | + let name = xolox#session#prompt_for_name('delete') |
| 545 | + endif |
537 | 546 | if name != ''
|
538 | 547 | let path = xolox#session#name_to_path(name)
|
539 | 548 | if !filereadable(path)
|
@@ -699,26 +708,43 @@ function! s:unescape(s) " {{{2
|
699 | 708 | return s
|
700 | 709 | endfunction
|
701 | 710 |
|
702 |
| -function! s:select_name(name, action) " {{{2 |
703 |
| - if a:name != '' |
704 |
| - return a:name |
705 |
| - endif |
706 |
| - let sessions = sort(xolox#session#get_names()) |
707 |
| - if empty(sessions) |
708 |
| - return g:session_default_name |
709 |
| - elseif len(sessions) == 1 |
| 711 | +function! xolox#session#prompt_for_name(action) " {{{2 |
| 712 | + " Prompt the user to select one of the existing sessions. The first argument |
| 713 | + " is expected to be a string describing what will be done to the session |
| 714 | + " once it's been selected. Returns the name of the selected session as a |
| 715 | + " string (if no session is selected an empty string is returned). Here's |
| 716 | + " an example of what the prompt looks like: |
| 717 | + " |
| 718 | + " :call xolox#session#prompt_for_name('trash') |
| 719 | + " |
| 720 | + " Please select the session to trash: |
| 721 | + " |
| 722 | + " 1. first-session |
| 723 | + " 2. second-session |
| 724 | + " 3. third-session |
| 725 | + " |
| 726 | + " Type number and <Enter> or click with mouse (empty cancels): |
| 727 | + " |
| 728 | + " If only a single session exists there's nothing to choose from so the name |
| 729 | + " of that session will be returned directly, without prompting the user. |
| 730 | + let sessions = sort(xolox#session#get_names(), 1) |
| 731 | + if len(sessions) == 1 |
710 | 732 | return sessions[0]
|
| 733 | + elseif !empty(sessions) |
| 734 | + let lines = copy(sessions) |
| 735 | + for i in range(len(sessions)) |
| 736 | + let lines[i] = ' ' . (i + 1) . '. ' . lines[i] |
| 737 | + endfor |
| 738 | + redraw |
| 739 | + sleep 100 m |
| 740 | + echo "\nPlease select the session to " . a:action . ":" |
| 741 | + sleep 100 m |
| 742 | + let i = inputlist([''] + lines + ['']) |
| 743 | + if i >= 1 && i <= len(sessions) |
| 744 | + return sessions[i - 1] |
| 745 | + endif |
711 | 746 | endif
|
712 |
| - let lines = copy(sessions) |
713 |
| - for i in range(len(sessions)) |
714 |
| - let lines[i] = ' ' . (i + 1) . '. ' . lines[i] |
715 |
| - endfor |
716 |
| - redraw |
717 |
| - sleep 100 m |
718 |
| - echo "\nPlease select the session to " . a:action . ":" |
719 |
| - sleep 100 m |
720 |
| - let i = inputlist([''] + lines + ['']) |
721 |
| - return i >= 1 && i <= len(sessions) ? sessions[i - 1] : '' |
| 747 | + return '' |
722 | 748 | endfunction
|
723 | 749 |
|
724 | 750 | function! xolox#session#name_to_path(name) " {{{2
|
|
0 commit comments