App-KDEActivityUtils

 view release on metacpan or  search on metacpan

script/move-windows-to-kde-activity  view on Meta::CPAN

#!perl

use 5.010001;
use strict;
use warnings;
use Log::ger;

use Desktop::KDEActivity::Util ();
use App::XWindowManagerUtils ();
use Perinci::CmdLine::Any;
use Perinci::Sub::Util qw(gen_modified_sub);

my $res = gen_modified_sub(
    output_name => 'move_windows_to_kde_activity',
    base_name => 'App::XWindowManagerUtils::list_xwm_windows',
    add_args => {
        activity_name => {
            schema => 'str*',
            req => 1,
            cmdline_aliases => {a=>{}},
        },
    },
    wrap_code => sub {
        my $orig = shift;
        my %args = @_;

        my $activity_name = delete $args{activity_name};

        my $res_list_act = Desktop::KDEActivity::Util::list_kde_activities(detail => 1);
        return [500, "Can't list KDE activities: $res_list_act->[0] - $res_list_act->[1]"]
            unless $res_list_act->[0] == 200;

        my $guid;
        for my $row (@{ $res_list_act->[2] }) {
            if ($row->{name} eq $activity_name) {
                $guid = $row->{guid};
                last;
            }
        }
        return [404, "Can't find KDE activity named '$activity_name'"]
            unless $guid;

        my $res_list_win = $orig->(%args, detail=>1);
        return [500, "Can't list windows: $res_list_win->[0] - $res_list_win->[1]"]
            unless $res_list_win->[0] == 200;

        return [404, "Can't find any matching windows"] unless @{ $res_list_win->[2] };
        for my $win (@{ $res_list_win->[2] }) {
            system "xprop", "-f", "_KDE_NET_WM_ACTIVITIES", "8s", "-id", $win->{id},
                "-set", "_KDE_NET_WM_ACTIVITIES", $guid;
        }

        [200];
    },
);

Perinci::CmdLine::Any->new(
    url => '/main/move_windows_to_kde_activity',
    log => 1,
)->run;

# ABSTRACT: Move windows to a specified KDE activity
# PODNAME: move-windows-to-kde-activity

__END__

=pod

=encoding UTF-8

=head1 NAME

move-windows-to-kde-activity - Move windows to a specified KDE activity

=head1 VERSION

This document describes version 0.004 of move-windows-to-kde-activity (from Perl distribution App-KDEActivityUtils), released on 2026-03-30.

=head1 SYNOPSIS

B<move-windows-to-kde-activity> B<L<--help|/"--help, -h, -?">> (or B<L<-h|/"--help, -h, -?">>, B<L<-?|/"--help, -h, -?">>)

B<move-windows-to-kde-activity> B<L<--version|/"--version, -v">> (or B<L<-v|/"--version, -v">>)

B<move-windows-to-kde-activity> [B<L<--activity-name|/"--activity-name=s*, -a">>=I<str>|B<L<-a|/"--activity-name=s*, -a">>=I<str>] [B<L<--config-path|/"--config-path=s, -c">>=I<path>|B<L<-c|/"--config-path=s, -c">>|B<L<--no-config|/"--no-config, -C">...

=head1 OPTIONS

C<*> marks required options.

=head2 Main options

=over

=item B<--activity-name>=I<s>*, B<-a>

(No description)


=item B<--detail>, B<-l>

(No description)


=item B<--query-json>=I<s>

See C<--query>.



( run in 2.476 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )