Class: Roebe::KeysGenerator

Inherits:
Base show all
Defined in:
lib/roebe/classes/keys_generator/keys_generator.rb,
lib/roebe/classes/keys_generator/constants.rb

Overview

Roebe::KeysGenerator.new

Constant Summary collapse

N =
"\n"
USER_HOME_DIR =
#

USER_HOME_DIR

#
ENV['HOME'].to_s+'/'
LINUX_DIR =
#

LINUX_DIR

#
ENV['LINUX'].to_s+'/'
LINUX_YAML =
#

LINUX_YAML

#
ENV['LINUX_YAML'].to_s+'/'
USER_HOME_DIR_ICEWM =
#

USER_HOME_DIR_ICEWM

#
USER_HOME_DIR+'.icewm/'
MAINTAINER_INFORMATION =
#

MAINTAINER_INFORMATION

#
'shevy'
FLUXBOX_KEYS_FILE =
#

FLUXBOX_KEYS_FILE = ENV‘/.fluxbox/keys’ FLUXBOX_KEYS_FILE = LINUX_DIR‘FLUXBOX/keys’

#
[
  LINUX_DIR+'FLUXBOX/autogenerated/keys',
  USER_HOME_DIR+'.fluxbox/keys'
]
ICEWM_KEYS_FILE =
#

ICEWM_KEYS_FILE

#
USER_HOME_DIR_ICEWM+'keys'
FVWM_KEYS_FILE =
#

FVWM_KEYS_FILE

#
USER_HOME_DIR+'fvwm_keys'
OPENBOX_KEYS_FILE =
#

OPENBOX_KEYS_FILE

#
USER_HOME_DIR+'openbox_keys'
STD_COMMENT =
#

STD_COMMENT

#
'# ======================================================================== #'
STD_COMMENT_N =
#

STD_COMMENT_N

As above, but with a trailing newline.

#
STD_COMMENT+N

Constants inherited from Base

Base::COLOURS, Base::HOME_DIRECTORY_OF_USER_X, Base::NAMESPACE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#actions, #append_this_onto_that_file, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #burlywood, #call_next, #chdir, #cheerful_guy, #cliner, #complex_esystem, #convert_global_env, #copy_directory, #copy_file, #cornflowerblue, #create_directory, #crimson, #current_month?, #current_time?, #current_year?, #cyan, #darkcyan, #darkgreen, #darkkhaki, #darkslateblue, #deeppink, #delete_symlink, #do_not_use_the_base_colours, #do_use_the_base_colours, #e, #ecomment, #editor_to_use?, #efancy, #eimp, #emphasis, #ensure_main_encoding, #ensure_utf_encoding, #eparse, #erev, #esteelblue, #etomato, #ewarn, #exit_program, #firebrick, #get_current_day, #get_current_month, #get_files_and_directories, #get_files_from, #get_german_name_for_this_weekday, #gold, #green, #grey, #hh_mm_ss, #hh_mm_ss_day_month_year, #home_dir?, #home_directory_of_user_x?, #infer_the_namespace, #internal_hash?, #is_a_directory?, #is_a_file?, #is_a_jpg_file?, #is_an_image_file?, #is_archive?, #is_audio_file?, #is_in_studium_dir?, #is_multimedia_file?, #is_on_roebe?, #is_on_windows?, #is_studium_available?, #is_symlink?, #is_this_a_ruby_file?, #is_video_file?, #iso_encoding?, #le, #left_colour, #lightblue, #lightgreen, #lightseagreen, #lightsteelblue, #lime, #limegreen, #localhost_to_data, #log_directory?, #main_encoding?, #mediumorchid, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mkdir_p, #mv, #n_days_in_this_month, #n_pages_in_this_pdf_file?, #namespace?, #no_file_exists_at, #ogrey, #olive, #olivedrab, #open_in_browser, #opne, #opnesystem, #opnn, #orange, #orchid, #orev, #palegoldenrod, #palevioletred, #pink, #powderblue, #programs_dir?, #project_base_dir?, #random_html_colour, #rds, #read_file_in_iso_encoding, #read_file_via_the_default_encoding, #read_lines_via_iso_encoding, #readlines_with_main_encoding, #red, #register_sigint, #remove, #remove_directory, #remove_file, #rename_kde_konsole_tab, #replace_localhost_with_data, #report_pwd, #require_rescue, #reset_the_internal_hash, #return_all_directories_from_this_directory, #return_all_files_from_this_directory, #return_current_directory, #return_dd_mm_yyyy, #return_file_or_directory_of, #return_files_from_pwd, #return_last_part_of_the_current_directory, #return_utc, #rev, #right_arrow?, #right_colour, #roebe_log_directory?, #rosybrown, #royalblue, #ruby_base_directory?, #run_in_background, #run_rcfiles_then_run_ata_via_qdbus, #sandybrown, #sdir, #seagreen, #set_be_verbose, #set_xorg_buffer, #sfancy, #sfile, #show_help, #silent_redirection?, #simp, #simple_esystem, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #string_italic, #swarn, #symlink, #teal, #temp_dir?, #to_camelcase, #to_counted_hash, #tomato, #touch, #try_to_require_the_beautiful_url_gem, #try_to_require_the_html_template, #try_to_require_the_open_gem, #try_to_require_the_program_information_gem, #try_to_require_the_xorg_buffer, #use_colours?, #verbose_truth, #weekday?, #word_wrap, #write_what_into, #yellow

Methods included from Base::CommandlineArguments

#append_onto_the_commandline_arguments, #clear_commandline_arguments, #commandline_arguments?, #commandline_arguments_as_string?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_argument_without_leading_hyphens?, #has_an_argument_been_passed?, #remove_hyphened_arguments_from_the_commandline_arguments, #return_commandline_arguments_with_leading_hyphens, #second_argument?, #set_commandline_arguments

Constructor Details

#initialize(i = nil, run_already = true) ⇒ KeysGenerator

#

initialize

#


25
26
27
28
29
30
31
32
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 25

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_input(i)
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

[]

#


320
321
322
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 320

def self.[](i = '')
  new(i)
end

Instance Method Details

#create_key_file(i) ⇒ Object

#

create_key_file

Create the individual key files here.

#


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
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 160

def create_key_file(i)
  opn; e 'Now creating keys file for `'+simp(i)+'`.'
  flag_for_strg, flag_for_win = true, true
  case i
  # ======================================================================= #
  # Fluxbox tag. Flux tag.
  # ======================================================================= #
  when :fluxbox
    generate_fluxbox_keys_file(flag_for_strg, flag_for_win)
  # ======================================================================= #
  # icewm tag
  # ======================================================================= #
  when :icewm
    delete(ICEWM_KEYS_FILE)
    mkdir USER_HOME_DIR_ICEWM
    generate_header_for(ICEWM_KEYS_FILE)
    # next if blabla is fluxbox specific blabla
    # ARRAY_FLUXBOX_SPECIFIC_ENTRIES
    @dataset.each { |key, value|
      _ = 'key "'
      begin
        key = key.to_s.capitalize
      rescue ArgumentError; end # Rescue faulty Encoding here.
      _ << key.to_s+'" '+value.to_s
      append_what_into(_, ICEWM_KEYS_FILE)
    }
    append_what_into(N,ICEWM_KEYS_FILE)
    opn; e sfile(ICEWM_KEYS_FILE)+' created.'
  # ======================================================================= #
  # openbox tag
  # ======================================================================= #
  when :openbox
    delete(OPENBOX_KEYS_FILE)
    generate_header_for(OPENBOX_KEYS_FILE)
    # Openbox stores in rc.xml
    dataset?.each { |key, value|
      key = key.to_s.dup
      key = key.force_encoding("ASCII-8BIT")
      key.gsub!(/\+/,'-')
      append_what_into('
<keybind key="'+key+'">
  <action name="'+value.to_s+'"/>
</keybind>"',OPENBOX_KEYS_FILE)
    }
    append_what_into(N,OPENBOX_KEYS_FILE)
    opn; e sfile(OPENBOX_KEYS_FILE)+' created.'
  end
end

#create_keys_file(which_one = :all) ⇒ Object

#

create_keys_file

Generate our various keyfiles here.

#


47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 47

def create_keys_file(which_one = :all)
  case which_one
  when :fluxbox
    create_key_file(:fluxbox)
  when :all
    create_key_file(:fluxbox)
    create_key_file(:icewm)
    create_key_file(:openbox)
  when :icewm
    create_key_file(:icem)
  when :openbox
    create_key_file(:openbox)
  end
end

#dataset?Boolean

#

dataset?

#

Returns:

  • (Boolean)


257
258
259
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 257

def dataset?
  @dataset
end

#delete(i) ⇒ Object

#

delete

#


212
213
214
215
216
217
218
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 212

def delete(i)
  if i.is_a? Array
    i.each {|entry| delete(entry) }
  else
    FileUtils.rm(i) if File.exist?(i)
  end
end

#generate_fluxbox_keys_file(flag_for_strg = false, flag_for_win = false) ⇒ Object

#

generate_fluxbox_keys_file

#


65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 65

def generate_fluxbox_keys_file(flag_for_strg = false, flag_for_win = false)
  _ = FLUXBOX_KEYS_FILE # Obtain a handle first.
  _ = [_] unless _.is_a? Array
  # ======================================================================= #
  # Now we are ready to iterate through.
  # ======================================================================= #
  _.each {|file|
    delete(file)
    generate_header_for(file)
    # ===================================================================== #
    # Add static info to it
    # ===================================================================== #
    _ = 'OnDesktop Mouse1 :HideMenus
OnDesktop Mouse2 :WorkspaceMenu
OnDesktop Mouse3 :RootMenu
OnDesktop Mouse4 :NextWorkspace
OnDesktop Mouse5 :PrevWorkspace'
    append_what_into(_+N, file)
    dataset?.each { |key, value|
      if value.is_a? Symbol
        value = ':'+value.to_s
      else
        value = value.to_s
      end
      unless key.valid_encoding? # Intercept incorrect encodings here.
        key = key.to_s.dup
        key = key.force_encoding('ASCII-8BIT')
      end
      if key.count('+') == 1 # Abfangen von genau einem '+' Zeichen. 
        # next process the alt key
        if key.include? 'alt+'
          key = key.gsub(/alt\+/,'Mod1 ')
          real_key = key.split(' ')[1]
          append_what_into(
            key+' :ExecCommand '+value+' # ALT+'+real_key+' to start '+value+N,
            file)
        elsif key.include? 'strg+' # process strg-key here
          key = key.gsub(/strg\+/,'Control ')
          real_key = key.split(' ')[1]
          if flag_for_strg
            append_what_into(N+N, file)
            append_what_into(STD_COMMENT+N, file)
            append_what_into('# Control key, also known as STRG key'+N,
              file)
            append_what_into(STD_COMMENT+N, file)
            flag_for_strg = false
          end
          append_what_into(
            key+' :ExecCommand '+value+' # STRG+'+real_key+
            ' to start (STRG is also known as the Control key) '+value+N,
            file)
        elsif key.include? 'win+' # process Windows-key here
          key = key.gsub(/win\+/,'Mod4 ')
          real_key = key.split(' ')[1]
          if flag_for_win
            append_what_into(N+N,file)
            append_what_into(STD_COMMENT+N,file)
            append_what_into('# Mod4 aka Windows-key section '+N,file)
            append_what_into(STD_COMMENT+N,file)
            flag_for_win = false
          end
          padding_value = 45
          if value.start_with? ':'
            # ============================================================= #
            # Found a fluxbox command, such as :Close
            # ============================================================= #
            padded = (key+' '+value).ljust(padding_value)
            append_what_into(
              padded+' # WIN+'+real_key+' to '+value+N,file)
          else # must use : too
            padded = (key+' :ExecCommand '+value).ljust(padding_value) # This will be properly padded.
            append_what_into(
              padded+' # WIN+'+real_key+' to start: '+value+N, file)
          end
        end
      elsif key.count('+') > 1 # key count 2 oder mehr
        key = replace_keywords(key)
        append_what_into(
          key.capitalize+' :ExecCommand '+value+' # '+N, file)
      else # key count 0
        # "win+alt+num7": ":Resize -10 -10" # WIN+ALT+NUM7
        key = replace_keywords(key)
        append_what_into(key+' :ExecCommand '+value+' # '+N, file)
      end
    }
    append_what_into(N, file)
    opn; e '`'+sfile(file)+'` created.'
  }
end

#generate_header_for(which_file) ⇒ Object

generate_header_for

This method generates the header.

#


281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 281

def generate_header_for(which_file)
  if which_file.is_a? Array
    which_file.each {|entry| generate_header_for(entry) }
  else
    # if FLUXBOX_KEYS_FILE.include? File.basename(
if false
      #if File.basename(which_file) == File.basename(FLUXBOX_KEYS_FILE)
    _ =  "#{STD_COMMENT}
# Have Fun With Fluxbox (Autogenerated file from #{File.basename(__FILE__)})
#{STD_COMMENT_N}"

  _ << "
#{STD_COMMENT}
# file   : #{FLUXBOX_KEYS_FILE} 
# about  : Fluxbox key bindings  
# author : "+MAINTAINER_INFORMATION+N+STD_COMMENT_N
    append_what_into( _+N,which_file)
end
  # Finally write the file in question.
  append_what_into(
    STD_COMMENT_N+
    '# This is a header file for '+
    File.basename(which_file.to_s)+N+
    '# It contains several key entries.'+N+
    STD_COMMENT_N,which_file)
  end
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


232
233
234
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 232

def input?
  @input
end

#load_yaml_datasetObject

#

load_yaml_dataset

Loads our yaml dataset and prepares it as well.

The keys file can be found here:

bl $LINUX/YAML/keys.yml
#


244
245
246
247
248
249
250
251
252
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 244

def load_yaml_dataset
  keys_file = LINUX_YAML+'keys.yml'
  @dataset = YAML.load_file(keys_file)
  # Sort the dataset nicely.
  @dataset = @dataset.sort { |a, b| 
    l = a[0].length <=> b[0].length
    l == 0 ? a <=> b : l 
  }
end

#replace_keywords(i) ⇒ Object

#

replace_keywords

Replaces various keywords.

#


266
267
268
269
270
271
272
273
274
275
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 266

def replace_keywords(i)
  i = i.dup
  i[0,1] = 'F' if i =~ /f\d+/ # Upcase Function keys.
  i.gsub!(/alt\+/,  'Mod1 ')
  i.gsub!(/win\+/,  'Mod4 ')
  i.gsub!(/strg\+/, 'Control ')
  i.gsub!(/num7/,   'KP_Home4 ')
  i.gsub!(/num8/,   'KP_Up ')
  return i
end

#resetObject

#

reset (reset tag)

#


37
38
39
40
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 37

def reset
  super()
  infer_the_namespace
end

#runObject

#

run (run tag)

#


312
313
314
315
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 312

def run
  load_yaml_dataset
  create_keys_file(:all)
end

#set_input(i = '') ⇒ Object

#

set_input

#


223
224
225
226
227
# File 'lib/roebe/classes/keys_generator/keys_generator.rb', line 223

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup
  @input = i
end