Class: Textbringer::GlobalMinorMode

Inherits:
Object
  • Object
show all
Extended by:
Commands
Includes:
Commands
Defined in:
lib/textbringer/global_minor_mode.rb

Overview

Base class for global minor modes that affect all buffers. Unlike buffer-local MinorMode, global minor modes have a single on/off state.

Direct Known Subclasses

TransientMarkMode

Constant Summary

Constants included from Commands

Commands::CLIPBOARD_AVAILABLE, Commands::CTAGS, Commands::EMAIL_REGEXP, Commands::HELP_RING, Commands::ISEARCH_STATUS, Commands::ISPELL_STATUS, Commands::ISPELL_WORD_REGEXP, Commands::KEYBOARD_MACROS, Commands::REGISTERS, Commands::RE_SEARCH_STATUS, Commands::URI_REGEXP

Constants included from Utils

Utils::COMPLETION, Utils::EXPRESSION_COMPLETOR, Utils::EXPRESSION_COMPLETOR_OPTIONS, Utils::HOOKS

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Commands

[], command_help, command_table, current_prefix_arg, define_command, ensure_ispell_active, execute_keyboard_macro, get_tags, isearch_done, isearch_mode, isearch_mode?, isearch_pre_command_hook, isearch_prompt, isearch_repeat, isearch_repeat_backward, isearch_repeat_forward, isearch_search, ispell_done, ispell_forward, ispell_mode, keymap_bindings, list, match_beginning, match_end, match_string, message_misspelled, number_prefix_arg, prefix_numeric_value, read_input_method_name, read_keyboard_macro, read_register, replace_match, undefine_command, universal_argument_mode

Methods included from Utils

add_hook, background, complete_for_minibuffer, delete_completions_window, foreground, foreground!, get_hooks, message, read_buffer, read_char, read_command_name, read_encoding, read_event, read_expression, read_file_name, read_from_minibuffer, read_key_sequence, read_object, read_single_char, received_keyboard_quit?, remove_hook, ruby_install_name, run_hooks, run_hooks_in, self_insert_and_exit_minibuffer, set_transient_map, show_exception, sit_for, sleep_for, y_or_n?, yes_or_no?

Class Attribute Details

.command_nameObject

Returns the value of attribute command_name.



10
11
12
# File 'lib/textbringer/global_minor_mode.rb', line 10

def command_name
  @command_name
end

.mode_nameObject

Returns the value of attribute mode_name.



9
10
11
# File 'lib/textbringer/global_minor_mode.rb', line 9

def mode_name
  @mode_name
end

Class Method Details

.disableObject

Raises:



67
68
69
# File 'lib/textbringer/global_minor_mode.rb', line 67

def self.disable
  raise EditorError, "Subclass must implement disable"
end

.enableObject

Override these in subclasses

Raises:



63
64
65
# File 'lib/textbringer/global_minor_mode.rb', line 63

def self.enable
  raise EditorError, "Subclass must implement enable"
end

.enabled=(val) ⇒ Object



12
13
14
# File 'lib/textbringer/global_minor_mode.rb', line 12

def enabled=(val)
  @enabled = val
end

.enabled?Boolean

Returns:

  • (Boolean)


16
# File 'lib/textbringer/global_minor_mode.rb', line 16

def enabled? = @enabled

.inherited(child) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/textbringer/global_minor_mode.rb', line 19

def self.inherited(child)
  # Initialize enabled to false immediately
  child.instance_variable_set(:@enabled, false)

  class_name = child.name
  if class_name.nil? || class_name.empty?
    raise ArgumentError, "GlobalMinorMode subclasses must be named classes (anonymous classes are not supported)"
  end

  base_name = class_name.slice(/[^:]*\z/)
  child.mode_name = base_name.sub(/Mode\z/, "")
  command_name = base_name.sub(/\A[A-Z]/) { |s| s.downcase }.
    gsub(/(?<=[a-z])([A-Z])/) {
      "_" + $1.downcase
    }
  command = command_name.intern
  child.command_name = command

  # Define the toggle command
  define_command(command, doc: "Enable or disable #{command_name}.  " \
                 "Toggle the mode if arg is nil.  " \
                 "Enable the mode if arg is true.  " \
                 "Disable the mode if arg is false") do |arg = nil|
    enable =
      case arg
      when true, false
        return if child.enabled? == arg
        arg
      when nil
        !child.enabled?
      else
        raise ArgumentError, "wrong argument #{arg.inspect} (expected true, false, or nil)"
      end
    if enable
      child.enable
      child.enabled = true
    else
      child.disable
      child.enabled = false
    end
  end
end