11import errno
2+ import logging
23import os
34import sys
45from contextlib import contextmanager
56from typing import Generator
67
78
9+ def _format_size (size_bytes : int ) -> str :
10+ if size_bytes < 1024 :
11+ return f"{ size_bytes } B"
12+ return f"{ size_bytes / 1024 :.1f} KB"
13+
14+
815@contextmanager
916def _handle_broken_pipe () -> Generator [None , None , None ]:
1017 try :
@@ -34,10 +41,11 @@ def _suppress_broken_pipe() -> None:
3441
3542def main () -> None :
3643 from .cli import parse_args
44+ from .clipboard import ClipboardError , copy_to_clipboard
3745 from .ignore import get_ignore_specs
3846 from .logger import setup_logging
3947 from .tree import TreeBuildContext , build_tree
40- from .writer import write_tree_to_file
48+ from .writer import tree_to_string , write_tree_to_file
4149
4250 args = parse_args ()
4351 setup_logging (args .verbosity )
@@ -57,6 +65,17 @@ def main() -> None:
5765 "children" : build_tree (args .root_dir , ctx ),
5866 }
5967
68+ if args .copy :
69+ output_content = tree_to_string (directory_tree , args .output_format )
70+ try :
71+ copy_to_clipboard (output_content )
72+ print (f"Copied to clipboard ({ _format_size (len (output_content ))} )" , file = sys .stderr )
73+ except ClipboardError as e :
74+ logging .warning (f"Clipboard: { e } " )
75+
76+ if args .copy_only and args .output_file is None :
77+ return
78+
6079 if args .output_file is None :
6180 with _handle_broken_pipe ():
6281 write_tree_to_file (directory_tree , args .output_file , args .output_format )
0 commit comments