I’ve written a million columns critical of Donald Trump, give or take. This one is in praise.

His campaign was a toxic stew of dog whistles to white nationalists and at times overt anti-Semitism. He continued during his first weeks in office to flirt with the racist fringe; his administration excised any mention of Jews from a statement on the Holocaust; he suggested that the rise in anti-Semitic threats and violence since his election might be a false-flag campaign orchestrated by Jews; he repeatedly hesitated to disavow anti-Semitism; and his spokesman perversely claimed that the Jews Adolf Hitler gassed weren’t “his own people.”

But give him credit for this: Trump’s speech in the Capitol Rotunda this week for the U.S. Holocaust Memorial Museum’s Yom Hashoah remembrance ceremony was spot-on. Some highlights:

“The survivors in this hall, through their testimony, fulfill the righteous duty to never forget and engrave into the world’s memory the Nazi genocide of the Jewish people.”

“For the dead and the living we must bear witness. That is why we are here today, to remember and to bear witness, to make sure that humanity never, ever forgets.”

“The Nazis massacred 6 million Jews. Two out of every three Jews in Europe were murdered in the genocide. . . . Yet even today, there are those who want to forget the past. Worse still, there are even those filled with such hate, total hate, that they want to erase the Holocaust from history. Those who deny the Holocaust are an accomplice to this horrible evil.”

“We’ve seen anti-Semitism on university campuses, in the public square and in threats against Jewish citizens. Even worse, it’s been on display in the most sinister manner when terrorists attack Jewish communities, or when aggressors threaten Israel with total and complete destruction. This is my pledge to you: We will confront anti-Semitism.”

[Holocaust speech shows Trump may be growing up]

Yes, he was reading from a teleprompter a speech somebody wrote for him. His delivery was prosaic and he occasionally repeated a phrase he liked as if reading the speech for the first time, which perhaps he was. So what? At least he gave the speech.

I don’t pretend to know whether Trump has changed in his heart. His campaign was so laced with bigotry toward African Americans, Latinos and immigrants that the anti-Semitism was just one outrage. But his Holocaust speech and similar words in a video and a White House statement in recent days suggest that Trump has the capacity to adjust. And that’s welcome news.

His first 100 days have been a disaster: No health-care reform, no travel ban, a passel of unmet promises, international confusion, historically low support. He has resorted to creating a fake sense of momentum with executive orders — the kind of governing he and his allies decried when President Barack Obama did it.

But Trump has never been a man of consistent principles, and he has shown that he’s willing to jettison his campaign program, changing his positions on China, trade, the debt, the influence of lobbyists and others. He has apparently backed down from his promise to build a wall, to avoid a government shutdown. I don’t expect some broad transformation, but if he’s moving even tentatively or temporarily in the right direction — in this case, shifting from his courtship of Steve Bannon’s alt-right nationalists — he should be encouraged.

The Hill absurdly criticized Trump’s Holocaust remembrance proclamation for using “similar wording to the Holocaust Museum website” when it said, “The Holocaust was the state-sponsored systematic persecution and attempted annihilation of European Jewry by the Nazi regime and its collaborators.” The White House should be praised for echoing the museum’s description of the Shoah.

My friend Peter Beinart quibbled in the Atlantic with Trump’s speech for failing to acknowledge that “the Holocaust creates obligations to protect the dignity of all people, not just Jews.” That’s true, but given Trump’s history, he needed to make a full-throated acknowledgment of Jews’ suffering.

After a campaign that trafficked in the filth of anti-Semitism — tweeting an image showing a Star of David atop a pile of cash; retweeting messages from white supremacists; refusing to condemn anti-Semitic threats against Jewish journalists; granting access and interviews to white-nationalist outlets; and closing with an ad showing prominent Jews juxtaposed with warnings of an international banking conspiracy — Trump needed to speak clearly.

This week, he spoke. “Today, we remember the 6 million Jewish men, women and children whose lives and dreams were stolen from this Earth,” he said. “. . . We remember the hatred and evil that sought to extinguish human life, dignity and freedom.” And, crucially, he added: “Today we mourn, we remember, we pray and we pledge: Never again.”

Well said, Mr. President.

Twitter: @Milbank

Read more from Dana Milbank’s archive, follow him on Twitter or subscribe to his updates on Facebook.