Sha256: 7b8daebc77b5ce0912b4d4199ffeae7a700e7c99c1d95cbdc6669a607c857f1b

Contents?: true

Size: 1.08 KB

Versions: 1

Compression:

Stored size: 1.08 KB

Contents

module VER
  module Methods
    module Macro
      module_function

      def enter(buffer, old_mode, new_mode)
        name = buffer.events.last.unicode
        buffer.store(self, :current, name)
      end

      def leave(buffer, old_mode, new_mode)
        history = []
        name = buffer.store(self, :current)
        macro_invocation = [:minor_mode, MinorMode[:control], :macro]

        buffer.actions.reverse_each do |widget, mode, action|
          break if action.invocation == macro_invocation
          history << ->{ action.call(widget) }
        end

        buffer.store(self, name, history.reverse)
      end

      def repeat(buffer)
        if actions = buffer.store(self, current(buffer))
          actions.each(&:call)
        else
          buffer.warn("No macro used yet")
        end
      end

      def play(buffer, name)
        if actions = buffer.store(self, name)
          actions.each(&:call)
        else
          buffer.warn("No macro called %p" % [name])
        end
      end

      def current(buffer)
        buffer.store(self, :current)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ver-2010.08 lib/ver/methods/macro.rb