diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb
index 2771d06f7990e000bd187afe85af000892992d96..3914b455a55f798a3c5bebdd99d6eb2d24fad0fe 100644
--- a/Library/Homebrew/cmd/search.rb
+++ b/Library/Homebrew/cmd/search.rb
@@ -52,16 +52,17 @@ module Homebrew
       return
     end
 
-    if args.remaining.empty?
+    if args.remaining.empty? && !args.desc?
       puts Formatter.columns(Formula.full_names.sort)
-    elsif args.desc?
-      query = args.remaining.join(" ")
-      string_or_regex = query_regexp(query)
-      Descriptions.search(string_or_regex, :desc).print
-    else
-      query = args.remaining.join(" ")
-      string_or_regex = query_regexp(query)
+      return
+    end
 
+    query = args.remaining.join(" ")
+    string_or_regex = query_regexp(query)
+
+    if args.desc?
+      search_descriptions(string_or_regex)
+    else
       remote_results = search_taps(query, silent: true)
 
       local_formulae = search_formulae(string_or_regex)
diff --git a/Library/Homebrew/extend/os/mac/search.rb b/Library/Homebrew/extend/os/mac/search.rb
index aae84dd7e14c7372a43262df108adc6b398cf3e6..5d1d7cc78a16288a0cf6e9ad1297699f63b715b0 100644
--- a/Library/Homebrew/extend/os/mac/search.rb
+++ b/Library/Homebrew/extend/os/mac/search.rb
@@ -3,24 +3,41 @@ require "hbc/cask_loader"
 
 module Homebrew
   module Search
-    def search_casks(string_or_regex)
-      if string_or_regex.is_a?(String) && string_or_regex.match?(HOMEBREW_TAP_CASK_REGEX)
-        return begin
-          [Hbc::CaskLoader.load(string_or_regex).token]
-        rescue Hbc::CaskUnavailableError
-          []
+    module Extension
+      def search_descriptions(string_or_regex)
+        super
+
+        puts
+
+        ohai "Casks"
+        Hbc::Cask.to_a.extend(Searchable)
+                 .search(string_or_regex, &:name)
+                 .each do |cask|
+          puts "#{Tty.bold}#{cask.token}:#{Tty.reset} #{cask.name.join(", ")}"
         end
       end
 
-      results = Hbc::Cask.search(string_or_regex, &:token).sort_by(&:token)
+      def search_casks(string_or_regex)
+        if string_or_regex.is_a?(String) && string_or_regex.match?(HOMEBREW_TAP_CASK_REGEX)
+          return begin
+            [Hbc::CaskLoader.load(string_or_regex).token]
+          rescue Hbc::CaskUnavailableError
+            []
+          end
+        end
 
-      results.map do |cask|
-        if cask.installed?
-          pretty_installed(cask.token)
-        else
-          cask.token
+        results = Hbc::Cask.search(string_or_regex, &:token).sort_by(&:token)
+
+        results.map do |cask|
+          if cask.installed?
+            pretty_installed(cask.token)
+          else
+            cask.token
+          end
         end
       end
     end
+
+    prepend Extension
   end
 end
diff --git a/Library/Homebrew/search.rb b/Library/Homebrew/search.rb
index 3c78faf27ef96692bbde7a8b0ea88e6df8ff2470..6362e3114f606fe0fb0c0038ff24885c348ab83b 100644
--- a/Library/Homebrew/search.rb
+++ b/Library/Homebrew/search.rb
@@ -12,6 +12,11 @@ module Homebrew
       raise "#{query} is not a valid regex."
     end
 
+    def search_descriptions(string_or_regex)
+      ohai "Formulae"
+      Descriptions.search(string_or_regex, :desc).print
+    end
+
     def search_taps(query, silent: false)
       if query.match?(Regexp.union(HOMEBREW_TAP_FORMULA_REGEX, HOMEBREW_TAP_CASK_REGEX))
         _, _, query = query.split("/", 3)