From c339389d44dcfb0b4dbe4f37a31ab2fa054d47f5 Mon Sep 17 00:00:00 2001 From: bbedward Date: Tue, 17 Feb 2026 22:28:19 -0500 Subject: [PATCH] screenshot: adjust cursor CLI option to be more explicit --- core/cmd/dms/commands_screenshot.go | 28 ++++++++------- core/internal/screenshot/region.go | 2 +- core/internal/screenshot/screenshot.go | 10 ++---- core/internal/screenshot/types.go | 47 +++++++++++++++----------- 4 files changed, 45 insertions(+), 42 deletions(-) diff --git a/core/cmd/dms/commands_screenshot.go b/core/cmd/dms/commands_screenshot.go index 61e56811..53e62d63 100644 --- a/core/cmd/dms/commands_screenshot.go +++ b/core/cmd/dms/commands_screenshot.go @@ -13,16 +13,16 @@ import ( ) var ( - ssOutputName string - ssIncludeCursor bool - ssFormat string - ssQuality int - ssOutputDir string - ssFilename string - ssNoClipboard bool - ssNoFile bool - ssNoNotify bool - ssStdout bool + ssOutputName string + ssCursor string + ssFormat string + ssQuality int + ssOutputDir string + ssFilename string + ssNoClipboard bool + ssNoFile bool + ssNoNotify bool + ssStdout bool ) var screenshotCmd = &cobra.Command{ @@ -52,7 +52,7 @@ Examples: dms screenshot last # Last region (pre-selected) dms screenshot --no-clipboard # Save file only dms screenshot --no-file # Clipboard only - dms screenshot --cursor # Include cursor + dms screenshot --cursor=on # Include cursor dms screenshot -f jpg -q 85 # JPEG with quality 85`, } @@ -111,7 +111,7 @@ var notifyActionCmd = &cobra.Command{ func init() { screenshotCmd.PersistentFlags().StringVarP(&ssOutputName, "output", "o", "", "Output name for 'output' mode") - screenshotCmd.PersistentFlags().BoolVar(&ssIncludeCursor, "cursor", false, "Include cursor in screenshot") + screenshotCmd.PersistentFlags().StringVar(&ssCursor, "cursor", "off", "Include cursor in screenshot (on/off)") screenshotCmd.PersistentFlags().StringVarP(&ssFormat, "format", "f", "png", "Output format (png, jpg, ppm)") screenshotCmd.PersistentFlags().IntVarP(&ssQuality, "quality", "q", 90, "JPEG quality (1-100)") screenshotCmd.PersistentFlags().StringVarP(&ssOutputDir, "dir", "d", "", "Output directory") @@ -136,7 +136,9 @@ func getScreenshotConfig(mode screenshot.Mode) screenshot.Config { config := screenshot.DefaultConfig() config.Mode = mode config.OutputName = ssOutputName - config.IncludeCursor = ssIncludeCursor + if strings.EqualFold(ssCursor, "on") { + config.Cursor = screenshot.CursorOn + } config.Clipboard = !ssNoClipboard config.SaveFile = !ssNoFile config.Notify = !ssNoNotify diff --git a/core/internal/screenshot/region.go b/core/internal/screenshot/region.go index 494df85c..6c90d3cf 100644 --- a/core/internal/screenshot/region.go +++ b/core/internal/screenshot/region.go @@ -108,7 +108,7 @@ func NewRegionSelector(s *Screenshoter) *RegionSelector { screenshoter: s, outputs: make(map[uint32]*WaylandOutput), preCapture: make(map[*WaylandOutput]*PreCapture), - showCapturedCursor: true, + showCapturedCursor: s.config.Cursor == CursorOn, } } diff --git a/core/internal/screenshot/screenshot.go b/core/internal/screenshot/screenshot.go index a83fbccd..e22ee5ac 100644 --- a/core/internal/screenshot/screenshot.go +++ b/core/internal/screenshot/screenshot.go @@ -453,10 +453,7 @@ func (s *Screenshoter) blitBuffer(dst, src *ShmBuffer, dstX, dstY int, yInverted } func (s *Screenshoter) captureWholeOutput(output *WaylandOutput) (*CaptureResult, error) { - cursor := int32(0) - if s.config.IncludeCursor { - cursor = 1 - } + cursor := int32(s.config.Cursor) frame, err := s.screencopy.CaptureOutput(cursor, output.wlOutput) if err != nil { @@ -624,10 +621,7 @@ func (s *Screenshoter) captureRegionOnOutput(output *WaylandOutput, region Regio } } - cursor := int32(0) - if s.config.IncludeCursor { - cursor = 1 - } + cursor := int32(s.config.Cursor) frame, err := s.screencopy.CaptureOutputRegion(cursor, output.wlOutput, localX, localY, w, h) if err != nil { diff --git a/core/internal/screenshot/types.go b/core/internal/screenshot/types.go index e7d8507d..ca7e4b12 100644 --- a/core/internal/screenshot/types.go +++ b/core/internal/screenshot/types.go @@ -19,6 +19,13 @@ const ( FormatPPM ) +type CursorMode int + +const ( + CursorOff CursorMode = iota + CursorOn +) + type Region struct { X int32 `json:"x"` Y int32 `json:"y"` @@ -42,29 +49,29 @@ type Output struct { } type Config struct { - Mode Mode - OutputName string - IncludeCursor bool - Format Format - Quality int - OutputDir string - Filename string - Clipboard bool - SaveFile bool - Notify bool - Stdout bool + Mode Mode + OutputName string + Cursor CursorMode + Format Format + Quality int + OutputDir string + Filename string + Clipboard bool + SaveFile bool + Notify bool + Stdout bool } func DefaultConfig() Config { return Config{ - Mode: ModeRegion, - IncludeCursor: false, - Format: FormatPNG, - Quality: 90, - OutputDir: "", - Filename: "", - Clipboard: true, - SaveFile: true, - Notify: true, + Mode: ModeRegion, + Cursor: CursorOff, + Format: FormatPNG, + Quality: 90, + OutputDir: "", + Filename: "", + Clipboard: true, + SaveFile: true, + Notify: true, } }