[3.6] bpo-29910: IDLE no longer deletes a character after commenting … · python/cpython@8bdc3bd (original) (raw)

1

``

`-

import importlib

`

2

1

`import importlib.abc

`

3

2

`import importlib.util

`

4

3

`import os

`

`@@ -147,7 +146,7 @@ def init(self, flist=None, filename=None, key=None, root=None):

`

147

146

`text.bind("<>", self.python_docs)

`

148

147

`text.bind("<>", self.about_dialog)

`

149

148

`text.bind("<>", self.config_dialog)

`

150

``

`-

text.bind("<>", self.open_module)

`

``

149

`+

text.bind("<>", self.open_module_event)

`

151

150

`text.bind("<>", lambda event: "break")

`

152

151

`text.bind("<>", self.select_all)

`

153

152

`text.bind("<>", self.remove_selection)

`

`@@ -294,7 +293,7 @@ def new_callback(self, event):

`

294

293

`def home_callback(self, event):

`

295

294

`if (event.state & 4) != 0 and event.keysym == "Home":

`

296

295

`# state&4==Control. If , use the Tk binding.

`

297

``

`-

return

`

``

296

`+

return None

`

298

297

`if self.text.index("iomark") and \

`

299

298

`self.text.compare("iomark", "<=", "insert lineend") and \

`

300

299

`self.text.compare("insert linestart", "<=", "iomark"):

`

`@@ -423,6 +422,7 @@ def right_menu_event(self, event):

`

423

422

`rmenu.tk_popup(event.x_root, event.y_root)

`

424

423

`if iswin:

`

425

424

`self.text.config(cursor="ibeam")

`

``

425

`+

return "break"

`

426

426

``

427

427

`rmenu_specs = [

`

428

428

`# ("Label", "<>", "statefuncname"), ...

`

`@@ -464,11 +464,13 @@ def about_dialog(self, event=None):

`

464

464

`"Handle Help 'About IDLE' event."

`

465

465

`# Synchronize with macosx.overrideRootMenu.about_dialog.

`

466

466

`help_about.AboutDialog(self.top)

`

``

467

`+

return "break"

`

467

468

``

468

469

`def config_dialog(self, event=None):

`

469

470

`"Handle Options 'Configure IDLE' event."

`

470

471

`# Synchronize with macosx.overrideRootMenu.config_dialog.

`

471

472

`configdialog.ConfigDialog(self.top,'Settings')

`

``

473

`+

return "break"

`

472

474

``

473

475

`def help_dialog(self, event=None):

`

474

476

`"Handle Help 'IDLE Help' event."

`

`@@ -478,6 +480,7 @@ def help_dialog(self, event=None):

`

478

480

`else:

`

479

481

`parent = self.top

`

480

482

`help.show_idlehelp(parent)

`

``

483

`+

return "break"

`

481

484

``

482

485

`def python_docs(self, event=None):

`

483

486

`if sys.platform[:3] == 'win':

`

`@@ -497,7 +500,7 @@ def cut(self,event):

`

497

500

`def copy(self,event):

`

498

501

`if not self.text.tag_ranges("sel"):

`

499

502

`# There is no selection, so do nothing and maybe interrupt.

`

500

``

`-

return

`

``

503

`+

return None

`

501

504

`self.text.event_generate("<>")

`

502

505

`return "break"

`

503

506

``

`@@ -515,6 +518,7 @@ def select_all(self, event=None):

`

515

518

`def remove_selection(self, event=None):

`

516

519

`self.text.tag_remove("sel", "1.0", "end")

`

517

520

`self.text.see("insert")

`

``

521

`+

return "break"

`

518

522

``

519

523

`def move_at_edge_if_selection(self, edge_index):

`

520

524

`"""Cursor move begins at start or end of selection

`

`@@ -575,8 +579,9 @@ def goto_line_event(self, event):

`

575

579

`return "break"

`

576

580

`text.mark_set("insert", "%d.0" % lineno)

`

577

581

`text.see("insert")

`

``

582

`+

return "break"

`

578

583

``

579

``

`-

def open_module(self, event=None):

`

``

584

`+

def open_module(self):

`

580

585

`"""Get module name from user and open it.

`

581

586

``

582

587

` Return module path or None for calls by open_class_browser

`

`@@ -600,21 +605,27 @@ def open_module(self, event=None):

`

600

605

`self.io.loadfile(file_path)

`

601

606

`return file_path

`

602

607

``

``

608

`+

def open_module_event(self, event):

`

``

609

`+

self.open_module()

`

``

610

`+

return "break"

`

``

611

+

603

612

`def open_class_browser(self, event=None):

`

604

613

`filename = self.io.filename

`

605

614

`if not (self.class.name == 'PyShellEditorWindow'

`

606

615

`and filename):

`

607

616

`filename = self.open_module()

`

608

617

`if filename is None:

`

609

``

`-

return

`

``

618

`+

return "break"

`

610

619

`head, tail = os.path.split(filename)

`

611

620

`base, ext = os.path.splitext(tail)

`

612

621

`from idlelib import browser

`

613

622

`browser.ClassBrowser(self.flist, base, [head])

`

``

623

`+

return "break"

`

614

624

``

615

625

`def open_path_browser(self, event=None):

`

616

626

`from idlelib import pathbrowser

`

617

627

`pathbrowser.PathBrowser(self.flist)

`

``

628

`+

return "break"

`

618

629

``

619

630

`def open_turtle_demo(self, event = None):

`

620

631

`import subprocess

`

`@@ -623,6 +634,7 @@ def open_turtle_demo(self, event = None):

`

623

634

`'-c',

`

624

635

`'from turtledemo.main import main; main()']

`

625

636

`subprocess.Popen(cmd, shell=False)

`

``

637

`+

return "break"

`

626

638

``

627

639

`def gotoline(self, lineno):

`

628

640

`if lineno is not None and lineno > 0:

`

`@@ -879,6 +891,7 @@ def long_title(self):

`

879

891

``

880

892

`def center_insert_event(self, event):

`

881

893

`self.center()

`

``

894

`+

return "break"

`

882

895

``

883

896

`def center(self, mark="insert"):

`

884

897

`text = self.text

`

`@@ -910,6 +923,7 @@ def get_geometry(self):

`

910

923

``

911

924

`def close_event(self, event):

`

912

925

`self.close()

`

``

926

`+

return "break"

`

913

927

``

914

928

`def maybesave(self):

`

915

929

`if self.io:

`

`@@ -1357,6 +1371,7 @@ def comment_region_event(self, event):

`

1357

1371

`line = lines[pos]

`

1358

1372

`lines[pos] = '##' + line

`

1359

1373

`self.set_region(head, tail, chars, lines)

`

``

1374

`+

return "break"

`

1360

1375

``

1361

1376

`def uncomment_region_event(self, event):

`

1362

1377

`head, tail, chars, lines = self.get_region()

`

`@@ -1370,6 +1385,7 @@ def uncomment_region_event(self, event):

`

1370

1385

`line = line[1:]

`

1371

1386

`lines[pos] = line

`

1372

1387

`self.set_region(head, tail, chars, lines)

`

``

1388

`+

return "break"

`

1373

1389

``

1374

1390

`def tabify_region_event(self, event):

`

1375

1391

`head, tail, chars, lines = self.get_region()

`

`@@ -1382,6 +1398,7 @@ def tabify_region_event(self, event):

`

1382

1398

`ntabs, nspaces = divmod(effective, tabwidth)

`

1383

1399

`lines[pos] = '\t' * ntabs + ' ' * nspaces + line[raw:]

`

1384

1400

`self.set_region(head, tail, chars, lines)

`

``

1401

`+

return "break"

`

1385

1402

``

1386

1403

`def untabify_region_event(self, event):

`

1387

1404

`head, tail, chars, lines = self.get_region()

`

`@@ -1390,6 +1407,7 @@ def untabify_region_event(self, event):

`

1390

1407

`for pos in range(len(lines)):

`

1391

1408

`lines[pos] = lines[pos].expandtabs(tabwidth)

`

1392

1409

`self.set_region(head, tail, chars, lines)

`

``

1410

`+

return "break"

`

1393

1411

``

1394

1412

`def toggle_tabs_event(self, event):

`

1395

1413

`if self.askyesno(

`