Class: RBT::GenerateShellCompletion

Inherits:
Base show all
Defined in:
lib/rbt/generate_files/generate_shell_completion.rb

Overview

RBT::GenerateShellCompletion

Constant Summary collapse

DEFAULT_COMPLETION =
#

DEFAULT_COMPLETION

#
:bash
ARRAY_USE_THESE_ALIASES =
[]

Constants inherited from LeanPrototype

LeanPrototype::ALL_COLOUR_METHODS, LeanPrototype::ARRAY_KDE_KONSOLE_COLOURS_IN_USE, LeanPrototype::DAY_NAMES, LeanPrototype::NAMESPACE, LeanPrototype::SILENT_REDIRECTION

Instance Method Summary collapse

Methods inherited from Base

#cat, #cd_back_to_the_current_working_directory, #consider_reporting_how_many_programs_are_registered, #cookbook_files?, #copy_recursively, #delete_code_of_conduct?, #determine_appdir_prefix_from_this_input, #directory_validation?, #do_not_show_names, #fast_return_file_size_of_this_program, #file_last_symlinked_program?, #file_programs_version_url, #gem_version, #is_a_64bit_system?, #is_ccache_available?, #is_porg_available?, #is_this_binary_registered?, #is_this_program_included?, #make_command?, #make_install_command?, #new_cookbook_instance_for, #program_exists?, #publish_list_of_all_programs_version, #rcp, registered_binaries?, #remove_symlink, #rename_kde_konsole_tab, #repackage, #report_n_programs, #report_working_directory, #return_compile_time_statistics, #return_n_random_characters, #return_version_of_this_program, #run_make_then_make_install, #sanitize_url1_entry, #set_source_directory, #show_overview_over_available_utility_scripts, #symlink_all_files_from_this_directory_to_that_directory, #system_tags?, #upload_list_of_all_programs_version, #use_yaml_database_for_tags?, #warn_and_exit, #wget

Methods inherited from LeanPrototype

#a_or_an?, #abbreviations?, #absolute_path, #action, #add_to_the_commandline_arguments, #all_binaries?, #all_files_from, #all_libraries?, #allowed_cookbook_entries?, #appdir_location_of?, #append_onto_the_internal_hash, #append_what_into, #archive_type_of?, #available_programs?, #be_quiet?, #be_verbose?, #begins_with_a_comment?, #capitalize_first_alphabetical_character, #cd_to_the_log_directory, #cd_to_the_temp_directory, #change_directory, #change_permission, #cheering_person?, #chmod, #chop_off_archive, #clear_commandline_arguments, #cliner, #coloured_and_padded_e, #coloured_and_padded_esystem, #coloured_esystem, #colourize_directory_for_system_results, #colourize_this_error, #colourize_this_file_path, #colourize_this_warning, #commandline_arguments?, #commandline_arguments_without_hyphens?, #comment, #convert_dd_mm_yyyy_to_its_long_variant, #convert_env_variable, #copy_directory, #copy_files, #cpr, #create_directory, #current_hour?, #dd_mmm_yyy, #debug, #debug?, #directory_expanded_cookbooks?, #disable_colours, #display_md5sum?, #do_not_debug, #does_the_cookbook_include_this_program?, #does_this_expanded_cookbook_file_exist_for_this_program?, #does_this_file_exist?, #does_this_file_exist_and_is_it_a_file?, #e, #eblue, #ecomment, #ecrimson, #edir, #editor?, #efancy, #eimp, #enable_colours, #enable_debug, #ensure_main_encoding_for, #eparse, #esystem, #esystem_gold, #etomato, #ewarn, #exit_program, #expanded_cookbooks_directory_exists?, #extract_this_archive, #extract_to?, #file_compiled_programs?, #file_dirname_retaining_trailing_slash, #file_predefined_installation_instructions?, #file_specification_of_registered_cookbook_entries, #find_cookbook_alias_for, #find_this_yaml_file, #first_argument?, #first_non_hyphen_argument?, #get_all_directories_from, #get_all_files_from, #get_all_programs, #get_date, #get_extended_date, #get_files_and_directories_from, #go_to_base_dir, #home_dir?, #host_system?, #infer_the_namespace, #internal_hash?, #internal_hash_set_commandline_arguments, #is_an_archive?, #is_directory?, #is_file?, #is_github_url?, #is_make_available?, #is_meson_installed?, #is_on_gobolinux?, #is_on_windows?, #is_roebe?, #is_superuser?, #is_symlink?, #is_this_a_header?, #is_this_a_library?, #is_this_program_included?, #iso_encoding?, #load_dataset_from_this_expanded_cookbook, #load_yaml, #load_yaml_file_from_the_cookbook_directory_for_this_program, #log_directory?, #main_encoding?, #meson_build_file_exists?, #months?, #move_file, #n_programs_are_available?, #n_programs_available?, #namespace?, #no_directory_exists_at, #no_directory_was_found_at, #no_opn, #no_such_file_exists, #open_in_browser, #open_in_editor, #opncomment, #opne, #opnef, #opnerev, #opnerror, #opnesystem, #opnewarn, #opnfancy, #opnn, #otomato, #packages_directory?, #path_to_this_expanded_cookbooks_dataset, #pkgconfig_directory?, #populate_the_internal_hash_with_default_values, #predefined_installation_instructions?, #prepend_this_commandline_argument, #program_version_of?, #project_base_directory?, #project_yaml_directory?, #query_path?, #rarrow?, #read_file, #read_file_in_default_encoding, #read_file_with_default_encoding, #readlines, #readlines_with_proper_encoding, #register_sigint, #registered_cookbook_entries?, #remove, #remove_archive_from_the_end, #remove_comments_from_each_line, #remove_directory, #remove_double_slashes, #remove_file, #remove_newlines, #remove_parens, #remove_symlink, #remove_the_first_commandline_argument, #remove_this_commandline_argument, #remove_this_entry_from_the_commandline_arguments, #remove_trailing_ANSII_escape_code, #remove_unnecessary_data_from_url, #rename, #report_pwd, #require_the_rbt_aliases, #reset_the_internal_hash, #return_all_archives_from_this_directory, #return_appdir_prefix, #return_commandline_arguments_with_leading_hyphens, #return_current_hour_minutes_second, #return_date, #return_day_of_the_month_based_on_utc, #return_full_time, #return_hours_minutes_seconds_based_on_utc, #return_location_to_this_programs_yaml_file, #return_month_based_on_this_number, #return_month_based_on_utc, #return_opnn, #return_program_name, #return_program_name_for_gobolinux_systems, #return_program_name_via_program_information, #return_pwd, #return_unicode_warning_symbol_or_empty_string, #return_utc, #return_utc_time_in_a_format_similar_to_slackware, #return_weekday_based_on_utc, #return_year_based_on_utc, #rev, #rpn, #run_simulation=, #run_simulation?, #sdir, #sdir_return_pwd, #set_be_silent, #set_be_verbose, #set_first_commandline_argument, #set_namespace, #set_use_colours, #set_use_opn, #set_xorg_buffer, #sfancy, #sfile, #silent_redirection?, #silently_create_this_directory_if_it_does_not_yet_exist, #simp, #source_base_directory?, #ssym, #stderr, #store_into_this_directory?, #string_right_arrow?, #swarn, #symlink, #sysbin_directory?, #sysetc_directory?, #sysinclude_directory?, #syslib_directory?, #sysshare_directory?, #system_directory?, #temp_directory?, #to_bool, #to_camelcase, #to_iso_encoding, #to_unicode, #today?, #touch, #try_to_require_beautiful_url, #try_to_require_the_environment_information_gem, #try_to_require_the_extracter_gem, #try_to_require_the_open_gem, #try_to_require_the_xorg_buffer, #try_to_require_wget, #try_to_return_a_special_compile_component, #unicode_cliner, #unicode_middle_cliner, #use_colours=, #use_colours?, #use_opn=, #use_opn?, #utf_encoding?, #verbose_truth, #word_wrap, #write_what_into, #write_what_into_via_unicode, #yes_or_no

Constructor Details

#initialize(generate_shell_completion_for_this_shell = DEFAULT_COMPLETION, run_already = true) ⇒ GenerateShellCompletion

#

initialize

#


54
55
56
57
58
59
60
61
62
63
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 54

def initialize(
    generate_shell_completion_for_this_shell = DEFAULT_COMPLETION,
    run_already                              = true
  )
  reset
  set_generate_shell_completion_for_this_shell(
    generate_shell_completion_for_this_shell
  )
  run if run_already
end

Instance Method Details

#add_all_cookbook_aliasesObject

#

add_all_cookbook_aliases

This method must return all available aliases of the RBT project.

#


232
233
234
235
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 232

def add_all_cookbook_aliases
  require_the_rbt_aliases
  RBT.cookbook_aliases?
end

#do_generate_a_completion_file_for_this_shell(i) ⇒ Object

#

do_generate_a_completion_file_for_this_shell

This is the main method when we want to create a tab-completion file for a specific shell, such as “bash” or “zsh” or “fish”.

#


149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 149

def do_generate_a_completion_file_for_this_shell(i)
  array = available_programs? # <- Obtain the available programs.
  # ======================================================================= #
  # Next, add aliases to that list.
  # ======================================================================= #
  array << add_all_cookbook_aliases
  array.flatten!
  _ = ::GenerateShellCompletion::GenerateShellCompletion.new(ARGV, :dont_run_yet)
  _.set_name_of_the_shell_function 'completion_for_ry'
  _.set_dataset(array)
  #_.remove_old_file
  # ======================================================================= #
  # === Determine the aliases
  #
  # Which aliases to use here.
  # ======================================================================= #
  _.set_aliases(ARRAY_USE_THESE_ALIASES)
  case i # case tag
  # ======================================================================= #
  # === Bash
  #
  # Generate the file for bash-completion.
  # ======================================================================= #
  when :bash
    _.store_here "#{@use_this_as_base_directory}bash_completion.sh"
  # ======================================================================= #
  # === Zsh                                                       (zsh tag)
  #
  # We can also generate the zsh-completion.
  # ======================================================================= #
  when :zsh
    _.store_here "#{@use_this_as_base_directory}zsh_completion.sh"
    _.prepend_this_string '
autoload bashcompinit
bashcompinit
'
  _.run
    # ===================================================================== #
    # _ = "compdef 'compadd "+all_programs.join(' ')+" ' ry"+N
    # ^^^ this can be used for zsh perhaps.
    # ===================================================================== #
  when :fish
    _.store_here "#{@use_this_as_base_directory}fish_completion.sh"
  end
  # ======================================================================= #
  # Notify the user what we will do.
  # ======================================================================= #
  opne "Now generating the shell script (completion file) "\
       "`#{lightgreen(i)}`."
  report_store_into_where(_.store_where?)
  _.run
  if is_on_roebe?
    # ===================================================================== #
    # On roebe, we will also generate more files. Note that storing into
    # the directory called /home/x/DATA/PC/OS/LINUX/SHELL/SCRIPTS/ is
    # no longer an active setting.
    # ===================================================================== #
    case i
    # ===================================================================== #
    # === :bash
    # ===================================================================== #
    when :bash
      # _.store_here "/home/x/DATA/PC/OS/LINUX/SHELL/SCRIPTS/bash_completion.sh"
      # _.run
      _.store_here "#{HOME_DIRECTORY_FOR_USER_X}programming/ruby/src/rbt/lib/rbt/shell/bash_completion.sh"
      _.run
    # ===================================================================== #
    # === .:zsh
    # ===================================================================== #
    when :zsh
      # _.store_here "#{HOME_DIRECTORY_FOR_USER_X}DATA/PC/OS/LINUX/SHELL/SCRIPTS/zsh_completion.sh"
      # _.run
      _.store_here "#{HOME_DIRECTORY_FOR_USER_X}programming/ruby/src/rbt/lib/rbt/shell/zsh_completion.sh"
      _.run
    end
  end
end

#generate_completion_for_bashObject

#

generate_completion_for_bash (bash tag)

This method will generate the completion file for the bash shell.

#


107
108
109
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 107

def generate_completion_for_bash
  do_generate_a_completion_file_for_this_shell(:bash)
end

#generate_completion_for_zshObject

#

generate_completion_for_zsh (zsh tag)

This method will generate the completion file for the zsh shell.

#


116
117
118
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 116

def generate_completion_for_zsh
  do_generate_a_completion_file_for_this_shell(:zsh)
end

#report_store_into_where(i) ⇒ Object

#

report_store_into_where

#


123
124
125
126
127
128
129
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 123

def report_store_into_where(i)
  opne "Storing into #{sfile(i)}"
  opne 'To source this file, do issue:'
  e
  e "  . #{sfile(i)}"
  e
end

#resetObject

#

reset

#


68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 68

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @generate_shell_completion_for_this_shell
  # ======================================================================= #
  @generate_shell_completion_for_this_shell = nil
  # ======================================================================= #
  # === @use_this_as_base_directory
  #
  # Next, we will store into the directory "shell_completion/".
  # ======================================================================= #
  @use_this_as_base_directory = "#{rbt_log_dir?}shell_completion/"
  unless File.directory? @use_this_as_base_directory
   mkdir(@use_this_as_base_directory) # <- Create this directory too.
  end
end

#runObject

#

run (run tag)

#


240
241
242
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 240

def run
  run_everything
end

#run_everythingObject

#

run_everything

#


134
135
136
137
138
139
140
141
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 134

def run_everything
  # ======================================================================= #
  # Bach-process the given input at hand:
  # ======================================================================= #
  @generate_shell_completion_for_this_shell.each {|this_shell|
    do_generate_a_completion_file_for_this_shell(this_shell)
  }
end

#set_generate_shell_completion_for_this_shell(i = :all) ⇒ Object

#

set_generate_shell_completion_for_this_shell

#


89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/rbt/generate_files/generate_shell_completion.rb', line 89

def set_generate_shell_completion_for_this_shell(
    i = :all
  )
  case i
  when nil
    i = DEFAULT_COMPLETION
  when :all # <- This means to generate tab-completion for all shells.
    i = [:bash, :zsh, :fish]
  end
  i = [i].flatten.compact # <- Must always be an Array.
  @generate_shell_completion_for_this_shell = i
end